diff --git a/.cargo-deny.toml b/.cargo-deny.toml index ec2e7c7c29..348dff81e5 100644 --- a/.cargo-deny.toml +++ b/.cargo-deny.toml @@ -9,15 +9,19 @@ no-default-features = true [advisories] ignore = [ { id = "RUSTSEC-2020-0168", reason = "`mach` is unmaintained but a Substrate dependency. Re-verify upon next polkadot-sdk updates." }, - { id = "RUSTSEC-2021-0139", reason = "`ansi_term` is unmaintained but a Substrate dependency. Re-verify upon next polkadot-sdk updates." }, { id = "RUSTSEC-2022-0061", reason = "`parity-wasm` is unmaintained but a Substrate dependency. Re-verify upon next polkadot-sdk updates." }, { id = "RUSTSEC-2022-0080", reason = "`parity-util-mem` is unmaintained but a Substrate dependency. Re-verify upon next polkadot-sdk updates." }, + { id = "RUSTSEC-2023-0091", reason = "`wasmtime` 8.0.1 has a security vulnerability but a Substrate dependency. Re-verify upon next polkadot-sdk updates." }, { id = "RUSTSEC-2024-0336", reason = "`rustls` vulnerability. Re-verify upon next polkadot-sdk updates." }, - { id = "RUSTSEC-2024-0344", reason = "`curve25519-dalek` vulnerability. Re-verify upon next polkadot-sdk updates." }, { id = "RUSTSEC-2024-0370", reason = "`proc-macro-error` is unmaintained but a Substrate dependency. Re-verify upon next polkadot-sdk updates." }, { id = "RUSTSEC-2024-0384", reason = "`instant` is unmaintained but a Substrate dependency. Re-verify upon next polkadot-sdk updates." }, { id = "RUSTSEC-2024-0388", reason = "`derivative` is unmaintained but a Substrate dependency. Re-verify upon next polkadot-sdk updates." }, { id = "RUSTSEC-2024-0421", reason = "`idna` has a security vulnerability but a Substrate dependency. Re-verify upon next polkadot-sdk updates." }, + { id = "RUSTSEC-2024-0436", reason = "`paste` is unmaintained but a Substrate dependency. Re-verify upon next polkadot-sdk updates." }, + { id = "RUSTSEC-2024-0438", reason = "`wasmtime` 8.0.1 has a security vulnerability but a Substrate dependency. Re-verify upon next polkadot-sdk updates." }, + { id = "RUSTSEC-2025-0009", reason = "`ring` has a security vulnerability but a Substrate dependency. Re-verify upon next polkadot-sdk updates." }, + { id = "RUSTSEC-2025-0010", reason = "`ring` 0.16.20 is unmaintained but a Substrate dependency. Re-verify upon next polkadot-sdk updates." }, + { id = "RUSTSEC-2025-0017", reason = "`trust-dns` is unmaintained (renamed) but a Substrate dependency. Re-verify upon next polkadot-sdk updates." }, ] yanked = "deny" @@ -32,14 +36,16 @@ allow = [ "BSD-2-Clause", "BSD-3-Clause", "CC0-1.0", + "CDLA-Permissive-2.0", "GPL-3.0 WITH Classpath-exception-2.0", "GPL-3.0", "ISC", "MIT", + "MIT-0", "MPL-2.0", "OpenSSL", "SSPL-1.0", - "Unicode-DFS-2016", + "Unicode-3.0", "Zlib", ] private = { ignore = false } @@ -51,6 +57,9 @@ license-files = [{ path = "LICENSE", hash = 0xbd0eed23 }] name = "ring" [sources] -allow-git = ["https://github.com/paritytech/polkadot-sdk"] -unknown-git = "deny" +allow-git = [ + "https://github.com/paritytech/polkadot-sdk", + "https://github.com/polytope-labs/hyperbridge", +] +unknown-git = "deny" unknown-registry = "deny" diff --git a/.github/workflows/check-code.yml b/.github/workflows/check-code.yml index 3250b9ff1e..fe03041c84 100644 --- a/.github/workflows/check-code.yml +++ b/.github/workflows/check-code.yml @@ -35,7 +35,7 @@ jobs: name: Run Clippy checks runs-on: ubuntu-latest container: - image: paritytech/ci-unified:bullseye-1.74.0 + image: paritytech/ci-unified:bullseye-1.81.0 env: # Configured by the Docker image. We can't change this unless the image does it. CARGO_HOME: /usr/local/cargo @@ -76,11 +76,11 @@ jobs: name: Check formatting runs-on: ubuntu-latest container: - image: paritytech/ci-unified:bullseye-1.74.0 + image: paritytech/ci-unified:bullseye-1.81.0 env: # Configured by the Docker image. We can't change this unless the image does it. CARGO_HOME: /usr/local/cargo - # Latest nightly version matching the base rustc version (1.74.0). + # Latest nightly version matching the base rustc version (1.18.0). RUSTUP_NIGHTLY_VERSION: nightly-2023-10-02 needs: get-commit-head if: ${{ !contains(needs.get-commit-head.outputs.headCommitMsg, 'ci-skip-rust') }} @@ -132,7 +132,13 @@ jobs: env: working-dir: ./integration-tests/chopsticks CI: true - PEREGRINE_WASM_OVERRIDE: ../../target/debug/wbuild/peregrine-runtime/peregrine_runtime.wasm + SPIRITNET_BLOCK_NUMBER: 7850499 + HYDRATION_BLOCK_NUMBER: 5235787 + POLKADOT_BLOCK_NUMBER: 21010819 + ASSETHUB_BLOCK_NUMBER: 7934113 + SPIRITNET_WASM_OVERRIDE: ../../target/wasm32-unknown-unknown/debug/wbuild/spiritnet-runtime/spiritnet_runtime.wasm + PEREGRINE_WASM_OVERRIDE: ../../target/wasm32-unknown-unknown/debug/wbuild/peregrine-runtime/peregrine_runtime.wasm + defaults: run: working-directory: ${{ env.working-dir }} @@ -148,6 +154,18 @@ jobs: with: tool-cache: true + - name: Set up Cargo cache + uses: actions/cache@v4 + with: + # These paths are mounted inside the Docker container. + # We cannot mount the `.cargo/bin` folder since the container already contains binaries, and overriding with an empty one breaks compilation. + path: | + ~/.cargo/registry/index + ~/.cargo/registry/cache + ~/.cargo/git/db + key: ${{ github.job }}-${{ github.ref }}-${{ matrix.features }}-${{ hashFiles('**/Cargo.lock') }} + save-always: true + - name: Setup environment uses: actions/setup-node@v4 with: @@ -162,23 +180,11 @@ jobs: - name: Check lints run: yarn lint - - name: Set up Cargo cache - uses: actions/cache@v4 - with: - # Not executed in a container, so we cache the local paths as on the GH worker. - path: | - ${HOME}/.cargo/bin/ - ${HOME}/.cargo/registry/index/ - ${HOME}/.cargo/registry/cache/ - ${HOME}/.cargo/git/db/ - key: ${{ github.job }}-${{ github.ref }}-${{ hashFiles('**/Cargo.lock') }} - save-always: true - - - name: Build Peregrine runtime - run: cargo build -p peregrine-runtime + - name: Build runtime wasms + run: cargo build -p peregrine-runtime -p spiritnet-runtime --no-default-features --target wasm32-unknown-unknown - name: Run Chopsticks tests - run: yarn test:CI + run: yarn test cargo-test: name: Run Cargo tests @@ -226,14 +232,14 @@ jobs: -v "${HOME}/.cargo/registry/cache:${{ env.CARGO_HOME }}/registry/cache" \ -v "${HOME}/.cargo/git/db:${{ env.CARGO_HOME }}/git/db" \ -w /workspace \ - paritytech/ci-unified:bullseye-1.74.0 \ + paritytech/ci-unified:bullseye-1.81.0 \ bash -c "cargo test --all-targets --locked ${{ matrix.features }}" cargo-doc: name: Check Rustdoc runs-on: ubuntu-latest container: - image: paritytech/ci-unified:bullseye-1.74.0 + image: paritytech/ci-unified:bullseye-1.81.0 env: # Configured by the Docker image. We can't change this unless the image does it. CARGO_HOME: /usr/local/cargo @@ -270,7 +276,7 @@ jobs: name: Run try-runtime runs-on: ubuntu-latest container: - image: paritytech/ci-unified:bullseye-1.74.0 + image: paritytech/ci-unified:bullseye-1.81.0 env: # Configured by the Docker image. We can't change this unless the image does it. CARGO_HOME: /usr/local/cargo @@ -362,7 +368,7 @@ jobs: -v "${HOME}/.cargo/registry/cache:${{ env.CARGO_HOME }}/registry/cache" \ -v "${HOME}/.cargo/git/db:${{ env.CARGO_HOME }}/git/db" \ -w /workspace \ - paritytech/ci-unified:bullseye-1.74.0 \ + paritytech/ci-unified:bullseye-1.81.0 \ bash -c "bash -x scripts/run_benches_for_runtime.sh ${{ matrix.runtime }} dev" trigger-gitlab: diff --git a/.github/workflows/publish-rustdocs.yml b/.github/workflows/publish-rustdocs.yml index 73ab18a0c4..d262661d5c 100644 --- a/.github/workflows/publish-rustdocs.yml +++ b/.github/workflows/publish-rustdocs.yml @@ -55,7 +55,7 @@ jobs: -v "${HOME}/.cargo:/root/.cargo" \ -e RUSTDOCFLAGS='-D warnings' \ -w /workspace \ - paritytech/ci-unified:bullseye-1.74.0 \ + paritytech/ci-unified:bullseye-1.81.0 \ bash -c " cargo doc --all-features --no-deps --locked && \ mv $DOCS_TARGET/help.html $DOCS_TARGET/index.html && \ diff --git a/.gitignore b/.gitignore index 8ca54a67b6..5ba7f662a0 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,6 @@ runtimes/spiritnet/src/xcm_tests/e2e/out chopsticks/**/db.sqlite* chopsticks/**/extra.yaml chopsticks/**/.tmp.yaml +**/preview + +integration-tests/**/db diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 85f99bfb15..25eb6d750b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -8,7 +8,7 @@ stages: build-production-wasm: image: - name: paritytech/srtool:1.75.0 + name: paritytech/srtool:1.81.0 entrypoint: [""] stage: build parallel: @@ -38,7 +38,7 @@ build-production-wasm: build-try-state-wasm: image: - name: paritytech/ci-unified:bullseye-1.74.0 + name: paritytech/ci-unified:bullseye-1.81.0 stage: build parallel: matrix: diff --git a/Cargo.lock b/Cargo.lock index 1387cac858..7fc3c6733b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -23,18 +23,18 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.22.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ - "gimli 0.29.0", + "gimli 0.31.1", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "aead" @@ -68,7 +68,7 @@ dependencies = [ "cipher 0.4.4", "ctr", "ghash", - "subtle 2.4.1", + "subtle 2.6.1", ] [[package]] @@ -77,7 +77,7 @@ version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.16", "once_cell", "version_check", ] @@ -89,10 +89,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", - "getrandom 0.2.15", + "getrandom 0.2.16", "once_cell", "version_check", - "zerocopy", + "zerocopy 0.7.35", ] [[package]] @@ -106,9 +106,148 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.18" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "alloy-primitives" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0628ec0ba5b98b3370bb6be17b12f23bfce8ee4ad83823325a20546d9b03b78" +dependencies = [ + "alloy-rlp", + "bytes", + "cfg-if", + "const-hex", + "derive_more 0.99.20", + "hex-literal 0.4.1", + "itoa", + "proptest", + "rand 0.8.5", + "ruint", + "serde", + "tiny-keccak", +] + +[[package]] +name = "alloy-primitives" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccb3ead547f4532bc8af961649942f0b9c16ee9226e26caa3f38420651cc0bf4" +dependencies = [ + "alloy-rlp", + "bytes", + "cfg-if", + "const-hex", + "derive_more 0.99.20", + "hex-literal 0.4.1", + "itoa", + "k256", + "keccak-asm", + "proptest", + "rand 0.8.5", + "ruint", + "serde", + "tiny-keccak", +] + +[[package]] +name = "alloy-rlp" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6c1d995bff8d011f7cd6c81820d51825e6e06d6db73914c1630ecf544d83d6" +dependencies = [ + "arrayvec 0.7.6", + "bytes", +] + +[[package]] +name = "alloy-sol-macro" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a98ad1696a2e17f010ae8e43e9f2a1e930ed176a8e3ff77acfeff6dfb07b42c" +dependencies = [ + "const-hex", + "dunce", + "heck 0.4.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.101", + "syn-solidity 0.4.2", + "tiny-keccak", +] + +[[package]] +name = "alloy-sol-macro" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b40397ddcdcc266f59f959770f601ce1280e699a91fc1862f29cef91707cd09" +dependencies = [ + "alloy-sol-macro-expander", + "alloy-sol-macro-input", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "alloy-sol-macro-expander" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "867a5469d61480fea08c7333ffeca52d5b621f5ca2e44f271b117ec1fc9a0525" +dependencies = [ + "alloy-sol-macro-input", + "const-hex", + "heck 0.5.0", + "indexmap 2.9.0", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.101", + "syn-solidity 0.7.7", + "tiny-keccak", +] + +[[package]] +name = "alloy-sol-macro-input" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e482dc33a32b6fadbc0f599adea520bd3aaa585c141a80b404d0a3e3fa72528" +dependencies = [ + "const-hex", + "dunce", + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.101", + "syn-solidity 0.7.7", +] + +[[package]] +name = "alloy-sol-types" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98d7107bed88e8f09f0ddcc3335622d87bfb6821f3e0c7473329fb1cfad5e015" +dependencies = [ + "alloy-primitives 0.4.2", + "alloy-sol-macro 0.4.2", + "const-hex", + "serde", +] + +[[package]] +name = "alloy-sol-types" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +checksum = "a91ca40fa20793ae9c3841b83e74569d1cc9af29a2f5237314fd3452d51e38c7" +dependencies = [ + "alloy-primitives 0.7.7", + "alloy-sol-macro 0.7.7", + "const-hex", +] [[package]] name = "always-assert" @@ -131,20 +270,11 @@ dependencies = [ "libc", ] -[[package]] -name = "ansi_term" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" -dependencies = [ - "winapi", -] - [[package]] name = "anstream" -version = "0.6.14" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", @@ -157,43 +287,44 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.7" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.0" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.3" +version = "3.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" +checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "once_cell", + "windows-sys 0.59.0", ] [[package]] name = "anyhow" -version = "1.0.86" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" [[package]] name = "approx" @@ -215,7 +346,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] @@ -225,8 +356,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb00293ba84f51ce3bd026bd0de55899c4e68f0a39a5728cebae3a73ffdc0a4f" dependencies = [ "ark-ec", - "ark-ff", - "ark-std", + "ark-ff 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-bls12-377-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20c7021f180a0cbea0380eba97c2af3c57074cdaffe0eef7e840e1c9f2841e55" +dependencies = [ + "ark-bls12-377", + "ark-ec", + "ark-models-ext", + "ark-std 0.4.0", ] [[package]] @@ -236,9 +379,48 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" dependencies = [ "ark-ec", - "ark-ff", - "ark-serialize", - "ark-std", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-bls12-381-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1dc4b3d08f19e8ec06e949712f95b8361e43f1391d94f65e4234df03480631c" +dependencies = [ + "ark-bls12-381", + "ark-ec", + "ark-ff 0.4.2", + "ark-models-ext", + "ark-serialize 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-bw6-761" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e0605daf0cc5aa2034b78d008aaf159f56901d92a52ee4f6ecdfdac4f426700" +dependencies = [ + "ark-bls12-377", + "ark-ec", + "ark-ff 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-bw6-761-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccee5fba47266f460067588ee1bf070a9c760bf2050c1c509982c5719aadb4f2" +dependencies = [ + "ark-bw6-761", + "ark-ec", + "ark-ff 0.4.2", + "ark-models-ext", + "ark-std 0.4.0", ] [[package]] @@ -247,14 +429,83 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" dependencies = [ - "ark-ff", + "ark-ff 0.4.2", "ark-poly", - "ark-serialize", - "ark-std", + "ark-serialize 0.4.2", + "ark-std 0.4.0", "derivative", "hashbrown 0.13.2", "itertools 0.10.5", "num-traits", + "rayon", + "zeroize", +] + +[[package]] +name = "ark-ed-on-bls12-377" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b10d901b9ac4b38f9c32beacedfadcdd64e46f8d7f8e88c1ae1060022cf6f6c6" +dependencies = [ + "ark-bls12-377", + "ark-ec", + "ark-ff 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-ed-on-bls12-377-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524a4fb7540df2e1a8c2e67a83ba1d1e6c3947f4f9342cc2359fc2e789ad731d" +dependencies = [ + "ark-ec", + "ark-ed-on-bls12-377", + "ark-ff 0.4.2", + "ark-models-ext", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-ed-on-bls12-381-bandersnatch" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9cde0f2aa063a2a5c28d39b47761aa102bda7c13c84fc118a61b87c7b2f785c" +dependencies = [ + "ark-bls12-381", + "ark-ec", + "ark-ff 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-ed-on-bls12-381-bandersnatch-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d15185f1acb49a07ff8cbe5f11a1adc5a93b19e211e325d826ae98e98e124346" +dependencies = [ + "ark-ec", + "ark-ed-on-bls12-381-bandersnatch", + "ark-ff 0.4.2", + "ark-models-ext", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-ff" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" +dependencies = [ + "ark-ff-asm 0.3.0", + "ark-ff-macros 0.3.0", + "ark-serialize 0.3.0", + "ark-std 0.3.0", + "derivative", + "num-bigint", + "num-traits", + "paste", + "rustc_version 0.3.3", "zeroize", ] @@ -264,20 +515,30 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" dependencies = [ - "ark-ff-asm", - "ark-ff-macros", - "ark-serialize", - "ark-std", + "ark-ff-asm 0.4.2", + "ark-ff-macros 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", "derivative", "digest 0.10.7", "itertools 0.10.5", "num-bigint", "num-traits", "paste", - "rustc_version", + "rustc_version 0.4.1", "zeroize", ] +[[package]] +name = "ark-ff-asm" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" +dependencies = [ + "quote", + "syn 1.0.109", +] + [[package]] name = "ark-ff-asm" version = "0.4.2" @@ -288,6 +549,18 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-ff-macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" +dependencies = [ + "num-bigint", + "num-traits", + "quote", + "syn 1.0.109", +] + [[package]] name = "ark-ff-macros" version = "0.4.2" @@ -301,19 +574,56 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-models-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e9eab5d4b5ff2f228b763d38442adc9b084b0a465409b059fac5c2308835ec2" +dependencies = [ + "ark-ec", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", +] + [[package]] name = "ark-poly" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" dependencies = [ - "ark-ff", - "ark-serialize", - "ark-std", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", "derivative", "hashbrown 0.13.2", ] +[[package]] +name = "ark-scale" +version = "0.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f69c00b3b529be29528a6f2fd5fa7b1790f8bed81b9cdca17e326538545a179" +dependencies = [ + "ark-ec", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "parity-scale-codec", + "scale-info", +] + +[[package]] +name = "ark-serialize" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" +dependencies = [ + "ark-std 0.3.0", + "digest 0.9.0", +] + [[package]] name = "ark-serialize" version = "0.4.2" @@ -321,7 +631,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" dependencies = [ "ark-serialize-derive", - "ark-std", + "ark-std 0.4.0", "digest 0.10.7", "num-bigint", ] @@ -339,19 +649,24 @@ dependencies = [ [[package]] name = "ark-std" -version = "0.4.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" dependencies = [ "num-traits", - "rand", + "rand 0.8.5", ] [[package]] -name = "array-bytes" -version = "4.2.0" +name = "ark-std" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52f63c5c1316a16a4b35eaac8b76a98248961a533f061684cb2a7cb0eafb6c6" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand 0.8.5", + "rayon", +] [[package]] name = "array-bytes" @@ -361,9 +676,9 @@ checksum = "5d5dde061bd34119e902bbb2d9b90c5692635cf59fb91d582c2b68043f1b8293" [[package]] name = "arrayref" -version = "0.3.7" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "arrayvec" @@ -376,9 +691,9 @@ dependencies = [ [[package]] name = "arrayvec" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "asn1-rs" @@ -386,13 +701,29 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" dependencies = [ - "asn1-rs-derive", - "asn1-rs-impl", + "asn1-rs-derive 0.4.0", + "asn1-rs-impl 0.1.0", + "displaydoc", + "nom", + "num-traits", + "rusticata-macros", + "thiserror 1.0.69", + "time", +] + +[[package]] +name = "asn1-rs" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5493c3bedbacf7fd7382c6346bbd66687d12bbaad3a89a2d2c303ee6cf20b048" +dependencies = [ + "asn1-rs-derive 0.5.1", + "asn1-rs-impl 0.2.0", "displaydoc", "nom", "num-traits", "rusticata-macros", - "thiserror", + "thiserror 1.0.69", "time", ] @@ -408,6 +739,18 @@ dependencies = [ "synstructure 0.12.6", ] +[[package]] +name = "asn1-rs-derive" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", + "synstructure 0.13.1", +] + [[package]] name = "asn1-rs-impl" version = "0.1.0" @@ -420,30 +763,43 @@ dependencies = [ ] [[package]] -name = "assert_matches" -version = "1.5.0" +name = "asn1-rs-impl" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "assert_matches" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" [[package]] name = "asset-hub-rococo-emulated-chain" version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "asset-hub-rococo-runtime", + "bp-bridge-hub-rococo", "cumulus-primitives-core", "emulated-integration-tests-common", "frame-support", "parachains-common", "rococo-emulated-chain", "sp-core", + "staging-xcm", "testnet-parachains-constants", ] [[package]] name = "asset-hub-rococo-runtime" -version = "0.12.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.22.4" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "assets-common", "bp-asset-hub-rococo", @@ -457,6 +813,7 @@ dependencies = [ "cumulus-pallet-xcmp-queue", "cumulus-primitives-aura", "cumulus-primitives-core", + "cumulus-primitives-storage-weight-reclaim", "cumulus-primitives-utility", "frame-benchmarking", "frame-executive", @@ -469,8 +826,10 @@ dependencies = [ "hex-literal 0.4.1", "log", "pallet-asset-conversion", + "pallet-asset-conversion-ops", "pallet-asset-conversion-tx-payment", "pallet-assets", + "pallet-assets-freezer", "pallet-aura", "pallet-authorship", "pallet-balances", @@ -482,7 +841,6 @@ dependencies = [ "pallet-nfts-runtime-api", "pallet-proxy", "pallet-session", - "pallet-state-trie-migration", "pallet-timestamp", "pallet-transaction-payment", "pallet-transaction-payment-rpc-runtime-api", @@ -498,6 +856,7 @@ dependencies = [ "primitive-types", "rococo-runtime-constants", "scale-info", + "serde_json", "snowbridge-router-primitives", "sp-api", "sp-block-builder", @@ -508,7 +867,6 @@ dependencies = [ "sp-offchain", "sp-runtime", "sp-session", - "sp-std", "sp-storage", "sp-transaction-pool", "sp-version", @@ -519,22 +877,25 @@ dependencies = [ "staging-xcm-executor", "substrate-wasm-builder", "testnet-parachains-constants", + "xcm-runtime-apis", ] [[package]] name = "asset-test-utils" -version = "8.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "20.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "cumulus-pallet-parachain-system", "cumulus-pallet-xcmp-queue", "cumulus-primitives-core", "frame-support", "frame-system", + "pallet-asset-conversion", "pallet-assets", "pallet-balances", "pallet-collator-selection", "pallet-session", + "pallet-timestamp", "pallet-xcm", "pallet-xcm-bridge-hub-router", "parachains-common", @@ -542,31 +903,31 @@ dependencies = [ "parity-scale-codec", "sp-io", "sp-runtime", - "sp-std", "staging-parachain-info", "staging-xcm", "staging-xcm-builder", "staging-xcm-executor", "substrate-wasm-builder", + "xcm-runtime-apis", ] [[package]] name = "assets-common" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.18.3" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "cumulus-primitives-core", "frame-support", "impl-trait-for-tuples", "log", "pallet-asset-conversion", + "pallet-assets", "pallet-xcm", "parachains-common", "parity-scale-codec", "scale-info", "sp-api", "sp-runtime", - "sp-std", "staging-xcm", "staging-xcm-builder", "staging-xcm-executor", @@ -593,19 +954,19 @@ dependencies = [ "concurrent-queue", "event-listener-strategy", "futures-core", - "pin-project-lite 0.2.14", + "pin-project-lite", ] [[package]] name = "async-executor" -version = "1.12.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8828ec6e544c02b0d6691d21ed9f9218d0384a82542855073c2a3f58304aaf0" +checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" dependencies = [ "async-task", "concurrent-queue", - "fastrand 2.1.0", - "futures-lite 2.3.0", + "fastrand 2.3.0", + "futures-lite 2.6.0", "slab", ] @@ -635,7 +996,7 @@ dependencies = [ "log", "parking", "polling 2.8.0", - "rustix 0.37.27", + "rustix 0.37.28", "slab", "socket2 0.4.10", "waker-fn", @@ -643,21 +1004,21 @@ dependencies = [ [[package]] name = "async-io" -version = "2.3.3" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6baa8f0178795da0e71bc42c9e5d13261aac7ee549853162e66a241ba17964" +checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" dependencies = [ "async-lock 3.4.0", "cfg-if", "concurrent-queue", "futures-io", - "futures-lite 2.3.0", + "futures-lite 2.6.0", "parking", - "polling 3.7.2", - "rustix 0.38.34", + "polling 3.7.4", + "rustix 0.38.44", "slab", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -675,9 +1036,9 @@ version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "event-listener 5.3.1", + "event-listener 5.4.0", "event-listener-strategy", - "pin-project-lite 0.2.14", + "pin-project-lite", ] [[package]] @@ -704,26 +1065,26 @@ dependencies = [ "cfg-if", "event-listener 3.1.0", "futures-lite 1.13.0", - "rustix 0.38.34", + "rustix 0.38.44", "windows-sys 0.48.0", ] [[package]] name = "async-signal" -version = "0.2.8" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "794f185324c2f00e771cd9f1ae8b5ac68be2ca7abb129a87afd6e86d228bc54d" +checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" dependencies = [ - "async-io 2.3.3", + "async-io 2.4.0", "async-lock 3.4.0", "atomic-waker", "cfg-if", "futures-core", "futures-io", - "rustix 0.38.34", + "rustix 0.38.44", "signal-hook-registry", "slab", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -734,13 +1095,13 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.80" +version = "0.1.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" +checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] @@ -753,7 +1114,7 @@ dependencies = [ "futures-sink", "futures-util", "memchr", - "pin-project-lite 0.2.14", + "pin-project-lite", ] [[package]] @@ -770,7 +1131,7 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "attestation" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "ctype", "frame-benchmarking", @@ -791,24 +1152,46 @@ dependencies = [ ] [[package]] -name = "autocfg" +name = "attohttpc" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d9a9bf8b79a749ee0b911b91b671cc2b6c670bdbc7e3dfd537576ddc94bb2a2" +dependencies = [ + "http 0.2.12", + "log", + "url", +] + +[[package]] +name = "auto_impl" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" -version = "0.3.73" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ - "addr2line 0.22.0", - "cc", + "addr2line 0.24.2", "cfg-if", "libc", "miniz_oxide", - "object 0.36.0", + "object 0.36.7", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] @@ -842,24 +1225,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] -name = "base64ct" -version = "1.6.0" +name = "base64" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] -name = "beef" -version = "0.5.2" +name = "base64ct" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" -dependencies = [ - "serde", -] +checksum = "89e25b6adfb930f02d1981565a6e5d9c547ac15a96606256d3b59040e5cd4ca3" [[package]] name = "binary-merkle-tree" -version = "14.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "15.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "hash-db", "log", @@ -886,33 +1266,54 @@ dependencies = [ "lazy_static", "lazycell", "peeking_take_while", - "prettyplease 0.2.20", + "prettyplease 0.2.32", "proc-macro2", "quote", "regex", - "rustc-hash", + "rustc-hash 1.1.0", "shlex", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] name = "bip39" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f2635620bf0b9d4576eb7bb9a38a55df78bd1205d26fa994b25911a69f212f" +checksum = "33415e24172c1b7d6066f6d999545375ab8e1d95421d6784bdfff9496f292387" dependencies = [ "bitcoin_hashes", - "rand", - "rand_core 0.6.4", - "serde", - "unicode-normalization", ] +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + +[[package]] +name = "bitcoin-internals" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9425c3bf7089c983facbae04de54513cce73b41c7f9ff8c845b54e7bc64ebbfb" + [[package]] name = "bitcoin_hashes" -version = "0.11.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90064b8dee6815a6470d60bad07bbbaee885c0e12d04177138fa3291a01b7bc4" +checksum = "1930a4dabfebb8d7d9992db18ebe3ae2876f0a305fab206fd168df931ede293b" +dependencies = [ + "bitcoin-internals", + "hex-conservative", +] [[package]] name = "bitflags" @@ -922,9 +1323,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.5.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" [[package]] name = "bitvec" @@ -972,37 +1373,37 @@ dependencies = [ [[package]] name = "blake2b_simd" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" +checksum = "06e903a20b159e944f91ec8499fe1e55651480c541ea0a584f5d967c49ad9d99" dependencies = [ "arrayref", - "arrayvec 0.7.4", - "constant_time_eq 0.3.0", + "arrayvec 0.7.6", + "constant_time_eq 0.3.1", ] [[package]] name = "blake2s_simd" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94230421e395b9920d23df13ea5d77a20e1725331f90fbbf6df6040b33f756ae" +checksum = "e90f7deecfac93095eb874a40febd69427776e24e1bd7f87f33ac62d6f0174df" dependencies = [ "arrayref", - "arrayvec 0.7.4", - "constant_time_eq 0.3.0", + "arrayvec 0.7.6", + "constant_time_eq 0.3.1", ] [[package]] name = "blake3" -version = "1.5.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30cca6d3674597c30ddf2c587bf8d9d65c9a84d2326d941cc79c9842dfe0ef52" +checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" dependencies = [ "arrayref", - "arrayvec 0.7.4", + "arrayvec 0.7.6", "cc", "cfg-if", - "constant_time_eq 0.3.0", + "constant_time_eq 0.3.1", ] [[package]] @@ -1032,15 +1433,15 @@ dependencies = [ "async-channel 2.3.1", "async-task", "futures-io", - "futures-lite 2.3.0", + "futures-lite 2.6.0", "piper", ] [[package]] name = "bounded-collections" -version = "0.2.0" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32385ecb91a31bddaf908e8dcf4a15aef1bcd3913cc03ebfad02ff6d568abc1" +checksum = "64ad8a0bed7827f0b07a5d23cec2e58cc02038a99e4ca81616cb2bb2025f804d" dependencies = [ "log", "parity-scale-codec", @@ -1054,35 +1455,39 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68534a48cbf63a4b1323c433cf21238c9ec23711e0df13b08c33e5c2082663ce" dependencies = [ - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "bp-asset-hub-rococo" -version = "0.5.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.14.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bp-xcm-bridge-hub-router", "frame-support", "parity-scale-codec", "scale-info", + "sp-core", + "staging-xcm", ] [[package]] name = "bp-asset-hub-westend" -version = "0.4.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.13.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bp-xcm-bridge-hub-router", "frame-support", "parity-scale-codec", "scale-info", + "sp-core", + "staging-xcm", ] [[package]] name = "bp-bridge-hub-cumulus" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.18.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bp-messages", "bp-polkadot-core", @@ -1096,13 +1501,15 @@ dependencies = [ [[package]] name = "bp-bridge-hub-rococo" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.18.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bp-bridge-hub-cumulus", "bp-messages", "bp-runtime", + "bp-xcm-bridge-hub", "frame-support", + "parity-scale-codec", "sp-api", "sp-runtime", "sp-std", @@ -1110,13 +1517,15 @@ dependencies = [ [[package]] name = "bp-bridge-hub-westend" -version = "0.4.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.14.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bp-bridge-hub-cumulus", "bp-messages", "bp-runtime", + "bp-xcm-bridge-hub", "frame-support", + "parity-scale-codec", "sp-api", "sp-runtime", "sp-std", @@ -1124,8 +1533,8 @@ dependencies = [ [[package]] name = "bp-header-chain" -version = "0.8.2" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.18.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bp-runtime", "finality-grandpa", @@ -1141,8 +1550,8 @@ dependencies = [ [[package]] name = "bp-messages" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.18.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bp-header-chain", "bp-runtime", @@ -1151,13 +1560,14 @@ dependencies = [ "scale-info", "serde", "sp-core", + "sp-io", "sp-std", ] [[package]] name = "bp-parachains" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.18.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bp-header-chain", "bp-polkadot-core", @@ -1171,10 +1581,23 @@ dependencies = [ "sp-std", ] +[[package]] +name = "bp-polkadot" +version = "0.16.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "bp-header-chain", + "bp-polkadot-core", + "bp-runtime", + "frame-support", + "sp-api", + "sp-std", +] + [[package]] name = "bp-polkadot-core" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.18.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bp-messages", "bp-runtime", @@ -1191,12 +1614,16 @@ dependencies = [ [[package]] name = "bp-relayers" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.18.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ + "bp-header-chain", "bp-messages", + "bp-parachains", "bp-runtime", "frame-support", + "frame-system", + "pallet-utility", "parity-scale-codec", "scale-info", "sp-runtime", @@ -1205,8 +1632,8 @@ dependencies = [ [[package]] name = "bp-runtime" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.18.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-support", "frame-system", @@ -1228,8 +1655,8 @@ dependencies = [ [[package]] name = "bp-test-utils" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.18.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bp-header-chain", "bp-parachains", @@ -1248,27 +1675,96 @@ dependencies = [ [[package]] name = "bp-xcm-bridge-hub" -version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.4.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ + "bp-messages", + "bp-runtime", + "frame-support", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", "sp-std", + "staging-xcm", ] [[package]] name = "bp-xcm-bridge-hub-router" -version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.14.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-runtime", + "staging-xcm", +] + +[[package]] +name = "bridge-hub-common" +version = "0.10.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ + "cumulus-primitives-core", + "frame-support", + "pallet-message-queue", "parity-scale-codec", "scale-info", + "snowbridge-core", + "sp-core", + "sp-runtime", + "sp-std", + "staging-xcm", +] + +[[package]] +name = "bridge-hub-test-utils" +version = "0.20.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "asset-test-utils", + "bp-header-chain", + "bp-messages", + "bp-parachains", + "bp-polkadot-core", + "bp-relayers", + "bp-runtime", + "bp-test-utils", + "cumulus-pallet-parachain-system", + "cumulus-pallet-xcmp-queue", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log", + "pallet-balances", + "pallet-bridge-grandpa", + "pallet-bridge-messages", + "pallet-bridge-parachains", + "pallet-bridge-relayers", + "pallet-timestamp", + "pallet-utility", + "pallet-xcm", + "pallet-xcm-bridge-hub", + "parachains-common", + "parachains-runtimes-test-utils", + "parity-scale-codec", "sp-core", + "sp-io", + "sp-keyring", "sp-runtime", + "sp-std", + "sp-tracing", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", ] [[package]] name = "bridge-runtime-common" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.18.3" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bp-header-chain", "bp-messages", @@ -1276,11 +1772,8 @@ dependencies = [ "bp-polkadot-core", "bp-relayers", "bp-runtime", - "bp-xcm-bridge-hub", - "bp-xcm-bridge-hub-router", "frame-support", "frame-system", - "hash-db", "log", "pallet-bridge-grandpa", "pallet-bridge-messages", @@ -1290,14 +1783,12 @@ dependencies = [ "pallet-utility", "parity-scale-codec", "scale-info", - "sp-api", - "sp-core", "sp-io", "sp-runtime", "sp-std", "sp-trie", "staging-xcm", - "staging-xcm-builder", + "tuplex", ] [[package]] @@ -1326,15 +1817,15 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "byte-slice-cast" -version = "1.2.2" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" +checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" [[package]] name = "byte-tools" @@ -1344,9 +1835,9 @@ checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "bytemuck" -version = "1.18.0" +version = "1.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94bbb0ad554ad961ddc5da507a12a29b14e4ae5bda06b19f575a3e6079d2e2ae" +checksum = "b6b1fc10dbac614ebc03540c9dbd60e83887fda27794998c6528f1782047d540" [[package]] name = "byteorder" @@ -1356,18 +1847,17 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.7.2" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "bzip2-sys" -version = "0.1.11+1.0.8" +version = "0.1.13+1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +checksum = "225bff33b2141874fe80d71e07d6eec4f85c5c216453dd96388240f96e1acc14" dependencies = [ "cc", - "libc", "pkg-config", ] @@ -1383,18 +1873,18 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.7" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0ec6b951b160caa93cc0c7b209e5a3bff7aae9062213451ac99493cd844c239" +checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" dependencies = [ "serde", ] [[package]] name = "cargo-platform" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" dependencies = [ "serde", ] @@ -1407,23 +1897,29 @@ checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a" dependencies = [ "camino", "cargo-platform", - "semver 1.0.23", + "semver 1.0.26", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "cc" -version = "1.0.99" +version = "1.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c51067fd44124faa7f870b4b1c969379ad32b2ba805aa959430ceaa384f695" +checksum = "04da6a0d40b948dfc4fa8f5bbf402b0fc1a64a28dbf7d12ffd683550f2c1b63a" dependencies = [ "jobserver", "libc", - "once_cell", + "shlex", ] +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + [[package]] name = "cexpr" version = "0.6.0" @@ -1490,16 +1986,16 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "wasm-bindgen", - "windows-targets 0.52.5", + "windows-link", ] [[package]] @@ -1512,7 +2008,20 @@ dependencies = [ "multibase", "multihash 0.17.0", "serde", - "unsigned-varint", + "unsigned-varint 0.7.2", +] + +[[package]] +name = "cid" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd94671561e36e4e7de75f753f577edafb0e7c05d6e4547229fdf7938fbcd2c3" +dependencies = [ + "core2", + "multibase", + "multihash 0.18.1", + "serde", + "unsigned-varint 0.7.2", ] [[package]] @@ -1535,15 +2044,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "ckb-merkle-mountain-range" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ccb671c5921be8a84686e6212ca184cb1d7c51cadcdbfcbd1cc3f042f5dfb8" -dependencies = [ - "cfg-if", -] - [[package]] name = "clang-sys" version = "1.8.1" @@ -1557,9 +2057,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.7" +version = "4.5.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5db83dced34638ad474f39f250d7fea9598bdd239eaced1bdf45d597da0f433f" +checksum = "eccb054f56cbd38340b380d4a8e69ef1f02f1af43db2f0cc817a4774d80ae071" dependencies = [ "clap_builder", "clap_derive", @@ -1567,9 +2067,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.7" +version = "4.5.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7e204572485eb3fbf28f871612191521df159bc3e15a9f5064c66dba3a8c05f" +checksum = "efd9466fac8543255d3b1fcad4762c5e116ffe808c8a3043d4263cd4fd4862a2" dependencies = [ "anstream", "anstyle", @@ -1580,27 +2080,27 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.5" +version = "4.5.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c780290ccf4fb26629baa7a1081e68ced113f1d3ec302fa5948f1c381ebf06c6" +checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] name = "clap_lex" -version = "0.7.1" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b82cf0babdbd58558212896d1a4272303a57bdb245c2bf1147185fb45640e70" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "coarsetime" -version = "0.1.34" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13b3839cf01bb7960114be3ccf2340f541b6d0c81f8690b007b2b39f750f7e5d" +checksum = "91849686042de1b41cd81490edc83afbcb0abe5a9b6f2c4114f23ce8cca1bcf4" dependencies = [ "libc", "wasix", @@ -1609,33 +2109,64 @@ dependencies = [ [[package]] name = "codespan-reporting" -version = "0.11.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" dependencies = [ + "serde", "termcolor", "unicode-width", ] [[package]] -name = "colorchoice" -version = "1.0.1" +name = "color-print" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" +checksum = "3aa954171903797d5623e047d9ab69d91b493657917bdfb8c2c80ecaf9cdb6f4" +dependencies = [ + "color-print-proc-macro", +] [[package]] -name = "comfy-table" -version = "7.1.1" +name = "color-print-proc-macro" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b34115915337defe99b2aff5c2ce6771e5fbc4079f4b506301f5cf394c8452f7" +checksum = "692186b5ebe54007e45a59aea47ece9eb4108e141326c304cdc91699a7118a22" dependencies = [ - "strum 0.26.2", - "strum_macros 0.26.4", - "unicode-width", + "nom", + "proc-macro2", + "quote", + "syn 2.0.101", ] [[package]] -name = "common-path" +name = "colorchoice" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" + +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "comfy-table" +version = "7.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a65ebfec4fb190b6f90e944a817d60499ee0744e582530e2c9900a22e591d9a" +dependencies = [ + "unicode-segmentation", + "unicode-width", +] + +[[package]] +name = "common-path" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2382f75942f4b3be3690fe4f86365e9c853c1587d6ee58212cebf6e2a9ccd101" @@ -1651,15 +2182,28 @@ dependencies = [ [[package]] name = "console" -version = "0.15.8" +version = "0.15.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" +checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" dependencies = [ "encode_unicode", - "lazy_static", "libc", + "once_cell", "unicode-width", - "windows-sys 0.52.0", + "windows-sys 0.59.0", +] + +[[package]] +name = "const-hex" +version = "1.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83e22e0ed40b96a48d3db274f72fd365bd78f67af39b6bbd47e8a15e1c6207ff" +dependencies = [ + "cfg-if", + "cpufeatures", + "hex", + "proptest", + "serde", ] [[package]] @@ -1683,28 +2227,42 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.16", "once_cell", "tiny-keccak", ] [[package]] -name = "constant_time_eq" -version = "0.1.5" +name = "const_format" +version = "0.2.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" +checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] [[package]] name = "constant_time_eq" -version = "0.3.0" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" [[package]] -name = "constcat" +name = "constant_time_eq" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd7e35aee659887cbfb97aaf227ac12cad1a9d7c71e55ff3376839ed4e282d08" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" [[package]] name = "convert_case" @@ -1722,11 +2280,21 @@ dependencies = [ "libc", ] +[[package]] +name = "core-foundation" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "core2" @@ -1758,9 +2326,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] @@ -1789,7 +2357,7 @@ dependencies = [ "gimli 0.27.3", "hashbrown 0.13.2", "log", - "regalloc2", + "regalloc2 0.6.1", "smallvec", "target-lexicon", ] @@ -1863,6 +2431,21 @@ dependencies = [ "wasmtime-types", ] +[[package]] +name = "crc" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + [[package]] name = "crc32fast" version = "1.4.2" @@ -1874,9 +2457,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -1893,24 +2476,24 @@ dependencies = [ [[package]] name = "crossbeam-queue" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.20" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" [[package]] name = "crypto-bigint" @@ -1920,7 +2503,7 @@ checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ "generic-array 0.14.7", "rand_core 0.6.4", - "subtle 2.4.1", + "subtle 2.6.1", "zeroize", ] @@ -1952,17 +2535,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" dependencies = [ "generic-array 0.14.7", - "subtle 2.4.1", -] - -[[package]] -name = "crypto-mac" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" -dependencies = [ - "generic-array 0.14.7", - "subtle 2.4.1", + "subtle 2.6.1", ] [[package]] @@ -1976,7 +2549,7 @@ dependencies = [ [[package]] name = "ctype" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "frame-benchmarking", "frame-support", @@ -1995,8 +2568,8 @@ dependencies = [ [[package]] name = "cumulus-client-cli" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.18.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "clap", "parity-scale-codec", @@ -2012,8 +2585,8 @@ dependencies = [ [[package]] name = "cumulus-client-collator" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.18.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "cumulus-client-consensus-common", "cumulus-client-network", @@ -2035,8 +2608,8 @@ dependencies = [ [[package]] name = "cumulus-client-consensus-aura" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.18.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "async-trait", "cumulus-client-collator", @@ -2048,6 +2621,7 @@ dependencies = [ "cumulus-relay-chain-interface", "futures", "parity-scale-codec", + "parking_lot 0.12.3", "polkadot-node-primitives", "polkadot-node-subsystem", "polkadot-overseer", @@ -2058,6 +2632,7 @@ dependencies = [ "sc-consensus-babe", "sc-consensus-slots", "sc-telemetry", + "sc-utils", "schnellru", "sp-api", "sp-application-crypto", @@ -2072,13 +2647,14 @@ dependencies = [ "sp-state-machine", "sp-timestamp", "substrate-prometheus-endpoint", + "tokio", "tracing", ] [[package]] name = "cumulus-client-consensus-common" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.18.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "async-trait", "cumulus-client-pov-recovery", @@ -2100,14 +2676,15 @@ dependencies = [ "sp-runtime", "sp-timestamp", "sp-trie", + "sp-version", "substrate-prometheus-endpoint", "tracing", ] [[package]] name = "cumulus-client-consensus-proposer" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.16.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "anyhow", "async-trait", @@ -2116,13 +2693,36 @@ dependencies = [ "sp-inherents", "sp-runtime", "sp-state-machine", - "thiserror", + "thiserror 1.0.69", +] + +[[package]] +name = "cumulus-client-consensus-relay-chain" +version = "0.18.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "async-trait", + "cumulus-client-consensus-common", + "cumulus-primitives-core", + "cumulus-relay-chain-interface", + "futures", + "parking_lot 0.12.3", + "sc-consensus", + "sp-api", + "sp-block-builder", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-inherents", + "sp-runtime", + "substrate-prometheus-endpoint", + "tracing", ] [[package]] name = "cumulus-client-network" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.18.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "async-trait", "cumulus-relay-chain-interface", @@ -2131,21 +2731,24 @@ dependencies = [ "parity-scale-codec", "parking_lot 0.12.3", "polkadot-node-primitives", + "polkadot-node-subsystem", "polkadot-parachain-primitives", "polkadot-primitives", "sc-client-api", + "sp-api", "sp-blockchain", "sp-consensus", "sp-core", "sp-runtime", "sp-state-machine", + "sp-version", "tracing", ] [[package]] name = "cumulus-client-parachain-inherent" -version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.12.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -2154,13 +2757,11 @@ dependencies = [ "cumulus-test-relay-sproof-builder", "parity-scale-codec", "sc-client-api", - "scale-info", "sp-api", "sp-crypto-hashing", "sp-inherents", "sp-runtime", "sp-state-machine", - "sp-std", "sp-storage", "sp-trie", "tracing", @@ -2168,8 +2769,8 @@ dependencies = [ [[package]] name = "cumulus-client-pov-recovery" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.18.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -2181,19 +2782,21 @@ dependencies = [ "polkadot-node-subsystem", "polkadot-overseer", "polkadot-primitives", - "rand", + "rand 0.8.5", "sc-client-api", "sc-consensus", + "sp-api", "sp-consensus", "sp-maybe-compressed-blob", "sp-runtime", + "sp-version", "tracing", ] [[package]] name = "cumulus-client-service" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.19.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "cumulus-client-cli", "cumulus-client-collator", @@ -2222,14 +2825,15 @@ dependencies = [ "sp-blockchain", "sp-consensus", "sp-core", + "sp-io", "sp-runtime", "sp-transaction-pool", ] [[package]] name = "cumulus-pallet-aura-ext" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.17.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "cumulus-pallet-parachain-system", "frame-support", @@ -2241,13 +2845,29 @@ dependencies = [ "sp-application-crypto", "sp-consensus-aura", "sp-runtime", - "sp-std", +] + +[[package]] +name = "cumulus-pallet-dmp-queue" +version = "0.17.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "cumulus-primitives-core", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "staging-xcm", ] [[package]] name = "cumulus-pallet-parachain-system" -version = "0.8.1" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.17.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bytes", "cumulus-pallet-parachain-system-proc-macro", @@ -2276,24 +2896,25 @@ dependencies = [ "sp-trie", "sp-version", "staging-xcm", + "staging-xcm-builder", "trie-db", ] [[package]] name = "cumulus-pallet-parachain-system-proc-macro" version = "0.6.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "proc-macro-crate 3.1.0", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] name = "cumulus-pallet-session-benchmarking" -version = "10.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "19.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-support", @@ -2301,13 +2922,27 @@ dependencies = [ "pallet-session", "parity-scale-codec", "sp-runtime", - "sp-std", +] + +[[package]] +name = "cumulus-pallet-solo-to-para" +version = "0.17.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "cumulus-pallet-parachain-system", + "frame-support", + "frame-system", + "pallet-sudo", + "parity-scale-codec", + "polkadot-primitives", + "scale-info", + "sp-runtime", ] [[package]] name = "cumulus-pallet-xcm" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.17.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -2316,14 +2951,13 @@ dependencies = [ "scale-info", "sp-io", "sp-runtime", - "sp-std", "staging-xcm", ] [[package]] name = "cumulus-pallet-xcmp-queue" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.17.3" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bounded-collections", "bp-xcm-bridge-hub-router", @@ -2340,29 +2974,39 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", "staging-xcm", + "staging-xcm-builder", "staging-xcm-executor", ] [[package]] -name = "cumulus-primitives-aura" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +name = "cumulus-ping" +version = "0.17.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ + "cumulus-pallet-xcm", + "cumulus-primitives-core", + "frame-support", + "frame-system", "parity-scale-codec", - "polkadot-core-primitives", - "polkadot-primitives", + "scale-info", + "sp-runtime", + "staging-xcm", +] + +[[package]] +name = "cumulus-primitives-aura" +version = "0.15.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ "sp-api", "sp-consensus-aura", - "sp-runtime", - "sp-std", ] [[package]] name = "cumulus-primitives-core" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.16.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "parity-scale-codec", "polkadot-core-primitives", @@ -2371,15 +3015,14 @@ dependencies = [ "scale-info", "sp-api", "sp-runtime", - "sp-std", "sp-trie", "staging-xcm", ] [[package]] name = "cumulus-primitives-parachain-inherent" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.16.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -2387,14 +3030,13 @@ dependencies = [ "scale-info", "sp-core", "sp-inherents", - "sp-std", "sp-trie", ] [[package]] name = "cumulus-primitives-proof-size-hostfunction" -version = "0.3.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.10.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "sp-externalities", "sp-runtime-interface", @@ -2402,22 +3044,35 @@ dependencies = [ ] [[package]] -name = "cumulus-primitives-timestamp" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +name = "cumulus-primitives-storage-weight-reclaim" +version = "8.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "cumulus-primitives-core", - "futures", + "cumulus-primitives-proof-size-hostfunction", + "docify", + "frame-support", + "frame-system", + "log", "parity-scale-codec", + "scale-info", + "sp-runtime", +] + +[[package]] +name = "cumulus-primitives-timestamp" +version = "0.16.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "cumulus-primitives-core", "sp-inherents", - "sp-std", "sp-timestamp", ] [[package]] name = "cumulus-primitives-utility" -version = "0.8.1" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.17.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -2425,10 +3080,7 @@ dependencies = [ "pallet-asset-conversion", "parity-scale-codec", "polkadot-runtime-common", - "polkadot-runtime-parachains", - "sp-io", "sp-runtime", - "sp-std", "staging-xcm", "staging-xcm-builder", "staging-xcm-executor", @@ -2436,8 +3088,8 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-inprocess-interface" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.19.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -2460,8 +3112,8 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-interface" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.18.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -2473,33 +3125,28 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-state-machine", - "thiserror", + "sp-version", + "thiserror 1.0.69", ] [[package]] name = "cumulus-relay-chain-minimal-node" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.19.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "array-bytes 6.2.3", + "array-bytes", "async-trait", "cumulus-primitives-core", "cumulus-relay-chain-interface", "cumulus-relay-chain-rpc-interface", "futures", - "parking_lot 0.12.3", - "polkadot-availability-recovery", - "polkadot-collator-protocol", "polkadot-core-primitives", "polkadot-network-bridge", - "polkadot-node-collation-generation", - "polkadot-node-core-chain-api", - "polkadot-node-core-prospective-parachains", - "polkadot-node-core-runtime-api", "polkadot-node-network-protocol", "polkadot-node-subsystem-util", "polkadot-overseer", "polkadot-primitives", + "polkadot-service", "sc-authority-discovery", "sc-client-api", "sc-network", @@ -2519,8 +3166,8 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-rpc-interface" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.18.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -2532,7 +3179,7 @@ dependencies = [ "parity-scale-codec", "pin-project", "polkadot-overseer", - "rand", + "rand 0.8.5", "sc-client-api", "sc-rpc-api", "sc-service", @@ -2549,7 +3196,7 @@ dependencies = [ "sp-state-machine", "sp-storage", "sp-version", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-util", "tracing", @@ -2558,44 +3205,30 @@ dependencies = [ [[package]] name = "cumulus-test-relay-sproof-builder" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.16.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "cumulus-primitives-core", "parity-scale-codec", "polkadot-primitives", "sp-runtime", "sp-state-machine", - "sp-std", "sp-trie", ] [[package]] name = "curve25519-dalek" -version = "3.2.0" +version = "4.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" -dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.5.1", - "subtle 2.4.1", - "zeroize", -] - -[[package]] -name = "curve25519-dalek" -version = "4.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ "cfg-if", "cpufeatures", "curve25519-dalek-derive", "digest 0.10.7", "fiat-crypto", - "rustc_version", - "subtle 2.4.1", + "rustc_version 0.4.1", + "subtle 2.6.1", "zeroize", ] @@ -2607,7 +3240,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] @@ -2625,59 +3258,87 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.124" +version = "1.0.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "273dcfd3acd4e1e276af13ed2a43eea7001318823e7a726a6b3ed39b4acc0b82" +checksum = "a71ea7f29c73f7ffa64c50b83c9fe4d3a6d4be89a86b009eb80d5a6d3429d741" dependencies = [ "cc", + "cxxbridge-cmd", "cxxbridge-flags", "cxxbridge-macro", + "foldhash", "link-cplusplus", ] [[package]] name = "cxx-build" -version = "1.0.124" +version = "1.0.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b2766fbd92be34e9ed143898fce6c572dc009de39506ed6903e5a05b68914e" +checksum = "36a8232661d66dcf713394726157d3cfe0a89bfc85f52d6e9f9bbc2306797fe7" dependencies = [ "cc", "codespan-reporting", - "once_cell", "proc-macro2", "quote", "scratch", - "syn 2.0.66", + "syn 2.0.101", +] + +[[package]] +name = "cxxbridge-cmd" +version = "1.0.158" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f44296c8693e9ea226a48f6a122727f77aa9e9e338380cb021accaeeb7ee279" +dependencies = [ + "clap", + "codespan-reporting", + "proc-macro2", + "quote", + "syn 2.0.101", ] [[package]] name = "cxxbridge-flags" -version = "1.0.124" +version = "1.0.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "839fcd5e43464614ffaa989eaf1c139ef1f0c51672a1ed08023307fa1b909ccd" +checksum = "c42f69c181c176981ae44ba9876e2ea41ce8e574c296b38d06925ce9214fb8e4" [[package]] name = "cxxbridge-macro" -version = "1.0.124" +version = "1.0.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b2c1c1776b986979be68bb2285da855f8d8a35851a769fca8740df7c3d07877" +checksum = "8faff5d4467e0709448187df29ccbf3b0982cc426ee444a193f87b11afb565a8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "rustversion", + "syn 2.0.101", +] + +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core 0.9.10", ] [[package]] name = "data-encoding" -version = "2.6.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" +checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" [[package]] name = "data-encoding-macro" -version = "0.1.15" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1559b6cba622276d6d63706db152618eeb15b89b3e4041446b05876e352e639" +checksum = "47ce6c96ea0102f01122a185683611bd5ac8d99e62bc59dd12e6bda344ee673d" dependencies = [ "data-encoding", "data-encoding-macro-internal", @@ -2685,17 +3346,17 @@ dependencies = [ [[package]] name = "data-encoding-macro-internal" -version = "0.1.13" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "332d754c0af53bc87c108fed664d121ecf59207ec4196041f04d6ab9002ad33f" +checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976" dependencies = [ "data-encoding", - "syn 1.0.109", + "syn 2.0.101", ] [[package]] name = "delegation" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "attestation", "bitflags 1.3.2", @@ -2719,9 +3380,9 @@ dependencies = [ [[package]] name = "der" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" dependencies = [ "const-oid", "zeroize", @@ -2733,7 +3394,21 @@ version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" dependencies = [ - "asn1-rs", + "asn1-rs 0.5.2", + "displaydoc", + "nom", + "num-bigint", + "num-traits", + "rusticata-macros", +] + +[[package]] +name = "der-parser" +version = "9.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553" +dependencies = [ + "asn1-rs 0.6.2", "displaydoc", "nom", "num-bigint", @@ -2743,9 +3418,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.3.11" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" dependencies = [ "powerfmt", ] @@ -2763,42 +3438,52 @@ dependencies = [ [[package]] name = "derive-syn-parse" -version = "0.1.5" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cd" +checksum = "d65d7ce8132b7c0e54497a4d9a55a1c2a0912a0d786cf894472ba818fba45762" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.101", ] [[package]] -name = "derive-syn-parse" -version = "0.2.0" +name = "derive_more" +version = "0.99.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d65d7ce8132b7c0e54497a4d9a55a1c2a0912a0d786cf894472ba818fba45762" +checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f" dependencies = [ + "convert_case", "proc-macro2", "quote", - "syn 2.0.66", + "rustc_version 0.4.1", + "syn 2.0.101", ] [[package]] name = "derive_more" -version = "0.99.18" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ - "convert_case", "proc-macro2", "quote", - "rustc_version", - "syn 2.0.66", + "syn 2.0.101", + "unicode-xid", ] [[package]] name = "did" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "ctype", "env_logger 0.10.2", @@ -2853,12 +3538,12 @@ dependencies = [ "block-buffer 0.10.4", "const-oid", "crypto-common", - "subtle 2.4.1", + "subtle 2.6.1", ] [[package]] name = "dip-consumer-node-template" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "clap", "cumulus-client-cli", @@ -2912,7 +3597,7 @@ dependencies = [ [[package]] name = "dip-consumer-runtime-template" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "cumulus-pallet-aura-ext", "cumulus-pallet-parachain-system", @@ -2966,7 +3651,7 @@ dependencies = [ [[package]] name = "dip-provider-node-template" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "clap", "cumulus-client-cli", @@ -3020,7 +3705,7 @@ dependencies = [ [[package]] name = "dip-provider-runtime-template" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "cumulus-pallet-aura-ext", "cumulus-pallet-parachain-system", @@ -3115,39 +3800,39 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] name = "docify" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a2f138ad521dc4a2ced1a4576148a6a610b4c5923933b062a263130a6802ce" +checksum = "a772b62b1837c8f060432ddcc10b17aae1453ef17617a99bc07789252d2a5896" dependencies = [ "docify_macros", ] [[package]] name = "docify_macros" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a081e51fb188742f5a7a1164ad752121abcb22874b21e2c3b0dd040c515fdad" +checksum = "60e6be249b0a462a14784a99b19bf35a667bb5e09de611738bb7362fa4c95ff7" dependencies = [ "common-path", - "derive-syn-parse 0.2.0", + "derive-syn-parse", "once_cell", "proc-macro2", "quote", "regex", - "syn 2.0.66", + "syn 2.0.101", "termcolor", - "toml 0.8.14", + "toml 0.8.21", "walkdir", ] @@ -3165,15 +3850,21 @@ checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] name = "dtoa" -version = "1.0.9" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04" + +[[package]] +name = "dunce" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "dyn-clonable" -version = "0.9.0" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e9232f0e607a262ceb9bd5141a3dfb3e4db6994b31989bbfd845878cba59fd4" +checksum = "a36efbb9bfd58e1723780aa04b61aba95ace6a05d9ffabfdb0b43672552f0805" dependencies = [ "dyn-clonable-impl", "dyn-clone", @@ -3181,20 +3872,20 @@ dependencies = [ [[package]] name = "dyn-clonable-impl" -version = "0.9.0" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" +checksum = "7e8671d54058979a37a26f3511fbf8d198ba1aa35ffb202c42587d918d77213a" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.101", ] [[package]] name = "dyn-clone" -version = "1.0.17" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" +checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" [[package]] name = "ecdsa" @@ -3206,6 +3897,7 @@ dependencies = [ "digest 0.10.7", "elliptic-curve", "rfc6979", + "serdect", "signature", "spki", ] @@ -3226,26 +3918,12 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" dependencies = [ - "curve25519-dalek 4.1.3", + "curve25519-dalek", "ed25519", "rand_core 0.6.4", "serde", "sha2 0.10.8", - "subtle 2.4.1", - "zeroize", -] - -[[package]] -name = "ed25519-zebra" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" -dependencies = [ - "curve25519-dalek 3.2.0", - "hashbrown 0.12.3", - "hex", - "rand_core 0.6.4", - "sha2 0.9.9", + "subtle 2.6.1", "zeroize", ] @@ -3255,7 +3933,7 @@ version = "4.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9" dependencies = [ - "curve25519-dalek 4.1.3", + "curve25519-dalek", "ed25519", "hashbrown 0.14.5", "hex", @@ -3266,9 +3944,9 @@ dependencies = [ [[package]] name = "either" -version = "1.12.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "elliptic-curve" @@ -3285,18 +3963,19 @@ dependencies = [ "pkcs8", "rand_core 0.6.4", "sec1", - "subtle 2.4.1", + "serdect", + "subtle 2.6.1", "zeroize", ] [[package]] name = "emulated-integration-tests-common" -version = "4.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "16.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "asset-test-utils", "bp-messages", - "bridge-runtime-common", + "bp-xcm-bridge-hub", "cumulus-pallet-parachain-system", "cumulus-pallet-xcmp-queue", "cumulus-primitives-core", @@ -3306,15 +3985,17 @@ dependencies = [ "pallet-bridge-messages", "pallet-message-queue", "pallet-xcm", + "pallet-xcm-bridge-hub", "parachains-common", "parity-scale-codec", "paste", + "polkadot-parachain-primitives", "polkadot-primitives", "polkadot-runtime-parachains", - "polkadot-service", "sc-consensus-grandpa", "sp-authority-discovery", "sp-consensus-babe", + "sp-consensus-beefy", "sp-core", "sp-runtime", "staging-xcm", @@ -3323,9 +4004,9 @@ dependencies = [ [[package]] name = "encode_unicode" -version = "0.3.6" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" [[package]] name = "enum-as-inner" @@ -3339,6 +4020,18 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "enum-as-inner" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "enum-iterator" version = "2.1.0" @@ -3356,45 +4049,45 @@ checksum = "a1ab991c1362ac86c61ab6f556cff143daa22e5a15e4e189df818b2fd19fe65b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] name = "enumflags2" -version = "0.7.10" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d232db7f5956f3f14313dc2f87985c58bd2c695ce124c8cdd984e08e15ac133d" +checksum = "ba2f4b465f5318854c6f8dd686ede6c0a9dc67d4b1ac241cf0eb51521a309147" dependencies = [ "enumflags2_derive", ] [[package]] name = "enumflags2_derive" -version = "0.7.10" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" +checksum = "fc4caf64a58d7a6d65ab00639b046ff54399a39f5f2554728895ace4b297cd79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] name = "enumn" -version = "0.1.13" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fd000fd6988e73bbe993ea3db9b1aa64906ab88766d654973924340c8cddb42" +checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] name = "env_filter" -version = "0.1.0" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a009aa4810eb158359dda09d0c87378e4bbb89b5a801f016885a4707ba24f7ea" +checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" dependencies = [ "log", ] @@ -3414,9 +4107,9 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.3" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b35839ba51819680ba087cd351788c9a3c476841207e0b8cee0b04722343b9" +checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" dependencies = [ "anstream", "anstyle", @@ -3432,18 +4125,18 @@ checksum = "e48c92028aaa870e83d51c64e5d4e0b6981b360c522198c23959f219a4e1b15b" [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.9" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -3501,28 +4194,28 @@ checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" dependencies = [ "concurrent-queue", "parking", - "pin-project-lite 0.2.14", + "pin-project-lite", ] [[package]] name = "event-listener" -version = "5.3.1" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" +checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" dependencies = [ "concurrent-queue", "parking", - "pin-project-lite 0.2.14", + "pin-project-lite", ] [[package]] name = "event-listener-strategy" -version = "0.5.2" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" dependencies = [ - "event-listener 5.3.1", - "pin-project-lite 0.2.14", + "event-listener 5.4.0", + "pin-project-lite", ] [[package]] @@ -3534,18 +4227,6 @@ dependencies = [ "futures", ] -[[package]] -name = "expander" -version = "0.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a718c0675c555c5f976fff4ea9e2c150fa06cefa201cadef87cfbf9324075881" -dependencies = [ - "blake3", - "fs-err", - "proc-macro2", - "quote", -] - [[package]] name = "expander" version = "2.2.1" @@ -3555,10 +4236,10 @@ dependencies = [ "blake2 0.10.6", "file-guard", "fs-err", - "prettyplease 0.2.20", + "prettyplease 0.2.32", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] @@ -3567,6 +4248,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" +[[package]] +name = "fallible-iterator" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" + [[package]] name = "fastrand" version = "1.9.0" @@ -3578,33 +4265,54 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.1.0" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "fastrlp" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" +dependencies = [ + "arrayvec 0.7.6", + "auto_impl", + "bytes", +] + +[[package]] +name = "fastrlp" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "ce8dba4714ef14b8274c371879b175aa55b16b30f269663f19d576f380018dc4" +dependencies = [ + "arrayvec 0.7.6", + "auto_impl", + "bytes", +] [[package]] name = "fatality" -version = "0.0.6" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ad875162843b0d046276327afe0136e9ed3a23d5a754210fb6f1f33610d39ab" +checksum = "ec6f82451ff7f0568c6181287189126d492b5654e30a788add08027b6363d019" dependencies = [ "fatality-proc-macro", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "fatality-proc-macro" -version = "0.0.6" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5aa1e3ae159e592ad222dc90c5acbad632b527779ba88486abe92782ab268bd" +checksum = "eb42427514b063d97ce21d5199f36c0c307d981434a6be32582bc79fe5bd2303" dependencies = [ - "expander 0.0.4", - "indexmap 1.9.3", - "proc-macro-crate 1.1.3", + "expander", + "indexmap 2.9.0", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 1.0.109", - "thiserror", + "syn 2.0.101", ] [[package]] @@ -3614,17 +4322,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e182f7dbc2ef73d9ef67351c5fbbea084729c48362d3ce9dd44c28e32e277fe5" dependencies = [ "libc", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "ff" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" dependencies = [ "rand_core 0.6.4", - "subtle 2.4.1", + "subtle 2.6.1", ] [[package]] @@ -3655,21 +4363,21 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.23" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" +checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.4.1", - "windows-sys 0.52.0", + "libredox", + "windows-sys 0.59.0", ] [[package]] name = "finality-grandpa" -version = "0.16.2" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36530797b9bf31cd4ff126dcfee8170f86b00cfdcea3269d73133cc0415945c3" +checksum = "b4f8f43dc520133541781ec03a8cab158ae8b7f7169cdf22e9050aa6cf0fbdfc" dependencies = [ "either", "futures", @@ -3688,7 +4396,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" dependencies = [ "byteorder", - "rand", + "rand 0.8.5", "rustc-hex", "static_assertions", ] @@ -3699,17 +4407,6 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" -[[package]] -name = "flate2" -version = "1.0.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" -dependencies = [ - "crc32fast", - "libz-sys", - "miniz_oxide", -] - [[package]] name = "float-cmp" version = "0.9.0" @@ -3734,10 +4431,31 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + [[package]] name = "fork-tree" -version = "12.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "13.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "parity-scale-codec", ] @@ -3751,16 +4469,37 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "fortuples" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87630a8087e9cac4b7edfb6ee5e250ddca9112b57b6b17d8f5107375a3a8eace" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "forwarded-header-value" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8835f84f38484cc86f110a805655697908257fb9a7af005234060891557198e9" +dependencies = [ + "nonempty", + "thiserror 1.0.69", +] + [[package]] name = "fragile" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" +checksum = "28dd6caf6059519a65843af8fe2a3ae298b14b80179855aeb4adc2c1934ee619" [[package]] name = "frame-benchmarking" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-support", "frame-support-procedural", @@ -3777,18 +4516,17 @@ dependencies = [ "sp-io", "sp-runtime", "sp-runtime-interface", - "sp-std", "sp-storage", "static_assertions", ] [[package]] name = "frame-benchmarking-cli" -version = "33.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "43.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "Inflector", - "array-bytes 6.2.3", + "array-bytes", "chrono", "clap", "comfy-table", @@ -3797,14 +4535,15 @@ dependencies = [ "frame-system", "gethostname", "handlebars", - "itertools 0.10.5", + "itertools 0.11.0", "lazy_static", "linked-hash-map", "log", "parity-scale-codec", - "rand", + "rand 0.8.5", "rand_pcg", "sc-block-builder", + "sc-chain-spec", "sc-cli", "sc-client-api", "sc-client-db", @@ -3818,6 +4557,7 @@ dependencies = [ "sp-core", "sp-database", "sp-externalities", + "sp-genesis-builder", "sp-inherents", "sp-io", "sp-keystore", @@ -3826,25 +4566,39 @@ dependencies = [ "sp-storage", "sp-trie", "sp-wasm-interface", - "thiserror", + "thiserror 1.0.69", "thousands", ] +[[package]] +name = "frame-benchmarking-pallet-pov" +version = "28.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", +] + [[package]] name = "frame-election-provider-solution-type" -version = "13.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "14.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "proc-macro-crate 3.1.0", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] name = "frame-election-provider-support" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -3855,14 +4609,14 @@ dependencies = [ "sp-core", "sp-npos-elections", "sp-runtime", - "sp-std", ] [[package]] name = "frame-executive" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ + "aquamarine", "frame-support", "frame-system", "frame-try-runtime", @@ -3872,7 +4626,6 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", "sp-tracing", ] @@ -3890,10 +4643,10 @@ dependencies = [ [[package]] name = "frame-metadata-hash-extension" -version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.6.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "array-bytes 6.2.3", + "array-bytes", "docify", "frame-support", "frame-system", @@ -3903,35 +4656,13 @@ dependencies = [ "sp-runtime", ] -[[package]] -name = "frame-remote-externalities" -version = "0.36.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" -dependencies = [ - "futures", - "indicatif", - "jsonrpsee", - "log", - "parity-scale-codec", - "serde", - "sp-core", - "sp-crypto-hashing", - "sp-io", - "sp-runtime", - "sp-state-machine", - "spinners", - "substrate-rpc-client", - "tokio", - "tokio-retry", -] - [[package]] name = "frame-support" -version = "29.0.2" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "aquamarine", - "array-bytes 6.2.3", + "array-bytes", "bitflags 1.3.2", "docify", "environmental", @@ -3968,49 +4699,50 @@ dependencies = [ [[package]] name = "frame-support-procedural" -version = "24.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "30.0.6" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "Inflector", "cfg-expr", - "derive-syn-parse 0.1.5", - "expander 2.2.1", + "derive-syn-parse", + "docify", + "expander", "frame-support-procedural-tools", - "itertools 0.10.5", + "itertools 0.11.0", "macro_magic", - "proc-macro-warning", + "proc-macro-warning 1.84.1", "proc-macro2", "quote", "sp-crypto-hashing", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] name = "frame-support-procedural-tools" -version = "10.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "13.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-support-procedural-tools-derive", - "proc-macro-crate 3.1.0", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] name = "frame-support-procedural-tools-derive" -version = "11.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "12.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] name = "frame-system" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "cfg-if", "docify", @@ -4029,8 +4761,8 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-support", @@ -4039,28 +4771,27 @@ dependencies = [ "scale-info", "sp-core", "sp-runtime", - "sp-std", ] [[package]] name = "frame-system-rpc-runtime-api" -version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "34.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ + "docify", "parity-scale-codec", "sp-api", ] [[package]] name = "frame-try-runtime" -version = "0.35.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.44.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-support", "parity-scale-codec", "sp-api", "sp-runtime", - "sp-std", ] [[package]] @@ -4088,7 +4819,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "29f9df8a11882c4e3335eb2d18a0137c505d9ca927470b0cac9c6f0ae07d28f7" dependencies = [ - "rustix 0.38.34", + "rustix 0.38.44", "windows-sys 0.48.0", ] @@ -4100,9 +4831,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -4113,6 +4844,16 @@ dependencies = [ "futures-util", ] +[[package]] +name = "futures-bounded" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b07bbbe7d7e78809544c6f718d875627addc73a7c3582447abc052cd3dc67e0" +dependencies = [ + "futures-timer", + "futures-util", +] + [[package]] name = "futures-channel" version = "0.3.31" @@ -4131,9 +4872,9 @@ checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -4158,21 +4899,21 @@ dependencies = [ "futures-io", "memchr", "parking", - "pin-project-lite 0.2.14", + "pin-project-lite", "waker-fn", ] [[package]] name = "futures-lite" -version = "2.3.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" +checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" dependencies = [ - "fastrand 2.1.0", + "fastrand 2.3.0", "futures-core", "futures-io", "parking", - "pin-project-lite 0.2.14", + "pin-project-lite", ] [[package]] @@ -4183,18 +4924,17 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] name = "futures-rustls" -version = "0.22.2" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2411eed028cdf8c8034eaf21f9915f956b6c3abec4d4c7949ee67f0721127bd" +checksum = "35bd3cf68c183738046838e300353e4716c674dc5e56890de4826801a6622a28" dependencies = [ "futures-io", - "rustls 0.20.9", - "webpki", + "rustls 0.21.12", ] [[package]] @@ -4228,7 +4968,7 @@ dependencies = [ "futures-sink", "futures-task", "memchr", - "pin-project-lite 0.2.14", + "pin-project-lite", "pin-utils", "slab", ] @@ -4274,24 +5014,25 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.1.16" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", "libc", - "wasi 0.9.0+wasi-snapshot-preview1", + "wasi 0.11.0+wasi-snapshot-preview1", ] [[package]] name = "getrandom" -version = "0.2.15" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" dependencies = [ "cfg-if", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", ] [[package]] @@ -4300,7 +5041,7 @@ version = "0.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ea1015b5a70616b688dc230cfe50c8af89d972cb132d5a622814d29773b10b9" dependencies = [ - "rand", + "rand 0.8.5", "rand_core 0.6.4", ] @@ -4320,22 +5061,52 @@ version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" dependencies = [ - "fallible-iterator", + "fallible-iterator 0.2.0", "indexmap 1.9.3", "stable_deref_trait", ] [[package]] name = "gimli" -version = "0.29.0" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +dependencies = [ + "fallible-iterator 0.3.0", + "stable_deref_trait", +] + +[[package]] +name = "gimli" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "glob" -version = "0.3.1" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" + +[[package]] +name = "governor" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +checksum = "68a7f542ee6b35af73b06abc0dad1c1bae89964e4e253bc4b587b91c9637867b" +dependencies = [ + "cfg-if", + "dashmap", + "futures", + "futures-timer", + "no-std-compat", + "nonzero_ext", + "parking_lot 0.12.3", + "portable-atomic", + "quanta", + "rand 0.8.5", + "smallvec", + "spinning_top", +] [[package]] name = "group" @@ -4345,7 +5116,7 @@ checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ "ff", "rand_core 0.6.4", - "subtle 2.4.1", + "subtle 2.6.1", ] [[package]] @@ -4359,8 +5130,27 @@ dependencies = [ "futures-core", "futures-sink", "futures-util", - "http", - "indexmap 2.2.6", + "http 0.2.12", + "indexmap 2.9.0", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "h2" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75249d144030531f8dee69fe9cea04d3edf809a017ae445e2abdff6629e86633" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.3.1", + "indexmap 2.9.0", "slab", "tokio", "tokio-util", @@ -4369,16 +5159,16 @@ dependencies = [ [[package]] name = "handlebars" -version = "4.5.0" +version = "5.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faa67bab9ff362228eb3d00bd024a4965d8231bbb7921167f0cfa66c6626b225" +checksum = "d08485b96a0e6393e9e4d1b8d48cf74ad6c063cd905eb33f42c1ce3f0377539b" dependencies = [ "log", "pest", "pest_derive", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -4425,6 +5215,17 @@ dependencies = [ "serde", ] +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] + [[package]] name = "hashlink" version = "0.8.4" @@ -4458,12 +5259,24 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" +[[package]] +name = "hermit-abi" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbd780fe5cc30f81464441920d82ac8740e2e46b29a6fad543ddd075229ce37e" + [[package]] name = "hex" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "hex-conservative" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212ab92002354b4819390025006c897e8140934349e8635c9b077f47b4dcbd20" + [[package]] name = "hex-literal" version = "0.3.4" @@ -4495,16 +5308,6 @@ dependencies = [ "digest 0.9.0", ] -[[package]] -name = "hmac" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" -dependencies = [ - "crypto-mac 0.11.1", - "digest 0.9.0", -] - [[package]] name = "hmac" version = "0.12.1" @@ -4527,22 +5330,22 @@ dependencies = [ [[package]] name = "home" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "hostname" -version = "0.3.1" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" +checksum = "a56f203cd1c76362b69e3863fd987520ac36cf70a8c92627449b2f64a8cf7d65" dependencies = [ + "cfg-if", "libc", - "match_cfg", - "winapi", + "windows-link", ] [[package]] @@ -4556,6 +5359,17 @@ dependencies = [ "itoa", ] +[[package]] +name = "http" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + [[package]] name = "http-body" version = "0.4.6" @@ -4563,21 +5377,38 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", - "http", - "pin-project-lite 0.2.14", + "http 0.2.12", + "pin-project-lite", ] [[package]] -name = "http-range-header" -version = "0.3.1" +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http 1.3.1", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http 1.3.1", + "http-body 1.0.1", + "pin-project-lite", +] [[package]] name = "httparse" -version = "1.9.4" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "httpdate" @@ -4587,34 +5418,54 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "humantime" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f" [[package]] name = "hyper" -version = "0.14.29" +version = "0.14.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f361cde2f109281a220d4307746cdfd5ee3f410da58a70377762396775634b33" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" dependencies = [ "bytes", "futures-channel", "futures-core", "futures-util", - "h2", - "http", - "http-body", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", "httparse", "httpdate", "itoa", - "pin-project-lite 0.2.14", - "socket2 0.5.7", + "pin-project-lite", + "socket2 0.5.9", "tokio", "tower-service", "tracing", "want", ] +[[package]] +name = "hyper" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2 0.4.9", + "http 1.3.1", + "http-body 1.0.1", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", +] + [[package]] name = "hyper-rustls" version = "0.24.2" @@ -4622,27 +5473,44 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", - "http", - "hyper", + "http 0.2.12", + "hyper 0.14.32", "log", "rustls 0.21.12", - "rustls-native-certs", + "rustls-native-certs 0.6.3", + "tokio", + "tokio-rustls 0.24.1", +] + +[[package]] +name = "hyper-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "497bbc33a26fdd4af9ed9c70d63f61cf56a938375fbb32df34db9b1cd6d643f2" +dependencies = [ + "bytes", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "hyper 1.6.0", + "pin-project-lite", "tokio", - "tokio-rustls", + "tower-service", ] [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", + "log", "wasm-bindgen", - "windows-core 0.52.0", + "windows-core 0.61.0", ] [[package]] @@ -4654,6 +5522,124 @@ dependencies = [ "cc", ] +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "idna" version = "0.2.3" @@ -4667,14 +5653,35 @@ dependencies = [ [[package]] name = "idna" -version = "0.5.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" dependencies = [ "unicode-bidi", "unicode-normalization", ] +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + [[package]] name = "if-addrs" version = "0.10.2" @@ -4687,23 +5694,46 @@ dependencies = [ [[package]] name = "if-watch" -version = "3.2.0" +version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6b0422c86d7ce0e97169cc42e04ae643caf278874a7a3c87b8150a220dc7e1e" +checksum = "cdf9d64cfcf380606e64f9a0bcf493616b65331199f984151a6fa11a7b3cde38" dependencies = [ - "async-io 2.3.3", - "core-foundation", + "async-io 2.4.0", + "core-foundation 0.9.4", "fnv", "futures", "if-addrs", "ipnet", "log", + "netlink-packet-core", + "netlink-packet-route", + "netlink-proto", + "netlink-sys", "rtnetlink", "system-configuration", "tokio", "windows", ] +[[package]] +name = "igd-next" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "064d90fec10d541084e7b39ead8875a5a80d9114a2b18791565253bae25f49e4" +dependencies = [ + "async-trait", + "attohttpc", + "bytes", + "futures", + "http 0.2.12", + "hyper 0.14.32", + "log", + "rand 0.8.5", + "tokio", + "url", + "xmltree", +] + [[package]] name = "impl-codec" version = "0.6.0" @@ -4744,13 +5774,13 @@ dependencies = [ [[package]] name = "impl-trait-for-tuples" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.101", ] [[package]] @@ -4785,12 +5815,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.6" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" dependencies = [ "equivalent", - "hashbrown 0.14.5", + "hashbrown 0.15.2", ] [[package]] @@ -4800,25 +5830,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590" [[package]] -name = "indicatif" -version = "0.17.8" +name = "inout" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" dependencies = [ - "console", - "instant", - "number_prefix", - "portable-atomic", - "unicode-width", -] - -[[package]] -name = "inout" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" -dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.7", ] [[package]] @@ -4868,7 +5885,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" dependencies = [ - "socket2 0.5.7", + "socket2 0.5.9", "widestring", "windows-sys 0.48.0", "winreg", @@ -4876,35 +5893,94 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.9.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "is-terminal" -version = "0.4.12" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" +checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" dependencies = [ - "hermit-abi 0.3.9", + "hermit-abi 0.5.0", "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "is_executable" -version = "1.0.1" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa9acdc6d67b75e626ad644734e8bc6df893d9cd2a834129065d3dd6158ea9c8" +checksum = "d4a1b5bad6f9072935961dfbf1cced2f3d129963d091b6f69f007fe04e758ae2" dependencies = [ "winapi", ] [[package]] name = "is_terminal_polyfill" -version = "1.70.0" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "ismp" +version = "0.2.2" +source = "git+https://github.com/polytope-labs/hyperbridge?branch=polkadot-stable2409#d46e41c741b28ac0dbe6af4eb6b4da0a287d9e85" +dependencies = [ + "anyhow", + "derive_more 1.0.0", + "displaydoc", + "hex", + "parity-scale-codec", + "primitive-types", + "scale-info", + "serde", + "serde-hex-utils", + "thiserror 2.0.12", +] + +[[package]] +name = "ismp-parachain" +version = "16.1.0" +source = "git+https://github.com/polytope-labs/hyperbridge?branch=polkadot-stable2409#d46e41c741b28ac0dbe6af4eb6b4da0a287d9e85" +dependencies = [ + "hex", + "hex-literal 0.4.1", + "ismp", + "log", + "pallet-ismp", + "parity-scale-codec", + "polkadot-sdk", + "primitive-types", + "scale-info", + "serde", + "substrate-state-machine", +] + +[[package]] +name = "ismp-parachain-inherent" +version = "16.1.0" +source = "git+https://github.com/polytope-labs/hyperbridge?branch=polkadot-stable2409#d46e41c741b28ac0dbe6af4eb6b4da0a287d9e85" +dependencies = [ + "anyhow", + "async-trait", + "ismp", + "ismp-parachain", + "ismp-parachain-runtime-api", + "log", + "pallet-ismp-runtime-api", + "parity-scale-codec", + "polkadot-sdk", +] + +[[package]] +name = "ismp-parachain-runtime-api" +version = "16.0.0" +source = "git+https://github.com/polytope-labs/hyperbridge?branch=polkadot-stable2409#d46e41c741b28ac0dbe6af4eb6b4da0a287d9e85" +dependencies = [ + "polkadot-sdk", +] [[package]] name = "itertools" @@ -4935,36 +6011,59 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys", + "log", + "thiserror 1.0.69", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.31" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" dependencies = [ + "getrandom 0.3.2", "libc", ] [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ + "once_cell", "wasm-bindgen", ] [[package]] name = "jsonrpsee" -version = "0.20.3" +version = "0.24.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "affdc52f7596ccb2d7645231fc6163bb314630c989b64998f3699a28b4d5d4dc" +checksum = "37b26c20e2178756451cfeb0661fb74c47dd5988cb7e3939de7e9241fd604d42" dependencies = [ "jsonrpsee-core", - "jsonrpsee-http-client", "jsonrpsee-proc-macros", "jsonrpsee-server", "jsonrpsee-types", @@ -4975,19 +6074,22 @@ dependencies = [ [[package]] name = "jsonrpsee-client-transport" -version = "0.20.3" +version = "0.24.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b005c793122d03217da09af68ba9383363caa950b90d3436106df8cabce935" +checksum = "bacb85abf4117092455e1573625e21b8f8ef4dec8aff13361140b2dc266cdff2" dependencies = [ + "base64 0.22.1", "futures-util", - "http", + "http 1.3.1", "jsonrpsee-core", "pin-project", - "rustls-native-certs", - "soketto", - "thiserror", + "rustls 0.23.26", + "rustls-pki-types", + "rustls-platform-verifier", + "soketto 0.8.1", + "thiserror 1.0.69", "tokio", - "tokio-rustls", + "tokio-rustls 0.26.2", "tokio-util", "tracing", "url", @@ -4995,78 +6097,63 @@ dependencies = [ [[package]] name = "jsonrpsee-core" -version = "0.20.3" +version = "0.24.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da2327ba8df2fdbd5e897e2b5ed25ce7f299d345b9736b6828814c3dbd1fd47b" +checksum = "456196007ca3a14db478346f58c7238028d55ee15c1df15115596e411ff27925" dependencies = [ - "anyhow", - "async-lock 2.8.0", "async-trait", - "beef", + "bytes", "futures-timer", "futures-util", - "hyper", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", "jsonrpsee-types", "parking_lot 0.12.3", - "rand", - "rustc-hash", - "serde", - "serde_json", - "soketto", - "thiserror", - "tokio", - "tracing", -] - -[[package]] -name = "jsonrpsee-http-client" -version = "0.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f80c17f62c7653ce767e3d7288b793dfec920f97067ceb189ebdd3570f2bc20" -dependencies = [ - "async-trait", - "hyper", - "hyper-rustls", - "jsonrpsee-core", - "jsonrpsee-types", + "pin-project", + "rand 0.8.5", + "rustc-hash 2.1.1", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "tokio", - "tower", + "tokio-stream", "tracing", - "url", ] [[package]] name = "jsonrpsee-proc-macros" -version = "0.20.3" +version = "0.24.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29110019693a4fa2dbda04876499d098fa16d70eba06b1e6e2b3f1b251419515" +checksum = "5e65763c942dfc9358146571911b0cd1c361c2d63e2d2305622d40d36376ca80" dependencies = [ - "heck 0.4.1", - "proc-macro-crate 1.1.3", + "heck 0.5.0", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.101", ] [[package]] name = "jsonrpsee-server" -version = "0.20.3" +version = "0.24.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82c39a00449c9ef3f50b84fc00fc4acba20ef8f559f07902244abf4c15c5ab9c" +checksum = "55e363146da18e50ad2b51a0a7925fc423137a0b1371af8235b1c231a0647328" dependencies = [ "futures-util", - "http", - "hyper", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "hyper 1.6.0", + "hyper-util", "jsonrpsee-core", "jsonrpsee-types", + "pin-project", "route-recognizer", "serde", "serde_json", - "soketto", - "thiserror", + "soketto 0.8.1", + "thiserror 1.0.69", "tokio", "tokio-stream", "tokio-util", @@ -5076,25 +6163,23 @@ dependencies = [ [[package]] name = "jsonrpsee-types" -version = "0.20.3" +version = "0.24.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be0be325642e850ed0bdff426674d2e66b2b7117c9be23a7caef68a2902b7d9" +checksum = "08a8e70baf945b6b5752fc8eb38c918a48f1234daf11355e07106d963f860089" dependencies = [ - "anyhow", - "beef", + "http 1.3.1", "serde", "serde_json", - "thiserror", - "tracing", + "thiserror 1.0.69", ] [[package]] name = "jsonrpsee-ws-client" -version = "0.20.3" +version = "0.24.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bca9cb3933ccae417eb6b08c3448eb1cb46e39834e5b503e395e5e5bd08546c0" +checksum = "01b3323d890aa384f12148e8d2a1fd18eb66e9e7e825f9de4fa53bcc19b93eef" dependencies = [ - "http", + "http 1.3.1", "jsonrpsee-client-transport", "jsonrpsee-core", "jsonrpsee-types", @@ -5103,14 +6188,15 @@ dependencies = [ [[package]] name = "k256" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" dependencies = [ "cfg-if", "ecdsa", "elliptic-curve", "once_cell", + "serdect", "sha2 0.10.8", ] @@ -5123,9 +6209,19 @@ dependencies = [ "cpufeatures", ] +[[package]] +name = "keccak-asm" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "505d1856a39b200489082f90d897c3f07c455563880bc5952e38eabf731c83b6" +dependencies = [ + "digest 0.10.7", + "sha3-asm", +] + [[package]] name = "kestrel-runtime" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "attestation", "ctype", @@ -5186,7 +6282,7 @@ checksum = "c33070833c9ee02266356de0c43f723152bd38bd96ddf52c82b3af10c9138b28" [[package]] name = "kilt-asset-dids" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "base58", "frame-support", @@ -5201,7 +6297,7 @@ dependencies = [ [[package]] name = "kilt-dip-primitives" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "cumulus-pallet-parachain-system", "cumulus-primitives-core", @@ -5233,7 +6329,7 @@ dependencies = [ [[package]] name = "kilt-parachain" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "clap", "cumulus-client-cli", @@ -5251,9 +6347,13 @@ dependencies = [ "frame-benchmarking", "frame-benchmarking-cli", "hex-literal 0.3.4", + "ismp-parachain-inherent", + "ismp-parachain-runtime-api", "jsonrpsee", "kilt-support", "log", + "pallet-ismp-rpc", + "pallet-ismp-runtime-api", "pallet-transaction-payment-rpc", "parity-scale-codec", "peregrine-runtime", @@ -5296,12 +6396,11 @@ dependencies = [ "substrate-build-script-utils", "substrate-frame-rpc-system", "substrate-prometheus-endpoint", - "try-runtime-cli", ] [[package]] name = "kilt-runtime-api-did" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "did", "frame-system", @@ -5314,7 +6413,7 @@ dependencies = [ [[package]] name = "kilt-runtime-api-dip-provider" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "parity-scale-codec", "sp-api", @@ -5322,7 +6421,7 @@ dependencies = [ [[package]] name = "kilt-runtime-api-public-credentials" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "kilt-support", "parity-scale-codec", @@ -5332,7 +6431,7 @@ dependencies = [ [[package]] name = "kilt-runtime-api-staking" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "parity-scale-codec", "scale-info", @@ -5342,7 +6441,7 @@ dependencies = [ [[package]] name = "kilt-support" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "frame-support", "frame-system", @@ -5400,14 +6499,14 @@ checksum = "9baa9eeb6e315942429397e617a190f4fdc696ef1ee0342939d641029cbb4ea7" dependencies = [ "enumflags2", "libc", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "lazycell" @@ -5417,36 +6516,37 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.155" +version = "0.2.172" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" [[package]] name = "libloading" -version = "0.8.3" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" +checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" dependencies = [ "cfg-if", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] name = "libm" -version = "0.2.8" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" +checksum = "c9627da5196e5d8ed0b0495e61e518847578da83483c37288316d9b2e03a7f72" [[package]] name = "libp2p" -version = "0.51.4" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f35eae38201a993ece6bdc823292d6abd1bffed1c4d0f4a3517d2bd8e1d917fe" +checksum = "e94495eb319a85b70a68b85e2389a95bb3555c71c49025b78c691a854a7e6464" dependencies = [ "bytes", + "either", "futures", "futures-timer", - "getrandom 0.2.15", + "getrandom 0.2.16", "instant", "libp2p-allow-block-list", "libp2p-connection-limits", @@ -5463,18 +6563,21 @@ dependencies = [ "libp2p-request-response", "libp2p-swarm", "libp2p-tcp", + "libp2p-upnp", "libp2p-wasm-ext", "libp2p-websocket", "libp2p-yamux", - "multiaddr", + "multiaddr 0.18.2", "pin-project", + "rw-stream-sink", + "thiserror 1.0.69", ] [[package]] name = "libp2p-allow-block-list" -version = "0.1.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "510daa05efbc25184458db837f6f9a5143888f1caa742426d92e1833ddd38a50" +checksum = "55b46558c5c0bf99d3e2a1a38fd54ff5476ca66dd1737b12466a1824dd219311" dependencies = [ "libp2p-core", "libp2p-identity", @@ -5484,9 +6587,9 @@ dependencies = [ [[package]] name = "libp2p-connection-limits" -version = "0.1.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4caa33f1d26ed664c4fe2cca81a08c8e07d4c1c04f2f4ac7655c2dd85467fda0" +checksum = "2f5107ad45cb20b2f6c3628c7b6014b996fcb13a88053f4569c872c6e30abf58" dependencies = [ "libp2p-core", "libp2p-identity", @@ -5496,9 +6599,9 @@ dependencies = [ [[package]] name = "libp2p-core" -version = "0.39.2" +version = "0.40.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c1df63c0b582aa434fb09b2d86897fa2b419ffeccf934b36f87fcedc8e835c2" +checksum = "dd44289ab25e4c9230d9246c475a22241e301b23e8f4061d3bdef304a1a99713" dependencies = [ "either", "fnv", @@ -5507,29 +6610,31 @@ dependencies = [ "instant", "libp2p-identity", "log", - "multiaddr", - "multihash 0.17.0", + "multiaddr 0.18.2", + "multihash 0.19.3", "multistream-select", "once_cell", "parking_lot 0.12.3", "pin-project", "quick-protobuf", - "rand", + "rand 0.8.5", "rw-stream-sink", "smallvec", - "thiserror", - "unsigned-varint", + "thiserror 1.0.69", + "unsigned-varint 0.7.2", "void", ] [[package]] name = "libp2p-dns" -version = "0.39.0" +version = "0.40.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146ff7034daae62077c415c2376b8057368042df6ab95f5432ad5e88568b1554" +checksum = "e6a18db73084b4da2871438f6239fef35190b05023de7656e877c18a00541a3b" dependencies = [ + "async-trait", "futures", "libp2p-core", + "libp2p-identity", "log", "parking_lot 0.12.3", "smallvec", @@ -5538,51 +6643,52 @@ dependencies = [ [[package]] name = "libp2p-identify" -version = "0.42.2" +version = "0.43.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5455f472243e63b9c497ff320ded0314254a9eb751799a39c283c6f20b793f3c" +checksum = "45a96638a0a176bec0a4bcaebc1afa8cf909b114477209d7456ade52c61cd9cd" dependencies = [ "asynchronous-codec", "either", "futures", + "futures-bounded", "futures-timer", "libp2p-core", "libp2p-identity", "libp2p-swarm", "log", - "lru 0.10.1", + "lru 0.12.5", "quick-protobuf", "quick-protobuf-codec", "smallvec", - "thiserror", + "thiserror 1.0.69", "void", ] [[package]] name = "libp2p-identity" -version = "0.1.3" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "276bb57e7af15d8f100d3c11cbdd32c6752b7eef4ba7a18ecf464972c07abcce" +checksum = "257b5621d159b32282eac446bed6670c39c7dc68a200a992d8f056afa0066f6d" dependencies = [ - "bs58 0.4.0", + "bs58 0.5.1", "ed25519-dalek", - "log", - "multiaddr", - "multihash 0.17.0", + "hkdf", + "multihash 0.19.3", "quick-protobuf", - "rand", + "rand 0.8.5", "sha2 0.10.8", - "thiserror", + "thiserror 1.0.69", + "tracing", "zeroize", ] [[package]] name = "libp2p-kad" -version = "0.43.3" +version = "0.44.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39d5ef876a2b2323d63c258e63c2f8e36f205fe5a11f0b3095d59635650790ff" +checksum = "16ea178dabba6dde6ffc260a8e0452ccdc8f79becf544946692fff9d412fc29d" dependencies = [ - "arrayvec 0.7.4", + "arrayvec 0.7.6", "asynchronous-codec", "bytes", "either", @@ -5595,20 +6701,21 @@ dependencies = [ "libp2p-swarm", "log", "quick-protobuf", - "rand", + "quick-protobuf-codec", + "rand 0.8.5", "sha2 0.10.8", "smallvec", - "thiserror", + "thiserror 1.0.69", "uint", - "unsigned-varint", + "unsigned-varint 0.7.2", "void", ] [[package]] name = "libp2p-mdns" -version = "0.43.1" +version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19983e1f949f979a928f2c603de1cf180cc0dc23e4ac93a62651ccb18341460b" +checksum = "42a2567c305232f5ef54185e9604579a894fd0674819402bb0ac0246da82f52a" dependencies = [ "data-encoding", "futures", @@ -5617,73 +6724,79 @@ dependencies = [ "libp2p-identity", "libp2p-swarm", "log", - "rand", + "rand 0.8.5", "smallvec", - "socket2 0.4.10", + "socket2 0.5.9", "tokio", - "trust-dns-proto", + "trust-dns-proto 0.22.0", "void", ] [[package]] name = "libp2p-metrics" -version = "0.12.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a42ec91e227d7d0dafa4ce88b333cdf5f277253873ab087555c92798db2ddd46" +checksum = "239ba7d28f8d0b5d77760dc6619c05c7e88e74ec8fbbe97f856f20a56745e620" dependencies = [ + "instant", "libp2p-core", "libp2p-identify", + "libp2p-identity", "libp2p-kad", "libp2p-ping", "libp2p-swarm", + "once_cell", "prometheus-client", ] [[package]] name = "libp2p-noise" -version = "0.42.2" +version = "0.43.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3673da89d29936bc6435bafc638e2f184180d554ce844db65915113f86ec5e" +checksum = "d2eeec39ad3ad0677551907dd304b2f13f17208ccebe333bef194076cd2e8921" dependencies = [ "bytes", - "curve25519-dalek 3.2.0", + "curve25519-dalek", "futures", "libp2p-core", "libp2p-identity", "log", + "multiaddr 0.18.2", + "multihash 0.19.3", "once_cell", "quick-protobuf", - "rand", + "rand 0.8.5", "sha2 0.10.8", "snow", "static_assertions", - "thiserror", - "x25519-dalek 1.1.1", + "thiserror 1.0.69", + "x25519-dalek", "zeroize", ] [[package]] name = "libp2p-ping" -version = "0.42.0" +version = "0.43.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e57759c19c28a73ef1eb3585ca410cefb72c1a709fcf6de1612a378e4219202" +checksum = "e702d75cd0827dfa15f8fd92d15b9932abe38d10d21f47c50438c71dd1b5dae3" dependencies = [ "either", "futures", "futures-timer", "instant", "libp2p-core", + "libp2p-identity", "libp2p-swarm", "log", - "rand", + "rand 0.8.5", "void", ] [[package]] name = "libp2p-quic" -version = "0.7.0-alpha.3" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6b26abd81cd2398382a1edfe739b539775be8a90fa6914f39b2ab49571ec735" +checksum = "130d451d83f21b81eb7b35b360bc7972aeafb15177784adc56528db082e6b927" dependencies = [ "bytes", "futures", @@ -5694,18 +6807,20 @@ dependencies = [ "libp2p-tls", "log", "parking_lot 0.12.3", - "quinn-proto", - "rand", - "rustls 0.20.9", - "thiserror", + "quinn 0.10.2", + "rand 0.8.5", + "ring 0.16.20", + "rustls 0.21.12", + "socket2 0.5.9", + "thiserror 1.0.69", "tokio", ] [[package]] name = "libp2p-request-response" -version = "0.24.1" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffdb374267d42dc5ed5bc53f6e601d4a64ac5964779c6e40bb9e4f14c1e30d5" +checksum = "d8e3b4d67870478db72bac87bfc260ee6641d0734e0e3e275798f089c3fecfd4" dependencies = [ "async-trait", "futures", @@ -5713,15 +6828,17 @@ dependencies = [ "libp2p-core", "libp2p-identity", "libp2p-swarm", - "rand", + "log", + "rand 0.8.5", "smallvec", + "void", ] [[package]] name = "libp2p-swarm" -version = "0.42.2" +version = "0.43.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "903b3d592d7694e56204d211f29d31bc004be99386644ba8731fc3e3ef27b296" +checksum = "580189e0074af847df90e75ef54f3f30059aedda37ea5a1659e8b9fca05c0141" dependencies = [ "either", "fnv", @@ -5732,7 +6849,9 @@ dependencies = [ "libp2p-identity", "libp2p-swarm-derive", "log", - "rand", + "multistream-select", + "once_cell", + "rand 0.8.5", "smallvec", "tokio", "void", @@ -5740,36 +6859,39 @@ dependencies = [ [[package]] name = "libp2p-swarm-derive" -version = "0.32.0" +version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fba456131824ab6acd4c7bf61e9c0f0a3014b5fc9868ccb8e10d344594cdc4f" +checksum = "c4d5ec2a3df00c7836d7696c136274c9c59705bac69133253696a6c932cd1d74" dependencies = [ "heck 0.4.1", + "proc-macro-warning 0.4.2", + "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.101", ] [[package]] name = "libp2p-tcp" -version = "0.39.0" +version = "0.40.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d33698596d7722d85d3ab0c86c2c322254fce1241e91208e3679b4eb3026cf" +checksum = "b558dd40d1bcd1aaaed9de898e9ec6a436019ecc2420dd0016e712fbb61c5508" dependencies = [ "futures", "futures-timer", "if-watch", "libc", "libp2p-core", + "libp2p-identity", "log", - "socket2 0.4.10", + "socket2 0.5.9", "tokio", ] [[package]] name = "libp2p-tls" -version = "0.1.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff08d13d0dc66e5e9ba6279c1de417b84fa0d0adc3b03e5732928c180ec02781" +checksum = "8218d1d5482b122ccae396bbf38abdcb283ecc96fa54760e1dfd251f0546ac61" dependencies = [ "futures", "futures-rustls", @@ -5777,56 +6899,74 @@ dependencies = [ "libp2p-identity", "rcgen", "ring 0.16.20", - "rustls 0.20.9", - "thiserror", - "webpki", - "x509-parser", + "rustls 0.21.12", + "rustls-webpki 0.101.7", + "thiserror 1.0.69", + "x509-parser 0.15.1", "yasna", ] +[[package]] +name = "libp2p-upnp" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82775a47b34f10f787ad3e2a22e2c1541e6ebef4fe9f28f3ac553921554c94c1" +dependencies = [ + "futures", + "futures-timer", + "igd-next", + "libp2p-core", + "libp2p-swarm", + "log", + "tokio", + "void", +] + [[package]] name = "libp2p-wasm-ext" -version = "0.39.0" +version = "0.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77dff9d32353a5887adb86c8afc1de1a94d9e8c3bc6df8b2201d7cdf5c848f43" +checksum = "1e5d8e3a9e07da0ef5b55a9f26c009c8fb3c725d492d8bb4b431715786eea79c" dependencies = [ "futures", "js-sys", "libp2p-core", - "parity-send-wrapper", + "send_wrapper", "wasm-bindgen", "wasm-bindgen-futures", ] [[package]] name = "libp2p-websocket" -version = "0.41.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "111273f7b3d3510524c752e8b7a5314b7f7a1fee7e68161c01a7d72cbb06db9f" +checksum = "004ee9c4a4631435169aee6aad2f62e3984dc031c43b6d29731e8e82a016c538" dependencies = [ "either", "futures", "futures-rustls", "libp2p-core", + "libp2p-identity", "log", "parking_lot 0.12.3", - "quicksink", + "pin-project-lite", "rw-stream-sink", - "soketto", + "soketto 0.8.1", + "thiserror 1.0.69", "url", "webpki-roots", ] [[package]] name = "libp2p-yamux" -version = "0.43.1" +version = "0.44.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd21d950662700a385d4c6d68e2f5f54d778e97068cdd718522222ef513bda" +checksum = "8eedcb62824c4300efb9cfd4e2a6edaf3ca097b9e68b36dabe45a44469fd6a85" dependencies = [ "futures", "libp2p-core", "log", - "thiserror", + "thiserror 1.0.69", "yamux", ] @@ -5836,8 +6976,9 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.9.0", "libc", + "redox_syscall 0.5.11", ] [[package]] @@ -5857,18 +6998,18 @@ dependencies = [ [[package]] name = "libsecp256k1" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" +checksum = "e79019718125edc905a079a70cfa5f3820bc76139fc91d6f9abc27ea2a887139" dependencies = [ "arrayref", - "base64 0.13.1", + "base64 0.22.1", "digest 0.9.0", "hmac-drbg", "libsecp256k1-core", "libsecp256k1-gen-ecmult", "libsecp256k1-gen-genmult", - "rand", + "rand 0.8.5", "serde", "sha2 0.9.9", "typenum", @@ -5882,7 +7023,7 @@ checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" dependencies = [ "crunchy", "digest 0.9.0", - "subtle 2.4.1", + "subtle 2.6.1", ] [[package]] @@ -5905,9 +7046,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.18" +version = "1.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c15da26e5af7e25c90b37a2d75cdbf940cf4a55316de9d84c679c9b8bfabf82e" +checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d" dependencies = [ "cc", "pkg-config", @@ -5916,9 +7057,9 @@ dependencies = [ [[package]] name = "link-cplusplus" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d240c6f7e1ba3a28b0249f774e6a9dd0175054b52dfbb61b16eb8505c3785c9" +checksum = "4a6f6da007f968f9def0d65a05b187e2960183de70c160204ecfccf0ee330212" dependencies = [ "cc", ] @@ -5931,18 +7072,18 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linked_hash_set" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47186c6da4d81ca383c7c47c1bfc80f4b95f4720514d860a5407aaf4233f9588" +checksum = "bae85b5be22d9843c80e5fc80e9b64c8a3b1f98f867c709956eca3efff4e92e2" dependencies = [ "linked-hash-map", ] [[package]] name = "linregress" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4de04dcecc58d366391f9920245b85ffa684558a5ef6e7736e754347c3aea9c2" +checksum = "a9eda9dcf4f2a99787827661f312ac3219292549c2ee992bf9a6248ffb066bf7" dependencies = [ "nalgebra", ] @@ -5961,9 +7102,15 @@ checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" [[package]] name = "linux-raw-sys" -version = "0.4.14" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "linux-raw-sys" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" [[package]] name = "lioness" @@ -5977,6 +7124,67 @@ dependencies = [ "keystream", ] +[[package]] +name = "litemap" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" + +[[package]] +name = "litep2p" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f46c51c205264b834ceed95c8b195026e700494bc3991aaba3b4ea9e20626d9" +dependencies = [ + "async-trait", + "bs58 0.4.0", + "bytes", + "cid 0.10.1", + "ed25519-dalek", + "futures", + "futures-timer", + "hex-literal 0.4.1", + "indexmap 2.9.0", + "libc", + "mockall 0.12.1", + "multiaddr 0.17.1", + "multihash 0.17.0", + "network-interface", + "nohash-hasher", + "parking_lot 0.12.3", + "pin-project", + "prost 0.12.6", + "prost-build 0.11.9", + "quinn 0.9.4", + "rand 0.8.5", + "rcgen", + "ring 0.16.20", + "rustls 0.20.9", + "serde", + "sha2 0.10.8", + "simple-dns", + "smallvec", + "snow", + "socket2 0.5.9", + "static_assertions", + "str0m", + "thiserror 1.0.69", + "tokio", + "tokio-stream", + "tokio-tungstenite", + "tokio-util", + "tracing", + "trust-dns-resolver", + "uint", + "unsigned-varint 0.8.0", + "url", + "webpki", + "x25519-dalek", + "x509-parser 0.16.0", + "yasna", + "zeroize", +] + [[package]] name = "lock_api" version = "0.4.12" @@ -5989,9 +7197,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.21" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "lru" @@ -6004,18 +7212,18 @@ dependencies = [ [[package]] name = "lru" -version = "0.10.1" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "718e8fae447df0c7e1ba7f5189829e63fd536945c8988d61444c19039f16b670" -dependencies = [ - "hashbrown 0.13.2", -] +checksum = "a4a83fb7698b3643a0e34f9ae6f2e8f0178c0fd42f8b59d493aa271ff3a5bf21" [[package]] name = "lru" -version = "0.11.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a83fb7698b3643a0e34f9ae6f2e8f0178c0fd42f8b59d493aa271ff3a5bf21" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" +dependencies = [ + "hashbrown 0.15.2", +] [[package]] name = "lru-cache" @@ -6028,19 +7236,18 @@ dependencies = [ [[package]] name = "lz4" -version = "1.25.0" +version = "1.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6eab492fe7f8651add23237ea56dbf11b3c4ff762ab83d40a47f11433421f91" +checksum = "a20b523e860d03443e98350ceaac5e71c6ba89aea7d960769ec3ce37f4de5af4" dependencies = [ - "libc", "lz4-sys", ] [[package]] name = "lz4-sys" -version = "1.9.5" +version = "1.11.1+lz4-1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9764018d143cc854c9f17f0b907de70f14393b1f502da6375dce70f00514eb3" +checksum = "6bd8c0d6c6ed0cd30b3652886bb8711dc4bb01d637a68105a3d5158039b418e6" dependencies = [ "cc", "libc", @@ -6057,81 +7264,60 @@ dependencies = [ [[package]] name = "macro_magic" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e03844fc635e92f3a0067e25fa4bf3e3dbf3f2927bf3aa01bb7bc8f1c428949d" +checksum = "cc33f9f0351468d26fbc53d9ce00a096c8522ecb42f19b50f34f2c422f76d21d" dependencies = [ "macro_magic_core", "macro_magic_macros", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] name = "macro_magic_core" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "468155613a44cfd825f1fb0ffa532b018253920d404e6fca1e8d43155198a46d" +checksum = "1687dc887e42f352865a393acae7cf79d98fab6351cde1f58e9e057da89bf150" dependencies = [ "const-random", - "derive-syn-parse 0.1.5", + "derive-syn-parse", "macro_magic_core_macros", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] name = "macro_magic_core_macros" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea73aa640dc01d62a590d48c0c3521ed739d53b27f919b25c3551e233481654" +checksum = "b02abfe41815b5bd98dbd4260173db2c116dda171dc0fe7838cb206333b83308" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] name = "macro_magic_macros" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef9d79ae96aaba821963320eb2b6e34d17df1e5a83d8a1985c29cc5be59577b3" +checksum = "73ea28ee64b88876bf45277ed9a5817c1817df061a74f2b988971a12570e5869" dependencies = [ "macro_magic_core", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] -name = "maplit" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" - -[[package]] -name = "match_cfg" +name = "matchers" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" - -[[package]] -name = "matchers" -version = "0.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1" -dependencies = [ - "regex-automata 0.1.10", -] - -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata 0.1.10", -] +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] [[package]] name = "matches" @@ -6141,9 +7327,9 @@ checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" [[package]] name = "matrixmultiply" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2" +checksum = "9380b911e3e96d10c1f415da0876389aaf1b56759054eeb0de7df940c456ba1a" dependencies = [ "autocfg", "rawpointer", @@ -6161,7 +7347,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2cffa4ad52c6f791f4f8b15f0c05f9824b2ced1160e88cc393d64fff9a8ac64" dependencies = [ - "rustix 0.38.34", + "rustix 0.38.44", ] [[package]] @@ -6175,9 +7361,9 @@ dependencies = [ [[package]] name = "memmap2" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" +checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" dependencies = [ "libc", ] @@ -6206,7 +7392,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f313fcff1d2a4bcaa2deeaa00bf7530d77d5f7bd0467a117dde2e29a75a7a17a" dependencies = [ - "array-bytes 6.2.3", + "array-bytes", "blake3", "frame-metadata", "parity-scale-codec", @@ -6233,7 +7419,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69672161530e8aeca1d1400fbf3f1a1747ff60ea604265a4e906c2442df20532" dependencies = [ "futures", - "rand", + "rand 0.8.5", "thrift", ] @@ -6245,22 +7431,22 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.4" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" dependencies = [ - "adler", + "adler2", ] [[package]] name = "mio" -version = "0.8.11" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ "libc", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -6270,28 +7456,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "daa3eb39495d8e2e2947a1d862852c90cc6a4a8845f8b41c8829cb9fcc047f4a" dependencies = [ "arrayref", - "arrayvec 0.7.4", + "arrayvec 0.7.6", "bitflags 1.3.2", "blake2 0.10.6", "c2-chacha", - "curve25519-dalek 4.1.3", + "curve25519-dalek", "either", "hashlink", "lioness", "log", "parking_lot 0.12.3", - "rand", + "rand 0.8.5", "rand_chacha 0.3.1", "rand_distr", - "subtle 2.4.1", - "thiserror", + "subtle 2.6.1", + "thiserror 1.0.69", "zeroize", ] [[package]] name = "mmr-gadget" -version = "30.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "futures", "log", @@ -6309,8 +7495,8 @@ dependencies = [ [[package]] name = "mmr-rpc" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -6332,8 +7518,23 @@ dependencies = [ "downcast", "fragile", "lazy_static", - "mockall_derive", - "predicates", + "mockall_derive 0.11.4", + "predicates 2.1.5", + "predicates-tree", +] + +[[package]] +name = "mockall" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43766c2b5203b10de348ffe19f7e54564b64f3d6018ff7648d1e2d6d3a0f0a48" +dependencies = [ + "cfg-if", + "downcast", + "fragile", + "lazy_static", + "mockall_derive 0.12.1", + "predicates 3.1.3", "predicates-tree", ] @@ -6349,6 +7550,24 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "mockall_derive" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af7cbce79ec385a1d4f54baa90a76401eb15d9cab93685f62e7e9f942aa00ae2" +dependencies = [ + "cfg-if", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "multi-stash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "685a9ac4b61f4e728e1d2c6a7844609c16527aeb5e6c865915c08e619c16410f" + [[package]] name = "multiaddr" version = "0.17.1" @@ -6364,7 +7583,26 @@ dependencies = [ "percent-encoding", "serde", "static_assertions", - "unsigned-varint", + "unsigned-varint 0.7.2", + "url", +] + +[[package]] +name = "multiaddr" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe6351f60b488e04c1d21bc69e56b89cb3f5e8f5d22557d6e8031bdfd79b6961" +dependencies = [ + "arrayref", + "byteorder", + "data-encoding", + "libp2p-identity", + "multibase", + "multihash 0.19.3", + "percent-encoding", + "serde", + "static_assertions", + "unsigned-varint 0.8.0", "url", ] @@ -6390,10 +7628,10 @@ dependencies = [ "blake3", "core2", "digest 0.10.7", - "multihash-derive 0.8.1", + "multihash-derive", "sha2 0.10.8", "sha3", - "unsigned-varint", + "unsigned-varint 0.7.2", ] [[package]] @@ -6402,41 +7640,25 @@ version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfd8a792c1694c6da4f68db0a9d707c72bd260994da179e6030a5dcee00bb815" dependencies = [ + "blake2b_simd", + "blake2s_simd", + "blake3", "core2", "digest 0.10.7", - "multihash-derive 0.8.1", + "multihash-derive", "sha2 0.10.8", - "unsigned-varint", + "sha3", + "unsigned-varint 0.7.2", ] [[package]] name = "multihash" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "076d548d76a0e2a0d4ab471d0b1c36c577786dfc4471242035d97a12a735c492" -dependencies = [ - "core2", - "unsigned-varint", -] - -[[package]] -name = "multihash-codetable" -version = "0.1.1" +version = "0.19.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6d815ecb3c8238d00647f8630ede7060a642c9f704761cd6082cb4028af6935" +checksum = "6b430e7953c29dd6a09afc29ff0bb69c6e306329ee6794700aee27b76a1aea8d" dependencies = [ - "blake2b_simd", - "blake2s_simd", - "blake3", "core2", - "digest 0.10.7", - "multihash-derive 0.9.0", - "ripemd", - "serde", - "sha1", - "sha2 0.10.8", - "sha3", - "strobe-rs", + "unsigned-varint 0.8.0", ] [[package]] @@ -6453,31 +7675,6 @@ dependencies = [ "synstructure 0.12.6", ] -[[package]] -name = "multihash-derive" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "890e72cb7396cb99ed98c1246a97b243cc16394470d94e0bc8b0c2c11d84290e" -dependencies = [ - "core2", - "multihash 0.19.1", - "multihash-derive-impl", -] - -[[package]] -name = "multihash-derive-impl" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3958713ce794e12f7c6326fac9aa274c68d74c4881dd37b3e2662b8a2046bb19" -dependencies = [ - "proc-macro-crate 2.0.0", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 2.0.66", - "synstructure 0.13.1", -] - [[package]] name = "multimap" version = "0.8.3" @@ -6486,27 +7683,26 @@ checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" [[package]] name = "multistream-select" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8552ab875c1313b97b8d20cb857b9fd63e2d1d6a0a1b53ce9821e575405f27a" +checksum = "ea0df8e5eec2298a62b326ee4f0d7fe1a6b90a09dfcf9df37b38f947a8c42f19" dependencies = [ "bytes", "futures", "log", "pin-project", "smallvec", - "unsigned-varint", + "unsigned-varint 0.7.2", ] [[package]] name = "nalgebra" -version = "0.32.6" +version = "0.33.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5c17de023a86f59ed79891b2e5d5a94c705dbe904a5b5c9c952ea6221b03e4" +checksum = "26aecdf64b707efd1310e3544d709c5c0ac61c13756046aaaba41be5c4f66a3b" dependencies = [ "approx", "matrixmultiply", - "nalgebra-macros", "num-complex", "num-rational", "num-traits", @@ -6514,24 +7710,13 @@ dependencies = [ "typenum", ] -[[package]] -name = "nalgebra-macros" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91761aed67d03ad966ef783ae962ef9bbaca728d2dd7ceb7939ec110fffad998" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "names" version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7bddcd3bf5144b6392de80e04c347cd7fab2508f6df16a85fc496ecd5cec39bc" dependencies = [ - "rand", + "rand 0.8.5", ] [[package]] @@ -6542,21 +7727,20 @@ checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" [[package]] name = "netlink-packet-core" -version = "0.4.2" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "345b8ab5bd4e71a2986663e88c56856699d060e78e152e6e9d7966fcd5491297" +checksum = "72724faf704479d67b388da142b186f916188505e7e0b26719019c525882eda4" dependencies = [ "anyhow", "byteorder", - "libc", "netlink-packet-utils", ] [[package]] name = "netlink-packet-route" -version = "0.12.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9ea4302b9759a7a88242299225ea3688e63c85ea136371bb6cf94fd674efaab" +checksum = "053998cea5a306971f88580d0829e90f270f940befd7cf928da179d4187a5a66" dependencies = [ "anyhow", "bitflags 1.3.2", @@ -6575,29 +7759,28 @@ dependencies = [ "anyhow", "byteorder", "paste", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "netlink-proto" -version = "0.10.0" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65b4b14489ab424703c092062176d52ba55485a89c076b4f9db05092b7223aa6" +checksum = "72452e012c2f8d612410d89eea01e2d9b56205274abb35d53f60200b2ec41d60" dependencies = [ "bytes", "futures", "log", "netlink-packet-core", "netlink-sys", - "thiserror", - "tokio", + "thiserror 2.0.12", ] [[package]] name = "netlink-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416060d346fbaf1f23f9512963e3e878f1a78e707cb699ba9215761754244307" +checksum = "16c903aa70590cb93691bf97a767c8d1d6122d2cc9070433deb3bbf36ce8bd23" dependencies = [ "bytes", "futures", @@ -6606,11 +7789,23 @@ dependencies = [ "tokio", ] +[[package]] +name = "network-interface" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a43439bf756eed340bdf8feba761e2d50c7d47175d87545cd5cbe4a137c4d1" +dependencies = [ + "cc", + "libc", + "thiserror 1.0.69", + "winapi", +] + [[package]] name = "nix" -version = "0.24.3" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" dependencies = [ "bitflags 1.3.2", "cfg-if", @@ -6619,15 +7814,22 @@ dependencies = [ [[package]] name = "nix" -version = "0.27.1" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.9.0", "cfg-if", + "cfg_aliases", "libc", ] +[[package]] +name = "no-std-compat" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" + [[package]] name = "no-std-net" version = "0.6.0" @@ -6656,6 +7858,18 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "nonempty" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9e591e719385e6ebaeb5ce5d3887f7d5676fceca6411d1925ccc95745f3d6f7" + +[[package]] +name = "nonzero_ext" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21" + [[package]] name = "normalize-line-endings" version = "0.3.0" @@ -6674,9 +7888,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", "num-traits", @@ -6697,13 +7911,24 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "num-format" version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" dependencies = [ - "arrayvec 0.7.4", + "arrayvec 0.7.6", "itoa", ] @@ -6747,12 +7972,6 @@ dependencies = [ "libc", ] -[[package]] -name = "number_prefix" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" - [[package]] name = "object" version = "0.30.4" @@ -6767,9 +7986,18 @@ dependencies = [ [[package]] name = "object" -version = "0.36.0" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +dependencies = [ + "memchr", +] + +[[package]] +name = "object" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "576dfe1fc8f9df304abb159d767a29d0476f7750fbf8aa7ad07816004a207434" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] @@ -6780,14 +8008,23 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" dependencies = [ - "asn1-rs", + "asn1-rs 0.5.2", +] + +[[package]] +name = "oid-registry" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d8034d9489cdaf79228eb9f6a3b8d7bb32ba00d6645ebd48eef4077ceb5bd9" +dependencies = [ + "asn1-rs 0.6.2", ] [[package]] name = "once_cell" -version = "1.19.0" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "opaque-debug" @@ -6801,11 +8038,59 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" +[[package]] +name = "openssl" +version = "0.10.72" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fedfea7d58a1f73118430a55da6a286e7b044961736ce96a16a17068ea25e5da" +dependencies = [ + "bitflags 2.9.0", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "openssl-probe" -version = "0.1.5" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" + +[[package]] +name = "openssl-src" +version = "300.5.0+3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8ce546f549326b0e6052b649198487d91320875da901e7bd11a06d1ee3f9c2f" +dependencies = [ + "cc", +] + +[[package]] +name = "openssl-sys" +version = "0.9.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +checksum = "8288979acd84749c744a9014b4382d42b8f7b2592847b5afb2ed29e5d16ede07" +dependencies = [ + "cc", + "libc", + "openssl-src", + "pkg-config", + "vcpkg", +] [[package]] name = "option-ext" @@ -6815,9 +8100,9 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "orchestra" -version = "0.3.6" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92829eef0328a3d1cd22a02c0e51deb92a5362df3e7d21a4e9bdc38934694e66" +checksum = "41f6bbacc8c189a3f2e45e0fd0436e5d97f194db888e721bdbc3973e7dbed4c2" dependencies = [ "async-trait", "dyn-clonable", @@ -6826,21 +8111,21 @@ dependencies = [ "orchestra-proc-macro", "pin-project", "prioritized-metered-channel", - "thiserror", + "thiserror 1.0.69", "tracing", ] [[package]] name = "orchestra-proc-macro" -version = "0.3.6" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1344346d5af32c95bbddea91b18a88cc83eac394192d20ef2fc4c40a74332355" +checksum = "f7b1d40dd8f367db3c65bec8d3dd47d4a604ee8874480738f93191bddab4e0e0" dependencies = [ - "expander 2.2.1", - "indexmap 2.2.6", + "expander", + "indexmap 2.9.0", "itertools 0.11.0", "petgraph", - "proc-macro-crate 3.1.0", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", "syn 1.0.109", @@ -6861,14 +8146,35 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" +[[package]] +name = "pallet-alliance" +version = "37.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "array-bytes", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-collective", + "pallet-identity", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-crypto-hashing", + "sp-io", + "sp-runtime", +] + [[package]] name = "pallet-asset-conversion" -version = "11.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "20.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", + "log", "parity-scale-codec", "scale-info", "sp-api", @@ -6876,13 +8182,30 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", +] + +[[package]] +name = "pallet-asset-conversion-ops" +version = "0.6.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-asset-conversion", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", ] [[package]] name = "pallet-asset-conversion-tx-payment" -version = "11.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "20.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-support", "frame-system", @@ -6891,13 +8214,12 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-asset-rate" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "17.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-support", @@ -6906,12 +8228,11 @@ dependencies = [ "scale-info", "sp-core", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-asset-switch" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "env_logger 0.10.2", "frame-benchmarking", @@ -6934,7 +8255,7 @@ dependencies = [ [[package]] name = "pallet-asset-switch-runtime-api" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "parity-scale-codec", "sp-api", @@ -6943,8 +8264,8 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-support", @@ -6956,29 +8277,57 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-assets" -version = "30.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", + "impl-trait-for-tuples", "log", "parity-scale-codec", "scale-info", "sp-core", "sp-runtime", - "sp-std", +] + +[[package]] +name = "pallet-assets-freezer" +version = "0.5.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-assets", + "parity-scale-codec", + "scale-info", + "sp-runtime", +] + +[[package]] +name = "pallet-atomic-swap" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", ] [[package]] name = "pallet-aura" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "37.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-support", "frame-system", @@ -6989,13 +8338,12 @@ dependencies = [ "sp-application-crypto", "sp-consensus-aura", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-authority-discovery" -version = "29.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-support", "frame-system", @@ -7005,13 +8353,12 @@ dependencies = [ "sp-application-crypto", "sp-authority-discovery", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-authorship" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-support", "frame-system", @@ -7019,13 +8366,12 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-babe" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-support", @@ -7043,13 +8389,12 @@ dependencies = [ "sp-runtime", "sp-session", "sp-staking", - "sp-std", ] [[package]] name = "pallet-bags-list" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "37.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "aquamarine", "docify", @@ -7064,14 +8409,13 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", "sp-tracing", ] [[package]] name = "pallet-balances" -version = "29.0.2" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "39.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "docify", "frame-benchmarking", @@ -7081,13 +8425,12 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-beefy" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-support", "frame-system", @@ -7101,16 +8444,16 @@ dependencies = [ "sp-runtime", "sp-session", "sp-staking", - "sp-std", ] [[package]] name = "pallet-beefy-mmr" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "array-bytes 6.2.3", + "array-bytes", "binary-merkle-tree", + "frame-benchmarking", "frame-support", "frame-system", "log", @@ -7126,12 +8469,11 @@ dependencies = [ "sp-io", "sp-runtime", "sp-state-machine", - "sp-std", ] [[package]] name = "pallet-bonded-coins" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "frame-benchmarking", "frame-support", @@ -7153,7 +8495,7 @@ dependencies = [ [[package]] name = "pallet-bonded-coins-runtime-api" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "pallet-bonded-coins", "parity-scale-codec", @@ -7164,8 +8506,8 @@ dependencies = [ [[package]] name = "pallet-bounties" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "37.0.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-support", @@ -7177,18 +8519,16 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-bridge-grandpa" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.18.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bp-header-chain", "bp-runtime", "bp-test-utils", - "finality-grandpa", "frame-benchmarking", "frame-support", "frame-system", @@ -7198,31 +8538,31 @@ dependencies = [ "sp-consensus-grandpa", "sp-runtime", "sp-std", - "sp-trie", ] [[package]] name = "pallet-bridge-messages" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.18.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ + "bp-header-chain", "bp-messages", "bp-runtime", "frame-benchmarking", "frame-support", "frame-system", "log", - "num-traits", "parity-scale-codec", "scale-info", "sp-runtime", "sp-std", + "sp-trie", ] [[package]] name = "pallet-bridge-parachains" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.18.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bp-header-chain", "bp-parachains", @@ -7237,14 +8577,14 @@ dependencies = [ "scale-info", "sp-runtime", "sp-std", - "sp-trie", ] [[package]] name = "pallet-bridge-relayers" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.18.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ + "bp-header-chain", "bp-messages", "bp-relayers", "bp-runtime", @@ -7252,7 +8592,10 @@ dependencies = [ "frame-support", "frame-system", "log", + "pallet-bridge-grandpa", "pallet-bridge-messages", + "pallet-bridge-parachains", + "pallet-transaction-payment", "parity-scale-codec", "scale-info", "sp-arithmetic", @@ -7262,8 +8605,8 @@ dependencies = [ [[package]] name = "pallet-broker" -version = "0.7.2" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.17.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bitvec", "frame-benchmarking", @@ -7272,16 +8615,16 @@ dependencies = [ "log", "parity-scale-codec", "scale-info", + "sp-api", "sp-arithmetic", "sp-core", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-child-bounties" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "37.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-support", @@ -7294,13 +8637,12 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-collator-selection" -version = "10.0.2" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "19.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-support", @@ -7310,17 +8652,16 @@ dependencies = [ "pallet-balances", "pallet-session", "parity-scale-codec", - "rand", + "rand 0.8.5", "scale-info", "sp-runtime", "sp-staking", - "sp-std", ] [[package]] name = "pallet-collective" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-support", @@ -7331,12 +8672,25 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", +] + +[[package]] +name = "pallet-collective-content" +version = "0.16.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-runtime", ] [[package]] name = "pallet-configuration" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "cumulus-pallet-parachain-system", "frame-benchmarking", @@ -7353,10 +8707,100 @@ dependencies = [ "sp-std", ] +[[package]] +name = "pallet-contracts" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "bitflags 1.3.2", + "environmental", + "frame-benchmarking", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log", + "pallet-balances", + "pallet-contracts-proc-macro", + "pallet-contracts-uapi", + "parity-scale-codec", + "paste", + "rand 0.8.5", + "rand_pcg", + "scale-info", + "serde", + "smallvec", + "sp-api", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "staging-xcm", + "staging-xcm-builder", + "wasm-instrument", + "wasmi 0.32.3", +] + +[[package]] +name = "pallet-contracts-mock-network" +version = "14.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "frame-support", + "frame-system", + "pallet-assets", + "pallet-balances", + "pallet-contracts", + "pallet-contracts-proc-macro", + "pallet-contracts-uapi", + "pallet-insecure-randomness-collective-flip", + "pallet-message-queue", + "pallet-proxy", + "pallet-timestamp", + "pallet-utility", + "pallet-xcm", + "parity-scale-codec", + "polkadot-parachain-primitives", + "polkadot-primitives", + "polkadot-runtime-parachains", + "scale-info", + "sp-api", + "sp-core", + "sp-io", + "sp-keystore", + "sp-runtime", + "sp-tracing", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", + "xcm-simulator", +] + +[[package]] +name = "pallet-contracts-proc-macro" +version = "23.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "pallet-contracts-uapi" +version = "12.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "bitflags 1.3.2", + "parity-scale-codec", + "paste", + "polkavm-derive 0.9.1", + "scale-info", +] + [[package]] name = "pallet-conviction-voting" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "assert_matches", "frame-benchmarking", @@ -7367,13 +8811,45 @@ dependencies = [ "serde", "sp-io", "sp-runtime", - "sp-std", +] + +[[package]] +name = "pallet-core-fellowship" +version = "22.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-ranked-collective", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-delegated-staking" +version = "5.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "sp-staking", ] [[package]] name = "pallet-democracy" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-support", @@ -7385,12 +8861,11 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-deposit-storage" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "frame-benchmarking", "frame-support", @@ -7407,9 +8882,24 @@ dependencies = [ "sp-std", ] +[[package]] +name = "pallet-dev-mode" +version = "20.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "frame-support", + "frame-system", + "log", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", +] + [[package]] name = "pallet-did-lookup" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "base58", "blake2 0.10.6", @@ -7436,7 +8926,7 @@ dependencies = [ [[package]] name = "pallet-dip-consumer" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "cfg-if", "frame-benchmarking", @@ -7456,7 +8946,7 @@ dependencies = [ [[package]] name = "pallet-dip-provider" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "did", "frame-benchmarking", @@ -7474,8 +8964,8 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "37.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -7484,21 +8974,20 @@ dependencies = [ "log", "pallet-election-provider-support-benchmarking", "parity-scale-codec", - "rand", + "rand 0.8.5", "scale-info", "sp-arithmetic", "sp-core", "sp-io", "sp-npos-elections", "sp-runtime", - "sp-std", - "strum 0.24.1", + "strum 0.26.3", ] [[package]] name = "pallet-election-provider-support-benchmarking" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "37.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -7506,13 +8995,12 @@ dependencies = [ "parity-scale-codec", "sp-npos-elections", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-elections-phragmen" -version = "30.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-support", @@ -7525,13 +9013,12 @@ dependencies = [ "sp-npos-elections", "sp-runtime", "sp-staking", - "sp-std", ] [[package]] name = "pallet-fast-unstake" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "37.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "docify", "frame-benchmarking", @@ -7544,13 +9031,30 @@ dependencies = [ "sp-io", "sp-runtime", "sp-staking", - "sp-std", +] + +[[package]] +name = "pallet-glutton" +version = "24.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "blake2 0.10.6", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-inherents", + "sp-io", + "sp-runtime", ] [[package]] name = "pallet-grandpa" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-support", @@ -7567,13 +9071,26 @@ dependencies = [ "sp-runtime", "sp-session", "sp-staking", - "sp-std", +] + +[[package]] +name = "pallet-hyperbridge" +version = "16.0.0" +source = "git+https://github.com/polytope-labs/hyperbridge?branch=polkadot-stable2409#d46e41c741b28ac0dbe6af4eb6b4da0a287d9e85" +dependencies = [ + "anyhow", + "ismp", + "pallet-ismp", + "parity-scale-codec", + "polkadot-sdk", + "primitive-types", + "scale-info", ] [[package]] name = "pallet-identity" -version = "29.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "enumflags2", "frame-benchmarking", @@ -7584,13 +9101,12 @@ dependencies = [ "scale-info", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-im-online" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "37.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-support", @@ -7604,13 +9120,12 @@ dependencies = [ "sp-io", "sp-runtime", "sp-staking", - "sp-std", ] [[package]] name = "pallet-indices" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-support", @@ -7621,12 +9136,11 @@ dependencies = [ "sp-io", "sp-keyring", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-inflation" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "frame-benchmarking", "frame-support", @@ -7641,45 +9155,119 @@ dependencies = [ ] [[package]] -name = "pallet-membership" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +name = "pallet-insecure-randomness-collective-flip" +version = "26.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "frame-benchmarking", "frame-support", "frame-system", - "log", "parity-scale-codec", + "safe-mix", "scale-info", - "sp-core", - "sp-io", "sp-runtime", - "sp-std", ] [[package]] -name = "pallet-message-queue" -version = "32.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +name = "pallet-ismp" +version = "16.1.0" +source = "git+https://github.com/polytope-labs/hyperbridge?branch=polkadot-stable2409#d46e41c741b28ac0dbe6af4eb6b4da0a287d9e85" dependencies = [ - "environmental", - "frame-benchmarking", - "frame-support", - "frame-system", + "anyhow", + "fortuples", + "ismp", "log", "parity-scale-codec", + "polkadot-sdk", "scale-info", - "sp-arithmetic", - "sp-core", + "serde", "sp-io", - "sp-runtime", - "sp-std", - "sp-weights", ] [[package]] -name = "pallet-migration" -version = "1.16.0-dev" +name = "pallet-ismp-rpc" +version = "16.0.0" +source = "git+https://github.com/polytope-labs/hyperbridge?branch=polkadot-stable2409#d46e41c741b28ac0dbe6af4eb6b4da0a287d9e85" +dependencies = [ + "anyhow", + "hash-db", + "hex", + "hex-literal 0.4.1", + "ismp", + "jsonrpsee", + "pallet-ismp", + "pallet-ismp-runtime-api", + "parity-scale-codec", + "polkadot-sdk", + "serde", + "serde_json", + "tower", + "trie-db", +] + +[[package]] +name = "pallet-ismp-runtime-api" +version = "16.0.0" +source = "git+https://github.com/polytope-labs/hyperbridge?branch=polkadot-stable2409#d46e41c741b28ac0dbe6af4eb6b4da0a287d9e85" +dependencies = [ + "ismp", + "pallet-ismp", + "parity-scale-codec", + "polkadot-sdk", + "primitive-types", + "serde", +] + +[[package]] +name = "pallet-lottery" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-runtime", +] + +[[package]] +name = "pallet-membership" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-message-queue" +version = "41.0.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "environmental", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-weights", +] + +[[package]] +name = "pallet-migration" +version = "1.16.2" dependencies = [ "attestation", "ctype", @@ -7709,10 +9297,46 @@ dependencies = [ "sp-std", ] +[[package]] +name = "pallet-migrations" +version = "8.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-runtime", +] + +[[package]] +name = "pallet-mixnet" +version = "0.14.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-application-crypto", + "sp-arithmetic", + "sp-io", + "sp-mixnet", + "sp-runtime", +] + [[package]] name = "pallet-mmr" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-support", @@ -7724,13 +9348,12 @@ dependencies = [ "sp-io", "sp-mmr-primitives", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-multisig" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-support", @@ -7740,13 +9363,12 @@ dependencies = [ "scale-info", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-nft-fractionalization" -version = "11.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "21.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-support", @@ -7757,13 +9379,12 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-nfts" -version = "23.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "32.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "enumflags2", "frame-benchmarking", @@ -7775,24 +9396,22 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-nfts-runtime-api" -version = "15.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "24.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "pallet-nfts", "parity-scale-codec", "sp-api", - "sp-std", ] [[package]] name = "pallet-nis" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-support", @@ -7802,13 +9421,27 @@ dependencies = [ "sp-arithmetic", "sp-core", "sp-runtime", - "sp-std", +] + +[[package]] +name = "pallet-node-authorization" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", ] [[package]] name = "pallet-nomination-pools" -version = "26.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "35.0.3" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-support", "frame-system", @@ -7820,20 +9453,20 @@ dependencies = [ "sp-io", "sp-runtime", "sp-staking", - "sp-std", "sp-tracing", ] [[package]] name = "pallet-nomination-pools-benchmarking" -version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "36.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-election-provider-support", "frame-support", "frame-system", "pallet-bags-list", + "pallet-delegated-staking", "pallet-nomination-pools", "pallet-staking", "parity-scale-codec", @@ -7841,24 +9474,22 @@ dependencies = [ "sp-runtime", "sp-runtime-interface", "sp-staking", - "sp-std", ] [[package]] name = "pallet-nomination-pools-runtime-api" -version = "24.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "33.0.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "pallet-nomination-pools", "parity-scale-codec", "sp-api", - "sp-std", ] [[package]] name = "pallet-offences" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "37.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-support", "frame-system", @@ -7869,13 +9500,12 @@ dependencies = [ "serde", "sp-runtime", "sp-staking", - "sp-std", ] [[package]] name = "pallet-offences-benchmarking" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -7893,12 +9523,45 @@ dependencies = [ "scale-info", "sp-runtime", "sp-staking", - "sp-std", +] + +[[package]] +name = "pallet-paged-list" +version = "0.16.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-metadata-ir", + "sp-runtime", +] + +[[package]] +name = "pallet-parameters" +version = "0.9.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "paste", + "scale-info", + "serde", + "sp-core", + "sp-runtime", ] [[package]] name = "pallet-postit" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "frame-support", "frame-system", @@ -7910,8 +9573,8 @@ dependencies = [ [[package]] name = "pallet-preimage" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-support", @@ -7922,13 +9585,12 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-proxy" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-support", @@ -7937,13 +9599,12 @@ dependencies = [ "scale-info", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-ranked-collective" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-support", @@ -7956,13 +9617,12 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-recovery" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-support", @@ -7971,13 +9631,12 @@ dependencies = [ "scale-info", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-referenda" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "assert_matches", "frame-benchmarking", @@ -7990,12 +9649,11 @@ dependencies = [ "sp-arithmetic", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-relay-store" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "cumulus-pallet-parachain-system", "cumulus-primitives-core", @@ -8014,99 +9672,286 @@ dependencies = [ ] [[package]] -name = "pallet-root-testing" -version = "5.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +name = "pallet-remark" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ + "frame-benchmarking", "frame-support", "frame-system", "parity-scale-codec", "scale-info", + "serde", "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] -name = "pallet-scheduler" -version = "30.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +name = "pallet-revive" +version = "0.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "docify", + "bitflags 1.3.2", + "environmental", "frame-benchmarking", "frame-support", "frame-system", + "impl-trait-for-tuples", "log", + "pallet-balances", + "pallet-revive-fixtures", + "pallet-revive-proc-macro", + "pallet-revive-uapi", "parity-scale-codec", + "paste", + "polkavm 0.10.0", "scale-info", + "serde", + "sp-api", + "sp-core", "sp-io", "sp-runtime", "sp-std", - "sp-weights", + "staging-xcm", + "staging-xcm-builder", ] [[package]] -name = "pallet-session" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +name = "pallet-revive-fixtures" +version = "0.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "anyhow", + "frame-system", + "parity-wasm", + "polkavm-linker 0.10.0", + "sp-runtime", + "tempfile", + "toml 0.8.21", +] + +[[package]] +name = "pallet-revive-mock-network" +version = "0.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-support", "frame-system", - "impl-trait-for-tuples", - "log", + "pallet-assets", + "pallet-balances", + "pallet-message-queue", + "pallet-proxy", + "pallet-revive", + "pallet-revive-proc-macro", + "pallet-revive-uapi", "pallet-timestamp", + "pallet-utility", + "pallet-xcm", "parity-scale-codec", + "polkadot-parachain-primitives", + "polkadot-primitives", + "polkadot-runtime-parachains", "scale-info", + "sp-api", "sp-core", "sp-io", + "sp-keystore", "sp-runtime", - "sp-session", - "sp-staking", - "sp-state-machine", - "sp-std", - "sp-trie", + "sp-tracing", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", + "xcm-simulator", ] [[package]] -name = "pallet-session-benchmarking" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +name = "pallet-revive-proc-macro" +version = "0.1.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "pallet-revive-uapi" +version = "0.1.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "bitflags 1.3.2", + "parity-scale-codec", + "paste", + "polkavm-derive 0.10.0", + "scale-info", +] + +[[package]] +name = "pallet-root-offences" +version = "35.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "frame-benchmarking", "frame-support", "frame-system", "pallet-session", "pallet-staking", "parity-scale-codec", - "rand", + "scale-info", "sp-runtime", - "sp-session", - "sp-std", + "sp-staking", ] [[package]] -name = "pallet-society" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +name = "pallet-root-testing" +version = "14.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "frame-benchmarking", "frame-support", "frame-system", - "log", "parity-scale-codec", - "rand_chacha 0.2.2", "scale-info", - "sp-arithmetic", + "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] -name = "pallet-staking" -version = "29.0.3" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +name = "pallet-safe-mode" +version = "19.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-balances", + "pallet-proxy", + "pallet-utility", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-runtime", +] + +[[package]] +name = "pallet-salary" +version = "23.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-ranked-collective", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-scheduler" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "sp-weights", +] + +[[package]] +name = "pallet-scored-pool" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-session" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-state-machine", + "sp-trie", +] + +[[package]] +name = "pallet-session-benchmarking" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-session", + "pallet-staking", + "parity-scale-codec", + "rand 0.8.5", + "sp-runtime", + "sp-session", +] + +[[package]] +name = "pallet-skip-feeless-payment" +version = "13.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-runtime", +] + +[[package]] +name = "pallet-society" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "rand_chacha 0.3.1", + "scale-info", + "sp-arithmetic", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-staking" +version = "38.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -8116,31 +9961,19 @@ dependencies = [ "pallet-authorship", "pallet-session", "parity-scale-codec", - "rand_chacha 0.2.2", + "rand_chacha 0.3.1", "scale-info", "serde", "sp-application-crypto", "sp-io", "sp-runtime", "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-staking-reward-curve" -version = "11.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" -dependencies = [ - "proc-macro-crate 3.1.0", - "proc-macro2", - "quote", - "syn 2.0.66", ] [[package]] name = "pallet-staking-reward-fn" -version = "20.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "log", "sp-arithmetic", @@ -8148,8 +9981,8 @@ dependencies = [ [[package]] name = "pallet-staking-runtime-api" -version = "15.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "24.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "parity-scale-codec", "sp-api", @@ -8158,8 +9991,8 @@ dependencies = [ [[package]] name = "pallet-state-trie-migration" -version = "30.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-support", @@ -8170,13 +10003,29 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", +] + +[[package]] +name = "pallet-statement" +version = "20.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-core", + "sp-io", + "sp-runtime", + "sp-statement-store", ] [[package]] name = "pallet-sudo" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "docify", "frame-benchmarking", @@ -8186,13 +10035,12 @@ dependencies = [ "scale-info", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-timestamp" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "37.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "docify", "frame-benchmarking", @@ -8204,15 +10052,14 @@ dependencies = [ "sp-inherents", "sp-io", "sp-runtime", - "sp-std", "sp-storage", "sp-timestamp", ] [[package]] name = "pallet-tips" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "37.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-support", @@ -8225,13 +10072,32 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", +] + +[[package]] +name = "pallet-token-gateway" +version = "16.2.0" +source = "git+https://github.com/polytope-labs/hyperbridge?branch=polkadot-stable2409#d46e41c741b28ac0dbe6af4eb6b4da0a287d9e85" +dependencies = [ + "alloy-primitives 0.7.7", + "alloy-sol-macro 0.7.7", + "alloy-sol-types 0.7.7", + "anyhow", + "ismp", + "log", + "pallet-hyperbridge", + "pallet-ismp", + "parity-scale-codec", + "polkadot-sdk", + "primitive-types", + "scale-info", + "token-gateway-primitives", ] [[package]] name = "pallet-transaction-payment" -version = "29.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-support", "frame-system", @@ -8241,13 +10107,12 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-transaction-payment-rpc" -version = "31.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "41.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -8262,8 +10127,8 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -8272,10 +10137,30 @@ dependencies = [ "sp-weights", ] +[[package]] +name = "pallet-transaction-storage" +version = "37.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "array-bytes", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "serde", + "sp-inherents", + "sp-io", + "sp-runtime", + "sp-transaction-storage-proof", +] + [[package]] name = "pallet-treasury" -version = "28.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "37.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "docify", "frame-benchmarking", @@ -8288,13 +10173,29 @@ dependencies = [ "serde", "sp-core", "sp-runtime", - "sp-std", +] + +[[package]] +name = "pallet-tx-pause" +version = "19.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-balances", + "pallet-proxy", + "pallet-utility", + "parity-scale-codec", + "scale-info", + "sp-runtime", ] [[package]] name = "pallet-uniques" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-support", @@ -8303,13 +10204,12 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-utility" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-support", @@ -8319,13 +10219,12 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-vesting" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-support", @@ -8334,12 +10233,11 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-web3-names" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "frame-benchmarking", "frame-support", @@ -8358,8 +10256,8 @@ dependencies = [ [[package]] name = "pallet-whitelist" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "37.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-support", @@ -8368,13 +10266,12 @@ dependencies = [ "scale-info", "sp-api", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-xcm" -version = "8.0.5" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "17.0.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bounded-collections", "frame-benchmarking", @@ -8388,25 +10285,46 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", "staging-xcm", "staging-xcm-builder", "staging-xcm-executor", + "tracing", + "xcm-runtime-apis", ] [[package]] name = "pallet-xcm-benchmarks" -version = "8.0.2" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "17.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", - "log", "parity-scale-codec", "scale-info", "sp-io", "sp-runtime", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", +] + +[[package]] +name = "pallet-xcm-bridge-hub" +version = "0.13.3" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "bp-messages", + "bp-runtime", + "bp-xcm-bridge-hub", + "frame-support", + "frame-system", + "log", + "pallet-bridge-messages", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-runtime", "sp-std", "staging-xcm", "staging-xcm-builder", @@ -8415,8 +10333,8 @@ dependencies = [ [[package]] name = "pallet-xcm-bridge-hub-router" -version = "0.6.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.15.3" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bp-xcm-bridge-hub-router", "frame-benchmarking", @@ -8434,7 +10352,7 @@ dependencies = [ [[package]] name = "parachain-staking" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "frame-benchmarking", "frame-support", @@ -8460,8 +10378,8 @@ dependencies = [ [[package]] name = "parachains-common" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "cumulus-primitives-core", "cumulus-primitives-utility", @@ -8482,7 +10400,6 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", "staging-parachain-info", "staging-xcm", "staging-xcm-executor", @@ -8491,8 +10408,8 @@ dependencies = [ [[package]] name = "parachains-runtimes-test-utils" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "19.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "cumulus-pallet-parachain-system", "cumulus-pallet-xcmp-queue", @@ -8504,19 +10421,34 @@ dependencies = [ "pallet-balances", "pallet-collator-selection", "pallet-session", + "pallet-timestamp", "pallet-xcm", + "parachains-common", "parity-scale-codec", "polkadot-parachain-primitives", "sp-consensus-aura", "sp-core", "sp-io", "sp-runtime", - "sp-std", "sp-tracing", "staging-parachain-info", "staging-xcm", "staging-xcm-executor", "substrate-wasm-builder", + "xcm-runtime-apis", +] + +[[package]] +name = "parity-bip39" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e69bf016dc406eff7d53a7d3f7cf1c2e72c82b9088aac1118591e36dd2cd3e9" +dependencies = [ + "bitcoin_hashes", + "rand 0.8.5", + "rand_core 0.6.4", + "serde", + "unicode-normalization", ] [[package]] @@ -8540,7 +10472,7 @@ dependencies = [ "lz4", "memmap2 0.5.10", "parking_lot 0.12.3", - "rand", + "rand 0.8.5", "siphasher", "snap", "winapi", @@ -8548,37 +10480,33 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "3.6.12" +version = "3.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" +checksum = "c9fde3d0718baf5bc92f577d652001da0f8d54cd03a7974e118d04fc888dc23d" dependencies = [ - "arrayvec 0.7.4", + "arrayvec 0.7.6", "bitvec", "byte-slice-cast", "bytes", + "const_format", "impl-trait-for-tuples", "parity-scale-codec-derive", + "rustversion", "serde", ] [[package]] name = "parity-scale-codec-derive" -version = "3.6.12" +version = "3.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" +checksum = "581c837bb6b9541ce7faa9377c20616e4fb7650f6b0f68bc93c827ee504fb7b3" dependencies = [ - "proc-macro-crate 3.1.0", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.101", ] -[[package]] -name = "parity-send-wrapper" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa9777aa91b8ad9dd5aaa04a9b6bcb02c7f1deb952fca5a66034d5e63afc5c6f" - [[package]] name = "parity-util-mem" version = "0.12.0" @@ -8616,9 +10544,9 @@ checksum = "e1ad0aff30c1da14b1254fcb2af73e1fa9a28670e584a626f53a369d0e157304" [[package]] name = "parking" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" @@ -8663,9 +10591,9 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.2", + "redox_syscall 0.5.11", "smallvec", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -8674,6 +10602,17 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7924d1d0ad836f665c9065e26d016c673ece3993f30d340068b16f282afc1156" +[[package]] +name = "password-hash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" +dependencies = [ + "base64ct", + "rand_core 0.6.4", + "subtle 2.6.1", +] + [[package]] name = "paste" version = "1.0.15" @@ -8682,20 +10621,12 @@ checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "pbkdf2" -version = "0.8.0" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95f5254224e617595d2cc3cc73ff0a5eaf2637519e25f03388154e9378b6ffa" -dependencies = [ - "crypto-mac 0.11.1", -] - -[[package]] -name = "pbkdf2" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ "digest 0.10.7", + "password-hash", ] [[package]] @@ -8721,8 +10652,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "peregrine-runtime" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ + "anyhow", "attestation", "cfg-if", "ctype", @@ -8747,6 +10679,9 @@ dependencies = [ "frame-system-rpc-runtime-api", "frame-try-runtime", "hex-literal 0.3.4", + "ismp", + "ismp-parachain", + "ismp-parachain-runtime-api", "kilt-runtime-api-did", "kilt-runtime-api-dip-provider", "kilt-runtime-api-public-credentials", @@ -8766,8 +10701,10 @@ dependencies = [ "pallet-deposit-storage", "pallet-did-lookup", "pallet-dip-provider", + "pallet-hyperbridge", "pallet-indices", - "pallet-inflation", + "pallet-ismp", + "pallet-ismp-runtime-api", "pallet-membership", "pallet-message-queue", "pallet-migration", @@ -8779,6 +10716,7 @@ dependencies = [ "pallet-sudo", "pallet-timestamp", "pallet-tips", + "pallet-token-gateway", "pallet-transaction-payment", "pallet-transaction-payment-rpc-runtime-api", "pallet-treasury", @@ -8793,6 +10731,7 @@ dependencies = [ "public-credentials", "runtime-common", "scale-info", + "serde_json", "sp-api", "sp-block-builder", "sp-consensus-aura", @@ -8804,6 +10743,7 @@ dependencies = [ "sp-offchain", "sp-runtime", "sp-session", + "sp-staking", "sp-std", "sp-transaction-pool", "sp-version", @@ -8817,20 +10757,20 @@ dependencies = [ [[package]] name = "pest" -version = "2.7.10" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "560131c633294438da9f7c4b08189194b20946c8274c6b9e38881a7874dc8ee8" +checksum = "198db74531d58c70a361c42201efde7e2591e976d518caf7662a47dc5720e7b6" dependencies = [ "memchr", - "thiserror", + "thiserror 2.0.12", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.7.10" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26293c9193fbca7b1a3bf9b79dc1e388e927e6cacaa78b4a3ab705a1d3d41459" +checksum = "d725d9cfd79e87dccc9341a2ef39d1b6f6353d68c4b33c177febbe1a402c97c5" dependencies = [ "pest", "pest_generator", @@ -8838,22 +10778,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.10" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ec22af7d3fb470a85dd2ca96b7c577a1eb4ef6f1683a9fe9a8c16e136c04687" +checksum = "db7d01726be8ab66ab32f9df467ae8b1148906685bbe75c82d1e65d7f5b3f841" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] name = "pest_meta" -version = "2.7.10" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7a240022f37c361ec1878d646fc5b7d7c4d28d5946e1a80ad5a7a4f4ca0bdcd" +checksum = "7f9f832470494906d1fca5329f8ab5791cc60beb230c74815dff541cbd2b5ca0" dependencies = [ "once_cell", "pest", @@ -8867,40 +10807,34 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.2.6", + "indexmap 2.9.0", ] [[package]] name = "pin-project" -version = "1.1.5" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.5" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] name = "pin-project-lite" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" - -[[package]] -name = "pin-project-lite" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -8910,12 +10844,12 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "piper" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1d5c74c9876f070d3e8fd503d748c7d974c3e48da8f41350fa5222ef9b4391" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ "atomic-waker", - "fastrand 2.1.0", + "fastrand 2.3.0", "futures-io", ] @@ -8931,19 +10865,19 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.30" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "polkadot-approval-distribution" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bitvec", "futures", "futures-timer", - "itertools 0.10.5", + "itertools 0.11.0", "polkadot-node-jaeger", "polkadot-node-metrics", "polkadot-node-network-protocol", @@ -8951,14 +10885,14 @@ dependencies = [ "polkadot-node-subsystem", "polkadot-node-subsystem-util", "polkadot-primitives", - "rand", + "rand 0.8.5", "tracing-gum", ] [[package]] name = "polkadot-availability-bitfield-distribution" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "always-assert", "futures", @@ -8967,16 +10901,16 @@ dependencies = [ "polkadot-node-subsystem", "polkadot-node-subsystem-util", "polkadot-primitives", - "rand", + "rand 0.8.5", "tracing-gum", ] [[package]] name = "polkadot-availability-distribution" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "derive_more", + "derive_more 0.99.20", "fatality", "futures", "parity-scale-codec", @@ -8986,18 +10920,19 @@ dependencies = [ "polkadot-node-subsystem", "polkadot-node-subsystem-util", "polkadot-primitives", - "rand", + "rand 0.8.5", + "sc-network", "schnellru", "sp-core", "sp-keystore", - "thiserror", + "thiserror 1.0.69", "tracing-gum", ] [[package]] name = "polkadot-availability-recovery" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "async-trait", "fatality", @@ -9009,18 +10944,28 @@ dependencies = [ "polkadot-node-subsystem", "polkadot-node-subsystem-util", "polkadot-primitives", - "rand", + "rand 0.8.5", "sc-network", "schnellru", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing-gum", ] +[[package]] +name = "polkadot-ckb-merkle-mountain-range" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4b44320e5f7ce2c18227537a3032ae5b2c476a7e8eddba45333e1011fc31b92" +dependencies = [ + "cfg-if", + "itertools 0.10.5", +] + [[package]] name = "polkadot-cli" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "19.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "cfg-if", "clap", @@ -9040,15 +10985,15 @@ dependencies = [ "sp-io", "sp-keyring", "sp-maybe-compressed-blob", + "sp-runtime", "substrate-build-script-utils", - "thiserror", - "try-runtime-cli", + "thiserror 1.0.69", ] [[package]] name = "polkadot-collator-protocol" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bitvec", "fatality", @@ -9059,36 +11004,36 @@ dependencies = [ "polkadot-node-subsystem", "polkadot-node-subsystem-util", "polkadot-primitives", + "schnellru", "sp-core", "sp-keystore", "sp-runtime", - "thiserror", + "thiserror 1.0.69", "tokio-util", "tracing-gum", ] [[package]] name = "polkadot-core-primitives" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "15.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "parity-scale-codec", "scale-info", "sp-core", "sp-runtime", - "sp-std", ] [[package]] name = "polkadot-dispute-distribution" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "derive_more", + "derive_more 0.99.20", "fatality", "futures", "futures-timer", - "indexmap 2.2.6", + "indexmap 2.9.0", "parity-scale-codec", "polkadot-erasure-coding", "polkadot-node-network-protocol", @@ -9100,14 +11045,14 @@ dependencies = [ "schnellru", "sp-application-crypto", "sp-keystore", - "thiserror", + "thiserror 1.0.69", "tracing-gum", ] [[package]] name = "polkadot-erasure-coding" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "16.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -9115,13 +11060,13 @@ dependencies = [ "reed-solomon-novelpoly", "sp-core", "sp-trie", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "polkadot-gossip-support" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "futures", "futures-timer", @@ -9129,7 +11074,7 @@ dependencies = [ "polkadot-node-subsystem", "polkadot-node-subsystem-util", "polkadot-primitives", - "rand", + "rand 0.8.5", "rand_chacha 0.3.1", "sc-network", "sc-network-common", @@ -9142,8 +11087,8 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "always-assert", "async-trait", @@ -9159,14 +11104,14 @@ dependencies = [ "polkadot-primitives", "sc-network", "sp-consensus", - "thiserror", + "thiserror 1.0.69", "tracing-gum", ] [[package]] name = "polkadot-node-collation-generation" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "futures", "parity-scale-codec", @@ -9177,20 +11122,20 @@ dependencies = [ "polkadot-primitives", "sp-core", "sp-maybe-compressed-blob", - "thiserror", + "thiserror 1.0.69", "tracing-gum", ] [[package]] name = "polkadot-node-core-approval-voting" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.3.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bitvec", - "derive_more", + "derive_more 0.99.20", "futures", "futures-timer", - "itertools 0.10.5", + "itertools 0.11.0", "kvdb", "merlin", "parity-scale-codec", @@ -9200,7 +11145,7 @@ dependencies = [ "polkadot-node-subsystem-util", "polkadot-overseer", "polkadot-primitives", - "rand", + "rand 0.8.5", "rand_chacha 0.3.1", "rand_core 0.6.4", "sc-keystore", @@ -9210,14 +11155,14 @@ dependencies = [ "sp-consensus", "sp-consensus-slots", "sp-runtime", - "thiserror", + "thiserror 1.0.69", "tracing-gum", ] [[package]] name = "polkadot-node-core-av-store" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bitvec", "futures", @@ -9232,14 +11177,14 @@ dependencies = [ "polkadot-overseer", "polkadot-primitives", "sp-consensus", - "thiserror", + "thiserror 1.0.69", "tracing-gum", ] [[package]] name = "polkadot-node-core-backing" -version = "8.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bitvec", "fatality", @@ -9252,29 +11197,29 @@ dependencies = [ "polkadot-statement-table", "schnellru", "sp-keystore", - "thiserror", + "thiserror 1.0.69", "tracing-gum", ] [[package]] name = "polkadot-node-core-bitfield-signing" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "futures", "polkadot-node-subsystem", "polkadot-node-subsystem-util", "polkadot-primitives", "sp-keystore", - "thiserror", + "thiserror 1.0.69", "tracing-gum", "wasm-timer", ] [[package]] name = "polkadot-node-core-candidate-validation" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "async-trait", "futures", @@ -9288,14 +11233,15 @@ dependencies = [ "polkadot-overseer", "polkadot-parachain-primitives", "polkadot-primitives", - "sp-maybe-compressed-blob", + "sp-application-crypto", + "sp-keystore", "tracing-gum", ] [[package]] name = "polkadot-node-core-chain-api" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "futures", "polkadot-node-metrics", @@ -9308,8 +11254,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "futures", "futures-timer", @@ -9319,14 +11265,14 @@ dependencies = [ "polkadot-node-subsystem", "polkadot-node-subsystem-util", "polkadot-primitives", - "thiserror", + "thiserror 1.0.69", "tracing-gum", ] [[package]] name = "polkadot-node-core-dispute-coordinator" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "fatality", "futures", @@ -9338,14 +11284,14 @@ dependencies = [ "polkadot-primitives", "sc-keystore", "schnellru", - "thiserror", + "thiserror 1.0.69", "tracing-gum", ] [[package]] name = "polkadot-node-core-parachains-inherent" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "async-trait", "futures", @@ -9355,31 +11301,28 @@ dependencies = [ "polkadot-primitives", "sp-blockchain", "sp-inherents", - "thiserror", + "thiserror 1.0.69", "tracing-gum", ] [[package]] name = "polkadot-node-core-prospective-parachains" -version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "17.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "bitvec", "fatality", "futures", - "parity-scale-codec", - "polkadot-node-primitives", "polkadot-node-subsystem", "polkadot-node-subsystem-util", "polkadot-primitives", - "thiserror", + "thiserror 1.0.69", "tracing-gum", ] [[package]] name = "polkadot-node-core-provisioner" -version = "8.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bitvec", "fatality", @@ -9389,23 +11332,22 @@ dependencies = [ "polkadot-node-subsystem", "polkadot-node-subsystem-util", "polkadot-primitives", - "thiserror", + "schnellru", + "thiserror 1.0.69", "tracing-gum", ] [[package]] name = "polkadot-node-core-pvf" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "always-assert", - "array-bytes 6.2.3", + "array-bytes", "blake3", "cfg-if", "futures", "futures-timer", - "is_executable", - "libc", "parity-scale-codec", "pin-project", "polkadot-core-primitives", @@ -9415,21 +11357,19 @@ dependencies = [ "polkadot-node-subsystem", "polkadot-parachain-primitives", "polkadot-primitives", - "rand", + "rand 0.8.5", "slotmap", "sp-core", - "sp-maybe-compressed-blob", - "sp-wasm-interface", "tempfile", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing-gum", ] [[package]] name = "polkadot-node-core-pvf-checker" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "futures", "polkadot-node-primitives", @@ -9438,21 +11378,20 @@ dependencies = [ "polkadot-overseer", "polkadot-primitives", "sp-keystore", - "thiserror", + "thiserror 1.0.69", "tracing-gum", ] [[package]] name = "polkadot-node-core-pvf-common" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "16.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "cfg-if", "cpu-time", "futures", "landlock", "libc", - "nix 0.27.1", + "nix 0.28.0", "parity-scale-codec", "polkadot-parachain-primitives", "polkadot-primitives", @@ -9465,14 +11404,14 @@ dependencies = [ "sp-externalities", "sp-io", "sp-tracing", - "thiserror", + "thiserror 1.0.69", "tracing-gum", ] [[package]] name = "polkadot-node-core-runtime-api" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "futures", "polkadot-node-metrics", @@ -9486,8 +11425,8 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "lazy_static", "log", @@ -9497,15 +11436,16 @@ dependencies = [ "polkadot-node-primitives", "polkadot-primitives", "sc-network", + "sc-network-types", "sp-core", - "thiserror", + "thiserror 1.0.69", "tokio", ] [[package]] name = "polkadot-node-metrics" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bs58 0.5.1", "futures", @@ -9523,13 +11463,13 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "async-channel 1.9.0", "async-trait", "bitvec", - "derive_more", + "derive_more 0.99.20", "fatality", "futures", "hex", @@ -9537,41 +11477,46 @@ dependencies = [ "polkadot-node-jaeger", "polkadot-node-primitives", "polkadot-primitives", - "rand", + "rand 0.8.5", "sc-authority-discovery", "sc-network", - "strum 0.24.1", - "thiserror", + "sc-network-types", + "sp-runtime", + "strum 0.26.3", + "thiserror 1.0.69", "tracing-gum", ] [[package]] name = "polkadot-node-primitives" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "16.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bitvec", "bounded-vec", "futures", + "futures-timer", "parity-scale-codec", "polkadot-parachain-primitives", "polkadot-primitives", + "sc-keystore", "schnorrkel 0.11.4", "serde", "sp-application-crypto", "sp-consensus-babe", + "sp-consensus-slots", "sp-core", "sp-keystore", "sp-maybe-compressed-blob", "sp-runtime", - "thiserror", + "thiserror 1.0.69", "zstd 0.12.4", ] [[package]] name = "polkadot-node-subsystem" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -9580,12 +11525,13 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "async-trait", "bitvec", - "derive_more", + "derive_more 0.99.20", + "fatality", "futures", "orchestra", "polkadot-node-jaeger", @@ -9595,6 +11541,7 @@ dependencies = [ "polkadot-statement-table", "sc-client-api", "sc-network", + "sc-network-types", "sc-transaction-pool-api", "smallvec", "sp-api", @@ -9603,25 +11550,26 @@ dependencies = [ "sp-consensus-babe", "sp-runtime", "substrate-prometheus-endpoint", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "polkadot-node-subsystem-util" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "async-trait", - "derive_more", + "derive_more 0.99.20", "fatality", "futures", "futures-channel", - "itertools 0.10.5", + "itertools 0.11.0", "kvdb", "parity-db", "parity-scale-codec", "parking_lot 0.12.3", "pin-project", + "polkadot-erasure-coding", "polkadot-node-jaeger", "polkadot-node-metrics", "polkadot-node-network-protocol", @@ -9631,20 +11579,20 @@ dependencies = [ "polkadot-overseer", "polkadot-primitives", "prioritized-metered-channel", - "rand", + "rand 0.8.5", "sc-client-api", "schnellru", "sp-application-crypto", "sp-core", "sp-keystore", - "thiserror", + "thiserror 1.0.69", "tracing-gum", ] [[package]] name = "polkadot-overseer" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "async-trait", "futures", @@ -9663,27 +11611,95 @@ dependencies = [ "tracing-gum", ] +[[package]] +name = "polkadot-parachain-lib" +version = "0.3.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "async-trait", + "clap", + "color-print", + "cumulus-client-cli", + "cumulus-client-collator", + "cumulus-client-consensus-aura", + "cumulus-client-consensus-common", + "cumulus-client-consensus-proposer", + "cumulus-client-consensus-relay-chain", + "cumulus-client-parachain-inherent", + "cumulus-client-service", + "cumulus-primitives-aura", + "cumulus-primitives-core", + "cumulus-relay-chain-interface", + "docify", + "frame-benchmarking", + "frame-benchmarking-cli", + "frame-support", + "frame-system-rpc-runtime-api", + "frame-try-runtime", + "futures", + "jsonrpsee", + "log", + "pallet-transaction-payment", + "pallet-transaction-payment-rpc", + "pallet-transaction-payment-rpc-runtime-api", + "parachains-common", + "parity-scale-codec", + "polkadot-cli", + "polkadot-primitives", + "sc-basic-authorship", + "sc-chain-spec", + "sc-cli", + "sc-client-api", + "sc-client-db", + "sc-consensus", + "sc-executor", + "sc-network", + "sc-rpc", + "sc-service", + "sc-sysinfo", + "sc-telemetry", + "sc-tracing", + "sc-transaction-pool", + "serde", + "serde_json", + "sp-api", + "sp-block-builder", + "sp-consensus-aura", + "sp-core", + "sp-genesis-builder", + "sp-inherents", + "sp-keystore", + "sp-runtime", + "sp-session", + "sp-timestamp", + "sp-transaction-pool", + "sp-version", + "sp-weights", + "substrate-frame-rpc-system", + "substrate-prometheus-endpoint", + "substrate-state-trie-migration-rpc", +] + [[package]] name = "polkadot-parachain-primitives" -version = "7.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "14.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bounded-collections", - "derive_more", + "derive_more 0.99.20", "parity-scale-codec", "polkadot-core-primitives", "scale-info", "serde", "sp-core", "sp-runtime", - "sp-std", "sp-weights", ] [[package]] name = "polkadot-primitives" -version = "8.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "16.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bitvec", "hex-literal 0.4.1", @@ -9704,13 +11720,12 @@ dependencies = [ "sp-keystore", "sp-runtime", "sp-staking", - "sp-std", ] [[package]] name = "polkadot-rpc" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "19.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "jsonrpsee", "mmr-rpc", @@ -9730,10 +11745,12 @@ dependencies = [ "sc-sync-state-rpc", "sc-transaction-pool-api", "sp-api", + "sp-application-crypto", "sp-block-builder", "sp-blockchain", "sp-consensus", "sp-consensus-babe", + "sp-consensus-beefy", "sp-keystore", "sp-runtime", "substrate-frame-rpc-system", @@ -9742,8 +11759,8 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" -version = "8.0.2" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "17.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bitvec", "frame-benchmarking", @@ -9784,7 +11801,6 @@ dependencies = [ "sp-runtime", "sp-session", "sp-staking", - "sp-std", "staging-xcm", "staging-xcm-builder", "staging-xcm-executor", @@ -9793,25 +11809,24 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "17.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bs58 0.5.1", "frame-benchmarking", "parity-scale-codec", "polkadot-primitives", - "sp-std", "sp-tracing", ] [[package]] name = "polkadot-runtime-parachains" -version = "8.0.3" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "17.0.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bitflags 1.3.2", "bitvec", - "derive_more", + "derive_more 0.99.20", "frame-benchmarking", "frame-support", "frame-system", @@ -9823,6 +11838,7 @@ dependencies = [ "pallet-balances", "pallet-broker", "pallet-message-queue", + "pallet-mmr", "pallet-session", "pallet-staking", "pallet-timestamp", @@ -9832,9 +11848,8 @@ dependencies = [ "polkadot-parachain-primitives", "polkadot-primitives", "polkadot-runtime-metrics", - "rand", + "rand 0.8.5", "rand_chacha 0.3.1", - "rustc-hex", "scale-info", "serde", "sp-api", @@ -9854,32 +11869,302 @@ dependencies = [ ] [[package]] -name = "polkadot-service" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +name = "polkadot-sdk" +version = "0.9.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "async-trait", + "asset-test-utils", + "assets-common", + "binary-merkle-tree", + "bp-header-chain", + "bp-messages", + "bp-parachains", + "bp-polkadot", + "bp-polkadot-core", + "bp-relayers", + "bp-runtime", + "bp-test-utils", + "bp-xcm-bridge-hub", + "bp-xcm-bridge-hub-router", + "bridge-hub-common", + "bridge-hub-test-utils", + "bridge-runtime-common", + "cumulus-pallet-aura-ext", + "cumulus-pallet-dmp-queue", + "cumulus-pallet-parachain-system", + "cumulus-pallet-parachain-system-proc-macro", + "cumulus-pallet-session-benchmarking", + "cumulus-pallet-solo-to-para", + "cumulus-pallet-xcm", + "cumulus-pallet-xcmp-queue", + "cumulus-ping", + "cumulus-primitives-aura", + "cumulus-primitives-core", + "cumulus-primitives-parachain-inherent", + "cumulus-primitives-proof-size-hostfunction", + "cumulus-primitives-storage-weight-reclaim", + "cumulus-primitives-timestamp", + "cumulus-primitives-utility", + "cumulus-relay-chain-interface", + "cumulus-test-relay-sproof-builder", "frame-benchmarking", "frame-benchmarking-cli", + "frame-benchmarking-pallet-pov", + "frame-election-provider-support", + "frame-executive", + "frame-metadata-hash-extension", "frame-support", + "frame-support-procedural", "frame-system", + "frame-system-benchmarking", "frame-system-rpc-runtime-api", - "futures", - "hex-literal 0.4.1", - "is_executable", - "kvdb", - "kvdb-rocksdb", - "log", - "mmr-gadget", + "frame-try-runtime", + "pallet-alliance", + "pallet-asset-conversion", + "pallet-asset-conversion-ops", + "pallet-asset-conversion-tx-payment", + "pallet-asset-rate", + "pallet-asset-tx-payment", + "pallet-assets", + "pallet-assets-freezer", + "pallet-atomic-swap", + "pallet-aura", + "pallet-authority-discovery", + "pallet-authorship", "pallet-babe", + "pallet-bags-list", + "pallet-balances", + "pallet-beefy", + "pallet-beefy-mmr", + "pallet-bounties", + "pallet-bridge-grandpa", + "pallet-bridge-messages", + "pallet-bridge-parachains", + "pallet-bridge-relayers", + "pallet-broker", + "pallet-child-bounties", + "pallet-collator-selection", + "pallet-collective", + "pallet-collective-content", + "pallet-contracts", + "pallet-contracts-mock-network", + "pallet-conviction-voting", + "pallet-core-fellowship", + "pallet-delegated-staking", + "pallet-democracy", + "pallet-dev-mode", + "pallet-election-provider-multi-phase", + "pallet-election-provider-support-benchmarking", + "pallet-elections-phragmen", + "pallet-fast-unstake", + "pallet-glutton", + "pallet-grandpa", + "pallet-identity", "pallet-im-online", - "pallet-staking", - "pallet-transaction-payment", - "pallet-transaction-payment-rpc-runtime-api", - "parity-db", - "parity-scale-codec", - "parking_lot 0.12.3", - "polkadot-approval-distribution", + "pallet-indices", + "pallet-insecure-randomness-collective-flip", + "pallet-lottery", + "pallet-membership", + "pallet-message-queue", + "pallet-migrations", + "pallet-mixnet", + "pallet-mmr", + "pallet-multisig", + "pallet-nft-fractionalization", + "pallet-nfts", + "pallet-nfts-runtime-api", + "pallet-nis", + "pallet-node-authorization", + "pallet-nomination-pools", + "pallet-nomination-pools-benchmarking", + "pallet-nomination-pools-runtime-api", + "pallet-offences", + "pallet-offences-benchmarking", + "pallet-paged-list", + "pallet-parameters", + "pallet-preimage", + "pallet-proxy", + "pallet-ranked-collective", + "pallet-recovery", + "pallet-referenda", + "pallet-remark", + "pallet-revive", + "pallet-revive-fixtures", + "pallet-revive-mock-network", + "pallet-root-offences", + "pallet-root-testing", + "pallet-safe-mode", + "pallet-salary", + "pallet-scheduler", + "pallet-scored-pool", + "pallet-session", + "pallet-session-benchmarking", + "pallet-skip-feeless-payment", + "pallet-society", + "pallet-staking", + "pallet-staking-reward-fn", + "pallet-staking-runtime-api", + "pallet-state-trie-migration", + "pallet-statement", + "pallet-sudo", + "pallet-timestamp", + "pallet-tips", + "pallet-transaction-payment", + "pallet-transaction-payment-rpc-runtime-api", + "pallet-transaction-storage", + "pallet-treasury", + "pallet-tx-pause", + "pallet-uniques", + "pallet-utility", + "pallet-vesting", + "pallet-whitelist", + "pallet-xcm", + "pallet-xcm-benchmarks", + "pallet-xcm-bridge-hub", + "pallet-xcm-bridge-hub-router", + "parachains-common", + "parachains-runtimes-test-utils", + "polkadot-cli", + "polkadot-core-primitives", + "polkadot-node-metrics", + "polkadot-parachain-lib", + "polkadot-parachain-primitives", + "polkadot-primitives", + "polkadot-runtime-common", + "polkadot-runtime-metrics", + "polkadot-runtime-parachains", + "polkadot-sdk-frame", + "polkadot-service", + "sc-client-api", + "sc-client-db", + "sc-executor", + "sc-rpc", + "sc-service", + "slot-range-helper", + "snowbridge-beacon-primitives", + "snowbridge-core", + "snowbridge-ethereum", + "snowbridge-outbound-queue-merkle-tree", + "snowbridge-outbound-queue-runtime-api", + "snowbridge-pallet-ethereum-client", + "snowbridge-pallet-ethereum-client-fixtures", + "snowbridge-pallet-inbound-queue", + "snowbridge-pallet-inbound-queue-fixtures", + "snowbridge-pallet-outbound-queue", + "snowbridge-pallet-system", + "snowbridge-router-primitives", + "snowbridge-runtime-common", + "snowbridge-runtime-test-common", + "snowbridge-system-runtime-api", + "sp-api", + "sp-api-proc-macro", + "sp-application-crypto", + "sp-arithmetic", + "sp-authority-discovery", + "sp-block-builder", + "sp-blockchain", + "sp-consensus-aura", + "sp-consensus-babe", + "sp-consensus-beefy", + "sp-consensus-grandpa", + "sp-consensus-pow", + "sp-consensus-slots", + "sp-core", + "sp-core-hashing", + "sp-crypto-ec-utils", + "sp-crypto-hashing", + "sp-debug-derive", + "sp-externalities", + "sp-genesis-builder", + "sp-inherents", + "sp-io", + "sp-keyring", + "sp-keystore", + "sp-metadata-ir", + "sp-mixnet", + "sp-mmr-primitives", + "sp-npos-elections", + "sp-offchain", + "sp-runtime", + "sp-runtime-interface", + "sp-session", + "sp-staking", + "sp-state-machine", + "sp-statement-store", + "sp-std", + "sp-storage", + "sp-timestamp", + "sp-tracing", + "sp-transaction-pool", + "sp-transaction-storage-proof", + "sp-trie", + "sp-version", + "sp-wasm-interface", + "sp-weights", + "staging-node-inspect", + "staging-parachain-info", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", + "substrate-bip39", + "testnet-parachains-constants", + "xcm-runtime-apis", +] + +[[package]] +name = "polkadot-sdk-frame" +version = "0.7.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "docify", + "frame-benchmarking", + "frame-executive", + "frame-support", + "frame-system", + "frame-system-benchmarking", + "frame-system-rpc-runtime-api", + "frame-try-runtime", + "log", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-arithmetic", + "sp-block-builder", + "sp-consensus-aura", + "sp-consensus-grandpa", + "sp-core", + "sp-inherents", + "sp-io", + "sp-offchain", + "sp-runtime", + "sp-session", + "sp-storage", + "sp-transaction-pool", + "sp-version", +] + +[[package]] +name = "polkadot-service" +version = "19.0.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "async-trait", + "frame-benchmarking", + "frame-benchmarking-cli", + "frame-system", + "frame-system-rpc-runtime-api", + "futures", + "is_executable", + "kvdb", + "kvdb-rocksdb", + "log", + "mmr-gadget", + "pallet-transaction-payment", + "pallet-transaction-payment-rpc-runtime-api", + "parity-db", + "parity-scale-codec", + "parking_lot 0.12.3", + "polkadot-approval-distribution", "polkadot-availability-bitfield-distribution", "polkadot-availability-distribution", "polkadot-availability-recovery", @@ -9909,7 +12194,6 @@ dependencies = [ "polkadot-node-subsystem-types", "polkadot-node-subsystem-util", "polkadot-overseer", - "polkadot-parachain-primitives", "polkadot-primitives", "polkadot-rpc", "polkadot-runtime-parachains", @@ -9917,10 +12201,8 @@ dependencies = [ "rococo-runtime", "sc-authority-discovery", "sc-basic-authorship", - "sc-block-builder", "sc-chain-spec", "sc-client-api", - "sc-client-db", "sc-consensus", "sc-consensus-babe", "sc-consensus-beefy", @@ -9929,7 +12211,6 @@ dependencies = [ "sc-executor", "sc-keystore", "sc-network", - "sc-network-common", "sc-network-sync", "sc-offchain", "sc-service", @@ -9938,7 +12219,6 @@ dependencies = [ "sc-telemetry", "sc-transaction-pool", "sc-transaction-pool-api", - "schnellru", "serde", "serde_json", "sp-api", @@ -9950,37 +12230,37 @@ dependencies = [ "sp-consensus-beefy", "sp-consensus-grandpa", "sp-core", + "sp-genesis-builder", "sp-inherents", "sp-io", "sp-keyring", - "sp-keystore", "sp-mmr-primitives", "sp-offchain", "sp-runtime", "sp-session", - "sp-state-machine", - "sp-storage", "sp-timestamp", "sp-transaction-pool", "sp-version", "sp-weights", + "staging-xcm", "substrate-prometheus-endpoint", - "thiserror", + "thiserror 1.0.69", "tracing-gum", "westend-runtime", + "xcm-runtime-apis", ] [[package]] name = "polkadot-statement-distribution" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "arrayvec 0.7.4", + "arrayvec 0.7.6", "bitvec", "fatality", "futures", "futures-timer", - "indexmap 2.2.6", + "indexmap 2.9.0", "parity-scale-codec", "polkadot-node-network-protocol", "polkadot-node-primitives", @@ -9989,20 +12269,187 @@ dependencies = [ "polkadot-primitives", "sp-keystore", "sp-staking", - "thiserror", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-statement-table" +version = "16.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "parity-scale-codec", + "polkadot-primitives", + "sp-core", "tracing-gum", ] [[package]] -name = "polkadot-statement-table" -version = "8.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" -dependencies = [ - "parity-scale-codec", - "polkadot-primitives", - "sp-core", - "tracing-gum", -] +name = "polkavm" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a3693e5efdb2bf74e449cd25fd777a28bd7ed87e41f5d5da75eb31b4de48b94" +dependencies = [ + "libc", + "log", + "polkavm-assembler 0.9.0", + "polkavm-common 0.9.0", + "polkavm-linux-raw 0.9.0", +] + +[[package]] +name = "polkavm" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7ec0c5935f2eff23cfc4653002f4f8d12b37f87a720e0631282d188c32089d6" +dependencies = [ + "libc", + "log", + "polkavm-assembler 0.10.0", + "polkavm-common 0.10.0", + "polkavm-linux-raw 0.10.0", +] + +[[package]] +name = "polkavm-assembler" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa96d6d868243acc12de813dd48e756cbadcc8e13964c70d272753266deadc1" +dependencies = [ + "log", +] + +[[package]] +name = "polkavm-assembler" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8e4fd5a43100bf1afe9727b8130d01f966f5cfc9144d5604b21e795c2bcd80e" +dependencies = [ + "log", +] + +[[package]] +name = "polkavm-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d9428a5cfcc85c5d7b9fc4b6a18c4b802d0173d768182a51cc7751640f08b92" +dependencies = [ + "log", +] + +[[package]] +name = "polkavm-common" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0097b48bc0bedf9f3f537ce8f37e8f1202d8d83f9b621bdb21ff2c59b9097c50" +dependencies = [ + "log", + "polkavm-assembler 0.10.0", +] + +[[package]] +name = "polkavm-derive" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae8c4bea6f3e11cd89bb18bcdddac10bd9a24015399bd1c485ad68a985a19606" +dependencies = [ + "polkavm-derive-impl-macro 0.9.0", +] + +[[package]] +name = "polkavm-derive" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dcc701385c08c31bdb0569f0c51a290c580d892fa77f1dd88a7352a62679ecf" +dependencies = [ + "polkavm-derive-impl-macro 0.10.0", +] + +[[package]] +name = "polkavm-derive-impl" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c4fdfc49717fb9a196e74a5d28e0bc764eb394a2c803eb11133a31ac996c60c" +dependencies = [ + "polkavm-common 0.9.0", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "polkavm-derive-impl" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7855353a5a783dd5d09e3b915474bddf66575f5a3cf45dec8d1c5e051ba320dc" +dependencies = [ + "polkavm-common 0.10.0", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "polkavm-derive-impl-macro" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ba81f7b5faac81e528eb6158a6f3c9e0bb1008e0ffa19653bc8dea925ecb429" +dependencies = [ + "polkavm-derive-impl 0.9.0", + "syn 2.0.101", +] + +[[package]] +name = "polkavm-derive-impl-macro" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9324fe036de37c17829af233b46ef6b5562d4a0c09bb7fdb9f8378856dee30cf" +dependencies = [ + "polkavm-derive-impl 0.10.0", + "syn 2.0.101", +] + +[[package]] +name = "polkavm-linker" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c7be503e60cf56c0eb785f90aaba4b583b36bff00e93997d93fef97f9553c39" +dependencies = [ + "gimli 0.28.1", + "hashbrown 0.14.5", + "log", + "object 0.32.2", + "polkavm-common 0.9.0", + "regalloc2 0.9.3", + "rustc-demangle", +] + +[[package]] +name = "polkavm-linker" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d704edfe7bdcc876784f19436d53d515b65eb07bc9a0fae77085d552c2dbbb5" +dependencies = [ + "gimli 0.28.1", + "hashbrown 0.14.5", + "log", + "object 0.36.7", + "polkavm-common 0.10.0", + "regalloc2 0.9.3", + "rustc-demangle", +] + +[[package]] +name = "polkavm-linux-raw" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26e85d3456948e650dff0cfc85603915847faf893ed1e66b020bb82ef4557120" + +[[package]] +name = "polkavm-linux-raw" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26e45fa59c7e1bb12ef5289080601e9ec9b31435f6e32800a5c90c132453d126" [[package]] name = "polling" @@ -10016,23 +12463,23 @@ dependencies = [ "concurrent-queue", "libc", "log", - "pin-project-lite 0.2.14", + "pin-project-lite", "windows-sys 0.48.0", ] [[package]] name = "polling" -version = "3.7.2" +version = "3.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3ed00ed3fbf728b5816498ecd316d1716eecaced9c0c8d2c5a6740ca214985b" +checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" dependencies = [ "cfg-if", "concurrent-queue", "hermit-abi 0.4.0", - "pin-project-lite 0.2.14", - "rustix 0.38.34", + "pin-project-lite", + "rustix 0.38.44", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -10060,9 +12507,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.6.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" +checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" [[package]] name = "powerfmt" @@ -10072,9 +12519,12 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy 0.8.25", +] [[package]] name = "predicates" @@ -10090,17 +12540,27 @@ dependencies = [ "regex", ] +[[package]] +name = "predicates" +version = "3.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5d19ee57562043d37e82899fade9a22ebab7be9cef5026b07fda9cdd4293573" +dependencies = [ + "anstyle", + "predicates-core", +] + [[package]] name = "predicates-core" -version = "1.0.6" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174" +checksum = "727e462b119fe9c93fd0eb1429a5f7647394014cf3c04ab2c0350eeb09095ffa" [[package]] name = "predicates-tree" -version = "1.0.9" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf" +checksum = "72dd2d6d381dfb73a193c7fca536518d7caee39fc8503f74e7dc0be0531b425c" dependencies = [ "predicates-core", "termtree", @@ -10118,12 +12578,12 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.20" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" +checksum = "664ec5419c51e34154eec046ebcba56312d5a2fc3b09a06da188e1ad21afadf6" dependencies = [ "proc-macro2", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] @@ -10149,11 +12609,11 @@ checksum = "a172e6cc603231f2cf004232eabcecccc0da53ba576ab286ef7baa0cfc7927ad" dependencies = [ "coarsetime", "crossbeam-queue", - "derive_more", + "derive_more 0.99.20", "futures", "futures-timer", "nanorand", - "thiserror", + "thiserror 1.0.69", "tracing", ] @@ -10163,26 +12623,17 @@ version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" dependencies = [ - "thiserror", + "thiserror 1.0.69", "toml 0.5.11", ] [[package]] name = "proc-macro-crate" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" -dependencies = [ - "toml_edit 0.20.7", -] - -[[package]] -name = "proc-macro-crate" -version = "3.1.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" dependencies = [ - "toml_edit 0.21.1", + "toml_edit", ] [[package]] @@ -10211,20 +12662,31 @@ dependencies = [ [[package]] name = "proc-macro-warning" -version = "1.0.2" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d1eaa7fa0aa1929ffdf7eeb6eac234dde6268914a14ad44d23521ab6a9b258e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "proc-macro-warning" +version = "1.84.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "834da187cfe638ae8abb0203f0b33e5ccdb02a28e7199f2f47b3e2754f50edca" +checksum = "75eea531cfcd120e0851a3f8aed42c4841f78c889eefafd96339c72677ae42c3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] name = "proc-macro2" -version = "1.0.85" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" dependencies = [ "unicode-ident", ] @@ -10240,14 +12702,14 @@ dependencies = [ "lazy_static", "memchr", "parking_lot 0.12.3", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "prometheus-client" -version = "0.19.0" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d6fa99d535dd930d1249e6c79cb3c2915f9172a540fe2b02a4c8f9ca954721e" +checksum = "3c99afa9a01501019ac3a14d71d9f94050346f55ca471ce90c799a15c58f61e2" dependencies = [ "dtoa", "itoa", @@ -10263,7 +12725,27 @@ checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", +] + +[[package]] +name = "proptest" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14cae93065090804185d3b75f0bf93b8eeda30c7a9b4a33d3bdb3988d6229e50" +dependencies = [ + "bit-set", + "bit-vec", + "bitflags 2.9.0", + "lazy_static", + "num-traits", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_xorshift", + "regex-syntax 0.8.5", + "rusty-fork", + "tempfile", + "unarray", ] [[package]] @@ -10301,13 +12783,34 @@ dependencies = [ "petgraph", "prettyplease 0.1.25", "prost 0.11.9", - "prost-types", + "prost-types 0.11.9", "regex", "syn 1.0.109", "tempfile", "which", ] +[[package]] +name = "prost-build" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4" +dependencies = [ + "bytes", + "heck 0.5.0", + "itertools 0.12.1", + "log", + "multimap", + "once_cell", + "petgraph", + "prettyplease 0.2.32", + "prost 0.12.6", + "prost-types 0.12.6", + "regex", + "syn 2.0.101", + "tempfile", +] + [[package]] name = "prost-derive" version = "0.11.9" @@ -10331,7 +12834,7 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] @@ -10343,18 +12846,27 @@ dependencies = [ "prost 0.11.9", ] +[[package]] +name = "prost-types" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" +dependencies = [ + "prost 0.12.6", +] + [[package]] name = "psm" -version = "0.1.21" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" +checksum = "6e944464ec8536cd1beb0bbfd96987eb5e3b72f2ecdafdc5c769a37f1fa2ae1f" dependencies = [ "cc", ] [[package]] name = "public-credentials" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "ctype", "frame-benchmarking", @@ -10373,6 +12885,21 @@ dependencies = [ "sp-weights", ] +[[package]] +name = "quanta" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bd1fe6824cea6538803de3ff1bc0cf3949024db3d43c9643024bfb33a807c0e" +dependencies = [ + "crossbeam-utils", + "libc", + "once_cell", + "raw-cpuid", + "wasi 0.11.0+wasi-snapshot-preview1", + "web-sys", + "winapi", +] + [[package]] name = "quick-error" version = "1.2.3" @@ -10390,26 +12917,51 @@ dependencies = [ [[package]] name = "quick-protobuf-codec" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1693116345026436eb2f10b677806169c1a1260c1c60eaaffe3fb5a29ae23d8b" +checksum = "f8ededb1cd78531627244d51dd0c7139fbe736c7d57af0092a76f0ffb2f56e98" dependencies = [ "asynchronous-codec", "bytes", "quick-protobuf", - "thiserror", - "unsigned-varint", + "thiserror 1.0.69", + "unsigned-varint 0.7.2", ] [[package]] -name = "quicksink" -version = "0.1.2" +name = "quinn" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77de3c815e5a160b1539c6592796801df2043ae35e123b46d73380cfa57af858" +checksum = "2e8b432585672228923edbbf64b8b12c14e1112f62e88737655b4a083dbcd78e" dependencies = [ - "futures-core", - "futures-sink", - "pin-project-lite 0.1.12", + "bytes", + "pin-project-lite", + "quinn-proto 0.9.6", + "quinn-udp 0.3.2", + "rustc-hash 1.1.0", + "rustls 0.20.9", + "thiserror 1.0.69", + "tokio", + "tracing", + "webpki", +] + +[[package]] +name = "quinn" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cc2c5017e4b43d5995dcea317bc46c1e09404c0a9664d2908f7f02dfe943d75" +dependencies = [ + "bytes", + "futures-io", + "pin-project-lite", + "quinn-proto 0.10.6", + "quinn-udp 0.4.1", + "rustc-hash 1.1.0", + "rustls 0.21.12", + "thiserror 1.0.69", + "tokio", + "tracing", ] [[package]] @@ -10419,26 +12971,75 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94b0b33c13a79f669c85defaf4c275dc86a0c0372807d0ca3d78e0bb87274863" dependencies = [ "bytes", - "rand", + "rand 0.8.5", "ring 0.16.20", - "rustc-hash", + "rustc-hash 1.1.0", "rustls 0.20.9", "slab", - "thiserror", + "thiserror 1.0.69", "tinyvec", "tracing", "webpki", ] +[[package]] +name = "quinn-proto" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "141bf7dfde2fbc246bfd3fe12f2455aa24b0fbd9af535d8c86c7bd1381ff2b1a" +dependencies = [ + "bytes", + "rand 0.8.5", + "ring 0.16.20", + "rustc-hash 1.1.0", + "rustls 0.21.12", + "slab", + "thiserror 1.0.69", + "tinyvec", + "tracing", +] + +[[package]] +name = "quinn-udp" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "641538578b21f5e5c8ea733b736895576d0fe329bb883b937db6f4d163dbaaf4" +dependencies = [ + "libc", + "quinn-proto 0.9.6", + "socket2 0.4.10", + "tracing", + "windows-sys 0.42.0", +] + +[[package]] +name = "quinn-udp" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "055b4e778e8feb9f93c4e439f71dc2156ef13360b432b799e179a8c4cdf0b1d7" +dependencies = [ + "bytes", + "libc", + "socket2 0.5.9", + "tracing", + "windows-sys 0.48.0", +] + [[package]] name = "quote" -version = "1.0.36" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" + [[package]] name = "radium" version = "0.7.0" @@ -10457,13 +13058,13 @@ dependencies = [ ] [[package]] -name = "rand_chacha" -version = "0.2.2" +name = "rand" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", + "rand_chacha 0.9.0", + "rand_core 0.9.3", ] [[package]] @@ -10477,12 +13078,13 @@ dependencies = [ ] [[package]] -name = "rand_core" -version = "0.5.1" +name = "rand_chacha" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ - "getrandom 0.1.16", + "ppv-lite86", + "rand_core 0.9.3", ] [[package]] @@ -10491,7 +13093,16 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.16", +] + +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.2", ] [[package]] @@ -10501,7 +13112,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" dependencies = [ "num-traits", - "rand", + "rand 0.8.5", ] [[package]] @@ -10513,6 +13124,24 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "rand_xorshift" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" +dependencies = [ + "rand_core 0.6.4", +] + +[[package]] +name = "raw-cpuid" +version = "11.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6df7ab838ed27997ba19a4664507e6f82b41fe6e20be42929332156e5e85146" +dependencies = [ + "bitflags 2.9.0", +] + [[package]] name = "rawpointer" version = "0.2.1" @@ -10562,31 +13191,22 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_syscall" -version = "0.5.2" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c82cf8cff14456045f55ec4241383baeff27af886adb72ffb2162f99911de0fd" +checksum = "d2f103c6d277498fbceb16e84d317e2a400f160f46904d5f5410848c829511a3" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.9.0", ] [[package]] name = "redox_users" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.16", "libredox", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -10595,30 +13215,30 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "87413ebb313323d431e85d0afc5a68222aaed972843537cbfe5f061cf1b4bcab" dependencies = [ - "derive_more", + "derive_more 0.99.20", "fs-err", "static_init", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "ref-cast" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf0a6f84d5f1d581da8b41b47ec8600871962f2a528115b542b362d4b744931" +checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6" +checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] @@ -10633,16 +13253,29 @@ dependencies = [ "smallvec", ] +[[package]] +name = "regalloc2" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad156d539c879b7a24a363a2016d77961786e71f48f2e2fc8302a92abd2429a6" +dependencies = [ + "hashbrown 0.13.2", + "log", + "rustc-hash 1.1.0", + "slice-group-by", + "smallvec", +] + [[package]] name = "regex" -version = "1.10.5" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.7", - "regex-syntax 0.8.4", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", ] [[package]] @@ -10656,13 +13289,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.4", + "regex-syntax 0.8.5", ] [[package]] @@ -10673,18 +13306,17 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "resolv-conf" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" +checksum = "48375394603e3dd4b2d64371f7148fd8c7baa2680e28741f2cb8d23b59e3d4c4" dependencies = [ "hostname", - "quick-error", ] [[package]] @@ -10694,7 +13326,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ "hmac 0.12.1", - "subtle 2.4.1", + "subtle 2.6.1", ] [[package]] @@ -10714,28 +13346,18 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.8" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.15", + "getrandom 0.2.16", "libc", - "spin 0.9.8", "untrusted 0.9.0", "windows-sys 0.52.0", ] -[[package]] -name = "ripemd" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" -dependencies = [ - "digest 0.10.7", -] - [[package]] name = "rlp" version = "0.5.2" @@ -10759,7 +13381,7 @@ dependencies = [ [[package]] name = "rococo-emulated-chain" version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "emulated-integration-tests-common", "parachains-common", @@ -10775,10 +13397,11 @@ dependencies = [ [[package]] name = "rococo-runtime" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "binary-merkle-tree", + "bitvec", "frame-benchmarking", "frame-executive", "frame-metadata-hash-extension", @@ -10804,7 +13427,6 @@ dependencies = [ "pallet-elections-phragmen", "pallet-grandpa", "pallet-identity", - "pallet-im-online", "pallet-indices", "pallet-membership", "pallet-message-queue", @@ -10812,6 +13434,7 @@ dependencies = [ "pallet-multisig", "pallet-nis", "pallet-offences", + "pallet-parameters", "pallet-preimage", "pallet-proxy", "pallet-ranked-collective", @@ -10843,6 +13466,7 @@ dependencies = [ "scale-info", "serde", "serde_derive", + "serde_json", "smallvec", "sp-api", "sp-arithmetic", @@ -10850,6 +13474,7 @@ dependencies = [ "sp-block-builder", "sp-consensus-babe", "sp-consensus-beefy", + "sp-consensus-grandpa", "sp-core", "sp-genesis-builder", "sp-inherents", @@ -10859,7 +13484,6 @@ dependencies = [ "sp-runtime", "sp-session", "sp-staking", - "sp-std", "sp-storage", "sp-transaction-pool", "sp-version", @@ -10868,12 +13492,13 @@ dependencies = [ "staging-xcm-executor", "static_assertions", "substrate-wasm-builder", + "xcm-runtime-apis", ] [[package]] name = "rococo-runtime-constants" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "17.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-support", "polkadot-primitives", @@ -10894,43 +13519,79 @@ checksum = "afab94fb28594581f62d981211a9a4d53cc8130bbcbbb89a0440d9b8e81a7746" [[package]] name = "rpassword" -version = "7.3.1" +version = "7.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80472be3c897911d0137b2d2b9055faf6eeac5b14e324073d83bc17b191d7e3f" +checksum = "66d4c8b64f049c6721ec8ccec37ddfc3d641c4a7fca57e8f2a89de509c73df39" dependencies = [ "libc", "rtoolbox", - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] name = "rtnetlink" -version = "0.10.1" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322c53fd76a18698f1c27381d58091de3a043d356aa5bd0d510608b565f469a0" +checksum = "7a552eb82d19f38c3beed3f786bd23aa434ceb9ac43ab44419ca6d67a7e186c0" dependencies = [ "futures", "log", + "netlink-packet-core", "netlink-packet-route", + "netlink-packet-utils", "netlink-proto", - "nix 0.24.3", - "thiserror", + "netlink-sys", + "nix 0.26.4", + "thiserror 1.0.69", "tokio", ] [[package]] name = "rtoolbox" -version = "0.0.2" +version = "0.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c247d24e63230cdb56463ae328478bd5eac8b8faa8c69461a77e8e323afac90e" +checksum = "a7cc970b249fbe527d6e02e0a227762c9108b2f49d81094fe357ffc6d14d7f6f" dependencies = [ "libc", - "windows-sys 0.48.0", + "windows-sys 0.52.0", +] + +[[package]] +name = "ruint" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78a46eb779843b2c4f21fac5773e25d6d5b7c8f0922876c91541790d2ca27eef" +dependencies = [ + "alloy-rlp", + "ark-ff 0.3.0", + "ark-ff 0.4.2", + "bytes", + "fastrlp 0.3.1", + "fastrlp 0.4.0", + "num-bigint", + "num-integer", + "num-traits", + "parity-scale-codec", + "primitive-types", + "proptest", + "rand 0.8.5", + "rand 0.9.1", + "rlp", + "ruint-macro", + "serde", + "valuable", + "zeroize", ] +[[package]] +name = "ruint-macro" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" + [[package]] name = "runtime-common" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "attestation", "cfg-if", @@ -10957,6 +13618,7 @@ dependencies = [ "pallet-dip-provider", "pallet-membership", "pallet-multisig", + "pallet-session", "pallet-tips", "pallet-transaction-payment", "pallet-treasury", @@ -10972,6 +13634,7 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", + "sp-staking", "sp-std", "sp-trie", "sp-weights", @@ -10993,6 +13656,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + [[package]] name = "rustc-hex" version = "2.1.0" @@ -11001,11 +13670,29 @@ checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver 0.9.0", +] + +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver 0.11.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ - "semver 1.0.23", + "semver 1.0.26", ] [[package]] @@ -11033,9 +13720,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.27" +version = "0.37.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" +checksum = "519165d378b97752ca44bbe15047d5d3409e875f39327546b42ac81d7e18c1b6" dependencies = [ "bitflags 1.3.2", "errno", @@ -11047,15 +13734,28 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.34" +version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.9.0", "errno", "libc", - "linux-raw-sys 0.4.14", - "windows-sys 0.52.0", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustix" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf" +dependencies = [ + "bitflags 2.9.0", + "errno", + "libc", + "linux-raw-sys 0.9.4", + "windows-sys 0.59.0", ] [[package]] @@ -11064,7 +13764,6 @@ version = "0.20.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b80e3dec595989ea8510028f30c408a4630db12c9cbb8de34203b89d6577e99" dependencies = [ - "log", "ring 0.16.20", "sct", "webpki", @@ -11077,11 +13776,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" dependencies = [ "log", - "ring 0.17.8", - "rustls-webpki", + "ring 0.17.14", + "rustls-webpki 0.101.7", "sct", ] +[[package]] +name = "rustls" +version = "0.23.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df51b5869f3a441595eac5e8ff14d486ff285f7b8c0df8770e49c3b56351f0f0" +dependencies = [ + "log", + "once_cell", + "ring 0.17.14", + "rustls-pki-types", + "rustls-webpki 0.103.1", + "subtle 2.6.1", + "zeroize", +] + [[package]] name = "rustls-native-certs" version = "0.6.3" @@ -11091,7 +13805,19 @@ dependencies = [ "openssl-probe", "rustls-pemfile", "schannel", - "security-framework", + "security-framework 2.11.1", +] + +[[package]] +name = "rustls-native-certs" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" +dependencies = [ + "openssl-probe", + "rustls-pki-types", + "schannel", + "security-framework 3.2.0", ] [[package]] @@ -11103,21 +13829,77 @@ dependencies = [ "base64 0.21.7", ] +[[package]] +name = "rustls-pki-types" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" + +[[package]] +name = "rustls-platform-verifier" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4937d110d34408e9e5ad30ba0b0ca3b6a8a390f8db3636db60144ac4fa792750" +dependencies = [ + "core-foundation 0.10.0", + "core-foundation-sys", + "jni", + "log", + "once_cell", + "rustls 0.23.26", + "rustls-native-certs 0.8.1", + "rustls-platform-verifier-android", + "rustls-webpki 0.103.1", + "security-framework 3.2.0", + "security-framework-sys", + "webpki-root-certs 0.26.11", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls-platform-verifier-android" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" + [[package]] name = "rustls-webpki" version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ - "ring 0.17.8", + "ring 0.17.14", + "untrusted 0.9.0", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fef8b8769aaccf73098557a87cd1816b4f9c7c16811c9c77142aa695c16f2c03" +dependencies = [ + "ring 0.17.14", + "rustls-pki-types", "untrusted 0.9.0", ] [[package]] name = "rustversion" -version = "1.0.17" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" + +[[package]] +name = "rusty-fork" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f" +dependencies = [ + "fnv", + "quick-error", + "tempfile", + "wait-timeout", +] [[package]] name = "ruzstd" @@ -11132,9 +13914,9 @@ dependencies = [ [[package]] name = "rw-stream-sink" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26338f5e09bb721b85b135ea05af7767c90b52f6de4f087d4f4a3a9d64e7dc04" +checksum = "d8c9026ff5d2f23da5e45bbc283f156383001bfb09c4e44256d02c1a685fe9a1" dependencies = [ "futures", "pin-project", @@ -11143,15 +13925,24 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + +[[package]] +name = "safe-mix" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "6d3d055a2582e6b00ed7a31c1524040aa391092bf636328350813f3a0605215c" +dependencies = [ + "rustc_version 0.2.3", +] [[package]] name = "safe_arch" -version = "0.7.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3460605018fdc9612bce72735cba0d27efbcd9904780d44c7e3a9948f96148a" +checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323" dependencies = [ "bytemuck", ] @@ -11167,34 +13958,35 @@ dependencies = [ [[package]] name = "sc-allocator" -version = "24.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "29.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "log", "sp-core", "sp-wasm-interface", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sc-authority-discovery" -version = "0.35.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.45.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "async-trait", "futures", "futures-timer", "ip_network", "libp2p", + "linked_hash_set", "log", - "multihash 0.18.1", - "multihash-codetable", + "multihash 0.19.3", "parity-scale-codec", "prost 0.12.6", - "prost-build", - "rand", + "prost-build 0.12.6", + "rand 0.8.5", "sc-client-api", "sc-network", + "sc-network-types", "sp-api", "sp-authority-discovery", "sp-blockchain", @@ -11202,13 +13994,13 @@ dependencies = [ "sp-keystore", "sp-runtime", "substrate-prometheus-endpoint", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sc-basic-authorship" -version = "0.35.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.45.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "futures", "futures-timer", @@ -11229,8 +14021,8 @@ dependencies = [ [[package]] name = "sc-block-builder" -version = "0.34.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.42.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "parity-scale-codec", "sp-api", @@ -11244,13 +14036,13 @@ dependencies = [ [[package]] name = "sc-chain-spec" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "array-bytes 6.2.3", + "array-bytes", "docify", "log", - "memmap2 0.9.4", + "memmap2 0.9.5", "parity-scale-codec", "sc-chain-spec-derive", "sc-client-api", @@ -11266,36 +14058,37 @@ dependencies = [ "sp-io", "sp-runtime", "sp-state-machine", + "sp-tracing", ] [[package]] name = "sc-chain-spec-derive" -version = "11.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "12.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "proc-macro-crate 3.1.0", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] name = "sc-cli" -version = "0.37.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.47.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "array-bytes 6.2.3", - "bip39", + "array-bytes", "chrono", "clap", "fdlimit", "futures", - "itertools 0.10.5", + "itertools 0.11.0", "libp2p-identity", "log", "names", + "parity-bip39", "parity-scale-codec", - "rand", + "rand 0.8.5", "regex", "rpassword", "sc-client-api", @@ -11316,14 +14109,14 @@ dependencies = [ "sp-panic-handler", "sp-runtime", "sp-version", - "thiserror", + "thiserror 1.0.69", "tokio", ] [[package]] name = "sc-client-api" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "37.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "fnv", "futures", @@ -11349,8 +14142,8 @@ dependencies = [ [[package]] name = "sc-client-db" -version = "0.36.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.44.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "hash-db", "kvdb", @@ -11375,17 +14168,16 @@ dependencies = [ [[package]] name = "sc-consensus" -version = "0.34.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.44.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "async-trait", "futures", - "futures-timer", - "libp2p-identity", "log", - "mockall", + "mockall 0.11.4", "parking_lot 0.12.3", "sc-client-api", + "sc-network-types", "sc-utils", "serde", "sp-api", @@ -11395,13 +14187,13 @@ dependencies = [ "sp-runtime", "sp-state-machine", "substrate-prometheus-endpoint", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sc-consensus-aura" -version = "0.35.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.45.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "async-trait", "futures", @@ -11424,13 +14216,13 @@ dependencies = [ "sp-keystore", "sp-runtime", "substrate-prometheus-endpoint", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sc-consensus-babe" -version = "0.35.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.45.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "async-trait", "fork-tree", @@ -11460,13 +14252,13 @@ dependencies = [ "sp-keystore", "sp-runtime", "substrate-prometheus-endpoint", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sc-consensus-babe-rpc" -version = "0.35.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.45.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "futures", "jsonrpsee", @@ -11482,15 +14274,15 @@ dependencies = [ "sp-core", "sp-keystore", "sp-runtime", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sc-consensus-beefy" -version = "14.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "24.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "array-bytes 6.2.3", + "array-bytes", "async-channel 1.9.0", "async-trait", "fnv", @@ -11503,6 +14295,7 @@ dependencies = [ "sc-network", "sc-network-gossip", "sc-network-sync", + "sc-network-types", "sc-utils", "sp-api", "sp-application-crypto", @@ -11513,18 +14306,17 @@ dependencies = [ "sp-core", "sp-crypto-hashing", "sp-keystore", - "sp-mmr-primitives", "sp-runtime", "substrate-prometheus-endpoint", - "thiserror", + "thiserror 1.0.69", "tokio", "wasm-timer", ] [[package]] name = "sc-consensus-beefy-rpc" -version = "14.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "24.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "futures", "jsonrpsee", @@ -11534,16 +14326,17 @@ dependencies = [ "sc-consensus-beefy", "sc-rpc", "serde", + "sp-application-crypto", "sp-consensus-beefy", "sp-core", "sp-runtime", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sc-consensus-epochs" -version = "0.34.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.44.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "fork-tree", "parity-scale-codec", @@ -11555,11 +14348,11 @@ dependencies = [ [[package]] name = "sc-consensus-grandpa" -version = "0.20.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.30.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "ahash 0.8.11", - "array-bytes 6.2.3", + "array-bytes", "async-trait", "dyn-clone", "finality-grandpa", @@ -11569,7 +14362,7 @@ dependencies = [ "log", "parity-scale-codec", "parking_lot 0.12.3", - "rand", + "rand 0.8.5", "sc-block-builder", "sc-chain-spec", "sc-client-api", @@ -11578,6 +14371,7 @@ dependencies = [ "sc-network-common", "sc-network-gossip", "sc-network-sync", + "sc-network-types", "sc-telemetry", "sc-transaction-pool-api", "sc-utils", @@ -11593,13 +14387,13 @@ dependencies = [ "sp-keystore", "sp-runtime", "substrate-prometheus-endpoint", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sc-consensus-grandpa-rpc" -version = "0.20.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.30.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "finality-grandpa", "futures", @@ -11613,13 +14407,13 @@ dependencies = [ "sp-blockchain", "sp-core", "sp-runtime", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sc-consensus-slots" -version = "0.34.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.44.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "async-trait", "futures", @@ -11641,12 +14435,13 @@ dependencies = [ [[package]] name = "sc-executor" -version = "0.33.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.40.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "parity-scale-codec", "parking_lot 0.12.3", "sc-executor-common", + "sc-executor-polkavm", "sc-executor-wasmtime", "schnellru", "sp-api", @@ -11663,20 +14458,32 @@ dependencies = [ [[package]] name = "sc-executor-common" -version = "0.30.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.35.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ + "polkavm 0.9.3", "sc-allocator", "sp-maybe-compressed-blob", "sp-wasm-interface", - "thiserror", + "thiserror 1.0.69", "wasm-instrument", ] +[[package]] +name = "sc-executor-polkavm" +version = "0.32.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "log", + "polkavm 0.9.3", + "sc-executor-common", + "sp-wasm-interface", +] + [[package]] name = "sc-executor-wasmtime" -version = "0.30.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.35.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "anyhow", "cfg-if", @@ -11693,10 +14500,10 @@ dependencies = [ [[package]] name = "sc-informant" -version = "0.34.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.44.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "ansi_term", + "console", "futures", "futures-timer", "log", @@ -11710,37 +14517,37 @@ dependencies = [ [[package]] name = "sc-keystore" -version = "26.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "33.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "array-bytes 6.2.3", + "array-bytes", "parking_lot 0.12.3", "serde_json", "sp-application-crypto", "sp-core", "sp-keystore", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sc-mixnet" -version = "0.5.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.15.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "array-bytes 4.2.0", - "arrayvec 0.7.4", + "array-bytes", + "arrayvec 0.7.6", "blake2 0.10.6", "bytes", "futures", "futures-timer", - "libp2p-identity", "log", "mixnet", - "multiaddr", + "multiaddr 0.18.2", "parity-scale-codec", "parking_lot 0.12.3", "sc-client-api", "sc-network", + "sc-network-types", "sc-transaction-pool-api", "sp-api", "sp-consensus", @@ -11748,19 +14555,20 @@ dependencies = [ "sp-keystore", "sp-mixnet", "sp-runtime", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sc-network" -version = "0.35.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.45.6" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "array-bytes 6.2.3", + "array-bytes", "async-channel 1.9.0", "async-trait", "asynchronous-codec", "bytes", + "cid 0.9.0", "either", "fnv", "futures", @@ -11768,16 +14576,22 @@ dependencies = [ "ip_network", "libp2p", "linked_hash_set", + "litep2p", "log", - "mockall", + "mockall 0.11.4", + "once_cell", "parity-scale-codec", "parking_lot 0.12.3", "partial_sort", "pin-project", - "rand", + "prost 0.12.6", + "prost-build 0.12.6", + "rand 0.8.5", "sc-client-api", "sc-network-common", + "sc-network-types", "sc-utils", + "schnellru", "serde", "serde_json", "smallvec", @@ -11786,46 +14600,28 @@ dependencies = [ "sp-core", "sp-runtime", "substrate-prometheus-endpoint", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-stream", - "unsigned-varint", + "unsigned-varint 0.7.2", + "void", "wasm-timer", "zeroize", ] -[[package]] -name = "sc-network-bitswap" -version = "0.34.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" -dependencies = [ - "async-channel 1.9.0", - "cid", - "futures", - "libp2p-identity", - "log", - "prost 0.12.6", - "prost-build", - "sc-client-api", - "sc-network", - "sp-blockchain", - "sp-runtime", - "thiserror", - "unsigned-varint", -] - [[package]] name = "sc-network-common" -version = "0.34.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.44.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "async-trait", "bitflags 1.3.2", "futures", "libp2p-identity", "parity-scale-codec", - "prost-build", + "prost-build 0.12.6", "sc-consensus", + "sc-network-types", "sp-consensus", "sp-consensus-grandpa", "sp-runtime", @@ -11833,17 +14629,17 @@ dependencies = [ [[package]] name = "sc-network-gossip" -version = "0.35.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.45.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "ahash 0.8.11", "futures", "futures-timer", - "libp2p", "log", "sc-network", "sc-network-common", "sc-network-sync", + "sc-network-types", "schnellru", "sp-runtime", "substrate-prometheus-endpoint", @@ -11852,31 +14648,31 @@ dependencies = [ [[package]] name = "sc-network-light" -version = "0.34.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.44.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "array-bytes 6.2.3", + "array-bytes", "async-channel 1.9.0", "futures", - "libp2p-identity", "log", "parity-scale-codec", "prost 0.12.6", - "prost-build", + "prost-build 0.12.6", "sc-client-api", "sc-network", + "sc-network-types", "sp-blockchain", "sp-core", "sp-runtime", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sc-network-sync" -version = "0.34.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.44.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "array-bytes 6.2.3", + "array-bytes", "async-channel 1.9.0", "async-trait", "fork-tree", @@ -11884,14 +14680,15 @@ dependencies = [ "futures-timer", "libp2p", "log", - "mockall", + "mockall 0.11.4", "parity-scale-codec", "prost 0.12.6", - "prost-build", + "prost-build 0.12.6", "sc-client-api", "sc-consensus", "sc-network", "sc-network-common", + "sc-network-types", "sc-utils", "schnellru", "smallvec", @@ -11902,52 +14699,69 @@ dependencies = [ "sp-core", "sp-runtime", "substrate-prometheus-endpoint", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-stream", ] [[package]] name = "sc-network-transactions" -version = "0.34.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.44.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "array-bytes 6.2.3", + "array-bytes", "futures", - "libp2p", "log", "parity-scale-codec", "sc-network", "sc-network-common", "sc-network-sync", + "sc-network-types", "sc-utils", "sp-consensus", "sp-runtime", "substrate-prometheus-endpoint", ] +[[package]] +name = "sc-network-types" +version = "0.12.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "bs58 0.5.1", + "ed25519-dalek", + "libp2p-identity", + "litep2p", + "log", + "multiaddr 0.18.2", + "multihash 0.19.3", + "rand 0.8.5", + "thiserror 1.0.69", + "zeroize", +] + [[package]] name = "sc-offchain" -version = "30.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "array-bytes 6.2.3", + "array-bytes", "bytes", "fnv", "futures", "futures-timer", - "hyper", + "hyper 0.14.32", "hyper-rustls", - "libp2p", "log", "num_cpus", "once_cell", "parity-scale-codec", "parking_lot 0.12.3", - "rand", + "rand 0.8.5", "sc-client-api", "sc-network", "sc-network-common", + "sc-network-types", "sc-transaction-pool-api", "sc-utils", "sp-api", @@ -11962,8 +14776,8 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" -version = "0.17.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.18.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -11971,8 +14785,8 @@ dependencies = [ [[package]] name = "sc-rpc" -version = "30.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "futures", "jsonrpsee", @@ -12003,8 +14817,8 @@ dependencies = [ [[package]] name = "sc-rpc-api" -version = "0.34.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.44.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -12018,17 +14832,26 @@ dependencies = [ "sp-rpc", "sp-runtime", "sp-version", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sc-rpc-server" -version = "12.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "17.1.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "http", + "dyn-clone", + "forwarded-header-value", + "futures", + "governor", + "http 1.3.1", + "http-body-util", + "hyper 1.6.0", + "ip_network", "jsonrpsee", "log", + "sc-rpc-api", + "serde", "serde_json", "substrate-prometheus-endpoint", "tokio", @@ -12038,10 +14861,10 @@ dependencies = [ [[package]] name = "sc-rpc-spec-v2" -version = "0.35.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.45.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "array-bytes 6.2.3", + "array-bytes", "futures", "futures-util", "hex", @@ -12049,11 +14872,13 @@ dependencies = [ "log", "parity-scale-codec", "parking_lot 0.12.3", + "rand 0.8.5", "sc-chain-spec", "sc-client-api", "sc-rpc", "sc-transaction-pool-api", "sc-utils", + "schnellru", "serde", "sp-api", "sp-blockchain", @@ -12061,15 +14886,15 @@ dependencies = [ "sp-rpc", "sp-runtime", "sp-version", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-stream", ] [[package]] name = "sc-service" -version = "0.36.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.46.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "async-trait", "directories", @@ -12081,7 +14906,7 @@ dependencies = [ "parity-scale-codec", "parking_lot 0.12.3", "pin-project", - "rand", + "rand 0.8.5", "sc-chain-spec", "sc-client-api", "sc-client-db", @@ -12090,11 +14915,11 @@ dependencies = [ "sc-informant", "sc-keystore", "sc-network", - "sc-network-bitswap", "sc-network-common", "sc-network-light", "sc-network-sync", "sc-network-transactions", + "sc-network-types", "sc-rpc", "sc-rpc-server", "sc-rpc-spec-v2", @@ -12104,6 +14929,7 @@ dependencies = [ "sc-transaction-pool", "sc-transaction-pool-api", "sc-utils", + "schnellru", "serde", "serde_json", "sp-api", @@ -12123,7 +14949,7 @@ dependencies = [ "static_init", "substrate-prometheus-endpoint", "tempfile", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "tracing-futures", @@ -12131,8 +14957,8 @@ dependencies = [ [[package]] name = "sc-state-db" -version = "0.31.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.36.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "log", "parity-scale-codec", @@ -12142,21 +14968,21 @@ dependencies = [ [[package]] name = "sc-storage-monitor" -version = "0.17.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.22.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "clap", "fs4", "log", "sp-core", - "thiserror", + "thiserror 1.0.69", "tokio", ] [[package]] name = "sc-sync-state-rpc" -version = "0.35.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.45.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -12169,19 +14995,19 @@ dependencies = [ "serde_json", "sp-blockchain", "sp-runtime", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sc-sysinfo" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "derive_more", + "derive_more 0.99.20", "futures", "libc", "log", - "rand", + "rand 0.8.5", "rand_pcg", "regex", "sc-telemetry", @@ -12195,8 +15021,8 @@ dependencies = [ [[package]] name = "sc-telemetry" -version = "16.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "25.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "chrono", "futures", @@ -12204,29 +15030,29 @@ dependencies = [ "log", "parking_lot 0.12.3", "pin-project", - "rand", + "rand 0.8.5", + "sc-network", "sc-utils", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "wasm-timer", ] [[package]] name = "sc-tracing" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "37.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "ansi_term", "chrono", + "console", "is-terminal", "lazy_static", "libc", "log", "parity-scale-codec", "parking_lot 0.12.3", - "regex", - "rustc-hash", + "rustc-hash 1.1.0", "sc-client-api", "sc-tracing-proc-macro", "serde", @@ -12236,27 +15062,27 @@ dependencies = [ "sp-rpc", "sp-runtime", "sp-tracing", - "thiserror", + "thiserror 1.0.69", "tracing", - "tracing-log 0.1.4", - "tracing-subscriber 0.2.25", + "tracing-log", + "tracing-subscriber", ] [[package]] name = "sc-tracing-proc-macro" version = "11.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "proc-macro-crate 3.1.0", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] name = "sc-transaction-pool" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "37.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "async-trait", "futures", @@ -12277,13 +15103,13 @@ dependencies = [ "sp-tracing", "sp-transaction-pool", "substrate-prometheus-endpoint", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sc-transaction-pool-api" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "37.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "async-trait", "futures", @@ -12293,13 +15119,13 @@ dependencies = [ "sp-blockchain", "sp-core", "sp-runtime", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sc-utils" -version = "15.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "17.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "async-channel 1.9.0", "futures", @@ -12327,7 +15153,7 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e98f3262c250d90e700bb802eb704e1f841e03331c2eb815e46516c4edbf5b27" dependencies = [ - "derive_more", + "derive_more 0.99.20", "parity-scale-codec", "scale-bits", "scale-type-resolver", @@ -12336,13 +15162,13 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.11.3" +version = "2.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca070c12893629e2cc820a9761bedf6ce1dcddc9852984d1dc734b8bd9bd024" +checksum = "346a3b32eba2640d17a9cb5927056b08f3de90f65b72fe09402c2ad07d684d0b" dependencies = [ "bitvec", "cfg-if", - "derive_more", + "derive_more 1.0.0", "parity-scale-codec", "scale-info-derive", "serde", @@ -12350,14 +15176,14 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.11.3" +version = "2.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d35494501194174bda522a32605929eefc9ecf7e0a326c26db1fdd85881eb62" +checksum = "c6630024bf739e2179b91fb424b28898baf819414262c5d376677dbff1fe7ebf" dependencies = [ - "proc-macro-crate 3.1.0", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.101", ] [[package]] @@ -12368,18 +15194,18 @@ checksum = "f0cded6518aa0bd6c1be2b88ac81bf7044992f0f154bfbabd5ad34f43512abcb" [[package]] name = "schannel" -version = "0.1.23" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "schnellru" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9a8ef13a93c54d20580de1e5c413e624e53121d42fc7e2c11d10ef7f8b02367" +checksum = "356285bbf17bea63d9e52e96bd18f039672ac92b55b8cb997d6162a2a37d1649" dependencies = [ "ahash 0.8.11", "cfg-if", @@ -12393,7 +15219,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "844b7645371e6ecdf61ff246ba1958c29e802881a749ae3fb1993675d210d28d" dependencies = [ "arrayref", - "arrayvec 0.7.4", + "arrayvec 0.7.6", "curve25519-dalek-ng", "merlin", "rand_core 0.6.4", @@ -12410,14 +15236,14 @@ checksum = "8de18f6d8ba0aad7045f5feae07ec29899c1112584a38509a84ad7b04451eaa0" dependencies = [ "aead", "arrayref", - "arrayvec 0.7.4", - "curve25519-dalek 4.1.3", + "arrayvec 0.7.6", + "curve25519-dalek", "getrandom_or_panic", "merlin", "rand_core 0.6.4", "serde_bytes", "sha2 0.10.8", - "subtle 2.4.1", + "subtle 2.6.1", "zeroize", ] @@ -12429,9 +15255,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "scratch" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3cf7c11c38cb994f3d40e8a8cde3bbd1f72a435e4c49e85d6553d8312306152" +checksum = "9f6280af86e5f559536da57a45ebc84948833b3bee313a7dd25232e09c878a52" [[package]] name = "sct" @@ -12439,10 +15265,25 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "ring 0.17.8", + "ring 0.17.14", "untrusted 0.9.0", ] +[[package]] +name = "sctp-proto" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6220f78bb44c15f326b0596113305f6101097a18755d53727a575c97e09fb24" +dependencies = [ + "bytes", + "crc", + "fxhash", + "log", + "rand 0.8.5", + "slab", + "thiserror 1.0.69", +] + [[package]] name = "sec1" version = "0.7.3" @@ -12453,7 +15294,8 @@ dependencies = [ "der", "generic-array 0.14.7", "pkcs8", - "subtle 2.4.1", + "serdect", + "subtle 2.6.1", "zeroize", ] @@ -12495,41 +15337,72 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.11.0" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.9.0", + "core-foundation 0.9.4", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" +checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" dependencies = [ - "bitflags 2.5.0", - "core-foundation", + "bitflags 2.9.0", + "core-foundation 0.10.0", "core-foundation-sys", "libc", "security-framework-sys", ] [[package]] -name = "security-framework-sys" -version = "2.11.0" +name = "security-framework-sys" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a3186ec9e65071a2095434b1f5bb24838d4e8e130f584c790f6033c79943537" +dependencies = [ + "semver-parser 0.7.0", +] + +[[package]] +name = "semver" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" dependencies = [ - "core-foundation-sys", - "libc", + "semver-parser 0.7.0", ] [[package]] name = "semver" -version = "0.6.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a3186ec9e65071a2095434b1f5bb24838d4e8e130f584c790f6033c79943537" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" dependencies = [ - "semver-parser", + "semver-parser 0.10.3", ] [[package]] name = "semver" -version = "1.0.23" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" dependencies = [ "serde", ] @@ -12540,11 +15413,26 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" +[[package]] +name = "semver-parser" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9900206b54a3527fdc7b8a938bffd94a568bac4f4aa8113b209df75a09c0dec2" +dependencies = [ + "pest", +] + +[[package]] +name = "send_wrapper" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" + [[package]] name = "serde" -version = "1.0.203" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" dependencies = [ "serde_derive", ] @@ -12558,43 +15446,64 @@ dependencies = [ "serde", ] +[[package]] +name = "serde-hex-utils" +version = "0.1.0" +source = "git+https://github.com/polytope-labs/hyperbridge?branch=polkadot-stable2409#d46e41c741b28ac0dbe6af4eb6b4da0a287d9e85" +dependencies = [ + "anyhow", + "hex", + "serde", +] + [[package]] name = "serde_bytes" -version = "0.11.14" +version = "0.11.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b8497c313fd43ab992087548117643f6fcd935cbf36f176ffda0aacf9591734" +checksum = "8437fd221bde2d4ca316d61b90e337e9e702b3820b87d63caa9ba6c02bd06d96" dependencies = [ "serde", ] [[package]] name = "serde_derive" -version = "1.0.203" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] name = "serde_json" -version = "1.0.117" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] [[package]] name = "serde_spanned" -version = "0.6.6" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +dependencies = [ + "serde", +] + +[[package]] +name = "serdect" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" +checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" dependencies = [ + "base16ct", "serde", ] @@ -12611,6 +15520,18 @@ dependencies = [ "opaque-debug 0.3.1", ] +[[package]] +name = "sha-1" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", + "sha1-asm", +] + [[package]] name = "sha1" version = "0.10.6" @@ -12622,6 +15543,15 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "sha1-asm" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "286acebaf8b67c1130aedffad26f594eff0c1292389158135327d2e23aed582b" +dependencies = [ + "cc", +] + [[package]] name = "sha2" version = "0.9.9" @@ -12656,6 +15586,16 @@ dependencies = [ "keccak", ] +[[package]] +name = "sha3-asm" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28efc5e327c837aa837c59eae585fc250715ef939ac32881bcc11677cd02d46" +dependencies = [ + "cc", + "cfg-if", +] + [[package]] name = "sharded-slab" version = "0.1.7" @@ -12673,9 +15613,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.2" +version = "1.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" dependencies = [ "libc", ] @@ -12692,9 +15632,9 @@ dependencies = [ [[package]] name = "simba" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae" +checksum = "b3a386a501cd104797982c15ae17aafe8b9261315b5d07e3ec803f2ea26be0fa" dependencies = [ "approx", "num-complex", @@ -12703,6 +15643,15 @@ dependencies = [ "wide", ] +[[package]] +name = "simple-dns" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cae9a3fcdadafb6d97f4c0e007e4247b114ee0f119f650c3cbf3a8b3a1479694" +dependencies = [ + "bitflags 2.9.0", +] + [[package]] name = "simple-mermaid" version = "0.1.1" @@ -12732,14 +15681,13 @@ checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" [[package]] name = "slot-range-helper" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "15.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "enumn", "parity-scale-codec", "paste", "sp-runtime", - "sp-std", ] [[package]] @@ -12753,9 +15701,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.13.2" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" [[package]] name = "smol" @@ -12780,7 +15728,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0bb30cf57b7b5f6109ce17c3164445e2d6f270af2cb48f6e4d31c2967c9a9f5" dependencies = [ - "arrayvec 0.7.4", + "arrayvec 0.7.6", "async-lock 2.8.0", "atomic-take", "base64 0.21.7", @@ -12789,8 +15737,8 @@ dependencies = [ "bs58 0.5.1", "chacha20", "crossbeam-queue", - "derive_more", - "ed25519-zebra 4.0.3", + "derive_more 0.99.20", + "ed25519-zebra", "either", "event-listener 2.5.3", "fnv", @@ -12807,10 +15755,10 @@ dependencies = [ "num-bigint", "num-rational", "num-traits", - "pbkdf2 0.12.2", + "pbkdf2", "pin-project", "poly1305", - "rand", + "rand 0.8.5", "rand_chacha 0.3.1", "ruzstd", "schnorrkel 0.10.2", @@ -12821,10 +15769,10 @@ dependencies = [ "siphasher", "slab", "smallvec", - "soketto", + "soketto 0.7.1", "twox-hash", - "wasmi", - "x25519-dalek 2.0.1", + "wasmi 0.31.2", + "x25519-dalek", "zeroize", ] @@ -12838,7 +15786,7 @@ dependencies = [ "async-lock 2.8.0", "base64 0.21.7", "blake2-rfc", - "derive_more", + "derive_more 0.99.20", "either", "event-listener 2.5.3", "fnv", @@ -12853,7 +15801,7 @@ dependencies = [ "no-std-net", "parking_lot 0.12.3", "pin-project", - "rand", + "rand 0.8.5", "rand_chacha 0.3.1", "serde", "serde_json", @@ -12879,12 +15827,12 @@ dependencies = [ "aes-gcm", "blake2 0.10.6", "chacha20poly1305", - "curve25519-dalek 4.1.3", + "curve25519-dalek", "rand_core 0.6.4", - "ring 0.17.8", - "rustc_version", + "ring 0.17.14", + "rustc_version 0.4.1", "sha2 0.10.8", - "subtle 2.4.1", + "subtle 2.6.1", ] [[package]] @@ -12899,12 +15847,11 @@ dependencies = [ [[package]] name = "snowbridge-beacon-primitives" -version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.10.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "byte-slice-cast", "frame-support", - "frame-system", "hex", "parity-scale-codec", "rlp", @@ -12918,13 +15865,12 @@ dependencies = [ "sp-std", "ssz_rs", "ssz_rs_derive", - "static_assertions", ] [[package]] name = "snowbridge-core" -version = "0.1.1" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.10.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "ethabi-decode", "frame-support", @@ -12946,8 +15892,8 @@ dependencies = [ [[package]] name = "snowbridge-ethereum" -version = "0.2.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.9.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "ethabi-decode", "ethbloom", @@ -12956,11 +15902,9 @@ dependencies = [ "parity-bytes", "parity-scale-codec", "rlp", - "rustc-hex", "scale-info", "serde", "serde-big-array", - "sp-core", "sp-io", "sp-runtime", "sp-std", @@ -12975,33 +15919,231 @@ dependencies = [ "hex", "lazy_static", "parity-scale-codec", - "rand", + "rand 0.8.5", "scale-info", "snowbridge-amcl", "zeroize", ] [[package]] -name = "snowbridge-router-primitives" -version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +name = "snowbridge-outbound-queue-merkle-tree" +version = "0.9.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-runtime", +] + +[[package]] +name = "snowbridge-outbound-queue-runtime-api" +version = "0.10.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "frame-support", + "parity-scale-codec", + "snowbridge-core", + "snowbridge-outbound-queue-merkle-tree", + "sp-api", + "sp-std", +] + +[[package]] +name = "snowbridge-pallet-ethereum-client" +version = "0.10.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "hex-literal 0.4.1", + "log", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "serde", + "snowbridge-beacon-primitives", + "snowbridge-core", + "snowbridge-ethereum", + "snowbridge-pallet-ethereum-client-fixtures", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "static_assertions", +] + +[[package]] +name = "snowbridge-pallet-ethereum-client-fixtures" +version = "0.18.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "hex-literal 0.4.1", + "snowbridge-beacon-primitives", + "snowbridge-core", + "sp-core", + "sp-std", +] + +[[package]] +name = "snowbridge-pallet-inbound-queue" +version = "0.10.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "alloy-primitives 0.4.2", + "alloy-sol-types 0.4.2", + "frame-benchmarking", + "frame-support", + "frame-system", + "hex-literal 0.4.1", + "log", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "serde", + "snowbridge-beacon-primitives", + "snowbridge-core", + "snowbridge-pallet-inbound-queue-fixtures", + "snowbridge-router-primitives", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "staging-xcm", + "staging-xcm-executor", +] + +[[package]] +name = "snowbridge-pallet-inbound-queue-fixtures" +version = "0.18.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "hex-literal 0.4.1", + "snowbridge-beacon-primitives", + "snowbridge-core", + "sp-core", + "sp-std", +] + +[[package]] +name = "snowbridge-pallet-outbound-queue" +version = "0.10.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ + "bridge-hub-common", "ethabi-decode", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "serde", + "snowbridge-core", + "snowbridge-outbound-queue-merkle-tree", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "snowbridge-pallet-system" +version = "0.10.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "frame-benchmarking", "frame-support", "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "snowbridge-core", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "staging-xcm", + "staging-xcm-executor", +] + +[[package]] +name = "snowbridge-router-primitives" +version = "0.16.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "frame-support", "hex-literal 0.4.1", "log", "parity-scale-codec", - "scale-info", - "serde", + "scale-info", + "snowbridge-core", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "staging-xcm", + "staging-xcm-executor", +] + +[[package]] +name = "snowbridge-runtime-common" +version = "0.10.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "frame-support", + "log", + "parity-scale-codec", + "snowbridge-core", + "sp-arithmetic", + "sp-std", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", +] + +[[package]] +name = "snowbridge-runtime-test-common" +version = "0.12.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "cumulus-pallet-parachain-system", + "frame-support", + "frame-system", + "pallet-balances", + "pallet-collator-selection", + "pallet-message-queue", + "pallet-session", + "pallet-timestamp", + "pallet-utility", + "pallet-xcm", + "parachains-runtimes-test-utils", + "parity-scale-codec", + "snowbridge-core", + "snowbridge-pallet-ethereum-client", + "snowbridge-pallet-ethereum-client-fixtures", + "snowbridge-pallet-outbound-queue", + "snowbridge-pallet-system", + "sp-core", + "sp-io", + "sp-keyring", + "sp-runtime", + "staging-parachain-info", + "staging-xcm", + "staging-xcm-executor", +] + +[[package]] +name = "snowbridge-system-runtime-api" +version = "0.10.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "parity-scale-codec", "snowbridge-core", - "sp-core", - "sp-io", - "sp-runtime", + "sp-api", "sp-std", "staging-xcm", - "staging-xcm-builder", - "staging-xcm-executor", ] [[package]] @@ -13016,9 +16158,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.7" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" dependencies = [ "libc", "windows-sys 0.52.0", @@ -13032,20 +16174,35 @@ checksum = "41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2" dependencies = [ "base64 0.13.1", "bytes", - "flate2", "futures", - "http", "httparse", "log", - "rand", - "sha-1", + "rand 0.8.5", + "sha-1 0.9.8", +] + +[[package]] +name = "soketto" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e859df029d160cb88608f5d7df7fb4753fd20fdfb4de5644f3d8b8440841721" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures", + "http 1.3.1", + "httparse", + "log", + "rand 0.8.5", + "sha1", ] [[package]] name = "sp-api" -version = "27.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "34.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ + "docify", "hash-db", "log", "parity-scale-codec", @@ -13055,100 +16212,98 @@ dependencies = [ "sp-externalities", "sp-metadata-ir", "sp-runtime", + "sp-runtime-interface", "sp-state-machine", - "sp-std", "sp-trie", "sp-version", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sp-api-proc-macro" -version = "15.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "20.0.3" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "Inflector", "blake2 0.10.6", - "expander 2.2.1", - "proc-macro-crate 3.1.0", + "expander", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] name = "sp-application-crypto" -version = "31.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "parity-scale-codec", "scale-info", "serde", "sp-core", "sp-io", - "sp-std", ] [[package]] name = "sp-arithmetic" -version = "24.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "26.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ + "docify", "integer-sqrt", "num-traits", "parity-scale-codec", "scale-info", "serde", - "sp-std", "static_assertions", ] [[package]] name = "sp-authority-discovery" -version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "34.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "parity-scale-codec", "scale-info", "sp-api", "sp-application-crypto", "sp-runtime", - "sp-std", ] [[package]] name = "sp-block-builder" -version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "34.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "sp-api", "sp-inherents", "sp-runtime", - "sp-std", ] [[package]] name = "sp-blockchain" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "37.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "futures", - "log", "parity-scale-codec", "parking_lot 0.12.3", "schnellru", "sp-api", "sp-consensus", + "sp-core", "sp-database", "sp-runtime", "sp-state-machine", - "thiserror", + "thiserror 1.0.69", + "tracing", ] [[package]] name = "sp-consensus" -version = "0.33.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.40.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "async-trait", "futures", @@ -13157,13 +16312,13 @@ dependencies = [ "sp-inherents", "sp-runtime", "sp-state-machine", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sp-consensus-aura" -version = "0.33.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.40.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "async-trait", "parity-scale-codec", @@ -13173,14 +16328,13 @@ dependencies = [ "sp-consensus-slots", "sp-inherents", "sp-runtime", - "sp-std", "sp-timestamp", ] [[package]] name = "sp-consensus-babe" -version = "0.33.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.40.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "async-trait", "parity-scale-codec", @@ -13192,14 +16346,13 @@ dependencies = [ "sp-core", "sp-inherents", "sp-runtime", - "sp-std", "sp-timestamp", ] [[package]] name = "sp-consensus-beefy" -version = "14.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "22.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "lazy_static", "parity-scale-codec", @@ -13210,16 +16363,17 @@ dependencies = [ "sp-core", "sp-crypto-hashing", "sp-io", + "sp-keystore", "sp-mmr-primitives", "sp-runtime", - "sp-std", - "strum 0.24.1", + "sp-weights", + "strum 0.26.3", ] [[package]] name = "sp-consensus-grandpa" -version = "14.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "21.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "finality-grandpa", "log", @@ -13231,47 +16385,57 @@ dependencies = [ "sp-core", "sp-keystore", "sp-runtime", - "sp-std", +] + +[[package]] +name = "sp-consensus-pow" +version = "0.40.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "parity-scale-codec", + "sp-api", + "sp-core", + "sp-runtime", ] [[package]] name = "sp-consensus-slots" -version = "0.33.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.40.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-std", "sp-timestamp", ] [[package]] name = "sp-core" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "34.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "array-bytes 6.2.3", - "bip39", + "array-bytes", "bitflags 1.3.2", "blake2 0.10.6", "bounded-collections", "bs58 0.5.1", "dyn-clonable", - "ed25519-zebra 3.1.0", + "ed25519-zebra", "futures", "hash-db", "hash256-std-hasher", "impl-serde", - "itertools 0.10.5", + "itertools 0.11.0", + "k256", "libsecp256k1", "log", "merlin", + "parity-bip39", "parity-scale-codec", "parking_lot 0.12.3", "paste", "primitive-types", - "rand", + "rand 0.8.5", "scale-info", "schnorrkel 0.11.4", "secp256k1", @@ -13285,16 +16449,44 @@ dependencies = [ "sp-storage", "ss58-registry", "substrate-bip39", - "thiserror", + "thiserror 1.0.69", "tracing", "w3f-bls", "zeroize", ] +[[package]] +name = "sp-core-hashing" +version = "16.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "sp-crypto-hashing", +] + +[[package]] +name = "sp-crypto-ec-utils" +version = "0.14.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "ark-bls12-377", + "ark-bls12-377-ext", + "ark-bls12-381", + "ark-bls12-381-ext", + "ark-bw6-761", + "ark-bw6-761-ext", + "ark-ec", + "ark-ed-on-bls12-377", + "ark-ed-on-bls12-377-ext", + "ark-ed-on-bls12-381-bandersnatch", + "ark-ed-on-bls12-381-bandersnatch-ext", + "ark-scale", + "sp-runtime-interface", +] + [[package]] name = "sp-crypto-hashing" version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "blake2b_simd", "byteorder", @@ -13307,17 +16499,17 @@ dependencies = [ [[package]] name = "sp-crypto-hashing-proc-macro" version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "quote", "sp-crypto-hashing", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] name = "sp-database" version = "10.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "kvdb", "parking_lot 0.12.3", @@ -13326,59 +16518,60 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "14.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] name = "sp-externalities" -version = "0.26.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.29.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "environmental", "parity-scale-codec", - "sp-std", "sp-storage", ] [[package]] name = "sp-genesis-builder" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.15.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ + "parity-scale-codec", + "scale-info", "serde_json", "sp-api", "sp-runtime", - "sp-std", ] [[package]] name = "sp-inherents" -version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "34.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "async-trait", "impl-trait-for-tuples", "parity-scale-codec", "scale-info", "sp-runtime", - "sp-std", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sp-io" -version = "31.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bytes", + "docify", "ed25519-dalek", "libsecp256k1", "log", "parity-scale-codec", + "polkavm-derive 0.9.1", "rustversion", "secp256k1", "sp-core", @@ -13387,7 +16580,6 @@ dependencies = [ "sp-keystore", "sp-runtime-interface", "sp-state-machine", - "sp-std", "sp-tracing", "sp-trie", "tracing", @@ -13396,80 +16588,76 @@ dependencies = [ [[package]] name = "sp-keyring" -version = "32.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "sp-core", "sp-runtime", - "strum 0.24.1", + "strum 0.26.3", ] [[package]] name = "sp-keystore" -version = "0.35.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.40.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "parity-scale-codec", "parking_lot 0.12.3", "sp-core", "sp-externalities", - "thiserror", ] [[package]] name = "sp-maybe-compressed-blob" version = "11.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "thiserror", + "thiserror 1.0.69", "zstd 0.12.4", ] [[package]] name = "sp-metadata-ir" -version = "0.6.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.7.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-metadata", "parity-scale-codec", "scale-info", - "sp-std", ] [[package]] name = "sp-mixnet" -version = "0.5.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.12.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "parity-scale-codec", "scale-info", "sp-api", "sp-application-crypto", - "sp-std", ] [[package]] name = "sp-mmr-primitives" -version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "34.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "ckb-merkle-mountain-range", "log", "parity-scale-codec", + "polkadot-ckb-merkle-mountain-range", "scale-info", "serde", "sp-api", "sp-core", "sp-debug-derive", "sp-runtime", - "sp-std", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sp-npos-elections" -version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "34.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "parity-scale-codec", "scale-info", @@ -13477,13 +16665,12 @@ dependencies = [ "sp-arithmetic", "sp-core", "sp-runtime", - "sp-std", ] [[package]] name = "sp-offchain" -version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "34.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "sp-api", "sp-core", @@ -13493,7 +16680,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "13.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "backtrace", "lazy_static", @@ -13502,27 +16689,28 @@ dependencies = [ [[package]] name = "sp-rpc" -version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "32.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "rustc-hash", + "rustc-hash 1.1.0", "serde", "sp-core", ] [[package]] name = "sp-runtime" -version = "32.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "39.0.5" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "docify", "either", "hash256-std-hasher", "impl-trait-for-tuples", "log", + "num-traits", "parity-scale-codec", "paste", - "rand", + "rand 0.8.5", "scale-info", "serde", "simple-mermaid", @@ -13532,16 +16720,18 @@ dependencies = [ "sp-io", "sp-std", "sp-weights", + "tracing", ] [[package]] name = "sp-runtime-interface" -version = "25.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "28.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bytes", "impl-trait-for-tuples", "parity-scale-codec", + "polkavm-derive 0.9.1", "primitive-types", "sp-externalities", "sp-runtime-interface-proc-macro", @@ -13554,21 +16744,21 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" -version = "17.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "Inflector", - "expander 2.2.1", - "proc-macro-crate 3.1.0", + "expander", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] name = "sp-session" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "36.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "parity-scale-codec", "scale-info", @@ -13577,13 +16767,12 @@ dependencies = [ "sp-keystore", "sp-runtime", "sp-staking", - "sp-std", ] [[package]] name = "sp-staking" -version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "36.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -13591,41 +16780,39 @@ dependencies = [ "serde", "sp-core", "sp-runtime", - "sp-std", ] [[package]] name = "sp-state-machine" -version = "0.36.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.43.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "hash-db", "log", "parity-scale-codec", "parking_lot 0.12.3", - "rand", + "rand 0.8.5", "smallvec", "sp-core", "sp-externalities", "sp-panic-handler", - "sp-std", "sp-trie", - "thiserror", + "thiserror 1.0.69", "tracing", "trie-db", ] [[package]] name = "sp-statement-store" -version = "11.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "aes-gcm", - "curve25519-dalek 4.1.3", + "curve25519-dalek", "ed25519-dalek", "hkdf", "parity-scale-codec", - "rand", + "rand 0.8.5", "scale-info", "sha2 0.10.8", "sp-api", @@ -13635,58 +16822,54 @@ dependencies = [ "sp-externalities", "sp-runtime", "sp-runtime-interface", - "sp-std", - "thiserror", - "x25519-dalek 2.0.1", + "thiserror 1.0.69", + "x25519-dalek", ] [[package]] name = "sp-std" version = "14.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" [[package]] name = "sp-storage" -version = "20.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "21.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "impl-serde", "parity-scale-codec", "ref-cast", "serde", "sp-debug-derive", - "sp-std", ] [[package]] name = "sp-timestamp" -version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "34.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "async-trait", "parity-scale-codec", "sp-inherents", "sp-runtime", - "sp-std", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sp-tracing" -version = "16.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "17.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "parity-scale-codec", - "sp-std", "tracing", "tracing-core", - "tracing-subscriber 0.2.25", + "tracing-subscriber", ] [[package]] name = "sp-transaction-pool" -version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "34.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "sp-api", "sp-runtime", @@ -13694,8 +16877,8 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" -version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "34.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "async-trait", "parity-scale-codec", @@ -13703,14 +16886,13 @@ dependencies = [ "sp-core", "sp-inherents", "sp-runtime", - "sp-std", "sp-trie", ] [[package]] name = "sp-trie" -version = "30.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "37.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "ahash 0.8.11", "hash-db", @@ -13719,13 +16901,12 @@ dependencies = [ "nohash-hasher", "parity-scale-codec", "parking_lot 0.12.3", - "rand", + "rand 0.8.5", "scale-info", "schnellru", "sp-core", "sp-externalities", - "sp-std", - "thiserror", + "thiserror 1.0.69", "tracing", "trie-db", "trie-root", @@ -13733,8 +16914,8 @@ dependencies = [ [[package]] name = "sp-version" -version = "30.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "37.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "impl-serde", "parity-scale-codec", @@ -13745,37 +16926,36 @@ dependencies = [ "sp-runtime", "sp-std", "sp-version-proc-macro", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "sp-version-proc-macro" -version = "13.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "14.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "parity-scale-codec", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] name = "sp-wasm-interface" -version = "20.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "21.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "anyhow", "impl-trait-for-tuples", "log", "parity-scale-codec", - "sp-std", "wasmtime", ] [[package]] name = "sp-weights" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "31.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "bounded-collections", "parity-scale-codec", @@ -13784,7 +16964,6 @@ dependencies = [ "smallvec", "sp-arithmetic", "sp-debug-derive", - "sp-std", ] [[package]] @@ -13800,20 +16979,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" [[package]] -name = "spinners" -version = "4.1.1" +name = "spinning_top" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0ef947f358b9c238923f764c72a4a9d42f2d637c46e059dbd319d6e7cfb4f82" +checksum = "d96d2d1d716fb500937168cc09353ffdc7a012be8475ac7308e1bdf0e3923300" dependencies = [ - "lazy_static", - "maplit", - "strum 0.24.1", + "lock_api", ] [[package]] name = "spiritnet-runtime" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ + "anyhow", "attestation", "cfg-if", "ctype", @@ -13838,6 +17016,9 @@ dependencies = [ "frame-system-rpc-runtime-api", "frame-try-runtime", "hex-literal 0.3.4", + "ismp", + "ismp-parachain", + "ismp-parachain-runtime-api", "kilt-runtime-api-did", "kilt-runtime-api-dip-provider", "kilt-runtime-api-public-credentials", @@ -13850,13 +17031,17 @@ dependencies = [ "pallet-aura", "pallet-authorship", "pallet-balances", + "pallet-bonded-coins", + "pallet-bonded-coins-runtime-api", "pallet-collective", "pallet-democracy", "pallet-deposit-storage", "pallet-did-lookup", "pallet-dip-provider", + "pallet-hyperbridge", "pallet-indices", - "pallet-inflation", + "pallet-ismp", + "pallet-ismp-runtime-api", "pallet-membership", "pallet-message-queue", "pallet-migration", @@ -13867,6 +17052,7 @@ dependencies = [ "pallet-session", "pallet-timestamp", "pallet-tips", + "pallet-token-gateway", "pallet-transaction-payment", "pallet-transaction-payment-rpc-runtime-api", "pallet-treasury", @@ -13881,6 +17067,7 @@ dependencies = [ "public-credentials", "runtime-common", "scale-info", + "serde_json", "sp-api", "sp-block-builder", "sp-consensus-aura", @@ -13892,6 +17079,7 @@ dependencies = [ "sp-offchain", "sp-runtime", "sp-session", + "sp-staking", "sp-std", "sp-transaction-pool", "sp-version", @@ -13915,9 +17103,9 @@ dependencies = [ [[package]] name = "ss58-registry" -version = "1.47.0" +version = "1.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4743ce898933fbff7bbf414f497c459a782d496269644b3d650a398ae6a487ba" +checksum = "19409f13998e55816d1c728395af0b52ec066206341d939e22e7766df9b494b8" dependencies = [ "Inflector", "num-format", @@ -13957,10 +17145,28 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +[[package]] +name = "staging-node-inspect" +version = "0.23.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "clap", + "parity-scale-codec", + "sc-cli", + "sc-client-api", + "sc-service", + "sp-blockchain", + "sp-core", + "sp-io", + "sp-runtime", + "sp-statement-store", + "thiserror 1.0.69", +] + [[package]] name = "staging-parachain-info" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.17.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -13968,15 +17174,14 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-runtime", - "sp-std", ] [[package]] name = "staging-xcm" -version = "8.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "14.2.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "array-bytes 6.2.3", + "array-bytes", "bounded-collections", "derivative", "environmental", @@ -13985,19 +17190,21 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", + "sp-runtime", "sp-weights", "xcm-procedural", ] [[package]] name = "staging-xcm-builder" -version = "8.0.2" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "17.0.5" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-support", "frame-system", "impl-trait-for-tuples", "log", + "pallet-asset-conversion", "pallet-transaction-payment", "parity-scale-codec", "polkadot-parachain-primitives", @@ -14005,7 +17212,6 @@ dependencies = [ "sp-arithmetic", "sp-io", "sp-runtime", - "sp-std", "sp-weights", "staging-xcm", "staging-xcm-executor", @@ -14013,28 +17219,27 @@ dependencies = [ [[package]] name = "staging-xcm-executor" -version = "8.0.2" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "17.0.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "environmental", "frame-benchmarking", "frame-support", "impl-trait-for-tuples", - "log", "parity-scale-codec", "scale-info", "sp-arithmetic", "sp-core", "sp-io", "sp-runtime", - "sp-std", "sp-weights", "staging-xcm", + "tracing", ] [[package]] name = "standalone-node" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "clap", "frame-benchmarking", @@ -14076,7 +17281,6 @@ dependencies = [ "sp-timestamp", "substrate-build-script-utils", "substrate-frame-rpc-system", - "try-runtime-cli", ] [[package]] @@ -14102,9 +17306,9 @@ dependencies = [ [[package]] name = "static_init_macro" -version = "1.0.2" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70a2595fc3aa78f2d0e45dd425b22282dd863273761cc77780914b2cf3003acf" +checksum = "1389c88ddd739ec6d3f8f83343764a0e944cd23cfbf126a9796a714b0b6edd6f" dependencies = [ "cfg_aliases", "memchr", @@ -14114,16 +17318,34 @@ dependencies = [ ] [[package]] -name = "strobe-rs" -version = "0.8.1" +name = "str0m" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fabb238a1cccccfa4c4fb703670c0d157e1256c1ba695abf1b93bd2bb14bab2d" +checksum = "6706347e49b13373f7ddfafad47df7583ed52083d6fc8a594eb2c80497ef959d" dependencies = [ - "bitflags 1.3.2", - "byteorder", - "keccak", - "subtle 2.4.1", - "zeroize", + "combine", + "crc", + "fastrand 2.3.0", + "hmac 0.12.1", + "once_cell", + "openssl", + "openssl-sys", + "sctp-proto", + "serde", + "sha-1 0.10.1", + "thiserror 1.0.69", + "tracing", +] + +[[package]] +name = "string-interner" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c6a0d765f5807e98a091107bae0a56ea3799f66a5de47b2c84c94a39c09974e" +dependencies = [ + "cfg-if", + "hashbrown 0.14.5", + "serde", ] [[package]] @@ -14137,15 +17359,15 @@ name = "strum" version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" -dependencies = [ - "strum_macros 0.24.3", -] [[package]] name = "strum" -version = "0.26.2" +version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" +dependencies = [ + "strum_macros 0.26.4", +] [[package]] name = "strum_macros" @@ -14170,26 +17392,25 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] name = "substrate-bip39" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a7590dc041b9bc2825e52ce5af8416c73dbe9d0654402bfd4b4941938b94d8f" +version = "0.6.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "hmac 0.11.0", - "pbkdf2 0.8.0", + "hmac 0.12.1", + "pbkdf2", "schnorrkel 0.11.4", - "sha2 0.9.9", + "sha2 0.10.8", "zeroize", ] [[package]] name = "substrate-build-script-utils" version = "11.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" [[package]] name = "substrate-fixed" @@ -14205,9 +17426,10 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ + "docify", "frame-system-rpc-runtime-api", "futures", "jsonrpsee", @@ -14225,32 +17447,36 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.17.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "hyper", + "http-body-util", + "hyper 1.6.0", + "hyper-util", "log", "prometheus", - "thiserror", + "thiserror 1.0.69", "tokio", ] [[package]] -name = "substrate-rpc-client" -version = "0.34.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +name = "substrate-state-machine" +version = "16.0.0" +source = "git+https://github.com/polytope-labs/hyperbridge?branch=polkadot-stable2409#d46e41c741b28ac0dbe6af4eb6b4da0a287d9e85" dependencies = [ - "async-trait", - "jsonrpsee", - "log", - "sc-rpc-api", + "hash-db", + "ismp", + "pallet-ismp", + "parity-scale-codec", + "polkadot-sdk", + "primitive-types", + "scale-info", "serde", - "sp-runtime", ] [[package]] name = "substrate-state-trie-migration-rpc" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -14276,27 +17502,29 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" -version = "18.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "24.0.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "array-bytes 6.2.3", + "array-bytes", "build-helper", "cargo_metadata", "console", "filetime", "frame-metadata", + "jobserver", "merkleized-metadata", "parity-scale-codec", "parity-wasm", + "polkavm-linker 0.9.2", "sc-executor", "sp-core", "sp-io", "sp-maybe-compressed-blob", "sp-tracing", "sp-version", - "strum 0.24.1", + "strum 0.26.3", "tempfile", - "toml 0.8.14", + "toml 0.8.21", "walkdir", "wasm-opt", ] @@ -14309,9 +17537,9 @@ checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" [[package]] name = "subtle" -version = "2.4.1" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "subtle-ng" @@ -14332,15 +17560,39 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.66" +version = "2.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" +checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "syn-solidity" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b837ef12ab88835251726eb12237655e61ec8dc8a280085d1961cdc3dfd047" +dependencies = [ + "paste", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "syn-solidity" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c837dc8852cb7074e46b444afb81783140dab12c58867b49fb3898fbafedf7ea" +dependencies = [ + "paste", + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "synstructure" version = "0.12.6" @@ -14361,25 +17613,25 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] name = "system-configuration" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 1.3.2", - "core-foundation", + "bitflags 2.9.0", + "core-foundation 0.9.4", "system-configuration-sys", ] [[package]] name = "system-configuration-sys" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" dependencies = [ "core-foundation-sys", "libc", @@ -14393,20 +17645,21 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "target-lexicon" -version = "0.12.14" +version = "0.12.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tempfile" -version = "3.10.1" +version = "3.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" dependencies = [ - "cfg-if", - "fastrand 2.1.0", - "rustix 0.38.34", - "windows-sys 0.52.0", + "fastrand 2.3.0", + "getrandom 0.3.2", + "once_cell", + "rustix 1.0.5", + "windows-sys 0.59.0", ] [[package]] @@ -14420,47 +17673,48 @@ dependencies = [ [[package]] name = "terminal_size" -version = "0.3.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7" +checksum = "45c6481c4829e4cc63825e62c49186a34538b7b2750b73b266581ffb612fb5ed" dependencies = [ - "rustix 0.38.34", - "windows-sys 0.48.0", + "rustix 1.0.5", + "windows-sys 0.59.0", ] [[package]] name = "termtree" -version = "0.4.1" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" +checksum = "8f50febec83f5ee1df3015341d8bd429f2d1cc62bcba7ea2076759d315084683" [[package]] name = "test-log" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dffced63c2b5c7be278154d76b479f9f9920ed34e7574201407f0b14e2bbb93" +checksum = "e7f46083d221181166e5b6f6b1e5f1d499f3a76888826e6cb1d057554157cd0f" dependencies = [ - "env_logger 0.11.3", + "env_logger 0.11.8", "test-log-macros", - "tracing-subscriber 0.3.18", + "tracing-subscriber", ] [[package]] name = "test-log-macros" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5999e24eaa32083191ba4e425deb75cdf25efefabe5aaccb7446dd0d4122a3f5" +checksum = "888d0c3c6db53c0fdab160d2ed5e12ba745383d3e85813f2ea0f2b1475ab553f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] name = "testnet-parachains-constants" -version = "1.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "10.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ + "cumulus-primitives-core", "frame-support", "polkadot-core-primitives", "rococo-runtime-constants", @@ -14472,11 +17726,20 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.61" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" dependencies = [ - "thiserror-impl", + "thiserror-impl 2.0.12", ] [[package]] @@ -14496,18 +17759,29 @@ checksum = "e4c60d69f36615a077cc7663b9cb8e42275722d23e58a7fa3d2c7f2915d09d04" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", ] [[package]] name = "thiserror-impl" -version = "1.0.61" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] @@ -14571,9 +17845,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.36" +version = "0.3.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" dependencies = [ "deranged", "itoa", @@ -14586,15 +17860,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" +checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" [[package]] name = "time-macros" -version = "0.2.18" +version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" dependencies = [ "num-conv", "time-core", @@ -14609,11 +17883,21 @@ dependencies = [ "crunchy", ] +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" dependencies = [ "tinyvec_macros", ] @@ -14624,80 +17908,111 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +[[package]] +name = "token-gateway-primitives" +version = "16.0.0" +source = "git+https://github.com/polytope-labs/hyperbridge?branch=polkadot-stable2409#d46e41c741b28ac0dbe6af4eb6b4da0a287d9e85" +dependencies = [ + "alloy-primitives 0.7.7", + "alloy-sol-macro 0.7.7", + "alloy-sol-types 0.7.7", + "anyhow", + "ismp", + "log", + "pallet-ismp", + "parity-scale-codec", + "polkadot-sdk", + "primitive-types", + "scale-info", +] + [[package]] name = "tokio" -version = "1.38.0" +version = "1.44.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" +checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48" dependencies = [ "backtrace", "bytes", "libc", "mio", - "num_cpus", "parking_lot 0.12.3", - "pin-project-lite 0.2.14", + "pin-project-lite", "signal-hook-registry", - "socket2 0.5.7", + "socket2 0.5.9", "tokio-macros", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "tokio-macros" -version = "2.3.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] -name = "tokio-retry" -version = "0.3.0" +name = "tokio-rustls" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f57eb36ecbe0fc510036adff84824dd3c24bb781e21bfa67b69d556aa85214f" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ - "pin-project", - "rand", + "rustls 0.21.12", "tokio", ] [[package]] name = "tokio-rustls" -version = "0.24.1" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" dependencies = [ - "rustls 0.21.12", + "rustls 0.23.26", "tokio", ] [[package]] name = "tokio-stream" -version = "0.1.15" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" dependencies = [ "futures-core", - "pin-project-lite 0.2.14", + "pin-project-lite", "tokio", "tokio-util", ] +[[package]] +name = "tokio-tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" +dependencies = [ + "futures-util", + "log", + "rustls 0.21.12", + "rustls-native-certs 0.6.3", + "tokio", + "tokio-rustls 0.24.1", + "tungstenite", +] + [[package]] name = "tokio-util" -version = "0.7.11" +version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" dependencies = [ "bytes", "futures-core", "futures-io", "futures-sink", - "pin-project-lite 0.2.14", + "pin-project-lite", "tokio", ] @@ -14712,59 +18027,44 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.14" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f49eb2ab21d2f26bd6db7bf383edc527a7ebaee412d17af4d40fdccd442f335" +checksum = "900f6c86a685850b1bc9f6223b20125115ee3f31e01207d81655bbcc0aea9231" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.14", + "toml_edit", ] [[package]] name = "toml_datetime" -version = "0.6.6" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" +checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3" dependencies = [ "serde", ] [[package]] name = "toml_edit" -version = "0.20.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" -dependencies = [ - "indexmap 2.2.6", - "toml_datetime", - "winnow 0.5.40", -] - -[[package]] -name = "toml_edit" -version = "0.21.1" +version = "0.22.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +checksum = "10558ed0bd2a1562e630926a2d1f0b98c827da99fabd3fe20920a59642504485" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.9.0", + "serde", + "serde_spanned", "toml_datetime", - "winnow 0.5.40", + "toml_write", + "winnow", ] [[package]] -name = "toml_edit" -version = "0.22.14" +name = "toml_write" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f21c7aaf97f1bd9ca9d4f9e73b0a6c74bd5afef56f2bc931943a6e1c37e04e38" -dependencies = [ - "indexmap 2.2.6", - "serde", - "serde_spanned", - "toml_datetime", - "winnow 0.6.13", -] +checksum = "28391a4201ba7eb1984cfeb6862c0b3ea2cfe23332298967c749dddc0d6cd976" [[package]] name = "tower" @@ -14775,7 +18075,7 @@ dependencies = [ "futures-core", "futures-util", "pin-project", - "pin-project-lite 0.2.14", + "pin-project-lite", "tower-layer", "tower-service", "tracing", @@ -14783,62 +18083,60 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.4.4" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140" +checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.9.0", "bytes", - "futures-core", - "futures-util", - "http", - "http-body", - "http-range-header", - "pin-project-lite 0.2.14", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "pin-project-lite", "tower-layer", "tower-service", ] [[package]] name = "tower-layer" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "log", - "pin-project-lite 0.2.14", + "pin-project-lite", "tracing-attributes", "tracing-core", ] [[package]] name = "tracing-attributes" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", ] [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", "valuable", @@ -14856,8 +18154,8 @@ dependencies = [ [[package]] name = "tracing-gum" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "16.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "coarsetime", "polkadot-primitives", @@ -14868,24 +18166,13 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ - "expander 2.2.1", - "proc-macro-crate 3.1.0", + "expander", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.66", -] - -[[package]] -name = "tracing-log" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" -dependencies = [ - "log", - "once_cell", - "tracing-core", + "syn 2.0.101", ] [[package]] @@ -14899,64 +18186,33 @@ dependencies = [ "tracing-core", ] -[[package]] -name = "tracing-serde" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" -dependencies = [ - "serde", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.2.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" -dependencies = [ - "ansi_term", - "chrono", - "lazy_static", - "matchers 0.0.1", - "parking_lot 0.11.2", - "regex", - "serde", - "serde_json", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log 0.1.4", - "tracing-serde", -] - [[package]] name = "tracing-subscriber" -version = "0.3.18" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" dependencies = [ - "matchers 0.1.0", + "matchers", "nu-ansi-term", "once_cell", + "parking_lot 0.12.3", "regex", "sharded-slab", + "smallvec", "thread_local", + "time", "tracing", "tracing-core", - "tracing-log 0.2.0", + "tracing-log", ] [[package]] name = "trie-db" -version = "0.28.0" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff28e0f815c2fea41ebddf148e008b077d2faddb026c9555b29696114d602642" +checksum = "0c992b4f40c234a074d48a757efeabb1a6be88af84c0c23f7ca158950cb0ae7f" dependencies = [ "hash-db", - "hashbrown 0.13.2", "log", "rustc-hex", "smallvec", @@ -14980,17 +18236,42 @@ dependencies = [ "async-trait", "cfg-if", "data-encoding", - "enum-as-inner", + "enum-as-inner 0.5.1", "futures-channel", "futures-io", "futures-util", "idna 0.2.3", "ipnet", "lazy_static", - "rand", + "rand 0.8.5", "smallvec", "socket2 0.4.10", - "thiserror", + "thiserror 1.0.69", + "tinyvec", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "trust-dns-proto" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3119112651c157f4488931a01e586aa459736e9d6046d3bd9105ffb69352d374" +dependencies = [ + "async-trait", + "cfg-if", + "data-encoding", + "enum-as-inner 0.6.1", + "futures-channel", + "futures-io", + "futures-util", + "idna 0.4.0", + "ipnet", + "once_cell", + "rand 0.8.5", + "smallvec", + "thiserror 1.0.69", "tinyvec", "tokio", "tracing", @@ -14999,22 +18280,23 @@ dependencies = [ [[package]] name = "trust-dns-resolver" -version = "0.22.0" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aff21aa4dcefb0a1afbfac26deb0adc93888c7d295fb63ab273ef276ba2b7cfe" +checksum = "10a3e6c3aff1718b3c73e395d1f35202ba2ffa847c6a62eea0db8fb4cfe30be6" dependencies = [ "cfg-if", "futures-util", "ipconfig", - "lazy_static", "lru-cache", + "once_cell", "parking_lot 0.12.3", + "rand 0.8.5", "resolv-conf", "smallvec", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", - "trust-dns-proto", + "trust-dns-proto 0.23.2", ] [[package]] @@ -15024,46 +18306,36 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] -name = "try-runtime-cli" -version = "0.39.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +name = "tt-call" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f195fd851901624eee5a58c4bb2b4f06399148fcd0ed336e6f1cb60a9881df" + +[[package]] +name = "tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" dependencies = [ - "async-trait", - "clap", - "frame-remote-externalities", - "frame-try-runtime", - "hex", + "byteorder", + "bytes", + "data-encoding", + "http 0.2.12", + "httparse", "log", - "parity-scale-codec", - "sc-cli", - "sc-executor", - "serde", - "serde_json", - "sp-api", - "sp-consensus-aura", - "sp-consensus-babe", - "sp-core", - "sp-debug-derive", - "sp-externalities", - "sp-inherents", - "sp-io", - "sp-keystore", - "sp-rpc", - "sp-runtime", - "sp-state-machine", - "sp-timestamp", - "sp-transaction-storage-proof", - "sp-version", - "sp-weights", - "substrate-rpc-client", - "zstd 0.12.4", + "rand 0.8.5", + "rustls 0.21.12", + "sha1", + "thiserror 1.0.69", + "url", + "utf-8", ] [[package]] -name = "tt-call" -version = "1.0.9" +name = "tuplex" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f195fd851901624eee5a58c4bb2b4f06399148fcd0ed336e6f1cb60a9881df" +checksum = "676ac81d5454c4dcf37955d34fa8626ede3490f744b86ca14a7b90168d2a08aa" [[package]] name = "twox-hash" @@ -15073,21 +18345,21 @@ checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ "cfg-if", "digest 0.10.7", - "rand", + "rand 0.8.5", "static_assertions", ] [[package]] name = "typenum" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "ucd-trie" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" [[package]] name = "uint" @@ -15101,17 +18373,23 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + [[package]] name = "unicode-bidi" -version = "0.3.15" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "unicode-normalization" @@ -15122,17 +18400,23 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + [[package]] name = "unicode-width" -version = "0.1.13" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" [[package]] name = "unicode-xid" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "universal-hash" @@ -15141,7 +18425,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" dependencies = [ "crypto-common", - "subtle 2.4.1", + "subtle 2.6.1", ] [[package]] @@ -15156,6 +18440,16 @@ dependencies = [ "futures-util", ] +[[package]] +name = "unsigned-varint" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb066959b24b5196ae73cb057f45598450d2c5f71460e98c49b738086eff9c06" +dependencies = [ + "bytes", + "tokio-util", +] + [[package]] name = "untrusted" version = "0.7.1" @@ -15170,15 +18464,33 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.2" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", - "idna 0.5.0", + "idna 1.0.3", "percent-encoding", ] +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "utf8parse" version = "0.2.2" @@ -15187,9 +18499,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "valuable" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" [[package]] name = "vcpkg" @@ -15199,9 +18511,9 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "void" @@ -15211,28 +18523,35 @@ checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" [[package]] name = "w3f-bls" -version = "0.1.4" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c5da5fa2c6afa2c9158eaa7cd9aee249765eb32b5fb0c63ad8b9e79336a47ec" +checksum = "e6bfb937b3d12077654a9e43e32a4e9c20177dd9fea0f3aba673e7840bb54f32" dependencies = [ "ark-bls12-377", "ark-bls12-381", "ark-ec", - "ark-ff", - "ark-serialize", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", "ark-serialize-derive", "arrayref", - "constcat", "digest 0.10.7", - "rand", + "rand 0.8.5", "rand_chacha 0.3.1", "rand_core 0.6.4", "sha2 0.10.8", "sha3", - "thiserror", "zeroize", ] +[[package]] +name = "wait-timeout" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" +dependencies = [ + "libc", +] + [[package]] name = "waker-fn" version = "1.2.0" @@ -15260,15 +18579,18 @@ dependencies = [ [[package]] name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" +version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +version = "0.14.2+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] [[package]] name = "wasix" @@ -15281,46 +18603,48 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", + "once_cell", + "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.42" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -15328,22 +18652,25 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "wasm-instrument" @@ -15365,7 +18692,7 @@ dependencies = [ "strum 0.24.1", "strum_macros 0.24.3", "tempfile", - "thiserror", + "thiserror 1.0.69", "wasm-opt-cxx-sys", "wasm-opt-sys", ] @@ -15418,7 +18745,24 @@ dependencies = [ "smallvec", "spin 0.9.8", "wasmi_arena", - "wasmi_core", + "wasmi_core 0.13.0", + "wasmparser-nostd", +] + +[[package]] +name = "wasmi" +version = "0.32.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50386c99b9c32bd2ed71a55b6dd4040af2580530fae8bdb9a6576571a80d0cca" +dependencies = [ + "arrayvec 0.7.6", + "multi-stash", + "num-derive", + "num-traits", + "smallvec", + "spin 0.9.8", + "wasmi_collections", + "wasmi_core 0.32.3", "wasmparser-nostd", ] @@ -15428,6 +18772,17 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "104a7f73be44570cac297b3035d76b169d6599637631cf37a1703326a0727073" +[[package]] +name = "wasmi_collections" +version = "0.32.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c128c039340ffd50d4195c3f8ce31aac357f06804cfc494c8b9508d4b30dca4" +dependencies = [ + "ahash 0.8.11", + "hashbrown 0.14.5", + "string-interner", +] + [[package]] name = "wasmi_core" version = "0.13.0" @@ -15440,6 +18795,18 @@ dependencies = [ "paste", ] +[[package]] +name = "wasmi_core" +version = "0.32.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a23b3a7f6c8c3ceeec6b83531ee61f0013c56e51cbf2b14b0f213548b23a4b41" +dependencies = [ + "downcast-rs", + "libm", + "num-traits", + "paste", +] + [[package]] name = "wasmparser" version = "0.102.0" @@ -15532,7 +18899,7 @@ dependencies = [ "log", "object 0.30.4", "target-lexicon", - "thiserror", + "thiserror 1.0.69", "wasmparser", "wasmtime-cranelift-shared", "wasmtime-environ", @@ -15567,7 +18934,7 @@ dependencies = [ "object 0.30.4", "serde", "target-lexicon", - "thiserror", + "thiserror 1.0.69", "wasmparser", "wasmtime-types", ] @@ -15634,7 +19001,7 @@ dependencies = [ "memfd", "memoffset", "paste", - "rand", + "rand 0.8.5", "rustix 0.36.17", "wasmtime-asm-macros", "wasmtime-environ", @@ -15650,15 +19017,15 @@ checksum = "a4f6fffd2a1011887d57f07654dd112791e872e3ff4a2e626aee8059ee17f06f" dependencies = [ "cranelift-entity", "serde", - "thiserror", + "thiserror 1.0.69", "wasmparser", ] [[package]] name = "web-sys" -version = "0.3.69" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" dependencies = [ "js-sys", "wasm-bindgen", @@ -15670,23 +19037,38 @@ version = "0.22.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed63aea5ce73d0ff405984102c42de94fc55a6b75765d621c65262469b3c9b53" dependencies = [ - "ring 0.17.8", + "ring 0.17.14", "untrusted 0.9.0", ] [[package]] -name = "webpki-roots" -version = "0.22.6" +name = "webpki-root-certs" +version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" +checksum = "75c7f0ef91146ebfb530314f5f1d24528d7f0767efbfd31dce919275413e393e" dependencies = [ - "webpki", + "webpki-root-certs 1.0.0", +] + +[[package]] +name = "webpki-root-certs" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01a83f7e1a9f8712695c03eabe9ed3fbca0feff0152f33f12593e5a6303cb1a4" +dependencies = [ + "rustls-pki-types", ] +[[package]] +name = "webpki-roots" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + [[package]] name = "westend-runtime" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "18.0.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "binary-merkle-tree", "bitvec", @@ -15711,6 +19093,7 @@ dependencies = [ "pallet-beefy-mmr", "pallet-collective", "pallet-conviction-voting", + "pallet-delegated-staking", "pallet-democracy", "pallet-election-provider-multi-phase", "pallet-election-provider-support-benchmarking", @@ -15718,7 +19101,6 @@ dependencies = [ "pallet-fast-unstake", "pallet-grandpa", "pallet-identity", - "pallet-im-online", "pallet-indices", "pallet-membership", "pallet-message-queue", @@ -15729,6 +19111,7 @@ dependencies = [ "pallet-nomination-pools-runtime-api", "pallet-offences", "pallet-offences-benchmarking", + "pallet-parameters", "pallet-preimage", "pallet-proxy", "pallet-recovery", @@ -15739,7 +19122,6 @@ dependencies = [ "pallet-session-benchmarking", "pallet-society", "pallet-staking", - "pallet-staking-reward-curve", "pallet-staking-runtime-api", "pallet-state-trie-migration", "pallet-sudo", @@ -15757,10 +19139,10 @@ dependencies = [ "polkadot-primitives", "polkadot-runtime-common", "polkadot-runtime-parachains", - "rustc-hex", "scale-info", "serde", "serde_derive", + "serde_json", "smallvec", "sp-api", "sp-application-crypto", @@ -15769,6 +19151,7 @@ dependencies = [ "sp-block-builder", "sp-consensus-babe", "sp-consensus-beefy", + "sp-consensus-grandpa", "sp-core", "sp-genesis-builder", "sp-inherents", @@ -15779,7 +19162,6 @@ dependencies = [ "sp-runtime", "sp-session", "sp-staking", - "sp-std", "sp-storage", "sp-transaction-pool", "sp-version", @@ -15788,12 +19170,13 @@ dependencies = [ "staging-xcm-executor", "substrate-wasm-builder", "westend-runtime-constants", + "xcm-runtime-apis", ] [[package]] name = "westend-runtime-constants" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "17.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "frame-support", "polkadot-primitives", @@ -15815,14 +19198,14 @@ dependencies = [ "either", "home", "once_cell", - "rustix 0.38.34", + "rustix 0.38.44", ] [[package]] name = "wide" -version = "0.7.24" +version = "0.7.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a040b111774ab63a19ef46bbc149398ab372b4ccdcfd719e9814dbd7dfd76c8" +checksum = "41b5576b9a81633f3e8df296ce0063042a73507636cbe956c61133dd7034ab22" dependencies = [ "bytemuck", "safe_arch", @@ -15830,9 +19213,9 @@ dependencies = [ [[package]] name = "widestring" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" +checksum = "dd7cf3379ca1aac9eea11fba24fd7e315d621f8dfe35c8d7d2be8b793726e07d" [[package]] name = "winapi" @@ -15852,11 +19235,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -15867,30 +19250,105 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" -version = "0.51.1" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9" +checksum = "efc5cf48f83140dcaab716eeaea345f9e93d0018fb81162753a3f76c3397b538" dependencies = [ - "windows-core 0.51.1", - "windows-targets 0.48.5", + "windows-core 0.53.0", + "windows-targets 0.52.6", ] [[package]] name = "windows-core" -version = "0.51.1" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" +checksum = "9dcc5b895a6377f1ab9fa55acedab1fd5ac0db66ad1e6c7f47e28a22e446a5dd" dependencies = [ - "windows-targets 0.48.5", + "windows-result 0.1.2", + "windows-targets 0.52.6", ] [[package]] name = "windows-core" -version = "0.52.0" +version = "0.61.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link", + "windows-result 0.3.2", + "windows-strings", +] + +[[package]] +name = "windows-implement" +version = "0.60.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "windows-interface" +version = "0.59.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "windows-link" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" + +[[package]] +name = "windows-result" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-sys" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ - "windows-targets 0.52.5", + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", ] [[package]] @@ -15917,7 +19375,16 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", ] [[package]] @@ -15952,18 +19419,18 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] @@ -15980,9 +19447,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" @@ -15998,9 +19465,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" @@ -16016,15 +19483,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" @@ -16040,9 +19507,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" @@ -16058,9 +19525,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" @@ -16076,9 +19543,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" @@ -16094,24 +19561,15 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" - -[[package]] -name = "winnow" -version = "0.5.40" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" -dependencies = [ - "memchr", -] +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.6.13" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1" +checksum = "6cb8234a863ea0e8cd7284fcdd4f145233eb00fee02bbdd9861aec44e6477bc5" dependencies = [ "memchr", ] @@ -16127,23 +19585,33 @@ dependencies = [ ] [[package]] -name = "wyz" -version = "0.5.1" +name = "wit-bindgen-rt" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" dependencies = [ - "tap", + "bitflags 2.9.0", ] [[package]] -name = "x25519-dalek" -version = "1.1.1" +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + +[[package]] +name = "wyz" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a0c105152107e3b96f6a00a65e86ce82d9b125230e1c4302940eca58ff71f4f" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" dependencies = [ - "curve25519-dalek 3.2.0", - "rand_core 0.5.1", - "zeroize", + "tap", ] [[package]] @@ -16152,7 +19620,7 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" dependencies = [ - "curve25519-dalek 4.1.3", + "curve25519-dalek", "rand_core 0.6.4", "serde", "zeroize", @@ -16160,27 +19628,44 @@ dependencies = [ [[package]] name = "x509-parser" -version = "0.14.0" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8" +checksum = "7069fba5b66b9193bd2c5d3d4ff12b839118f6bcbef5328efafafb5395cf63da" dependencies = [ - "asn1-rs", - "base64 0.13.1", + "asn1-rs 0.5.2", + "data-encoding", + "der-parser 8.2.0", + "lazy_static", + "nom", + "oid-registry 0.6.1", + "rusticata-macros", + "thiserror 1.0.69", + "time", +] + +[[package]] +name = "x509-parser" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcbc162f30700d6f3f82a24bf7cc62ffe7caea42c0b2cba8bf7f3ae50cf51f69" +dependencies = [ + "asn1-rs 0.6.2", "data-encoding", - "der-parser", + "der-parser 9.0.0", "lazy_static", "nom", - "oid-registry", + "oid-registry 0.7.1", "rusticata-macros", - "thiserror", + "thiserror 1.0.69", "time", ] [[package]] name = "xcm-emulator" -version = "0.6.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "0.16.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ + "array-bytes", "cumulus-pallet-parachain-system", "cumulus-pallet-xcmp-queue", "cumulus-primitives-core", @@ -16212,7 +19697,7 @@ dependencies = [ [[package]] name = "xcm-integration-tests" -version = "1.16.0-dev" +version = "1.16.2" dependencies = [ "asset-hub-rococo-emulated-chain", "asset-hub-rococo-runtime", @@ -16254,26 +19739,78 @@ dependencies = [ [[package]] name = "xcm-procedural" -version = "8.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-crates-io-v1.7.0#e046d3b2caaca6c43a60f26594052c5c806b980e" +version = "10.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" dependencies = [ "Inflector", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", +] + +[[package]] +name = "xcm-runtime-apis" +version = "0.4.3" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "frame-support", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-weights", + "staging-xcm", + "staging-xcm-executor", +] + +[[package]] +name = "xcm-simulator" +version = "17.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2409#7de020c0398989efcb30b6064298cdc2ccfc0071" +dependencies = [ + "frame-support", + "frame-system", + "parity-scale-codec", + "paste", + "polkadot-core-primitives", + "polkadot-parachain-primitives", + "polkadot-primitives", + "polkadot-runtime-parachains", + "scale-info", + "sp-io", + "sp-runtime", + "sp-std", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", +] + +[[package]] +name = "xml-rs" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a62ce76d9b56901b19a74f19431b0d8b3bc7ca4ad685a746dfd78ca8f4fc6bda" + +[[package]] +name = "xmltree" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7d8a75eaf6557bb84a65ace8609883db44a29951042ada9b393151532e41fcb" +dependencies = [ + "xml-rs", ] [[package]] name = "yamux" -version = "0.10.2" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d9ba232399af1783a58d8eb26f6b5006fbefe2dc9ef36bd283324792d03ea5" +checksum = "9ed0164ae619f2dc144909a9f082187ebb5893693d8c0196e8085283ccd4b776" dependencies = [ "futures", "log", "nohash-hasher", "parking_lot 0.12.3", - "rand", + "pin-project", + "rand 0.8.5", "static_assertions", ] @@ -16286,24 +19823,89 @@ dependencies = [ "time", ] +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", + "synstructure 0.13.1", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "zerocopy-derive 0.7.35", +] + [[package]] name = "zerocopy" -version = "0.7.34" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" +dependencies = [ + "zerocopy-derive 0.8.25", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ - "zerocopy-derive", + "proc-macro2", + "quote", + "syn 2.0.101", ] [[package]] name = "zerocopy-derive" -version = "0.7.34" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", + "synstructure 0.13.1", ] [[package]] @@ -16323,7 +19925,29 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.101", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", ] [[package]] @@ -16366,9 +19990,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.11+zstd.1.5.6" +version = "2.0.15+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75652c55c0b6f3e6f12eb786fe1bc960396bf05a1eb3bf1f3691c3610ac2e6d4" +checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" dependencies = [ "cc", "pkg-config", diff --git a/Cargo.toml b/Cargo.toml index 193926cb61..806f688b93 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,13 +21,14 @@ homepage = "https://kilt.io/" license-file = "LICENSE" readme = "README.md" repository = "https://github.com/KILTprotocol/kilt-node" -version = "1.16.0-dev" +version = "1.16.2" [workspace.dependencies] # Build deps -substrate-wasm-builder = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } +substrate-wasm-builder = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } # External (without extra features and with default disabled if necessary) +anyhow = { version = "1.0", default-features = false } base58 = { version = "0.2.0", default-features = false } bitflags = { version = "1.3.2", default-features = false } cfg-if = { version = "1.0" } @@ -39,13 +40,14 @@ futures = { version = "0.3.21", default-features = false } hash-db = { version = "0.16.0", default-features = false } hex = { version = "0.4.0", default-features = false } hex-literal = { version = "0.3.4" } -jsonrpsee = { version = "0.20.3" } +jsonrpsee = { version = "0.24.0" } +jsonrpsee-core = { version = "0.24.0" } libsecp256k1 = { version = "0.7", default-features = false } log = { version = "0.4.17" } -parity-scale-codec = { version = "3.1.5", default-features = false } -scale-info = { version = "2.1.1", default-features = false } -serde = { version = "1.0.144", default-features = false } -serde_json = { version = "1.0.85" } +parity-scale-codec = { version = "3.6.12", default-features = false } +scale-info = { version = "2.11.1", default-features = false } +serde = { version = "1.0.197", default-features = false } +serde_json = { version = "1.0.121", default-features = false } sha3 = { version = "0.10.0", default-features = false } smallvec = { version = "1.8.0" } substrate-fixed = { version = "0.5.9", default-features = false } @@ -97,153 +99,163 @@ peregrine-runtime = { path = "runtimes/peregrine", default-features = false } spiritnet-runtime = { path = "runtimes/spiritnet", default-features = false } # Benchmarking (with default disabled) -cumulus-pallet-session-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -frame-system-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } +cumulus-pallet-session-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +frame-system-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } # Cumulus (with default disabled) -cumulus-pallet-aura-ext = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -cumulus-pallet-parachain-system = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -cumulus-pallet-xcm = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -cumulus-pallet-xcmp-queue = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -cumulus-primitives-aura = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -cumulus-primitives-core = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -cumulus-primitives-timestamp = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -cumulus-primitives-utility = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -parachain-info = { package = "staging-parachain-info", git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -parachains-common = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } +cumulus-pallet-aura-ext = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +cumulus-pallet-parachain-system = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +cumulus-pallet-xcm = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +cumulus-pallet-xcmp-queue = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +cumulus-primitives-aura = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +cumulus-primitives-core = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +cumulus-primitives-timestamp = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +cumulus-primitives-utility = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +parachain-info = { package = "staging-parachain-info", git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +parachains-common = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } # XCM Emulator tests -asset-hub-kusama-runtime = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -asset-hub-polkadot-runtime = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -asset-hub-rococo-emulated-chain = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -asset-hub-rococo-runtime = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -asset-hub-westend-runtime = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -bridge-hub-kusama-runtime = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -bridge-hub-polkadot-runtime = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -bridge-hub-rococo-runtime = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -collectives-polkadot-runtime = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -emulated-integration-tests-common = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -penpal-runtime = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -rococo-emulated-chain = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -xcm-emulator = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } +asset-hub-kusama-runtime = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +asset-hub-polkadot-runtime = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +asset-hub-rococo-emulated-chain = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +asset-hub-rococo-runtime = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +asset-hub-westend-runtime = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +bridge-hub-kusama-runtime = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +bridge-hub-polkadot-runtime = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +bridge-hub-rococo-runtime = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +collectives-polkadot-runtime = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +emulated-integration-tests-common = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +penpal-runtime = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +rococo-emulated-chain = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +xcm-emulator = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } # Substrate (with default disabled) -frame-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -frame-benchmarking-cli = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -frame-executive = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -frame-metadata-hash-extension = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -frame-support = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -frame-system = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -frame-try-runtime = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -pallet-assets = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -pallet-aura = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -pallet-authorship = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -pallet-balances = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -pallet-collator-selection = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -pallet-collective = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -pallet-democracy = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -pallet-grandpa = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -pallet-im-online = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -pallet-indices = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -pallet-membership = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -pallet-message-queue = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -pallet-multisig = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -pallet-preimage = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -pallet-proxy = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -pallet-scheduler = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -pallet-session = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -pallet-sudo = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -pallet-timestamp = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -pallet-tips = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -pallet-transaction-payment = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -pallet-treasury = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -pallet-utility = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -pallet-vesting = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -sp-api = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -sp-arithmetic = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -sp-authority-discovery = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -sp-block-builder = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -sp-consensus-aura = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -sp-consensus-babe = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -sp-core = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -sp-genesis-builder = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -sp-inherents = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -sp-io = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -sp-metadata-ir = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -sp-offchain = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -sp-runtime = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -sp-session = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -sp-staking = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -sp-state-machine = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -sp-std = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -sp-tracing = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -sp-transaction-pool = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -sp-trie = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -sp-version = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -sp-weights = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -try-runtime-cli = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } +frame-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +frame-benchmarking-cli = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +frame-executive = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +frame-metadata-hash-extension = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +frame-support = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +frame-system = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +frame-try-runtime = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +pallet-assets = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +pallet-aura = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +pallet-authorship = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +pallet-balances = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +pallet-collator-selection = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +pallet-collective = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +pallet-democracy = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +pallet-grandpa = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +pallet-im-online = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +pallet-indices = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +pallet-membership = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +pallet-message-queue = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +pallet-multisig = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +pallet-preimage = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +pallet-proxy = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +pallet-scheduler = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +pallet-session = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +pallet-sudo = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +pallet-timestamp = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +pallet-tips = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +pallet-transaction-payment = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +pallet-treasury = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +pallet-utility = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +pallet-vesting = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +sp-api = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +sp-arithmetic = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +sp-authority-discovery = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +sp-block-builder = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +sp-consensus-aura = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +sp-consensus-babe = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +sp-core = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +sp-genesis-builder = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +sp-inherents = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +sp-io = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +sp-metadata-ir = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +sp-offchain = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +sp-runtime = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +sp-session = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +sp-staking = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +sp-state-machine = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +sp-std = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +sp-tracing = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +sp-transaction-pool = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +sp-trie = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +sp-version = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +sp-weights = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } # Polkadot (with default disabled) -pallet-xcm = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -polkadot-parachain = { package = "polkadot-parachain-primitives", git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -polkadot-runtime-parachains = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -rococo-runtime = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -xcm = { package = "staging-xcm", git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -xcm-builder = { package = "staging-xcm-builder", git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -xcm-executor = { package = "staging-xcm-executor", git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } -xcm-simulator = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "release-crates-io-v1.7.0" } +pallet-xcm = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +polkadot-parachain = { package = "polkadot-parachain-primitives", git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +polkadot-runtime-parachains = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +rococo-runtime = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +xcm = { package = "staging-xcm", git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +xcm-builder = { package = "staging-xcm-builder", git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +xcm-executor = { package = "staging-xcm-executor", git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } +xcm-simulator = { git = "https://github.com/paritytech/polkadot-sdk", default-features = false, branch = "stable2409" } # Client-only (with default enabled) -cumulus-client-cli = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -cumulus-client-collator = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -cumulus-client-consensus-aura = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -cumulus-client-consensus-common = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -cumulus-client-consensus-proposer = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -cumulus-client-network = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -cumulus-client-service = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -cumulus-primitives-parachain-inherent = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -cumulus-relay-chain-inprocess-interface = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -cumulus-relay-chain-interface = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -cumulus-relay-chain-minimal-node = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -cumulus-relay-chain-rpc-interface = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -polkadot-cli = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -polkadot-primitives = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -polkadot-service = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -sc-basic-authorship = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -sc-chain-spec = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -sc-cli = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -sc-client-api = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -sc-consensus = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -sc-consensus-aura = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -sc-consensus-grandpa = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -sc-executor = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -sc-keystore = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -sc-network = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -sc-network-sync = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -sc-offchain = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -sc-rpc-api = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -sc-service = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -sc-sysinfo = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -sc-telemetry = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -sc-tracing = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -sc-transaction-pool = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -sc-transaction-pool-api = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -sp-blockchain = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -sp-consensus = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -sp-consensus-beefy = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -sp-consensus-grandpa = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -sp-keyring = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -sp-keystore = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -sp-timestamp = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -substrate-build-script-utils = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -substrate-frame-rpc-system = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } -substrate-prometheus-endpoint = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-crates-io-v1.7.0" } +cumulus-client-cli = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +cumulus-client-collator = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +cumulus-client-consensus-aura = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +cumulus-client-consensus-common = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +cumulus-client-consensus-proposer = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +cumulus-client-network = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +cumulus-client-service = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +cumulus-primitives-parachain-inherent = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +cumulus-relay-chain-inprocess-interface = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +cumulus-relay-chain-interface = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +cumulus-relay-chain-minimal-node = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +cumulus-relay-chain-rpc-interface = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +polkadot-cli = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +polkadot-service = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +sc-basic-authorship = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +sc-chain-spec = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +sc-cli = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +sc-client-api = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +sc-consensus = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +sc-consensus-aura = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +sc-consensus-grandpa = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +sc-executor = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +sc-keystore = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +sc-network = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +sc-network-sync = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +sc-offchain = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +sc-rpc-api = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +sc-service = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +sc-sysinfo = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +sc-telemetry = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +sc-tracing = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +sc-transaction-pool = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +sc-transaction-pool-api = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +sp-blockchain = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +sp-consensus = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +sp-consensus-beefy = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +sp-consensus-grandpa = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +sp-keyring = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +sp-keystore = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +sp-timestamp = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +substrate-build-script-utils = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +substrate-frame-rpc-system = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } +substrate-prometheus-endpoint = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2409" } + +# ISMP +ismp = { git = "https://github.com/polytope-labs/hyperbridge", branch = "polkadot-stable2409", default-features = false } +ismp-parachain = { git = "https://github.com/polytope-labs/hyperbridge", branch = "polkadot-stable2409", default-features = false } +ismp-parachain-inherent = { git = "https://github.com/polytope-labs/hyperbridge", branch = "polkadot-stable2409", default-features = false } +ismp-parachain-runtime-api = { git = "https://github.com/polytope-labs/hyperbridge", branch = "polkadot-stable2409", default-features = false } +pallet-hyperbridge = { git = "https://github.com/polytope-labs/hyperbridge", branch = "polkadot-stable2409", default-features = false } +pallet-ismp = { git = "https://github.com/polytope-labs/hyperbridge", branch = "polkadot-stable2409", default-features = false } +pallet-ismp-rpc = { git = "https://github.com/polytope-labs/hyperbridge", branch = "polkadot-stable2409" } +pallet-ismp-runtime-api = { git = "https://github.com/polytope-labs/hyperbridge", branch = "polkadot-stable2409", default-features = false } +pallet-token-gateway = { git = "https://github.com/polytope-labs/hyperbridge", branch = "polkadot-stable2409", default-features = false } [profile] diff --git a/Dockerfile b/Dockerfile index 42be144a31..d23a89e7e9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ # this container builds the kilt-parachain binary from source files and the runtime library # pinned the version to avoid build cache invalidation -FROM paritytech/ci-unified:bullseye-1.74.0 as builder +FROM paritytech/ci-unified:bullseye-1.81.0 as builder WORKDIR /build diff --git a/HEADER-GPL b/HEADER-GPL index 9d77814129..c8b80b9165 100644 --- a/HEADER-GPL +++ b/HEADER-GPL @@ -14,4 +14,4 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at diff --git a/chainspecs/spiritnet/spiritnet.json b/chainspecs/spiritnet/spiritnet.json index cf7798b863..bdee4188fa 100644 --- a/chainspecs/spiritnet/spiritnet.json +++ b/chainspecs/spiritnet/spiritnet.json @@ -3,8 +3,8 @@ "id": "kilt", "chainType": "Live", "bootNodes": [ - "/dns4/hetzner-1.kilt.io/tcp/30333/p2p/12D3KooWKU8ehzuKAzHEMCy4i4kpJtgCFBCYYhqcub4Y1HR8FRoT", - "/dns4/hetzner-2.kilt.io/tcp/30333/p2p/12D3KooWDJzJ7TRNKvE2DWXMSSsoKR5TgxsnNy3W1eCBPveX6g9i", + "/dns4/boot-1.kilt.io/tcp/30333/p2p/12D3KooWSoH5HHwhMmiwLNrQWnFqUkjiLiN7pJfSdjqBzbNJbJTu", + "/dns4/boot-2.kilt.io/tcp/30333/p2p/12D3KooWDJzJ7TRNKvE2DWXMSSsoKR5TgxsnNy3W1eCBPveX6g9i", "/dns/kilt.boot.stake.plus/tcp/30332/wss/p2p/12D3KooWHZ6ftYNVQDm5gbHvtGgkPStaBBQBje8rrtxdH1jJonkW", "/dns/kilt.boot.stake.plus/tcp/31332/wss/p2p/12D3KooWMgyhbAKBkEqvKP5bPGTCJZ4nYziJhQep9aHRAkZW8xyy", "/dns4/boot.helikon.io/tcp/8570/p2p/12D3KooWGaE81VE2rzD5TbeRqpTgQwh2sWXMVfMJLBMHQH8AfoXu", diff --git a/crates/assets/src/asset.rs b/crates/assets/src/asset.rs index af13f41456..a66c44e360 100644 --- a/crates/assets/src/asset.rs +++ b/crates/assets/src/asset.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at // Exported types. This will always only re-export the latest version by // default. diff --git a/crates/assets/src/chain.rs b/crates/assets/src/chain.rs index f52c6af883..0a47f77920 100644 --- a/crates/assets/src/chain.rs +++ b/crates/assets/src/chain.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at // Exported types. This will always only re-export the latest version by // default. diff --git a/crates/assets/src/errors.rs b/crates/assets/src/errors.rs index f2d9bdee1d..eca7fc2d0d 100644 --- a/crates/assets/src/errors.rs +++ b/crates/assets/src/errors.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::sp_runtime::RuntimeDebug; diff --git a/crates/assets/src/lib.rs b/crates/assets/src/lib.rs index 1ac6b27ac7..92185112d4 100644 --- a/crates/assets/src/lib.rs +++ b/crates/assets/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Library to parse the raw byte vectors into supported Asset DIDs, according //! to the spec. diff --git a/crates/assets/src/v1.rs b/crates/assets/src/v1.rs index 9796095df0..faeb287842 100644 --- a/crates/assets/src/v1.rs +++ b/crates/assets/src/v1.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use hex_literal::hex; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; diff --git a/crates/kilt-dip-primitives/Cargo.toml b/crates/kilt-dip-primitives/Cargo.toml index b773c8d6da..febbc9c2f7 100644 --- a/crates/kilt-dip-primitives/Cargo.toml +++ b/crates/kilt-dip-primitives/Cargo.toml @@ -11,7 +11,7 @@ repository = { workspace = true } version = { workspace = true } [dev-dependencies] -cumulus-pallet-parachain-system = { workspace = true, features = ["parameterized-consensus-hook", "std"] } +cumulus-pallet-parachain-system = { workspace = true, features = ["std"] } cumulus-primitives-core = { workspace = true } enum-iterator = { workspace = true } hex-literal = { workspace = true } diff --git a/crates/kilt-dip-primitives/src/lib.rs b/crates/kilt-dip-primitives/src/lib.rs index 27fb1c3792..f466046861 100644 --- a/crates/kilt-dip-primitives/src/lib.rs +++ b/crates/kilt-dip-primitives/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Collection of support traits, types, and functions for integrating KILT as //! an identity provider following the Decentralized Identity Provider (DIP) diff --git a/crates/kilt-dip-primitives/src/merkle_proofs/mod.rs b/crates/kilt-dip-primitives/src/merkle_proofs/mod.rs index 07cc79f211..d1c5eb6341 100644 --- a/crates/kilt-dip-primitives/src/merkle_proofs/mod.rs +++ b/crates/kilt-dip-primitives/src/merkle_proofs/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at pub mod v0; diff --git a/crates/kilt-dip-primitives/src/merkle_proofs/v0/dip_subject_state/mod.rs b/crates/kilt-dip-primitives/src/merkle_proofs/v0/dip_subject_state/mod.rs index 9859136acb..d6077ed9b7 100644 --- a/crates/kilt-dip-primitives/src/merkle_proofs/v0/dip_subject_state/mod.rs +++ b/crates/kilt-dip-primitives/src/merkle_proofs/v0/dip_subject_state/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use did::{ did_details::{DidPublicKey, DidPublicKeyDetails}, diff --git a/crates/kilt-dip-primitives/src/merkle_proofs/v0/dip_subject_state/tests.rs b/crates/kilt-dip-primitives/src/merkle_proofs/v0/dip_subject_state/tests.rs index 6bda371049..ed05091ac0 100644 --- a/crates/kilt-dip-primitives/src/merkle_proofs/v0/dip_subject_state/tests.rs +++ b/crates/kilt-dip-primitives/src/merkle_proofs/v0/dip_subject_state/tests.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod dip_revealed_details_and_unverified_did_signature { use frame_support::{assert_err, assert_ok}; @@ -143,7 +143,7 @@ mod dip_revealed_details_and_verified_did_signature_freshness { details: DidPublicKeyDetails { // This key should be filtered out from the result, since it does not verify successfully for the // provided payload and signature. - key: DidVerificationKey::from(ed25519::Public([100; 32])).into(), + key: DidVerificationKey::from(ed25519::Public::from_raw([100; 32])).into(), block_number: 0u32, }, } @@ -176,7 +176,7 @@ mod dip_revealed_details_and_verified_did_signature_freshness { #[test] fn retrieve_signing_leaves_for_payload_no_key_present() { - let did_auth_key: DidVerificationKey = ed25519::Public([0u8; 32]).into(); + let did_auth_key: DidVerificationKey = ed25519::Public::from_raw([0u8; 32]).into(); let revealed_leaves: BoundedVec, ConstU32<1>> = vec![RevealedDidKey { id: 0u32, @@ -192,7 +192,7 @@ mod dip_revealed_details_and_verified_did_signature_freshness { let revealed_details: DipRevealedDetailsAndVerifiedDidSignatureFreshness<_, _, _, _, _, 1> = DipRevealedDetailsAndVerifiedDidSignatureFreshness { revealed_leaves, - signature: ed25519::Signature([100u8; 64]).into(), + signature: ed25519::Signature::from_raw([100u8; 64]).into(), }; assert_err!( revealed_details.retrieve_signing_leaves_for_payload(&().encode()), diff --git a/crates/kilt-dip-primitives/src/merkle_proofs/v0/error.rs b/crates/kilt-dip-primitives/src/merkle_proofs/v0/error.rs index 00a68357da..1b2d478519 100644 --- a/crates/kilt-dip-primitives/src/merkle_proofs/v0/error.rs +++ b/crates/kilt-dip-primitives/src/merkle_proofs/v0/error.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use scale_info::TypeInfo; diff --git a/crates/kilt-dip-primitives/src/merkle_proofs/v0/input_common.rs b/crates/kilt-dip-primitives/src/merkle_proofs/v0/input_common.rs index 620053f559..ddf4d84a9e 100644 --- a/crates/kilt-dip-primitives/src/merkle_proofs/v0/input_common.rs +++ b/crates/kilt-dip-primitives/src/merkle_proofs/v0/input_common.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use did::DidSignature; use parity_scale_codec::{Decode, Encode}; @@ -35,7 +35,7 @@ pub struct ProviderHeadStateProof { } impl ProviderHeadStateProof { - pub fn new(relay_block_number: RelayBlockNumber, proof: Vec>) -> Self { + pub const fn new(relay_block_number: RelayBlockNumber, proof: Vec>) -> Self { Self { proof, relay_block_number, @@ -49,7 +49,7 @@ impl ProviderHeadStateProof { pub struct DipCommitmentStateProof(pub(crate) Vec>); impl DipCommitmentStateProof { - pub fn new(proof: Vec>) -> Self { + pub const fn new(proof: Vec>) -> Self { Self(proof) } } @@ -86,7 +86,7 @@ pub struct DidMerkleProof< impl DidMerkleProof { - pub fn new( + pub const fn new( blinded: Vec>, revealed: Vec< RevealedDidMerkleProofLeaf< @@ -160,7 +160,7 @@ where { fn default() -> Self { Self { - signature: DidSignature::Ed25519(sp_core::ed25519::Signature([0u8; 64])), + signature: DidSignature::Ed25519(sp_core::ed25519::Signature::from_raw([0u8; 64])), valid_until: BlockNumber::default(), } } diff --git a/crates/kilt-dip-primitives/src/merkle_proofs/v0/mod.rs b/crates/kilt-dip-primitives/src/merkle_proofs/v0/mod.rs index 6058c3e525..672515322b 100644 --- a/crates/kilt-dip-primitives/src/merkle_proofs/v0/mod.rs +++ b/crates/kilt-dip-primitives/src/merkle_proofs/v0/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Module to deal with cross-chain Merkle proof as generated by the KILT chain. diff --git a/crates/kilt-dip-primitives/src/merkle_proofs/v0/output_common.rs b/crates/kilt-dip-primitives/src/merkle_proofs/v0/output_common.rs index 5ef7f2a93b..757bc3c862 100644 --- a/crates/kilt-dip-primitives/src/merkle_proofs/v0/output_common.rs +++ b/crates/kilt-dip-primitives/src/merkle_proofs/v0/output_common.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use did::{did_details::DidPublicKeyDetails, DidVerificationKeyRelationship}; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; diff --git a/crates/kilt-dip-primitives/src/merkle_proofs/v0/provider_state/mod.rs b/crates/kilt-dip-primitives/src/merkle_proofs/v0/provider_state/mod.rs index 10d37fb41c..7b93f7c2f7 100644 --- a/crates/kilt-dip-primitives/src/merkle_proofs/v0/provider_state/mod.rs +++ b/crates/kilt-dip-primitives/src/merkle_proofs/v0/provider_state/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::ensure; use pallet_dip_provider::IdentityCommitmentOf; diff --git a/crates/kilt-dip-primitives/src/merkle_proofs/v0/provider_state/tests.rs b/crates/kilt-dip-primitives/src/merkle_proofs/v0/provider_state/tests.rs index bb298259ee..eb447321bb 100644 --- a/crates/kilt-dip-primitives/src/merkle_proofs/v0/provider_state/tests.rs +++ b/crates/kilt-dip-primitives/src/merkle_proofs/v0/provider_state/tests.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at // These test cases are, for now, the same as the ones in // [`super::relay_state::relay_dip_did_proof_with_verified_relay_state_root`], @@ -263,6 +263,12 @@ mod dip_did_proof_with_verified_relay_state_root { type SS58Prefix = ConstU16<1>; type SystemWeightInfo = (); type Version = (); + + type MultiBlockMigrator = (); + type SingleBlockMigrations = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); } impl pallet_dip_provider::Config for TestProviderRuntime { @@ -482,7 +488,7 @@ mod dip_did_proof_with_verified_subject_commitment { id: hex!("50da6646d21f19b4d7d9f80d5beb103fbef7f4bb95eb94e0c02552175b1bff3a").into(), relationship: DidVerificationKeyRelationship::Authentication.into(), details: DidPublicKeyDetails { - key: DidVerificationKey::Ed25519(ed25519::Public(hex!( + key: DidVerificationKey::Ed25519(ed25519::Public::from_raw(hex!( "43a72e714401762df66b68c26dfbdf2682aaec9f2474eca4613e424a0fbafd3c" ))) .into(), diff --git a/crates/kilt-dip-primitives/src/merkle_proofs/v0/relay_state/mod.rs b/crates/kilt-dip-primitives/src/merkle_proofs/v0/relay_state/mod.rs index 28fc92c401..f2c8d73d63 100644 --- a/crates/kilt-dip-primitives/src/merkle_proofs/v0/relay_state/mod.rs +++ b/crates/kilt-dip-primitives/src/merkle_proofs/v0/relay_state/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use parity_scale_codec::{Codec, Decode, Encode}; use scale_info::TypeInfo; diff --git a/crates/kilt-dip-primitives/src/merkle_proofs/v0/relay_state/tests.rs b/crates/kilt-dip-primitives/src/merkle_proofs/v0/relay_state/tests.rs index 3e333ffd9c..ca9655b8c1 100644 --- a/crates/kilt-dip-primitives/src/merkle_proofs/v0/relay_state/tests.rs +++ b/crates/kilt-dip-primitives/src/merkle_proofs/v0/relay_state/tests.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod relay_did_dip_proof { use frame_support::assert_err; diff --git a/crates/kilt-dip-primitives/src/state_proofs/error.rs b/crates/kilt-dip-primitives/src/state_proofs/error.rs index 21d5fa2e43..a76fd55d1f 100644 --- a/crates/kilt-dip-primitives/src/state_proofs/error.rs +++ b/crates/kilt-dip-primitives/src/state_proofs/error.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use scale_info::TypeInfo; diff --git a/crates/kilt-dip-primitives/src/state_proofs/mod.rs b/crates/kilt-dip-primitives/src/state_proofs/mod.rs index 741fde3556..fdbbe067fa 100644 --- a/crates/kilt-dip-primitives/src/state_proofs/mod.rs +++ b/crates/kilt-dip-primitives/src/state_proofs/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use parity_scale_codec::Decode; use sp_runtime::traits::Hash; diff --git a/crates/kilt-dip-primitives/src/state_proofs/substrate_no_std_port.rs b/crates/kilt-dip-primitives/src/state_proofs/substrate_no_std_port.rs index 1507b230d4..4722b201a5 100644 --- a/crates/kilt-dip-primitives/src/state_proofs/substrate_no_std_port.rs +++ b/crates/kilt-dip-primitives/src/state_proofs/substrate_no_std_port.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use hash_db::EMPTY_PREFIX; use parity_scale_codec::Codec; diff --git a/crates/kilt-dip-primitives/src/traits.rs b/crates/kilt-dip-primitives/src/traits.rs index dfd916c180..16113f2148 100644 --- a/crates/kilt-dip-primitives/src/traits.rs +++ b/crates/kilt-dip-primitives/src/traits.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use sp_core::H256; use sp_runtime::traits::{CheckedAdd, One, Zero}; diff --git a/crates/kilt-dip-primitives/src/utils.rs b/crates/kilt-dip-primitives/src/utils.rs index dc8bb31d9d..7a50c69a72 100644 --- a/crates/kilt-dip-primitives/src/utils.rs +++ b/crates/kilt-dip-primitives/src/utils.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at /// The output of a type implementing the [`sp_runtime::traits::Hash`] trait. pub type OutputOf = ::Output; diff --git a/crates/kilt-dip-primitives/src/verifier/errors.rs b/crates/kilt-dip-primitives/src/verifier/errors.rs index 764170aa47..948db21324 100644 --- a/crates/kilt-dip-primitives/src/verifier/errors.rs +++ b/crates/kilt-dip-primitives/src/verifier/errors.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use sp_std::fmt::Debug; diff --git a/crates/kilt-dip-primitives/src/verifier/mod.rs b/crates/kilt-dip-primitives/src/verifier/mod.rs index 734bd840a2..b403251abf 100644 --- a/crates/kilt-dip-primitives/src/verifier/mod.rs +++ b/crates/kilt-dip-primitives/src/verifier/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod errors; diff --git a/crates/kilt-dip-primitives/src/verifier/parachain/error.rs b/crates/kilt-dip-primitives/src/verifier/parachain/error.rs index 18721588f0..a114393f9f 100644 --- a/crates/kilt-dip-primitives/src/verifier/parachain/error.rs +++ b/crates/kilt-dip-primitives/src/verifier/parachain/error.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use crate::Error; diff --git a/crates/kilt-dip-primitives/src/verifier/parachain/mod.rs b/crates/kilt-dip-primitives/src/verifier/parachain/mod.rs index b64af2b0fd..c8cb66062a 100644 --- a/crates/kilt-dip-primitives/src/verifier/parachain/mod.rs +++ b/crates/kilt-dip-primitives/src/verifier/parachain/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use did::KeyIdOf; use frame_system::pallet_prelude::BlockNumberFor; diff --git a/crates/kilt-dip-primitives/src/verifier/parachain/v0/mock.rs b/crates/kilt-dip-primitives/src/verifier/parachain/v0/mock.rs index 859e6bb84c..52ee6bec6e 100644 --- a/crates/kilt-dip-primitives/src/verifier/parachain/v0/mock.rs +++ b/crates/kilt-dip-primitives/src/verifier/parachain/v0/mock.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use cumulus_pallet_parachain_system::{ParachainSetCode, RelayNumberStrictlyIncreases}; use cumulus_primitives_core::{AggregateMessageOrigin, ParaId}; @@ -84,6 +84,11 @@ impl frame_system::Config for TestRuntime { type SS58Prefix = ConstU16<1>; type SystemWeightInfo = (); type Version = (); + type MultiBlockMigrator = (); + type SingleBlockMigrations = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); } parameter_types! { @@ -227,7 +232,7 @@ pub(crate) fn cross_chain_proof_with_authentication_key_and_web3_name() -> Parac id: hex!("a99e99fc7ce5529bc72a0846778d0f62137ddcbab51a1af2d3e91752962d91b4").into(), relationship: DidVerificationKeyRelationship::Authentication.into(), details: DidPublicKeyDetails { - key: DidVerificationKey::Sr25519(sr25519::Public(hex!("9cf53cf19360e5cac6055254c77d91a79701381c47e03e17c3284aa85edc851e"))).into(), + key: DidVerificationKey::Sr25519(sr25519::Public::from_raw(hex!("9cf53cf19360e5cac6055254c77d91a79701381c47e03e17c3284aa85edc851e"))).into(), block_number: 144 } }.into(), @@ -235,7 +240,7 @@ pub(crate) fn cross_chain_proof_with_authentication_key_and_web3_name() -> Parac web3_name: b"9f61d55037c5886b03966c9".to_vec().try_into().unwrap(), claimed_at: 144 }.into() - ] }, signature: TimeBoundDidSignature::new(did::DidSignature::Sr25519(sr25519::Signature(hex!("3cd5e72f04d248e5155bfdabb94c308a88368db63a8a0cafc15fb3204a709b07da028cf85bd450d9a2bdb6679f2b07ac69188101185ab3acd9f41419cbfb3c81"))), SIGNATURE_VALID_UNTIL) } + ] }, signature: TimeBoundDidSignature::new(did::DidSignature::Sr25519(sr25519::Signature::from_raw(hex!("3cd5e72f04d248e5155bfdabb94c308a88368db63a8a0cafc15fb3204a709b07da028cf85bd450d9a2bdb6679f2b07ac69188101185ab3acd9f41419cbfb3c81"))), SIGNATURE_VALID_UNTIL) } } // Aliases requires because the pallet does not expose anything public. diff --git a/crates/kilt-dip-primitives/src/verifier/parachain/v0/mod.rs b/crates/kilt-dip-primitives/src/verifier/parachain/v0/mod.rs index e4e741f626..492a7a42cc 100644 --- a/crates/kilt-dip-primitives/src/verifier/parachain/v0/mod.rs +++ b/crates/kilt-dip-primitives/src/verifier/parachain/v0/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use did::KeyIdOf; use frame_system::pallet_prelude::{BlockNumberFor, HeaderFor}; diff --git a/crates/kilt-dip-primitives/src/verifier/parachain/v0/tests.rs b/crates/kilt-dip-primitives/src/verifier/parachain/v0/tests.rs index 80675fda42..78cd1abe96 100644 --- a/crates/kilt-dip-primitives/src/verifier/parachain/v0/tests.rs +++ b/crates/kilt-dip-primitives/src/verifier/parachain/v0/tests.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_noop, assert_ok}; use pallet_dip_consumer::traits::IdentityProofVerifier; diff --git a/crates/kilt-dip-primitives/src/verifier/relaychain/error.rs b/crates/kilt-dip-primitives/src/verifier/relaychain/error.rs index d52ba20f4f..276288cede 100644 --- a/crates/kilt-dip-primitives/src/verifier/relaychain/error.rs +++ b/crates/kilt-dip-primitives/src/verifier/relaychain/error.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use crate::Error; diff --git a/crates/kilt-dip-primitives/src/verifier/relaychain/mod.rs b/crates/kilt-dip-primitives/src/verifier/relaychain/mod.rs index 104c467ae2..c8dac3a37f 100644 --- a/crates/kilt-dip-primitives/src/verifier/relaychain/mod.rs +++ b/crates/kilt-dip-primitives/src/verifier/relaychain/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use did::KeyIdOf; use frame_system::pallet_prelude::BlockNumberFor; diff --git a/crates/kilt-dip-primitives/src/verifier/relaychain/v0/mod.rs b/crates/kilt-dip-primitives/src/verifier/relaychain/v0/mod.rs index bd92bb369a..b0837835eb 100644 --- a/crates/kilt-dip-primitives/src/verifier/relaychain/v0/mod.rs +++ b/crates/kilt-dip-primitives/src/verifier/relaychain/v0/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use did::KeyIdOf; use frame_system::pallet_prelude::{BlockNumberFor, HeaderFor}; diff --git a/dip-template/nodes/dip-consumer/build.rs b/dip-template/nodes/dip-consumer/build.rs index f672256b2e..3bf56b537e 100644 --- a/dip-template/nodes/dip-consumer/build.rs +++ b/dip-template/nodes/dip-consumer/build.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use substrate_build_script_utils::{generate_cargo_keys, rerun_if_git_head_changed}; diff --git a/dip-template/nodes/dip-consumer/src/chain_spec.rs b/dip-template/nodes/dip-consumer/src/chain_spec.rs index 4b549a71ff..ac019d2c50 100644 --- a/dip-template/nodes/dip-consumer/src/chain_spec.rs +++ b/dip-template/nodes/dip-consumer/src/chain_spec.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at // Triggered by the `ChainSpecGroup` derive macro used for the custom chainspec // extension. @@ -34,7 +34,7 @@ use sp_runtime::traits::{IdentifyAccount, Verify}; const PARA_ID: u32 = 2_001; -pub type ChainSpec = GenericChainSpec; +pub type ChainSpec = GenericChainSpec; type AccountPublic = ::Signer; pub(crate) fn get_from_seed(seed: &str) -> ::Public { @@ -97,6 +97,7 @@ fn testnet_genesis( .into_iter() .map(|(acc, aura)| (acc.clone(), acc, template_session_keys(aura))) .collect(), + ..Default::default() }, ..Default::default() } diff --git a/dip-template/nodes/dip-consumer/src/cli.rs b/dip-template/nodes/dip-consumer/src/cli.rs index 7f8ec35ee1..3459b4bd0c 100644 --- a/dip-template/nodes/dip-consumer/src/cli.rs +++ b/dip-template/nodes/dip-consumer/src/cli.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use std::path::PathBuf; @@ -79,7 +79,10 @@ pub struct RelayChainCli { } impl RelayChainCli { - pub fn new<'a>(para_config: &Configuration, relay_chain_args: impl Iterator) -> Self { + pub fn new<'a, I>(para_config: &Configuration, relay_chain_args: I) -> Self + where + I: Iterator, + { let extension = Extensions::try_get(&*para_config.chain_spec); let chain_id = extension.map(|e| e.relay_chain.clone()); let base_path = Some(para_config.base_path.path().join("polkadot")); diff --git a/dip-template/nodes/dip-consumer/src/command.rs b/dip-template/nodes/dip-consumer/src/command.rs index 75e30f6289..c4ad8e9d7c 100644 --- a/dip-template/nodes/dip-consumer/src/command.rs +++ b/dip-template/nodes/dip-consumer/src/command.rs @@ -14,21 +14,21 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at -use std::{fs::create_dir_all, iter::once, net::SocketAddr}; +use std::{fs::create_dir_all, iter::once}; use cumulus_primitives_core::ParaId; use dip_consumer_runtime_template::Block; use frame_benchmarking_cli::{BenchmarkCmd, SUBSTRATE_REFERENCE_HARDWARE}; use log::info; use sc_cli::{ - ChainSpec, CliConfiguration, DefaultConfigurationValues, ImportParams, KeystoreParams, LoggerBuilder, - NetworkParams, Result, SharedParams, SubstrateCli, + ChainSpec, CliConfiguration, DefaultConfigurationValues, ImportParams, KeystoreParams, NetworkParams, Result, + SharedParams, SubstrateCli, }; use sc_service::{ config::{BasePath, PrometheusConfig}, - Configuration, Role, RpcMethods, TransactionPoolOptions, + Role, RpcMethods, TransactionPoolOptions, }; use sc_sysinfo::gather_hwbench; use sc_telemetry::TelemetryEndpoints; @@ -196,7 +196,9 @@ pub fn run() -> Result<()> { match cmd { BenchmarkCmd::Pallet(cmd) => { if cfg!(feature = "runtime-benchmarks") { - runner.sync_run(|config| cmd.run::(config)) + runner.sync_run(|config| { + cmd.run_with_spec::, ()>(Some(config.chain_spec)) + }) } else { Err("Benchmarking wasn't enabled when building the node. \ You can enable it with `--features runtime-benchmarks`." @@ -235,7 +237,7 @@ pub fn run() -> Result<()> { let hwbench = (!cli.no_hardware_benchmarks) .then_some(config.database.path().map(|database_path| { let _ = create_dir_all(database_path); - gather_hwbench(Some(database_path)) + gather_hwbench(Some(database_path), &SUBSTRATE_REFERENCE_HARDWARE) })) .flatten(); @@ -310,7 +312,7 @@ impl CliConfiguration for RelayChainCli { .or_else(|| self.base_path.clone().map(Into::into))) } - fn rpc_addr(&self, default_listen_port: u16) -> Result> { + fn rpc_addr(&self, default_listen_port: u16) -> Result>> { self.base.base.rpc_addr(default_listen_port) } @@ -322,16 +324,7 @@ impl CliConfiguration for RelayChainCli { self.base.base.prometheus_config(default_listen_port, chain_spec) } - fn init( - &self, - _support_url: &String, - _impl_version: &String, - _logger_hook: F, - _config: &Configuration, - ) -> Result<()> - where - F: FnOnce(&mut LoggerBuilder, &Configuration), - { + fn init(&self, _support_url: &String, _impl_version: &String, _logger_hook: F) -> Result<()> { unreachable!("PolkadotCli is never initialized; qed"); } diff --git a/dip-template/nodes/dip-consumer/src/main.rs b/dip-template/nodes/dip-consumer/src/main.rs index fb61870153..d5e28dc167 100644 --- a/dip-template/nodes/dip-consumer/src/main.rs +++ b/dip-template/nodes/dip-consumer/src/main.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! KILT Decentralized Identity Provider (DIP) consumer CLI. diff --git a/dip-template/nodes/dip-consumer/src/rpc.rs b/dip-template/nodes/dip-consumer/src/rpc.rs index af628dc3be..6a21bc8b8d 100644 --- a/dip-template/nodes/dip-consumer/src/rpc.rs +++ b/dip-template/nodes/dip-consumer/src/rpc.rs @@ -14,11 +14,10 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at #![warn(missing_docs)] -pub use sc_rpc_api::DenyUnsafe; use substrate_frame_rpc_system::AccountNonceApi; use std::{error::Error, sync::Arc}; @@ -37,7 +36,6 @@ pub type RpcExtension = RpcModule<()>; pub struct FullDeps { pub client: Arc, pub pool: Arc

, - pub deny_unsafe: DenyUnsafe, } pub fn create_full(deps: FullDeps) -> Result> @@ -57,13 +55,9 @@ where use substrate_frame_rpc_system::{System, SystemApiServer}; let mut module = RpcExtension::new(()); - let FullDeps { - client, - pool, - deny_unsafe, - } = deps; + let FullDeps { client, pool } = deps; - module.merge(System::new(Arc::clone(&client), pool, deny_unsafe).into_rpc())?; + module.merge(System::new(Arc::clone(&client), pool).into_rpc())?; module.merge(TransactionPayment::new(client).into_rpc())?; Ok(module) } diff --git a/dip-template/nodes/dip-consumer/src/service.rs b/dip-template/nodes/dip-consumer/src/service.rs index fe834b0221..8e58152070 100644 --- a/dip-template/nodes/dip-consumer/src/service.rs +++ b/dip-template/nodes/dip-consumer/src/service.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use std::{sync::Arc, time::Duration}; @@ -37,6 +37,7 @@ use frame_benchmarking::benchmarking::HostFunctions; use frame_benchmarking_cli::SUBSTRATE_REFERENCE_HARDWARE; use sc_client_api::Backend; use sc_consensus::{DefaultImportQueue, ImportQueue}; +#[allow(deprecated)] use sc_executor::NativeElseWasmExecutor; use sc_network::NetworkBlock; use sc_network_sync::SyncingService; @@ -67,6 +68,7 @@ impl sc_executor::NativeExecutionDispatch for ParachainNativeExecutor { } } +#[allow(deprecated)] type ParachainExecutor = NativeElseWasmExecutor; type ParachainClient = TFullClient; type ParachainBackend = TFullBackend; @@ -97,6 +99,7 @@ pub fn new_partial( }) .transpose()?; + #[allow(deprecated)] let executor = sc_service::new_native_or_wasm_executor(config); let (client, backend, keystore_container, task_manager) = new_full_parts::( @@ -175,7 +178,10 @@ async fn start_node_impl( let prometheus_registry = parachain_config.prometheus_registry().cloned(); let transaction_pool = Arc::clone(¶ms.transaction_pool); let import_queue_service = params.import_queue.service(); - let net_config = sc_network::config::FullNetworkConfiguration::new(¶chain_config.network); + let net_config = sc_network::config::FullNetworkConfiguration::<_, _, sc_network::NetworkWorker>::new( + ¶chain_config.network, + prometheus_registry.clone(), + ); let (network, system_rpc_tx, tx_handler_controller, start_network, sync_service) = build_network(BuildNetworkParams { @@ -194,22 +200,23 @@ async fn start_node_impl( if parachain_config.offchain_worker.enabled { use futures::FutureExt; + let offchain_workers = sc_offchain::OffchainWorkers::new(sc_offchain::OffchainWorkerOptions { + runtime_api_provider: Arc::clone(&client), + keystore: Some(params.keystore_container.keystore()), + offchain_db: backend.offchain_storage(), + transaction_pool: Some(OffchainTransactionPoolFactory::new(Arc::clone(&transaction_pool))), + network_provider: Arc::new(Arc::clone(&network)), + is_validator: parachain_config.role.is_authority(), + enable_http_requests: false, + custom_extensions: move |_| vec![], + }); + task_manager.spawn_handle().spawn( "offchain-workers-runner", "offchain-work", - sc_offchain::OffchainWorkers::new(sc_offchain::OffchainWorkerOptions { - runtime_api_provider: Arc::clone(&client), - keystore: Some(params.keystore_container.keystore()), - offchain_db: backend.offchain_storage(), - transaction_pool: Some(OffchainTransactionPoolFactory::new(Arc::clone(&transaction_pool))), - #[allow(clippy::clone_on_ref_ptr)] - network_provider: network.clone(), - is_validator: parachain_config.role.is_authority(), - enable_http_requests: false, - custom_extensions: move |_| vec![], - }) - .run(Arc::clone(&client), task_manager.spawn_handle()) - .boxed(), + offchain_workers + .run(Arc::clone(&client), task_manager.spawn_handle()) + .boxed(), ); } @@ -217,11 +224,10 @@ async fn start_node_impl( let client = Arc::clone(&client); let transaction_pool = Arc::clone(&transaction_pool); - Box::new(move |deny_unsafe, _| { + Box::new(move |_| { let deps = FullDeps { client: Arc::clone(&client), pool: Arc::clone(&transaction_pool), - deny_unsafe, }; create_full(deps).map_err(Into::into) @@ -245,7 +251,7 @@ async fn start_node_impl( if let Some(hwbench) = hwbench { print_hwbench(&hwbench); - match SUBSTRATE_REFERENCE_HARDWARE.check_hardware(&hwbench) { + match SUBSTRATE_REFERENCE_HARDWARE.check_hardware(&hwbench, false) { Err(err) if validator => { log::warn!( "⚠️ The hardware does not meet the minimal requirements {} for role 'Authority'.", @@ -357,7 +363,7 @@ fn start_consensus( task_manager: &TaskManager, relay_chain_interface: Arc, transaction_pool: Arc>, - sync_oracle: Arc>, + _sync_oracle: Arc>, keystore: KeystorePtr, relay_chain_slot_duration: Duration, para_id: ParaId, @@ -367,8 +373,6 @@ fn start_consensus( ) -> Result<(), sc_service::Error> { use cumulus_client_consensus_aura::collators::lookahead::{self as aura, Params as AuraParams}; - let slot_duration = cumulus_client_consensus_aura::slot_duration(&*client)?; - let proposer_factory = sc_basic_authorship::ProposerFactory::with_proof_recording( task_manager.spawn_handle(), Arc::clone(&client), @@ -393,12 +397,10 @@ fn start_consensus( para_backend: backend, relay_client: relay_chain_interface, code_hash_provider: move |block_hash| client.code_at(block_hash).ok().map(|c| ValidationCode::from(c).hash()), - sync_oracle, keystore, collator_key, para_id, overseer_handle, - slot_duration, relay_chain_slot_duration, proposer, collator_service, @@ -406,7 +408,7 @@ fn start_consensus( reinitialize: false, }; - let fut = aura::run::(params); + let fut = aura::run::(params); task_manager.spawn_essential_handle().spawn("aura", None, fut); Ok(()) diff --git a/dip-template/nodes/dip-provider/build.rs b/dip-template/nodes/dip-provider/build.rs index f672256b2e..3bf56b537e 100644 --- a/dip-template/nodes/dip-provider/build.rs +++ b/dip-template/nodes/dip-provider/build.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use substrate_build_script_utils::{generate_cargo_keys, rerun_if_git_head_changed}; diff --git a/dip-template/nodes/dip-provider/src/chain_spec.rs b/dip-template/nodes/dip-provider/src/chain_spec.rs index 0488275198..685f146cba 100644 --- a/dip-template/nodes/dip-provider/src/chain_spec.rs +++ b/dip-template/nodes/dip-provider/src/chain_spec.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at // Triggered by the `ChainSpecGroup` derive macro used for the custom chainspec // extension. @@ -34,7 +34,7 @@ use sp_runtime::traits::{IdentifyAccount, Verify}; const PARA_ID: u32 = 2_000; -pub type ChainSpec = GenericChainSpec; +pub type ChainSpec = GenericChainSpec; type AccountPublic = ::Signer; pub(crate) fn get_from_seed(seed: &str) -> ::Public { @@ -97,6 +97,7 @@ fn testnet_genesis( .into_iter() .map(|(acc, aura)| (acc.clone(), acc, template_session_keys(aura))) .collect(), + ..Default::default() }, ..Default::default() } diff --git a/dip-template/nodes/dip-provider/src/cli.rs b/dip-template/nodes/dip-provider/src/cli.rs index 7f8ec35ee1..3459b4bd0c 100644 --- a/dip-template/nodes/dip-provider/src/cli.rs +++ b/dip-template/nodes/dip-provider/src/cli.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use std::path::PathBuf; @@ -79,7 +79,10 @@ pub struct RelayChainCli { } impl RelayChainCli { - pub fn new<'a>(para_config: &Configuration, relay_chain_args: impl Iterator) -> Self { + pub fn new<'a, I>(para_config: &Configuration, relay_chain_args: I) -> Self + where + I: Iterator, + { let extension = Extensions::try_get(&*para_config.chain_spec); let chain_id = extension.map(|e| e.relay_chain.clone()); let base_path = Some(para_config.base_path.path().join("polkadot")); diff --git a/dip-template/nodes/dip-provider/src/command.rs b/dip-template/nodes/dip-provider/src/command.rs index 4b2990f0bd..9ba442716d 100644 --- a/dip-template/nodes/dip-provider/src/command.rs +++ b/dip-template/nodes/dip-provider/src/command.rs @@ -14,21 +14,21 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at -use std::{fs::create_dir_all, iter::once, net::SocketAddr}; +use std::{fs::create_dir_all, iter::once}; use cumulus_primitives_core::ParaId; use dip_provider_runtime_template::Block; use frame_benchmarking_cli::{BenchmarkCmd, SUBSTRATE_REFERENCE_HARDWARE}; use log::info; use sc_cli::{ - ChainSpec, CliConfiguration, DefaultConfigurationValues, ImportParams, KeystoreParams, LoggerBuilder, - NetworkParams, Result, SharedParams, SubstrateCli, + ChainSpec, CliConfiguration, DefaultConfigurationValues, ImportParams, KeystoreParams, NetworkParams, Result, + SharedParams, SubstrateCli, }; use sc_service::{ config::{BasePath, PrometheusConfig}, - Configuration, Role, RpcMethods, TransactionPoolOptions, + Role, RpcMethods, TransactionPoolOptions, }; use sc_sysinfo::gather_hwbench; use sc_telemetry::TelemetryEndpoints; @@ -196,7 +196,9 @@ pub fn run() -> Result<()> { match cmd { BenchmarkCmd::Pallet(cmd) => { if cfg!(feature = "runtime-benchmarks") { - runner.sync_run(|config| cmd.run::(config)) + runner.sync_run(|config| { + cmd.run_with_spec::, ()>(Some(config.chain_spec)) + }) } else { Err("Benchmarking wasn't enabled when building the node. \ You can enable it with `--features runtime-benchmarks`." @@ -235,7 +237,7 @@ pub fn run() -> Result<()> { let hwbench = (!cli.no_hardware_benchmarks) .then_some(config.database.path().map(|database_path| { let _ = create_dir_all(database_path); - gather_hwbench(Some(database_path)) + gather_hwbench(Some(database_path), &SUBSTRATE_REFERENCE_HARDWARE) })) .flatten(); @@ -310,7 +312,7 @@ impl CliConfiguration for RelayChainCli { .or_else(|| self.base_path.clone().map(Into::into))) } - fn rpc_addr(&self, default_listen_port: u16) -> Result> { + fn rpc_addr(&self, default_listen_port: u16) -> Result>> { self.base.base.rpc_addr(default_listen_port) } @@ -322,16 +324,7 @@ impl CliConfiguration for RelayChainCli { self.base.base.prometheus_config(default_listen_port, chain_spec) } - fn init( - &self, - _support_url: &String, - _impl_version: &String, - _logger_hook: F, - _config: &Configuration, - ) -> Result<()> - where - F: FnOnce(&mut LoggerBuilder, &Configuration), - { + fn init(&self, _support_url: &String, _impl_version: &String, _logger_hook: F) -> Result<()> { unreachable!("PolkadotCli is never initialized; qed"); } diff --git a/dip-template/nodes/dip-provider/src/main.rs b/dip-template/nodes/dip-provider/src/main.rs index 6987d4bacc..b784bdd2c6 100644 --- a/dip-template/nodes/dip-provider/src/main.rs +++ b/dip-template/nodes/dip-provider/src/main.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! KILT Decentralized Identity Provider (DIP) Provider CLI. diff --git a/dip-template/nodes/dip-provider/src/rpc.rs b/dip-template/nodes/dip-provider/src/rpc.rs index 769a0fc3ed..7c6b825dc3 100644 --- a/dip-template/nodes/dip-provider/src/rpc.rs +++ b/dip-template/nodes/dip-provider/src/rpc.rs @@ -14,11 +14,10 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at #![warn(missing_docs)] -pub use sc_rpc_api::DenyUnsafe; use substrate_frame_rpc_system::AccountNonceApi; use std::{error::Error, sync::Arc}; @@ -37,7 +36,6 @@ pub type RpcExtension = RpcModule<()>; pub struct FullDeps { pub client: Arc, pub pool: Arc

, - pub deny_unsafe: DenyUnsafe, } pub fn create_full(deps: FullDeps) -> Result> @@ -57,13 +55,9 @@ where use substrate_frame_rpc_system::{System, SystemApiServer}; let mut module = RpcExtension::new(()); - let FullDeps { - client, - pool, - deny_unsafe, - } = deps; + let FullDeps { client, pool } = deps; - module.merge(System::new(Arc::clone(&client), pool, deny_unsafe).into_rpc())?; + module.merge(System::new(Arc::clone(&client), pool).into_rpc())?; module.merge(TransactionPayment::new(client).into_rpc())?; Ok(module) } diff --git a/dip-template/nodes/dip-provider/src/service.rs b/dip-template/nodes/dip-provider/src/service.rs index 79ae7af14f..7b9731af43 100644 --- a/dip-template/nodes/dip-provider/src/service.rs +++ b/dip-template/nodes/dip-provider/src/service.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use std::{sync::Arc, time::Duration}; @@ -37,6 +37,7 @@ use frame_benchmarking::benchmarking::HostFunctions; use frame_benchmarking_cli::SUBSTRATE_REFERENCE_HARDWARE; use sc_client_api::Backend; use sc_consensus::{DefaultImportQueue, ImportQueue}; +#[allow(deprecated)] use sc_executor::NativeElseWasmExecutor; use sc_network::NetworkBlock; use sc_network_sync::SyncingService; @@ -67,6 +68,7 @@ impl sc_executor::NativeExecutionDispatch for ParachainNativeExecutor { } } +#[allow(deprecated)] type ParachainExecutor = NativeElseWasmExecutor; type ParachainClient = TFullClient; type ParachainBackend = TFullBackend; @@ -97,6 +99,7 @@ pub fn new_partial( }) .transpose()?; + #[allow(deprecated)] let executor = sc_service::new_native_or_wasm_executor(config); let (client, backend, keystore_container, task_manager) = new_full_parts::( @@ -175,7 +178,10 @@ async fn start_node_impl( let prometheus_registry = parachain_config.prometheus_registry().cloned(); let transaction_pool = Arc::clone(¶ms.transaction_pool); let import_queue_service = params.import_queue.service(); - let net_config = sc_network::config::FullNetworkConfiguration::new(¶chain_config.network); + let net_config = sc_network::config::FullNetworkConfiguration::<_, _, sc_network::NetworkWorker>::new( + ¶chain_config.network, + prometheus_registry.clone(), + ); let (network, system_rpc_tx, tx_handler_controller, start_network, sync_service) = build_network(BuildNetworkParams { @@ -194,22 +200,23 @@ async fn start_node_impl( if parachain_config.offchain_worker.enabled { use futures::FutureExt; + let offchain_workers = sc_offchain::OffchainWorkers::new(sc_offchain::OffchainWorkerOptions { + runtime_api_provider: Arc::clone(&client), + keystore: Some(params.keystore_container.keystore()), + offchain_db: backend.offchain_storage(), + transaction_pool: Some(OffchainTransactionPoolFactory::new(Arc::clone(&transaction_pool))), + network_provider: Arc::new(Arc::clone(&network)), + is_validator: parachain_config.role.is_authority(), + enable_http_requests: false, + custom_extensions: move |_| vec![], + }); + task_manager.spawn_handle().spawn( "offchain-workers-runner", "offchain-work", - sc_offchain::OffchainWorkers::new(sc_offchain::OffchainWorkerOptions { - runtime_api_provider: Arc::clone(&client), - keystore: Some(params.keystore_container.keystore()), - offchain_db: backend.offchain_storage(), - transaction_pool: Some(OffchainTransactionPoolFactory::new(Arc::clone(&transaction_pool))), - #[allow(clippy::clone_on_ref_ptr)] - network_provider: network.clone(), - is_validator: parachain_config.role.is_authority(), - enable_http_requests: false, - custom_extensions: move |_| vec![], - }) - .run(Arc::clone(&client), task_manager.spawn_handle()) - .boxed(), + offchain_workers + .run(Arc::clone(&client), task_manager.spawn_handle()) + .boxed(), ); } @@ -217,11 +224,10 @@ async fn start_node_impl( let client = Arc::clone(&client); let transaction_pool = Arc::clone(&transaction_pool); - Box::new(move |deny_unsafe, _| { + Box::new(move |_| { let deps = FullDeps { client: Arc::clone(&client), pool: Arc::clone(&transaction_pool), - deny_unsafe, }; create_full(deps).map_err(Into::into) @@ -245,7 +251,7 @@ async fn start_node_impl( if let Some(hwbench) = hwbench { print_hwbench(&hwbench); - match SUBSTRATE_REFERENCE_HARDWARE.check_hardware(&hwbench) { + match SUBSTRATE_REFERENCE_HARDWARE.check_hardware(&hwbench, false) { Err(err) if validator => { log::warn!( "⚠️ The hardware does not meet the minimal requirements {} for role 'Authority'.", @@ -357,7 +363,7 @@ fn start_consensus( task_manager: &TaskManager, relay_chain_interface: Arc, transaction_pool: Arc>, - sync_oracle: Arc>, + _sync_oracle: Arc>, keystore: KeystorePtr, relay_chain_slot_duration: Duration, para_id: ParaId, @@ -367,8 +373,6 @@ fn start_consensus( ) -> Result<(), sc_service::Error> { use cumulus_client_consensus_aura::collators::lookahead::{self as aura, Params as AuraParams}; - let slot_duration = cumulus_client_consensus_aura::slot_duration(&*client)?; - let proposer_factory = sc_basic_authorship::ProposerFactory::with_proof_recording( task_manager.spawn_handle(), Arc::clone(&client), @@ -393,12 +397,10 @@ fn start_consensus( para_backend: backend, relay_client: relay_chain_interface, code_hash_provider: move |block_hash| client.code_at(block_hash).ok().map(|c| ValidationCode::from(c).hash()), - sync_oracle, keystore, collator_key, para_id, overseer_handle, - slot_duration, relay_chain_slot_duration, proposer, collator_service, @@ -406,7 +408,7 @@ fn start_consensus( reinitialize: false, }; - let fut = aura::run::(params); + let fut = aura::run::(params); task_manager.spawn_essential_handle().spawn("aura", None, fut); Ok(()) diff --git a/dip-template/pallets/pallet-postit/src/lib.rs b/dip-template/pallets/pallet-postit/src/lib.rs index 549264c5ef..aa6705c8ed 100644 --- a/dip-template/pallets/pallet-postit/src/lib.rs +++ b/dip-template/pallets/pallet-postit/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at #![cfg_attr(not(feature = "std"), no_std)] @@ -35,6 +35,8 @@ pub use pallet::*; // very end of the development cycle of a pallet, and from time to time it should be commented out to catch any issues // other than the one generated by the `pallet::event` macro. #[allow(clippy::shadow_reuse)] +// map_err is used over inspect_err in the macro-generated code, and we have to ignore it. +#[allow(clippy::manual_inspect)] pub mod pallet { use super::*; diff --git a/dip-template/pallets/pallet-postit/src/post.rs b/dip-template/pallets/pallet-postit/src/post.rs index 9fb6d776af..772864973c 100644 --- a/dip-template/pallets/pallet-postit/src/post.rs +++ b/dip-template/pallets/pallet-postit/src/post.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{traits::ConstU32, BoundedVec}; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; diff --git a/dip-template/pallets/pallet-postit/src/traits.rs b/dip-template/pallets/pallet-postit/src/traits.rs index 31ef552e20..9f2732ecbf 100644 --- a/dip-template/pallets/pallet-postit/src/traits.rs +++ b/dip-template/pallets/pallet-postit/src/traits.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at pub trait GetUsername { type Username; diff --git a/dip-template/runtimes/dip-consumer/Cargo.toml b/dip-template/runtimes/dip-consumer/Cargo.toml index c474da6ecc..bd68b8f5c7 100644 --- a/dip-template/runtimes/dip-consumer/Cargo.toml +++ b/dip-template/runtimes/dip-consumer/Cargo.toml @@ -58,7 +58,7 @@ sp-weights = { workspace = true } # Cumulus cumulus-pallet-aura-ext = { workspace = true } -cumulus-pallet-parachain-system = { workspace = true, features = ["parameterized-consensus-hook"] } +cumulus-pallet-parachain-system = { workspace = true } cumulus-primitives-aura = { workspace = true } cumulus-primitives-core = { workspace = true } cumulus-primitives-timestamp = { workspace = true } diff --git a/dip-template/runtimes/dip-consumer/build.rs b/dip-template/runtimes/dip-consumer/build.rs index 9d730bd288..52e91453e1 100644 --- a/dip-template/runtimes/dip-consumer/build.rs +++ b/dip-template/runtimes/dip-consumer/build.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use substrate_wasm_builder::WasmBuilder; diff --git a/dip-template/runtimes/dip-consumer/src/dip.rs b/dip-template/runtimes/dip-consumer/src/dip.rs index cb8ac66ca3..4d323836b2 100644 --- a/dip-template/runtimes/dip-consumer/src/dip.rs +++ b/dip-template/runtimes/dip-consumer/src/dip.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use did::{DidVerificationKeyRelationship, KeyIdOf}; use dip_provider_runtime_template::{ @@ -189,7 +189,7 @@ mod get_worst_case_impl { id: hex!("78e54fc7807f8c1cbd6e3dac9f3291096e7a2d8ab879934edb402f320a3d46a0").into(), relationship: DidVerificationKeyRelationship::Authentication.into(), details: DidPublicKeyDetails { - key: DidVerificationKey::Sr25519(sr25519::Public(hex!( + key: DidVerificationKey::Sr25519(sr25519::Public::from_raw(hex!( "e68a94309d0adee950b6a63a0a141a3166c15e8ef25c301531f75e25086fe05a" ))) .into(), @@ -405,7 +405,7 @@ mod get_worst_case_impl { id: hex!("106e6b1fa2d0ac6b81387fce6eb985b760f70a43a6d8e0c3f9e78c8a9d9e548e").into(), relationship: DidVerificationKeyRelationship::CapabilityDelegation.into(), details: DidPublicKeyDetails { - key: DidVerificationKey::Ed25519(ed25519::Public(hex!( + key: DidVerificationKey::Ed25519(ed25519::Public::from_raw(hex!( "39985b639d8d21629190f2a310b0e2b935894a6261e45ba58f0fbf2bd6c0c832" ))) .into(), @@ -417,7 +417,7 @@ mod get_worst_case_impl { id: hex!("5e14c0826d524d79a17cb5bc5fd61f9b2d364c9af73a5db87408f389e83afcdf").into(), relationship: DidVerificationKeyRelationship::AssertionMethod.into(), details: DidPublicKeyDetails { - key: DidVerificationKey::Ed25519(ed25519::Public(hex!( + key: DidVerificationKey::Ed25519(ed25519::Public::from_raw(hex!( "6c89991144954da6d916f88e59ce0c52bc2dcea2e7edd065e750234ebbb8d8eb" ))) .into(), @@ -482,7 +482,7 @@ mod get_worst_case_impl { .into(), ], ); - let signature = TimeBoundDidSignature::new(DidSignature::Sr25519(sr25519::Signature(hex!("1ca20d39357dba602862e6b6371887c6b1ec46c86ead3c92178cca814e3ff45f7fd6a58395d422b53b6e1d1ab7be5944dbc2c6e640ecfac67c02a218607cc881"))), 282 as BlockNumberFor); + let signature = TimeBoundDidSignature::new(DidSignature::Sr25519(sr25519::Signature::from_raw(hex!("1ca20d39357dba602862e6b6371887c6b1ec46c86ead3c92178cca814e3ff45f7fd6a58395d422b53b6e1d1ab7be5944dbc2c6e640ecfac67c02a218607cc881"))), 282 as BlockNumberFor); let proof = ParachainDipDidProof::new(provider_head_state_proof, dip_commitment_proof, dip_proof, signature); diff --git a/dip-template/runtimes/dip-consumer/src/lib.rs b/dip-template/runtimes/dip-consumer/src/lib.rs index f85b6222c0..19a7108031 100644 --- a/dip-template/runtimes/dip-consumer/src/lib.rs +++ b/dip-template/runtimes/dip-consumer/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Runtime template of a Decentralized Identity Provider (DIP) consumer, which //! does not itself include any identity-related pallets, but only the @@ -44,7 +44,7 @@ use cumulus_primitives_core::{AggregateMessageOrigin, CollationInfo}; use frame_support::{ construct_runtime, dispatch::DispatchClass, - genesis_builder_helper::{build_config, create_default_config}, + genesis_builder_helper::{build_state, get_preset}, parameter_types, traits::{ConstU32, ConstU64, ConstU8, EnqueueWithOrigin, Everything}, weights::{ @@ -64,6 +64,7 @@ use pallet_transaction_payment::{FeeDetails, FungibleAdapter, RuntimeDispatchInf use sp_api::impl_runtime_apis; use sp_consensus_aura::SlotDuration; use sp_core::{crypto::KeyTypeId, ConstBool, ConstU128, ConstU16, OpaqueMetadata}; +use sp_genesis_builder::PresetId; use sp_inherents::{CheckInherentsResult, InherentData}; use sp_runtime::{ create_runtime_str, generic, impl_opaque_keys, @@ -231,6 +232,11 @@ impl frame_system::Config for Runtime { type SS58Prefix = ConstU16; type SystemWeightInfo = weights::frame_system::WeightInfo; type Version = Version; + type MultiBlockMigrator = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); + type SingleBlockMigrations = (); } /// Maximum number of blocks simultaneously accepted by the Runtime, not yet @@ -369,6 +375,7 @@ impl pallet_aura::Config for Runtime { type AuthorityId = AuraId; type DisabledValidators = (); type MaxAuthorities = ConstU32<100_000>; + type SlotDuration = ConstU64; } impl cumulus_pallet_aura_ext::Config for Runtime {} @@ -407,7 +414,7 @@ impl_runtime_apis! { } fn authorities() -> Vec { - Aura::authorities().into_inner() + pallet_aura::Authorities::::get().into_inner() } } @@ -420,7 +427,7 @@ impl_runtime_apis! { Executive::execute_block(block) } - fn initialize_block(header: &::Header) { + fn initialize_block(header: &::Header) -> sp_runtime::ExtrinsicInclusionMode { Executive::initialize_block(header) } } @@ -545,13 +552,16 @@ impl_runtime_apis! { } impl sp_genesis_builder::GenesisBuilder for Runtime { + fn build_state(config: Vec) -> sp_genesis_builder::Result { + build_state::(config) + } - fn create_default_config() -> Vec { - create_default_config::() + fn get_preset(id: &Option) -> Option> { + get_preset::(id, |_| None) } - fn build_config(config: Vec) -> sp_genesis_builder::Result { - build_config::(config) + fn preset_names() -> Vec { + Default::default() } } diff --git a/dip-template/runtimes/dip-consumer/src/origin_adapter.rs b/dip-template/runtimes/dip-consumer/src/origin_adapter.rs index 173c1cd271..2ea4f09a28 100644 --- a/dip-template/runtimes/dip-consumer/src/origin_adapter.rs +++ b/dip-template/runtimes/dip-consumer/src/origin_adapter.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use crate::{AccountId, DidIdentifier, MerkleProofVerifierOutput, RuntimeOrigin, Web3Name}; use frame_support::traits::EnsureOrigin; diff --git a/dip-template/runtimes/dip-consumer/src/weights/frame_system.rs b/dip-template/runtimes/dip-consumer/src/weights/frame_system.rs index 0491d5f258..ae8e660875 100644 --- a/dip-template/runtimes/dip-consumer/src/weights/frame_system.rs +++ b/dip-template/runtimes/dip-consumer/src/weights/frame_system.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `frame_system` //! diff --git a/dip-template/runtimes/dip-consumer/src/weights/mod.rs b/dip-template/runtimes/dip-consumer/src/weights/mod.rs index 67d5885727..7807812121 100644 --- a/dip-template/runtimes/dip-consumer/src/weights/mod.rs +++ b/dip-template/runtimes/dip-consumer/src/weights/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at pub mod frame_system; pub mod pallet_dip_consumer; diff --git a/dip-template/runtimes/dip-consumer/src/weights/pallet_dip_consumer.rs b/dip-template/runtimes/dip-consumer/src/weights/pallet_dip_consumer.rs index 0e0fb07ff7..d43c22fcad 100644 --- a/dip-template/runtimes/dip-consumer/src/weights/pallet_dip_consumer.rs +++ b/dip-template/runtimes/dip-consumer/src/weights/pallet_dip_consumer.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_dip_consumer` //! diff --git a/dip-template/runtimes/dip-consumer/src/weights/pallet_relay_store.rs b/dip-template/runtimes/dip-consumer/src/weights/pallet_relay_store.rs index 7205cddb17..9f0035c61f 100644 --- a/dip-template/runtimes/dip-consumer/src/weights/pallet_relay_store.rs +++ b/dip-template/runtimes/dip-consumer/src/weights/pallet_relay_store.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_relay_store` //! diff --git a/dip-template/runtimes/dip-provider/Cargo.toml b/dip-template/runtimes/dip-provider/Cargo.toml index 8b0181b68b..018dd86617 100644 --- a/dip-template/runtimes/dip-provider/Cargo.toml +++ b/dip-template/runtimes/dip-provider/Cargo.toml @@ -58,7 +58,7 @@ sp-weights = { workspace = true } # Cumulus cumulus-pallet-aura-ext = { workspace = true } -cumulus-pallet-parachain-system = { workspace = true, features = ["parameterized-consensus-hook"] } +cumulus-pallet-parachain-system = { workspace = true } cumulus-primitives-aura = { workspace = true } cumulus-primitives-core = { workspace = true } cumulus-primitives-timestamp = { workspace = true } diff --git a/dip-template/runtimes/dip-provider/build.rs b/dip-template/runtimes/dip-provider/build.rs index 9d730bd288..52e91453e1 100644 --- a/dip-template/runtimes/dip-provider/build.rs +++ b/dip-template/runtimes/dip-provider/build.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use substrate_wasm_builder::WasmBuilder; diff --git a/dip-template/runtimes/dip-provider/src/dip.rs b/dip-template/runtimes/dip-provider/src/dip.rs index dcb51621b5..e119bcff7d 100644 --- a/dip-template/runtimes/dip-provider/src/dip.rs +++ b/dip-template/runtimes/dip-provider/src/dip.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use did::{DidRawOrigin, EnsureDidOrigin, KeyIdOf}; use frame_system::EnsureSigned; diff --git a/dip-template/runtimes/dip-provider/src/lib.rs b/dip-template/runtimes/dip-provider/src/lib.rs index eb46af38ba..adbc60e9f4 100644 --- a/dip-template/runtimes/dip-provider/src/lib.rs +++ b/dip-template/runtimes/dip-provider/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Runtime template of a Decentralized Identity Provider (DIP) provider, which //! includes, beyond system pallets, [`did::Pallet`], @@ -43,7 +43,7 @@ use did::{DidRawOrigin, EnsureDidOrigin}; use frame_support::{ construct_runtime, dispatch::DispatchClass, - genesis_builder_helper::{build_config, create_default_config}, + genesis_builder_helper::{build_state, get_preset}, parameter_types, traits::{ConstU32, ConstU64, ConstU8, EnqueueWithOrigin, Everything}, weights::{ @@ -65,6 +65,7 @@ use runtime_common::dip::merkle::{CompleteMerkleProof, DidMerkleProofOf, DidMerk use sp_api::impl_runtime_apis; use sp_consensus_aura::SlotDuration; use sp_core::{crypto::KeyTypeId, ConstBool, ConstU128, ConstU16, OpaqueMetadata}; +use sp_genesis_builder::PresetId; use sp_inherents::{CheckInherentsResult, InherentData}; use sp_runtime::{ create_runtime_str, generic, impl_opaque_keys, @@ -232,6 +233,11 @@ impl frame_system::Config for Runtime { type SS58Prefix = ConstU16; type SystemWeightInfo = weights::frame_system::WeightInfo; type Version = Version; + type MultiBlockMigrator = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); + type SingleBlockMigrations = (); } /// Maximum number of blocks simultaneously accepted by the Runtime, not yet @@ -370,6 +376,7 @@ impl pallet_aura::Config for Runtime { type AuthorityId = AuraId; type DisabledValidators = (); type MaxAuthorities = ConstU32<100_000>; + type SlotDuration = ConstU64; } impl cumulus_pallet_aura_ext::Config for Runtime {} @@ -489,7 +496,7 @@ impl_runtime_apis! { } fn authorities() -> Vec { - Aura::authorities().into_inner() + pallet_aura::Authorities::::get().into_inner() } } @@ -502,7 +509,7 @@ impl_runtime_apis! { Executive::execute_block(block) } - fn initialize_block(header: &::Header) { + fn initialize_block(header: &::Header) -> sp_runtime::ExtrinsicInclusionMode { Executive::initialize_block(header) } } @@ -776,15 +783,17 @@ impl_runtime_apis! { DidMerkleRootGenerator::::generate_proof(&identity_details, request.version, request.keys.iter(), request.should_include_web3_name, request.accounts.iter()).map_err(runtime_api::DipProofError::MerkleProof) } } - impl sp_genesis_builder::GenesisBuilder for Runtime { + fn build_state(config: Vec) -> sp_genesis_builder::Result { + build_state::(config) + } - fn create_default_config() -> Vec { - create_default_config::() + fn get_preset(id: &Option) -> Option> { + get_preset::(id, |_| None) } - fn build_config(config: Vec) -> sp_genesis_builder::Result { - build_config::(config) + fn preset_names() -> Vec { + Default::default() } } diff --git a/dip-template/runtimes/dip-provider/src/weights/did.rs b/dip-template/runtimes/dip-provider/src/weights/did.rs index 329c4abe89..9d357e4fd6 100644 --- a/dip-template/runtimes/dip-provider/src/weights/did.rs +++ b/dip-template/runtimes/dip-provider/src/weights/did.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `did` //! diff --git a/dip-template/runtimes/dip-provider/src/weights/frame_system.rs b/dip-template/runtimes/dip-provider/src/weights/frame_system.rs index 6c00b19d2a..4bc151d52a 100644 --- a/dip-template/runtimes/dip-provider/src/weights/frame_system.rs +++ b/dip-template/runtimes/dip-provider/src/weights/frame_system.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `frame_system` //! diff --git a/dip-template/runtimes/dip-provider/src/weights/mod.rs b/dip-template/runtimes/dip-provider/src/weights/mod.rs index c2cccacd47..0aacec82ae 100644 --- a/dip-template/runtimes/dip-provider/src/weights/mod.rs +++ b/dip-template/runtimes/dip-provider/src/weights/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at pub mod did; pub mod frame_system; diff --git a/dip-template/runtimes/dip-provider/src/weights/pallet_deposit_storage.rs b/dip-template/runtimes/dip-provider/src/weights/pallet_deposit_storage.rs index 0c25daeecc..dd01618455 100644 --- a/dip-template/runtimes/dip-provider/src/weights/pallet_deposit_storage.rs +++ b/dip-template/runtimes/dip-provider/src/weights/pallet_deposit_storage.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_deposit_storage` //! diff --git a/dip-template/runtimes/dip-provider/src/weights/pallet_did_lookup.rs b/dip-template/runtimes/dip-provider/src/weights/pallet_did_lookup.rs index bb282e3bbd..b7903c2f34 100644 --- a/dip-template/runtimes/dip-provider/src/weights/pallet_did_lookup.rs +++ b/dip-template/runtimes/dip-provider/src/weights/pallet_did_lookup.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_did_lookup` //! diff --git a/dip-template/runtimes/dip-provider/src/weights/pallet_dip_provider.rs b/dip-template/runtimes/dip-provider/src/weights/pallet_dip_provider.rs index ba7f981bd9..919966c246 100644 --- a/dip-template/runtimes/dip-provider/src/weights/pallet_dip_provider.rs +++ b/dip-template/runtimes/dip-provider/src/weights/pallet_dip_provider.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_dip_provider` //! diff --git a/dip-template/runtimes/dip-provider/src/weights/pallet_web3_names.rs b/dip-template/runtimes/dip-provider/src/weights/pallet_web3_names.rs index 76baa61528..af717fab77 100644 --- a/dip-template/runtimes/dip-provider/src/weights/pallet_web3_names.rs +++ b/dip-template/runtimes/dip-provider/src/weights/pallet_web3_names.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_web3_names` //! diff --git a/integration-tests/chopsticks/.env-example b/integration-tests/chopsticks/.env-example index 9645115064..231c5e424b 100644 --- a/integration-tests/chopsticks/.env-example +++ b/integration-tests/chopsticks/.env-example @@ -1,6 +1,38 @@ -HYDRADX_WS= -HYDRADX_PORT= -POLKADOT_WS= -POLKADOT_PORT= +# These env variables are mandatory for the tests to work. + +# The Spiritnet block number to be used in the tests +SPIRITNET_BLOCK_NUMBER= +# The Hydration block number to be used in the tests +HYDRATION_BLOCK_NUMBER= +# The Polkadot block number to be used in the tests +POLKADOT_BLOCK_NUMBER= +# Directory path to the new WASM blob +SPIRITNET_WASM_OVERRIDE= +# The AssetHub block number to be used in the tests +ASSETHUB_BLOCK_NUMBER= + + +# Optional env variables +HYDRATION_TEST_WS= +HYDRATION_TEST_PORT= + +HYDRATION_WS= +HYDRATION_PORT= + +ASSETHUB_WSS= +ASSETHUB_MAIN_PORT= + +ASSETHUB_TEST_WSS= +ASSETHUB_TEST_PORT= + SPIRITNET_WS= SPIRITNET_PORT= + +PEREGRINE_WS= +PEREGRINE_PORT= + +POLKADOT_WS= +POLKADOT_PORT= + +PASEO_WS= +PASEO_PORT= diff --git a/integration-tests/chopsticks/README.md b/integration-tests/chopsticks/README.md new file mode 100644 index 0000000000..0f435c21b6 --- /dev/null +++ b/integration-tests/chopsticks/README.md @@ -0,0 +1,148 @@ +# e2e Chopsticks tests + +This project is a set of end-to-end tests for the KILT protocol against other parachains. +Other functionalities such as a creation of DID can be easily added. + +## Getting Started + +These instructions will allow you to run the tests on your local machine for development and testing purposes. + +### Prerequisites + +- Node.js v20.11.0 (as specified in the [`.nvmrc`](https://github.com/nvm-sh/nvm)). With `nvm use` the right node version will be installed. +- npm (comes with Node.js) + +### Installing + +To install the node modules call: + +```sh +yarn +``` + +### Running the tests + +In the package.json a script is provided. + +By calling the command below, the test will be executed: + +```sh +yarn test +``` + +Please make sure an appropriate env is set. + +### Env + +The project uses environment variables for configuration. +You can find an example in the `.env-example` file. Copy this file to +.env and fill in the appropriate values. +Explanation for the values are in the `.env-example` file provided. + +## Code Style + +This project uses Prettier and ESLint for code formatting and linting. +The configuration for these tools can be found in the `.prettierrc` and `.eslintrc.json` files respectively. + +To check your code for style issues, run: + +```sh +yarn lint +``` + +To automatically fix style issues, run: + +```sh +yarn lint:fix +``` + +## Adding a new test case + +To add a new test case, you need to insert a new object into the list of test cases. +For example, if you want to add a new instance of `LimitedReserveTestConfiguration`, you would insert it into the `testPairsLimitedReserveTransfers` list. + +The tests are configuration-driven, meaning they can be easily customized for different scenarios. +The test framework doesn't make assumptions about which parachain is sending which coin to which destination over which relay chain. +Fundamental events such as the moving of coins or the creation of a new account should be emitted during the test. + +The test cases live in the tests folder and use mocks from the network directory. +The network directory contains helper functions to set the blockchain state and provides an abstraction over the chopsticks functionalities, such as creating a network. + +For Adding a new test case scenario, a template folder is provided. + +## Debugging Existence Tests + +Each test case should have a unique ID. To execute a specific test case, run: + +```sh +yarn test -t "REGULAR_EXPRESSION" +``` + +## UI + +Vitest supports a UI to manage the test cases. To spin up the UI, call: + +```sh +yarn ui +``` + +## CLI + +The project provides a CLI to interact with the test framework. +To execute the cli run: + +```sh +yarn cli [COMMAND] +``` + +Below are the available commands and their descriptions: + +`spinUp` + +Spins up the network using the definition in `./src/command/network.ts`. +The network configuration can be adjusted as needed. +A detailed step-by-step explanation of how to modify the network to a specific state is provided in the `network.ts` file. + +```sh +yarn cli spinUp +``` + +`scheduleTx` + +Executes a transaction on the network, creating a new Chopsticks instance. + +```sh +yarn cli scheduleTx endpoint rawTx [options] +``` + +- endpoint: The endpoint of the network. +- rawTx: The raw transaction to execute. +- --origin: The origin of the transaction (default: Root). +- --port: The RPC port (default: 8888). + +`stateTransition` + +Shows the state transition of the network based on the latest block. +The command creates a preview folder containing an HTML file, which can be opened in a browser to inspect the state transition. + +```sh +yarn cli stateTransition endpoint [option] +``` + +- endpoint: The endpoint of the network. +- --block: The block to do the state transition + + +## Recommended VS Code Extensions + +- [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint): Integrates ESLint into VS Code, a tool for identifying and reporting on patterns in JavaScript. +- [Prettier - Code formatter](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode): An opinionated code formatter that supports many languages. +- [TypeScript Hero](https://marketplace.visualstudio.com/items?itemName=rbbit.typescript-hero): Provides additional features for TypeScript development, such as import management and code navigation. +- [Live Server](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer): Renders HTML files, useful for state transition HTML. +- [GitLens](https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens): Supercharges the built-in Git capabilities of VS Code. + +## Built With + +[TypeScript](https://www.typescriptlang.org/) +[Chopsticks](https://github.com/AcalaNetwork/chopsticks) +[Polkadot API](https://github.com/polkadot-js/api) diff --git a/integration-tests/chopsticks/package.json b/integration-tests/chopsticks/package.json index 759e6f2495..2b80f4d825 100644 --- a/integration-tests/chopsticks/package.json +++ b/integration-tests/chopsticks/package.json @@ -8,12 +8,13 @@ "author": "[\"KILT \"]", "license": "MIT", "devDependencies": { - "@acala-network/chopsticks": "0.12.2", - "@acala-network/chopsticks-testing": "0.12.2", - "@polkadot/api": "^10.11.2", + "@acala-network/chopsticks": "1.0.1", + "@acala-network/chopsticks-testing": "1.0.1", + "@polkadot/api": "^14.3.1", "@types/node": "^20.11.30", "@typescript-eslint/eslint-plugin": "^7.7.0", "@typescript-eslint/parser": "^7.7.0", + "@vitest/ui": "2.1.8", "eslint": "^8.0.1", "eslint-config-airbnb": "^19.0.4", "eslint-config-prettier": "^9.1.0", @@ -24,17 +25,21 @@ "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-promise": "^6.0.0", "prettier": "^3.2.5", - "ts-node": "^10.9.2", - "tsx": "^4.7.1", + "tsx": "^4.19.2", "typescript": "*", - "vitest": "^1.4.0" + "vitest": "^2.1.8" }, "scripts": { "ts-check": "tsc --noEmit", "lint": "eslint src && prettier --check src", "lint:fix": "eslint --fix src && prettier --write src", "clean": "rm -rf ./db", - "test": "LOG_LEVEL=error vitest", - "test:CI": "vitest --retry 3 --no-file-parallelism" + "test": "LOG_LEVEL=error vitest --config ./src/vitest.config.ts", + "ui": "vitest --ui --config ./src/vitest.config.ts", + "cli": "tsx ./src/cli.ts" + }, + "dependencies": { + "commander": "^13.1.0", + "execa": "^9.5.2" } } diff --git a/integration-tests/chopsticks/src/cli.ts b/integration-tests/chopsticks/src/cli.ts new file mode 100644 index 0000000000..7b2bb9c33f --- /dev/null +++ b/integration-tests/chopsticks/src/cli.ts @@ -0,0 +1,50 @@ +import { Command } from 'commander' + +import { createTestNetwork, scheduleTxCommand, stateTransition } from './command/index.js' + +const program = new Command() + +program.name('chopsticks utils').description('CLI to mange some chopsticks instances').version('0.0.1') + +program + .command('spinUp') + .description('Spin up the network') + .action(async () => { + await createTestNetwork() + }) + +program + .command('scheduleTx') + .description('Executes a transaction on the network') + .argument('', 'The endpoint of the network') + .argument('', 'The raw transaction to execute') + .option( + '--origin, ', + 'The origin of the transaction Either "Root" or "Signed""', + (value) => { + if (value !== 'Root' && value !== 'Signed') { + throw new Error('Invalid origin. Must be either "Root" or "Signed"') + } + return value + }, + 'Root' + ) + .option('--port ', 'The RPC port', '8888') + .action(async (endpoint, rawTx, options) => { + const { origin, port } = options + + await scheduleTxCommand(endpoint, rawTx, origin, +port) + }) + +program + .command('stateTransition') + .description('Shows the state transition of the network by the latest block') + .argument('', 'The endpoint of the network') + .option('--block', 'The block number to do the state transition', 'undefined') + .action(async (endpoint, options) => { + const { block } = options + const blockNumber = block === 'undefined' ? undefined : +block + await stateTransition(endpoint, blockNumber) + }) + +program.parse() diff --git a/integration-tests/chopsticks/src/command/index.ts b/integration-tests/chopsticks/src/command/index.ts new file mode 100644 index 0000000000..37128c69f6 --- /dev/null +++ b/integration-tests/chopsticks/src/command/index.ts @@ -0,0 +1,5 @@ +import { createTestNetwork } from './network.js' +import { scheduleTxCommand } from './scheduleTx.js' +import { stateTransition } from './stateTransition.js' + +export { createTestNetwork, scheduleTxCommand, stateTransition } diff --git a/integration-tests/chopsticks/src/command/network.ts b/integration-tests/chopsticks/src/command/network.ts new file mode 100644 index 0000000000..2c29f9857c --- /dev/null +++ b/integration-tests/chopsticks/src/command/network.ts @@ -0,0 +1,24 @@ +import { mainChains } from '../network/index.js' +import { setStorage, setupNetwork } from '../network/utils.js' + +export async function createTestNetwork() { + const relayConfig = mainChains.polkadot.getConfig({}) + + // 1. Create the network specific state + const kiltStorage = mainChains.kilt.storage.assignNativeTokensToAccounts([ + '4pF5Y2Eo6doQHPLQj5AkndZwtomVB8ab2sRftRS2D9JDdELr', + ]) + + // 2. Create the network specific config + const kiltConfig = mainChains.kilt.getConfig({}) + + // 2. Add the different parachainContexts here. The order of parachainContexts and parachainStorage should match. + const parachainOptions = [kiltConfig] + const parachainStorage = [kiltStorage] + + const { relayChainContext, parachainContexts } = await setupNetwork(relayConfig, parachainOptions) + + await Promise.all(parachainStorage.map((storage, index) => setStorage(parachainContexts[index], storage))) + + await Promise.all([...parachainContexts, relayChainContext].map((context) => context.pause())) +} diff --git a/integration-tests/chopsticks/src/command/scheduleTx.ts b/integration-tests/chopsticks/src/command/scheduleTx.ts new file mode 100644 index 0000000000..28a800d63c --- /dev/null +++ b/integration-tests/chopsticks/src/command/scheduleTx.ts @@ -0,0 +1,14 @@ +import { createBlock, scheduleTx } from '../network/utils.js' +import { setupContext } from '@acala-network/chopsticks-testing' + +type Origin = 'Root' | 'Signed' + +export async function scheduleTxCommand(endpoint: string, rawTx: string, origin: Origin, port: number) { + const context = await setupContext({ endpoint, port }) + + await scheduleTx(context, rawTx, undefined, origin) + await createBlock(context) + + console.log('Transaction scheduled') + await context.pause() +} diff --git a/integration-tests/chopsticks/src/command/stateTransition.ts b/integration-tests/chopsticks/src/command/stateTransition.ts new file mode 100644 index 0000000000..6cefc13849 --- /dev/null +++ b/integration-tests/chopsticks/src/command/stateTransition.ts @@ -0,0 +1,17 @@ +import { execa } from 'execa' + +export async function stateTransition(endpoint: string, blockNumber?: number) { + const options = ['chopsticks', 'run-block', `--endpoint=${endpoint}`, '--html', '--open'] + + if (blockNumber) { + options.push(`--block=${blockNumber}`) + } + + await execa('yarn', options) + .then(({ stdout }) => { + console.log(stdout) + }) + .catch((error) => { + console.error('Error:', error) + }) +} diff --git a/integration-tests/chopsticks/src/helper/api.ts b/integration-tests/chopsticks/src/helper/api.ts new file mode 100644 index 0000000000..0d33250f0c --- /dev/null +++ b/integration-tests/chopsticks/src/helper/api.ts @@ -0,0 +1,371 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { ApiPromise } from '@polkadot/api' +import type { AccountData } from '@polkadot/types/interfaces' + +export const xtokens = { + parachainV2: (paraId: number) => (acc: any) => ({ + V1: { + parents: 1, + interior: { + X2: [ + { Parachain: paraId }, + { + AccountId32: { + network: 'Any', + id: acc, + }, + }, + ], + }, + }, + }), + parachainV3: (paraId: number) => (acc: any) => ({ + V3: { + parents: 1, + interior: { + X2: [ + { Parachain: paraId }, + { + AccountId32: { + id: acc, + }, + }, + ], + }, + }, + }), + transfer: + (token: any, dest: (dest: any) => any, weight: any = 'Unlimited') => + ({ api }: { api: ApiPromise }, acc: any, amount: any) => + api.tx.xTokens.transfer(token, amount, dest(acc), weight), +} + +export const balances = { + transferAllowDeath: ({ api }: { api: ApiPromise }, dest: string, amount: string) => + api.tx.balances.transferAllowDeath(dest, amount), +} + +export const switchPallet = { + switchV3: + () => + ({ api }: { api: ApiPromise }, acc: any, amount: string) => + api.tx.assetSwitchPool1.switch(amount, { + V3: { + parents: 0, + interior: { + X1: { + AccountId32: { + id: acc, + }, + }, + }, + }, + }), + switchV4: + () => + ({ api }: { api: ApiPromise }, acc: any, amount: string) => + api.tx.assetSwitchPool1.switch(amount, { + V4: { + parents: 0, + interior: { + X1: [ + { + AccountId32: { + id: acc, + }, + }, + ], + }, + }, + }), + resume: + () => + ({ api }: { api: ApiPromise }) => + api.tx.assetSwitchPool1.resumeSwitchPair(), + pause: + () => + ({ api }: { api: ApiPromise }) => + api.tx.assetSwitchPool1.pauseSwitchPair(), +} + +export const xcmPallet = { + parachainV2: (parents: number, paraId: number) => ({ + V2: { + parents, + interior: { + X1: { Parachain: paraId }, + }, + }, + }), + parachainV3: (parents: number, paraId: any) => ({ + V3: { + parents, + interior: { + X1: { Parachain: paraId }, + }, + }, + }), + parachainV4: (parents: number, paraId: any) => ({ + V4: { + parents, + interior: { X1: [{ Parachain: paraId }] }, + }, + }), + limitedTeleportAssets: + (token: any, amount: any, dest: any) => + ({ api }: { api: ApiPromise }, acc: any) => + (api.tx.xcmPallet || api.tx.polkadotXcm).limitedTeleportAssets( + dest, + { + V3: { + parents: 0, + interior: { + X1: { + AccountId32: { + id: acc, + }, + }, + }, + }, + }, + { + V3: [ + { + id: token, + fun: { Fungible: amount }, + }, + ], + }, + 0, + 'Unlimited' + ), + limitedReserveTransferAssetsV2: + (token: any, dest: any) => + ({ api }: { api: ApiPromise }, acc: any, amount: any) => + (api.tx.xcmPallet || api.tx.polkadotXcm).limitedReserveTransferAssets( + dest, + { + V2: { + parents: 0, + interior: { + X1: { + AccountId32: { + network: 'Any', + id: acc, + }, + }, + }, + }, + }, + { + V2: [ + { + id: token, + fun: { Fungible: amount }, + }, + ], + }, + 0, + 'Unlimited' + ), + limitedReserveTransferAssetsV3: + (token: any, dest: any) => + ({ api }: { api: ApiPromise }, acc: any, amount: any) => + (api.tx.xcmPallet || api.tx.polkadotXcm).limitedReserveTransferAssets( + dest, + { + V3: { + parents: 0, + interior: { + X1: { + AccountId32: { + id: acc, + }, + }, + }, + }, + }, + { + V3: [ + { + id: token, + fun: { Fungible: amount }, + }, + ], + }, + 0, + 'Unlimited' + ), + limitedReserveTransferAssetsV4: + (token: any, dest: any) => + ({ api }: { api: ApiPromise }, acc: any, amount: any) => + (api.tx.xcmPallet || api.tx.polkadotXcm).limitedReserveTransferAssets( + dest, + { + V4: { + parents: 0, + interior: { + X1: [ + { + AccountId32: { + id: acc, + }, + }, + ], + }, + }, + }, + { + V4: [ + { + id: token, + fun: { Fungible: amount }, + }, + ], + }, + 0, + 'Unlimited' + ), + transferAssetsV3: + (dest: any, token: any) => + ({ api }: { api: ApiPromise }, acc: any, amount: any) => + api.tx.polkadotXcm.transferAssets( + dest, + { + V3: { + parents: 0, + interior: { + X1: { + AccountId32: { + id: acc, + }, + }, + }, + }, + }, + { + V3: [ + { + id: token, + fun: { Fungible: amount }, + }, + ], + }, + 0, + 'Unlimited' + ), + transferAssetsV4: + (dest: any, token: any) => + ({ api }: { api: ApiPromise }, acc: any, amount: any) => + api.tx.polkadotXcm.transferAssets( + dest, + { + V4: { + parents: 0, + interior: { + X1: [ + { + AccountId32: { + id: acc, + }, + }, + ], + }, + }, + }, + { + V4: [ + { + id: token, + fun: { Fungible: amount }, + }, + ], + }, + 0, + 'Unlimited' + ), + transferAssetsUsingTypeAndThenV4: + (dest: any, token: any, xcmMessage: any) => + ({ api }: { api: ApiPromise }, balanceToTransfer: string) => + api.tx.polkadotXcm.transferAssetsUsingTypeAndThen( + dest, + { + V4: [ + { + id: token, + fun: { Fungible: balanceToTransfer }, + }, + ], + }, + 'LocalReserve', + { V4: token }, + 'LocalReserve', + xcmMessage, + 'Unlimited' + ), + transferAssetsUsingTypeAndThenV3: + (dest: any, token: any, xcmMessage: any) => + ({ api }: { api: ApiPromise }, balanceToTransfer: string) => + api.tx.polkadotXcm.transferAssetsUsingTypeAndThen( + dest, + { + V3: [ + { + id: token, + fun: { Fungible: balanceToTransfer }, + }, + ], + }, + 'LocalReserve', + { V3: token }, + 'LocalReserve', + xcmMessage, + 'Unlimited' + ), + send: + (destination: object) => + ({ api }: { api: ApiPromise }, xcmMessage: object) => + (api.tx.xcmPallet || api.tx.polkadotXcm).send(destination, xcmMessage), +} + +/** + * Different pallets to submit tx + */ +export const tx = { + xtokens, + xcmPallet, + switchPallet, + balances, +} + +/** + * Query functions for different chains. + * Native tokens are fetched via the system pallet, while other tokens are fetched via the tokens or assets pallet. + * + */ +export const query = { + balances: async ({ api }: { api: ApiPromise }, address: string) => + (await api.query.system.account(address)).data.free.toBigInt(), + foreignAssets: + (assetId: any) => + async ({ api }: { api: ApiPromise }, address: string) => { + const accountInfo: any = await api.query.foreignAssets.account(assetId, address) + if (accountInfo.isNone) { + return 0n + } + return accountInfo.unwrap().balance.toBigInt() + }, + fungibles: + (assetId: any) => + async ({ api }: { api: ApiPromise }, address: string) => { + const accountInfo: any = await api.query.fungibles.account(assetId, address) + if (accountInfo.isNone) { + return 0n + } + return accountInfo.unwrap().balance.toBigInt() + }, + tokens: + (token: any) => + async ({ api }: { api: ApiPromise }, address: string) => + (await api.query.tokens.accounts(address, token)).free.toBigInt(), +} diff --git a/integration-tests/chopsticks/src/helper/utils.ts b/integration-tests/chopsticks/src/helper/utils.ts new file mode 100644 index 0000000000..e2fbdc666d --- /dev/null +++ b/integration-tests/chopsticks/src/helper/utils.ts @@ -0,0 +1,114 @@ +import { ApiPromise, SubmittableResult } from '@polkadot/api' +import { Keyring } from '@polkadot/keyring' +import { u8aToHex } from '@polkadot/util' +import { decodeAddress } from '@polkadot/util-crypto' + +import type { SubmittableExtrinsic } from '@polkadot/api/types' +import type { KeyringPair } from '@polkadot/keyring/types' +import type { Codec } from '@polkadot/types/types' +import type { ExpectStatic } from 'vitest' +import { EventRecord } from '@polkadot/types/interfaces' + +/** + * Keyring instance to generate key pairs with 38 ss58Format encoding. + */ +const keyring = new Keyring({ type: 'ed25519', ss58Format: 38 }) + +/** + * Key pairs for Alice, Bob, and Charlie used for testing. + */ +export const keysAlice = keyring.addFromUri('//alice', undefined) +export const keysBob = keyring.addFromUri('//bob', undefined) +export const keysCharlie = keyring.addFromUri('//charlie', undefined) + +/** + * Converts a given value to a Number + */ +export function toNumber(value: string | undefined): number | undefined { + if (value === undefined) { + return undefined + } + return Number(value) +} + +/** + * Converts a given address to its hexadecimal representation. + * + * @param addr - The address to be converted. It should be a string representation of an address. + */ +export function hexAddress(addr: string) { + return u8aToHex(decodeAddress(addr)) +} + +/** + * Validates if the received balance is within the expected range considering a certain precision. + * + * @param previousBalance - The balance before the operation. + * @param receivedBalance - The balance after the operation. + * @param deltaBalance - The expected change in balance. + * @param expect - The assertion function from the testing library. + * @param precision - The precision of the balance validation. It must be a value between 0 and 100. + * + * The function calculates the expected balance by adding the deltaBalance to the previousBalance. + * It then calculates the lower and upper bounds of the expected balance considering the precision. + * The received balance is then checked if it falls within the range of the lower and upper bounds. + * + * If the precision is not between 0 and 100, the function throws an error. + * + * @throws {Error} If the precision is not between 0 and 100. + */ +export function validateBalanceWithPrecision( + previousBalance: bigint, + receivedBalance: bigint, + deltaBalance: bigint, + expect: ExpectStatic, + precision: bigint +) { + if (precision < 0n || precision > 100n) { + throw new Error('Precision must be between 0 and 100') + } + + const allowedError = 100n - precision + const expectedBalance = previousBalance + deltaBalance + + const lowerBound = expectedBalance - (expectedBalance * allowedError) / 100n + const upperBound = expectedBalance + (expectedBalance * allowedError) / 100n + + expect(receivedBalance).toBeGreaterThanOrEqual(lowerBound) + expect(receivedBalance).toBeLessThanOrEqual(upperBound) +} + +/** + * Fetches the paid fees for the executed XCM message. Is only working on the sender chain. + */ +export async function getPaidXcmFees(api: ApiPromise, eventRecords: Codec[]): Promise { + const polkadotFees = eventRecords.find((eventRecord) => + api.events.polkadotXcm.FeesPaid.is((eventRecord as EventRecord).event) + ) + if (!polkadotFees) { + throw new Error('FeesPaid event not found') + } + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return (polkadotFees as any).event.data.fees[0].fun.asFungible.toBigInt() +} + +/** + * Calculates the transaction fees for a given transaction. + */ +export async function calculateTxFees( + tx: SubmittableExtrinsic<'promise', SubmittableResult>, + account: KeyringPair +): Promise { + const paymentInfo = await tx.paymentInfo(account) + return paymentInfo.partialFee.toBigInt() +} + +// Constants for the balances +export const KILT = BigInt(1e15) +export const DOT = BigInt(1e10) +export const HDX = BigInt(1e12) + +export const initialBalanceKILT = 100n * KILT +export const initialBalanceDOT = 100n * DOT +export const initialBalanceHDX = 100n * HDX diff --git a/integration-tests/chopsticks/src/network/assetHub.ts b/integration-tests/chopsticks/src/network/assetHub.ts deleted file mode 100644 index cbc3f08911..0000000000 --- a/integration-tests/chopsticks/src/network/assetHub.ts +++ /dev/null @@ -1,131 +0,0 @@ -import { setupContext, SetupOption } from '@acala-network/chopsticks-testing' - -import type { Config } from './types.js' -import { initialBalanceDOT, toNumber } from '../utils.js' - -/// Options used to create the Spiritnet context -export const getSetupOptions = ({ - blockNumber = undefined, - wasmOverride = undefined, -}: { - blockNumber?: number - wasmOverride?: string -}) => - ({ - endpoint: process.env.ASSETHUB_WSS || 'wss://asset-hub-polkadot-rpc.dwellir.com', - db: './db/assethub.db.sqlite', - port: toNumber(process.env.ASSETHUB_PORT) || 9003, - wasmOverride, - blockNumber, - }) as SetupOption - -/// AssetHub has no own coin. Teleported dots are used as the native token. -export function assignDotTokensToAccountsAsStorage(addr: string[], balance: bigint = initialBalanceDOT) { - return { - System: { - Account: addr.map((address) => [[address], { providers: 1, data: { free: balance.toString() } }]), - }, - } -} - -export function createForeignAsset(manager: string, assetId = eKiltLocation) { - return { - foreignAssets: { - asset: [ - [ - [assetId], - { - owner: manager, - issuer: manager, - admin: manager, - freezer: manager, - // Just make it big enough - supply: '10000000000000000000000000000', - deposit: 0, - minBalance: 0, - isSufficient: false, - accounts: 0, - sufficients: 0, - approvals: 0, - status: 'Live', - }, - ], - ], - }, - } -} - -/// Assigns KSM to an account -export function assignKSMtoAccounts(addr: string[], balance: bigint = initialBalanceDOT) { - return { - foreignAssets: { - account: addr.map((addr) => [ - [KSMAssetLocation, addr], - { - balance: balance, - status: 'Liquid', - reason: 'Consumer', - extra: null, - }, - ]), - }, - } -} - -/// Assigns the foreign asset to the accounts. -/// Does not check if supply is matching the sum of the account balances. -export function assignForeignAssetToAccounts(accountInfo: [string, bigint][], assetId = eKiltLocation) { - return { - foreignAssets: { - account: accountInfo.map(([account, balance]) => [ - [assetId, account], - { - balance: balance, - status: 'Liquid', - reason: 'Consumer', - extra: null, - }, - ]), - }, - } -} - -/// AssetHub ParaId -export const paraId = 1000 - -export const KSMAssetLocation = { - parents: 2, - interior: { - X1: { - GlobalConsensus: 'Kusama', - }, - }, -} - -// Sibling Sovereign Account -export const sovereignAccountOnSiblingChains = '4qXPdpimHh8TR24RSk994yVzxx4TLfvKj5i1qH5puvWmfAqy' - -/// Native token in AssetHub -export const nativeTokenLocation = { parents: 1, interior: 'Here' } - -export const eKiltLocation = { - parents: 2, - interior: { - X2: [ - { - GlobalConsensus: { Ethereum: { chainId: 11155111 } }, - }, - { - AccountKey20: { - network: null, - key: '0x06012c8cf97bead5deae237070f9587f8e7a266d', - }, - }, - ], - }, -} - -export async function getContext(): Promise { - const options = getSetupOptions({}) - return setupContext(options) -} diff --git a/integration-tests/chopsticks/src/network/assethub/index.ts b/integration-tests/chopsticks/src/network/assethub/index.ts new file mode 100644 index 0000000000..81874364bb --- /dev/null +++ b/integration-tests/chopsticks/src/network/assethub/index.ts @@ -0,0 +1,16 @@ +import { Chains } from '../types.js' +import * as Main from './main_network.js' +import * as Test from './test_network.js' + +export const chains: Chains = { + main: { + storage: Main.storage, + getConfig: Main.getSetupOptions, + chainInfo: Main.parachainInfo, + }, + test: { + storage: Test.storage, + getConfig: Test.getSetupOptions, + chainInfo: Test.parachainInfo, + }, +} diff --git a/integration-tests/chopsticks/src/network/assethub/main_network.ts b/integration-tests/chopsticks/src/network/assethub/main_network.ts new file mode 100644 index 0000000000..4c4f72535d --- /dev/null +++ b/integration-tests/chopsticks/src/network/assethub/main_network.ts @@ -0,0 +1,126 @@ +import type { SetupOption } from '@acala-network/chopsticks-testing' + +import { initialBalanceDOT, toNumber } from '../../helper/utils.js' +import { SetupConfigParameters } from '../types.js' + +export const getSetupOptions = ({ blockNumber = undefined, wasmOverride = undefined }: SetupConfigParameters) => { + const random = (Math.random() + 1).toString(36).substring(7) + return { + endpoint: process.env.ASSETHUB_WSS || 'wss://asset-hub-polkadot-rpc.dwellir.com', + db: `./db/assethub-main_${random}.db.sqlite`, + port: toNumber(process.env.ASSETHUB_MAIN_PORT), + wasmOverride, + blockNumber, + } as SetupOption +} + +export const storage = { + /// AssetHub has no own coin. Teleported dots are used as the native token. + assignNativeTokensToAccountsAsStorage(addr: string[], balance: bigint = initialBalanceDOT) { + return { + System: { + Account: addr.map((address) => [[address], { providers: 1, data: { free: balance.toString() } }]), + }, + } + }, + + /// Creates the foreign asset with the given manager as owner, issuer, admin, and freezer. + createForeignAsset(manager: string, assetId = parachainInfo.eKiltLocation) { + return { + foreignAssets: { + asset: [ + [ + [assetId], + { + owner: manager, + issuer: manager, + admin: manager, + freezer: manager, + // Just make it big enough + supply: '10000000000000000000000000000', + deposit: 0, + minBalance: 0, + isSufficient: false, + accounts: 0, + sufficients: 0, + approvals: 0, + status: 'Live', + }, + ], + ], + }, + } + }, + + /// Assigns KSM to an account + assignKSMtoAccounts(addr: string[], balance: bigint = initialBalanceDOT) { + return { + foreignAssets: { + account: addr.map((addr) => [ + [parachainInfo.KSMAssetLocation, addr], + { + balance: balance, + status: 'Liquid', + reason: 'Consumer', + extra: null, + }, + ]), + }, + } + }, + + /// Assigns the foreign asset to the accounts. + /// Does not check if supply is matching the sum of the account balances. + assignForeignAssetToAccounts(accountInfo: [string, bigint][], assetId = parachainInfo.eKiltLocation) { + return { + foreignAssets: { + account: accountInfo.map(([account, balance]) => [ + [assetId, account], + { + balance: balance, + status: 'Liquid', + reason: 'Consumer', + extra: null, + }, + ]), + }, + } + }, +} + +export const parachainInfo = { + /// AssetHub ParaId + paraId: 1000, + KSMAssetLocation: { + parents: 2, + interior: { + X1: { + GlobalConsensus: 'Kusama', + }, + }, + }, + + // Sibling Sovereign Account + sovereignAccountOnSiblingChains: '4qXPdpimHh8TR24RSk994yVzxx4TLfvKj5i1qH5puvWmfAqy', + + /// Native token in AssetHub + nativeTokenLocation: { parents: 1, interior: 'Here' }, + + /// Production eKILT location + eKiltLocation: { + parents: 2, + interior: { + X2: [ + { + GlobalConsensus: { Ethereum: { chainId: 1 } }, + }, + { + AccountKey20: { + network: null, + key: '0x5d3d01fd6d2ad1169b17918eb4f153c6616288eb', + }, + }, + ], + }, + }, +} diff --git a/integration-tests/chopsticks/src/network/assethub/test_network.ts b/integration-tests/chopsticks/src/network/assethub/test_network.ts new file mode 100644 index 0000000000..eaae3e74bd --- /dev/null +++ b/integration-tests/chopsticks/src/network/assethub/test_network.ts @@ -0,0 +1,126 @@ +import type { SetupOption } from '@acala-network/chopsticks-testing' + +import { initialBalanceDOT, toNumber } from '../../helper/utils.js' +import { SetupConfigParameters } from '../types.js' + +export const getSetupOptions = ({ blockNumber = undefined, wasmOverride = undefined }: SetupConfigParameters) => { + const random = (Math.random() + 1).toString(36).substring(7) + return { + endpoint: process.env.ASSETHUB_TEST_WSS || 'wss://asset-hub-paseo.dotters.network', + db: `./db/assethub-test_${random}.db.sqlite`, + port: toNumber(process.env.ASSETHUB_TEST_PORT), + wasmOverride, + blockNumber, + } as SetupOption +} + +export const storage = { + /// AssetHub has no own coin. Teleported relay tokens are used as the native token. + assignNativeTokensToAccountsAsStorage(addr: string[], balance: bigint = initialBalanceDOT) { + return { + System: { + Account: addr.map((address) => [[address], { providers: 1, data: { free: balance.toString() } }]), + }, + } + }, + + /// Creates the foreign asset with the given manager as owner, issuer, admin, and freezer. + createForeignAsset(manager: string, assetId = parachainInfo.eKiltLocation) { + return { + foreignAssets: { + asset: [ + [ + [assetId], + { + owner: manager, + issuer: manager, + admin: manager, + freezer: manager, + // Just make it big enough + supply: '10000000000000000000000000000', + deposit: 0, + minBalance: 0, + isSufficient: false, + accounts: 0, + sufficients: 0, + approvals: 0, + status: 'Live', + }, + ], + ], + }, + } + }, + + /// Assigns KSM to an account + assignKSMtoAccounts(addr: string[], balance: bigint = initialBalanceDOT) { + return { + foreignAssets: { + account: addr.map((addr) => [ + [parachainInfo.KSMAssetLocation, addr], + { + balance: balance, + status: 'Liquid', + reason: 'Consumer', + extra: null, + }, + ]), + }, + } + }, + + /// Assigns the foreign asset to the accounts. + /// Does not check if supply is matching the sum of the account balances. + assignForeignAssetToAccounts(accountInfo: [string, bigint][], assetId = parachainInfo.eKiltLocation) { + return { + foreignAssets: { + account: accountInfo.map(([account, balance]) => [ + [assetId, account], + { + balance: balance, + status: 'Liquid', + reason: 'Consumer', + extra: null, + }, + ]), + }, + } + }, +} + +export const parachainInfo = { + /// AssetHub ParaId + paraId: 1000, + KSMAssetLocation: { + parents: 2, + interior: { + X1: { + GlobalConsensus: 'Kusama', + }, + }, + }, + + // Sibling Sovereign Account + sovereignAccountOnSiblingChains: '4qXPdpimHh8TR24RSk994yVzxx4TLfvKj5i1qH5puvWmfAqy', + + /// Native token in AssetHub + nativeTokenLocation: { parents: 1, interior: 'Here' }, + + /// ePILT location on Sepolia + eKiltLocation: { + parents: 2, + interior: { + X2: [ + { + GlobalConsensus: { Ethereum: { chainId: 11155111 } }, + }, + { + AccountKey20: { + network: null, + key: '0x99e743964c036bc28931fb564817db428aa7f752', + }, + }, + ], + }, + }, +} diff --git a/integration-tests/chopsticks/src/network/basilisk.ts b/integration-tests/chopsticks/src/network/basilisk.ts deleted file mode 100644 index d5bd1583c2..0000000000 --- a/integration-tests/chopsticks/src/network/basilisk.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { setupContext, SetupOption } from '@acala-network/chopsticks-testing' -import type { Config } from './types.js' -import { initialBalanceDOT, initialBalanceHDX, initialBalanceKILT, toNumber } from '../utils.js' - -/// Options used to create the HydraDx context -export const options: SetupOption = { - endpoint: process.env.BASILISK_WS || ['wss://basilisk-rococo-rpc.play.hydration.cloud'], - db: './db/basilisk.db.sqlite', - port: toNumber(process.env.HYDRADX_PORT) || 9005, -} - -// On Basilisk, there is only KSM. We use that currency and treat it as ROC, since the location is {parents: 1, interior: Here} -export const dotTokenId = 5 - -export const eKILTTokenId = 90 - -/// Assigns the native tokens to an accounts -export function assignNativeTokensToAccounts(addr: string[], balance: bigint = initialBalanceHDX) { - return { - System: { - Account: addr.map((address) => [[address], { providers: 1, data: { free: balance } }]), - }, - } -} - -/// Assigns ROCs tokens to an accounts -export function assignRocTokensToAccounts(addr: string[], balance: bigint = initialBalanceDOT) { - return { - Tokens: { - Accounts: addr.map((address) => [[address, dotTokenId], { free: balance }]), - }, - } -} - -export function createRemoteAsset( - addr: string[], - assetLocation: Record, - balance: bigint = initialBalanceKILT -) { - return { - assetRegistry: { - assetIds: [[['eKILT'], 90]], - assetLocations: [[[90], assetLocation]], - assetMetadataMap: [[[90], { symbol: 'eKILT', decimals: 15 }]], - }, - - tokens: { - accounts: addr.map((acc) => [[acc, 90], { free: balance }]), - }, - } -} - -/// Basilisk ParaId -export const paraId = 2090 - -export async function getContext(): Promise { - return setupContext(options) -} diff --git a/integration-tests/chopsticks/src/network/hydraDx.ts b/integration-tests/chopsticks/src/network/hydraDx.ts deleted file mode 100644 index 97e39d8011..0000000000 --- a/integration-tests/chopsticks/src/network/hydraDx.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { setupContext, SetupOption } from '@acala-network/chopsticks-testing' -import type { Config } from './types.js' -import { initialBalanceHDX, initialBalanceKILT, toNumber } from '../utils.js' - -/// Options used to create the HydraDx context -export const options: SetupOption = { - endpoint: process.env.HYDRADX_WS || ['wss://hydradx-rpc.dwellir.com', 'wss://rpc.hydradx.cloud'], - db: './db/hydradx.db.sqlite', - port: toNumber(process.env.HYDRADX_PORT) || 9001, -} - -export const kiltTokenId = 28 - -/// Sets the [TechnicalCommittee] and [Council] governance to the given accounts -export function setGovernance(addr: string[]) { - return { - TechnicalCommittee: { Members: addr }, - Council: { Members: addr }, - } -} - -/// Assigns the native tokens to an accounts -export function assignNativeTokensToAccounts(addr: string[], balance: bigint = initialBalanceHDX) { - return { - System: { - Account: addr.map((address) => [[address], { providers: 1, data: { free: balance } }]), - }, - } -} - -/// Assigns KILT tokens to an accounts -export function assignKiltTokensToAccounts(addr: string[], balance: bigint = initialBalanceKILT) { - return { - Tokens: { - Accounts: addr.map((address) => [[address, kiltTokenId], { free: balance }]), - }, - } -} - -/// HydraDX ParaId -export const paraId = 2034 - -/// Omnipool account -export const omnipoolAccount = '7L53bUTBbfuj14UpdCNPwmgzzHSsrsTWBHX5pys32mVWM3C1' - -export async function getContext(): Promise { - return setupContext(options) -} diff --git a/integration-tests/chopsticks/src/network/hydration/index.ts b/integration-tests/chopsticks/src/network/hydration/index.ts new file mode 100644 index 0000000000..81874364bb --- /dev/null +++ b/integration-tests/chopsticks/src/network/hydration/index.ts @@ -0,0 +1,16 @@ +import { Chains } from '../types.js' +import * as Main from './main_network.js' +import * as Test from './test_network.js' + +export const chains: Chains = { + main: { + storage: Main.storage, + getConfig: Main.getSetupOptions, + chainInfo: Main.parachainInfo, + }, + test: { + storage: Test.storage, + getConfig: Test.getSetupOptions, + chainInfo: Test.parachainInfo, + }, +} diff --git a/integration-tests/chopsticks/src/network/hydration/main_network.ts b/integration-tests/chopsticks/src/network/hydration/main_network.ts new file mode 100644 index 0000000000..71079180ed --- /dev/null +++ b/integration-tests/chopsticks/src/network/hydration/main_network.ts @@ -0,0 +1,51 @@ +import type { SetupOption } from '@acala-network/chopsticks-testing' + +import { initialBalanceHDX, initialBalanceKILT, toNumber } from '../../helper/utils.js' +import { SetupConfigParameters } from '../types.js' + +/// Options used to create the Hydration context +export const getSetupOptions = ({ blockNumber, wasmOverride }: SetupConfigParameters) => { + const random = (Math.random() + 1).toString(36).substring(7) + return { + endpoint: process.env.HYDRATION_WS || ['wss://rpc.hydradx.cloud'], + db: `./db/hydration_main_${random}.db.sqlite`, + port: toNumber(process.env.HYDRATION_PORT), + blockNumber, + wasmOverride, + } as SetupOption +} + +export const storage = { + /// Sets the [TechnicalCommittee] and [Council] governance to the given accounts + setGovernance(addr: string[]) { + return { + TechnicalCommittee: { Members: addr }, + Council: { Members: addr }, + } + }, + /// Assigns the native tokens to an accounts + assignNativeTokensToAccounts(addr: string[], balance: bigint = initialBalanceHDX) { + return { + System: { + Account: addr.map((address) => [[address], { providers: 1, data: { free: balance } }]), + }, + } + }, + + /// Assigns KILT tokens to accounts + assignKiltTokensToAccounts(addr: string[], balance: bigint = initialBalanceKILT) { + return { + Tokens: { + Accounts: addr.map((address) => [[address, parachainInfo.kiltTokenId], { free: balance }]), + }, + } + }, +} + +export const parachainInfo = { + // Sibling Sovereign Account + sovereignAccountOnSiblingChains: '5Eg2fntQqFi3EvFWAf71G66Ecjjah26bmFzoANAeHFgj9Lia', + kiltTokenId: 28, + paraId: 2034, + omnipoolAccount: '7L53bUTBbfuj14UpdCNPwmgzzHSsrsTWBHX5pys32mVWM3C1', +} diff --git a/integration-tests/chopsticks/src/network/hydration/test_network.ts b/integration-tests/chopsticks/src/network/hydration/test_network.ts new file mode 100644 index 0000000000..3f06319b34 --- /dev/null +++ b/integration-tests/chopsticks/src/network/hydration/test_network.ts @@ -0,0 +1,51 @@ +import type { SetupOption } from '@acala-network/chopsticks-testing' + +import { initialBalanceHDX, initialBalanceKILT, toNumber } from '../../helper/utils.js' +import { SetupConfigParameters } from '../types.js' + +/// Options used to create the Hydration context +export const getSetupOptions = ({ blockNumber, wasmOverride }: SetupConfigParameters) => { + const random = (Math.random() + 1).toString(36).substring(7) + return { + endpoint: process.env.HYDRATION_TEST_WS || ['wss://paseo-rpc.play.hydration.cloud'], + db: `./db/hydration_test_${random}.db.sqlite`, + port: toNumber(process.env.HYDRATION_TEST_PORT), + blockNumber, + wasmOverride, + } as SetupOption +} + +export const storage = { + /// Sets the [TechnicalCommittee] and [Council] governance to the given accounts + setGovernance(addr: string[]) { + return { + TechnicalCommittee: { Members: addr }, + Council: { Members: addr }, + } + }, + /// Assigns the native tokens to an accounts + assignNativeTokensToAccounts(addr: string[], balance: bigint = initialBalanceHDX) { + return { + System: { + Account: addr.map((address) => [[address], { providers: 1, data: { free: balance } }]), + }, + } + }, + + /// Assigns KILT tokens to accounts + assignKiltTokensToAccounts(addr: string[], balance: bigint = initialBalanceKILT) { + return { + Tokens: { + Accounts: addr.map((address) => [[address, parachainInfo.kiltTokenId], { free: balance }]), + }, + } + }, +} + +export const parachainInfo = { + // Sibling Sovereign Account + sovereignAccountOnSiblingChains: '5Eg2fntQqFi3EvFWAf71G66Ecjjah26bmFzoANAeHFgj9Lia', + kiltTokenId: 28, + paraId: 2034, + omnipoolAccount: '7L53bUTBbfuj14UpdCNPwmgzzHSsrsTWBHX5pys32mVWM3C1', +} diff --git a/integration-tests/chopsticks/src/network/index.ts b/integration-tests/chopsticks/src/network/index.ts new file mode 100644 index 0000000000..685d5c59d2 --- /dev/null +++ b/integration-tests/chopsticks/src/network/index.ts @@ -0,0 +1,94 @@ +import { chains as KiltConfigs } from './kilt/index.js' +import { chains as HydrationConfigs } from './hydration/index.js' +import { chains as PolkadotConfigs } from './polkadot/index.js' +import { chains as AssetHubConfigs } from './assethub/index.js' +import { ChainConfigs } from './types.js' + +/* + * Get an environment variable and throw an error if it is not set. + */ +function getEnvVariable(name: string): string { + const value = process.env[name] + if (value === undefined) { + if (process.env.NODE_ENV === 'test') { + throw new Error(`Error: Environment variable ${name} is not set. Some tests might not work.`) + } + return '' + } + return value +} + +/* + * Object with all the chain configurations. + */ +export const testChains: ChainConfigs = { + kilt: { + getConfig: KiltConfigs.test!.getConfig, + parameters: { + blockNumber: Number(getEnvVariable('SPIRITNET_BLOCK_NUMBER')), + wasmOverride: getEnvVariable('SPIRITNET_WASM_OVERRIDE'), + }, + storage: KiltConfigs.test!.storage, + chainInfo: KiltConfigs.test!.chainInfo, + }, + hydration: { + getConfig: HydrationConfigs.test!.getConfig, + parameters: { + blockNumber: Number(getEnvVariable('HYDRATION_BLOCK_NUMBER')), + }, + storage: HydrationConfigs.test!.storage, + chainInfo: HydrationConfigs.test!.chainInfo, + }, + polkadot: { + getConfig: PolkadotConfigs.test!.getConfig, + parameters: { + blockNumber: Number(getEnvVariable('POLKADOT_BLOCK_NUMBER')), + }, + storage: PolkadotConfigs.test!.storage, + chainInfo: PolkadotConfigs.test!.chainInfo, + }, + assetHub: { + getConfig: AssetHubConfigs.test!.getConfig, + parameters: { + blockNumber: Number(getEnvVariable('ASSETHUB_BLOCK_NUMBER')), + }, + storage: AssetHubConfigs.test!.storage, + chainInfo: AssetHubConfigs.test!.chainInfo, + }, +} + +export const mainChains: ChainConfigs = { + kilt: { + getConfig: KiltConfigs.main!.getConfig, + parameters: { + blockNumber: Number(getEnvVariable('SPIRITNET_BLOCK_NUMBER')), + wasmOverride: getEnvVariable('SPIRITNET_WASM_OVERRIDE'), + }, + storage: KiltConfigs.main!.storage, + chainInfo: KiltConfigs.main!.chainInfo, + }, + hydration: { + getConfig: HydrationConfigs.main!.getConfig, + parameters: { + blockNumber: Number(getEnvVariable('HYDRATION_BLOCK_NUMBER')), + }, + storage: HydrationConfigs.main!.storage, + chainInfo: HydrationConfigs.main!.chainInfo, + }, + polkadot: { + getConfig: PolkadotConfigs.main!.getConfig, + parameters: { + blockNumber: Number(getEnvVariable('POLKADOT_BLOCK_NUMBER')), + }, + storage: PolkadotConfigs.main!.storage, + chainInfo: PolkadotConfigs.main!.chainInfo, + }, + assetHub: { + getConfig: AssetHubConfigs.main!.getConfig, + parameters: { + blockNumber: Number(getEnvVariable('ASSETHUB_BLOCK_NUMBER')), + }, + storage: AssetHubConfigs.main!.storage, + chainInfo: AssetHubConfigs.main!.chainInfo, + }, +} diff --git a/integration-tests/chopsticks/src/network/kilt/index.ts b/integration-tests/chopsticks/src/network/kilt/index.ts new file mode 100644 index 0000000000..81874364bb --- /dev/null +++ b/integration-tests/chopsticks/src/network/kilt/index.ts @@ -0,0 +1,16 @@ +import { Chains } from '../types.js' +import * as Main from './main_network.js' +import * as Test from './test_network.js' + +export const chains: Chains = { + main: { + storage: Main.storage, + getConfig: Main.getSetupOptions, + chainInfo: Main.parachainInfo, + }, + test: { + storage: Test.storage, + getConfig: Test.getSetupOptions, + chainInfo: Test.parachainInfo, + }, +} diff --git a/integration-tests/chopsticks/src/network/kilt/main_network.ts b/integration-tests/chopsticks/src/network/kilt/main_network.ts new file mode 100644 index 0000000000..26b181af0b --- /dev/null +++ b/integration-tests/chopsticks/src/network/kilt/main_network.ts @@ -0,0 +1,129 @@ +import type { SetupOption } from '@acala-network/chopsticks-testing' + +import { initialBalanceDOT, initialBalanceKILT, toNumber } from '../../helper/utils.js' +import { SetupConfigParameters } from '../types.js' + +/// Options used to create the Spiritnet context +export const getSetupOptions = ({ blockNumber = undefined, wasmOverride = undefined }: SetupConfigParameters) => { + const random = (Math.random() + 1).toString(36).substring(7) + return { + endpoint: process.env.SPIRITNET_WS || 'wss://kilt.ibp.network', + db: `./db/spiritnet_main_${random}.db.sqlite`, + port: toNumber(process.env.SPIRITNET_PORT), + wasmOverride, + blockNumber, + } as SetupOption +} + +export const storage = { + /// Assigns the native tokens to an accounts + assignNativeTokensToAccounts(addr: string[], balance: bigint = initialBalanceKILT) { + return { + System: { + Account: addr.map((address) => [[address], { providers: 1, data: { free: balance } }]), + }, + } + }, + + /// Sets the [technicalCommittee] and [council] governance to the given accounts + setGovernance(addr: string[]) { + return { + technicalCommittee: { Members: addr }, + council: { Members: addr }, + } + }, + /// Assigns the relay token to the account. + assignRelayTokensToAccounts(addr: string[], balance: bigint = initialBalanceDOT) { + return { + fungibles: { + account: addr.map((acc) => [ + [{ parents: 1, interior: 'here' }, acc], + { balance: balance, status: 'Liquid', reason: 'Consumer', extra: null }, + ]), + }, + } + }, + /// Pauses the switch pool. Default value are fetched from block 7,896,550 and might break the invariant check for all blocks after that. + // To maintain the invariant, use the pause tx. + pauseSwitch( + remoteAssetCirculatingSupply = '1044350720000000000000', + remoteAssetTotalSupply = '164000000000000000000000', + remoteAssetSovereignTotalBalance = '162955649280000000000000' + ) { + return { + assetSwitchPool1: { + switchPair: { + status: 'Paused', + poolAccount: '4pCvXiDJXzfms5G2Digp474mo3SJSsAWUBuAJpzcuZvvK8dt', + remoteAssetCirculatingSupply, + remoteAssetEd: 1, + remoteAssetId: { + V4: { + parents: 2, + interior: { + X2: [ + { + GlobalConsensus: { + Ethereum: { + chainId: 1, + }, + }, + }, + { + AccountKey20: { + network: null, + key: '0x5d3d01fd6d2ad1169b17918eb4f153c6616288eb', + }, + }, + ], + }, + }, + }, + remoteAssetTotalSupply, + remoteReserveLocation: { + V4: { + parents: 1, + interior: { + X1: [ + { + Parachain: 1000, + }, + ], + }, + }, + }, + remoteXcmFee: { + V4: { + id: { + parents: 1, + interior: 'Here', + }, + fun: { + Fungible: 5000000000, + }, + }, + }, + remoteAssetSovereignTotalBalance, + }, + }, + } + }, + /// Removes the switch pool + removeSwitchPair() { + return { + assetSwitchPool1: { + switchPair: {}, + }, + } + }, +} + +export const parachainInfo = { + /// Spiritnet ParaId + paraId: 2086, + /// Sibling sovereign account + sovereignAccountOnSiblingChains: '5Eg2fnshxV9kofpcNEFE7azHLAjcCtpNkbsH3kkWZasYUVKs', + + // Native token location from Spiritnet perspective. + HERE: { Concrete: { parents: 0, interior: 'Here' } }, +} diff --git a/integration-tests/chopsticks/src/network/kilt/test_network.ts b/integration-tests/chopsticks/src/network/kilt/test_network.ts new file mode 100644 index 0000000000..abbaff5546 --- /dev/null +++ b/integration-tests/chopsticks/src/network/kilt/test_network.ts @@ -0,0 +1,45 @@ +import type { SetupOption } from '@acala-network/chopsticks-testing' + +import { initialBalanceKILT, toNumber } from '../../helper/utils.js' +import { SetupConfigParameters } from '../types.js' + +/// Options used to create the Peregrine context +export const getSetupOptions = ({ blockNumber = undefined, wasmOverride = undefined }: SetupConfigParameters) => { + const random = (Math.random() + 1).toString(36).substring(7) + return { + endpoint: process.env.PEREGRINE_WS || 'wss://peregrine.kilt.io/parachain-public-ws/', + db: `./db/peregrine_main_${random}.db.sqlite`, + port: toNumber(process.env.PEREGRINE_PORT), + wasmOverride, + blockNumber, + } as SetupOption +} + +export const storage = { + /// Assigns the native tokens to an accounts + assignNativeTokensToAccounts(addr: string[], balance: bigint = initialBalanceKILT) { + return { + System: { + Account: addr.map((address) => [[address], { providers: 1, data: { free: balance } }]), + }, + } + }, + + /// Sets the [technicalCommittee] and [council] governance to the given accounts + setGovernance(addr: string[]) { + return { + technicalCommittee: { Members: addr }, + council: { Members: addr }, + } + }, +} + +export const parachainInfo = { + /// Peregrine ParaId + paraId: 2086, + /// Sibling sovereign account + sovereignAccountOnSiblingChains: '5Eg2fnshxV9kofpcNEFE7azHLAjcCtpNkbsH3kkWZasYUVKs', + + // Native token location from Spiritnet perspective. + HERE: { Concrete: { parents: 0, interior: 'Here' } }, +} diff --git a/integration-tests/chopsticks/src/network/peregrine.ts b/integration-tests/chopsticks/src/network/peregrine.ts deleted file mode 100644 index ed38f4b393..0000000000 --- a/integration-tests/chopsticks/src/network/peregrine.ts +++ /dev/null @@ -1,120 +0,0 @@ -import { SetupOption, setupContext } from '@acala-network/chopsticks-testing' - -import type { Config } from './types.js' -import { ROC, initialBalanceKILT, initialBalanceROC, toNumber } from '../utils.js' -import { AssetSwitchSupplyParameters } from '../types.js' - -/// Options used to create the Peregrine context -const options = { - endpoint: process.env.PEREGRINE_WS || 'wss://peregrine.kilt.io', - db: './db/peregrine.db.sqlite', - port: toNumber(process.env.PEREGRINE_PORT) || 9004, - wasmOverride: process.env.PEREGRINE_WASM_OVERRIDE || undefined, -} as SetupOption - -/// Assigns the native tokens to an accounts -export function assignNativeTokensToAccounts(addr: string[], balance: bigint = initialBalanceKILT) { - return { - System: { - Account: addr.map((address) => [[address], { providers: 1, data: { free: balance } }]), - }, - } -} - -export function setSafeXcmVersion4() { - return { - polkadotXcm: { - safeXcmVersion: 4, - }, - } -} - -export function createAndAssignRocs(manager: string, addr: string[], balance: bigint = initialBalanceROC) { - return { - fungibles: { - asset: [ - [ - [ROC_LOCATION], - { - owner: manager, - issuer: manager, - admin: manager, - freezer: manager, - supply: balance * BigInt(addr.length), - deposit: 0, - minBalance: 1, - isSufficient: false, - accounts: addr.length, - sufficients: 0, - approvals: 0, - status: 'Live', - }, - ], - ], - account: addr.map((acc) => [ - [{ parents: 1, interior: 'here' }, acc], - { balance: balance, status: 'Liquid', reason: 'Consumer', extra: null }, - ]), - }, - } -} - -export function setSudoKey(sudoKey: string) { - return { - Sudo: { - key: sudoKey, - }, - } -} - -export function setSwitchPair( - parameters: AssetSwitchSupplyParameters, - remoteAssetId: Record, - remoteXcmFee: Record, - remoteReserveLocation: Record, - poolAccountId: string = initialPoolAccountId, - status: 'Running' | 'Paused' = 'Running' -) { - return { - assetSwitchPool1: { - SwitchPair: { - poolAccountId, - remoteAssetSovereignTotalBalance: parameters.sovereignSupply, - remoteAssetCirculatingSupply: parameters.circulatingSupply, - remoteAssetTotalSupply: parameters.totalSupply, - remoteAssetId, - remoteXcmFee, - remoteReserveLocation, - status, - }, - }, - // the pool account needs at least as much fund to cover the circulating supply. Give him exactly that amount + ED. - System: { - Account: [[[poolAccountId], { providers: 1, data: { free: parameters.circulatingSupply } }]], - }, - } -} - -/// Peregrine ParaId -export const paraId = 2086 -export const PILT = { Concrete: { parents: 0, interior: 'Here' } } -export const ROC_LOCATION = { - parents: 1, - interior: 'Here', -} -// 0.1 ROC as remote fee -export const remoteFee = ROC / BigInt(10) - -/// Sibling sovereign account for other chains -export const sovereignAccountAsSibling = '5Eg2fnshxV9kofpcNEFE7azHLAjcCtpNkbsH3kkWZasYUVKs' -// ED on Peregrine -export const existentialDeposit = BigInt('10000000000000') - -export const initialPoolAccountId = '4nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS' - -export async function getContext(): Promise { - return setupContext(options) -} - -export const treasuryAccount = '5EYCAe5hitmhtZcXaCrygrqw4kbmJ8bGm15PBuwUdDdQTUgY' -export const parachainStakingRewards = BigInt('760514107536694') diff --git a/integration-tests/chopsticks/src/network/polkadot.ts b/integration-tests/chopsticks/src/network/polkadot.ts deleted file mode 100644 index ebefd9be34..0000000000 --- a/integration-tests/chopsticks/src/network/polkadot.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { setupContext, SetupOption } from '@acala-network/chopsticks-testing' -import type { Config } from './types.js' -import { initialBalanceDOT, toNumber } from '../utils.js' - -/// Options used to create the HydraDx context -export const options: SetupOption = { - endpoint: process.env.POLKADOT_WS || [ - 'wss://rpc.polkadot.io', - 'wss://polkadot-rpc.dwellir.com', - 'wss://rpc.ibp.network/polkadot', - ], - db: './db/polkadot.db.sqlite', - port: toNumber(process.env.POLKADOT_PORT) || 9000, -} - -/// Assigns the native tokens to an accounts -export function assignNativeTokensToAccounts(addr: string[], balance: bigint = initialBalanceDOT) { - return { - System: { - Account: addr.map((address) => [[address], { providers: 1, data: { free: balance } }]), - }, - } -} - -export function removeDisputesAndMessageQueues() { - return { - ParasDisputes: { - // those can makes block building super slow - $removePrefix: ['disputes'], - }, - Dmp: { - // clear existing dmp to avoid impact test result - $removePrefix: ['downwardMessageQueues'], - }, - } -} - -export async function getContext(): Promise { - return setupContext(options) -} diff --git a/integration-tests/chopsticks/src/network/polkadot/index.ts b/integration-tests/chopsticks/src/network/polkadot/index.ts new file mode 100644 index 0000000000..e7f7ca1351 --- /dev/null +++ b/integration-tests/chopsticks/src/network/polkadot/index.ts @@ -0,0 +1,16 @@ +import { Chains } from '../types.js' +import * as Main from './main_network.js' +import * as Test from './test_network.js' + +export const chains: Chains = { + main: { + storage: Main.storage, + getConfig: Main.getSetupOptions, + chainInfo: {}, + }, + test: { + storage: Test.storage, + getConfig: Test.getSetupOptions, + chainInfo: {}, + }, +} diff --git a/integration-tests/chopsticks/src/network/polkadot/main_network.ts b/integration-tests/chopsticks/src/network/polkadot/main_network.ts new file mode 100644 index 0000000000..76c4b25d8c --- /dev/null +++ b/integration-tests/chopsticks/src/network/polkadot/main_network.ts @@ -0,0 +1,44 @@ +import type { SetupOption } from '@acala-network/chopsticks-testing' + +import { initialBalanceDOT, toNumber } from '../../helper/utils.js' +import { SetupConfigParameters } from '../types.js' + +/// Options used to create the Hydration context +export const getSetupOptions = ({ blockNumber = undefined, wasmOverride = undefined }: SetupConfigParameters) => { + const random = (Math.random() + 1).toString(36).substring(7) + return { + endpoint: process.env.POLKADOT_WS || [ + 'wss://rpc.polkadot.io', + 'wss://polkadot-rpc.dwellir.com', + 'wss://rpc.ibp.network/polkadot', + ], + db: `./db/polkadot_main_${random}.db.sqlite`, + port: toNumber(process.env.POLKADOT_PORT), + blockNumber, + wasmOverride, + } as SetupOption +} + +export const storage = { + /// Assigns the native tokens to an accounts + assignNativeTokensToAccounts(addr: string[], balance: bigint = initialBalanceDOT) { + return { + System: { + Account: addr.map((address) => [[address], { providers: 1, data: { free: balance } }]), + }, + } + }, + + removeDisputesAndMessageQueues() { + return { + ParasDisputes: { + // those can makes block building super slow + $removePrefix: ['disputes'], + }, + Dmp: { + // clear existing dmp to avoid impact test result + $removePrefix: ['downwardMessageQueues'], + }, + } + }, +} diff --git a/integration-tests/chopsticks/src/network/polkadot/test_network.ts b/integration-tests/chopsticks/src/network/polkadot/test_network.ts new file mode 100644 index 0000000000..1be1f76713 --- /dev/null +++ b/integration-tests/chopsticks/src/network/polkadot/test_network.ts @@ -0,0 +1,46 @@ +import type { SetupOption } from '@acala-network/chopsticks-testing' + +import { initialBalanceDOT, toNumber } from '../../helper/utils.js' +import { SetupConfigParameters } from '../types.js' + +/// Options used to create the Hydration context +export const getSetupOptions = ({ blockNumber = undefined, wasmOverride = undefined }: SetupConfigParameters) => { + const random = (Math.random() + 1).toString(36).substring(7) + return { + endpoint: process.env.PASEO_WS || ['wss://paseo.rpc.amforc.com', 'wss://rpc.ibp.network/paseo'], + db: `./db/polkadot_test_${random}.db.sqlite`, + port: toNumber(process.env.PASEO_PORT), + blockNumber, + wasmOverride, + } as SetupOption +} + +export const storage = { + /// Assigns the native tokens to an accounts + assignNativeTokensToAccounts(addr: string[], balance: bigint = initialBalanceDOT) { + return { + System: { + Account: addr.map((address) => [[address], { providers: 1, data: { free: balance } }]), + }, + } + }, + assignSudoKey(addr: string) { + return { + Sudo: { + Key: addr, + }, + } + }, + removeDisputesAndMessageQueues() { + return { + ParasDisputes: { + // those can makes block building super slow + $removePrefix: ['disputes'], + }, + Dmp: { + // clear existing dmp to avoid impact test result + $removePrefix: ['downwardMessageQueues'], + }, + } + }, +} diff --git a/integration-tests/chopsticks/src/network/rococo.ts b/integration-tests/chopsticks/src/network/rococo.ts deleted file mode 100644 index 5fde011643..0000000000 --- a/integration-tests/chopsticks/src/network/rococo.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { setupContext, SetupOption } from '@acala-network/chopsticks-testing' -import type { Config } from './types.js' -import { initialBalanceROC, toNumber } from '../utils.js' - -/// Options used to create the HydraDx context -export const options: SetupOption = { - endpoint: process.env.ROCOCO_WS || ['wss://rococo-rpc.polkadot.io'], - db: './db/rococo.db.sqlite', - port: toNumber(process.env.ROCOCO_PORT) || 8999, -} - -/// Assigns the native tokens to an accounts -export function assignNativeTokensToAccounts(addr: string[], balance: bigint = initialBalanceROC) { - return { - System: { - Account: addr.map((address) => [[address], { providers: 1, data: { free: balance } }]), - }, - } -} - -export function setSudoKey(sudo: string) { - return { - Sudo: { - key: sudo, - }, - } -} - -export function removeDisputesAndMessageQueues() { - return { - ParasDisputes: { - // those can makes block building super slow - $removePrefix: ['disputes'], - }, - Dmp: { - // clear existing dmp to avoid impact test result - $removePrefix: ['downwardMessageQueues'], - }, - } -} - -export async function getContext(): Promise { - return setupContext(options) -} diff --git a/integration-tests/chopsticks/src/network/spiritnet.ts b/integration-tests/chopsticks/src/network/spiritnet.ts deleted file mode 100644 index a1530a29dc..0000000000 --- a/integration-tests/chopsticks/src/network/spiritnet.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { setupContext, SetupOption } from '@acala-network/chopsticks-testing' -import type { Config } from './types.js' -import { initialBalanceKILT, toNumber } from '../utils.js' - -/// Options used to create the Spiritnet context -const options: SetupOption = { - endpoint: process.env.SPIRITNET_WS || 'wss://kilt-rpc.dwellir.com', - db: './db/spiritnet.db.sqlite', - port: toNumber(process.env.SPIRITNET_PORT) || 9002, -} - -/// Assigns the native tokens to an accounts -export function assignNativeTokensToAccounts(addr: string[], balance: bigint = initialBalanceKILT) { - return { - System: { - Account: addr.map((address) => [[address], { providers: 1, data: { free: balance } }]), - }, - } -} - -/// Sets the [technicalCommittee] and [council] governance to the given accounts -export function setGovernance(addr: string[]) { - return { - technicalCommittee: { Members: addr }, - council: { Members: addr }, - } -} - -export function XcmPalletSafeVersion3StorageEntry() { - return { - polkadotXcm: { - safeXcmVersion: 3, - }, - } -} - -/// Spiritnet ParaId -export const paraId = 2086 - -/// The sovereign account of HydraDx in Spiritnet -export const hydraDxSovereignAccount = '4qXPdpioJ6D8cgdeYXaukV2Y2oAQUHaX1VnGhdbSRqJn2CBt' - -/// Returns the Spiritnet context for the given options -export async function getContext(): Promise { - return setupContext(options) -} diff --git a/integration-tests/chopsticks/src/network/types.ts b/integration-tests/chopsticks/src/network/types.ts index 0beaed1c3e..3ddf492784 100644 --- a/integration-tests/chopsticks/src/network/types.ts +++ b/integration-tests/chopsticks/src/network/types.ts @@ -1,3 +1,33 @@ -import type { setupContext } from '@acala-network/chopsticks-testing' +import type { SetupOption, setupContext } from '@acala-network/chopsticks-testing' export type Config = Awaited> + +export interface Chain { + getConfig: ({ blockNumber, wasmOverride }: { blockNumber?: number; wasmOverride?: string }) => SetupOption + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + storage: Record Record>> + // eslint-disable-next-line @typescript-eslint/no-explicit-any + chainInfo: Record +} + +export interface Chains { + test?: Chain + main?: Chain +} + +export interface ChainConfig extends Chain { + parameters: { + blockNumber?: number + wasmOverride?: string + } +} + +type chains = 'kilt' | 'polkadot' | 'assetHub' | 'hydration' +/// A Record of all possible chain configurations. +export type ChainConfigs = Record + +export interface SetupConfigParameters { + blockNumber?: number + wasmOverride?: string +} diff --git a/integration-tests/chopsticks/src/network/utils.ts b/integration-tests/chopsticks/src/network/utils.ts index 00fceb46e7..4444a1da17 100644 --- a/integration-tests/chopsticks/src/network/utils.ts +++ b/integration-tests/chopsticks/src/network/utils.ts @@ -1,104 +1,93 @@ -export function getSiblingLocationV3(paraId: number) { - return { - parents: 1, - interior: { - X1: { Parachain: paraId }, - }, - } -} +import { connectParachains, connectVertical } from '@acala-network/chopsticks' +import { setTimeout as setTimeOutPromise } from 'timers/promises' +import { setupContext, SetupOption } from '@acala-network/chopsticks-testing' +import type { Config } from './types.js' +import type { ApiPromise } from '@polkadot/api' -export function getSiblingLocationV4(paraId: number) { - return { - V4: { - parents: 1, - interior: { - X1: [{ Parachain: paraId }], - }, - }, - } +/** + * This function is used to shut down a network composed of multiple chains. + * + * @param {Config[]} chains - An array of chain configurations that make up the network. + * + * @returns {Promise} + * Returns a Promise that resolves when all chains in the network have been successfully shut down. + * + */ +export async function shutDownNetwork(chains: Config[]): Promise { + await setTimeOutPromise(50) + const tearDown = chains.map((chain) => chain?.teardown()) + await Promise.all(tearDown) } - -export function getChildLocation(paraId: number) { - return { - parents: 0, - interior: { - X1: { Parachain: paraId }, - }, - } +const newBlock = async (newBlockConfig: { count: number }, contexts: Config[]) => { + await Promise.all(contexts.map((context) => context.dev.newBlock(newBlockConfig))) } +async function connectNetworks(relayChain: Config, parachains: Config[]) { + await Promise.all(parachains.map((parachain) => connectVertical(relayChain.chain, parachain.chain))) -export function getParentLocation() { - return { - parents: 1, - interior: 'Here', - } -} + await connectParachains(parachains.map((parachain) => parachain.chain)) -export function getAccountLocationV2(addr: string) { - return { - V2: { - parents: 0, - interior: { - X1: { - AccountId32: { - network: 'Any', - id: addr, - }, - }, - }, - }, - } + const newBlockConfig = { count: 2 } + // fixes api runtime disconnect warning + await setTimeOutPromise(50) + // Perform runtime upgrade and establish xcm connections. + await newBlock(newBlockConfig, [relayChain, ...parachains]) } -export function getAccountLocationV3(addr: string) { - return { - V3: { - parents: 0, - interior: { - X1: { - AccountId32: { - id: addr, - }, - }, - }, - }, - } -} +/** + * This function is used to set up a network with a relay chain, a sender, and a receiver. + * + * @param {SetupOption} relayChain - The relay chain option for the network setup. + * @param {SetupOption} parachains - The parachain option for the network setup. + * + * @returns {Promise<{relayChainContext: Config, senderChainContext: Config, receiverChainContext: Config}>} + * An object containing the contexts of the relay chain, sender, and receiver. + */ +export async function setupNetwork( + relayChain: SetupOption, + parachains: SetupOption[] +): Promise<{ relayChainContext: Config; parachainContexts: Config[] }> { + await setTimeOutPromise(50) + const relayChainContext = await setupContext(relayChain) + const parachainContexts = await Promise.all(parachains.map((parachain) => setupContext(parachain))) -export function getAccountLocationV4(addr: string) { - return { - V4: { - parents: 0, - interior: { - X1: [ - { - AccountId32: { - id: addr, - }, - }, - ], - }, - }, - } + await connectNetworks(relayChainContext, parachainContexts) + return { relayChainContext, parachainContexts } } -export function getNativeAssetIdLocationV3(amount: bigint | string) { - return { - id: { Concrete: { parents: 0, interior: 'Here' } }, - fun: { Fungible: amount }, - } +/// Creates a new block for the given context +export async function createBlock(context: Config) { + // fixes api runtime disconnect warning + await setTimeOutPromise(50) + await context.dev.newBlock() } -export function getRelayNativeAssetIdLocationV3(amount: bigint | string) { - return { - id: { Concrete: { parents: 1, interior: 'Here' } }, - fun: { Fungible: amount }, - } +/// sets the storage for the given context. +export async function setStorage(context: Config, storage: Record>) { + await setTimeOutPromise(50) + await context.dev.setStorage(storage) + await createBlock(context) } -export function getRelayNativeAssetIdLocationV4(amount: bigint | string) { - return { - id: { parents: 1, interior: 'Here' }, - fun: { Fungible: amount }, - } +/// Schedules a transaction with root privileges at the given block number. If no block is provided, the transaction will be scheduled for the next block. +export async function scheduleTx({ api }: { api: ApiPromise }, call: string, at = undefined, origin = 'Root') { + const number = at ?? (await api.rpc.chain.getHeader()).number.toNumber() + await api.rpc('dev_setStorage', { + scheduler: { + agenda: [ + [ + [number + 1], + [ + { + call: { + Inline: call, + }, + origin: { + system: origin, + }, + }, + ], + ], + ], + }, + }) } diff --git a/integration-tests/chopsticks/src/setup.ts b/integration-tests/chopsticks/src/setup.ts new file mode 100644 index 0000000000..ae1616f3a0 --- /dev/null +++ b/integration-tests/chopsticks/src/setup.ts @@ -0,0 +1,7 @@ +// peer dependencies can throw unhandled promise rejections. This is a workaround to ignore them. +process.on('unhandledRejection', (reason, promise) => { + // Ignore unhandled promise rejections most likely emitted from peer dependencies + if (!process.env.CI) { + console.warn('Unhandled Rejection:', reason, 'Promise:', promise) + } +}) diff --git a/integration-tests/chopsticks/src/tests/index.ts b/integration-tests/chopsticks/src/tests/index.ts deleted file mode 100644 index ba37c72d67..0000000000 --- a/integration-tests/chopsticks/src/tests/index.ts +++ /dev/null @@ -1,146 +0,0 @@ -import { beforeEach, afterEach } from 'vitest' -import { connectParachains, connectVertical } from '@acala-network/chopsticks' -import { setTimeout } from 'timers/promises' - -import * as SpiritnetConfig from '../network/spiritnet.js' -import * as PolkadotConfig from '../network/polkadot.js' -import * as HydraDxConfig from '../network/hydraDx.js' -import * as AssetHubConfig from '../network/assetHub.js' -import * as RococoConfig from '../network/rococo.js' -import * as BasiliskConfig from '../network/basilisk.js' -import * as PeregrineConfig from '../network/peregrine.js' -import type { Config } from '../network/types.js' - -export let spiritnetContext: Config -export let hydradxContext: Config -export let polkadotContext: Config -export let assethubContext: Config -export let peregrineContext: Config -export let rococoContext: Config -export let basiliskContext: Config - -beforeEach(async () => { - spiritnetContext = await SpiritnetConfig.getContext() - hydradxContext = await HydraDxConfig.getContext() - polkadotContext = await PolkadotConfig.getContext() - assethubContext = await AssetHubConfig.getContext() - rococoContext = await RococoConfig.getContext() - peregrineContext = await PeregrineConfig.getContext() - basiliskContext = await BasiliskConfig.getContext() - - // Setup Polkadot network - await connectVertical(polkadotContext.chain, spiritnetContext.chain) - await connectVertical(polkadotContext.chain, hydradxContext.chain) - await connectVertical(polkadotContext.chain, assethubContext.chain) - await connectParachains([spiritnetContext.chain, hydradxContext.chain, assethubContext.chain]) - - // Setup Rococo network - await connectVertical(rococoContext.chain, assethubContext.chain) - await connectVertical(rococoContext.chain, peregrineContext.chain) - await connectVertical(rococoContext.chain, basiliskContext.chain) - await connectParachains([peregrineContext.chain, basiliskContext.chain, assethubContext.chain]) - - const newBlockConfig = { count: 2 } - // fixes api runtime disconnect warning - await setTimeout(50) - // Perform runtime upgrade and establish xcm connections. - await Promise.all([ - polkadotContext.dev.newBlock(newBlockConfig), - spiritnetContext.dev.newBlock(newBlockConfig), - hydradxContext.dev.newBlock(newBlockConfig), - assethubContext.dev.newBlock(newBlockConfig), - rococoContext.dev.newBlock(newBlockConfig), - peregrineContext.dev.newBlock(newBlockConfig), - basiliskContext.dev.newBlock(newBlockConfig), - ]) -}, 90_000) - -afterEach(async () => { - // fixes api runtime disconnect warning - - try { - await Promise.all([ - spiritnetContext.teardown(), - hydradxContext.teardown(), - polkadotContext.teardown(), - assethubContext.teardown(), - rococoContext.teardown(), - peregrineContext.teardown(), - basiliskContext.teardown(), - ]) - } catch (error) { - if (!(error instanceof TypeError)) { - console.error(error) - } - } - await setTimeout(50) -}) - -export async function getFreeBalanceSpiritnet(account: string): Promise { - const accountInfo = await spiritnetContext.api.query.system.account(account) - return accountInfo.data.free.toBigInt() -} - -export async function getFreeBalancePeregrine(account: string): Promise { - const accountInfo = await peregrineContext.api.query.system.account(account) - return accountInfo.data.free.toBigInt() -} - -export async function getFreeBalancePeregrineAt(account: string, at: number): Promise { - const blockHash = await peregrineContext.api.rpc.chain.getBlockHash(at) - const api = await peregrineContext.api.at(blockHash) - const accountInfo = await api.query.system.account(account) - return accountInfo.data.free.toBigInt() -} - -export async function getCurrentBlockNumber(context: Config): Promise { - const blockNumber = await context.api.query.system.number() - return blockNumber.toNumber() -} - -export async function getFreeRocPeregrine(account: string): Promise { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const accountInfo: any = await peregrineContext.api.query.fungibles.account( - AssetHubConfig.nativeTokenLocation, - account - ) - if (accountInfo.isNone) { - return BigInt(0) - } - return accountInfo.unwrap().balance.toBigInt() -} - -export async function getFreeRocAssetHub(account: string): Promise { - const accountInfo = await assethubContext.api.query.system.account(account) - return accountInfo.data.free.toBigInt() -} - -export async function getRemoteLockedSupply(): Promise { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const switchPairInfo: any = await peregrineContext.api.query.assetSwitchPool1.switchPair() - - if (switchPairInfo.isNone) { - return BigInt(0) - } - - return switchPairInfo.unwrap().remoteAssetSovereignTotalBalance.toBigInt() -} - -export async function getFreeEkiltAssetHub(account: string): Promise { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const accountInfo: any = await assethubContext.api.query.foreignAssets.account( - AssetHubConfig.eKiltLocation, - account - ) - if (accountInfo.isNone) { - return BigInt(0) - } - - return accountInfo.unwrap().balance.toBigInt() -} - -export async function getFreeBalanceHydraDxKilt(account: string): Promise { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const accountInfo: any = await hydradxContext.api.query.tokens.accounts(account, HydraDxConfig.kiltTokenId) - return accountInfo.free.toBigInt() -} diff --git a/integration-tests/chopsticks/src/tests/switchPallet/__snapshots__/fullFlowSwitch.test.ts.snap b/integration-tests/chopsticks/src/tests/switchPallet/__snapshots__/fullFlowSwitch.test.ts.snap deleted file mode 100644 index f2d53fcf32..0000000000 --- a/integration-tests/chopsticks/src/tests/switchPallet/__snapshots__/fullFlowSwitch.test.ts.snap +++ /dev/null @@ -1,80 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`Full e2e tests > receiver Peregrine::assetSwitchPool1::[LocalToRemoteSwitchExecuted] 1`] = ` -[ - { - "data": { - "amount": 50000000000000000, - "from": "4seWojfEHrk5YKPahdErazQ3CWEHZYi6NV4gKz5AaejWbRPJ", - "to": { - "V4": { - "interior": { - "X1": [ - { - "AccountId32": { - "id": "(hash)", - "network": null, - }, - }, - ], - }, - "parents": 0, - }, - }, - }, - "method": "LocalToRemoteSwitchExecuted", - "section": "assetSwitchPool1", - }, -] -`; - -exports[`Full e2e tests > sender AssetHub::foreignAssets::[Transferred] 1`] = ` -[ - { - "data": { - "amount": 50000000000000000, - "assetId": { - "interior": { - "X2": [ - { - "GlobalConsensus": { - "Ethereum": { - "chainId": "(rounded 11000000)", - }, - }, - }, - { - "AccountKey20": { - "key": "0x06012c8cf97bead5deae237070f9587f8e7a266d", - "network": null, - }, - }, - ], - }, - "parents": 2, - }, - "from": "15jSz35ugoWTc61xHPoxEkHte4o7UanKCk1gx1dizA8yuNs8", - "to": "13cKp88mpGREFCq8KsJEFjpSBnjFuCNWq6bmD3js7fu4f66e", - }, - "method": "Transferred", - "section": "foreignAssets", - }, -] -`; - -exports[`Full e2e tests > sender Peregrine::fungibles::[Burned] 1`] = ` -[ - { - "data": { - "assetId": { - "interior": "Here", - "parents": 1, - }, - "balance": 1000000000000, - "owner": "4seWojfEHrk5YKPahdErazQ3CWEHZYi6NV4gKz5AaejWbRPJ", - }, - "method": "Burned", - "section": "fungibles", - }, -] -`; diff --git a/integration-tests/chopsticks/src/tests/switchPallet/__snapshots__/pauseSwitch.test.ts.snap b/integration-tests/chopsticks/src/tests/switchPallet/__snapshots__/pauseSwitch.test.ts.snap deleted file mode 100644 index 5463ee5c7c..0000000000 --- a/integration-tests/chopsticks/src/tests/switchPallet/__snapshots__/pauseSwitch.test.ts.snap +++ /dev/null @@ -1,170 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`Send ROCs while switch paused > receiver Peregrine::messageQueue::[Processed] 1`] = ` -[ - { - "data": { - "id": "(hash)", - "origin": { - "Sibling": 1000, - }, - "success": false, - "weightUsed": { - "proofSize": 0, - "refTime": 600000000, - }, - }, - "method": "Processed", - "section": "messageQueue", - }, -] -`; - -exports[`Send ROCs while switch paused > receiver Peregrine::polkadotXcm::[AssetsTrapped] 1`] = ` -[ - { - "data": { - "assets": { - "V4": [ - { - "fun": { - "Fungible": 1000000000000, - }, - "id": { - "interior": "Here", - "parents": 1, - }, - }, - ], - }, - "hash_": "(hash)", - "origin": { - "interior": { - "X1": [ - { - "Parachain": 1000, - }, - ], - }, - "parents": 1, - }, - }, - "method": "AssetsTrapped", - "section": "polkadotXcm", - }, -] -`; - -exports[`Switch ePILTs against PILTs while paused > receiver Peregrine::messageQueue::[Processed] 1`] = ` -[ - { - "data": { - "id": "(hash)", - "origin": { - "Sibling": 1000, - }, - "success": false, - "weightUsed": { - "proofSize": 0, - "refTime": 600000000, - }, - }, - "method": "Processed", - "section": "messageQueue", - }, - { - "data": { - "id": "(hash)", - "origin": { - "Sibling": 1000, - }, - "success": true, - "weightUsed": { - "proofSize": 0, - "refTime": 400000000, - }, - }, - "method": "Processed", - "section": "messageQueue", - }, -] -`; - -exports[`Switch ePILTs against PILTs while paused > receiver Peregrine::polkadotXcm::[AssetsTrapped] 1`] = ` -[ - { - "data": { - "assets": { - "V4": [ - { - "fun": { - "Fungible": 25000000000000000, - }, - "id": { - "interior": { - "X2": [ - { - "GlobalConsensus": { - "Ethereum": { - "chainId": "(rounded 11000000)", - }, - }, - }, - { - "AccountKey20": { - "key": "0x06012c8cf97bead5deae237070f9587f8e7a266d", - "network": null, - }, - }, - ], - }, - "parents": 2, - }, - }, - ], - }, - "hash_": "(hash)", - "origin": { - "interior": { - "X1": [ - { - "Parachain": 1000, - }, - ], - }, - "parents": 1, - }, - }, - "method": "AssetsTrapped", - "section": "polkadotXcm", - }, -] -`; - -exports[`Switch ePILTs against PILTs while paused > sender Peregrine::assetSwitchPool1::[LocalToRemoteSwitchExecuted] 1`] = ` -[ - { - "data": { - "amount": 50000000000000000, - "from": "4seWojfEHrk5YKPahdErazQ3CWEHZYi6NV4gKz5AaejWbRPJ", - "to": { - "V4": { - "interior": { - "X1": [ - { - "AccountId32": { - "id": "(hash)", - "network": null, - }, - }, - ], - }, - "parents": 0, - }, - }, - }, - "method": "LocalToRemoteSwitchExecuted", - "section": "assetSwitchPool1", - }, -] -`; diff --git a/integration-tests/chopsticks/src/tests/switchPallet/__snapshots__/relayToken.test.ts.snap b/integration-tests/chopsticks/src/tests/switchPallet/__snapshots__/relayToken.test.ts.snap deleted file mode 100644 index ddfd6434f9..0000000000 --- a/integration-tests/chopsticks/src/tests/switchPallet/__snapshots__/relayToken.test.ts.snap +++ /dev/null @@ -1,60 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`Send DOTs from basilisk 2 Peregrine > receiver Peregrine::messageQueue::[ProcessingFailed] 1`] = ` -[ - { - "data": { - "error": "Unsupported", - "id": "(hash)", - "origin": "Parent", - }, - "method": "ProcessingFailed", - "section": "messageQueue", - }, -] -`; - -exports[`User gets dusted with ROCs > local Peregrine::balances::[Transfer] native asset 1`] = ` -[ - { - "data": { - "amount": "(rounded 100000000000000000)", - "from": "4seWojfEHrk5YKPahdErazQ3CWEHZYi6NV4gKz5AaejWbRPJ", - "to": "4rsmbFBYpVmWE2LHRsSZKxf22a8cbJLxMZqvVGkGkSDmDBcr", - }, - "method": "Transfer", - "section": "balances", - }, -] -`; - -exports[`User gets dusted with ROCs > local balances::fungibles::[DustLost] 1`] = ` -[ - { - "data": { - "account": "4seWojfEHrk5YKPahdErazQ3CWEHZYi6NV4gKz5AaejWbRPJ", - "amount": "(rounded 51000000000)", - }, - "method": "DustLost", - "section": "balances", - }, -] -`; - -exports[`User transfers all of his dots > local Peregrine::fungibles::[Transferred] asset {"parents":1,"interior":"Here"} 1`] = ` -[ - { - "data": { - "amount": 100000000000000, - "assetId": { - "interior": "Here", - "parents": 1, - }, - "from": "4seWojfEHrk5YKPahdErazQ3CWEHZYi6NV4gKz5AaejWbRPJ", - "to": "4rsmbFBYpVmWE2LHRsSZKxf22a8cbJLxMZqvVGkGkSDmDBcr", - }, - "method": "Transferred", - "section": "fungibles", - }, -] -`; diff --git a/integration-tests/chopsticks/src/tests/switchPallet/__snapshots__/switchConfig.test.ts.snap b/integration-tests/chopsticks/src/tests/switchPallet/__snapshots__/switchConfig.test.ts.snap deleted file mode 100644 index fb1339c946..0000000000 --- a/integration-tests/chopsticks/src/tests/switchPallet/__snapshots__/switchConfig.test.ts.snap +++ /dev/null @@ -1,71 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`Send eKILT from other reserve location > receiver Peregrine::messageQueue::[Processed] 1`] = ` -[ - { - "data": { - "error": "Unsupported", - "id": "(hash)", - "origin": "Parent", - }, - "method": "ProcessingFailed", - "section": "messageQueue", - }, -] -`; - -exports[`Send eKILT while switch Pair does not exist > receiver Peregrine::messageQueue::[Processed] 1`] = `[]`; - -exports[`Switch KILTs against EKILTs no enough DOTs on AH > sender Peregrine::assetSwitchPool1::[LocalToRemoteSwitchExecuted] 1`] = ` -[ - { - "data": { - "amount": 50000000000000000, - "from": "4seWojfEHrk5YKPahdErazQ3CWEHZYi6NV4gKz5AaejWbRPJ", - "to": { - "V4": { - "interior": { - "X1": [ - { - "AccountId32": { - "id": "(hash)", - "network": null, - }, - }, - ], - }, - "parents": 0, - }, - }, - }, - "method": "LocalToRemoteSwitchExecuted", - "section": "assetSwitchPool1", - }, -] -`; - -exports[`Switch KILTs against EKILTs no enough DOTs on AH > sender Peregrine::balances::[Transfer] 1`] = ` -[ - { - "data": { - "amount": 50000000000000000, - "from": "4seWojfEHrk5YKPahdErazQ3CWEHZYi6NV4gKz5AaejWbRPJ", - "to": "4nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS", - }, - "method": "Transfer", - "section": "balances", - }, -] -`; - -exports[`Switch KILTs against EKILTs no enough DOTs on AH > sender Peregrine::xcmpQueue::[XcmpMessageSent] 1`] = ` -[ - { - "data": { - "messageHash": "(hash)", - }, - "method": "XcmpMessageSent", - "section": "xcmpQueue", - }, -] -`; diff --git a/integration-tests/chopsticks/src/tests/switchPallet/__snapshots__/switchEkiltAgainstKilt.test.ts.snap b/integration-tests/chopsticks/src/tests/switchPallet/__snapshots__/switchEkiltAgainstKilt.test.ts.snap deleted file mode 100644 index 6165544554..0000000000 --- a/integration-tests/chopsticks/src/tests/switchPallet/__snapshots__/switchEkiltAgainstKilt.test.ts.snap +++ /dev/null @@ -1,57 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`Switch ePILTs against PILTS on Peregrine > receiver Peregrine::assetSwitchPool1::[RemoteToLocalSwitchExecuted] 1`] = ` -[ - { - "data": { - "amount": "(rounded 50000000000000000)", - "to": "4seWojfEHrk5YKPahdErazQ3CWEHZYi6NV4gKz5AaejWbRPJ", - }, - "method": "RemoteToLocalSwitchExecuted", - "section": "assetSwitchPool1", - }, -] -`; - -exports[`Switch ePILTs against PILTS on Peregrine > receiver Peregrine::balances::[Transfer] 1`] = ` -[ - { - "data": { - "amount": "(rounded 50000000000000000)", - "from": "4nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS", - "to": "4seWojfEHrk5YKPahdErazQ3CWEHZYi6NV4gKz5AaejWbRPJ", - }, - "method": "Transfer", - "section": "balances", - }, - { - "data": { - "amount": "(rounded 35000)", - "from": "4nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS", - "to": "4qPZ8fv6BjGoGKzfx5LtBFnEUp2b5Q5C1ErrjBNGmoFTLNHG", - }, - "method": "Transfer", - "section": "balances", - }, -] -`; - -exports[`Switch ePILTs against PILTS on Peregrine > receiver Peregrine::messageQueue::[Processed] 1`] = ` -[ - { - "data": { - "id": "(hash)", - "origin": { - "Sibling": 1000, - }, - "success": true, - "weightUsed": { - "proofSize": 0, - "refTime": 1000000000, - }, - }, - "method": "Processed", - "section": "messageQueue", - }, -] -`; diff --git a/integration-tests/chopsticks/src/tests/switchPallet/__snapshots__/switchKiltAgainstEkilt.test.ts.snap b/integration-tests/chopsticks/src/tests/switchPallet/__snapshots__/switchKiltAgainstEkilt.test.ts.snap deleted file mode 100644 index 4fd48a532a..0000000000 --- a/integration-tests/chopsticks/src/tests/switchPallet/__snapshots__/switchKiltAgainstEkilt.test.ts.snap +++ /dev/null @@ -1,55 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`Switch PILTs against ePILTS on AssetHub > sender Peregrine::assetSwitchPool1::[LocalToRemoteSwitchExecuted] 1`] = ` -[ - { - "data": { - "amount": 50000000000000000, - "from": "4seWojfEHrk5YKPahdErazQ3CWEHZYi6NV4gKz5AaejWbRPJ", - "to": { - "V4": { - "interior": { - "X1": [ - { - "AccountId32": { - "id": "(hash)", - "network": null, - }, - }, - ], - }, - "parents": 0, - }, - }, - }, - "method": "LocalToRemoteSwitchExecuted", - "section": "assetSwitchPool1", - }, -] -`; - -exports[`Switch PILTs against ePILTS on AssetHub > sender Peregrine::balances::[Transfer] 1`] = ` -[ - { - "data": { - "amount": 50000000000000000, - "from": "4seWojfEHrk5YKPahdErazQ3CWEHZYi6NV4gKz5AaejWbRPJ", - "to": "4nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS", - }, - "method": "Transfer", - "section": "balances", - }, -] -`; - -exports[`Switch PILTs against ePILTS on AssetHub > sender Peregrine::xcmpQueue::[XcmpMessageSent] 1`] = ` -[ - { - "data": { - "messageHash": "(hash)", - }, - "method": "XcmpMessageSent", - "section": "xcmpQueue", - }, -] -`; diff --git a/integration-tests/chopsticks/src/tests/switchPallet/__snapshots__/trappedAssets.test.ts.snap b/integration-tests/chopsticks/src/tests/switchPallet/__snapshots__/trappedAssets.test.ts.snap deleted file mode 100644 index 37b38d58bd..0000000000 --- a/integration-tests/chopsticks/src/tests/switchPallet/__snapshots__/trappedAssets.test.ts.snap +++ /dev/null @@ -1,189 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`Trapped assets > receiver Peregrine::assetSwitchPool1::[RemoteToLocalSwitchExecuted] 1`] = ` -[ - { - "data": { - "amount": 1000000000000000, - "to": "4seWojfEHrk5YKPahdErazQ3CWEHZYi6NV4gKz5AaejWbRPJ", - }, - "method": "RemoteToLocalSwitchExecuted", - "section": "assetSwitchPool1", - }, -] -`; - -exports[`Trapped assets > receiver Peregrine::messageQueue::[Processed] 1`] = ` -[ - { - "data": { - "id": "(hash)", - "origin": { - "Sibling": 1000, - }, - "success": false, - "weightUsed": { - "proofSize": 0, - "refTime": 600000000, - }, - }, - "method": "Processed", - "section": "messageQueue", - }, -] -`; - -exports[`Trapped assets > receiver Peregrine::messageQueue::[Processed] 2`] = ` -[ - { - "data": { - "id": "(hash)", - "origin": { - "Sibling": 1000, - }, - "success": true, - "weightUsed": { - "proofSize": 0, - "refTime": 400000000, - }, - }, - "method": "Processed", - "section": "messageQueue", - }, - { - "data": { - "id": "(hash)", - "origin": { - "Sibling": 1000, - }, - "success": true, - "weightUsed": { - "proofSize": 0, - "refTime": 1000000000, - }, - }, - "method": "Processed", - "section": "messageQueue", - }, -] -`; - -exports[`Trapped assets > receiver Peregrine::polkadotXcm::[AssetsClaimed] 1`] = ` -[ - { - "data": { - "cost": [], - "destination": { - "interior": { - "X1": [ - { - "Parachain": 1000, - }, - ], - }, - "parents": 1, - }, - "messageId": "(hash)", - }, - "method": "VersionNotifyStarted", - "section": "polkadotXcm", - }, - { - "data": { - "assets": { - "V4": [ - { - "fun": { - "Fungible": 1000000000000000, - }, - "id": { - "interior": { - "X2": [ - { - "GlobalConsensus": { - "Ethereum": { - "chainId": "(rounded 11000000)", - }, - }, - }, - { - "AccountKey20": { - "key": "0x06012c8cf97bead5deae237070f9587f8e7a266d", - "network": null, - }, - }, - ], - }, - "parents": 2, - }, - }, - ], - }, - "hash_": "(hash)", - "origin": { - "interior": { - "X1": [ - { - "Parachain": 1000, - }, - ], - }, - "parents": 1, - }, - }, - "method": "AssetsClaimed", - "section": "polkadotXcm", - }, -] -`; - -exports[`Trapped assets > receiver Peregrine::polkadotXcm::[AssetsTrapped] 1`] = ` -[ - { - "data": { - "assets": { - "V4": [ - { - "fun": { - "Fungible": 1000000000000000, - }, - "id": { - "interior": { - "X2": [ - { - "GlobalConsensus": { - "Ethereum": { - "chainId": "(rounded 11000000)", - }, - }, - }, - { - "AccountKey20": { - "key": "0x06012c8cf97bead5deae237070f9587f8e7a266d", - "network": null, - }, - }, - ], - }, - "parents": 2, - }, - }, - ], - }, - "hash_": "(hash)", - "origin": { - "interior": { - "X1": [ - { - "Parachain": 1000, - }, - ], - }, - "parents": 1, - }, - }, - "method": "AssetsTrapped", - "section": "polkadotXcm", - }, -] -`; diff --git a/integration-tests/chopsticks/src/tests/switchPallet/fullFlow/__snapshots__/index.test.ts.snap b/integration-tests/chopsticks/src/tests/switchPallet/fullFlow/__snapshots__/index.test.ts.snap new file mode 100644 index 0000000000..090de3590f --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/fullFlow/__snapshots__/index.test.ts.snap @@ -0,0 +1,444 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`Switch KILTs full flow > V4 LIVE > Receive foreign funds on foreign chain {"section":"balances","method":"Burned"} 1`] = ` +[ + { + "data": { + "amount": 1000000000, + "who": "13cKp88mpGREFCq8KsJEFjpSBnjFuCNWq6bmD3js7fu4f66e", + }, + "method": "Burned", + "section": "balances", + }, +] +`; + +exports[`Switch KILTs full flow > V4 LIVE > Receive foreign funds on foreign chain {"section":"balances","method":"Minted"} 1`] = ` +[ + { + "data": { + "amount": "(rounded 960000000)", + "who": "15jSz35ugoWTc61xHPoxEkHte4o7UanKCk1gx1dizA8yuNs8", + }, + "method": "Minted", + "section": "balances", + }, +] +`; + +exports[`Switch KILTs full flow > V4 LIVE > Receive native funds on foreign chain {"section":"balances","method":"Burned"} 1`] = ` +[ + { + "data": { + "amount": 5000000000, + "who": "13cKp88mpGREFCq8KsJEFjpSBnjFuCNWq6bmD3js7fu4f66e", + }, + "method": "Burned", + "section": "balances", + }, +] +`; + +exports[`Switch KILTs full flow > V4 LIVE > Receive native funds on foreign chain {"section":"balances","method":"Minted"} 1`] = ` +[ + { + "data": { + "amount": "(rounded 300000000)", + "who": "14xmwinmCEz6oRrFdczHKqHgWNMiCysE2KrA4jXXAAM1Eogk", + }, + "method": "Minted", + "section": "balances", + }, + { + "data": { + "amount": "(rounded 4600000000)", + "who": "15jSz35ugoWTc61xHPoxEkHte4o7UanKCk1gx1dizA8yuNs8", + }, + "method": "Minted", + "section": "balances", + }, +] +`; + +exports[`Switch KILTs full flow > V4 LIVE > Receive native funds on native chain {"section":"assetSwitchPool1","method":"RemoteToLocalSwitchExecuted"} 1`] = ` +[ + { + "data": { + "amount": "(rounded 500000000000000)", + "to": "4seWojfEHrk5YKPahdErazQ3CWEHZYi6NV4gKz5AaejWbRPJ", + }, + "method": "RemoteToLocalSwitchExecuted", + "section": "assetSwitchPool1", + }, +] +`; + +exports[`Switch KILTs full flow > V4 LIVE > Transfer native funds to foreign chain {"section":"assetSwitchPool1","method":"LocalToRemoteSwitchExecuted"} 1`] = ` +[ + { + "data": { + "amount": 1000000000000000, + "from": "4seWojfEHrk5YKPahdErazQ3CWEHZYi6NV4gKz5AaejWbRPJ", + "to": { + "V4": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": null, + }, + }, + ], + }, + "parents": 0, + }, + }, + }, + "method": "LocalToRemoteSwitchExecuted", + "section": "assetSwitchPool1", + }, +] +`; + +exports[`Switch KILTs full flow > V4 LIVE > Transfer native funds to foreign chain {"section":"fungibles","method":"Burned"} 1`] = ` +[ + { + "data": { + "assetId": { + "interior": "Here", + "parents": 1, + }, + "balance": 5000000000, + "owner": "4seWojfEHrk5YKPahdErazQ3CWEHZYi6NV4gKz5AaejWbRPJ", + }, + "method": "Burned", + "section": "fungibles", + }, +] +`; + +exports[`Switch KILTs full flow > V4 LIVE > Withdraw foreign funds on native chain "fungibles" 1`] = ` +[ + { + "data": { + "assetId": { + "interior": "Here", + "parents": 1, + }, + "balance": 1000000000, + "owner": "4seWojfEHrk5YKPahdErazQ3CWEHZYi6NV4gKz5AaejWbRPJ", + }, + "method": "Burned", + "section": "fungibles", + }, +] +`; + +exports[`Switch KILTs full flow > V4 LIVE > Withdraw foreign funds on native chain {"section":"polkadotXcm","method":"Sent"} 1`] = ` +[ + { + "data": { + "destination": { + "interior": { + "X1": [ + { + "Parachain": 1000, + }, + ], + }, + "parents": 1, + }, + "message": [ + { + "WithdrawAsset": [ + { + "fun": { + "Fungible": 1000000000, + }, + "id": { + "interior": "Here", + "parents": 1, + }, + }, + ], + }, + "ClearOrigin", + { + "BuyExecution": { + "fees": { + "fun": { + "Fungible": 1000000000, + }, + "id": { + "interior": "Here", + "parents": 1, + }, + }, + "weightLimit": "Unlimited", + }, + }, + { + "DepositAsset": { + "assets": { + "Wild": { + "AllCounted": 1, + }, + }, + "beneficiary": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": null, + }, + }, + ], + }, + "parents": 0, + }, + }, + }, + ], + "messageId": "(hash)", + "origin": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": "Polkadot", + }, + }, + ], + }, + "parents": 0, + }, + }, + "method": "Sent", + "section": "polkadotXcm", + }, +] +`; + +exports[`Switch KILTs full flow > V4 LIVE > Withdraw native funds on foreign chain {"section":"polkadotXcm","method":"Sent"} 1`] = ` +[ + { + "data": { + "destination": { + "interior": { + "X1": [ + { + "Parachain": "(rounded 2100)", + }, + ], + }, + "parents": 1, + }, + "message": [ + { + "ReserveAssetDeposited": [ + { + "fun": { + "Fungible": 500000000000000, + }, + "id": { + "interior": { + "X2": [ + { + "GlobalConsensus": { + "Ethereum": { + "chainId": 1, + }, + }, + }, + { + "AccountKey20": { + "key": "0x5d3d01fd6d2ad1169b17918eb4f153c6616288eb", + "network": null, + }, + }, + ], + }, + "parents": 2, + }, + }, + ], + }, + "ClearOrigin", + { + "BuyExecution": { + "fees": { + "fun": { + "Fungible": 500000000000000, + }, + "id": { + "interior": { + "X2": [ + { + "GlobalConsensus": { + "Ethereum": { + "chainId": 1, + }, + }, + }, + { + "AccountKey20": { + "key": "0x5d3d01fd6d2ad1169b17918eb4f153c6616288eb", + "network": null, + }, + }, + ], + }, + "parents": 2, + }, + }, + "weightLimit": "Unlimited", + }, + }, + { + "DepositAsset": { + "assets": { + "Wild": "All", + }, + "beneficiary": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": null, + }, + }, + ], + }, + "parents": 0, + }, + }, + }, + ], + "messageId": "(hash)", + "origin": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": "Polkadot", + }, + }, + ], + }, + "parents": 0, + }, + }, + "method": "Sent", + "section": "polkadotXcm", + }, +] +`; + +exports[`Switch KILTs full flow > V4 LIVE > receive foreign funds on native chain {"section":"fungibles","method":"Issued"} 1`] = ` +[ + { + "data": { + "amount": "(rounded 10000000000)", + "assetId": { + "interior": "Here", + "parents": 1, + }, + "owner": "4seWojfEHrk5YKPahdErazQ3CWEHZYi6NV4gKz5AaejWbRPJ", + }, + "method": "Issued", + "section": "fungibles", + }, +] +`; + +exports[`Switch KILTs full flow > V4 LIVE > transfer foreign funds from foreign chain {"section":"polkadotXcm","method":"Sent"} 1`] = ` +[ + { + "data": { + "destination": { + "interior": { + "X1": [ + { + "Parachain": "(rounded 2100)", + }, + ], + }, + "parents": 1, + }, + "message": [ + { + "ReserveAssetDeposited": [ + { + "fun": { + "Fungible": 10000000000, + }, + "id": { + "interior": "Here", + "parents": 1, + }, + }, + ], + }, + "ClearOrigin", + { + "BuyExecution": { + "fees": { + "fun": { + "Fungible": 10000000000, + }, + "id": { + "interior": "Here", + "parents": 1, + }, + }, + "weightLimit": "Unlimited", + }, + }, + { + "DepositAsset": { + "assets": { + "Wild": { + "AllCounted": 1, + }, + }, + "beneficiary": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": null, + }, + }, + ], + }, + "parents": 0, + }, + }, + }, + ], + "messageId": "(hash)", + "origin": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": "Polkadot", + }, + }, + ], + }, + "parents": 0, + }, + }, + "method": "Sent", + "section": "polkadotXcm", + }, +] +`; diff --git a/integration-tests/chopsticks/src/tests/switchPallet/fullFlow/config.ts b/integration-tests/chopsticks/src/tests/switchPallet/fullFlow/config.ts new file mode 100644 index 0000000000..9cb27fc528 --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/fullFlow/config.ts @@ -0,0 +1,194 @@ +import type { EventFilter } from '@acala-network/chopsticks-testing' +import type { ApiPromise } from '@polkadot/api' +import type { SubmittableExtrinsic } from '@polkadot/api/types' +import type { KeyringPair } from '@polkadot/keyring/types' + +import { initialBalanceKILT, keysAlice, keysBob } from '../../../helper/utils.js' +import { mainChains } from '../../../network/index.js' +import { tx, query } from '../../../helper/api.js' +import { getXcmMessageV4ToSendEkilt } from '../index.js' +import type { BasicConfig } from '../../types.js' + +interface QueryFunds { + nativeFunds: ({ api }: { api: ApiPromise }, address: string) => Promise + // eslint-disable-next-line @typescript-eslint/no-explicit-any + foreignFunds: ({ api }: { api: ApiPromise }, address: string) => Promise +} + +interface Query { + native: QueryFunds + foreign: QueryFunds +} + +interface Transactions { + native: { + // tx to send the funds from the native chain to the foreign chain + transfer: ({ api }: { api: ApiPromise }, submitter: string, amount: string) => SubmittableExtrinsic<'promise'> + // tx to withdraw the funds from the foreign chain to the native chain + withdraw: ({ api }: { api: ApiPromise }, amount: string) => SubmittableExtrinsic<'promise'> + } + foreign: { + // tx to send the funds from the foreign chain to the native chain + transfer: ( + { api }: { api: ApiPromise }, + beneficiary: string, + amount: string | number + ) => SubmittableExtrinsic<'promise'> + // tx to withdraw the funds from the native chain to the foreign chain + withdraw: ( + { api }: { api: ApiPromise }, + submitter: string, + amount: string | number + ) => SubmittableExtrinsic<'promise'> + } +} + +interface Events { + // events to check after the transaction on the native chain + native: { + // events after transferring the native funds to the foreign chain + transfer: EventFilter[] + // events after transferring the foreign funds from the native chain to the foreign chain + withdraw: EventFilter[] + // events after receiving the native funds from the foreign chain + receive: { + // events after receiving the native funds from the foreign chain + native: EventFilter[] + // events after receiving the foreign funds from the foreign chain + foreign: EventFilter[] + } + } + // events to check after the transaction on the foreign chain + foreign: { + // events after transferring the foreign funds to the native chain + transfer: EventFilter[] + // events after transferring the native funds from the foreign chain to the native chain + withdraw: EventFilter[] + receive: { + // events after receiving the native funds from the native chain on the foreign chain + native: EventFilter[] + // events after receiving the foreign funds from the native chain on the foreign chain + foreign: EventFilter[] + } + } +} + +interface TxContext { + // amount of funds to transfer + balanceToTransfer: { + // amount of native currency to transfer + native: bigint + // amount of foreign currency to transfer + foreign: bigint + } + // transactions to execute + tx: Transactions + // events to check after the transaction + events: Events +} + +interface TestConfiguration { + config: BasicConfig + query: Query + txContext: TxContext + // account to use for the transactions + account: KeyringPair + // Kilt sovereign account used for invariant checks. + sovereignAccount: string +} + +export const testCases: TestConfiguration[] = [ + { + config: { + desc: 'V4 LIVE', + network: { + relay: { option: mainChains.polkadot.getConfig({}), setUpTx: [], storage: {} }, + parachains: [ + { + option: mainChains.kilt.getConfig({}), + storage: mainChains.kilt.storage.assignNativeTokensToAccounts( + [keysAlice.address], + initialBalanceKILT + ), + setUpTx: [], + }, + + { + option: mainChains.assetHub.getConfig({}), + storage: { + // Assign some coins to create the account. + ...mainChains.assetHub.storage.assignNativeTokensToAccountsAsStorage([keysAlice.address]), + // Create the eKilts. + ...mainChains.assetHub.storage.createForeignAsset(keysBob.address), + }, + setUpTx: [], + }, + ], + }, + }, + account: keysAlice, + query: { + native: { + nativeFunds: query.balances, + foreignFunds: query.fungibles(mainChains.assetHub.chainInfo.nativeTokenLocation), + }, + foreign: { + nativeFunds: query.balances, + foreignFunds: query.foreignAssets(mainChains.assetHub.chainInfo.eKiltLocation), + }, + }, + txContext: { + tx: { + native: { + transfer: tx.switchPallet.switchV4(), + withdraw: tx.xcmPallet.transferAssetsUsingTypeAndThenV4( + tx.xcmPallet.parachainV4(1, mainChains.kilt.chainInfo.paraId), + mainChains.assetHub.chainInfo.eKiltLocation, + getXcmMessageV4ToSendEkilt(keysAlice.address) + ), + }, + foreign: { + transfer: tx.xcmPallet.limitedReserveTransferAssetsV4( + mainChains.assetHub.chainInfo.nativeTokenLocation, + tx.xcmPallet.parachainV4(1, mainChains.kilt.chainInfo.paraId) + ), + withdraw: tx.xcmPallet.transferAssetsV4( + tx.xcmPallet.parachainV4(1, mainChains.assetHub.chainInfo.paraId), + mainChains.assetHub.chainInfo.nativeTokenLocation + ), + }, + }, + events: { + native: { + transfer: [ + { section: 'assetSwitchPool1', method: 'LocalToRemoteSwitchExecuted' }, + { section: 'fungibles', method: 'Burned' }, + ], + + receive: { + native: [{ section: 'assetSwitchPool1', method: 'RemoteToLocalSwitchExecuted' }], + foreign: [{ section: 'fungibles', method: 'Issued' }], + }, + withdraw: [{ section: 'polkadotXcm', method: 'Sent' }, 'fungibles'], + }, + + foreign: { + transfer: [{ section: 'polkadotXcm', method: 'Sent' }], + receive: { + foreign: ['foreignAssets'], + native: [ + { section: 'balances', method: 'Burned' }, + { section: 'balances', method: 'Minted' }, + ], + }, + withdraw: [{ section: 'polkadotXcm', method: 'Sent' }], + }, + }, + balanceToTransfer: { + native: BigInt(1e15), + foreign: BigInt(1e10), + }, + }, + sovereignAccount: mainChains.kilt.chainInfo.sovereignAccountOnSiblingChains, + }, +] as const diff --git a/integration-tests/chopsticks/src/tests/switchPallet/fullFlow/index.test.ts b/integration-tests/chopsticks/src/tests/switchPallet/fullFlow/index.test.ts new file mode 100644 index 0000000000..cfcc38cc7e --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/fullFlow/index.test.ts @@ -0,0 +1,228 @@ +import { describe, beforeEach, it, afterEach } from 'vitest' +import { sendTransaction, withExpect } from '@acala-network/chopsticks-testing' +import type { KeyringPair } from '@polkadot/keyring/types' + +import { createBlock } from '../../../network/utils.js' +import { calculateTxFees, getPaidXcmFees, hexAddress } from '../../../helper/utils.js' +import { testCases } from './config.js' +import { Config } from '../../../network/types.js' +import { checkSwitchPalletInvariant } from '../index.js' +import { spinUpNetwork, tearDownNetwork } from '../../utils.js' + +describe.each(testCases)( + 'Switch KILTs full flow', + + ({ account, query, txContext, config, sovereignAccount }) => { + let nativeContext: Config + let foreignContext: Config + let relayContext: Config + let senderAccount: KeyringPair + const { desc } = config + + // Create the network context + beforeEach(async () => { + const { parachainContexts, relayChainContext } = await spinUpNetwork(config) + nativeContext = parachainContexts[0] + foreignContext = parachainContexts[1] + relayContext = relayChainContext + senderAccount = account + }) + + // Shut down the network + afterEach(async () => await tearDownNetwork([nativeContext, foreignContext, relayContext])) + + it(desc, async ({ expect }) => { + const { checkEvents, checkSystemEvents } = withExpect(expect) + const { tx, balanceToTransfer, events } = txContext + const foreignFundsBeforeTx = await query.foreign.nativeFunds(foreignContext, senderAccount.address) + + //action + // 1. send foreign tokens from foreign chain to native chain + const txSendForeignAsset = tx.foreign.transfer( + foreignContext, + hexAddress(senderAccount.address), + balanceToTransfer.foreign.toString() + ) + + const events1 = await sendTransaction(txSendForeignAsset.signAsync(senderAccount)) + + // process tx + await createBlock(foreignContext) + // process xcm message + await createBlock(nativeContext) + + // check balance movement + const txFees = await calculateTxFees(txSendForeignAsset, senderAccount) + + const foreignFundsAfterTx = await query.foreign.nativeFunds(foreignContext, senderAccount.address) + + const xcmFees = await getPaidXcmFees(foreignContext.api, await events1.events) + + expect(foreignFundsBeforeTx - balanceToTransfer.foreign - txFees - xcmFees).toBe(foreignFundsAfterTx) + + // check events + await Promise.all( + events.foreign.transfer.map((pallet) => + checkEvents(events1, pallet).toMatchSnapshot( + `transfer foreign funds from foreign chain ${JSON.stringify(pallet)}` + ) + ) + ) + + await Promise.all( + events.native.receive.foreign.map((pallet) => + checkSystemEvents(nativeContext, pallet).toMatchSnapshot( + `receive foreign funds on native chain ${JSON.stringify(pallet)}` + ) + ) + ) + + // 2. send native tokens + const nativeBalanceBeforeTx = await query.native.nativeFunds(nativeContext, senderAccount.address) + + // Send funds from native to foreign chainbalanceToTransferBackForeignparaId + const txSendNativeAsset = tx.native.transfer( + nativeContext, + hexAddress(senderAccount.address), + balanceToTransfer.native.toString() + ) + + const events2 = await sendTransaction(txSendNativeAsset.signAsync(senderAccount)) + // process tx + await createBlock(nativeContext) + // process xcm message + await createBlock(foreignContext) + + // check balance movement + + const txFees2 = await calculateTxFees(txSendNativeAsset, senderAccount) + + const nativeBalanceAfterTx = await query.native.nativeFunds(nativeContext, senderAccount.address) + + expect(nativeBalanceBeforeTx - balanceToTransfer.native - txFees2).toBe(nativeBalanceAfterTx) + + // check events + await Promise.all( + events.native.transfer.map((pallet) => + checkEvents(events2, pallet).toMatchSnapshot( + `Transfer native funds to foreign chain ${JSON.stringify(pallet)}` + ) + ) + ) + + await Promise.all( + events.foreign.receive.native.map((pallet) => + checkSystemEvents(foreignContext, pallet).toMatchSnapshot( + `Receive native funds on foreign chain ${JSON.stringify(pallet)}` + ) + ) + ) + + await checkSwitchPalletInvariant( + expect, + nativeContext, + foreignContext, + sovereignAccount, + query.native.nativeFunds, + query.foreign.foreignFunds + ) + + // 3. send native tokens back to sender chain. + const balanceToTransferBack = balanceToTransfer.native / 2n + + const nativeBalanceForeignChainBeforeTx = await query.foreign.foreignFunds( + foreignContext, + hexAddress(senderAccount.address) + ) + + const signedTx3 = tx.native + .withdraw(foreignContext, balanceToTransferBack.toString()) + .signAsync(senderAccount) + + const events3 = await sendTransaction(signedTx3) + + // process tx + await createBlock(foreignContext) + // process xcm message + await createBlock(nativeContext) + + // check balance movement + + const nativeBalanceForeignChainAfterTx = await query.foreign.foreignFunds( + foreignContext, + senderAccount.address + ) + + expect(nativeBalanceForeignChainBeforeTx - balanceToTransferBack).toBe(nativeBalanceForeignChainAfterTx) + + // check events + + await Promise.all( + events.foreign.withdraw.map((pallet) => + checkEvents(events3, pallet).toMatchSnapshot( + `Withdraw native funds on foreign chain ${JSON.stringify(pallet)}` + ) + ) + ) + + await Promise.all( + events.native.receive.native.map((pallet) => + checkSystemEvents(nativeContext, pallet).toMatchSnapshot( + `Receive native funds on native chain ${JSON.stringify(pallet)}` + ) + ) + ) + + // finalize the switch. Create a another block to process the query xcm message + await createBlock(nativeContext) + await checkSwitchPalletInvariant( + expect, + nativeContext, + foreignContext, + sovereignAccount, + query.native.nativeFunds, + query.foreign.foreignFunds + ) + + // 4. send foreign token back + + const balanceToTransferBackForeign = balanceToTransfer.foreign / 10n + + const foreignBalanceBeforeTx = await query.native.foreignFunds(nativeContext, senderAccount.address) + + const signedTx4 = tx.foreign + .withdraw(nativeContext, hexAddress(senderAccount.address), balanceToTransferBackForeign.toString()) + .signAsync(senderAccount) + + const events4 = await sendTransaction(signedTx4) + + // process tx + await createBlock(nativeContext) + + // process xcm message + await createBlock(foreignContext) + + // check balance movement + const foreignBalanceAfterTx = await query.native.foreignFunds(nativeContext, senderAccount.address) + expect(foreignBalanceBeforeTx - balanceToTransferBackForeign).toBe(foreignBalanceAfterTx) + + // check events + + await Promise.all( + events.native.withdraw.map((pallet) => + checkEvents(events4, pallet).toMatchSnapshot( + `Withdraw foreign funds on native chain ${JSON.stringify(pallet)}` + ) + ) + ) + + await Promise.all( + events.foreign.receive.native.map((pallet) => + checkSystemEvents(foreignContext, pallet).toMatchSnapshot( + `Receive foreign funds on foreign chain ${JSON.stringify(pallet)}` + ) + ) + ) + }) + } +) diff --git a/integration-tests/chopsticks/src/tests/switchPallet/fullFlowSwitch.test.ts b/integration-tests/chopsticks/src/tests/switchPallet/fullFlowSwitch.test.ts deleted file mode 100644 index 2792fc9252..0000000000 --- a/integration-tests/chopsticks/src/tests/switchPallet/fullFlowSwitch.test.ts +++ /dev/null @@ -1,181 +0,0 @@ -import { test } from 'vitest' - -import * as PeregrineConfig from '../../network/peregrine.js' -import * as AssetHubConfig from '../../network/assetHub.js' -import { - KILT, - ROC, - getAssetSwitchParameters, - initialBalanceKILT, - initialBalanceROC, - keysAlice, - keysCharlie, -} from '../../utils.js' -import { - peregrineContext, - getFreeBalancePeregrine, - getFreeRocPeregrine, - getFreeEkiltAssetHub, - assethubContext, -} from '../index.js' -import { - checkBalance, - createBlock, - setStorage, - hexAddress, - checkBalanceInRange, - getXcmMessageV4ToSendEkilt, - checkSwitchPalletInvariant, - checkBalanceMovementIncomingSwitch, -} from '../utils.js' -import { getAccountLocationV4, getRelayNativeAssetIdLocationV4, getSiblingLocationV4 } from '../../network/utils.js' -import { sendTransaction, withExpect } from '@acala-network/chopsticks-testing' - -/** - * Full e2e flow between Peregrine and AssetHub. More checks are provided in individual test cases. - * - * 1. Send ROCs from AssetHub to Peregrine - * 2. Switch KILTs on Peregrine - * 3. Send eKILTs back to AssetHub - * 4. Send ROCs back to AssetHub - */ -test('Full e2e tests', async ({ expect }) => { - const { checkEvents } = withExpect(expect) - - // 10 % of relay tokens are used as fees - const feeAmount = (ROC * BigInt(10)) / BigInt(100) - - const remoteAssetId = { V4: AssetHubConfig.eKiltLocation } - const remoteXcmFeeId = { V4: { id: AssetHubConfig.nativeTokenLocation, fun: { Fungible: feeAmount } } } - const remoteReserveLocation = getSiblingLocationV4(AssetHubConfig.paraId) - - await setStorage(peregrineContext, { - ...PeregrineConfig.assignNativeTokensToAccounts([keysAlice.address], initialBalanceKILT), - ...PeregrineConfig.createAndAssignRocs(keysCharlie.address, []), - ...PeregrineConfig.setSafeXcmVersion4(), - }) - - const switchParameters = getAssetSwitchParameters() - - await setStorage( - peregrineContext, - PeregrineConfig.setSwitchPair(switchParameters, remoteAssetId, remoteXcmFeeId, remoteReserveLocation) - ) - - await setStorage(assethubContext, { - ...AssetHubConfig.assignDotTokensToAccountsAsStorage( - [keysAlice.address, PeregrineConfig.sovereignAccountAsSibling], - initialBalanceROC - ), - ...AssetHubConfig.createForeignAsset(keysCharlie.address), - }) - await setStorage( - assethubContext, - AssetHubConfig.assignForeignAssetToAccounts([ - [PeregrineConfig.sovereignAccountAsSibling, switchParameters.sovereignSupply], - ]) - ) - // 1. send ROCs 2 Peregrine - - const peregrineDestination = getSiblingLocationV4(PeregrineConfig.paraId) - const beneficiary = getAccountLocationV4(hexAddress(keysAlice.address)) - const rocAsset = { V4: [getRelayNativeAssetIdLocationV4((ROC * BigInt(2)).toString())] } - - const signedTx1 = assethubContext.api.tx.polkadotXcm - .limitedReserveTransferAssets(peregrineDestination, beneficiary, rocAsset, 0, 'Unlimited') - .signAsync(keysAlice) - - // Send the transaction and create a block0 - await sendTransaction(signedTx1) - await createBlock(assethubContext) - - // process msg. - await createBlock(peregrineContext) - // Alice should have some Rocs on Peregrine - const aliceRocBalance = await getFreeRocPeregrine(keysAlice.address) - expect(aliceRocBalance).toBeGreaterThan(BigInt(0)) - - await checkSwitchPalletInvariant(expect) - - // 2. switch KILTs - const balanceToTransfer = initialBalanceKILT / BigInt(2) - const signedTx2 = peregrineContext.api.tx.assetSwitchPool1 - .switch(balanceToTransfer.toString(), beneficiary) - .signAsync(keysAlice) - - const events1 = await sendTransaction(signedTx2) - - await createBlock(peregrineContext) - await checkEvents(events1, 'assetSwitchPool1').toMatchSnapshot( - 'receiver Peregrine::assetSwitchPool1::[LocalToRemoteSwitchExecuted]' - ) - - await createBlock(assethubContext) - await checkBalance(getFreeEkiltAssetHub, keysAlice.address, expect, balanceToTransfer) - - await checkSwitchPalletInvariant(expect) - - // 3. send eKILTs back - const dest = getSiblingLocationV4(PeregrineConfig.paraId) - const remoteFeeId = { V4: AssetHubConfig.eKiltLocation } - const funds = { - V4: [ - { - id: AssetHubConfig.eKiltLocation, - fun: { Fungible: balanceToTransfer }, - }, - ], - } - - const signedTx3 = assethubContext.api.tx.polkadotXcm - .transferAssetsUsingTypeAndThen( - dest, - funds, - 'LocalReserve', - remoteFeeId, - 'LocalReserve', - getXcmMessageV4ToSendEkilt(keysAlice.address), - 'Unlimited' - ) - .signAsync(keysAlice) - - const events2 = await sendTransaction(signedTx3) - - await createBlock(assethubContext) - await checkBalance(getFreeEkiltAssetHub, keysAlice.address, expect, BigInt(0)) - // assets should move from Sovereign account to user. - await checkEvents(events2, { section: 'foreignAssets', method: 'Transferred' }).toMatchSnapshot( - 'sender AssetHub::foreignAssets::[Transferred]' - ) - - await createBlock(peregrineContext) - await checkBalanceInRange(getFreeBalancePeregrine, keysAlice.address, expect, [ - BigInt(74) * KILT, - BigInt(75) * KILT, - ]) - - await checkSwitchPalletInvariant(expect) - await checkBalanceMovementIncomingSwitch(balanceToTransfer, expect, keysAlice.address) - - // 4. send ROCs back - - const assetHubDestination = getSiblingLocationV4(AssetHubConfig.paraId) - const assets = { V4: [getRelayNativeAssetIdLocationV4(ROC.toString())] } - - const signedTx4 = peregrineContext.api.tx.polkadotXcm - .transferAssets(assetHubDestination, beneficiary, assets, 0, 'Unlimited') - .signAsync(keysAlice) - - const events3 = await sendTransaction(signedTx4) - await createBlock(peregrineContext) - - // The xcm message should be send to AH and the funds should be burned from user. - await checkEvents(events3, 'fungibles').toMatchSnapshot('sender Peregrine::fungibles::[Burned]') - - expect(await getFreeRocPeregrine(keysAlice.address)).toBe(BigInt(899999965317)) - - // Process the message on AH - await createBlock(assethubContext) - - await checkSwitchPalletInvariant(expect) -}, 20_000) diff --git a/integration-tests/chopsticks/src/tests/switchPallet/fungibles/dusted/__snapshots__/index.test.ts.snap b/integration-tests/chopsticks/src/tests/switchPallet/fungibles/dusted/__snapshots__/index.test.ts.snap new file mode 100644 index 0000000000..c8ea680f5a --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/fungibles/dusted/__snapshots__/index.test.ts.snap @@ -0,0 +1,28 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`Dust account > V4 LIVE > Dusted accounts pallet: {"section":"balances","method":"Endowed"} 1`] = ` +[ + { + "data": { + "account": "4rsmbFBYpVmWE2LHRsSZKxf22a8cbJLxMZqvVGkGkSDmDBcr", + "freeBalance": "(rounded 100000000000000000)", + }, + "method": "Endowed", + "section": "balances", + }, +] +`; + +exports[`Dust account > V4 LIVE > Dusted accounts pallet: {"section":"balances","method":"Transfer"} 1`] = ` +[ + { + "data": { + "amount": "(rounded 100000000000000000)", + "from": "4seWojfEHrk5YKPahdErazQ3CWEHZYi6NV4gKz5AaejWbRPJ", + "to": "4rsmbFBYpVmWE2LHRsSZKxf22a8cbJLxMZqvVGkGkSDmDBcr", + }, + "method": "Transfer", + "section": "balances", + }, +] +`; diff --git a/integration-tests/chopsticks/src/tests/switchPallet/fungibles/dusted/config.ts b/integration-tests/chopsticks/src/tests/switchPallet/fungibles/dusted/config.ts new file mode 100644 index 0000000000..c97a2caf4c --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/fungibles/dusted/config.ts @@ -0,0 +1,70 @@ +import type { EventFilter } from '@acala-network/chopsticks-testing' +import type { ApiPromise } from '@polkadot/api' +import type { SubmittableExtrinsic } from '@polkadot/api/types' +import type { KeyringPair } from '@polkadot/keyring/types' + +import { initialBalanceDOT, initialBalanceKILT, keysAlice, keysBob } from '../../../../helper/utils.js' +import { mainChains } from '../../../../network/index.js' +import { tx, query } from '../../../../helper/api.js' +import type { BasicConfig } from '../../../types.js' + +interface Query { + native: ({ api }: { api: ApiPromise }, address: string) => Promise + foreign: ({ api }: { api: ApiPromise }, address: string) => Promise +} + +interface TxContext { + balanceToTransfer: bigint + tx: ({ api }: { api: ApiPromise }, destination: string, amount: string) => SubmittableExtrinsic<'promise'> + events: EventFilter[] +} + +interface TestConfiguration { + config: BasicConfig + query: Query + txContext: TxContext + account: { + sender: KeyringPair + receiver: KeyringPair + } +} + +export const testCases: TestConfiguration[] = [ + { + config: { + desc: 'V4 LIVE', + network: { + relay: { option: mainChains.polkadot.getConfig({}), storage: {}, setUpTx: [] }, + parachains: [ + { + option: mainChains.kilt.getConfig({}), + storage: { + ...mainChains.kilt.storage.assignNativeTokensToAccounts( + [keysAlice.address], + initialBalanceKILT + ), + ...mainChains.kilt.storage.assignRelayTokensToAccounts( + [keysAlice.address], + initialBalanceDOT + ), + }, + setUpTx: [], + }, + ], + }, + }, + account: { sender: keysAlice, receiver: keysBob }, + query: { + native: query.balances, + foreign: query.fungibles(mainChains.assetHub.chainInfo.nativeTokenLocation), + }, + txContext: { + tx: tx.balances.transferAllowDeath, + events: [ + { section: 'balances', method: 'Transfer' }, + { section: 'balances', method: 'Endowed' }, + ], + balanceToTransfer: initialBalanceKILT, + }, + }, +] as const diff --git a/integration-tests/chopsticks/src/tests/switchPallet/fungibles/dusted/index.test.ts b/integration-tests/chopsticks/src/tests/switchPallet/fungibles/dusted/index.test.ts new file mode 100644 index 0000000000..c619f2cc60 --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/fungibles/dusted/index.test.ts @@ -0,0 +1,70 @@ +import { describe, beforeEach, it, afterEach } from 'vitest' +import { sendTransaction, withExpect } from '@acala-network/chopsticks-testing' +import type { KeyringPair } from '@polkadot/keyring/types' + +import { createBlock } from '../../../../network/utils.js' +import { calculateTxFees, hexAddress } from '../../../../helper/utils.js' +import { testCases } from './config.js' +import { Config } from '../../../../network/types.js' +import { spinUpNetwork, tearDownNetwork } from '../../../utils.js' + +describe.each(testCases)('Dust account', ({ account, query, txContext, config }) => { + let context: Config + let senderAccount: KeyringPair + let receiverAccount: KeyringPair + + const { desc } = config + + // Create the network context + beforeEach(async () => { + const { parachainContexts } = await spinUpNetwork(config) + context = parachainContexts[0] + senderAccount = account.sender + receiverAccount = account.receiver + }) + + // Shut down the network + afterEach(async () => await tearDownNetwork([context])) + + it(desc, async ({ expect }) => { + const { checkSystemEvents } = withExpect(expect) + const { balanceToTransfer, events, tx } = txContext + + // Pre condition checks + const nativeBalance = await query.native(context, senderAccount.address) + const foreignBalance = await query.foreign(context, senderAccount.address) + const receiverNativeBalance = await query.native(context, receiverAccount.address) + + expect(nativeBalance).toBe(balanceToTransfer) + expect(foreignBalance).toBeGreaterThan(0n) + expect(receiverNativeBalance).toBe(0n) + + // action + let rawTx = tx(context, hexAddress(receiverAccount.address), balanceToTransfer.toString()) + const txFees = await calculateTxFees(rawTx, senderAccount) + rawTx = tx(context, hexAddress(receiverAccount.address), (balanceToTransfer - txFees).toString()) + + await sendTransaction(rawTx.signAsync(senderAccount)) + + // process tx + await createBlock(context) + + // post condition checks + + // check balance movement + const nativeBalanceAfter = await query.native(context, senderAccount.address) + const foreignBalanceAfter = await query.foreign(context, senderAccount.address) + const receiverNativeBalanceAfter = await query.native(context, receiverAccount.address) + + expect(nativeBalanceAfter).toBe(0n) + // sender should keep the foreign balance + expect(foreignBalanceAfter).toBeGreaterThan(0n) + expect(receiverNativeBalanceAfter).toBe(balanceToTransfer - txFees) + + await Promise.all( + events.map((pallet) => + checkSystemEvents(context, pallet).toMatchSnapshot(`Dusted accounts pallet: ${JSON.stringify(pallet)}`) + ) + ) + }) +}) diff --git a/integration-tests/chopsticks/src/tests/switchPallet/index.ts b/integration-tests/chopsticks/src/tests/switchPallet/index.ts new file mode 100644 index 0000000000..e15fc9c079 --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/index.ts @@ -0,0 +1,191 @@ +import { ExpectStatic } from 'vitest' +import { ApiPromise } from '@polkadot/api' +import { SetupConfig } from '@acala-network/chopsticks-testing' + +import { hexAddress } from '../../helper/utils.js' + +export function getXcmMessageV4ToSendEkilt(address: string) { + return { + V4: [ + { + DepositAsset: { + assets: { Wild: 'All' }, + beneficiary: { + parents: 0, + interior: { + X1: [ + { + AccountId32: { + id: hexAddress(address), + }, + }, + ], + }, + }, + }, + }, + ], + } +} + +export function getDepositXcmMessageV3(assetId: object) { + return (balanceToTransfer: string, receiver: string) => ({ + V3: [ + { + ReserveAssetDeposited: [ + { + id: { Concrete: assetId }, + fun: { Fungible: balanceToTransfer }, + }, + ], + }, + 'ClearOrigin', + { + BuyExecution: { + fees: { + id: { Concrete: assetId }, + fun: { Fungible: balanceToTransfer }, + }, + weightLimit: 'Unlimited', + }, + }, + { + DepositAsset: { + assets: { Wild: 'All' }, + beneficiary: { + parents: 0, + interior: { + X1: { + AccountId32: { + id: hexAddress(receiver), + }, + }, + }, + }, + }, + }, + ], + }) +} + +export function getXcmV4ReclaimMessage(assetId: object) { + return (amount: string, receiver: string) => ({ + V4: [ + { WithdrawAsset: [{ id: { parents: 0, interior: 'Here' }, fun: { Fungible: amount } }] }, + { + BuyExecution: { + weightLimit: 'Unlimited', + fees: { id: { parents: 0, interior: 'Here' }, fun: { Fungible: amount } }, + }, + }, + { + ClaimAsset: { + // Specify xcm version 4 + ticket: { parents: 0, interior: { X1: [{ GeneralIndex: 4 }] } }, + assets: [ + { + id: assetId, + fun: { Fungible: amount }, + }, + ], + }, + }, + { + DepositAsset: { + assets: { Wild: 'All' }, + beneficiary: { + parents: 0, + interior: { + X1: [ + { + AccountId32: { + id: hexAddress(receiver), + }, + }, + ], + }, + }, + }, + }, + ], + }) +} + +export async function checkSwitchPalletInvariant( + expect: ExpectStatic, + nativeContext: SetupConfig, + foreignContext: SetupConfig, + sovereignAccount: string, + queryNativeBalance: ({ api }: { api: ApiPromise }, address: string) => Promise, + queryForeignBalance: ({ api }: { api: ApiPromise }, address: string) => Promise, + deltaStoredSovereignSupply = 0n +) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const switchPairInfo: any = await nativeContext.api.query.assetSwitchPool1.switchPair() + if (switchPairInfo.isNone) { + return + } + + // check pool account balance + const switchPoolAccount = switchPairInfo.unwrap().poolAccount + + const poolAccountBalance = await queryNativeBalance(nativeContext, switchPoolAccount) + + const sovereignEKiltSupply = await queryForeignBalance(foreignContext, sovereignAccount) + + const remoteAssetSovereignTotalBalance = switchPairInfo.unwrap().remoteAssetSovereignTotalBalance.toBigInt() + const remoteAssetCirculatingSupply = switchPairInfo.unwrap().remoteAssetCirculatingSupply.toBigInt() + const remoteAssetTotalSupply = switchPairInfo.unwrap().remoteAssetTotalSupply.toBigInt() + + const lockedBalanceFromTotalAndCirculating = remoteAssetTotalSupply - remoteAssetCirculatingSupply + + // Check pool account has enough funds to cover the circulating supply + + // everybody can send funds to the pool account. The pool account should have at least the circulating supply + expect(poolAccountBalance).toBeGreaterThanOrEqual(remoteAssetCirculatingSupply) + expect(remoteAssetSovereignTotalBalance).toBe(lockedBalanceFromTotalAndCirculating) + expect(sovereignEKiltSupply).toBe(remoteAssetSovereignTotalBalance + deltaStoredSovereignSupply) +} + +export async function getPoolAccount({ api }: { api: ApiPromise }) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const switchPairInfo: any = await api.query.assetSwitchPool1.switchPair() + if (switchPairInfo.isNone) { + return + } + return switchPairInfo.unwrap().poolAccount +} + +export async function getRemoteLockedSupply({ api }: { api: ApiPromise }): Promise { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const switchPairInfo: any = await api.query.assetSwitchPool1.switchPair() + + if (switchPairInfo.isNone) { + return 0n + } + + return switchPairInfo.unwrap().remoteAssetSovereignTotalBalance.toBigInt() +} + +export async function getReceivedNativeTokens({ api }: { api: ApiPromise }): Promise { + const events = await api.query.system.events() + + const polkadotFees = events.find((event) => api.events.assetSwitchPool1.RemoteToLocalSwitchExecuted.is(event.event)) + + if (!polkadotFees) { + throw new Error('RemoteToLocalSwitchExecuted event not found') + } + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return (polkadotFees as any).event.data.amount.toBigInt() +} + +export async function isSwitchPaused({ api }: { api: ApiPromise }): Promise { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const switchPairInfo: any = await api.query.assetSwitchPool1.switchPair() + if (switchPairInfo.isNone) { + return false + } + + return switchPairInfo.unwrap().status.isPaused +} diff --git a/integration-tests/chopsticks/src/tests/xcm/assetHub/peregrine/__snapshots__/limitedReserveTransferRelayPeregrine.test.ts.snap b/integration-tests/chopsticks/src/tests/switchPallet/pause/sendRelayToken/__snapshots__/index.test.ts.snap similarity index 59% rename from integration-tests/chopsticks/src/tests/xcm/assetHub/peregrine/__snapshots__/limitedReserveTransferRelayPeregrine.test.ts.snap rename to integration-tests/chopsticks/src/tests/switchPallet/pause/sendRelayToken/__snapshots__/index.test.ts.snap index fbfb8c0f04..4de9cbd620 100644 --- a/integration-tests/chopsticks/src/tests/xcm/assetHub/peregrine/__snapshots__/limitedReserveTransferRelayPeregrine.test.ts.snap +++ b/integration-tests/chopsticks/src/tests/switchPallet/pause/sendRelayToken/__snapshots__/index.test.ts.snap @@ -1,65 +1,42 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`Send DOTs from Relay 2 Peregrine > receiver Peregrine::messageQueue::[ProcessingFailed] 1`] = ` +exports[`Send Relay token while switch paused > V4 LIVE > receive relay chain funds on receiver chain {"section":"polkadotXcm","method":"AssetsTrapped"} 1`] = ` [ { "data": { - "error": "Unsupported", - "id": "(hash)", - "origin": "Parent", - }, - "method": "ProcessingFailed", - "section": "messageQueue", - }, -] -`; - -exports[`Send DOTs from Relay 2 Peregrine > sender Rococo::xcmPallet::[XcmMessageSent] 1`] = ` -[ - { - "data": { - "outcome": { - "Complete": { - "used": { - "proofSize": "(rounded 6200)", - "refTime": "(rounded 300000000)", + "assets": { + "V4": [ + { + "fun": { + "Fungible": 10000000000, + }, + "id": { + "interior": "Here", + "parents": 1, + }, }, - }, + ], }, - }, - "method": "Attempted", - "section": "xcmPallet", - }, - { - "data": { - "fees": [ - { - "fun": { - "Fungible": "(rounded 130000000)", - }, - "id": { - "interior": "Here", - "parents": 0, - }, - }, - ], - "paying": { + "hash_": "(hash)", + "origin": { "interior": { "X1": [ { - "AccountId32": { - "id": "(hash)", - "network": "Rococo", - }, + "Parachain": 1000, }, ], }, - "parents": 0, + "parents": 1, }, }, - "method": "FeesPaid", - "section": "xcmPallet", + "method": "AssetsTrapped", + "section": "polkadotXcm", }, +] +`; + +exports[`Send Relay token while switch paused > V4 LIVE > send funds from relay chain {"section":"polkadotXcm","method":"Sent"} 1`] = ` +[ { "data": { "destination": { @@ -70,14 +47,14 @@ exports[`Send DOTs from Relay 2 Peregrine > sender Rococo::xcmPallet::[XcmMessag }, ], }, - "parents": 0, + "parents": 1, }, "message": [ { "ReserveAssetDeposited": [ { "fun": { - "Fungible": 50000000000000, + "Fungible": 10000000000, }, "id": { "interior": "Here", @@ -91,7 +68,7 @@ exports[`Send DOTs from Relay 2 Peregrine > sender Rococo::xcmPallet::[XcmMessag "BuyExecution": { "fees": { "fun": { - "Fungible": 50000000000000, + "Fungible": 10000000000, }, "id": { "interior": "Here", @@ -131,7 +108,7 @@ exports[`Send DOTs from Relay 2 Peregrine > sender Rococo::xcmPallet::[XcmMessag { "AccountId32": { "id": "(hash)", - "network": "Rococo", + "network": "Polkadot", }, }, ], @@ -140,7 +117,7 @@ exports[`Send DOTs from Relay 2 Peregrine > sender Rococo::xcmPallet::[XcmMessag }, }, "method": "Sent", - "section": "xcmPallet", + "section": "polkadotXcm", }, ] `; diff --git a/integration-tests/chopsticks/src/tests/switchPallet/pause/sendRelayToken/config.ts b/integration-tests/chopsticks/src/tests/switchPallet/pause/sendRelayToken/config.ts new file mode 100644 index 0000000000..f60ba08b62 --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/pause/sendRelayToken/config.ts @@ -0,0 +1,91 @@ +import type { EventFilter } from '@acala-network/chopsticks-testing' +import type { ApiPromise } from '@polkadot/api' +import type { SubmittableExtrinsic } from '@polkadot/api/types' +import type { KeyringPair } from '@polkadot/keyring/types' + +import { DOT, initialBalanceKILT, keysAlice } from '../../../../helper/utils.js' +import { mainChains } from '../../../../network/index.js' +import { tx, query } from '../../../../helper/api.js' +import type { BasicConfig } from '../../../types.js' + +interface Query { + sender: ({ api }: { api: ApiPromise }, address: string) => Promise + + receiver: ({ api }: { api: ApiPromise }, address: string) => Promise +} + +interface Events { + // events to check after the transaction on the native chain + sender: EventFilter[] + // events to check after the transaction on the foreign chain + receiver: EventFilter[] +} + +interface TxContext { + // amount of funds to transfer + balanceToTransfer: bigint + // transactions to execute + tx: ({ api }: { api: ApiPromise }, submitter: string, amount: string | number) => SubmittableExtrinsic<'promise'> + // events to check after the transaction + events: Events +} + +interface TestConfiguration { + config: BasicConfig + query: Query + txContext: TxContext + account: KeyringPair +} + +export const testCases: TestConfiguration[] = [ + { + config: { + desc: 'V4 LIVE', + network: { + relay: { option: mainChains.polkadot.getConfig({}), storage: {}, setUpTx: [] }, + parachains: [ + { + option: mainChains.assetHub.getConfig({}), + storage: mainChains.assetHub.storage.assignNativeTokensToAccountsAsStorage([keysAlice.address]), + setUpTx: [], + }, + { + option: mainChains.kilt.getConfig({}), + + storage: mainChains.kilt.storage.assignNativeTokensToAccounts( + [keysAlice.address], + initialBalanceKILT + ), + setUpTx: [tx.switchPallet.pause()], + }, + ], + }, + }, + account: keysAlice, + query: { + sender: query.balances, + receiver: query.fungibles(mainChains.assetHub.chainInfo.nativeTokenLocation), + }, + txContext: { + balanceToTransfer: DOT, + tx: tx.xcmPallet.limitedReserveTransferAssetsV4( + mainChains.assetHub.chainInfo.nativeTokenLocation, + tx.xcmPallet.parachainV4(1, mainChains.kilt.chainInfo.paraId) + ), + events: { + sender: [ + { + section: 'polkadotXcm', + method: 'Sent', + }, + ], + receiver: [ + { + section: 'polkadotXcm', + method: 'AssetsTrapped', + }, + ], + }, + }, + }, +] diff --git a/integration-tests/chopsticks/src/tests/switchPallet/pause/sendRelayToken/index.test.ts b/integration-tests/chopsticks/src/tests/switchPallet/pause/sendRelayToken/index.test.ts new file mode 100644 index 0000000000..5c36539e87 --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/pause/sendRelayToken/index.test.ts @@ -0,0 +1,84 @@ +import { describe, beforeEach, test, afterEach } from 'vitest' +import { sendTransaction, withExpect } from '@acala-network/chopsticks-testing' +import type { KeyringPair } from '@polkadot/keyring/types' + +import { createBlock } from '../../../../network/utils.js' +import { calculateTxFees, getPaidXcmFees, hexAddress } from '../../../../helper/utils.js' +import { testCases } from './config.js' +import { Config } from '../../../../network/types.js' +import { isSwitchPaused } from '../../index.js' +import { spinUpNetwork, tearDownNetwork } from '../../../utils.js' + +describe.each(testCases)( + 'Send Relay token while switch paused', + + ({ account, query, txContext, config }) => { + let senderContext: Config + let receiverContext: Config + let relayContext: Config + let senderAccount: KeyringPair + const { desc } = config + + // Create the network context + beforeEach(async () => { + const { parachainContexts, relayChainContext } = await spinUpNetwork(config) + senderContext = parachainContexts[0] + receiverContext = parachainContexts[1] + relayContext = relayChainContext + senderAccount = account + }) + + // Shut down the network + afterEach(async () => await tearDownNetwork([receiverContext, senderContext, relayContext])) + + test(desc, async ({ expect }) => { + const { checkSystemEvents, checkEvents } = withExpect(expect) + const { tx, balanceToTransfer, events } = txContext + + // pre condition checks + const balanceBeforeTx = await query.receiver(receiverContext, hexAddress(senderAccount.address)) + const balanceBeforeTxSender = await query.sender(senderContext, hexAddress(senderAccount.address)) + expect(balanceBeforeTx).toBe(0n) + expect(balanceBeforeTxSender).toBeGreaterThan(0n) + expect(await isSwitchPaused(receiverContext)).toBe(true) + + // action + const rawTx = tx(senderContext, hexAddress(senderAccount.address), balanceToTransfer.toString()) + const events1 = await sendTransaction(rawTx.signAsync(senderAccount)) + + // process tx + await createBlock(senderContext) + // process msg + await createBlock(receiverContext) + + // post condition checks + // check balance movement on sender chain. + const txFees = await calculateTxFees(rawTx, senderAccount) + const xcmFees = await getPaidXcmFees(senderContext.api, await events1.events) + const balanceAfterTxSender = await query.sender(senderContext, hexAddress(senderAccount.address)) + + expect(balanceAfterTxSender).toBe(balanceBeforeTxSender - balanceToTransfer - txFees - xcmFees) + + // Tx should fail on receiver + const balanceAfterTx = await query.receiver(receiverContext, hexAddress(senderAccount.address)) + expect(balanceAfterTx).toBe(0n) + + // check events + await Promise.all( + events.sender.map((pallet) => + checkEvents(events1, pallet).toMatchSnapshot( + `send funds from relay chain ${JSON.stringify(pallet)}` + ) + ) + ) + + await Promise.all( + events.receiver.map((pallet) => + checkSystemEvents(receiverContext, pallet).toMatchSnapshot( + `receive relay chain funds on receiver chain ${JSON.stringify(pallet)}` + ) + ) + ) + }) + } +) diff --git a/integration-tests/chopsticks/src/tests/switchPallet/pause/switchEkilts/__snapshots__/index.test.ts.snap b/integration-tests/chopsticks/src/tests/switchPallet/pause/switchEkilts/__snapshots__/index.test.ts.snap new file mode 100644 index 0000000000..92e76a9a79 --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/pause/switchEkilts/__snapshots__/index.test.ts.snap @@ -0,0 +1,169 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`Switch eKILTs while paused > V4 LIVE > Switch eKILTs receiver chain {"section":"polkadotXcm","method":"AssetsTrapped"} 1`] = ` +[ + { + "data": { + "assets": { + "V4": [ + { + "fun": { + "Fungible": 1000000000000000, + }, + "id": { + "interior": { + "X2": [ + { + "GlobalConsensus": { + "Ethereum": { + "chainId": 1, + }, + }, + }, + { + "AccountKey20": { + "key": "0x5d3d01fd6d2ad1169b17918eb4f153c6616288eb", + "network": null, + }, + }, + ], + }, + "parents": 2, + }, + }, + ], + }, + "hash_": "(hash)", + "origin": { + "interior": { + "X1": [ + { + "Parachain": 1000, + }, + ], + }, + "parents": 1, + }, + }, + "method": "AssetsTrapped", + "section": "polkadotXcm", + }, +] +`; + +exports[`Switch eKILTs while paused > V4 LIVE > Switch eKILTs sender chain {"section":"polkadotXcm","method":"Sent"} 1`] = ` +[ + { + "data": { + "destination": { + "interior": { + "X1": [ + { + "Parachain": "(rounded 2100)", + }, + ], + }, + "parents": 1, + }, + "message": [ + { + "ReserveAssetDeposited": [ + { + "fun": { + "Fungible": 1000000000000000, + }, + "id": { + "interior": { + "X2": [ + { + "GlobalConsensus": { + "Ethereum": { + "chainId": 1, + }, + }, + }, + { + "AccountKey20": { + "key": "0x5d3d01fd6d2ad1169b17918eb4f153c6616288eb", + "network": null, + }, + }, + ], + }, + "parents": 2, + }, + }, + ], + }, + "ClearOrigin", + { + "BuyExecution": { + "fees": { + "fun": { + "Fungible": 1000000000000000, + }, + "id": { + "interior": { + "X2": [ + { + "GlobalConsensus": { + "Ethereum": { + "chainId": 1, + }, + }, + }, + { + "AccountKey20": { + "key": "0x5d3d01fd6d2ad1169b17918eb4f153c6616288eb", + "network": null, + }, + }, + ], + }, + "parents": 2, + }, + }, + "weightLimit": "Unlimited", + }, + }, + { + "DepositAsset": { + "assets": { + "Wild": "All", + }, + "beneficiary": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": null, + }, + }, + ], + }, + "parents": 0, + }, + }, + }, + ], + "messageId": "(hash)", + "origin": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": "Polkadot", + }, + }, + ], + }, + "parents": 0, + }, + }, + "method": "Sent", + "section": "polkadotXcm", + }, +] +`; diff --git a/integration-tests/chopsticks/src/tests/switchPallet/pause/switchEkilts/config.ts b/integration-tests/chopsticks/src/tests/switchPallet/pause/switchEkilts/config.ts new file mode 100644 index 0000000000..574ae27ebb --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/pause/switchEkilts/config.ts @@ -0,0 +1,92 @@ +import type { EventFilter } from '@acala-network/chopsticks-testing' +import type { ApiPromise } from '@polkadot/api' +import type { SubmittableExtrinsic } from '@polkadot/api/types' +import type { KeyringPair } from '@polkadot/keyring/types' + +import { initialBalanceKILT, keysAlice, KILT } from '../../../../helper/utils.js' +import { mainChains } from '../../../../network/index.js' +import { tx, query } from '../../../../helper/api.js' +import type { BasicConfig } from '../../../types.js' +import { getXcmMessageV4ToSendEkilt } from '../../index.js' + +interface Query { + sender: ({ api }: { api: ApiPromise }, address: string) => Promise + + receiver: ({ api }: { api: ApiPromise }, address: string) => Promise +} + +interface Events { + // events to check after the transaction on the native chain + sender: EventFilter[] + // events to check after the transaction on the foreign chain + receiver: EventFilter[] +} + +interface TxContext { + // amount of funds to transfer + balanceToTransfer: bigint + // transactions to execute + tx: ({ api }: { api: ApiPromise }, amount: string) => SubmittableExtrinsic<'promise'> + // events to check after the transaction + events: Events +} + +interface TestConfiguration { + config: BasicConfig + query: Query + txContext: TxContext + account: KeyringPair + sovereignAccount: string +} + +export const testCases: TestConfiguration[] = [ + { + config: { + desc: 'V4 LIVE', + network: { + relay: { option: mainChains.polkadot.getConfig({}), setUpTx: [], storage: {} }, + parachains: [ + { + option: mainChains.assetHub.getConfig({}), + storage: { + ...mainChains.assetHub.storage.assignNativeTokensToAccountsAsStorage([keysAlice.address]), + ...mainChains.assetHub.storage.assignForeignAssetToAccounts([ + [keysAlice.address, initialBalanceKILT], + ]), + }, + setUpTx: [], + }, + { option: mainChains.kilt.getConfig({}), storage: {}, setUpTx: [tx.switchPallet.pause()] }, + ], + }, + }, + account: keysAlice, + query: { + sender: query.foreignAssets(mainChains.assetHub.chainInfo.eKiltLocation), + receiver: query.balances, + }, + txContext: { + balanceToTransfer: KILT, + tx: tx.xcmPallet.transferAssetsUsingTypeAndThenV4( + tx.xcmPallet.parachainV4(1, mainChains.kilt.chainInfo.paraId), + mainChains.assetHub.chainInfo.eKiltLocation, + getXcmMessageV4ToSendEkilt(keysAlice.address) + ), + events: { + sender: [ + { + section: 'polkadotXcm', + method: 'Sent', + }, + ], + receiver: [ + { + section: 'polkadotXcm', + method: 'AssetsTrapped', + }, + ], + }, + }, + sovereignAccount: mainChains.kilt.chainInfo.sovereignAccountOnSiblingChains, + }, +] diff --git a/integration-tests/chopsticks/src/tests/switchPallet/pause/switchEkilts/index.test.ts b/integration-tests/chopsticks/src/tests/switchPallet/pause/switchEkilts/index.test.ts new file mode 100644 index 0000000000..0efad94105 --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/pause/switchEkilts/index.test.ts @@ -0,0 +1,90 @@ +import { describe, beforeEach, it, afterEach } from 'vitest' +import { sendTransaction, withExpect } from '@acala-network/chopsticks-testing' +import type { KeyringPair } from '@polkadot/keyring/types' + +import { createBlock } from '../../../../network/utils.js' +import { hexAddress } from '../../../../helper/utils.js' +import { testCases } from './config.js' +import { Config } from '../../../../network/types.js' +import { checkSwitchPalletInvariant, isSwitchPaused } from '../../index.js' +import { spinUpNetwork, tearDownNetwork } from '../../../utils.js' + +describe.each(testCases)( + 'Switch eKILTs while paused', + + ({ account, query, txContext, config, sovereignAccount }) => { + let senderContext: Config + let receiverContext: Config + let relayContext: Config + let senderAccount: KeyringPair + const { desc } = config + + // Create the network context + beforeEach(async () => { + const { relayChainContext, parachainContexts } = await spinUpNetwork(config) + relayContext = relayChainContext + senderContext = parachainContexts[0] + receiverContext = parachainContexts[1] + senderAccount = account + }) + + // Shut down the network + afterEach(async () => await tearDownNetwork([receiverContext, senderContext, relayContext])) + + it(desc, async ({ expect }) => { + const { checkSystemEvents, checkEvents } = withExpect(expect) + const { tx, balanceToTransfer, events } = txContext + + // pre condition checks + const balanceBeforeTx = await query.receiver(receiverContext, hexAddress(senderAccount.address)) + const balanceBeforeTxSender = await query.sender(senderContext, hexAddress(senderAccount.address)) + expect(balanceBeforeTx).toBe(0n) + expect(balanceBeforeTxSender).toBeGreaterThan(0n) + expect(await isSwitchPaused(receiverContext)).toBe(true) + + // action + const rawTx = tx(senderContext, balanceToTransfer.toString()) + const events1 = await sendTransaction(rawTx.signAsync(senderAccount)) + + // process tx + await createBlock(senderContext) + // process msg + await createBlock(receiverContext) + + // post condition checks + + // check balance movement on sender chain. + const balanceAfterTxSender = await query.sender(senderContext, hexAddress(senderAccount.address)) + expect(balanceAfterTxSender).toBe(balanceBeforeTxSender - balanceToTransfer) + + // Tx should fail on receiver + const balanceAfterTx = await query.receiver(receiverContext, hexAddress(senderAccount.address)) + expect(balanceAfterTx).toBe(0n) + + // check events + await Promise.all( + events.sender.map((pallet) => + checkEvents(events1, pallet).toMatchSnapshot(`Switch eKILTs sender chain ${JSON.stringify(pallet)}`) + ) + ) + + await Promise.all( + events.receiver.map((pallet) => + checkSystemEvents(receiverContext, pallet).toMatchSnapshot( + `Switch eKILTs receiver chain ${JSON.stringify(pallet)}` + ) + ) + ) + + await checkSwitchPalletInvariant( + expect, + receiverContext, + senderContext, + sovereignAccount, + query.receiver, + query.sender, + balanceToTransfer + ) + }) + } +) diff --git a/integration-tests/chopsticks/src/tests/switchPallet/pause/switchKilts/config.ts b/integration-tests/chopsticks/src/tests/switchPallet/pause/switchKilts/config.ts new file mode 100644 index 0000000000..9798cdc439 --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/pause/switchKilts/config.ts @@ -0,0 +1,51 @@ +import type { ApiPromise } from '@polkadot/api' +import type { SubmittableExtrinsic } from '@polkadot/api/types' +import type { KeyringPair } from '@polkadot/keyring/types' + +import { initialBalanceKILT, keysAlice, KILT } from '../../../../helper/utils.js' +import { mainChains } from '../../../../network/index.js' +import { tx } from '../../../../helper/api.js' +import type { BasicConfig } from '../../../types.js' + +interface TxContext { + // amount of funds to transfer + balanceToTransfer: bigint + // transactions to execute + tx: ({ api }: { api: ApiPromise }, submitter: string, amount: string) => SubmittableExtrinsic<'promise'> +} + +interface TestConfiguration { + config: BasicConfig + txContext: TxContext + account: KeyringPair +} + +export const testCases: TestConfiguration[] = [ + { + config: { + desc: 'V4 LIVE', + network: { + relay: { option: mainChains.polkadot.getConfig({}), setUpTx: [], storage: {} }, + parachains: [ + { + option: mainChains.kilt.getConfig({}), + storage: { + ...mainChains.kilt.storage.assignNativeTokensToAccounts( + [keysAlice.address], + initialBalanceKILT + ), + ...mainChains.kilt.storage.pauseSwitch(), + }, + setUpTx: [], + }, + { option: mainChains.assetHub.getConfig({}), storage: {}, setUpTx: [] }, + ], + }, + }, + account: keysAlice, + txContext: { + balanceToTransfer: KILT, + tx: tx.switchPallet.switchV4(), + }, + }, +] diff --git a/integration-tests/chopsticks/src/tests/switchPallet/pause/switchKilts/index.test.ts b/integration-tests/chopsticks/src/tests/switchPallet/pause/switchKilts/index.test.ts new file mode 100644 index 0000000000..51eb3d38f9 --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/pause/switchKilts/index.test.ts @@ -0,0 +1,47 @@ +import { describe, beforeEach, it, afterEach } from 'vitest' +import type { KeyringPair } from '@polkadot/keyring/types' +import type { DispatchError } from '@polkadot/types/interfaces' + +import { createBlock } from '../../../../network/utils.js' +import { testCases } from './config.js' +import { Config } from '../../../../network/types.js' +import { hexAddress } from '../../../../helper/utils.js' +import { spinUpNetwork, tearDownNetwork } from '../../../utils.js' + +describe.each(testCases)('Switch KILTs while paused', ({ account, txContext, config }) => { + let senderContext: Config + let senderAccount: KeyringPair + const { desc } = config + + // Create the network context + beforeEach(async () => { + const { parachainContexts } = await spinUpNetwork(config) + + senderContext = parachainContexts[0] + senderAccount = account + }) + + // Shut down the network + afterEach(async () => await tearDownNetwork([senderContext])) + + it(desc, async ({ expect }) => { + const { balanceToTransfer, tx } = txContext + let error: DispatchError | undefined + + // This should fail. + await tx(senderContext, hexAddress(senderAccount.address), balanceToTransfer.toString()).signAndSend( + senderAccount, + ({ dispatchError }) => { + error = dispatchError + } + ) + + await createBlock(senderContext) + + if (!error) { + throw new Error('Expected SwitchPairNotEnabled error') + } + + expect(senderContext.api.errors.assetSwitchPool1.SwitchPairNotEnabled.is(error.asModule)).toBe(true) + }) +}) diff --git a/integration-tests/chopsticks/src/tests/switchPallet/pause/withdrawRelayToken/__snapshots__/index.test.ts.snap b/integration-tests/chopsticks/src/tests/switchPallet/pause/withdrawRelayToken/__snapshots__/index.test.ts.snap new file mode 100644 index 0000000000..f18e28874f --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/pause/withdrawRelayToken/__snapshots__/index.test.ts.snap @@ -0,0 +1,114 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`Withdraw relay token while paused > V4 LIVE > Receive relay funds {"section":"balances","method":"Burned"} 1`] = ` +[ + { + "data": { + "amount": 10000000000, + "who": "13cKp88mpGREFCq8KsJEFjpSBnjFuCNWq6bmD3js7fu4f66e", + }, + "method": "Burned", + "section": "balances", + }, +] +`; + +exports[`Withdraw relay token while paused > V4 LIVE > Receive relay funds {"section":"balances","method":"Minted"} 1`] = ` +[ + { + "data": { + "amount": "(rounded 10000000000)", + "who": "15jSz35ugoWTc61xHPoxEkHte4o7UanKCk1gx1dizA8yuNs8", + }, + "method": "Minted", + "section": "balances", + }, +] +`; + +exports[`Withdraw relay token while paused > V4 LIVE > Withdraw relay funds {"section":"polkadotXcm","method":"Sent"} 1`] = ` +[ + { + "data": { + "destination": { + "interior": { + "X1": [ + { + "Parachain": 1000, + }, + ], + }, + "parents": 1, + }, + "message": [ + { + "WithdrawAsset": [ + { + "fun": { + "Fungible": 10000000000, + }, + "id": { + "interior": "Here", + "parents": 1, + }, + }, + ], + }, + "ClearOrigin", + { + "BuyExecution": { + "fees": { + "fun": { + "Fungible": 10000000000, + }, + "id": { + "interior": "Here", + "parents": 1, + }, + }, + "weightLimit": "Unlimited", + }, + }, + { + "DepositAsset": { + "assets": { + "Wild": { + "AllCounted": 1, + }, + }, + "beneficiary": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": null, + }, + }, + ], + }, + "parents": 0, + }, + }, + }, + ], + "messageId": "(hash)", + "origin": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": "Polkadot", + }, + }, + ], + }, + "parents": 0, + }, + }, + "method": "Sent", + "section": "polkadotXcm", + }, +] +`; diff --git a/integration-tests/chopsticks/src/tests/switchPallet/pause/withdrawRelayToken/config.ts b/integration-tests/chopsticks/src/tests/switchPallet/pause/withdrawRelayToken/config.ts new file mode 100644 index 0000000000..d80e74d80c --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/pause/withdrawRelayToken/config.ts @@ -0,0 +1,94 @@ +import type { EventFilter } from '@acala-network/chopsticks-testing' +import type { ApiPromise } from '@polkadot/api' +import type { SubmittableExtrinsic } from '@polkadot/api/types' +import type { KeyringPair } from '@polkadot/keyring/types' + +import { DOT, initialBalanceKILT, keysAlice } from '../../../../helper/utils.js' +import { mainChains } from '../../../../network/index.js' +import { tx, query } from '../../../../helper/api.js' +import type { BasicConfig } from '../../../types.js' + +interface Query { + sender: ({ api }: { api: ApiPromise }, address: string) => Promise + + receiver: ({ api }: { api: ApiPromise }, address: string) => Promise +} + +interface Events { + // events to check after the transaction on the native chain + sender: EventFilter[] + // events to check after the transaction on the foreign chain + receiver: EventFilter[] +} + +interface TxContext { + // amount of funds to transfer + balanceToTransfer: bigint + // transactions to execute + tx: ({ api }: { api: ApiPromise }, submitter: string, amount: string | number) => SubmittableExtrinsic<'promise'> + // events to check after the transaction + events: Events +} + +interface TestConfiguration { + config: BasicConfig + query: Query + txContext: TxContext + account: KeyringPair +} + +export const testCases: TestConfiguration[] = [ + { + config: { + desc: 'V4 LIVE', + network: { + relay: { option: mainChains.polkadot.getConfig({}), setUpTx: [], storage: {} }, + parachains: [ + { + option: mainChains.kilt.getConfig({}), + storage: { + ...mainChains.kilt.storage.assignNativeTokensToAccounts( + [keysAlice.address], + initialBalanceKILT + ), + ...mainChains.kilt.storage.assignRelayTokensToAccounts([keysAlice.address]), + }, + setUpTx: [tx.switchPallet.pause()], + }, + + { option: mainChains.assetHub.getConfig({}), storage: {}, setUpTx: [] }, + ], + }, + }, + account: keysAlice, + query: { + sender: query.fungibles(mainChains.assetHub.chainInfo.nativeTokenLocation), + receiver: query.balances, + }, + txContext: { + balanceToTransfer: DOT, + tx: tx.xcmPallet.transferAssetsV4( + tx.xcmPallet.parachainV4(1, mainChains.assetHub.chainInfo.paraId), + mainChains.assetHub.chainInfo.nativeTokenLocation + ), + events: { + sender: [ + { + section: 'polkadotXcm', + method: 'Sent', + }, + ], + receiver: [ + { + section: 'balances', + method: 'Burned', + }, + { + section: 'balances', + method: 'Minted', + }, + ], + }, + }, + }, +] diff --git a/integration-tests/chopsticks/src/tests/switchPallet/pause/withdrawRelayToken/index.test.ts b/integration-tests/chopsticks/src/tests/switchPallet/pause/withdrawRelayToken/index.test.ts new file mode 100644 index 0000000000..056a5f9ae3 --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/pause/withdrawRelayToken/index.test.ts @@ -0,0 +1,76 @@ +import { describe, beforeEach, it, afterEach } from 'vitest' +import { sendTransaction, withExpect } from '@acala-network/chopsticks-testing' +import type { KeyringPair } from '@polkadot/keyring/types' + +import { createBlock } from '../../../../network/utils.js' +import { hexAddress } from '../../../../helper/utils.js' +import { testCases } from './config.js' +import { Config } from '../../../../network/types.js' +import { isSwitchPaused } from '../../index.js' +import { spinUpNetwork, tearDownNetwork } from '../../../utils.js' + +describe.each(testCases)( + 'Withdraw relay token while paused', + + ({ account, query, txContext, config }) => { + let senderContext: Config + let receiverContext: Config + let relayContext: Config + let senderAccount: KeyringPair + const { desc } = config + + // Create the network context + beforeEach(async () => { + const { relayChainContext, parachainContexts } = await spinUpNetwork(config) + relayContext = relayChainContext + senderContext = parachainContexts[0] + receiverContext = parachainContexts[1] + senderAccount = account + }) + + // Shut down the network + afterEach(async () => tearDownNetwork([receiverContext, senderContext, relayContext])) + + it(desc, async ({ expect }) => { + const { checkSystemEvents, checkEvents } = withExpect(expect) + const { tx, balanceToTransfer, events } = txContext + + // pre condition checks + const balanceBeforeTx = await query.receiver(receiverContext, hexAddress(senderAccount.address)) + const balanceBeforeTxSender = await query.sender(senderContext, hexAddress(senderAccount.address)) + expect(balanceBeforeTx).toBe(0n) + expect(balanceBeforeTxSender).toBeGreaterThan(0n) + expect(await isSwitchPaused(senderContext)).toBe(true) + + // action + const rawTx = tx(senderContext, hexAddress(senderAccount.address), balanceToTransfer.toString()) + const events1 = await sendTransaction(rawTx.signAsync(senderAccount)) + + // process tx + await createBlock(senderContext) + // process msg + await createBlock(receiverContext) + + // post condition checks + // check balance movement on sender chain. + const balanceAfterTxSender = await query.sender(senderContext, hexAddress(senderAccount.address)) + expect(balanceAfterTxSender).toBe(balanceBeforeTxSender - balanceToTransfer) + + const balanceAfterTx = await query.receiver(receiverContext, hexAddress(senderAccount.address)) + expect(balanceAfterTx).toBeGreaterThan(0n) + + // check events + events.sender.map( + async (pallet) => + await checkEvents(events1, pallet).toMatchSnapshot(`Withdraw relay funds ${JSON.stringify(pallet)}`) + ) + + events.receiver.map( + async (pallet) => + await checkSystemEvents(receiverContext, pallet).toMatchSnapshot( + `Receive relay funds ${JSON.stringify(pallet)}` + ) + ) + }) + } +) diff --git a/integration-tests/chopsticks/src/tests/switchPallet/pauseSwitch.test.ts b/integration-tests/chopsticks/src/tests/switchPallet/pauseSwitch.test.ts deleted file mode 100644 index 433bbfe6f4..0000000000 --- a/integration-tests/chopsticks/src/tests/switchPallet/pauseSwitch.test.ts +++ /dev/null @@ -1,399 +0,0 @@ -import { test } from 'vitest' - -import * as PeregrineConfig from '../../network/peregrine.js' -import * as AssetHubConfig from '../../network/assetHub.js' -import { - KILT, - ROC, - getAssetSwitchParameters, - initialBalanceKILT, - initialBalanceROC, - keysAlice, - keysCharlie, -} from '../../utils.js' -import { peregrineContext, getFreeRocPeregrine, getFreeEkiltAssetHub, assethubContext } from '../index.js' -import { - checkBalance, - createBlock, - setStorage, - hexAddress, - getXcmMessageV4ToSendEkilt, - checkSwitchPalletInvariant, -} from '../utils.js' -import { getAccountLocationV4, getRelayNativeAssetIdLocationV4, getSiblingLocationV4 } from '../../network/utils.js' -import { sendTransaction, withExpect } from '@acala-network/chopsticks-testing' - -/** - * These test cases should primarily check the behavior of the switch pair when it is paused. - * Similar to the full end-to-end tests, but after each step, the switch pair is paused. - */ - -// Send ROCs while switch is paused -test('Send ROCs while switch paused', async ({ expect }) => { - const { checkSystemEvents } = withExpect(expect) - - const switchParameters = getAssetSwitchParameters() - - // 10 % of relay tokens are used as fees - const feeAmount = (ROC * BigInt(10)) / BigInt(100) - - const remoteAssetId = { V4: AssetHubConfig.eKiltLocation } - const remoteXcmFeeId = { V4: { id: AssetHubConfig.nativeTokenLocation, fun: { Fungible: feeAmount } } } - const remoteReserveLocation = getSiblingLocationV4(AssetHubConfig.paraId) - - await setStorage(peregrineContext, { - ...PeregrineConfig.assignNativeTokensToAccounts([keysAlice.address], initialBalanceKILT), - ...PeregrineConfig.setSafeXcmVersion4(), - }) - - await setStorage( - peregrineContext, - PeregrineConfig.setSwitchPair( - switchParameters, - remoteAssetId, - remoteXcmFeeId, - remoteReserveLocation, - PeregrineConfig.initialPoolAccountId, - 'Paused' - ) - ) - - await setStorage(assethubContext, { - ...AssetHubConfig.assignDotTokensToAccountsAsStorage( - [keysAlice.address, PeregrineConfig.sovereignAccountAsSibling], - initialBalanceROC - ), - ...AssetHubConfig.createForeignAsset(keysCharlie.address), - }) - - await setStorage( - assethubContext, - AssetHubConfig.assignForeignAssetToAccounts([ - [PeregrineConfig.sovereignAccountAsSibling, switchParameters.sovereignSupply], - ]) - ) - - const peregrineDestination = getSiblingLocationV4(PeregrineConfig.paraId) - const beneficiary1 = getAccountLocationV4(hexAddress(keysAlice.address)) - const rocAsset = { V4: [getRelayNativeAssetIdLocationV4(ROC.toString())] } - - const signedTx1 = assethubContext.api.tx.polkadotXcm - .limitedReserveTransferAssets(peregrineDestination, beneficiary1, rocAsset, 0, 'Unlimited') - .signAsync(keysAlice) - - await sendTransaction(signedTx1) - await createBlock(assethubContext) - - // ... But it should fail on Peregrine - await createBlock(peregrineContext) - const aliceRocBalance = await getFreeRocPeregrine(keysAlice.address) - - await checkSystemEvents(peregrineContext, { section: 'messageQueue', method: 'Processed' }).toMatchSnapshot( - 'receiver Peregrine::messageQueue::[Processed]' - ) - - await checkSystemEvents(peregrineContext, { section: 'polkadotXcm', method: 'AssetsTrapped' }).toMatchSnapshot( - 'receiver Peregrine::polkadotXcm::[AssetsTrapped]' - ) - - expect(aliceRocBalance).toBe(BigInt(0)) - - await checkSwitchPalletInvariant(expect) -}, 30_000) - -/** - * 1. Send Rocs - * 2. pause switch - * 3. switch KILTs - */ -test('Switch PILTs against ePILTs while paused', async ({ expect }) => { - const switchParameters = getAssetSwitchParameters() - - // 10 % of relay tokens are used as fees - const feeAmount = (ROC * BigInt(10)) / BigInt(100) - - const remoteAssetId = { V4: AssetHubConfig.eKiltLocation } - const remoteXcmFeeId = { V4: { id: AssetHubConfig.nativeTokenLocation, fun: { Fungible: feeAmount } } } - const remoteReserveLocation = getSiblingLocationV4(AssetHubConfig.paraId) - - await setStorage(peregrineContext, { - ...PeregrineConfig.assignNativeTokensToAccounts([keysAlice.address], initialBalanceKILT), - ...PeregrineConfig.createAndAssignRocs(keysCharlie.address, []), - ...PeregrineConfig.setSafeXcmVersion4(), - ...PeregrineConfig.setSudoKey(keysAlice.address), - }) - - await setStorage( - peregrineContext, - PeregrineConfig.setSwitchPair(switchParameters, remoteAssetId, remoteXcmFeeId, remoteReserveLocation) - ) - - await setStorage(assethubContext, { - ...AssetHubConfig.assignDotTokensToAccountsAsStorage( - [keysAlice.address, PeregrineConfig.sovereignAccountAsSibling], - initialBalanceROC - ), - ...AssetHubConfig.createForeignAsset(keysCharlie.address), - }) - - await setStorage( - assethubContext, - AssetHubConfig.assignForeignAssetToAccounts([ - [PeregrineConfig.sovereignAccountAsSibling, switchParameters.sovereignSupply], - ]) - ) - - // 1. send ROCs 2 Peregrine - const peregrineDestination = getSiblingLocationV4(PeregrineConfig.paraId) - const beneficiary1 = getAccountLocationV4(hexAddress(keysAlice.address)) - const rocAsset = { V4: [getRelayNativeAssetIdLocationV4(ROC.toString())] } - - const signedTx1 = assethubContext.api.tx.polkadotXcm - .limitedReserveTransferAssets(peregrineDestination, beneficiary1, rocAsset, 0, 'Unlimited') - .signAsync(keysAlice) - - await sendTransaction(signedTx1) - await createBlock(assethubContext) - - // process msg. - await createBlock(peregrineContext) - const aliceRocBalance = await getFreeRocPeregrine(keysAlice.address) - expect(aliceRocBalance).toBeGreaterThan(BigInt(0)) - - // 2. Pause switch pair - await peregrineContext.api.tx.sudo - .sudo(peregrineContext.api.tx.assetSwitchPool1.pauseSwitchPair()) - .signAndSend(keysAlice) - await createBlock(peregrineContext) - - // 3. switch KILTs - const balanceToTransfer = initialBalanceKILT / BigInt(2) - - const beneficiary = getAccountLocationV4(hexAddress(keysAlice.address)) - - let section: string = '' - let errorName: string = '' - - // This should fail. - await peregrineContext.api.tx.assetSwitchPool1 - .switch(balanceToTransfer.toString(), beneficiary) - .signAndSend(keysAlice, ({ dispatchError }) => { - if (dispatchError) { - const decoded = peregrineContext.api.registry.findMetaError(dispatchError.asModule) - section = decoded.section - errorName = decoded.name - } - }) - - await createBlock(peregrineContext) - - expect(section).toBe('assetSwitchPool1') - expect(errorName).toBe('SwitchPairNotEnabled') - - await checkSwitchPalletInvariant(expect) -}, 30_000) - -/** - * 1. Send Rocs - * 2. switch KILTs - * 3. pause switch - * 4. send eKILTs back - */ -test('Switch ePILTs against PILTs while paused', async ({ expect }) => { - const { checkEvents, checkSystemEvents } = withExpect(expect) - - const switchParameters = getAssetSwitchParameters() - - // 10 % of relay tokens are used as fees - const feeAmount = (ROC * BigInt(10)) / BigInt(100) - - const remoteAssetId = { V4: AssetHubConfig.eKiltLocation } - const remoteXcmFeeId = { V4: { id: AssetHubConfig.nativeTokenLocation, fun: { Fungible: feeAmount } } } - const remoteReserveLocation = getSiblingLocationV4(AssetHubConfig.paraId) - - await setStorage(peregrineContext, { - ...PeregrineConfig.assignNativeTokensToAccounts([keysAlice.address], initialBalanceKILT), - ...PeregrineConfig.createAndAssignRocs(keysCharlie.address, []), - ...PeregrineConfig.setSafeXcmVersion4(), - ...PeregrineConfig.setSudoKey(keysAlice.address), - }) - - await setStorage( - peregrineContext, - PeregrineConfig.setSwitchPair(switchParameters, remoteAssetId, remoteXcmFeeId, remoteReserveLocation) - ) - - await setStorage(assethubContext, { - ...AssetHubConfig.assignDotTokensToAccountsAsStorage( - [keysAlice.address, PeregrineConfig.sovereignAccountAsSibling], - initialBalanceROC - ), - ...AssetHubConfig.createForeignAsset(keysCharlie.address), - }) - - await setStorage( - assethubContext, - AssetHubConfig.assignForeignAssetToAccounts([ - [PeregrineConfig.sovereignAccountAsSibling, switchParameters.sovereignSupply], - ]) - ) - - // 1. send ROCs 2 Peregrine - const peregrineDestination = getSiblingLocationV4(PeregrineConfig.paraId) - const beneficiary1 = getAccountLocationV4(hexAddress(keysAlice.address)) - const rocAsset = { V4: [getRelayNativeAssetIdLocationV4(ROC.toString())] } - - const signedTx1 = assethubContext.api.tx.polkadotXcm - .limitedReserveTransferAssets(peregrineDestination, beneficiary1, rocAsset, 0, 'Unlimited') - .signAsync(keysAlice) - await sendTransaction(signedTx1) - - // send msg - await createBlock(assethubContext) - // process msg. - await createBlock(peregrineContext) - - const aliceRocBalance = await getFreeRocPeregrine(keysAlice.address) - expect(aliceRocBalance).toBeGreaterThan(BigInt(0)) - - // 2. switch KILTs - const balanceToTransfer = initialBalanceKILT / BigInt(2) - - const beneficiary = getAccountLocationV4(hexAddress(keysAlice.address)) - - const signedTx2 = peregrineContext.api.tx.assetSwitchPool1 - .switch(balanceToTransfer.toString(), beneficiary) - .signAsync(keysAlice) - - const events2 = await sendTransaction(signedTx2) - - await createBlock(peregrineContext) - - await checkEvents(events2, 'assetSwitchPool1').toMatchSnapshot( - 'sender Peregrine::assetSwitchPool1::[LocalToRemoteSwitchExecuted]' - ) - await createBlock(assethubContext) - - // only check here, if alice received the funds - const balanceAliceEkilt = await getFreeEkiltAssetHub(keysAlice.address) - expect(balanceAliceEkilt).toBe(balanceToTransfer) - - // 3. Pause swap pairs - await peregrineContext.api.tx.sudo - .sudo(peregrineContext.api.tx.assetSwitchPool1.pauseSwitchPair()) - .signAndSend(keysAlice) - await createBlock(peregrineContext) - - // 4. send eKILTs back - const balanceToTransferBack = balanceToTransfer / BigInt(2) - const dest = getSiblingLocationV4(PeregrineConfig.paraId) - const remoteFeeId = { V4: AssetHubConfig.eKiltLocation } - const funds = { - V4: [ - { - id: AssetHubConfig.eKiltLocation, - fun: { Fungible: balanceToTransferBack.toString() }, - }, - ], - } - - const signedTx3 = assethubContext.api.tx.polkadotXcm - .transferAssetsUsingTypeAndThen( - dest, - funds, - 'LocalReserve', - remoteFeeId, - 'LocalReserve', - getXcmMessageV4ToSendEkilt(keysAlice.address), - 'Unlimited' - ) - .signAsync(keysAlice) - - await sendTransaction(signedTx3) - - await createBlock(assethubContext) - - // Tx should not fail on AH. - await checkBalance(getFreeEkiltAssetHub, keysAlice.address, expect, KILT * BigInt(25)) - - // prcess msg - await createBlock(peregrineContext) - - // ... but MSG execution should fail on Peregrine - await checkSystemEvents(peregrineContext, { section: 'messageQueue', method: 'Processed' }).toMatchSnapshot( - 'receiver Peregrine::messageQueue::[Processed]' - ) - await checkSystemEvents(peregrineContext, { section: 'polkadotXcm', method: 'AssetsTrapped' }).toMatchSnapshot( - 'receiver Peregrine::polkadotXcm::[AssetsTrapped]' - ) - - // The msg will not be processed. Therefore, some assets are not moved. We can not do strict checks here. - await checkSwitchPalletInvariant(expect, balanceToTransferBack) -}, 30_000) - -test('Withdraw ROCs while switch is paused', async ({ expect }) => { - await setStorage(peregrineContext, { - ...PeregrineConfig.assignNativeTokensToAccounts([keysAlice.address], initialBalanceKILT), - ...PeregrineConfig.createAndAssignRocs(keysCharlie.address, [keysAlice.address]), - ...PeregrineConfig.setSafeXcmVersion4(), - }) - - const switchParameters = getAssetSwitchParameters() - // 10 % of relay tokens are used as fees - const feeAmount = (ROC * BigInt(10)) / BigInt(100) - - const remoteAssetId = { V4: AssetHubConfig.eKiltLocation } - const remoteXcmFeeId = { V4: { id: AssetHubConfig.nativeTokenLocation, fun: { Fungible: feeAmount } } } - const remoteReserveLocation = getSiblingLocationV4(AssetHubConfig.paraId) - - await setStorage( - peregrineContext, - PeregrineConfig.setSwitchPair( - switchParameters, - remoteAssetId, - remoteXcmFeeId, - remoteReserveLocation, - PeregrineConfig.initialPoolAccountId, - 'Paused' - ) - ) - - await setStorage(assethubContext, { - ...AssetHubConfig.assignDotTokensToAccountsAsStorage( - [PeregrineConfig.sovereignAccountAsSibling], - initialBalanceROC - ), - ...AssetHubConfig.createForeignAsset(keysCharlie.address), - }) - - await setStorage( - assethubContext, - AssetHubConfig.assignForeignAssetToAccounts([ - [PeregrineConfig.sovereignAccountAsSibling, switchParameters.sovereignSupply], - ]) - ) - - let section: string = '' - let errorName: string = '' - - const assetHubDestination = getSiblingLocationV4(AssetHubConfig.paraId) - const assets = { V4: [getRelayNativeAssetIdLocationV4(ROC.toString())] } - const beneficiary = getAccountLocationV4(hexAddress(keysAlice.address)) - - await peregrineContext.api.tx.polkadotXcm - .transferAssets(assetHubDestination, beneficiary, assets, 0, 'Unlimited') - .signAndSend(keysAlice, ({ dispatchError }) => { - if (dispatchError) { - const decoded = peregrineContext.api.registry.findMetaError(dispatchError.asModule) - section = decoded.section - errorName = decoded.name - } - }) - - await createBlock(peregrineContext) - - expect(section).toBe('polkadotXcm') - expect(errorName).toBe('LocalExecutionIncomplete') - - await checkSwitchPalletInvariant(expect) -}, 30_000) diff --git a/integration-tests/chopsticks/src/tests/switchPallet/relayToken.test.ts b/integration-tests/chopsticks/src/tests/switchPallet/relayToken.test.ts deleted file mode 100644 index e4c64cdde3..0000000000 --- a/integration-tests/chopsticks/src/tests/switchPallet/relayToken.test.ts +++ /dev/null @@ -1,172 +0,0 @@ -import { test } from 'vitest' - -import * as PeregrineConfig from '../../network/peregrine.js' -import * as BasiliskConfig from '../../network/basilisk.js' -import * as AssetHubConfig from '../../network/assetHub.js' -import { - getAssetSwitchParameters, - initialBalanceKILT, - initialBalanceROC, - keysAlice, - keysBob, - keysCharlie, - ROC, -} from '../../utils.js' -import { - peregrineContext, - getFreeBalancePeregrine, - getFreeRocPeregrine, - basiliskContext, - rococoContext, - assethubContext, -} from '../index.js' -import { - checkBalance, - createBlock, - setStorage, - hexAddress, - checkBalanceInRange, - checkSwitchPalletInvariant, -} from '../utils.js' -import { sendTransaction, withExpect } from '@acala-network/chopsticks-testing' -import { getSiblingLocationV4 } from '../../network/utils.js' - -test('User transfers all of his dots', async ({ expect }) => { - const { checkEvents } = withExpect(expect) - - // Assign alice some KILTs and ROCs - await setStorage(peregrineContext, { - ...PeregrineConfig.assignNativeTokensToAccounts([keysAlice.address, keysBob.address], initialBalanceKILT), - ...PeregrineConfig.createAndAssignRocs(keysCharlie.address, [keysAlice.address]), - }) - - const signedTx = peregrineContext.api.tx.fungibles - .transfer(PeregrineConfig.ROC_LOCATION, keysBob.address, initialBalanceROC) - .signAsync(keysAlice) - - const events = await sendTransaction(signedTx) - - await createBlock(peregrineContext) - - checkEvents(events, { section: 'fungibles', method: 'Transferred' }).toMatchSnapshot( - `local Peregrine::fungibles::[Transferred] asset ${JSON.stringify(PeregrineConfig.ROC_LOCATION)}` - ) - - await checkBalance(getFreeRocPeregrine, keysAlice.address, expect, BigInt(0)) - - await checkBalance(getFreeRocPeregrine, keysBob.address, expect, initialBalanceROC) - - await checkBalanceInRange(getFreeBalancePeregrine, keysAlice.address, expect, [ - BigInt('99999800999995545'), - initialBalanceKILT, - ]) -}, 20_000) - -test('User gets dusted with ROCs', async ({ expect }) => { - const { checkEvents } = withExpect(expect) - - await setStorage(peregrineContext, { - ...PeregrineConfig.assignNativeTokensToAccounts([keysAlice.address], initialBalanceKILT), - ...PeregrineConfig.createAndAssignRocs(keysCharlie.address, [keysAlice.address]), - }) - - const balanceToTransfer = (initialBalanceKILT * BigInt(999998)) / BigInt(1000000) - - const signedTx = peregrineContext.api.tx.balances - .transferAllowDeath(keysBob.address, balanceToTransfer) - .signAsync(keysAlice) - - const events = await sendTransaction(signedTx) - - await createBlock(peregrineContext) - - checkEvents(events, { section: 'balances', method: 'Transfer' }).toMatchSnapshot( - 'local Peregrine::balances::[Transfer] native asset' - ) - // User should get dusted by this operation - checkEvents(events, { section: 'balances', method: 'DustLost' }).toMatchSnapshot( - 'local balances::fungibles::[DustLost]' - ) - // he should keep his rocs - await checkBalance(getFreeRocPeregrine, keysAlice.address, expect, initialBalanceROC) -}, 20_000) - -test('Send DOTs from basilisk 2 Peregrine', async ({ expect }) => { - const { checkSystemEvents } = withExpect(expect) - - const switchParameters = getAssetSwitchParameters() - - // 10 % of relay tokens are used as fees - const feeAmount = (ROC * BigInt(10)) / BigInt(100) - - const remoteAssetId = { V4: AssetHubConfig.eKiltLocation } - const remoteXcmFeeId = { V4: { id: AssetHubConfig.nativeTokenLocation, fun: { Fungible: feeAmount } } } - const remoteReserveLocation = getSiblingLocationV4(AssetHubConfig.paraId) - - await setStorage(peregrineContext, { - ...PeregrineConfig.assignNativeTokensToAccounts([keysAlice.address], initialBalanceKILT), - ...PeregrineConfig.createAndAssignRocs(keysCharlie.address, []), - ...PeregrineConfig.setSafeXcmVersion4(), - }) - - await setStorage( - peregrineContext, - PeregrineConfig.setSwitchPair(switchParameters, remoteAssetId, remoteXcmFeeId, remoteReserveLocation) - ) - - await setStorage(assethubContext, { - ...AssetHubConfig.createForeignAsset(keysCharlie.address), - }) - - await setStorage( - assethubContext, - AssetHubConfig.assignForeignAssetToAccounts([ - [PeregrineConfig.sovereignAccountAsSibling, switchParameters.sovereignSupply], - ]) - ) - - await setStorage(basiliskContext, { - ...BasiliskConfig.assignNativeTokensToAccounts([keysAlice.address]), - ...BasiliskConfig.assignRocTokensToAccounts([keysAlice.address], initialBalanceROC), - }) - - const balanceToTransfer = initialBalanceROC / BigInt(2) - - const beneficiary = { - V4: { - parents: 1, - interior: { - X2: [ - { Parachain: PeregrineConfig.paraId }, - { - AccountId32: { - id: hexAddress(keysAlice.address), - }, - }, - ], - }, - }, - } - - const signedTx = basiliskContext.api.tx.xTokens - .transfer(BasiliskConfig.dotTokenId, balanceToTransfer, beneficiary, 'Unlimited') - .signAsync(keysAlice) - - await sendTransaction(signedTx) - await createBlock(basiliskContext) - - // FWD the message - await createBlock(rococoContext) - - // Process the message - await createBlock(peregrineContext) - // Barrier blocked execution. No event will be emitted. - await checkSystemEvents(peregrineContext, 'messageQueue').toMatchSnapshot( - 'receiver Peregrine::messageQueue::[ProcessingFailed]' - ) - - // Alice should still have no rocs. - await checkBalance(getFreeRocPeregrine, keysAlice.address, expect, BigInt(0)) - - await checkSwitchPalletInvariant(expect) -}, 20_000) diff --git a/integration-tests/chopsticks/src/tests/switchPallet/switchConfig.test.ts b/integration-tests/chopsticks/src/tests/switchPallet/switchConfig.test.ts deleted file mode 100644 index c042bf1c89..0000000000 --- a/integration-tests/chopsticks/src/tests/switchPallet/switchConfig.test.ts +++ /dev/null @@ -1,228 +0,0 @@ -import { test } from 'vitest' - -import * as PeregrineConfig from '../../network/peregrine.js' -import * as AssetHubConfig from '../../network/assetHub.js' -import * as RococoConfig from '../../network/rococo.js' -import { - KILT, - ROC, - getAssetSwitchParameters, - initialBalanceKILT, - initialBalanceROC, - keysAlice, - keysCharlie, -} from '../../utils.js' -import { peregrineContext, getFreeEkiltAssetHub, assethubContext, getFreeRocAssetHub, rococoContext } from '../index.js' -import { - checkSwitchPalletInvariant, - checkBalance, - createBlock, - setStorage, - hexAddress, - getXcmMessageV4ToSendEkilt, -} from '../utils.js' -import { getAccountLocationV4, getChildLocation, getSiblingLocationV4 } from '../../network/utils.js' -import { sendTransaction, withExpect } from '@acala-network/chopsticks-testing' - -test('Switch KILTs against EKILTs no enough DOTs on AH', async ({ expect }) => { - const { checkEvents } = withExpect(expect) - - const switchParameters = getAssetSwitchParameters() - - // 10 % of relay tokens are used as fees - const feeAmount = (ROC * BigInt(10)) / BigInt(100) - - const remoteAssetId = { V4: AssetHubConfig.eKiltLocation } - const remoteXcmFeeId = { V4: { id: AssetHubConfig.nativeTokenLocation, fun: { Fungible: feeAmount } } } - const remoteReserveLocation = getSiblingLocationV4(AssetHubConfig.paraId) - - await setStorage(peregrineContext, { - ...PeregrineConfig.assignNativeTokensToAccounts([keysAlice.address], initialBalanceKILT), - ...PeregrineConfig.createAndAssignRocs(keysCharlie.address, [keysAlice.address]), - ...PeregrineConfig.setSafeXcmVersion4(), - }) - - await setStorage( - peregrineContext, - PeregrineConfig.setSwitchPair(switchParameters, remoteAssetId, remoteXcmFeeId, remoteReserveLocation) - ) - - await setStorage(assethubContext, { - ...AssetHubConfig.assignDotTokensToAccountsAsStorage( - [PeregrineConfig.sovereignAccountAsSibling], - initialBalanceROC - ), - ...AssetHubConfig.createForeignAsset(keysCharlie.address), - }) - - await setStorage( - assethubContext, - AssetHubConfig.assignForeignAssetToAccounts([ - [PeregrineConfig.sovereignAccountAsSibling, switchParameters.sovereignSupply], - ]) - ) - - const balanceToTransfer = initialBalanceKILT / BigInt(2) - - const beneficiary = getAccountLocationV4(hexAddress(keysAlice.address)) - - const signedTx = peregrineContext.api.tx.assetSwitchPool1 - .switch(balanceToTransfer.toString(), beneficiary) - .signAsync(keysAlice) - - const events = await sendTransaction(signedTx) - - await createBlock(peregrineContext) - - checkEvents(events, 'xcmpQueue').toMatchSnapshot('sender Peregrine::xcmpQueue::[XcmpMessageSent]') - checkEvents(events, 'assetSwitchPool1').toMatchSnapshot( - 'sender Peregrine::assetSwitchPool1::[LocalToRemoteSwitchExecuted]' - ) - checkEvents(events, { section: 'balances', method: 'Transfer' }).toMatchSnapshot( - 'sender Peregrine::balances::[Transfer]' - ) - - // process msg. We don't care about the events. We check only the funds. - await createBlock(assethubContext) - - await checkBalance(getFreeEkiltAssetHub, keysAlice.address, expect, BigInt(0)) - await checkBalance(getFreeRocAssetHub, keysAlice.address, expect, BigInt(0)) - - await checkSwitchPalletInvariant(expect, balanceToTransfer) -}, 20_000) - -test('Send eKILT while switch Pair does not exist', async ({ expect }) => { - const { checkSystemEvents } = withExpect(expect) - - const switchParameters = getAssetSwitchParameters(initialBalanceKILT * BigInt(1000)) - - await setStorage(assethubContext, { - ...AssetHubConfig.assignDotTokensToAccountsAsStorage( - [keysAlice.address, PeregrineConfig.sovereignAccountAsSibling], - initialBalanceROC - ), - ...AssetHubConfig.createForeignAsset(keysCharlie.address), - ...AssetHubConfig.assignForeignAssetToAccounts([[keysAlice.address, switchParameters.circulatingSupply]]), - }) - - const dest = getSiblingLocationV4(PeregrineConfig.paraId) - const remoteFeeId = { V4: AssetHubConfig.eKiltLocation } - - const funds = { - V4: [ - { - id: AssetHubConfig.eKiltLocation, - fun: { Fungible: KILT }, - }, - ], - } - - const signedTx = assethubContext.api.tx.polkadotXcm - .transferAssetsUsingTypeAndThen( - dest, - funds, - 'LocalReserve', - remoteFeeId, - 'LocalReserve', - getXcmMessageV4ToSendEkilt(keysAlice.address), - 'Unlimited' - ) - .signAsync(keysAlice) - - await sendTransaction(signedTx) - // send msg - await createBlock(assethubContext) - - // Will fail on the receiver side - await createBlock(peregrineContext) - await checkSystemEvents(peregrineContext, 'messageQueue').toMatchSnapshot( - 'receiver Peregrine::messageQueue::[Processed]' - ) -}, 20_000) - -test('Send eKILT from other reserve location', async ({ expect }) => { - const { checkSystemEvents } = withExpect(expect) - - const switchParameters = getAssetSwitchParameters() - const feeAmount = (ROC * BigInt(10)) / BigInt(100) - const remoteAssetId = { V4: AssetHubConfig.eKiltLocation } - const remoteXcmFeeId = { V4: { id: AssetHubConfig.nativeTokenLocation, fun: { Fungible: feeAmount } } } - const remoteReserveLocation = getSiblingLocationV4(AssetHubConfig.paraId) - - await setStorage(rococoContext, { - ...RococoConfig.setSudoKey(keysAlice.address), - ...RococoConfig.assignNativeTokensToAccounts([keysAlice.address]), - }) - - await setStorage(assethubContext, { - ...AssetHubConfig.createForeignAsset(keysCharlie.address), - }) - - await setStorage( - assethubContext, - AssetHubConfig.assignForeignAssetToAccounts([ - [PeregrineConfig.sovereignAccountAsSibling, switchParameters.sovereignSupply], - ]) - ) - - await setStorage( - peregrineContext, - PeregrineConfig.setSwitchPair(switchParameters, remoteAssetId, remoteXcmFeeId, remoteReserveLocation) - ) - - const dest = { V3: getChildLocation(PeregrineConfig.paraId) } - - const xcmMessage = { - V3: [ - { - ReserveAssetDeposited: [ - { - id: { Concrete: AssetHubConfig.eKiltLocation }, - fun: { Fungible: initialBalanceKILT }, - }, - ], - }, - 'ClearOrigin', - { - BuyExecution: { - fees: { - id: { Concrete: AssetHubConfig.eKiltLocation }, - fun: { Fungible: initialBalanceKILT }, - }, - weightLimit: 'Unlimited', - }, - }, - { - DepositAsset: { - assets: { Wild: 'All' }, - beneficiary: { - parents: 0, - interior: { - X1: { - AccountId32: { - id: hexAddress(keysAlice.address), - }, - }, - }, - }, - }, - }, - ], - } - - const innerTx = rococoContext.api.tx.xcmPallet.send(dest, xcmMessage) - - const tx = rococoContext.api.tx.sudo.sudo(innerTx).signAsync(keysAlice) - - // send msg - await sendTransaction(tx) - await createBlock(rococoContext) - - await createBlock(peregrineContext) - // We expect the UntrustedReserveLocation error which results in failing the msg. The error will NOT emitted as an event. - await checkSystemEvents(peregrineContext, 'messageQueue').toMatchSnapshot( - 'receiver Peregrine::messageQueue::[Processed]' - ) - - await checkSwitchPalletInvariant(expect) -}, 20_000) diff --git a/integration-tests/chopsticks/src/tests/switchPallet/switchConfig/failingOnReceiver/__snapshots__/index.test.ts.snap b/integration-tests/chopsticks/src/tests/switchPallet/switchConfig/failingOnReceiver/__snapshots__/index.test.ts.snap new file mode 100644 index 0000000000..42b0947304 --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/switchConfig/failingOnReceiver/__snapshots__/index.test.ts.snap @@ -0,0 +1,57 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`Switch KILTs while receiver can not handle them > V4 LIVE > Switch on native chain: "assetSwitchPool1" 1`] = ` +[ + { + "data": { + "amount": 1000000000000000, + "from": "4seWojfEHrk5YKPahdErazQ3CWEHZYi6NV4gKz5AaejWbRPJ", + "to": { + "V4": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": null, + }, + }, + ], + }, + "parents": 0, + }, + }, + }, + "method": "LocalToRemoteSwitchExecuted", + "section": "assetSwitchPool1", + }, +] +`; + +exports[`Switch KILTs while receiver can not handle them > V4 LIVE > assetSwitchPool1 Finalization 1`] = ` +[ + { + "data": { + "amount": 1000000000000000, + "from": "4seWojfEHrk5YKPahdErazQ3CWEHZYi6NV4gKz5AaejWbRPJ", + "to": { + "V4": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": null, + }, + }, + ], + }, + "parents": 0, + }, + }, + }, + "method": "LocalToRemoteSwitchReverted", + "section": "assetSwitchPool1", + }, +] +`; diff --git a/integration-tests/chopsticks/src/tests/switchPallet/switchConfig/failingOnReceiver/config.ts b/integration-tests/chopsticks/src/tests/switchPallet/switchConfig/failingOnReceiver/config.ts new file mode 100644 index 0000000000..f94acb9fe1 --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/switchConfig/failingOnReceiver/config.ts @@ -0,0 +1,79 @@ +import type { EventFilter } from '@acala-network/chopsticks-testing' +import type { ApiPromise } from '@polkadot/api' +import type { SubmittableExtrinsic } from '@polkadot/api/types' +import type { KeyringPair } from '@polkadot/keyring/types' + +import { keysAlice, KILT } from '../../../../helper/utils.js' +import { mainChains } from '../../../../network/index.js' +import { tx, query } from '../../../../helper/api.js' +import type { BasicConfig } from '../../../types.js' + +interface Query { + sender: ({ api }: { api: ApiPromise }, address: string) => Promise + + receiver: ({ api }: { api: ApiPromise }, address: string) => Promise +} + +interface Events { + // events to check after the transaction on the native chain + sender: EventFilter[] + // events to check after the transaction on the foreign chain + receiver: EventFilter[] +} + +interface TxContext { + // amount of funds to transfer + balanceToTransfer: bigint + // transactions to execute + tx: ({ api }: { api: ApiPromise }, acc: string, amount: string) => SubmittableExtrinsic<'promise'> + // events to check after the transaction + events: Events +} + +interface TestConfiguration { + config: BasicConfig + query: Query + txContext: TxContext + account: KeyringPair + sovereignAccount: string +} + +export const testCases: TestConfiguration[] = [ + { + config: { + desc: 'V4 LIVE', + network: { + relay: { option: mainChains.polkadot.getConfig({}), storage: {}, setUpTx: [] }, + parachains: [ + { + option: mainChains.kilt.getConfig({}), + setUpTx: [], + storage: { + ...mainChains.kilt.storage.assignNativeTokensToAccounts([keysAlice.address]), + ...mainChains.kilt.storage.assignRelayTokensToAccounts([keysAlice.address]), + }, + }, + { + option: mainChains.assetHub.getConfig({}), + setUpTx: [], + storage: {}, + }, + ], + }, + }, + account: keysAlice, + query: { + sender: query.balances, + receiver: query.foreignAssets(mainChains.assetHub.chainInfo.eKiltLocation), + }, + txContext: { + balanceToTransfer: KILT, + tx: tx.switchPallet.switchV4(), + events: { + sender: ['assetSwitchPool1'], + receiver: [], + }, + }, + sovereignAccount: mainChains.kilt.chainInfo.sovereignAccountOnSiblingChains, + }, +] diff --git a/integration-tests/chopsticks/src/tests/switchPallet/switchConfig/failingOnReceiver/index.test.ts b/integration-tests/chopsticks/src/tests/switchPallet/switchConfig/failingOnReceiver/index.test.ts new file mode 100644 index 0000000000..a4d74afc5f --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/switchConfig/failingOnReceiver/index.test.ts @@ -0,0 +1,96 @@ +import { describe, beforeEach, it, afterEach } from 'vitest' +import { sendTransaction, withExpect } from '@acala-network/chopsticks-testing' +import type { KeyringPair } from '@polkadot/keyring/types' + +import { createBlock } from '../../../../network/utils.js' +import { calculateTxFees, hexAddress } from '../../../../helper/utils.js' +import { testCases } from './config.js' +import type { Config } from '../../../../network/types.js' +import { checkSwitchPalletInvariant } from '../../index.js' +import { spinUpNetwork, tearDownNetwork } from '../../../utils.js' + +describe.each(testCases)( + 'Switch KILTs while receiver can not handle them', + + ({ account, query, txContext, config, sovereignAccount }) => { + let senderContext: Config + let receiverContext: Config + let relayContext: Config + let senderAccount: KeyringPair + const { desc } = config + + // Create the network context + beforeEach(async () => { + const { parachainContexts, relayChainContext } = await spinUpNetwork(config) + relayContext = relayChainContext + senderContext = parachainContexts[0] + receiverContext = parachainContexts[1] + senderAccount = account + }) + + // Shut down the network + afterEach(async () => await tearDownNetwork([receiverContext, senderContext, relayContext])) + + it(desc, async ({ expect }) => { + const { checkSystemEvents, checkEvents } = withExpect(expect) + const { tx, balanceToTransfer, events } = txContext + + //pre condition checks + const balanceBeforeTx = await query.receiver(receiverContext, hexAddress(senderAccount.address)) + const balanceBeforeTxSender = await query.sender(senderContext, hexAddress(senderAccount.address)) + expect(balanceBeforeTx).toBe(0n) + expect(balanceBeforeTxSender).toBeGreaterThan(0n) + + // action + const rawTx = tx(senderContext, hexAddress(senderAccount.address), balanceToTransfer.toString()) + const events1 = await sendTransaction(rawTx.signAsync(senderAccount)) + + // process tx + await createBlock(senderContext) + // process msg + await createBlock(receiverContext) + + // post condition checks + // check balance movement on sender chain. + const txFees = await calculateTxFees(rawTx, senderAccount) + const balanceAfterTxSender = await query.sender(senderContext, hexAddress(senderAccount.address)) + expect(balanceAfterTxSender).toBe(balanceBeforeTxSender - balanceToTransfer - txFees) + + // Tx should fail on receiver + const balanceAfterTx = await query.receiver(receiverContext, hexAddress(senderAccount.address)) + + expect(balanceAfterTx).toBe(0n) + + // check events + await Promise.all( + events.sender.map((pallet) => + checkEvents(events1, pallet).toMatchSnapshot(`Switch on native chain: ${JSON.stringify(pallet)}`) + ) + ) + + await Promise.all( + events.receiver.map((pallet) => + checkSystemEvents(receiverContext, pallet).toMatchSnapshot( + `Switch on receiver chain: ${JSON.stringify(pallet)}` + ) + ) + ) + + // finalize switch + await createBlock(senderContext) + await checkSystemEvents(senderContext, 'assetSwitchPool1').toMatchSnapshot('assetSwitchPool1 Finalization') + + const balanceAfterFinalization = await query.sender(senderContext, hexAddress(senderAccount.address)) + expect(balanceAfterFinalization).toBe(balanceBeforeTxSender - txFees) + + await checkSwitchPalletInvariant( + expect, + senderContext, + receiverContext, + sovereignAccount, + query.sender, + query.receiver + ) + }) + } +) diff --git a/integration-tests/chopsticks/src/tests/switchPallet/switchConfig/noSwitchPair/__snapshots__/index.test.ts.snap b/integration-tests/chopsticks/src/tests/switchPallet/switchConfig/noSwitchPair/__snapshots__/index.test.ts.snap new file mode 100644 index 0000000000..c1403d64de --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/switchConfig/noSwitchPair/__snapshots__/index.test.ts.snap @@ -0,0 +1,118 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`Switch eKILTs while no pair set > V4 LIVE > Switch eKILTs on sender chain: {"section":"polkadotXcm","method":"Sent"} 1`] = ` +[ + { + "data": { + "destination": { + "interior": { + "X1": [ + { + "Parachain": "(rounded 2100)", + }, + ], + }, + "parents": 1, + }, + "message": [ + { + "ReserveAssetDeposited": [ + { + "fun": { + "Fungible": 1000000000000000, + }, + "id": { + "interior": { + "X2": [ + { + "GlobalConsensus": { + "Ethereum": { + "chainId": 1, + }, + }, + }, + { + "AccountKey20": { + "key": "0x5d3d01fd6d2ad1169b17918eb4f153c6616288eb", + "network": null, + }, + }, + ], + }, + "parents": 2, + }, + }, + ], + }, + "ClearOrigin", + { + "BuyExecution": { + "fees": { + "fun": { + "Fungible": 1000000000000000, + }, + "id": { + "interior": { + "X2": [ + { + "GlobalConsensus": { + "Ethereum": { + "chainId": 1, + }, + }, + }, + { + "AccountKey20": { + "key": "0x5d3d01fd6d2ad1169b17918eb4f153c6616288eb", + "network": null, + }, + }, + ], + }, + "parents": 2, + }, + }, + "weightLimit": "Unlimited", + }, + }, + { + "DepositAsset": { + "assets": { + "Wild": "All", + }, + "beneficiary": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": null, + }, + }, + ], + }, + "parents": 0, + }, + }, + }, + ], + "messageId": "(hash)", + "origin": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": "Polkadot", + }, + }, + ], + }, + "parents": 0, + }, + }, + "method": "Sent", + "section": "polkadotXcm", + }, +] +`; diff --git a/integration-tests/chopsticks/src/tests/switchPallet/switchConfig/noSwitchPair/config.ts b/integration-tests/chopsticks/src/tests/switchPallet/switchConfig/noSwitchPair/config.ts new file mode 100644 index 0000000000..fd9b7f13be --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/switchConfig/noSwitchPair/config.ts @@ -0,0 +1,91 @@ +import type { EventFilter } from '@acala-network/chopsticks-testing' +import type { ApiPromise } from '@polkadot/api' +import type { SubmittableExtrinsic } from '@polkadot/api/types' +import type { KeyringPair } from '@polkadot/keyring/types' + +import { initialBalanceKILT, keysAlice, KILT } from '../../../../helper/utils.js' +import { mainChains } from '../../../../network/index.js' +import { tx, query } from '../../../../helper/api.js' +import type { BasicConfig } from '../../../types.js' +import { getXcmMessageV4ToSendEkilt } from '../../index.js' + +interface Query { + sender: ({ api }: { api: ApiPromise }, address: string) => Promise + + receiver: ({ api }: { api: ApiPromise }, address: string) => Promise +} + +interface Events { + sender: EventFilter[] + + receiver: EventFilter[] +} + +/** + * Context for the transaction to switch funds between chains. + */ +interface TxContext { + // amount of funds to transfer + balanceToTransfer: bigint + // transactions to execute + tx: ({ api }: { api: ApiPromise }, amount: string) => SubmittableExtrinsic<'promise'> + // events to check after the transaction + events: Events +} + +interface TestConfiguration { + config: BasicConfig + query: Query + txContext: TxContext + account: KeyringPair +} + +export const testCases: TestConfiguration[] = [ + { + config: { + desc: 'V4 LIVE', + network: { + relay: { option: mainChains.polkadot.getConfig({}), storage: {}, setUpTx: [] }, + parachains: [ + { + option: mainChains.assetHub.getConfig({}), + storage: { + ...mainChains.assetHub.storage.assignNativeTokensToAccountsAsStorage([keysAlice.address]), + ...mainChains.assetHub.storage.assignForeignAssetToAccounts([ + [keysAlice.address, initialBalanceKILT], + ]), + }, + setUpTx: [], + }, + { + option: mainChains.kilt.getConfig({}), + setUpTx: [], + storage: mainChains.kilt.storage.removeSwitchPair(), + }, + ], + }, + }, + account: keysAlice, + query: { + sender: query.foreignAssets(mainChains.assetHub.chainInfo.eKiltLocation), + receiver: query.balances, + }, + txContext: { + balanceToTransfer: KILT, + tx: tx.xcmPallet.transferAssetsUsingTypeAndThenV4( + tx.xcmPallet.parachainV4(1, mainChains.kilt.chainInfo.paraId), + mainChains.assetHub.chainInfo.eKiltLocation, + getXcmMessageV4ToSendEkilt(keysAlice.address) + ), + events: { + sender: [ + { + section: 'polkadotXcm', + method: 'Sent', + }, + ], + receiver: [], + }, + }, + }, +] diff --git a/integration-tests/chopsticks/src/tests/switchPallet/switchConfig/noSwitchPair/index.test.ts b/integration-tests/chopsticks/src/tests/switchPallet/switchConfig/noSwitchPair/index.test.ts new file mode 100644 index 0000000000..73e23be026 --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/switchConfig/noSwitchPair/index.test.ts @@ -0,0 +1,77 @@ +import { describe, beforeEach, it, afterEach } from 'vitest' +import { sendTransaction, withExpect } from '@acala-network/chopsticks-testing' +import type { KeyringPair } from '@polkadot/keyring/types' + +import { createBlock } from '../../../../network/utils.js' +import { hexAddress } from '../../../../helper/utils.js' +import { testCases } from './config.js' +import type { Config } from '../../../../network/types.js' +import { spinUpNetwork, tearDownNetwork } from '../../../utils.js' + +describe.each(testCases)( + 'Switch eKILTs while no pair set', + + ({ account, query, txContext, config }) => { + let senderContext: Config + let receiverContext: Config + let relayContext: Config + let senderAccount: KeyringPair + const { desc } = config + + // Create the network context + beforeEach(async () => { + const { relayChainContext, parachainContexts } = await spinUpNetwork(config) + relayContext = relayChainContext + senderContext = parachainContexts[0] + receiverContext = parachainContexts[1] + senderAccount = account + }) + + // Shut down the network + afterEach(async () => await tearDownNetwork([receiverContext, senderContext, relayContext])) + + it(desc, async ({ expect }) => { + const { checkSystemEvents, checkEvents } = withExpect(expect) + const { tx, balanceToTransfer, events } = txContext + + // pre condition checks + const balanceBeforeTx = await query.receiver(receiverContext, hexAddress(senderAccount.address)) + const balanceBeforeTxSender = await query.sender(senderContext, hexAddress(senderAccount.address)) + expect(balanceBeforeTx).toBe(0n) + expect(balanceBeforeTxSender).toBeGreaterThan(0n) + + // action + const rawTx = tx(senderContext, balanceToTransfer.toString()) + const events1 = await sendTransaction(rawTx.signAsync(senderAccount)) + + // process tx + await createBlock(senderContext) + // process msg + await createBlock(receiverContext) + + // post condition checks + // check balance movement on sender chain. + const balanceAfterTxSender = await query.sender(senderContext, hexAddress(senderAccount.address)) + expect(balanceAfterTxSender).toBe(balanceBeforeTxSender - balanceToTransfer) + + // Tx should fail on receiver + const balanceAfterTx = await query.receiver(receiverContext, hexAddress(senderAccount.address)) + expect(balanceAfterTx).toBe(0n) + + // check events + events.sender.map( + async (pallet) => + await checkEvents(events1, pallet).toMatchSnapshot( + `Switch eKILTs on sender chain: ${JSON.stringify(pallet)}` + ) + ) + + events.receiver.map( + async (pallet) => + await checkSystemEvents(receiverContext, pallet).toMatchSnapshot( + `Switch eKILTs on receiver chain: ${JSON.stringify(pallet)}` + ) + ) + }) + } +) diff --git a/integration-tests/chopsticks/src/tests/switchPallet/switchConfig/otherReserveLocation/__snapshots__/index.test.ts.snap b/integration-tests/chopsticks/src/tests/switchPallet/switchConfig/otherReserveLocation/__snapshots__/index.test.ts.snap new file mode 100644 index 0000000000..00dcb45680 --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/switchConfig/otherReserveLocation/__snapshots__/index.test.ts.snap @@ -0,0 +1,109 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`Switch other reserve location > V4 LIVE > Switch eKILTs from untrusted location sender: {"section":"xcmPallet","method":"Sent"} 1`] = ` +[ + { + "data": { + "destination": { + "interior": { + "X1": [ + { + "Parachain": "(rounded 2100)", + }, + ], + }, + "parents": 0, + }, + "message": [ + { + "ReserveAssetDeposited": [ + { + "fun": { + "Fungible": 1000000000000000, + }, + "id": { + "interior": { + "X2": [ + { + "GlobalConsensus": { + "Ethereum": { + "chainId": 1, + }, + }, + }, + { + "AccountKey20": { + "key": "0x5d3d01fd6d2ad1169b17918eb4f153c6616288eb", + "network": null, + }, + }, + ], + }, + "parents": 2, + }, + }, + ], + }, + "ClearOrigin", + { + "BuyExecution": { + "fees": { + "fun": { + "Fungible": 1000000000000000, + }, + "id": { + "interior": { + "X2": [ + { + "GlobalConsensus": { + "Ethereum": { + "chainId": 1, + }, + }, + }, + { + "AccountKey20": { + "key": "0x5d3d01fd6d2ad1169b17918eb4f153c6616288eb", + "network": null, + }, + }, + ], + }, + "parents": 2, + }, + }, + "weightLimit": "Unlimited", + }, + }, + { + "DepositAsset": { + "assets": { + "Wild": "All", + }, + "beneficiary": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": null, + }, + }, + ], + }, + "parents": 0, + }, + }, + }, + ], + "messageId": "(hash)", + "origin": { + "interior": "Here", + "parents": 0, + }, + }, + "method": "Sent", + "section": "xcmPallet", + }, +] +`; diff --git a/integration-tests/chopsticks/src/tests/switchPallet/switchConfig/otherReserveLocation/config.ts b/integration-tests/chopsticks/src/tests/switchPallet/switchConfig/otherReserveLocation/config.ts new file mode 100644 index 0000000000..ee00abee8d --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/switchConfig/otherReserveLocation/config.ts @@ -0,0 +1,70 @@ +import type { EventFilter } from '@acala-network/chopsticks-testing' +import type { ApiPromise } from '@polkadot/api' +import type { SubmittableExtrinsic } from '@polkadot/api/types' +import type { KeyringPair } from '@polkadot/keyring/types' + +import { keysAlice, KILT } from '../../../../helper/utils.js' +import { mainChains } from '../../../../network/index.js' +import { tx, query } from '../../../../helper/api.js' +import type { BasicConfig } from '../../../types.js' +import { getDepositXcmMessageV3 } from '../../index.js' + +interface Query { + receiver: ({ api }: { api: ApiPromise }, address: string) => Promise +} + +interface Events { + // events to check after the transaction on the native chain + sender: EventFilter[] + // events to check after the transaction on the foreign chain + receiver: EventFilter[] +} + +interface TxContext { + // amount of funds to transfer + balanceToTransfer: bigint + // transactions to execute + tx: ({ api }: { api: ApiPromise }, xcmMessage: object) => SubmittableExtrinsic<'promise'> + // the xcm message to send + message: (amount: string, receiver: string) => object + // events to check after the transaction + events: Events +} + +interface TestConfiguration { + config: BasicConfig + query: Query + txContext: TxContext + account: KeyringPair +} + +// Test pairs for limited reserve transfers +export const testCases: TestConfiguration[] = [ + { + config: { + desc: 'V4 LIVE', + network: { + relay: { option: mainChains.polkadot.getConfig({}), storage: {}, setUpTx: [] }, + parachains: [{ option: mainChains.kilt.getConfig({}), setUpTx: [], storage: {} }], + }, + }, + account: keysAlice, + query: { + receiver: query.balances, + }, + txContext: { + balanceToTransfer: KILT, + message: getDepositXcmMessageV3(mainChains.assetHub.chainInfo.eKiltLocation), + tx: tx.xcmPallet.send(tx.xcmPallet.parachainV3(0, mainChains.kilt.chainInfo.paraId)), + events: { + sender: [ + { + section: 'xcmPallet', + method: 'Sent', + }, + ], + receiver: [], + }, + }, + }, +] diff --git a/integration-tests/chopsticks/src/tests/switchPallet/switchConfig/otherReserveLocation/index.test.ts b/integration-tests/chopsticks/src/tests/switchPallet/switchConfig/otherReserveLocation/index.test.ts new file mode 100644 index 0000000000..080b2a93e5 --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/switchConfig/otherReserveLocation/index.test.ts @@ -0,0 +1,69 @@ +import { describe, beforeEach, it, afterEach } from 'vitest' +import { withExpect } from '@acala-network/chopsticks-testing' +import type { KeyringPair } from '@polkadot/keyring/types' + +import { createBlock, scheduleTx } from '../../../../network/utils.js' +import { hexAddress, keysAlice } from '../../../../helper/utils.js' +import { testCases } from './config.js' +import type { Config } from '../../../../network/types.js' +import { spinUpNetwork, tearDownNetwork } from '../../../utils.js' + +describe.each(testCases)( + 'Switch other reserve location', + + ({ account, query, txContext, config }) => { + let receiverContext: Config + let relayContext: Config + let senderAccount: KeyringPair + const { desc } = config + + // Create the network context + beforeEach(async () => { + const { parachainContexts, relayChainContext } = await spinUpNetwork(config) + + relayContext = relayChainContext + receiverContext = parachainContexts[0] + senderAccount = account + }) + + // Shut down the network + afterEach(async () => await tearDownNetwork([receiverContext, relayContext])) + + it(desc, async ({ expect }) => { + const { checkSystemEvents } = withExpect(expect) + const { tx, balanceToTransfer, events, message } = txContext + + // precondition checks + const balanceBeforeTx = await query.receiver(receiverContext, hexAddress(senderAccount.address)) + expect(balanceBeforeTx).toBe(0n) + + // action + // schedule tx + const rawTx = tx(relayContext, message(balanceToTransfer.toString(), keysAlice.address)) + await scheduleTx(relayContext, rawTx.method.toHex()) + // process tx + await createBlock(relayContext) + // process msg + await createBlock(receiverContext) + + // post condition checks + const balanceAfterTx = await query.receiver(receiverContext, hexAddress(senderAccount.address)) + expect(balanceAfterTx).toBe(0n) + + // check events + events.sender.map( + async (pallet) => + await checkSystemEvents(relayContext, pallet).toMatchSnapshot( + `Switch eKILTs from untrusted location sender: ${JSON.stringify(pallet)}` + ) + ) + + events.receiver.map( + async (pallet) => + await checkSystemEvents(receiverContext, pallet).toMatchSnapshot( + `Switch eKILTs from untrusted location receiver: ${JSON.stringify(pallet)}` + ) + ) + }) + } +) diff --git a/integration-tests/chopsticks/src/tests/switchPallet/switchEkiltAgainstKilt.test.ts b/integration-tests/chopsticks/src/tests/switchPallet/switchEkiltAgainstKilt.test.ts deleted file mode 100644 index 4c3567659d..0000000000 --- a/integration-tests/chopsticks/src/tests/switchPallet/switchEkiltAgainstKilt.test.ts +++ /dev/null @@ -1,133 +0,0 @@ -import { test } from 'vitest' -import { sendTransaction, withExpect } from '@acala-network/chopsticks-testing' - -import * as PeregrineConfig from '../../network/peregrine.js' -import * as AssetHubConfig from '../../network/assetHub.js' -import { KILT, ROC, getAssetSwitchParameters, initialBalanceROC, keysAlice, keysCharlie } from '../../utils.js' -import { - peregrineContext, - getFreeBalancePeregrine, - getFreeRocPeregrine, - getFreeEkiltAssetHub, - assethubContext, - getRemoteLockedSupply, -} from '../index.js' -import { - checkSwitchPalletInvariant, - checkBalance, - createBlock, - setStorage, - getXcmMessageV4ToSendEkilt, - checkBalanceInRange, - checkBalanceMovementIncomingSwitch, -} from '../utils.js' -import { getSiblingLocationV4 } from '../../network/utils.js' - -test('Switch ePILTs against PILTS on Peregrine', async ({ expect }) => { - const { checkSystemEvents } = withExpect(expect) - - const switchParameters = getAssetSwitchParameters() - // alice has the whole circulating supply. - const fundsAlice = switchParameters.circulatingSupply - const feeAmount = (ROC * BigInt(10)) / BigInt(100) - - const remoteAssetId = { V4: AssetHubConfig.eKiltLocation } - const remoteXcmFeeId = { V4: { id: AssetHubConfig.nativeTokenLocation, fun: { Fungible: feeAmount } } } - const remoteReserveLocation = getSiblingLocationV4(AssetHubConfig.paraId) - - await setStorage(peregrineContext, { - ...PeregrineConfig.createAndAssignRocs(keysCharlie.address, [keysAlice.address], initialBalanceROC), - ...PeregrineConfig.setSwitchPair(switchParameters, remoteAssetId, remoteXcmFeeId, remoteReserveLocation), - ...PeregrineConfig.setSafeXcmVersion4(), - }) - - await setStorage(assethubContext, { - ...AssetHubConfig.assignDotTokensToAccountsAsStorage( - [keysAlice.address, PeregrineConfig.sovereignAccountAsSibling], - initialBalanceROC - ), - ...AssetHubConfig.createForeignAsset(keysCharlie.address), - }) - - await setStorage( - assethubContext, - AssetHubConfig.assignForeignAssetToAccounts([ - [PeregrineConfig.sovereignAccountAsSibling, switchParameters.sovereignSupply], - [keysAlice.address, fundsAlice], - ]) - ) - - // check initial balance of Alice on Spiritnet. Alice should have 0 KILT - await checkBalance(getFreeBalancePeregrine, keysAlice.address, expect, BigInt(0)) - await checkBalance(getFreeRocPeregrine, keysAlice.address, expect, initialBalanceROC) - await checkBalance(getFreeEkiltAssetHub, keysAlice.address, expect, switchParameters.circulatingSupply) - - const initialBalancePoolAccount = await getFreeBalancePeregrine(PeregrineConfig.initialPoolAccountId) - const initialBalanceSovereignAccount = await getFreeEkiltAssetHub(PeregrineConfig.sovereignAccountAsSibling) - const initialRemoteLockedSupply = await getRemoteLockedSupply() - - // 50 PILTS - const balanceToTransfer = BigInt('50000000000000000') - - const dest = getSiblingLocationV4(PeregrineConfig.paraId) - - const remoteFeeId = { V4: AssetHubConfig.eKiltLocation } - - const funds = { - V4: [ - { - id: AssetHubConfig.eKiltLocation, - fun: { Fungible: balanceToTransfer.toString() }, - }, - ], - } - - const signedTx = assethubContext.api.tx.polkadotXcm.transferAssetsUsingTypeAndThen( - dest, - funds, - 'LocalReserve', - remoteFeeId, - 'LocalReserve', - getXcmMessageV4ToSendEkilt(keysAlice.address), - 'Unlimited' - ) - - // send msg - await sendTransaction(signedTx.signAsync(keysAlice)) - await createBlock(assethubContext) - - // check balance. Alice should have 50 ePILTs less - const freeBalanceAlice = await getFreeEkiltAssetHub(keysAlice.address) - expect(freeBalanceAlice).toBe(fundsAlice - balanceToTransfer) - - // the sovereign account should have 50 more PILTs - const balanceSovereignAccountAfterTx = await getFreeEkiltAssetHub(PeregrineConfig.sovereignAccountAsSibling) - expect(balanceSovereignAccountAfterTx).eq(initialBalanceSovereignAccount + balanceToTransfer) - - await createBlock(peregrineContext) - - checkSystemEvents(peregrineContext, 'messageQueue').toMatchSnapshot('receiver Peregrine::messageQueue::[Processed]') - checkSystemEvents(peregrineContext, 'assetSwitchPool1').toMatchSnapshot( - 'receiver Peregrine::assetSwitchPool1::[RemoteToLocalSwitchExecuted]' - ) - checkSystemEvents(peregrineContext, { section: 'balances', method: 'Transfer' }).toMatchSnapshot( - 'receiver Peregrine::balances::[Transfer]' - ) - - // Alice should have some coins now. Calculating the exact amount is not easy. Since fees are taken by xcm. - checkBalanceInRange(getFreeBalancePeregrine, keysAlice.address, expect, [ - balanceToTransfer - KILT, - balanceToTransfer, - ]) - - // Pool account should have less locked PILTs - const freeBalancePoolAccount = await getFreeBalancePeregrine(PeregrineConfig.initialPoolAccountId) - expect(initialBalancePoolAccount - balanceToTransfer).toBe(freeBalancePoolAccount) - - // remote locked supply should have increased by the amount of the transferred PILTs - const remoteLockedSupply = await getRemoteLockedSupply() - expect(remoteLockedSupply).toBe(initialRemoteLockedSupply + balanceToTransfer) - - await checkSwitchPalletInvariant(expect) - await checkBalanceMovementIncomingSwitch(balanceToTransfer, expect, keysAlice.address) -}, 20_000) diff --git a/integration-tests/chopsticks/src/tests/switchPallet/switchEkilts/__snapshots__/index.test.ts.snap b/integration-tests/chopsticks/src/tests/switchPallet/switchEkilts/__snapshots__/index.test.ts.snap new file mode 100644 index 0000000000..2729a0bd8e --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/switchEkilts/__snapshots__/index.test.ts.snap @@ -0,0 +1,165 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`Switch EKILTs > V4 LIVE > Switch eKILTs receiver {"section":"assetSwitchPool1","method":"RemoteToLocalSwitchExecuted"} 1`] = ` +[ + { + "data": { + "amount": "(rounded 1000000000000000)", + "to": "4seWojfEHrk5YKPahdErazQ3CWEHZYi6NV4gKz5AaejWbRPJ", + }, + "method": "RemoteToLocalSwitchExecuted", + "section": "assetSwitchPool1", + }, +] +`; + +exports[`Switch EKILTs > V4 LIVE > Switch eKILTs sender {"section":"foreignAssets","method":"Transferred"} 1`] = ` +[ + { + "data": { + "amount": 1000000000000000, + "assetId": { + "interior": { + "X2": [ + { + "GlobalConsensus": { + "Ethereum": { + "chainId": 1, + }, + }, + }, + { + "AccountKey20": { + "key": "0x5d3d01fd6d2ad1169b17918eb4f153c6616288eb", + "network": null, + }, + }, + ], + }, + "parents": 2, + }, + "from": "15jSz35ugoWTc61xHPoxEkHte4o7UanKCk1gx1dizA8yuNs8", + "to": "13cKp88mpGREFCq8KsJEFjpSBnjFuCNWq6bmD3js7fu4f66e", + }, + "method": "Transferred", + "section": "foreignAssets", + }, +] +`; + +exports[`Switch EKILTs > V4 LIVE > Switch eKILTs sender {"section":"polkadotXcm","method":"Sent"} 1`] = ` +[ + { + "data": { + "destination": { + "interior": { + "X1": [ + { + "Parachain": "(rounded 2100)", + }, + ], + }, + "parents": 1, + }, + "message": [ + { + "ReserveAssetDeposited": [ + { + "fun": { + "Fungible": 1000000000000000, + }, + "id": { + "interior": { + "X2": [ + { + "GlobalConsensus": { + "Ethereum": { + "chainId": 1, + }, + }, + }, + { + "AccountKey20": { + "key": "0x5d3d01fd6d2ad1169b17918eb4f153c6616288eb", + "network": null, + }, + }, + ], + }, + "parents": 2, + }, + }, + ], + }, + "ClearOrigin", + { + "BuyExecution": { + "fees": { + "fun": { + "Fungible": 1000000000000000, + }, + "id": { + "interior": { + "X2": [ + { + "GlobalConsensus": { + "Ethereum": { + "chainId": 1, + }, + }, + }, + { + "AccountKey20": { + "key": "0x5d3d01fd6d2ad1169b17918eb4f153c6616288eb", + "network": null, + }, + }, + ], + }, + "parents": 2, + }, + }, + "weightLimit": "Unlimited", + }, + }, + { + "DepositAsset": { + "assets": { + "Wild": "All", + }, + "beneficiary": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": null, + }, + }, + ], + }, + "parents": 0, + }, + }, + }, + ], + "messageId": "(hash)", + "origin": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": "Polkadot", + }, + }, + ], + }, + "parents": 0, + }, + }, + "method": "Sent", + "section": "polkadotXcm", + }, +] +`; diff --git a/integration-tests/chopsticks/src/tests/switchPallet/switchEkilts/config.ts b/integration-tests/chopsticks/src/tests/switchPallet/switchEkilts/config.ts new file mode 100644 index 0000000000..77241c11da --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/switchEkilts/config.ts @@ -0,0 +1,94 @@ +import type { EventFilter } from '@acala-network/chopsticks-testing' +import type { ApiPromise } from '@polkadot/api' +import type { SubmittableExtrinsic } from '@polkadot/api/types' +import type { KeyringPair } from '@polkadot/keyring/types' + +import { initialBalanceKILT, keysAlice } from '../../../helper/utils.js' +import { mainChains } from '../../../network/index.js' +import { tx, query } from '../../../helper/api.js' +import { getXcmMessageV4ToSendEkilt } from '../index.js' +import type { BasicConfig, SovereignAccount } from '../../types.js' + +interface Query { + sender: ({ api }: { api: ApiPromise }, address: string) => Promise + + receiver: ({ api }: { api: ApiPromise }, address: string) => Promise +} + +interface Events { + sender: EventFilter[] + + receiver: EventFilter[] +} + +interface TxContext { + // amount of funds to transfer + balanceToTransfer: bigint + // transactions to execute + tx: ({ api }: { api: ApiPromise }, amount: string) => SubmittableExtrinsic<'promise'> + // events to check after the transaction + events: Events +} + +interface TestConfiguration { + config: BasicConfig + query: Query + txContext: TxContext + account: KeyringPair + sovereignAccount: SovereignAccount +} + +export const testCases: TestConfiguration[] = [ + { + config: { + desc: 'V4 LIVE', + network: { + relay: { option: mainChains.polkadot.getConfig({}), setUpTx: [], storage: {} }, + parachains: [ + { + option: mainChains.assetHub.getConfig({}), + storage: { + // Assign some coins to create the account. + ...mainChains.assetHub.storage.assignNativeTokensToAccountsAsStorage([keysAlice.address]), + // Assign the foreign asset to the account + ...mainChains.assetHub.storage.assignForeignAssetToAccounts([ + [keysAlice.address, initialBalanceKILT], + ]), + }, + setUpTx: [], + }, + { + option: mainChains.kilt.getConfig({}), + storage: {}, + setUpTx: [], + }, + ], + }, + }, + account: keysAlice, + query: { + sender: query.foreignAssets(mainChains.assetHub.chainInfo.eKiltLocation), + receiver: query.balances, + }, + txContext: { + tx: tx.xcmPallet.transferAssetsUsingTypeAndThenV4( + tx.xcmPallet.parachainV4(1, mainChains.kilt.chainInfo.paraId), + mainChains.assetHub.chainInfo.eKiltLocation, + getXcmMessageV4ToSendEkilt(keysAlice.address) + ), + events: { + sender: [ + { section: 'foreignAssets', method: 'Transferred' }, + { section: 'polkadotXcm', method: 'Sent' }, + ], + + receiver: [{ section: 'assetSwitchPool1', method: 'RemoteToLocalSwitchExecuted' }], + }, + balanceToTransfer: BigInt(1e15), + }, + sovereignAccount: { + sender: mainChains.kilt.chainInfo.sovereignAccountOnSiblingChains, + receiver: mainChains.assetHub.chainInfo.sovereignAccountOnSiblingChains, + }, + }, +] as const diff --git a/integration-tests/chopsticks/src/tests/switchPallet/switchEkilts/index.test.ts b/integration-tests/chopsticks/src/tests/switchPallet/switchEkilts/index.test.ts new file mode 100644 index 0000000000..df9ac84d87 --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/switchEkilts/index.test.ts @@ -0,0 +1,108 @@ +import { describe, beforeEach, it, afterEach } from 'vitest' +import { sendTransaction, withExpect } from '@acala-network/chopsticks-testing' +import type { KeyringPair } from '@polkadot/keyring/types' + +import { createBlock } from '../../../network/utils.js' +import { hexAddress } from '../../../helper/utils.js' +import { testCases } from './config.js' +import type { Config } from '../../../network/types.js' +import { checkSwitchPalletInvariant, getPoolAccount, getReceivedNativeTokens, getRemoteLockedSupply } from '../index.js' +import { spinUpNetwork, tearDownNetwork } from '../../utils.js' + +describe.each(testCases)( + 'Switch EKILTs', + + ({ account, query, txContext, config, sovereignAccount }) => { + let senderContext: Config + let receiverContext: Config + let relayContext: Config + let senderAccount: KeyringPair + const { desc } = config + + // Create the network context + beforeEach(async () => { + const { parachainContexts, relayChainContext } = await spinUpNetwork(config) + + relayContext = relayChainContext + senderContext = parachainContexts[0] + receiverContext = parachainContexts[1] + senderAccount = account + }) + + // Shut down the network + afterEach(async () => await tearDownNetwork([receiverContext, senderContext, relayContext])) + + it(desc, { timeout: 10000 }, async ({ expect }) => { + const { checkEvents, checkSystemEvents } = withExpect(expect) + + const poolAccount = await getPoolAccount(receiverContext) + + // pre condition checks + const initialRemoteLockedSupply = await getRemoteLockedSupply(receiverContext) + const initialBalanceReceiverChain = await query.receiver(receiverContext, hexAddress(senderAccount.address)) + const initialBalanceSenderChain = await query.sender(senderContext, hexAddress(senderAccount.address)) + const initialBalancePoolAccount = await query.receiver(receiverContext, poolAccount) + const initialBalanceSovereignAccount = await query.sender(senderContext, sovereignAccount.sender) + const initialBalanceUserSenderChain = await query.sender(senderContext, hexAddress(senderAccount.address)) + const initialBalanceUserReceiverChain = await query.receiver( + receiverContext, + hexAddress(senderAccount.address) + ) + expect(initialBalanceReceiverChain).toBe(0n) + expect(initialBalanceSenderChain).toBeGreaterThan(0n) + + // action + const { balanceToTransfer, events, tx } = txContext + const signedTx = tx(senderContext, balanceToTransfer.toString()).signAsync(senderAccount) + const eventsResult = await sendTransaction(signedTx) + + // process tx + await createBlock(senderContext) + // process xcm message + await createBlock(receiverContext) + + // post condition checks + const remoteLockedSupply = await getRemoteLockedSupply(receiverContext) + const balanceSovereignAccount = await query.sender(senderContext, sovereignAccount.sender) + const balanceSenderChain = await query.sender(senderContext, hexAddress(senderAccount.address)) + const balancePoolAccount = await query.receiver(receiverContext, poolAccount) + const balanceUserReceiverChain = await query.receiver(receiverContext, hexAddress(senderAccount.address)) + const receivedFunds = await getReceivedNativeTokens(receiverContext) + + expect(initialBalanceSovereignAccount + balanceToTransfer).toBe(balanceSovereignAccount) + expect(initialBalanceUserSenderChain - balanceToTransfer).toBe(balanceSenderChain) + + expect(balancePoolAccount + balanceToTransfer).toBe(initialBalancePoolAccount) + expect(balanceUserReceiverChain - receivedFunds).toBe(initialBalanceUserReceiverChain) + + expect(remoteLockedSupply).toBe(initialRemoteLockedSupply + balanceToTransfer) + + // check events + await Promise.all( + events.sender.map( + async (pallet) => + await checkEvents(eventsResult, pallet).toMatchSnapshot( + `Switch eKILTs sender ${JSON.stringify(pallet)}` + ) + ) + ) + + await Promise.all( + events.receiver.map((pallet) => + checkSystemEvents(receiverContext, pallet).toMatchSnapshot( + `Switch eKILTs receiver ${JSON.stringify(pallet)}` + ) + ) + ) + + checkSwitchPalletInvariant( + expect, + receiverContext, + senderContext, + sovereignAccount.sender, + query.receiver, + query.sender + ) + }) + } +) diff --git a/integration-tests/chopsticks/src/tests/switchPallet/switchKiltAgainstEkilt.test.ts b/integration-tests/chopsticks/src/tests/switchPallet/switchKiltAgainstEkilt.test.ts deleted file mode 100644 index 7ead648161..0000000000 --- a/integration-tests/chopsticks/src/tests/switchPallet/switchKiltAgainstEkilt.test.ts +++ /dev/null @@ -1,129 +0,0 @@ -import { test } from 'vitest' -import { sendTransaction, withExpect } from '@acala-network/chopsticks-testing' - -import * as PeregrineConfig from '../../network/peregrine.js' -import * as AssetHubConfig from '../../network/assetHub.js' -import { - getAssetSwitchParameters, - initialBalanceKILT, - initialBalanceROC, - keysAlice, - keysCharlie, - ROC, -} from '../../utils.js' -import { - peregrineContext, - getFreeBalancePeregrine, - getFreeRocPeregrine, - getFreeEkiltAssetHub, - assethubContext, - getFreeRocAssetHub, - getRemoteLockedSupply, -} from '../index.js' -import { checkSwitchPalletInvariant, checkBalance, createBlock, setStorage, hexAddress } from '../utils.js' -import { getAccountLocationV4, getSiblingLocationV4 } from '../../network/utils.js' - -test('Switch PILTs against ePILTS on AssetHub', async ({ expect }) => { - const { checkEvents } = withExpect(expect) - - const switchParameters = getAssetSwitchParameters() - const feeAmount = (ROC * BigInt(10)) / BigInt(100) - - const remoteAssetId = { V4: AssetHubConfig.eKiltLocation } - const remoteXcmFeeId = { V4: { id: AssetHubConfig.nativeTokenLocation, fun: { Fungible: feeAmount } } } - const remoteReserveLocation = getSiblingLocationV4(AssetHubConfig.paraId) - - // Assign alice some KILT and ROC tokens - await setStorage(peregrineContext, { - ...PeregrineConfig.assignNativeTokensToAccounts([keysAlice.address], initialBalanceKILT), - ...PeregrineConfig.createAndAssignRocs(keysCharlie.address, [keysAlice.address], initialBalanceROC), - ...PeregrineConfig.setSafeXcmVersion4(), - }) - - await setStorage( - peregrineContext, - PeregrineConfig.setSwitchPair(switchParameters, remoteAssetId, remoteXcmFeeId, remoteReserveLocation) - ) - - await setStorage(assethubContext, { - ...AssetHubConfig.assignDotTokensToAccountsAsStorage( - [keysAlice.address, PeregrineConfig.sovereignAccountAsSibling], - initialBalanceROC - ), - ...AssetHubConfig.createForeignAsset(keysCharlie.address), - }) - - await setStorage( - assethubContext, - AssetHubConfig.assignForeignAssetToAccounts([ - [PeregrineConfig.sovereignAccountAsSibling, switchParameters.sovereignSupply], - ]) - ) - - // check initial balance of Alice on Spiritnet - await checkBalance(getFreeBalancePeregrine, keysAlice.address, expect, initialBalanceKILT) - await checkBalance(getFreeRocPeregrine, keysAlice.address, expect, initialBalanceROC) - - // Alice should have NO eKILT on AH - await checkBalance(getFreeEkiltAssetHub, keysAlice.address, expect, BigInt(0)) - - // initial balance of the pool account and sovereign account - const initialBalancePoolAccount = await getFreeBalancePeregrine(PeregrineConfig.initialPoolAccountId) - const initialBalanceSovereignAccount = await getFreeEkiltAssetHub(PeregrineConfig.sovereignAccountAsSibling) - const initialBalanceRocSovereignAccount = await getFreeRocAssetHub(PeregrineConfig.sovereignAccountAsSibling) - const initialRemoteLockedSupply = await getRemoteLockedSupply() - - // 50 PILTS - const balanceToTransfer = BigInt('50000000000000000') - - const beneficiary = getAccountLocationV4(hexAddress(keysAlice.address)) - - const signedTx = peregrineContext.api.tx.assetSwitchPool1.switch(balanceToTransfer.toString(), beneficiary) - const fees = (await signedTx.paymentInfo(keysAlice)).partialFee.toBigInt() - - const events = await sendTransaction(signedTx.signAsync(keysAlice)) - - await createBlock(peregrineContext) - - await checkEvents(events, 'xcmpQueue').toMatchSnapshot('sender Peregrine::xcmpQueue::[XcmpMessageSent]') - await checkEvents(events, 'assetSwitchPool1').toMatchSnapshot( - 'sender Peregrine::assetSwitchPool1::[LocalToRemoteSwitchExecuted]' - ) - await checkEvents(events, { section: 'balances', method: 'Transfer' }).toMatchSnapshot( - 'sender Peregrine::balances::[Transfer]' - ) - - // check balance. Alice had 50 PILts - const freeBalanceAlice = await getFreeBalancePeregrine(keysAlice.address) - expect(freeBalanceAlice).toBe(initialBalanceKILT - balanceToTransfer - fees) - - // check balance Alice. Some fees should have been paid with her rocs: - const freeRocBalanceAlice = await getFreeRocPeregrine(keysAlice.address) - expect(freeRocBalanceAlice).eq(initialBalanceROC - BigInt(PeregrineConfig.remoteFee)) - - // the Switch pool account should have 50 more PILTs - const balancePoolAccountAfterTx = await getFreeBalancePeregrine(PeregrineConfig.initialPoolAccountId) - expect(balancePoolAccountAfterTx).eq(initialBalancePoolAccount + balanceToTransfer) - - // process the msg - await createBlock(assethubContext) - - // alice should have the exact transferred amount of eKILT. Fees are paid by sovereign account - const freeBalanceAliceAssetHub = await getFreeEkiltAssetHub(keysAlice.address) - expect(freeBalanceAliceAssetHub).eq(balanceToTransfer) - - // sovereign account should have less eKILT by the amount of the transferred PILTs - const freeBalanceSovereignAccount = await getFreeEkiltAssetHub(PeregrineConfig.sovereignAccountAsSibling) - expect(initialBalanceSovereignAccount - balanceToTransfer).eq(freeBalanceSovereignAccount) - - // sovereign account should have paid the fees. Calculating the fees is not simple in context of XCM. - // We just check that the balance has decreased - const freeRocsSovereignAccount = await getFreeRocAssetHub(PeregrineConfig.sovereignAccountAsSibling) - expect(freeRocsSovereignAccount).toBeLessThan(initialBalanceRocSovereignAccount) - - // remote locked supply should have decreased by the amount of the transferred PILTs - const remoteLockedSupply = await getRemoteLockedSupply() - expect(remoteLockedSupply).eq(initialRemoteLockedSupply - balanceToTransfer) - - await checkSwitchPalletInvariant(expect) -}, 20_000) diff --git a/integration-tests/chopsticks/src/tests/switchPallet/switchKilts/__snapshots__/index.test.ts.snap b/integration-tests/chopsticks/src/tests/switchPallet/switchKilts/__snapshots__/index.test.ts.snap new file mode 100644 index 0000000000..b55719c983 --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/switchKilts/__snapshots__/index.test.ts.snap @@ -0,0 +1,118 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`Switch KILTs > V4 LIVE > AssetSwitchPool1 Finalization 1`] = ` +[ + { + "data": { + "amount": 1000000000000000, + "from": "4seWojfEHrk5YKPahdErazQ3CWEHZYi6NV4gKz5AaejWbRPJ", + "to": { + "V4": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": null, + }, + }, + ], + }, + "parents": 0, + }, + }, + }, + "method": "LocalToRemoteSwitchFinalized", + "section": "assetSwitchPool1", + }, +] +`; + +exports[`Switch KILTs > V4 LIVE > Switch KILTs receiver chain: "foreignAssets" 1`] = ` +[ + { + "data": { + "assetId": { + "interior": { + "X2": [ + { + "GlobalConsensus": { + "Ethereum": { + "chainId": 1, + }, + }, + }, + { + "AccountKey20": { + "key": "0x5d3d01fd6d2ad1169b17918eb4f153c6616288eb", + "network": null, + }, + }, + ], + }, + "parents": 2, + }, + "balance": 1000000000000000, + "owner": "13cKp88mpGREFCq8KsJEFjpSBnjFuCNWq6bmD3js7fu4f66e", + }, + "method": "Burned", + "section": "foreignAssets", + }, + { + "data": { + "amount": 1000000000000000, + "assetId": { + "interior": { + "X2": [ + { + "GlobalConsensus": { + "Ethereum": { + "chainId": 1, + }, + }, + }, + { + "AccountKey20": { + "key": "0x5d3d01fd6d2ad1169b17918eb4f153c6616288eb", + "network": null, + }, + }, + ], + }, + "parents": 2, + }, + "owner": "15jSz35ugoWTc61xHPoxEkHte4o7UanKCk1gx1dizA8yuNs8", + }, + "method": "Issued", + "section": "foreignAssets", + }, +] +`; + +exports[`Switch KILTs > V4 LIVE > Switch KILTs sender chain: {"section":"assetSwitchPool1","method":"LocalToRemoteSwitchExecuted"} 1`] = ` +[ + { + "data": { + "amount": 1000000000000000, + "from": "4seWojfEHrk5YKPahdErazQ3CWEHZYi6NV4gKz5AaejWbRPJ", + "to": { + "V4": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": null, + }, + }, + ], + }, + "parents": 0, + }, + }, + }, + "method": "LocalToRemoteSwitchExecuted", + "section": "assetSwitchPool1", + }, +] +`; diff --git a/integration-tests/chopsticks/src/tests/switchPallet/switchKilts/config.ts b/integration-tests/chopsticks/src/tests/switchPallet/switchKilts/config.ts new file mode 100644 index 0000000000..4e2deec2a6 --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/switchKilts/config.ts @@ -0,0 +1,91 @@ +import type { EventFilter } from '@acala-network/chopsticks-testing' +import type { ApiPromise } from '@polkadot/api' +import type { SubmittableExtrinsic } from '@polkadot/api/types' +import type { KeyringPair } from '@polkadot/keyring/types' + +import { keysAlice } from '../../../helper/utils.js' +import { mainChains } from '../../../network/index.js' +import { tx, query } from '../../../helper/api.js' +import type { BasicConfig, SovereignAccount } from '../../types.js' + +interface Query { + sender: ({ api }: { api: ApiPromise }, address: string) => Promise + + receiver: ({ api }: { api: ApiPromise }, address: string) => Promise +} + +interface Events { + // events to check after the transaction on the native chain + sender: EventFilter[] + // events to check after the transaction on the foreign chain + receiver: EventFilter[] +} + +interface TxContext { + // amount of funds to transfer + balanceToTransfer: bigint + // transactions to execute + tx: ( + { + api, + }: { + api: ApiPromise + }, + acc: string, + amount: string + ) => SubmittableExtrinsic<'promise'> + // events to check after the transaction + events: Events +} + +interface TestConfiguration { + config: BasicConfig + query: Query + txContext: TxContext + account: KeyringPair + sovereignAccount: SovereignAccount +} + +export const testCases: TestConfiguration[] = [ + { + config: { + desc: 'V4 LIVE', + network: { + relay: { option: mainChains.polkadot.getConfig({}), storage: {}, setUpTx: [] }, + parachains: [ + { + option: mainChains.kilt.getConfig({}), + setUpTx: [], + storage: { + // Assign some coins to create the account. + ...mainChains.kilt.storage.assignNativeTokensToAccounts([keysAlice.address]), + ...mainChains.kilt.storage.assignRelayTokensToAccounts([keysAlice.address]), + }, + }, + { + option: mainChains.assetHub.getConfig({}), + setUpTx: [], + storage: mainChains.assetHub.storage.assignNativeTokensToAccountsAsStorage([keysAlice.address]), + }, + ], + }, + }, + account: keysAlice, + query: { + sender: query.balances, + receiver: query.foreignAssets(mainChains.assetHub.chainInfo.eKiltLocation), + }, + txContext: { + tx: tx.switchPallet.switchV4(), + events: { + receiver: ['foreignAssets'], + sender: [{ section: 'assetSwitchPool1', method: 'LocalToRemoteSwitchExecuted' }], + }, + balanceToTransfer: BigInt(1e15), + }, + sovereignAccount: { + sender: mainChains.assetHub.chainInfo.sovereignAccountOnSiblingChains, + receiver: mainChains.kilt.chainInfo.sovereignAccountOnSiblingChains, + }, + }, +] as const diff --git a/integration-tests/chopsticks/src/tests/switchPallet/switchKilts/index.test.ts b/integration-tests/chopsticks/src/tests/switchPallet/switchKilts/index.test.ts new file mode 100644 index 0000000000..cdc001ed88 --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/switchKilts/index.test.ts @@ -0,0 +1,104 @@ +import { describe, beforeEach, it, afterEach } from 'vitest' +import { sendTransaction, withExpect } from '@acala-network/chopsticks-testing' +import type { KeyringPair } from '@polkadot/keyring/types' + +import { createBlock } from '../../../network/utils.js' +import { calculateTxFees, hexAddress } from '../../../helper/utils.js' +import { testCases } from './config.js' +import { Config } from '../../../network/types.js' +import { checkSwitchPalletInvariant, getPoolAccount, getRemoteLockedSupply } from '../index.js' +import { spinUpNetwork, tearDownNetwork } from '../../utils.js' + +describe.each(testCases)( + 'Switch KILTs', + + ({ account, query, txContext, config, sovereignAccount }) => { + let senderContext: Config + let receiverContext: Config + let relayContext: Config + let senderAccount: KeyringPair + const { desc } = config + + // Create the network context + beforeEach(async () => { + const { parachainContexts, relayChainContext } = await spinUpNetwork(config) + + relayContext = relayChainContext + senderContext = parachainContexts[0] + receiverContext = parachainContexts[1] + senderAccount = account + }) + + // Shut down the network + afterEach(async () => await tearDownNetwork([receiverContext, senderContext, relayContext])) + + it(desc, async ({ expect }) => { + const { checkEvents, checkSystemEvents } = withExpect(expect) + + const poolAccount = await getPoolAccount(senderContext) + + // pre condition checks + const initialRemoteLockedSupply = await getRemoteLockedSupply(senderContext) + const initialBalanceReceiverChain = await query.receiver(receiverContext, hexAddress(senderAccount.address)) + const initialBalanceSenderChain = await query.sender(senderContext, hexAddress(senderAccount.address)) + const initialBalancePoolAccount = await query.sender(senderContext, poolAccount) + const initialBalanceUserSenderChain = await query.sender(senderContext, hexAddress(senderAccount.address)) + + expect(initialBalanceReceiverChain).toBe(0n) + expect(initialBalanceSenderChain).toBeGreaterThan(0n) + + // action + const { balanceToTransfer, events, tx } = txContext + const rawTx = tx(senderContext, hexAddress(senderAccount.address), balanceToTransfer.toString()) + const eventsResult = await sendTransaction(rawTx.signAsync(senderAccount)) + + // process tx + await createBlock(senderContext) + // process xcm message + await createBlock(receiverContext) + + // check balance movement + const txFees = await calculateTxFees(rawTx, senderAccount) + const remoteLockedSupply = await getRemoteLockedSupply(senderContext) + const balanceSenderChain = await query.sender(senderContext, hexAddress(senderAccount.address)) + const balancePoolAccount = await query.sender(senderContext, poolAccount) + const balanceUserReceiverChain = await query.receiver(receiverContext, hexAddress(senderAccount.address)) + + // post condition checks + expect(initialBalanceUserSenderChain - balanceToTransfer - txFees).toBe(balanceSenderChain) + expect(initialBalancePoolAccount).toBe(balancePoolAccount - balanceToTransfer) + expect(balanceUserReceiverChain).toBeGreaterThan(0n) + expect(remoteLockedSupply).toBe(initialRemoteLockedSupply - balanceToTransfer) + + // check events + await Promise.all( + events.sender.map((pallet) => + checkEvents(eventsResult, pallet).toMatchSnapshot( + `Switch KILTs sender chain: ${JSON.stringify(pallet)}` + ) + ) + ) + + await Promise.all( + events.receiver.map((pallet) => + checkSystemEvents(receiverContext, pallet).toMatchSnapshot( + `Switch KILTs receiver chain: ${JSON.stringify(pallet)}` + ) + ) + ) + + // finalize switch + await createBlock(senderContext) + await checkSystemEvents(senderContext, 'assetSwitchPool1').toMatchSnapshot('AssetSwitchPool1 Finalization') + + await checkSwitchPalletInvariant( + expect, + senderContext, + receiverContext, + sovereignAccount.receiver, + query.sender, + query.receiver + ) + }) + } +) diff --git a/integration-tests/chopsticks/src/tests/switchPallet/trappedAssets.test.ts b/integration-tests/chopsticks/src/tests/switchPallet/trappedAssets.test.ts deleted file mode 100644 index 03bb70e879..0000000000 --- a/integration-tests/chopsticks/src/tests/switchPallet/trappedAssets.test.ts +++ /dev/null @@ -1,209 +0,0 @@ -import { test } from 'vitest' -import { sendTransaction, withExpect } from '@acala-network/chopsticks-testing' - -import * as PeregrineConfig from '../../network/peregrine.js' -import * as AssetHubConfig from '../../network/assetHub.js' -import * as RococoConfig from '../../network/rococo.js' -import { - KILT, - ROC, - getAssetSwitchParameters, - initialBalanceKILT, - initialBalanceROC, - keysAlice, - keysCharlie, -} from '../../utils.js' -import { peregrineContext, assethubContext, rococoContext } from '../index.js' -import { - createBlock, - setStorage, - hexAddress, - getXcmMessageV4ToSendEkilt, - checkSwitchPalletInvariant, -} from '../utils.js' -import { getChildLocation, getSiblingLocationV4 } from '../../network/utils.js' - -/** - * 1. send eKILTs to peregrine while switch is paused - * 2. enable switch pair again - * 3. reclaim the assets - */ -test('Trapped assets', async ({ expect }) => { - const { checkSystemEvents } = withExpect(expect) - const switchPairParameters = getAssetSwitchParameters() - const feeAmount = (ROC * BigInt(10)) / BigInt(100) - const remoteAssetId = { V4: AssetHubConfig.eKiltLocation } - const remoteXcmFeeId = { V4: { id: AssetHubConfig.nativeTokenLocation, fun: { Fungible: feeAmount } } } - const remoteReserveLocation = getSiblingLocationV4(AssetHubConfig.paraId) - - await setStorage(peregrineContext, { - ...PeregrineConfig.createAndAssignRocs(keysCharlie.address, [ - keysAlice.address, - AssetHubConfig.sovereignAccountOnSiblingChains, - ]), - ...PeregrineConfig.setSafeXcmVersion4(), - ...PeregrineConfig.assignNativeTokensToAccounts( - [keysAlice.address, AssetHubConfig.sovereignAccountOnSiblingChains], - initialBalanceKILT - ), - ...PeregrineConfig.setSudoKey(keysAlice.address), - }) - - // pause switch pair - await setStorage( - peregrineContext, - PeregrineConfig.setSwitchPair( - switchPairParameters, - remoteAssetId, - remoteXcmFeeId, - remoteReserveLocation, - PeregrineConfig.initialPoolAccountId, - 'Paused' - ) - ) - - await setStorage(rococoContext, { - ...RococoConfig.setSudoKey(keysAlice.address), - ...RococoConfig.assignNativeTokensToAccounts([keysAlice.address], initialBalanceROC), - }) - - await setStorage(assethubContext, { - ...AssetHubConfig.assignDotTokensToAccountsAsStorage( - [keysAlice.address, PeregrineConfig.sovereignAccountAsSibling], - initialBalanceROC - ), - ...AssetHubConfig.createForeignAsset(keysCharlie.address), - }) - - await setStorage( - assethubContext, - AssetHubConfig.assignForeignAssetToAccounts([ - [PeregrineConfig.sovereignAccountAsSibling, switchPairParameters.sovereignSupply], - [keysAlice.address, switchPairParameters.circulatingSupply], - ]) - ) - - // 1. send the coin and force a trap - const dest = getSiblingLocationV4(PeregrineConfig.paraId) - const remoteFeeId = { v4: AssetHubConfig.eKiltLocation } - - const funds = { - v4: [ - { - id: AssetHubConfig.eKiltLocation, - fun: { Fungible: KILT.toString() }, - }, - ], - } - - const signedTx = assethubContext.api.tx.polkadotXcm - .transferAssetsUsingTypeAndThen( - dest, - funds, - 'LocalReserve', - remoteFeeId, - 'LocalReserve', - getXcmMessageV4ToSendEkilt(keysAlice.address), - 'Unlimited' - ) - .signAsync(keysAlice) - - // send msg - await sendTransaction(signedTx) - await createBlock(assethubContext) - - // Process msg. Fails on receiver side. - await createBlock(peregrineContext) - await checkSystemEvents(peregrineContext, 'messageQueue').toMatchSnapshot( - 'receiver Peregrine::messageQueue::[Processed]' - ) - await checkSystemEvents(peregrineContext, 'polkadotXcm').toMatchSnapshot( - 'receiver Peregrine::polkadotXcm::[AssetsTrapped]' - ) - - // 2. enable switch pair again - await peregrineContext.api.tx.sudo - .sudo(peregrineContext.api.tx.assetSwitchPool1.resumeSwitchPair()) - .signAndSend(keysAlice) - - //3. reclaim msg - const reclaimMsg = [ - { WithdrawAsset: [{ id: { parents: 0, interior: 'Here' }, fun: { Fungible: KILT } }] }, - { - BuyExecution: { - weightLimit: 'Unlimited', - fees: { id: { parents: 0, interior: 'Here' }, fun: { Fungible: KILT } }, - }, - }, - { - ClaimAsset: { - // Specify xcm version 4 - ticket: { parents: 0, interior: { X1: [{ GeneralIndex: 4 }] } }, - assets: [ - { - id: AssetHubConfig.eKiltLocation, - fun: { Fungible: KILT.toString() }, - }, - ], - }, - }, - { - DepositAsset: { - assets: { Wild: 'All' }, - beneficiary: { - parents: 0, - interior: { - X1: [ - { - AccountId32: { - id: hexAddress(keysAlice.address), - }, - }, - ], - }, - }, - }, - }, - ] - - const peregrineDestination = getSiblingLocationV4(PeregrineConfig.paraId) - const transactExtrinsic = assethubContext.api.tx.polkadotXcm.send(peregrineDestination, { V4: reclaimMsg }) - const assetHubDestination = getChildLocation(AssetHubConfig.paraId) - - const transactMessage = [ - { UnpaidExecution: { weightLimit: 'Unlimited' } }, - { - Transact: { - originKind: 'SuperUser', - requireWeightAtMost: { refTime: '1000000000', proofSize: '65527' }, - call: { - encoded: transactExtrinsic.method.toHex(), - }, - }, - }, - ] - - const relayTx = rococoContext.api.tx.xcmPallet.send({ V3: assetHubDestination }, { V3: transactMessage }) - const reclaimTx = rococoContext.api.tx.sudo.sudo(relayTx).signAsync(keysAlice) - - // send msg - await sendTransaction(reclaimTx) - await createBlock(rococoContext) - - // forwards the msg. - await createBlock(assethubContext) - - // Assets should be reclaimed now. Check the events. - await createBlock(peregrineContext) - await checkSystemEvents(peregrineContext, 'messageQueue').toMatchSnapshot( - 'receiver Peregrine::messageQueue::[Processed]' - ) - await checkSystemEvents(peregrineContext, 'polkadotXcm').toMatchSnapshot( - 'receiver Peregrine::polkadotXcm::[AssetsClaimed]' - ) - await checkSystemEvents(peregrineContext, 'assetSwitchPool1').toMatchSnapshot( - 'receiver Peregrine::assetSwitchPool1::[RemoteToLocalSwitchExecuted]' - ) - - await checkSwitchPalletInvariant(expect) -}, 20_000) diff --git a/integration-tests/chopsticks/src/tests/switchPallet/trappedAssets/__snapshots__/index.test.ts.snap b/integration-tests/chopsticks/src/tests/switchPallet/trappedAssets/__snapshots__/index.test.ts.snap new file mode 100644 index 0000000000..8bc516ea03 --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/trappedAssets/__snapshots__/index.test.ts.snap @@ -0,0 +1,395 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`Reclaim trapped assets > V4 LIVE > AssetsTrapped event on receiver chain 1`] = ` +[ + { + "data": { + "assets": { + "V4": [ + { + "fun": { + "Fungible": 1000000000000000, + }, + "id": { + "interior": { + "X2": [ + { + "GlobalConsensus": { + "Ethereum": { + "chainId": 1, + }, + }, + }, + { + "AccountKey20": { + "key": "0x5d3d01fd6d2ad1169b17918eb4f153c6616288eb", + "network": null, + }, + }, + ], + }, + "parents": 2, + }, + }, + ], + }, + "hash_": "(hash)", + "origin": { + "interior": { + "X1": [ + { + "Parachain": 1000, + }, + ], + }, + "parents": 1, + }, + }, + "method": "AssetsTrapped", + "section": "polkadotXcm", + }, +] +`; + +exports[`Reclaim trapped assets > V4 LIVE > Switch eKILTs sender chain: {"section":"polkadotXcm","method":"Sent"} 1`] = ` +[ + { + "data": { + "destination": { + "interior": { + "X1": [ + { + "Parachain": "(rounded 2100)", + }, + ], + }, + "parents": 1, + }, + "message": [ + { + "ReserveAssetDeposited": [ + { + "fun": { + "Fungible": 1000000000000000, + }, + "id": { + "interior": { + "X2": [ + { + "GlobalConsensus": { + "Ethereum": { + "chainId": 1, + }, + }, + }, + { + "AccountKey20": { + "key": "0x5d3d01fd6d2ad1169b17918eb4f153c6616288eb", + "network": null, + }, + }, + ], + }, + "parents": 2, + }, + }, + ], + }, + "ClearOrigin", + { + "BuyExecution": { + "fees": { + "fun": { + "Fungible": 1000000000000000, + }, + "id": { + "interior": { + "X2": [ + { + "GlobalConsensus": { + "Ethereum": { + "chainId": 1, + }, + }, + }, + { + "AccountKey20": { + "key": "0x5d3d01fd6d2ad1169b17918eb4f153c6616288eb", + "network": null, + }, + }, + ], + }, + "parents": 2, + }, + }, + "weightLimit": "Unlimited", + }, + }, + { + "DepositAsset": { + "assets": { + "Wild": "All", + }, + "beneficiary": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": null, + }, + }, + ], + }, + "parents": 0, + }, + }, + }, + ], + "messageId": "(hash)", + "origin": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": "Polkadot", + }, + }, + ], + }, + "parents": 0, + }, + }, + "method": "Sent", + "section": "polkadotXcm", + }, +] +`; + +exports[`Reclaim trapped assets > V4 LIVE > reclaim trapped assets receiver chain: {"section":"assetSwitchPool1","method":"RemoteToLocalSwitchExecuted"} 1`] = ` +[ + { + "data": { + "amount": 1000000000000000, + "to": "4seWojfEHrk5YKPahdErazQ3CWEHZYi6NV4gKz5AaejWbRPJ", + }, + "method": "RemoteToLocalSwitchExecuted", + "section": "assetSwitchPool1", + }, +] +`; + +exports[`Reclaim trapped assets > V4 LIVE > reclaim trapped assets receiver chain: {"section":"polkadotXcm","method":"AssetsClaimed"} 1`] = ` +[ + { + "data": { + "assets": { + "V4": [ + { + "fun": { + "Fungible": 1000000000000000, + }, + "id": { + "interior": { + "X2": [ + { + "GlobalConsensus": { + "Ethereum": { + "chainId": 1, + }, + }, + }, + { + "AccountKey20": { + "key": "0x5d3d01fd6d2ad1169b17918eb4f153c6616288eb", + "network": null, + }, + }, + ], + }, + "parents": 2, + }, + }, + ], + }, + "hash_": "(hash)", + "origin": { + "interior": { + "X1": [ + { + "Parachain": 1000, + }, + ], + }, + "parents": 1, + }, + }, + "method": "AssetsClaimed", + "section": "polkadotXcm", + }, +] +`; + +exports[`Reclaim trapped assets > V4 LIVE > reclaim xcm message on relay chain 1`] = ` +[ + { + "data": { + "destination": { + "interior": { + "X1": [ + { + "Parachain": 1000, + }, + ], + }, + "parents": 0, + }, + "message": [ + { + "UnpaidExecution": { + "checkOrigin": null, + "weightLimit": "Unlimited", + }, + }, + { + "Transact": { + "call": { + "encoded": "(hash)", + }, + "originKind": "Superuser", + "requireWeightAtMost": { + "proofSize": "(rounded 66000)", + "refTime": 1000000000, + }, + }, + }, + ], + "messageId": "(hash)", + "origin": { + "interior": "Here", + "parents": 0, + }, + }, + "method": "Sent", + "section": "xcmPallet", + }, +] +`; + +exports[`Reclaim trapped assets > V4 LIVE > reclaim xcm message on sender chain 1`] = ` +[ + { + "data": { + "destination": { + "interior": { + "X1": [ + { + "Parachain": "(rounded 2100)", + }, + ], + }, + "parents": 1, + }, + "message": [ + { + "WithdrawAsset": [ + { + "fun": { + "Fungible": 1000000000000000, + }, + "id": { + "interior": "Here", + "parents": 0, + }, + }, + ], + }, + { + "BuyExecution": { + "fees": { + "fun": { + "Fungible": 1000000000000000, + }, + "id": { + "interior": "Here", + "parents": 0, + }, + }, + "weightLimit": "Unlimited", + }, + }, + { + "ClaimAsset": { + "assets": [ + { + "fun": { + "Fungible": 1000000000000000, + }, + "id": { + "interior": { + "X2": [ + { + "GlobalConsensus": { + "Ethereum": { + "chainId": 1, + }, + }, + }, + { + "AccountKey20": { + "key": "0x5d3d01fd6d2ad1169b17918eb4f153c6616288eb", + "network": null, + }, + }, + ], + }, + "parents": 2, + }, + }, + ], + "ticket": { + "interior": { + "X1": [ + { + "GeneralIndex": 4, + }, + ], + }, + "parents": 0, + }, + }, + }, + { + "DepositAsset": { + "assets": { + "Wild": "All", + }, + "beneficiary": { + "interior": { + "X1": [ + { + "AccountId32": { + "id": "(hash)", + "network": null, + }, + }, + ], + }, + "parents": 0, + }, + }, + }, + ], + "messageId": "(hash)", + "origin": { + "interior": "Here", + "parents": 0, + }, + }, + "method": "Sent", + "section": "polkadotXcm", + }, +] +`; diff --git a/integration-tests/chopsticks/src/tests/switchPallet/trappedAssets/config.ts b/integration-tests/chopsticks/src/tests/switchPallet/trappedAssets/config.ts new file mode 100644 index 0000000000..1178e10acf --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/trappedAssets/config.ts @@ -0,0 +1,120 @@ +import type { EventFilter } from '@acala-network/chopsticks-testing' +import type { ApiPromise } from '@polkadot/api' +import type { SubmittableExtrinsic } from '@polkadot/api/types' +import type { KeyringPair } from '@polkadot/keyring/types' + +import { initialBalanceKILT, keysAlice, KILT } from '../../../helper/utils.js' +import { mainChains, testChains } from '../../../network/index.js' +import { tx, query } from '../../../helper/api.js' +import type { BasicConfig } from '../../types.js' +import { getXcmV4ReclaimMessage, getXcmMessageV4ToSendEkilt } from '../index.js' + +interface Query { + sender: ({ api }: { api: ApiPromise }, address: string) => Promise + receiver: ({ api }: { api: ApiPromise }, address: string) => Promise +} + +interface Events { + sender: EventFilter[] + receiver: EventFilter[] +} + +interface TxContext { + // amount of funds to transfer + balanceToTransfer: bigint + // transactions to execute + tx: ({ api }: { api: ApiPromise }, amount: string) => SubmittableExtrinsic<'promise'> + // events to check after the transaction + events: Events + getXcmMessage: (amount: string, receiver: string) => object + reclaimTx: ({ api }: { api: ApiPromise }, xcmMessage: object) => SubmittableExtrinsic<'promise'> + // the relative location of the sender from the relay chain + senderLocation: object +} + +interface TestConfiguration { + config: BasicConfig + query: Query + txContext: TxContext + account: KeyringPair + sovereignAccount: string +} + +export const testCases: TestConfiguration[] = [ + { + config: { + desc: 'V4 LIVE', + network: { + // For this test, the relay chain is not important. By using the test chain, we can + // dispatch calls with sudo rights. TODO: Scheduling the calls is somehow not possible. + relay: { + option: testChains.polkadot.getConfig({}), + setUpTx: [], + storage: { + ...testChains.polkadot.storage.assignNativeTokensToAccounts([keysAlice.address]), + ...testChains.polkadot.storage.assignSudoKey(keysAlice.address), + }, + }, + parachains: [ + { + option: mainChains.assetHub.getConfig({}), + setUpTx: [], + storage: { + ...mainChains.assetHub.storage.assignNativeTokensToAccountsAsStorage([keysAlice.address]), + ...mainChains.assetHub.storage.assignForeignAssetToAccounts([ + [keysAlice.address, initialBalanceKILT], + ]), + }, + }, + { + option: mainChains.kilt.getConfig({}), + setUpTx: [tx.switchPallet.pause()], + storage: mainChains.kilt.storage.assignNativeTokensToAccounts([ + mainChains.assetHub.chainInfo.sovereignAccountOnSiblingChains, + ]), + }, + ], + }, + }, + account: keysAlice, + query: { + sender: query.foreignAssets(mainChains.assetHub.chainInfo.eKiltLocation), + receiver: query.balances, + }, + txContext: { + balanceToTransfer: KILT, + tx: tx.xcmPallet.transferAssetsUsingTypeAndThenV4( + tx.xcmPallet.parachainV4(1, mainChains.kilt.chainInfo.paraId), + mainChains.assetHub.chainInfo.eKiltLocation, + getXcmMessageV4ToSendEkilt(keysAlice.address) + ), + getXcmMessage: getXcmV4ReclaimMessage(mainChains.assetHub.chainInfo.eKiltLocation), + reclaimTx: tx.xcmPallet.send(tx.xcmPallet.parachainV4(1, mainChains.kilt.chainInfo.paraId)), + senderLocation: { + parents: 0, + interior: { + X1: { Parachain: mainChains.assetHub.chainInfo.paraId }, + }, + }, + events: { + sender: [ + { + section: 'polkadotXcm', + method: 'Sent', + }, + ], + receiver: [ + { + section: 'polkadotXcm', + method: 'AssetsClaimed', + }, + { + section: 'assetSwitchPool1', + method: 'RemoteToLocalSwitchExecuted', + }, + ], + }, + }, + sovereignAccount: mainChains.kilt.chainInfo.sovereignAccountOnSiblingChains, + }, +] diff --git a/integration-tests/chopsticks/src/tests/switchPallet/trappedAssets/index.test.ts b/integration-tests/chopsticks/src/tests/switchPallet/trappedAssets/index.test.ts new file mode 100644 index 0000000000..a43304f202 --- /dev/null +++ b/integration-tests/chopsticks/src/tests/switchPallet/trappedAssets/index.test.ts @@ -0,0 +1,140 @@ +import { describe, beforeEach, it, afterEach } from 'vitest' +import { sendTransaction, withExpect } from '@acala-network/chopsticks-testing' +import type { KeyringPair } from '@polkadot/keyring/types' + +import { createBlock, scheduleTx } from '../../../network/utils.js' +import { hexAddress } from '../../../helper/utils.js' +import { testCases } from './config.js' +import type { Config } from '../../../network/types.js' +import { tx as txApi } from '../../../helper/api.js' +import { checkSwitchPalletInvariant, isSwitchPaused } from '../index.js' +import { spinUpNetwork, tearDownNetwork } from '../../utils.js' + +describe.each(testCases)( + 'Reclaim trapped assets', + + ({ account, query, txContext, config, sovereignAccount }) => { + let senderContext: Config + let receiverContext: Config + let relayContext: Config + let senderAccount: KeyringPair + const { desc } = config + + // Create the network context + beforeEach(async () => { + const { parachainContexts, relayChainContext } = await spinUpNetwork(config) + + relayContext = relayChainContext + senderContext = parachainContexts[0] + receiverContext = parachainContexts[1] + senderAccount = account + }) + + // Shut down the network + afterEach(async () => await tearDownNetwork([receiverContext, senderContext, relayContext])) + + it(desc, async ({ expect }) => { + const { checkSystemEvents, checkEvents } = withExpect(expect) + + const { tx, balanceToTransfer, events, reclaimTx, getXcmMessage, senderLocation } = txContext + + // precondition checks + const balanceBeforeTx = await query.receiver(receiverContext, hexAddress(senderAccount.address)) + const balanceBeforeTxSender = await query.sender(senderContext, hexAddress(senderAccount.address)) + expect(balanceBeforeTx).toBe(0n) + expect(balanceBeforeTxSender).toBeGreaterThan(0n) + expect(await isSwitchPaused(receiverContext)).toBe(true) + + // action + const rawTx = tx(senderContext, balanceToTransfer.toString()) + const events1 = await sendTransaction(rawTx.signAsync(senderAccount)) + + // process tx + await createBlock(senderContext) + // process msg + await createBlock(receiverContext) + + // check balance movement on sender chain. + const balanceAfterTxSender = await query.sender(senderContext, hexAddress(senderAccount.address)) + expect(balanceAfterTxSender).toBe(balanceBeforeTxSender - balanceToTransfer) + + // Tx should fail on receiver + const balanceAfterTx = await query.receiver(receiverContext, hexAddress(senderAccount.address)) + expect(balanceAfterTx).toBe(0n) + + // check events + await Promise.all( + events.sender.map((pallet) => + checkEvents(events1, pallet).toMatchSnapshot( + `Switch eKILTs sender chain: ${JSON.stringify(pallet)}` + ) + ) + ) + + await checkSystemEvents(receiverContext, 'polkadotXcm').toMatchSnapshot( + 'AssetsTrapped event on receiver chain' + ) + + // enable the switch pair again + const resumeTx = txApi.switchPallet.resume()(receiverContext) + scheduleTx(receiverContext, resumeTx.method.toHex()) + // process scheduled tx + await createBlock(receiverContext) + + // create reclaim Tx + const xcmMessage = getXcmMessage(balanceToTransfer.toString(), senderAccount.address) + const rawReclaimTx = reclaimTx(senderContext, xcmMessage) + + // create reclaim message for relay chain + const transactMessage = [ + { UnpaidExecution: { weightLimit: 'Unlimited' } }, + { + Transact: { + originKind: 'SuperUser', + requireWeightAtMost: { refTime: '1000000000', proofSize: '65527' }, + call: { + encoded: rawReclaimTx.method.toHex(), + }, + }, + }, + ] + + // TODO: make relay reclaim tx configurable in the config + const reclaimTxRelay = relayContext.api.tx.xcmPallet.send({ V3: senderLocation }, { V3: transactMessage }) + await sendTransaction(relayContext.api.tx.sudo.sudo(reclaimTxRelay).signAsync(senderAccount)) + // process tx + await createBlock(relayContext) + + // post condition checks + + // check if the tx was successful + await checkSystemEvents(relayContext, 'xcmPallet').toMatchSnapshot('reclaim xcm message on relay chain') + + // process and send message on sender chain. + await createBlock(senderContext) + + // check if the tx was successful + await checkSystemEvents(senderContext, 'polkadotXcm').toMatchSnapshot('reclaim xcm message on sender chain') + // process message receiver chain + await createBlock(receiverContext) + + // check events + await Promise.all( + events.receiver.map((pallet) => + checkSystemEvents(receiverContext, pallet).toMatchSnapshot( + `reclaim trapped assets receiver chain: ${JSON.stringify(pallet)}` + ) + ) + ) + + await checkSwitchPalletInvariant( + expect, + receiverContext, + senderContext, + sovereignAccount, + query.receiver, + query.sender + ) + }) + } +) diff --git a/integration-tests/chopsticks/src/tests/template/config.ts b/integration-tests/chopsticks/src/tests/template/config.ts new file mode 100644 index 0000000000..18f25922ad --- /dev/null +++ b/integration-tests/chopsticks/src/tests/template/config.ts @@ -0,0 +1,34 @@ +import type { ApiPromise } from '@polkadot/api' +import type { SubmittableExtrinsic } from '@polkadot/api/types' +import type { BasicConfig } from '../types.js' +import type { KeyringPair } from '@polkadot/keyring/types' +import { mainChains } from '../../network/index.js' +import { keysAlice } from '../../helper/utils.js' +import { tx } from '../../helper/api.js' + +interface TxContext { + // transactions to execute + tx: ({ api }: { api: ApiPromise }, submitter: string, amount: string) => SubmittableExtrinsic<'promise'> +} + +interface TestConfiguration { + config: BasicConfig + txContext: TxContext + account: KeyringPair +} + +export const testCases: TestConfiguration[] = [ + { + config: { + desc: 'TEMPLATE', + network: { + parachains: [], + relay: { option: mainChains.polkadot.getConfig({}), setUpTx: [], storage: {} }, + }, + }, + account: keysAlice, + txContext: { + tx: tx.balances.transferAllowDeath, + }, + }, +] diff --git a/integration-tests/chopsticks/src/tests/template/index.test.ts b/integration-tests/chopsticks/src/tests/template/index.test.ts new file mode 100644 index 0000000000..fccd62e4b7 --- /dev/null +++ b/integration-tests/chopsticks/src/tests/template/index.test.ts @@ -0,0 +1,26 @@ +import { describe, beforeEach, it, afterEach } from 'vitest' +import type { KeyringPair } from '@polkadot/keyring/types' + +import { testCases } from './config.js' +import type { Config } from '../../network/types.js' +import { spinUpNetwork, tearDownNetwork } from '../utils.js' + +describe.skip.each(testCases)('TEMPLATE', ({ account, config }) => { + let senderContext: Config + let senderAccount: KeyringPair + const { desc } = config + + // Create the network context + beforeEach(async () => { + const { relayChainContext } = await spinUpNetwork(config) + senderContext = relayChainContext + senderAccount = account + }) + + // Shut down the network + afterEach(async () => await tearDownNetwork([senderContext])) + + it(desc, async ({ expect }) => { + expect(senderAccount).toBeTruthy() + }) +}) diff --git a/integration-tests/chopsticks/src/tests/types.ts b/integration-tests/chopsticks/src/tests/types.ts new file mode 100644 index 0000000000..5015eb56c8 --- /dev/null +++ b/integration-tests/chopsticks/src/tests/types.ts @@ -0,0 +1,49 @@ +import type { ApiPromise } from '@polkadot/api' +import type { SubmittableExtrinsic } from '@polkadot/api/types' +import type { KeyringPair } from '@polkadot/keyring/types' +import type { SetupOption, EventFilter } from '@acala-network/chopsticks-testing' + +export type Storage = Record> + +export type SetUpTx = ({ api }: { api: ApiPromise }) => SubmittableExtrinsic<'promise'> + +export interface ChainConfig { + option: SetupOption + storage: Storage + setUpTx: SetUpTx[] +} + +export interface Accounts { + senderAccount: KeyringPair + receiverAccount: KeyringPair +} +export interface NetworkSetupOption { + parachains: ChainConfig[] + relay: ChainConfig +} + +export interface BasicTxContext { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + tx: ({ api }: { api: ApiPromise }, submitter: string, ...args: any[]) => SubmittableExtrinsic<'promise'> + pallets: { + sender: EventFilter[] + receiver: EventFilter[] + } +} + +export interface BasicConfig { + desc: string + network: NetworkSetupOption +} + +export interface SovereignAccount { + sender: string + receiver: string +} + +export interface BasicXcmTestConfiguration { + config: BasicConfig + accounts: Accounts + sovereignAccount: SovereignAccount + txContext: BasicTxContext +} diff --git a/integration-tests/chopsticks/src/tests/utils.ts b/integration-tests/chopsticks/src/tests/utils.ts index b9fcc85ef6..83cbcc47ec 100644 --- a/integration-tests/chopsticks/src/tests/utils.ts +++ b/integration-tests/chopsticks/src/tests/utils.ts @@ -1,138 +1,49 @@ -import { ExpectStatic } from 'vitest' -import { setTimeout } from 'timers/promises' -import { u8aToHex } from '@polkadot/util' -import { decodeAddress } from '@polkadot/util-crypto' - -import { Config } from '../network/types.js' -import { - getCurrentBlockNumber, - getFreeBalancePeregrine, - getFreeBalancePeregrineAt, - getFreeEkiltAssetHub, - peregrineContext, -} from './index.js' -import * as PeregrineConfig from '../network/peregrine.js' - -/// Creates a new block for the given context -export async function createBlock(context: Config) { - // fixes api runtime disconnect warning - await setTimeout(50) - await context.dev.newBlock() -} - -/// sets the storage for the given context. -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export async function setStorage(context: Config, storage: { [key: string]: any }) { - await context.dev.setStorage(storage) - await createBlock(context) -} - -/// checks the balance of an account and expects it to be the given amount -export async function checkBalance( - getFreeBalanceFunction: (account: string) => Promise, - account: string, - expect: ExpectStatic, - expectedAmount = BigInt(0) -) { - const balance = await getFreeBalanceFunction(account) - expect(balance).eq(BigInt(expectedAmount)) -} - -/// checks the balance of an account and expects it to be in the given range -export async function checkBalanceInRange( - getFreeBalanceFunction: (account: string) => Promise, - account: string, - expect: ExpectStatic, - expectedRange: [bigint, bigint] -) { - const balance = await getFreeBalanceFunction(account) - expect(balance >= expectedRange[0]) - expect(balance <= expectedRange[1]) -} +import { SetupConfig } from '@acala-network/chopsticks-testing' + +import { createBlock, scheduleTx, setStorage, setupNetwork, shutDownNetwork } from '../network/utils.js' +import { BasicConfig } from './types.js' + +export async function spinUpNetwork({ network }: BasicConfig) { + const { parachains, relay } = network + const parachainOptions = parachains.map((parachain) => parachain.option) + const { parachainContexts, relayChainContext } = await setupNetwork(relay.option, parachainOptions) + + await setStorage(relayChainContext, relay.storage) + await Promise.all( + relay.setUpTx.map(async (tx) => { + const rawTx = tx(relayChainContext) + await scheduleTx(relayChainContext, rawTx.method.toHex()) + await createBlock(relayChainContext) + }) + ) -export function hexAddress(addr: string) { - return u8aToHex(decodeAddress(addr)) -} + await Promise.all( + parachains.map(async (parachain, index) => { + // fetch the right context + const currentContext = parachainContexts[index] + // set the storage + await setStorage(currentContext, parachain.storage) + + // schedule txs. + await Promise.all( + parachain.setUpTx.map(async (tx) => { + const rawTx = tx(currentContext) + await scheduleTx(currentContext, rawTx.method.toHex()) + await createBlock(currentContext) + }) + ) + }) + ) -export function getXcmMessageV4ToSendEkilt(address: string) { - return { - V4: [ - { - DepositAsset: { - assets: { Wild: 'All' }, - beneficiary: { - parents: 0, - interior: { - X1: [ - { - AccountId32: { - id: hexAddress(address), - }, - }, - ], - }, - }, - }, - }, - ], - } + return { parachainContexts, relayChainContext } } -// Delta represents the amount of trapped assets on the KILT side -export async function checkSwitchPalletInvariant(expect: ExpectStatic, deltaStoredSovereignSupply = BigInt(0)) { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const switchPairInfo: any = await peregrineContext.api.query.assetSwitchPool1.switchPair() - if (switchPairInfo.isNone) { - return +export async function tearDownNetwork(chains: SetupConfig[]) { + try { + await shutDownNetwork(chains) + } catch (error) { + if (!(error instanceof TypeError)) { + console.error(error) + } } - - // check pool account balance - const switchPoolAccount = switchPairInfo.unwrap().poolAccount - - const poolAccountBalance = await getFreeBalancePeregrine(switchPoolAccount) - - const sovereignEKiltSupply = await getFreeEkiltAssetHub(PeregrineConfig.sovereignAccountAsSibling) - - const remoteAssetSovereignTotalBalance = switchPairInfo.unwrap().remoteAssetSovereignTotalBalance.toBigInt() - const remoteAssetCirculatingSupply = switchPairInfo.unwrap().remoteAssetCirculatingSupply.toBigInt() - const remoteAssetTotalSupply = switchPairInfo.unwrap().remoteAssetTotalSupply.toBigInt() - - const lockedBalanceFromTotalAndCirculating = remoteAssetTotalSupply - remoteAssetCirculatingSupply - - // Check pool account has enough funds to cover the circulating supply - - expect(poolAccountBalance).toBe(remoteAssetCirculatingSupply) - expect(remoteAssetSovereignTotalBalance).toBe(lockedBalanceFromTotalAndCirculating) - expect(sovereignEKiltSupply).toBe(remoteAssetSovereignTotalBalance + deltaStoredSovereignSupply) -} - -export async function checkBalanceMovementIncomingSwitch( - transferredBalance: bigint, - expect: ExpectStatic, - receiver: string, - deltaBlockNumber = 1 -) { - const currentBlockNumber = await getCurrentBlockNumber(peregrineContext) - - // the inital balance before the incoming switch - const initialBalanceTreasury = await getFreeBalancePeregrineAt( - PeregrineConfig.treasuryAccount, - currentBlockNumber - deltaBlockNumber - ) - const initialBalanceReciver = await getFreeBalancePeregrineAt(receiver, currentBlockNumber - deltaBlockNumber) - - // Current balance - const currentBalanceReciever = await getFreeBalancePeregrine(receiver) - const currentBalanceTreasury = await getFreeBalancePeregrine(PeregrineConfig.treasuryAccount) - - // deltas of the balance between receiver and treasury - const deltaReceivedBalance = currentBalanceReciever - initialBalanceReciver - - // remove staking rewards - const deltaTreasuryBalance = - currentBalanceTreasury - - initialBalanceTreasury - - PeregrineConfig.parachainStakingRewards * BigInt(deltaBlockNumber) - - expect(deltaReceivedBalance + deltaTreasuryBalance).toBe(transferredBalance) } diff --git a/integration-tests/chopsticks/src/tests/xcm/assetHub/peregrine/__snapshots__/initiateWithdrawAssetsFromPeregrineAssetHub.test.ts.snap b/integration-tests/chopsticks/src/tests/xcm/assetHub/peregrine/__snapshots__/initiateWithdrawAssetsFromPeregrineAssetHub.test.ts.snap deleted file mode 100644 index 5d0e6b2113..0000000000 --- a/integration-tests/chopsticks/src/tests/xcm/assetHub/peregrine/__snapshots__/initiateWithdrawAssetsFromPeregrineAssetHub.test.ts.snap +++ /dev/null @@ -1,210 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`Initiate withdraw assets Peregrine Account Alice -> AH Account Alice > receiver AssetHub::balances::Burned 1`] = ` -[ - { - "data": { - "amount": 1000000000000, - "who": "13cKp88mpGREFCq8KsJEFjpSBnjFuCNWq6bmD3js7fu4f66e", - }, - "method": "Burned", - "section": "balances", - }, -] -`; - -exports[`Initiate withdraw assets Peregrine Account Alice -> AH Account Alice > receiver AssetHub::balances::Endowed 1`] = ` -[ - { - "data": { - "account": "15jSz35ugoWTc61xHPoxEkHte4o7UanKCk1gx1dizA8yuNs8", - "freeBalance": "(rounded 1000000000000)", - }, - "method": "Endowed", - "section": "balances", - }, -] -`; - -exports[`Initiate withdraw assets Peregrine Account Alice -> AH Account Alice > receiver AssetHub::balances::Minted 1`] = ` -[ - { - "data": { - "amount": "(rounded 1000000000000)", - "who": "15jSz35ugoWTc61xHPoxEkHte4o7UanKCk1gx1dizA8yuNs8", - }, - "method": "Minted", - "section": "balances", - }, -] -`; - -exports[`Initiate withdraw assets Peregrine Account Alice -> AH Account Alice > receiver AssetHub::messageQueue::Processed 1`] = ` -[ - { - "data": { - "id": "(hash)", - "origin": { - "Sibling": "(rounded 2100)", - }, - "success": true, - "weightUsed": { - "proofSize": "(rounded 7200)", - "refTime": "(rounded 320000000)", - }, - }, - "method": "Processed", - "section": "messageQueue", - }, -] -`; - -exports[`Initiate withdraw assets Peregrine Account Alice -> AH Account Alice > sender Peregrine::fungibles::[Burned] 1`] = ` -[ - { - "data": { - "assetId": { - "interior": "Here", - "parents": 1, - }, - "balance": 1000000000000, - "owner": "4seWojfEHrk5YKPahdErazQ3CWEHZYi6NV4gKz5AaejWbRPJ", - }, - "method": "Burned", - "section": "fungibles", - }, -] -`; - -exports[`Initiate withdraw assets Peregrine Account Alice -> AH Account Alice > sender Peregrine::polkadotXcm::[FeesPaid,Attempted,Sent] 1`] = ` -[ - { - "data": { - "outcome": { - "Complete": { - "used": { - "proofSize": 0, - "refTime": 400000000, - }, - }, - }, - }, - "method": "Attempted", - "section": "polkadotXcm", - }, - { - "data": { - "fees": [], - "paying": { - "interior": { - "X1": [ - { - "AccountId32": { - "id": "(hash)", - "network": null, - }, - }, - ], - }, - "parents": 0, - }, - }, - "method": "FeesPaid", - "section": "polkadotXcm", - }, - { - "data": { - "destination": { - "interior": { - "X1": [ - { - "Parachain": 1000, - }, - ], - }, - "parents": 1, - }, - "message": [ - { - "WithdrawAsset": [ - { - "fun": { - "Fungible": 1000000000000, - }, - "id": { - "interior": "Here", - "parents": 1, - }, - }, - ], - }, - "ClearOrigin", - { - "BuyExecution": { - "fees": { - "fun": { - "Fungible": 1000000000000, - }, - "id": { - "interior": "Here", - "parents": 1, - }, - }, - "weightLimit": "Unlimited", - }, - }, - { - "DepositAsset": { - "assets": { - "Wild": { - "AllCounted": 1, - }, - }, - "beneficiary": { - "interior": { - "X1": [ - { - "AccountId32": { - "id": "(hash)", - "network": null, - }, - }, - ], - }, - "parents": 0, - }, - }, - }, - ], - "messageId": "(hash)", - "origin": { - "interior": { - "X1": [ - { - "AccountId32": { - "id": "(hash)", - "network": null, - }, - }, - ], - }, - "parents": 0, - }, - }, - "method": "Sent", - "section": "polkadotXcm", - }, -] -`; - -exports[`Initiate withdraw assets Peregrine Account Alice -> AH Account Alice > sender Peregrine::xcmpQueue::[XcmMessageSent] 1`] = ` -[ - { - "data": { - "messageHash": "(hash)", - }, - "method": "XcmpMessageSent", - "section": "xcmpQueue", - }, -] -`; diff --git a/integration-tests/chopsticks/src/tests/xcm/assetHub/peregrine/__snapshots__/limitedReserveTransferAssetHubPeregrine.test.ts.snap b/integration-tests/chopsticks/src/tests/xcm/assetHub/peregrine/__snapshots__/limitedReserveTransferAssetHubPeregrine.test.ts.snap deleted file mode 100644 index ca561a26af..0000000000 --- a/integration-tests/chopsticks/src/tests/xcm/assetHub/peregrine/__snapshots__/limitedReserveTransferAssetHubPeregrine.test.ts.snap +++ /dev/null @@ -1,194 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`Limited Reserve V4 Transfers from AssetHub Account Alice -> Peregrine Account Bob > receiver Peregrine::fungibles::[Issued] 1`] = ` -[ - { - "data": { - "amount": "(rounded 1000000000000)", - "assetId": { - "interior": "Here", - "parents": 1, - }, - "owner": "4rsmbFBYpVmWE2LHRsSZKxf22a8cbJLxMZqvVGkGkSDmDBcr", - }, - "method": "Issued", - "section": "fungibles", - }, -] -`; - -exports[`Limited Reserve V4 Transfers from AssetHub Account Alice -> Peregrine Account Bob > receiver Peregrine::messageQueue::[Processed] 1`] = ` -[ - { - "data": { - "id": "(hash)", - "origin": { - "Sibling": 1000, - }, - "success": true, - "weightUsed": { - "proofSize": 0, - "refTime": 1000000000, - }, - }, - "method": "Processed", - "section": "messageQueue", - }, -] -`; - -exports[`Limited Reserve V4 Transfers from AssetHub Account Alice -> Peregrine Account Bob > sender AssetHub::balances::[Withdraw] 1`] = ` -[ - { - "data": { - "amount": "(rounded 24000000)", - "who": "15jSz35ugoWTc61xHPoxEkHte4o7UanKCk1gx1dizA8yuNs8", - }, - "method": "Withdraw", - "section": "balances", - }, -] -`; - -exports[`Limited Reserve V4 Transfers from AssetHub Account Alice -> Peregrine Account Bob > sender AssetHub::polkadotXcm::[FeesPaid,Attempted,Sent] 1`] = ` -[ - { - "data": { - "outcome": { - "Complete": { - "used": { - "proofSize": "(rounded 6200)", - "refTime": "(rounded 290000000)", - }, - }, - }, - }, - "method": "Attempted", - "section": "polkadotXcm", - }, - { - "data": { - "fees": [ - { - "fun": { - "Fungible": "(rounded 310000000)", - }, - "id": { - "interior": "Here", - "parents": 1, - }, - }, - ], - "paying": { - "interior": { - "X1": [ - { - "AccountId32": { - "id": "(hash)", - "network": "Polkadot", - }, - }, - ], - }, - "parents": 0, - }, - }, - "method": "FeesPaid", - "section": "polkadotXcm", - }, - { - "data": { - "destination": { - "interior": { - "X1": [ - { - "Parachain": "(rounded 2100)", - }, - ], - }, - "parents": 1, - }, - "message": [ - { - "ReserveAssetDeposited": [ - { - "fun": { - "Fungible": 1000000000000, - }, - "id": { - "interior": "Here", - "parents": 1, - }, - }, - ], - }, - "ClearOrigin", - { - "BuyExecution": { - "fees": { - "fun": { - "Fungible": 1000000000000, - }, - "id": { - "interior": "Here", - "parents": 1, - }, - }, - "weightLimit": "Unlimited", - }, - }, - { - "DepositAsset": { - "assets": { - "Wild": { - "AllCounted": 1, - }, - }, - "beneficiary": { - "interior": { - "X1": [ - { - "AccountId32": { - "id": "(hash)", - "network": null, - }, - }, - ], - }, - "parents": 0, - }, - }, - }, - ], - "messageId": "(hash)", - "origin": { - "interior": { - "X1": [ - { - "AccountId32": { - "id": "(hash)", - "network": "Polkadot", - }, - }, - ], - }, - "parents": 0, - }, - }, - "method": "Sent", - "section": "polkadotXcm", - }, -] -`; - -exports[`Limited Reserve V4 Transfers from AssetHub Account Alice -> Peregrine Account Bob > sender AssetHub::xcmpQueue::[XcmMessageSent] 1`] = ` -[ - { - "data": { - "messageHash": "(hash)", - }, - "method": "XcmpMessageSent", - "section": "xcmpQueue", - }, -] -`; diff --git a/integration-tests/chopsticks/src/tests/xcm/assetHub/peregrine/initiateWithdrawAssetsFromPeregrineAssetHub.test.ts b/integration-tests/chopsticks/src/tests/xcm/assetHub/peregrine/initiateWithdrawAssetsFromPeregrineAssetHub.test.ts deleted file mode 100644 index 67551b688a..0000000000 --- a/integration-tests/chopsticks/src/tests/xcm/assetHub/peregrine/initiateWithdrawAssetsFromPeregrineAssetHub.test.ts +++ /dev/null @@ -1,103 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unused-vars */ -import { test } from 'vitest' -import { sendTransaction, withExpect } from '@acala-network/chopsticks-testing' - -import * as PeregrineConfig from '../../../../network/peregrine.js' -import * as AssetHubConfig from '../../../../network/assetHub.js' -import { - ROC, - getAssetSwitchParameters, - initialBalanceKILT, - initialBalanceROC, - keysAlice, - keysCharlie, -} from '../../../../utils.js' -import { peregrineContext, assethubContext, getFreeRocPeregrine, getFreeRocAssetHub } from '../../../index.js' -import { - getAccountLocationV4, - getRelayNativeAssetIdLocationV4, - getSiblingLocationV4, -} from '../../../../network/utils.js' -import { checkBalanceInRange, createBlock, hexAddress, setStorage } from '../../../utils.js' - -test('Initiate withdraw assets Peregrine Account Alice -> AH Account Alice', async ({ expect }) => { - const { checkEvents, checkSystemEvents } = withExpect(expect) - const feeAmount = (ROC * BigInt(10)) / BigInt(100) - const remoteAssetId = { V4: AssetHubConfig.eKiltLocation } - const remoteXcmFeeId = { V4: { id: AssetHubConfig.nativeTokenLocation, fun: { Fungible: feeAmount } } } - const remoteReserveLocation = getSiblingLocationV4(AssetHubConfig.paraId) - - await setStorage(peregrineContext, { - ...PeregrineConfig.assignNativeTokensToAccounts([keysAlice.address], initialBalanceKILT), - ...PeregrineConfig.createAndAssignRocs(keysCharlie.address, [keysAlice.address]), - ...PeregrineConfig.setSafeXcmVersion4(), - }) - - const switchParameters = getAssetSwitchParameters() - - await setStorage( - peregrineContext, - PeregrineConfig.setSwitchPair(switchParameters, remoteAssetId, remoteXcmFeeId, remoteReserveLocation) - ) - - await setStorage(assethubContext, { - ...AssetHubConfig.assignDotTokensToAccountsAsStorage( - [PeregrineConfig.sovereignAccountAsSibling], - initialBalanceROC - ), - }) - - // check initial state - const balanceAliceRocPeregrineBeforeTx = await getFreeRocPeregrine(keysAlice.address) - const balanceAliceRocAssetHubBeforeTx = await getFreeRocAssetHub(keysAlice.address) - const balanceSovereignAccountAssetHubBeforeTx = await getFreeRocAssetHub(PeregrineConfig.sovereignAccountAsSibling) - - expect(balanceAliceRocPeregrineBeforeTx).toBe(initialBalanceROC) - expect(balanceAliceRocAssetHubBeforeTx).toBe(BigInt(0)) - expect(balanceSovereignAccountAssetHubBeforeTx).toBe(initialBalanceROC) - - const assetHubDestination = getSiblingLocationV4(AssetHubConfig.paraId) - // We send 1 ROC - const assets = { V4: [getRelayNativeAssetIdLocationV4(ROC.toString())] } - const beneficiary = getAccountLocationV4(hexAddress(keysAlice.address)) - - const signedTx4 = peregrineContext.api.tx.polkadotXcm - .transferAssets(assetHubDestination, beneficiary, assets, 0, 'Unlimited') - .signAsync(keysAlice) - - const events4 = await sendTransaction(signedTx4) - await createBlock(peregrineContext) - - // The xcm message should be send to AH and the funds should be burned from user. - await checkEvents(events4, 'fungibles').toMatchSnapshot('sender Peregrine::fungibles::[Burned]') - await checkEvents(events4, 'xcmpQueue').toMatchSnapshot('sender Peregrine::xcmpQueue::[XcmMessageSent]') - await checkEvents(events4, 'polkadotXcm').toMatchSnapshot( - 'sender Peregrine::polkadotXcm::[FeesPaid,Attempted,Sent]' - ) - - // Alice funds after the transaction - const balanceAliceRocPeregrineAfterTx = await getFreeRocPeregrine(keysAlice.address) - expect(balanceAliceRocPeregrineAfterTx).toBe(initialBalanceROC - ROC) - - // The funds should be burned from Sovereign account and minted to user. - await createBlock(assethubContext) - await checkSystemEvents(assethubContext, { section: 'balances', method: 'Burned' }).toMatchSnapshot( - 'receiver AssetHub::balances::Burned' - ) - await checkSystemEvents(assethubContext, { section: 'balances', method: 'Minted' }).toMatchSnapshot( - 'receiver AssetHub::balances::Minted' - ) - await checkSystemEvents(assethubContext, { section: 'balances', method: 'Endowed' }).toMatchSnapshot( - 'receiver AssetHub::balances::Endowed' - ) - await checkSystemEvents(assethubContext, { section: 'messageQueue', method: 'Processed' }).toMatchSnapshot( - 'receiver AssetHub::messageQueue::Processed' - ) - - // state sovereign account - const balanceSovereignAccountAssetHubAfterTx = await getFreeRocAssetHub(PeregrineConfig.sovereignAccountAsSibling) - expect(balanceSovereignAccountAssetHubAfterTx).toBe(initialBalanceROC - ROC) - - // state alice on asset hub - await checkBalanceInRange(getFreeRocPeregrine, keysAlice.address, expect, [BigInt(999999964195), ROC]) -}, 20_000) diff --git a/integration-tests/chopsticks/src/tests/xcm/assetHub/peregrine/limitedReserveTransferAssetHubPeregrine.test.ts b/integration-tests/chopsticks/src/tests/xcm/assetHub/peregrine/limitedReserveTransferAssetHubPeregrine.test.ts deleted file mode 100644 index f19db9037b..0000000000 --- a/integration-tests/chopsticks/src/tests/xcm/assetHub/peregrine/limitedReserveTransferAssetHubPeregrine.test.ts +++ /dev/null @@ -1,104 +0,0 @@ -import { test } from 'vitest' -import { sendTransaction, withExpect } from '@acala-network/chopsticks-testing' - -import * as PeregrineConfig from '../../../../network/peregrine.js' -import * as AssetHubConfig from '../../../../network/assetHub.js' -import { - ROC, - getAssetSwitchParameters, - initialBalanceKILT, - initialBalanceROC, - keysAlice, - keysBob, - keysCharlie, -} from '../../../../utils.js' -import { peregrineContext, assethubContext, getFreeRocPeregrine, getFreeRocAssetHub } from '../../../index.js' -import { - getAccountLocationV4, - getRelayNativeAssetIdLocationV4, - getSiblingLocationV4, -} from '../../../../network/utils.js' -import { checkBalance, checkBalanceInRange, createBlock, hexAddress, setStorage } from '../../../utils.js' - -const ROC_ASSET_V4 = { V4: [getRelayNativeAssetIdLocationV4(ROC)] } - -test('Limited Reserve V4 Transfers from AssetHub Account Alice -> Peregrine Account Bob', async ({ expect }) => { - const { checkEvents, checkSystemEvents } = withExpect(expect) - const feeAmount = (ROC * BigInt(10)) / BigInt(100) - const remoteAssetId = { V4: AssetHubConfig.eKiltLocation } - const remoteXcmFeeId = { V4: { id: AssetHubConfig.nativeTokenLocation, fun: { Fungible: feeAmount } } } - const remoteReserveLocation = getSiblingLocationV4(AssetHubConfig.paraId) - - // Assign alice some KILT tokens to create the account - await setStorage(peregrineContext, { - ...PeregrineConfig.createAndAssignRocs(keysCharlie.address, []), - ...PeregrineConfig.assignNativeTokensToAccounts([keysBob.address], initialBalanceKILT), - }) - - await setStorage( - peregrineContext, - PeregrineConfig.setSwitchPair(getAssetSwitchParameters(), remoteAssetId, remoteXcmFeeId, remoteReserveLocation) - ) - - // Give Alice some Rocs - await setStorage( - assethubContext, - AssetHubConfig.assignDotTokensToAccountsAsStorage([keysAlice.address], initialBalanceROC) - ) - - const peregrineSovereignAccountBalanceBeforeTx = await getFreeRocAssetHub(PeregrineConfig.sovereignAccountAsSibling) - - // Bob should have no ROCs on Peregrine - await checkBalance(getFreeRocPeregrine, keysBob.address, expect, BigInt(0)) - - // Alice should some ROCs on AH - await checkBalance(getFreeRocAssetHub, keysAlice.address, expect, initialBalanceROC) - - const bobAddress = hexAddress(keysBob.address) - const peregrineDestination = getSiblingLocationV4(PeregrineConfig.paraId) - const beneficiary = getAccountLocationV4(bobAddress) - - const signedTx = assethubContext.api.tx.polkadotXcm - .limitedReserveTransferAssets(peregrineDestination, beneficiary, ROC_ASSET_V4, 0, 'Unlimited') - .signAsync(keysAlice) - - const events = await sendTransaction(signedTx) - - // Check sender state - await createBlock(assethubContext) - - // Check events sender - checkEvents(events, 'xcmpQueue').toMatchSnapshot('sender AssetHub::xcmpQueue::[XcmMessageSent]') - checkEvents(events, 'polkadotXcm').toMatchSnapshot('sender AssetHub::polkadotXcm::[FeesPaid,Attempted,Sent]') - checkEvents(events, { section: 'balances', method: 'Withdraw' }).toMatchSnapshot( - 'sender AssetHub::balances::[Withdraw]' - ) - - // check balance. The sovereign account should hold one additional ROC. - await checkBalance( - getFreeRocAssetHub, - PeregrineConfig.sovereignAccountAsSibling, - expect, - peregrineSovereignAccountBalanceBeforeTx + ROC - ) - - // check balance sender - // Equal to `initialBalanceKILT - KILT` - tx fees - await checkBalanceInRange(getFreeRocAssetHub, keysAlice.address, expect, [ - BigInt('98999830999996'), - BigInt('98999830999996'), - ]) - - // Check receiver state - await createBlock(peregrineContext) - - // Check events receiver - checkSystemEvents(peregrineContext, { section: 'fungibles', method: 'Issued' }).toMatchSnapshot( - 'receiver Peregrine::fungibles::[Issued]' - ) - checkSystemEvents(peregrineContext, 'messageQueue').toMatchSnapshot('receiver Peregrine::messageQueue::[Processed]') - - // check balance receiver - // check balance. Equal to `KILT` - tx fees - await checkBalanceInRange(getFreeRocPeregrine, bobAddress, expect, [BigInt(999999964195), BigInt(999999964296)]) -}, 20_000) diff --git a/integration-tests/chopsticks/src/tests/xcm/assetHub/peregrine/limitedReserveTransferRelayPeregrine.test.ts b/integration-tests/chopsticks/src/tests/xcm/assetHub/peregrine/limitedReserveTransferRelayPeregrine.test.ts deleted file mode 100644 index ca3c7a560c..0000000000 --- a/integration-tests/chopsticks/src/tests/xcm/assetHub/peregrine/limitedReserveTransferRelayPeregrine.test.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { test } from 'vitest' -import { sendTransaction, withExpect } from '@acala-network/chopsticks-testing' - -import * as PeregrineConfig from '../../../../network/peregrine.js' -import * as RococoConfig from '../../../../network/rococo.js' -import * as AssetHubConfig from '../../../../network/assetHub.js' -import { - getAssetSwitchParameters, - initialBalanceKILT, - initialBalanceROC, - keysAlice, - keysCharlie, - ROC, -} from '../../../../utils.js' -import { peregrineContext, getFreeBalancePeregrine, getFreeRocPeregrine, rococoContext } from '../../../index.js' -import { checkBalance, createBlock, setStorage, hexAddress } from '../../../utils.js' -import { - getAccountLocationV3, - getChildLocation, - getNativeAssetIdLocationV3, - getSiblingLocationV4, -} from '../../../../network/utils.js' - -test('Send DOTs from Relay 2 Peregrine', async ({ expect }) => { - const { checkEvents, checkSystemEvents } = withExpect(expect) - - const feeAmount = (ROC * BigInt(10)) / BigInt(100) - const remoteAssetId = { V4: AssetHubConfig.eKiltLocation } - const remoteXcmFeeId = { V4: { id: AssetHubConfig.nativeTokenLocation, fun: { Fungible: feeAmount } } } - const remoteReserveLocation = getSiblingLocationV4(AssetHubConfig.paraId) - - await setStorage(peregrineContext, { - ...PeregrineConfig.assignNativeTokensToAccounts([keysAlice.address], initialBalanceKILT), - ...PeregrineConfig.createAndAssignRocs(keysCharlie.address, []), - ...PeregrineConfig.setSafeXcmVersion4(), - }) - - await setStorage( - peregrineContext, - PeregrineConfig.setSwitchPair(getAssetSwitchParameters(), remoteAssetId, remoteXcmFeeId, remoteReserveLocation) - ) - - await setStorage(rococoContext, RococoConfig.assignNativeTokensToAccounts([keysAlice.address])) - - await checkBalance(getFreeBalancePeregrine, keysAlice.address, expect, initialBalanceKILT) - await checkBalance(getFreeRocPeregrine, keysAlice.address, expect, BigInt(0)) - - const balanceToTransfer = initialBalanceROC / BigInt(2) - - const aliceAddress = hexAddress(keysAlice.address) - const hydraDxDestination = { V3: getChildLocation(PeregrineConfig.paraId) } - const beneficiary = getAccountLocationV3(aliceAddress) - const assetToTransfer = { V3: [getNativeAssetIdLocationV3(balanceToTransfer)] } - - const signedTx = rococoContext.api.tx.xcmPallet - .limitedReserveTransferAssets(hydraDxDestination, beneficiary, assetToTransfer, 0, 'Unlimited') - .signAsync(keysAlice) - - const events = await sendTransaction(signedTx) - - await createBlock(rococoContext) - - checkEvents(events, 'xcmPallet').toMatchSnapshot('sender Rococo::xcmPallet::[XcmMessageSent]') - - await createBlock(peregrineContext) - - // Barrier will block execution. No event will be emitted. - await checkSystemEvents(peregrineContext, { - section: 'messageQueue', - method: 'ProcessingFailed', - }).toMatchSnapshot('receiver Peregrine::messageQueue::[ProcessingFailed]') - - // Alice should still have no balance - await checkBalance(getFreeRocPeregrine, keysAlice.address, expect, BigInt(0)) -}, 20_00000) diff --git a/integration-tests/chopsticks/src/tests/xcm/assetHub/spiritnet/__snapshots__/limitedReserveTransferAssetHubSpiritnet.test.ts.snap b/integration-tests/chopsticks/src/tests/xcm/assetHub/spiritnet/__snapshots__/limitedReserveTransferAssetHubSpiritnet.test.ts.snap deleted file mode 100644 index 32545fecb3..0000000000 --- a/integration-tests/chopsticks/src/tests/xcm/assetHub/spiritnet/__snapshots__/limitedReserveTransferAssetHubSpiritnet.test.ts.snap +++ /dev/null @@ -1,194 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`Limited Reserve Transfers from AH Account Alice -> Spiritnet Account Alice > receiver spiritnet::XcmpQueue::[Fail] asset {"V3":[{"id":{"Concrete":{"parents":2,"interior":{"X1":{"GlobalConsensus":"Kusama"}}}},"fun":{"Fungible":"10000000000"}}]} 1`] = ` -[ - { - "data": { - "error": "UntrustedReserveLocation", - "messageHash": "(hash)", - "messageId": "(hash)", - "weight": { - "proofSize": 0, - "refTime": 200000000, - }, - }, - "method": "Fail", - "section": "xcmpQueue", - }, -] -`; - -exports[`Limited Reserve Transfers from AH Account Alice -> Spiritnet Account Alice > sender assetHub::foreignAssets::[Transferred] asset {"V3":[{"id":{"Concrete":{"parents":2,"interior":{"X1":{"GlobalConsensus":"Kusama"}}}},"fun":{"Fungible":"10000000000"}}]} 1`] = ` -[ - { - "data": { - "amount": 10000000000, - "assetId": { - "interior": { - "X1": { - "GlobalConsensus": "Kusama", - }, - }, - "parents": 2, - }, - "from": "15jSz35ugoWTc61xHPoxEkHte4o7UanKCk1gx1dizA8yuNs8", - "to": "13cKp88mpGREFCq8KsJEFjpSBnjFuCNWq6bmD3js7fu4f66e", - }, - "method": "Transferred", - "section": "foreignAssets", - }, -] -`; - -exports[`Limited Reserve Transfers from AH Account Alice -> Spiritnet Account Alice > sender assetHub::polkadotXcm::[Sent,FeesPaid,Attempted] asset {"V3":[{"id":{"Concrete":{"parents":2,"interior":{"X1":{"GlobalConsensus":"Kusama"}}}},"fun":{"Fungible":"10000000000"}}]} 1`] = ` -[ - { - "data": { - "outcome": { - "Complete": { - "used": { - "proofSize": "(rounded 6200)", - "refTime": "(rounded 290000000)", - }, - }, - }, - }, - "method": "Attempted", - "section": "polkadotXcm", - }, - { - "data": { - "fees": [ - { - "fun": { - "Fungible": 310000000, - }, - "id": { - "interior": "Here", - "parents": 1, - }, - }, - ], - "paying": { - "interior": { - "X1": [ - { - "AccountId32": { - "id": "(hash)", - "network": "Polkadot", - }, - }, - ], - }, - "parents": 0, - }, - }, - "method": "FeesPaid", - "section": "polkadotXcm", - }, - { - "data": { - "destination": { - "interior": { - "X1": [ - { - "Parachain": "(rounded 2100)", - }, - ], - }, - "parents": 1, - }, - "message": [ - { - "ReserveAssetDeposited": [ - { - "fun": { - "Fungible": 10000000000, - }, - "id": { - "interior": { - "X1": [ - { - "GlobalConsensus": "Kusama", - }, - ], - }, - "parents": 2, - }, - }, - ], - }, - "ClearOrigin", - { - "BuyExecution": { - "fees": { - "fun": { - "Fungible": 10000000000, - }, - "id": { - "interior": { - "X1": [ - { - "GlobalConsensus": "Kusama", - }, - ], - }, - "parents": 2, - }, - }, - "weightLimit": "Unlimited", - }, - }, - { - "DepositAsset": { - "assets": { - "Wild": "All", - }, - "beneficiary": { - "interior": { - "X1": [ - { - "AccountId32": { - "id": "(hash)", - "network": null, - }, - }, - ], - }, - "parents": 0, - }, - }, - }, - ], - "messageId": "(hash)", - "origin": { - "interior": { - "X1": [ - { - "AccountId32": { - "id": "(hash)", - "network": "Polkadot", - }, - }, - ], - }, - "parents": 0, - }, - }, - "method": "Sent", - "section": "polkadotXcm", - }, -] -`; - -exports[`Limited Reserve Transfers from AH Account Alice -> Spiritnet Account Alice > sender assetHub::xcmpQueue::[XcmpMessageSent] asset {"V3":[{"id":{"Concrete":{"parents":2,"interior":{"X1":{"GlobalConsensus":"Kusama"}}}},"fun":{"Fungible":"10000000000"}}]} 1`] = ` -[ - { - "data": { - "messageHash": "(hash)", - }, - "method": "XcmpMessageSent", - "section": "xcmpQueue", - }, -] -`; diff --git a/integration-tests/chopsticks/src/tests/xcm/assetHub/spiritnet/__snapshots__/limitedReserveTransferSpiritnetAssetHub.test.ts.snap b/integration-tests/chopsticks/src/tests/xcm/assetHub/spiritnet/__snapshots__/limitedReserveTransferSpiritnetAssetHub.test.ts.snap deleted file mode 100644 index 1f82d5925e..0000000000 --- a/integration-tests/chopsticks/src/tests/xcm/assetHub/spiritnet/__snapshots__/limitedReserveTransferSpiritnetAssetHub.test.ts.snap +++ /dev/null @@ -1,63 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`Limited Reserve Transfers from Spiritnet Account Alice -> AH Account Alice > receiver assetHub::messageQueue::[Processed] asset {"V3":[{"id":{"Concrete":{"parents":0,"interior":"Here"}},"fun":{"Fungible":"1000000000000000"}}]} 1`] = ` -[ - { - "data": { - "id": "(hash)", - "origin": { - "Sibling": "(rounded 2100)", - }, - "success": false, - "weightUsed": { - "proofSize": "(rounded 1500)", - "refTime": "(rounded 29000000)", - }, - }, - "method": "Processed", - "section": "messageQueue", - }, -] -`; - -exports[`Limited Reserve Transfers from Spiritnet Account Alice -> AH Account Alice > sender spiritnet::balances::[Withdraw] asset {"V3":[{"id":{"Concrete":{"parents":0,"interior":"Here"}},"fun":{"Fungible":"1000000000000000"}}]} 1`] = ` -[ - { - "data": { - "amount": "(rounded 170000000000)", - "who": "4seWojfEHrk5YKPahdErazQ3CWEHZYi6NV4gKz5AaejWbRPJ", - }, - "method": "Withdraw", - "section": "balances", - }, -] -`; - -exports[`Limited Reserve Transfers from Spiritnet Account Alice -> AH Account Alice > sender spiritnet::polkadotXcm::[Attempted] asset {"V3":[{"id":{"Concrete":{"parents":0,"interior":"Here"}},"fun":{"Fungible":"1000000000000000"}}]} 1`] = ` -[ - { - "data": { - "outcome": { - "Complete": { - "proofSize": 0, - "refTime": 400000000, - }, - }, - }, - "method": "Attempted", - "section": "polkadotXcm", - }, -] -`; - -exports[`Limited Reserve Transfers from Spiritnet Account Alice -> AH Account Alice > sender spiritnet::xcmpQueue::[XcmpMessageSent] asset {"V3":[{"id":{"Concrete":{"parents":0,"interior":"Here"}},"fun":{"Fungible":"1000000000000000"}}]} 1`] = ` -[ - { - "data": { - "messageHash": "(hash)", - }, - "method": "XcmpMessageSent", - "section": "xcmpQueue", - }, -] -`; diff --git a/integration-tests/chopsticks/src/tests/xcm/assetHub/spiritnet/__snapshots__/teleportTransferAssetHubSpiritnet.test.ts.snap b/integration-tests/chopsticks/src/tests/xcm/assetHub/spiritnet/__snapshots__/teleportTransferAssetHubSpiritnet.test.ts.snap deleted file mode 100644 index 05b7ce97bd..0000000000 --- a/integration-tests/chopsticks/src/tests/xcm/assetHub/spiritnet/__snapshots__/teleportTransferAssetHubSpiritnet.test.ts.snap +++ /dev/null @@ -1,193 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`Teleport Transfers from AH Account Alice -> Spiritnet Account Alice > receiver spiritnet::xcmpQueue::[Fail] asset {"V3":[{"id":{"Concrete":{"parents":2,"interior":{"X1":{"GlobalConsensus":"Kusama"}}}},"fun":{"Fungible":"10000000000"}}]} 1`] = ` -[ - { - "data": { - "error": "UntrustedTeleportLocation", - "messageHash": "(hash)", - "messageId": "(hash)", - "weight": { - "proofSize": 0, - "refTime": 200000000, - }, - }, - "method": "Fail", - "section": "xcmpQueue", - }, -] -`; - -exports[`Teleport Transfers from AH Account Alice -> Spiritnet Account Alice > sender assetHub::foreignAssets::[Burned] asset {"V3":[{"id":{"Concrete":{"parents":2,"interior":{"X1":{"GlobalConsensus":"Kusama"}}}},"fun":{"Fungible":"10000000000"}}]} 1`] = ` -[ - { - "data": { - "assetId": { - "interior": { - "X1": { - "GlobalConsensus": "Kusama", - }, - }, - "parents": 2, - }, - "balance": 10000000000, - "owner": "15jSz35ugoWTc61xHPoxEkHte4o7UanKCk1gx1dizA8yuNs8", - }, - "method": "Burned", - "section": "foreignAssets", - }, -] -`; - -exports[`Teleport Transfers from AH Account Alice -> Spiritnet Account Alice > sender assetHub::polkadotXcm::[Attempted,FeesPaid,Sent] asset {"V3":[{"id":{"Concrete":{"parents":2,"interior":{"X1":{"GlobalConsensus":"Kusama"}}}},"fun":{"Fungible":"10000000000"}}]} 1`] = ` -[ - { - "data": { - "outcome": { - "Complete": { - "used": { - "proofSize": "(rounded 3600)", - "refTime": "(rounded 180000000)", - }, - }, - }, - }, - "method": "Attempted", - "section": "polkadotXcm", - }, - { - "data": { - "fees": [ - { - "fun": { - "Fungible": 310000000, - }, - "id": { - "interior": "Here", - "parents": 1, - }, - }, - ], - "paying": { - "interior": { - "X1": [ - { - "AccountId32": { - "id": "(hash)", - "network": "Polkadot", - }, - }, - ], - }, - "parents": 0, - }, - }, - "method": "FeesPaid", - "section": "polkadotXcm", - }, - { - "data": { - "destination": { - "interior": { - "X1": [ - { - "Parachain": "(rounded 2100)", - }, - ], - }, - "parents": 1, - }, - "message": [ - { - "ReceiveTeleportedAsset": [ - { - "fun": { - "Fungible": 10000000000, - }, - "id": { - "interior": { - "X1": [ - { - "GlobalConsensus": "Kusama", - }, - ], - }, - "parents": 2, - }, - }, - ], - }, - "ClearOrigin", - { - "BuyExecution": { - "fees": { - "fun": { - "Fungible": 10000000000, - }, - "id": { - "interior": { - "X1": [ - { - "GlobalConsensus": "Kusama", - }, - ], - }, - "parents": 2, - }, - }, - "weightLimit": "Unlimited", - }, - }, - { - "DepositAsset": { - "assets": { - "Wild": "All", - }, - "beneficiary": { - "interior": { - "X1": [ - { - "AccountId32": { - "id": "(hash)", - "network": null, - }, - }, - ], - }, - "parents": 0, - }, - }, - }, - ], - "messageId": "(hash)", - "origin": { - "interior": { - "X1": [ - { - "AccountId32": { - "id": "(hash)", - "network": "Polkadot", - }, - }, - ], - }, - "parents": 0, - }, - }, - "method": "Sent", - "section": "polkadotXcm", - }, -] -`; - -exports[`Teleport Transfers from AH Account Alice -> Spiritnet Account Alice > sender assetHub::xcmpQueue::[XcmpMessageSent] asset {"V3":[{"id":{"Concrete":{"parents":2,"interior":{"X1":{"GlobalConsensus":"Kusama"}}}},"fun":{"Fungible":"10000000000"}}]} 1`] = ` -[ - { - "data": { - "messageHash": "(hash)", - }, - "method": "XcmpMessageSent", - "section": "xcmpQueue", - }, -] -`; diff --git a/integration-tests/chopsticks/src/tests/xcm/assetHub/spiritnet/__snapshots__/teleportTransferSpiritnetAssetHub.test.ts.snap b/integration-tests/chopsticks/src/tests/xcm/assetHub/spiritnet/__snapshots__/teleportTransferSpiritnetAssetHub.test.ts.snap deleted file mode 100644 index e3c05f88b0..0000000000 --- a/integration-tests/chopsticks/src/tests/xcm/assetHub/spiritnet/__snapshots__/teleportTransferSpiritnetAssetHub.test.ts.snap +++ /dev/null @@ -1,3 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`Teleport assets from Spiritnet Account Alice -> AH Account Alice 1`] = `[RpcError: 1010: {"invalid":{"exhaustsResources":null}}]`; diff --git a/integration-tests/chopsticks/src/tests/xcm/assetHub/spiritnet/limitedReserveTransferAssetHubSpiritnet.test.ts b/integration-tests/chopsticks/src/tests/xcm/assetHub/spiritnet/limitedReserveTransferAssetHubSpiritnet.test.ts deleted file mode 100644 index d2bfda700d..0000000000 --- a/integration-tests/chopsticks/src/tests/xcm/assetHub/spiritnet/limitedReserveTransferAssetHubSpiritnet.test.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { test } from 'vitest' -import { sendTransaction, withExpect } from '@acala-network/chopsticks-testing' - -import * as SpiritnetConfig from '../../../../network/spiritnet.js' -import * as AssetHubConfig from '../../../../network/assetHub.js' -import { DOT, keysAlice } from '../../../../utils.js' -import { spiritnetContext, assethubContext } from '../../../index.js' -import { getSiblingLocationV3 } from '../../../../network/utils.js' -import { createBlock, hexAddress, setStorage } from '../../../utils.js' - -test('Limited Reserve Transfers from AH Account Alice -> Spiritnet Account Alice', async ({ expect }) => { - const { checkEvents, checkSystemEvents } = withExpect(expect) - - // Assign alice some KSM - await setStorage(assethubContext, { - ...AssetHubConfig.assignDotTokensToAccountsAsStorage([keysAlice.address]), - ...AssetHubConfig.assignKSMtoAccounts([keysAlice.address]), - }) - - const spiritnetDestination = { V3: getSiblingLocationV3(SpiritnetConfig.paraId) } - const KSMAsset = { V3: [{ id: { Concrete: AssetHubConfig.KSMAssetLocation }, fun: { Fungible: DOT.toString() } }] } - const remoteFeeId = { V3: { Concrete: AssetHubConfig.KSMAssetLocation } } - const xcmMessage = { - V3: [ - { - DepositAsset: { - assets: { Wild: 'All' }, - beneficiary: { - parents: 0, - interior: { - X1: { - AccountId32: { - id: hexAddress(keysAlice.address), - }, - }, - }, - }, - }, - }, - ], - } - - // Otherwise the it is tried to route the msg over KSM. - const signedTx = assethubContext.api.tx.polkadotXcm - .transferAssetsUsingTypeAndThen( - spiritnetDestination, - KSMAsset, - 'LocalReserve', - remoteFeeId, - 'LocalReserve', - xcmMessage, - 'Unlimited' - ) - .signAsync(keysAlice) - - const events = await sendTransaction(signedTx) - await createBlock(assethubContext) - - // MSG should still be send. - await checkEvents(events, 'xcmpQueue').toMatchSnapshot( - `sender assetHub::xcmpQueue::[XcmpMessageSent] asset ${JSON.stringify(KSMAsset)}` - ) - await checkEvents(events, 'polkadotXcm').toMatchSnapshot( - `sender assetHub::polkadotXcm::[Sent,FeesPaid,Attempted] asset ${JSON.stringify(KSMAsset)} ` - ) - await checkEvents(events, 'foreignAssets').toMatchSnapshot( - `sender assetHub::foreignAssets::[Transferred] asset ${JSON.stringify(KSMAsset)}` - ) - - // ... But should fail on receiver side. - await createBlock(spiritnetContext) - - // we expect to have the UntrustedReserveLocation error - await checkSystemEvents(spiritnetContext, 'xcmpQueue').toMatchSnapshot( - `receiver spiritnet::XcmpQueue::[Fail] asset ${JSON.stringify(KSMAsset)}` - ) -}, 20_000) diff --git a/integration-tests/chopsticks/src/tests/xcm/assetHub/spiritnet/limitedReserveTransferSpiritnetAssetHub.test.ts b/integration-tests/chopsticks/src/tests/xcm/assetHub/spiritnet/limitedReserveTransferSpiritnetAssetHub.test.ts deleted file mode 100644 index fc8a6e3d1e..0000000000 --- a/integration-tests/chopsticks/src/tests/xcm/assetHub/spiritnet/limitedReserveTransferSpiritnetAssetHub.test.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { test } from 'vitest' -import { sendTransaction, withExpect } from '@acala-network/chopsticks-testing' - -import * as SpiritnetConfig from '../../../../network/spiritnet.js' -import * as AssetHubConfig from '../../../../network/assetHub.js' -import { KILT, initialBalanceKILT, keysAlice } from '../../../../utils.js' -import { spiritnetContext, assethubContext, getFreeBalanceSpiritnet } from '../../../index.js' -import { getAccountLocationV3, getNativeAssetIdLocationV3, getSiblingLocationV3 } from '../../../../network/utils.js' -import { checkBalance, createBlock, hexAddress, setStorage } from '../../../utils.js' - -test('Limited Reserve Transfers from Spiritnet Account Alice -> AH Account Alice', async ({ expect }) => { - const { checkEvents, checkSystemEvents } = withExpect(expect) - - // Assign alice some KILT tokens - await setStorage(spiritnetContext, { - ...SpiritnetConfig.assignNativeTokensToAccounts([keysAlice.address], initialBalanceKILT), - ...SpiritnetConfig.XcmPalletSafeVersion3StorageEntry(), - }) - - // Balance of the AH sovereign account before the transfer - const assetHubSovereignAccountBalance = await getFreeBalanceSpiritnet( - AssetHubConfig.sovereignAccountOnSiblingChains - ) - - // check initial balance of Alice on Spiritnet - await checkBalance(getFreeBalanceSpiritnet, keysAlice.address, expect, initialBalanceKILT) - - const aliceAddress = hexAddress(keysAlice.address) - const assetHubDestination = { V3: getSiblingLocationV3(AssetHubConfig.paraId) } - const beneficiary = getAccountLocationV3(aliceAddress) - const kiltAsset = { V3: [getNativeAssetIdLocationV3(KILT.toString())] } - - const signedTx = spiritnetContext.api.tx.polkadotXcm - .limitedReserveTransferAssets(assetHubDestination, beneficiary, kiltAsset, 0, 'Unlimited') - .signAsync(keysAlice) - - const events = await sendTransaction(signedTx) - - // Check sender state - await createBlock(spiritnetContext) - - // Check events sender - await checkEvents(events, 'xcmpQueue').toMatchSnapshot( - `sender spiritnet::xcmpQueue::[XcmpMessageSent] asset ${JSON.stringify(kiltAsset)}` - ) - await checkEvents(events, 'polkadotXcm').toMatchSnapshot( - `sender spiritnet::polkadotXcm::[Attempted] asset ${JSON.stringify(kiltAsset)}` - ) - await checkEvents(events, { section: 'balances', method: 'Withdraw' }).toMatchSnapshot( - `sender spiritnet::balances::[Withdraw] asset ${JSON.stringify(kiltAsset)}` - ) - - // check balance. The sovereign account should hold one additional KILT. - await checkBalance( - getFreeBalanceSpiritnet, - AssetHubConfig.sovereignAccountOnSiblingChains, - expect, - assetHubSovereignAccountBalance + KILT - ) - - await createBlock(assethubContext) - - // MSG processing will fail on AH. - await checkSystemEvents(assethubContext, 'messageQueue').toMatchSnapshot( - `receiver assetHub::messageQueue::[Processed] asset ${JSON.stringify(kiltAsset)}` - ) -}, 20_000) diff --git a/integration-tests/chopsticks/src/tests/xcm/assetHub/spiritnet/teleportTransferAssetHubSpiritnet.test.ts b/integration-tests/chopsticks/src/tests/xcm/assetHub/spiritnet/teleportTransferAssetHubSpiritnet.test.ts deleted file mode 100644 index 7c9e2a3910..0000000000 --- a/integration-tests/chopsticks/src/tests/xcm/assetHub/spiritnet/teleportTransferAssetHubSpiritnet.test.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { test } from 'vitest' -import { sendTransaction, withExpect } from '@acala-network/chopsticks-testing' - -import * as SpiritnetConfig from '../../../../network/spiritnet.js' -import * as AssetHubConfig from '../../../../network/assetHub.js' -import { DOT, keysAlice } from '../../../../utils.js' -import { spiritnetContext, assethubContext } from '../../../index.js' -import { getSiblingLocationV3 } from '../../../../network/utils.js' -import { createBlock, hexAddress, setStorage } from '../../../utils.js' - -test('Teleport Transfers from AH Account Alice -> Spiritnet Account Alice', async ({ expect }) => { - const { checkEvents, checkSystemEvents } = withExpect(expect) - - // Assign alice some KSM - await setStorage(assethubContext, { - ...AssetHubConfig.assignDotTokensToAccountsAsStorage([keysAlice.address]), - ...AssetHubConfig.assignKSMtoAccounts([keysAlice.address]), - }) - - const spiritnetDestination = { V3: getSiblingLocationV3(SpiritnetConfig.paraId) } - const KSMAsset = { V3: [{ id: { Concrete: AssetHubConfig.KSMAssetLocation }, fun: { Fungible: DOT.toString() } }] } - const remoteFeeId = { V3: { Concrete: AssetHubConfig.KSMAssetLocation } } - const xcmMessage = { - V3: [ - { - DepositAsset: { - assets: { Wild: 'All' }, - beneficiary: { - parents: 0, - interior: { - X1: { - AccountId32: { - id: hexAddress(keysAlice.address), - }, - }, - }, - }, - }, - }, - ], - } - - // Otherwise the it is tried to route the msg over KSM. - const signedTx = assethubContext.api.tx.polkadotXcm - .transferAssetsUsingTypeAndThen( - spiritnetDestination, - KSMAsset, - 'Teleport', - remoteFeeId, - 'Teleport', - xcmMessage, - 'Unlimited' - ) - .signAsync(keysAlice) - - const events = await sendTransaction(signedTx) - await createBlock(assethubContext) - - // MSG should still be send. - await checkEvents(events, 'xcmpQueue').toMatchSnapshot( - `sender assetHub::xcmpQueue::[XcmpMessageSent] asset ${JSON.stringify(KSMAsset)}` - ) - await checkEvents(events, 'polkadotXcm').toMatchSnapshot( - `sender assetHub::polkadotXcm::[Attempted,FeesPaid,Sent] asset ${JSON.stringify(KSMAsset)}` - ) - await checkEvents(events, 'foreignAssets').toMatchSnapshot( - `sender assetHub::foreignAssets::[Burned] asset ${JSON.stringify(KSMAsset)}` - ) - - // ... But should fail on receiver side. - await createBlock(spiritnetContext) - - // we expect to have the UntrustedTeleportLocation error - await checkSystemEvents(spiritnetContext, 'xcmpQueue').toMatchSnapshot( - `receiver spiritnet::xcmpQueue::[Fail] asset ${JSON.stringify(KSMAsset)}` - ) -}, 20_000) diff --git a/integration-tests/chopsticks/src/tests/xcm/assetHub/spiritnet/teleportTransferSpiritnetAssetHub.test.ts b/integration-tests/chopsticks/src/tests/xcm/assetHub/spiritnet/teleportTransferSpiritnetAssetHub.test.ts deleted file mode 100644 index 2f3c5980e5..0000000000 --- a/integration-tests/chopsticks/src/tests/xcm/assetHub/spiritnet/teleportTransferSpiritnetAssetHub.test.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { test } from 'vitest' - -import * as SpiritnetConfig from '../../../../network/spiritnet.js' -import * as AssetHubConfig from '../../../../network/assetHub.js' -import { KILT, initialBalanceKILT, keysAlice } from '../../../../utils.js' -import { spiritnetContext, getFreeBalanceSpiritnet } from '../../../index.js' -import { getAccountLocationV3, getNativeAssetIdLocationV3, getSiblingLocationV3 } from '../../../../network/utils.js' -import { checkBalance, createBlock, hexAddress, setStorage } from '../../../utils.js' - -test('Teleport assets from Spiritnet Account Alice -> AH Account Alice', async ({ expect }) => { - // Assign alice some KILT tokens - await setStorage(spiritnetContext, { - ...SpiritnetConfig.assignNativeTokensToAccounts([keysAlice.address], initialBalanceKILT), - ...SpiritnetConfig.XcmPalletSafeVersion3StorageEntry(), - }) - - // check initial balance of Alice on Spiritnet - await checkBalance(getFreeBalanceSpiritnet, keysAlice.address, expect, initialBalanceKILT) - - const aliceAddress = hexAddress(keysAlice.address) - const assetHubDestination = { V3: getSiblingLocationV3(AssetHubConfig.paraId) } - const beneficiary = getAccountLocationV3(aliceAddress) - const kiltAsset = { V3: [getNativeAssetIdLocationV3(KILT)] } - - // Teleportation should exhaust resources. This is intended until isTeleport is enabled in the XCM config. - await expect(async () => { - await spiritnetContext.api.tx.polkadotXcm - .teleportAssets(assetHubDestination, beneficiary, kiltAsset, 0) - .signAndSend(keysAlice) - await createBlock(spiritnetContext) - }).rejects.toThrowErrorMatchingSnapshot() - - // Check sender state -}, 20_000) diff --git a/integration-tests/chopsticks/src/tests/xcm/hydration/__snapshots__/limitedReserveTransferSpiritnetHydraDxV2.test.ts.snap b/integration-tests/chopsticks/src/tests/xcm/hydration/__snapshots__/limitedReserveTransferSpiritnetHydraDxV2.test.ts.snap deleted file mode 100644 index 4aae740e41..0000000000 --- a/integration-tests/chopsticks/src/tests/xcm/hydration/__snapshots__/limitedReserveTransferSpiritnetHydraDxV2.test.ts.snap +++ /dev/null @@ -1,86 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`Limited Reserve V2 Transfers from Spiritnet Account Alice -> HydraDx Account Alice > receiver events currencies 1`] = ` -[ - { - "data": { - "amount": "(rounded 1000000000000000)", - "currencyId": 28, - "who": "7NL1GYCJu8cFSnWBLwET2X3fMdodw8T75zuxi59hA2bhdjQq", - }, - "method": "Deposited", - "section": "currencies", - }, - { - "data": { - "amount": "(rounded 3200000000000)", - "currencyId": 28, - "who": "7L53bUTBopuwFt3mKUfmkzgGLayYa1Yvn1hAg9v5UMrQzTfh", - }, - "method": "Deposited", - "section": "currencies", - }, -] -`; - -exports[`Limited Reserve V2 Transfers from Spiritnet Account Alice -> HydraDx Account Alice > receiver events xcmpQueue 1`] = ` -[ - { - "data": { - "id": "(hash)", - "origin": { - "Sibling": "(rounded 2100)", - }, - "success": true, - "weightUsed": { - "proofSize": 0, - "refTime": 400000000, - }, - }, - "method": "Processed", - "section": "messageQueue", - }, -] -`; - -exports[`Limited Reserve V2 Transfers from Spiritnet Account Alice -> HydraDx Account Alice > sender events Balances 1`] = ` -[ - { - "data": { - "amount": "(rounded 170000000000)", - "who": "4seWojfEHrk5YKPahdErazQ3CWEHZYi6NV4gKz5AaejWbRPJ", - }, - "method": "Withdraw", - "section": "balances", - }, -] -`; - -exports[`Limited Reserve V2 Transfers from Spiritnet Account Alice -> HydraDx Account Alice > sender events xcm pallet 1`] = ` -[ - { - "data": { - "outcome": { - "Complete": { - "proofSize": 0, - "refTime": 400000000, - }, - }, - }, - "method": "Attempted", - "section": "polkadotXcm", - }, -] -`; - -exports[`Limited Reserve V2 Transfers from Spiritnet Account Alice -> HydraDx Account Alice > sender events xcm queue pallet 1`] = ` -[ - { - "data": { - "messageHash": "(hash)", - }, - "method": "XcmpMessageSent", - "section": "xcmpQueue", - }, -] -`; diff --git a/integration-tests/chopsticks/src/tests/xcm/hydration/__snapshots__/limitedReserveTransferSpiritnetHydraDxV3.test.ts.snap b/integration-tests/chopsticks/src/tests/xcm/hydration/__snapshots__/limitedReserveTransferSpiritnetHydraDxV3.test.ts.snap deleted file mode 100644 index cd07dfd9b0..0000000000 --- a/integration-tests/chopsticks/src/tests/xcm/hydration/__snapshots__/limitedReserveTransferSpiritnetHydraDxV3.test.ts.snap +++ /dev/null @@ -1,86 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`Limited Reserve V3 Transfers from Spiritnet Account Alice -> HydraDx Account Alice > receiver events currencies 1`] = ` -[ - { - "data": { - "amount": "(rounded 1000000000000000)", - "currencyId": 28, - "who": "7NL1GYCJu8cFSnWBLwET2X3fMdodw8T75zuxi59hA2bhdjQq", - }, - "method": "Deposited", - "section": "currencies", - }, - { - "data": { - "amount": "(rounded 3200000000000)", - "currencyId": 28, - "who": "7L53bUTBopuwFt3mKUfmkzgGLayYa1Yvn1hAg9v5UMrQzTfh", - }, - "method": "Deposited", - "section": "currencies", - }, -] -`; - -exports[`Limited Reserve V3 Transfers from Spiritnet Account Alice -> HydraDx Account Alice > receiver events xcmpQueue 1`] = ` -[ - { - "data": { - "id": "(hash)", - "origin": { - "Sibling": "(rounded 2100)", - }, - "success": true, - "weightUsed": { - "proofSize": 0, - "refTime": 400000000, - }, - }, - "method": "Processed", - "section": "messageQueue", - }, -] -`; - -exports[`Limited Reserve V3 Transfers from Spiritnet Account Alice -> HydraDx Account Alice > sender events Balances 1`] = ` -[ - { - "data": { - "amount": "(rounded 170000000000)", - "who": "4seWojfEHrk5YKPahdErazQ3CWEHZYi6NV4gKz5AaejWbRPJ", - }, - "method": "Withdraw", - "section": "balances", - }, -] -`; - -exports[`Limited Reserve V3 Transfers from Spiritnet Account Alice -> HydraDx Account Alice > sender events xcm pallet 1`] = ` -[ - { - "data": { - "outcome": { - "Complete": { - "proofSize": 0, - "refTime": 400000000, - }, - }, - }, - "method": "Attempted", - "section": "polkadotXcm", - }, -] -`; - -exports[`Limited Reserve V3 Transfers from Spiritnet Account Alice -> HydraDx Account Alice > sender events xcm queue pallet 1`] = ` -[ - { - "data": { - "messageHash": "(hash)", - }, - "method": "XcmpMessageSent", - "section": "xcmpQueue", - }, -] -`; diff --git a/integration-tests/chopsticks/src/tests/xcm/hydration/__snapshots__/limitedReseveTransferHydraDxSpiritnet.test.ts.snap b/integration-tests/chopsticks/src/tests/xcm/hydration/__snapshots__/limitedReseveTransferHydraDxSpiritnet.test.ts.snap deleted file mode 100644 index 2e2b13824a..0000000000 --- a/integration-tests/chopsticks/src/tests/xcm/hydration/__snapshots__/limitedReseveTransferHydraDxSpiritnet.test.ts.snap +++ /dev/null @@ -1,129 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`Limited Reserve Transfers from HydraDx Account Alice -> Spiritnet Account Alice > receiver events Balances 1`] = ` -[ - { - "data": { - "amount": 1000000000000000, - "who": "4qXPdpioJ6D8cgdeYXaukV2Y2oAQUHaX1VnGhdbSRqJn2CBt", - }, - "method": "Withdraw", - "section": "balances", - }, -] -`; - -exports[`Limited Reserve Transfers from HydraDx Account Alice -> Spiritnet Account Alice > receiver events Balances 2`] = ` -[ - { - "data": { - "account": "4seWojfEHrk5YKPahdErazQ3CWEHZYi6NV4gKz5AaejWbRPJ", - "freeBalance": "(rounded 1000000000000000)", - }, - "method": "Endowed", - "section": "balances", - }, -] -`; - -exports[`Limited Reserve Transfers from HydraDx Account Alice -> Spiritnet Account Alice > receiver events xcmpQueue 1`] = ` -[ - { - "data": { - "messageHash": "(hash)", - "messageId": "(hash)", - "weight": { - "proofSize": 0, - "refTime": 800000000, - }, - }, - "method": "Success", - "section": "xcmpQueue", - }, -] -`; - -exports[`Limited Reserve Transfers from HydraDx Account Alice -> Spiritnet Account Alice > sender events currencies 1`] = ` -[ - { - "data": { - "amount": "(rounded 450000000000)", - "currencyId": 0, - "who": "7NL1GYCJu8cFSnWBLwET2X3fMdodw8T75zuxi59hA2bhdjQq", - }, - "method": "Withdrawn", - "section": "currencies", - }, - { - "data": { - "amount": 1000000000000000, - "currencyId": 28, - "who": "7NL1GYCJu8cFSnWBLwET2X3fMdodw8T75zuxi59hA2bhdjQq", - }, - "method": "Withdrawn", - "section": "currencies", - }, -] -`; - -exports[`Limited Reserve Transfers from HydraDx Account Alice -> Spiritnet Account Alice > sender events currencies 2`] = ` -[ - { - "data": { - "assets": [ - { - "fun": { - "Fungible": 1000000000000000, - }, - "id": { - "interior": { - "X1": [ - { - "Parachain": "(rounded 2100)", - }, - ], - }, - "parents": 1, - }, - }, - ], - "dest": { - "interior": { - "X2": [ - { - "Parachain": "(rounded 2100)", - }, - { - "AccountId32": { - "id": "(hash)", - "network": null, - }, - }, - ], - }, - "parents": 1, - }, - "fee": { - "fun": { - "Fungible": 1000000000000000, - }, - "id": { - "interior": { - "X1": [ - { - "Parachain": "(rounded 2100)", - }, - ], - }, - "parents": 1, - }, - }, - "sender": "7NL1GYCJu8cFSnWBLwET2X3fMdodw8T75zuxi59hA2bhdjQq", - }, - "method": "TransferredAssets", - "section": "xTokens", - }, -] -`; - -exports[`Limited Reserve Transfers from HydraDx Account Alice -> Spiritnet Account Alice > sender events xcm queue pallet 1`] = `[]`; diff --git a/integration-tests/chopsticks/src/tests/xcm/hydration/limitedReserveTransferSpiritnetHydraDxV2.test.ts b/integration-tests/chopsticks/src/tests/xcm/hydration/limitedReserveTransferSpiritnetHydraDxV2.test.ts deleted file mode 100644 index 9de60e4f52..0000000000 --- a/integration-tests/chopsticks/src/tests/xcm/hydration/limitedReserveTransferSpiritnetHydraDxV2.test.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { test } from 'vitest' -import { sendTransaction, withExpect } from '@acala-network/chopsticks-testing' - -import * as SpiritnetConfig from '../../../network/spiritnet.js' -import * as HydraDxConfig from '../../../network/hydraDx.js' -import { KILT, initialBalanceKILT, keysAlice } from '../../../utils.js' -import { spiritnetContext, hydradxContext, getFreeBalanceSpiritnet, getFreeBalanceHydraDxKilt } from '../../index.js' -import { getAccountLocationV2, getNativeAssetIdLocationV3, getSiblingLocationV3 } from '../../../network/utils.js' -import { checkBalance, checkBalanceInRange, createBlock, hexAddress, setStorage } from '../../utils.js' - -// native asset location is the same for V2 and V3 -const KILT_ASSET_V2 = { V2: [getNativeAssetIdLocationV3(KILT)] } - -test('Limited Reserve V2 Transfers from Spiritnet Account Alice -> HydraDx Account Alice', async ({ expect }) => { - const { checkEvents, checkSystemEvents } = withExpect(expect) - - // Assign alice some KILT tokens - await setStorage( - spiritnetContext, - SpiritnetConfig.assignNativeTokensToAccounts([keysAlice.address], initialBalanceKILT) - ) - - // Balance of the hydraDx sovereign account before the transfer - const hydraDxSovereignAccountBalanceBeforeTransfer = await getFreeBalanceSpiritnet( - SpiritnetConfig.hydraDxSovereignAccount - ) - - // check initial balance of Alice on Spiritnet - await checkBalance(getFreeBalanceSpiritnet, keysAlice.address, expect, initialBalanceKILT) - - // Alice should have NO KILT on HydraDx - await checkBalance(getFreeBalanceHydraDxKilt, keysAlice.address, expect, BigInt(0)) - - const aliceAddress = hexAddress(keysAlice.address) - const hydraDxDestination = { V2: getSiblingLocationV3(HydraDxConfig.paraId) } - const beneficiary = getAccountLocationV2(aliceAddress) - - const signedTx = spiritnetContext.api.tx.polkadotXcm - .limitedReserveTransferAssets(hydraDxDestination, beneficiary, KILT_ASSET_V2, 0, 'Unlimited') - .signAsync(keysAlice) - - const events = await sendTransaction(signedTx) - - // Check sender state - await createBlock(spiritnetContext) - - // Check events sender - checkEvents(events, 'xcmpQueue').toMatchSnapshot('sender events xcm queue pallet') - checkEvents(events, 'polkadotXcm').toMatchSnapshot('sender events xcm pallet') - checkEvents(events, { section: 'balances', method: 'Withdraw' }).toMatchSnapshot('sender events Balances') - - // check balance. The sovereign account should hold one additional KILT. - await checkBalance( - getFreeBalanceSpiritnet, - SpiritnetConfig.hydraDxSovereignAccount, - expect, - hydraDxSovereignAccountBalanceBeforeTransfer + KILT - ) - - // check balance sender - // Equal to `initialBalanceKILT - KILT` - tx fees - await checkBalanceInRange(getFreeBalanceSpiritnet, keysAlice.address, expect, [ - BigInt('98999830999996320'), - BigInt('98999830999996321'), - ]) - - // Check receiver state - await createBlock(hydradxContext) - - // Check events receiver - checkSystemEvents(hydradxContext, { section: 'currencies', method: 'Deposited' }).toMatchSnapshot( - 'receiver events currencies' - ) - checkSystemEvents(hydradxContext, 'messageQueue').toMatchSnapshot('receiver events xcmpQueue') - - // check balance receiver - // check balance. Equal to `KILT` - tx fees - await checkBalanceInRange(getFreeBalanceHydraDxKilt, aliceAddress, expect, [ - BigInt(996349465529793), - BigInt(996349465529796), - ]) -}, 20_000) diff --git a/integration-tests/chopsticks/src/tests/xcm/hydration/limitedReserveTransferSpiritnetHydraDxV3.test.ts b/integration-tests/chopsticks/src/tests/xcm/hydration/limitedReserveTransferSpiritnetHydraDxV3.test.ts deleted file mode 100644 index a82c3908fa..0000000000 --- a/integration-tests/chopsticks/src/tests/xcm/hydration/limitedReserveTransferSpiritnetHydraDxV3.test.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { test } from 'vitest' -import { sendTransaction, withExpect } from '@acala-network/chopsticks-testing' - -import * as SpiritnetConfig from '../../../network/spiritnet.js' -import * as HydraDxConfig from '../../../network/hydraDx.js' -import { KILT, initialBalanceKILT, keysAlice } from '../../../utils.js' -import { spiritnetContext, hydradxContext, getFreeBalanceSpiritnet, getFreeBalanceHydraDxKilt } from '../../index.js' -import { getAccountLocationV3, getNativeAssetIdLocationV3, getSiblingLocationV3 } from '../../../network/utils.js' -import { checkBalance, checkBalanceInRange, createBlock, hexAddress, setStorage } from '../../utils.js' - -const KILT_ASSET_V3 = { V3: [getNativeAssetIdLocationV3(KILT)] } - -test('Limited Reserve V3 Transfers from Spiritnet Account Alice -> HydraDx Account Alice', async ({ expect }) => { - const { checkEvents, checkSystemEvents } = withExpect(expect) - - // Assign alice some KILT tokens - await setStorage( - spiritnetContext, - SpiritnetConfig.assignNativeTokensToAccounts([keysAlice.address], initialBalanceKILT) - ) - - // Balance of the hydraDx sovereign account before the transfer - const hydraDxSovereignAccountBalanceBeforeTransfer = await getFreeBalanceSpiritnet( - SpiritnetConfig.hydraDxSovereignAccount - ) - - // check initial balance of Alice on Spiritnet - await checkBalance(getFreeBalanceSpiritnet, keysAlice.address, expect, initialBalanceKILT) - // Alice should have NO KILT on HydraDx - await checkBalance(getFreeBalanceHydraDxKilt, keysAlice.address, expect, BigInt(0)) - - const aliceAddress = hexAddress(keysAlice.address) - const hydraDxDestination = { V3: getSiblingLocationV3(HydraDxConfig.paraId) } - const beneficiary = getAccountLocationV3(aliceAddress) - - const signedTx = spiritnetContext.api.tx.polkadotXcm - .limitedReserveTransferAssets(hydraDxDestination, beneficiary, KILT_ASSET_V3, 0, 'Unlimited') - .signAsync(keysAlice) - - const events = await sendTransaction(signedTx) - - // Check sender state - await createBlock(spiritnetContext) - - // Check events sender - checkEvents(events, 'xcmpQueue').toMatchSnapshot('sender events xcm queue pallet') - checkEvents(events, 'polkadotXcm').toMatchSnapshot('sender events xcm pallet') - checkEvents(events, { section: 'balances', method: 'Withdraw' }).toMatchSnapshot('sender events Balances') - - // check balance. The sovereign account should hold one additional KILT. - await checkBalance( - getFreeBalanceSpiritnet, - SpiritnetConfig.hydraDxSovereignAccount, - expect, - hydraDxSovereignAccountBalanceBeforeTransfer + KILT - ) - - // check balance sender - // Equal to `initialBalanceKILT - KILT` - tx fees - await checkBalanceInRange(getFreeBalanceSpiritnet, keysAlice.address, expect, [ - BigInt('98999830999996320'), - BigInt('98999830999996321'), - ]) - - // Check receiver state - await createBlock(hydradxContext) - - // Check events receiver - checkSystemEvents(hydradxContext, { section: 'currencies', method: 'Deposited' }).toMatchSnapshot( - 'receiver events currencies' - ) - checkSystemEvents(hydradxContext, 'messageQueue').toMatchSnapshot('receiver events xcmpQueue') - - // check balance receiver - // check balance. Equal to `KILT` - tx fees - await checkBalanceInRange(getFreeBalanceHydraDxKilt, aliceAddress, expect, [ - BigInt(996349465529793), - BigInt(996349465529796), - ]) -}, 20_000) diff --git a/integration-tests/chopsticks/src/tests/xcm/hydration/limitedReseveTransferHydraDxSpiritnet.test.ts b/integration-tests/chopsticks/src/tests/xcm/hydration/limitedReseveTransferHydraDxSpiritnet.test.ts deleted file mode 100644 index b16c066947..0000000000 --- a/integration-tests/chopsticks/src/tests/xcm/hydration/limitedReseveTransferHydraDxSpiritnet.test.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { test } from 'vitest' -import { sendTransaction, withExpect } from '@acala-network/chopsticks-testing' - -import * as HydraDxConfig from '../../../network/hydraDx.js' -import * as SpiritnetConfig from '../../../network/spiritnet.js' -import { KILT, initialBalanceHDX, initialBalanceKILT, keysAlice } from '../../../utils.js' -import { getFreeBalanceHydraDxKilt, getFreeBalanceSpiritnet, hydradxContext, spiritnetContext } from '../../index.js' -import { checkBalance, createBlock, hexAddress, setStorage, checkBalanceInRange } from '../../utils.js' - -const aliceLocation = { - V3: { - parents: 1, - interior: { - X2: [ - { Parachain: SpiritnetConfig.paraId }, - { - AccountId32: { - id: hexAddress(keysAlice.address), - }, - }, - ], - }, - }, -} - -test('Limited Reserve Transfers from HydraDx Account Alice -> Spiritnet Account Alice', async ({ expect }) => { - const { checkEvents, checkSystemEvents } = withExpect(expect) - - // assign initial balance to Alice. Alice also needs to have some HDX, otherwise the account gets dusted - const config = { - ...HydraDxConfig.assignKiltTokensToAccounts([keysAlice.address], initialBalanceKILT), - ...HydraDxConfig.assignNativeTokensToAccounts([keysAlice.address], initialBalanceHDX), - } - - // Set storage - await setStorage(hydradxContext, config) - - const hydraDxSovereignAccountBalanceBeforeTransfer = await getFreeBalanceSpiritnet( - SpiritnetConfig.hydraDxSovereignAccount - ) - - // check initial balance of alice - await checkBalance(getFreeBalanceHydraDxKilt, keysAlice.address, expect, initialBalanceKILT) - - const signedTx = hydradxContext.api.tx.xTokens - .transfer(HydraDxConfig.kiltTokenId, KILT, aliceLocation, 'Unlimited') - .signAsync(keysAlice) - - const events = await sendTransaction(signedTx) - - // Check sender state - await createBlock(hydradxContext) - - // Check events sender - checkEvents(events, 'messageQueue').toMatchSnapshot('sender events xcm queue pallet') - checkEvents(events, { section: 'currencies', method: 'Withdrawn' }).toMatchSnapshot('sender events currencies') - checkEvents(events, 'xTokens').toMatchSnapshot('sender events currencies') - - // Check balance - await checkBalance(getFreeBalanceHydraDxKilt, keysAlice.address, expect, initialBalanceKILT - KILT) - - // Check receiver state - await createBlock(spiritnetContext) - - // check events receiver - checkSystemEvents(spiritnetContext, 'xcmpQueue').toMatchSnapshot('receiver events xcmpQueue') - checkSystemEvents(spiritnetContext, { section: 'balances', method: 'Withdraw' }).toMatchSnapshot( - 'receiver events Balances' - ) - checkSystemEvents(spiritnetContext, { section: 'balances', method: 'Endowed' }).toMatchSnapshot( - 'receiver events Balances' - ) - - // Check balance receiver - await checkBalance( - getFreeBalanceSpiritnet, - SpiritnetConfig.hydraDxSovereignAccount, - expect, - hydraDxSovereignAccountBalanceBeforeTransfer - KILT - ) - - // Alice receives a bit less since the tx fees has to be paid. - await checkBalanceInRange(getFreeBalanceSpiritnet, keysAlice.address, expect, [ - BigInt('999999999971174'), - BigInt('999999999976345'), - ]) -}, 20_000) diff --git a/integration-tests/chopsticks/src/tests/xcm/initiateWithdrawAsset/__snapshots__/index.test.ts.snap b/integration-tests/chopsticks/src/tests/xcm/initiateWithdrawAsset/__snapshots__/index.test.ts.snap new file mode 100644 index 0000000000..294edfb3bd --- /dev/null +++ b/integration-tests/chopsticks/src/tests/xcm/initiateWithdrawAsset/__snapshots__/index.test.ts.snap @@ -0,0 +1,25 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`Withdraw Asset > Hydration -> KILT DEV > receiver events {"section":"system","method":"NewAccount"} 1`] = ` +[ + { + "data": { + "account": "4rsmbFBYpVmWE2LHRsSZKxf22a8cbJLxMZqvVGkGkSDmDBcr", + }, + "method": "NewAccount", + "section": "system", + }, +] +`; + +exports[`Withdraw Asset > Hydration -> KILT live > receiver events {"section":"system","method":"NewAccount"} 1`] = ` +[ + { + "data": { + "account": "4rsmbFBYpVmWE2LHRsSZKxf22a8cbJLxMZqvVGkGkSDmDBcr", + }, + "method": "NewAccount", + "section": "system", + }, +] +`; diff --git a/integration-tests/chopsticks/src/tests/xcm/initiateWithdrawAsset/config.ts b/integration-tests/chopsticks/src/tests/xcm/initiateWithdrawAsset/config.ts new file mode 100644 index 0000000000..168c8ec985 --- /dev/null +++ b/integration-tests/chopsticks/src/tests/xcm/initiateWithdrawAsset/config.ts @@ -0,0 +1,149 @@ +import { initialBalanceHDX, initialBalanceKILT, keysAlice, keysBob } from '../../../helper/utils.js' +import { tx, query } from '../../../helper/api.js' +import { mainChains } from '../../../network/index.js' + +import type { ApiPromise } from '@polkadot/api' +import type { BasicConfig, BasicXcmTestConfiguration, BasicTxContext } from '../../types.js' +import type { SubmittableExtrinsic } from '@polkadot/api/types' + +interface Config extends BasicConfig { + // The received balance can be different in each block due to dynamic fee calculation. + // Precision is used to compare the balances with a certain precision. + precision: bigint +} + +interface Query { + sender: ({ api }: { api: ApiPromise }, address: string) => Promise + receiver: ({ api }: { api: ApiPromise }, address: string) => Promise +} + +interface TxContext extends BasicTxContext { + balanceToTransfer: bigint + tx: ({ api }: { api: ApiPromise }, submitter: string, amount: string | number) => SubmittableExtrinsic<'promise'> +} + +/* + * Configuration for the WithdrawAssets test extends the BasicXcmTestConfiguration + **/ +interface WithdrawAssetTestConfiguration extends BasicXcmTestConfiguration { + config: Config + query: Query + txContext: TxContext +} +// Test pairs for WithdrawAssets +export const testPairsWithdrawAssets: WithdrawAssetTestConfiguration[] = [ + { + config: { + desc: 'Hydration -> KILT live', + precision: 96n, + network: { + relay: { option: mainChains.polkadot.getConfig({}), storage: {}, setUpTx: [] }, + // sender, receiver + parachains: [ + { + option: mainChains.hydration.getConfig({}), + storage: { + ...mainChains.hydration.storage.assignKiltTokensToAccounts( + [keysAlice.address], + initialBalanceKILT + ), + ...mainChains.hydration.storage.assignNativeTokensToAccounts( + [keysAlice.address], + initialBalanceHDX + ), + }, + setUpTx: [], + }, + + { + option: mainChains.kilt.getConfig({}), + storage: {}, + setUpTx: [], + }, + ], + }, + }, + + accounts: { + senderAccount: keysAlice, + receiverAccount: keysBob, + }, + query: { + sender: query.tokens(mainChains.hydration.chainInfo.kiltTokenId), + receiver: query.balances, + }, + txContext: { + tx: tx.xtokens.transfer( + mainChains.hydration.chainInfo.kiltTokenId, + tx.xtokens.parachainV3(mainChains.kilt.chainInfo.paraId) + ), + pallets: { + sender: [], + receiver: [{ section: 'system', method: 'NewAccount' }], + }, + balanceToTransfer: BigInt(1e15), + }, + + sovereignAccount: { + sender: mainChains.kilt.chainInfo.sovereignAccountOnSiblingChains, + receiver: mainChains.hydration.chainInfo.sovereignAccountOnSiblingChains, + }, + }, + { + config: { + desc: 'Hydration -> KILT DEV', + precision: 96n, + network: { + relay: { option: mainChains.polkadot.getConfig({}), storage: {}, setUpTx: [] }, + // sender, receiver + parachains: [ + { + option: mainChains.hydration.getConfig({}), + storage: { + ...mainChains.hydration.storage.assignKiltTokensToAccounts( + [keysAlice.address], + initialBalanceKILT + ), + ...mainChains.hydration.storage.assignNativeTokensToAccounts( + [keysAlice.address], + initialBalanceHDX + ), + }, + setUpTx: [], + }, + + { + option: mainChains.kilt.getConfig(mainChains.kilt.parameters), + storage: {}, + setUpTx: [], + }, + ], + }, + }, + + accounts: { + senderAccount: keysAlice, + receiverAccount: keysBob, + }, + query: { + sender: query.tokens(mainChains.hydration.chainInfo.kiltTokenId), + receiver: query.balances, + }, + txContext: { + tx: tx.xtokens.transfer( + mainChains.hydration.chainInfo.kiltTokenId, + tx.xtokens.parachainV3(mainChains.kilt.chainInfo.paraId) + ), + pallets: { + sender: [], + receiver: [{ section: 'system', method: 'NewAccount' }], + }, + balanceToTransfer: BigInt(1e15), + }, + + sovereignAccount: { + sender: mainChains.kilt.chainInfo.sovereignAccountOnSiblingChains, + receiver: mainChains.hydration.chainInfo.sovereignAccountOnSiblingChains, + }, + }, +] as const diff --git a/integration-tests/chopsticks/src/tests/xcm/initiateWithdrawAsset/index.test.ts b/integration-tests/chopsticks/src/tests/xcm/initiateWithdrawAsset/index.test.ts new file mode 100644 index 0000000000..45bfa47fbd --- /dev/null +++ b/integration-tests/chopsticks/src/tests/xcm/initiateWithdrawAsset/index.test.ts @@ -0,0 +1,118 @@ +import { describe, beforeEach, it, afterEach } from 'vitest' +import { sendTransaction, withExpect } from '@acala-network/chopsticks-testing' +import type { KeyringPair } from '@polkadot/keyring/types' + +import { createBlock } from '../../../network/utils.js' +import { hexAddress, validateBalanceWithPrecision } from '../../../helper/utils.js' +import { testPairsWithdrawAssets } from './config.js' +import { Config } from '../../../network/types.js' +import { spinUpNetwork, tearDownNetwork } from '../../utils.js' + +describe.each(testPairsWithdrawAssets)( + 'Withdraw Asset', + + ({ accounts, query, sovereignAccount, txContext, config }) => { + let senderContext: Config + let receiverContext: Config + let relayContext: Config + let senderAccount: KeyringPair + let receiverAccount: KeyringPair + const { desc, precision } = config + + // Create the network context + beforeEach(async () => { + const { parachainContexts, relayChainContext } = await spinUpNetwork(config) + + relayContext = relayChainContext + senderContext = parachainContexts[0] + receiverContext = parachainContexts[1] + + const { senderAccount: a, receiverAccount: b } = accounts + senderAccount = a + receiverAccount = b + }) + + // Shut down the network + afterEach(async () => await tearDownNetwork([receiverContext, senderContext, relayContext])) + + it(desc, async ({ expect }) => { + const { checkEvents, checkSystemEvents } = withExpect(expect) + const { pallets, tx, balanceToTransfer } = txContext + + // precondition checks + // Balance of the sovereign account before the transfer + const senderSovereignAccountBalanceBeforeTransfer = await query.receiver( + receiverContext, + sovereignAccount.receiver + ) + + const balanceSenderBeforeTransfer = await query.sender(senderContext, senderAccount.address) + const initialBalanceReceiver = await query.receiver(receiverContext, receiverAccount.address) + // Check initial balance receiver should be zero + expect(initialBalanceReceiver).toBe(0n) + + // action + const signedTx = tx( + senderContext, + hexAddress(receiverAccount.address), + balanceToTransfer.toString() + ).signAsync(senderAccount) + + const events = await sendTransaction(signedTx) + + // check sender state + await createBlock(senderContext) + + // post condition checks + + Promise.all( + pallets.sender.map((pallet) => + checkEvents(events, pallet) + .redact({ number: 1 }) + .toMatchSnapshot(`sender events ${JSON.stringify(pallet)}`) + ) + ) + + const balanceSenderAfterTransfer = await query.sender(senderContext, senderAccount.address) + const removedBalance = -balanceToTransfer + + validateBalanceWithPrecision( + balanceSenderBeforeTransfer, + balanceSenderAfterTransfer, + removedBalance, + expect, + precision + ) + + // check receiver state + await createBlock(receiverContext) + + const senderSovereignAccountBalanceAfterTransfer = await query.receiver( + receiverContext, + sovereignAccount.receiver + ) + + expect(senderSovereignAccountBalanceAfterTransfer).toBe( + senderSovereignAccountBalanceBeforeTransfer - balanceToTransfer + ) + + await Promise.all( + pallets.receiver.map((pallet) => + checkSystemEvents(receiverContext, pallet) + .redact({ number: 1 }) + .toMatchSnapshot(`receiver events ${JSON.stringify(pallet)}`) + ) + ) + + const balanceReceiverAfterTransfer = await query.receiver(receiverContext, receiverAccount.address) + + validateBalanceWithPrecision( + initialBalanceReceiver, + balanceReceiverAfterTransfer, + balanceToTransfer, + expect, + precision + ) + }) + } +) diff --git a/integration-tests/chopsticks/src/tests/xcm/limitedReserveTransfer/config.ts b/integration-tests/chopsticks/src/tests/xcm/limitedReserveTransfer/config.ts new file mode 100644 index 0000000000..290632653a --- /dev/null +++ b/integration-tests/chopsticks/src/tests/xcm/limitedReserveTransfer/config.ts @@ -0,0 +1,223 @@ +import { initialBalanceKILT, keysAlice, keysBob } from '../../../helper/utils.js' +import { mainChains } from '../../../network/index.js' +import { tx, query } from '../../../helper/api.js' + +import type { ApiPromise } from '@polkadot/api' +import type { BasicConfig, BasicXcmTestConfiguration, BasicTxContext } from '../../types.js' +import type { SubmittableExtrinsic } from '@polkadot/api/types' + +interface Config extends BasicConfig { + // The received balance can be different in each block due to dynamic fee calculation. + // Precision is used to compare the balances with a certain precision. + precision: bigint +} + +interface Query { + sender: ({ api }: { api: ApiPromise }, address: string) => Promise + receiver: ({ api }: { api: ApiPromise }, address: string) => Promise +} + +interface TxContext extends BasicTxContext { + balanceToTransfer: bigint + tx: ({ api }: { api: ApiPromise }, submitter: string, amount: string | number) => SubmittableExtrinsic<'promise'> +} + +/* + * Configuration for the LimitedReserveTransfer test extends the BasicXcmTestConfiguration + **/ +interface LimitedReserveTestConfiguration extends BasicXcmTestConfiguration { + config: Config + query: Query + txContext: TxContext +} + +// Test pairs for limited reserve transfers +export const testPairsLimitedReserveTransfers: LimitedReserveTestConfiguration[] = [ + { + config: { + desc: 'Kilt -> Hydration live V2', + precision: 96n, + network: { + // sender, receiver + parachains: [ + { + option: mainChains.kilt.getConfig({}), + storage: mainChains.kilt.storage.assignNativeTokensToAccounts( + [keysAlice.address], + initialBalanceKILT + ), + setUpTx: [], + }, + { option: mainChains.hydration.getConfig({}), setUpTx: [], storage: {} }, + ], + relay: { option: mainChains.polkadot.getConfig({}), storage: {}, setUpTx: [] }, + }, + }, + + accounts: { + senderAccount: keysAlice, + receiverAccount: keysBob, + }, + query: { + sender: query.balances, + receiver: query.tokens(mainChains.hydration.chainInfo.kiltTokenId), + }, + txContext: { + tx: tx.xcmPallet.limitedReserveTransferAssetsV2( + mainChains.kilt.chainInfo.KILT, + tx.xcmPallet.parachainV2(1, mainChains.hydration.chainInfo.paraId) + ), + pallets: { + sender: [], + receiver: [], + }, + balanceToTransfer: BigInt(1e15), + }, + + sovereignAccount: { + sender: mainChains.hydration.chainInfo.sovereignAccountOnSiblingChains, + receiver: mainChains.kilt.chainInfo.sovereignAccountOnSiblingChains, + }, + }, + + { + config: { + desc: 'Kilt -> Hydration live V3', + precision: 96n, + network: { + // sender, receiver + parachains: [ + { + option: mainChains.kilt.getConfig({}), + storage: mainChains.kilt.storage.assignNativeTokensToAccounts( + [keysAlice.address], + initialBalanceKILT + ), + setUpTx: [], + }, + { option: mainChains.hydration.getConfig({}), setUpTx: [], storage: {} }, + ], + relay: { option: mainChains.polkadot.getConfig({}), storage: {}, setUpTx: [] }, + }, + }, + + accounts: { + senderAccount: keysAlice, + receiverAccount: keysBob, + }, + query: { + sender: query.balances, + receiver: query.tokens(mainChains.hydration.chainInfo.kiltTokenId), + }, + txContext: { + tx: tx.xcmPallet.limitedReserveTransferAssetsV3( + mainChains.kilt.chainInfo.KILT, + tx.xcmPallet.parachainV3(1, mainChains.hydration.chainInfo.paraId) + ), + pallets: { + sender: [], + receiver: [], + }, + balanceToTransfer: BigInt(1e15), + }, + + sovereignAccount: { + sender: mainChains.hydration.chainInfo.sovereignAccountOnSiblingChains, + receiver: mainChains.kilt.chainInfo.sovereignAccountOnSiblingChains, + }, + }, + + { + config: { + desc: 'Kilt DEV -> Hydration live v3', + precision: 96n, + network: { + // sender, receiver + parachains: [ + { + option: mainChains.kilt.getConfig({}), + storage: mainChains.kilt.storage.assignNativeTokensToAccounts( + [keysAlice.address], + initialBalanceKILT + ), + setUpTx: [], + }, + { option: mainChains.hydration.getConfig({}), setUpTx: [], storage: {} }, + ], + relay: { option: mainChains.polkadot.getConfig({}), storage: {}, setUpTx: [] }, + }, + }, + + accounts: { + senderAccount: keysAlice, + receiverAccount: keysBob, + }, + query: { + sender: query.balances, + receiver: query.tokens(mainChains.hydration.chainInfo.kiltTokenId), + }, + txContext: { + tx: tx.xcmPallet.limitedReserveTransferAssetsV3( + mainChains.kilt.chainInfo.KILT, + tx.xcmPallet.parachainV3(1, mainChains.hydration.chainInfo.paraId) + ), + pallets: { + sender: [], + receiver: [], + }, + balanceToTransfer: BigInt(1e15), + }, + + sovereignAccount: { + sender: mainChains.hydration.chainInfo.sovereignAccountOnSiblingChains, + receiver: mainChains.kilt.chainInfo.sovereignAccountOnSiblingChains, + }, + }, + + { + config: { + desc: 'Kilt DEV -> Hydration live v2', + precision: 96n, + network: { + // sender, receiver + parachains: [ + { + option: mainChains.kilt.getConfig({}), + storage: mainChains.kilt.storage.assignNativeTokensToAccounts( + [keysAlice.address], + initialBalanceKILT + ), + setUpTx: [], + }, + { option: mainChains.hydration.getConfig({}), setUpTx: [], storage: {} }, + ], + relay: { option: mainChains.polkadot.getConfig({}), storage: {}, setUpTx: [] }, + }, + }, + + accounts: { + senderAccount: keysAlice, + receiverAccount: keysBob, + }, + query: { + sender: query.balances, + receiver: query.tokens(mainChains.hydration.chainInfo.kiltTokenId), + }, + txContext: { + tx: tx.xcmPallet.limitedReserveTransferAssetsV2( + mainChains.kilt.chainInfo.KILT, + tx.xcmPallet.parachainV2(1, mainChains.hydration.chainInfo.paraId) + ), + pallets: { + sender: [], + receiver: [], + }, + balanceToTransfer: BigInt(1e15), + }, + + sovereignAccount: { + sender: mainChains.hydration.chainInfo.sovereignAccountOnSiblingChains, + receiver: mainChains.kilt.chainInfo.sovereignAccountOnSiblingChains, + }, + }, +] as const diff --git a/integration-tests/chopsticks/src/tests/xcm/limitedReserveTransfer/index.test.ts b/integration-tests/chopsticks/src/tests/xcm/limitedReserveTransfer/index.test.ts new file mode 100644 index 0000000000..6f3895097c --- /dev/null +++ b/integration-tests/chopsticks/src/tests/xcm/limitedReserveTransfer/index.test.ts @@ -0,0 +1,115 @@ +import { describe, beforeEach, it, afterEach } from 'vitest' +import type { KeyringPair } from '@polkadot/keyring/types' +import { sendTransaction, withExpect } from '@acala-network/chopsticks-testing' + +import { createBlock } from '../../../network/utils.js' +import { validateBalanceWithPrecision, hexAddress } from '../../../helper/utils.js' +import { testPairsLimitedReserveTransfers } from './config.js' +import { Config } from '../../../network/types.js' +import { spinUpNetwork, tearDownNetwork } from '../../utils.js' + +describe.each(testPairsLimitedReserveTransfers)( + 'Limited Reserve Transfers', + ({ accounts, query, sovereignAccount, txContext, config }) => { + let senderContext: Config + let receiverContext: Config + let relayContext: Config + let senderAccount: KeyringPair + let receiverAccount: KeyringPair + const { desc, precision } = config + + beforeEach(async () => { + const { parachainContexts, relayChainContext } = await spinUpNetwork(config) + relayContext = relayChainContext + senderContext = parachainContexts[0] + receiverContext = parachainContexts[1] + const { senderAccount: a, receiverAccount: b } = accounts + senderAccount = a + receiverAccount = b + }) + + // Shut down the network + afterEach(async () => await tearDownNetwork([receiverContext, senderContext, relayContext])) + + it(desc, async ({ expect }) => { + const { checkEvents, checkSystemEvents } = withExpect(expect) + const { pallets, tx, balanceToTransfer } = txContext + + // precondition checks + + // Balance of the sovereign account before the transfer + const receiverSovereignAccountBalanceBeforeTransfer = await query.sender( + senderContext, + sovereignAccount.sender + ) + + const initialBalanceSender = await query.sender(senderContext, senderAccount.address) + const initialBalanceReceiver = await query.receiver(receiverContext, receiverAccount.address) + + // Check initial balance receiver should be zero + expect(initialBalanceReceiver).toBe(0n) + + // action + const signedTx = tx( + senderContext, + hexAddress(receiverAccount.address), + balanceToTransfer.toString() + ).signAsync(senderAccount) + + const events = await sendTransaction(signedTx) + + // check sender state + await createBlock(senderContext) + + // post condition checks + + await Promise.all( + pallets.sender.map((pallet) => + checkEvents(events, pallet) + .redact({ number: 1 }) + .toMatchSnapshot(`sender events ${JSON.stringify(pallet)}`) + ) + ) + + const balanceSenderAfterTransfer = await query.sender(senderContext, senderAccount.address) + const receiverSovereignAccountBalanceAfterTransfer = await query.sender( + senderContext, + sovereignAccount.sender + ) + expect(receiverSovereignAccountBalanceAfterTransfer).toBe( + receiverSovereignAccountBalanceBeforeTransfer + balanceToTransfer + ) + + const removedBalance = -balanceToTransfer + + validateBalanceWithPrecision( + initialBalanceSender, + balanceSenderAfterTransfer, + removedBalance, + expect, + precision + ) + + // check receiver state + await createBlock(receiverContext) + + await Promise.all( + pallets.receiver.map((pallet) => + checkSystemEvents(receiverContext, pallet) + .redact({ number: 1 }) + .toMatchSnapshot(`receiver events ${JSON.stringify(pallet)}`) + ) + ) + + const balanceReceiverAfterTransfer = await query.receiver(receiverContext, receiverAccount.address) + + validateBalanceWithPrecision( + initialBalanceReceiver, + balanceReceiverAfterTransfer, + balanceToTransfer, + expect, + precision + ) + }) + } +) diff --git a/integration-tests/chopsticks/src/types.ts b/integration-tests/chopsticks/src/types.ts deleted file mode 100644 index 99274a644c..0000000000 --- a/integration-tests/chopsticks/src/types.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface AssetSwitchSupplyParameters { - circulatingSupply: bigint - sovereignSupply: bigint - totalSupply: bigint -} diff --git a/integration-tests/chopsticks/src/utils.ts b/integration-tests/chopsticks/src/utils.ts deleted file mode 100644 index deb7ba87e7..0000000000 --- a/integration-tests/chopsticks/src/utils.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Keyring } from '@polkadot/keyring' - -import { AssetSwitchSupplyParameters } from './types.js' - -const keyring = new Keyring({ type: 'ed25519', ss58Format: 38 }) - -export const keysAlice = keyring.addFromUri('//alice', undefined, 'ed25519') -export const keysBob = keyring.addFromUri('//bob', undefined, 'ed25519') -export const keysCharlie = keyring.addFromUri('//charlie', undefined, 'ed25519') - -export function toNumber(value: string | undefined): number | undefined { - if (value === undefined) { - return undefined - } - - return Number(value) -} - -export function getAssetSwitchParameters( - totalSupply: bigint = BigInt('100000000000000000000'), - ratioCirculating: bigint = BigInt(10) -): AssetSwitchSupplyParameters { - const circulatingSupply = (totalSupply * ratioCirculating) / BigInt(100) - const sovereignSupply = totalSupply - circulatingSupply - return { circulatingSupply, sovereignSupply, totalSupply } -} - -export const KILT = BigInt(1e15) -export const DOT = BigInt(1e10) -export const HDX = BigInt(1e12) -export const ROC = BigInt(1e12) - -export const initialBalanceKILT = BigInt(100) * KILT -export const initialBalanceDOT = BigInt(100) * DOT -export const initialBalanceHDX = BigInt(100) * HDX -export const initialBalanceROC = BigInt(100) * ROC diff --git a/integration-tests/chopsticks/src/vitest.config.ts b/integration-tests/chopsticks/src/vitest.config.ts new file mode 100644 index 0000000000..dd7a0807b3 --- /dev/null +++ b/integration-tests/chopsticks/src/vitest.config.ts @@ -0,0 +1,14 @@ +import { defineConfig } from 'vite' + +export default defineConfig({ + test: { + maxWorkers: process.env.CI ? 4 : 10, + minWorkers: process.env.CI ? 1 : 5, + hideSkippedTests: true, + retry: process.env.CI ? 3 : 0, + setupFiles: './src/setup.ts', + hookTimeout: process.env.CI ? 120_000 : 40_000, + testTimeout: process.env.CI ? 60_000 : 20_000, + teardownTimeout: process.env.CI ? 60_000 : 10_000, + }, +}) diff --git a/integration-tests/chopsticks/tsconfig.json b/integration-tests/chopsticks/tsconfig.json index 564aeea5f9..0927e571d2 100644 --- a/integration-tests/chopsticks/tsconfig.json +++ b/integration-tests/chopsticks/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { - "target": "es2016", - "lib": ["es2019"], + "target": "es2020", + "lib": ["es2020"], "module": "NodeNext", "rootDir": "src", "esModuleInterop": true, diff --git a/integration-tests/chopsticks/yarn.lock b/integration-tests/chopsticks/yarn.lock index e6eb16805e..1780e58286 100644 --- a/integration-tests/chopsticks/yarn.lock +++ b/integration-tests/chopsticks/yarn.lock @@ -2,352 +2,339 @@ # yarn lockfile v1 -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - -"@acala-network/chopsticks-core@0.12.2": - version "0.12.2" - resolved "https://registry.yarnpkg.com/@acala-network/chopsticks-core/-/chopsticks-core-0.12.2.tgz#31f163eb328b0600eddc0925c83684c4262ddd74" - integrity sha512-OwiBPtCcwrDrvINX8YJPQ2LOMUKwdJeLq0dBxeXabgaDeQWZHfgTPlI6U0/VEbp+UnRIkxr+WESHJYI69wseDQ== - dependencies: - "@acala-network/chopsticks-executor" "0.12.2" - "@polkadot/rpc-provider" "^11.2.1" - "@polkadot/types" "^11.2.1" - "@polkadot/types-codec" "^11.2.1" - "@polkadot/types-known" "^11.2.1" - "@polkadot/util" "^12.6.2" - "@polkadot/util-crypto" "^12.6.2" +"@acala-network/chopsticks-core@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@acala-network/chopsticks-core/-/chopsticks-core-1.0.1.tgz#96895e2c2554c01a2aa954ddee0ac9bfde0b92a8" + integrity sha512-7HE38P090PNWiRVRItVBCWt92K3bIz0S0v+0M21Hz8waTlWavilGgN6Jsua1ZndydRgZl0Y3/rLPgqVHzoNDzA== + dependencies: + "@acala-network/chopsticks-executor" "1.0.1" + "@polkadot/rpc-provider" "^14.0.1" + "@polkadot/types" "^14.0.1" + "@polkadot/types-codec" "^14.0.1" + "@polkadot/types-known" "^14.0.1" + "@polkadot/util" "^13.2.2" + "@polkadot/util-crypto" "^13.2.2" comlink "^4.4.1" eventemitter3 "^5.0.1" lodash "^4.17.21" - lru-cache "^10.2.0" - pino "^8.19.0" - pino-pretty "^11.0.0" + lru-cache "^11.0.1" + pino "^9.5.0" + pino-pretty "^11.3.0" rxjs "^7.8.1" - zod "^3.22.4" + zod "^3.23.8" -"@acala-network/chopsticks-db@0.12.2": - version "0.12.2" - resolved "https://registry.yarnpkg.com/@acala-network/chopsticks-db/-/chopsticks-db-0.12.2.tgz#b34217074a41267e199984ef27a9bbad256972e2" - integrity sha512-ViyFr9GcQpKqf0leJ/T4hJcatgjLbQOktytgBeIOu27TcTjhZjKPBBl+2cyREk6H9AQlO5fZjCQzwkqoNP1zyg== +"@acala-network/chopsticks-db@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@acala-network/chopsticks-db/-/chopsticks-db-1.0.1.tgz#a8d976e4df05aa218d36fb1f9ea3f0cbe5e9fcc2" + integrity sha512-opkTTB8mjjaeo7NmBrCJr/g1e9o4CRZ0u3LJNAxHGsSC19Yp5t41caVBhgks6K9rhrm1C4GboQKA5aDYyUie8g== dependencies: - "@acala-network/chopsticks-core" "0.12.2" - "@polkadot/util" "^12.6.2" + "@acala-network/chopsticks-core" "1.0.1" + "@polkadot/util" "^13.2.2" idb "^8.0.0" sqlite3 "^5.1.7" typeorm "^0.3.20" -"@acala-network/chopsticks-executor@0.12.2": - version "0.12.2" - resolved "https://registry.yarnpkg.com/@acala-network/chopsticks-executor/-/chopsticks-executor-0.12.2.tgz#135cf0dd014906a181a2b93d53b6fd8073e4ff30" - integrity sha512-Xby/ixWCXj5lDtp/tPbnyMX//qnzbO/jLzna/zcBzprplE/l4UGd+VX8OTV2dXTBnaLIoLP1kPTLB0L7K0tI3Q== - dependencies: - "@polkadot/util" "^12.6.2" - "@polkadot/wasm-util" "^7.3.2" - -"@acala-network/chopsticks-testing@0.12.2": - version "0.12.2" - resolved "https://registry.yarnpkg.com/@acala-network/chopsticks-testing/-/chopsticks-testing-0.12.2.tgz#f3d02e53bf477da1b663092df0cc04c8ab8f62ac" - integrity sha512-S4ef/WuUbLN/FKLOoLRXsc0pNYtES9CU91fPGyJ7nYEb15Z/kcdy4JQI9QSwUGRkHX4U0SY6XkI232Hpi8ijAw== - dependencies: - "@acala-network/chopsticks-utils" "0.12.2" - "@polkadot/api" "^11.2.1" - "@polkadot/types" "^11.2.1" - -"@acala-network/chopsticks-utils@0.12.2": - version "0.12.2" - resolved "https://registry.yarnpkg.com/@acala-network/chopsticks-utils/-/chopsticks-utils-0.12.2.tgz#e3fe3c22677d1f1ab5d4a60b0d2742c1ee8e2204" - integrity sha512-hdmjYS+FEJ4sVnP72PYz3QM5qU53wiT+uiddqNX1QdC0xyStEm7KFzfIp/hfaWtqp3L1Sn3yJ9i3X7sjED1IzQ== - dependencies: - "@acala-network/chopsticks" "0.12.2" - "@polkadot/api" "^11.2.1" - "@polkadot/api-base" "^11.2.1" - "@polkadot/keyring" "^12.6.2" - "@polkadot/types" "^11.2.1" - "@polkadot/util" "^12.6.2" - -"@acala-network/chopsticks@0.12.2": - version "0.12.2" - resolved "https://registry.yarnpkg.com/@acala-network/chopsticks/-/chopsticks-0.12.2.tgz#0b11d6fbe8502ee9c6eb7901eea17686cf2157ee" - integrity sha512-/4D1CsBF8aKEy6DKMvdGAmE3+DzdNlXtg+Qc+W97Lyv/m68fv60HiOi0E5I3+jV4fq+VSuLKHGrMyJJh2/sRRg== - dependencies: - "@acala-network/chopsticks-core" "0.12.2" - "@acala-network/chopsticks-db" "0.12.2" - "@pnpm/npm-conf" "^2.2.2" - "@polkadot/api" "^11.2.1" - "@polkadot/api-augment" "^11.2.1" - "@polkadot/rpc-provider" "^11.2.1" - "@polkadot/types" "^11.2.1" - "@polkadot/util" "^12.6.2" - "@polkadot/util-crypto" "^12.6.2" - axios "^1.6.8" +"@acala-network/chopsticks-executor@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@acala-network/chopsticks-executor/-/chopsticks-executor-1.0.1.tgz#c4586398520f40c23fd75b926eb2a1b361ea5ce2" + integrity sha512-aJjFhhG+KQU7C/VlJSRXzPQ4B+j0xJRtYk5oJUSY5Dxo6tnVRAEzQbxcB8dhBobDJH5Q/+5aQbyY0CLIUcACSg== + dependencies: + "@polkadot/util" "^13.2.2" + "@polkadot/wasm-util" "^7.4.1" + +"@acala-network/chopsticks-testing@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@acala-network/chopsticks-testing/-/chopsticks-testing-1.0.1.tgz#fd8edd5046fc426e57766148455a9554213cc598" + integrity sha512-FiAKod/3yhlCTi7kxJpZt+gKVjpZm1mrg4/np3tNwNvSMxi9Achf3A1YyW2BAl5K5HxfJUcuGDedB14AFOPrsA== + dependencies: + "@acala-network/chopsticks-utils" "1.0.1" + "@polkadot/api" "^14.0.1" + "@polkadot/types" "^14.0.1" + +"@acala-network/chopsticks-utils@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@acala-network/chopsticks-utils/-/chopsticks-utils-1.0.1.tgz#055060585f556a5b49547ae6f0f1a6d850b846a0" + integrity sha512-9LcEL3JH9bbROVtvx/kDArtSoA7vAKa/lrHE8FL+Wlto6r4YhpGyEILIjE9001PVFZXgSJVomwENZf/xz8k/Aw== + dependencies: + "@acala-network/chopsticks" "1.0.1" + "@acala-network/chopsticks-core" "1.0.1" + "@polkadot/api" "^14.0.1" + "@polkadot/api-base" "^14.0.1" + "@polkadot/keyring" "^13.2.2" + "@polkadot/types" "^14.0.1" + "@polkadot/util" "^13.2.2" + +"@acala-network/chopsticks@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@acala-network/chopsticks/-/chopsticks-1.0.1.tgz#4ba785d05b22b5ee5b31e6141a0df3d760972c83" + integrity sha512-kY5BmOwF6/+VO2uh5NSdIb3qIoCKinZbKDiGCiITld0qQaBTnfHa8kmabaAvTmd/sNjHDW03v5cVXOxHm0668A== + dependencies: + "@acala-network/chopsticks-core" "1.0.1" + "@acala-network/chopsticks-db" "1.0.1" + "@pnpm/npm-conf" "^2.3.1" + "@polkadot/api" "^14.0.1" + "@polkadot/api-augment" "^14.0.1" + "@polkadot/rpc-provider" "^14.0.1" + "@polkadot/types" "^14.0.1" + "@polkadot/util" "^13.2.2" + "@polkadot/util-crypto" "^13.2.2" + axios "^1.7.7" comlink "^4.4.1" dotenv "^16.4.5" global-agent "^3.0.0" js-yaml "^4.1.0" jsondiffpatch "^0.5.0" lodash "^4.17.21" - ws "^8.16.0" + ws "^8.18.0" yargs "^17.7.2" - zod "^3.22.4" - -"@babel/runtime@^7.23.2": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.4.tgz#de795accd698007a66ba44add6cc86542aff1edd" - integrity sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA== - dependencies: - regenerator-runtime "^0.14.0" - -"@cspotcode/source-map-support@^0.8.0": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== - dependencies: - "@jridgewell/trace-mapping" "0.3.9" - -"@esbuild/aix-ppc64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" - integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA== - -"@esbuild/aix-ppc64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz#a70f4ac11c6a1dfc18b8bbb13284155d933b9537" - integrity sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g== - -"@esbuild/android-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" - integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA== - -"@esbuild/android-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz#db1c9202a5bc92ea04c7b6840f1bbe09ebf9e6b9" - integrity sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg== - -"@esbuild/android-arm@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" - integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w== - -"@esbuild/android-arm@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.20.2.tgz#3b488c49aee9d491c2c8f98a909b785870d6e995" - integrity sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w== - -"@esbuild/android-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" - integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew== - -"@esbuild/android-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.20.2.tgz#3b1628029e5576249d2b2d766696e50768449f98" - integrity sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg== - -"@esbuild/darwin-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" - integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== - -"@esbuild/darwin-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz#6e8517a045ddd86ae30c6608c8475ebc0c4000bb" - integrity sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA== - -"@esbuild/darwin-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" - integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A== - -"@esbuild/darwin-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz#90ed098e1f9dd8a9381695b207e1cff45540a0d0" - integrity sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA== - -"@esbuild/freebsd-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" - integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA== - -"@esbuild/freebsd-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz#d71502d1ee89a1130327e890364666c760a2a911" - integrity sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw== - -"@esbuild/freebsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" - integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg== - -"@esbuild/freebsd-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz#aa5ea58d9c1dd9af688b8b6f63ef0d3d60cea53c" - integrity sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw== - -"@esbuild/linux-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" - integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA== - -"@esbuild/linux-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz#055b63725df678379b0f6db9d0fa85463755b2e5" - integrity sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A== - -"@esbuild/linux-arm@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" - integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w== - -"@esbuild/linux-arm@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz#76b3b98cb1f87936fbc37f073efabad49dcd889c" - integrity sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg== - -"@esbuild/linux-ia32@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" - integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA== - -"@esbuild/linux-ia32@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz#c0e5e787c285264e5dfc7a79f04b8b4eefdad7fa" - integrity sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig== - -"@esbuild/linux-loong64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" - integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA== - -"@esbuild/linux-loong64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz#a6184e62bd7cdc63e0c0448b83801001653219c5" - integrity sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ== - -"@esbuild/linux-mips64el@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" - integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w== - -"@esbuild/linux-mips64el@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz#d08e39ce86f45ef8fc88549d29c62b8acf5649aa" - integrity sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA== - -"@esbuild/linux-ppc64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" - integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg== - -"@esbuild/linux-ppc64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz#8d252f0b7756ffd6d1cbde5ea67ff8fd20437f20" - integrity sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg== - -"@esbuild/linux-riscv64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" - integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg== - -"@esbuild/linux-riscv64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz#19f6dcdb14409dae607f66ca1181dd4e9db81300" - integrity sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg== - -"@esbuild/linux-s390x@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" - integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg== - -"@esbuild/linux-s390x@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz#3c830c90f1a5d7dd1473d5595ea4ebb920988685" - integrity sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ== - -"@esbuild/linux-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" - integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg== - -"@esbuild/linux-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz#86eca35203afc0d9de0694c64ec0ab0a378f6fff" - integrity sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw== - -"@esbuild/netbsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" - integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA== - -"@esbuild/netbsd-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz#e771c8eb0e0f6e1877ffd4220036b98aed5915e6" - integrity sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ== - -"@esbuild/openbsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" - integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw== - -"@esbuild/openbsd-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz#9a795ae4b4e37e674f0f4d716f3e226dd7c39baf" - integrity sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ== - -"@esbuild/sunos-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" - integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA== - -"@esbuild/sunos-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz#7df23b61a497b8ac189def6e25a95673caedb03f" - integrity sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w== - -"@esbuild/win32-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" - integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A== - -"@esbuild/win32-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz#f1ae5abf9ca052ae11c1bc806fb4c0f519bacf90" - integrity sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ== - -"@esbuild/win32-ia32@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" - integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ== - -"@esbuild/win32-ia32@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz#241fe62c34d8e8461cd708277813e1d0ba55ce23" - integrity sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ== - -"@esbuild/win32-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" - integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== - -"@esbuild/win32-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz#9c907b21e30a52db959ba4f80bb01a0cc403d5cc" - integrity sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ== + zod "^3.23.8" + +"@esbuild/aix-ppc64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f" + integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ== + +"@esbuild/aix-ppc64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz#51299374de171dbd80bb7d838e1cfce9af36f353" + integrity sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ== + +"@esbuild/android-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052" + integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A== + +"@esbuild/android-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz#58565291a1fe548638adb9c584237449e5e14018" + integrity sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw== + +"@esbuild/android-arm@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28" + integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg== + +"@esbuild/android-arm@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.23.1.tgz#5eb8c652d4c82a2421e3395b808e6d9c42c862ee" + integrity sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ== + +"@esbuild/android-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e" + integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA== + +"@esbuild/android-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.23.1.tgz#ae19d665d2f06f0f48a6ac9a224b3f672e65d517" + integrity sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg== + +"@esbuild/darwin-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a" + integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ== + +"@esbuild/darwin-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz#05b17f91a87e557b468a9c75e9d85ab10c121b16" + integrity sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q== + +"@esbuild/darwin-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22" + integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw== + +"@esbuild/darwin-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz#c58353b982f4e04f0d022284b8ba2733f5ff0931" + integrity sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw== + +"@esbuild/freebsd-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e" + integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g== + +"@esbuild/freebsd-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz#f9220dc65f80f03635e1ef96cfad5da1f446f3bc" + integrity sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA== + +"@esbuild/freebsd-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261" + integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ== + +"@esbuild/freebsd-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz#69bd8511fa013b59f0226d1609ac43f7ce489730" + integrity sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g== + +"@esbuild/linux-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b" + integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q== + +"@esbuild/linux-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz#8050af6d51ddb388c75653ef9871f5ccd8f12383" + integrity sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g== + +"@esbuild/linux-arm@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9" + integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA== + +"@esbuild/linux-arm@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz#ecaabd1c23b701070484990db9a82f382f99e771" + integrity sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ== + +"@esbuild/linux-ia32@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2" + integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg== + +"@esbuild/linux-ia32@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz#3ed2273214178109741c09bd0687098a0243b333" + integrity sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ== + +"@esbuild/linux-loong64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df" + integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg== + +"@esbuild/linux-loong64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz#a0fdf440b5485c81b0fbb316b08933d217f5d3ac" + integrity sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw== + +"@esbuild/linux-mips64el@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe" + integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg== + +"@esbuild/linux-mips64el@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz#e11a2806346db8375b18f5e104c5a9d4e81807f6" + integrity sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q== + +"@esbuild/linux-ppc64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4" + integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w== + +"@esbuild/linux-ppc64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz#06a2744c5eaf562b1a90937855b4d6cf7c75ec96" + integrity sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw== + +"@esbuild/linux-riscv64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc" + integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA== + +"@esbuild/linux-riscv64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz#65b46a2892fc0d1af4ba342af3fe0fa4a8fe08e7" + integrity sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA== + +"@esbuild/linux-s390x@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de" + integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A== + +"@esbuild/linux-s390x@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz#e71ea18c70c3f604e241d16e4e5ab193a9785d6f" + integrity sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw== + +"@esbuild/linux-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0" + integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ== + +"@esbuild/linux-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz#d47f97391e80690d4dfe811a2e7d6927ad9eed24" + integrity sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ== + +"@esbuild/netbsd-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047" + integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg== + +"@esbuild/netbsd-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz#44e743c9778d57a8ace4b72f3c6b839a3b74a653" + integrity sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA== + +"@esbuild/openbsd-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz#05c5a1faf67b9881834758c69f3e51b7dee015d7" + integrity sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q== + +"@esbuild/openbsd-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70" + integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow== + +"@esbuild/openbsd-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz#2e58ae511bacf67d19f9f2dcd9e8c5a93f00c273" + integrity sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA== + +"@esbuild/sunos-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b" + integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg== + +"@esbuild/sunos-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz#adb022b959d18d3389ac70769cef5a03d3abd403" + integrity sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA== + +"@esbuild/win32-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d" + integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A== + +"@esbuild/win32-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz#84906f50c212b72ec360f48461d43202f4c8b9a2" + integrity sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A== + +"@esbuild/win32-ia32@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b" + integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA== + +"@esbuild/win32-ia32@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz#5e3eacc515820ff729e90d0cb463183128e82fac" + integrity sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ== + +"@esbuild/win32-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c" + integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== + +"@esbuild/win32-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz#81fd50d11e2c32b2d6241470e3185b70c7b30699" + integrity sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg== "@eslint-community/eslint-utils@^4.1.2", "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + version "4.4.1" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#d1145bf2c20132d6400495d6df4bf59362fd9d56" + integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA== dependencies: - eslint-visitor-keys "^3.3.0" + eslint-visitor-keys "^3.4.3" -"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.0", "@eslint-community/regexpp@^4.6.1": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" - integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== +"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.11.0", "@eslint-community/regexpp@^4.6.1": + version "4.12.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" + integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== "@eslint/eslintrc@^2.1.4": version "2.1.4" @@ -364,22 +351,22 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.57.0": - version "8.57.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" - integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== +"@eslint/js@8.57.1": + version "8.57.1" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" + integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== "@gar/promisify@^1.0.1": version "1.1.3" resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== -"@humanwhocodes/config-array@^0.11.14": - version "0.11.14" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" - integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== +"@humanwhocodes/config-array@^0.13.0": + version "0.13.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" + integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== dependencies: - "@humanwhocodes/object-schema" "^2.0.2" + "@humanwhocodes/object-schema" "^2.0.3" debug "^4.3.1" minimatch "^3.0.5" @@ -388,10 +375,10 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" - integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== +"@humanwhocodes/object-schema@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== "@isaacs/cliui@^8.0.2": version "8.0.2" @@ -405,42 +392,22 @@ wrap-ansi "^8.1.0" wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" -"@jest/schemas@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" - integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== - dependencies: - "@sinclair/typebox" "^0.27.8" - -"@jridgewell/resolve-uri@^3.0.3": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" - integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.15": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" +"@jridgewell/sourcemap-codec@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== "@noble/curves@^1.3.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.4.0.tgz#f05771ef64da724997f69ee1261b2417a49522d6" - integrity sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg== + version "1.8.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.8.0.tgz#fe035a23959e6aeadf695851b51a87465b5ba8f7" + integrity sha512-j84kjAbzEnQHaSIhRPUmB3/eVXu2k3dKPl2LOrR8fSOIL+89U+7lV117EWHtq/GHM3ReGHM46iRBdZfpc4HRUQ== dependencies: - "@noble/hashes" "1.4.0" + "@noble/hashes" "1.7.0" -"@noble/hashes@1.4.0", "@noble/hashes@^1.3.1", "@noble/hashes@^1.3.3": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" - integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== +"@noble/hashes@1.7.0", "@noble/hashes@^1.3.1", "@noble/hashes@^1.3.3": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.0.tgz#5d9e33af2c7d04fee35de1519b80c958b2e35e39" + integrity sha512-HXydb0DgzTpDPwbVeDGCG1gIu7X6+AuU6Zl6av/E/KG8LMsvPntvq+w17CHRpKBmN6Ybdrt1eP3k4cj8DJa78w== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -501,678 +468,509 @@ dependencies: graceful-fs "4.2.10" -"@pnpm/npm-conf@^2.2.2": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz#0058baf1c26cbb63a828f0193795401684ac86f0" - integrity sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA== +"@pnpm/npm-conf@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz#bb375a571a0bd63ab0a23bece33033c683e9b6b0" + integrity sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw== dependencies: "@pnpm/config.env-replace" "^1.1.0" "@pnpm/network.ca-file" "^1.0.1" config-chain "^1.1.11" -"@polkadot-api/client@0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0": - version "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" - resolved "https://registry.yarnpkg.com/@polkadot-api/client/-/client-0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0.tgz#5d6b863f63f5c6ecd4183fcf0c5c84dd349f7627" - integrity sha512-0fqK6pUKcGHSG2pBvY+gfSS+1mMdjd/qRygAcKI5d05tKsnZLRnmhb9laDguKmGEIB0Bz9vQqNK3gIN/cfvVwg== - dependencies: - "@polkadot-api/metadata-builders" "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" - "@polkadot-api/substrate-bindings" "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" - "@polkadot-api/substrate-client" "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" - "@polkadot-api/utils" "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" - -"@polkadot-api/json-rpc-provider-proxy@0.0.1": - version "0.0.1" - resolved "https://registry.yarnpkg.com/@polkadot-api/json-rpc-provider-proxy/-/json-rpc-provider-proxy-0.0.1.tgz#bb5c943642cdf0ec7bc48c0a2647558b9fcd7bdb" - integrity sha512-gmVDUP8LpCH0BXewbzqXF2sdHddq1H1q+XrAW2of+KZj4woQkIGBRGTJHeBEVHe30EB+UejR1N2dT4PO/RvDdg== +"@polka/url@^1.0.0-next.24": + version "1.0.0-next.28" + resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.28.tgz#d45e01c4a56f143ee69c54dd6b12eade9e270a73" + integrity sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw== -"@polkadot-api/json-rpc-provider-proxy@0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0": - version "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" - resolved "https://registry.yarnpkg.com/@polkadot-api/json-rpc-provider-proxy/-/json-rpc-provider-proxy-0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0.tgz#cc28fb801db6a47824261a709ab924ec6951eb96" - integrity sha512-0hZ8vtjcsyCX8AyqP2sqUHa1TFFfxGWmlXJkit0Nqp9b32MwZqn5eaUAiV2rNuEpoglKOdKnkGtUF8t5MoodKw== +"@polkadot-api/json-rpc-provider-proxy@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@polkadot-api/json-rpc-provider-proxy/-/json-rpc-provider-proxy-0.1.0.tgz#6e191f28e7d0fbbe8b540fc51d12a0adaeba297e" + integrity sha512-8GSFE5+EF73MCuLQm8tjrbCqlgclcHBSRaswvXziJ0ZW7iw3UEMsKkkKvELayWyBuOPa2T5i1nj6gFOeIsqvrg== -"@polkadot-api/json-rpc-provider@0.0.1": +"@polkadot-api/json-rpc-provider@0.0.1", "@polkadot-api/json-rpc-provider@^0.0.1": version "0.0.1" resolved "https://registry.yarnpkg.com/@polkadot-api/json-rpc-provider/-/json-rpc-provider-0.0.1.tgz#333645d40ccd9bccfd1f32503f17e4e63e76e297" integrity sha512-/SMC/l7foRjpykLTUTacIH05H3mr9ip8b5xxfwXlVezXrNVLp3Cv0GX6uItkKd+ZjzVPf3PFrDF2B2/HLSNESA== -"@polkadot-api/json-rpc-provider@0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0": - version "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" - resolved "https://registry.yarnpkg.com/@polkadot-api/json-rpc-provider/-/json-rpc-provider-0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0.tgz#2f71bfb192d28dd4c400ef8b1c5f934c676950f3" - integrity sha512-EaUS9Fc3wsiUr6ZS43PQqaRScW7kM6DYbuM/ou0aYjm8N9MBqgDbGm2oL6RE1vAVmOfEuHcXZuZkhzWtyvQUtA== - -"@polkadot-api/metadata-builders@0.0.1": - version "0.0.1" - resolved "https://registry.yarnpkg.com/@polkadot-api/metadata-builders/-/metadata-builders-0.0.1.tgz#a76b48febef9ea72be8273d889e2677101045a05" - integrity sha512-GCI78BHDzXAF/L2pZD6Aod/yl82adqQ7ftNmKg51ixRL02JpWUA+SpUKTJE5MY1p8kiJJIo09P2um24SiJHxNA== - dependencies: - "@polkadot-api/substrate-bindings" "0.0.1" - "@polkadot-api/utils" "0.0.1" - -"@polkadot-api/metadata-builders@0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0": - version "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" - resolved "https://registry.yarnpkg.com/@polkadot-api/metadata-builders/-/metadata-builders-0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0.tgz#085db2a3c7b100626b2fae3be35a32a24ea7714f" - integrity sha512-BD7rruxChL1VXt0icC2gD45OtT9ofJlql0qIllHSRYgama1CR2Owt+ApInQxB+lWqM+xNOznZRpj8CXNDvKIMg== - dependencies: - "@polkadot-api/substrate-bindings" "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" - "@polkadot-api/utils" "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" - -"@polkadot-api/observable-client@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@polkadot-api/observable-client/-/observable-client-0.1.0.tgz#472045ea06a2bc4bccdc2db5c063eadcbf6f5351" - integrity sha512-GBCGDRztKorTLna/unjl/9SWZcRmvV58o9jwU2Y038VuPXZcr01jcw/1O3x+yeAuwyGzbucI/mLTDa1QoEml3A== +"@polkadot-api/metadata-builders@0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@polkadot-api/metadata-builders/-/metadata-builders-0.3.2.tgz#007f158c9e0546cf79ba440befc0c753ab1a6629" + integrity sha512-TKpfoT6vTb+513KDzMBTfCb/ORdgRnsS3TDFpOhAhZ08ikvK+hjHMt5plPiAX/OWkm1Wc9I3+K6W0hX5Ab7MVg== dependencies: - "@polkadot-api/metadata-builders" "0.0.1" - "@polkadot-api/substrate-bindings" "0.0.1" - "@polkadot-api/substrate-client" "0.0.1" - "@polkadot-api/utils" "0.0.1" + "@polkadot-api/substrate-bindings" "0.6.0" + "@polkadot-api/utils" "0.1.0" -"@polkadot-api/substrate-bindings@0.0.1": - version "0.0.1" - resolved "https://registry.yarnpkg.com/@polkadot-api/substrate-bindings/-/substrate-bindings-0.0.1.tgz#c4b7f4d6c3672d2c15cbc6c02964f014b73cbb0b" - integrity sha512-bAe7a5bOPnuFVmpv7y4BBMRpNTnMmE0jtTqRUw/+D8ZlEHNVEJQGr4wu3QQCl7k1GnSV1wfv3mzIbYjErEBocg== +"@polkadot-api/observable-client@^0.3.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@polkadot-api/observable-client/-/observable-client-0.3.2.tgz#fd91efee350595a6e0ecfd3f294cc80de86c0cf7" + integrity sha512-HGgqWgEutVyOBXoGOPp4+IAq6CNdK/3MfQJmhCJb8YaJiaK4W6aRGrdQuQSTPHfERHCARt9BrOmEvTXAT257Ug== dependencies: - "@noble/hashes" "^1.3.1" - "@polkadot-api/utils" "0.0.1" - "@scure/base" "^1.1.1" - scale-ts "^1.6.0" + "@polkadot-api/metadata-builders" "0.3.2" + "@polkadot-api/substrate-bindings" "0.6.0" + "@polkadot-api/utils" "0.1.0" -"@polkadot-api/substrate-bindings@0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0": - version "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" - resolved "https://registry.yarnpkg.com/@polkadot-api/substrate-bindings/-/substrate-bindings-0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0.tgz#f836a554a9ead6fb6356079c725cd53f87238932" - integrity sha512-N4vdrZopbsw8k57uG58ofO7nLXM4Ai7835XqakN27MkjXMp5H830A1KJE0L9sGQR7ukOCDEIHHcwXVrzmJ/PBg== +"@polkadot-api/substrate-bindings@0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@polkadot-api/substrate-bindings/-/substrate-bindings-0.6.0.tgz#889b0c3ba19dc95282286506bf6e370a43ce119a" + integrity sha512-lGuhE74NA1/PqdN7fKFdE5C1gNYX357j1tWzdlPXI0kQ7h3kN0zfxNOpPUN7dIrPcOFZ6C0tRRVrBylXkI6xPw== dependencies: "@noble/hashes" "^1.3.1" - "@polkadot-api/utils" "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" + "@polkadot-api/utils" "0.1.0" "@scure/base" "^1.1.1" scale-ts "^1.6.0" -"@polkadot-api/substrate-client@0.0.1": - version "0.0.1" - resolved "https://registry.yarnpkg.com/@polkadot-api/substrate-client/-/substrate-client-0.0.1.tgz#0e8010a0abe2fb47d6fa7ab94e45e1d0de083314" - integrity sha512-9Bg9SGc3AwE+wXONQoW8GC00N3v6lCZLW74HQzqB6ROdcm5VAHM4CB/xRzWSUF9CXL78ugiwtHx3wBcpx4H4Wg== - -"@polkadot-api/substrate-client@0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0": - version "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" - resolved "https://registry.yarnpkg.com/@polkadot-api/substrate-client/-/substrate-client-0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0.tgz#55ae463f4143495e328465dd16b03e71663ef4c4" - integrity sha512-lcdvd2ssUmB1CPzF8s2dnNOqbrDa+nxaaGbuts+Vo8yjgSKwds2Lo7Oq+imZN4VKW7t9+uaVcKFLMF7PdH0RWw== - -"@polkadot-api/utils@0.0.1": - version "0.0.1" - resolved "https://registry.yarnpkg.com/@polkadot-api/utils/-/utils-0.0.1.tgz#908b22becac705149d7cc946532143d0fb003bfc" - integrity sha512-3j+pRmlF9SgiYDabSdZsBSsN5XHbpXOAce1lWj56IEEaFZVjsiCaxDOA7C9nCcgfVXuvnbxqqEGQvnY+QfBAUw== - -"@polkadot-api/utils@0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0": - version "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" - resolved "https://registry.yarnpkg.com/@polkadot-api/utils/-/utils-0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0.tgz#759698dcf948745ea37cc5ab6abd49a00f1b0c31" - integrity sha512-0CYaCjfLQJTCRCiYvZ81OncHXEKPzAexCMoVloR+v2nl/O2JRya/361MtPkeNLC6XBoaEgLAG9pWQpH3WePzsw== - -"@polkadot/api-augment@10.12.4": - version "10.12.4" - resolved "https://registry.yarnpkg.com/@polkadot/api-augment/-/api-augment-10.12.4.tgz#cbf03b97d60c204d05cb2478e6f862e68877cd71" - integrity sha512-ZKKeA8OnB1kkqBlvMhTw7QpPsRxpf/OE2UGhuCabQmU+MysYaWTPGssqAFEBqUZ+iyvTk83s+ssoMlXxdIhblA== - dependencies: - "@polkadot/api-base" "10.12.4" - "@polkadot/rpc-augment" "10.12.4" - "@polkadot/types" "10.12.4" - "@polkadot/types-augment" "10.12.4" - "@polkadot/types-codec" "10.12.4" - "@polkadot/util" "^12.6.2" - tslib "^2.6.2" - -"@polkadot/api-augment@11.3.1", "@polkadot/api-augment@^11.2.1": - version "11.3.1" - resolved "https://registry.yarnpkg.com/@polkadot/api-augment/-/api-augment-11.3.1.tgz#c7deeac438b017613e244c25505216a9d4c3977e" - integrity sha512-Yj+6rb6h0WwY3yJ+UGhjGW+tyMRFUMsKQuGw+eFsXdjiNU9UoXsAqA2dG7Q1F+oeX/g+y2gLGBezNoCwbl6HfA== - dependencies: - "@polkadot/api-base" "11.3.1" - "@polkadot/rpc-augment" "11.3.1" - "@polkadot/types" "11.3.1" - "@polkadot/types-augment" "11.3.1" - "@polkadot/types-codec" "11.3.1" - "@polkadot/util" "^12.6.2" - tslib "^2.6.2" - -"@polkadot/api-base@10.12.4": - version "10.12.4" - resolved "https://registry.yarnpkg.com/@polkadot/api-base/-/api-base-10.12.4.tgz#a4bcb69097e177ad2a2e67e89857244f34931e0b" - integrity sha512-e9s5rW9KgR+xs3sTI3B38KKQnd+D0WZ3PyNm66Q9aqIZDgDmpe9LIdmKfrqsX/rH74132Fq90mt3aN//DpwgBg== - dependencies: - "@polkadot/rpc-core" "10.12.4" - "@polkadot/types" "10.12.4" - "@polkadot/util" "^12.6.2" - rxjs "^7.8.1" - tslib "^2.6.2" - -"@polkadot/api-base@11.3.1", "@polkadot/api-base@^11.2.1": - version "11.3.1" - resolved "https://registry.yarnpkg.com/@polkadot/api-base/-/api-base-11.3.1.tgz#6c74c88d4a4b3d22344bb8715a135493f5a3dd33" - integrity sha512-b8UkNL00NN7+3QaLCwL5cKg+7YchHoKCAhwKusWHNBZkkO6Oo2BWilu0dZkPJOyqV9P389Kbd9+oH+SKs9u2VQ== +"@polkadot-api/substrate-client@^0.1.2": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@polkadot-api/substrate-client/-/substrate-client-0.1.4.tgz#7a808e5cb85ecb9fa2b3a43945090a6c807430ce" + integrity sha512-MljrPobN0ZWTpn++da9vOvt+Ex+NlqTlr/XT7zi9sqPtDJiQcYl+d29hFAgpaeTqbeQKZwz3WDE9xcEfLE8c5A== dependencies: - "@polkadot/rpc-core" "11.3.1" - "@polkadot/types" "11.3.1" - "@polkadot/util" "^12.6.2" - rxjs "^7.8.1" - tslib "^2.6.2" + "@polkadot-api/json-rpc-provider" "0.0.1" + "@polkadot-api/utils" "0.1.0" -"@polkadot/api-derive@10.12.4": - version "10.12.4" - resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-10.12.4.tgz#a3b4cc3eb685dd3255d36e534f6810af668a5b45" - integrity sha512-V5DogVPWoMw8U6V5hCkxDZP2qpashLUruyWVDcGhQmMb0f5d5PG/dPlZ3CzvAars6G2ypJ8ciSNKDdApP5JWaQ== - dependencies: - "@polkadot/api" "10.12.4" - "@polkadot/api-augment" "10.12.4" - "@polkadot/api-base" "10.12.4" - "@polkadot/rpc-core" "10.12.4" - "@polkadot/types" "10.12.4" - "@polkadot/types-codec" "10.12.4" - "@polkadot/util" "^12.6.2" - "@polkadot/util-crypto" "^12.6.2" +"@polkadot-api/utils@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@polkadot-api/utils/-/utils-0.1.0.tgz#d36937cdc465c2ea302f3278cf53157340ab33a0" + integrity sha512-MXzWZeuGxKizPx2Xf/47wx9sr/uxKw39bVJUptTJdsaQn/TGq+z310mHzf1RCGvC1diHM8f593KrnDgc9oNbJA== + +"@polkadot/api-augment@14.3.1", "@polkadot/api-augment@^14.0.1": + version "14.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/api-augment/-/api-augment-14.3.1.tgz#8de4ae7cda79f0ad506a3c18ebeba16207428f7f" + integrity sha512-PE6DW+8kRhbnGKn7qCF7yM6eEt/kqrY8bh1i0RZcPY9QgwXW4bZZrtMK4WssX6Z70NTEoOW6xHYIjc7gFZuz8g== + dependencies: + "@polkadot/api-base" "14.3.1" + "@polkadot/rpc-augment" "14.3.1" + "@polkadot/types" "14.3.1" + "@polkadot/types-augment" "14.3.1" + "@polkadot/types-codec" "14.3.1" + "@polkadot/util" "^13.2.3" + tslib "^2.8.0" + +"@polkadot/api-base@14.3.1", "@polkadot/api-base@^14.0.1": + version "14.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/api-base/-/api-base-14.3.1.tgz#ae83cf98d273b35e718c0122b22b1a88af4d266c" + integrity sha512-GZT6rTpT3HYZ/C3rLPjoX3rX3DOxNG/zgts+jKjNrCumAeZkVq5JErKIX8/3f2TVaE2Kbqniy3d1TH/AL4HBPA== + dependencies: + "@polkadot/rpc-core" "14.3.1" + "@polkadot/types" "14.3.1" + "@polkadot/util" "^13.2.3" rxjs "^7.8.1" - tslib "^2.6.2" - -"@polkadot/api-derive@11.3.1": - version "11.3.1" - resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-11.3.1.tgz#3617655b6dab56d5beb8efbf7383ab457370df35" - integrity sha512-9dopzrh4cRuft1nANmBvMY/hEhFDu0VICMTOGxQLOl8NMfcOFPTLAN0JhSBUoicGZhV+c4vpv01NBx/7/IL1HA== - dependencies: - "@polkadot/api" "11.3.1" - "@polkadot/api-augment" "11.3.1" - "@polkadot/api-base" "11.3.1" - "@polkadot/rpc-core" "11.3.1" - "@polkadot/types" "11.3.1" - "@polkadot/types-codec" "11.3.1" - "@polkadot/util" "^12.6.2" - "@polkadot/util-crypto" "^12.6.2" + tslib "^2.8.0" + +"@polkadot/api-derive@14.3.1": + version "14.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-14.3.1.tgz#86391944a0ff04b4e6d6576252db45886f9635de" + integrity sha512-PhqUEJCY54vXtIaoYqGUtJY06wHd/K0cBmBz9yCLxp8UZkLoGWhfJRTruI25Jnucf9awS5cZKYqbsoDrL09Oqg== + dependencies: + "@polkadot/api" "14.3.1" + "@polkadot/api-augment" "14.3.1" + "@polkadot/api-base" "14.3.1" + "@polkadot/rpc-core" "14.3.1" + "@polkadot/types" "14.3.1" + "@polkadot/types-codec" "14.3.1" + "@polkadot/util" "^13.2.3" + "@polkadot/util-crypto" "^13.2.3" rxjs "^7.8.1" - tslib "^2.6.2" - -"@polkadot/api@10.12.4", "@polkadot/api@^10.11.2": - version "10.12.4" - resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-10.12.4.tgz#eeec23a45a26d173b5717e1b840d2d2fb19a9fc7" - integrity sha512-bCWF1ciMqvy2XusHRk2AGKgOmod2dk/4WqQu43F8OSUXuazDOXeYJgJTv/oDznU6xQASW7awntp3JpSvsxviaA== - dependencies: - "@polkadot/api-augment" "10.12.4" - "@polkadot/api-base" "10.12.4" - "@polkadot/api-derive" "10.12.4" - "@polkadot/keyring" "^12.6.2" - "@polkadot/rpc-augment" "10.12.4" - "@polkadot/rpc-core" "10.12.4" - "@polkadot/rpc-provider" "10.12.4" - "@polkadot/types" "10.12.4" - "@polkadot/types-augment" "10.12.4" - "@polkadot/types-codec" "10.12.4" - "@polkadot/types-create" "10.12.4" - "@polkadot/types-known" "10.12.4" - "@polkadot/util" "^12.6.2" - "@polkadot/util-crypto" "^12.6.2" + tslib "^2.8.0" + +"@polkadot/api@14.3.1", "@polkadot/api@^14.0.1", "@polkadot/api@^14.3.1": + version "14.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-14.3.1.tgz#629a111283949428541db09fe38d135829e28bc4" + integrity sha512-ZBKSXEVJa1S1bnmpnA7KT/fX3sJDIJOdVD9Hp3X+G73yvXzuK5k1Mn5z9bD/AcMs/HAGcbuYU+b9+b9IByH9YQ== + dependencies: + "@polkadot/api-augment" "14.3.1" + "@polkadot/api-base" "14.3.1" + "@polkadot/api-derive" "14.3.1" + "@polkadot/keyring" "^13.2.3" + "@polkadot/rpc-augment" "14.3.1" + "@polkadot/rpc-core" "14.3.1" + "@polkadot/rpc-provider" "14.3.1" + "@polkadot/types" "14.3.1" + "@polkadot/types-augment" "14.3.1" + "@polkadot/types-codec" "14.3.1" + "@polkadot/types-create" "14.3.1" + "@polkadot/types-known" "14.3.1" + "@polkadot/util" "^13.2.3" + "@polkadot/util-crypto" "^13.2.3" eventemitter3 "^5.0.1" rxjs "^7.8.1" - tslib "^2.6.2" - -"@polkadot/api@11.3.1", "@polkadot/api@^11.2.1": - version "11.3.1" - resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-11.3.1.tgz#6092aea8147ea03873b3f383cceae0390a67f71d" - integrity sha512-q4kFIIHTLvKxM24b0Eo8hJevsPMme+aITJGrDML9BgdZYTRN14+cu5nXiCsQvaEamdyYj+uCXWe2OV9X7pPxsA== - dependencies: - "@polkadot/api-augment" "11.3.1" - "@polkadot/api-base" "11.3.1" - "@polkadot/api-derive" "11.3.1" - "@polkadot/keyring" "^12.6.2" - "@polkadot/rpc-augment" "11.3.1" - "@polkadot/rpc-core" "11.3.1" - "@polkadot/rpc-provider" "11.3.1" - "@polkadot/types" "11.3.1" - "@polkadot/types-augment" "11.3.1" - "@polkadot/types-codec" "11.3.1" - "@polkadot/types-create" "11.3.1" - "@polkadot/types-known" "11.3.1" - "@polkadot/util" "^12.6.2" - "@polkadot/util-crypto" "^12.6.2" - eventemitter3 "^5.0.1" + tslib "^2.8.0" + +"@polkadot/keyring@^13.2.2", "@polkadot/keyring@^13.2.3": + version "13.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-13.3.1.tgz#ad02047ffa3a73f4ba268ae504e520a6856ac55d" + integrity sha512-PT3uG9MqciPyoEz/f23RRMSlht77fo1hZaA1Vbcs1Rz7h7qFC0+7jFI9Ak30EJh9V0I2YugfzqAe3NjjyDxlvw== + dependencies: + "@polkadot/util" "13.3.1" + "@polkadot/util-crypto" "13.3.1" + tslib "^2.8.0" + +"@polkadot/networks@13.3.1", "@polkadot/networks@^13.2.3": + version "13.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-13.3.1.tgz#2ef94e2b74a44da22e4c56ca952b1db7b041f330" + integrity sha512-g/0OmCMUrbbW4RQ/xajTYd2SMJvFKY4kmMvpxtNN57hWQpY7c5oDXSz57jGH2uwvcBWeDfaNokcS+9hJL1RBcA== + dependencies: + "@polkadot/util" "13.3.1" + "@substrate/ss58-registry" "^1.51.0" + tslib "^2.8.0" + +"@polkadot/rpc-augment@14.3.1": + version "14.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/rpc-augment/-/rpc-augment-14.3.1.tgz#08aca86bbb90358c94575f1494f111ed25af2a35" + integrity sha512-Z8Hp8fFHwFCiTX0bBCDqCZ4U26wLIJl1NRSjJTsAr+SS68pYZBDGCwhKztpKGqndk1W1akRUaxrkGqYdIFmspQ== + dependencies: + "@polkadot/rpc-core" "14.3.1" + "@polkadot/types" "14.3.1" + "@polkadot/types-codec" "14.3.1" + "@polkadot/util" "^13.2.3" + tslib "^2.8.0" + +"@polkadot/rpc-core@14.3.1": + version "14.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-14.3.1.tgz#db80a8af15c90323c76e66f1c48fcc41988cab15" + integrity sha512-FV2NPhFwFxmX8LqibDcGc6IKTBqmvwr7xwF2OA60Br4cX+AQzMSVpFlfQcETll+0M+LnRhqGKGkP0EQWXaSowA== + dependencies: + "@polkadot/rpc-augment" "14.3.1" + "@polkadot/rpc-provider" "14.3.1" + "@polkadot/types" "14.3.1" + "@polkadot/util" "^13.2.3" rxjs "^7.8.1" - tslib "^2.6.2" - -"@polkadot/keyring@^12.6.2": - version "12.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-12.6.2.tgz#6067e6294fee23728b008ac116e7e9db05cecb9b" - integrity sha512-O3Q7GVmRYm8q7HuB3S0+Yf/q/EB2egKRRU3fv9b3B7V+A52tKzA+vIwEmNVaD1g5FKW9oB97rmpggs0zaKFqHw== - dependencies: - "@polkadot/util" "12.6.2" - "@polkadot/util-crypto" "12.6.2" - tslib "^2.6.2" - -"@polkadot/networks@12.6.2", "@polkadot/networks@^12.6.2": - version "12.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-12.6.2.tgz#791779fee1d86cc5b6cd371858eea9b7c3f8720d" - integrity sha512-1oWtZm1IvPWqvMrldVH6NI2gBoCndl5GEwx7lAuQWGr7eNL+6Bdc5K3Z9T0MzFvDGoi2/CBqjX9dRKo39pDC/w== - dependencies: - "@polkadot/util" "12.6.2" - "@substrate/ss58-registry" "^1.44.0" - tslib "^2.6.2" - -"@polkadot/rpc-augment@10.12.4": - version "10.12.4" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-augment/-/rpc-augment-10.12.4.tgz#b41d88119aee801738b350d55bdab129f88fd5cd" - integrity sha512-GELqgtpoxmvFdXREYhrTGAFJ+xnQp8IYHFFtixfLM3SeV/F5FF0T7c1jSJ4PlEgK1tYg/KQ/DLl21fF7aWaInA== - dependencies: - "@polkadot/rpc-core" "10.12.4" - "@polkadot/types" "10.12.4" - "@polkadot/types-codec" "10.12.4" - "@polkadot/util" "^12.6.2" - tslib "^2.6.2" - -"@polkadot/rpc-augment@11.3.1": - version "11.3.1" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-augment/-/rpc-augment-11.3.1.tgz#b589ef5b7ab578cf274077604543071ce9889301" - integrity sha512-2PaDcKNju4QYQpxwVkWbRU3M0t340nMX9cMo+8awgvgL1LliV/fUDZueMKLuSS910JJMTPQ7y2pK4eQgMt08gQ== - dependencies: - "@polkadot/rpc-core" "11.3.1" - "@polkadot/types" "11.3.1" - "@polkadot/types-codec" "11.3.1" - "@polkadot/util" "^12.6.2" - tslib "^2.6.2" - -"@polkadot/rpc-core@10.12.4": - version "10.12.4" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-10.12.4.tgz#ecb5500335e6e202d0551356928289725321cf7c" - integrity sha512-OtOW3AQyvDR+0G7VylfwEyE5XnYhHrcRtGULT9NzjZTVHnDFghNIYoDcu6ucHBuMsvx5mbyaXsRtWDDZdr4trw== - dependencies: - "@polkadot/rpc-augment" "10.12.4" - "@polkadot/rpc-provider" "10.12.4" - "@polkadot/types" "10.12.4" - "@polkadot/util" "^12.6.2" - rxjs "^7.8.1" - tslib "^2.6.2" - -"@polkadot/rpc-core@11.3.1": - version "11.3.1" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-11.3.1.tgz#c23e23ee5c403c4edb207d603ae4dc16e69bc710" - integrity sha512-KKNepsDd/mpmXcA6v/h14eFFPEzLGd7nrvx2UUXUxoZ0Fq2MH1hplP3s93k1oduNY/vOXJR2K9S4dKManA6GVQ== - dependencies: - "@polkadot/rpc-augment" "11.3.1" - "@polkadot/rpc-provider" "11.3.1" - "@polkadot/types" "11.3.1" - "@polkadot/util" "^12.6.2" - rxjs "^7.8.1" - tslib "^2.6.2" - -"@polkadot/rpc-provider@10.12.4": - version "10.12.4" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-10.12.4.tgz#91fc29064e9d8152d8fec8fbf401b5be7ab3716e" - integrity sha512-awXLK28nt6BvOwoTnOVPtz+Qu5sx40Al1yb5lzKG6jYFQrEmqrENufHNOCLU3Uspfqmc6eJmNluZOmVtJKDCPg== - dependencies: - "@polkadot/keyring" "^12.6.2" - "@polkadot/types" "10.12.4" - "@polkadot/types-support" "10.12.4" - "@polkadot/util" "^12.6.2" - "@polkadot/util-crypto" "^12.6.2" - "@polkadot/x-fetch" "^12.6.2" - "@polkadot/x-global" "^12.6.2" - "@polkadot/x-ws" "^12.6.2" + tslib "^2.8.0" + +"@polkadot/rpc-provider@14.3.1", "@polkadot/rpc-provider@^14.0.1": + version "14.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-14.3.1.tgz#a7247bd6f59c6a597fcc88c5ddb95e44296d5a66" + integrity sha512-NF/Z/7lzT+jp5LZzC49g+YIjRzXVI0hFag3+B+4zh6E/kKADdF59EHj2Im4LDhRGOnEO9AE4H6/UjNEbZ94JtA== + dependencies: + "@polkadot/keyring" "^13.2.3" + "@polkadot/types" "14.3.1" + "@polkadot/types-support" "14.3.1" + "@polkadot/util" "^13.2.3" + "@polkadot/util-crypto" "^13.2.3" + "@polkadot/x-fetch" "^13.2.3" + "@polkadot/x-global" "^13.2.3" + "@polkadot/x-ws" "^13.2.3" eventemitter3 "^5.0.1" mock-socket "^9.3.1" - nock "^13.5.0" - tslib "^2.6.2" + nock "^13.5.5" + tslib "^2.8.0" optionalDependencies: - "@substrate/connect" "0.8.8" - -"@polkadot/rpc-provider@11.3.1", "@polkadot/rpc-provider@^11.2.1": - version "11.3.1" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-11.3.1.tgz#1d1289bf42d065b5f04f9baa46ef90d96940819e" - integrity sha512-pqERChoHo45hd3WAgW8UuzarRF+G/o/eXEbl0PXLubiayw4X4qCmIzmtntUcKYgxGNcYGZaG87ZU8OjN97m6UA== - dependencies: - "@polkadot/keyring" "^12.6.2" - "@polkadot/types" "11.3.1" - "@polkadot/types-support" "11.3.1" - "@polkadot/util" "^12.6.2" - "@polkadot/util-crypto" "^12.6.2" - "@polkadot/x-fetch" "^12.6.2" - "@polkadot/x-global" "^12.6.2" - "@polkadot/x-ws" "^12.6.2" - eventemitter3 "^5.0.1" - mock-socket "^9.3.1" - nock "^13.5.0" - tslib "^2.6.2" - optionalDependencies: - "@substrate/connect" "0.8.10" - -"@polkadot/types-augment@10.12.4": - version "10.12.4" - resolved "https://registry.yarnpkg.com/@polkadot/types-augment/-/types-augment-10.12.4.tgz#e396b9a0a9bf428a4352cbb36ecf3a5ebc696e19" - integrity sha512-BS7uMd5WzbpcXimYcbwQGJFjsZikVW1XXPS3FHAkcdPOKm1qWZ/r3V18XH9G4DKj0O0s4VrdVTl0nMcOZurKKg== - dependencies: - "@polkadot/types" "10.12.4" - "@polkadot/types-codec" "10.12.4" - "@polkadot/util" "^12.6.2" - tslib "^2.6.2" - -"@polkadot/types-augment@11.3.1": - version "11.3.1" - resolved "https://registry.yarnpkg.com/@polkadot/types-augment/-/types-augment-11.3.1.tgz#1f7f553f0ca6eb8fbc0306901edc045fe18729e1" - integrity sha512-eR3HVpvUmB3v7q2jTWVmVfAVfb1/kuNn7ij94Zqadg/fuUq0pKqIOKwkUj3OxRM3A/5BnW3MbgparjKD3r+fyw== - dependencies: - "@polkadot/types" "11.3.1" - "@polkadot/types-codec" "11.3.1" - "@polkadot/util" "^12.6.2" - tslib "^2.6.2" - -"@polkadot/types-codec@10.12.4": - version "10.12.4" - resolved "https://registry.yarnpkg.com/@polkadot/types-codec/-/types-codec-10.12.4.tgz#21052005bb448814d0d16230c1835a81f601e450" - integrity sha512-8SEwgQT+JfmI62C9MZisA/1oQFuQW1OySvZFZlSqkaoRooK+JMl7Sp9fnRhCuiHMiz08YO4lX16O+aAu0/bmmw== - dependencies: - "@polkadot/util" "^12.6.2" - "@polkadot/x-bigint" "^12.6.2" - tslib "^2.6.2" - -"@polkadot/types-codec@11.3.1", "@polkadot/types-codec@^11.2.1": - version "11.3.1" - resolved "https://registry.yarnpkg.com/@polkadot/types-codec/-/types-codec-11.3.1.tgz#2767cf482cd49afdd5dce9701615f68ec59cec5e" - integrity sha512-i7IiiuuL+Z/jFoKTA9xeh4wGQnhnNNjMT0+1ohvlOvnFsoKZKFQQOaDPPntGJVL1JDCV+KjkN2uQKZSeW8tguQ== - dependencies: - "@polkadot/util" "^12.6.2" - "@polkadot/x-bigint" "^12.6.2" - tslib "^2.6.2" - -"@polkadot/types-create@10.12.4": - version "10.12.4" - resolved "https://registry.yarnpkg.com/@polkadot/types-create/-/types-create-10.12.4.tgz#f271a9625ab9d533f41e10ad1ffac7a9d7a910f1" - integrity sha512-K3a6q+q+as/FfxrbXgFdgK8aqrsUgAkH5c0KQS+nt6xMs+Yf2ctpqiLPOjOEVEw8kHRpYtjx1db8Namegk51ig== - dependencies: - "@polkadot/types-codec" "10.12.4" - "@polkadot/util" "^12.6.2" - tslib "^2.6.2" - -"@polkadot/types-create@11.3.1": - version "11.3.1" - resolved "https://registry.yarnpkg.com/@polkadot/types-create/-/types-create-11.3.1.tgz#3ac2c8283f61555f9e572ca30e3485b95a0a54e2" - integrity sha512-pBXtpz5FehcRJ6j5MzFUIUN8ZWM7z6HbqK1GxBmYbJVRElcGcOg7a/rL2pQVphU0Rx1E8bSO4thzGf4wUxSX7w== - dependencies: - "@polkadot/types-codec" "11.3.1" - "@polkadot/util" "^12.6.2" - tslib "^2.6.2" - -"@polkadot/types-known@10.12.4": - version "10.12.4" - resolved "https://registry.yarnpkg.com/@polkadot/types-known/-/types-known-10.12.4.tgz#5a2c002a0af405a11f11ee93c3b2bb95788db03d" - integrity sha512-fiS26ep9QwHIUn/N0X9R3DIFP8ar4cEG/oJyxs5uBNtIEiAZdWucEZAZFxJnNp6Lib0PGYaz9T9ph0+UbnKKEg== - dependencies: - "@polkadot/networks" "^12.6.2" - "@polkadot/types" "10.12.4" - "@polkadot/types-codec" "10.12.4" - "@polkadot/types-create" "10.12.4" - "@polkadot/util" "^12.6.2" - tslib "^2.6.2" - -"@polkadot/types-known@11.3.1", "@polkadot/types-known@^11.2.1": - version "11.3.1" - resolved "https://registry.yarnpkg.com/@polkadot/types-known/-/types-known-11.3.1.tgz#fc34ed29ac2474db6b66805a15d12008226346bb" - integrity sha512-3BIof7u6tn9bk3ZCIxA07iNoQ3uj4+vn3DTOjCKECozkRlt6V+kWRvqh16Hc0SHMg/QjcMb2fIu/WZhka1McUQ== - dependencies: - "@polkadot/networks" "^12.6.2" - "@polkadot/types" "11.3.1" - "@polkadot/types-codec" "11.3.1" - "@polkadot/types-create" "11.3.1" - "@polkadot/util" "^12.6.2" - tslib "^2.6.2" - -"@polkadot/types-support@10.12.4": - version "10.12.4" - resolved "https://registry.yarnpkg.com/@polkadot/types-support/-/types-support-10.12.4.tgz#e59db00e2d7665d2a32d5f8c18d548ad2b10e1bd" - integrity sha512-uK0AoxzbuFEwlR3eoTKdWuZxAKYOn2B67Xo+swwRL0/VTZvEc6mGnFUd1RfVM+cWKfH3eqwKQCYhjvFRlOkA8g== - dependencies: - "@polkadot/util" "^12.6.2" - tslib "^2.6.2" - -"@polkadot/types-support@11.3.1": - version "11.3.1" - resolved "https://registry.yarnpkg.com/@polkadot/types-support/-/types-support-11.3.1.tgz#dee02a67784baa13177fe9957f5d8d62e8a7e570" - integrity sha512-jTFz1GKyF7nI29yIOq4v0NiWTOf5yX4HahJNeFD8TcxoLhF+6tH/XXqrUXJEfbaTlSrRWiW1LZYlb+snctqKHA== - dependencies: - "@polkadot/util" "^12.6.2" - tslib "^2.6.2" - -"@polkadot/types@10.12.4": - version "10.12.4" - resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-10.12.4.tgz#6c26c81fd523c1b75e53eccf676f3d8697358699" - integrity sha512-KJfxAdOyA/ZmGzRpRWojZx6hOU4iFHiwmerAZQzxELMCUCSsAd4joiXWQX7leSrlJCvvk8/VecnXGTqRe8jtGw== - dependencies: - "@polkadot/keyring" "^12.6.2" - "@polkadot/types-augment" "10.12.4" - "@polkadot/types-codec" "10.12.4" - "@polkadot/types-create" "10.12.4" - "@polkadot/util" "^12.6.2" - "@polkadot/util-crypto" "^12.6.2" + "@substrate/connect" "0.8.11" + +"@polkadot/types-augment@14.3.1": + version "14.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/types-augment/-/types-augment-14.3.1.tgz#d41c20ee51f07d5e753096509e387fa508cfd028" + integrity sha512-SC4M6TBlgCglNz+gRbvfoVRDz0Vyeev6v0HeAdw0H6ayEW4BXUdo5bFr0092bdS5uTrEPgiSyUry5TJs2KoXig== + dependencies: + "@polkadot/types" "14.3.1" + "@polkadot/types-codec" "14.3.1" + "@polkadot/util" "^13.2.3" + tslib "^2.8.0" + +"@polkadot/types-codec@14.3.1", "@polkadot/types-codec@^14.0.1": + version "14.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/types-codec/-/types-codec-14.3.1.tgz#891fce0b1a0d69c6c4e1112393d88447fae8d374" + integrity sha512-3y3RBGd+8ebscGbNUOjqUjnRE7hgicgid5LtofHK3O1EDcJQJnYBDkJ7fOAi96CDgHsg+f2FWWkBWEPgpOQoMQ== + dependencies: + "@polkadot/util" "^13.2.3" + "@polkadot/x-bigint" "^13.2.3" + tslib "^2.8.0" + +"@polkadot/types-create@14.3.1": + version "14.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/types-create/-/types-create-14.3.1.tgz#e410ff71fce4d8d49a1411943d1a9d26f98a866d" + integrity sha512-F4EBvF3Zvym0xrkAA5Yz01IAVMepMV3w2Dwd0C9IygEAQ5sYLLPHmf72/aXn+Ag+bSyT2wlJHpDc+nEBXNQ3Gw== + dependencies: + "@polkadot/types-codec" "14.3.1" + "@polkadot/util" "^13.2.3" + tslib "^2.8.0" + +"@polkadot/types-known@14.3.1", "@polkadot/types-known@^14.0.1": + version "14.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/types-known/-/types-known-14.3.1.tgz#593976ef8926cacefdf97a3cc313a227d4489baa" + integrity sha512-58b3Yc7+sxwNjs8axmrA9OCgnxmEKIq7XCH2VxSgLqTeqbohVtxwUSCW/l8NPrq1nxzj4J2sopu0PPg8/++q4g== + dependencies: + "@polkadot/networks" "^13.2.3" + "@polkadot/types" "14.3.1" + "@polkadot/types-codec" "14.3.1" + "@polkadot/types-create" "14.3.1" + "@polkadot/util" "^13.2.3" + tslib "^2.8.0" + +"@polkadot/types-support@14.3.1": + version "14.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/types-support/-/types-support-14.3.1.tgz#29107b1e92d0d8b33e152856e17ba40f8768b918" + integrity sha512-MfVe4iIOJIfBr+gj8Lu8gwIvhnO6gDbG5LeaKAjY6vS6Oh0y5Ztr8NdMIl8ccSpoyt3LqIXjfApeGzHiLzr6bw== + dependencies: + "@polkadot/util" "^13.2.3" + tslib "^2.8.0" + +"@polkadot/types@14.3.1", "@polkadot/types@^14.0.1": + version "14.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-14.3.1.tgz#ea1698f59750e74169314239272777fd6a732a19" + integrity sha512-O748XgCLDQYxS5nQ6TJSqW88oC4QNIoNVlWZC2Qq4SmEXuSzaNHQwSVtdyPRJCCc4Oi1DCQvGui4O+EukUl7HA== + dependencies: + "@polkadot/keyring" "^13.2.3" + "@polkadot/types-augment" "14.3.1" + "@polkadot/types-codec" "14.3.1" + "@polkadot/types-create" "14.3.1" + "@polkadot/util" "^13.2.3" + "@polkadot/util-crypto" "^13.2.3" rxjs "^7.8.1" - tslib "^2.6.2" + tslib "^2.8.0" -"@polkadot/types@11.3.1", "@polkadot/types@^11.2.1": - version "11.3.1" - resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-11.3.1.tgz#bab61b701218158099e3f548d20efc27cbf1287f" - integrity sha512-5c7uRFXQTT11Awi6T0yFIdAfD6xGDAOz06Kp7M5S9OGNZY28wSPk5x6BYfNphWPaIBmHHewYJB5qmnrdYQAWKQ== - dependencies: - "@polkadot/keyring" "^12.6.2" - "@polkadot/types-augment" "11.3.1" - "@polkadot/types-codec" "11.3.1" - "@polkadot/types-create" "11.3.1" - "@polkadot/util" "^12.6.2" - "@polkadot/util-crypto" "^12.6.2" - rxjs "^7.8.1" - tslib "^2.6.2" - -"@polkadot/util-crypto@12.6.2", "@polkadot/util-crypto@^12.6.2": - version "12.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-12.6.2.tgz#d2d51010e8e8ca88951b7d864add797dad18bbfc" - integrity sha512-FEWI/dJ7wDMNN1WOzZAjQoIcCP/3vz3wvAp5QQm+lOrzOLj0iDmaIGIcBkz8HVm3ErfSe/uKP0KS4jgV/ib+Mg== +"@polkadot/util-crypto@13.3.1", "@polkadot/util-crypto@^13.2.2", "@polkadot/util-crypto@^13.2.3": + version "13.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-13.3.1.tgz#b7a705aa2760ecd48e66c0f49bef11cd3cb322af" + integrity sha512-FU6yf3IY++DKlf0eqO9/obe2y1zuZ5rbqRs75fyOME/5VXio1fA3GIpW7aFphyneFRd78G8QLh8kn0oIwBGMNg== dependencies: "@noble/curves" "^1.3.0" "@noble/hashes" "^1.3.3" - "@polkadot/networks" "12.6.2" - "@polkadot/util" "12.6.2" - "@polkadot/wasm-crypto" "^7.3.2" - "@polkadot/wasm-util" "^7.3.2" - "@polkadot/x-bigint" "12.6.2" - "@polkadot/x-randomvalues" "12.6.2" - "@scure/base" "^1.1.5" - tslib "^2.6.2" - -"@polkadot/util@12.6.2", "@polkadot/util@^12.6.2": - version "12.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-12.6.2.tgz#9396eff491221e1f0fd28feac55fc16ecd61a8dc" - integrity sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw== - dependencies: - "@polkadot/x-bigint" "12.6.2" - "@polkadot/x-global" "12.6.2" - "@polkadot/x-textdecoder" "12.6.2" - "@polkadot/x-textencoder" "12.6.2" - "@types/bn.js" "^5.1.5" + "@polkadot/networks" "13.3.1" + "@polkadot/util" "13.3.1" + "@polkadot/wasm-crypto" "^7.4.1" + "@polkadot/wasm-util" "^7.4.1" + "@polkadot/x-bigint" "13.3.1" + "@polkadot/x-randomvalues" "13.3.1" + "@scure/base" "^1.1.7" + tslib "^2.8.0" + +"@polkadot/util@13.3.1", "@polkadot/util@^13.2.2", "@polkadot/util@^13.2.3": + version "13.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-13.3.1.tgz#654b84fd553e7d977007885c23aae98e4ff18114" + integrity sha512-5crLP/rUZOJzuo/W8t73J8PxpibJ5vrxY57rR6V+mIpCZd1ORiw0wxeHcV5F9Adpn7yJyuGBwxPbueNR5Rr1Zw== + dependencies: + "@polkadot/x-bigint" "13.3.1" + "@polkadot/x-global" "13.3.1" + "@polkadot/x-textdecoder" "13.3.1" + "@polkadot/x-textencoder" "13.3.1" + "@types/bn.js" "^5.1.6" bn.js "^5.2.1" - tslib "^2.6.2" - -"@polkadot/wasm-bridge@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-bridge/-/wasm-bridge-7.3.2.tgz#e1b01906b19e06cbca3d94f10f5666f2ae0baadc" - integrity sha512-AJEXChcf/nKXd5Q/YLEV5dXQMle3UNT7jcXYmIffZAo/KI394a+/24PaISyQjoNC0fkzS1Q8T5pnGGHmXiVz2g== - dependencies: - "@polkadot/wasm-util" "7.3.2" - tslib "^2.6.2" - -"@polkadot/wasm-crypto-asmjs@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.3.2.tgz#c6d41bc4b48b5359d57a24ca3066d239f2d70a34" - integrity sha512-QP5eiUqUFur/2UoF2KKKYJcesc71fXhQFLT3D4ZjG28Mfk2ZPI0QNRUfpcxVQmIUpV5USHg4geCBNuCYsMm20Q== - dependencies: - tslib "^2.6.2" - -"@polkadot/wasm-crypto-init@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-init/-/wasm-crypto-init-7.3.2.tgz#7e1fe79ba978fb0a4a0f74a92d976299d38bc4b8" - integrity sha512-FPq73zGmvZtnuJaFV44brze3Lkrki3b4PebxCy9Fplw8nTmisKo9Xxtfew08r0njyYh+uiJRAxPCXadkC9sc8g== - dependencies: - "@polkadot/wasm-bridge" "7.3.2" - "@polkadot/wasm-crypto-asmjs" "7.3.2" - "@polkadot/wasm-crypto-wasm" "7.3.2" - "@polkadot/wasm-util" "7.3.2" - tslib "^2.6.2" - -"@polkadot/wasm-crypto-wasm@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-7.3.2.tgz#44e08ed5cf6499ce4a3aa7247071a5d01f6a74f4" - integrity sha512-15wd0EMv9IXs5Abp1ZKpKKAVyZPhATIAHfKsyoWCEFDLSOA0/K0QGOxzrAlsrdUkiKZOq7uzSIgIDgW8okx2Mw== - dependencies: - "@polkadot/wasm-util" "7.3.2" - tslib "^2.6.2" - -"@polkadot/wasm-crypto@^7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto/-/wasm-crypto-7.3.2.tgz#61bbcd9e591500705c8c591e6aff7654bdc8afc9" - integrity sha512-+neIDLSJ6jjVXsjyZ5oLSv16oIpwp+PxFqTUaZdZDoA2EyFRQB8pP7+qLsMNk+WJuhuJ4qXil/7XiOnZYZ+wxw== - dependencies: - "@polkadot/wasm-bridge" "7.3.2" - "@polkadot/wasm-crypto-asmjs" "7.3.2" - "@polkadot/wasm-crypto-init" "7.3.2" - "@polkadot/wasm-crypto-wasm" "7.3.2" - "@polkadot/wasm-util" "7.3.2" - tslib "^2.6.2" - -"@polkadot/wasm-util@7.3.2", "@polkadot/wasm-util@^7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-util/-/wasm-util-7.3.2.tgz#4fe6370d2b029679b41a5c02cd7ebf42f9b28de1" - integrity sha512-bmD+Dxo1lTZyZNxbyPE380wd82QsX+43mgCm40boyKrRppXEyQmWT98v/Poc7chLuskYb6X8IQ6lvvK2bGR4Tg== - dependencies: - tslib "^2.6.2" - -"@polkadot/x-bigint@12.6.2", "@polkadot/x-bigint@^12.6.2": - version "12.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-bigint/-/x-bigint-12.6.2.tgz#59b7a615f205ae65e1ac67194aefde94d3344580" - integrity sha512-HSIk60uFPX4GOFZSnIF7VYJz7WZA7tpFJsne7SzxOooRwMTWEtw3fUpFy5cYYOeLh17/kHH1Y7SVcuxzVLc74Q== - dependencies: - "@polkadot/x-global" "12.6.2" - tslib "^2.6.2" - -"@polkadot/x-fetch@^12.6.2": - version "12.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-fetch/-/x-fetch-12.6.2.tgz#b1bca028db90263bafbad2636c18d838d842d439" - integrity sha512-8wM/Z9JJPWN1pzSpU7XxTI1ldj/AfC8hKioBlUahZ8gUiJaOF7K9XEFCrCDLis/A1BoOu7Ne6WMx/vsJJIbDWw== - dependencies: - "@polkadot/x-global" "12.6.2" + tslib "^2.8.0" + +"@polkadot/wasm-bridge@7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-bridge/-/wasm-bridge-7.4.1.tgz#dd59ebb7c425657aad64b1430e8455d14d935059" + integrity sha512-tdkJaV453tezBxhF39r4oeG0A39sPKGDJmN81LYLf+Fihb7astzwju+u75BRmDrHZjZIv00un3razJEWCxze6g== + dependencies: + "@polkadot/wasm-util" "7.4.1" + tslib "^2.7.0" + +"@polkadot/wasm-crypto-asmjs@7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.4.1.tgz#5d36f3f498077f826f2bbe742070574606e673e9" + integrity sha512-pwU8QXhUW7IberyHJIQr37IhbB6DPkCG5FhozCiNTq4vFBsFPjm9q8aZh7oX1QHQaiAZa2m2/VjIVE+FHGbvHQ== + dependencies: + tslib "^2.7.0" + +"@polkadot/wasm-crypto-init@7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-init/-/wasm-crypto-init-7.4.1.tgz#88bc61c9473a7c39d9fafb27cd631215b053b836" + integrity sha512-AVka33+f7MvXEEIGq5U0dhaA2SaXMXnxVCQyhJTaCnJ5bRDj0Xlm3ijwDEQUiaDql7EikbkkRtmlvs95eSUWYQ== + dependencies: + "@polkadot/wasm-bridge" "7.4.1" + "@polkadot/wasm-crypto-asmjs" "7.4.1" + "@polkadot/wasm-crypto-wasm" "7.4.1" + "@polkadot/wasm-util" "7.4.1" + tslib "^2.7.0" + +"@polkadot/wasm-crypto-wasm@7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-7.4.1.tgz#73d08f59aaf51ed70563c0099e7852fdeda03649" + integrity sha512-PE1OAoupFR0ZOV2O8tr7D1FEUAwaggzxtfs3Aa5gr+yxlSOaWUKeqsOYe1KdrcjmZVV3iINEAXxgrbzCmiuONg== + dependencies: + "@polkadot/wasm-util" "7.4.1" + tslib "^2.7.0" + +"@polkadot/wasm-crypto@^7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto/-/wasm-crypto-7.4.1.tgz#6d5f94d28bf92ef234b94d55b0d1f4299cbbb7b7" + integrity sha512-kHN/kF7hYxm1y0WeFLWeWir6oTzvcFmR4N8fJJokR+ajYbdmrafPN+6iLgQVbhZnDdxyv9jWDuRRsDnBx8tPMQ== + dependencies: + "@polkadot/wasm-bridge" "7.4.1" + "@polkadot/wasm-crypto-asmjs" "7.4.1" + "@polkadot/wasm-crypto-init" "7.4.1" + "@polkadot/wasm-crypto-wasm" "7.4.1" + "@polkadot/wasm-util" "7.4.1" + tslib "^2.7.0" + +"@polkadot/wasm-util@7.4.1", "@polkadot/wasm-util@^7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-util/-/wasm-util-7.4.1.tgz#e8cea38a3b752efdef55080bb1da795ac71c5136" + integrity sha512-RAcxNFf3zzpkr+LX/ItAsvj+QyM56TomJ0xjUMo4wKkHjwsxkz4dWJtx5knIgQz/OthqSDMR59VNEycQeNuXzA== + dependencies: + tslib "^2.7.0" + +"@polkadot/x-bigint@13.3.1", "@polkadot/x-bigint@^13.2.3": + version "13.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/x-bigint/-/x-bigint-13.3.1.tgz#2a24633e002fbdde6ca4f2ac9d33b927db583245" + integrity sha512-ewc708a7LUdrT92v9DsSAIbcJQBn3aR9/LavF/iyMOq5lZJyPXDSjAnskfMs818R3RLCrKVKfs+aKkxt2eqo8g== + dependencies: + "@polkadot/x-global" "13.3.1" + tslib "^2.8.0" + +"@polkadot/x-fetch@^13.2.3": + version "13.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/x-fetch/-/x-fetch-13.3.1.tgz#27ee462567193d0832d132a5d6a84229fe740e88" + integrity sha512-J+HM42j0KGqdC/eo7vmsdLPz74MR7+0My4km6TG9HGjKqqztwygtenpopPod2SbRnL4nHiEG0wZzpVOW6HN2gw== + dependencies: + "@polkadot/x-global" "13.3.1" node-fetch "^3.3.2" - tslib "^2.6.2" - -"@polkadot/x-global@12.6.2", "@polkadot/x-global@^12.6.2": - version "12.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-12.6.2.tgz#31d4de1c3d4c44e4be3219555a6d91091decc4ec" - integrity sha512-a8d6m+PW98jmsYDtAWp88qS4dl8DyqUBsd0S+WgyfSMtpEXu6v9nXDgPZgwF5xdDvXhm+P0ZfVkVTnIGrScb5g== - dependencies: - tslib "^2.6.2" - -"@polkadot/x-randomvalues@12.6.2": - version "12.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-12.6.2.tgz#13fe3619368b8bf5cb73781554859b5ff9d900a2" - integrity sha512-Vr8uG7rH2IcNJwtyf5ebdODMcr0XjoCpUbI91Zv6AlKVYOGKZlKLYJHIwpTaKKB+7KPWyQrk4Mlym/rS7v9feg== - dependencies: - "@polkadot/x-global" "12.6.2" - tslib "^2.6.2" + tslib "^2.8.0" + +"@polkadot/x-global@13.3.1", "@polkadot/x-global@^13.2.3": + version "13.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-13.3.1.tgz#2537b834ecb239a7fb92004491ddff102f3ebee9" + integrity sha512-861TeIw49a3JvkwlUWrddfG+JaUqtFZDsemYxxZIjjcRJLrKOsoKNqHbiHi2OPrwlX8PwAA/wc5I9Q4XRQ7KEg== + dependencies: + tslib "^2.8.0" + +"@polkadot/x-randomvalues@13.3.1": + version "13.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-13.3.1.tgz#63b1251f3fb6643daf31917bc2e14277e6145101" + integrity sha512-GIb0au3vIX2U/DRH0PRckM+1I4EIbU8PLX1roGJgN1MAYKWiylJTKPVoBMafMM87o8qauOevJ46uYB/qlfbiWg== + dependencies: + "@polkadot/x-global" "13.3.1" + tslib "^2.8.0" + +"@polkadot/x-textdecoder@13.3.1": + version "13.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-13.3.1.tgz#eb50c2c52d0de9257ebd4623c4098e929e7aa3a6" + integrity sha512-g2R9O1p0ZsNDhZ3uEBZh6fQaVLlo3yFr0YNqt15v7e9lBI4APvTJ202EINlo2jB5lz/R438/BdjEA3AL+0zUtQ== + dependencies: + "@polkadot/x-global" "13.3.1" + tslib "^2.8.0" + +"@polkadot/x-textencoder@13.3.1": + version "13.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-13.3.1.tgz#203a208b03a1336446777c0cc76bf35cf8e685d5" + integrity sha512-DnHLUdoKDYxekfxopuUuPB+j5Mu7Jemejcduu5gz3/89GP/sYPAu0CAVbq9B+hK1yGjBBj31eA4wkAV1oktYmg== + dependencies: + "@polkadot/x-global" "13.3.1" + tslib "^2.8.0" + +"@polkadot/x-ws@^13.2.3": + version "13.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/x-ws/-/x-ws-13.3.1.tgz#05b0664991e24ffd62f5af91c9280dcb544c0613" + integrity sha512-ytqkC7FwVs4BlzNFAmPMFp+xD1KIdMMP/mvCSOrnxjlsyM5DVGop4x4c2ZgDUBmrFqmIiVkWDfMIZeOxui2OLQ== + dependencies: + "@polkadot/x-global" "13.3.1" + tslib "^2.8.0" + ws "^8.18.0" + +"@rollup/rollup-android-arm-eabi@4.30.1": + version "4.30.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.30.1.tgz#14c737dc19603a096568044eadaa60395eefb809" + integrity sha512-pSWY+EVt3rJ9fQ3IqlrEUtXh3cGqGtPDH1FQlNZehO2yYxCHEX1SPsz1M//NXwYfbTlcKr9WObLnJX9FsS9K1Q== + +"@rollup/rollup-android-arm64@4.30.1": + version "4.30.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.30.1.tgz#9d81ea54fc5650eb4ebbc0a7d84cee331bfa30ad" + integrity sha512-/NA2qXxE3D/BRjOJM8wQblmArQq1YoBVJjrjoTSBS09jgUisq7bqxNHJ8kjCHeV21W/9WDGwJEWSN0KQ2mtD/w== + +"@rollup/rollup-darwin-arm64@4.30.1": + version "4.30.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.30.1.tgz#29448cb1370cf678b50743d2e392be18470abc23" + integrity sha512-r7FQIXD7gB0WJ5mokTUgUWPl0eYIH0wnxqeSAhuIwvnnpjdVB8cRRClyKLQr7lgzjctkbp5KmswWszlwYln03Q== + +"@rollup/rollup-darwin-x64@4.30.1": + version "4.30.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.30.1.tgz#0ca99741c3ed096700557a43bb03359450c7857d" + integrity sha512-x78BavIwSH6sqfP2xeI1hd1GpHL8J4W2BXcVM/5KYKoAD3nNsfitQhvWSw+TFtQTLZ9OmlF+FEInEHyubut2OA== + +"@rollup/rollup-freebsd-arm64@4.30.1": + version "4.30.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.30.1.tgz#233f8e4c2f54ad9b719cd9645887dcbd12b38003" + integrity sha512-HYTlUAjbO1z8ywxsDFWADfTRfTIIy/oUlfIDmlHYmjUP2QRDTzBuWXc9O4CXM+bo9qfiCclmHk1x4ogBjOUpUQ== + +"@rollup/rollup-freebsd-x64@4.30.1": + version "4.30.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.30.1.tgz#dfba762a023063dc901610722995286df4a48360" + integrity sha512-1MEdGqogQLccphhX5myCJqeGNYTNcmTyaic9S7CG3JhwuIByJ7J05vGbZxsizQthP1xpVx7kd3o31eOogfEirw== + +"@rollup/rollup-linux-arm-gnueabihf@4.30.1": + version "4.30.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.30.1.tgz#b9da54171726266c5ef4237f462a85b3c3cf6ac9" + integrity sha512-PaMRNBSqCx7K3Wc9QZkFx5+CX27WFpAMxJNiYGAXfmMIKC7jstlr32UhTgK6T07OtqR+wYlWm9IxzennjnvdJg== + +"@rollup/rollup-linux-arm-musleabihf@4.30.1": + version "4.30.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.30.1.tgz#b9db69b3f85f5529eb992936d8f411ee6d04297b" + integrity sha512-B8Rcyj9AV7ZlEFqvB5BubG5iO6ANDsRKlhIxySXcF1axXYUyqwBok+XZPgIYGBgs7LDXfWfifxhw0Ik57T0Yug== + +"@rollup/rollup-linux-arm64-gnu@4.30.1": + version "4.30.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.30.1.tgz#2550cf9bb4d47d917fd1ab4af756d7bbc3ee1528" + integrity sha512-hqVyueGxAj3cBKrAI4aFHLV+h0Lv5VgWZs9CUGqr1z0fZtlADVV1YPOij6AhcK5An33EXaxnDLmJdQikcn5NEw== + +"@rollup/rollup-linux-arm64-musl@4.30.1": + version "4.30.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.30.1.tgz#9d06b26d286c7dded6336961a2f83e48330e0c80" + integrity sha512-i4Ab2vnvS1AE1PyOIGp2kXni69gU2DAUVt6FSXeIqUCPIR3ZlheMW3oP2JkukDfu3PsexYRbOiJrY+yVNSk9oA== + +"@rollup/rollup-linux-loongarch64-gnu@4.30.1": + version "4.30.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.30.1.tgz#e957bb8fee0c8021329a34ca8dfa825826ee0e2e" + integrity sha512-fARcF5g296snX0oLGkVxPmysetwUk2zmHcca+e9ObOovBR++9ZPOhqFUM61UUZ2EYpXVPN1redgqVoBB34nTpQ== + +"@rollup/rollup-linux-powerpc64le-gnu@4.30.1": + version "4.30.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.30.1.tgz#e8585075ddfb389222c5aada39ea62d6d2511ccc" + integrity sha512-GLrZraoO3wVT4uFXh67ElpwQY0DIygxdv0BNW9Hkm3X34wu+BkqrDrkcsIapAY+N2ATEbvak0XQ9gxZtCIA5Rw== + +"@rollup/rollup-linux-riscv64-gnu@4.30.1": + version "4.30.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.30.1.tgz#7d0d40cee7946ccaa5a4e19a35c6925444696a9e" + integrity sha512-0WKLaAUUHKBtll0wvOmh6yh3S0wSU9+yas923JIChfxOaaBarmb/lBKPF0w/+jTVozFnOXJeRGZ8NvOxvk/jcw== + +"@rollup/rollup-linux-s390x-gnu@4.30.1": + version "4.30.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.30.1.tgz#c2dcd8a4b08b2f2778eceb7a5a5dfde6240ebdea" + integrity sha512-GWFs97Ruxo5Bt+cvVTQkOJ6TIx0xJDD/bMAOXWJg8TCSTEK8RnFeOeiFTxKniTc4vMIaWvCplMAFBt9miGxgkA== + +"@rollup/rollup-linux-x64-gnu@4.30.1": + version "4.30.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.30.1.tgz#183637d91456877cb83d0a0315eb4788573aa588" + integrity sha512-UtgGb7QGgXDIO+tqqJ5oZRGHsDLO8SlpE4MhqpY9Llpzi5rJMvrK6ZGhsRCST2abZdBqIBeXW6WPD5fGK5SDwg== + +"@rollup/rollup-linux-x64-musl@4.30.1": + version "4.30.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.30.1.tgz#036a4c860662519f1f9453807547fd2a11d5bb01" + integrity sha512-V9U8Ey2UqmQsBT+xTOeMzPzwDzyXmnAoO4edZhL7INkwQcaW1Ckv3WJX3qrrp/VHaDkEWIBWhRwP47r8cdrOow== + +"@rollup/rollup-win32-arm64-msvc@4.30.1": + version "4.30.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.30.1.tgz#51cad812456e616bfe4db5238fb9c7497e042a52" + integrity sha512-WabtHWiPaFF47W3PkHnjbmWawnX/aE57K47ZDT1BXTS5GgrBUEpvOzq0FI0V/UYzQJgdb8XlhVNH8/fwV8xDjw== + +"@rollup/rollup-win32-ia32-msvc@4.30.1": + version "4.30.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.30.1.tgz#661c8b3e4cd60f51deaa39d153aac4566e748e5e" + integrity sha512-pxHAU+Zv39hLUTdQQHUVHf4P+0C47y/ZloorHpzs2SXMRqeAWmGghzAhfOlzFHHwjvgokdFAhC4V+6kC1lRRfw== + +"@rollup/rollup-win32-x64-msvc@4.30.1": + version "4.30.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.30.1.tgz#73bf1885ff052b82fbb0f82f8671f73c36e9137c" + integrity sha512-D6qjsXGcvhTjv0kI4fU8tUuBDF/Ueee4SVX79VfNDXZa64TfCW1Slkb6Z7O1p7vflqZjcmOVdZlqf8gvJxc6og== + +"@rtsao/scc@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" + integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== -"@polkadot/x-textdecoder@12.6.2": - version "12.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz#b86da0f8e8178f1ca31a7158257e92aea90b10e4" - integrity sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w== - dependencies: - "@polkadot/x-global" "12.6.2" - tslib "^2.6.2" +"@scure/base@^1.1.1", "@scure/base@^1.1.7": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.2.1.tgz#dd0b2a533063ca612c17aa9ad26424a2ff5aa865" + integrity sha512-DGmGtC8Tt63J5GfHgfl5CuAXh96VF/LD8K9Hr/Gv0J2lAoRGlPOMpqMpMbCTOoOJMZCk2Xt+DskdDyn6dEFdzQ== -"@polkadot/x-textencoder@12.6.2": - version "12.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz#81d23bd904a2c36137a395c865c5fefa21abfb44" - integrity sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw== - dependencies: - "@polkadot/x-global" "12.6.2" - tslib "^2.6.2" +"@sec-ant/readable-stream@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz#60de891bb126abfdc5410fdc6166aca065f10a0c" + integrity sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg== -"@polkadot/x-ws@^12.6.2": - version "12.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-ws/-/x-ws-12.6.2.tgz#b99094d8e53a03be1de903d13ba59adaaabc767a" - integrity sha512-cGZWo7K5eRRQCRl2LrcyCYsrc3lRbTlixZh3AzgU8uX4wASVGRlNWi/Hf4TtHNe1ExCDmxabJzdIsABIfrr7xw== - dependencies: - "@polkadot/x-global" "12.6.2" - tslib "^2.6.2" - ws "^8.15.1" - -"@rollup/rollup-android-arm-eabi@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz#b98786c1304b4ff8db3a873180b778649b5dff2b" - integrity sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg== - -"@rollup/rollup-android-arm64@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.0.tgz#8833679af11172b1bf1ab7cb3bad84df4caf0c9e" - integrity sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q== - -"@rollup/rollup-darwin-arm64@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.0.tgz#ef02d73e0a95d406e0eb4fd61a53d5d17775659b" - integrity sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g== - -"@rollup/rollup-darwin-x64@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.0.tgz#3ce5b9bcf92b3341a5c1c58a3e6bcce0ea9e7455" - integrity sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg== - -"@rollup/rollup-linux-arm-gnueabihf@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.0.tgz#3d3d2c018bdd8e037c6bfedd52acfff1c97e4be4" - integrity sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ== - -"@rollup/rollup-linux-arm64-gnu@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.0.tgz#5fc8cc978ff396eaa136d7bfe05b5b9138064143" - integrity sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w== - -"@rollup/rollup-linux-arm64-musl@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.0.tgz#f2ae7d7bed416ffa26d6b948ac5772b520700eef" - integrity sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw== - -"@rollup/rollup-linux-riscv64-gnu@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.0.tgz#303d57a328ee9a50c85385936f31cf62306d30b6" - integrity sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA== - -"@rollup/rollup-linux-x64-gnu@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.0.tgz#f672f6508f090fc73f08ba40ff76c20b57424778" - integrity sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA== - -"@rollup/rollup-linux-x64-musl@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.0.tgz#d2f34b1b157f3e7f13925bca3288192a66755a89" - integrity sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw== - -"@rollup/rollup-win32-arm64-msvc@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.0.tgz#8ffecc980ae4d9899eb2f9c4ae471a8d58d2da6b" - integrity sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA== - -"@rollup/rollup-win32-ia32-msvc@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.0.tgz#a7505884f415662e088365b9218b2b03a88fc6f2" - integrity sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw== - -"@rollup/rollup-win32-x64-msvc@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz#6abd79db7ff8d01a58865ba20a63cfd23d9e2a10" - integrity sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw== - -"@scure/base@^1.1.1", "@scure/base@^1.1.5": - version "1.1.7" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.7.tgz#fe973311a5c6267846aa131bc72e96c5d40d2b30" - integrity sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g== - -"@sinclair/typebox@^0.27.8": - version "0.27.8" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" - integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== +"@sindresorhus/merge-streams@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz#abb11d99aeb6d27f1b563c38147a72d50058e339" + integrity sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ== "@sqltools/formatter@^1.2.5": version "1.2.5" @@ -1180,112 +978,59 @@ integrity sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw== "@substrate/connect-extension-protocol@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@substrate/connect-extension-protocol/-/connect-extension-protocol-2.0.0.tgz#badaa6e6b5f7c7d56987d778f4944ddb83cd9ea7" - integrity sha512-nKu8pDrE3LNCEgJjZe1iGXzaD6OSIDD4Xzz/yo4KO9mQ6LBvf49BVrt4qxBFGL6++NneLiWUZGoh+VSd4PyVIg== - -"@substrate/connect-known-chains@^1.1.1": - version "1.1.6" - resolved "https://registry.yarnpkg.com/@substrate/connect-known-chains/-/connect-known-chains-1.1.6.tgz#2627d329b82b46c7d745752c48c73e1b8ce6ac81" - integrity sha512-JwtdGbnK3ZqrY1qp3Ifr/p648sp9hG0Q715h4nRghnqZJnMQIiLKaFkcLnvrAiYQD3zNTYDztHidy5Q/u0TcbQ== - -"@substrate/connect-known-chains@^1.1.4": - version "1.1.8" - resolved "https://registry.yarnpkg.com/@substrate/connect-known-chains/-/connect-known-chains-1.1.8.tgz#ab54100c9fd102212b819231477393adc435e83a" - integrity sha512-W0Cpnk//LoMTu5BGDCRRg5NHFR2aZ9OJtLGSgRyq1RP39dQGpoVZIgNC6z+SWRzlmOz3gIgkUCwGvOKVt2BabA== + version "2.2.1" + resolved "https://registry.yarnpkg.com/@substrate/connect-extension-protocol/-/connect-extension-protocol-2.2.1.tgz#f36ae92166bdd5e4c55f8cdf149ab238f95eb26b" + integrity sha512-GoafTgm/Jey9E4Xlj4Z5ZBt/H4drH2CNq8VrAro80rtoznrXnFDNVivLQzZN0Xaj2g8YXSn9pC9Oc9IovYZJXw== -"@substrate/connect@0.8.10": - version "0.8.10" - resolved "https://registry.yarnpkg.com/@substrate/connect/-/connect-0.8.10.tgz#810b6589f848828aa840c731a1f36b84fe0e5956" - integrity sha512-DIyQ13DDlXqVFnLV+S6/JDgiGowVRRrh18kahieJxhgvzcWicw5eLc6jpfQ0moVVLBYkO7rctB5Wreldwpva8w== - dependencies: - "@substrate/connect-extension-protocol" "^2.0.0" - "@substrate/connect-known-chains" "^1.1.4" - "@substrate/light-client-extension-helpers" "^0.0.6" - smoldot "2.0.22" +"@substrate/connect-known-chains@^1.1.5": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@substrate/connect-known-chains/-/connect-known-chains-1.9.0.tgz#c0878ac2e83bfc2270cbeeaa3cd23596bde0cf84" + integrity sha512-R7yE0kIRUnvNlMiYramQ+dQwSY0ZpqRJ1mK8hLKlvCbEMqjSFa0n/WYYG6/bst9nNA1O6OZLWpvMso6yhENe3A== -"@substrate/connect@0.8.8": - version "0.8.8" - resolved "https://registry.yarnpkg.com/@substrate/connect/-/connect-0.8.8.tgz#80879f2241e2bd4f24a9aa25d7997fd91a5e68e3" - integrity sha512-zwaxuNEVI9bGt0rT8PEJiXOyebLIo6QN1SyiAHRPBOl6g3Sy0KKdSN8Jmyn++oXhVRD8aIe75/V8ZkS81T+BPQ== +"@substrate/connect@0.8.11": + version "0.8.11" + resolved "https://registry.yarnpkg.com/@substrate/connect/-/connect-0.8.11.tgz#983ec69a05231636e217b573b8130a6b942af69f" + integrity sha512-ofLs1PAO9AtDdPbdyTYj217Pe+lBfTLltdHDs3ds8no0BseoLeAGxpz1mHfi7zB4IxI3YyAiLjH6U8cw4pj4Nw== dependencies: "@substrate/connect-extension-protocol" "^2.0.0" - "@substrate/connect-known-chains" "^1.1.1" - "@substrate/light-client-extension-helpers" "^0.0.4" - smoldot "2.0.22" - -"@substrate/light-client-extension-helpers@^0.0.4": - version "0.0.4" - resolved "https://registry.yarnpkg.com/@substrate/light-client-extension-helpers/-/light-client-extension-helpers-0.0.4.tgz#a5958d5c1aac7df69f55bd90991aa935500f8124" - integrity sha512-vfKcigzL0SpiK+u9sX6dq2lQSDtuFLOxIJx2CKPouPEHIs8C+fpsufn52r19GQn+qDhU8POMPHOVoqLktj8UEA== - dependencies: - "@polkadot-api/client" "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" - "@polkadot-api/json-rpc-provider" "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" - "@polkadot-api/json-rpc-provider-proxy" "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" - "@polkadot-api/substrate-client" "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" - "@substrate/connect-extension-protocol" "^2.0.0" - "@substrate/connect-known-chains" "^1.1.1" - rxjs "^7.8.1" + "@substrate/connect-known-chains" "^1.1.5" + "@substrate/light-client-extension-helpers" "^1.0.0" + smoldot "2.0.26" -"@substrate/light-client-extension-helpers@^0.0.6": - version "0.0.6" - resolved "https://registry.yarnpkg.com/@substrate/light-client-extension-helpers/-/light-client-extension-helpers-0.0.6.tgz#bec1c7997241226db50b44ad85a992b4348d21c3" - integrity sha512-girltEuxQ1BvkJWmc8JJlk4ZxnlGXc/wkLcNguhY+UoDEMBK0LsdtfzQKIfrIehi4QdeSBlFEFBoI4RqPmsZzA== +"@substrate/light-client-extension-helpers@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@substrate/light-client-extension-helpers/-/light-client-extension-helpers-1.0.0.tgz#7b60368c57e06e5cf798c6557422d12e6d81f1ff" + integrity sha512-TdKlni1mBBZptOaeVrKnusMg/UBpWUORNDv5fdCaJklP4RJiFOzBCrzC+CyVI5kQzsXBisZ+2pXm+rIjS38kHg== dependencies: - "@polkadot-api/json-rpc-provider" "0.0.1" - "@polkadot-api/json-rpc-provider-proxy" "0.0.1" - "@polkadot-api/observable-client" "0.1.0" - "@polkadot-api/substrate-client" "0.0.1" + "@polkadot-api/json-rpc-provider" "^0.0.1" + "@polkadot-api/json-rpc-provider-proxy" "^0.1.0" + "@polkadot-api/observable-client" "^0.3.0" + "@polkadot-api/substrate-client" "^0.1.2" "@substrate/connect-extension-protocol" "^2.0.0" - "@substrate/connect-known-chains" "^1.1.4" + "@substrate/connect-known-chains" "^1.1.5" rxjs "^7.8.1" -"@substrate/ss58-registry@^1.44.0": - version "1.48.0" - resolved "https://registry.yarnpkg.com/@substrate/ss58-registry/-/ss58-registry-1.48.0.tgz#b50b577b491274dbab55711d2e933456637e73d0" - integrity sha512-lE9TGgtd93fTEIoHhSdtvSFBoCsvTbqiCvQIMvX4m6BO/hESywzzTzTFMVP1doBwDDMAN4lsMfIM3X3pdmt7kQ== +"@substrate/ss58-registry@^1.51.0": + version "1.51.0" + resolved "https://registry.yarnpkg.com/@substrate/ss58-registry/-/ss58-registry-1.51.0.tgz#39e0341eb4069c2d3e684b93f0d8cb0bec572383" + integrity sha512-TWDurLiPxndFgKjVavCniytBIw+t4ViOi7TYp9h/D0NMmkEc9klFTo+827eyEJ0lELpqO207Ey7uGxUa+BS1jQ== "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== -"@tsconfig/node10@^1.0.7": - version "1.0.10" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.10.tgz#b7ebd3adfa7750628d100594f6726b054d2c33b2" - integrity sha512-PiaIWIoPvO6qm6t114ropMCagj6YAF24j9OkCA2mJDXFnlionEwhsBCJ8yek4aib575BI3OkART/90WsgHgLWw== - -"@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== - -"@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== - -"@tsconfig/node16@^1.0.2": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" - integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== - -"@types/bn.js@^5.1.5": - version "5.1.5" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.5.tgz#2e0dacdcce2c0f16b905d20ff87aedbc6f7b4bf0" - integrity sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A== +"@types/bn.js@^5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.6.tgz#9ba818eec0c85e4d3c679518428afdf611d03203" + integrity sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w== dependencies: "@types/node" "*" -"@types/estree@1.0.5", "@types/estree@^1.0.0": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== - -"@types/json-schema@^7.0.15": - version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" - integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== +"@types/estree@1.0.6", "@types/estree@^1.0.0": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" + integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== "@types/json5@^0.0.29": version "0.0.29" @@ -1293,39 +1038,32 @@ integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/node@*": - version "20.14.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.7.tgz#342cada27f97509eb8eb2dbc003edf21ce8ab5a8" - integrity sha512-uTr2m2IbJJucF3KUxgnGOZvYbN0QgkGyWxG6973HCpMYFy2KfcgYuIwkJQMQkt1VbBMlvWRbpshFTLxnxCZjKQ== + version "22.10.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.5.tgz#95af89a3fb74a2bb41ef9927f206e6472026e48b" + integrity sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ== dependencies: - undici-types "~5.26.4" + undici-types "~6.20.0" "@types/node@^20.11.30": - version "20.11.30" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.30.tgz#9c33467fc23167a347e73834f788f4b9f399d66f" - integrity sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw== + version "20.17.12" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.17.12.tgz#ee3b7d25a522fd95608c1b3f02921c97b93fcbd6" + integrity sha512-vo/wmBgMIiEA23A/knMfn/cf37VnuF52nZh5ZoW0GWt4e4sxNquibrMRJ7UQsA06+MBx9r/H1jsI9grYjQCQlw== dependencies: - undici-types "~5.26.4" - -"@types/semver@^7.5.8": - version "7.5.8" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" - integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== + undici-types "~6.19.2" "@typescript-eslint/eslint-plugin@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.7.0.tgz#bf34a02f221811505b8bf2f31060c8560c1bb0a3" - integrity sha512-GJWR0YnfrKnsRoluVO3PRb9r5aMZriiMMM/RHj5nnTrBy1/wIgk76XCtCKcnXGjpZQJQRFtGV9/0JJ6n30uwpQ== + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz#b16d3cf3ee76bf572fdf511e79c248bdec619ea3" + integrity sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "7.7.0" - "@typescript-eslint/type-utils" "7.7.0" - "@typescript-eslint/utils" "7.7.0" - "@typescript-eslint/visitor-keys" "7.7.0" - debug "^4.3.4" + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/type-utils" "7.18.0" + "@typescript-eslint/utils" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" graphemer "^1.4.0" ignore "^5.3.1" natural-compare "^1.4.0" - semver "^7.6.0" ts-api-utils "^1.3.0" "@typescript-eslint/parser@^6.4.0": @@ -1340,14 +1078,14 @@ debug "^4.3.4" "@typescript-eslint/parser@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.7.0.tgz#6b1b3ce76c5de002c43af8ae933613b0f2b4bcc6" - integrity sha512-fNcDm3wSwVM8QYL4HKVBggdIPAy9Q41vcvC/GtDobw3c4ndVT3K6cqudUmjHPw8EAp4ufax0o58/xvWaP2FmTg== - dependencies: - "@typescript-eslint/scope-manager" "7.7.0" - "@typescript-eslint/types" "7.7.0" - "@typescript-eslint/typescript-estree" "7.7.0" - "@typescript-eslint/visitor-keys" "7.7.0" + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.18.0.tgz#83928d0f1b7f4afa974098c64b5ce6f9051f96a0" + integrity sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg== + dependencies: + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/typescript-estree" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" debug "^4.3.4" "@typescript-eslint/scope-manager@6.21.0": @@ -1358,21 +1096,21 @@ "@typescript-eslint/types" "6.21.0" "@typescript-eslint/visitor-keys" "6.21.0" -"@typescript-eslint/scope-manager@7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.7.0.tgz#3f0db079b275bb8b0cb5be7613fb3130cfb5de77" - integrity sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw== +"@typescript-eslint/scope-manager@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz#c928e7a9fc2c0b3ed92ab3112c614d6bd9951c83" + integrity sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA== dependencies: - "@typescript-eslint/types" "7.7.0" - "@typescript-eslint/visitor-keys" "7.7.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" -"@typescript-eslint/type-utils@7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.7.0.tgz#36792ff4209a781b058de61631a48df17bdefbc5" - integrity sha512-bOp3ejoRYrhAlnT/bozNQi3nio9tIgv3U5C0mVDdZC7cpcQEDZXvq8inrHYghLVwuNABRqrMW5tzAv88Vy77Sg== +"@typescript-eslint/type-utils@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz#2165ffaee00b1fbbdd2d40aa85232dab6998f53b" + integrity sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA== dependencies: - "@typescript-eslint/typescript-estree" "7.7.0" - "@typescript-eslint/utils" "7.7.0" + "@typescript-eslint/typescript-estree" "7.18.0" + "@typescript-eslint/utils" "7.18.0" debug "^4.3.4" ts-api-utils "^1.3.0" @@ -1381,10 +1119,10 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== -"@typescript-eslint/types@7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.7.0.tgz#23af4d24bf9ce15d8d301236e3e3014143604f27" - integrity sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w== +"@typescript-eslint/types@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.18.0.tgz#b90a57ccdea71797ffffa0321e744f379ec838c9" + integrity sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ== "@typescript-eslint/typescript-estree@6.21.0": version "6.21.0" @@ -1400,13 +1138,13 @@ semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/typescript-estree@7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.0.tgz#b5dd6383b4c6a852d7b256a37af971e8982be97f" - integrity sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ== +"@typescript-eslint/typescript-estree@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz#b5868d486c51ce8f312309ba79bdb9f331b37931" + integrity sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA== dependencies: - "@typescript-eslint/types" "7.7.0" - "@typescript-eslint/visitor-keys" "7.7.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -1414,18 +1152,15 @@ semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/utils@7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.7.0.tgz#3d2b6606a60ac34f3c625facfb3b3ab7e126f58d" - integrity sha512-LKGAXMPQs8U/zMRFXDZOzmMKgFv3COlxUQ+2NMPhbqgVm6R1w+nU1i4836Pmxu9jZAuIeyySNrN/6Rc657ggig== +"@typescript-eslint/utils@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.18.0.tgz#bca01cde77f95fc6a8d5b0dbcbfb3d6ca4be451f" + integrity sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.15" - "@types/semver" "^7.5.8" - "@typescript-eslint/scope-manager" "7.7.0" - "@typescript-eslint/types" "7.7.0" - "@typescript-eslint/typescript-estree" "7.7.0" - semver "^7.6.0" + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/typescript-estree" "7.18.0" "@typescript-eslint/visitor-keys@6.21.0": version "6.21.0" @@ -1435,62 +1170,90 @@ "@typescript-eslint/types" "6.21.0" eslint-visitor-keys "^3.4.1" -"@typescript-eslint/visitor-keys@7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.0.tgz#950148cf1ac11562a2d903fdf7acf76714a2dc9e" - integrity sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA== +"@typescript-eslint/visitor-keys@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz#0564629b6124d67607378d0f0332a0495b25e7d7" + integrity sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg== dependencies: - "@typescript-eslint/types" "7.7.0" + "@typescript-eslint/types" "7.18.0" eslint-visitor-keys "^3.4.3" "@ungap/structured-clone@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" - integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + version "1.2.1" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.1.tgz#28fa185f67daaf7b7a1a8c1d445132c5d979f8bd" + integrity sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA== -"@vitest/expect@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-1.4.0.tgz#d64e17838a20007fecd252397f9b96a1ca81bfb0" - integrity sha512-Jths0sWCJZ8BxjKe+p+eKsoqev1/T8lYcrjavEaz8auEJ4jAVY0GwW3JKmdVU4mmNPLPHixh4GNXP7GFtAiDHA== +"@vitest/expect@2.1.8": + version "2.1.8" + resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-2.1.8.tgz#13fad0e8d5a0bf0feb675dcf1d1f1a36a1773bc1" + integrity sha512-8ytZ/fFHq2g4PJVAtDX57mayemKgDR6X3Oa2Foro+EygiOJHUXhCqBAAKQYYajZpFoIfvBCF1j6R6IYRSIUFuw== dependencies: - "@vitest/spy" "1.4.0" - "@vitest/utils" "1.4.0" - chai "^4.3.10" + "@vitest/spy" "2.1.8" + "@vitest/utils" "2.1.8" + chai "^5.1.2" + tinyrainbow "^1.2.0" -"@vitest/runner@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-1.4.0.tgz#907c2d17ad5975b70882c25ab7a13b73e5a28da9" - integrity sha512-EDYVSmesqlQ4RD2VvWo3hQgTJ7ZrFQ2VSJdfiJiArkCerDAGeyF1i6dHkmySqk573jLp6d/cfqCN+7wUB5tLgg== +"@vitest/mocker@2.1.8": + version "2.1.8" + resolved "https://registry.yarnpkg.com/@vitest/mocker/-/mocker-2.1.8.tgz#51dec42ac244e949d20009249e033e274e323f73" + integrity sha512-7guJ/47I6uqfttp33mgo6ga5Gr1VnL58rcqYKyShoRK9ebu8T5Rs6HN3s1NABiBeVTdWNrwUMcHH54uXZBN4zA== dependencies: - "@vitest/utils" "1.4.0" - p-limit "^5.0.0" - pathe "^1.1.1" + "@vitest/spy" "2.1.8" + estree-walker "^3.0.3" + magic-string "^0.30.12" -"@vitest/snapshot@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-1.4.0.tgz#2945b3fb53767a3f4f421919e93edfef2935b8bd" - integrity sha512-saAFnt5pPIA5qDGxOHxJ/XxhMFKkUSBJmVt5VgDsAqPTX6JP326r5C/c9UuCMPoXNzuudTPsYDZCoJ5ilpqG2A== +"@vitest/pretty-format@2.1.8", "@vitest/pretty-format@^2.1.8": + version "2.1.8" + resolved "https://registry.yarnpkg.com/@vitest/pretty-format/-/pretty-format-2.1.8.tgz#88f47726e5d0cf4ba873d50c135b02e4395e2bca" + integrity sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ== dependencies: - magic-string "^0.30.5" - pathe "^1.1.1" - pretty-format "^29.7.0" + tinyrainbow "^1.2.0" -"@vitest/spy@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-1.4.0.tgz#cf953c93ae54885e801cbe6b408a547ae613f26c" - integrity sha512-Ywau/Qs1DzM/8Uc+yA77CwSegizMlcgTJuYGAi0jujOteJOUf1ujunHThYo243KG9nAyWT3L9ifPYZ5+As/+6Q== +"@vitest/runner@2.1.8": + version "2.1.8" + resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-2.1.8.tgz#b0e2dd29ca49c25e9323ea2a45a5125d8729759f" + integrity sha512-17ub8vQstRnRlIU5k50bG+QOMLHRhYPAna5tw8tYbj+jzjcspnwnwtPtiOlkuKC4+ixDPTuLZiqiWWQ2PSXHVg== dependencies: - tinyspy "^2.2.0" + "@vitest/utils" "2.1.8" + pathe "^1.1.2" -"@vitest/utils@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-1.4.0.tgz#ea6297e0d329f9ff0a106f4e1f6daf3ff6aad3f0" - integrity sha512-mx3Yd1/6e2Vt/PUC98DcqTirtfxUyAZ32uK82r8rZzbtBeBo+nqgnjx/LvqQdWsrvNtm14VmurNgcf4nqY5gJg== +"@vitest/snapshot@2.1.8": + version "2.1.8" + resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-2.1.8.tgz#d5dc204f4b95dc8b5e468b455dfc99000047d2de" + integrity sha512-20T7xRFbmnkfcmgVEz+z3AU/3b0cEzZOt/zmnvZEctg64/QZbSDJEVm9fLnnlSi74KibmRsO9/Qabi+t0vCRPg== dependencies: - diff-sequences "^29.6.3" - estree-walker "^3.0.3" - loupe "^2.3.7" - pretty-format "^29.7.0" + "@vitest/pretty-format" "2.1.8" + magic-string "^0.30.12" + pathe "^1.1.2" + +"@vitest/spy@2.1.8": + version "2.1.8" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-2.1.8.tgz#bc41af3e1e6a41ae3b67e51f09724136b88fa447" + integrity sha512-5swjf2q95gXeYPevtW0BLk6H8+bPlMb4Vw/9Em4hFxDcaOxS+e0LOX4yqNxoHzMR2akEB2xfpnWUzkZokmgWDg== + dependencies: + tinyspy "^3.0.2" + +"@vitest/ui@2.1.8": + version "2.1.8" + resolved "https://registry.yarnpkg.com/@vitest/ui/-/ui-2.1.8.tgz#4a4d88e20bcced4c8710826cd4e2795f5ec1f0a1" + integrity sha512-5zPJ1fs0ixSVSs5+5V2XJjXLmNzjugHRyV11RqxYVR+oMcogZ9qTuSfKW+OcTV0JeFNznI83BNylzH6SSNJ1+w== + dependencies: + "@vitest/utils" "2.1.8" + fflate "^0.8.2" + flatted "^3.3.1" + pathe "^1.1.2" + sirv "^3.0.0" + tinyglobby "^0.2.10" + tinyrainbow "^1.2.0" + +"@vitest/utils@2.1.8": + version "2.1.8" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-2.1.8.tgz#f8ef85525f3362ebd37fd25d268745108d6ae388" + integrity sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA== + dependencies: + "@vitest/pretty-format" "2.1.8" + loupe "^3.1.2" + tinyrainbow "^1.2.0" abbrev@1: version "1.1.1" @@ -1509,15 +1272,10 @@ acorn-jsx@^5.3.2: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-walk@^8.1.1, acorn-walk@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" - integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== - -acorn@^8.11.3, acorn@^8.4.1, acorn@^8.9.0: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== +acorn@^8.9.0: + version "8.14.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" + integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== agent-base@6, agent-base@^6.0.2: version "6.0.2" @@ -1527,9 +1285,9 @@ agent-base@6, agent-base@^6.0.2: debug "4" agentkeepalive@^4.1.3: - version "4.5.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" - integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== + version "4.6.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.6.0.tgz#35f73e94b3f40bf65f105219c623ad19c136ea6a" + integrity sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ== dependencies: humanize-ms "^1.2.1" @@ -1557,9 +1315,9 @@ ansi-regex@^5.0.1: integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + version "6.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" + integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" @@ -1568,11 +1326,6 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - ansi-styles@^6.1.0: version "6.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" @@ -1601,32 +1354,25 @@ are-we-there-yet@^3.0.0: delegates "^1.0.0" readable-stream "^3.6.0" -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - argparse@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -aria-query@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" - integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== - dependencies: - dequal "^2.0.3" +aria-query@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.2.tgz#93f81a43480e33a338f19163a3d10a50c01dcd59" + integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw== -array-buffer-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" - integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== +array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" + integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== dependencies: - call-bind "^1.0.5" - is-array-buffer "^3.0.4" + call-bound "^1.0.3" + is-array-buffer "^3.0.5" -array-includes@^3.1.6, array-includes@^3.1.7: +array-includes@^3.1.6, array-includes@^3.1.8: version "3.1.8" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== @@ -1643,7 +1389,7 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.findlastindex@^1.2.3: +array.prototype.findlastindex@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== @@ -1656,43 +1402,42 @@ array.prototype.findlastindex@^1.2.3: es-shim-unscopables "^1.0.2" array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" - integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== + version "1.3.3" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz#534aaf9e6e8dd79fb6b9a9917f839ef1ec63afe5" + integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" array.prototype.flatmap@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" - integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== + version "1.3.3" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz#712cc792ae70370ae40586264629e33aab5dd38b" + integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" -arraybuffer.prototype.slice@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" - integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== +arraybuffer.prototype.slice@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" + integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== dependencies: array-buffer-byte-length "^1.0.1" - call-bind "^1.0.5" + call-bind "^1.0.8" define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.2.1" - get-intrinsic "^1.2.3" + es-abstract "^1.23.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" is-array-buffer "^3.0.4" - is-shared-array-buffer "^1.0.2" -assertion-error@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" - integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== +assertion-error@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-2.0.1.tgz#f641a196b335690b1070bf00b6e7593fec190bf7" + integrity sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA== ast-types-flow@^0.0.8: version "0.0.8" @@ -1716,26 +1461,24 @@ available-typed-arrays@^1.0.7: dependencies: possible-typed-array-names "^1.0.0" -axe-core@=4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.0.tgz#34ba5a48a8b564f67e103f0aa5768d76e15bbbbf" - integrity sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ== +axe-core@^4.10.0: + version "4.10.2" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.10.2.tgz#85228e3e1d8b8532a27659b332e39b7fa0e022df" + integrity sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w== -axios@^1.6.8: - version "1.7.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.2.tgz#b625db8a7051fbea61c35a3cbb3a1daa7b9c7621" - integrity sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw== +axios@^1.7.7: + version "1.7.9" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.9.tgz#d7d071380c132a24accda1b2cfc1535b79ec650a" + integrity sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw== dependencies: follow-redirects "^1.15.6" form-data "^4.0.0" proxy-from-env "^1.1.0" -axobject-query@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" - integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg== - dependencies: - dequal "^2.0.3" +axobject-query@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-4.1.0.tgz#28768c76d0e3cff21bc62a9e2d0b6ac30042a1ee" + integrity sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ== balanced-match@^1.0.0: version "1.0.2" @@ -1788,12 +1531,12 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== +braces@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: - fill-range "^7.0.1" + fill-range "^7.1.1" buffer@^5.5.0: version "5.7.1" @@ -1817,9 +1560,9 @@ builtin-modules@^3.3.0: integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== builtins@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" - integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== + version "5.1.0" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.1.0.tgz#6d85eeb360c4ebc166c3fdef922a15aa7316a5e8" + integrity sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg== dependencies: semver "^7.0.0" @@ -1852,34 +1595,47 @@ cacache@^15.2.0: tar "^6.0.2" unique-filename "^1.1.1" -call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz#32e5892e6361b29b0b545ba6f7763378daca2840" + integrity sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g== dependencies: - es-define-property "^1.0.0" es-errors "^1.3.0" function-bind "^1.1.2" + +call-bind@^1.0.7, call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" get-intrinsic "^1.2.4" - set-function-length "^1.2.1" + set-function-length "^1.2.2" + +call-bound@^1.0.2, call-bound@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.3.tgz#41cfd032b593e39176a71533ab4f384aa04fd681" + integrity sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA== + dependencies: + call-bind-apply-helpers "^1.0.1" + get-intrinsic "^1.2.6" callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -chai@^4.3.10: - version "4.4.1" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1" - integrity sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g== +chai@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/chai/-/chai-5.1.2.tgz#3afbc340b994ae3610ca519a6c70ace77ad4378d" + integrity sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw== dependencies: - assertion-error "^1.1.0" - check-error "^1.0.3" - deep-eql "^4.1.3" - get-func-name "^2.0.2" - loupe "^2.3.6" - pathval "^1.1.1" - type-detect "^4.0.8" + assertion-error "^2.0.1" + check-error "^2.1.1" + deep-eql "^5.0.1" + loupe "^3.1.0" + pathval "^2.0.0" chalk@^3.0.0: version "3.0.0" @@ -1897,12 +1653,10 @@ chalk@^4.0.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" -check-error@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" - integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== - dependencies: - get-func-name "^2.0.2" +check-error@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-2.1.1.tgz#87eb876ae71ee388fa0471fe423f494be1d96ccc" + integrity sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw== chownr@^1.1.1: version "1.1.4" @@ -1979,9 +1733,14 @@ combined-stream@^1.0.8: delayed-stream "~1.0.0" comlink@^4.4.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/comlink/-/comlink-4.4.1.tgz#e568b8e86410b809e8600eb2cf40c189371ef981" - integrity sha512-+1dlx0aY5Jo1vHy/tSsIGpSkN4tS9rZSW8FIhG0JH/crs9wwweswIo/POr451r7bZww3hFbPAKnTpimzL/mm4Q== + version "4.4.2" + resolved "https://registry.yarnpkg.com/comlink/-/comlink-4.4.2.tgz#cbbcd82742fbebc06489c28a183eedc5c60a2bca" + integrity sha512-OxGdvBmJuNKSCMO4NTl1L47VRp6xn2wG4F/2hYzB6tiCb709otOxtEYCSvK80PtjODfXXZu8ds+Nw5kVCjqd2g== + +commander@^13.1.0: + version "13.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-13.1.0.tgz#776167db68c78f38dcce1f9b8d7b8b9a488abf46" + integrity sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw== concat-map@0.0.1: version "0.0.1" @@ -2006,15 +1765,10 @@ console-control-strings@^1.1.0: resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" @@ -2030,30 +1784,30 @@ data-uri-to-buffer@^4.0.0: resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== -data-view-buffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" - integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== +data-view-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" + integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== dependencies: - call-bind "^1.0.6" + call-bound "^1.0.3" es-errors "^1.3.0" - is-data-view "^1.0.1" + is-data-view "^1.0.2" -data-view-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" - integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== +data-view-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" + integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== dependencies: - call-bind "^1.0.7" + call-bound "^1.0.3" es-errors "^1.3.0" - is-data-view "^1.0.1" + is-data-view "^1.0.2" -data-view-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" - integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== +data-view-byte-offset@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" + integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== dependencies: - call-bind "^1.0.6" + call-bound "^1.0.2" es-errors "^1.3.0" is-data-view "^1.0.1" @@ -2063,16 +1817,16 @@ dateformat@^4.6.3: integrity sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA== dayjs@^1.11.9: - version "1.11.11" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.11.tgz#dfe0e9d54c5f8b68ccf8ca5f72ac603e7e5ed59e" - integrity sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg== + version "1.11.13" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.13.tgz#92430b0139055c3ebb60150aa13e860a4b5a366c" + integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg== -debug@4, debug@^4.1.0, debug@^4.3.3, debug@^4.3.4: - version "4.3.5" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" - integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== +debug@4, debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@^4.3.7: + version "4.4.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== dependencies: - ms "2.1.2" + ms "^2.1.3" debug@^3.2.7: version "3.2.7" @@ -2081,13 +1835,6 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.3.1, debug@^4.3.2: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - decompress-response@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" @@ -2095,12 +1842,10 @@ decompress-response@^6.0.0: dependencies: mimic-response "^3.1.0" -deep-eql@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" - integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== - dependencies: - type-detect "^4.0.0" +deep-eql@^5.0.1: + version "5.0.2" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-5.0.2.tgz#4b756d8d770a9257300825d52a2c2cff99c3a341" + integrity sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q== deep-extend@^0.6.0: version "0.6.0" @@ -2121,7 +1866,7 @@ define-data-property@^1.0.1, define-data-property@^1.1.4: es-errors "^1.3.0" gopd "^1.0.1" -define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: +define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== @@ -2140,11 +1885,6 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== -dequal@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" - integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== - detect-libc@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" @@ -2160,16 +1900,6 @@ diff-match-patch@^1.0.0: resolved "https://registry.yarnpkg.com/diff-match-patch/-/diff-match-patch-1.0.5.tgz#abb584d5f10cd1196dfc55aa03701592ae3f7b37" integrity sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw== -diff-sequences@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" - integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -2192,9 +1922,18 @@ doctrine@^3.0.0: esutils "^2.0.2" dotenv@^16.0.3, dotenv@^16.4.5: - version "16.4.5" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" - integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== + version "16.4.7" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.7.tgz#0e20c5b82950140aa99be360a8a5f52335f53c26" + integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ== + +dunder-proto@^1.0.0, dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" eastasianwidth@^0.2.0: version "0.2.0" @@ -2235,141 +1974,77 @@ err-code@^2.0.2: resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== -es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.2: - version "1.23.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.2.tgz#693312f3940f967b8dd3eebacb590b01712622e0" - integrity sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w== +es-abstract@^1.23.2, es-abstract@^1.23.3, es-abstract@^1.23.5, es-abstract@^1.23.9: + version "1.23.9" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.9.tgz#5b45994b7de78dada5c1bebf1379646b32b9d606" + integrity sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA== dependencies: - array-buffer-byte-length "^1.0.1" - arraybuffer.prototype.slice "^1.0.3" + array-buffer-byte-length "^1.0.2" + arraybuffer.prototype.slice "^1.0.4" available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - data-view-buffer "^1.0.1" - data-view-byte-length "^1.0.1" - data-view-byte-offset "^1.0.0" - es-define-property "^1.0.0" + call-bind "^1.0.8" + call-bound "^1.0.3" + data-view-buffer "^1.0.2" + data-view-byte-length "^1.0.2" + data-view-byte-offset "^1.0.1" + es-define-property "^1.0.1" es-errors "^1.3.0" es-object-atoms "^1.0.0" - es-set-tostringtag "^2.0.3" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.6" - get-intrinsic "^1.2.4" - get-symbol-description "^1.0.2" - globalthis "^1.0.3" - gopd "^1.0.1" + es-set-tostringtag "^2.1.0" + es-to-primitive "^1.3.0" + function.prototype.name "^1.1.8" + get-intrinsic "^1.2.7" + get-proto "^1.0.0" + get-symbol-description "^1.1.0" + globalthis "^1.0.4" + gopd "^1.2.0" has-property-descriptors "^1.0.2" - has-proto "^1.0.3" - has-symbols "^1.0.3" + has-proto "^1.2.0" + has-symbols "^1.1.0" hasown "^2.0.2" - internal-slot "^1.0.7" - is-array-buffer "^3.0.4" + internal-slot "^1.1.0" + is-array-buffer "^3.0.5" is-callable "^1.2.7" - is-data-view "^1.0.1" - is-negative-zero "^2.0.3" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.3" - is-string "^1.0.7" - is-typed-array "^1.1.13" - is-weakref "^1.0.2" - object-inspect "^1.13.1" + is-data-view "^1.0.2" + is-regex "^1.2.1" + is-shared-array-buffer "^1.0.4" + is-string "^1.1.1" + is-typed-array "^1.1.15" + is-weakref "^1.1.0" + math-intrinsics "^1.1.0" + object-inspect "^1.13.3" object-keys "^1.1.1" - object.assign "^4.1.5" - regexp.prototype.flags "^1.5.2" - safe-array-concat "^1.1.2" - safe-regex-test "^1.0.3" - string.prototype.trim "^1.2.9" - string.prototype.trimend "^1.0.8" - string.prototype.trimstart "^1.0.7" - typed-array-buffer "^1.0.2" - typed-array-byte-length "^1.0.1" - typed-array-byte-offset "^1.0.2" - typed-array-length "^1.0.5" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.15" - -es-abstract@^1.23.1: - version "1.23.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" - integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== - dependencies: - array-buffer-byte-length "^1.0.1" - arraybuffer.prototype.slice "^1.0.3" - available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - data-view-buffer "^1.0.1" - data-view-byte-length "^1.0.1" - data-view-byte-offset "^1.0.0" - es-define-property "^1.0.0" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-set-tostringtag "^2.0.3" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.6" - get-intrinsic "^1.2.4" - get-symbol-description "^1.0.2" - globalthis "^1.0.3" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - has-proto "^1.0.3" - has-symbols "^1.0.3" - hasown "^2.0.2" - internal-slot "^1.0.7" - is-array-buffer "^3.0.4" - is-callable "^1.2.7" - is-data-view "^1.0.1" - is-negative-zero "^2.0.3" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.3" - is-string "^1.0.7" - is-typed-array "^1.1.13" - is-weakref "^1.0.2" - object-inspect "^1.13.1" - object-keys "^1.1.1" - object.assign "^4.1.5" - regexp.prototype.flags "^1.5.2" - safe-array-concat "^1.1.2" - safe-regex-test "^1.0.3" - string.prototype.trim "^1.2.9" - string.prototype.trimend "^1.0.8" + object.assign "^4.1.7" + own-keys "^1.0.1" + regexp.prototype.flags "^1.5.3" + safe-array-concat "^1.1.3" + safe-push-apply "^1.0.0" + safe-regex-test "^1.1.0" + set-proto "^1.0.0" + string.prototype.trim "^1.2.10" + string.prototype.trimend "^1.0.9" string.prototype.trimstart "^1.0.8" - typed-array-buffer "^1.0.2" - typed-array-byte-length "^1.0.1" - typed-array-byte-offset "^1.0.2" - typed-array-length "^1.0.6" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.15" - -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" + typed-array-buffer "^1.0.3" + typed-array-byte-length "^1.0.3" + typed-array-byte-offset "^1.0.4" + typed-array-length "^1.0.7" + unbox-primitive "^1.1.0" + which-typed-array "^1.1.18" + +es-define-property@^1.0.0, es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== -es-errors@^1.2.1, es-errors@^1.3.0: +es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-iterator-helpers@^1.0.15: - version "1.0.18" - resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz#4d3424f46b24df38d064af6fbbc89274e29ea69d" - integrity sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.0" - es-errors "^1.3.0" - es-set-tostringtag "^2.0.3" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - globalthis "^1.0.3" - has-property-descriptors "^1.0.2" - has-proto "^1.0.3" - has-symbols "^1.0.3" - internal-slot "^1.0.7" - iterator.prototype "^1.1.2" - safe-array-concat "^1.1.2" +es-module-lexer@^1.5.4: + version "1.6.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.6.0.tgz#da49f587fd9e68ee2404fe4e256c0c7d3a81be21" + integrity sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ== es-object-atoms@^1.0.0: version "1.0.0" @@ -2378,108 +2053,110 @@ es-object-atoms@^1.0.0: dependencies: es-errors "^1.3.0" -es-set-tostringtag@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" - integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== dependencies: - get-intrinsic "^1.2.4" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" has-tostringtag "^1.0.2" - hasown "^2.0.1" + hasown "^2.0.2" -es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: +es-shim-unscopables@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== dependencies: hasown "^2.0.0" -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== +es-to-primitive@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" + integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" + is-callable "^1.2.7" + is-date-object "^1.0.5" + is-symbol "^1.0.4" es6-error@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== -esbuild@^0.20.1: - version "0.20.2" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.20.2.tgz#9d6b2386561766ee6b5a55196c6d766d28c87ea1" - integrity sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g== +esbuild@^0.21.3: + version "0.21.5" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d" + integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw== optionalDependencies: - "@esbuild/aix-ppc64" "0.20.2" - "@esbuild/android-arm" "0.20.2" - "@esbuild/android-arm64" "0.20.2" - "@esbuild/android-x64" "0.20.2" - "@esbuild/darwin-arm64" "0.20.2" - "@esbuild/darwin-x64" "0.20.2" - "@esbuild/freebsd-arm64" "0.20.2" - "@esbuild/freebsd-x64" "0.20.2" - "@esbuild/linux-arm" "0.20.2" - "@esbuild/linux-arm64" "0.20.2" - "@esbuild/linux-ia32" "0.20.2" - "@esbuild/linux-loong64" "0.20.2" - "@esbuild/linux-mips64el" "0.20.2" - "@esbuild/linux-ppc64" "0.20.2" - "@esbuild/linux-riscv64" "0.20.2" - "@esbuild/linux-s390x" "0.20.2" - "@esbuild/linux-x64" "0.20.2" - "@esbuild/netbsd-x64" "0.20.2" - "@esbuild/openbsd-x64" "0.20.2" - "@esbuild/sunos-x64" "0.20.2" - "@esbuild/win32-arm64" "0.20.2" - "@esbuild/win32-ia32" "0.20.2" - "@esbuild/win32-x64" "0.20.2" - -esbuild@~0.19.10: - version "0.19.12" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" - integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg== + "@esbuild/aix-ppc64" "0.21.5" + "@esbuild/android-arm" "0.21.5" + "@esbuild/android-arm64" "0.21.5" + "@esbuild/android-x64" "0.21.5" + "@esbuild/darwin-arm64" "0.21.5" + "@esbuild/darwin-x64" "0.21.5" + "@esbuild/freebsd-arm64" "0.21.5" + "@esbuild/freebsd-x64" "0.21.5" + "@esbuild/linux-arm" "0.21.5" + "@esbuild/linux-arm64" "0.21.5" + "@esbuild/linux-ia32" "0.21.5" + "@esbuild/linux-loong64" "0.21.5" + "@esbuild/linux-mips64el" "0.21.5" + "@esbuild/linux-ppc64" "0.21.5" + "@esbuild/linux-riscv64" "0.21.5" + "@esbuild/linux-s390x" "0.21.5" + "@esbuild/linux-x64" "0.21.5" + "@esbuild/netbsd-x64" "0.21.5" + "@esbuild/openbsd-x64" "0.21.5" + "@esbuild/sunos-x64" "0.21.5" + "@esbuild/win32-arm64" "0.21.5" + "@esbuild/win32-ia32" "0.21.5" + "@esbuild/win32-x64" "0.21.5" + +esbuild@~0.23.0: + version "0.23.1" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.23.1.tgz#40fdc3f9265ec0beae6f59824ade1bd3d3d2dab8" + integrity sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg== optionalDependencies: - "@esbuild/aix-ppc64" "0.19.12" - "@esbuild/android-arm" "0.19.12" - "@esbuild/android-arm64" "0.19.12" - "@esbuild/android-x64" "0.19.12" - "@esbuild/darwin-arm64" "0.19.12" - "@esbuild/darwin-x64" "0.19.12" - "@esbuild/freebsd-arm64" "0.19.12" - "@esbuild/freebsd-x64" "0.19.12" - "@esbuild/linux-arm" "0.19.12" - "@esbuild/linux-arm64" "0.19.12" - "@esbuild/linux-ia32" "0.19.12" - "@esbuild/linux-loong64" "0.19.12" - "@esbuild/linux-mips64el" "0.19.12" - "@esbuild/linux-ppc64" "0.19.12" - "@esbuild/linux-riscv64" "0.19.12" - "@esbuild/linux-s390x" "0.19.12" - "@esbuild/linux-x64" "0.19.12" - "@esbuild/netbsd-x64" "0.19.12" - "@esbuild/openbsd-x64" "0.19.12" - "@esbuild/sunos-x64" "0.19.12" - "@esbuild/win32-arm64" "0.19.12" - "@esbuild/win32-ia32" "0.19.12" - "@esbuild/win32-x64" "0.19.12" + "@esbuild/aix-ppc64" "0.23.1" + "@esbuild/android-arm" "0.23.1" + "@esbuild/android-arm64" "0.23.1" + "@esbuild/android-x64" "0.23.1" + "@esbuild/darwin-arm64" "0.23.1" + "@esbuild/darwin-x64" "0.23.1" + "@esbuild/freebsd-arm64" "0.23.1" + "@esbuild/freebsd-x64" "0.23.1" + "@esbuild/linux-arm" "0.23.1" + "@esbuild/linux-arm64" "0.23.1" + "@esbuild/linux-ia32" "0.23.1" + "@esbuild/linux-loong64" "0.23.1" + "@esbuild/linux-mips64el" "0.23.1" + "@esbuild/linux-ppc64" "0.23.1" + "@esbuild/linux-riscv64" "0.23.1" + "@esbuild/linux-s390x" "0.23.1" + "@esbuild/linux-x64" "0.23.1" + "@esbuild/netbsd-x64" "0.23.1" + "@esbuild/openbsd-arm64" "0.23.1" + "@esbuild/openbsd-x64" "0.23.1" + "@esbuild/sunos-x64" "0.23.1" + "@esbuild/win32-arm64" "0.23.1" + "@esbuild/win32-ia32" "0.23.1" + "@esbuild/win32-x64" "0.23.1" escalade@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" - integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-compat-utils@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/eslint-compat-utils/-/eslint-compat-utils-0.5.0.tgz#f7b2eb2befec25a370fac76934d3f9189f312a65" - integrity sha512-dc6Y8tzEcSYZMHa+CMPLi/hyo1FzNeonbhJL7Ol0ccuKQkwopJcJBA9YL/xmMTLU1eKigXo9vj9nALElWYSowg== +eslint-compat-utils@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz#7fc92b776d185a70c4070d03fd26fde3d59652e4" + integrity sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q== dependencies: semver "^7.5.4" @@ -2529,66 +2206,67 @@ eslint-import-resolver-node@^0.3.9: is-core-module "^2.13.0" resolve "^1.22.4" -eslint-module-utils@^2.8.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz#52f2404300c3bd33deece9d7372fb337cc1d7c34" - integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q== +eslint-module-utils@^2.12.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz#fe4cfb948d61f49203d7b08871982b65b9af0b0b" + integrity sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg== dependencies: debug "^3.2.7" eslint-plugin-es-x@^7.5.0: - version "7.6.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-es-x/-/eslint-plugin-es-x-7.6.0.tgz#ccee7a4556c0f816d1ae88fd0eea21540e8ccd65" - integrity sha512-I0AmeNgevgaTR7y2lrVCJmGYF0rjoznpDvqV/kIkZSZbZ8Rw3eu4cGlvBBULScfkSOCzqKbff5LR4CNrV7mZHA== + version "7.8.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz#a207aa08da37a7923f2a9599e6d3eb73f3f92b74" + integrity sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ== dependencies: "@eslint-community/eslint-utils" "^4.1.2" - "@eslint-community/regexpp" "^4.6.0" - eslint-compat-utils "^0.5.0" + "@eslint-community/regexpp" "^4.11.0" + eslint-compat-utils "^0.5.1" eslint-plugin-import@^2.25.2: - version "2.29.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" - integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== + version "2.31.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz#310ce7e720ca1d9c0bb3f69adfd1c6bdd7d9e0e7" + integrity sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A== dependencies: - array-includes "^3.1.7" - array.prototype.findlastindex "^1.2.3" + "@rtsao/scc" "^1.1.0" + array-includes "^3.1.8" + array.prototype.findlastindex "^1.2.5" array.prototype.flat "^1.3.2" array.prototype.flatmap "^1.3.2" debug "^3.2.7" doctrine "^2.1.0" eslint-import-resolver-node "^0.3.9" - eslint-module-utils "^2.8.0" - hasown "^2.0.0" - is-core-module "^2.13.1" + eslint-module-utils "^2.12.0" + hasown "^2.0.2" + is-core-module "^2.15.1" is-glob "^4.0.3" minimatch "^3.1.2" - object.fromentries "^2.0.7" - object.groupby "^1.0.1" - object.values "^1.1.7" + object.fromentries "^2.0.8" + object.groupby "^1.0.3" + object.values "^1.2.0" semver "^6.3.1" + string.prototype.trimend "^1.0.8" tsconfig-paths "^3.15.0" eslint-plugin-jsx-a11y@^6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz#2fa9c701d44fcd722b7c771ec322432857fcbad2" - integrity sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA== + version "6.10.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz#d2812bb23bf1ab4665f1718ea442e8372e638483" + integrity sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q== dependencies: - "@babel/runtime" "^7.23.2" - aria-query "^5.3.0" - array-includes "^3.1.7" + aria-query "^5.3.2" + array-includes "^3.1.8" array.prototype.flatmap "^1.3.2" ast-types-flow "^0.0.8" - axe-core "=4.7.0" - axobject-query "^3.2.1" + axe-core "^4.10.0" + axobject-query "^4.1.0" damerau-levenshtein "^1.0.8" emoji-regex "^9.2.2" - es-iterator-helpers "^1.0.15" - hasown "^2.0.0" + hasown "^2.0.2" jsx-ast-utils "^3.3.5" language-tags "^1.0.9" minimatch "^3.1.2" - object.entries "^1.1.7" - object.fromentries "^2.0.7" + object.fromentries "^2.0.8" + safe-regex-test "^1.0.3" + string.prototype.includes "^2.0.1" "eslint-plugin-n@^15.0.0 || ^16.0.0 ": version "16.6.2" @@ -2608,17 +2286,17 @@ eslint-plugin-jsx-a11y@^6.8.0: semver "^7.5.3" eslint-plugin-prettier@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz#17cfade9e732cef32b5f5be53bd4e07afd8e67e1" - integrity sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw== + version "5.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz#d1c8f972d8f60e414c25465c163d16f209411f95" + integrity sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw== dependencies: prettier-linter-helpers "^1.0.0" - synckit "^0.8.6" + synckit "^0.9.1" eslint-plugin-promise@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz#269a3e2772f62875661220631bd4dafcb4083816" - integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig== + version "6.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.6.0.tgz#acd3fd7d55cead7a10f92cf698f36c0aafcd717a" + integrity sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ== eslint-scope@^7.2.2: version "7.2.2" @@ -2628,21 +2306,21 @@ eslint-scope@^7.2.2: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: +eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: version "3.4.3" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== eslint@^8.0.1: - version "8.57.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" - integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== + version "8.57.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" + integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.57.0" - "@humanwhocodes/config-array" "^0.11.14" + "@eslint/js" "8.57.1" + "@humanwhocodes/config-array" "^0.13.0" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" "@ungap/structured-clone" "^1.2.0" @@ -2687,9 +2365,9 @@ espree@^9.6.0, espree@^9.6.1: eslint-visitor-keys "^3.4.1" esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + version "1.6.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== dependencies: estraverse "^5.1.0" @@ -2732,26 +2410,34 @@ events@^3.3.0: resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -execa@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" - integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== +execa@^9.5.2: + version "9.5.2" + resolved "https://registry.yarnpkg.com/execa/-/execa-9.5.2.tgz#a4551034ee0795e241025d2f987dab3f4242dff2" + integrity sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q== dependencies: + "@sindresorhus/merge-streams" "^4.0.0" cross-spawn "^7.0.3" - get-stream "^8.0.1" - human-signals "^5.0.0" - is-stream "^3.0.0" - merge-stream "^2.0.0" - npm-run-path "^5.1.0" - onetime "^6.0.0" + figures "^6.1.0" + get-stream "^9.0.0" + human-signals "^8.0.0" + is-plain-obj "^4.1.0" + is-stream "^4.0.1" + npm-run-path "^6.0.0" + pretty-ms "^9.0.0" signal-exit "^4.1.0" - strip-final-newline "^3.0.0" + strip-final-newline "^4.0.0" + yoctocolors "^2.0.0" expand-template@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== +expect-type@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-1.1.0.tgz#a146e414250d13dfc49eafcfd1344a4060fa4c75" + integrity sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA== + fast-copy@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/fast-copy/-/fast-copy-3.0.2.tgz#59c68f59ccbcac82050ba992e0d5c389097c9d35" @@ -2768,15 +2454,15 @@ fast-diff@^1.1.2: integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== fast-glob@^3.2.9: - version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + version "3.3.3" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" glob-parent "^5.1.2" merge2 "^1.3.0" - micromatch "^4.0.4" + micromatch "^4.0.8" fast-json-stable-stringify@^2.0.0: version "2.1.0" @@ -2799,12 +2485,17 @@ fast-safe-stringify@^2.1.1: integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== fastq@^1.6.0: - version "1.17.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" - integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + version "1.18.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.18.0.tgz#d631d7e25faffea81887fe5ea8c9010e1b36fee0" + integrity sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw== dependencies: reusify "^1.0.4" +fdir@^6.4.2: + version "6.4.2" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.2.tgz#ddaa7ce1831b161bc3657bb99cb36e1622702689" + integrity sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ== + fetch-blob@^3.1.2, fetch-blob@^3.1.4: version "3.2.0" resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" @@ -2813,6 +2504,18 @@ fetch-blob@^3.1.2, fetch-blob@^3.1.4: node-domexception "^1.0.0" web-streams-polyfill "^3.0.3" +fflate@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.2.tgz#fc8631f5347812ad6028bbe4a2308b2792aa1dea" + integrity sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A== + +figures@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-6.1.0.tgz#935479f51865fa7479f6fa94fc6fc7ac14e62c4a" + integrity sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg== + dependencies: + is-unicode-supported "^2.0.0" + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -2825,10 +2528,10 @@ file-uri-to-path@1.0.0: resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" @@ -2849,15 +2552,15 @@ flat-cache@^3.0.4: keyv "^4.5.3" rimraf "^3.0.2" -flatted@^3.2.9: - version "3.3.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" - integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== +flatted@^3.2.9, flatted@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.2.tgz#adba1448a9841bec72b42c532ea23dbbedef1a27" + integrity sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA== follow-redirects@^1.15.6: - version "1.15.6" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" - integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== + version "1.15.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== for-each@^0.3.3: version "0.3.3" @@ -2867,17 +2570,17 @@ for-each@^0.3.3: is-callable "^1.1.3" foreground-child@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.2.1.tgz#767004ccf3a5b30df39bed90718bab43fe0a59f7" - integrity sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA== + version "3.3.0" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" + integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== dependencies: cross-spawn "^7.0.0" signal-exit "^4.0.1" form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + version "4.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.1.tgz#ba1076daaaa5bfd7e99c1a6cb02aa0a5cff90d48" + integrity sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" @@ -2917,15 +2620,17 @@ function-bind@^1.1.2: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" - integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== +function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" + integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" functions-have-names "^1.2.3" + hasown "^2.0.2" + is-callable "^1.2.7" functions-have-names@^1.2.3: version "1.2.3" @@ -2951,40 +2656,51 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-func-name@^2.0.1, get-func-name@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" - integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== - -get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== +get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.7.tgz#dcfcb33d3272e15f445d15124bc0a216189b9044" + integrity sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA== dependencies: + call-bind-apply-helpers "^1.0.1" + es-define-property "^1.0.1" es-errors "^1.3.0" + es-object-atoms "^1.0.0" function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" + get-proto "^1.0.0" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" -get-stream@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" - integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== +get-proto@^1.0.0, get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" -get-symbol-description@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" - integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== +get-stream@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-9.0.1.tgz#95157d21df8eb90d1647102b63039b1df60ebd27" + integrity sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA== dependencies: - call-bind "^1.0.5" + "@sec-ant/readable-stream" "^0.4.1" + is-stream "^4.0.1" + +get-symbol-description@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" + integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== + dependencies: + call-bound "^1.0.3" es-errors "^1.3.0" - get-intrinsic "^1.2.4" + get-intrinsic "^1.2.6" -get-tsconfig@^4.7.0, get-tsconfig@^4.7.2: - version "4.7.3" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.3.tgz#0498163d98f7b58484dd4906999c0c9d5f103f83" - integrity sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg== +get-tsconfig@^4.7.0, get-tsconfig@^4.7.5: + version "4.8.1" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.8.1.tgz#8995eb391ae6e1638d251118c7b56de7eb425471" + integrity sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg== dependencies: resolve-pkg-maps "^1.0.0" @@ -3008,9 +2724,9 @@ glob-parent@^6.0.2: is-glob "^4.0.3" glob@^10.3.10: - version "10.4.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.2.tgz#bed6b95dade5c1f80b4434daced233aee76160e5" - integrity sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w== + version "10.4.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" + integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== dependencies: foreground-child "^3.1.0" jackspeak "^3.1.2" @@ -3050,7 +2766,7 @@ globals@^13.19.0, globals@^13.24.0: dependencies: type-fest "^0.20.2" -globalthis@^1.0.1: +globalthis@^1.0.1, globalthis@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== @@ -3058,13 +2774,6 @@ globalthis@^1.0.1: define-properties "^1.2.1" gopd "^1.0.1" -globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== - dependencies: - define-properties "^1.1.3" - globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" @@ -3077,12 +2786,10 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" +gopd@^1.0.1, gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== graceful-fs@4.2.10: version "4.2.10" @@ -3099,10 +2806,10 @@ graphemer@^1.4.0: resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== +has-bigints@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe" + integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== has-flag@^4.0.0: version "4.0.0" @@ -3116,17 +2823,19 @@ has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: dependencies: es-define-property "^1.0.0" -has-proto@^1.0.1, has-proto@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" - integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== +has-proto@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" + integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== + dependencies: + dunder-proto "^1.0.0" -has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== -has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: +has-tostringtag@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== @@ -3138,7 +2847,7 @@ has-unicode@^2.0.1: resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== -hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: +hasown@^2.0.0, hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== @@ -3177,10 +2886,10 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" -human-signals@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" - integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== +human-signals@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-8.0.0.tgz#2d3d63481c7c2319f0373428b01ffe30da6df852" + integrity sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA== humanize-ms@^1.2.1: version "1.2.1" @@ -3197,9 +2906,9 @@ iconv-lite@^0.6.2: safer-buffer ">= 2.1.2 < 3.0.0" idb@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/idb/-/idb-8.0.0.tgz#33d7ed894ed36e23bcb542fb701ad579bfaad41f" - integrity sha512-l//qvlAKGmQO31Qn7xdzagVPPaHTxXx199MhrAFuVBTPqydcPYBWjkrbv4Y0ktB+GmWOiwHl237UUOrLmQxLvw== + version "8.0.1" + resolved "https://registry.yarnpkg.com/idb/-/idb-8.0.1.tgz#15e8be673413d6caf4beefacf086c8902d785e1e" + integrity sha512-EkBCzUZSdhJV8PxMSbeEV//xguVKZu9hZZulM+2gHXI0t2hGVU3eYE6/XnH77DS6FM2FY8wl17aDcu9vXpvLWQ== ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" @@ -3207,9 +2916,9 @@ ieee754@^1.1.13, ieee754@^1.2.1: integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore@^5.2.0, ignore@^5.2.4, ignore@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" - integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== import-fresh@^3.2.1: version "3.3.0" @@ -3252,14 +2961,14 @@ ini@^1.3.4, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -internal-slot@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" - integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== +internal-slot@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" + integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== dependencies: es-errors "^1.3.0" - hasown "^2.0.0" - side-channel "^1.0.4" + hasown "^2.0.2" + side-channel "^1.1.0" ip-address@^9.0.5: version "9.0.5" @@ -3269,35 +2978,39 @@ ip-address@^9.0.5: jsbn "1.1.0" sprintf-js "^1.1.3" -is-array-buffer@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" - integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== +is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" + integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" + call-bind "^1.0.8" + call-bound "^1.0.3" + get-intrinsic "^1.2.6" is-async-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" - integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.1.0.tgz#1d1080612c493608e93168fc4458c245074c06a6" + integrity sha512-GExz9MtyhlZyXYLxzlJRj5WUCE661zhDa1Yna52CN57AJsymh+DvXXjyveSioqSRdxvUrdKdvqB1b5cVKsNpWQ== dependencies: - has-tostringtag "^1.0.0" + call-bound "^1.0.3" + get-proto "^1.0.1" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== +is-bigint@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" + integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== dependencies: - has-bigints "^1.0.1" + has-bigints "^1.0.2" -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== +is-boolean-object@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.1.tgz#c20d0c654be05da4fbc23c562635c019e93daf89" + integrity sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng== dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" + call-bound "^1.0.2" + has-tostringtag "^1.0.2" is-builtin-module@^3.2.1: version "3.2.1" @@ -3306,43 +3019,46 @@ is-builtin-module@^3.2.1: dependencies: builtin-modules "^3.3.0" -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: +is-callable@^1.1.3, is-callable@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.12.1, is-core-module@^2.13.0, is-core-module@^2.13.1: - version "2.13.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" - integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== +is-core-module@^2.12.1, is-core-module@^2.13.0, is-core-module@^2.15.1, is-core-module@^2.16.0: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== dependencies: - hasown "^2.0.0" + hasown "^2.0.2" -is-data-view@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" - integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== +is-data-view@^1.0.1, is-data-view@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" + integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== dependencies: + call-bound "^1.0.2" + get-intrinsic "^1.2.6" is-typed-array "^1.1.13" -is-date-object@^1.0.1, is-date-object@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== +is-date-object@^1.0.5, is-date-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" + integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== dependencies: - has-tostringtag "^1.0.0" + call-bound "^1.0.2" + has-tostringtag "^1.0.2" is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -is-finalizationregistry@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" - integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== +is-finalizationregistry@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" + integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== dependencies: - call-bind "^1.0.2" + call-bound "^1.0.3" is-fullwidth-code-point@^3.0.0: version "3.0.0" @@ -3350,11 +3066,14 @@ is-fullwidth-code-point@^3.0.0: integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-generator-function@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca" + integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== dependencies: - has-tostringtag "^1.0.0" + call-bound "^1.0.3" + get-proto "^1.0.0" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" @@ -3373,17 +3092,13 @@ is-map@^2.0.3: resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== -is-negative-zero@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" - integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== +is-number-object@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" + integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== dependencies: - has-tostringtag "^1.0.0" + call-bound "^1.0.3" + has-tostringtag "^1.0.2" is-number@^7.0.0: version "7.0.0" @@ -3395,71 +3110,86 @@ is-path-inside@^3.0.3: resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== +is-plain-obj@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" + integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== + +is-regex@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" is-set@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== -is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" - integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== +is-shared-array-buffer@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" + integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== dependencies: - call-bind "^1.0.7" + call-bound "^1.0.3" -is-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" - integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== +is-stream@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-4.0.1.tgz#375cf891e16d2e4baec250b85926cffc14720d9b" + integrity sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A== -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== +is-string@^1.0.7, is-string@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" + integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== dependencies: - has-tostringtag "^1.0.0" + call-bound "^1.0.3" + has-tostringtag "^1.0.2" -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== +is-symbol@^1.0.4, is-symbol@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" + integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== dependencies: - has-symbols "^1.0.2" + call-bound "^1.0.2" + has-symbols "^1.1.0" + safe-regex-test "^1.1.0" -is-typed-array@^1.1.13: - version "1.1.13" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" - integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== +is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15: + version "1.1.15" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== dependencies: - which-typed-array "^1.1.14" + which-typed-array "^1.1.16" + +is-unicode-supported@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz#09f0ab0de6d3744d48d265ebb98f65d11f2a9b3a" + integrity sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ== is-weakmap@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== +is-weakref@^1.0.2, is-weakref@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.0.tgz#47e3472ae95a63fa9cf25660bcf0c181c39770ef" + integrity sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q== dependencies: - call-bind "^1.0.2" + call-bound "^1.0.2" is-weakset@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.3.tgz#e801519df8c0c43e12ff2834eead84ec9e624007" - integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ== + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.4.tgz#c9f5deb0bc1906c6d6f1027f284ddf459249daca" + integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== dependencies: - call-bind "^1.0.7" - get-intrinsic "^1.2.4" + call-bound "^1.0.3" + get-intrinsic "^1.2.6" isarray@^2.0.5: version "2.0.5" @@ -3471,21 +3201,10 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -iterator.prototype@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" - integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== - dependencies: - define-properties "^1.2.1" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - reflect.getprototypeof "^1.0.4" - set-function-name "^2.0.1" - jackspeak@^3.1.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.0.tgz#a75763ff36ad778ede6a156d8ee8b124de445b4a" - integrity sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw== + version "3.4.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== dependencies: "@isaacs/cliui" "^8.0.2" optionalDependencies: @@ -3496,11 +3215,6 @@ joycon@^3.1.1: resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03" integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== -js-tokens@^8.0.2: - version "8.0.3" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-8.0.3.tgz#1c407ec905643603b38b6be6977300406ec48775" - integrity sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw== - js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" @@ -3540,11 +3254,6 @@ json5@^1.0.2: dependencies: minimist "^1.2.0" -jsonc-parser@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" - integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA== - jsondiffpatch@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsondiffpatch/-/jsondiffpatch-0.5.0.tgz#f9795416022685a3ba7eced11a338c5cb0cf66f4" @@ -3571,9 +3280,9 @@ keyv@^4.5.3: json-buffer "3.0.1" language-subtag-registry@^0.3.20: - version "0.3.22" - resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" - integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== + version "0.3.23" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz#23529e04d9e3b74679d70142df3fd2eb6ec572e7" + integrity sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ== language-tags@^1.0.9: version "1.0.9" @@ -3590,14 +3299,6 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -local-pkg@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.5.0.tgz#093d25a346bae59a99f80e75f6e9d36d7e8c925c" - integrity sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg== - dependencies: - mlly "^1.4.2" - pkg-types "^1.0.3" - locate-path@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" @@ -3615,17 +3316,20 @@ lodash@^4.17.21: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -loupe@^2.3.6, loupe@^2.3.7: - version "2.3.7" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" - integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== - dependencies: - get-func-name "^2.0.1" +loupe@^3.1.0, loupe@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-3.1.2.tgz#c86e0696804a02218f2206124c45d8b15291a240" + integrity sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg== lru-cache@^10.2.0: - version "10.2.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878" - integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + +lru-cache@^11.0.1: + version "11.0.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.0.2.tgz#fbd8e7cf8211f5e7e5d91905c415a3f55755ca39" + integrity sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA== lru-cache@^6.0.0: version "6.0.0" @@ -3634,17 +3338,12 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -magic-string@^0.30.5: - version "0.30.8" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.8.tgz#14e8624246d2bedba70d5462aa99ac9681844613" - integrity sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ== +magic-string@^0.30.12: + version "0.30.17" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453" + integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== dependencies: - "@jridgewell/sourcemap-codec" "^1.4.15" - -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + "@jridgewell/sourcemap-codec" "^1.5.0" make-fetch-happen@^9.1.0: version "9.1.0" @@ -3675,22 +3374,22 @@ matcher@^3.0.0: dependencies: escape-string-regexp "^4.0.0" -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== +micromatch@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== dependencies: - braces "^3.0.2" + braces "^3.0.3" picomatch "^2.3.1" mime-db@1.52.0: @@ -3705,11 +3404,6 @@ mime-types@^2.1.12: dependencies: mime-db "1.52.0" -mimic-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" - integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== - mimic-response@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" @@ -3730,9 +3424,9 @@ minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: brace-expansion "^1.1.7" minimatch@^9.0.4: - version "9.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" - integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: brace-expansion "^2.0.1" @@ -3820,27 +3514,17 @@ mkdirp@^2.1.3: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.6.tgz#964fbcb12b2d8c5d6fbc62a963ac95a273e2cc19" integrity sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A== -mlly@^1.2.0, mlly@^1.4.2: - version "1.6.1" - resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.6.1.tgz#0983067dc3366d6314fc5e12712884e6978d028f" - integrity sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA== - dependencies: - acorn "^8.11.3" - pathe "^1.1.2" - pkg-types "^1.0.3" - ufo "^1.3.2" - mock-socket@^9.3.1: version "9.3.1" resolved "https://registry.yarnpkg.com/mock-socket/-/mock-socket-9.3.1.tgz#24fb00c2f573c84812aa4a24181bb025de80cc8e" integrity sha512-qxBgB7Qa2sEQgHFjj0dSigq7fX4k6Saisd5Nelwp2q8mlbAFh5dHV9JTTlF8viYJLSSWgMCZFUom8PJcMNBoJw== -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +mrmime@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.0.tgz#151082a6e06e59a9a39b46b3e14d5cfe92b3abb4" + integrity sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw== -ms@^2.0.0, ms@^2.1.1: +ms@^2.0.0, ms@^2.1.1, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -3855,9 +3539,9 @@ mz@^2.4.0: thenify-all "^1.0.0" nanoid@^3.3.7: - version "3.3.7" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" - integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + version "3.3.8" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" + integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== napi-build-utils@^1.0.1: version "1.0.2" @@ -3870,30 +3554,30 @@ natural-compare@^1.4.0: integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== negotiator@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + version "0.6.4" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7" + integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== -nock@^13.5.0: - version "13.5.4" - resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.4.tgz#8918f0addc70a63736170fef7106a9721e0dc479" - integrity sha512-yAyTfdeNJGGBFxWdzSKCBYxs5FxLbCg5X5Q4ets974hcQzG1+qCxvIyOo4j2Ry6MUlhWVMX4OoYDefAIIwupjw== +nock@^13.5.5: + version "13.5.6" + resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.6.tgz#5e693ec2300bbf603b61dae6df0225673e6c4997" + integrity sha512-o2zOYiCpzRqSzPj0Zt/dQ/DqZeYoaQ7TUonc/xUPjCGl9WeHpNbxgVvOquXYAaJzI0M9BXV3HTzG0p8IUAbBTQ== dependencies: debug "^4.1.0" json-stringify-safe "^5.0.1" propagate "^2.0.0" node-abi@^3.3.0: - version "3.65.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.65.0.tgz#ca92d559388e1e9cab1680a18c1a18757cdac9d3" - integrity sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA== + version "3.71.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.71.0.tgz#52d84bbcd8575efb71468fbaa1f9a49b2c242038" + integrity sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw== dependencies: semver "^7.3.5" node-addon-api@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.0.tgz#71f609369379c08e251c558527a107107b5e0fdb" - integrity sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g== + version "7.1.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558" + integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== node-domexception@^1.0.0: version "1.0.0" @@ -3932,12 +3616,13 @@ nopt@^5.0.0: dependencies: abbrev "1" -npm-run-path@^5.1.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f" - integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== +npm-run-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-6.0.0.tgz#25cfdc4eae04976f3349c0b1afc089052c362537" + integrity sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA== dependencies: path-key "^4.0.0" + unicorn-magic "^0.3.0" npmlog@^6.0.0: version "6.0.2" @@ -3954,27 +3639,29 @@ object-assign@^4.0.1: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.13.1: - version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== +object-inspect@^1.13.3: + version "1.13.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.3.tgz#f14c183de51130243d6d18ae149375ff50ea488a" + integrity sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA== object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.2, object.assign@^4.1.4, object.assign@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" - integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== +object.assign@^4.1.2, object.assign@^4.1.4, object.assign@^4.1.7: + version "4.1.7" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" + integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== dependencies: - call-bind "^1.0.5" + call-bind "^1.0.8" + call-bound "^1.0.3" define-properties "^1.2.1" - has-symbols "^1.0.3" + es-object-atoms "^1.0.0" + has-symbols "^1.1.0" object-keys "^1.1.1" -object.entries@^1.1.5, object.entries@^1.1.7: +object.entries@^1.1.5: version "1.1.8" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== @@ -3983,7 +3670,7 @@ object.entries@^1.1.5, object.entries@^1.1.7: define-properties "^1.2.1" es-object-atoms "^1.0.0" -object.fromentries@^2.0.7: +object.fromentries@^2.0.8: version "2.0.8" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== @@ -3993,7 +3680,7 @@ object.fromentries@^2.0.7: es-abstract "^1.23.2" es-object-atoms "^1.0.0" -object.groupby@^1.0.1: +object.groupby@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== @@ -4002,12 +3689,13 @@ object.groupby@^1.0.1: define-properties "^1.2.1" es-abstract "^1.23.2" -object.values@^1.1.6, object.values@^1.1.7: - version "1.2.0" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" - integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== +object.values@^1.1.6, object.values@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216" + integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA== dependencies: - call-bind "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.3" define-properties "^1.2.1" es-object-atoms "^1.0.0" @@ -4023,24 +3711,26 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" - integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== - dependencies: - mimic-fn "^4.0.0" - optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" + word-wrap "^1.2.5" + +own-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" + integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== + dependencies: + get-intrinsic "^1.2.6" + object-keys "^1.1.1" + safe-push-apply "^1.0.0" p-limit@^3.0.2: version "3.1.0" @@ -4049,13 +3739,6 @@ p-limit@^3.0.2: dependencies: yocto-queue "^0.1.0" -p-limit@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-5.0.0.tgz#6946d5b7140b649b7a33a027d89b4c625b3a5985" - integrity sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ== - dependencies: - yocto-queue "^1.0.0" - p-locate@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" @@ -4071,9 +3754,9 @@ p-map@^4.0.0: aggregate-error "^3.0.0" package-json-from-dist@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz#e501cd3094b278495eb4258d4c9f6d5ac3019f00" - integrity sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw== + version "1.0.1" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== parent-module@^1.0.0: version "1.0.1" @@ -4082,6 +3765,11 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse-ms@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-4.0.0.tgz#c0c058edd47c2a590151a718990533fd62803df4" + integrity sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw== + parse5-htmlparser2-tree-adapter@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" @@ -4137,38 +3825,42 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pathe@^1.1.0, pathe@^1.1.1, pathe@^1.1.2: +pathe@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== -pathval@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" - integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== +pathval@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-2.0.0.tgz#7e2550b422601d4f6b8e26f1301bc8f15a741a25" + integrity sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA== -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pino-abstract-transport@^1.0.0, pino-abstract-transport@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz#97f9f2631931e242da531b5c66d3079c12c9d1b5" - integrity sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q== +picomatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" + integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== + +pino-abstract-transport@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz#de241578406ac7b8a33ce0d77ae6e8a0b3b68a60" + integrity sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw== dependencies: - readable-stream "^4.0.0" split2 "^4.0.0" -pino-pretty@^11.0.0: - version "11.2.1" - resolved "https://registry.yarnpkg.com/pino-pretty/-/pino-pretty-11.2.1.tgz#de9a42ff8ea7b26da93506bb9e49d0b566c5ae96" - integrity sha512-O05NuD9tkRasFRWVaF/uHLOvoRDFD7tb5VMertr78rbsYFjYp48Vg3477EshVAF5eZaEw+OpDl/tu+B0R5o+7g== +pino-pretty@^11.3.0: + version "11.3.0" + resolved "https://registry.yarnpkg.com/pino-pretty/-/pino-pretty-11.3.0.tgz#390b3be044cf3d2e9192c7d19d44f6b690468f2e" + integrity sha512-oXwn7ICywaZPHmu3epHGU2oJX4nPmKvHvB/bwrJHlGcbEWaVcotkpyVHMKLKmiVryWYByNp0jpgAcXpFJDXJzA== dependencies: colorette "^2.0.7" dateformat "^4.6.3" @@ -4178,57 +3870,48 @@ pino-pretty@^11.0.0: joycon "^3.1.1" minimist "^1.2.6" on-exit-leak-free "^2.1.0" - pino-abstract-transport "^1.0.0" + pino-abstract-transport "^2.0.0" pump "^3.0.0" readable-stream "^4.0.0" secure-json-parse "^2.4.0" sonic-boom "^4.0.1" strip-json-comments "^3.1.1" -pino-std-serializers@^6.0.0: - version "6.2.2" - resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz#d9a9b5f2b9a402486a5fc4db0a737570a860aab3" - integrity sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA== +pino-std-serializers@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz#7c625038b13718dbbd84ab446bd673dc52259e3b" + integrity sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA== -pino@^8.19.0: - version "8.21.0" - resolved "https://registry.yarnpkg.com/pino/-/pino-8.21.0.tgz#e1207f3675a2722940d62da79a7a55a98409f00d" - integrity sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q== +pino@^9.5.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/pino/-/pino-9.6.0.tgz#6bc628159ba0cc81806d286718903b7fc6b13169" + integrity sha512-i85pKRCt4qMjZ1+L7sy2Ag4t1atFcdbEt76+7iRJn1g2BvsnRMGu9p8pivl9fs63M2kF/A0OacFZhTub+m/qMg== dependencies: atomic-sleep "^1.0.0" fast-redact "^3.1.1" on-exit-leak-free "^2.1.0" - pino-abstract-transport "^1.2.0" - pino-std-serializers "^6.0.0" - process-warning "^3.0.0" + pino-abstract-transport "^2.0.0" + pino-std-serializers "^7.0.0" + process-warning "^4.0.0" quick-format-unescaped "^4.0.3" real-require "^0.2.0" safe-stable-stringify "^2.3.1" - sonic-boom "^3.7.0" - thread-stream "^2.6.0" - -pkg-types@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" - integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== - dependencies: - jsonc-parser "^3.2.0" - mlly "^1.2.0" - pathe "^1.1.0" + sonic-boom "^4.0.1" + thread-stream "^3.0.0" possible-typed-array-names@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== -postcss@^8.4.36: - version "8.4.38" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" - integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== +postcss@^8.4.43: + version "8.4.49" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.49.tgz#4ea479048ab059ab3ae61d082190fabfd994fe19" + integrity sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA== dependencies: nanoid "^3.3.7" - picocolors "^1.0.0" - source-map-js "^1.2.0" + picocolors "^1.1.1" + source-map-js "^1.2.1" prebuild-install@^7.1.1: version "7.1.2" @@ -4261,23 +3944,21 @@ prettier-linter-helpers@^1.0.0: fast-diff "^1.1.2" prettier@^3.2.5: - version "3.2.5" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" - integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== + version "3.4.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.4.2.tgz#a5ce1fb522a588bf2b78ca44c6e6fe5aa5a2b13f" + integrity sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ== -pretty-format@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" - integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== +pretty-ms@^9.0.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-9.2.0.tgz#e14c0aad6493b69ed63114442a84133d7e560ef0" + integrity sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg== dependencies: - "@jest/schemas" "^29.6.3" - ansi-styles "^5.0.0" - react-is "^18.0.0" + parse-ms "^4.0.0" -process-warning@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-3.0.0.tgz#96e5b88884187a1dce6f5c3166d611132058710b" - integrity sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ== +process-warning@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-4.0.1.tgz#5c1db66007c67c756e4e09eb170cdece15da32fb" + integrity sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q== process@^0.11.10: version "0.11.10" @@ -4313,9 +3994,9 @@ proxy-from-env@^1.1.0: integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + version "3.0.2" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.2.tgz#836f3edd6bc2ee599256c924ffe0d88573ddcbf8" + integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== dependencies: end-of-stream "^1.1.0" once "^1.3.1" @@ -4345,11 +4026,6 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-is@^18.0.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== - readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" @@ -4360,9 +4036,9 @@ readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: util-deprecate "^1.0.1" readable-stream@^4.0.0: - version "4.5.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.5.2.tgz#9e7fc4c45099baeed934bff6eb97ba6cf2729e09" - integrity sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g== + version "4.7.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.7.0.tgz#cedbd8a1146c13dfff8dab14068028d58c15ac91" + integrity sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg== dependencies: abort-controller "^3.0.0" buffer "^6.0.3" @@ -4380,33 +4056,31 @@ reflect-metadata@^0.2.1: resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.2.2.tgz#400c845b6cba87a21f2c65c4aeb158f4fa4d9c5b" integrity sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q== -reflect.getprototypeof@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz#3ab04c32a8390b770712b7a8633972702d278859" - integrity sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg== +reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" + integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== dependencies: - call-bind "^1.0.7" + call-bind "^1.0.8" define-properties "^1.2.1" - es-abstract "^1.23.1" + es-abstract "^1.23.9" es-errors "^1.3.0" - get-intrinsic "^1.2.4" - globalthis "^1.0.3" - which-builtin-type "^1.1.3" - -regenerator-runtime@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" - integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.7" + get-proto "^1.0.1" + which-builtin-type "^1.2.1" -regexp.prototype.flags@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" - integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== +regexp.prototype.flags@^1.5.3: + version "1.5.4" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" + integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== dependencies: - call-bind "^1.0.6" + call-bind "^1.0.8" define-properties "^1.2.1" es-errors "^1.3.0" - set-function-name "^2.0.1" + get-proto "^1.0.1" + gopd "^1.2.0" + set-function-name "^2.0.2" require-directory@^2.1.1: version "2.1.1" @@ -4424,11 +4098,11 @@ resolve-pkg-maps@^1.0.0: integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== resolve@^1.22.2, resolve@^1.22.4: - version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + version "1.22.10" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" + integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== dependencies: - is-core-module "^2.13.0" + is-core-module "^2.16.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -4461,26 +4135,32 @@ roarr@^2.15.3: semver-compare "^1.0.0" sprintf-js "^1.1.2" -rollup@^4.13.0: - version "4.13.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.13.0.tgz#dd2ae144b4cdc2ea25420477f68d4937a721237a" - integrity sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg== +rollup@^4.20.0: + version "4.30.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.30.1.tgz#d5c3d066055259366cdc3eb6f1d051c5d6afaf74" + integrity sha512-mlJ4glW020fPuLi7DkM/lN97mYEZGWeqBnrljzN0gs7GLctqX3lNWxKQ7Gl712UAX+6fog/L3jh4gb7R6aVi3w== dependencies: - "@types/estree" "1.0.5" + "@types/estree" "1.0.6" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.13.0" - "@rollup/rollup-android-arm64" "4.13.0" - "@rollup/rollup-darwin-arm64" "4.13.0" - "@rollup/rollup-darwin-x64" "4.13.0" - "@rollup/rollup-linux-arm-gnueabihf" "4.13.0" - "@rollup/rollup-linux-arm64-gnu" "4.13.0" - "@rollup/rollup-linux-arm64-musl" "4.13.0" - "@rollup/rollup-linux-riscv64-gnu" "4.13.0" - "@rollup/rollup-linux-x64-gnu" "4.13.0" - "@rollup/rollup-linux-x64-musl" "4.13.0" - "@rollup/rollup-win32-arm64-msvc" "4.13.0" - "@rollup/rollup-win32-ia32-msvc" "4.13.0" - "@rollup/rollup-win32-x64-msvc" "4.13.0" + "@rollup/rollup-android-arm-eabi" "4.30.1" + "@rollup/rollup-android-arm64" "4.30.1" + "@rollup/rollup-darwin-arm64" "4.30.1" + "@rollup/rollup-darwin-x64" "4.30.1" + "@rollup/rollup-freebsd-arm64" "4.30.1" + "@rollup/rollup-freebsd-x64" "4.30.1" + "@rollup/rollup-linux-arm-gnueabihf" "4.30.1" + "@rollup/rollup-linux-arm-musleabihf" "4.30.1" + "@rollup/rollup-linux-arm64-gnu" "4.30.1" + "@rollup/rollup-linux-arm64-musl" "4.30.1" + "@rollup/rollup-linux-loongarch64-gnu" "4.30.1" + "@rollup/rollup-linux-powerpc64le-gnu" "4.30.1" + "@rollup/rollup-linux-riscv64-gnu" "4.30.1" + "@rollup/rollup-linux-s390x-gnu" "4.30.1" + "@rollup/rollup-linux-x64-gnu" "4.30.1" + "@rollup/rollup-linux-x64-musl" "4.30.1" + "@rollup/rollup-win32-arm64-msvc" "4.30.1" + "@rollup/rollup-win32-ia32-msvc" "4.30.1" + "@rollup/rollup-win32-x64-msvc" "4.30.1" fsevents "~2.3.2" run-parallel@^1.1.9: @@ -4497,14 +4177,15 @@ rxjs@^7.8.1: dependencies: tslib "^2.1.0" -safe-array-concat@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" - integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== +safe-array-concat@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" + integrity sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q== dependencies: - call-bind "^1.0.7" - get-intrinsic "^1.2.4" - has-symbols "^1.0.3" + call-bind "^1.0.8" + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + has-symbols "^1.1.0" isarray "^2.0.5" safe-buffer@^5.0.1, safe-buffer@~5.2.0: @@ -4512,19 +4193,27 @@ safe-buffer@^5.0.1, safe-buffer@~5.2.0: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-regex-test@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" - integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== +safe-push-apply@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" + integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== + dependencies: + es-errors "^1.3.0" + isarray "^2.0.5" + +safe-regex-test@^1.0.3, safe-regex-test@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== dependencies: - call-bind "^1.0.6" + call-bound "^1.0.2" es-errors "^1.3.0" - is-regex "^1.1.4" + is-regex "^1.2.1" safe-stable-stringify@^2.3.1: - version "2.4.3" - resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" - integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== + version "2.5.0" + resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz#4ca2f8e385f2831c432a719b108a3bf7af42a1dd" + integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA== "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" @@ -4532,9 +4221,9 @@ safe-stable-stringify@^2.3.1: integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== scale-ts@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/scale-ts/-/scale-ts-1.6.0.tgz#e9641093c5a9e50f964ddb1607139034e3e932e9" - integrity sha512-Ja5VCjNZR8TGKhUumy9clVVxcDpM+YFjAnkMuwQy68Hixio3VRRvWdE3g8T/yC+HXA0ZDQl2TGyUmtmbcVl40Q== + version "1.6.1" + resolved "https://registry.yarnpkg.com/scale-ts/-/scale-ts-1.6.1.tgz#45151e156d6c04792223c39d8e7484ce926445f2" + integrity sha512-PBMc2AWc6wSEqJYBDPcyCLUj9/tMKnLX70jLOSndMtcUoLQucP/DM0vnQo1wJAYjTrQiq8iG9rD0q6wFzgjH7g== secure-json-parse@^2.4.0: version "2.7.0" @@ -4551,17 +4240,10 @@ semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.0.0, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: - version "7.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.2, semver@^7.3.5: - version "7.6.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" - integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== +semver@^7.0.0, semver@^7.3.2, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== serialize-error@^7.0.1: version "7.0.1" @@ -4575,7 +4257,7 @@ set-blocking@^2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== -set-function-length@^1.2.1: +set-function-length@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== @@ -4587,7 +4269,7 @@ set-function-length@^1.2.1: gopd "^1.0.1" has-property-descriptors "^1.0.2" -set-function-name@^2.0.1: +set-function-name@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== @@ -4597,6 +4279,15 @@ set-function-name@^2.0.1: functions-have-names "^1.2.3" has-property-descriptors "^1.0.2" +set-proto@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" + integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== + dependencies: + dunder-proto "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + sha.js@^2.4.11: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" @@ -4617,15 +4308,45 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -side-channel@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" - integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== dependencies: - call-bind "^1.0.7" es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" + object-inspect "^1.13.3" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" siginfo@^2.0.0: version "2.0.0" @@ -4656,6 +4377,15 @@ simple-get@^4.0.0: once "^1.3.1" simple-concat "^1.0.0" +sirv@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/sirv/-/sirv-3.0.0.tgz#f8d90fc528f65dff04cb597a88609d4e8a4361ce" + integrity sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg== + dependencies: + "@polka/url" "^1.0.0-next.24" + mrmime "^2.0.0" + totalist "^3.0.0" + slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -4666,10 +4396,10 @@ smart-buffer@^4.2.0: resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== -smoldot@2.0.22: - version "2.0.22" - resolved "https://registry.yarnpkg.com/smoldot/-/smoldot-2.0.22.tgz#1e924d2011a31c57416e79a2b97a460f462a31c7" - integrity sha512-B50vRgTY6v3baYH6uCgL15tfaag5tcS2o/P5q1OiXcKGv1axZDfz2dzzMuIkVpyMR2ug11F6EAtQlmYBQd292g== +smoldot@2.0.26: + version "2.0.26" + resolved "https://registry.yarnpkg.com/smoldot/-/smoldot-2.0.26.tgz#0e64c7fcd26240fbe4c8d6b6e4b9a9aca77e00f6" + integrity sha512-F+qYmH4z2s2FK+CxGj8moYcd1ekSIKH8ywkdqlOz88Dat35iB1DIYL11aILN46YSGMzQW/lbJNS307zBSDN5Ig== dependencies: ws "^8.8.1" @@ -4690,24 +4420,17 @@ socks@^2.6.2: ip-address "^9.0.5" smart-buffer "^4.2.0" -sonic-boom@^3.7.0: - version "3.8.1" - resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-3.8.1.tgz#d5ba8c4e26d6176c9a1d14d549d9ff579a163422" - integrity sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg== - dependencies: - atomic-sleep "^1.0.0" - sonic-boom@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-4.0.1.tgz#515b7cef2c9290cb362c4536388ddeece07aed30" - integrity sha512-hTSD/6JMLyT4r9zeof6UtuBDpjJ9sO08/nmS5djaA9eozT9oOlNdpXSnzcgj4FTqpk3nkLrs61l4gip9r1HCrQ== + version "4.2.0" + resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-4.2.0.tgz#e59a525f831210fa4ef1896428338641ac1c124d" + integrity sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww== dependencies: atomic-sleep "^1.0.0" -source-map-js@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" - integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== +source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== split2@^4.0.0: version "4.2.0" @@ -4743,10 +4466,10 @@ stackback@0.0.2: resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== -std-env@^3.5.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.7.0.tgz#c9f7386ced6ecf13360b6c6c55b8aaa4ef7481d2" - integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== +std-env@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.8.0.tgz#b56ffc1baf1a29dcc80a3bdf11d7fca7c315e7d5" + integrity sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w== "string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" @@ -4775,26 +4498,39 @@ string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string.prototype.trim@^1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" - integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== +string.prototype.includes@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz#eceef21283640761a81dbe16d6c7171a4edf7d92" + integrity sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg== dependencies: call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.23.0" + es-abstract "^1.23.3" + +string.prototype.trim@^1.2.10: + version "1.2.10" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" + integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-data-property "^1.1.4" + define-properties "^1.2.1" + es-abstract "^1.23.5" es-object-atoms "^1.0.0" + has-property-descriptors "^1.0.2" -string.prototype.trimend@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" - integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== +string.prototype.trimend@^1.0.8, string.prototype.trimend@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" + integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== dependencies: - call-bind "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.2" define-properties "^1.2.1" es-object-atoms "^1.0.0" -string.prototype.trimstart@^1.0.7, string.prototype.trimstart@^1.0.8: +string.prototype.trimstart@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== @@ -4836,10 +4572,10 @@ strip-bom@^3.0.0: resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== -strip-final-newline@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" - integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== +strip-final-newline@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-4.0.0.tgz#35a369ec2ac43df356e3edd5dcebb6429aa1fa5c" + integrity sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw== strip-json-comments@^3.1.1: version "3.1.1" @@ -4851,13 +4587,6 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== -strip-literal@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-2.0.0.tgz#5d063580933e4e03ebb669b12db64d2200687527" - integrity sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA== - dependencies: - js-tokens "^8.0.2" - supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -4870,10 +4599,10 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -synckit@^0.8.6: - version "0.8.8" - resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.8.tgz#fe7fe446518e3d3d49f5e429f443cf08b6edfcd7" - integrity sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ== +synckit@^0.9.1: + version "0.9.2" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.9.2.tgz#a3a935eca7922d48b9e7d6c61822ee6c3ae4ec62" + integrity sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw== dependencies: "@pkgr/core" "^0.1.0" tslib "^2.6.2" @@ -4930,27 +4659,45 @@ thenify-all@^1.0.0: dependencies: any-promise "^1.0.0" -thread-stream@^2.6.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-2.7.0.tgz#d8a8e1b3fd538a6cca8ce69dbe5d3d097b601e11" - integrity sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw== +thread-stream@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-3.1.0.tgz#4b2ef252a7c215064507d4ef70c05a5e2d34c4f1" + integrity sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A== dependencies: real-require "^0.2.0" -tinybench@^2.5.1: - version "2.6.0" - resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.6.0.tgz#1423284ee22de07c91b3752c048d2764714b341b" - integrity sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA== +tinybench@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.9.0.tgz#103c9f8ba6d7237a47ab6dd1dcff77251863426b" + integrity sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg== -tinypool@^0.8.2: - version "0.8.3" - resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.8.3.tgz#e17d0a5315a7d425f875b05f7af653c225492d39" - integrity sha512-Ud7uepAklqRH1bvwy22ynrliC7Dljz7Tm8M/0RBUW+YRa4YHhZ6e4PpgE+fu1zr/WqB1kbeuVrdfeuyIBpy4tw== +tinyexec@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-0.3.2.tgz#941794e657a85e496577995c6eef66f53f42b3d2" + integrity sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA== -tinyspy@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-2.2.1.tgz#117b2342f1f38a0dbdcc73a50a454883adf861d1" - integrity sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A== +tinyglobby@^0.2.10: + version "0.2.10" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.10.tgz#e712cf2dc9b95a1f5c5bbd159720e15833977a0f" + integrity sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew== + dependencies: + fdir "^6.4.2" + picomatch "^4.0.2" + +tinypool@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-1.0.2.tgz#706193cc532f4c100f66aa00b01c42173d9051b2" + integrity sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA== + +tinyrainbow@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-1.2.0.tgz#5c57d2fc0fb3d1afd78465c33ca885d04f02abb5" + integrity sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ== + +tinyspy@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-3.0.2.tgz#86dd3cf3d737b15adcf17d7887c84a75201df20a" + integrity sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q== to-regex-range@^5.0.1: version "5.0.1" @@ -4959,29 +4706,15 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +totalist@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8" + integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== + ts-api-utils@^1.0.1, ts-api-utils@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" - integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== - -ts-node@^10.9.2: - version "10.9.2" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" - integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== - dependencies: - "@cspotcode/source-map-support" "^0.8.0" - "@tsconfig/node10" "^1.0.7" - "@tsconfig/node12" "^1.0.7" - "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - v8-compile-cache-lib "^3.0.1" - yn "3.1.1" + version "1.4.3" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064" + integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== tsconfig-paths@^3.15.0: version "3.15.0" @@ -4993,18 +4726,18 @@ tsconfig-paths@^3.15.0: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^2.1.0, tslib@^2.5.0, tslib@^2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" - integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== +tslib@^2.1.0, tslib@^2.5.0, tslib@^2.6.2, tslib@^2.7.0, tslib@^2.8.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== -tsx@^4.7.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.7.1.tgz#27af6cbf4e1cdfcb9b5425b1c61bb7e668eb5e84" - integrity sha512-8d6VuibXHtlN5E3zFkgY8u4DX7Y3Z27zvvPKVmLon/D4AjuKzarkUBTLDBgj9iTQ0hg5xM7c/mYiRVM+HETf0g== +tsx@^4.19.2: + version "4.19.2" + resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.19.2.tgz#2d7814783440e0ae42354d0417d9c2989a2ae92c" + integrity sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g== dependencies: - esbuild "~0.19.10" - get-tsconfig "^4.7.2" + esbuild "~0.23.0" + get-tsconfig "^4.7.5" optionalDependencies: fsevents "~2.3.3" @@ -5022,11 +4755,6 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" -type-detect@^4.0.0, type-detect@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - type-fest@^0.13.1: version "0.13.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" @@ -5037,49 +4765,50 @@ type-fest@^0.20.2: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== -typed-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" - integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== +typed-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" + integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== dependencies: - call-bind "^1.0.7" + call-bound "^1.0.3" es-errors "^1.3.0" - is-typed-array "^1.1.13" + is-typed-array "^1.1.14" -typed-array-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" - integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== +typed-array-byte-length@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" + integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== dependencies: - call-bind "^1.0.7" + call-bind "^1.0.8" for-each "^0.3.3" - gopd "^1.0.1" - has-proto "^1.0.3" - is-typed-array "^1.1.13" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.14" -typed-array-byte-offset@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" - integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== +typed-array-byte-offset@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" + integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== dependencies: available-typed-arrays "^1.0.7" - call-bind "^1.0.7" + call-bind "^1.0.8" for-each "^0.3.3" - gopd "^1.0.1" - has-proto "^1.0.3" - is-typed-array "^1.1.13" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.15" + reflect.getprototypeof "^1.0.9" -typed-array-length@^1.0.5, typed-array-length@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" - integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== +typed-array-length@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" + integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== dependencies: call-bind "^1.0.7" for-each "^0.3.3" gopd "^1.0.1" - has-proto "^1.0.3" is-typed-array "^1.1.13" possible-typed-array-names "^1.0.0" + reflect.getprototypeof "^1.0.6" typeorm@^0.3.20: version "0.3.20" @@ -5103,29 +4832,34 @@ typeorm@^0.3.20: yargs "^17.6.2" typescript@*: - version "5.4.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.3.tgz#5c6fedd4c87bee01cd7a528a30145521f8e0feff" - integrity sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg== + version "5.7.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.3.tgz#919b44a7dbb8583a9b856d162be24a54bf80073e" + integrity sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw== -ufo@^1.3.2: - version "1.5.3" - resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.5.3.tgz#3325bd3c977b6c6cd3160bf4ff52989adc9d3344" - integrity sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw== - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== +unbox-primitive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" + integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== dependencies: - call-bind "^1.0.2" + call-bound "^1.0.3" has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" + has-symbols "^1.1.0" + which-boxed-primitive "^1.1.1" + +undici-types@~6.19.2: + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== + +undici-types@~6.20.0: + version "6.20.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" + integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== +unicorn-magic@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.3.0.tgz#4efd45c85a69e0dd576d25532fbfa22aa5c8a104" + integrity sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA== unique-filename@^1.1.1: version "1.1.1" @@ -5158,94 +4892,90 @@ uuid@^9.0.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== -v8-compile-cache-lib@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== - -vite-node@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-1.4.0.tgz#265529d60570ca695ceb69391f87f92847934ad8" - integrity sha512-VZDAseqjrHgNd4Kh8icYHWzTKSCZMhia7GyHfhtzLW33fZlG9SwsB6CEhgyVOWkJfJ2pFLrp/Gj1FSfAiqH9Lw== +vite-node@2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-2.1.8.tgz#9495ca17652f6f7f95ca7c4b568a235e0c8dbac5" + integrity sha512-uPAwSr57kYjAUux+8E2j0q0Fxpn8M9VoyfGiRI8Kfktz9NcYMCenwY5RnZxnF1WTu3TGiYipirIzacLL3VVGFg== dependencies: cac "^6.7.14" - debug "^4.3.4" - pathe "^1.1.1" - picocolors "^1.0.0" + debug "^4.3.7" + es-module-lexer "^1.5.4" + pathe "^1.1.2" vite "^5.0.0" vite@^5.0.0: - version "5.2.6" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.2.6.tgz#fc2ce309e0b4871e938cb0aca3b96c422c01f222" - integrity sha512-FPtnxFlSIKYjZ2eosBQamz4CbyrTizbZ3hnGJlh/wMtCrlp1Hah6AzBLjGI5I2urTfNnpovpHdrL6YRuBOPnCA== + version "5.4.11" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.11.tgz#3b415cd4aed781a356c1de5a9ebafb837715f6e5" + integrity sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q== dependencies: - esbuild "^0.20.1" - postcss "^8.4.36" - rollup "^4.13.0" + esbuild "^0.21.3" + postcss "^8.4.43" + rollup "^4.20.0" optionalDependencies: fsevents "~2.3.3" -vitest@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/vitest/-/vitest-1.4.0.tgz#f5c812aaf5023818b89b7fc667fa45327396fece" - integrity sha512-gujzn0g7fmwf83/WzrDTnncZt2UiXP41mHuFYFrdwaLRVQ6JYQEiME2IfEjU3vcFL3VKa75XhI3lFgn+hfVsQw== - dependencies: - "@vitest/expect" "1.4.0" - "@vitest/runner" "1.4.0" - "@vitest/snapshot" "1.4.0" - "@vitest/spy" "1.4.0" - "@vitest/utils" "1.4.0" - acorn-walk "^8.3.2" - chai "^4.3.10" - debug "^4.3.4" - execa "^8.0.1" - local-pkg "^0.5.0" - magic-string "^0.30.5" - pathe "^1.1.1" - picocolors "^1.0.0" - std-env "^3.5.0" - strip-literal "^2.0.0" - tinybench "^2.5.1" - tinypool "^0.8.2" +vitest@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-2.1.8.tgz#2e6a00bc24833574d535c96d6602fb64163092fa" + integrity sha512-1vBKTZskHw/aosXqQUlVWWlGUxSJR8YtiyZDJAFeW2kPAeX6S3Sool0mjspO+kXLuxVWlEDDowBAeqeAQefqLQ== + dependencies: + "@vitest/expect" "2.1.8" + "@vitest/mocker" "2.1.8" + "@vitest/pretty-format" "^2.1.8" + "@vitest/runner" "2.1.8" + "@vitest/snapshot" "2.1.8" + "@vitest/spy" "2.1.8" + "@vitest/utils" "2.1.8" + chai "^5.1.2" + debug "^4.3.7" + expect-type "^1.1.0" + magic-string "^0.30.12" + pathe "^1.1.2" + std-env "^3.8.0" + tinybench "^2.9.0" + tinyexec "^0.3.1" + tinypool "^1.0.1" + tinyrainbow "^1.2.0" vite "^5.0.0" - vite-node "1.4.0" - why-is-node-running "^2.2.2" + vite-node "2.1.8" + why-is-node-running "^2.3.0" web-streams-polyfill@^3.0.3: version "3.3.3" resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== +which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" + integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" + is-bigint "^1.1.0" + is-boolean-object "^1.2.1" + is-number-object "^1.1.1" + is-string "^1.1.1" + is-symbol "^1.1.1" -which-builtin-type@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" - integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== +which-builtin-type@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" + integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== dependencies: - function.prototype.name "^1.1.5" - has-tostringtag "^1.0.0" + call-bound "^1.0.2" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" is-async-function "^2.0.0" - is-date-object "^1.0.5" - is-finalizationregistry "^1.0.2" + is-date-object "^1.1.0" + is-finalizationregistry "^1.1.0" is-generator-function "^1.0.10" - is-regex "^1.1.4" + is-regex "^1.2.1" is-weakref "^1.0.2" isarray "^2.0.5" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.9" + which-boxed-primitive "^1.1.0" + which-collection "^1.0.2" + which-typed-array "^1.1.16" -which-collection@^1.0.1: +which-collection@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== @@ -5255,15 +4985,16 @@ which-collection@^1.0.1: is-weakmap "^2.0.2" is-weakset "^2.0.3" -which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.9: - version "1.1.15" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" - integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== +which-typed-array@^1.1.16, which-typed-array@^1.1.18: + version "1.1.18" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.18.tgz#df2389ebf3fbb246a71390e90730a9edb6ce17ad" + integrity sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA== dependencies: available-typed-arrays "^1.0.7" - call-bind "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.3" for-each "^0.3.3" - gopd "^1.0.1" + gopd "^1.2.0" has-tostringtag "^1.0.2" which@^2.0.1, which@^2.0.2: @@ -5273,10 +5004,10 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" -why-is-node-running@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.2.2.tgz#4185b2b4699117819e7154594271e7e344c9973e" - integrity sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA== +why-is-node-running@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.3.0.tgz#a3f69a97107f494b3cdc3bdddd883a7d65cebf04" + integrity sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w== dependencies: siginfo "^2.0.0" stackback "0.0.2" @@ -5288,6 +5019,11 @@ wide-align@^1.1.5: dependencies: string-width "^1.0.2 || 2 || 3 || 4" +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -5320,10 +5056,10 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@^8.15.1, ws@^8.16.0, ws@^8.8.1: - version "8.17.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" - integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== +ws@^8.18.0, ws@^8.8.1: + version "8.18.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== y18n@^5.0.5: version "5.0.8" @@ -5371,22 +5107,17 @@ yargs@^17.6.2, yargs@^17.7.2: y18n "^5.0.5" yargs-parser "^21.1.1" -yn@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -yocto-queue@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" - integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== +yoctocolors@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/yoctocolors/-/yoctocolors-2.1.1.tgz#e0167474e9fbb9e8b3ecca738deaa61dd12e56fc" + integrity sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ== -zod@^3.22.4: - version "3.23.8" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d" - integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g== +zod@^3.23.8: + version "3.24.1" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.1.tgz#27445c912738c8ad1e9de1bea0359fa44d9d35ee" + integrity sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A== diff --git a/integration-tests/emulated/src/lib.rs b/integration-tests/emulated/src/lib.rs index f62785c952..72ed5b7d45 100644 --- a/integration-tests/emulated/src/lib.rs +++ b/integration-tests/emulated/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at #[cfg(all(not(feature = "runtime-benchmarks"), test))] mod mock; diff --git a/integration-tests/emulated/src/mock/para_chains.rs b/integration-tests/emulated/src/mock/para_chains.rs index 6d40c7a690..5ba467512a 100644 --- a/integration-tests/emulated/src/mock/para_chains.rs +++ b/integration-tests/emulated/src/mock/para_chains.rs @@ -51,6 +51,7 @@ pub mod spiritnet { )) .map(|(acc, key)| (acc.clone(), acc.clone(), SessionKeys { aura: key.clone() })) .collect::>(), + ..Default::default() }, balances: BalancesConfig { balances: accounts::init_balances() @@ -92,6 +93,7 @@ pub mod peregrine { )) .map(|(acc, key)| (acc.clone(), acc.clone(), SessionKeys { aura: key.clone() })) .collect::>(), + ..Default::default() }, balances: BalancesConfig { balances: accounts::init_balances() diff --git a/integration-tests/emulated/src/tests/peregrine/did_pallets/association.rs b/integration-tests/emulated/src/tests/peregrine/did_pallets/association.rs index 307b8f0828..49b9267b15 100644 --- a/integration-tests/emulated/src/tests/peregrine/did_pallets/association.rs +++ b/integration-tests/emulated/src/tests/peregrine/did_pallets/association.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use asset_hub_rococo_emulated_chain::AssetHubRococoParaPallet; use frame_support::{assert_ok, traits::fungible::Mutate}; diff --git a/integration-tests/emulated/src/tests/peregrine/did_pallets/attestation.rs b/integration-tests/emulated/src/tests/peregrine/did_pallets/attestation.rs index 8a2555fd26..5991ac23fe 100644 --- a/integration-tests/emulated/src/tests/peregrine/did_pallets/attestation.rs +++ b/integration-tests/emulated/src/tests/peregrine/did_pallets/attestation.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use asset_hub_rococo_emulated_chain::AssetHubRococoParaPallet; use frame_support::{assert_ok, traits::fungible::Mutate}; diff --git a/integration-tests/emulated/src/tests/peregrine/did_pallets/ctype.rs b/integration-tests/emulated/src/tests/peregrine/did_pallets/ctype.rs index 7e1182248c..70d3baaac7 100644 --- a/integration-tests/emulated/src/tests/peregrine/did_pallets/ctype.rs +++ b/integration-tests/emulated/src/tests/peregrine/did_pallets/ctype.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use asset_hub_rococo_emulated_chain::AssetHubRococoParaPallet; use frame_support::{assert_ok, traits::fungible::Mutate}; diff --git a/integration-tests/emulated/src/tests/peregrine/did_pallets/did.rs b/integration-tests/emulated/src/tests/peregrine/did_pallets/did.rs index b3a8a161a9..bea6db42c6 100644 --- a/integration-tests/emulated/src/tests/peregrine/did_pallets/did.rs +++ b/integration-tests/emulated/src/tests/peregrine/did_pallets/did.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use asset_hub_rococo_emulated_chain::AssetHubRococoParaPallet; use did::did_details::DidVerificationKey; diff --git a/integration-tests/emulated/src/tests/peregrine/did_pallets/mod.rs b/integration-tests/emulated/src/tests/peregrine/did_pallets/mod.rs index 90f3a12156..cde32325b2 100644 --- a/integration-tests/emulated/src/tests/peregrine/did_pallets/mod.rs +++ b/integration-tests/emulated/src/tests/peregrine/did_pallets/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod association; mod attestation; diff --git a/integration-tests/emulated/src/tests/peregrine/did_pallets/public_credentials.rs b/integration-tests/emulated/src/tests/peregrine/did_pallets/public_credentials.rs index 9272a67066..c957073714 100644 --- a/integration-tests/emulated/src/tests/peregrine/did_pallets/public_credentials.rs +++ b/integration-tests/emulated/src/tests/peregrine/did_pallets/public_credentials.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use asset_hub_rococo_emulated_chain::AssetHubRococoParaPallet; use frame_support::{assert_ok, traits::fungible::Mutate}; diff --git a/integration-tests/emulated/src/tests/peregrine/did_pallets/unallowed_did_call.rs b/integration-tests/emulated/src/tests/peregrine/did_pallets/unallowed_did_call.rs index 7ae0e9ff58..37a0fb2a2a 100644 --- a/integration-tests/emulated/src/tests/peregrine/did_pallets/unallowed_did_call.rs +++ b/integration-tests/emulated/src/tests/peregrine/did_pallets/unallowed_did_call.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use asset_hub_rococo_emulated_chain::AssetHubRococoParaPallet; use frame_support::{assert_ok, traits::fungible::Mutate}; diff --git a/integration-tests/emulated/src/tests/peregrine/did_pallets/utils.rs b/integration-tests/emulated/src/tests/peregrine/did_pallets/utils.rs index ba91c479ba..1d00c9ec7d 100644 --- a/integration-tests/emulated/src/tests/peregrine/did_pallets/utils.rs +++ b/integration-tests/emulated/src/tests/peregrine/did_pallets/utils.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use ctype::{ctype_entry::CtypeEntry, pallet::Ctypes}; use did::{did_details::DidVerificationKey, pallet::Did}; diff --git a/integration-tests/emulated/src/tests/peregrine/did_pallets/w3n.rs b/integration-tests/emulated/src/tests/peregrine/did_pallets/w3n.rs index 33340cd87f..79a8183f93 100644 --- a/integration-tests/emulated/src/tests/peregrine/did_pallets/w3n.rs +++ b/integration-tests/emulated/src/tests/peregrine/did_pallets/w3n.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use asset_hub_rococo_emulated_chain::AssetHubRococoParaPallet; use frame_support::{assert_ok, traits::fungible::Mutate}; diff --git a/integration-tests/emulated/src/tests/peregrine/mod.rs b/integration-tests/emulated/src/tests/peregrine/mod.rs index ff51721528..541010e314 100644 --- a/integration-tests/emulated/src/tests/peregrine/mod.rs +++ b/integration-tests/emulated/src/tests/peregrine/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod did_pallets; mod reserve_transfers; diff --git a/integration-tests/emulated/src/tests/peregrine/reserve_transfers.rs b/integration-tests/emulated/src/tests/peregrine/reserve_transfers.rs index bc6e30fa33..65870db75e 100644 --- a/integration-tests/emulated/src/tests/peregrine/reserve_transfers.rs +++ b/integration-tests/emulated/src/tests/peregrine/reserve_transfers.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use emulated_integration_tests_common::accounts::ALICE; use frame_support::{assert_noop, assert_ok, dispatch::RawOrigin, traits::fungible::Inspect}; diff --git a/integration-tests/emulated/src/tests/peregrine/sudo.rs b/integration-tests/emulated/src/tests/peregrine/sudo.rs index 9d1f54c62d..bfefdb6737 100644 --- a/integration-tests/emulated/src/tests/peregrine/sudo.rs +++ b/integration-tests/emulated/src/tests/peregrine/sudo.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use asset_hub_rococo_emulated_chain::AssetHubRococoParaPallet; use frame_support::{assert_ok, traits::fungible::Mutate}; diff --git a/integration-tests/emulated/src/tests/peregrine/teleportation.rs b/integration-tests/emulated/src/tests/peregrine/teleportation.rs index 43e305c8b1..eca1d0064e 100644 --- a/integration-tests/emulated/src/tests/peregrine/teleportation.rs +++ b/integration-tests/emulated/src/tests/peregrine/teleportation.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use emulated_integration_tests_common::accounts::{ALICE, BOB}; use frame_support::{assert_noop, dispatch::RawOrigin}; diff --git a/integration-tests/emulated/src/tests/peregrine/unpaid_execution.rs b/integration-tests/emulated/src/tests/peregrine/unpaid_execution.rs index 14c0796b85..dd48016b05 100644 --- a/integration-tests/emulated/src/tests/peregrine/unpaid_execution.rs +++ b/integration-tests/emulated/src/tests/peregrine/unpaid_execution.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use asset_hub_rococo_emulated_chain::AssetHubRococoParaPallet; use did::did_details::DidVerificationKey; @@ -79,7 +79,7 @@ fn test_unpaid_execution_from_asset_hub_to_peregrine() { assert_expected_events!( Peregrine, vec![ - PeregrineRuntimeEvent::MessageQueue(pallet_message_queue::Event::ProcessingFailed { .. }) => {}, + PeregrineRuntimeEvent::MessageQueue(pallet_message_queue::Event::Processed { success: false, .. }) => {}, ] ); }); diff --git a/integration-tests/emulated/src/tests/spiritnet/did_pallets/association.rs b/integration-tests/emulated/src/tests/spiritnet/did_pallets/association.rs index 8bb8f28492..7e3f6668cf 100644 --- a/integration-tests/emulated/src/tests/spiritnet/did_pallets/association.rs +++ b/integration-tests/emulated/src/tests/spiritnet/did_pallets/association.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use asset_hub_rococo_emulated_chain::AssetHubRococoParaPallet; use frame_support::{assert_ok, traits::fungible::Mutate}; diff --git a/integration-tests/emulated/src/tests/spiritnet/did_pallets/attestation.rs b/integration-tests/emulated/src/tests/spiritnet/did_pallets/attestation.rs index a708536f5c..e30a13649a 100644 --- a/integration-tests/emulated/src/tests/spiritnet/did_pallets/attestation.rs +++ b/integration-tests/emulated/src/tests/spiritnet/did_pallets/attestation.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use asset_hub_rococo_emulated_chain::AssetHubRococoParaPallet; use frame_support::{assert_ok, traits::fungible::Mutate}; diff --git a/integration-tests/emulated/src/tests/spiritnet/did_pallets/ctype.rs b/integration-tests/emulated/src/tests/spiritnet/did_pallets/ctype.rs index abdd0c850e..5eb260e6ea 100644 --- a/integration-tests/emulated/src/tests/spiritnet/did_pallets/ctype.rs +++ b/integration-tests/emulated/src/tests/spiritnet/did_pallets/ctype.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use asset_hub_rococo_emulated_chain::AssetHubRococoParaPallet; use frame_support::{assert_ok, traits::fungible::Mutate}; diff --git a/integration-tests/emulated/src/tests/spiritnet/did_pallets/did.rs b/integration-tests/emulated/src/tests/spiritnet/did_pallets/did.rs index 870b3ac567..4044a10635 100644 --- a/integration-tests/emulated/src/tests/spiritnet/did_pallets/did.rs +++ b/integration-tests/emulated/src/tests/spiritnet/did_pallets/did.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use asset_hub_rococo_emulated_chain::AssetHubRococoParaPallet; use did::did_details::DidVerificationKey; diff --git a/integration-tests/emulated/src/tests/spiritnet/did_pallets/mod.rs b/integration-tests/emulated/src/tests/spiritnet/did_pallets/mod.rs index 90f3a12156..cde32325b2 100644 --- a/integration-tests/emulated/src/tests/spiritnet/did_pallets/mod.rs +++ b/integration-tests/emulated/src/tests/spiritnet/did_pallets/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod association; mod attestation; diff --git a/integration-tests/emulated/src/tests/spiritnet/did_pallets/public_credentials.rs b/integration-tests/emulated/src/tests/spiritnet/did_pallets/public_credentials.rs index 5509633a8d..50311e3bae 100644 --- a/integration-tests/emulated/src/tests/spiritnet/did_pallets/public_credentials.rs +++ b/integration-tests/emulated/src/tests/spiritnet/did_pallets/public_credentials.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use asset_hub_rococo_emulated_chain::AssetHubRococoParaPallet; use frame_support::{assert_ok, traits::fungible::Mutate}; diff --git a/integration-tests/emulated/src/tests/spiritnet/did_pallets/unallowed_did_call.rs b/integration-tests/emulated/src/tests/spiritnet/did_pallets/unallowed_did_call.rs index 445c64e0a8..e6461001cd 100644 --- a/integration-tests/emulated/src/tests/spiritnet/did_pallets/unallowed_did_call.rs +++ b/integration-tests/emulated/src/tests/spiritnet/did_pallets/unallowed_did_call.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use asset_hub_rococo_emulated_chain::AssetHubRococoParaPallet; use frame_support::{assert_ok, traits::fungible::Mutate}; diff --git a/integration-tests/emulated/src/tests/spiritnet/did_pallets/utils.rs b/integration-tests/emulated/src/tests/spiritnet/did_pallets/utils.rs index 91d0af5621..f8690aaeed 100644 --- a/integration-tests/emulated/src/tests/spiritnet/did_pallets/utils.rs +++ b/integration-tests/emulated/src/tests/spiritnet/did_pallets/utils.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use ctype::{ctype_entry::CtypeEntry, pallet::Ctypes}; use did::{did_details::DidVerificationKey, pallet::Did}; diff --git a/integration-tests/emulated/src/tests/spiritnet/did_pallets/w3n.rs b/integration-tests/emulated/src/tests/spiritnet/did_pallets/w3n.rs index 72cdc70169..a1aa86ce1e 100644 --- a/integration-tests/emulated/src/tests/spiritnet/did_pallets/w3n.rs +++ b/integration-tests/emulated/src/tests/spiritnet/did_pallets/w3n.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use asset_hub_rococo_emulated_chain::AssetHubRococoParaPallet; use frame_support::{assert_ok, traits::fungible::Mutate}; diff --git a/integration-tests/emulated/src/tests/spiritnet/mod.rs b/integration-tests/emulated/src/tests/spiritnet/mod.rs index ff51721528..541010e314 100644 --- a/integration-tests/emulated/src/tests/spiritnet/mod.rs +++ b/integration-tests/emulated/src/tests/spiritnet/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod did_pallets; mod reserve_transfers; diff --git a/integration-tests/emulated/src/tests/spiritnet/reserve_transfers.rs b/integration-tests/emulated/src/tests/spiritnet/reserve_transfers.rs index 5c42f906bd..5d05b293ad 100644 --- a/integration-tests/emulated/src/tests/spiritnet/reserve_transfers.rs +++ b/integration-tests/emulated/src/tests/spiritnet/reserve_transfers.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use emulated_integration_tests_common::accounts::ALICE; use frame_support::{assert_noop, assert_ok, dispatch::RawOrigin, traits::fungible::Inspect}; diff --git a/integration-tests/emulated/src/tests/spiritnet/sudo.rs b/integration-tests/emulated/src/tests/spiritnet/sudo.rs index a2570b51e9..399144ecb9 100644 --- a/integration-tests/emulated/src/tests/spiritnet/sudo.rs +++ b/integration-tests/emulated/src/tests/spiritnet/sudo.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use asset_hub_rococo_emulated_chain::AssetHubRococoParaPallet; use frame_support::{assert_ok, traits::fungible::Mutate}; diff --git a/integration-tests/emulated/src/tests/spiritnet/teleportation.rs b/integration-tests/emulated/src/tests/spiritnet/teleportation.rs index e7941e4c35..d9a52b925b 100644 --- a/integration-tests/emulated/src/tests/spiritnet/teleportation.rs +++ b/integration-tests/emulated/src/tests/spiritnet/teleportation.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use emulated_integration_tests_common::accounts::{ALICE, BOB}; use frame_support::{assert_noop, dispatch::RawOrigin}; diff --git a/integration-tests/emulated/src/tests/spiritnet/unpaid_execution.rs b/integration-tests/emulated/src/tests/spiritnet/unpaid_execution.rs index 594822ffe4..e1e0bad5fb 100644 --- a/integration-tests/emulated/src/tests/spiritnet/unpaid_execution.rs +++ b/integration-tests/emulated/src/tests/spiritnet/unpaid_execution.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use asset_hub_rococo_emulated_chain::AssetHubRococoParaPallet; use did::did_details::DidVerificationKey; @@ -80,7 +80,7 @@ fn test_unpaid_execution_to_spiritnet() { assert_expected_events!( Spiritnet, vec![ - SpiritnetRuntimeEvent::MessageQueue(pallet_message_queue::Event::ProcessingFailed { .. }) => {}, + SpiritnetRuntimeEvent::MessageQueue(pallet_message_queue::Event::Processed { success: false, .. }) => {}, ] ); }); diff --git a/nodes/parachain/Cargo.toml b/nodes/parachain/Cargo.toml index 1eb47f74b4..0b1de5687b 100644 --- a/nodes/parachain/Cargo.toml +++ b/nodes/parachain/Cargo.toml @@ -92,8 +92,11 @@ xcm = { workspace = true, features = ["std"] } frame-benchmarking = { workspace = true, features = ["std"] } frame-benchmarking-cli = { workspace = true } -# Runtime tests -try-runtime-cli = { workspace = true, optional = true } +#ISMP +ismp-parachain-inherent = { workspace = true } +ismp-parachain-runtime-api = { workspace = true } +pallet-ismp-rpc = { workspace = true } +pallet-ismp-runtime-api = { workspace = true } [features] default = [] @@ -118,5 +121,4 @@ try-runtime = [ "polkadot-service/try-runtime", "runtime-common/try-runtime", "spiritnet-runtime/try-runtime", - "try-runtime-cli", ] diff --git a/nodes/parachain/build.rs b/nodes/parachain/build.rs index a87cc626d1..9384029ae5 100644 --- a/nodes/parachain/build.rs +++ b/nodes/parachain/build.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use substrate_build_script_utils::{generate_cargo_keys, rerun_if_git_head_changed}; diff --git a/nodes/parachain/src/chain_spec/mod.rs b/nodes/parachain/src/chain_spec/mod.rs index cc5159c5c1..e9e087f6b5 100644 --- a/nodes/parachain/src/chain_spec/mod.rs +++ b/nodes/parachain/src/chain_spec/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! KILT chain specification @@ -34,7 +34,6 @@ pub(crate) mod rilt; pub(crate) mod spiritnet; pub(crate) mod utils; -const KILT_PARA_ID: u32 = 2_086; const RILT_PARA_ID: u32 = 4504; /// The extensions for the `ChainSpec`. diff --git a/nodes/parachain/src/chain_spec/peregrine/dev.rs b/nodes/parachain/src/chain_spec/peregrine/dev.rs index ada41ff471..a3d77f270b 100644 --- a/nodes/parachain/src/chain_spec/peregrine/dev.rs +++ b/nodes/parachain/src/chain_spec/peregrine/dev.rs @@ -14,32 +14,19 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! KILT chain specification use kilt_support::traits::InspectMetadata; -use peregrine_runtime::{ - BalancesConfig, CouncilConfig, MetadataProvider, ParachainInfoConfig, ParachainStakingConfig, PolkadotXcmConfig, - RuntimeGenesisConfig, SessionConfig, SessionKeys, SudoConfig, TechnicalCommitteeConfig, SS_58_PREFIX, WASM_BINARY, -}; -use runtime_common::{ - constants::{kilt_inflation_config, staking::MinCollatorStake, KILT, MAX_COLLATOR_STAKE}, - AccountId, AuthorityId, Balance, -}; +use peregrine_runtime::{genesis_state::KILT_PARA_ID, MetadataProvider, SS_58_PREFIX, WASM_BINARY}; use sc_service::ChainType; -use serde_json::to_value; -use sp_core::sr25519; -use crate::chain_spec::{ - peregrine::{ChainSpec, SAFE_XCM_VERSION}, - utils::{get_account_id_from_secret, get_properties, get_public_key_from_secret}, - Extensions, KILT_PARA_ID, -}; +use crate::chain_spec::{peregrine::ChainSpec, utils::get_properties, Extensions}; pub(crate) fn generate_chain_spec(relaychain_name: &str) -> ChainSpec { let wasm_binary = WASM_BINARY.expect("Development WASM binary not available"); - let genesis_config = to_value(generate_genesis_state()).expect("Creating genesis state failed"); + let genesis_config = peregrine_runtime::genesis_state::development::generate_genesis_state(); let currency_symbol = String::from_utf8(MetadataProvider::symbol()).expect("Creating currency symbol failed"); let denomination = MetadataProvider::decimals(); @@ -61,60 +48,3 @@ pub(crate) fn generate_chain_spec(relaychain_name: &str) -> ChainSpec { .with_genesis_config(genesis_config) .build() } - -fn generate_genesis_state() -> RuntimeGenesisConfig { - let alice = ( - get_account_id_from_secret::("Alice"), - get_public_key_from_secret::("Alice"), - ); - let bob = ( - get_account_id_from_secret::("Bob"), - get_public_key_from_secret::("Bob"), - ); - let endowed_accounts = [ - alice.0.clone(), - bob.0.clone(), - get_account_id_from_secret::("Charlie"), - get_account_id_from_secret::("Dave"), - get_account_id_from_secret::("Eve"), - get_account_id_from_secret::("Ferdie"), - ]; - - RuntimeGenesisConfig { - balances: BalancesConfig { - balances: endowed_accounts.map(|acc| (acc, 10_000_000 * KILT)).to_vec(), - }, - session: SessionConfig { - keys: [alice.clone(), bob.clone()] - .map(|(acc, key)| (acc.clone(), acc, SessionKeys { aura: key })) - .to_vec(), - }, - sudo: SudoConfig { - key: Some(alice.0.clone()), - }, - parachain_info: ParachainInfoConfig { - parachain_id: KILT_PARA_ID.into(), - ..Default::default() - }, - parachain_staking: ParachainStakingConfig { - stakers: [alice.clone(), bob.clone()] - .map(|(acc, _)| -> (AccountId, Option, Balance) { (acc, None, 2 * MinCollatorStake::get()) }) - .to_vec(), - inflation_config: kilt_inflation_config(), - max_candidate_stake: MAX_COLLATOR_STAKE, - }, - council: CouncilConfig { - members: [alice.clone(), bob.clone()].map(|(acc, _)| acc).to_vec(), - phantom: Default::default(), - }, - technical_committee: TechnicalCommitteeConfig { - members: [alice, bob].map(|(acc, _)| acc).to_vec(), - phantom: Default::default(), - }, - polkadot_xcm: PolkadotXcmConfig { - safe_xcm_version: Some(SAFE_XCM_VERSION), - ..Default::default() - }, - ..Default::default() - } -} diff --git a/nodes/parachain/src/chain_spec/peregrine/mod.rs b/nodes/parachain/src/chain_spec/peregrine/mod.rs index f431f7b1f2..95459c38e7 100644 --- a/nodes/parachain/src/chain_spec/peregrine/mod.rs +++ b/nodes/parachain/src/chain_spec/peregrine/mod.rs @@ -14,18 +14,15 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! KILT chain specification pub(crate) mod dev; pub(crate) mod new; -const SAFE_XCM_VERSION: u32 = xcm::prelude::XCM_VERSION; - /// Specialized `ChainSpec` for the normal parachain runtime. -pub(crate) type ChainSpec = - sc_service::GenericChainSpec; +pub(crate) type ChainSpec = sc_service::GenericChainSpec; pub(crate) fn load_chain_spec(path: &str) -> Result { ChainSpec::from_json_file(path.into()) diff --git a/nodes/parachain/src/chain_spec/peregrine/new.rs b/nodes/parachain/src/chain_spec/peregrine/new.rs index 1cbb22f995..544f4ffe9b 100644 --- a/nodes/parachain/src/chain_spec/peregrine/new.rs +++ b/nodes/parachain/src/chain_spec/peregrine/new.rs @@ -14,26 +14,19 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! KILT chain specification use kilt_support::traits::InspectMetadata; -use peregrine_runtime::{ - MetadataProvider, ParachainInfoConfig, PolkadotXcmConfig, RuntimeGenesisConfig, SS_58_PREFIX, WASM_BINARY, -}; +use peregrine_runtime::{genesis_state::KILT_PARA_ID, MetadataProvider, SS_58_PREFIX, WASM_BINARY}; use sc_service::ChainType; -use serde_json::to_value; -use crate::chain_spec::{ - peregrine::{ChainSpec, SAFE_XCM_VERSION}, - utils::get_properties, - Extensions, KILT_PARA_ID, -}; +use crate::chain_spec::{peregrine::ChainSpec, utils::get_properties, Extensions}; pub(crate) fn generate_chain_spec() -> ChainSpec { let wasm_binary = WASM_BINARY.expect("WASM binary not available"); - let genesis_config = to_value(generate_genesis_state()).expect("Creating genesis state failed"); + let genesis_config = peregrine_runtime::genesis_state::production::generate_genesis_state(); let currency_symbol = String::from_utf8(MetadataProvider::symbol()).expect("Creating currency symbol failed"); let denomination = MetadataProvider::decimals(); @@ -55,17 +48,3 @@ pub(crate) fn generate_chain_spec() -> ChainSpec { .with_genesis_config(genesis_config) .build() } - -fn generate_genesis_state() -> RuntimeGenesisConfig { - RuntimeGenesisConfig { - parachain_info: ParachainInfoConfig { - parachain_id: KILT_PARA_ID.into(), - ..Default::default() - }, - polkadot_xcm: PolkadotXcmConfig { - safe_xcm_version: Some(SAFE_XCM_VERSION), - ..Default::default() - }, - ..Default::default() - } -} diff --git a/nodes/parachain/src/chain_spec/rilt/mod.rs b/nodes/parachain/src/chain_spec/rilt/mod.rs index c86215bc1b..5b408fb81e 100644 --- a/nodes/parachain/src/chain_spec/rilt/mod.rs +++ b/nodes/parachain/src/chain_spec/rilt/mod.rs @@ -14,14 +14,11 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! KILT chain specification pub(crate) mod new; -const SAFE_XCM_VERSION: u32 = xcm::prelude::XCM_VERSION; - /// Specialized `ChainSpec` for the normal parachain runtime. -pub(crate) type ChainSpec = - sc_service::GenericChainSpec; +pub(crate) type ChainSpec = sc_service::GenericChainSpec; diff --git a/nodes/parachain/src/chain_spec/rilt/new.rs b/nodes/parachain/src/chain_spec/rilt/new.rs index 5c6caadaac..2b218aa337 100644 --- a/nodes/parachain/src/chain_spec/rilt/new.rs +++ b/nodes/parachain/src/chain_spec/rilt/new.rs @@ -14,23 +14,18 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! KILT chain specification -use peregrine_runtime::{ParachainInfoConfig, PolkadotXcmConfig, RuntimeGenesisConfig, WASM_BINARY}; +use peregrine_runtime::WASM_BINARY; use sc_service::ChainType; -use serde_json::to_value; -use crate::chain_spec::{ - rilt::{ChainSpec, SAFE_XCM_VERSION}, - utils::get_properties, - Extensions, RILT_PARA_ID, -}; +use crate::chain_spec::{rilt::ChainSpec, utils::get_properties, Extensions, RILT_PARA_ID}; pub(crate) fn generate_chain_spec() -> ChainSpec { let wasm_binary = WASM_BINARY.expect("WASM binary not available"); - let genesis_state = to_value(generate_genesis_state()).expect("Creating genesis state failed"); + let genesis_state = peregrine_runtime::genesis_state::development::generate_genesis_state(); ChainSpec::builder( wasm_binary, @@ -46,17 +41,3 @@ pub(crate) fn generate_chain_spec() -> ChainSpec { .with_genesis_config(genesis_state) .build() } - -fn generate_genesis_state() -> RuntimeGenesisConfig { - RuntimeGenesisConfig { - parachain_info: ParachainInfoConfig { - parachain_id: RILT_PARA_ID.into(), - ..Default::default() - }, - polkadot_xcm: PolkadotXcmConfig { - safe_xcm_version: Some(SAFE_XCM_VERSION), - ..Default::default() - }, - ..Default::default() - } -} diff --git a/nodes/parachain/src/chain_spec/spiritnet/dev.rs b/nodes/parachain/src/chain_spec/spiritnet/dev.rs index d4a6eee6cc..0b6329f26b 100644 --- a/nodes/parachain/src/chain_spec/spiritnet/dev.rs +++ b/nodes/parachain/src/chain_spec/spiritnet/dev.rs @@ -14,31 +14,18 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! KILT chain specification -use runtime_common::{ - constants::{kilt_inflation_config, staking::MinCollatorStake, KILT, MAX_COLLATOR_STAKE}, - AccountId, AuthorityId, Balance, -}; use sc_service::ChainType; -use serde_json::to_value; -use sp_core::sr25519; -use spiritnet_runtime::{ - BalancesConfig, CouncilConfig, ParachainInfoConfig, ParachainStakingConfig, PolkadotXcmConfig, - RuntimeGenesisConfig, SessionConfig, SessionKeys, TechnicalCommitteeConfig, WASM_BINARY, -}; +use spiritnet_runtime::{genesis_state::KILT_PARA_ID, WASM_BINARY}; -use crate::chain_spec::{ - spiritnet::{ChainSpec, SAFE_XCM_VERSION}, - utils::{get_account_id_from_secret, get_properties, get_public_key_from_secret}, - Extensions, KILT_PARA_ID, -}; +use crate::chain_spec::{spiritnet::ChainSpec, utils::get_properties, Extensions}; pub(crate) fn generate_chain_spec(relaychain_name: &str) -> ChainSpec { let wasm_binary = WASM_BINARY.expect("Development WASM binary not available"); - let genesis_state = to_value(generate_genesis_state()).expect("Creating genesis state failed"); + let genesis_state = spiritnet_runtime::genesis_state::development::generate_genesis_state(); ChainSpec::builder( wasm_binary, @@ -54,57 +41,3 @@ pub(crate) fn generate_chain_spec(relaychain_name: &str) -> ChainSpec { .with_genesis_config(genesis_state) .build() } - -fn generate_genesis_state() -> RuntimeGenesisConfig { - let alice = ( - get_account_id_from_secret::("Alice"), - get_public_key_from_secret::("Alice"), - ); - let bob = ( - get_account_id_from_secret::("Bob"), - get_public_key_from_secret::("Bob"), - ); - let endowed_accounts = [ - alice.0.clone(), - bob.0.clone(), - get_account_id_from_secret::("Charlie"), - get_account_id_from_secret::("Dave"), - get_account_id_from_secret::("Eve"), - get_account_id_from_secret::("Ferdie"), - ]; - - RuntimeGenesisConfig { - balances: BalancesConfig { - balances: endowed_accounts.map(|acc| (acc, 10_000_000 * KILT)).to_vec(), - }, - session: SessionConfig { - keys: [alice.clone(), bob.clone()] - .map(|(acc, key)| (acc.clone(), acc, SessionKeys { aura: key })) - .to_vec(), - }, - parachain_info: ParachainInfoConfig { - parachain_id: KILT_PARA_ID.into(), - ..Default::default() - }, - parachain_staking: ParachainStakingConfig { - stakers: [alice.clone(), bob.clone()] - .map(|(acc, _)| -> (AccountId, Option, Balance) { (acc, None, 2 * MinCollatorStake::get()) }) - .to_vec(), - inflation_config: kilt_inflation_config(), - max_candidate_stake: MAX_COLLATOR_STAKE, - }, - council: CouncilConfig { - members: [alice.clone(), bob.clone()].map(|(acc, _)| acc).to_vec(), - phantom: Default::default(), - }, - technical_committee: TechnicalCommitteeConfig { - members: [alice, bob].map(|(acc, _)| acc).to_vec(), - phantom: Default::default(), - }, - polkadot_xcm: PolkadotXcmConfig { - safe_xcm_version: Some(SAFE_XCM_VERSION), - ..Default::default() - }, - ..Default::default() - } -} diff --git a/nodes/parachain/src/chain_spec/spiritnet/mod.rs b/nodes/parachain/src/chain_spec/spiritnet/mod.rs index 769231c537..95459c38e7 100644 --- a/nodes/parachain/src/chain_spec/spiritnet/mod.rs +++ b/nodes/parachain/src/chain_spec/spiritnet/mod.rs @@ -14,18 +14,15 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! KILT chain specification pub(crate) mod dev; pub(crate) mod new; -const SAFE_XCM_VERSION: u32 = xcm::prelude::XCM_VERSION; - /// Specialized `ChainSpec` for the normal parachain runtime. -pub(crate) type ChainSpec = - sc_service::GenericChainSpec; +pub(crate) type ChainSpec = sc_service::GenericChainSpec; pub(crate) fn load_chain_spec(path: &str) -> Result { ChainSpec::from_json_file(path.into()) diff --git a/nodes/parachain/src/chain_spec/spiritnet/new.rs b/nodes/parachain/src/chain_spec/spiritnet/new.rs index 0864304642..3a1475a1da 100644 --- a/nodes/parachain/src/chain_spec/spiritnet/new.rs +++ b/nodes/parachain/src/chain_spec/spiritnet/new.rs @@ -14,29 +14,24 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! KILT chain specification use sc_service::ChainType; -use serde_json::to_value; -use spiritnet_runtime::{ParachainInfoConfig, PolkadotXcmConfig, RuntimeGenesisConfig, WASM_BINARY}; +use spiritnet_runtime::WASM_BINARY; -use crate::chain_spec::{ - spiritnet::{ChainSpec, SAFE_XCM_VERSION}, - utils::get_properties, - Extensions, KILT_PARA_ID, -}; +use crate::chain_spec::{spiritnet::ChainSpec, utils::get_properties, Extensions}; pub(crate) fn generate_chain_spec() -> ChainSpec { let wasm_binary = WASM_BINARY.expect("WASM binary not available"); - let genesis_state = to_value(generate_genesis_state()).expect("Creating genesis state failed"); + let genesis_state = spiritnet_runtime::genesis_state::production::generate_genesis_state(); ChainSpec::builder( wasm_binary, Extensions { relay_chain: "relay".into(), - para_id: KILT_PARA_ID, + para_id: spiritnet_runtime::genesis_state::KILT_PARA_ID, }, ) .with_name("KILT Spiritnet New (change title)") @@ -46,17 +41,3 @@ pub(crate) fn generate_chain_spec() -> ChainSpec { .with_genesis_config(genesis_state) .build() } - -fn generate_genesis_state() -> RuntimeGenesisConfig { - RuntimeGenesisConfig { - parachain_info: ParachainInfoConfig { - parachain_id: KILT_PARA_ID.into(), - ..Default::default() - }, - polkadot_xcm: PolkadotXcmConfig { - safe_xcm_version: Some(SAFE_XCM_VERSION), - ..Default::default() - }, - ..Default::default() - } -} diff --git a/nodes/parachain/src/chain_spec/utils.rs b/nodes/parachain/src/chain_spec/utils.rs index 7b52bb0787..e4651db530 100644 --- a/nodes/parachain/src/chain_spec/utils.rs +++ b/nodes/parachain/src/chain_spec/utils.rs @@ -14,30 +14,12 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at -use runtime_common::{AccountId, AccountPublic}; use sc_service::Properties; -use sp_core::{Pair, Public}; -use sp_runtime::traits::IdentifyAccount; use crate::chain_spec::{self, ParachainRuntime, PeregrineRuntime, SpiritnetRuntime}; -/// Helper function to generate an account ID from seed -pub(crate) fn get_account_id_from_secret(seed: &str) -> AccountId -where - AccountPublic: From<::Public>, -{ - AccountPublic::from(get_public_key_from_secret::(seed)).into_account() -} - -/// Helper function to generate a crypto pair from seed -pub(crate) fn get_public_key_from_secret(seed: &str) -> ::Public { - TPublic::Pair::from_string(&format!("//{}", seed), None) - .expect("static values are valid; qed") - .public() -} - pub(crate) fn get_properties(symbol: &str, decimals: u32, ss58format: u32) -> Properties { Properties::from_iter([ ("tokenSymbol".into(), symbol.into()), diff --git a/nodes/parachain/src/cli.rs b/nodes/parachain/src/cli.rs index 21251e7550..947880ff7f 100644 --- a/nodes/parachain/src/cli.rs +++ b/nodes/parachain/src/cli.rs @@ -14,9 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at - -use std::net::SocketAddr; +// If you feel like getting in touch with us, you can do so at use clap::Parser; use polkadot_service::PrometheusConfig; @@ -234,7 +232,7 @@ impl CliConfiguration for RelayChainCli { .or_else(|| self.base_path.clone().map(Into::into))) } - fn rpc_addr(&self, default_listen_port: u16) -> sc_cli::Result> { + fn rpc_addr(&self, default_listen_port: u16) -> sc_cli::Result>> { self.base.base.rpc_addr(default_listen_port) } @@ -246,16 +244,7 @@ impl CliConfiguration for RelayChainCli { self.base.base.prometheus_config(default_listen_port, chain_spec) } - fn init( - &self, - _support_url: &String, - _impl_version: &String, - _logger_hook: F, - _config: &sc_service::Configuration, - ) -> sc_cli::Result<()> - where - F: FnOnce(&mut sc_cli::LoggerBuilder, &sc_service::Configuration), - { + fn init(&self, _support_url: &String, _impl_version: &String, _logger_hook: F) -> sc_cli::Result<()> { unreachable!("PolkadotCli is never initialized; qed"); } diff --git a/nodes/parachain/src/command.rs b/nodes/parachain/src/command.rs index 9a5e2996c5..94ff3c7ef2 100644 --- a/nodes/parachain/src/command.rs +++ b/nodes/parachain/src/command.rs @@ -14,20 +14,18 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use cumulus_primitives_core::ParaId; -use frame_benchmarking_cli::{BenchmarkCmd, SUBSTRATE_REFERENCE_HARDWARE}; +use frame_benchmarking_cli::SUBSTRATE_REFERENCE_HARDWARE; use log::info; -use runtime_common::opaque::Block; use sc_cli::SubstrateCli; -use sc_executor::NativeExecutionDispatch; use sp_runtime::traits::AccountIdConversion; use std::iter::once; use crate::{ chain_spec::{self, ParachainRuntime}, cli::{Cli, RelayChainCli, Subcommand}, - service::{new_partial, PeregrineRuntimeExecutor, SpiritnetRuntimeExecutor}, + service::new_partial, }; // Returns the provided (`--chain`, ) given only a reference @@ -71,7 +69,11 @@ macro_rules! construct_async_run { /// Parse command line arguments into service configuration. pub(crate) fn run() -> sc_cli::Result<()> { - let cli = Cli::from_args(); + let mut cli = Cli::from_args(); + + // all full nodes should store request/responses, otherwise they'd basically be + // useless without it. https://docs.hyperbridge.network/developers/polkadot/pallet-ismp#offchain-indexing + cli.run.base.offchain_worker_params.indexing_enabled = true; match &cli.subcommand { Some(Subcommand::BuildSpec(cmd)) => { @@ -148,99 +150,7 @@ pub(crate) fn run() -> sc_cli::Result<()> { cmd.run(&*spec) }) } - Some(Subcommand::Benchmark(cmd)) => { - - let shared_params = match cmd { - BenchmarkCmd::Block(c) => &c.shared_params, - BenchmarkCmd::Pallet(c) => &c.shared_params, - BenchmarkCmd::Extrinsic(c) => &c.shared_params, - BenchmarkCmd::Machine(c) => &c.shared_params, - BenchmarkCmd::Overhead(c) => &c.shared_params, - BenchmarkCmd::Storage(c) => &c.shared_params, - }; - - let (_, runtime) = get_selected_chainspec(shared_params)?; - - let runner = cli.create_runner(cmd)?; - - match (cmd, runtime) { - (BenchmarkCmd::Pallet(cmd), ParachainRuntime::Spiritnet(_)) => { - if cfg!(feature = "runtime-benchmarks") { - runner.sync_run(|config| { - cmd.run::::ExtendHostFunctions>(config) - }) - } else { - Err("Benchmarking wasn't enabled when building the node. \ - You can enable it with `--features runtime-benchmarks`." - .into()) - } - } - (BenchmarkCmd::Pallet(cmd), ParachainRuntime::Peregrine(_)) => { - if cfg!(feature = "runtime-benchmarks") { - runner.sync_run(|config| { - cmd.run::::ExtendHostFunctions>(config) - }) - } else { - Err("Benchmarking wasn't enabled when building the node. \ - You can enable it with `--features runtime-benchmarks`." - .into()) - } - } - (BenchmarkCmd::Block(cmd), ParachainRuntime::Spiritnet(_)) => runner.sync_run(|config| { - let partials = new_partial::( - &config, - crate::service::build_import_queue, - )?; - cmd.run(partials.client) - }), - (BenchmarkCmd::Block(cmd), ParachainRuntime::Peregrine(_)) => runner.sync_run(|config| { - let partials = new_partial::( - &config, - crate::service::build_import_queue, - )?; - cmd.run(partials.client) - }), - #[cfg(not(feature = "runtime-benchmarks"))] - (BenchmarkCmd::Storage(_), _) => Err(sc_cli::Error::Input( - "Compile with --features=runtime-benchmarks \ - to enable storage benchmarks." - .into(), - )), - #[cfg(feature = "runtime-benchmarks")] - (BenchmarkCmd::Storage(cmd), ParachainRuntime::Spiritnet(_)) => runner.sync_run(|config| { - let partials = new_partial::( - &config, - crate::service::build_import_queue, - )?; - - let db = partials.backend.expose_db(); - let storage = partials.backend.expose_storage(); - - cmd.run(config, std::sync::Arc::clone(&partials.client), db, storage) - }), - #[cfg(feature = "runtime-benchmarks")] - (BenchmarkCmd::Storage(cmd), ParachainRuntime::Peregrine(_)) => runner.sync_run(|config| { - let partials = new_partial::( - &config, - crate::service::build_import_queue, - )?; - - let db = partials.backend.expose_db(); - let storage = partials.backend.expose_storage(); - - cmd.run(config, std::sync::Arc::clone(&partials.client), db, storage) - }), - (BenchmarkCmd::Overhead(_), _) => Err("Unsupported benchmarking command".into()), - (BenchmarkCmd::Machine(cmd), _) => { - runner.sync_run(|config| cmd.run(&config, SUBSTRATE_REFERENCE_HARDWARE.clone())) - } - // NOTE: this allows the Client to leniently implement - // new benchmark commands without requiring a companion MR. - (_, ParachainRuntime::Spiritnet(_)) | (_, ParachainRuntime::Peregrine(_)) => { - Err("Benchmarking sub-command unsupported".into()) - } - } - } + Some(Subcommand::Benchmark(_)) => Err("The `benchmark` subcommand has been migrated to a standalone CLI (https://crates.io/crates/frame-omni-bencher). It is no longer being maintained here.".into()), Some(Subcommand::TryRuntime) => Err("The `try-runtime` subcommand has been migrated to a standalone CLI (https://github.com/paritytech/try-runtime-cli). It is no longer being maintained here.".into()), None => { let runner = cli.create_runner(&cli.run.normalize())?; @@ -250,7 +160,7 @@ pub(crate) fn run() -> sc_cli::Result<()> { let hwbench = (!cli.no_hardware_benchmarks) .then_some(config.database.path().map(|database_path| { let _ = std::fs::create_dir_all(database_path); - sc_sysinfo::gather_hwbench(Some(database_path)) + sc_sysinfo::gather_hwbench(Some(database_path) , &SUBSTRATE_REFERENCE_HARDWARE) })) .flatten(); diff --git a/nodes/parachain/src/main.rs b/nodes/parachain/src/main.rs index 58301c08cb..55c08e1d08 100644 --- a/nodes/parachain/src/main.rs +++ b/nodes/parachain/src/main.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! KILT node CLI. diff --git a/nodes/parachain/src/rpc.rs b/nodes/parachain/src/rpc.rs index f848f13b8c..76f8909dd9 100644 --- a/nodes/parachain/src/rpc.rs +++ b/nodes/parachain/src/rpc.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! A collection of node-specific RPC methods. //! Substrate provides the `sc-rpc` crate, which defines the core RPC layer @@ -25,8 +25,8 @@ use std::sync::Arc; -use sc_client_api::AuxStore; -pub use sc_rpc_api::DenyUnsafe; +use pallet_ismp_rpc::{IsmpApiServer, IsmpRpcHandler}; +use sc_client_api::{AuxStore, BlockBackend, ProofProvider}; use sc_transaction_pool_api::TransactionPool; use sp_api::ProvideRuntimeApi; use sp_block_builder::BlockBuilder; @@ -38,20 +38,24 @@ use runtime_common::{opaque::Block, AccountId, Balance, Nonce}; pub(crate) type RpcExtension = jsonrpsee::RpcModule<()>; /// Full client dependencies. -pub(crate) struct FullDeps { +pub(crate) struct FullDeps { /// The client instance to use. pub client: Arc, /// Transaction pool instance. pub pool: Arc

, - /// Whether to deny unsafe calls - pub deny_unsafe: DenyUnsafe, + /// Backend used by the node. + pub backend: Arc, } /// Instantiate all RPC extensions. -pub(crate) fn create_full(deps: FullDeps) -> Result> +pub(crate) fn create_full( + deps: FullDeps, +) -> Result> where C: ProvideRuntimeApi + HeaderBackend + + BlockBackend + + ProofProvider + AuxStore + HeaderMetadata + Send @@ -59,26 +63,26 @@ where + 'static, C::Api: pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi + substrate_frame_rpc_system::AccountNonceApi - + BlockBuilder, + + BlockBuilder + + pallet_ismp_runtime_api::IsmpRuntimeApi, + P: TransactionPool + 'static, + B: sc_client_api::Backend + Send + Sync + 'static, + B::State: sc_client_api::StateBackend>, { use pallet_transaction_payment_rpc::{TransactionPayment, TransactionPaymentApiServer}; use substrate_frame_rpc_system::{System, SystemApiServer}; let mut module = RpcExtension::new(()); - let FullDeps { - client, - pool, - deny_unsafe, - } = deps; - - module.merge(System::new(Arc::clone(&client), pool, deny_unsafe).into_rpc())?; - module.merge(TransactionPayment::new(client).into_rpc())?; + let FullDeps { client, pool, backend } = deps; + + module.merge(System::new(Arc::clone(&client), pool).into_rpc())?; + module.merge(TransactionPayment::new(Arc::clone(&client)).into_rpc())?; // Extend this RPC with a custom API by using the following syntax. // `YourRpcStruct` should have a reference to a client, which is needed // to call into the runtime. // - // `module.merge(YourRpcStruct::new(ReferenceToClient).into_rpc())?;` + module.merge(IsmpRpcHandler::new(client, backend)?.into_rpc())?; Ok(module) } diff --git a/nodes/parachain/src/service.rs b/nodes/parachain/src/service.rs index 038b61fd22..4e338b7f9f 100644 --- a/nodes/parachain/src/service.rs +++ b/nodes/parachain/src/service.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at // rpc use jsonrpsee::RpcModule; @@ -39,7 +39,6 @@ use sc_network_sync::SyncingService; use sc_service::{Configuration, TFullBackend, TFullClient, TaskManager}; use sc_telemetry::{Telemetry, TelemetryHandle, TelemetryWorker, TelemetryWorkerHandle}; use sp_api::ConstructRuntimeApi; -use sp_io::SubstrateHostFunctions; use sp_keystore::KeystorePtr; use sp_runtime::traits::BlakeTwo256; use std::{sync::Arc, time::Duration}; @@ -55,9 +54,13 @@ type Header = sp_runtime::generic::Header; #[cfg(not(feature = "runtime-benchmarks"))] -type HostFunctions = SubstrateHostFunctions; +type HostFunctions = cumulus_client_service::ParachainHostFunctions; + #[cfg(feature = "runtime-benchmarks")] -type HostFunctions = (SubstrateHostFunctions, frame_benchmarking::benchmarking::HostFunctions); +type HostFunctions = ( + cumulus_client_service::ParachainHostFunctions, + frame_benchmarking::benchmarking::HostFunctions, +); type ParachainExecutor = WasmExecutor; @@ -84,36 +87,6 @@ type PartialComponents = sc ), >; -/// Native Spiritnet executor instance. -pub(crate) struct SpiritnetRuntimeExecutor; - -impl sc_executor::NativeExecutionDispatch for SpiritnetRuntimeExecutor { - type ExtendHostFunctions = frame_benchmarking::benchmarking::HostFunctions; - - fn dispatch(method: &str, data: &[u8]) -> Option> { - spiritnet_runtime::api::dispatch(method, data) - } - - fn native_version() -> sc_executor::NativeVersion { - spiritnet_runtime::native_version() - } -} - -/// Native Peregrine executor instance. -pub(crate) struct PeregrineRuntimeExecutor; - -impl sc_executor::NativeExecutionDispatch for PeregrineRuntimeExecutor { - type ExtendHostFunctions = frame_benchmarking::benchmarking::HostFunctions; - - fn dispatch(method: &str, data: &[u8]) -> Option> { - peregrine_runtime::api::dispatch(method, data) - } - - fn native_version() -> sc_executor::NativeVersion { - peregrine_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 @@ -153,11 +126,11 @@ where #[allow(deprecated)] let executor = ParachainExecutor::new( - config.wasm_method, - config.default_heap_pages, - config.max_runtime_instances, + config.executor.wasm_method, + config.executor.default_heap_pages, + config.executor.max_runtime_instances, None, - config.runtime_cache_size, + config.executor.runtime_cache_size, ); let (client, backend, keystore_container, task_manager) = sc_service::new_full_parts::( @@ -236,7 +209,9 @@ where + pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi + substrate_frame_rpc_system::AccountNonceApi + sp_consensus_aura::AuraApi - + cumulus_primitives_aura::AuraUnincludedSegmentApi, + + cumulus_primitives_aura::AuraUnincludedSegmentApi + + pallet_ismp_runtime_api::IsmpRuntimeApi + + ismp_parachain_runtime_api::IsmpParachainApi, sc_client_api::StateBackendFor, Block>: sp_state_machine::Backend, RB: FnOnce( Arc>>, @@ -275,7 +250,10 @@ where let prometheus_registry = parachain_config.prometheus_registry().cloned(); let transaction_pool = Arc::clone(¶ms.transaction_pool); let import_queue_service = params.import_queue.service(); - let net_config = sc_network::config::FullNetworkConfiguration::new(¶chain_config.network); + let net_config = sc_network::config::FullNetworkConfiguration::<_, _, sc_network::NetworkWorker>::new( + ¶chain_config.network, + prometheus_registry.clone(), + ); let (network, system_rpc_tx, tx_handler_controller, start_network, sync_service) = cumulus_client_service::build_network(cumulus_client_service::BuildNetworkParams { parachain_config: ¶chain_config, @@ -293,12 +271,13 @@ where let rpc_builder = { let client = Arc::clone(&client); let transaction_pool = Arc::clone(&transaction_pool); + let backend = Arc::clone(&backend); - Box::new(move |deny_unsafe, _| { + Box::new(move |_| { let deps = crate::rpc::FullDeps { client: Arc::clone(&client), pool: Arc::clone(&transaction_pool), - deny_unsafe, + backend: Arc::clone(&backend), }; crate::rpc::create_full(deps).map_err(Into::into) @@ -454,7 +433,9 @@ where + pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi + sp_consensus_aura::AuraApi + cumulus_primitives_core::CollectCollationInfo - + cumulus_primitives_aura::AuraUnincludedSegmentApi, + + cumulus_primitives_aura::AuraUnincludedSegmentApi + + pallet_ismp_runtime_api::IsmpRuntimeApi + + ismp_parachain_runtime_api::IsmpParachainApi, sc_client_api::StateBackendFor, Block>: sp_state_machine::Backend, { start_node_impl::( @@ -479,7 +460,7 @@ fn start_consensus( task_manager: &TaskManager, relay_chain_interface: Arc, transaction_pool: Arc>>, - sync_oracle: Arc>, + _sync_oracle: Arc>, keystore: KeystorePtr, relay_chain_slot_duration: Duration, para_id: ParaId, @@ -500,12 +481,12 @@ where + pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi + substrate_frame_rpc_system::AccountNonceApi + sp_consensus_aura::AuraApi - + cumulus_primitives_aura::AuraUnincludedSegmentApi, + + cumulus_primitives_aura::AuraUnincludedSegmentApi + + ismp_parachain_runtime_api::IsmpParachainApi + + pallet_ismp_runtime_api::IsmpRuntimeApi, { use cumulus_client_consensus_aura::collators::lookahead::{self as aura, Params as AuraParams}; - let slot_duration = cumulus_client_consensus_aura::slot_duration(&*client)?; - let proposer_factory = sc_basic_authorship::ProposerFactory::with_proof_recording( task_manager.spawn_handle(), Arc::clone(&client), @@ -523,19 +504,29 @@ where Arc::clone(&client), ); + let (client_clone, relay_chain_interface_clone) = (Arc::clone(&client), Arc::clone(&relay_chain_interface)); + let params = AuraParams { - create_inherent_data_providers: move |_, ()| async move { Ok(()) }, + create_inherent_data_providers: move |parent, ()| { + let client = Arc::clone(&client_clone); + let relay_chain_interface = Arc::clone(&relay_chain_interface_clone); + async move { + let inherent = + ismp_parachain_inherent::ConsensusInherentProvider::create(parent, client, relay_chain_interface) + .await?; + + Ok(inherent) + } + }, block_import, para_client: Arc::clone(&client), para_backend: backend, relay_client: relay_chain_interface, code_hash_provider: move |block_hash| client.code_at(block_hash).ok().map(|c| ValidationCode::from(c).hash()), - sync_oracle, keystore, collator_key, para_id, overseer_handle, - slot_duration, relay_chain_slot_duration, proposer, collator_service, @@ -543,7 +534,7 @@ where reinitialize: false, }; - let fut = aura::run::(params); + let fut = aura::run::(params); task_manager .spawn_essential_handle() .spawn(TASK_MANAGER_IDENTIFIER, None, fut); diff --git a/nodes/standalone/Cargo.toml b/nodes/standalone/Cargo.toml index 76191500ce..11f5a20da6 100644 --- a/nodes/standalone/Cargo.toml +++ b/nodes/standalone/Cargo.toml @@ -68,9 +68,6 @@ substrate-frame-rpc-system = { workspace = true } frame-benchmarking = { workspace = true, features = ["std"] } frame-benchmarking-cli = { workspace = true } -# Runtime tests -try-runtime-cli = { workspace = true, optional = true } - [features] default = [] runtime-benchmarks = [ @@ -87,6 +84,4 @@ try-runtime = [ "kestrel-runtime/try-runtime", "pallet-transaction-payment/try-runtime", "runtime-common/try-runtime", - "try-runtime-cli", - "try-runtime-cli/try-runtime", ] diff --git a/nodes/standalone/build.rs b/nodes/standalone/build.rs index f672256b2e..3bf56b537e 100644 --- a/nodes/standalone/build.rs +++ b/nodes/standalone/build.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use substrate_build_script_utils::{generate_cargo_keys, rerun_if_git_head_changed}; diff --git a/nodes/standalone/src/chain_spec.rs b/nodes/standalone/src/chain_spec.rs index 533b601337..f1b6302e52 100644 --- a/nodes/standalone/src/chain_spec.rs +++ b/nodes/standalone/src/chain_spec.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! KILT chain specification @@ -39,7 +39,7 @@ pub(crate) fn load_spec(id: &str) -> Result, Stri Ok(Box::new(chain_spec)) } -type ChainSpec = sc_service::GenericChainSpec; +type ChainSpec = sc_service::GenericChainSpec; fn generate_dev_chain_spec() -> ChainSpec { let wasm_binary = WASM_BINARY.expect("Development WASM binary not available"); @@ -88,6 +88,7 @@ fn generate_genesis_state() -> RuntimeGenesisConfig { ) }) .collect::>(), + ..Default::default() }, sudo: SudoConfig { key: Some(root_key) }, ..Default::default() diff --git a/nodes/standalone/src/cli.rs b/nodes/standalone/src/cli.rs index 80e78274ab..b3822ec00a 100644 --- a/nodes/standalone/src/cli.rs +++ b/nodes/standalone/src/cli.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use clap::Parser; diff --git a/nodes/standalone/src/command.rs b/nodes/standalone/src/command.rs index 8981605be7..f88bb4759d 100644 --- a/nodes/standalone/src/command.rs +++ b/nodes/standalone/src/command.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use kestrel_runtime::opaque::Block; use sc_cli::SubstrateCli; @@ -138,7 +138,18 @@ pub(crate) fn run() -> sc_cli::Result<()> { None => { let runner = cli.create_runner(&cli.run)?; runner.run_node_until_exit(|config| async move { - crate::service::new_full(config).map_err(sc_cli::Error::Service) + match config.network.network_backend { + sc_network::config::NetworkBackendType::Libp2p => crate::service::new_full::< + sc_network::NetworkWorker< + kestrel_runtime::opaque::Block, + ::Hash, + >, + >(config) + .map_err(sc_cli::Error::Service), + sc_network::config::NetworkBackendType::Litep2p => + crate::service::new_full::(config) + .map_err(sc_cli::Error::Service), + } }) } } diff --git a/nodes/standalone/src/main.rs b/nodes/standalone/src/main.rs index 040abbd85a..5e6e13e97a 100644 --- a/nodes/standalone/src/main.rs +++ b/nodes/standalone/src/main.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! KILT node CLI. diff --git a/nodes/standalone/src/rpc.rs b/nodes/standalone/src/rpc.rs index 5ee69cce71..bf1d9d4261 100644 --- a/nodes/standalone/src/rpc.rs +++ b/nodes/standalone/src/rpc.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! A collection of node-specific RPC methods. //! Substrate provides the `sc-rpc` crate, which defines the core RPC layer @@ -27,7 +27,6 @@ use std::sync::Arc; use jsonrpsee::RpcModule; -use sc_rpc_api::DenyUnsafe; use sc_transaction_pool_api::TransactionPool; use sp_api::ProvideRuntimeApi; use sp_block_builder::BlockBuilder; @@ -41,8 +40,6 @@ pub(crate) struct FullDeps { pub(crate) client: Arc, /// Transaction pool instance. pub(crate) pool: Arc

, - /// Whether to deny unsafe calls - pub(crate) deny_unsafe: DenyUnsafe, } /// Instantiate all full RPC extensions. @@ -59,13 +56,9 @@ where use substrate_frame_rpc_system::{System, SystemApiServer}; let mut module = RpcModule::new(()); - let FullDeps { - client, - pool, - deny_unsafe, - } = deps; + let FullDeps { client, pool } = deps; - module.merge(System::new(client.clone(), pool, deny_unsafe).into_rpc())?; + module.merge(System::new(client.clone(), pool).into_rpc())?; module.merge(TransactionPayment::new(client).into_rpc())?; // Extend this RPC with a custom API by using the following syntax. diff --git a/nodes/standalone/src/service.rs b/nodes/standalone/src/service.rs index 7ddb9fc646..1d95b531c3 100644 --- a/nodes/standalone/src/service.rs +++ b/nodes/standalone/src/service.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Service and ServiceFactory implementation. Specialized wrapper over //! substrate service. @@ -23,47 +23,25 @@ use futures::FutureExt; use sc_client_api::{Backend, BlockBackend}; use sc_consensus_aura::{ImportQueueParams, SlotProportion, StartAuraParams}; use sc_consensus_grandpa::SharedVoterState; -use sc_executor::WasmExecutor; -use sc_service::{error::Error as ServiceError, Configuration, TaskManager, WarpSyncParams}; +use sc_service::{error::Error as ServiceError, Configuration, TaskManager, WarpSyncConfig}; use sc_telemetry::{Telemetry, TelemetryWorker}; use sc_transaction_pool_api::OffchainTransactionPoolFactory; use sp_consensus_aura::ed25519::AuthorityPair as AuraPair; -use sp_io::SubstrateHostFunctions; use std::{sync::Arc, time::Duration}; use kestrel_runtime::{self, opaque::Block, RuntimeApi}; -// Our native executor instance. -pub(crate) struct ExecutorDispatch; - -impl sc_executor::NativeExecutionDispatch for ExecutorDispatch { - type ExtendHostFunctions = frame_benchmarking::benchmarking::HostFunctions; - - fn dispatch(method: &str, data: &[u8]) -> Option> { - kestrel_runtime::api::dispatch(method, data) - } - - fn native_version() -> sc_executor::NativeVersion { - kestrel_runtime::native_version() - } -} - -#[cfg(not(feature = "runtime-benchmarks"))] -type HostFunctions = SubstrateHostFunctions; -#[cfg(feature = "runtime-benchmarks")] -type HostFunctions = (SubstrateHostFunctions, frame_benchmarking::benchmarking::HostFunctions); - -type FullClient = sc_service::TFullClient>; +pub(crate) type FullClient = + sc_service::TFullClient>; type FullBackend = sc_service::TFullBackend; type FullSelectChain = sc_consensus::LongestChain; /// The minimum period of blocks on which justifications will be /// imported and generated. -/// Value is copied from the solo chain template: const GRANDPA_JUSTIFICATION_PERIOD: u32 = 512; -type PartialComponents = sc_service::PartialComponents< +pub type Service = sc_service::PartialComponents< FullClient, FullBackend, FullSelectChain, @@ -76,7 +54,7 @@ type PartialComponents = sc_service::PartialComponents< ), >; -pub(crate) fn new_partial(config: &Configuration) -> Result { +pub fn new_partial(config: &Configuration) -> Result { let telemetry = config .telemetry_endpoints .clone() @@ -88,15 +66,7 @@ pub(crate) fn new_partial(config: &Configuration) -> Result::new( - config.wasm_method, - config.default_heap_pages, - config.max_runtime_instances, - None, - config.runtime_cache_size, - ); - + let executor = sc_service::new_wasm_executor::(&config.executor); let (client, backend, keystore_container, task_manager) = sc_service::new_full_parts::( config, telemetry.as_ref().map(|(_, telemetry)| telemetry.handle()), @@ -122,26 +92,29 @@ pub(crate) fn new_partial(config: &Configuration) -> Result(ImportQueueParams { block_import: grandpa_block_import.clone(), justification_import: Some(Box::new(grandpa_block_import.clone())), client: client.clone(), - create_inherent_data_providers: move |_, ()| async move { - let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); + create_inherent_data_providers: move |parent_hash, _| { + let cidp_client = cidp_client.clone(); + async move { + let slot_duration = sc_consensus_aura::standalone::slot_duration_at(&*cidp_client, parent_hash)?; + let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); - let slot = sp_consensus_aura::inherents::InherentDataProvider::from_timestamp_and_slot_duration( - *timestamp, - slot_duration, - ); + let slot = sp_consensus_aura::inherents::InherentDataProvider::from_timestamp_and_slot_duration( + *timestamp, + slot_duration, + ); - Ok((slot, timestamp)) + Ok((slot, timestamp)) + } }, spawner: &task_manager.spawn_essential_handle(), registry: config.prometheus_registry(), @@ -163,7 +136,9 @@ pub(crate) fn new_partial(config: &Configuration) -> Result Result { +pub fn new_full::Hash>>( + config: Configuration, +) -> Result { let sc_service::PartialComponents { client, backend, @@ -175,15 +150,23 @@ pub(crate) fn new_full(config: Configuration) -> Result::Hash, + N, + >::new(&config.network, config.prometheus_registry().cloned()); + let metrics = N::register_notification_metrics(config.prometheus_registry()); + + let peer_store_handle = net_config.peer_store_handle(); let grandpa_protocol_name = sc_consensus_grandpa::protocol_standard_name( &client.block_hash(0).ok().flatten().expect("Genesis block exists; qed"), &config.chain_spec, ); - - let mut net_config = sc_network::config::FullNetworkConfiguration::new(&config.network); - let (grandpa_protocol_config, grandpa_notification_service) = - sc_consensus_grandpa::grandpa_peers_set_config(grandpa_protocol_name.clone()); - + let (grandpa_protocol_config, grandpa_notification_service) = sc_consensus_grandpa::grandpa_peers_set_config::<_, N>( + grandpa_protocol_name.clone(), + metrics.clone(), + peer_store_handle, + ); net_config.add_notification_protocol(grandpa_protocol_config); let warp_sync = Arc::new(sc_consensus_grandpa::warp_proof::NetworkProvider::new( @@ -192,17 +175,18 @@ pub(crate) fn new_full(config: Configuration) -> Result Result Result = None; let name = config.network.node_name.clone(); @@ -235,20 +219,18 @@ pub(crate) fn new_full(config: Configuration) -> Result Result Result Result. -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use sp_runtime::DispatchError; use sp_weights::Weight; diff --git a/pallets/attestation/src/attestations.rs b/pallets/attestation/src/attestations.rs index 134067f812..ced5e75794 100644 --- a/pallets/attestation/src/attestations.rs +++ b/pallets/attestation/src/attestations.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use kilt_support::Deposit; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; diff --git a/pallets/attestation/src/authorized_by.rs b/pallets/attestation/src/authorized_by.rs index 71e0c55fdb..bf22f27be9 100644 --- a/pallets/attestation/src/authorized_by.rs +++ b/pallets/attestation/src/authorized_by.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; diff --git a/pallets/attestation/src/benchmarking.rs b/pallets/attestation/src/benchmarking.rs index d82eb4385e..2307449c39 100644 --- a/pallets/attestation/src/benchmarking.rs +++ b/pallets/attestation/src/benchmarking.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at // Old benchmarking macros are a mess. #![allow(clippy::tests_outside_test_module)] @@ -22,7 +22,7 @@ use frame_benchmarking::{account, benchmarks}; use frame_support::traits::{fungible::Mutate, Get}; use frame_system::{pallet_prelude::BlockNumberFor, RawOrigin}; -use sp_runtime::traits::Hash; +use sp_runtime::{traits::Hash, SaturatedConversion}; use ctype::CtypeEntryOf; use kilt_support::traits::GenerateBenchmarkOrigin; @@ -51,7 +51,7 @@ benchmarks! { creator: attester.clone(), created_at: 0u64.into() }); - ::Currency::set_balance(&sender, ::Deposit::get() + ::Deposit::get()); + ::Currency::set_balance(&sender, 100_000_000_000_000_000_000u128.saturated_into()); let origin = ::EnsureOrigin::generate_origin(sender.clone(), attester.clone()); }: _(origin, claim_hash, ctype_hash, None) @@ -79,7 +79,7 @@ benchmarks! { creator: attester.clone(), created_at: 0u64.into() }); - ::Currency::set_balance(&sender, ::Deposit::get() + ::Deposit::get()); + ::Currency::set_balance(&sender, 100_000_000_000_000_000_000u128.saturated_into()); let origin = ::EnsureOrigin::generate_origin(sender.clone(), attester.clone()); Pallet::::add(origin.clone(), claim_hash, ctype_hash, None)?; @@ -108,7 +108,7 @@ benchmarks! { creator: attester.clone(), created_at: 0u64.into() }); - ::Currency::set_balance(&sender, ::Deposit::get() + ::Deposit::get()); + ::Currency::set_balance(&sender, 100_000_000_000_000_000_000u128.saturated_into()); let origin = ::EnsureOrigin::generate_origin(sender.clone(), attester.clone()); Pallet::::add(origin, claim_hash, ctype_hash, None)?; @@ -128,7 +128,7 @@ benchmarks! { creator: attester.clone(), created_at: 0u64.into() }); - ::Currency::set_balance(&sender, ::Deposit::get() + ::Deposit::get()); + ::Currency::set_balance(&sender, 100_000_000_000_000_000_000u128.saturated_into()); let origin = ::EnsureOrigin::generate_origin(sender.clone(), attester); Pallet::::add(origin, claim_hash, ctype_hash, None)?; @@ -149,8 +149,9 @@ benchmarks! { creator: attester.clone(), created_at: 0u64.into() }); - ::Currency::set_balance(&deposit_owner_old, ::Deposit::get() + ::Deposit::get()); - ::Currency::set_balance(&deposit_owner_new, ::Deposit::get() + ::Deposit::get()); + ::Currency::set_balance(&deposit_owner_old, 100_000_000_000_000_000_000u128.saturated_into()); + ::Currency::set_balance(&deposit_owner_new, 100_000_000_000_000_000_000u128.saturated_into()); + let origin = ::EnsureOrigin::generate_origin(deposit_owner_old, attester.clone()); Pallet::::add(origin, claim_hash, ctype_hash, None)?; @@ -179,7 +180,7 @@ benchmarks! { creator: attester.clone(), created_at: 0u64.into() }); - ::Currency::set_balance(&deposit_owner, ::Deposit::get() + ::Deposit::get()); + ::Currency::set_balance(&deposit_owner, 100_000_000_000_000_000_000u128.saturated_into()); let origin = ::EnsureOrigin::generate_origin(deposit_owner.clone(), attester.clone()); Pallet::::add(origin, claim_hash, ctype_hash, None).expect("claim should be added"); diff --git a/pallets/attestation/src/default_weights.rs b/pallets/attestation/src/default_weights.rs index d7c03532d0..44320f681c 100644 --- a/pallets/attestation/src/default_weights.rs +++ b/pallets/attestation/src/default_weights.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for attestation //! diff --git a/pallets/attestation/src/lib.rs b/pallets/attestation/src/lib.rs index d4e75ab038..d408afb2f0 100644 --- a/pallets/attestation/src/lib.rs +++ b/pallets/attestation/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! # Attestation Pallet //! @@ -95,6 +95,8 @@ pub use crate::{ // very end of the development cycle of a pallet, and from time to time it should be commented out to catch any issues // other than the one generated by the `pallet::event` macro. #[allow(clippy::shadow_reuse)] +// map_err is used over inspect_err in the macro-generated code, and we have to ignore it. +#[allow(clippy::manual_inspect)] pub mod pallet { use super::*; diff --git a/pallets/attestation/src/migrations.rs b/pallets/attestation/src/migrations.rs index bb8d1d91a9..6840fb3b0c 100644 --- a/pallets/attestation/src/migrations.rs +++ b/pallets/attestation/src/migrations.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ pallet_prelude::DispatchResult, diff --git a/pallets/attestation/src/mock.rs b/pallets/attestation/src/mock.rs index 73d3a2f669..742be646b5 100644 --- a/pallets/attestation/src/mock.rs +++ b/pallets/attestation/src/mock.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Helpers functions for tests. //! @@ -169,7 +169,9 @@ pub fn insert_attestation(claim_hash: ClaimHashOf, details: Attest } pub fn sr25519_did_from_public_key(public_key: &[u8; 32]) -> SubjectId { - MultiSigner::from(sr25519::Public(*public_key)).into_account().into() + MultiSigner::from(sr25519::Public::from_raw(*public_key)) + .into_account() + .into() } pub fn claim_hash_from_seed(seed: u64) -> Hash { @@ -262,6 +264,12 @@ pub(crate) mod runtime { type SS58Prefix = SS58Prefix; type OnSetCode = (); type MaxConsumers = frame_support::traits::ConstU32<16>; + + type MultiBlockMigrator = (); + type SingleBlockMigrations = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); } parameter_types! { diff --git a/pallets/attestation/src/tests/claim.rs b/pallets/attestation/src/tests/claim.rs index be47560dd8..f4a6947eb0 100644 --- a/pallets/attestation/src/tests/claim.rs +++ b/pallets/attestation/src/tests/claim.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use ctype::mock::get_ctype_hash; use frame_support::{assert_noop, assert_ok}; diff --git a/pallets/attestation/src/tests/delete.rs b/pallets/attestation/src/tests/delete.rs index ac1a1c3b10..a06f9d007e 100644 --- a/pallets/attestation/src/tests/delete.rs +++ b/pallets/attestation/src/tests/delete.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_noop, assert_ok, traits::fungible::InspectHold}; use kilt_support::mock::mock_origin::DoubleOrigin; diff --git a/pallets/attestation/src/tests/deposit.rs b/pallets/attestation/src/tests/deposit.rs index 68395d0f93..e8599263ff 100644 --- a/pallets/attestation/src/tests/deposit.rs +++ b/pallets/attestation/src/tests/deposit.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_noop, assert_ok, traits::fungible::InspectHold}; use kilt_support::{mock::mock_origin::DoubleOrigin, Deposit}; diff --git a/pallets/attestation/src/tests/mod.rs b/pallets/attestation/src/tests/mod.rs index 6beb57bef5..96b94ff5a8 100644 --- a/pallets/attestation/src/tests/mod.rs +++ b/pallets/attestation/src/tests/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod claim; mod delete; diff --git a/pallets/attestation/src/tests/revoke.rs b/pallets/attestation/src/tests/revoke.rs index b2dcb824bc..bf1e3971d0 100644 --- a/pallets/attestation/src/tests/revoke.rs +++ b/pallets/attestation/src/tests/revoke.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_noop, assert_ok, traits::fungible::InspectHold}; use kilt_support::mock::mock_origin::DoubleOrigin; diff --git a/pallets/attestation/src/try_state.rs b/pallets/attestation/src/try_state.rs index f638a16a5a..96480e38e1 100644 --- a/pallets/attestation/src/try_state.rs +++ b/pallets/attestation/src/try_state.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::ensure; use kilt_support::test_utils::log_and_return_error_message; diff --git a/pallets/ctype/src/benchmarking.rs b/pallets/ctype/src/benchmarking.rs index 05648c52f5..6a1bafb457 100644 --- a/pallets/ctype/src/benchmarking.rs +++ b/pallets/ctype/src/benchmarking.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at // Old benchmarking macros are a mess. #![allow(clippy::tests_outside_test_module)] diff --git a/pallets/ctype/src/default_weights.rs b/pallets/ctype/src/default_weights.rs index 7aa3e05b1d..8c79620624 100644 --- a/pallets/ctype/src/default_weights.rs +++ b/pallets/ctype/src/default_weights.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for ctype //! diff --git a/pallets/ctype/src/lib.rs b/pallets/ctype/src/lib.rs index 28f4b6b393..338654715c 100644 --- a/pallets/ctype/src/lib.rs +++ b/pallets/ctype/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! # CType Pallet //! @@ -69,6 +69,8 @@ pub use crate::{default_weights::WeightInfo, pallet::*}; // very end of the development cycle of a pallet, and from time to time it should be commented out to catch any issues // other than the one generated by the `pallet::event` macro. #[allow(clippy::shadow_reuse)] +// map_err is used over inspect_err in the macro-generated code, and we have to ignore it. +#[allow(clippy::manual_inspect)] pub mod pallet { use super::*; use frame_support::{ diff --git a/pallets/ctype/src/mock.rs b/pallets/ctype/src/mock.rs index a9007abfe8..96e65547f7 100644 --- a/pallets/ctype/src/mock.rs +++ b/pallets/ctype/src/mock.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use crate::{Config, CtypeHashOf}; use sp_core::H256; @@ -101,6 +101,11 @@ pub mod runtime { type SS58Prefix = SS58Prefix; type OnSetCode = (); type MaxConsumers = frame_support::traits::ConstU32<16>; + type MultiBlockMigrator = (); + type SingleBlockMigrations = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); } parameter_types! { diff --git a/pallets/ctype/src/tests.rs b/pallets/ctype/src/tests.rs index 115b075a11..764b58e2d0 100644 --- a/pallets/ctype/src/tests.rs +++ b/pallets/ctype/src/tests.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_noop, assert_ok, sp_runtime::traits::Hash, traits::fungible::Inspect}; use frame_system::RawOrigin; diff --git a/pallets/delegation/src/access_control.rs b/pallets/delegation/src/access_control.rs index a06a87df94..5ce7af58dd 100644 --- a/pallets/delegation/src/access_control.rs +++ b/pallets/delegation/src/access_control.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::ensure; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; diff --git a/pallets/delegation/src/benchmarking.rs b/pallets/delegation/src/benchmarking.rs index 7712f82fd5..367c42a733 100644 --- a/pallets/delegation/src/benchmarking.rs +++ b/pallets/delegation/src/benchmarking.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at // Old benchmarking macros are a mess. #![allow(clippy::tests_outside_test_module)] @@ -26,7 +26,7 @@ use frame_support::{ dispatch::DispatchErrorWithPostInfo, storage::bounded_btree_set::BoundedBTreeSet, traits::{ - fungible::{Inspect, InspectHold, Mutate}, + fungible::{InspectHold, Mutate}, Get, }, }; @@ -34,7 +34,7 @@ use frame_system::{pallet_prelude::BlockNumberFor, RawOrigin}; use parity_scale_codec::Encode; use sp_core::{offchain::KeyTypeId, sr25519}; use sp_io::crypto::sr25519_generate; -use sp_runtime::traits::Zero; +use sp_runtime::{traits::Zero, SaturatedConversion}; use sp_std::{num::NonZeroU32, vec::Vec}; use attestation::AttestationAccessControl; @@ -78,10 +78,7 @@ where let hierarchy_root_id = generate_delegation_id::(number); let sender: T::AccountId = account("sender", 0, SEED); - ::Currency::set_balance( - &sender, - ::Currency::minimum_balance() + ::Deposit::get() + ::Deposit::get(), - ); + ::Currency::set_balance(&sender, 100_000_000_000_000_000_000u128.saturated_into()); ctype::Ctypes::::insert( ctype_hash, @@ -150,10 +147,7 @@ where let sig = (delegation_acc_id.clone(), hash.clone()); // add delegation from delegate to parent - ::Currency::set_balance( - &sender, - ::Currency::minimum_balance() + ::Deposit::get() + ::Deposit::get(), - ); + ::Currency::set_balance(&sender, 100_000_000_000_000_000_000u128.saturated_into()); Pallet::::add_delegation( ::EnsureOrigin::generate_origin(sender.clone(), parent_acc_id.clone()), delegation_id, @@ -260,7 +254,7 @@ benchmarks! { }); ::Currency::set_balance( &sender, - ::Currency::minimum_balance() + ::Deposit::get(), + 100_000_000_000_000_000_000u128.saturated_into() ); let origin = ::EnsureOrigin::generate_origin(sender, creator); @@ -301,7 +295,7 @@ benchmarks! { let leaf_acc_id: T::DelegationEntityId = root_public.into(); ::Currency::set_balance( &sender, - ::Currency::minimum_balance() + ::Deposit::get(), + 100_000_000_000_000_000_000u128.saturated_into() ); let origin = ::EnsureOrigin::generate_origin(sender, leaf_acc_id); }: _(origin, delegation_id, hierarchy_id, delegate_acc_id, perm, sig) @@ -325,7 +319,7 @@ benchmarks! { let child_delegation = DelegationNodes::::get(child_id).ok_or("Child of root should have delegation id")?; ::Currency::set_balance( &child_delegation.deposit.owner, - ::Currency::minimum_balance() + ::Deposit::get(), + 100_000_000_000_000_000_000u128.saturated_into() ); let origin = ::EnsureOrigin::generate_origin(sender, child_delegation.details.owner); }: revoke_delegation(origin, child_id, c, r) @@ -371,7 +365,6 @@ benchmarks! { let children: BoundedBTreeSet = root_node.children; let child_id: T::DelegationNodeId = *children.iter().next().ok_or("Root should have children")?; let child_delegation = DelegationNodes::::get(child_id).ok_or("Child of root should have delegation id")?; - assert!(!::Currency::total_balance_on_hold(&sender).is_zero()); let origin = ::EnsureOrigin::generate_origin(sender.clone(), root_acc.into()); }: _(origin, hierarchy_id, r) verify { @@ -391,7 +384,6 @@ benchmarks! { let children: BoundedBTreeSet = root_node.children; let child_id: T::DelegationNodeId = *children.iter().next().ok_or("Root should have children")?; let child_delegation = DelegationNodes::::get(child_id).ok_or("Child of root should have delegation id")?; - assert!(!::Currency::total_balance_on_hold(&sender).is_zero()); let origin = RawOrigin::Signed(sender.clone()); }: _(origin, hierarchy_id, r) @@ -465,10 +457,9 @@ benchmarks! { ::Currency::set_balance( &deposit_owner_new, - ::Currency::minimum_balance() + ::Deposit::get(), + 100_000_000_000_000_000_000u128.saturated_into() ); - assert!(!::Currency::total_balance_on_hold(&deposit_owner_old).is_zero()); let origin = ::EnsureOrigin::generate_origin(deposit_owner_new.clone(), root_acc.into()); }: _(origin, hierarchy_id) verify { @@ -485,7 +476,7 @@ benchmarks! { ::Currency::set_balance( &deposit_owner, - ::Currency::minimum_balance() + ::Deposit::get(), + 100_000_000_000_000_000_000u128.saturated_into() ); let origin = RawOrigin::Signed(deposit_owner); diff --git a/pallets/delegation/src/default_weights.rs b/pallets/delegation/src/default_weights.rs index e6219295c8..97e4369689 100644 --- a/pallets/delegation/src/default_weights.rs +++ b/pallets/delegation/src/default_weights.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for delegation //! diff --git a/pallets/delegation/src/delegation_hierarchy.rs b/pallets/delegation/src/delegation_hierarchy.rs index abcb19280b..6af111f3f2 100644 --- a/pallets/delegation/src/delegation_hierarchy.rs +++ b/pallets/delegation/src/delegation_hierarchy.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use bitflags::bitflags; use frame_support::{storage::bounded_btree_set::BoundedBTreeSet, traits::Get}; diff --git a/pallets/delegation/src/lib.rs b/pallets/delegation/src/lib.rs index 62a49f9b18..03116fb697 100644 --- a/pallets/delegation/src/lib.rs +++ b/pallets/delegation/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! # Delegation Pallet //! @@ -99,6 +99,8 @@ use sp_std::{marker::PhantomData, vec::Vec}; // very end of the development cycle of a pallet, and from time to time it should be commented out to catch any issues // other than the one generated by the `pallet::event` macro. #[allow(clippy::shadow_reuse)] +// map_err is used over inspect_err in the macro-generated code, and we have to ignore it. +#[allow(clippy::manual_inspect)] pub mod pallet { use super::*; diff --git a/pallets/delegation/src/migrations.rs b/pallets/delegation/src/migrations.rs index 24fcadea03..7f4e7c5100 100644 --- a/pallets/delegation/src/migrations.rs +++ b/pallets/delegation/src/migrations.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ pallet_prelude::DispatchResult, diff --git a/pallets/delegation/src/mock.rs b/pallets/delegation/src/mock.rs index c930ec4c31..ea6bf96347 100644 --- a/pallets/delegation/src/mock.rs +++ b/pallets/delegation/src/mock.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use ctype::{mock as ctype_mock, CtypeHashOf}; use frame_support::{ @@ -248,6 +248,12 @@ pub(crate) mod runtime { type SS58Prefix = SS58Prefix; type OnSetCode = (); type MaxConsumers = frame_support::traits::ConstU32<16>; + + type MultiBlockMigrator = (); + type SingleBlockMigrations = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); } parameter_types! { diff --git a/pallets/delegation/src/tests/create.rs b/pallets/delegation/src/tests/create.rs index 4bd702b1c8..f780054cea 100644 --- a/pallets/delegation/src/tests/create.rs +++ b/pallets/delegation/src/tests/create.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ assert_noop, assert_ok, diff --git a/pallets/delegation/src/tests/delegation.rs b/pallets/delegation/src/tests/delegation.rs index 4b1f9c0a68..c7be549d2b 100644 --- a/pallets/delegation/src/tests/delegation.rs +++ b/pallets/delegation/src/tests/delegation.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_noop, traits::fungible::Inspect}; diff --git a/pallets/delegation/src/tests/delete.rs b/pallets/delegation/src/tests/delete.rs index 53f4e24a43..d559f54a68 100644 --- a/pallets/delegation/src/tests/delete.rs +++ b/pallets/delegation/src/tests/delete.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_err, assert_noop, assert_ok, traits::fungible::InspectHold}; use kilt_support::mock::mock_origin::DoubleOrigin; diff --git a/pallets/delegation/src/tests/deposit.rs b/pallets/delegation/src/tests/deposit.rs index 97f103d6ba..4ba6cc204e 100644 --- a/pallets/delegation/src/tests/deposit.rs +++ b/pallets/delegation/src/tests/deposit.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ assert_noop, assert_ok, diff --git a/pallets/delegation/src/tests/mod.rs b/pallets/delegation/src/tests/mod.rs index a718d477f3..431489651e 100644 --- a/pallets/delegation/src/tests/mod.rs +++ b/pallets/delegation/src/tests/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod create; mod delegation; diff --git a/pallets/delegation/src/tests/revoke.rs b/pallets/delegation/src/tests/revoke.rs index d917a4765b..7520d2e619 100644 --- a/pallets/delegation/src/tests/revoke.rs +++ b/pallets/delegation/src/tests/revoke.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_noop, assert_ok}; use kilt_support::mock::mock_origin::DoubleOrigin; diff --git a/pallets/delegation/src/try_state.rs b/pallets/delegation/src/try_state.rs index 29f2f0e8a8..7fc329e293 100644 --- a/pallets/delegation/src/try_state.rs +++ b/pallets/delegation/src/try_state.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::ensure; use kilt_support::test_utils::log_and_return_error_message; diff --git a/pallets/did/src/benchmarking.rs b/pallets/did/src/benchmarking.rs index 36ee3c6f38..0ee28c3998 100644 --- a/pallets/did/src/benchmarking.rs +++ b/pallets/did/src/benchmarking.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at // Old benchmarking macros are a mess. #![allow(clippy::tests_outside_test_module)] diff --git a/pallets/did/src/did_details.rs b/pallets/did/src/did_details.rs index e78978c912..82db7a3ab6 100644 --- a/pallets/did/src/did_details.rs +++ b/pallets/did/src/did_details.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ ensure, @@ -245,7 +245,7 @@ impl, AccountId> DidVerifiableIdentifier for I { ); // Safe to reconstruct the public key using the recovered value from // secp256k1_ecdsa_recover_compressed - Ok(DidVerificationKey::from(ecdsa::Public(recovered_pk))) + Ok(DidVerificationKey::from(ecdsa::Public::from_raw(recovered_pk))) } } } diff --git a/pallets/did/src/errors.rs b/pallets/did/src/errors.rs index a21809b184..2acd2946c4 100644 --- a/pallets/did/src/errors.rs +++ b/pallets/did/src/errors.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use scale_info::TypeInfo; use sp_runtime::DispatchError; diff --git a/pallets/did/src/lib.rs b/pallets/did/src/lib.rs index 1cbe124856..b2f1829d9d 100644 --- a/pallets/did/src/lib.rs +++ b/pallets/did/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! # DID Pallet //! @@ -147,6 +147,8 @@ use frame_system::RawOrigin; // very end of the development cycle of a pallet, and from time to time it should be commented out to catch any issues // other than the one generated by the `pallet::event` macro. #[allow(clippy::shadow_reuse)] +// map_err is used over inspect_err in the macro-generated code, and we have to ignore it. +#[allow(clippy::manual_inspect)] pub mod pallet { use super::*; use did_details::DidCreationDetails; diff --git a/pallets/did/src/migrations.rs b/pallets/did/src/migrations.rs index 1db25f6027..28eadb8721 100644 --- a/pallets/did/src/migrations.rs +++ b/pallets/did/src/migrations.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ pallet_prelude::DispatchResult, diff --git a/pallets/did/src/mock.rs b/pallets/did/src/mock.rs index 95c8cdaa76..d6c8e32b5c 100644 --- a/pallets/did/src/mock.rs +++ b/pallets/did/src/mock.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at #[cfg(not(feature = "runtime-benchmarks"))] use crate::{DidRawOrigin, EnsureDidOrigin}; @@ -106,6 +106,11 @@ impl frame_system::Config for Test { type SS58Prefix = SS58Prefix; type OnSetCode = (); type MaxConsumers = frame_support::traits::ConstU32<16>; + type MultiBlockMigrator = (); + type SingleBlockMigrations = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); } parameter_types! { diff --git a/pallets/did/src/mock_utils.rs b/pallets/did/src/mock_utils.rs index 0fad421ee5..fde1d795f3 100644 --- a/pallets/did/src/mock_utils.rs +++ b/pallets/did/src/mock_utils.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::storage::bounded_btree_set::BoundedBTreeSet; use frame_system::pallet_prelude::BlockNumberFor; diff --git a/pallets/did/src/origin.rs b/pallets/did/src/origin.rs index 66d0cdb4f1..5b6dc0ff05 100644 --- a/pallets/did/src/origin.rs +++ b/pallets/did/src/origin.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::traits::{EnsureOrigin, EnsureOriginWithArg}; use kilt_support::traits::CallSources; diff --git a/pallets/did/src/service_endpoints.rs b/pallets/did/src/service_endpoints.rs index 11405b2c64..eb804acfb4 100644 --- a/pallets/did/src/service_endpoints.rs +++ b/pallets/did/src/service_endpoints.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use crate::{errors, Config}; use frame_support::{ensure, traits::Get, BoundedVec}; diff --git a/pallets/did/src/signature.rs b/pallets/did/src/signature.rs index fbc899e68d..78d62742ec 100644 --- a/pallets/did/src/signature.rs +++ b/pallets/did/src/signature.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use kilt_support::signature::{SignatureVerificationError, SignatureVerificationResult, VerifySignature}; use sp_runtime::SaturatedConversion; diff --git a/pallets/did/src/tests/create.rs b/pallets/did/src/tests/create.rs index 84a80f9a61..3e92b79d75 100644 --- a/pallets/did/src/tests/create.rs +++ b/pallets/did/src/tests/create.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ assert_noop, assert_ok, diff --git a/pallets/did/src/tests/create_from_account.rs b/pallets/did/src/tests/create_from_account.rs index c39983abf8..2ebf85fa3d 100644 --- a/pallets/did/src/tests/create_from_account.rs +++ b/pallets/did/src/tests/create_from_account.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ assert_noop, assert_ok, @@ -72,20 +72,20 @@ fn blueprint_test_successful(account_id: AccountIdOf, verification_key: Di #[test] fn successful_ed25519() { - let verification_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); + let verification_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); blueprint_test_successful(ACCOUNT_00, verification_key); } #[test] fn successful_sr25519() { - let verification_key = DidVerificationKey::Sr25519(sr25519::Public(*ACCOUNT_00.as_ref())); + let verification_key = DidVerificationKey::Sr25519(sr25519::Public::from_raw(*ACCOUNT_00.as_ref())); blueprint_test_successful(ACCOUNT_00, verification_key); } #[test] fn successful_ecdsa() { // these values where generated with `subkey generate -n kilt --scheme ecdsa` - let verification_key = DidVerificationKey::Ecdsa(ecdsa::Public(hex_literal::hex!( + let verification_key = DidVerificationKey::Ecdsa(ecdsa::Public::from_raw(hex_literal::hex!( "02484c08122e16f2cbce7697b5a9393280ca67dd8b91a907c1bc4b93451ebf4093" ))); let account_id: AccountIdOf = @@ -101,7 +101,7 @@ fn successful_account() { #[test] fn should_not_overwrite() { - let verification_key = DidVerificationKey::Sr25519(sr25519::Public(*ACCOUNT_00.as_ref())); + let verification_key = DidVerificationKey::Sr25519(sr25519::Public::from_raw(*ACCOUNT_00.as_ref())); let account_id = ACCOUNT_00; let balance = ::BaseDeposit::get() @@ -128,7 +128,7 @@ fn should_not_overwrite() { #[test] fn should_not_recreate_deleted_did() { - let verification_key = DidVerificationKey::Sr25519(sr25519::Public(*ACCOUNT_00.as_ref())); + let verification_key = DidVerificationKey::Sr25519(sr25519::Public::from_raw(*ACCOUNT_00.as_ref())); let account_id = ACCOUNT_00; let balance = ::BaseDeposit::get() @@ -157,7 +157,7 @@ fn should_not_recreate_deleted_did() { #[test] fn should_not_create_without_funds() { - let verification_key = DidVerificationKey::Sr25519(sr25519::Public(*ACCOUNT_00.as_ref())); + let verification_key = DidVerificationKey::Sr25519(sr25519::Public::from_raw(*ACCOUNT_00.as_ref())); let account_id = ACCOUNT_00; ExtBuilder::default().build_and_execute_with_sanity_tests(None, || { diff --git a/pallets/did/src/tests/delete.rs b/pallets/did/src/tests/delete.rs index 3a1175c7bd..b1956e53cb 100644 --- a/pallets/did/src/tests/delete.rs +++ b/pallets/did/src/tests/delete.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ assert_noop, assert_ok, diff --git a/pallets/did/src/tests/deposit.rs b/pallets/did/src/tests/deposit.rs index 6335ff45e5..cd96f336d1 100644 --- a/pallets/did/src/tests/deposit.rs +++ b/pallets/did/src/tests/deposit.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ assert_err, assert_noop, assert_ok, diff --git a/pallets/did/src/tests/dispatch_as.rs b/pallets/did/src/tests/dispatch_as.rs index a5093e683f..606c846b37 100644 --- a/pallets/did/src/tests/dispatch_as.rs +++ b/pallets/did/src/tests/dispatch_as.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_noop, assert_ok}; diff --git a/pallets/did/src/tests/dispatch_as/attestation.rs b/pallets/did/src/tests/dispatch_as/attestation.rs index 2a8164fa9d..1bf4e51053 100644 --- a/pallets/did/src/tests/dispatch_as/attestation.rs +++ b/pallets/did/src/tests/dispatch_as/attestation.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::assert_ok; use sp_core::{ecdsa, ed25519, sr25519}; @@ -64,8 +64,8 @@ fn successful_key_dispatch_ed25519() { let deposit_owner = ACCOUNT_01; let caller = ACCOUNT_00; let did_identifier = ACCOUNT_02; - let verification_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_02.as_ref())); - let attestation_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); + let verification_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_02.as_ref())); + let attestation_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); blueprint_successful_dispatch_with_key(did_identifier, caller, verification_key, attestation_key, deposit_owner); } @@ -74,15 +74,15 @@ fn successful_key_dispatch_sr25519() { let deposit_owner = ACCOUNT_01; let caller = ACCOUNT_00; let did_identifier = ACCOUNT_02; - let attestation_key = DidVerificationKey::Sr25519(sr25519::Public(*ACCOUNT_00.as_ref())); - let verification_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); + let attestation_key = DidVerificationKey::Sr25519(sr25519::Public::from_raw(*ACCOUNT_00.as_ref())); + let verification_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); blueprint_successful_dispatch_with_key(did_identifier, caller, verification_key, attestation_key, deposit_owner); } #[test] fn successful_key_dispatch_ecdsa() { // these values where generated with `subkey generate -n kilt --scheme ecdsa` - let attestation_key = DidVerificationKey::Ecdsa(ecdsa::Public(hex_literal::hex!( + let attestation_key = DidVerificationKey::Ecdsa(ecdsa::Public::from_raw(hex_literal::hex!( "02484c08122e16f2cbce7697b5a9393280ca67dd8b91a907c1bc4b93451ebf4093" ))); let caller: AccountIdOf = @@ -90,7 +90,7 @@ fn successful_key_dispatch_ecdsa() { let deposit_owner = ACCOUNT_01; let did_identifier = ACCOUNT_02; - let verification_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); + let verification_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); blueprint_successful_dispatch_with_key(did_identifier, caller, verification_key, attestation_key, deposit_owner); } @@ -100,7 +100,7 @@ fn successful_key_dispatch_account() { let caller = ACCOUNT_00; let did_identifier = ACCOUNT_02; let attestation_key = DidVerificationKey::Account(ACCOUNT_00); - let verification_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); + let verification_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); blueprint_successful_dispatch_with_key(did_identifier, caller, verification_key, attestation_key, deposit_owner); } @@ -129,34 +129,34 @@ fn blueprint_failed_dispatch_with_key( #[test] fn failed_no_match_ed25519() { - let attestation_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_01.as_ref())); - let delegation_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); - let authentication_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); + let attestation_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_01.as_ref())); + let delegation_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); + let authentication_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); blueprint_failed_dispatch_with_key(ACCOUNT_00, authentication_key, attestation_key, delegation_key); } #[test] fn failed_no_match_sr25519() { - let attestation_key = DidVerificationKey::Sr25519(sr25519::Public(*ACCOUNT_01.as_ref())); - let delegation_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); - let authentication_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); + let attestation_key = DidVerificationKey::Sr25519(sr25519::Public::from_raw(*ACCOUNT_01.as_ref())); + let delegation_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); + let authentication_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); blueprint_failed_dispatch_with_key(ACCOUNT_00, authentication_key, attestation_key, delegation_key); } #[test] fn failed_no_match_ecdsa() { - let attestation_key = DidVerificationKey::Ecdsa(ecdsa::Public(hex_literal::hex!( + let attestation_key = DidVerificationKey::Ecdsa(ecdsa::Public::from_raw(hex_literal::hex!( "02484c08122e16f2cbce7697b5a9393280ca67dd8b91a907c1bc4b93451ebf4093" ))); - let delegation_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); - let authentication_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); + let delegation_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); + let authentication_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); blueprint_failed_dispatch_with_key(ACCOUNT_00, authentication_key, attestation_key, delegation_key); } #[test] fn failed_no_match_account() { let attestation_key = DidVerificationKey::Account(ACCOUNT_01); - let delegation_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); - let authentication_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); + let delegation_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); + let authentication_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); blueprint_failed_dispatch_with_key(ACCOUNT_00, authentication_key, attestation_key, delegation_key); } diff --git a/pallets/did/src/tests/dispatch_as/authentication.rs b/pallets/did/src/tests/dispatch_as/authentication.rs index b3f8b3757f..ff3fd95c45 100644 --- a/pallets/did/src/tests/dispatch_as/authentication.rs +++ b/pallets/did/src/tests/dispatch_as/authentication.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::assert_ok; use sp_core::{ecdsa, ed25519, sr25519}; @@ -61,7 +61,7 @@ fn successful_key_dispatch_ed25519() { let deposit_owner = ACCOUNT_01; let caller = ACCOUNT_00; let did_identifier = ACCOUNT_02; - let verification_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); + let verification_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); blueprint_successful_dispatch_with_key(did_identifier, caller, verification_key, deposit_owner); } @@ -70,14 +70,14 @@ fn successful_key_dispatch_sr25519() { let deposit_owner = ACCOUNT_01; let caller = ACCOUNT_00; let did_identifier = ACCOUNT_02; - let verification_key = DidVerificationKey::Sr25519(sr25519::Public(*ACCOUNT_00.as_ref())); + let verification_key = DidVerificationKey::Sr25519(sr25519::Public::from_raw(*ACCOUNT_00.as_ref())); blueprint_successful_dispatch_with_key(did_identifier, caller, verification_key, deposit_owner) } #[test] fn successful_key_dispatch_ecdsa() { // these values where generated with `subkey generate -n kilt --scheme ecdsa` - let verification_key = DidVerificationKey::Ecdsa(ecdsa::Public(hex_literal::hex!( + let verification_key = DidVerificationKey::Ecdsa(ecdsa::Public::from_raw(hex_literal::hex!( "02484c08122e16f2cbce7697b5a9393280ca67dd8b91a907c1bc4b93451ebf4093" ))); let caller: AccountIdOf = @@ -122,34 +122,34 @@ fn blueprint_failed_dispatch_with_key( #[test] fn failed_no_match_ed25519() { - let authentication_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_01.as_ref())); - let attestation_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); - let delegation_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); + let authentication_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_01.as_ref())); + let attestation_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); + let delegation_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); blueprint_failed_dispatch_with_key(ACCOUNT_00, authentication_key, attestation_key, delegation_key); } #[test] fn failed_no_match_sr25519() { - let authentication_key = DidVerificationKey::Sr25519(sr25519::Public(*ACCOUNT_01.as_ref())); - let attestation_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); - let delegation_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); + let authentication_key = DidVerificationKey::Sr25519(sr25519::Public::from_raw(*ACCOUNT_01.as_ref())); + let attestation_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); + let delegation_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); blueprint_failed_dispatch_with_key(ACCOUNT_00, authentication_key, attestation_key, delegation_key); } #[test] fn failed_no_match_ecdsa() { - let authentication_key = DidVerificationKey::Ecdsa(ecdsa::Public(hex_literal::hex!( + let authentication_key = DidVerificationKey::Ecdsa(ecdsa::Public::from_raw(hex_literal::hex!( "02484c08122e16f2cbce7697b5a9393280ca67dd8b91a907c1bc4b93451ebf4093" ))); - let attestation_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); - let delegation_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); + let attestation_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); + let delegation_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); blueprint_failed_dispatch_with_key(ACCOUNT_00, authentication_key, attestation_key, delegation_key); } #[test] fn failed_no_match_account() { let authentication_key = DidVerificationKey::Account(ACCOUNT_01); - let attestation_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); - let delegation_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); + let attestation_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); + let delegation_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); blueprint_failed_dispatch_with_key(ACCOUNT_00, authentication_key, attestation_key, delegation_key); } diff --git a/pallets/did/src/tests/dispatch_as/delegation.rs b/pallets/did/src/tests/dispatch_as/delegation.rs index a7c59838bd..2be5b307f6 100644 --- a/pallets/did/src/tests/dispatch_as/delegation.rs +++ b/pallets/did/src/tests/dispatch_as/delegation.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::assert_ok; use sp_core::{ecdsa, ed25519, sr25519}; @@ -64,8 +64,8 @@ fn successful_dispatch_ed25519() { let deposit_owner = ACCOUNT_01; let caller = ACCOUNT_00; let did_identifier = ACCOUNT_02; - let verification_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_02.as_ref())); - let delegation_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); + let verification_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_02.as_ref())); + let delegation_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); blueprint_successful_dispatch_with_key(did_identifier, caller, verification_key, delegation_key, deposit_owner); } @@ -74,15 +74,15 @@ fn successful_dispatch_sr25519() { let deposit_owner = ACCOUNT_01; let caller = ACCOUNT_00; let did_identifier = ACCOUNT_02; - let delegation_key = DidVerificationKey::Sr25519(sr25519::Public(*ACCOUNT_00.as_ref())); - let verification_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); + let delegation_key = DidVerificationKey::Sr25519(sr25519::Public::from_raw(*ACCOUNT_00.as_ref())); + let verification_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); blueprint_successful_dispatch_with_key(did_identifier, caller, verification_key, delegation_key, deposit_owner); } #[test] fn successful_dispatch_ecdsa() { // these values where generated with `subkey generate -n kilt --scheme ecdsa` - let delegation_key = DidVerificationKey::Ecdsa(ecdsa::Public(hex_literal::hex!( + let delegation_key = DidVerificationKey::Ecdsa(ecdsa::Public::from_raw(hex_literal::hex!( "02484c08122e16f2cbce7697b5a9393280ca67dd8b91a907c1bc4b93451ebf4093" ))); let caller: AccountIdOf = @@ -90,7 +90,7 @@ fn successful_dispatch_ecdsa() { let deposit_owner = ACCOUNT_01; let did_identifier = ACCOUNT_02; - let verification_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); + let verification_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); blueprint_successful_dispatch_with_key(did_identifier, caller, verification_key, delegation_key, deposit_owner); } @@ -100,7 +100,7 @@ fn successful_dispatch_account() { let caller = ACCOUNT_00; let did_identifier = ACCOUNT_02; let delegation_key = DidVerificationKey::Account(ACCOUNT_00); - let verification_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); + let verification_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); blueprint_successful_dispatch_with_key(did_identifier, caller, verification_key, delegation_key, deposit_owner); } @@ -129,34 +129,34 @@ fn blueprint_failed_dispatch_with_key( #[test] fn failed_no_match_ed25519() { - let delegation_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_01.as_ref())); - let attestation_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); - let authentication_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); + let delegation_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_01.as_ref())); + let attestation_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); + let authentication_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); blueprint_failed_dispatch_with_key(ACCOUNT_00, authentication_key, attestation_key, delegation_key); } #[test] fn failed_no_match_sr25519() { - let delegation_key = DidVerificationKey::Sr25519(sr25519::Public(*ACCOUNT_01.as_ref())); - let attestation_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); - let authentication_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); + let delegation_key = DidVerificationKey::Sr25519(sr25519::Public::from_raw(*ACCOUNT_01.as_ref())); + let attestation_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); + let authentication_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); blueprint_failed_dispatch_with_key(ACCOUNT_00, authentication_key, attestation_key, delegation_key); } #[test] fn failed_no_match_ecdsa() { - let delegation_key = DidVerificationKey::Ecdsa(ecdsa::Public(hex_literal::hex!( + let delegation_key = DidVerificationKey::Ecdsa(ecdsa::Public::from_raw(hex_literal::hex!( "02484c08122e16f2cbce7697b5a9393280ca67dd8b91a907c1bc4b93451ebf4093" ))); - let attestation_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); - let authentication_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); + let attestation_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); + let authentication_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); blueprint_failed_dispatch_with_key(ACCOUNT_00, authentication_key, attestation_key, delegation_key); } #[test] fn failed_no_match_account() { let delegation_key = DidVerificationKey::Account(ACCOUNT_01); - let attestation_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); - let authentication_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); + let attestation_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); + let authentication_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); blueprint_failed_dispatch_with_key(ACCOUNT_00, authentication_key, attestation_key, delegation_key); } diff --git a/pallets/did/src/tests/dispatch_as/error_cases.rs b/pallets/did/src/tests/dispatch_as/error_cases.rs index 37c6015c19..8721059795 100644 --- a/pallets/did/src/tests/dispatch_as/error_cases.rs +++ b/pallets/did/src/tests/dispatch_as/error_cases.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use sp_core::ed25519; @@ -40,7 +40,7 @@ fn no_did() { #[test] fn deleted_did() { let did_identifier = ACCOUNT_02; - let authentication_key = DidVerificationKey::Ed25519(ed25519::Public(*ACCOUNT_00.as_ref())); + let authentication_key = DidVerificationKey::Ed25519(ed25519::Public::from_raw(*ACCOUNT_00.as_ref())); let did_details = generate_base_did_details(authentication_key, Some(ACCOUNT_01.clone())); blueprint_failed_dispatch( diff --git a/pallets/did/src/tests/manage_keys.rs b/pallets/did/src/tests/manage_keys.rs index 734b7cbcd0..d0b4743769 100644 --- a/pallets/did/src/tests/manage_keys.rs +++ b/pallets/did/src/tests/manage_keys.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_noop, assert_ok}; use frame_system::pallet_prelude::BlockNumberFor; diff --git a/pallets/did/src/tests/mod.rs b/pallets/did/src/tests/mod.rs index c0deb81111..431a5c10a2 100644 --- a/pallets/did/src/tests/mod.rs +++ b/pallets/did/src/tests/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod create; mod create_from_account; diff --git a/pallets/did/src/tests/service_endpoint.rs b/pallets/did/src/tests/service_endpoint.rs index 35668b4774..e535934b9d 100644 --- a/pallets/did/src/tests/service_endpoint.rs +++ b/pallets/did/src/tests/service_endpoint.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ assert_noop, assert_ok, diff --git a/pallets/did/src/tests/submit.rs b/pallets/did/src/tests/submit.rs index 32808d7fdf..4b354554cd 100644 --- a/pallets/did/src/tests/submit.rs +++ b/pallets/did/src/tests/submit.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_err, assert_noop, assert_ok}; use parity_scale_codec::Encode; @@ -227,7 +227,7 @@ fn check_tx_block_number_too_low_error() { Did::submit_did_call( RuntimeOrigin::signed(caller.clone()), Box::new(call_operation.operation.clone()), - did::DidSignature::from(signature.clone()) + did::DidSignature::from(signature) ), did::Error::::TransactionExpired ); @@ -270,7 +270,7 @@ fn check_tx_block_number_too_high_error() { Did::submit_did_call( RuntimeOrigin::signed(caller.clone()), Box::new(call_operation.operation.clone()), - did::DidSignature::from(signature.clone()) + did::DidSignature::from(signature) ), did::Error::::TransactionExpired ); diff --git a/pallets/did/src/tests/verify_did_op.rs b/pallets/did/src/tests/verify_did_op.rs index 316c149f75..7942e5f7f9 100644 --- a/pallets/did/src/tests/verify_did_op.rs +++ b/pallets/did/src/tests/verify_did_op.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_noop, assert_ok}; use parity_scale_codec::Encode; diff --git a/pallets/did/src/traits/lifecycle_hooks/deletion/mod.rs b/pallets/did/src/traits/lifecycle_hooks/deletion/mod.rs index b53d75bdd3..b1ab61aafe 100644 --- a/pallets/did/src/traits/lifecycle_hooks/deletion/mod.rs +++ b/pallets/did/src/traits/lifecycle_hooks/deletion/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use crate::{Config, DidIdentifierOf}; diff --git a/pallets/did/src/traits/lifecycle_hooks/mock.rs b/pallets/did/src/traits/lifecycle_hooks/mock.rs index 24076c18ee..247278624e 100644 --- a/pallets/did/src/traits/lifecycle_hooks/mock.rs +++ b/pallets/did/src/traits/lifecycle_hooks/mock.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{construct_runtime, parameter_types}; use frame_system::{mocking::MockBlock, EnsureSigned}; @@ -65,6 +65,11 @@ impl frame_system::Config for TestRuntime { type SS58Prefix = (); type SystemWeightInfo = (); type Version = (); + type MultiBlockMigrator = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); + type SingleBlockMigrations = (); } parameter_types! { diff --git a/pallets/did/src/traits/lifecycle_hooks/mod.rs b/pallets/did/src/traits/lifecycle_hooks/mod.rs index 84933acffb..3e6522f687 100644 --- a/pallets/did/src/traits/lifecycle_hooks/mod.rs +++ b/pallets/did/src/traits/lifecycle_hooks/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at pub mod deletion; pub use deletion::DidDeletionHook; diff --git a/pallets/did/src/traits/mod.rs b/pallets/did/src/traits/mod.rs index 646b569e48..61a7bf71d8 100644 --- a/pallets/did/src/traits/mod.rs +++ b/pallets/did/src/traits/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod lifecycle_hooks; pub use lifecycle_hooks::{deletion, DidDeletionHook, DidLifecycleHooks}; diff --git a/pallets/did/src/try_state.rs b/pallets/did/src/try_state.rs index 53c70a3575..9aaccfb660 100644 --- a/pallets/did/src/try_state.rs +++ b/pallets/did/src/try_state.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::ensure; use kilt_support::test_utils::log_and_return_error_message; diff --git a/pallets/did/src/utils.rs b/pallets/did/src/utils.rs index 775eb14755..770dcd51a9 100644 --- a/pallets/did/src/utils.rs +++ b/pallets/did/src/utils.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use fluent_uri::Uri; use parity_scale_codec::Encode; @@ -34,8 +34,8 @@ pub fn calculate_key_id(key: &DidPublicKey>) -> KeyIdO /// Verifies that an input string contains only traditional (non-extended) ASCII /// characters. -pub(crate) fn is_valid_ascii_string(input: &str) -> bool { - input.chars().all(|c| c.is_ascii()) +pub(crate) const fn is_valid_ascii_string(input: &str) -> bool { + input.is_ascii() } /// Verifies that an input is a valid URI according to W3C RFC3986. diff --git a/pallets/pallet-asset-switch/src/benchmarking.rs b/pallets/pallet-asset-switch/src/benchmarking.rs index 01b1004746..5ddfcd4285 100644 --- a/pallets/pallet-asset-switch/src/benchmarking.rs +++ b/pallets/pallet-asset-switch/src/benchmarking.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_benchmarking::v2::instance_benchmarks; use xcm::{VersionedAsset, VersionedAssetId, VersionedInteriorLocation, VersionedLocation}; diff --git a/pallets/pallet-asset-switch/src/default_weights.rs b/pallets/pallet-asset-switch/src/default_weights.rs index 5de6697142..99b6f8168c 100644 --- a/pallets/pallet-asset-switch/src/default_weights.rs +++ b/pallets/pallet-asset-switch/src/default_weights.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for pallet_asset_switch //! diff --git a/pallets/pallet-asset-switch/src/lib.rs b/pallets/pallet-asset-switch/src/lib.rs index 58bd7df431..4409ca903b 100644 --- a/pallets/pallet-asset-switch/src/lib.rs +++ b/pallets/pallet-asset-switch/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at #![cfg_attr(not(feature = "std"), no_std)] #![doc = include_str!("../README.md")] @@ -72,6 +72,8 @@ const LOG_TARGET: &str = "runtime::pallet-asset-switch"; // very end of the development cycle of a pallet, and from time to time it should be commented out to catch any issues // other than the one generated by the `pallet::event` macro. #[allow(clippy::shadow_reuse)] +// map_err is used over inspect_err in the macro-generated code, and we have to ignore it. +#[allow(clippy::manual_inspect)] pub mod pallet { use crate::{ switch::{NewSwitchPairInfo, SwitchPairInfo, SwitchPairInfoV4, SwitchPairStatus, UnconfirmedSwitchInfo}, @@ -780,15 +782,13 @@ impl, I: 'static> Pallet { /// 3. Set the appendix, executed regardless of the outcome of the transfer: /// /// 3.1 Report back to our chain the assets in the holding registry. + /// /// This will contain either only the XCM fee token in case of successful /// transfer, or the XCM fee token + the amount of funds supposed to be /// transferred. - /// - /// 3.2 Deposit the un-transferred asset (only if the transfer - /// failed) back into our account. - /// + /// 3.2 Deposit the un-transferred asset (only if the transfer failed) + /// back into our account. /// 3.3 Refund any surplus weight. - /// /// 3.4 Deposit the remaining XCM fee assets in the user's account. /// /// 4. Withdraw the requested asset (this operation should be infallible diff --git a/pallets/pallet-asset-switch/src/mock.rs b/pallets/pallet-asset-switch/src/mock.rs index c01cc83681..d1bd17e84b 100644 --- a/pallets/pallet-asset-switch/src/mock.rs +++ b/pallets/pallet-asset-switch/src/mock.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ construct_runtime, parameter_types, storage_alias, @@ -79,6 +79,12 @@ impl frame_system::Config for MockRuntime { type SS58Prefix = ConstU16<1>; type SystemWeightInfo = (); type Version = (); + + type MultiBlockMigrator = (); + type SingleBlockMigrations = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); } #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, MaxEncodedLen, Encode, Decode, Debug, TypeInfo, Default)] diff --git a/pallets/pallet-asset-switch/src/switch.rs b/pallets/pallet-asset-switch/src/switch.rs index 8acd2b250a..69d8ba4641 100644 --- a/pallets/pallet-asset-switch/src/switch.rs +++ b/pallets/pallet-asset-switch/src/switch.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; diff --git a/pallets/pallet-asset-switch/src/tests/force_set_switch_pair.rs b/pallets/pallet-asset-switch/src/tests/force_set_switch_pair.rs index af392c9901..e664de9a22 100644 --- a/pallets/pallet-asset-switch/src/tests/force_set_switch_pair.rs +++ b/pallets/pallet-asset-switch/src/tests/force_set_switch_pair.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_noop, assert_ok}; use frame_system::RawOrigin; diff --git a/pallets/pallet-asset-switch/src/tests/force_unset_switch_pair.rs b/pallets/pallet-asset-switch/src/tests/force_unset_switch_pair.rs index 8574b16434..b251fe63b3 100644 --- a/pallets/pallet-asset-switch/src/tests/force_unset_switch_pair.rs +++ b/pallets/pallet-asset-switch/src/tests/force_unset_switch_pair.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_noop, assert_ok}; use frame_system::RawOrigin; diff --git a/pallets/pallet-asset-switch/src/tests/mod.rs b/pallets/pallet-asset-switch/src/tests/mod.rs index e571a76093..22ff142a2f 100644 --- a/pallets/pallet-asset-switch/src/tests/mod.rs +++ b/pallets/pallet-asset-switch/src/tests/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod force_set_switch_pair; mod force_unset_switch_pair; diff --git a/pallets/pallet-asset-switch/src/tests/pause_switch_pair.rs b/pallets/pallet-asset-switch/src/tests/pause_switch_pair.rs index cab90a82e3..918d3e6da4 100644 --- a/pallets/pallet-asset-switch/src/tests/pause_switch_pair.rs +++ b/pallets/pallet-asset-switch/src/tests/pause_switch_pair.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_noop, assert_ok}; use frame_system::RawOrigin; diff --git a/pallets/pallet-asset-switch/src/tests/resume_switch_pair.rs b/pallets/pallet-asset-switch/src/tests/resume_switch_pair.rs index eab88fd65d..c59c7b0fac 100644 --- a/pallets/pallet-asset-switch/src/tests/resume_switch_pair.rs +++ b/pallets/pallet-asset-switch/src/tests/resume_switch_pair.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_noop, assert_ok}; use frame_system::RawOrigin; diff --git a/pallets/pallet-asset-switch/src/tests/set_switch_pair.rs b/pallets/pallet-asset-switch/src/tests/set_switch_pair.rs index 7a67b680e1..c30c91b6e7 100644 --- a/pallets/pallet-asset-switch/src/tests/set_switch_pair.rs +++ b/pallets/pallet-asset-switch/src/tests/set_switch_pair.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_noop, assert_ok}; use frame_system::RawOrigin; diff --git a/pallets/pallet-asset-switch/src/tests/switch.rs b/pallets/pallet-asset-switch/src/tests/switch.rs index 50155ee3f4..78a4da929e 100644 --- a/pallets/pallet-asset-switch/src/tests/switch.rs +++ b/pallets/pallet-asset-switch/src/tests/switch.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ assert_noop, assert_ok, diff --git a/pallets/pallet-asset-switch/src/tests/update_remote_xcm_fee.rs b/pallets/pallet-asset-switch/src/tests/update_remote_xcm_fee.rs index ef9b83a1e8..d45b16e423 100644 --- a/pallets/pallet-asset-switch/src/tests/update_remote_xcm_fee.rs +++ b/pallets/pallet-asset-switch/src/tests/update_remote_xcm_fee.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_noop, assert_ok}; use frame_system::RawOrigin; diff --git a/pallets/pallet-asset-switch/src/traits.rs b/pallets/pallet-asset-switch/src/traits.rs index 3cdba7efa8..4c31cfdcd9 100644 --- a/pallets/pallet-asset-switch/src/traits.rs +++ b/pallets/pallet-asset-switch/src/traits.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use xcm::VersionedLocation; diff --git a/pallets/pallet-asset-switch/src/try_state.rs b/pallets/pallet-asset-switch/src/try_state.rs index c8d69259ef..d40a7db9e0 100644 --- a/pallets/pallet-asset-switch/src/try_state.rs +++ b/pallets/pallet-asset-switch/src/try_state.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::ensure; use frame_system::pallet_prelude::BlockNumberFor; diff --git a/pallets/pallet-asset-switch/src/xcm/convert/mod.rs b/pallets/pallet-asset-switch/src/xcm/convert/mod.rs index d04ef537e6..07cca0127b 100644 --- a/pallets/pallet-asset-switch/src/xcm/convert/mod.rs +++ b/pallets/pallet-asset-switch/src/xcm/convert/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use sp_runtime::{traits::TryConvert, AccountId32}; use xcm::v4::Junction::{self, AccountId32 as AccountId32Junction}; diff --git a/pallets/pallet-asset-switch/src/xcm/match/mock.rs b/pallets/pallet-asset-switch/src/xcm/match/mock.rs index 64d097241c..78778dfa11 100644 --- a/pallets/pallet-asset-switch/src/xcm/match/mock.rs +++ b/pallets/pallet-asset-switch/src/xcm/match/mock.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ construct_runtime, parameter_types, @@ -67,6 +67,11 @@ impl frame_system::Config for MockRuntime { type SS58Prefix = ConstU16<0>; type SystemWeightInfo = (); type Version = (); + type MultiBlockMigrator = (); + type SingleBlockMigrations = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); } impl pallet_balances::Config for MockRuntime { diff --git a/pallets/pallet-asset-switch/src/xcm/match/mod.rs b/pallets/pallet-asset-switch/src/xcm/match/mod.rs index 38e309e349..b88033f839 100644 --- a/pallets/pallet-asset-switch/src/xcm/match/mod.rs +++ b/pallets/pallet-asset-switch/src/xcm/match/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::ensure; use sp_std::marker::PhantomData; diff --git a/pallets/pallet-asset-switch/src/xcm/match/tests.rs b/pallets/pallet-asset-switch/src/xcm/match/tests.rs index d1bab7446e..f59859352c 100644 --- a/pallets/pallet-asset-switch/src/xcm/match/tests.rs +++ b/pallets/pallet-asset-switch/src/xcm/match/tests.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::assert_noop; use xcm::{ @@ -115,6 +115,7 @@ fn successful_with_stored_v3() { #[test] fn successful_with_stored_v2() { + #[allow(deprecated)] let location = xcm::v2::MultiLocation { parents: 1, interior: xcm::v2::Junctions::X1(xcm::v2::Junction::Parachain(1_000)), diff --git a/pallets/pallet-asset-switch/src/xcm/mod.rs b/pallets/pallet-asset-switch/src/xcm/mod.rs index a2e2f61cca..27a383d354 100644 --- a/pallets/pallet-asset-switch/src/xcm/mod.rs +++ b/pallets/pallet-asset-switch/src/xcm/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at pub mod convert; pub use convert::AccountId32ToAccountId32JunctionConverter; diff --git a/pallets/pallet-asset-switch/src/xcm/query/mock.rs b/pallets/pallet-asset-switch/src/xcm/query/mock.rs index aef36a2c1b..fbd82ab252 100644 --- a/pallets/pallet-asset-switch/src/xcm/query/mock.rs +++ b/pallets/pallet-asset-switch/src/xcm/query/mock.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ construct_runtime, parameter_types, @@ -67,6 +67,11 @@ impl frame_system::Config for MockRuntime { type SS58Prefix = ConstU16<0>; type SystemWeightInfo = (); type Version = (); + type MultiBlockMigrator = (); + type SingleBlockMigrations = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); } impl pallet_balances::Config for MockRuntime { diff --git a/pallets/pallet-asset-switch/src/xcm/query/mod.rs b/pallets/pallet-asset-switch/src/xcm/query/mod.rs index f66317e4bb..151ee10b18 100644 --- a/pallets/pallet-asset-switch/src/xcm/query/mod.rs +++ b/pallets/pallet-asset-switch/src/xcm/query/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::traits::{fungible::Mutate, tokens::Preservation}; use xcm::v4::{AssetId, Junctions::Here, Location, Response, Weight, XcmContext}; diff --git a/pallets/pallet-asset-switch/src/xcm/query/tests/expecting_response.rs b/pallets/pallet-asset-switch/src/xcm/query/tests/expecting_response.rs index 72c9460dfa..a7b35b4e89 100644 --- a/pallets/pallet-asset-switch/src/xcm/query/tests/expecting_response.rs +++ b/pallets/pallet-asset-switch/src/xcm/query/tests/expecting_response.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use sp_std::sync::Arc; use xcm::v4::{Junction, Junctions, Location, Parent, ParentThen}; diff --git a/pallets/pallet-asset-switch/src/xcm/query/tests/mod.rs b/pallets/pallet-asset-switch/src/xcm/query/tests/mod.rs index 2a523b5b3a..2067a25ad7 100644 --- a/pallets/pallet-asset-switch/src/xcm/query/tests/mod.rs +++ b/pallets/pallet-asset-switch/src/xcm/query/tests/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod expecting_response; mod on_response; diff --git a/pallets/pallet-asset-switch/src/xcm/query/tests/on_response.rs b/pallets/pallet-asset-switch/src/xcm/query/tests/on_response.rs index 4c316c7ef5..b7e5929b9c 100644 --- a/pallets/pallet-asset-switch/src/xcm/query/tests/on_response.rs +++ b/pallets/pallet-asset-switch/src/xcm/query/tests/on_response.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ assert_storage_noop, diff --git a/pallets/pallet-asset-switch/src/xcm/test_utils.rs b/pallets/pallet-asset-switch/src/xcm/test_utils.rs index f22d0aa770..a1686b6988 100644 --- a/pallets/pallet-asset-switch/src/xcm/test_utils.rs +++ b/pallets/pallet-asset-switch/src/xcm/test_utils.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use sp_runtime::traits::Zero; use xcm::{ diff --git a/pallets/pallet-asset-switch/src/xcm/trade/mod.rs b/pallets/pallet-asset-switch/src/xcm/trade/mod.rs index b16ba19110..d04e2c673c 100644 --- a/pallets/pallet-asset-switch/src/xcm/trade/mod.rs +++ b/pallets/pallet-asset-switch/src/xcm/trade/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod xcm_fee_asset; pub use xcm_fee_asset::UsingComponentsForXcmFeeAsset; diff --git a/pallets/pallet-asset-switch/src/xcm/trade/switch_pair_remote_asset/mock.rs b/pallets/pallet-asset-switch/src/xcm/trade/switch_pair_remote_asset/mock.rs index d352813f79..8b424b8a0c 100644 --- a/pallets/pallet-asset-switch/src/xcm/trade/switch_pair_remote_asset/mock.rs +++ b/pallets/pallet-asset-switch/src/xcm/trade/switch_pair_remote_asset/mock.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ construct_runtime, parameter_types, @@ -67,6 +67,11 @@ impl frame_system::Config for MockRuntime { type SS58Prefix = ConstU16<0>; type SystemWeightInfo = (); type Version = (); + type MultiBlockMigrator = (); + type SingleBlockMigrations = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); } impl pallet_balances::Config for MockRuntime { diff --git a/pallets/pallet-asset-switch/src/xcm/trade/switch_pair_remote_asset/mod.rs b/pallets/pallet-asset-switch/src/xcm/trade/switch_pair_remote_asset/mod.rs index f64e855ab4..bb3641c5a2 100644 --- a/pallets/pallet-asset-switch/src/xcm/trade/switch_pair_remote_asset/mod.rs +++ b/pallets/pallet-asset-switch/src/xcm/trade/switch_pair_remote_asset/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ ensure, @@ -224,9 +224,8 @@ where // We don't care if the pool is enabled, since we're sending all non-refunded // weight to the configured destination account (e.g., treasury). if self.remaining_fungible_balance > Zero::zero() { - let Ok(remaining_balance_as_local_currency) = LocalCurrencyBalanceOf::::try_from(self.remaining_fungible_balance).map_err(|e| { + let Ok(remaining_balance_as_local_currency) = LocalCurrencyBalanceOf::::try_from(self.remaining_fungible_balance).inspect_err(|_| { log::error!(target: LOG_TARGET, "Failed to convert remaining balance {:?} to local currency balance", self.remaining_fungible_balance); - e }) else { return; }; // No error should ever be thrown from inside this block. @@ -235,9 +234,8 @@ where &FeeDestinationAccount::get(), remaining_balance_as_local_currency, Preservation::Preserve, - ).map_err(|e| { + ).inspect_err(|_| { log::error!(target: LOG_TARGET, "Failed to transfer unused balance {:?} from switch pair pool account {:?} to specified account {:?}", remaining_balance_as_local_currency, switch_pair.pool_account, FeeDestinationAccount::get()); - e }); debug_assert!( diff --git a/pallets/pallet-asset-switch/src/xcm/trade/switch_pair_remote_asset/tests/buy_weight.rs b/pallets/pallet-asset-switch/src/xcm/trade/switch_pair_remote_asset/tests/buy_weight.rs index a1cf262d23..ad1e64360d 100644 --- a/pallets/pallet-asset-switch/src/xcm/trade/switch_pair_remote_asset/tests/buy_weight.rs +++ b/pallets/pallet-asset-switch/src/xcm/trade/switch_pair_remote_asset/tests/buy_weight.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_noop, assert_storage_noop}; use xcm::{ diff --git a/pallets/pallet-asset-switch/src/xcm/trade/switch_pair_remote_asset/tests/drop.rs b/pallets/pallet-asset-switch/src/xcm/trade/switch_pair_remote_asset/tests/drop.rs index 66dd2618bb..9d6a47e9e0 100644 --- a/pallets/pallet-asset-switch/src/xcm/trade/switch_pair_remote_asset/tests/drop.rs +++ b/pallets/pallet-asset-switch/src/xcm/trade/switch_pair_remote_asset/tests/drop.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_storage_noop, traits::fungible::Inspect as InspectFungible}; use sp_core::Get; diff --git a/pallets/pallet-asset-switch/src/xcm/trade/switch_pair_remote_asset/tests/mod.rs b/pallets/pallet-asset-switch/src/xcm/trade/switch_pair_remote_asset/tests/mod.rs index 660cb0e0f5..815740151f 100644 --- a/pallets/pallet-asset-switch/src/xcm/trade/switch_pair_remote_asset/tests/mod.rs +++ b/pallets/pallet-asset-switch/src/xcm/trade/switch_pair_remote_asset/tests/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod buy_weight; mod drop; diff --git a/pallets/pallet-asset-switch/src/xcm/trade/switch_pair_remote_asset/tests/refund_weight.rs b/pallets/pallet-asset-switch/src/xcm/trade/switch_pair_remote_asset/tests/refund_weight.rs index 5b05f0ea7b..46d4c2d34e 100644 --- a/pallets/pallet-asset-switch/src/xcm/trade/switch_pair_remote_asset/tests/refund_weight.rs +++ b/pallets/pallet-asset-switch/src/xcm/trade/switch_pair_remote_asset/tests/refund_weight.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use sp_runtime::traits::Zero; use xcm::{ diff --git a/pallets/pallet-asset-switch/src/xcm/trade/test_utils.rs b/pallets/pallet-asset-switch/src/xcm/trade/test_utils.rs index 6e29afddbb..9fe641f83a 100644 --- a/pallets/pallet-asset-switch/src/xcm/trade/test_utils.rs +++ b/pallets/pallet-asset-switch/src/xcm/trade/test_utils.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::weights::WeightToFee; use xcm::v3::Weight; diff --git a/pallets/pallet-asset-switch/src/xcm/trade/xcm_fee_asset/mock.rs b/pallets/pallet-asset-switch/src/xcm/trade/xcm_fee_asset/mock.rs index 68b6356915..f1640f7959 100644 --- a/pallets/pallet-asset-switch/src/xcm/trade/xcm_fee_asset/mock.rs +++ b/pallets/pallet-asset-switch/src/xcm/trade/xcm_fee_asset/mock.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{construct_runtime, parameter_types, traits::Everything}; use frame_system::{mocking::MockBlock, EnsureRoot, EnsureSigned}; @@ -60,6 +60,11 @@ impl frame_system::Config for MockRuntime { type SS58Prefix = ConstU16<0>; type SystemWeightInfo = (); type Version = (); + type MultiBlockMigrator = (); + type SingleBlockMigrations = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); } parameter_types! { diff --git a/pallets/pallet-asset-switch/src/xcm/trade/xcm_fee_asset/mod.rs b/pallets/pallet-asset-switch/src/xcm/trade/xcm_fee_asset/mod.rs index f919adb838..2a0a9c0e07 100644 --- a/pallets/pallet-asset-switch/src/xcm/trade/xcm_fee_asset/mod.rs +++ b/pallets/pallet-asset-switch/src/xcm/trade/xcm_fee_asset/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ensure, weights::WeightToFee as WeightToFeeT}; use sp_runtime::traits::Zero; @@ -151,14 +151,13 @@ where .remote_xcm_fee .clone() .try_into() - .map_err(|e| { + .inspect_err(|e| { log::error!( target: LOG_TARGET, "Failed to convert stored asset ID {:?} into v4 AssetId with error {:?}", switch_pair.remote_xcm_fee, e ); - e }) .ok()?; // Double check the store asset fungibility type, in case it changes between diff --git a/pallets/pallet-asset-switch/src/xcm/trade/xcm_fee_asset/tests/buy_weight.rs b/pallets/pallet-asset-switch/src/xcm/trade/xcm_fee_asset/tests/buy_weight.rs index 0569e1fc04..a7acfbd812 100644 --- a/pallets/pallet-asset-switch/src/xcm/trade/xcm_fee_asset/tests/buy_weight.rs +++ b/pallets/pallet-asset-switch/src/xcm/trade/xcm_fee_asset/tests/buy_weight.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_noop, assert_storage_noop}; use xcm::{ @@ -367,6 +367,7 @@ fn successful_on_stored_fungible_xcm_fee_asset_v3_with_input_fungible_and_non_fu #[test] fn successful_on_stored_fungible_xcm_fee_asset_v2_with_input_fungible() { + #[allow(deprecated)] let location = xcm::v2::MultiLocation { parents: 1, interior: xcm::v2::Junctions::X1(xcm::v2::Junction::Parachain(1_000)), @@ -404,6 +405,7 @@ fn successful_on_stored_fungible_xcm_fee_asset_v2_with_input_fungible() { #[test] fn fails_on_stored_fungible_xcm_fee_asset_v2_with_input_non_fungible() { + #[allow(deprecated)] let location = xcm::v2::MultiLocation { parents: 1, interior: xcm::v2::Junctions::X1(xcm::v2::Junction::Parachain(1_000)), @@ -442,6 +444,7 @@ fn fails_on_stored_fungible_xcm_fee_asset_v2_with_input_non_fungible() { #[test] fn successful_on_stored_fungible_xcm_fee_asset_v2_with_input_fungible_and_non_fungible() { + #[allow(deprecated)] let location = xcm::v2::MultiLocation { parents: 1, interior: xcm::v2::Junctions::X1(xcm::v2::Junction::Parachain(1_000)), @@ -737,6 +740,7 @@ fn skips_on_stored_non_fungible_xcm_fee_asset_v3_with_fungible_input() { #[test] fn skips_on_stored_non_fungible_xcm_fee_asset_v2_with_fungible_input() { + #[allow(deprecated)] let location = xcm::v2::MultiLocation { parents: 1, interior: xcm::v2::Junctions::X1(xcm::v2::Junction::Parachain(1_000)), @@ -748,6 +752,7 @@ fn skips_on_stored_non_fungible_xcm_fee_asset_v2_with_fungible_input() { SwitchPairStatus::Running, ); // Set XCM fee asset to the XCM version 2. + #[allow(deprecated)] let non_fungible_remote_xcm_fee_v2: xcm::v2::MultiAsset = xcm::v2::MultiAsset::try_from(new_switch_pair_info.remote_xcm_fee) .map(|asset| xcm::v2::MultiAsset { @@ -781,6 +786,7 @@ fn skips_on_stored_non_fungible_xcm_fee_asset_v2_with_fungible_input() { #[test] fn skips_on_stored_non_fungible_xcm_fee_asset_v2_with_non_fungible_input() { + #[allow(deprecated)] let location = xcm::v2::MultiLocation { parents: 1, interior: xcm::v2::Junctions::X1(xcm::v2::Junction::Parachain(1_000)), @@ -792,6 +798,7 @@ fn skips_on_stored_non_fungible_xcm_fee_asset_v2_with_non_fungible_input() { SwitchPairStatus::Running, ); // Set XCM fee asset to the XCM version 2. + #[allow(deprecated)] let non_fungible_remote_xcm_fee_v2: xcm::v2::MultiAsset = xcm::v2::MultiAsset::try_from(new_switch_pair_info.remote_xcm_fee) .map(|asset| xcm::v2::MultiAsset { diff --git a/pallets/pallet-asset-switch/src/xcm/trade/xcm_fee_asset/tests/mod.rs b/pallets/pallet-asset-switch/src/xcm/trade/xcm_fee_asset/tests/mod.rs index 8bfc772d98..1a09f45dce 100644 --- a/pallets/pallet-asset-switch/src/xcm/trade/xcm_fee_asset/tests/mod.rs +++ b/pallets/pallet-asset-switch/src/xcm/trade/xcm_fee_asset/tests/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod buy_weight; mod refund_weight; diff --git a/pallets/pallet-asset-switch/src/xcm/trade/xcm_fee_asset/tests/refund_weight.rs b/pallets/pallet-asset-switch/src/xcm/trade/xcm_fee_asset/tests/refund_weight.rs index 4e8d825235..9c06259c6a 100644 --- a/pallets/pallet-asset-switch/src/xcm/trade/xcm_fee_asset/tests/refund_weight.rs +++ b/pallets/pallet-asset-switch/src/xcm/trade/xcm_fee_asset/tests/refund_weight.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::assert_storage_noop; use sp_runtime::traits::Zero; @@ -495,6 +495,7 @@ fn successful_on_stored_fungible_xcm_fee_asset_v3_with_zero_remaining_balance_an #[test] fn successful_on_stored_fungible_xcm_fee_asset_v2() { + #[allow(deprecated)] let location = xcm::v2::MultiLocation { parents: 1, interior: xcm::v2::Junctions::X1(xcm::v2::Junction::Parachain(1_000)), diff --git a/pallets/pallet-asset-switch/src/xcm/transact/mock.rs b/pallets/pallet-asset-switch/src/xcm/transact/mock.rs index 1552568649..85ed282ca9 100644 --- a/pallets/pallet-asset-switch/src/xcm/transact/mock.rs +++ b/pallets/pallet-asset-switch/src/xcm/transact/mock.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ construct_runtime, @@ -74,6 +74,11 @@ impl frame_system::Config for MockRuntime { type SS58Prefix = ConstU16<0>; type SystemWeightInfo = (); type Version = (); + type MultiBlockMigrator = (); + type SingleBlockMigrations = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); } #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, MaxEncodedLen, Encode, Decode, Debug, TypeInfo, Default)] diff --git a/pallets/pallet-asset-switch/src/xcm/transact/mod.rs b/pallets/pallet-asset-switch/src/xcm/transact/mod.rs index 95edc494e3..7bd04f6e33 100644 --- a/pallets/pallet-asset-switch/src/xcm/transact/mod.rs +++ b/pallets/pallet-asset-switch/src/xcm/transact/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ ensure, diff --git a/pallets/pallet-asset-switch/src/xcm/transact/tests/deposit_asset.rs b/pallets/pallet-asset-switch/src/xcm/transact/tests/deposit_asset.rs index 1d0182f987..d027c9af74 100644 --- a/pallets/pallet-asset-switch/src/xcm/transact/tests/deposit_asset.rs +++ b/pallets/pallet-asset-switch/src/xcm/transact/tests/deposit_asset.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_noop, assert_ok, traits::fungible::Inspect as InspectFungible}; use sp_runtime::AccountId32; diff --git a/pallets/pallet-asset-switch/src/xcm/transact/tests/mod.rs b/pallets/pallet-asset-switch/src/xcm/transact/tests/mod.rs index 65a097a7c2..2c9277f74d 100644 --- a/pallets/pallet-asset-switch/src/xcm/transact/tests/mod.rs +++ b/pallets/pallet-asset-switch/src/xcm/transact/tests/mod.rs @@ -14,6 +14,6 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod deposit_asset; diff --git a/pallets/pallet-asset-switch/src/xcm/transfer/mock.rs b/pallets/pallet-asset-switch/src/xcm/transfer/mock.rs index d16c78280c..008235b584 100644 --- a/pallets/pallet-asset-switch/src/xcm/transfer/mock.rs +++ b/pallets/pallet-asset-switch/src/xcm/transfer/mock.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{construct_runtime, parameter_types, traits::Everything}; use frame_system::{mocking::MockBlock, EnsureRoot, EnsureSigned}; @@ -61,6 +61,11 @@ impl frame_system::Config for MockRuntime { type SS58Prefix = ConstU16<0>; type SystemWeightInfo = (); type Version = (); + type MultiBlockMigrator = (); + type SingleBlockMigrations = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); } parameter_types! { diff --git a/pallets/pallet-asset-switch/src/xcm/transfer/mod.rs b/pallets/pallet-asset-switch/src/xcm/transfer/mod.rs index 8ce55c8430..c0980dd456 100644 --- a/pallets/pallet-asset-switch/src/xcm/transfer/mod.rs +++ b/pallets/pallet-asset-switch/src/xcm/transfer/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod xcm_fee_asset; pub use xcm_fee_asset::IsSwitchPairXcmFeeAsset; diff --git a/pallets/pallet-asset-switch/src/xcm/transfer/switch_pair_remote_asset/mod.rs b/pallets/pallet-asset-switch/src/xcm/transfer/switch_pair_remote_asset/mod.rs index 62f81db317..bc7c464145 100644 --- a/pallets/pallet-asset-switch/src/xcm/transfer/switch_pair_remote_asset/mod.rs +++ b/pallets/pallet-asset-switch/src/xcm/transfer/switch_pair_remote_asset/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::traits::ContainsPair; use sp_std::marker::PhantomData; @@ -49,9 +49,8 @@ where }; // 2. We only trust the EXACT configured remote location (no parent is allowed). - let Ok(stored_remote_reserve_location_v4): Result = switch_pair.remote_reserve_location.clone().try_into().map_err(|e| { + let Ok(stored_remote_reserve_location_v4): Result = switch_pair.remote_reserve_location.clone().try_into().inspect_err(|e| { log::error!(target: LOG_TARGET, "Failed to convert stored remote reserve location {:?} into v4 xcm version with error {:?}.", switch_pair.remote_reserve_location, e); - e }) else { return false; }; if stored_remote_reserve_location_v4 != *b { log::trace!( @@ -64,9 +63,8 @@ where } // 3. Verify the asset ID matches the remote asset ID to switch for local ones. - let Ok(stored_remote_asset_id): Result = switch_pair.remote_asset_id.clone().try_into().map_err(|e| { + let Ok(stored_remote_asset_id): Result = switch_pair.remote_asset_id.clone().try_into().inspect_err(|&e| { log::error!(target: LOG_TARGET, "Failed to convert stored remote asset ID {:?} into v4 xcm version with error {:?}.", switch_pair.remote_asset_id, e); - e }) else { return false; }; a.id == stored_remote_asset_id diff --git a/pallets/pallet-asset-switch/src/xcm/transfer/switch_pair_remote_asset/tests.rs b/pallets/pallet-asset-switch/src/xcm/transfer/switch_pair_remote_asset/tests.rs index 872d23e2c4..d6fa3d5be1 100644 --- a/pallets/pallet-asset-switch/src/xcm/transfer/switch_pair_remote_asset/tests.rs +++ b/pallets/pallet-asset-switch/src/xcm/transfer/switch_pair_remote_asset/tests.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::traits::ContainsPair; use xcm::{ @@ -258,6 +258,7 @@ fn true_with_stored_remote_location_v3() { #[test] fn true_with_stored_remote_location_v2() { + #[allow(deprecated)] let location = xcm::v2::MultiLocation { parents: 1, interior: xcm::v2::Junctions::X1(xcm::v2::Junction::Parachain(1_000)), diff --git a/pallets/pallet-asset-switch/src/xcm/transfer/xcm_fee_asset/mod.rs b/pallets/pallet-asset-switch/src/xcm/transfer/xcm_fee_asset/mod.rs index 2f7b3f990f..a2b5312082 100644 --- a/pallets/pallet-asset-switch/src/xcm/transfer/xcm_fee_asset/mod.rs +++ b/pallets/pallet-asset-switch/src/xcm/transfer/xcm_fee_asset/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::traits::ContainsPair; use sp_std::marker::PhantomData; @@ -49,9 +49,8 @@ where }; // 2. We only trust the EXACT configured remote location (no parent is allowed). - let Ok(stored_remote_reserve_location_v4): Result = switch_pair.remote_reserve_location.clone().try_into().map_err(|e| { + let Ok(stored_remote_reserve_location_v4): Result = switch_pair.remote_reserve_location.clone().try_into().inspect_err(|e| { log::error!(target: LOG_TARGET, "Failed to convert stored remote reserve location {:?} into v4 xcm version with error {:?}.", switch_pair.remote_reserve_location, e); - e }) else { return false; }; if stored_remote_reserve_location_v4 != *b { log::trace!( @@ -64,9 +63,8 @@ where } // 3. Verify the asset ID matches the configured XCM fee asset ID. - let Ok(stored_remote_asset_fee): Result = switch_pair.remote_xcm_fee.clone().try_into().map_err(|e| { + let Ok(stored_remote_asset_fee): Result = switch_pair.remote_xcm_fee.clone().try_into().inspect_err(|e| { log::error!(target: LOG_TARGET, "Failed to convert stored remote asset fee {:?} into v4 xcm version with error {:?}.", switch_pair.remote_xcm_fee, e); - e }) else { return false; }; a.id == stored_remote_asset_fee.id diff --git a/pallets/pallet-asset-switch/src/xcm/transfer/xcm_fee_asset/tests.rs b/pallets/pallet-asset-switch/src/xcm/transfer/xcm_fee_asset/tests.rs index 14117a1dee..8c05fd8cc2 100644 --- a/pallets/pallet-asset-switch/src/xcm/transfer/xcm_fee_asset/tests.rs +++ b/pallets/pallet-asset-switch/src/xcm/transfer/xcm_fee_asset/tests.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::traits::ContainsPair; use xcm::{ @@ -148,6 +148,7 @@ fn true_with_stored_xcm_fee_asset_v3() { #[test] fn true_with_stored_xcm_fee_asset_v2() { + #[allow(deprecated)] let location = xcm::v2::MultiLocation { parents: 1, interior: xcm::v2::Junctions::X1(xcm::v2::Junction::Parachain(1_000)), @@ -298,6 +299,7 @@ fn true_with_stored_remote_location_v3() { #[test] fn true_with_stored_remote_location_v2() { + #[allow(deprecated)] let location = xcm::v2::MultiLocation { parents: 1, interior: xcm::v2::Junctions::X1(xcm::v2::Junction::Parachain(1_000)), diff --git a/pallets/pallet-bonded-coins/README.md b/pallets/pallet-bonded-coins/README.md index 9bfd466f89..66390d719f 100644 --- a/pallets/pallet-bonded-coins/README.md +++ b/pallets/pallet-bonded-coins/README.md @@ -11,13 +11,6 @@ This pallet provides functionality to: - Burn tokens to release collateral. - Manage the lifecycle of currency pools, including refunding and destroying pools. -### Rounding - -Rounding issues are a problem and cannot be completely avoided due to the nature of limited resources on a computer, resulting in a lack of representation for irrational numbers. -This pallet cannot guarantee mathematically exact calculations. -However, it can guarantee the reproducibility of the same result based on the usage of [fixed-point][fixed-point] numbers. - - ## Key Concepts ### Bonding Curve @@ -115,57 +108,214 @@ The `Config` trait defines the configuration parameters and associated types req ## Life Cycle of a Pool -1. **Creation**: - - A pool is created using the `create_pool` function. - - The manager specifies the bonding curve, collateral type, currencies, and whether the bonded coins are transferable. - - A deposit is taken from the caller, which can be reclaimed once the pool is destroyed. - -2. **Refund Process**: - - The refund process can be started by the manager using the `start_refund` function. - - The refund process can be forced to start using the `force_start_refund` function, which requires force privileges. - - Collateral can be refunded to a specific account using the `refund_account` function, based on the owned bonded currency. - -3. **Destruction**: - - The destruction process can be started by the manager using the `start_destroy` function. This operation will fail if accounts with bonded currencies still exist. - - The destruction process can be forced to start using the `force_start_destroy` function, which requires force privileges. - - The destruction process is completed using the `finish_destroy` function, which refunds any taken deposits. +1. An __Owner__ initializes a new pool by calling `create_pool`, specifying the bonding curve, metadata of the new currencies, which currency to use as a collateral, and whether currencies should be `transferable`. The __Owner__ will be the new pool’s first __Manager__. + - A storage deposit will be paid by the __Owner__ in addition to transaction fees. +2. Optional: __Owner__ makes manager-level changes to the new pool or associated assets, such as setting locks on mint/burn functionality, or changing the asset management team. +3. Optional: __Owner__ re-assigns or un-assigns management privileges. In the second case, no further management-level changes can be made, including the initialization of the refund mechanism. +4. __Traders__ buy into one of the associated currencies by calling `mint_into`. + - If the __Owner__ has flagged the pool’s associated assets as `transferable` upon creation, __Traders__ may transfer their holdings to other accounts, enabling, for example, secondary markets. This is done by interacting with the assets pallet directly via its extrinsics (`transfer`, `transfer_keep_alive`, `approve_transfer`, etc). +5. __Traders__ sell their holdings of any of the associated currencies by calling `burn_into`. +6. Optional: __Manager__ can end trading of the associated assets and distribute all collateral collected among holders. To do so, they call `start_refund`. All minting and burning is halted. + - This is followed by calling `refund_account` for each asset and account holding funds. This call can be called by anyone for any account. +7. When no collateral remains in the pool _OR_ when all linked assets have a total supply of 0 (all funds burnt), the pool __Owner__ or __Manager__ can initialize the destruction of the pool by calling start_destroy. All minting, burning, transferring, and refunding is halted. + - If the pool __Manager__ has been unassigned, the pool cannot be drained forcefully by the __Owner__. Either all __Traders__ need to be convinced to burn their holdings, or an appeal must be made to the configured force origin (typically blockchain governance) to call `force_start_refund` (enabling collateral distribution as in 6.) or `force_start_destroy` (forcefully destroying the pool despite value still being locked in the pool). +8. If any balance remains for some account on any asset associated with the pool, these accounts have to be destroyed by calling the asset pallet’s `destroy_accounts` extrinsic for that asset. + - This can be called by any account. + - This scenario may occur either because destruction was initiated via `force_start_destroy`, or in rare cases where during refunding there is less collateral than bonded currency and not all accounts receive a share of collateral, leaving the collateral exhausted before all accounts have been refunded. +9. If any approvals have been created for some account by __Traders__ (via calling `approve_transfer` on the assets pallet) on any asset associated with the pool, these approvals have to be destroyed by calling the asset pallet’s `destroy_approvals` extrinsic for that asset. + - This can be called by any account. +10. Once no accounts or approvals remain on any associated asset, the pool record can be purged from the blockchain state by calling `finish_destroy`. + - The storage deposit and (if any) residual collateral will be transferred to the __Owner__. + - This can be called by any account. ## Functions ### Public Functions +#### Permissionless + +Can be called by any regular origin (`DefaultOrigin`/`PoolCreateOrigin`; subject to runtime configuration). + - `create_pool`: Creates a new pool with the specified bonding curve, collateral type, and currencies. - During the pool creation step, the manager must specify whether the bonded coins are transferable or not. - This flag can not be changed later on. - The selected denomination is used not only as metadata but also to scale down the existing supply or the amount specified in a mint or burn operation. + Additional configuration determines the denomination of bonded coins, whether they are + transferable or not, and whether their asset management teams may be re-assigned. + These settings cannot be changed after pool creation. + The selected denomination is used not only as metadata but also to scale down the existing supply or the amount specified in a mint or burn operation. A deposit is taken from the caller, which is returned once the pool is destroyed. -- `reset_team`: Resets the managing team of a pool. - Only the admin and the freezer can be updated in this operation. -- `reset_manager`: Resets the manager of a pool. -- `set_lock`: Sets a lock on a pool. - Locks specify who is able to mint and burn a bonded currency. - After applying the lock, the pool becomes permissioned, and only the manager is able to mint or burn bonded currencies. -- `unlock`: Unlocks the pool. - Can only be called by the manager. - `mint_into`: Mints new tokens by locking up collateral. In the mint_into operation the beneficiary must be specified. The collateral is taken from the caller. - `burn_into`: Burns tokens to release collateral. In the burn_into operation the beneficiary must be specified. The funds are burned from the caller. -- `start_refund`: Starts the refund process for a pool. - Only the manager is able to start the refund process. -- `force_start_refund`: Forces the start of the refund process for a pool. - Requires force privileges. -- `refund_account`: Refunds collateral to a specific account. +- `refund_account`: Can only be called on pools in 'Refunding' state. Refunds collateral to a specific account. The amount of refunded collateral is determined by the owned bonded currency. +- `finish_destroy`: Can only be called on pools in 'Destroying' state. Completes the destruction process for a pool. + Refunds any taken deposits. + +#### Permissioned + +Can only be called by a pool's manager origin. + +- `reset_team`: Resets the managing team of a pool. + Only the admin and the freezer can be updated in this operation. + This will always fail for pools where the `allow_reset_team` setting is `false`. +- `reset_manager`: Resets the manager of a pool. +- `set_lock`: Sets a lock on a pool. + Locks specify who is able to mint and burn a bonded currency. + After applying the lock, the pool becomes permissioned, and only the manager is able to mint or burn bonded currencies. +- `unlock`: Unlocks the pool. +- `start_refund`: Starts the refund process for a pool. - `start_destroy`: Starts the destruction process for a pool. - Only the manager and the owner is able to start the destroy process. + Both the manager and the owner are able to start the destroy process. If accounts with bonded currencies still exist, this operation will fail. + +#### Privileged + +Can only be called by the force origin (`ForceOrigin`; subject to runtime configuration). + +- `force_start_refund`: Forces the start of the refund process for a pool. + Requires force privileges. - `force_start_destroy`: Forces the start of the destruction process for a pool. Requires force privileges. -- `finish_destroy`: Completes the destruction process for a pool. - Refunds any taken deposits. + +## Permissions Structure & (De-)Centralization + +In its current form, the pallet allows three different levels of central control over a pool: + +#### Full manager authority + +Upon creation, every pool has the `manager` field set to the account creating the pool (the __Owner__). The __Owner__ can also choose to set the `allow_reset_team` flag on the pool to `true` during creation (this cannot be changed afterwards\!). In this configuration, the __Owner__/__Manager__ has near-total authority over the pool’s lifecycle and its associated assets, allowing them to: + +- Transfer pool management privileges to another account +- Impose and lift a Lock on the pool, halting/resuming all minting and/or burning +- Mint and burn bonded tokens even though mint/burn is locked for all others +- Initiate the refund process, halting bonded token mints and burns + - Since the `refund_account` extrinsic applies for refunds proportionally across all bonded currencies, assuming equal value, the refund process could potentially be abused to perform market manipulations. +- Assign or modify the currency management team, and thereby exercise control over bonded currency funds held by other wallets, including: + - Freeze or unfreeze funds + - Force-transfer a wallet’s balance to another account + - Slash/destroy a wallet’s balance + +For these reasons users are advised to exercise caution when a pool’s `allow_reset_team` is set to `true`. **This is true even if the `manager` field is set to `None`**; even though the pool configuration is now immutable, asset management team changes may have been made prior to un-assigning the __Manager__, which means that individuals may still exercise privileged control over the bonded assets linked to the pool. + +#### Restricted manager authority + +Pools where the `allow_reset_team` is set to `false` do not allow changes to the asset management team, even if a pool `manager` exists. Therefore, the __Manager__ has a much more restricted set of privileges, limited to: + +- Transferring pool management privileges to another account +- Imposing and lifting a Lock on the pool, halting/resuming all minting and/or burning +- Minting and burning bonded tokens even though mint/burn is locked for all others +- Initiating the refund process, halting bonded token mints and burns + +Still, these permissions can potentially allow a __Manager__ to: + +- Trap user’s funds by imposing burn locks after they minted coins in exchange for collateral +- Perform market manipulations via imposing locks or via initiating refund when token distribution and price conditions are in their favor + +#### Unmanaged / unprivileged pools + +While the `manager` field is set to the pool creator at the time of creation, a __Manager__ can drop all privileges by calling the `reset_manager` transaction with a `None` argument, resulting in the `manager` field being unset. +Pools with no __Manager__ and the `allow_reset_team` set to `false` can be considered unprivileged, as: + +- Their current configuration is immutable +- The pool __Owner__ has given up all relevant privileges and control over the pool’s bonded assets + +While there is still a single transaction that only the __Owner__ is privileged to make (`start_destroy`), this does not significantly impact bonded token economics, as it can only be called once all users have burnt all their holdings of bonded tokens linked to this pool. +Unprivileged pools where bonded currency supplies are non-zero thus cannot be purged unless by force origin intervention. + +### Force Origin + +The pallet implements several transactions, prefixed with `force_*`, that are restricted to use by a ‘force’-origin. This origin can be configured differently in each chain/runtime this pallet is integrated into, but is assumed to be the blockchain’s governing body which can also decide on runtime upgrades and thus has unlimited control over blockchain state and state transition functions. +The transactions `force_start_refund` & `force_start_destroy` are designed to allow the forced closure of pools, which may be necessary, e.g., because of inactive accounts preventing purge of a pool which is otherwise unused, or because the pool has been found to be involved in illegitimate activities. + +## Known Limitations + +### Rounding + +Rounding issues are a problem and cannot be completely avoided due to the nature of limited resources on a computer, resulting in a lack of representation for irrational numbers. +This pallet cannot guarantee mathematically exact calculations. +However, it can guarantee the reproducibility of the same result based on the usage of [fixed-point][fixed-point] numbers. + +### Numerical Overflow + +Working with fixed precision numerical representations imposes limits on the supply of bonded tokens that can exist, as well as on the amount that can be burnt or minted at once. These boundaries depend on multiple factors, including the data types chosen for representing balances in the pallets and in the bonding curves module, the denominations of collateral and bonded tokens, and the chosen curve and parameters. + +The following types of boundaries related to numerical overflow of token amounts exist in the system: + +#### Limits independent of curve- and parameter choice + +##### **Limited total supply due to capacity of assets pallet / fungibles balance type** + +Bonded coin balances are stored in an external pallet implementing the Fungibles interfaces defined in [`frame_support::traits::tokens::fungibles`](https://docs.rs/frame-support/35.0.0/frame_support/traits/tokens/fungibles/index.html). The size of the integer type used to represent balances limits the maximum balance that can be stored for any given bonded currency. And because the same type is used for representing the total supply of this asset, this limit applies to the sum of all balances as well. + +*Example:* +The u128 integer type frequently used to store balances in polkadot imposes a maximum supply of 2128 \= 3.40 \* 10³⁸. + +##### **Limited total supply due to capacity of bonding curves module parameter type** + +The bonding curves module uses fixed-precision fractional numbers for cost calculations. To do so, total supplies received from the Fungibles implementation are scaled by their denomination to account for the typically reduced whole-number capacity of fixed-precision fractionals compared to integer types. Depending on the choice of denomination for a pool, this limit may still be magnitudes lower than the limit imposed by the capacity of the balance (integer) type. + +*Example:* +[Using a fixed-point number with a maximum value of 274 and a denomination of 15, overflow would occur for any total supply \>= 274 \* 1015 \= 1.89 \* 10³⁷, which is still an order of magnitude below the capacity of a u128. + +#### Limits depending on curve- and parameter choice + +##### **LMSR** + +The following boundaries apply to all currencies in a pool, at all times. If these are violated either before or as a consequence of a mint or burn the operation will fail. + +supply \+ m × ln(N) \<= MAX(coefficient) +and +(min \- supply) / m \>= MIN(coefficient) +and +(supply \- max) / m \>= MIN(coefficient) + +where +*supply \= the token’s supply, scaled by its denomination* +*max \= largest supply in the pool’s set of bonded currencies* +*min \= smallest supply in the pool’s set of bonded currencies* +*m \= liquidity parameter m* +*N \= number of bonded currencies* +*MAX(coefficient) \= Maximum value for fixed precision number type; e.g., around 274 for a signed type with 75 integer bits.* +*MIN(coefficient) \= Minimum value for fixed precision number type; e.g., \-274 for a signed type with 75 integer bits.* + +##### **Polynomial** + +This type of curve sums up the supply of all bonded coins in a pool, so limits apply to their sum. + +Due to the curve’s exponential nature, minting large amounts at once can lead to very high cost, possibly overflowing the fixed precision number type. In scenarios where users hold large amounts of collateral that exceed the limit of the fixed type (as the collateral balance type is likely to have a larger capacity), minting in multiple increments may work. + +For very low amounts minted (-\> lim(0)) the following limits hold: + +total \<= MAX(coefficient) +and +3m x total^2 \+ 2n x total \+ o \<= MAX(coefficient) +and +3 x total^2 \<= MAX(coefficient) IF m \> 0 +and +2 x total \<= MAX(coefficient) IF n \> 0 + +where +*total \= the sum of all token’s supplies, scaled by their denomination* +*m \= curve coefficient m* +*n \= curve coefficient n* +*o \= curve coefficient o* +*MAX(coefficient) \= Maximum value for fixed precision number type; e.g., around 274 for a signed type with 75 integer bits.* + +##### **Square Root** + +As for the polynomial, this type of curve sums up the supply of all bonded coins in a pool, so limits apply to their sum. + +The following limits apply, beyond cost limits given by the capacity of the fixed precision type: + +total \<= MAX(coefficient) +and +total^(3/2) \<= MAX(coefficient) + +where +*total \= the sum of all token’s supplies, scaled by their denomination* +*MAX(coefficient) \= Maximum value for fixed precision number type; e.g., around 274 for a signed type with 75 integer bits.* [bonding-curve]: ./src/curves/mod.rs [pool-details]: ./src/types.rs diff --git a/pallets/pallet-bonded-coins/src/benchmarking.rs b/pallets/pallet-bonded-coins/src/benchmarking.rs index a6f4d76f54..142b52d32c 100644 --- a/pallets/pallet-bonded-coins/src/benchmarking.rs +++ b/pallets/pallet-bonded-coins/src/benchmarking.rs @@ -14,9 +14,10 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_benchmarking::v2::*; use frame_support::traits::fungibles::roles::Inspect as InspectRoles; +use scale_info::prelude::format; use sp_core::U256; use sp_std::{ ops::{AddAssign, BitOrAssign, ShlAssign}, @@ -27,9 +28,11 @@ use substrate_fixed::traits::{Fixed, FixedSigned, FixedUnsigned, ToFixed}; use crate::{ curves::{ lmsr::{LMSRParameters, LMSRParametersInput}, + polynomial::PolynomialParameters, square_root::{SquareRootParameters, SquareRootParametersInput}, Curve, CurveInput, }, + types::BondedCurrenciesSettings, Call, CollateralAssetIdOf, CollateralBalanceOf, Config, CurveParameterTypeOf, FungiblesAssetIdOf, FungiblesBalanceOf, Pallet, }; @@ -63,6 +66,13 @@ where fn set_native_balance(_account: &::AccountId, _amount: u128) {} } +fn get_2nd_order_polynomial_curve() -> Curve { + let m = Float::from_num(0.01); + let n = Float::from_num(2); + let o = Float::from_num(3); + Curve::Polynomial(PolynomialParameters { m, n, o }) +} + fn get_square_root_curve() -> Curve { let m = Float::from_num(3); let n = Float::from_num(2); @@ -220,10 +230,13 @@ mod benchmarks { owner, state, collateral, - denomination, bonded_currencies: BoundedVec::truncate_from(bonded_coin_ids.clone()), - transferable: true, - min_operation_balance: 1u128.saturated_into(), + currencies_settings: BondedCurrenciesSettings { + denomination, + transferable: true, + allow_reset_team: true, + min_operation_balance: 1u128.saturated_into(), + }, deposit: Pallet::::calculate_pool_deposit(bonded_coin_ids.len()), }; Pools::::insert(&pool_id, pool_details); @@ -233,11 +246,11 @@ mod benchmarks { fn generate_token_metadata(c: u32) -> BoundedVec, T::MaxCurrenciesPerPool> { let mut token_meta = Vec::new(); - for _ in 1..=c { + for i in 1..=c { token_meta.push(TokenMetaOf:: { min_balance: 1u128.saturated_into(), - name: BoundedVec::try_from(b"BTC".to_vec()).expect("Failed to create BoundedVec"), - symbol: BoundedVec::try_from(b"BTC".to_vec()).expect("Failed to create BoundedVec"), + name: BoundedVec::try_from(format!("Coin_{}", &i).into_bytes()).expect("Failed to create BoundedVec"), + symbol: BoundedVec::try_from(format!("BTC_{}", &i).into_bytes()).expect("Failed to create BoundedVec"), }) } BoundedVec::try_from(token_meta).expect("creating bounded Vec should not fail") @@ -263,9 +276,12 @@ mod benchmarks { curve, collateral_id, currencies, - 10, - true, - 1, + BondedCurrenciesSettings { + denomination: 10, + allow_reset_team: true, + transferable: true, + min_operation_balance: 1u128.saturated_into(), + }, ); // Verify @@ -301,9 +317,12 @@ mod benchmarks { curve, collateral_id, currencies, - 10, - true, - 1, + BondedCurrenciesSettings { + denomination: 10, + allow_reset_team: true, + transferable: true, + min_operation_balance: 1u128.saturated_into(), + }, ); // Verify @@ -313,7 +332,7 @@ mod benchmarks { Curve::SquareRoot(_) => { assert_eq!(id, expected_pool_id); } - _ => panic!("pool.curve is not a Polynomial function"), + _ => panic!("pool.curve is not a SquareRoot function"), } } @@ -338,9 +357,12 @@ mod benchmarks { curve, collateral_id, currencies, - 10, - true, - 1, + BondedCurrenciesSettings { + denomination: 10, + allow_reset_team: true, + transferable: true, + min_operation_balance: 1u128.saturated_into(), + }, ); // Verify @@ -350,12 +372,12 @@ mod benchmarks { Curve::Lmsr(_) => { assert_eq!(id, expected_pool_id); } - _ => panic!("pool.curve is not a Polynomial function"), + _ => panic!("pool.curve is not a LSMR curve!"), } } #[benchmark] - fn reset_team() { + fn reset_team(c: Linear<1, { T::MaxCurrenciesPerPool::get() }>) { let origin = T::DefaultOrigin::try_successful_origin().expect("creating origin should not fail"); let account_origin = origin .clone() @@ -363,17 +385,14 @@ mod benchmarks { .expect("generating account_id from origin should not fail"); make_free_for_deposit::(&account_origin); - let bonded_coin_id = T::BenchmarkHelper::calculate_bonded_asset_id(0); - create_bonded_asset::(bonded_coin_id.clone()); + let bonded_currencies = create_bonded_currencies_in_range::(c, false); let curve = get_linear_bonding_curve::>(); - let pool_id = create_pool::( - curve, - [bonded_coin_id.clone()].to_vec(), - Some(account_origin), - None, - None, - ); + let pool_id = create_pool::(curve, bonded_currencies.clone(), Some(account_origin), None, None); + + // Although these would rarely happen in practice, for benchmarking we assume + // the worst case where the owner must be changed as well + assert!(T::Fungibles::owner(bonded_currencies[0].clone()) != Some(pool_id.clone().into())); let admin: AccountIdOf = account("admin", 0, 0); let freezer: AccountIdOf = account("freezer", 0, 0); @@ -382,12 +401,24 @@ mod benchmarks { freezer: freezer.clone(), }; + let pool_id_for_call = pool_id.clone(); + + let max_currencies = T::MaxCurrenciesPerPool::get(); #[extrinsic_call] - _(origin as T::RuntimeOrigin, pool_id, fungibles_team, 0); + _( + origin as T::RuntimeOrigin, + pool_id_for_call, + fungibles_team, + max_currencies, + ); // Verify - assert_eq!(T::Fungibles::admin(bonded_coin_id.clone()), Some(admin)); - assert_eq!(T::Fungibles::freezer(bonded_coin_id), Some(freezer)); + bonded_currencies.iter().for_each(|asset_id| { + assert_eq!(T::Fungibles::admin(asset_id.clone()), Some(admin.clone())); + assert_eq!(T::Fungibles::freezer(asset_id.clone()), Some(freezer.clone())); + assert_eq!(T::Fungibles::owner(asset_id.clone()), Some(pool_id.clone().into())); + assert_eq!(T::Fungibles::issuer(asset_id.clone()), Some(pool_id.clone().into())); + }); } #[benchmark] @@ -475,7 +506,7 @@ mod benchmarks { make_free_for_deposit::(&account_origin); set_collateral_balance::(collateral_id.clone(), &account_origin, 10000u128); - let curve = get_linear_bonding_curve::>(); + let curve = get_2nd_order_polynomial_curve::>(); let bonded_currencies = create_bonded_currencies_in_range::(c, false); let pool_id = create_pool::(curve, bonded_currencies.clone(), None, None, Some(0)); @@ -605,7 +636,7 @@ mod benchmarks { let start_balance = 100u128; set_fungible_balance::(target_asset_id.clone(), &account_origin, start_balance); - let curve = get_linear_bonding_curve::>(); + let curve = get_2nd_order_polynomial_curve::>(); let pool_id = create_pool::(curve, bonded_currencies, None, None, Some(0)); let pool_account = pool_id.clone().into(); diff --git a/pallets/pallet-bonded-coins/src/curves/lmsr.rs b/pallets/pallet-bonded-coins/src/curves/lmsr.rs index 9ba1ed0437..096fe702b8 100644 --- a/pallets/pallet-bonded-coins/src/curves/lmsr.rs +++ b/pallets/pallet-bonded-coins/src/curves/lmsr.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at /// Implementation of the [Logarithmic Market Scoring Rule (LMSR)](https://mason.gmu.edu/~rhanson/mktscore.pdf) bonding curve. /// diff --git a/pallets/pallet-bonded-coins/src/curves/mod.rs b/pallets/pallet-bonded-coins/src/curves/mod.rs index 9826c01856..97f04c6c75 100644 --- a/pallets/pallet-bonded-coins/src/curves/mod.rs +++ b/pallets/pallet-bonded-coins/src/curves/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at /// Curve Module /// @@ -166,7 +166,7 @@ pub fn balance_to_fixed( round_kind: Round, ) -> Result where - FixedType::Bits: TryFrom, // TODO: make large integer type configurable in runtime + FixedType::Bits: TryFrom, Balance: TryInto, { let decimals = U256::from(10u8) diff --git a/pallets/pallet-bonded-coins/src/curves/polynomial.rs b/pallets/pallet-bonded-coins/src/curves/polynomial.rs index 4ec43eff5a..d7087c84a6 100644 --- a/pallets/pallet-bonded-coins/src/curves/polynomial.rs +++ b/pallets/pallet-bonded-coins/src/curves/polynomial.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at /// Polynomial Bonding Curve Implementation. /// @@ -34,13 +34,19 @@ /// ### Antiderivative /// The indefinite integral of the cost function is: /// ```text -/// C(s) = (m / 3) * s^3 + (n / 2) * s^2 + o * s +/// C(s) = (m / 3) * s^3 + (n / 2) * s^2 + o * s = M * s^3 + N * s^2 + O * s /// ``` /// Where: /// - `m` is the coefficient for the quadratic term, /// - `n` is the coefficient for the linear term, -/// - `o` is the constant term. +/// - `o` is the constant term, +/// - `M` is the coefficient of the first (cubic) term in the antiderivative, +/// - `N` is the coefficient of the second (quadratic) term in the +/// antiderivative, +/// - `O=o` is the coefficient of the third (linear) term in the antiderivative. /// +/// Coefficients of the antiderivative `N`, `M` & `O` are used to parametrize +/// functions in this module. /// /// `C(s)` represents the accumulated cost of purchasing or selling assets up to /// the current supply `s`. The integral between two supply points, `s*` @@ -81,9 +87,11 @@ use crate::PassiveSupply; /// /// For a polynomial cost function `c(s) = 3 * s^2 + 2 * s + 2` /// -/// which is resulting into the antiderivative -/// `C(s) = (3 / 3) * s^3 + (2 / 2) * s^2 + 2 * s` -/// the input parameters would be: +/// which results in the antiderivative +/// `C(s) = (3 / 3) * s^3 + (2 / 2) * s^2 + 2 * s = 1 * s^3 + 1 * s^2 + 2 * s` +/// +/// the input parameters `M`, `N` & `O` (coefficients of the antiderivative) +/// would be: /// ```rust, ignore /// PolynomialParametersInput { /// m: 1, @@ -152,27 +160,33 @@ where .checked_add(accumulated_passive_issuance) .ok_or(ArithmeticError::Overflow)?; - // Calculate high - low - let delta_x = high.checked_sub(low).ok_or(ArithmeticError::Underflow)?; - - let high_low_mul = high.checked_mul(low).ok_or(ArithmeticError::Overflow)?; - let high_square = square(high)?; - let low_square = square(low)?; - - // Factorized cubic term: (high^2 + high * low + low^2) - let cubic_term = high_square - .checked_add(high_low_mul) - .ok_or(ArithmeticError::Overflow)? - .checked_add(low_square) - .ok_or(ArithmeticError::Overflow)?; - // Calculate m * (high^2 + high * low + low^2) - let term1 = self.m.checked_mul(cubic_term).ok_or(ArithmeticError::Overflow)?; - - let high_plus_low = high.checked_add(low).ok_or(ArithmeticError::Overflow)?; + let term1 = if self.m == Coefficient::from_num(0u8) { + // if m is 0 the product is 0 + Ok(self.m) + } else { + let high_low_mul = high.checked_mul(low).ok_or(ArithmeticError::Overflow)?; + let high_square = square(high)?; + let low_square = square(low)?; + + // Factorized cubic term: (high^2 + high * low + low^2) + let cubic_term = high_square + .checked_add(high_low_mul) + .ok_or(ArithmeticError::Overflow)? + .checked_add(low_square) + .ok_or(ArithmeticError::Overflow)?; + + self.m.checked_mul(cubic_term).ok_or(ArithmeticError::Overflow) + }?; // Calculate n * (high + low) - let term2 = self.n.checked_mul(high_plus_low).ok_or(ArithmeticError::Overflow)?; + let term2 = if self.n == Coefficient::from_num(0u8) { + // if n is 0 the product is 0 + Ok(self.n) + } else { + let high_plus_low = high.checked_add(low).ok_or(ArithmeticError::Overflow)?; + self.n.checked_mul(high_plus_low).ok_or(ArithmeticError::Overflow) + }?; // Final calculation with factored (high - low) let result = term1 @@ -181,6 +195,9 @@ where .checked_add(self.o) .ok_or(ArithmeticError::Overflow)?; + // Calculate high - low + let delta_x = high.checked_sub(low).ok_or(ArithmeticError::Underflow)?; + result.checked_mul(delta_x).ok_or(ArithmeticError::Overflow) } } diff --git a/pallets/pallet-bonded-coins/src/curves/square_root.rs b/pallets/pallet-bonded-coins/src/curves/square_root.rs index 2606a89fa0..5ea9e3c7fc 100644 --- a/pallets/pallet-bonded-coins/src/curves/square_root.rs +++ b/pallets/pallet-bonded-coins/src/curves/square_root.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at /// Square Root Bonding Curve Implementation. /// @@ -33,12 +33,19 @@ /// ### Antiderivative /// The indefinite integral of the cost function is: /// ```text -/// C(s) = (2/3) * m * s^(3/2) + n * s +/// C(s) = (2/3) * m * s^(3/2) + n * s = M * s^(3/2) + N * s /// ``` /// Where: /// - `s` is the supply of assets, /// - `m` is the coefficient for the square root term, -/// - `n` is the coefficient for the linear term. +/// - `n` is the coefficient for the constant term, +/// - `M` is the coefficient for the first (fractional power) term in the +/// antiderivative, +/// - `N=n` is the coefficient of the second (linear) term in the +/// antiderivative. +/// +/// Coefficients of the antiderivative `N` & `M` are used to parametrize +/// functions in this module. /// /// `C(s)` represents the total cost of purchasing or selling assets up to the /// current supply `s`. To calculate the incremental cost of a transaction, use @@ -72,14 +79,19 @@ use crate::{PassiveSupply, Precision}; /// bonding curve. This struct is used to convert the input parameters to the /// correct fixed-point type. /// -/// The input struct assumes that the coefficients are precomputed according to -/// the integral rules of the square root function./// ### Example +/// The input struct expects coefficients of terms in the antiderivative of the +/// square root function, which must be precomputed according to the integral +/// rules of the square root function. +/// +/// ### Example +/// +/// For a square root cost function `c(s) = 3 * s^1/2 + 2` /// -/// For a square root cost function `c(s) = 3 * s^1/2 + 2 +/// which results in the antiderivative +/// `C(s) = (2 / 3) * 3 * s^(3/2) + 2 * s = 2s^(3/2) + 2s` /// -/// which is resulting into the antiderivative -/// `C(s) = (6 / 3) * s^(1/2) + 2 * s` -/// the input parameters would be: +/// the input parameters `M` & `N` (coefficients of the antiderivative) would +/// be: /// ```rust, ignore /// SquareRootParametersInput { /// m: 2, diff --git a/pallets/pallet-bonded-coins/src/default_weights.rs b/pallets/pallet-bonded-coins/src/default_weights.rs index 5958e696be..fd05516777 100644 --- a/pallets/pallet-bonded-coins/src/default_weights.rs +++ b/pallets/pallet-bonded-coins/src/default_weights.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for pallet_bonded_coins //! diff --git a/pallets/pallet-bonded-coins/src/lib.rs b/pallets/pallet-bonded-coins/src/lib.rs index 62e34391a7..441aa4ed30 100644 --- a/pallets/pallet-bonded-coins/src/lib.rs +++ b/pallets/pallet-bonded-coins/src/lib.rs @@ -14,12 +14,14 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at #![cfg_attr(not(feature = "std"), no_std)] pub use pallet::*; +pub mod migrations; + #[cfg(feature = "runtime-benchmarks")] mod benchmarking; #[cfg(any(test, feature = "runtime-benchmarks"))] @@ -36,7 +38,7 @@ mod types; #[cfg(feature = "runtime-benchmarks")] pub use benchmarking::BenchmarkHelper; -pub use types::{Locks, PoolStatus, Round}; +pub use types::{BondedCurrenciesSettings, Locks, PoolStatus, Round}; pub use default_weights::WeightInfo; @@ -52,6 +54,8 @@ pub use default_weights::WeightInfo; // very end of the development cycle of a pallet, and from time to time it should be commented out to catch any issues // other than the one generated by the `pallet::event` macro. #[allow(clippy::shadow_reuse)] +// map_err is used over inspect_err in the macro-generated code, and we have to ignore it. +#[allow(clippy::manual_inspect)] pub mod pallet { use frame_support::{ @@ -64,7 +68,7 @@ pub mod pallet { Create as CreateFungibles, Destroy as DestroyFungibles, Inspect as InspectFungibles, Mutate as MutateFungibles, }, - tokens::{Fortitude, Precision as WithdrawalPrecision, Preservation, Provenance}, + tokens::{DepositConsequence, Fortitude, Precision as WithdrawalPrecision, Preservation, Provenance}, AccountTouch, }, Hashable, Parameter, @@ -79,6 +83,7 @@ pub mod pallet { BoundedVec, DispatchError, TokenError, }; use sp_std::{ + collections::btree_set::BTreeSet, iter::Iterator, ops::{AddAssign, BitOrAssign, ShlAssign}, prelude::*, @@ -92,10 +97,13 @@ pub mod pallet { use crate::{ curves::{balance_to_fixed, fixed_to_balance, BondingFunction, Curve, CurveInput}, traits::{FreezeAccounts, NextAssetIds, ResetTeam}, - types::{Locks, PoolDetails, PoolManagingTeam, PoolStatus, Round, TokenMeta}, + types::{BondedCurrenciesSettings, Locks, PoolDetails, PoolManagingTeam, PoolStatus, Round, TokenMeta}, WeightInfo, }; + /// The current storage version. + const STORAGE_VERSION: StorageVersion = StorageVersion::new(1); + pub(crate) type AccountIdLookupOf = <::Lookup as sp_runtime::traits::StaticLookup>::Source; @@ -124,12 +132,15 @@ pub mod pallet { pub(crate) type CurveParameterInputOf = ::CurveParameterInput; + pub(crate) type BondedCurrenciesSettingsOf = BondedCurrenciesSettings>; + pub type PoolDetailsOf = PoolDetails< ::AccountId, Curve>, BoundedCurrencyVec, CollateralAssetIdOf, DepositBalanceOf, + BondedCurrenciesSettingsOf, >; /// Minimum required amount of integer and fractional bits to perform ln, @@ -188,7 +199,7 @@ pub mod pallet { #[pallet::constant] type BaseDeposit: Get>; - /// The origin for most permissionless and priviledged operations. + /// The origin for most permissionless and privileged operations. type DefaultOrigin: EnsureOrigin; /// The dedicated origin for creating new bonded currency pools /// (typically permissionless). @@ -226,6 +237,7 @@ pub mod pallet { } #[pallet::pallet] + #[pallet::storage_version(STORAGE_VERSION)] pub struct Pallet(_); #[pallet::hooks] @@ -278,6 +290,12 @@ pub mod pallet { id: T::PoolId, manager: Option, }, + /// The asset managing team of a pool has been reset. + TeamChanged { + id: T::PoolId, + admin: T::AccountId, + freezer: T::AccountId, + }, } #[pallet::error] @@ -326,7 +344,6 @@ pub mod pallet { Copy + ToFixed + AddAssign + BitOrAssign + ShlAssign + TryFrom + TryInto, CollateralBalanceOf: Into + TryFrom, FungiblesBalanceOf: Into + TryFrom, - // TODO: make large integer type configurable { /// Creates a new bonded token pool. The pool will be created with the /// given curve, collateral currency, and bonded currencies. The pool @@ -337,17 +354,26 @@ pub mod pallet { /// - `curve`: The curve parameters for the pool. /// - `collateral_id`: The ID of the collateral currency. /// - `currencies`: A bounded vector of token metadata for the bonded - /// currencies. - /// - `denomination`: The denomination for the bonded currencies. - /// - `transferable`: A boolean indicating if the bonded currencies are - /// transferable. + /// currencies. Note that no two currencies may use the same name or + /// symbol. + /// - `currencies_settings`: Options and settings shared by all bonded + /// currencies. These cannot be changed after the pool is created. + /// - `denomination`: The denomination for the bonded currencies. + /// - `transferable`: A boolean indicating if the bonded currencies + /// are transferable. + /// - `allow_reset_team`: Whether asset management team changes are + /// allowed for this pool. + /// - `min_operation_balance`: The minimum amount that can be + /// minted/burnt. /// /// # Returns /// - `DispatchResult`: The result of the dispatch. /// /// # Errors - /// - `Error::::InvalidInput`: If the denomination is greater than - /// the maximum allowed or if the curve input is invalid. + /// - `Error::::InvalidInput`: If either + /// - the denomination is greater than the maximum allowed + /// - the curve input is invalid + /// - two currencies use the same name or symbol /// - `Error::::Internal`: If the conversion to `BoundedVec` fails. /// - Other errors depending on the types in the config. #[pallet::call_index(0)] @@ -364,12 +390,17 @@ pub mod pallet { curve: CurveInput>, collateral_id: CollateralAssetIdOf, currencies: BoundedVec, T::MaxCurrenciesPerPool>, - denomination: u8, - transferable: bool, - min_operation_balance: u128, + currencies_settings: BondedCurrenciesSettingsOf, ) -> DispatchResult { let who = T::PoolCreateOrigin::ensure_origin(origin)?; + let BondedCurrenciesSettings { + denomination, + transferable, + allow_reset_team, + min_operation_balance, + } = currencies_settings; + ensure!(denomination <= T::MaxDenomination::get(), Error::::InvalidInput); let checked_curve = curve.try_into().map_err(|_| Error::::InvalidInput)?; @@ -407,6 +438,10 @@ pub mod pallet { // currency to it. This should also verify that the currency actually exists. T::Collaterals::touch(collateral_id.clone(), pool_account, &who)?; + // Enforce unique names and symbols by recording seen values in a set + let mut names_seen = BTreeSet::>::new(); + let mut symbols_seen = BTreeSet::>::new(); + currencies.into_iter().zip(currency_ids.iter()).try_for_each( |(token_metadata, asset_id)| -> DispatchResult { let TokenMeta { @@ -415,6 +450,11 @@ pub mod pallet { symbol, } = token_metadata; + // insert() returns true if the set did not contain the inserted value + let name_ok = name.is_empty() || names_seen.insert(name.clone()); + let symbol_ok = symbol.is_empty() || symbols_seen.insert(symbol.clone()); + ensure!(name_ok && symbol_ok, Error::::InvalidInput); + T::Fungibles::create(asset_id.clone(), pool_account.to_owned(), false, min_balance)?; // set metadata for new asset class @@ -438,6 +478,7 @@ pub mod pallet { collateral_id, currency_ids, transferable, + allow_reset_team, denomination, min_operation_balance, deposit_amount, @@ -449,28 +490,28 @@ pub mod pallet { Ok(()) } - /// Changes the managing team of a bonded currency which is issued by - /// this pool. The new team will be set to the provided team. The - /// currency index is used to select the currency that the team will - /// manage. The origin account must be a manager of the pool. + /// Changes the managing team of all bonded currencies issued by this + /// pool, setting it to the provided `team`. The origin account must be + /// a manager of the pool. /// /// # Parameters /// - `origin`: The origin of the call, requiring the caller to be a /// manager of the pool. /// - `pool_id`: The identifier of the pool. /// - `team`: The new managing team. - /// - `currency_idx`: The index of the currency in the bonded currencies - /// vector. + /// - `currency_count`: The number of bonded currencies vector linked to + /// the pool. Required for weight estimations. /// /// # Returns /// - `DispatchResult`: The result of the dispatch. /// /// # Errors /// - `Error::::PoolUnknown`: If the pool does not exist. - /// - `Error::::NoPermission`: If the caller is not a manager of the - /// pool. - /// - `Error::::IndexOutOfBounds`: If the currency index is out of - /// bounds. + /// - `Error::::NoPermission`: If this pool does not allow changing + /// the asset management team, or if the caller is not a manager of + /// the pool. + /// - `Error::::CurrencyCount`: If the actual number of currencies in + /// the pool is larger than `currency_count`. /// - Other errors depending on the types in the config. #[pallet::call_index(1)] #[pallet::weight(T::WeightInfo::reset_team())] @@ -478,31 +519,44 @@ pub mod pallet { origin: OriginFor, pool_id: T::PoolId, team: PoolManagingTeam>, - currency_idx: u32, + currency_count: u32, ) -> DispatchResult { let who = T::DefaultOrigin::ensure_origin(origin)?; let pool_details = Pools::::get(&pool_id).ok_or(Error::::PoolUnknown)?; - ensure!(pool_details.is_manager(&who), Error::::NoPermission); - ensure!(pool_details.state.is_live(), Error::::PoolNotLive); + let number_of_currencies = Self::get_currencies_number(&pool_details); + ensure!(number_of_currencies <= currency_count, Error::::CurrencyCount); - let asset_id = pool_details - .bonded_currencies - .get(currency_idx.saturated_into::()) - .ok_or(Error::::IndexOutOfBounds)?; + let BondedCurrenciesSettings { allow_reset_team, .. } = pool_details.currencies_settings; - let pool_id_account = pool_id.into(); + ensure!( + allow_reset_team && pool_details.is_manager(&who), + Error::::NoPermission + ); + ensure!(pool_details.state.is_live(), Error::::PoolNotLive); + + let pool_id_account = pool_id.clone().into(); let PoolManagingTeam { freezer, admin } = team; - T::Fungibles::reset_team( - asset_id.to_owned(), - pool_id_account.clone(), + pool_details.bonded_currencies.into_iter().try_for_each(|asset_id| { + T::Fungibles::reset_team( + asset_id, + pool_id_account.clone(), + admin.clone(), + pool_id_account.clone(), + freezer.clone(), + ) + })?; + + Self::deposit_event(Event::TeamChanged { + id: pool_id, admin, - pool_id_account, freezer, - ) + }); + + Ok(()) } /// Resets the manager of a pool. The new manager will be set to the @@ -525,6 +579,8 @@ pub mod pallet { /// - `Error::::PoolUnknown`: If the pool does not exist. /// - `Error::::NoPermission`: If the caller is not a manager of the /// pool. + /// - `Error::::PoolNotLive`: If the pool is not in active or locked + /// state. #[pallet::call_index(2)] #[pallet::weight(T::WeightInfo::reset_manager())] pub fn reset_manager( @@ -535,6 +591,7 @@ pub mod pallet { let who = T::DefaultOrigin::ensure_origin(origin)?; Pools::::try_mutate(&pool_id, |maybe_entry| -> DispatchResult { let entry = maybe_entry.as_mut().ok_or(Error::::PoolUnknown)?; + ensure!(entry.state.is_live(), Error::::PoolNotLive); ensure!(entry.is_manager(&who), Error::::NoPermission); entry.manager = new_manager.clone(); @@ -558,7 +615,8 @@ pub mod pallet { /// - `origin`: The origin of the call, requiring the caller to be a /// manager of the pool. /// - `pool_id`: The identifier of the pool to be locked. - /// - `lock`: The locks to be applied to the pool. + /// - `lock`: The locks to be applied to the pool. At least one lock + /// flag must be set to `false` for a valid lock. /// /// # Returns /// - `DispatchResult`: The result of the dispatch. @@ -569,11 +627,16 @@ pub mod pallet { /// pool. /// - `Error::::PoolNotLive`: If the pool is not in a live (locked or /// active) state. + /// - `Error::::InvalidInput`: If all lock flags are `true` (all + /// operations enabled), which would be equivalent to an unlocked + /// (active) pool state. #[pallet::call_index(3)] #[pallet::weight(T::WeightInfo::set_lock())] pub fn set_lock(origin: OriginFor, pool_id: T::PoolId, lock: Locks) -> DispatchResult { let who = T::DefaultOrigin::ensure_origin(origin)?; + ensure!(lock.any_lock_set(), Error::::InvalidInput); + Pools::::try_mutate(&pool_id, |pool| -> DispatchResult { let entry = pool.as_mut().ok_or(Error::::PoolUnknown)?; ensure!(entry.state.is_live(), Error::::PoolNotLive); @@ -683,8 +746,15 @@ pub mod pallet { let number_of_currencies = Self::get_currencies_number(&pool_details); ensure!(number_of_currencies <= currency_count, Error::::CurrencyCount); + let BondedCurrenciesSettings { + min_operation_balance, + denomination, + transferable, + .. + } = pool_details.currencies_settings; + ensure!( - amount_to_mint >= pool_details.min_operation_balance.saturated_into(), + amount_to_mint >= min_operation_balance.saturated_into(), TokenError::BelowMinimum ); @@ -704,16 +774,13 @@ pub mod pallet { let (active_pre, passive) = Self::calculate_normalized_passive_issuance( &bonded_currencies, - pool_details.denomination, + denomination, currency_idx, round_kind, )?; - let normalized_amount_to_mint = balance_to_fixed( - amount_to_mint.saturated_into::(), - pool_details.denomination, - round_kind, - )?; + let normalized_amount_to_mint = + balance_to_fixed(amount_to_mint.saturated_into::(), denomination, round_kind)?; let active_post = active_pre .checked_add(normalized_amount_to_mint) @@ -744,7 +811,7 @@ pub mod pallet { T::Fungibles::mint_into(target_currency_id.clone(), &beneficiary, amount_to_mint)?; - if !pool_details.transferable { + if !transferable { T::Fungibles::freeze(target_currency_id, &beneficiary).map_err(|freeze_error| { log::info!(target: LOG_TARGET, "Failed to freeze account: {:?}", freeze_error); freeze_error.into() @@ -812,8 +879,15 @@ pub mod pallet { let pool_details = Pools::::get(&pool_id).ok_or(Error::::PoolUnknown)?; + let BondedCurrenciesSettings { + min_operation_balance, + denomination, + transferable, + .. + } = pool_details.currencies_settings; + ensure!( - amount_to_burn >= pool_details.min_operation_balance.saturated_into(), + amount_to_burn >= min_operation_balance.saturated_into(), TokenError::BelowMinimum ); @@ -834,12 +908,12 @@ pub mod pallet { let (high, passive) = Self::calculate_normalized_passive_issuance( &bonded_currencies, - pool_details.denomination, + denomination, currency_idx, round_kind, )?; - let normalized_amount_to_burn = balance_to_fixed(amount_to_burn, pool_details.denomination, round_kind)?; + let normalized_amount_to_burn = balance_to_fixed(amount_to_burn, denomination, round_kind)?; let low = high .checked_sub(normalized_amount_to_burn) @@ -879,13 +953,15 @@ pub mod pallet { target_currency_id.clone(), &who, amount_to_burn, + // We don't care, if account gets dusted. + Preservation::Expendable, WithdrawalPrecision::Exact, Fortitude::Force, )?; let account_exists = T::Fungibles::total_balance(target_currency_id.clone(), &who) > Zero::zero(); - if !pool_details.transferable && account_exists { + if !transferable && account_exists { // Restore locks. T::Fungibles::freeze(target_currency_id, &who).map_err(|freeze_error| { log::info!(target: LOG_TARGET, "Failed to freeze account: {:?}", freeze_error); @@ -1061,6 +1137,7 @@ pub mod pallet { asset_id.clone(), &who, Bounded::max_value(), + Preservation::Expendable, WithdrawalPrecision::BestEffort, Fortitude::Force, )? @@ -1078,11 +1155,6 @@ pub mod pallet { .checked_add(burnt) .ok_or(ArithmeticError::Overflow)?; - defensive_assert!( - sum_of_issuances >= burnt, - "burnt amount exceeds the total supply of all bonded currencies" - ); - let amount: CollateralBalanceOf = burnt .checked_mul(total_collateral_issuance.into()) // As long as the balance type is half the size of a U256, this won't overflow. @@ -1117,16 +1189,16 @@ pub mod pallet { Error::::Internal })?; - if amount.is_zero() - || T::Collaterals::can_deposit(pool_details.collateral.clone(), &who, amount, Provenance::Extant) - .into_result() - .is_err() - { + let deposit_consequence = + T::Collaterals::can_deposit(pool_details.collateral.clone(), &who, amount, Provenance::Extant); + if amount.is_zero() || deposit_consequence == DepositConsequence::BelowMinimum { // Funds are burnt but the collateral received is not sufficient to be deposited // to the account. This is tolerated as otherwise we could have edge cases where // it's impossible to refund at least some accounts. return Ok(Some(T::WeightInfo::refund_account(currency_count.to_owned())).into()); } + // Return error if not Success + deposit_consequence.into_result()?; let transferred = T::Collaterals::transfer( pool_details.collateral, @@ -1418,7 +1490,6 @@ pub mod pallet { ensure!(pool_details.state.is_live(), Error::::PoolNotLive); if let Some(caller) = maybe_check_manager { - // TODO: should the owner be authorized as well? ensure!(pool_details.is_manager(caller), Error::::NoPermission); } @@ -1491,7 +1562,6 @@ pub mod pallet { ); if let Some(caller) = maybe_check_manager { - // TODO: should this be permissionless if the pool is in refunding state? ensure!( pool_details.is_owner(caller) || pool_details.is_manager(caller), Error::::NoPermission diff --git a/pallets/pallet-bonded-coins/src/migrations/mod.rs b/pallets/pallet-bonded-coins/src/migrations/mod.rs new file mode 100644 index 0000000000..a3a6d96c3f --- /dev/null +++ b/pallets/pallet-bonded-coins/src/migrations/mod.rs @@ -0,0 +1 @@ +pub mod v1; diff --git a/pallets/pallet-bonded-coins/src/migrations/v1.rs b/pallets/pallet-bonded-coins/src/migrations/v1.rs new file mode 100644 index 0000000000..72c7fc6cd5 --- /dev/null +++ b/pallets/pallet-bonded-coins/src/migrations/v1.rs @@ -0,0 +1,177 @@ +use frame_support::{ + pallet_prelude::*, + traits::{Get, UncheckedOnRuntimeUpgrade}, +}; +use sp_runtime::traits::Saturating; + +use crate::{ + curves::Curve, + types::{Locks, PoolStatus}, + BondedCurrenciesSettingsOf, BoundedCurrencyVec, CollateralAssetIdOf, Config, CurveParameterTypeOf, + DepositBalanceOf, FungiblesBalanceOf, +}; + +#[cfg(feature = "try-runtime")] +const LOG_TARGET: &str = "migration::pallet-bonded-coins"; + +/// Collection of storage item formats from the previous storage version. +/// +/// Required so we can read values in the v0 storage format during the +/// migration. +mod v0 { + use super::*; + use frame_support::{storage_alias, Twox64Concat}; + use parity_scale_codec::{Decode, Encode}; + use scale_info::TypeInfo; + + // V0 pool details + #[derive(Clone, Encode, Decode, PartialEq, Eq, TypeInfo, MaxEncodedLen, Debug)] + pub struct PoolDetails { + /// The owner of the pool. + pub owner: AccountId, + /// The manager of the pool. If a manager is set, the pool is + /// permissioned. + pub manager: Option, + /// The curve of the pool. + pub curve: ParametrizedCurve, + /// The collateral currency of the pool. + pub collateral: BaseCurrencyId, + /// The bonded currencies of the pool. + pub bonded_currencies: Currencies, + /// The status of the pool. + pub state: PoolStatus, + /// Whether the pool is transferable or not. + pub transferable: bool, + /// The denomination of the pool. + pub denomination: u8, + /// The minimum amount that can be minted/burnt. + pub min_operation_balance: FungiblesBalance, + /// The deposit to be returned upon destruction of this pool. + pub deposit: DepositBalance, + } + + pub type PoolDetailsOf = PoolDetails< + ::AccountId, + Curve>, + BoundedCurrencyVec, + CollateralAssetIdOf, + DepositBalanceOf, + FungiblesBalanceOf, + >; + + /// V0 type for [`crate::Pools`]. + #[storage_alias] + pub type Pools = + StorageMap, Twox64Concat, ::PoolId, PoolDetailsOf, OptionQuery>; +} + +fn v0_to_v1(old_value: v0::PoolDetailsOf) -> crate::PoolDetailsOf { + let v0::PoolDetailsOf:: { + owner, + curve, + manager, + collateral, + bonded_currencies, + state, + transferable, + denomination, + min_operation_balance, + deposit, + } = old_value; + + crate::PoolDetailsOf:: { + owner, + curve, + manager, + collateral, + bonded_currencies, + state, + deposit, + currencies_settings: BondedCurrenciesSettingsOf:: { + denomination, + min_operation_balance, + transferable, + allow_reset_team: true, + }, + } +} + +pub struct InnerMigrateV0ToV1(core::marker::PhantomData); + +impl UncheckedOnRuntimeUpgrade for InnerMigrateV0ToV1 +where + T::PoolId: sp_std::fmt::Debug, +{ + /// Return a vector of existing [`crate::Pools`] values so we can check that + /// they were correctly set in `InnerMigrateV0ToV1::post_upgrade`. + #[cfg(feature = "try-runtime")] + fn pre_upgrade() -> Result, sp_runtime::TryRuntimeError> { + // Access the old value using the `storage_alias` type + let old_value: sp_std::vec::Vec<(T::PoolId, v0::PoolDetailsOf)> = v0::Pools::::iter().collect(); + // Return it as an encoded `Vec` + Ok(old_value.encode()) + } + + /// Migrate the storage from V0 to V1. + fn on_runtime_upgrade() -> frame_support::weights::Weight { + let mut translated = 0u64; + // Read values in-place + crate::Pools::::translate_values::, _>(|old_value| { + translated.saturating_inc(); + Some(v0_to_v1::(old_value)) + }); + + // One read for taking the old value, and one write for setting the new value + T::DbWeight::get().reads_writes(translated, translated) + } + + /// Verifies the storage was migrated correctly. + #[cfg(feature = "try-runtime")] + fn post_upgrade(state: sp_std::vec::Vec) -> Result<(), sp_runtime::TryRuntimeError> { + use sp_runtime::traits::SaturatedConversion; + + let old_values = sp_std::vec::Vec::<(T::PoolId, v0::PoolDetailsOf)>::decode(&mut &state[..]) + .map_err(|_| sp_runtime::TryRuntimeError::Other("Failed to decode old value from storage"))?; + + let prev_count: u32 = old_values.len().saturated_into(); + let post_count: u32 = crate::Pools::::iter().count().saturated_into(); + + ensure!( + prev_count == post_count, + "the pool count before and after the migration should be the same" + ); + + log::info!(target: LOG_TARGET, "Migrated {} pool entries", post_count); + + old_values.into_iter().try_for_each(|(pool_id, old_value)| { + let expected_new_value = v0_to_v1::(old_value); + let actual_new_value = crate::Pools::::get(&pool_id); + + ensure!(actual_new_value.is_some(), { + log::error!(target: LOG_TARGET, "Expected pool with id {:?} but found none", &pool_id); + sp_runtime::TryRuntimeError::Other("Pool not migrated") + }); + ensure!(actual_new_value == Some(expected_new_value), { + log::error!(target: LOG_TARGET, "Pool with id {:?} contains unexpected data", &pool_id); + sp_runtime::TryRuntimeError::Other("Incorrect Pool Data") + }); + + ensure!(actual_new_value.unwrap().currencies_settings.allow_reset_team, { + log::error!(target: LOG_TARGET, "Pool with id {:?} has allow_reset_team = false", &pool_id); + sp_runtime::TryRuntimeError::Other( + "all migrated pools should have the allow_reset_team flag set to true", + ) + }); + + Ok(()) + }) + } +} + +pub type MigrateV0ToV1 = frame_support::migrations::VersionedMigration< + 0, // The migration will only execute when the on-chain storage version is 0 + 1, // The on-chain storage version will be set to 1 after the migration is complete + InnerMigrateV0ToV1, + crate::pallet::Pallet, + ::DbWeight, +>; diff --git a/pallets/pallet-bonded-coins/src/mock.rs b/pallets/pallet-bonded-coins/src/mock.rs index 2891b87dc5..8df479dd60 100644 --- a/pallets/pallet-bonded-coins/src/mock.rs +++ b/pallets/pallet-bonded-coins/src/mock.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::Hashable; use parity_scale_codec::Codec; use substrate_fixed::traits::{FixedSigned, FixedUnsigned}; @@ -58,6 +58,7 @@ pub mod runtime { weights::constants::RocksDbWeight, }; use frame_system::{EnsureRoot, EnsureSigned}; + use pallet_assets::FrozenBalance; use sp_core::U256; use sp_runtime::{ traits::{BlakeTwo256, IdentifyAccount, IdentityLookup, Verify}, @@ -68,8 +69,8 @@ pub mod runtime { use crate::{ self as pallet_bonded_coins, traits::NextAssetIds, - types::{Locks, PoolStatus}, - Config, DepositBalanceOf, FungiblesAssetIdOf, PoolDetailsOf, + types::{BondedCurrenciesSettings, Locks, PoolStatus}, + AccountIdOf, Config, DepositBalanceOf, FungiblesAssetIdOf, FungiblesBalanceOf, PoolDetailsOf, }; pub type Hash = sp_core::H256; @@ -117,13 +118,16 @@ pub mod runtime { PoolDetailsOf:: { curve, manager, - transferable, bonded_currencies, state, collateral, - denomination: DEFAULT_BONDED_DENOMINATION, + currencies_settings: BondedCurrenciesSettings { + allow_reset_team: true, + transferable, + min_operation_balance, + denomination: DEFAULT_BONDED_DENOMINATION, + }, owner, - min_operation_balance, deposit: BondingPallet::calculate_pool_deposit(currencies.len()), } } @@ -190,6 +194,28 @@ pub mod runtime { } } + /// Store freezes for the assets pallet. + #[storage_alias] + pub type Freezes = StorageDoubleMap< + Assets, + Blake2_128Concat, + FungiblesAssetIdOf, + Blake2_128Concat, + AccountIdOf, + FungiblesBalanceOf, + OptionQuery, + >; + + pub struct FreezesHook; + + impl FrozenBalance for FreezesHook { + fn died(_asset: AssetId, _who: &AccountId) {} + + fn frozen_balance(asset: AssetId, who: &AccountId) -> Option { + Freezes::::get(asset, who) + } + } + frame_support::construct_runtime!( pub enum Test { @@ -239,6 +265,11 @@ pub mod runtime { type SS58Prefix = SS58Prefix; type SystemWeightInfo = (); type Version = (); + type MultiBlockMigrator = (); + type SingleBlockMigrations = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); } parameter_types! { @@ -279,7 +310,7 @@ pub mod runtime { type Currency = Balances; type Extra = (); type ForceOrigin = EnsureRoot; - type Freezer = (); + type Freezer = FreezesHook; type MetadataDepositBase = ConstU128<0>; type MetadataDepositPerByte = ConstU128<0>; type RemoveItemsLimit = ConstU32<5>; @@ -355,6 +386,7 @@ pub mod runtime { // pool_id, PoolDetails pools: Vec<(AccountId, PoolDetailsOf)>, collaterals: Vec, + freezes: Vec<(AssetId, AccountId, Balance)>, } impl ExtBuilder { @@ -378,6 +410,11 @@ pub mod runtime { self } + pub(crate) fn with_freezes(mut self, freezes: Vec<(AssetId, AccountId, Balance)>) -> Self { + self.freezes = freezes; + self + } + pub(crate) fn build(self) -> sp_io::TestExternalities { let mut storage = frame_system::GenesisConfig::::default().build_storage().unwrap(); @@ -417,7 +454,7 @@ pub mod runtime { pool_details .bonded_currencies .iter() - .map(|id| (*id, vec![], vec![], pool_details.denomination)) + .map(|id| (*id, vec![], vec![], pool_details.currencies_settings.denomination)) .collect::, Vec, u8)>>() }) .chain( @@ -426,6 +463,7 @@ pub mod runtime { .map(|id| (id, vec![], vec![], DEFAULT_COLLATERAL_DENOMINATION)), ) .collect(), + next_asset_id: None, } .assimilate_storage(&mut storage) .expect("assimilate should not fail"); @@ -448,6 +486,10 @@ pub mod runtime { }); NextAssetId::::set(next_asset_id); + + self.freezes.iter().for_each(|(asset_id, account, amount)| { + Freezes::::set(asset_id, account, Some(*amount)); + }); }); ext diff --git a/pallets/pallet-bonded-coins/src/tests/curves/arithmetic.rs b/pallets/pallet-bonded-coins/src/tests/curves/arithmetic.rs index 5c37a98d79..2a24ac847a 100644 --- a/pallets/pallet-bonded-coins/src/tests/curves/arithmetic.rs +++ b/pallets/pallet-bonded-coins/src/tests/curves/arithmetic.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use crate::{ curves::{balance_to_fixed, fixed_to_balance}, mock::runtime::Float, diff --git a/pallets/pallet-bonded-coins/src/tests/curves/lmsr.rs b/pallets/pallet-bonded-coins/src/tests/curves/lmsr.rs index 2efc84821d..23f1694b33 100644 --- a/pallets/pallet-bonded-coins/src/tests/curves/lmsr.rs +++ b/pallets/pallet-bonded-coins/src/tests/curves/lmsr.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use std::str::FromStr; diff --git a/pallets/pallet-bonded-coins/src/tests/curves/mod.rs b/pallets/pallet-bonded-coins/src/tests/curves/mod.rs index 6fdc9d283f..00aed9188a 100644 --- a/pallets/pallet-bonded-coins/src/tests/curves/mod.rs +++ b/pallets/pallet-bonded-coins/src/tests/curves/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod arithmetic; mod lmsr; mod polynomial; diff --git a/pallets/pallet-bonded-coins/src/tests/curves/polynomial.rs b/pallets/pallet-bonded-coins/src/tests/curves/polynomial.rs index 040b6381e5..102f552aa3 100644 --- a/pallets/pallet-bonded-coins/src/tests/curves/polynomial.rs +++ b/pallets/pallet-bonded-coins/src/tests/curves/polynomial.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use crate::{ curves::{polynomial::PolynomialParameters, BondingFunction}, mock::runtime::Float, diff --git a/pallets/pallet-bonded-coins/src/tests/curves/square_root.rs b/pallets/pallet-bonded-coins/src/tests/curves/square_root.rs index 185d8e6825..4fe5f02572 100644 --- a/pallets/pallet-bonded-coins/src/tests/curves/square_root.rs +++ b/pallets/pallet-bonded-coins/src/tests/curves/square_root.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use std::str::FromStr; use crate::{ diff --git a/pallets/pallet-bonded-coins/src/tests/mod.rs b/pallets/pallet-bonded-coins/src/tests/mod.rs index 8659ee122b..4f9154899c 100644 --- a/pallets/pallet-bonded-coins/src/tests/mod.rs +++ b/pallets/pallet-bonded-coins/src/tests/mod.rs @@ -14,6 +14,6 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod curves; mod transactions; diff --git a/pallets/pallet-bonded-coins/src/tests/transactions/burn_into.rs b/pallets/pallet-bonded-coins/src/tests/transactions/burn_into.rs index b8c4094ded..86e644c3bb 100644 --- a/pallets/pallet-bonded-coins/src/tests/transactions/burn_into.rs +++ b/pallets/pallet-bonded-coins/src/tests/transactions/burn_into.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ assert_err, assert_ok, traits::{ @@ -27,7 +27,7 @@ use sp_runtime::{assert_eq_error_rate, bounded_vec, traits::Scale, TokenError}; use crate::{ mock::{runtime::*, *}, - types::{Locks, PoolStatus}, + types::{BondedCurrenciesSettings, Locks, PoolStatus}, AccountIdOf, Error, PoolDetailsOf, }; @@ -55,13 +55,16 @@ fn burn_first_coin() { PoolDetailsOf:: { curve: get_linear_bonding_curve(), manager: None, - transferable: true, bonded_currencies: bounded_vec![DEFAULT_BONDED_CURRENCY_ID], state: PoolStatus::Active, collateral: DEFAULT_COLLATERAL_CURRENCY_ID, - denomination: 0, + currencies_settings: BondedCurrenciesSettings { + transferable: true, + allow_reset_team: true, + denomination: 0, + min_operation_balance: 1, + }, owner: ACCOUNT_99, - min_operation_balance: 1, deposit: BondingPallet::calculate_pool_deposit(1), }, )]) diff --git a/pallets/pallet-bonded-coins/src/tests/transactions/create_pool.rs b/pallets/pallet-bonded-coins/src/tests/transactions/create_pool.rs index 3b0f336c9f..a213a012ad 100644 --- a/pallets/pallet-bonded-coins/src/tests/transactions/create_pool.rs +++ b/pallets/pallet-bonded-coins/src/tests/transactions/create_pool.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ assert_err, assert_ok, traits::fungibles::{ @@ -28,8 +28,8 @@ use sp_std::ops::Sub; use crate::{ mock::{runtime::*, *}, - types::{Locks, PoolStatus}, - AccountIdOf, Event as BondingPalletEvents, Pools, TokenMetaOf, + types::{BondedCurrenciesSettings, Locks, PoolStatus}, + AccountIdOf, Error, Event as BondingPalletEvents, Pools, TokenMetaOf, }; #[test] @@ -55,9 +55,12 @@ fn single_currency() { curve, DEFAULT_COLLATERAL_CURRENCY_ID, bounded_vec![bonded_token], - DEFAULT_BONDED_DENOMINATION, - true, - 1, + BondedCurrenciesSettings { + denomination: DEFAULT_BONDED_DENOMINATION, + allow_reset_team: true, + transferable: true, + min_operation_balance: 1 + }, )); let pool_id: AccountIdOf = calculate_pool_id(&[new_asset_id]); @@ -66,7 +69,7 @@ fn single_currency() { assert!(details.is_owner(&ACCOUNT_00)); assert!(details.is_manager(&ACCOUNT_00)); - assert!(details.transferable); + assert!(details.currencies_settings.transferable); assert_eq!( details.state, PoolStatus::Locked(Locks { @@ -74,7 +77,7 @@ fn single_currency() { allow_burn: false, }) ); - assert_eq!(details.denomination, DEFAULT_BONDED_DENOMINATION); + assert_eq!(details.currencies_settings.denomination, DEFAULT_BONDED_DENOMINATION); assert_eq!(details.collateral, DEFAULT_COLLATERAL_CURRENCY_ID); assert_eq!(details.bonded_currencies, vec![new_asset_id]); @@ -104,6 +107,71 @@ fn single_currency() { #[test] fn multi_currency() { + let initial_balance = ONE_HUNDRED_KILT; + ExtBuilder::default() + .with_native_balances(vec![(ACCOUNT_00, initial_balance)]) + .with_collaterals(vec![DEFAULT_COLLATERAL_CURRENCY_ID]) + .build_and_execute_with_sanity_tests(|| { + let origin = RawOrigin::Signed(ACCOUNT_00).into(); + let curve = get_linear_bonding_curve_input(); + + let bonded_tokens = bounded_vec![ + TokenMetaOf:: { + name: BoundedVec::truncate_from(b"Bitcoin".to_vec()), + symbol: BoundedVec::truncate_from(b"BTC".to_vec()), + min_balance: 1, + }, + TokenMetaOf:: { + name: BoundedVec::truncate_from(b"Ether".to_vec()), + symbol: BoundedVec::truncate_from(b"ETH".to_vec()), + min_balance: 1, + }, + TokenMetaOf:: { + name: BoundedVec::truncate_from(b"Dogecoin".to_vec()), + symbol: BoundedVec::truncate_from(b"DOGE".to_vec()), + min_balance: 1, + } + ]; + + let next_asset_id = NextAssetId::::get(); + + assert_ok!(BondingPallet::create_pool( + origin, + curve, + DEFAULT_COLLATERAL_CURRENCY_ID, + bonded_tokens, + BondedCurrenciesSettings { + denomination: DEFAULT_BONDED_DENOMINATION, + allow_reset_team: true, + transferable: true, + min_operation_balance: 1 + } + )); + + assert_eq!(NextAssetId::::get(), next_asset_id + 3); + + let new_assets = Vec::from_iter(next_asset_id..next_asset_id + 3); + let pool_id: AccountIdOf = calculate_pool_id(&new_assets); + + let details = Pools::::get(pool_id.clone()).unwrap(); + + assert_eq!(BondingPallet::get_currencies_number(&details), 3); + assert_eq!(details.bonded_currencies, new_assets); + + assert_eq!( + Balances::free_balance(ACCOUNT_00), + initial_balance.sub(BondingPallet::calculate_pool_deposit(3)) + ); + + for new_asset_id in new_assets { + assert!(Assets::asset_exists(new_asset_id)); + assert_eq!(Assets::owner(new_asset_id), Some(pool_id.clone())); + } + }); +} + +#[test] +fn multi_currency_with_empty_metadata() { let initial_balance = ONE_HUNDRED_KILT; ExtBuilder::default() .with_native_balances(vec![(ACCOUNT_00, initial_balance)]) @@ -113,13 +181,12 @@ fn multi_currency() { let curve = get_linear_bonding_curve_input(); let bonded_token = TokenMetaOf:: { - name: BoundedVec::truncate_from(b"Bitcoin".to_vec()), - symbol: BoundedVec::truncate_from(b"btc".to_vec()), + name: BoundedVec::new(), + symbol: BoundedVec::new(), min_balance: 1, }; let bonded_tokens = bounded_vec![bonded_token; 3]; - let next_asset_id = NextAssetId::::get(); assert_ok!(BondingPallet::create_pool( @@ -127,9 +194,12 @@ fn multi_currency() { curve, DEFAULT_COLLATERAL_CURRENCY_ID, bonded_tokens, - DEFAULT_BONDED_DENOMINATION, - true, - 1 + BondedCurrenciesSettings { + denomination: DEFAULT_BONDED_DENOMINATION, + allow_reset_team: true, + transferable: true, + min_operation_balance: 1 + } )); assert_eq!(NextAssetId::::get(), next_asset_id + 3); @@ -177,9 +247,12 @@ fn can_create_identical_pools() { curve.clone(), DEFAULT_COLLATERAL_CURRENCY_ID, bounded_vec![bonded_token.clone()], - DEFAULT_BONDED_DENOMINATION, - true, - 1 + BondedCurrenciesSettings { + denomination: DEFAULT_BONDED_DENOMINATION, + allow_reset_team: true, + transferable: true, + min_operation_balance: 1 + } )); assert_ok!(BondingPallet::create_pool( @@ -187,9 +260,12 @@ fn can_create_identical_pools() { curve, DEFAULT_COLLATERAL_CURRENCY_ID, bounded_vec![bonded_token], - DEFAULT_BONDED_DENOMINATION, - true, - 1 + BondedCurrenciesSettings { + denomination: DEFAULT_BONDED_DENOMINATION, + allow_reset_team: true, + transferable: true, + min_operation_balance: 1 + } )); assert_eq!(NextAssetId::::get(), next_asset_id + 2); @@ -207,6 +283,98 @@ fn can_create_identical_pools() { }); } +#[test] +fn cannot_reuse_names() { + let initial_balance = ONE_HUNDRED_KILT; + ExtBuilder::default() + .with_native_balances(vec![(ACCOUNT_00, initial_balance)]) + .with_collaterals(vec![DEFAULT_COLLATERAL_CURRENCY_ID]) + .build_and_execute_with_sanity_tests(|| { + let origin = RawOrigin::Signed(ACCOUNT_00).into(); + let curve = get_linear_bonding_curve_input(); + + let bonded_tokens = bounded_vec![ + TokenMetaOf:: { + name: BoundedVec::truncate_from(b"Bitcoin".to_vec()), + symbol: BoundedVec::truncate_from(b"BTC".to_vec()), + min_balance: 1, + }, + TokenMetaOf:: { + name: BoundedVec::truncate_from(b"Ether".to_vec()), + symbol: BoundedVec::truncate_from(b"ETH".to_vec()), + min_balance: 1, + }, + TokenMetaOf:: { + name: BoundedVec::truncate_from(b"Bitcoin".to_vec()), + symbol: BoundedVec::truncate_from(b"DOGE".to_vec()), + min_balance: 1, + } + ]; + + assert_err!( + BondingPallet::create_pool( + origin, + curve, + DEFAULT_COLLATERAL_CURRENCY_ID, + bonded_tokens, + BondedCurrenciesSettings { + denomination: DEFAULT_BONDED_DENOMINATION, + allow_reset_team: true, + transferable: true, + min_operation_balance: 1 + } + ), + Error::::InvalidInput + ); + }); +} + +#[test] +fn cannot_reuse_symbols() { + let initial_balance = ONE_HUNDRED_KILT; + ExtBuilder::default() + .with_native_balances(vec![(ACCOUNT_00, initial_balance)]) + .with_collaterals(vec![DEFAULT_COLLATERAL_CURRENCY_ID]) + .build_and_execute_with_sanity_tests(|| { + let origin = RawOrigin::Signed(ACCOUNT_00).into(); + let curve = get_linear_bonding_curve_input(); + + let bonded_tokens = bounded_vec![ + TokenMetaOf:: { + name: BoundedVec::truncate_from(b"Bitcoin".to_vec()), + symbol: BoundedVec::truncate_from(b"BTC".to_vec()), + min_balance: 1, + }, + TokenMetaOf:: { + name: BoundedVec::truncate_from(b"Ether".to_vec()), + symbol: BoundedVec::truncate_from(b"ETH".to_vec()), + min_balance: 1, + }, + TokenMetaOf:: { + name: BoundedVec::truncate_from(b"Dogecoin".to_vec()), + symbol: BoundedVec::truncate_from(b"BTC".to_vec()), + min_balance: 1, + } + ]; + + assert_err!( + BondingPallet::create_pool( + origin, + curve, + DEFAULT_COLLATERAL_CURRENCY_ID, + bonded_tokens, + BondedCurrenciesSettings { + denomination: DEFAULT_BONDED_DENOMINATION, + allow_reset_team: true, + transferable: true, + min_operation_balance: 1 + } + ), + Error::::InvalidInput + ); + }); +} + #[test] fn fails_if_collateral_not_exists() { ExtBuilder::default() @@ -227,9 +395,12 @@ fn fails_if_collateral_not_exists() { curve, 100, bounded_vec![bonded_token], - DEFAULT_BONDED_DENOMINATION, - true, - 1 + BondedCurrenciesSettings { + denomination: DEFAULT_BONDED_DENOMINATION, + allow_reset_team: true, + transferable: true, + min_operation_balance: 1 + } ), AssetsPalletErrors::::Unknown ); @@ -259,9 +430,12 @@ fn cannot_create_circular_pool() { // try specifying the id of the currency to be created as collateral next_asset_id, bounded_vec![bonded_token], - DEFAULT_BONDED_DENOMINATION, - true, - 1 + BondedCurrenciesSettings { + denomination: DEFAULT_BONDED_DENOMINATION, + allow_reset_team: true, + transferable: true, + min_operation_balance: 1 + } ), AssetsPalletErrors::::Unknown ); @@ -292,9 +466,12 @@ fn handles_asset_id_overflow() { curve, DEFAULT_COLLATERAL_CURRENCY_ID, bounded_vec![bonded_token; 2], - DEFAULT_BONDED_DENOMINATION, - true, - 1 + BondedCurrenciesSettings { + denomination: DEFAULT_BONDED_DENOMINATION, + allow_reset_team: true, + transferable: true, + min_operation_balance: 1 + } ), ArithmeticError::Overflow ); diff --git a/pallets/pallet-bonded-coins/src/tests/transactions/finish_destroy.rs b/pallets/pallet-bonded-coins/src/tests/transactions/finish_destroy.rs index 866d0f0c0c..3b867e9227 100644 --- a/pallets/pallet-bonded-coins/src/tests/transactions/finish_destroy.rs +++ b/pallets/pallet-bonded-coins/src/tests/transactions/finish_destroy.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ assert_err, assert_ok, traits::{ diff --git a/pallets/pallet-bonded-coins/src/tests/transactions/mint_into.rs b/pallets/pallet-bonded-coins/src/tests/transactions/mint_into.rs index 302d7175d1..61e283e9d4 100644 --- a/pallets/pallet-bonded-coins/src/tests/transactions/mint_into.rs +++ b/pallets/pallet-bonded-coins/src/tests/transactions/mint_into.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ assert_err, assert_ok, traits::{ @@ -759,10 +759,6 @@ fn mint_without_collateral() { #[test] fn mint_more_than_fixed_can_represent() { - // denomination is 10 - // capacity of I75F53 is 1.8+e22 - // -> we need to get beyond 1.8+e32 - // check that we can still burn afterwards let pool_id: AccountIdOf = calculate_pool_id(&[DEFAULT_BONDED_CURRENCY_ID]); let curve = Curve::Polynomial(PolynomialParameters { @@ -771,7 +767,11 @@ fn mint_more_than_fixed_can_represent() { o: Float::from_num(0.1), }); - let amount_to_mint = 10u128.pow(20); + // capacity of I75F53 is (2^74)-1 + // denomination is 10 + // -> minting 2^74 * 10^10 coins would just barely overflow + // we do it in two tranches, first should work, second should fail + let amount_to_mint = 2u128.pow(74) * 10u128.pow(10) / 2; ExtBuilder::default() .with_native_balances(vec![(ACCOUNT_00, ONE_HUNDRED_KILT)]) @@ -798,11 +798,18 @@ fn mint_more_than_fixed_can_represent() { .build_and_execute_with_sanity_tests(|| { let origin: OriginFor = RawOrigin::Signed(ACCOUNT_00).into(); - // repeatedly mint until we hit balance that cannot be represented - let mut result = Ok(().into()); - let mut mints = 0; - while result.is_ok() { - result = BondingPallet::mint_into( + assert_ok!(BondingPallet::mint_into( + origin.clone(), + pool_id.clone(), + 0, + ACCOUNT_00, + amount_to_mint, + u128::MAX, + 1, + )); + + assert_err!( + BondingPallet::mint_into( origin.clone(), pool_id.clone(), 0, @@ -810,16 +817,13 @@ fn mint_more_than_fixed_can_represent() { amount_to_mint, u128::MAX, 1, - ); - mints += 1; - } - - assert!(mints > 2); - assert_err!(result, ArithmeticError::Overflow); + ), + ArithmeticError::Overflow + ); assert_eq!( Assets::total_balance(DEFAULT_BONDED_CURRENCY_ID, &ACCOUNT_00), - amount_to_mint * (mints - 1) + amount_to_mint ); // Make sure the pool is not stuck diff --git a/pallets/pallet-bonded-coins/src/tests/transactions/mod.rs b/pallets/pallet-bonded-coins/src/tests/transactions/mod.rs index 3db4cf53cc..3aedb3ae24 100644 --- a/pallets/pallet-bonded-coins/src/tests/transactions/mod.rs +++ b/pallets/pallet-bonded-coins/src/tests/transactions/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod burn_into; mod create_pool; mod finish_destroy; diff --git a/pallets/pallet-bonded-coins/src/tests/transactions/refund_account.rs b/pallets/pallet-bonded-coins/src/tests/transactions/refund_account.rs index c347e506f4..01fc5e7b24 100644 --- a/pallets/pallet-bonded-coins/src/tests/transactions/refund_account.rs +++ b/pallets/pallet-bonded-coins/src/tests/transactions/refund_account.rs @@ -14,12 +14,12 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ assert_err, assert_ok, - traits::fungibles::{Create, Inspect, Mutate}, + traits::fungibles::{roles::Inspect as InspectRole, Create, Inspect, Mutate}, }; -use frame_system::{pallet_prelude::OriginFor, RawOrigin}; +use frame_system::{pallet_prelude::OriginFor, ConsumerLimits, RawOrigin}; use sp_runtime::TokenError; use crate::{ @@ -266,6 +266,112 @@ fn refund_below_min_balance() { }); } +#[test] +fn refund_account_fails_when_account_blocked() { + let pool_details = generate_pool_details( + vec![DEFAULT_BONDED_CURRENCY_ID], + get_linear_bonding_curve(), + false, + Some(PoolStatus::Refunding), + Some(ACCOUNT_00), + None, + None, + None, + ); + let pool_id: AccountIdOf = calculate_pool_id(&[DEFAULT_BONDED_CURRENCY_ID]); + + ExtBuilder::default() + .with_native_balances(vec![(ACCOUNT_01, ONE_HUNDRED_KILT)]) + .with_pools(vec![(pool_id.clone(), pool_details)]) + .with_collaterals(vec![DEFAULT_COLLATERAL_CURRENCY_ID]) + .with_bonded_balance(vec![ + (DEFAULT_COLLATERAL_CURRENCY_ID, pool_id.clone(), ONE_HUNDRED_KILT), + (DEFAULT_COLLATERAL_CURRENCY_ID, ACCOUNT_01, ONE_HUNDRED_KILT), + (DEFAULT_BONDED_CURRENCY_ID, ACCOUNT_01, ONE_HUNDRED_KILT), + ]) + .build_and_execute_with_sanity_tests(|| { + let origin: OriginFor = RawOrigin::Signed(ACCOUNT_01).into(); + + Assets::block( + RawOrigin::Signed(Assets::owner(DEFAULT_COLLATERAL_CURRENCY_ID).unwrap()).into(), + DEFAULT_COLLATERAL_CURRENCY_ID, + ACCOUNT_01, + ) + .expect("Failed to block account for test"); + + // Ensure the refund_account call fails due to failing can_deposit check + assert_err!( + BondingPallet::refund_account(origin, pool_id.clone(), ACCOUNT_01, 0, 1), + TokenError::Blocked + ); + }); +} + +#[test] +fn refund_account_fails_if_account_cannot_be_created() { + let pool_details = generate_pool_details( + vec![DEFAULT_BONDED_CURRENCY_ID], + get_linear_bonding_curve(), + false, + Some(PoolStatus::Refunding), + Some(ACCOUNT_00), + None, + None, + None, + ); + let pool_id: AccountIdOf = calculate_pool_id(&[DEFAULT_BONDED_CURRENCY_ID]); + + // get MaxConsumers value + let max_consumers: usize = ::MaxConsumers::max_consumers() + .try_into() + .expect(""); + // Collateral must be non-sufficient for these tests to work, so we'll create a + // new collateral asset in the test + let collateral_id = DEFAULT_BONDED_CURRENCY_ID + 1; + + ExtBuilder::default() + .with_native_balances(vec![ + (ACCOUNT_01, ONE_HUNDRED_KILT), + (pool_id.clone(), ONE_HUNDRED_KILT), + ]) + .with_pools(vec![(pool_id.clone(), pool_details)]) + .with_collaterals(vec![DEFAULT_COLLATERAL_CURRENCY_ID]) + .with_bonded_balance(vec![ + (DEFAULT_COLLATERAL_CURRENCY_ID, pool_id.clone(), ONE_HUNDRED_KILT), + (DEFAULT_BONDED_CURRENCY_ID, ACCOUNT_01, ONE_HUNDRED_KILT), + ]) + // Freeze some funds for ACCOUNT_01 so refund can only be partial + .with_freezes(vec![(DEFAULT_BONDED_CURRENCY_ID, ACCOUNT_01, 100_000)]) + .build_and_execute_with_sanity_tests(|| { + // switch pool's collateral to a non-sufficient one + assert_ok!(>::create(collateral_id, ACCOUNT_00, false, 1)); + Pools::::mutate(&pool_id, |details| details.as_mut().unwrap().collateral = collateral_id); + // make sure pool account holds collateral - this should work because it also + // holds the (sufficient) original collateral + assert_ok!(Assets::mint_into(collateral_id, &pool_id, ONE_HUNDRED_KILT)); + // create non-sufficient assets to increase ACCOUNT_01 consumers count + // the assets pallet requires at least two references to be available for + // creating an account, but creates only one, meaning we create max_consumers - + // 2 currencies (resulting in max_consumers - 1 consumers because we created one + // previously) + for i in 1..max_consumers - 1 { + let i_u32: u32 = i.try_into().expect("Failed to convert to u32"); + let asset_id = collateral_id + i_u32; + assert_ok!(>::create(asset_id, ACCOUNT_00, false, 1)); + assert_ok!(Assets::mint_into(asset_id, &ACCOUNT_01, ONE_HUNDRED_KILT)); + } + + let origin: OriginFor = RawOrigin::Signed(ACCOUNT_01).into(); + + // Collateral is non-sufficient and thus would create additional consumer + // references on ACCOUNT_01, which is too many + assert_err!( + BondingPallet::refund_account(origin, pool_id.clone(), ACCOUNT_01, 0, 1), + TokenError::CannotCreate + ); + }); +} + #[test] fn refund_account_fails_when_pool_not_refunding() { let pool_details = generate_pool_details( diff --git a/pallets/pallet-bonded-coins/src/tests/transactions/reset_manager.rs b/pallets/pallet-bonded-coins/src/tests/transactions/reset_manager.rs index 0ad264c8d0..b2fdfe7e04 100644 --- a/pallets/pallet-bonded-coins/src/tests/transactions/reset_manager.rs +++ b/pallets/pallet-bonded-coins/src/tests/transactions/reset_manager.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_err, assert_ok}; use frame_system::RawOrigin; diff --git a/pallets/pallet-bonded-coins/src/tests/transactions/reset_team.rs b/pallets/pallet-bonded-coins/src/tests/transactions/reset_team.rs index c300f9146b..5453a2a1d3 100644 --- a/pallets/pallet-bonded-coins/src/tests/transactions/reset_team.rs +++ b/pallets/pallet-bonded-coins/src/tests/transactions/reset_team.rs @@ -14,14 +14,15 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_err, assert_ok, traits::fungibles::roles::Inspect}; use frame_system::RawOrigin; use crate::{ mock::{runtime::*, *}, + traits::ResetTeam, types::{PoolManagingTeam, PoolStatus}, - AccountIdOf, Error as BondingPalletErrors, + AccountIdOf, Error as BondingPalletErrors, Event, }; #[test] @@ -51,9 +52,19 @@ fn resets_team() { admin: ACCOUNT_00, freezer: ACCOUNT_01, }, - 0 + 1 )); + // Ensure the event is emitted + System::assert_has_event( + Event::TeamChanged { + id: pool_id.clone(), + admin: ACCOUNT_00, + freezer: ACCOUNT_01, + } + .into(), + ); + assert_eq!(Assets::admin(DEFAULT_BONDED_CURRENCY_ID), Some(ACCOUNT_00)); assert_eq!(Assets::freezer(DEFAULT_BONDED_CURRENCY_ID), Some(ACCOUNT_01)); assert_eq!(Assets::owner(DEFAULT_BONDED_CURRENCY_ID), Some(pool_id.clone())); @@ -61,6 +72,121 @@ fn resets_team() { }) } +#[test] +fn resets_owner_if_changed() { + let pool_details = generate_pool_details( + vec![DEFAULT_BONDED_CURRENCY_ID], + get_linear_bonding_curve(), + false, + Some(PoolStatus::Active), + Some(ACCOUNT_00), + None, + None, + None, + ); + let pool_id: AccountIdOf = calculate_pool_id(&[DEFAULT_BONDED_CURRENCY_ID]); + + ExtBuilder::default() + .with_pools(vec![(pool_id.clone(), pool_details)]) + .with_collaterals(vec![DEFAULT_COLLATERAL_CURRENCY_ID]) + .build_and_execute_with_sanity_tests(|| { + Assets::reset_team( + DEFAULT_BONDED_CURRENCY_ID, + ACCOUNT_00, + pool_id.clone(), + pool_id.clone(), + pool_id.clone(), + ) + .expect("Failed to use reset_team trait"); + + assert_eq!(Assets::owner(DEFAULT_BONDED_CURRENCY_ID), Some(ACCOUNT_00)); + assert_eq!(Assets::admin(DEFAULT_BONDED_CURRENCY_ID), Some(pool_id.clone())); + assert_eq!(Assets::issuer(DEFAULT_BONDED_CURRENCY_ID), Some(pool_id.clone())); + assert_eq!(Assets::freezer(DEFAULT_BONDED_CURRENCY_ID), Some(pool_id.clone())); + + let manager_origin = RawOrigin::Signed(ACCOUNT_00).into(); + + assert_ok!(BondingPallet::reset_team( + manager_origin, + pool_id.clone(), + PoolManagingTeam { + admin: pool_id.clone(), + freezer: pool_id.clone(), + }, + 1 + )); + + // Ensure the event is emitted + System::assert_has_event( + Event::TeamChanged { + id: pool_id.clone(), + admin: pool_id.clone(), + freezer: pool_id.clone(), + } + .into(), + ); + + assert_eq!(Assets::admin(DEFAULT_BONDED_CURRENCY_ID), Some(pool_id.clone())); + assert_eq!(Assets::freezer(DEFAULT_BONDED_CURRENCY_ID), Some(pool_id.clone())); + assert_eq!(Assets::owner(DEFAULT_BONDED_CURRENCY_ID), Some(pool_id.clone())); + assert_eq!(Assets::issuer(DEFAULT_BONDED_CURRENCY_ID), Some(pool_id)); + }) +} + +#[test] +fn resets_team_for_all() { + let currencies = vec![DEFAULT_BONDED_CURRENCY_ID, DEFAULT_BONDED_CURRENCY_ID + 1]; + + let pool_details = generate_pool_details( + currencies.clone(), + get_linear_bonding_curve(), + false, + Some(PoolStatus::Active), + Some(ACCOUNT_00), + None, + None, + None, + ); + let pool_id: AccountIdOf = calculate_pool_id(¤cies); + + ExtBuilder::default() + .with_pools(vec![(pool_id.clone(), pool_details)]) + .with_collaterals(vec![DEFAULT_COLLATERAL_CURRENCY_ID]) + .build_and_execute_with_sanity_tests(|| { + let manager_origin = RawOrigin::Signed(ACCOUNT_00).into(); + + assert_ok!(BondingPallet::reset_team( + manager_origin, + pool_id.clone(), + PoolManagingTeam { + admin: ACCOUNT_00, + freezer: ACCOUNT_01, + }, + 2 + )); + + // Ensure the event is emitted + System::assert_has_event( + Event::TeamChanged { + id: pool_id.clone(), + admin: ACCOUNT_00, + freezer: ACCOUNT_01, + } + .into(), + ); + + assert_eq!(Assets::admin(currencies[0]), Some(ACCOUNT_00)); + assert_eq!(Assets::freezer(currencies[0]), Some(ACCOUNT_01)); + assert_eq!(Assets::owner(currencies[0]), Some(pool_id.clone())); + assert_eq!(Assets::issuer(currencies[0]), Some(pool_id.clone())); + + assert_eq!(Assets::admin(currencies[1]), Some(ACCOUNT_00)); + assert_eq!(Assets::freezer(currencies[1]), Some(ACCOUNT_01)); + assert_eq!(Assets::owner(currencies[1]), Some(pool_id.clone())); + assert_eq!(Assets::issuer(currencies[1]), Some(pool_id)); + }) +} + #[test] fn does_not_change_team_when_not_live() { let pool_details = generate_pool_details( @@ -89,7 +215,7 @@ fn does_not_change_team_when_not_live() { admin: ACCOUNT_00, freezer: ACCOUNT_00, }, - 0 + 1 ), BondingPalletErrors::::PoolNotLive ); @@ -130,7 +256,7 @@ fn only_manager_can_change_team() { admin: ACCOUNT_00, freezer: ACCOUNT_00, }, - 0 + 1 ), BondingPalletErrors::::NoPermission ); @@ -143,7 +269,47 @@ fn only_manager_can_change_team() { admin: ACCOUNT_00, freezer: ACCOUNT_00, }, - 0 + 1 + ), + BondingPalletErrors::::NoPermission + ); + + assert_eq!(Assets::admin(DEFAULT_BONDED_CURRENCY_ID), Some(pool_id)); + }) +} + +#[test] +fn fails_if_asset_team_flag_not_set() { + let curve = get_linear_bonding_curve(); + + let mut pool_details = generate_pool_details( + vec![DEFAULT_BONDED_CURRENCY_ID], + curve, + false, + Some(PoolStatus::Active), + Some(ACCOUNT_00), + None, + Some(ACCOUNT_00), + None, + ); + pool_details.currencies_settings.allow_reset_team = false; + let pool_id: AccountIdOf = calculate_pool_id(&[DEFAULT_BONDED_CURRENCY_ID]); + ExtBuilder::default() + .with_pools(vec![(pool_id.clone(), pool_details)]) + .with_native_balances(vec![(ACCOUNT_00, ONE_HUNDRED_KILT)]) + .with_collaterals(vec![DEFAULT_COLLATERAL_CURRENCY_ID]) + .build_and_execute_with_sanity_tests(|| { + let manager_origin = RawOrigin::Signed(ACCOUNT_00).into(); + + assert_err!( + BondingPallet::reset_team( + manager_origin, + pool_id.clone(), + PoolManagingTeam { + admin: ACCOUNT_00, + freezer: ACCOUNT_00, + }, + 1 ), BondingPalletErrors::::NoPermission ); @@ -153,7 +319,7 @@ fn only_manager_can_change_team() { } #[test] -fn handles_currency_idx_out_of_bounds() { +fn handles_currency_number_incorrect() { let pool_details = generate_pool_details( vec![DEFAULT_BONDED_CURRENCY_ID], get_linear_bonding_curve(), @@ -180,9 +346,9 @@ fn handles_currency_idx_out_of_bounds() { admin: ACCOUNT_00, freezer: ACCOUNT_00, }, - 2 + 0 ), - BondingPalletErrors::::IndexOutOfBounds + BondingPalletErrors::::CurrencyCount ); }) } diff --git a/pallets/pallet-bonded-coins/src/tests/transactions/set_lock.rs b/pallets/pallet-bonded-coins/src/tests/transactions/set_lock.rs index 7e4fb6bc81..3271d102ca 100644 --- a/pallets/pallet-bonded-coins/src/tests/transactions/set_lock.rs +++ b/pallets/pallet-bonded-coins/src/tests/transactions/set_lock.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_err, assert_ok}; use frame_system::{pallet_prelude::OriginFor, RawOrigin}; @@ -116,6 +116,45 @@ fn set_lock_works_when_locked() { }); } +#[test] +fn set_lock_requires_at_least_one_flag_set() { + let pool_details = generate_pool_details( + vec![DEFAULT_BONDED_CURRENCY_ID], + get_linear_bonding_curve(), + true, + Some(PoolStatus::Active), + Some(ACCOUNT_00), + Some(DEFAULT_COLLATERAL_CURRENCY_ID), + Some(ACCOUNT_00), + None, + ); + let pool_id: AccountIdOf = calculate_pool_id(&[DEFAULT_BONDED_CURRENCY_ID]); + + ExtBuilder::default() + .with_pools(vec![(pool_id.clone(), pool_details)]) + .with_native_balances(vec![(ACCOUNT_00, ONE_HUNDRED_KILT)]) + .with_collaterals(vec![DEFAULT_COLLATERAL_CURRENCY_ID]) + .with_bonded_balance(vec![ + (DEFAULT_COLLATERAL_CURRENCY_ID, pool_id.clone(), u128::MAX / 10), + (DEFAULT_BONDED_CURRENCY_ID, ACCOUNT_00, u128::MAX / 10), + ]) + .build_and_execute_with_sanity_tests(|| { + let origin = RawOrigin::Signed(ACCOUNT_00).into(); + + assert_err!( + BondingPallet::set_lock( + origin, + pool_id.clone(), + Locks { + allow_burn: true, + allow_mint: true + } + ), + Error::::InvalidInput + ); + }); +} + #[test] fn set_lock_fails_when_not_authorized() { let pool_details = generate_pool_details( diff --git a/pallets/pallet-bonded-coins/src/tests/transactions/start_destroy.rs b/pallets/pallet-bonded-coins/src/tests/transactions/start_destroy.rs index 1230675c06..3a9a85dfae 100644 --- a/pallets/pallet-bonded-coins/src/tests/transactions/start_destroy.rs +++ b/pallets/pallet-bonded-coins/src/tests/transactions/start_destroy.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_err, assert_ok, traits::fungibles::Destroy}; use frame_system::{pallet_prelude::OriginFor, RawOrigin}; use sp_runtime::traits::BadOrigin; diff --git a/pallets/pallet-bonded-coins/src/tests/transactions/start_refund.rs b/pallets/pallet-bonded-coins/src/tests/transactions/start_refund.rs index dc7ce17285..43e0d43bff 100644 --- a/pallets/pallet-bonded-coins/src/tests/transactions/start_refund.rs +++ b/pallets/pallet-bonded-coins/src/tests/transactions/start_refund.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_err, assert_ok}; use frame_system::{pallet_prelude::OriginFor, RawOrigin}; use sp_runtime::traits::BadOrigin; diff --git a/pallets/pallet-bonded-coins/src/tests/transactions/unlock.rs b/pallets/pallet-bonded-coins/src/tests/transactions/unlock.rs index 60cf7d8c6c..b496f3cb61 100644 --- a/pallets/pallet-bonded-coins/src/tests/transactions/unlock.rs +++ b/pallets/pallet-bonded-coins/src/tests/transactions/unlock.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_err, assert_ok}; use frame_system::{pallet_prelude::OriginFor, RawOrigin}; diff --git a/pallets/pallet-bonded-coins/src/traits.rs b/pallets/pallet-bonded-coins/src/traits.rs index 5dcd1bc1df..65d8fba7a7 100644 --- a/pallets/pallet-bonded-coins/src/traits.rs +++ b/pallets/pallet-bonded-coins/src/traits.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{dispatch::DispatchResult, traits::fungibles::roles::Inspect}; use frame_system::RawOrigin; use pallet_assets::{Config as AssetConfig, Pallet as AssetsPallet}; @@ -60,8 +60,10 @@ where } } -/// Copy from the Polkadot SDK. once we are at version 1.13.0, we can remove -/// this. +/// Copy of a trait from a later version of the Polkadot SDK +/// (frame_support::traits::tokens::fungibles::roles::ResetTeam). Once we +/// upgraded to Polkadot SDK version 1.13.0, this can be retired in favor of the +/// original trait. pub trait ResetTeam: Inspect { /// Reset the team for the asset with the given `id`. /// @@ -80,6 +82,10 @@ pub trait ResetTeam: Inspect { ) -> DispatchResult; } +/// Implementation of the back-ported ResetTeam trait for the assets pallet, +/// relying on its `transfer_ownership` and `set_team` calls. Later versions of +/// the assets pallet implement the original trait, so this is a stop-gap +/// solution until we upgraded to at least Polkadot SDK version 1.13.0. impl ResetTeam> for AssetsPallet where T: AssetConfig, @@ -87,14 +93,24 @@ where { fn reset_team( id: Self::AssetId, - _owner: AccountIdOf, + owner: AccountIdOf, admin: AccountIdOf, issuer: AccountIdOf, freezer: AccountIdOf, ) -> DispatchResult { - let owner = AssetsPallet::::owner(id.clone()).ok_or(DispatchError::Unavailable)?; - let origin = RawOrigin::Signed(owner); - AssetsPallet::::set_team(origin.into(), id.into(), issuer.into(), admin.into(), freezer.into()) + let current_owner = AssetsPallet::::owner(id.clone()).ok_or(DispatchError::Unavailable)?; + AssetsPallet::::transfer_ownership( + RawOrigin::Signed(current_owner).into(), + id.clone().into(), + owner.clone().into(), + )?; + AssetsPallet::::set_team( + RawOrigin::Signed(owner).into(), + id.into(), + issuer.into(), + admin.into(), + freezer.into(), + ) } } diff --git a/pallets/pallet-bonded-coins/src/try_state.rs b/pallets/pallet-bonded-coins/src/try_state.rs index b1407bf441..e88481bffa 100644 --- a/pallets/pallet-bonded-coins/src/try_state.rs +++ b/pallets/pallet-bonded-coins/src/try_state.rs @@ -18,7 +18,7 @@ pub(crate) fn do_try_state() -> Result<(), TryRuntimeError> { owner, bonded_currencies, state, - denomination, + currencies_settings, .. } = pool_details; @@ -61,7 +61,7 @@ pub(crate) fn do_try_state() -> Result<(), TryRuntimeError> { // The Currency in the fungibles pallet should always match with the // denomination stored in the pool. let currency_denomination = T::Fungibles::decimals(currency_id.clone()); - assert_eq!(currency_denomination, denomination); + assert_eq!(currency_denomination, currencies_settings.denomination); // if currency has on-zero supply -> collateral in pool account must be // non-zero. diff --git a/pallets/pallet-bonded-coins/src/types.rs b/pallets/pallet-bonded-coins/src/types.rs index 1b3d3d7dec..ccdf13fcad 100644 --- a/pallets/pallet-bonded-coins/src/types.rs +++ b/pallets/pallet-bonded-coins/src/types.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; @@ -25,6 +25,12 @@ pub struct Locks { pub allow_burn: bool, } +impl Locks { + pub const fn any_lock_set(&self) -> bool { + !(self.allow_mint && self.allow_burn) + } +} + /// Status of a pool. #[derive(Clone, Encode, Decode, PartialEq, Eq, TypeInfo, MaxEncodedLen, Debug)] pub enum PoolStatus { @@ -72,12 +78,24 @@ impl PoolStatus { } } +#[derive(Clone, Encode, Decode, PartialEq, Eq, TypeInfo, MaxEncodedLen, Debug, Default)] +pub struct BondedCurrenciesSettings { + /// The minimum amount that can be minted/burnt. + pub min_operation_balance: FungiblesBalance, + /// The denomination of all bonded assets the pool. + pub denomination: u8, + /// Whether asset management team changes are allowed. + pub allow_reset_team: bool, + /// Whether assets are transferable or not. + pub transferable: bool, +} + /// Details of a pool. #[derive(Clone, Encode, Decode, PartialEq, Eq, TypeInfo, MaxEncodedLen, Debug)] -pub struct PoolDetails { +pub struct PoolDetails { /// The owner of the pool. pub owner: AccountId, - /// The manager of the pool. If a manager is set, the pool is permissioned. + /// The manager of the pool, who can execute privileged transactions. pub manager: Option, /// The curve of the pool. pub curve: ParametrizedCurve, @@ -87,19 +105,21 @@ pub struct PoolDetails, - /// Whether the pool is transferable or not. - pub transferable: bool, - /// The denomination of the pool. - pub denomination: u8, - /// The minimum amount that can be minted/burnt. - pub min_operation_balance: u128, + /// Shared settings of the currencies in the pool. + pub currencies_settings: SharedSettings, /// The deposit to be returned upon destruction of this pool. pub deposit: DepositBalance, } -impl - PoolDetails -where +impl + PoolDetails< + AccountId, + ParametrizedCurve, + Currencies, + BaseCurrencyId, + DepositBalance, + BondedCurrenciesSettings, + > where AccountId: PartialEq + Clone, { #[allow(clippy::too_many_arguments)] @@ -110,8 +130,9 @@ where collateral: BaseCurrencyId, bonded_currencies: Currencies, transferable: bool, + allow_reset_team: bool, denomination: u8, - min_operation_balance: u128, + min_operation_balance: FungiblesBalance, deposit: DepositBalance, ) -> Self { Self { @@ -120,10 +141,13 @@ where curve, collateral, bonded_currencies, - transferable, + currencies_settings: BondedCurrenciesSettings { + transferable, + allow_reset_team, + denomination, + min_operation_balance, + }, state: PoolStatus::default(), - denomination, - min_operation_balance, deposit, } } diff --git a/pallets/pallet-configuration/Cargo.toml b/pallets/pallet-configuration/Cargo.toml index a370fe83c6..6d21ba5573 100644 --- a/pallets/pallet-configuration/Cargo.toml +++ b/pallets/pallet-configuration/Cargo.toml @@ -34,6 +34,7 @@ frame-benchmarking = { workspace = true, optional = true } [features] default = ["std"] +mock = [] runtime-benchmarks = [ "cumulus-pallet-parachain-system/runtime-benchmarks", "frame-benchmarking", diff --git a/pallets/pallet-configuration/src/benchmarking.rs b/pallets/pallet-configuration/src/benchmarking.rs index f5cac9d1cb..8ecc149465 100644 --- a/pallets/pallet-configuration/src/benchmarking.rs +++ b/pallets/pallet-configuration/src/benchmarking.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at // Old benchmarking macros are a mess. #![allow(clippy::tests_outside_test_module)] diff --git a/pallets/pallet-configuration/src/configuration.rs b/pallets/pallet-configuration/src/configuration.rs index 6f551332ad..779d883258 100644 --- a/pallets/pallet-configuration/src/configuration.rs +++ b/pallets/pallet-configuration/src/configuration.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; diff --git a/pallets/pallet-configuration/src/default_weights.rs b/pallets/pallet-configuration/src/default_weights.rs index 99ad054d45..1696b1471b 100644 --- a/pallets/pallet-configuration/src/default_weights.rs +++ b/pallets/pallet-configuration/src/default_weights.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for pallet_configuration //! diff --git a/pallets/pallet-configuration/src/lib.rs b/pallets/pallet-configuration/src/lib.rs index 5cc972f80a..0bfdafad0a 100644 --- a/pallets/pallet-configuration/src/lib.rs +++ b/pallets/pallet-configuration/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! # Configuration Pallet //! @@ -54,6 +54,8 @@ pub use crate::{configuration::Configuration, default_weights::WeightInfo, palle // very end of the development cycle of a pallet, and from time to time it should be commented out to catch any issues // other than the one generated by the `pallet::event` macro. #[allow(clippy::shadow_reuse)] +// map_err is used over inspect_err in the macro-generated code, and we have to ignore it. +#[allow(clippy::manual_inspect)] pub mod pallet { use super::*; diff --git a/pallets/pallet-configuration/src/mock.rs b/pallets/pallet-configuration/src/mock.rs index 18b8655e45..00b178a134 100644 --- a/pallets/pallet-configuration/src/mock.rs +++ b/pallets/pallet-configuration/src/mock.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at #[cfg(test)] pub mod runtime { @@ -80,6 +80,11 @@ pub mod runtime { type SS58Prefix = SS58Prefix; type OnSetCode = (); type MaxConsumers = frame_support::traits::ConstU32<16>; + type MultiBlockMigrator = (); + type SingleBlockMigrations = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); } parameter_types! { diff --git a/pallets/pallet-configuration/src/tests.rs b/pallets/pallet-configuration/src/tests.rs index ebc98a68cf..577f7622e0 100644 --- a/pallets/pallet-configuration/src/tests.rs +++ b/pallets/pallet-configuration/src/tests.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use cumulus_pallet_parachain_system::CheckAssociatedRelayNumber; use frame_support::{assert_noop, assert_ok}; diff --git a/pallets/pallet-deposit-storage/src/benchmarking.rs b/pallets/pallet-deposit-storage/src/benchmarking.rs index cd742d5aba..23e126d576 100644 --- a/pallets/pallet-deposit-storage/src/benchmarking.rs +++ b/pallets/pallet-deposit-storage/src/benchmarking.rs @@ -14,10 +14,11 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_benchmarking::v2::*; +#[allow(clippy::multiple_bound_locations)] #[benchmarks( where T: Config + pallet_balances::Config, diff --git a/pallets/pallet-deposit-storage/src/deposit/mock.rs b/pallets/pallet-deposit-storage/src/deposit/mock.rs index 37d0acd5e7..6ae496306d 100644 --- a/pallets/pallet-deposit-storage/src/deposit/mock.rs +++ b/pallets/pallet-deposit-storage/src/deposit/mock.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ construct_runtime, @@ -86,6 +86,11 @@ impl frame_system::Config for TestRuntime { type SS58Prefix = ConstU16<1>; type SystemWeightInfo = (); type Version = (); + type MultiBlockMigrator = (); + type SingleBlockMigrations = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); } impl pallet_balances::Config for TestRuntime { diff --git a/pallets/pallet-deposit-storage/src/deposit/mod.rs b/pallets/pallet-deposit-storage/src/deposit/mod.rs index 46c5119d98..cc2f604db4 100644 --- a/pallets/pallet-deposit-storage/src/deposit/mod.rs +++ b/pallets/pallet-deposit-storage/src/deposit/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ sp_runtime::DispatchError, diff --git a/pallets/pallet-deposit-storage/src/deposit/tests/mod.rs b/pallets/pallet-deposit-storage/src/deposit/tests/mod.rs index c72b2f3f63..c9d50bac0a 100644 --- a/pallets/pallet-deposit-storage/src/deposit/tests/mod.rs +++ b/pallets/pallet-deposit-storage/src/deposit/tests/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod on_commitment_removed; mod on_identity_committed; diff --git a/pallets/pallet-deposit-storage/src/deposit/tests/on_commitment_removed.rs b/pallets/pallet-deposit-storage/src/deposit/tests/on_commitment_removed.rs index 217e08be15..16b3902573 100644 --- a/pallets/pallet-deposit-storage/src/deposit/tests/on_commitment_removed.rs +++ b/pallets/pallet-deposit-storage/src/deposit/tests/on_commitment_removed.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ assert_noop, assert_ok, diff --git a/pallets/pallet-deposit-storage/src/deposit/tests/on_identity_committed.rs b/pallets/pallet-deposit-storage/src/deposit/tests/on_identity_committed.rs index d9fcba7b64..2a65423334 100644 --- a/pallets/pallet-deposit-storage/src/deposit/tests/on_identity_committed.rs +++ b/pallets/pallet-deposit-storage/src/deposit/tests/on_identity_committed.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ assert_noop, assert_ok, diff --git a/pallets/pallet-deposit-storage/src/fungible/mod.rs b/pallets/pallet-deposit-storage/src/fungible/mod.rs index f4f4bedc12..159d2fa959 100644 --- a/pallets/pallet-deposit-storage/src/fungible/mod.rs +++ b/pallets/pallet-deposit-storage/src/fungible/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::traits::{ fungible::{Dust, Inspect, InspectHold, MutateHold, Unbalanced, UnbalancedHold}, diff --git a/pallets/pallet-deposit-storage/src/fungible/tests/burn.rs b/pallets/pallet-deposit-storage/src/fungible/tests/burn.rs index 24e93a2475..803beea57b 100644 --- a/pallets/pallet-deposit-storage/src/fungible/tests/burn.rs +++ b/pallets/pallet-deposit-storage/src/fungible/tests/burn.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::traits::{ fungible::MutateHold, diff --git a/pallets/pallet-deposit-storage/src/fungible/tests/hold.rs b/pallets/pallet-deposit-storage/src/fungible/tests/hold.rs index 31221d5912..52d11ce0de 100644 --- a/pallets/pallet-deposit-storage/src/fungible/tests/hold.rs +++ b/pallets/pallet-deposit-storage/src/fungible/tests/hold.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_err, assert_ok, traits::fungible::MutateHold}; use kilt_support::Deposit; diff --git a/pallets/pallet-deposit-storage/src/fungible/tests/inspect_hold.rs b/pallets/pallet-deposit-storage/src/fungible/tests/inspect_hold.rs index 2e70d134ae..c3ea770623 100644 --- a/pallets/pallet-deposit-storage/src/fungible/tests/inspect_hold.rs +++ b/pallets/pallet-deposit-storage/src/fungible/tests/inspect_hold.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::traits::{ fungible::{InspectHold, MutateHold}, diff --git a/pallets/pallet-deposit-storage/src/fungible/tests/mock.rs b/pallets/pallet-deposit-storage/src/fungible/tests/mock.rs index 46fb138cff..f616d9faca 100644 --- a/pallets/pallet-deposit-storage/src/fungible/tests/mock.rs +++ b/pallets/pallet-deposit-storage/src/fungible/tests/mock.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ construct_runtime, @@ -88,6 +88,11 @@ impl frame_system::Config for TestRuntime { type SS58Prefix = ConstU16<1>; type SystemWeightInfo = (); type Version = (); + type MultiBlockMigrator = (); + type SingleBlockMigrations = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); } impl pallet_balances::Config for TestRuntime { diff --git a/pallets/pallet-deposit-storage/src/fungible/tests/mod.rs b/pallets/pallet-deposit-storage/src/fungible/tests/mod.rs index ba50b079ee..26635705e9 100644 --- a/pallets/pallet-deposit-storage/src/fungible/tests/mod.rs +++ b/pallets/pallet-deposit-storage/src/fungible/tests/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod burn; mod hold; diff --git a/pallets/pallet-deposit-storage/src/fungible/tests/release.rs b/pallets/pallet-deposit-storage/src/fungible/tests/release.rs index 383c75ea16..5cb80b02e2 100644 --- a/pallets/pallet-deposit-storage/src/fungible/tests/release.rs +++ b/pallets/pallet-deposit-storage/src/fungible/tests/release.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ assert_err, diff --git a/pallets/pallet-deposit-storage/src/fungible/tests/transfer.rs b/pallets/pallet-deposit-storage/src/fungible/tests/transfer.rs index cc13de51db..b60c955409 100644 --- a/pallets/pallet-deposit-storage/src/fungible/tests/transfer.rs +++ b/pallets/pallet-deposit-storage/src/fungible/tests/transfer.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::traits::{ fungible::MutateHold, diff --git a/pallets/pallet-deposit-storage/src/fungible/try_state.rs b/pallets/pallet-deposit-storage/src/fungible/try_state.rs index 2b1fab8b57..3330925934 100644 --- a/pallets/pallet-deposit-storage/src/fungible/try_state.rs +++ b/pallets/pallet-deposit-storage/src/fungible/try_state.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ensure, traits::fungible::InspectHold}; use frame_system::pallet_prelude::BlockNumberFor; diff --git a/pallets/pallet-deposit-storage/src/lib.rs b/pallets/pallet-deposit-storage/src/lib.rs index 3dfd6b5ce7..ceaa997afd 100644 --- a/pallets/pallet-deposit-storage/src/lib.rs +++ b/pallets/pallet-deposit-storage/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Pallet to store namespaced deposits for the configured `Currency`. It allows //! the original payer of a deposit to claim it back, triggering a hook to @@ -59,6 +59,8 @@ const LOG_TARGET: &str = "runtime::pallet_deposit_storage"; // very end of the development cycle of a pallet, and from time to time it should be commented out to catch any issues // other than the one generated by the `pallet::event` macro. #[allow(clippy::shadow_reuse)] +// map_err is used over inspect_err in the macro-generated code, and we have to ignore it. +#[allow(clippy::manual_inspect)] pub mod pallet { use crate::{ default_weights::WeightInfo, diff --git a/pallets/pallet-deposit-storage/src/mock.rs b/pallets/pallet-deposit-storage/src/mock.rs index 40994d5d63..1812d5cc0c 100644 --- a/pallets/pallet-deposit-storage/src/mock.rs +++ b/pallets/pallet-deposit-storage/src/mock.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ construct_runtime, parameter_types, @@ -73,6 +73,11 @@ impl frame_system::Config for TestRuntime { type SS58Prefix = ConstU16<1>; type SystemWeightInfo = (); type Version = (); + type MultiBlockMigrator = (); + type SingleBlockMigrations = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); } parameter_types! { diff --git a/pallets/pallet-deposit-storage/src/tests/add_deposit.rs b/pallets/pallet-deposit-storage/src/tests/add_deposit.rs index 4ed79fa8ec..3eb4bee26f 100644 --- a/pallets/pallet-deposit-storage/src/tests/add_deposit.rs +++ b/pallets/pallet-deposit-storage/src/tests/add_deposit.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_noop, assert_ok, traits::fungible::InspectHold}; use kilt_support::Deposit; diff --git a/pallets/pallet-deposit-storage/src/tests/mod.rs b/pallets/pallet-deposit-storage/src/tests/mod.rs index 6b4b2eb611..e32c3d3f49 100644 --- a/pallets/pallet-deposit-storage/src/tests/mod.rs +++ b/pallets/pallet-deposit-storage/src/tests/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod add_deposit; mod reclaim_deposit; diff --git a/pallets/pallet-deposit-storage/src/tests/reclaim_deposit.rs b/pallets/pallet-deposit-storage/src/tests/reclaim_deposit.rs index 8f27843747..d992cb6c20 100644 --- a/pallets/pallet-deposit-storage/src/tests/reclaim_deposit.rs +++ b/pallets/pallet-deposit-storage/src/tests/reclaim_deposit.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_noop, assert_ok, traits::fungible::InspectHold}; use frame_system::RawOrigin; diff --git a/pallets/pallet-deposit-storage/src/traits.rs b/pallets/pallet-deposit-storage/src/traits.rs index a7b5fea47f..00bb73a539 100644 --- a/pallets/pallet-deposit-storage/src/traits.rs +++ b/pallets/pallet-deposit-storage/src/traits.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use sp_std::fmt::Debug; diff --git a/pallets/pallet-deposit-storage/src/try_state.rs b/pallets/pallet-deposit-storage/src/try_state.rs index 6f9399438a..d669d69ad2 100644 --- a/pallets/pallet-deposit-storage/src/try_state.rs +++ b/pallets/pallet-deposit-storage/src/try_state.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Pallet to store namespaced deposits for the configured `Currency`. It allows //! the original payer of a deposit to claim it back, triggering a hook to diff --git a/pallets/pallet-did-lookup/src/account.rs b/pallets/pallet-did-lookup/src/account.rs index eadcb6c3a3..58aed883a3 100644 --- a/pallets/pallet-did-lookup/src/account.rs +++ b/pallets/pallet-did-lookup/src/account.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at // This code originally came from the purestake/moonbeam repo. // see https://github.com/PureStake/moonbeam/blob/74324db0cfacaad555064c839f17072b57cb35e3/primitives/account/src/lib.rs for reference. diff --git a/pallets/pallet-did-lookup/src/associate_account_request.rs b/pallets/pallet-did-lookup/src/associate_account_request.rs index 32056cf65c..5f39ae605f 100644 --- a/pallets/pallet-did-lookup/src/associate_account_request.rs +++ b/pallets/pallet-did-lookup/src/associate_account_request.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use crate::{ account::{AccountId20, EthereumSignature}, diff --git a/pallets/pallet-did-lookup/src/benchmarking.rs b/pallets/pallet-did-lookup/src/benchmarking.rs index c44d1593c2..02499648d8 100644 --- a/pallets/pallet-did-lookup/src/benchmarking.rs +++ b/pallets/pallet-did-lookup/src/benchmarking.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at // Old benchmarking macros are a mess. #![allow(clippy::tests_outside_test_module)] @@ -186,7 +186,7 @@ benchmarks_instance_pallet! { let sig = sp_io::crypto::ecdsa_sign_prehashed( KeyTypeId(*b"aura"), ð_public_key, - &Keccak256::digest(wrapped_payload).try_into().unwrap(), + &Keccak256::digest(wrapped_payload).into(), ).ok_or("Error while building signature.")?; make_free_for_did::(&caller); diff --git a/pallets/pallet-did-lookup/src/connection_record.rs b/pallets/pallet-did-lookup/src/connection_record.rs index 0c340bd709..a0bca8a8ff 100644 --- a/pallets/pallet-did-lookup/src/connection_record.rs +++ b/pallets/pallet-did-lookup/src/connection_record.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use kilt_support::Deposit; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; diff --git a/pallets/pallet-did-lookup/src/default_weights.rs b/pallets/pallet-did-lookup/src/default_weights.rs index b0d52c36d1..5bf5989010 100644 --- a/pallets/pallet-did-lookup/src/default_weights.rs +++ b/pallets/pallet-did-lookup/src/default_weights.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for pallet_did_lookup //! diff --git a/pallets/pallet-did-lookup/src/lib.rs b/pallets/pallet-did-lookup/src/lib.rs index fbd6a1695f..21131be59d 100644 --- a/pallets/pallet-did-lookup/src/lib.rs +++ b/pallets/pallet-did-lookup/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! # DID lookup pallet //! @@ -59,6 +59,8 @@ pub use crate::{default_weights::WeightInfo, pallet::*}; // very end of the development cycle of a pallet, and from time to time it should be commented out to catch any issues // other than the one generated by the `pallet::event` macro. #[allow(clippy::shadow_reuse)] +// map_err is used over inspect_err in the macro-generated code, and we have to ignore it. +#[allow(clippy::manual_inspect)] pub mod pallet { use crate::{ associate_account_request::AssociateAccountRequest, default_weights::WeightInfo, diff --git a/pallets/pallet-did-lookup/src/linkable_account.rs b/pallets/pallet-did-lookup/src/linkable_account.rs index ee105e0827..d6553fbc58 100644 --- a/pallets/pallet-did-lookup/src/linkable_account.rs +++ b/pallets/pallet-did-lookup/src/linkable_account.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; diff --git a/pallets/pallet-did-lookup/src/migrations.rs b/pallets/pallet-did-lookup/src/migrations.rs index 1dd311e4a3..ed651e7cea 100644 --- a/pallets/pallet-did-lookup/src/migrations.rs +++ b/pallets/pallet-did-lookup/src/migrations.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ pallet_prelude::DispatchResult, diff --git a/pallets/pallet-did-lookup/src/mock.rs b/pallets/pallet-did-lookup/src/mock.rs index 3d5dae1268..f30877ecd5 100644 --- a/pallets/pallet-did-lookup/src/mock.rs +++ b/pallets/pallet-did-lookup/src/mock.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{pallet_prelude::ValueQuery, parameter_types, storage_alias}; use frame_system::pallet_prelude::BlockNumberFor; @@ -81,6 +81,11 @@ impl frame_system::Config for Test { type SS58Prefix = SS58Prefix; type OnSetCode = (); type MaxConsumers = frame_support::traits::ConstU32<16>; + type MultiBlockMigrator = (); + type SingleBlockMigrations = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); } parameter_types! { diff --git a/pallets/pallet-did-lookup/src/signature.rs b/pallets/pallet-did-lookup/src/signature.rs index dfb36239ee..4a0d48331e 100644 --- a/pallets/pallet-did-lookup/src/signature.rs +++ b/pallets/pallet-did-lookup/src/signature.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use parity_scale_codec::alloc::string::ToString; use sp_std::vec::Vec; diff --git a/pallets/pallet-did-lookup/src/tests/associate.rs b/pallets/pallet-did-lookup/src/tests/associate.rs index 21cc66d616..c20e681d94 100644 --- a/pallets/pallet-did-lookup/src/tests/associate.rs +++ b/pallets/pallet-did-lookup/src/tests/associate.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_noop, assert_ok, crypto::ecdsa::ECDSAExt, traits::fungible::InspectHold}; use frame_system::pallet_prelude::BlockNumberFor; @@ -201,7 +201,7 @@ fn test_add_eth_association() { crate::signature::WrapType::Ethereum, ); - let sig = eth_pair.sign_prehashed(&Keccak256::digest(wrapped_payload).try_into().unwrap()); + let sig = eth_pair.sign_prehashed(&Keccak256::digest(wrapped_payload).into()); // new association. No overwrite assert_ok!(DidLookup::associate_account( diff --git a/pallets/pallet-did-lookup/src/tests/deposit.rs b/pallets/pallet-did-lookup/src/tests/deposit.rs index 92a449de2c..e81019cb25 100644 --- a/pallets/pallet-did-lookup/src/tests/deposit.rs +++ b/pallets/pallet-did-lookup/src/tests/deposit.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_noop, assert_ok, traits::fungible::InspectHold}; use kilt_support::mock::mock_origin; use sp_runtime::{traits::Zero, TokenError}; diff --git a/pallets/pallet-did-lookup/src/tests/mod.rs b/pallets/pallet-did-lookup/src/tests/mod.rs index f44779b402..22954d1c2b 100644 --- a/pallets/pallet-did-lookup/src/tests/mod.rs +++ b/pallets/pallet-did-lookup/src/tests/mod.rs @@ -14,6 +14,6 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod associate; mod deposit; diff --git a/pallets/pallet-did-lookup/src/try_state.rs b/pallets/pallet-did-lookup/src/try_state.rs index c1efae33dc..3cc41e188a 100644 --- a/pallets/pallet-did-lookup/src/try_state.rs +++ b/pallets/pallet-did-lookup/src/try_state.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::ensure; use kilt_support::test_utils::log_and_return_error_message; diff --git a/pallets/pallet-dip-consumer/src/benchmarking.rs b/pallets/pallet-dip-consumer/src/benchmarking.rs index d1777b099e..caffc1237b 100644 --- a/pallets/pallet-dip-consumer/src/benchmarking.rs +++ b/pallets/pallet-dip-consumer/src/benchmarking.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use crate::{Config, IdentityProofOf, RuntimeCallOf}; use frame_benchmarking::v2::*; diff --git a/pallets/pallet-dip-consumer/src/lib.rs b/pallets/pallet-dip-consumer/src/lib.rs index 926bc94f68..4a1abced8c 100644 --- a/pallets/pallet-dip-consumer/src/lib.rs +++ b/pallets/pallet-dip-consumer/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at #![cfg_attr(not(feature = "std"), no_std)] #![doc = include_str!("../README.md")] @@ -50,6 +50,8 @@ const LOG_TARGET: &str = "dip::consumer::pallet_dip_consumer"; // very end of the development cycle of a pallet, and from time to time it should be commented out to catch any issues // other than the one generated by the `pallet::event` macro. #[allow(clippy::shadow_reuse)] +// map_err is used over inspect_err in the macro-generated code, and we have to ignore it. +#[allow(clippy::manual_inspect)] pub mod pallet { use super::*; @@ -202,10 +204,16 @@ pub mod pallet { // benchmarks while making sure the call is actually dispatched and passes any // filters the consumer proof verifier has set. cfg_if::cfg_if! { - if #[cfg(not(feature = "runtime-benchmark"))] { + if #[cfg(not(feature = "runtime-benchmarks"))] { call.dispatch(did_origin.into()) } else { - ().into() + log::debug!( + target: LOG_TARGET, + "Dispatching call {:#?} with origin {:#?}", + call, + did_origin + ); + Ok(().into()) } } } diff --git a/pallets/pallet-dip-consumer/src/mock.rs b/pallets/pallet-dip-consumer/src/mock.rs index 8c422f0e35..159f8aa67c 100644 --- a/pallets/pallet-dip-consumer/src/mock.rs +++ b/pallets/pallet-dip-consumer/src/mock.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ construct_runtime, @@ -67,6 +67,11 @@ impl frame_system::Config for TestRuntime { type SS58Prefix = ConstU16<1>; type SystemWeightInfo = (); type Version = (); + type MultiBlockMigrator = (); + type SingleBlockMigrations = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); } impl pallet_balances::Config for TestRuntime { @@ -193,6 +198,8 @@ impl ExtBuilder { for (subject, details) in self.1 { IdentityEntries::::insert(subject, details) } + + System::set_block_number(System::block_number() + 1); }); ext diff --git a/pallets/pallet-dip-consumer/src/origin.rs b/pallets/pallet-dip-consumer/src/origin.rs index 1b62976d8b..d489053fee 100644 --- a/pallets/pallet-dip-consumer/src/origin.rs +++ b/pallets/pallet-dip-consumer/src/origin.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::traits::EnsureOrigin; use kilt_support::traits::CallSources; diff --git a/pallets/pallet-dip-consumer/src/tests/dispatch_as.rs b/pallets/pallet-dip-consumer/src/tests/dispatch_as.rs index e3faff1ae6..e601fb7c4e 100644 --- a/pallets/pallet-dip-consumer/src/tests/dispatch_as.rs +++ b/pallets/pallet-dip-consumer/src/tests/dispatch_as.rs @@ -14,13 +14,13 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_noop, assert_ok}; use frame_system::RawOrigin; use crate::{ - mock::{ExtBuilder, System, TestRuntime, SUBJECT, SUBMITTER}, + mock::{ExtBuilder, TestRuntime, SUBJECT, SUBMITTER}, Error, IdentityEntries, Pallet, }; @@ -30,8 +30,6 @@ fn dispatch_as_successful_no_details() { .with_balances(vec![(SUBMITTER, 10_000)]) .build() .execute_with(|| { - // Needed to test event generation. See for more context. - frame_system::Pallet::::set_block_number(1); assert!(IdentityEntries::::get(SUBJECT).is_none()); assert_ok!(Pallet::::dispatch_as( RawOrigin::Signed(SUBMITTER).into(), @@ -39,7 +37,9 @@ fn dispatch_as_successful_no_details() { true, Box::new(pallet_did_lookup::Call::associate_sender {}.into()) )); - System::assert_last_event( + + #[cfg(not(feature = "runtime-benchmarks"))] + crate::mock::System::assert_last_event( pallet_did_lookup::Event::::AssociationEstablished(SUBMITTER.into(), SUBJECT).into(), ); assert_eq!(IdentityEntries::::get(SUBJECT), Some(0)); @@ -53,15 +53,15 @@ fn dispatch_as_successful_existing_details() { .with_identity_details(vec![(SUBJECT, 100)]) .build() .execute_with(|| { - // Needed to test event generation. See for more context. - frame_system::Pallet::::set_block_number(1); assert_ok!(Pallet::::dispatch_as( RawOrigin::Signed(SUBMITTER).into(), SUBJECT, true, Box::new(pallet_did_lookup::Call::associate_sender {}.into()) )); - System::assert_last_event( + + #[cfg(not(feature = "runtime-benchmarks"))] + crate::mock::System::assert_last_event( pallet_did_lookup::Event::::AssociationEstablished(SUBMITTER.into(), SUBJECT).into(), ); // Details have been bumped up by the proof verifier, and correctly stored in diff --git a/pallets/pallet-dip-consumer/src/tests/mod.rs b/pallets/pallet-dip-consumer/src/tests/mod.rs index 8a798f7b45..8db97c28fe 100644 --- a/pallets/pallet-dip-consumer/src/tests/mod.rs +++ b/pallets/pallet-dip-consumer/src/tests/mod.rs @@ -14,6 +14,6 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod dispatch_as; diff --git a/pallets/pallet-dip-consumer/src/traits.rs b/pallets/pallet-dip-consumer/src/traits.rs index 2e4f9bc030..2d679ce052 100644 --- a/pallets/pallet-dip-consumer/src/traits.rs +++ b/pallets/pallet-dip-consumer/src/traits.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::Parameter; use sp_std::fmt::Debug; @@ -34,7 +34,7 @@ where /// The accepted type for a DIP identity proof. type Proof: Parameter; /// The type returned upon successful DIP proof verification. - type VerificationResult; + type VerificationResult: Debug; /// Verify a given DIP proof given the calling context, including the call /// being dispatched, the DIP subject dispatching it, the account submitting diff --git a/pallets/pallet-dip-provider/src/benchmarking.rs b/pallets/pallet-dip-provider/src/benchmarking.rs index 62ec780238..de5b318672 100644 --- a/pallets/pallet-dip-provider/src/benchmarking.rs +++ b/pallets/pallet-dip-provider/src/benchmarking.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use crate::{traits::IdentityProvider, Call, Config, Pallet}; use frame_benchmarking::v2::*; diff --git a/pallets/pallet-dip-provider/src/lib.rs b/pallets/pallet-dip-provider/src/lib.rs index 91394e6f7f..10576cbb37 100644 --- a/pallets/pallet-dip-provider/src/lib.rs +++ b/pallets/pallet-dip-provider/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at #![cfg_attr(not(feature = "std"), no_std)] #![doc = include_str!("../README.md")] @@ -50,6 +50,8 @@ const LOG_TARGET: &str = "dip::provider::pallet_dip_provider"; // very end of the development cycle of a pallet, and from time to time it should be commented out to catch any issues // other than the one generated by the `pallet::event` macro. #[allow(clippy::shadow_reuse)] +// map_err is used over inspect_err in the macro-generated code, and we have to ignore it. +#[allow(clippy::manual_inspect)] pub mod pallet { use super::*; diff --git a/pallets/pallet-dip-provider/src/mock.rs b/pallets/pallet-dip-provider/src/mock.rs index 92411abdb2..b4238f53fc 100644 --- a/pallets/pallet-dip-provider/src/mock.rs +++ b/pallets/pallet-dip-provider/src/mock.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ construct_runtime, @@ -67,6 +67,11 @@ impl frame_system::Config for TestRuntime { type SS58Prefix = ConstU16<1>; type SystemWeightInfo = (); type Version = (); + type MultiBlockMigrator = (); + type SingleBlockMigrations = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); } impl crate::Config for TestRuntime { diff --git a/pallets/pallet-dip-provider/src/tests/commit_identity.rs b/pallets/pallet-dip-provider/src/tests/commit_identity.rs index 4d6483c173..05c8a32cef 100644 --- a/pallets/pallet-dip-provider/src/tests/commit_identity.rs +++ b/pallets/pallet-dip-provider/src/tests/commit_identity.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::assert_ok; use kilt_support::mock::mock_origin::DoubleOrigin; diff --git a/pallets/pallet-dip-provider/src/tests/delete_identity_commitment.rs b/pallets/pallet-dip-provider/src/tests/delete_identity_commitment.rs index 2fc2477b81..bbaf99896f 100644 --- a/pallets/pallet-dip-provider/src/tests/delete_identity_commitment.rs +++ b/pallets/pallet-dip-provider/src/tests/delete_identity_commitment.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_noop, assert_ok}; use kilt_support::mock::mock_origin::DoubleOrigin; diff --git a/pallets/pallet-dip-provider/src/tests/mod.rs b/pallets/pallet-dip-provider/src/tests/mod.rs index 2358e08550..ddd0b59e74 100644 --- a/pallets/pallet-dip-provider/src/tests/mod.rs +++ b/pallets/pallet-dip-provider/src/tests/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod commit_identity; mod delete_identity_commitment; diff --git a/pallets/pallet-dip-provider/src/traits.rs b/pallets/pallet-dip-provider/src/traits.rs index 0541bc97ad..257f21f339 100644 --- a/pallets/pallet-dip-provider/src/traits.rs +++ b/pallets/pallet-dip-provider/src/traits.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use did::DidRawOrigin; use frame_support::sp_runtime::AccountId32; diff --git a/pallets/pallet-inflation/src/benchmarking.rs b/pallets/pallet-inflation/src/benchmarking.rs index 0db4207236..c4ca402715 100644 --- a/pallets/pallet-inflation/src/benchmarking.rs +++ b/pallets/pallet-inflation/src/benchmarking.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at // Old benchmarking macros are a mess. #![allow(clippy::tests_outside_test_module)] diff --git a/pallets/pallet-inflation/src/default_weights.rs b/pallets/pallet-inflation/src/default_weights.rs index e11c52aeda..66adf392d8 100644 --- a/pallets/pallet-inflation/src/default_weights.rs +++ b/pallets/pallet-inflation/src/default_weights.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for pallet_inflation //! diff --git a/pallets/pallet-inflation/src/lib.rs b/pallets/pallet-inflation/src/lib.rs index 3086edbd84..b47d0a12f3 100644 --- a/pallets/pallet-inflation/src/lib.rs +++ b/pallets/pallet-inflation/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! # Treasury minting pallet //! @@ -54,6 +54,8 @@ pub use crate::{default_weights::WeightInfo, pallet::*}; // very end of the development cycle of a pallet, and from time to time it should be commented out to catch any issues // other than the one generated by the `pallet::event` macro. #[allow(clippy::shadow_reuse)] +// map_err is used over inspect_err in the macro-generated code, and we have to ignore it. +#[allow(clippy::manual_inspect)] pub mod pallet { use super::WeightInfo; use frame_support::{ diff --git a/pallets/pallet-inflation/src/mock.rs b/pallets/pallet-inflation/src/mock.rs index 9e74e124f1..972af503e0 100644 --- a/pallets/pallet-inflation/src/mock.rs +++ b/pallets/pallet-inflation/src/mock.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use crate as pallet_inflation; use crate::CreditOf; @@ -83,6 +83,11 @@ impl frame_system::Config for Test { type SS58Prefix = SS58Prefix; type OnSetCode = (); type MaxConsumers = frame_support::traits::ConstU32<16>; + type MultiBlockMigrator = (); + type SingleBlockMigrations = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); } parameter_types! { diff --git a/pallets/pallet-inflation/src/tests.rs b/pallets/pallet-inflation/src/tests.rs index 8a2efa694b..6245ce68aa 100644 --- a/pallets/pallet-inflation/src/tests.rs +++ b/pallets/pallet-inflation/src/tests.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::traits::fungible::Inspect; use sp_runtime::traits::Zero; diff --git a/pallets/pallet-migration/src/benchmarking.rs b/pallets/pallet-migration/src/benchmarking.rs index 4c5ab3687d..6ca60ad74c 100644 --- a/pallets/pallet-migration/src/benchmarking.rs +++ b/pallets/pallet-migration/src/benchmarking.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at // Old benchmarking macros are a mess. #![allow(clippy::tests_outside_test_module)] diff --git a/pallets/pallet-migration/src/lib.rs b/pallets/pallet-migration/src/lib.rs index 867b0daca4..f63cd4acbd 100644 --- a/pallets/pallet-migration/src/lib.rs +++ b/pallets/pallet-migration/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at #![cfg_attr(not(feature = "std"), no_std)] @@ -41,6 +41,8 @@ pub use crate::{default_weights::WeightInfo, pallet::*}; // very end of the development cycle of a pallet, and from time to time it should be commented out to catch any issues // other than the one generated by the `pallet::event` macro. #[allow(clippy::shadow_reuse)] +// map_err is used over inspect_err in the macro-generated code, and we have to ignore it. +#[allow(clippy::manual_inspect)] pub mod pallet { use super::*; diff --git a/pallets/pallet-migration/src/mock.rs b/pallets/pallet-migration/src/mock.rs index 02d33c564d..7b3211f7bf 100644 --- a/pallets/pallet-migration/src/mock.rs +++ b/pallets/pallet-migration/src/mock.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use crate::Config; use attestation::mock::MockAccessControl; @@ -115,6 +115,11 @@ impl frame_system::Config for Test { type SS58Prefix = SS58Prefix; type OnSetCode = (); type MaxConsumers = frame_support::traits::ConstU32<16>; + type MultiBlockMigrator = (); + type SingleBlockMigrations = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); } parameter_types! { diff --git a/pallets/pallet-migration/src/test.rs b/pallets/pallet-migration/src/test.rs index 41037029d5..81ac68ec7d 100644 --- a/pallets/pallet-migration/src/test.rs +++ b/pallets/pallet-migration/src/test.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use attestation::{ mock::{claim_hash_from_seed, generate_base_attestation, sr25519_did_from_public_key}, diff --git a/pallets/pallet-relay-store/Cargo.toml b/pallets/pallet-relay-store/Cargo.toml index 04cc6522af..7f573ff9c9 100644 --- a/pallets/pallet-relay-store/Cargo.toml +++ b/pallets/pallet-relay-store/Cargo.toml @@ -20,7 +20,7 @@ sp-runtime = { workspace = true, features = ["std"] } sp-trie = { workspace = true, features = ["std"] } [dependencies] -cumulus-pallet-parachain-system = { workspace = true, features = ["parameterized-consensus-hook"] } +cumulus-pallet-parachain-system = { workspace = true } cumulus-primitives-core = { workspace = true } frame-support = { workspace = true } frame-system = { workspace = true } diff --git a/pallets/pallet-relay-store/src/benchmarking.rs b/pallets/pallet-relay-store/src/benchmarking.rs index bc46862c37..5f78f1d18d 100644 --- a/pallets/pallet-relay-store/src/benchmarking.rs +++ b/pallets/pallet-relay-store/src/benchmarking.rs @@ -14,12 +14,13 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use crate::{Config, Pallet}; use frame_benchmarking::v2::*; use sp_std::vec::Vec; +#[allow(clippy::multiple_bound_locations)] #[benchmarks( where T: cumulus_pallet_parachain_system::Config diff --git a/pallets/pallet-relay-store/src/default_weights.rs b/pallets/pallet-relay-store/src/default_weights.rs index 54041e26c3..20268a70e5 100644 --- a/pallets/pallet-relay-store/src/default_weights.rs +++ b/pallets/pallet-relay-store/src/default_weights.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for pallet_relay_store //! diff --git a/pallets/pallet-relay-store/src/lib.rs b/pallets/pallet-relay-store/src/lib.rs index ef58f2eec2..19e12c4734 100644 --- a/pallets/pallet-relay-store/src/lib.rs +++ b/pallets/pallet-relay-store/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Pallet to store the last N (configurable) relay chain state roots to be used //! for cross-chain state proof verification. The pallet relies on the @@ -54,6 +54,8 @@ const LOG_TARGET: &str = "pallet_relay_store"; // very end of the development cycle of a pallet, and from time to time it should be commented out to catch any issues // other than the one generated by the `pallet::event` macro. #[allow(clippy::shadow_reuse)] +// map_err is used over inspect_err in the macro-generated code, and we have to ignore it. +#[allow(clippy::manual_inspect)] pub mod pallet { use super::*; @@ -114,7 +116,7 @@ pub mod pallet { pub(crate) fn on_finalize_internal(_n: BlockNumberFor) { // Called before the validation data is cleaned in the // parachain_system::on_finalize hook - let Some(new_validation_data) = cumulus_pallet_parachain_system::Pallet::::validation_data() else { + let Some(new_validation_data) = cumulus_pallet_parachain_system::ValidationData::::get() else { return; }; Self::store_new_validation_data(new_validation_data) diff --git a/pallets/pallet-relay-store/src/mock.rs b/pallets/pallet-relay-store/src/mock.rs index dc6d1b3f02..a4c66a7d71 100644 --- a/pallets/pallet-relay-store/src/mock.rs +++ b/pallets/pallet-relay-store/src/mock.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use cumulus_pallet_parachain_system::{ParachainSetCode, RelayNumberStrictlyIncreases}; use cumulus_primitives_core::{AggregateMessageOrigin, ParaId, PersistedValidationData}; @@ -66,6 +66,11 @@ impl frame_system::Config for TestRuntime { type SS58Prefix = ConstU16<1>; type SystemWeightInfo = (); type Version = (); + type MultiBlockMigrator = (); + type SingleBlockMigrations = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); } parameter_types! { diff --git a/pallets/pallet-relay-store/src/relay.rs b/pallets/pallet-relay-store/src/relay.rs index 8dd3ce997b..1f2c31df8b 100644 --- a/pallets/pallet-relay-store/src/relay.rs +++ b/pallets/pallet-relay-store/src/relay.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; diff --git a/pallets/pallet-relay-store/src/tests/mod.rs b/pallets/pallet-relay-store/src/tests/mod.rs index 8b4b69d17a..e829558688 100644 --- a/pallets/pallet-relay-store/src/tests/mod.rs +++ b/pallets/pallet-relay-store/src/tests/mod.rs @@ -14,6 +14,6 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod on_finalize; diff --git a/pallets/pallet-relay-store/src/tests/on_finalize.rs b/pallets/pallet-relay-store/src/tests/on_finalize.rs index dd3b285245..8b078868f9 100644 --- a/pallets/pallet-relay-store/src/tests/on_finalize.rs +++ b/pallets/pallet-relay-store/src/tests/on_finalize.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::traits::Hooks; use sp_runtime::traits::Zero; diff --git a/pallets/pallet-web3-names/src/benchmarking.rs b/pallets/pallet-web3-names/src/benchmarking.rs index 74b6302ec1..3f64db0167 100644 --- a/pallets/pallet-web3-names/src/benchmarking.rs +++ b/pallets/pallet-web3-names/src/benchmarking.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at // Old benchmarking macros are a mess. #![allow(clippy::tests_outside_test_module)] @@ -180,7 +180,6 @@ benchmarks_instance_pallet! { let web3_name_input: BoundedVec>::MaxNameLength> = BoundedVec::try_from( >::BenchmarkHelper::generate_name_input_with_length(>::MaxNameLength::get().saturated_into()) ).expect("BoundedVec creation should not fail."); - let web3_name_input_clone = web3_name_input.clone(); let origin_create = >::OwnerOrigin::generate_origin(deposit_owner_old.clone(), owner.clone()); make_free_for_did::(&deposit_owner_old); diff --git a/pallets/pallet-web3-names/src/default_weights.rs b/pallets/pallet-web3-names/src/default_weights.rs index 6a9c7a9396..a7a95b9781 100644 --- a/pallets/pallet-web3-names/src/default_weights.rs +++ b/pallets/pallet-web3-names/src/default_weights.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for pallet_web3_names //! diff --git a/pallets/pallet-web3-names/src/lib.rs b/pallets/pallet-web3-names/src/lib.rs index 3b4b38eba1..22fc391a80 100644 --- a/pallets/pallet-web3-names/src/lib.rs +++ b/pallets/pallet-web3-names/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! # Pallet storing unique nickname <-> DID links for user-friendly DID //! nicknames. @@ -53,6 +53,8 @@ pub use crate::{default_weights::WeightInfo, pallet::*}; // very end of the development cycle of a pallet, and from time to time it should be commented out to catch any issues // other than the one generated by the `pallet::event` macro. #[allow(clippy::shadow_reuse)] +// map_err is used over inspect_err in the macro-generated code, and we have to ignore it. +#[allow(clippy::manual_inspect)] pub mod pallet { use frame_support::{ pallet_prelude::*, diff --git a/pallets/pallet-web3-names/src/migrations.rs b/pallets/pallet-web3-names/src/migrations.rs index 7b592361be..f0ac3bd7c3 100644 --- a/pallets/pallet-web3-names/src/migrations.rs +++ b/pallets/pallet-web3-names/src/migrations.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ pallet_prelude::DispatchResult, diff --git a/pallets/pallet-web3-names/src/mock.rs b/pallets/pallet-web3-names/src/mock.rs index d6dd2cbdd6..21b7168f39 100644 --- a/pallets/pallet-web3-names/src/mock.rs +++ b/pallets/pallet-web3-names/src/mock.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::traits::fungible::MutateHold; use frame_system::pallet_prelude::BlockNumberFor; use kilt_support::Deposit; @@ -116,6 +116,11 @@ pub(crate) mod runtime { type OnSetCode = (); type MaxConsumers = frame_support::traits::ConstU32<16>; type RuntimeTask = RuntimeTask; + type MultiBlockMigrator = (); + type SingleBlockMigrations = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); } parameter_types! { diff --git a/pallets/pallet-web3-names/src/tests/ban.rs b/pallets/pallet-web3-names/src/tests/ban.rs index 92bf596bff..24a359ee13 100644 --- a/pallets/pallet-web3-names/src/tests/ban.rs +++ b/pallets/pallet-web3-names/src/tests/ban.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ assert_noop, assert_ok, diff --git a/pallets/pallet-web3-names/src/tests/claim.rs b/pallets/pallet-web3-names/src/tests/claim.rs index 5789f8a203..8e8af3ce78 100644 --- a/pallets/pallet-web3-names/src/tests/claim.rs +++ b/pallets/pallet-web3-names/src/tests/claim.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ assert_noop, assert_ok, @@ -86,8 +86,7 @@ fn claiming_successful() { #[test] fn claiming_invalid() { - let too_short_web3_names = vec![ - // Empty name + let too_short_web3_names = [ BoundedVec::try_from(b"".to_vec()).unwrap(), // Single-char name BoundedVec::try_from(b"1".to_vec()).unwrap(), @@ -95,8 +94,7 @@ fn claiming_invalid() { BoundedVec::try_from(b"10".to_vec()).unwrap(), ]; - let invalid_web3_names = vec![ - // Not allowed ASCII character name (invalid symbol) + let invalid_web3_names = [ BoundedVec::try_from(b"10:1".to_vec()).unwrap(), // Not allowed ASCII character name (uppercase letter) BoundedVec::try_from(b"abcdE".to_vec()).unwrap(), diff --git a/pallets/pallet-web3-names/src/tests/deposit.rs b/pallets/pallet-web3-names/src/tests/deposit.rs index 25b0f16183..6484ced376 100644 --- a/pallets/pallet-web3-names/src/tests/deposit.rs +++ b/pallets/pallet-web3-names/src/tests/deposit.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_noop, assert_ok, traits::fungible::InspectHold}; diff --git a/pallets/pallet-web3-names/src/tests/mod.rs b/pallets/pallet-web3-names/src/tests/mod.rs index 4fb191e540..7b78d15a57 100644 --- a/pallets/pallet-web3-names/src/tests/mod.rs +++ b/pallets/pallet-web3-names/src/tests/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod ban; mod claim; diff --git a/pallets/pallet-web3-names/src/tests/release.rs b/pallets/pallet-web3-names/src/tests/release.rs index 7606d08d38..f483992759 100644 --- a/pallets/pallet-web3-names/src/tests/release.rs +++ b/pallets/pallet-web3-names/src/tests/release.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ assert_noop, assert_ok, diff --git a/pallets/pallet-web3-names/src/try_state.rs b/pallets/pallet-web3-names/src/try_state.rs index 114cc9b929..2c8397eea2 100644 --- a/pallets/pallet-web3-names/src/try_state.rs +++ b/pallets/pallet-web3-names/src/try_state.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::ensure; use kilt_support::test_utils::log_and_return_error_message; diff --git a/pallets/pallet-web3-names/src/web3_name.rs b/pallets/pallet-web3-names/src/web3_name.rs index dc0b86cb7a..5edeca72cd 100644 --- a/pallets/pallet-web3-names/src/web3_name.rs +++ b/pallets/pallet-web3-names/src/web3_name.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; diff --git a/pallets/parachain-staking/src/api.rs b/pallets/parachain-staking/src/api.rs index 4b179c6df8..93652e415f 100644 --- a/pallets/parachain-staking/src/api.rs +++ b/pallets/parachain-staking/src/api.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use crate::{ types::BalanceOf, BlocksAuthored, BlocksRewarded, CandidatePool, Config, DelegatorState, InflationConfig, Pallet, diff --git a/pallets/parachain-staking/src/benchmarking.rs b/pallets/parachain-staking/src/benchmarking.rs index f4ef877efd..091be188b5 100644 --- a/pallets/parachain-staking/src/benchmarking.rs +++ b/pallets/parachain-staking/src/benchmarking.rs @@ -14,12 +14,12 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at // Old benchmarking macros are a mess. #![allow(clippy::tests_outside_test_module)] -use crate::{types::RoundInfo, *}; +use crate::*; use frame_benchmarking::{account, benchmarks, impl_benchmark_test_suite}; use frame_support::{ assert_ok, @@ -157,8 +157,6 @@ benchmarks! { let new_issuance = T::Currency::total_issuance(); let max_col_reward = InflationConfig::::get().collator.reward_rate.per_block * MaxCollatorCandidateStake::::get() * MaxSelectedCandidates::::get().into(); let network_block_reward = T::NetworkRewardRate::get() * max_col_reward; - assert!(new_issuance > issuance); - assert_eq!(new_issuance - issuance, network_block_reward) } force_new_round { @@ -176,13 +174,6 @@ benchmarks! { let now = now + BlockNumberFor::::one(); System::::set_block_number(now); Session::::on_initialize(now); - assert_eq!(Session::::current_index(), 1); - assert_eq!(Round::::get(), RoundInfo { - current: 1, - first: now, - length: round.length, - }); - assert!(!ForceNewRound::::get()); } set_inflation { diff --git a/pallets/parachain-staking/src/default_weights.rs b/pallets/parachain-staking/src/default_weights.rs index e16eb1a547..533b46a7a8 100644 --- a/pallets/parachain-staking/src/default_weights.rs +++ b/pallets/parachain-staking/src/default_weights.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for parachain_staking //! diff --git a/pallets/parachain-staking/src/inflation.rs b/pallets/parachain-staking/src/inflation.rs index c27aec6274..95f2dc6f08 100644 --- a/pallets/parachain-staking/src/inflation.rs +++ b/pallets/parachain-staking/src/inflation.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Helper methods for computing issuance based on inflation use crate::{pallet::Config, types::BalanceOf}; diff --git a/pallets/parachain-staking/src/lib.rs b/pallets/parachain-staking/src/lib.rs index 7bd42fa36d..185c4ce82d 100644 --- a/pallets/parachain-staking/src/lib.rs +++ b/pallets/parachain-staking/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! # Parachain Staking //! @@ -150,6 +150,8 @@ pub use crate::{default_weights::WeightInfo, pallet::*}; // very end of the development cycle of a pallet, and from time to time it should be commented out to catch any issues // other than the one generated by the `pallet::event` macro. #[allow(clippy::shadow_reuse)] +// map_err is used over inspect_err in the macro-generated code, and we have to ignore it. +#[allow(clippy::manual_inspect)] pub mod pallet { use super::*; pub use crate::inflation::{InflationInfo, RewardRate, StakingInfo}; @@ -162,14 +164,14 @@ pub mod pallet { fungible::Balanced, tokens::{ fungible::{Inspect, MutateFreeze, Unbalanced}, - Fortitude, Precision, Preservation, + Fortitude, IdAmount, Precision, Preservation, }, BuildGenesisConfig, EstimateNextSessionRotation, Get, OnUnbalanced, StorageVersion, }, BoundedVec, }; use frame_system::pallet_prelude::*; - use pallet_balances::{Freezes, IdAmount}; + use pallet_balances::Freezes; use pallet_session::ShouldEndSession; use scale_info::TypeInfo; use sp_runtime::{ diff --git a/pallets/parachain-staking/src/mock.rs b/pallets/parachain-staking/src/mock.rs index 718550ddae..fc2072e8c2 100644 --- a/pallets/parachain-staking/src/mock.rs +++ b/pallets/parachain-staking/src/mock.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Test utilities #![allow(clippy::from_over_into)] @@ -28,7 +28,7 @@ use frame_support::{ use frame_system::pallet_prelude::BlockNumberFor; use pallet_authorship::EventHandler; use sp_consensus_aura::sr25519::AuthorityId; -use sp_core::{ConstBool, H256}; +use sp_core::{ConstBool, ConstU64, H256}; use sp_runtime::{ impl_opaque_keys, testing::UintAuthorityId, @@ -93,6 +93,11 @@ impl frame_system::Config for Test { type SS58Prefix = SS58Prefix; type OnSetCode = (); type MaxConsumers = frame_support::traits::ConstU32<16>; + type MultiBlockMigrator = (); + type SingleBlockMigrations = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); } parameter_types! { pub const ExistentialDeposit: Balance = 1; @@ -120,6 +125,7 @@ impl pallet_aura::Config for Test { type DisabledValidators = (); type MaxAuthorities = MaxCollatorCandidates; type AllowMultipleBlocksPerSlot = ConstBool; + type SlotDuration = ConstU64<500>; } impl pallet_authorship::Config for Test { @@ -331,9 +337,12 @@ impl ExtBuilder { // NOTE: this will initialize the aura authorities // through OneSessionHandler::on_genesis_session - pallet_session::GenesisConfig:: { keys: session_keys } - .assimilate_storage(&mut t) - .expect("Session Pallet's storage can be assimilated"); + pallet_session::GenesisConfig:: { + keys: session_keys, + ..Default::default() + } + .assimilate_storage(&mut t) + .expect("Session Pallet's storage can be assimilated"); let mut ext = sp_io::TestExternalities::new(t); diff --git a/pallets/parachain-staking/src/set.rs b/pallets/parachain-staking/src/set.rs index d61276f551..1dab658775 100644 --- a/pallets/parachain-staking/src/set.rs +++ b/pallets/parachain-staking/src/set.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{traits::Get, BoundedVec, DefaultNoBound}; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; @@ -179,10 +179,10 @@ impl> OrderedSet { /// given element. /// /// 1. If the value is found, then Result::Ok is returned, containing the - /// index of the matching element. + /// index of the matching element. /// 2. If the value is not found, then Result::Err is returned, containing - /// the index where a matching element could be inserted while maintaining - /// sorted order. + /// the index where a matching element could be inserted while + /// maintaining sorted order. pub fn linear_search(&self, value: &T) -> Result { let size = self.0.len(); let mut loc: usize = size; diff --git a/pallets/parachain-staking/src/tests/collators.rs b/pallets/parachain-staking/src/tests/collators.rs index b9182940d1..48be740978 100644 --- a/pallets/parachain-staking/src/tests/collators.rs +++ b/pallets/parachain-staking/src/tests/collators.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Unit testing diff --git a/pallets/parachain-staking/src/tests/delegator.rs b/pallets/parachain-staking/src/tests/delegator.rs index b39b79d546..66e4cb522e 100644 --- a/pallets/parachain-staking/src/tests/delegator.rs +++ b/pallets/parachain-staking/src/tests/delegator.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Unit testing diff --git a/pallets/parachain-staking/src/tests/genesis.rs b/pallets/parachain-staking/src/tests/genesis.rs index 52da0d39a7..0131bfc54e 100644 --- a/pallets/parachain-staking/src/tests/genesis.rs +++ b/pallets/parachain-staking/src/tests/genesis.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Unit testing diff --git a/pallets/parachain-staking/src/tests/inflation.rs b/pallets/parachain-staking/src/tests/inflation.rs index 9138c76c22..e8b4b4dfd0 100644 --- a/pallets/parachain-staking/src/tests/inflation.rs +++ b/pallets/parachain-staking/src/tests/inflation.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Unit testing diff --git a/pallets/parachain-staking/src/tests/mod.rs b/pallets/parachain-staking/src/tests/mod.rs index 923deb272a..724853ad3c 100644 --- a/pallets/parachain-staking/src/tests/mod.rs +++ b/pallets/parachain-staking/src/tests/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Unit testing diff --git a/pallets/parachain-staking/src/tests/rewards.rs b/pallets/parachain-staking/src/tests/rewards.rs index 53e1272d5b..78e7acf1dd 100644 --- a/pallets/parachain-staking/src/tests/rewards.rs +++ b/pallets/parachain-staking/src/tests/rewards.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Unit testing diff --git a/pallets/parachain-staking/src/tests/round.rs b/pallets/parachain-staking/src/tests/round.rs index cb85f8545e..b7b155e0bc 100644 --- a/pallets/parachain-staking/src/tests/round.rs +++ b/pallets/parachain-staking/src/tests/round.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Unit testing diff --git a/pallets/parachain-staking/src/tests/session.rs b/pallets/parachain-staking/src/tests/session.rs index 968122bb8b..fa544f64ba 100644 --- a/pallets/parachain-staking/src/tests/session.rs +++ b/pallets/parachain-staking/src/tests/session.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Unit testing diff --git a/pallets/parachain-staking/src/tests/stake.rs b/pallets/parachain-staking/src/tests/stake.rs index a2b5ea431a..46e46499f1 100644 --- a/pallets/parachain-staking/src/tests/stake.rs +++ b/pallets/parachain-staking/src/tests/stake.rs @@ -14,14 +14,14 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Unit testing -use frame_support::{assert_noop, assert_ok, storage::bounded_btree_map::BoundedBTreeMap}; +use frame_support::{assert_noop, assert_ok, storage::bounded_btree_map::BoundedBTreeMap, traits::tokens::IdAmount}; use kilt_runtime_api_staking::StakingRates; use pallet_authorship::EventHandler; -use pallet_balances::{Freezes, IdAmount}; +use pallet_balances::Freezes; use sp_runtime::{traits::Zero, Perquintill}; diff --git a/pallets/parachain-staking/src/try_state.rs b/pallets/parachain-staking/src/try_state.rs index bb1ce84e94..a767940165 100644 --- a/pallets/parachain-staking/src/try_state.rs +++ b/pallets/parachain-staking/src/try_state.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ensure, traits::Get}; use kilt_support::test_utils::log_and_return_error_message; diff --git a/pallets/parachain-staking/src/types.rs b/pallets/parachain-staking/src/types.rs index 1f52861a8a..c9ff761ba2 100644 --- a/pallets/parachain-staking/src/types.rs +++ b/pallets/parachain-staking/src/types.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::traits::{ fungible::{Credit, Inspect}, diff --git a/pallets/public-credentials/src/access_control.rs b/pallets/public-credentials/src/access_control.rs index bf2405f99e..3e085ec1b7 100644 --- a/pallets/public-credentials/src/access_control.rs +++ b/pallets/public-credentials/src/access_control.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use sp_runtime::DispatchError; use sp_weights::Weight; diff --git a/pallets/public-credentials/src/benchmarking.rs b/pallets/public-credentials/src/benchmarking.rs index 664cebe150..850c338f06 100644 --- a/pallets/public-credentials/src/benchmarking.rs +++ b/pallets/public-credentials/src/benchmarking.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at // Old benchmarking macros are a mess. #![allow(clippy::tests_outside_test_module)] @@ -27,6 +27,7 @@ use frame_support::{ BoundedVec, }; use frame_system::pallet_prelude::BlockNumberFor; +use sp_runtime::SaturatedConversion; use sp_std::{boxed::Box, vec, vec::Vec}; use ctype::CtypeEntryOf; @@ -50,10 +51,7 @@ where ::Currency: Mutate, { // Has to be more than the deposit, we do 3x just to be safe - CurrencyOf::::set_balance( - acc, - ::Deposit::get() + ::Deposit::get() + ::Deposit::get(), - ); + CurrencyOf::::set_balance(acc, 1_000_000_000_000_000_000u128.saturated_into()); } benchmarks! { diff --git a/pallets/public-credentials/src/credentials.rs b/pallets/public-credentials/src/credentials.rs index 7835063f6e..ca1142ac4c 100644 --- a/pallets/public-credentials/src/credentials.rs +++ b/pallets/public-credentials/src/credentials.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; diff --git a/pallets/public-credentials/src/default_weights.rs b/pallets/public-credentials/src/default_weights.rs index 53ea33e220..7ec4918739 100644 --- a/pallets/public-credentials/src/default_weights.rs +++ b/pallets/public-credentials/src/default_weights.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for public_credentials //! diff --git a/pallets/public-credentials/src/lib.rs b/pallets/public-credentials/src/lib.rs index ddf7c0f5d5..b88e5ba009 100644 --- a/pallets/public-credentials/src/lib.rs +++ b/pallets/public-credentials/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! # Public credentials Pallet //! @@ -63,6 +63,8 @@ pub use crate::{ // very end of the development cycle of a pallet, and from time to time it should be commented out to catch any issues // other than the one generated by the `pallet::event` macro. #[allow(clippy::shadow_reuse)] +// map_err is used over inspect_err in the macro-generated code, and we have to ignore it. +#[allow(clippy::manual_inspect)] pub mod pallet { use super::*; diff --git a/pallets/public-credentials/src/migrations.rs b/pallets/public-credentials/src/migrations.rs index e2731dba38..f73c722601 100644 --- a/pallets/public-credentials/src/migrations.rs +++ b/pallets/public-credentials/src/migrations.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::traits::{fungible::Inspect, ReservableCurrency}; use kilt_support::migration::switch_reserved_to_hold; diff --git a/pallets/public-credentials/src/mock.rs b/pallets/public-credentials/src/mock.rs index 80d440bff9..e45df57f57 100644 --- a/pallets/public-credentials/src/mock.rs +++ b/pallets/public-credentials/src/mock.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{traits::Get, weights::Weight}; use frame_system::pallet_prelude::BlockNumberFor; @@ -303,6 +303,11 @@ pub(crate) mod runtime { type SS58Prefix = ConstU16<38>; type OnSetCode = (); type MaxConsumers = ConstU32<16>; + type MultiBlockMigrator = (); + type SingleBlockMigrations = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); } impl pallet_balances::Config for Test { diff --git a/pallets/public-credentials/src/tests/claim.rs b/pallets/public-credentials/src/tests/claim.rs index f3dfd3df48..4a361cea4a 100644 --- a/pallets/public-credentials/src/tests/claim.rs +++ b/pallets/public-credentials/src/tests/claim.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ assert_noop, assert_ok, diff --git a/pallets/public-credentials/src/tests/delete.rs b/pallets/public-credentials/src/tests/delete.rs index 3a1ee69e36..c0a3d55c83 100644 --- a/pallets/public-credentials/src/tests/delete.rs +++ b/pallets/public-credentials/src/tests/delete.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ assert_noop, assert_ok, diff --git a/pallets/public-credentials/src/tests/deposit.rs b/pallets/public-credentials/src/tests/deposit.rs index 01b26addf0..5c4450e454 100644 --- a/pallets/public-credentials/src/tests/deposit.rs +++ b/pallets/public-credentials/src/tests/deposit.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ assert_noop, assert_ok, diff --git a/pallets/public-credentials/src/tests/mod.rs b/pallets/public-credentials/src/tests/mod.rs index 6beb57bef5..96b94ff5a8 100644 --- a/pallets/public-credentials/src/tests/mod.rs +++ b/pallets/public-credentials/src/tests/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod claim; mod delete; diff --git a/pallets/public-credentials/src/tests/revoke.rs b/pallets/public-credentials/src/tests/revoke.rs index 7264be3156..9c0ed5475f 100644 --- a/pallets/public-credentials/src/tests/revoke.rs +++ b/pallets/public-credentials/src/tests/revoke.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_noop, assert_ok, traits::Get}; diff --git a/pallets/public-credentials/src/try_state.rs b/pallets/public-credentials/src/try_state.rs index 5f9de5cd76..0476213c66 100644 --- a/pallets/public-credentials/src/try_state.rs +++ b/pallets/public-credentials/src/try_state.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use crate::{Config, CredentialSubjects, Credentials}; use frame_support::ensure; diff --git a/runtime-api/asset-switch/src/lib.rs b/runtime-api/asset-switch/src/lib.rs index 30029e1424..f24e7051a5 100644 --- a/runtime-api/asset-switch/src/lib.rs +++ b/runtime-api/asset-switch/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at #![cfg_attr(not(feature = "std"), no_std)] diff --git a/runtime-api/bonded-coins/src/lib.rs b/runtime-api/bonded-coins/src/lib.rs index 27cbe9e69a..349b04b9eb 100644 --- a/runtime-api/bonded-coins/src/lib.rs +++ b/runtime-api/bonded-coins/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at #![cfg_attr(not(feature = "std"), no_std)] @@ -44,7 +44,7 @@ pub trait OperationValue { sp_api::decl_runtime_apis! { /// Runtime API to compute the collateral for a given amount and pool ID /// and to query all pool IDs where the given account is the manager or owner. - #[api_version(1)] + #[api_version(2)] pub trait BondedCurrency where Balance: Codec, PoolId: Codec, diff --git a/runtime-api/bonded-coins/src/pool_details.rs b/runtime-api/bonded-coins/src/pool_details.rs index 80cfc8ac60..a7b501eb9e 100644 --- a/runtime-api/bonded-coins/src/pool_details.rs +++ b/runtime-api/bonded-coins/src/pool_details.rs @@ -14,9 +14,9 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at -use pallet_bonded_coins::{curves::Curve, Locks, PoolStatus}; +use pallet_bonded_coins::{curves::Curve, BondedCurrenciesSettings, Locks, PoolStatus}; use parity_scale_codec::{alloc::string::String, Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; use sp_std::vec::Vec; @@ -35,10 +35,19 @@ pub type PoolDetailsOf = PoolDet CurrenciesOf, CollateralDetails, Balance, + Balance, >; #[derive(Default, Clone, Encode, Decode, PartialEq, Eq, TypeInfo, MaxEncodedLen, Debug)] -pub struct PoolDetails { +pub struct PoolDetails< + AccountId, + PoolId, + ParametrizedCurve, + Currencies, + BaseCurrencyId, + DepositBalance, + FungiblesBalance, +> { /// The ID of the pool. pub id: PoolId, /// The owner of the pool. @@ -53,12 +62,8 @@ pub struct PoolDetails, - /// Whether the pool is transferable or not. - pub transferable: bool, - /// The denomination of the pool. - pub denomination: u8, - /// The minimum amount that can be minted/burnt. - pub min_operation_balance: u128, + /// Shared settings of the currencies in the pool. + pub currencies_settings: BondedCurrenciesSettings, /// The deposit to be returned upon destruction of this pool. pub deposit: DepositBalance, } diff --git a/runtime-api/did/src/did_details.rs b/runtime-api/did/src/did_details.rs index 539d20edbc..2d7e1dcc29 100644 --- a/runtime-api/did/src/did_details.rs +++ b/runtime-api/did/src/did_details.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_system::pallet_prelude::BlockNumberFor; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; diff --git a/runtime-api/did/src/lib.rs b/runtime-api/did/src/lib.rs index c21f5906c2..b5097e0843 100644 --- a/runtime-api/did/src/lib.rs +++ b/runtime-api/did/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at #![cfg_attr(not(feature = "std"), no_std)] @@ -67,12 +67,12 @@ pub type RawDidLinkedInfo where + pub trait Did where DidIdentifier: Codec, AccountId: Codec, LinkableAccountId: Codec, - BlockNumber: Codec, - Key: Codec, + BlockNumber: Codec + MaxEncodedLen, + Key: Codec +Ord, Balance: Codec, LinkedResource: Codec, RuntimeCall: Codec, diff --git a/runtime-api/did/src/service_endpoint.rs b/runtime-api/did/src/service_endpoint.rs index 3693c30a87..f011ed745a 100644 --- a/runtime-api/did/src/service_endpoint.rs +++ b/runtime-api/did/src/service_endpoint.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use parity_scale_codec::{Decode, Encode}; use scale_info::TypeInfo; diff --git a/runtime-api/dip-provider/src/lib.rs b/runtime-api/dip-provider/src/lib.rs index 9ff48901b3..2173511491 100644 --- a/runtime-api/dip-provider/src/lib.rs +++ b/runtime-api/dip-provider/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at #![cfg_attr(not(feature = "std"), no_std)] diff --git a/runtime-api/public-credentials/src/lib.rs b/runtime-api/public-credentials/src/lib.rs index f9f193967b..3d9da88eee 100644 --- a/runtime-api/public-credentials/src/lib.rs +++ b/runtime-api/public-credentials/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at #![cfg_attr(not(feature = "std"), no_std)] diff --git a/runtime-api/staking/src/lib.rs b/runtime-api/staking/src/lib.rs index 55db4ecf8b..6c2976f17e 100644 --- a/runtime-api/staking/src/lib.rs +++ b/runtime-api/staking/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at #![cfg_attr(not(feature = "std"), no_std)] diff --git a/runtimes/common/Cargo.toml b/runtimes/common/Cargo.toml index 3e02afa07a..49437a8826 100644 --- a/runtimes/common/Cargo.toml +++ b/runtimes/common/Cargo.toml @@ -51,6 +51,7 @@ pallet-authorship = { workspace = true } pallet-balances = { workspace = true } pallet-membership = { workspace = true } pallet-multisig = { workspace = true } +pallet-session = { workspace = true } pallet-tips = { workspace = true } pallet-transaction-payment = { workspace = true } pallet-treasury = { workspace = true } @@ -58,6 +59,7 @@ sp-consensus-aura = { workspace = true } sp-core = { workspace = true } sp-io = { workspace = true } sp-runtime = { workspace = true } +sp-staking = { workspace = true } sp-std = { workspace = true } sp-trie = { workspace = true } sp-weights = { workspace = true } @@ -128,6 +130,7 @@ std = [ "pallet-membership/std", "pallet-multisig/std", "pallet-multisig/std", + "pallet-session/std", "pallet-tips/std", "pallet-transaction-payment/std", "pallet-treasury/std", @@ -164,6 +167,7 @@ try-runtime = [ "pallet-bonded-coins/try-runtime", "pallet-membership/try-runtime", "pallet-multisig/try-runtime", + "pallet-session/try-runtime", "pallet-transaction-payment/try-runtime", "pallet-treasury/try-runtime", "pallet-treasury/try-runtime", diff --git a/runtimes/common/src/asset_switch/hooks.rs b/runtimes/common/src/asset_switch/hooks.rs index 69a57ce6b4..012f2a2924 100644 --- a/runtimes/common/src/asset_switch/hooks.rs +++ b/runtimes/common/src/asset_switch/hooks.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::traits::fungible::Inspect; use pallet_asset_switch::traits::SwitchHooks; diff --git a/runtimes/common/src/asset_switch/mod.rs b/runtimes/common/src/asset_switch/mod.rs index a8cefbcf29..0145c0a36b 100644 --- a/runtimes/common/src/asset_switch/mod.rs +++ b/runtimes/common/src/asset_switch/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at pub mod hooks; pub mod runtime_api; diff --git a/runtimes/common/src/asset_switch/runtime_api.rs b/runtimes/common/src/asset_switch/runtime_api.rs index eb948b079c..b53ee04558 100644 --- a/runtimes/common/src/asset_switch/runtime_api.rs +++ b/runtimes/common/src/asset_switch/runtime_api.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use parity_scale_codec::{Decode, Encode}; use scale_info::TypeInfo; diff --git a/runtimes/common/src/assets.rs b/runtimes/common/src/assets.rs index 381400231e..18b255f01d 100644 --- a/runtimes/common/src/assets.rs +++ b/runtimes/common/src/assets.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; @@ -29,6 +29,7 @@ use public_credentials::CredentialEntry; use crate::{authorization::AuthorizationId, AccountId, Balance, BlockNumber, Hash}; #[cfg(feature = "runtime-benchmarks")] +#[allow(unused_imports)] pub use benchmarks::*; /// Thin wrapper around the `AssetDid` type, that implements the required diff --git a/runtimes/common/src/authorization.rs b/runtimes/common/src/authorization.rs index c5664a51f1..60ea6b3849 100644 --- a/runtimes/common/src/authorization.rs +++ b/runtimes/common/src/authorization.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; use sp_runtime::DispatchError; diff --git a/runtimes/common/src/benchmarks/mod.rs b/runtimes/common/src/benchmarks/mod.rs index 53fe702496..1fe24d3e3a 100644 --- a/runtimes/common/src/benchmarks/mod.rs +++ b/runtimes/common/src/benchmarks/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at pub mod treasury; pub mod xcm; diff --git a/runtimes/common/src/benchmarks/treasury.rs b/runtimes/common/src/benchmarks/treasury.rs index e25db06e1b..1c92c0afba 100644 --- a/runtimes/common/src/benchmarks/treasury.rs +++ b/runtimes/common/src/benchmarks/treasury.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::traits::fungible::Mutate; use pallet_treasury::ArgumentsFactory; diff --git a/runtimes/common/src/benchmarks/xcm.rs b/runtimes/common/src/benchmarks/xcm.rs index 3f2f300699..d55b166321 100644 --- a/runtimes/common/src/benchmarks/xcm.rs +++ b/runtimes/common/src/benchmarks/xcm.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use cumulus_primitives_core::ParaId; use frame_support::parameter_types; diff --git a/runtimes/common/src/bonded_coins/hooks.rs b/runtimes/common/src/bonded_coins/hooks.rs index f234f1ad79..93ad1a0d0b 100644 --- a/runtimes/common/src/bonded_coins/hooks.rs +++ b/runtimes/common/src/bonded_coins/hooks.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ pallet_prelude::{PalletInfoAccess, ValueQuery}, diff --git a/runtimes/common/src/bonded_coins/mod.rs b/runtimes/common/src/bonded_coins/mod.rs index 91d620c74a..ea1724d59d 100644 --- a/runtimes/common/src/bonded_coins/mod.rs +++ b/runtimes/common/src/bonded_coins/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at /// Wrapper struct for [UnionOf] to implement the [metadata::Inspect] trait, /// needed for the pallet_bonded_coins module. @@ -224,11 +224,17 @@ impl< asset: Self::AssetId, who: &AccountId, amount: Self::Balance, + preservation: Preservation, precision: Precision, force: Fortitude, ) -> Result { UnionOf::::burn_from( - asset, who, amount, precision, force, + asset, + who, + amount, + preservation, + precision, + force, ) } fn shelve(asset: Self::AssetId, who: &AccountId, amount: Self::Balance) -> Result { diff --git a/runtimes/common/src/bonded_coins/runtime_api.rs b/runtimes/common/src/bonded_coins/runtime_api.rs index 8b5b6c32e6..285c0c4b4a 100644 --- a/runtimes/common/src/bonded_coins/runtime_api.rs +++ b/runtimes/common/src/bonded_coins/runtime_api.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use parity_scale_codec::{Decode, Encode}; use scale_info::TypeInfo; diff --git a/runtimes/common/src/constants.rs b/runtimes/common/src/constants.rs index fb381ff96b..9bc7afa2f2 100644 --- a/runtimes/common/src/constants.rs +++ b/runtimes/common/src/constants.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ parameter_types, @@ -138,11 +138,11 @@ parameter_types! { pub UnvestedFundsAllowedWithdrawReasons: WithdrawReasons = WithdrawReasons::except(WithdrawReasons::TRANSFER | WithdrawReasons::RESERVE); /// Deposits per byte - pub const ByteDeposit: Balance = deposit(0, 1); + pub const ByteDeposit: Balance = 0; /// Index Pallet. Deposit taken for an account index - pub const IndicesDeposit: Balance = deposit(1, MAX_INDICES_BYTE_LENGTH); + pub const IndicesDeposit: Balance = 0; /// CType Pallet. Per byte fee for a ctype. - pub const CtypeFee: Balance = MILLI_KILT; + pub const CtypeFee: Balance = 0; } pub mod attestation { @@ -150,7 +150,7 @@ pub mod attestation { /// The size is checked in the runtime by a test. pub const MAX_ATTESTATION_BYTE_LENGTH: u32 = 179; - pub const ATTESTATION_DEPOSIT: Balance = deposit(2, MAX_ATTESTATION_BYTE_LENGTH); + pub const ATTESTATION_DEPOSIT: Balance = 0; parameter_types! { pub const MaxDelegatedAttestations: u32 = 1000; @@ -162,12 +162,9 @@ pub mod bonded_coins { use super::*; /// The size is checked in the runtime by a test. - pub const MAX_POOL_BYTE_LENGTH: u32 = 986; - pub const BASE_DEPOSIT: Balance = deposit(1, MAX_POOL_BYTE_LENGTH); - const ASSET_ID_BYTE_LENGTH: u32 = 8; - /// https://github.com/paritytech/polkadot-sdk/blob/master/substrate/frame/assets/src/types.rs#L188 - const ASSET_METADATA_BYTE_LENGTH: u32 = 26; - pub const DEPOSIT_PER_CURRENCY: Balance = deposit(1, ASSET_ID_BYTE_LENGTH + (2 * ASSET_METADATA_BYTE_LENGTH)); + pub const MAX_POOL_BYTE_LENGTH: u32 = 987; + pub const BASE_DEPOSIT: Balance = 0; + pub const DEPOSIT_PER_CURRENCY: Balance = 0; pub const MAX_CURRENCIES: u32 = 50; pub const MAX_DENOMINATION: u8 = 15; pub const MAX_STRING_LENGTH: u32 = crate::constants::bonded_assets::STRING_LIMIT; @@ -210,7 +207,7 @@ pub mod delegation { use super::*; - pub const DELEGATION_DEPOSIT: Balance = KILT; + pub const DELEGATION_DEPOSIT: Balance = 0; pub const MAX_SIGNATURE_BYTE_LENGTH: u16 = 64; pub const MAX_PARENT_CHECKS: u32 = 5; pub const MAX_REVOCATIONS: u32 = 5; @@ -224,7 +221,7 @@ pub mod delegation { pub const MaxRemovals: u32 = MAX_REMOVALS; #[derive(Clone, TypeInfo)] pub const MaxChildren: u32 = MAX_CHILDREN; - pub const DelegationDeposit: Balance = DELEGATION_DEPOSIT; + pub const DelegationDeposit: Balance = 0; } } @@ -241,7 +238,7 @@ pub mod dip_provider { pub const MAX_LINKED_ACCOUNTS: u32 = 10; // Commitment are 32-byte hashes. pub const MAX_COMMITMENT_BYTE_LENGTH: u32 = 32; - pub const COMMITMENT_DEPOSIT: Balance = deposit(1, MAX_COMMITMENT_BYTE_LENGTH); + pub const COMMITMENT_DEPOSIT: Balance = 0; } pub mod staking { @@ -278,6 +275,8 @@ pub mod staking { pub const NETWORK_REWARD_RATE: Perquintill = Perquintill::from_percent(10); + pub const MAX_COLLATORS: u32 = 32; + parameter_types! { /// Minimum round length is 1 hour pub const MinBlocksPerRound: BlockNumber = MIN_BLOCKS_PER_ROUND; @@ -309,6 +308,8 @@ pub mod staking { pub const NetworkRewardStart: BlockNumber = super::treasury::INITIAL_PERIOD_LENGTH; /// The rate in percent for the network rewards pub const NetworkRewardRate: Perquintill = NETWORK_REWARD_RATE; + /// The maximum number of collators + pub const MaxCollators: u32 = MAX_COLLATORS; } } @@ -400,8 +401,8 @@ pub mod multisig { parameter_types! { pub const MaxSignitors: u32 = 64; - pub const DepositBase: Balance = DEPOSIT_STORAGE_ITEM; - pub const DepositFactor: Balance = DEPOSIT_STORAGE_BYTE; + pub const DepositBase: Balance = 0; + pub const DepositFactor: Balance = 0; } } @@ -437,11 +438,11 @@ pub mod did { + MAX_NUMBER_OF_URLS_PER_SERVICE * MAX_SERVICE_URL_LENGTH + 8; - pub const DID_BASE_DEPOSIT: Balance = 2 * KILT; - pub const KEY_DEPOSIT: Balance = deposit(0, MAX_KEY_LENGTH); - pub const SERVICE_ENDPOINT_DEPOSIT: Balance = deposit(1, MAX_SERVICE_ENDPOINT_BYTE_LENGTH); + pub const DID_BASE_DEPOSIT: Balance = 0; + pub const KEY_DEPOSIT: Balance = 0; + pub const SERVICE_ENDPOINT_DEPOSIT: Balance = 0; - pub const DID_FEE: Balance = 50 * MILLI_KILT; + pub const DID_FEE: Balance = 0; pub const MAX_KEY_AGREEMENT_KEYS: u32 = 10; // This has been reduced from the previous 100, but it might still need // fine-tuning depending on our needs. @@ -484,7 +485,7 @@ pub mod did_lookup { /// The size is checked in the runtime by a test. pub const MAX_CONNECTION_BYTE_LENGTH: u32 = 80; - pub const DID_CONNECTION_DEPOSIT: Balance = deposit(1, MAX_CONNECTION_BYTE_LENGTH); + pub const DID_CONNECTION_DEPOSIT: Balance = 0; parameter_types! { pub const DidLookupDeposit: Balance = DID_CONNECTION_DEPOSIT; @@ -512,12 +513,12 @@ pub mod proxy { parameter_types! { // One storage item; key size 32, value size 8; . - pub const ProxyDepositBase: Balance = deposit(1, 8); + pub const ProxyDepositBase: Balance = 0; // Additional storage item size of 33 bytes. - pub const ProxyDepositFactor: Balance = deposit(0, 33); + pub const ProxyDepositFactor: Balance = 0; pub const MaxProxies: u16 = 10; - pub const AnnouncementDepositBase: Balance = deposit(1, 8); - pub const AnnouncementDepositFactor: Balance = deposit(0, 66); + pub const AnnouncementDepositBase: Balance = 0; + pub const AnnouncementDepositFactor: Balance = 0; pub const MaxPending: u16 = 10; } } @@ -530,30 +531,7 @@ pub mod web3_names { /// The size is checked in the runtime by a test. pub const MAX_NAME_BYTE_LENGTH: u32 = 121; - pub const DEPOSIT: Balance = deposit(2, MAX_NAME_BYTE_LENGTH); - - parameter_types! { - pub const Web3NameDeposit: Balance = DEPOSIT; - pub const MinNameLength: u32 = MIN_LENGTH; - pub const MaxNameLength: u32 = MAX_LENGTH; - } -} - -pub mod dot_names { - use super::*; - - const MIN_NAME_LENGTH: u32 = 3; - const MAX_NAME_LENGTH: u32 = 28; - - pub const DOT_NAME_SUFFIX: &str = ".dot"; - #[allow(clippy::as_conversions)] - pub const MIN_LENGTH: u32 = MIN_NAME_LENGTH + DOT_NAME_SUFFIX.len() as u32; - #[allow(clippy::as_conversions)] - pub const MAX_LENGTH: u32 = MAX_NAME_LENGTH + DOT_NAME_SUFFIX.len() as u32; - - /// The size is checked in the runtime by a test. - pub const MAX_NAME_BYTE_LENGTH: u32 = 121; - pub const DEPOSIT: Balance = deposit(2, MAX_NAME_BYTE_LENGTH); + pub const DEPOSIT: Balance = 0; parameter_types! { pub const Web3NameDeposit: Balance = DEPOSIT; @@ -565,7 +543,7 @@ pub mod dot_names { pub mod preimage { use super::*; parameter_types! { - pub const PreimageBaseDeposit: Balance = deposit(2, 64); + pub const PreimageBaseDeposit: Balance = 0; } } @@ -579,7 +557,7 @@ pub mod tips { pub const MaximumReasonLength: u32 = MAXIMUM_REASON_LENGTH; pub const TipCountdown: BlockNumber = DAYS; pub const TipFindersFee: Percent = Percent::from_percent(0); - pub const TipReportDepositBase: Balance = deposit(1, 1); + pub const TipReportDepositBase: Balance = 1; pub const MaxTipAmount: Balance = 100_000 * KILT; } } @@ -604,7 +582,7 @@ pub mod public_credentials { /// The size is checked in the runtime by a test. pub const MAX_PUBLIC_CREDENTIAL_STORAGE_LENGTH: u32 = 419; // Each credential would have a different deposit, so no multiplier here - pub const PUBLIC_CREDENTIAL_DEPOSIT: Balance = deposit(1, MAX_PUBLIC_CREDENTIAL_STORAGE_LENGTH); + pub const PUBLIC_CREDENTIAL_DEPOSIT: Balance = 0; parameter_types! { pub const Deposit: Balance = PUBLIC_CREDENTIAL_DEPOSIT; @@ -613,6 +591,11 @@ pub mod public_credentials { } } +pub mod pallet_xcmp_queue { + pub const MAX_PAGE_SIZE: u32 = 128 * 1024; + pub const MAX_ACTIVE_OUTBOUND_CHANNELS: u32 = 128; +} + #[cfg(test)] mod tests { use super::*; diff --git a/runtimes/common/src/deposits.rs b/runtimes/common/src/deposits.rs index 26586cd9e9..ec0987873e 100644 --- a/runtimes/common/src/deposits.rs +++ b/runtimes/common/src/deposits.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at // The `RuntimeDebug` macro uses these internally. #![allow(clippy::ref_patterns)] diff --git a/runtimes/common/src/did/mod.rs b/runtimes/common/src/did/mod.rs index 3a6b5225e9..ec3e3372c8 100644 --- a/runtimes/common/src/did/mod.rs +++ b/runtimes/common/src/did/mod.rs @@ -14,6 +14,6 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at pub mod runtime_apis; diff --git a/runtimes/common/src/did/runtime_apis.rs b/runtimes/common/src/did/runtime_apis.rs index 7bdd01facd..fee81af026 100644 --- a/runtimes/common/src/did/runtime_apis.rs +++ b/runtimes/common/src/did/runtime_apis.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use pallet_did_lookup::linkable_account::LinkableAccountId; use parity_scale_codec::{Decode, Encode}; diff --git a/runtimes/common/src/dip/deposit/mock.rs b/runtimes/common/src/dip/deposit/mock.rs index 3e5bd0f0ca..73f9f3f94c 100644 --- a/runtimes/common/src/dip/deposit/mock.rs +++ b/runtimes/common/src/dip/deposit/mock.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{construct_runtime, traits::Everything}; use frame_system::{mocking::MockBlock, EnsureSigned, RawOrigin}; @@ -65,6 +65,11 @@ impl frame_system::Config for TestRuntime { type SS58Prefix = (); type SystemWeightInfo = (); type Version = (); + type MultiBlockMigrator = (); + type SingleBlockMigrations = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); } impl pallet_balances::Config for TestRuntime { diff --git a/runtimes/common/src/dip/deposit/mod.rs b/runtimes/common/src/dip/deposit/mod.rs index 47fa0e9abf..c4d7e4cd2a 100644 --- a/runtimes/common/src/dip/deposit/mod.rs +++ b/runtimes/common/src/dip/deposit/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::traits::Get; use pallet_deposit_storage::{ diff --git a/runtimes/common/src/dip/deposit/tests/mod.rs b/runtimes/common/src/dip/deposit/tests/mod.rs index 6cd7f3ea35..aa2da3a596 100644 --- a/runtimes/common/src/dip/deposit/tests/mod.rs +++ b/runtimes/common/src/dip/deposit/tests/mod.rs @@ -14,6 +14,6 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod on_deposit_reclaimed; diff --git a/runtimes/common/src/dip/deposit/tests/on_deposit_reclaimed.rs b/runtimes/common/src/dip/deposit/tests/on_deposit_reclaimed.rs index 1931091837..9d30712add 100644 --- a/runtimes/common/src/dip/deposit/tests/on_deposit_reclaimed.rs +++ b/runtimes/common/src/dip/deposit/tests/on_deposit_reclaimed.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_noop, assert_ok}; use kilt_support::Deposit; diff --git a/runtimes/common/src/dip/did/mod.rs b/runtimes/common/src/dip/did/mod.rs index d592cff867..7f841cf491 100644 --- a/runtimes/common/src/dip/did/mod.rs +++ b/runtimes/common/src/dip/did/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use did::did_details::DidDetails; use frame_support::ensure; diff --git a/runtimes/common/src/dip/did/tests/mod.rs b/runtimes/common/src/dip/did/tests/mod.rs index 4982e4b14c..bf27eef5e4 100644 --- a/runtimes/common/src/dip/did/tests/mod.rs +++ b/runtimes/common/src/dip/did/tests/mod.rs @@ -14,6 +14,6 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod retrieve; diff --git a/runtimes/common/src/dip/did/tests/retrieve.rs b/runtimes/common/src/dip/did/tests/retrieve.rs index b294aede11..e690f7279a 100644 --- a/runtimes/common/src/dip/did/tests/retrieve.rs +++ b/runtimes/common/src/dip/did/tests/retrieve.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use did::did_details::DidVerificationKey; use frame_support::assert_noop; diff --git a/runtimes/common/src/dip/merkle/mod.rs b/runtimes/common/src/dip/merkle/mod.rs index a656e75848..068b6a512f 100644 --- a/runtimes/common/src/dip/merkle/mod.rs +++ b/runtimes/common/src/dip/merkle/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use did::KeyIdOf; use frame_system::pallet_prelude::BlockNumberFor; diff --git a/runtimes/common/src/dip/merkle/tests/generate_commitment.rs b/runtimes/common/src/dip/merkle/tests/generate_commitment.rs index a4bf213f77..5f911e8858 100644 --- a/runtimes/common/src/dip/merkle/tests/generate_commitment.rs +++ b/runtimes/common/src/dip/merkle/tests/generate_commitment.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use did::did_details::DidVerificationKey; use frame_support::assert_err; diff --git a/runtimes/common/src/dip/merkle/tests/generate_proof.rs b/runtimes/common/src/dip/merkle/tests/generate_proof.rs index ff8c4f2ca1..58282db43a 100644 --- a/runtimes/common/src/dip/merkle/tests/generate_proof.rs +++ b/runtimes/common/src/dip/merkle/tests/generate_proof.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use did::did_details::DidVerificationKey; use frame_support::assert_err; diff --git a/runtimes/common/src/dip/merkle/tests/mod.rs b/runtimes/common/src/dip/merkle/tests/mod.rs index f0e072d82b..2b5c482398 100644 --- a/runtimes/common/src/dip/merkle/tests/mod.rs +++ b/runtimes/common/src/dip/merkle/tests/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod generate_commitment; mod generate_proof; diff --git a/runtimes/common/src/dip/merkle/v0/mod.rs b/runtimes/common/src/dip/merkle/v0/mod.rs index df4d61ae16..bc18fb8c00 100644 --- a/runtimes/common/src/dip/merkle/v0/mod.rs +++ b/runtimes/common/src/dip/merkle/v0/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use did::{did_details::DidDetails, DidVerificationKeyRelationship, KeyIdOf}; use frame_system::pallet_prelude::BlockNumberFor; diff --git a/runtimes/common/src/dip/merkle/v0/tests/generate_proof.rs b/runtimes/common/src/dip/merkle/v0/tests/generate_proof.rs index e6c14dd01b..7076e374b1 100644 --- a/runtimes/common/src/dip/merkle/v0/tests/generate_proof.rs +++ b/runtimes/common/src/dip/merkle/v0/tests/generate_proof.rs @@ -75,11 +75,8 @@ fn generate_proof_for_complete_linked_info() { linked_info.linked_accounts.iter(), ) .unwrap(); - let cross_chain_proof = DipDidProofWithVerifiedSubjectCommitment::new( - root, - proof, - TimeBoundDidSignature::new(signature.clone().into(), 100), - ); + let cross_chain_proof = + DipDidProofWithVerifiedSubjectCommitment::new(root, proof, TimeBoundDidSignature::new(signature.into(), 100)); let dip_origin_info = cross_chain_proof .verify_dip_proof::() @@ -161,11 +158,8 @@ fn generate_proof_for_complete_linked_info() { // 2. Generate a proof without any parts revealed. let CompleteMerkleProof { proof, root } = generate_proof(&linked_info, empty(), false, empty()).unwrap(); - let cross_chain_proof = DipDidProofWithVerifiedSubjectCommitment::new( - root, - proof, - TimeBoundDidSignature::new(signature.clone().into(), 100), - ); + let cross_chain_proof = + DipDidProofWithVerifiedSubjectCommitment::new(root, proof, TimeBoundDidSignature::new(signature.into(), 100)); // Should verify the merkle proof successfully. assert_ok!(cross_chain_proof.verify_dip_proof::()); @@ -177,11 +171,8 @@ fn generate_proof_for_complete_linked_info() { empty(), ) .unwrap(); - let cross_chain_proof = DipDidProofWithVerifiedSubjectCommitment::new( - root, - proof, - TimeBoundDidSignature::new(signature.clone().into(), 100), - ); + let cross_chain_proof = + DipDidProofWithVerifiedSubjectCommitment::new(root, proof, TimeBoundDidSignature::new(signature.into(), 100)); let dip_origin_info = cross_chain_proof .verify_dip_proof::() @@ -216,22 +207,16 @@ fn generate_proof_for_complete_linked_info() { // 4. Generate a proof with only the web3name revealed. let CompleteMerkleProof { proof, root } = generate_proof(&linked_info, empty(), true, empty()).unwrap(); - let cross_chain_proof = DipDidProofWithVerifiedSubjectCommitment::new( - root, - proof, - TimeBoundDidSignature::new(signature.clone().into(), 100), - ); + let cross_chain_proof = + DipDidProofWithVerifiedSubjectCommitment::new(root, proof, TimeBoundDidSignature::new(signature.into(), 100)); // Should verify the merkle proof successfully. assert_ok!(cross_chain_proof.verify_dip_proof::()); // 5. Generate a proof with only one linked account revealed. let CompleteMerkleProof { proof, root } = generate_proof(&linked_info, empty(), true, once(&linked_info.linked_accounts[0])).unwrap(); - let cross_chain_proof = DipDidProofWithVerifiedSubjectCommitment::new( - root, - proof, - TimeBoundDidSignature::new(signature.clone().into(), 100), - ); + let cross_chain_proof = + DipDidProofWithVerifiedSubjectCommitment::new(root, proof, TimeBoundDidSignature::new(signature.into(), 100)); // Should verify the merkle proof successfully. assert_ok!(cross_chain_proof.verify_dip_proof::()); @@ -244,11 +229,8 @@ fn generate_proof_for_complete_linked_info() { empty(), ) .unwrap(); - let cross_chain_proof = DipDidProofWithVerifiedSubjectCommitment::new( - root, - proof, - TimeBoundDidSignature::new(signature.clone().into(), 100), - ); + let cross_chain_proof = + DipDidProofWithVerifiedSubjectCommitment::new(root, proof, TimeBoundDidSignature::new(signature.into(), 100)); let dip_origin_info = cross_chain_proof .verify_dip_proof::() .and_then(|r| r.verify_signature_time(&50)) diff --git a/runtimes/common/src/dip/merkle/v0/tests/mod.rs b/runtimes/common/src/dip/merkle/v0/tests/mod.rs index f0e072d82b..2b5c482398 100644 --- a/runtimes/common/src/dip/merkle/v0/tests/mod.rs +++ b/runtimes/common/src/dip/merkle/v0/tests/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at mod generate_commitment; mod generate_proof; diff --git a/runtimes/common/src/dip/mock.rs b/runtimes/common/src/dip/mock.rs index f87ac568a9..c006abcf39 100644 --- a/runtimes/common/src/dip/mock.rs +++ b/runtimes/common/src/dip/mock.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use did::{ did_details::{DidDetails, DidEncryptionKey, DidVerificationKey}, @@ -87,6 +87,11 @@ impl frame_system::Config for TestRuntime { type SS58Prefix = ConstU16<1>; type SystemWeightInfo = (); type Version = (); + type MultiBlockMigrator = (); + type SingleBlockMigrations = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); } impl pallet_balances::Config for TestRuntime { @@ -201,7 +206,7 @@ pub(crate) fn create_linked_info( ) -> LinkedDidInfoOf { let did_details = { let mut details = generate_base_did_details(auth_key.clone(), Some(SUBMITTER)); - let att_key = DidVerificationKey::Sr25519(sr25519::Public(auth_key.blake2_256())); + let att_key = DidVerificationKey::Sr25519(sr25519::Public::from_raw(auth_key.blake2_256())); let del_key = DidVerificationKey::Account(SUBMITTER); details .update_attestation_key(att_key, BlockNumberFor::::default()) diff --git a/runtimes/common/src/dip/mod.rs b/runtimes/common/src/dip/mod.rs index 183b0565c8..9ce5665a9e 100644 --- a/runtimes/common/src/dip/mod.rs +++ b/runtimes/common/src/dip/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at #![doc = include_str!("./README.md")] diff --git a/runtimes/common/src/errors.rs b/runtimes/common/src/errors.rs index bea32c22bb..e3e0032851 100644 --- a/runtimes/common/src/errors.rs +++ b/runtimes/common/src/errors.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use parity_scale_codec::{Decode, Encode}; use scale_info::TypeInfo; diff --git a/runtimes/common/src/fees.rs b/runtimes/common/src/fees.rs index bd31af252a..dd9d5dc779 100644 --- a/runtimes/common/src/fees.rs +++ b/runtimes/common/src/fees.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ dispatch::DispatchClass, @@ -47,7 +47,7 @@ where Beneficiary2: OnUnbalanced>, Ratio: Get<(u32, u32)>, { - fn on_unbalanceds(mut fees_then_tips: impl Iterator>) { + fn on_unbalanceds(mut fees_then_tips: impl Iterator>) { let ratio = Ratio::get(); if let Some(fees) = fees_then_tips.next() { let mut split = fees.ration(ratio.0, ratio.1); @@ -220,6 +220,11 @@ mod tests { type SS58Prefix = (); type OnSetCode = (); type MaxConsumers = frame_support::traits::ConstU32<16>; + type MultiBlockMigrator = (); + type SingleBlockMigrations = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); } impl pallet_balances::Config for Test { diff --git a/runtimes/common/src/lib.rs b/runtimes/common/src/lib.rs index c9ad0bbe68..db5e15818e 100644 --- a/runtimes/common/src/lib.rs +++ b/runtimes/common/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at #![cfg_attr(not(feature = "std"), no_std)] @@ -35,8 +35,9 @@ use frame_support::{ use frame_system::limits; use pallet_balances::Pallet as PalletBalance; use pallet_transaction_payment::{Multiplier, TargetedFeeAdjustment}; +use sp_core::{crypto::Pair, Public}; use sp_runtime::{ - generic, + format, generic, traits::{BlakeTwo256, Bounded, IdentifyAccount, Verify}, FixedPointNumber, MultiAddress, MultiSignature, Perquintill, SaturatedConversion, }; @@ -53,8 +54,8 @@ pub mod did; pub mod dip; pub mod errors; pub mod fees; -pub mod migrations; pub mod pallet_id; +pub mod session; pub mod web3_names; pub mod xcm_config; pub use web3_names::Web3Name; @@ -239,3 +240,20 @@ where debug_assert!(result.is_ok(), "The whole credit cannot be countered"); } } + +/// Generates an account ID from a given seed. This function is primarily +/// intended for use in genesis state generation and should not be used at +/// runtime, as it may panic if the seed is invalid. +pub fn get_account_id_from_secret(seed: &str) -> AccountId +where + AccountPublic: From<::Public>, +{ + AccountPublic::from(get_public_key_from_secret::(seed)).into_account() +} + +pub fn get_public_key_from_secret(seed: &str) -> ::Public { + #[allow(clippy::expect_used)] + TPublic::Pair::from_string(&format!("//{}", seed), None) + .expect("static values are valid; qed") + .public() +} diff --git a/runtimes/common/src/migrations.rs b/runtimes/common/src/migrations.rs deleted file mode 100644 index 9a8779a259..0000000000 --- a/runtimes/common/src/migrations.rs +++ /dev/null @@ -1,88 +0,0 @@ -// KILT Blockchain – -// Copyright (C) 2025, KILT Foundation - -// The KILT Blockchain 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. - -// The KILT Blockchain 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 this program. If not, see . - -// If you feel like getting in touch with us, you can do so at - -use frame_support::{ - traits::{GetStorageVersion, OnRuntimeUpgrade, PalletInfoAccess, StorageVersion}, - weights::Weight, -}; -use sp_core::Get; -use sp_std::{fmt::Debug, marker::PhantomData}; -use sp_weights::RuntimeDbWeight; - -const LOG_TARGET: &str = "migration::BumpStorageVersion"; - -/// There are some pallets without a storage version. -/// Based on the changes in the PR , -/// pallets without a storage version or with a wrong version throw an error -/// in the try state tests. -pub struct BumpStorageVersion(PhantomData<(T, W)>) -where - T: GetStorageVersion + PalletInfoAccess, - T::CurrentStorageVersion: Debug + Into, - StorageVersion: PartialOrd, - W: Get; - -impl OnRuntimeUpgrade for BumpStorageVersion -where - T: GetStorageVersion + PalletInfoAccess, - T::CurrentStorageVersion: Debug + Into, - StorageVersion: PartialOrd, - W: Get, -{ - #[cfg(feature = "try-runtime")] - fn pre_upgrade() -> Result, sp_runtime::TryRuntimeError> { - let (on_chain_version, current_version) = (T::on_chain_storage_version(), T::current_storage_version()); - let pallet_name = T::name(); - if on_chain_version < current_version { - log::trace!(target: LOG_TARGET, "Pallet {:?} to be migrated from version {:?} to version {:?}.", pallet_name, on_chain_version, current_version); - } else { - log::trace!(target: LOG_TARGET, "Pallet {:?} already on latest version {:?}. No migration will run.", pallet_name, current_version); - } - Ok([].into()) - } - - fn on_runtime_upgrade() -> Weight { - log::info!(target: LOG_TARGET, "Initiating migration."); - - let (on_chain_version, current_version) = (T::on_chain_storage_version(), T::current_storage_version()); - let pallet_name = T::name(); - - if on_chain_version < current_version { - log::trace!(target: LOG_TARGET, "Pallet {:?} to be migrated from version {:?} to version {:?}.", pallet_name, on_chain_version, current_version); - current_version.into().put::(); - W::get().reads_writes(1, 1) - } else { - log::trace!(target: LOG_TARGET, "Pallet {:?} already on latest version {:?}. No migration will run.", pallet_name, current_version); - W::get().reads(1) - } - } - - #[cfg(feature = "try-runtime")] - fn post_upgrade(_state: sp_std::vec::Vec) -> Result<(), sp_runtime::TryRuntimeError> { - let (on_chain_version, current_version) = (T::on_chain_storage_version(), T::current_storage_version()); - - if on_chain_version < current_version { - log::error!(target: LOG_TARGET, "Storage version for pallet {:?} was not updated to the latest version {:?}.", T::name(), current_version); - Err(sp_runtime::TryRuntimeError::Other( - "Pallet storage version was not updated to the latest version.", - )) - } else { - Ok(()) - } - } -} diff --git a/runtimes/common/src/pallet_id.rs b/runtimes/common/src/pallet_id.rs index 7d3dbb8cce..9a904f1b6d 100644 --- a/runtimes/common/src/pallet_id.rs +++ b/runtimes/common/src/pallet_id.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Unique identifiers for pallets. diff --git a/runtimes/common/src/session.rs b/runtimes/common/src/session.rs new file mode 100644 index 0000000000..27154aa1b2 --- /dev/null +++ b/runtimes/common/src/session.rs @@ -0,0 +1,86 @@ +// KILT Blockchain – +// Copyright (C) 2025, KILT Foundation + +// The KILT Blockchain 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. + +// The KILT Blockchain 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 this program. If not, see . + +// If you feel like getting in touch with us, you can do so at + +pub use frame_support::weights::constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight}; +use frame_system::Pallet as SystemPallet; +use pallet_membership::{Config as MembershipConfig, Pallet as MembershipPallet}; +use pallet_session::SessionManager as SessionManagerTrait; +pub use sp_consensus_aura::sr25519::AuthorityId; +use sp_core::Get; +use sp_runtime::SaturatedConversion; +use sp_staking::SessionIndex; +use sp_std::{marker::PhantomData, vec::Vec}; + +use crate::constants::staking::DefaultBlocksPerRound; + +type AccountIdOf = ::AccountId; + +/// The session manager for the collator set. +pub struct SessionManager(PhantomData, PhantomData); + +impl SessionManagerTrait> for SessionManager +where + Runtime: MembershipConfig + pallet_session::Config, + ::ValidatorId: From>, +{ + fn new_session(new_index: SessionIndex) -> Option>> { + let collators = MembershipPallet::::members().to_vec(); + + log::debug!( + "assembling new collators for new session {} at #{:?} with {:?}", + new_index, + SystemPallet::::block_number(), + collators + ); + + let has_collator_keys = collators.iter().any(|collator| { + pallet_session::NextKeys::::contains_key(::ValidatorId::from( + collator.clone(), + )) + }); + + SystemPallet::::register_extra_weight_unchecked( + ::DbWeight::get() + .reads(1u64.saturating_add(collators.len().saturated_into::())), + frame_support::pallet_prelude::DispatchClass::Mandatory, + ); + + if !has_collator_keys { + log::error!("💥 keeping old session because of missing collator keys!"); + return None; + } + + if collators.is_empty() { + // we never want to pass an empty set of collators. This would brick the chain. + log::error!("💥 keeping old session because of empty collator set!"); + return None; + } + + Some(collators) + } + + fn start_session(_start_index: SessionIndex) { + // We don't care + } + + fn end_session(_end_index: SessionIndex) { + // We don't care + } +} + +pub type FixedLengthSession = pallet_session::PeriodicSessions; diff --git a/runtimes/common/src/web3_names/mod.rs b/runtimes/common/src/web3_names/mod.rs index 57507aa509..d262782bd8 100644 --- a/runtimes/common/src/web3_names/mod.rs +++ b/runtimes/common/src/web3_names/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::ensure; use pallet_web3_names::{Config, Error}; diff --git a/runtimes/common/src/web3_names/tests.rs b/runtimes/common/src/web3_names/tests.rs index fde19c5080..e06e735f8f 100644 --- a/runtimes/common/src/web3_names/tests.rs +++ b/runtimes/common/src/web3_names/tests.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{assert_err, assert_ok}; use sp_runtime::SaturatedConversion; diff --git a/runtimes/common/src/xcm_config.rs b/runtimes/common/src/xcm_config.rs index f8ce8989ce..e38db5b428 100644 --- a/runtimes/common/src/xcm_config.rs +++ b/runtimes/common/src/xcm_config.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use core::{marker::PhantomData, ops::ControlFlow}; use cumulus_primitives_core::AggregateMessageOrigin; diff --git a/runtimes/kestrel/build.rs b/runtimes/kestrel/build.rs index 28724338ae..8c64668fcc 100644 --- a/runtimes/kestrel/build.rs +++ b/runtimes/kestrel/build.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use substrate_wasm_builder::WasmBuilder; diff --git a/runtimes/kestrel/src/lib.rs b/runtimes/kestrel/src/lib.rs index 10febeaa16..5e0a8709e0 100644 --- a/runtimes/kestrel/src/lib.rs +++ b/runtimes/kestrel/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! The KILT runtime. This can be compiled with `#[no_std]`, ready for Wasm. #![cfg_attr(not(feature = "std"), no_std)] @@ -31,7 +31,7 @@ include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); use frame_support::{ construct_runtime, - genesis_builder_helper::{build_config, create_default_config}, + genesis_builder_helper::{build_state, get_preset}, parameter_types, traits::{Everything, InstanceFilter}, weights::{constants::RocksDbWeight, ConstantMultiplier, IdentityFee, Weight}, @@ -50,6 +50,7 @@ use scale_info::TypeInfo; use sp_api::impl_runtime_apis; use sp_consensus_aura::{ed25519::AuthorityId as AuraId, SlotDuration}; use sp_core::{ConstBool, ConstU32, ConstU64, OpaqueMetadata}; +use sp_genesis_builder::PresetId; use sp_runtime::{ create_runtime_str, generic, impl_opaque_keys, traits::{AccountIdLookup, BlakeTwo256, Block as BlockT, NumberFor, OpaqueKeys}, @@ -199,6 +200,11 @@ impl frame_system::Config for Runtime { /// The set code logic, just the default since we're not a parachain. type OnSetCode = (); type MaxConsumers = ConstU32<16>; + type MultiBlockMigrator = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); + type SingleBlockMigrations = (); } /// Maximum number of nominators per validator. @@ -214,6 +220,7 @@ impl pallet_aura::Config for Runtime { type DisabledValidators = (); type MaxAuthorities = MaxAuthorities; type AllowMultipleBlocksPerSlot = ConstBool; + type SlotDuration = ConstU64<6000>; } impl pallet_grandpa::Config for Runtime { @@ -736,7 +743,7 @@ impl did::DeriveDidCallAuthorizationVerificationKeyRelationship for RuntimeCall fn derive_verification_key_relationship(&self) -> did::DeriveDidCallKeyRelationshipResult { fn single_key_relationship(calls: &[RuntimeCall]) -> did::DeriveDidCallKeyRelationshipResult { let init = calls - .get(0) + .first() .ok_or(did::RelationshipDeriveError::InvalidCallParameter)? .derive_verification_key_relationship()?; calls @@ -848,7 +855,7 @@ impl_runtime_apis! { Executive::execute_block(block); } - fn initialize_block(header: &::Header) { + fn initialize_block(header: &::Header) -> sp_runtime::ExtrinsicInclusionMode { Executive::initialize_block(header) } } @@ -970,7 +977,7 @@ impl_runtime_apis! { } fn authorities() -> Vec { - Aura::authorities().into_inner() + pallet_aura::Authorities::::get().into_inner() } } @@ -1224,13 +1231,16 @@ impl_runtime_apis! { } impl sp_genesis_builder::GenesisBuilder for Runtime { + fn build_state(config: Vec) -> sp_genesis_builder::Result { + build_state::(config) + } - fn create_default_config() -> Vec { - create_default_config::() + fn get_preset(id: &Option) -> Option> { + get_preset::(id, |_| None) } - fn build_config(config: Vec) -> sp_genesis_builder::Result { - build_config::(config) + fn preset_names() -> Vec { + Default::default() } } diff --git a/runtimes/peregrine/Cargo.toml b/runtimes/peregrine/Cargo.toml index 63836a6bf1..95ad7135aa 100644 --- a/runtimes/peregrine/Cargo.toml +++ b/runtimes/peregrine/Cargo.toml @@ -19,10 +19,12 @@ sp-io = { workspace = true } [dependencies] # External dependencies +anyhow = { workspace = true } cfg-if = { workspace = true } log = { workspace = true } parity-scale-codec = { workspace = true, features = ["derive"] } scale-info = { workspace = true, features = ["derive"] } +serde_json = { workspace = true } hex-literal = { workspace = true, optional = true } @@ -47,7 +49,6 @@ pallet-bonded-coins = { workspace = true } pallet-deposit-storage = { workspace = true } pallet-did-lookup = { workspace = true } pallet-dip-provider = { workspace = true } -pallet-inflation = { workspace = true } pallet-migration = { workspace = true } pallet-web3-names = { workspace = true } parachain-staking = { workspace = true } @@ -64,6 +65,7 @@ sp-metadata-ir = { workspace = true } sp-offchain = { workspace = true } sp-runtime = { workspace = true } sp-session = { workspace = true } +sp-staking = { workspace = true } sp-std = { workspace = true } sp-transaction-pool = { workspace = true } sp-version = { workspace = true } @@ -98,7 +100,7 @@ sp-genesis-builder = { workspace = true } # Cumulus dependencies cumulus-pallet-aura-ext = { workspace = true } -cumulus-pallet-parachain-system = { workspace = true, features = ["parameterized-consensus-hook"] } +cumulus-pallet-parachain-system = { workspace = true } cumulus-pallet-xcm = { workspace = true } cumulus-pallet-xcmp-queue = { workspace = true } cumulus-primitives-aura = { workspace = true } @@ -123,6 +125,15 @@ frame-system-benchmarking = { workspace = true, optional = true } # Runtime tests frame-try-runtime = { workspace = true, optional = true } +# ISMP +ismp = { workspace = true } +ismp-parachain = { workspace = true } +ismp-parachain-runtime-api = { workspace = true } +pallet-hyperbridge = { workspace = true } +pallet-ismp = { workspace = true, features = ["unsigned"] } +pallet-ismp-runtime-api = { workspace = true } +pallet-token-gateway = { workspace = true } + [features] default = ["std"] fast-gov = ["runtime-common/fast-gov"] @@ -141,6 +152,7 @@ runtime-benchmarks = [ "frame-system-benchmarking/runtime-benchmarks", "frame-system/runtime-benchmarks", "hex-literal", + "ismp-parachain/runtime-benchmarks", "kilt-support/runtime-benchmarks", "pallet-asset-switch/runtime-benchmarks", "pallet-assets/runtime-benchmarks", @@ -152,7 +164,6 @@ runtime-benchmarks = [ "pallet-did-lookup/runtime-benchmarks", "pallet-dip-provider/runtime-benchmarks", "pallet-indices/runtime-benchmarks", - "pallet-inflation/runtime-benchmarks", "pallet-membership/runtime-benchmarks", "pallet-message-queue/runtime-benchmarks", "pallet-migration/runtime-benchmarks", @@ -163,6 +174,7 @@ runtime-benchmarks = [ "pallet-sudo/runtime-benchmarks", "pallet-timestamp/runtime-benchmarks", "pallet-tips/runtime-benchmarks", + "pallet-token-gateway/runtime-benchmarks", "pallet-treasury/runtime-benchmarks", "pallet-utility/runtime-benchmarks", "pallet-vesting/runtime-benchmarks", @@ -197,6 +209,9 @@ std = [ "frame-system-rpc-runtime-api/std", "frame-system/std", "frame-try-runtime?/std", + "ismp-parachain-runtime-api/std", + "ismp-parachain/std", + "ismp/std", "kilt-runtime-api-did/std", "kilt-runtime-api-dip-provider/std", "kilt-runtime-api-public-credentials/std", @@ -217,7 +232,8 @@ std = [ "pallet-did-lookup/std", "pallet-dip-provider/std", "pallet-indices/std", - "pallet-inflation/std", + "pallet-ismp-runtime-api/std", + "pallet-ismp/std", "pallet-membership/std", "pallet-message-queue/std", "pallet-migration/std", @@ -229,6 +245,7 @@ std = [ "pallet-sudo/std", "pallet-timestamp/std", "pallet-tips/std", + "pallet-token-gateway/std", "pallet-transaction-payment-rpc-runtime-api/std", "pallet-transaction-payment/std", "pallet-treasury/std", @@ -274,6 +291,7 @@ try-runtime = [ "frame-support/try-runtime", "frame-system/try-runtime", "frame-try-runtime", + "ismp-parachain/try-runtime", "kilt-support/try-runtime", "pallet-asset-switch/try-runtime", "pallet-assets/try-runtime", @@ -287,7 +305,7 @@ try-runtime = [ "pallet-did-lookup/try-runtime", "pallet-dip-provider/try-runtime", "pallet-indices/try-runtime", - "pallet-inflation/try-runtime", + "pallet-ismp/try-runtime", "pallet-membership/try-runtime", "pallet-message-queue/try-runtime", "pallet-migration/try-runtime", @@ -299,6 +317,7 @@ try-runtime = [ "pallet-sudo/try-runtime", "pallet-timestamp/try-runtime", "pallet-tips/try-runtime", + "pallet-token-gateway/try-runtime", "pallet-transaction-payment/try-runtime", "pallet-treasury/try-runtime", "pallet-utility/try-runtime", diff --git a/runtimes/peregrine/build.rs b/runtimes/peregrine/build.rs index f55c58ba9a..85c9c94a53 100644 --- a/runtimes/peregrine/build.rs +++ b/runtimes/peregrine/build.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use substrate_wasm_builder::WasmBuilder; diff --git a/runtimes/peregrine/src/benchmarks/asset_switch.rs b/runtimes/peregrine/src/benchmarks/asset_switch.rs index 6ad7518913..8aafed33e5 100644 --- a/runtimes/peregrine/src/benchmarks/asset_switch.rs +++ b/runtimes/peregrine/src/benchmarks/asset_switch.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at // Required since the pallet `AssetTransactor` will try to deduct the XCM fee // from the user's balance, and the asset must exist. diff --git a/runtimes/peregrine/src/benchmarks/bonded_coins.rs b/runtimes/peregrine/src/benchmarks/bonded_coins.rs index 48704fb422..ade1f3149b 100644 --- a/runtimes/peregrine/src/benchmarks/bonded_coins.rs +++ b/runtimes/peregrine/src/benchmarks/bonded_coins.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::traits::fungible::Mutate; use pallet_bonded_coins::{BenchmarkHelper, CollateralAssetIdOf, Config, FungiblesAssetIdOf}; diff --git a/runtimes/peregrine/src/benchmarks/governance.rs b/runtimes/peregrine/src/benchmarks/governance.rs index fc47092bab..44321ada0c 100644 --- a/runtimes/peregrine/src/benchmarks/governance.rs +++ b/runtimes/peregrine/src/benchmarks/governance.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{pallet_prelude::OptionQuery, storage_alias, traits::ChangeMembers}; use runtime_common::AccountId; diff --git a/runtimes/peregrine/src/benchmarks/mod.rs b/runtimes/peregrine/src/benchmarks/mod.rs index dc06efd9cd..f10abb1c07 100644 --- a/runtimes/peregrine/src/benchmarks/mod.rs +++ b/runtimes/peregrine/src/benchmarks/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_benchmarking::{ define_benchmarks, whitelisted_caller, BenchmarkBatch, BenchmarkConfig, BenchmarkError, BenchmarkList, Benchmarking, @@ -38,10 +38,10 @@ use xcm::v4::{Asset, Assets, Fungibility, Location}; use crate::{ xcm::XcmConfig, AllPalletsWithSystem, AssetSwitchPool1, Attestation, Balances, BondedCurrencies, BondedFungibles, - Council, Ctype, Delegation, Democracy, DepositStorage, Did, DidLookup, DipProvider, Fungibles, Indices, Inflation, - MessageQueue, Migration, Multisig, ParachainStaking, ParachainSystem, Preimage, Proxy, PublicCredentials, Runtime, - RuntimeEvent, Scheduler, Sudo, System, TechnicalCommittee, TechnicalMembership, Timestamp, Tips, TipsMembership, - Treasury, Utility, Vesting, Web3Names, + Collators, Council, Ctype, Delegation, Democracy, DepositStorage, Did, DidLookup, DipProvider, Fungibles, Indices, + IsmpParachain, MessageQueue, Migration, Multisig, ParachainStaking, ParachainSystem, Preimage, Proxy, + PublicCredentials, Runtime, RuntimeEvent, Scheduler, Sudo, System, TechnicalCommittee, TechnicalMembership, + Timestamp, Tips, TipsMembership, TokenGateway, Treasury, Utility, Vesting, Web3Names, }; pub(crate) mod asset_switch; @@ -56,11 +56,9 @@ use pallet_assets as pallet_bonded_assets; #[allow(unused_imports)] use pallet_collective as pallet_technical_committee_collective; #[allow(unused_imports)] -use pallet_did_lookup as pallet_unique_linking; -#[allow(unused_imports)] use pallet_membership as pallet_technical_membership; #[allow(unused_imports)] -use pallet_web3_names as pallet_dot_names; +use pallet_membership as pallet_collators; define_benchmarks!( [frame_system, frame_system_benchmarking::Pallet::] @@ -83,7 +81,6 @@ define_benchmarks!( [attestation, Attestation] [delegation, Delegation] [did, Did] - [pallet_inflation, Inflation] [public_credentials, PublicCredentials] [pallet_xcm, pallet_xcm::benchmarking::Pallet::] [pallet_migration, Migration] @@ -100,6 +97,7 @@ define_benchmarks!( // pallet_membership instances [pallet_membership, TipsMembership] [pallet_technical_membership, TechnicalMembership] + [pallet_collators, Collators] // pallet_did_lookup instances [pallet_did_lookup, DidLookup] // pallet_web3_names instances @@ -107,6 +105,9 @@ define_benchmarks!( // pallet assets instances [pallet_assets, Fungibles] [pallet_bonded_assets, BondedFungibles] + // ISMP + [ismp_parachain, IsmpParachain] + [pallet_token_gateway, TokenGateway] ); impl pallet_xcm::benchmarking::Config for Runtime { diff --git a/runtimes/peregrine/src/benchmarks/web3_names.rs b/runtimes/peregrine/src/benchmarks/web3_names.rs index c81ef1564f..845f7dadc5 100644 --- a/runtimes/peregrine/src/benchmarks/web3_names.rs +++ b/runtimes/peregrine/src/benchmarks/web3_names.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at pub(crate) use web3_names_deployment::Web3NamesBenchmarkHelper; mod web3_names_deployment { diff --git a/runtimes/peregrine/src/genesis_state.rs b/runtimes/peregrine/src/genesis_state.rs new file mode 100644 index 0000000000..d61481b652 --- /dev/null +++ b/runtimes/peregrine/src/genesis_state.rs @@ -0,0 +1,148 @@ +// KILT Blockchain – +// Copyright (C) 2025, KILT Foundation + +// The KILT Blockchain 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. + +// The KILT Blockchain 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 this program. If not, see . + +// If you feel like getting in touch with us, you can do so at +#![allow(clippy::expect_used)] + +use crate::{ + BalancesConfig, CouncilConfig, ParachainInfoConfig, ParachainStakingConfig, PolkadotXcmConfig, + RuntimeGenesisConfig, SessionConfig, SessionKeys, SudoConfig, TechnicalCommitteeConfig, +}; +use runtime_common::{ + constants::{kilt_inflation_config, staking::MinCollatorStake, KILT, MAX_COLLATOR_STAKE}, + get_account_id_from_secret, get_public_key_from_secret, AccountId, AuthorityId, Balance, +}; +use sp_core::sr25519; +use sp_genesis_builder::PresetId; +use sp_std::{vec, vec::Vec}; + +pub const KILT_PARA_ID: u32 = 2_086; +const SAFE_XCM_VERSION: u32 = xcm::prelude::XCM_VERSION; +const NEW_RUNTIME_PRESET: &str = "new"; + +pub mod development { + + use super::*; + + pub fn generate_genesis_state() -> serde_json::Value { + let alice = ( + get_account_id_from_secret::("Alice"), + get_public_key_from_secret::("Alice"), + ); + let bob = ( + get_account_id_from_secret::("Bob"), + get_public_key_from_secret::("Bob"), + ); + let endowed_accounts = [ + alice.0.clone(), + bob.0.clone(), + get_account_id_from_secret::("Charlie"), + get_account_id_from_secret::("Dave"), + get_account_id_from_secret::("Eve"), + get_account_id_from_secret::("Ferdie"), + ]; + + let config = RuntimeGenesisConfig { + balances: BalancesConfig { + balances: endowed_accounts.map(|acc| (acc, 10_000_000 * KILT)).to_vec(), + }, + session: SessionConfig { + keys: [alice.clone(), bob.clone()] + .map(|(acc, key)| (acc.clone(), acc, SessionKeys { aura: key })) + .to_vec(), + ..Default::default() + }, + sudo: SudoConfig { + key: Some(alice.0.clone()), + }, + parachain_info: ParachainInfoConfig { + parachain_id: KILT_PARA_ID.into(), + ..Default::default() + }, + parachain_staking: ParachainStakingConfig { + stakers: [alice.clone(), bob.clone()] + .map(|(acc, _)| -> (AccountId, Option, Balance) { + (acc, None, 2u128.saturating_mul(MinCollatorStake::get())) + }) + .to_vec(), + inflation_config: kilt_inflation_config(), + max_candidate_stake: MAX_COLLATOR_STAKE, + }, + council: CouncilConfig { + members: [alice.clone(), bob.clone()].map(|(acc, _)| acc).to_vec(), + phantom: Default::default(), + }, + technical_committee: TechnicalCommitteeConfig { + members: [alice, bob].map(|(acc, _)| acc).to_vec(), + phantom: Default::default(), + }, + polkadot_xcm: PolkadotXcmConfig { + safe_xcm_version: Some(SAFE_XCM_VERSION), + ..Default::default() + }, + ..Default::default() + }; + + serde_json::to_value(config).expect("Could not build genesis config.") + } +} + +pub mod production { + use super::*; + + pub fn generate_genesis_state() -> serde_json::Value { + let config = RuntimeGenesisConfig { + parachain_info: ParachainInfoConfig { + parachain_id: KILT_PARA_ID.into(), + ..Default::default() + }, + polkadot_xcm: PolkadotXcmConfig { + safe_xcm_version: Some(SAFE_XCM_VERSION), + ..Default::default() + }, + ..Default::default() + }; + + serde_json::to_value(config).expect("Could not build genesis config.") + } +} + +/// Provides the JSON representation of predefined genesis config for given +/// `id`. +pub fn get_preset(id: &PresetId) -> Option> { + let patch = match id.try_into() { + Ok(sp_genesis_builder::DEV_RUNTIME_PRESET) | Ok(sp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET) => { + development::generate_genesis_state() + } + Ok(NEW_RUNTIME_PRESET) => production::generate_genesis_state(), + _ => return None, + }; + + Some( + serde_json::to_string(&patch) + .expect("serialization to json is expected to work. qed.") + .into_bytes(), + ) +} + +/// List of supported presets. +pub fn preset_names() -> Vec { + vec![ + PresetId::from(sp_genesis_builder::DEV_RUNTIME_PRESET), + PresetId::from(sp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET), + PresetId::from(NEW_RUNTIME_PRESET), + ] +} diff --git a/runtimes/peregrine/src/governance.rs b/runtimes/peregrine/src/governance.rs index b3edcb7171..d0de6eb0d2 100644 --- a/runtimes/peregrine/src/governance.rs +++ b/runtimes/peregrine/src/governance.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ parameter_types, @@ -27,10 +27,10 @@ use frame_support::{ }; use frame_system::{EnsureRoot, EnsureSigned}; use runtime_common::{ - constants::{self, KILT}, + constants::{self}, pallet_id, AccountId, Balance, BlockWeights, Tippers, }; -use sp_core::{ConstBool, ConstU128, ConstU32, ConstU64}; +use sp_core::{ConstBool, ConstU32, ConstU64}; use sp_runtime::{traits::AccountIdLookup, Perbill, Permill}; use crate::{ @@ -89,26 +89,21 @@ impl pallet_democracy::Config for Runtime { parameter_types! { pub const ProposalBond: Permill = Permill::from_percent(5); - pub const Burn: Permill = Permill::zero(); + pub const Burn: Permill = Permill::from_percent(100); pub TreasuryAccount: AccountId = Treasury::account_id(); } impl pallet_treasury::Config for Runtime { type PalletId = pallet_id::Treasury; type Currency = Balances; - type ApproveOrigin = RootOrCollectiveProportion; type RejectOrigin = RootOrCollectiveProportion; type RuntimeEvent = RuntimeEvent; - type OnSlash = Treasury; - type ProposalBond = ProposalBond; - type ProposalBondMinimum = ConstU128<{ 20 * KILT }>; - type ProposalBondMaximum = (); type SpendPeriod = ConstU64<{ constants::governance::SPEND_PERIOD }>; #[cfg(not(feature = "runtime-benchmarks"))] type SpendOrigin = frame_support::traits::NeverEnsureOrigin; #[cfg(feature = "runtime-benchmarks")] type SpendOrigin = - frame_system::EnsureWithSuccess, AccountId, ConstU128<{ Balance::max_value() }>>; + frame_system::EnsureWithSuccess, AccountId, sp_core::ConstU128<{ Balance::MAX }>>; type Burn = Burn; type BurnDestination = (); type SpendFunds = (); @@ -135,6 +130,7 @@ impl pallet_tips::Config for Runtime { type RuntimeEvent = RuntimeEvent; type WeightInfo = weights::pallet_tips::WeightInfo; type MaxTipAmount = constants::tips::MaxTipAmount; + type OnSlash = Treasury; } #[allow(clippy::arithmetic_side_effects)] @@ -161,7 +157,7 @@ impl pallet_collective::Config for Runtime { type SetMembersOrigin = EnsureRoot; } -type TechnicalCollective = pallet_collective::Instance2; +pub(crate) type TechnicalCollective = pallet_collective::Instance2; impl pallet_collective::Config for Runtime { type RuntimeOrigin = RuntimeOrigin; type MaxProposalWeight = MaxProposalWeight; @@ -175,7 +171,7 @@ impl pallet_collective::Config for Runtime { type SetMembersOrigin = EnsureRoot; } -type RootOrMoreThanHalfCouncil = RootOrCollectiveProportion; +pub(crate) type RootOrMoreThanHalfCouncil = RootOrCollectiveProportion; type TechnicalMembershipProvider = pallet_membership::Instance1; impl pallet_membership::Config for Runtime { diff --git a/runtimes/peregrine/src/ismp.rs b/runtimes/peregrine/src/ismp.rs new file mode 100644 index 0000000000..827eeab9bf --- /dev/null +++ b/runtimes/peregrine/src/ismp.rs @@ -0,0 +1,103 @@ +// KILT Blockchain – +// Copyright (C) 2025, KILT Foundation + +// The KILT Blockchain 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. + +// The KILT Blockchain 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 this program. If not, see . + +// If you feel like getting in touch with us, you can do so at + +use frame_support::parameter_types; +use ismp::{host::StateMachine, module::IsmpModule, router::IsmpRouter}; +use runtime_common::{AccountId, Balance}; +use sp_core::{ConstU8, Get}; +use sp_std::{boxed::Box, vec::Vec}; +use xcm::v4::Location; + +use crate::{ + governance::{RootOrCollectiveProportion, TechnicalCollective}, + Balances, Fungibles, Hyperbridge, Ismp, IsmpParachain, Runtime, RuntimeEvent, Timestamp, TokenGateway, Treasury, +}; + +parameter_types! { + // The hyperbridge parachain on Kusama + pub const Coprocessor: Option = Some(StateMachine::Kusama(4009)); + pub const HostStateMachine: StateMachine = StateMachine::Kusama(2086); +} + +#[derive(Default)] +pub struct Router; + +impl IsmpRouter for Router { + fn module_for_id(&self, input: Vec) -> Result, anyhow::Error> { + match input.as_slice() { + pallet_hyperbridge::PALLET_HYPERBRIDGE_ID => Ok(Box::new(pallet_hyperbridge::Pallet::::default())), + id if TokenGateway::is_token_gateway(id) => { + Ok(Box::new(pallet_token_gateway::Pallet::::default())) + } + _ => Err(ismp::Error::ModuleNotFound(input))?, + } + } +} + +impl pallet_ismp::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type AdminOrigin = RootOrCollectiveProportion; + type HostStateMachine = HostStateMachine; + type TimestampProvider = Timestamp; + type Balance = Balance; + type Currency = Balances; + type Coprocessor = Coprocessor; + type ConsensusClients = (ismp_parachain::ParachainConsensusClient,); + type Router = Router; + + type WeightProvider = (); + type OffchainDB = (); +} + +impl pallet_hyperbridge::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type IsmpHost = Ismp; +} + +impl ismp_parachain::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type IsmpHost = Ismp; + type WeightInfo = crate::weights::ismp_parachain::WeightInfo; +} + +pub struct AssetAdmin; +impl Get for AssetAdmin { + fn get() -> AccountId { + Treasury::account_id() + } +} + +parameter_types! { + pub const NativeAssetId: Location = Location::here(); +} + +impl pallet_token_gateway::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type Dispatcher = Hyperbridge; + type Assets = Fungibles; + #[cfg(not(feature = "runtime-benchmarks"))] + type CreateOrigin = RootOrCollectiveProportion; + #[cfg(feature = "runtime-benchmarks")] + type CreateOrigin = frame_system::EnsureSigned; + type AssetAdmin = AssetAdmin; + type Decimals = ConstU8<15>; + type NativeCurrency = Balances; + type NativeAssetId = NativeAssetId; + type EvmToSubstrate = (); + type WeightInfo = crate::weights::pallet_token_gateway::WeightInfo; +} diff --git a/runtimes/peregrine/src/kilt/credential.rs b/runtimes/peregrine/src/kilt/credential.rs index 3d849a5fbe..8c4a197a92 100644 --- a/runtimes/peregrine/src/kilt/credential.rs +++ b/runtimes/peregrine/src/kilt/credential.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use delegation::DelegationAc; use did::{DidRawOrigin, EnsureDidOrigin}; diff --git a/runtimes/peregrine/src/kilt/did.rs b/runtimes/peregrine/src/kilt/did.rs index d6f06b3b89..04435b87fa 100644 --- a/runtimes/peregrine/src/kilt/did.rs +++ b/runtimes/peregrine/src/kilt/did.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use did::{ DeriveDidCallAuthorizationVerificationKeyRelationship, DeriveDidCallKeyRelationshipResult, DidRawOrigin, @@ -34,7 +34,7 @@ impl DeriveDidCallAuthorizationVerificationKeyRelationship for RuntimeCall { /// ensure that all calls have the same VerificationKeyRelationship fn single_key_relationship(calls: &[RuntimeCall]) -> DeriveDidCallKeyRelationshipResult { let init = calls - .get(0) + .first() .ok_or(RelationshipDeriveError::InvalidCallParameter)? .derive_verification_key_relationship()?; calls diff --git a/runtimes/peregrine/src/kilt/dip/mod.rs b/runtimes/peregrine/src/kilt/dip/mod.rs index a222a0d8ce..b1d652121c 100644 --- a/runtimes/peregrine/src/kilt/dip/mod.rs +++ b/runtimes/peregrine/src/kilt/dip/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use did::{DidRawOrigin, EnsureDidOrigin}; use frame_system::EnsureSigned; diff --git a/runtimes/peregrine/src/kilt/dip/runtime_api.rs b/runtimes/peregrine/src/kilt/dip/runtime_api.rs index ef53e4daa8..2b022a2159 100644 --- a/runtimes/peregrine/src/kilt/dip/runtime_api.rs +++ b/runtimes/peregrine/src/kilt/dip/runtime_api.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use did::KeyIdOf; use pallet_did_lookup::linkable_account::LinkableAccountId; diff --git a/runtimes/peregrine/src/kilt/mod.rs b/runtimes/peregrine/src/kilt/mod.rs index bb78ff27f5..fd749c29b9 100644 --- a/runtimes/peregrine/src/kilt/mod.rs +++ b/runtimes/peregrine/src/kilt/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{parameter_types, traits::AsEnsureOriginWithArg}; use frame_system::{pallet_prelude::BlockNumberFor, EnsureRoot, EnsureSigned}; @@ -28,7 +28,7 @@ use runtime_common::{ NativeAndForeignAssets as NativeAndForeignAssetsType, TargetFromLeft, }, deposits::DepositNamespace, - AccountId, Balance, SendDustAndFeesToTreasury, + AccountId, Balance, }; use sp_core::{crypto::ByteArray, ConstU128, ConstU32, ConstU8}; use sp_runtime::AccountId32; @@ -69,20 +69,12 @@ impl parachain_staking::Config for Runtime { type MaxUnstakeRequests = constants::staking::MaxUnstakeRequests; type NetworkRewardRate = constants::staking::NetworkRewardRate; type NetworkRewardStart = constants::staking::NetworkRewardStart; - type NetworkRewardBeneficiary = SendDustAndFeesToTreasury; + type NetworkRewardBeneficiary = (); type WeightInfo = weights::parachain_staking::WeightInfo; const BLOCKS_PER_YEAR: BlockNumberFor = constants::BLOCKS_PER_YEAR; } -impl pallet_inflation::Config for Runtime { - type Currency = Balances; - type InitialPeriodLength = constants::treasury::InitialPeriodLength; - type InitialPeriodReward = constants::treasury::InitialPeriodReward; - type Beneficiary = SendDustAndFeesToTreasury; - type WeightInfo = weights::pallet_inflation::WeightInfo; -} - parameter_types! { pub CheckingAccount: AccountId = PolkadotXcm::check_account(); } diff --git a/runtimes/peregrine/src/lib.rs b/runtimes/peregrine/src/lib.rs index 513471ea7a..b6a9a1dcd2 100644 --- a/runtimes/peregrine/src/lib.rs +++ b/runtimes/peregrine/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! The KILT runtime. This can be compiled with `#[no_std]`, ready for Wasm. #![cfg_attr(not(feature = "std"), no_std)] @@ -52,8 +52,8 @@ use runtime_common::{constants, fees::WeightToFee, Address, Signature}; mod governance; mod kilt; pub use kilt::Web3Name; +pub mod genesis_state; mod migrations; -pub use migrations::RuntimeMigrations; mod parachain; mod runtime_apis; use runtime_apis::_InternalImplRuntimeApis; @@ -61,6 +61,7 @@ pub use runtime_apis::{api, RuntimeApi}; mod system; use sp_version::RuntimeVersion; pub use system::{SessionKeys, SS_58_PREFIX}; +mod ismp; use crate::runtime_apis::RUNTIME_API_VERSION; mod weights; @@ -78,10 +79,10 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("mashnet-node"), impl_name: create_runtime_str!("mashnet-node"), authoring_version: 4, - spec_version: 11600, + spec_version: 11602, impl_version: 0, apis: RUNTIME_API_VERSION, - transaction_version: 8, + transaction_version: 12, state_version: 0, }; @@ -116,6 +117,7 @@ construct_runtime! { ParachainStaking: parachain_staking = 21, Authorship: pallet_authorship = 20, AuraExt: cumulus_pallet_aura_ext = 24, + Collators: pallet_membership:: = 25, Democracy: pallet_democracy = 30, Council: pallet_collective:: = 31, @@ -157,7 +159,7 @@ construct_runtime! { Delegation: delegation = 63, Did: did = 64, // DELETED: CrowdloanContributors = 65, - Inflation: pallet_inflation = 66, + // DELETED: Inflation: pallet_inflation = 66, DidLookup: pallet_did_lookup = 67, Web3Names: pallet_web3_names = 68, PublicCredentials: public_credentials = 69, @@ -182,6 +184,12 @@ construct_runtime! { // DmpQueue: cumulus_pallet_dmp_queue = 85, // Queue and pass DMP messages on to be executed. MessageQueue: pallet_message_queue = 86, + + // ISMP + Ismp: pallet_ismp = 90, + Hyperbridge: pallet_hyperbridge = 91, + IsmpParachain: ismp_parachain = 92, + TokenGateway: pallet_token_gateway = 93, } } @@ -198,7 +206,7 @@ pub type Executive = frame_executive::Executive< Runtime, // Executes pallet hooks in the order of definition in construct_runtime AllPalletsWithSystem, - RuntimeMigrations, + crate::migrations::RuntimeMigrations, >; /// Block header type as expected by this runtime. diff --git a/runtimes/peregrine/src/migrations/mod.rs b/runtimes/peregrine/src/migrations/mod.rs index e2be7b59ae..45f4c0d9ca 100644 --- a/runtimes/peregrine/src/migrations/mod.rs +++ b/runtimes/peregrine/src/migrations/mod.rs @@ -14,25 +14,22 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::parameter_types; use runtime_common::constants; -use crate::{weights, Balances, Runtime, RuntimeEvent}; +use crate::{weights, Balances, ParachainSystem, Runtime, RuntimeEvent}; parameter_types! { - pub const DmpPalletName: &'static str = "DmpQueue"; - pub const DotNames: &'static str = "DotNames"; - pub const UniqueLinking: &'static str = "UniqueLinking"; + pub const Inflation: &'static str = "Inflation"; } -pub type RuntimeMigrations = ( - pallet_xcm::migration::MigrateToLatestXcmVersion, - frame_support::migrations::RemovePallet::DbWeight>, - frame_support::migrations::RemovePallet::DbWeight>, - frame_support::migrations::RemovePallet::DbWeight>, -); +impl cumulus_pallet_xcmp_queue::migration::v5::V5Config for Runtime { + type ChannelList = ParachainSystem; +} + +pub type RuntimeMigrations = (); impl pallet_migration::Config for Runtime { type RuntimeEvent = RuntimeEvent; diff --git a/runtimes/peregrine/src/parachain.rs b/runtimes/peregrine/src/parachain.rs index 01975e4298..c83570bd19 100644 --- a/runtimes/peregrine/src/parachain.rs +++ b/runtimes/peregrine/src/parachain.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use cumulus_pallet_aura_ext::FixedVelocityConsensusHook; use cumulus_pallet_parachain_system::RelayNumberMonotonicallyIncreases; diff --git a/runtimes/peregrine/src/runtime_apis.rs b/runtimes/peregrine/src/runtime_apis.rs index ee156303d5..5499dae1a4 100644 --- a/runtimes/peregrine/src/runtime_apis.rs +++ b/runtimes/peregrine/src/runtime_apis.rs @@ -4,10 +4,11 @@ use ::xcm::{ v4::{Asset, AssetId, Location}, VersionedAssetId, VersionedLocation, VersionedXcm, }; +use cumulus_pallet_parachain_system::RelayChainState; use cumulus_primitives_aura::Slot; use cumulus_primitives_core::CollationInfo; use frame_support::{ - genesis_builder_helper::{build_config, create_default_config}, + genesis_builder_helper::{build_state, get_preset}, pallet_prelude::{TransactionSource, TransactionValidity}, traits::{ fungibles::{metadata::Inspect as MetadataInspect, Inspect}, @@ -15,6 +16,11 @@ use frame_support::{ }, weights::Weight, }; +use ismp::{ + consensus::{ConsensusClientId, StateMachineHeight, StateMachineId}, + host::StateMachine, + router::{Request, Response}, +}; use kilt_runtime_api_did::RawDidLinkedInfo; use kilt_support::traits::ItemFilter; use pallet_asset_switch::xcm::AccountId32ToAccountId32JunctionConverter; @@ -49,7 +55,7 @@ use runtime_common::{ AccountId, AuthorityId, Balance, BlockNumber, DidIdentifier, Hash, Nonce, }; use sp_api::impl_runtime_apis; -use sp_core::OpaqueMetadata; +use sp_core::{OpaqueMetadata, H256}; use sp_inherents::{CheckInherentsResult, InherentData}; use sp_metadata_ir::RuntimeApiMetadataIR; use sp_runtime::{ @@ -63,8 +69,9 @@ use crate::{ kilt::{DipProofError, DipProofRequest, NativeAndForeignAssets}, parachain::ConsensusHook, xcm::UniversalLocation, - AssetSwitchPool1, Aura, Block, BondedCurrencies, BondedFungibles, Executive, InherentDataExt, ParachainStaking, - ParachainSystem, Runtime, RuntimeCall, RuntimeGenesisConfig, SessionKeys, TransactionPayment, Web3Name, VERSION, + AssetSwitchPool1, Block, BondedCurrencies, BondedFungibles, Executive, InherentDataExt, IsmpParachain, + ParachainStaking, ParachainSystem, Runtime, RuntimeCall, RuntimeGenesisConfig, SessionKeys, TransactionPayment, + Web3Name, VERSION, }; // This is necessary since by default `RUNTIME_API_VERSIONS` generated by @@ -97,7 +104,7 @@ impl_runtime_apis! { Executive::execute_block(block); } - fn initialize_block(header: &::Header) { + fn initialize_block(header: &::Header) -> sp_runtime::ExtrinsicInclusionMode { Executive::initialize_block(header) } } @@ -219,7 +226,7 @@ impl_runtime_apis! { } fn authorities() -> Vec { - Aura::authorities().into_inner() + pallet_aura::Authorities::::get().into_inner() } } @@ -239,15 +246,17 @@ impl_runtime_apis! { } impl sp_genesis_builder::GenesisBuilder for Runtime { - - fn create_default_config() -> Vec { - create_default_config::() + fn build_state(config: Vec) -> sp_genesis_builder::Result { + build_state::(config) } - fn build_config(config: Vec) -> sp_genesis_builder::Result { - build_config::(config) + fn get_preset(id: &Option) -> Option> { + get_preset::(id, crate::genesis_state::get_preset) } + fn preset_names() -> Vec { + crate::genesis_state::preset_names() + } } impl kilt_runtime_api_did::Did< @@ -499,7 +508,8 @@ impl_runtime_apis! { rounding: Round, ) -> Result { let pool = Pools::::get(pool_id).ok_or(BondedCurrencyError::PoolNotFound)?; - let PoolDetailsOf:: { curve, bonded_currencies, denomination, collateral, .. } = pool; + let PoolDetailsOf:: { curve, bonded_currencies, currencies_settings, collateral, .. } = pool; + let denomination = currencies_settings.denomination; let collateral_denomination = NativeAndForeignAssets::decimals(collateral); let normalized_low = balance_to_fixed(low, denomination, rounding).map_err(|_| BondedCurrencyError::BalanceConversion)?; @@ -552,15 +562,13 @@ impl_runtime_apis! { let pool = Pools::::get(&pool_id).ok_or(BondedCurrencyError::PoolNotFound)?; let PoolDetailsOf:: { curve, + currencies_settings, bonded_currencies, owner, collateral, - denomination, deposit, - min_operation_balance, manager, state, - transferable, } = pool; let currencies = bonded_currencies.iter().map(|currency_id| -> Result, BondedCurrencyError> { @@ -604,12 +612,10 @@ impl_runtime_apis! { curve: fmt_curve, collateral: collateral_details, owner, - denomination, deposit, - min_operation_balance, manager, state, - transferable, + currencies_settings }) } @@ -618,6 +624,60 @@ impl_runtime_apis! { } } + impl pallet_ismp_runtime_api::IsmpRuntimeApi::Hash> for Runtime { + fn host_state_machine() -> StateMachine { + ::HostStateMachine::get() + } + + fn challenge_period(state_machine_id: StateMachineId) -> Option { + pallet_ismp::Pallet::::challenge_period(state_machine_id) + } + + /// Fetch all ISMP events in the block, should only be called from runtime-api. + fn block_events() -> Vec<::ismp::events::Event> { + pallet_ismp::Pallet::::block_events() + } + + /// Fetch all ISMP events and their extrinsic metadata, should only be called from runtime-api. + fn block_events_with_metadata() -> Vec<(::ismp::events::Event, Option)> { + pallet_ismp::Pallet::::block_events_with_metadata() + } + + /// Return the scale encoded consensus state + fn consensus_state(id: ConsensusClientId) -> Option> { + pallet_ismp::Pallet::::consensus_states(id) + } + + /// Return the timestamp this client was last updated in seconds + fn state_machine_update_time(height: StateMachineHeight) -> Option { + pallet_ismp::Pallet::::state_machine_update_time(height) + } + + /// Return the latest height of the state machine + fn latest_state_machine_height(id: StateMachineId) -> Option { + pallet_ismp::Pallet::::latest_state_machine_height(id) + } + + /// Get actual requests + fn requests(commitments: Vec) -> Vec { + pallet_ismp::Pallet::::requests(commitments) + } + + /// Get actual requests + fn responses(commitments: Vec) -> Vec { + pallet_ismp::Pallet::::responses(commitments) + } + } + + impl ismp_parachain_runtime_api::IsmpParachainApi for Runtime { + fn para_ids() -> Vec { + IsmpParachain::para_ids() + } + + fn current_relay_chain_state() -> RelayChainState { + IsmpParachain::current_relay_chain_state() + } + } #[cfg(feature = "runtime-benchmarks")] impl frame_benchmarking::Benchmark for Runtime { diff --git a/runtimes/peregrine/src/system/mod.rs b/runtimes/peregrine/src/system/mod.rs index 479e75bda7..05320eead7 100644 --- a/runtimes/peregrine/src/system/mod.rs +++ b/runtimes/peregrine/src/system/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ parameter_types, @@ -26,6 +26,7 @@ use runtime_common::{ asset_switch::EnsureRootAsTreasury, constants, fees::{ToAuthorCredit, WeightToFee}, + session::{FixedLengthSession, SessionManager}, AccountId, AuthorityId, Balance, BlockHashCount, BlockLength, BlockWeights, FeeSplit, Hash, Nonce, SendDustAndFeesToTreasury, SlowAdjustingFeeUpdate, }; @@ -41,9 +42,9 @@ use sp_weights::ConstantMultiplier; use xcm::v4::Location; use crate::{ - governance::{CouncilCollective, RootOrCollectiveProportion}, - weights, Aura, Balances, Block, OriginCaller, PalletInfo, ParachainStaking, Preimage, Runtime, RuntimeCall, - RuntimeEvent, RuntimeFreezeReason, RuntimeHoldReason, RuntimeOrigin, RuntimeTask, System, VERSION, + governance::{CouncilCollective, RootOrCollectiveProportion, RootOrMoreThanHalfCouncil}, + weights, Aura, Balances, Block, OriginCaller, PalletInfo, Preimage, Runtime, RuntimeCall, RuntimeEvent, + RuntimeFreezeReason, RuntimeHoldReason, RuntimeOrigin, RuntimeTask, System, VERSION, }; pub(crate) mod proxy; @@ -93,7 +94,12 @@ impl frame_system::Config for Runtime { type SS58Prefix = ConstU16; /// The set code logic type OnSetCode = cumulus_pallet_parachain_system::ParachainSetCode; - type MaxConsumers = frame_support::traits::ConstU32<16>; + type MaxConsumers = frame_support::traits::ConstU32<100>; + type MultiBlockMigrator = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); + type SingleBlockMigrations = (); } impl pallet_timestamp::Config for Runtime { @@ -145,9 +151,9 @@ impl pallet_session::Config for Runtime { type RuntimeEvent = RuntimeEvent; type ValidatorId = AccountId; type ValidatorIdOf = ConvertInto; - type ShouldEndSession = ParachainStaking; - type NextSessionRotation = ParachainStaking; - type SessionManager = ParachainStaking; + type ShouldEndSession = FixedLengthSession; + type NextSessionRotation = FixedLengthSession; + type SessionManager = SessionManager; type SessionHandler = ::KeyTypeIdProviders; type Keys = SessionKeys; type WeightInfo = weights::pallet_session::WeightInfo; @@ -159,11 +165,12 @@ impl pallet_aura::Config for Runtime { type DisabledValidators = (); type MaxAuthorities = ConstU32<{ constants::staking::MAX_CANDIDATES }>; type AllowMultipleBlocksPerSlot = ConstBool; + type SlotDuration = ConstU64<{ constants::SLOT_DURATION }>; } impl pallet_authorship::Config for Runtime { type FindAuthor = pallet_session::FindAccountFromAuthorIndex; - type EventHandler = ParachainStaking; + type EventHandler = (); } impl pallet_utility::Config for Runtime { @@ -280,3 +287,23 @@ impl pallet_scheduler::Config for Runtime { type OriginPrivilegeCmp = OriginPrivilegeCmp; type Preimages = Preimage; } + +type CollatorMembershipProvider = pallet_membership::Instance3; +impl pallet_membership::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type AddOrigin = RootOrMoreThanHalfCouncil; + type RemoveOrigin = RootOrMoreThanHalfCouncil; + type SwapOrigin = RootOrMoreThanHalfCouncil; + type ResetOrigin = RootOrMoreThanHalfCouncil; + #[cfg(not(feature = "runtime-benchmarks"))] + type PrimeOrigin = frame_support::traits::NeverEnsureOrigin; + #[cfg(feature = "runtime-benchmarks")] + type PrimeOrigin = frame_system::EnsureSigned; + type MembershipInitialized = (); + #[cfg(feature = "runtime-benchmarks")] + type MembershipChanged = crate::benchmarks::governance::MockMembershipChangedForBenchmarks; + #[cfg(not(feature = "runtime-benchmarks"))] + type MembershipChanged = (); + type MaxMembers = constants::staking::MaxCollators; + type WeightInfo = weights::pallet_collators::WeightInfo; +} diff --git a/runtimes/peregrine/src/system/proxy.rs b/runtimes/peregrine/src/system/proxy.rs index 2d38c51de6..e52788d183 100644 --- a/runtimes/peregrine/src/system/proxy.rs +++ b/runtimes/peregrine/src/system/proxy.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::traits::InstanceFilter; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; diff --git a/runtimes/peregrine/src/tests.rs b/runtimes/peregrine/src/tests.rs index a55bc1015a..292f28701b 100644 --- a/runtimes/peregrine/src/tests.rs +++ b/runtimes/peregrine/src/tests.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{traits::Currency, BoundedVec}; use pallet_dip_provider::IdentityCommitmentOf; @@ -195,7 +195,7 @@ fn test_derive_did_key_lookup() { RuntimeCall::DidLookup(pallet_did_lookup::Call::associate_account { req: AssociateAccountRequest::Polkadot( AccountId::new([1u8; 32]), - sp_runtime::MultiSignature::from(sp_core::ed25519::Signature([0; 64])) + sp_runtime::MultiSignature::from(sp_core::ed25519::Signature::from_raw([0; 64])) ), expiration: BlockNumber::default(), }) diff --git a/runtimes/peregrine/src/weights/attestation.rs b/runtimes/peregrine/src/weights/attestation.rs index 0cc37c755f..c1688013c0 100644 --- a/runtimes/peregrine/src/weights/attestation.rs +++ b/runtimes/peregrine/src/weights/attestation.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `attestation` //! diff --git a/runtimes/peregrine/src/weights/ctype.rs b/runtimes/peregrine/src/weights/ctype.rs index 36096d7ac8..34856593a3 100644 --- a/runtimes/peregrine/src/weights/ctype.rs +++ b/runtimes/peregrine/src/weights/ctype.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `ctype` //! diff --git a/runtimes/peregrine/src/weights/cumulus_pallet_parachain_system.rs b/runtimes/peregrine/src/weights/cumulus_pallet_parachain_system.rs index 1497042fbd..19843d6b91 100644 --- a/runtimes/peregrine/src/weights/cumulus_pallet_parachain_system.rs +++ b/runtimes/peregrine/src/weights/cumulus_pallet_parachain_system.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `cumulus_pallet_parachain_system` //! diff --git a/runtimes/peregrine/src/weights/delegation.rs b/runtimes/peregrine/src/weights/delegation.rs index 9a18d61032..d5943adf63 100644 --- a/runtimes/peregrine/src/weights/delegation.rs +++ b/runtimes/peregrine/src/weights/delegation.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `delegation` //! diff --git a/runtimes/peregrine/src/weights/did.rs b/runtimes/peregrine/src/weights/did.rs index 8378fa46c8..22d805ab7c 100644 --- a/runtimes/peregrine/src/weights/did.rs +++ b/runtimes/peregrine/src/weights/did.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `did` //! diff --git a/runtimes/peregrine/src/weights/frame_system.rs b/runtimes/peregrine/src/weights/frame_system.rs index 34c65ccf3e..53b16ca3d8 100644 --- a/runtimes/peregrine/src/weights/frame_system.rs +++ b/runtimes/peregrine/src/weights/frame_system.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `frame_system` //! diff --git a/runtimes/peregrine/src/weights/ismp_parachain.rs b/runtimes/peregrine/src/weights/ismp_parachain.rs new file mode 100644 index 0000000000..b5ce8908eb --- /dev/null +++ b/runtimes/peregrine/src/weights/ismp_parachain.rs @@ -0,0 +1,134 @@ +// KILT Blockchain – +// Copyright (C) 2025, KILT Foundation + +// The KILT Blockchain 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. + +// The KILT Blockchain 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 this program. If not, see . + +// If you feel like getting in touch with us, you can do so at + +//! Autogenerated weights for `ismp_parachain` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-05-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `rust-2`, CPU: `12th Gen Intel(R) Core(TM) i9-12900K` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 + +// Executed Command: +// frame-omni-bencher +// v1 +// benchmark +// pallet +// --pallet=ismp-parachain +// --extrinsic=* +// --genesis-builder=runtime +// --runtime=./target/release/wbuild/peregrine-runtime/peregrine_runtime.compact.compressed.wasm +// --header=HEADER-GPL +// --template=.maintain/runtime-weight-template.hbs +// --output=./runtimes/peregrine/src/weights/ + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_imports)] +#![allow(clippy::as_conversions)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weight functions for `ismp_parachain`. +pub struct WeightInfo(PhantomData); +impl ismp_parachain::WeightInfo for WeightInfo { + /// Storage: `IsmpParachain::Parachains` (r:0 w:100) + /// Proof: `IsmpParachain::Parachains` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) + /// Storage: `Ismp::ChallengePeriod` (r:0 w:100) + /// Proof: `Ismp::ChallengePeriod` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `n` is `[1, 100]`. + fn add_parachain(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 6_388_000 picoseconds. + Weight::from_parts(6_725_135, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 4_114 + .saturating_add(Weight::from_parts(1_995_999, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(n.into()))) + } + /// Storage: `IsmpParachain::Parachains` (r:0 w:5) + /// Proof: `IsmpParachain::Parachains` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) + /// The range of component `n` is `[1, 100]`. + fn remove_parachain(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 7_479_000 picoseconds. + Weight::from_parts(8_755_956, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 475 + .saturating_add(Weight::from_parts(14_864, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().writes(5)) + } + /// Storage: `IsmpParachain::ConsensusUpdated` (r:1 w:1) + /// Proof: `IsmpParachain::ConsensusUpdated` (`max_values`: Some(1), `max_size`: Some(1), added: 496, mode: `MaxEncodedLen`) + /// Storage: `Ismp::ConsensusStateClient` (r:1 w:0) + /// Proof: `Ismp::ConsensusStateClient` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Ismp::ConsensusStates` (r:1 w:1) + /// Proof: `Ismp::ConsensusStates` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Ismp::FrozenConsensusClients` (r:1 w:0) + /// Proof: `Ismp::FrozenConsensusClients` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + /// Storage: `Ismp::UnbondingPeriod` (r:1 w:0) + /// Proof: `Ismp::UnbondingPeriod` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Ismp::ConsensusClientUpdateTime` (r:1 w:1) + /// Proof: `Ismp::ConsensusClientUpdateTime` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `IsmpParachain::RelayChainStateCommitments` (r:1 w:0) + /// Proof: `IsmpParachain::RelayChainStateCommitments` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) + /// Storage: `ParachainSystem::ValidationData` (r:1 w:0) + /// Proof: `ParachainSystem::ValidationData` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `IsmpParachain::Parachains` (r:2 w:0) + /// Proof: `IsmpParachain::Parachains` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) + /// Storage: `Ismp::LatestStateMachineHeight` (r:1 w:1) + /// Proof: `Ismp::LatestStateMachineHeight` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Ismp::StateCommitments` (r:1 w:1) + /// Proof: `Ismp::StateCommitments` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Ismp::StateMachineUpdateTime` (r:0 w:1) + /// Proof: `Ismp::StateMachineUpdateTime` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: UNKNOWN KEY `0x7374617465859b5c7d03c68da7d492f1cc906e886ce9b49cc592d063993bdd8c` (r:1 w:1) + /// Proof: UNKNOWN KEY `0x7374617465859b5c7d03c68da7d492f1cc906e886ce9b49cc592d063993bdd8c` (r:1 w:1) + fn update_parachain_consensus() -> Weight { + // Proof Size summary in bytes: + // Measured: `753` + // Estimated: `5964` + // Minimum execution time: 75_559_000 picoseconds. + Weight::from_parts(79_529_000, 0) + .saturating_add(Weight::from_parts(0, 5964)) + .saturating_add(T::DbWeight::get().reads(14)) + .saturating_add(T::DbWeight::get().writes(7)) + } +} + +#[cfg(test)] +mod tests { + #[test] + fn test_update_parachain_consensus() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 5964 + ); + } +} diff --git a/runtimes/peregrine/src/weights/mod.rs b/runtimes/peregrine/src/weights/mod.rs index 2a8bc8dc21..d0f96e2253 100644 --- a/runtimes/peregrine/src/weights/mod.rs +++ b/runtimes/peregrine/src/weights/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at #![allow(unused_doc_comments)] pub mod attestation; @@ -23,18 +23,19 @@ pub mod cumulus_pallet_parachain_system; pub mod delegation; pub mod did; pub mod frame_system; +pub mod ismp_parachain; pub mod pallet_asset_switch; pub mod pallet_assets; pub mod pallet_balances; pub mod pallet_bonded_assets; pub mod pallet_bonded_coins; +pub mod pallet_collators; pub mod pallet_collective; pub mod pallet_democracy; pub mod pallet_deposit_storage; pub mod pallet_did_lookup; pub mod pallet_dip_provider; pub mod pallet_indices; -pub mod pallet_inflation; pub mod pallet_membership; pub mod pallet_message_queue; pub mod pallet_migration; @@ -48,6 +49,7 @@ pub mod pallet_technical_committee_collective; pub mod pallet_technical_membership; pub mod pallet_timestamp; pub mod pallet_tips; +pub mod pallet_token_gateway; pub mod pallet_treasury; pub mod pallet_utility; pub mod pallet_vesting; diff --git a/runtimes/peregrine/src/weights/pallet_asset_switch.rs b/runtimes/peregrine/src/weights/pallet_asset_switch.rs index 566580bc71..f56c8f6bcf 100644 --- a/runtimes/peregrine/src/weights/pallet_asset_switch.rs +++ b/runtimes/peregrine/src/weights/pallet_asset_switch.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_asset_switch` //! diff --git a/runtimes/peregrine/src/weights/pallet_assets.rs b/runtimes/peregrine/src/weights/pallet_assets.rs index f2073167f9..6bf952e5ff 100644 --- a/runtimes/peregrine/src/weights/pallet_assets.rs +++ b/runtimes/peregrine/src/weights/pallet_assets.rs @@ -14,32 +14,28 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_assets` //! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 33.0.0 -//! DATE: 2024-08-14, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-05-05, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `rust-2`, CPU: `12th Gen Intel(R) Core(TM) i9-12900K` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 // Executed Command: -// target/release-unoptimized/kilt-parachain +// frame-omni-bencher +// v1 // benchmark // pallet -// --template=.maintain/runtime-weight-template.hbs -// --header=HEADER-GPL -// --wasm-execution=compiled -// --heap-pages=4096 -// --steps=50 -// --repeat=20 -// --chain -// dev -// --pallet -// pallet-assets +// --pallet=pallet-assets // --extrinsic=* -// --output=./runtimes/peregrine/src/weights/pallet_assets.rs +// --genesis-builder=runtime +// --runtime=./target/release/wbuild/peregrine-runtime/peregrine_runtime.compact.compressed.wasm +// --header=HEADER-GPL +// --template=.maintain/runtime-weight-template.hbs +// --output=./runtimes/peregrine/src/weights/ #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_imports)] @@ -53,26 +49,30 @@ pub struct WeightInfo(PhantomData); impl pallet_assets::WeightInfo for WeightInfo { /// Storage: `Fungibles::Asset` (r:1 w:1) /// Proof: `Fungibles::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) + /// Storage: `Fungibles::NextAssetId` (r:1 w:0) + /// Proof: `Fungibles::NextAssetId` (`max_values`: Some(1), `max_size`: Some(602), added: 1097, mode: `MaxEncodedLen`) fn create() -> Weight { // Proof Size summary in bytes: // Measured: `42` // Estimated: `4273` - // Minimum execution time: 7_511_000 picoseconds. - Weight::from_parts(8_022_000, 0) + // Minimum execution time: 9_846_000 picoseconds. + Weight::from_parts(10_636_000, 0) .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } /// Storage: `Fungibles::Asset` (r:1 w:1) /// Proof: `Fungibles::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) + /// Storage: `Fungibles::NextAssetId` (r:1 w:0) + /// Proof: `Fungibles::NextAssetId` (`max_values`: Some(1), `max_size`: Some(602), added: 1097, mode: `MaxEncodedLen`) fn force_create() -> Weight { // Proof Size summary in bytes: // Measured: `42` // Estimated: `4273` - // Minimum execution time: 7_389_000 picoseconds. - Weight::from_parts(7_993_000, 0) + // Minimum execution time: 9_609_000 picoseconds. + Weight::from_parts(9_960_000, 0) .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } /// Storage: `Fungibles::Asset` (r:1 w:1) @@ -81,8 +81,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `312` // Estimated: `4273` - // Minimum execution time: 7_724_000 picoseconds. - Weight::from_parts(8_024_000, 0) + // Minimum execution time: 9_502_000 picoseconds. + Weight::from_parts(10_078_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -98,11 +98,11 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0 + c * (212 ±0)` // Estimated: `4273 + c * (3207 ±0)` - // Minimum execution time: 10_650_000 picoseconds. - Weight::from_parts(11_066_000, 0) + // Minimum execution time: 12_708_000 picoseconds. + Weight::from_parts(12_908_000, 0) .saturating_add(Weight::from_parts(0, 4273)) - // Standard Error: 6_907 - .saturating_add(Weight::from_parts(9_817_244, 0).saturating_mul(c.into())) + // Standard Error: 8_373 + .saturating_add(Weight::from_parts(10_367_179, 0).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)) @@ -118,11 +118,11 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `447 + a * (86 ±0)` // Estimated: `4273 + a * (3221 ±0)` - // Minimum execution time: 10_767_000 picoseconds. - Weight::from_parts(10_982_000, 0) + // Minimum execution time: 13_046_000 picoseconds. + Weight::from_parts(13_596_000, 0) .saturating_add(Weight::from_parts(0, 4273)) - // Standard Error: 3_058 - .saturating_add(Weight::from_parts(3_935_847, 0).saturating_mul(a.into())) + // Standard Error: 3_824 + .saturating_add(Weight::from_parts(4_120_923, 0).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)) @@ -137,8 +137,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `278` // Estimated: `4273` - // Minimum execution time: 9_031_000 picoseconds. - Weight::from_parts(9_270_000, 0) + // Minimum execution time: 11_448_000 picoseconds. + Weight::from_parts(11_975_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) @@ -151,8 +151,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `278` // Estimated: `4273` - // Minimum execution time: 16_960_000 picoseconds. - Weight::from_parts(17_381_000, 0) + // Minimum execution time: 20_251_000 picoseconds. + Weight::from_parts(20_700_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) @@ -165,8 +165,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `384` // Estimated: `4273` - // Minimum execution time: 22_651_000 picoseconds. - Weight::from_parts(23_338_000, 0) + // Minimum execution time: 26_707_000 picoseconds. + Weight::from_parts(27_542_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) @@ -181,8 +181,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `436` // Estimated: `7404` - // Minimum execution time: 33_107_000 picoseconds. - Weight::from_parts(33_858_000, 0) + // Minimum execution time: 36_742_000 picoseconds. + Weight::from_parts(37_880_000, 0) .saturating_add(Weight::from_parts(0, 7404)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) @@ -197,8 +197,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `436` // Estimated: `7404` - // Minimum execution time: 29_877_000 picoseconds. - Weight::from_parts(30_769_000, 0) + // Minimum execution time: 32_609_000 picoseconds. + Weight::from_parts(33_722_000, 0) .saturating_add(Weight::from_parts(0, 7404)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) @@ -213,8 +213,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `436` // Estimated: `7404` - // Minimum execution time: 32_722_000 picoseconds. - Weight::from_parts(33_735_000, 0) + // Minimum execution time: 37_069_000 picoseconds. + Weight::from_parts(37_919_000, 0) .saturating_add(Weight::from_parts(0, 7404)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) @@ -227,8 +227,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `384` // Estimated: `4273` - // Minimum execution time: 10_858_000 picoseconds. - Weight::from_parts(11_325_000, 0) + // Minimum execution time: 13_216_000 picoseconds. + Weight::from_parts(13_805_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) @@ -241,8 +241,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `384` // Estimated: `4273` - // Minimum execution time: 10_834_000 picoseconds. - Weight::from_parts(11_284_000, 0) + // Minimum execution time: 13_486_000 picoseconds. + Weight::from_parts(14_055_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) @@ -253,8 +253,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `312` // Estimated: `4273` - // Minimum execution time: 7_493_000 picoseconds. - Weight::from_parts(7_911_000, 0) + // Minimum execution time: 9_750_000 picoseconds. + Weight::from_parts(10_129_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -265,8 +265,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `312` // Estimated: `4273` - // Minimum execution time: 7_613_000 picoseconds. - Weight::from_parts(7_951_000, 0) + // Minimum execution time: 9_785_000 picoseconds. + Weight::from_parts(10_292_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -279,8 +279,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `278` // Estimated: `4273` - // Minimum execution time: 9_365_000 picoseconds. - Weight::from_parts(9_594_000, 0) + // Minimum execution time: 11_901_000 picoseconds. + Weight::from_parts(12_532_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) @@ -291,8 +291,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `278` // Estimated: `4273` - // Minimum execution time: 7_928_000 picoseconds. - Weight::from_parts(8_388_000, 0) + // Minimum execution time: 10_301_000 picoseconds. + Weight::from_parts(10_801_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -303,17 +303,15 @@ impl pallet_assets::WeightInfo for WeightInfo { /// Proof: `Fungibles::Metadata` (`max_values`: None, `max_size`: Some(646), added: 3121, mode: `MaxEncodedLen`) /// The range of component `n` is `[0, 4]`. /// The range of component `s` is `[0, 4]`. - fn set_metadata(n: u32, s: u32, ) -> Weight { + fn set_metadata(n: u32, _s: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `278` // Estimated: `4273` - // Minimum execution time: 9_177_000 picoseconds. - Weight::from_parts(9_513_737, 0) + // Minimum execution time: 10_783_000 picoseconds. + Weight::from_parts(12_053_448, 0) .saturating_add(Weight::from_parts(0, 4273)) - // Standard Error: 4_348 - .saturating_add(Weight::from_parts(92_631, 0).saturating_mul(n.into())) - // Standard Error: 4_348 - .saturating_add(Weight::from_parts(76_577, 0).saturating_mul(s.into())) + // Standard Error: 6_846 + .saturating_add(Weight::from_parts(35_427, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -325,8 +323,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `346` // Estimated: `4273` - // Minimum execution time: 9_824_000 picoseconds. - Weight::from_parts(10_333_000, 0) + // Minimum execution time: 11_543_000 picoseconds. + Weight::from_parts(12_348_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) @@ -337,17 +335,15 @@ impl pallet_assets::WeightInfo for WeightInfo { /// Proof: `Fungibles::Metadata` (`max_values`: None, `max_size`: Some(646), added: 3121, mode: `MaxEncodedLen`) /// The range of component `n` is `[0, 4]`. /// The range of component `s` is `[0, 4]`. - fn force_set_metadata(n: u32, s: u32, ) -> Weight { + fn force_set_metadata(_n: u32, s: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `117` // Estimated: `4273` - // Minimum execution time: 8_095_000 picoseconds. - Weight::from_parts(8_730_911, 0) + // Minimum execution time: 10_576_000 picoseconds. + Weight::from_parts(11_474_294, 0) .saturating_add(Weight::from_parts(0, 4273)) - // Standard Error: 4_722 - .saturating_add(Weight::from_parts(39_054, 0).saturating_mul(n.into())) - // Standard Error: 4_722 - .saturating_add(Weight::from_parts(70_013, 0).saturating_mul(s.into())) + // Standard Error: 5_840 + .saturating_add(Weight::from_parts(41_680, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -359,8 +355,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `346` // Estimated: `4273` - // Minimum execution time: 9_583_000 picoseconds. - Weight::from_parts(9_811_000, 0) + // Minimum execution time: 11_704_000 picoseconds. + Weight::from_parts(12_366_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) @@ -371,8 +367,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `278` // Estimated: `4273` - // Minimum execution time: 7_572_000 picoseconds. - Weight::from_parts(7_975_000, 0) + // Minimum execution time: 9_939_000 picoseconds. + Weight::from_parts(10_345_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -385,8 +381,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `312` // Estimated: `4273` - // Minimum execution time: 12_806_000 picoseconds. - Weight::from_parts(13_339_000, 0) + // Minimum execution time: 15_144_000 picoseconds. + Weight::from_parts(15_578_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) @@ -403,8 +399,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `604` // Estimated: `7404` - // Minimum execution time: 41_589_000 picoseconds. - Weight::from_parts(42_096_000, 0) + // Minimum execution time: 43_878_000 picoseconds. + Weight::from_parts(44_817_000, 0) .saturating_add(Weight::from_parts(0, 7404)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(5)) @@ -417,8 +413,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `480` // Estimated: `4273` - // Minimum execution time: 14_768_000 picoseconds. - Weight::from_parts(15_253_000, 0) + // Minimum execution time: 17_418_000 picoseconds. + Weight::from_parts(18_024_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) @@ -431,8 +427,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `480` // Estimated: `4273` - // Minimum execution time: 14_912_000 picoseconds. - Weight::from_parts(15_381_000, 0) + // Minimum execution time: 17_591_000 picoseconds. + Weight::from_parts(17_857_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) @@ -443,8 +439,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `278` // Estimated: `4273` - // Minimum execution time: 8_518_000 picoseconds. - Weight::from_parts(8_741_000, 0) + // Minimum execution time: 10_772_000 picoseconds. + Weight::from_parts(11_279_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -457,8 +453,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `278` // Estimated: `4273` - // Minimum execution time: 13_139_000 picoseconds. - Weight::from_parts(13_604_000, 0) + // Minimum execution time: 15_115_000 picoseconds. + Weight::from_parts(15_670_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) @@ -471,8 +467,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `278` // Estimated: `4273` - // Minimum execution time: 12_159_000 picoseconds. - Weight::from_parts(12_811_000, 0) + // Minimum execution time: 14_835_000 picoseconds. + Weight::from_parts(15_181_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) @@ -485,8 +481,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `402` // Estimated: `4273` - // Minimum execution time: 11_554_000 picoseconds. - Weight::from_parts(11_897_000, 0) + // Minimum execution time: 14_202_000 picoseconds. + Weight::from_parts(14_783_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) @@ -499,8 +495,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `435` // Estimated: `4273` - // Minimum execution time: 11_645_000 picoseconds. - Weight::from_parts(11_851_000, 0) + // Minimum execution time: 13_326_000 picoseconds. + Weight::from_parts(13_840_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) @@ -513,12 +509,28 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `384` // Estimated: `4273` - // Minimum execution time: 10_550_000 picoseconds. - Weight::from_parts(10_923_000, 0) + // Minimum execution time: 13_541_000 picoseconds. + Weight::from_parts(13_922_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } + /// Storage: `Fungibles::Asset` (r:1 w:1) + /// Proof: `Fungibles::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) + /// Storage: `Fungibles::Account` (r:2 w:2) + /// Proof: `Fungibles::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(132), added: 2607, mode: `MaxEncodedLen`) + fn transfer_all() -> Weight { + // Proof Size summary in bytes: + // Measured: `436` + // Estimated: `7404` + // Minimum execution time: 44_656_000 picoseconds. + Weight::from_parts(45_847_000, 0) + .saturating_add(Weight::from_parts(0, 7404)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(4)) + } } #[cfg(test)] @@ -907,4 +919,16 @@ mod tests { > 4273 ); } + #[test] + fn test_transfer_all() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 7404 + ); + } } diff --git a/runtimes/peregrine/src/weights/pallet_balances.rs b/runtimes/peregrine/src/weights/pallet_balances.rs index 0fa5a6c7ea..33b9b338ea 100644 --- a/runtimes/peregrine/src/weights/pallet_balances.rs +++ b/runtimes/peregrine/src/weights/pallet_balances.rs @@ -14,30 +14,28 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_balances` //! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 33.0.0 -//! DATE: 2024-06-20, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-05-05, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `eyrie-7`, CPU: `Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! HOSTNAME: `rust-2`, CPU: `12th Gen Intel(R) Core(TM) i9-12900K` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 // Executed Command: -// ./target/release/kilt-parachain +// frame-omni-bencher +// v1 // benchmark // pallet -// --template=.maintain/runtime-weight-template.hbs -// --header=HEADER-GPL -// --wasm-execution=compiled -// --heap-pages=4096 -// --steps=50 -// --repeat=20 -// --chain=dev // --pallet=pallet-balances // --extrinsic=* -// --output=./runtimes/peregrine/src/weights/pallet_balances.rs +// --genesis-builder=runtime +// --runtime=./target/release/wbuild/peregrine-runtime/peregrine_runtime.compact.compressed.wasm +// --header=HEADER-GPL +// --template=.maintain/runtime-weight-template.hbs +// --output=./runtimes/peregrine/src/weights/ #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_imports)] @@ -55,8 +53,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `107` // Estimated: `6204` - // Minimum execution time: 57_680_000 picoseconds. - Weight::from_parts(58_518_000, 0) + // Minimum execution time: 51_637_000 picoseconds. + Weight::from_parts(52_926_000, 0) .saturating_add(Weight::from_parts(0, 6204)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) @@ -67,8 +65,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `3597` - // Minimum execution time: 36_421_000 picoseconds. - Weight::from_parts(37_217_000, 0) + // Minimum execution time: 32_292_000 picoseconds. + Weight::from_parts(33_540_000, 0) .saturating_add(Weight::from_parts(0, 3597)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -79,8 +77,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `178` // Estimated: `3597` - // Minimum execution time: 15_716_000 picoseconds. - Weight::from_parts(16_230_000, 0) + // Minimum execution time: 12_856_000 picoseconds. + Weight::from_parts(13_355_000, 0) .saturating_add(Weight::from_parts(0, 3597)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -91,8 +89,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `178` // Estimated: `3597` - // Minimum execution time: 21_093_000 picoseconds. - Weight::from_parts(21_350_000, 0) + // Minimum execution time: 19_296_000 picoseconds. + Weight::from_parts(20_526_000, 0) .saturating_add(Weight::from_parts(0, 3597)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -103,8 +101,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `214` // Estimated: `8811` - // Minimum execution time: 60_396_000 picoseconds. - Weight::from_parts(61_513_000, 0) + // Minimum execution time: 53_749_000 picoseconds. + Weight::from_parts(54_594_000, 0) .saturating_add(Weight::from_parts(0, 8811)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) @@ -115,8 +113,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `3597` - // Minimum execution time: 45_008_000 picoseconds. - Weight::from_parts(45_809_000, 0) + // Minimum execution time: 40_191_000 picoseconds. + Weight::from_parts(41_039_000, 0) .saturating_add(Weight::from_parts(0, 3597)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -127,8 +125,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `178` // Estimated: `3597` - // Minimum execution time: 17_799_000 picoseconds. - Weight::from_parts(18_465_000, 0) + // Minimum execution time: 15_368_000 picoseconds. + Weight::from_parts(15_873_000, 0) .saturating_add(Weight::from_parts(0, 3597)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -140,11 +138,11 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0 + u * (140 ±0)` // Estimated: `990 + u * (2607 ±0)` - // Minimum execution time: 17_365_000 picoseconds. - Weight::from_parts(17_698_000, 0) + // Minimum execution time: 14_634_000 picoseconds. + Weight::from_parts(14_833_000, 0) .saturating_add(Weight::from_parts(0, 990)) - // Standard Error: 10_091 - .saturating_add(Weight::from_parts(12_523_656, 0).saturating_mul(u.into())) + // Standard Error: 7_838 + .saturating_add(Weight::from_parts(10_873_191, 0).saturating_mul(u.into())) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(u.into()))) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(u.into()))) .saturating_add(Weight::from_parts(0, 2607).saturating_mul(u.into())) @@ -155,11 +153,31 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `1501` - // Minimum execution time: 6_558_000 picoseconds. - Weight::from_parts(6_815_000, 0) + // Minimum execution time: 5_428_000 picoseconds. + Weight::from_parts(5_647_000, 0) .saturating_add(Weight::from_parts(0, 1501)) .saturating_add(T::DbWeight::get().reads(1)) } + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(132), added: 2607, mode: `MaxEncodedLen`) + fn burn_allow_death() -> Weight { + // Proof Size summary in bytes: + // Measured: `107` + // Estimated: `3597` + // Minimum execution time: 35_830_000 picoseconds. + Weight::from_parts(36_438_000, 0) + .saturating_add(Weight::from_parts(0, 3597)) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + fn burn_keep_alive() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 16_343_000 picoseconds. + Weight::from_parts(16_825_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + } } #[cfg(test)] @@ -272,4 +290,16 @@ mod tests { > 1501 ); } + #[test] + fn test_burn_allow_death() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 3597 + ); + } } diff --git a/runtimes/peregrine/src/weights/pallet_bonded_assets.rs b/runtimes/peregrine/src/weights/pallet_bonded_assets.rs index d1bc004168..9c66b44b0b 100644 --- a/runtimes/peregrine/src/weights/pallet_bonded_assets.rs +++ b/runtimes/peregrine/src/weights/pallet_bonded_assets.rs @@ -14,24 +14,25 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_bonded_assets` //! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 33.0.0 -//! DATE: 2024-11-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-05-05, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `rust-2`, CPU: `12th Gen Intel(R) Core(TM) i9-12900K` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 // Executed Command: -// ./target/release/kilt-parachain +// frame-omni-bencher +// v1 // benchmark // pallet -// --heap-pages=4096 -// --chain=dev // --pallet=pallet-bonded-assets // --extrinsic=* +// --genesis-builder=runtime +// --runtime=./target/release/wbuild/peregrine-runtime/peregrine_runtime.compact.compressed.wasm // --header=HEADER-GPL // --template=.maintain/runtime-weight-template.hbs // --output=./runtimes/peregrine/src/weights/ @@ -51,26 +52,30 @@ pub struct WeightInfo(PhantomData); impl pallet_bonded_assets::WeightInfo for WeightInfo { /// Storage: `BondedFungibles::Asset` (r:1 w:1) /// Proof: `BondedFungibles::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) + /// Storage: `BondedFungibles::NextAssetId` (r:1 w:0) + /// Proof: `BondedFungibles::NextAssetId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) fn create() -> Weight { // Proof Size summary in bytes: // Measured: `42` // Estimated: `3675` - // Minimum execution time: 5_524_000 picoseconds. - Weight::from_parts(5_886_000, 0) + // Minimum execution time: 10_003_000 picoseconds. + Weight::from_parts(10_816_000, 0) .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } /// Storage: `BondedFungibles::Asset` (r:1 w:1) /// Proof: `BondedFungibles::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) + /// Storage: `BondedFungibles::NextAssetId` (r:1 w:0) + /// Proof: `BondedFungibles::NextAssetId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) fn force_create() -> Weight { // Proof Size summary in bytes: // Measured: `42` // Estimated: `3675` - // Minimum execution time: 5_401_000 picoseconds. - Weight::from_parts(5_623_000, 0) + // Minimum execution time: 9_846_000 picoseconds. + Weight::from_parts(10_130_000, 0) .saturating_add(Weight::from_parts(0, 3675)) - .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } /// Storage: `BondedFungibles::Asset` (r:1 w:1) @@ -79,8 +84,8 @@ impl pallet_bonded_assets::WeightInfo for WeightInfo // Proof Size summary in bytes: // Measured: `314` // Estimated: `3675` - // Minimum execution time: 5_746_000 picoseconds. - Weight::from_parts(6_204_000, 0) + // Minimum execution time: 9_691_000 picoseconds. + Weight::from_parts(9_991_000, 0) .saturating_add(Weight::from_parts(0, 3675)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -96,11 +101,11 @@ impl pallet_bonded_assets::WeightInfo for WeightInfo // Proof Size summary in bytes: // Measured: `0 + c * (212 ±0)` // Estimated: `3675 + c * (2609 ±0)` - // Minimum execution time: 11_169_000 picoseconds. - Weight::from_parts(4_540_955, 0) + // Minimum execution time: 13_235_000 picoseconds. + Weight::from_parts(13_541_000, 0) .saturating_add(Weight::from_parts(0, 3675)) - // Standard Error: 13_118 - .saturating_add(Weight::from_parts(7_987_660, 0).saturating_mul(c.into())) + // Standard Error: 8_914 + .saturating_add(Weight::from_parts(10_410_204, 0).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)) @@ -116,11 +121,11 @@ impl pallet_bonded_assets::WeightInfo for WeightInfo // Proof Size summary in bytes: // Measured: `451 + a * (86 ±0)` // Estimated: `3675 + a * (2623 ±0)` - // Minimum execution time: 8_275_000 picoseconds. - Weight::from_parts(8_481_000, 0) + // Minimum execution time: 13_010_000 picoseconds. + Weight::from_parts(13_468_000, 0) .saturating_add(Weight::from_parts(0, 3675)) - // Standard Error: 2_635 - .saturating_add(Weight::from_parts(3_231_941, 0).saturating_mul(a.into())) + // Standard Error: 3_880 + .saturating_add(Weight::from_parts(4_185_022, 0).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)) @@ -130,13 +135,13 @@ impl pallet_bonded_assets::WeightInfo for WeightInfo /// Storage: `BondedFungibles::Asset` (r:1 w:1) /// Proof: `BondedFungibles::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) /// Storage: `BondedFungibles::Metadata` (r:1 w:0) - /// Proof: `BondedFungibles::Metadata` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Proof: `BondedFungibles::Metadata` (`max_values`: None, `max_size`: Some(140), added: 2615, mode: `MaxEncodedLen`) fn finish_destroy() -> Weight { // Proof Size summary in bytes: // Measured: `280` // Estimated: `3675` - // Minimum execution time: 6_581_000 picoseconds. - Weight::from_parts(6_935_000, 0) + // Minimum execution time: 11_262_000 picoseconds. + Weight::from_parts(11_855_000, 0) .saturating_add(Weight::from_parts(0, 3675)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) @@ -149,8 +154,8 @@ impl pallet_bonded_assets::WeightInfo for WeightInfo // Proof Size summary in bytes: // Measured: `280` // Estimated: `3675` - // Minimum execution time: 12_312_000 picoseconds. - Weight::from_parts(12_680_000, 0) + // Minimum execution time: 19_635_000 picoseconds. + Weight::from_parts(20_505_000, 0) .saturating_add(Weight::from_parts(0, 3675)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) @@ -163,8 +168,8 @@ impl pallet_bonded_assets::WeightInfo for WeightInfo // Proof Size summary in bytes: // Measured: `388` // Estimated: `3675` - // Minimum execution time: 16_661_000 picoseconds. - Weight::from_parts(17_291_000, 0) + // Minimum execution time: 25_108_000 picoseconds. + Weight::from_parts(26_140_000, 0) .saturating_add(Weight::from_parts(0, 3675)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) @@ -179,8 +184,8 @@ impl pallet_bonded_assets::WeightInfo for WeightInfo // Proof Size summary in bytes: // Measured: `440` // Estimated: `6208` - // Minimum execution time: 23_697_000 picoseconds. - Weight::from_parts(24_548_000, 0) + // Minimum execution time: 36_470_000 picoseconds. + Weight::from_parts(37_648_000, 0) .saturating_add(Weight::from_parts(0, 6208)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) @@ -195,8 +200,8 @@ impl pallet_bonded_assets::WeightInfo for WeightInfo // Proof Size summary in bytes: // Measured: `440` // Estimated: `6208` - // Minimum execution time: 20_724_000 picoseconds. - Weight::from_parts(21_775_000, 0) + // Minimum execution time: 32_873_000 picoseconds. + Weight::from_parts(33_469_000, 0) .saturating_add(Weight::from_parts(0, 6208)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) @@ -211,8 +216,8 @@ impl pallet_bonded_assets::WeightInfo for WeightInfo // Proof Size summary in bytes: // Measured: `440` // Estimated: `6208` - // Minimum execution time: 22_727_000 picoseconds. - Weight::from_parts(24_154_000, 0) + // Minimum execution time: 36_524_000 picoseconds. + Weight::from_parts(37_309_000, 0) .saturating_add(Weight::from_parts(0, 6208)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) @@ -225,8 +230,8 @@ impl pallet_bonded_assets::WeightInfo for WeightInfo // Proof Size summary in bytes: // Measured: `388` // Estimated: `3675` - // Minimum execution time: 7_572_000 picoseconds. - Weight::from_parts(8_019_000, 0) + // Minimum execution time: 13_330_000 picoseconds. + Weight::from_parts(13_742_000, 0) .saturating_add(Weight::from_parts(0, 3675)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) @@ -239,8 +244,8 @@ impl pallet_bonded_assets::WeightInfo for WeightInfo // Proof Size summary in bytes: // Measured: `388` // Estimated: `3675` - // Minimum execution time: 7_513_000 picoseconds. - Weight::from_parts(8_112_000, 0) + // Minimum execution time: 13_243_000 picoseconds. + Weight::from_parts(13_788_000, 0) .saturating_add(Weight::from_parts(0, 3675)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) @@ -251,8 +256,8 @@ impl pallet_bonded_assets::WeightInfo for WeightInfo // Proof Size summary in bytes: // Measured: `314` // Estimated: `3675` - // Minimum execution time: 5_282_000 picoseconds. - Weight::from_parts(5_682_000, 0) + // Minimum execution time: 9_629_000 picoseconds. + Weight::from_parts(10_087_000, 0) .saturating_add(Weight::from_parts(0, 3675)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -263,8 +268,8 @@ impl pallet_bonded_assets::WeightInfo for WeightInfo // Proof Size summary in bytes: // Measured: `314` // Estimated: `3675` - // Minimum execution time: 5_361_000 picoseconds. - Weight::from_parts(5_701_000, 0) + // Minimum execution time: 9_642_000 picoseconds. + Weight::from_parts(10_182_000, 0) .saturating_add(Weight::from_parts(0, 3675)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -272,13 +277,13 @@ impl pallet_bonded_assets::WeightInfo for WeightInfo /// Storage: `BondedFungibles::Asset` (r:1 w:1) /// Proof: `BondedFungibles::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) /// Storage: `BondedFungibles::Metadata` (r:1 w:0) - /// Proof: `BondedFungibles::Metadata` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Proof: `BondedFungibles::Metadata` (`max_values`: None, `max_size`: Some(140), added: 2615, mode: `MaxEncodedLen`) fn transfer_ownership() -> Weight { // Proof Size summary in bytes: // Measured: `280` // Estimated: `3675` - // Minimum execution time: 6_573_000 picoseconds. - Weight::from_parts(6_884_000, 0) + // Minimum execution time: 11_978_000 picoseconds. + Weight::from_parts(12_354_000, 0) .saturating_add(Weight::from_parts(0, 3675)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) @@ -289,8 +294,8 @@ impl pallet_bonded_assets::WeightInfo for WeightInfo // Proof Size summary in bytes: // Measured: `280` // Estimated: `3675` - // Minimum execution time: 5_706_000 picoseconds. - Weight::from_parts(6_144_000, 0) + // Minimum execution time: 10_268_000 picoseconds. + Weight::from_parts(10_718_000, 0) .saturating_add(Weight::from_parts(0, 3675)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -298,31 +303,29 @@ impl pallet_bonded_assets::WeightInfo for WeightInfo /// Storage: `BondedFungibles::Asset` (r:1 w:0) /// Proof: `BondedFungibles::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) /// Storage: `BondedFungibles::Metadata` (r:1 w:1) - /// Proof: `BondedFungibles::Metadata` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - /// The range of component `n` is `[0, 4]`. - /// The range of component `s` is `[0, 4]`. - fn set_metadata(_n: u32, s: u32, ) -> Weight { + /// Proof: `BondedFungibles::Metadata` (`max_values`: None, `max_size`: Some(140), added: 2615, mode: `MaxEncodedLen`) + /// The range of component `n` is `[0, 50]`. + /// The range of component `s` is `[0, 50]`. + fn set_metadata(_n: u32, _s: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `280` // Estimated: `3675` - // Minimum execution time: 6_279_000 picoseconds. - Weight::from_parts(7_152_774, 0) + // Minimum execution time: 11_085_000 picoseconds. + Weight::from_parts(12_793_627, 0) .saturating_add(Weight::from_parts(0, 3675)) - // Standard Error: 4_624 - .saturating_add(Weight::from_parts(22_496, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } /// Storage: `BondedFungibles::Asset` (r:1 w:0) /// Proof: `BondedFungibles::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) /// Storage: `BondedFungibles::Metadata` (r:1 w:1) - /// Proof: `BondedFungibles::Metadata` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Proof: `BondedFungibles::Metadata` (`max_values`: None, `max_size`: Some(140), added: 2615, mode: `MaxEncodedLen`) fn clear_metadata() -> Weight { // Proof Size summary in bytes: - // Measured: `350` + // Measured: `444` // Estimated: `3675` - // Minimum execution time: 7_113_000 picoseconds. - Weight::from_parts(7_524_000, 0) + // Minimum execution time: 11_653_000 picoseconds. + Weight::from_parts(12_068_000, 0) .saturating_add(Weight::from_parts(0, 3675)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) @@ -330,33 +333,31 @@ impl pallet_bonded_assets::WeightInfo for WeightInfo /// Storage: `BondedFungibles::Asset` (r:1 w:0) /// Proof: `BondedFungibles::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) /// Storage: `BondedFungibles::Metadata` (r:1 w:1) - /// Proof: `BondedFungibles::Metadata` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) - /// The range of component `n` is `[0, 4]`. - /// The range of component `s` is `[0, 4]`. - fn force_set_metadata(n: u32, s: u32, ) -> Weight { + /// Proof: `BondedFungibles::Metadata` (`max_values`: None, `max_size`: Some(140), added: 2615, mode: `MaxEncodedLen`) + /// 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 { // Proof Size summary in bytes: // Measured: `119` // Estimated: `3675` - // Minimum execution time: 5_756_000 picoseconds. - Weight::from_parts(6_189_023, 0) + // Minimum execution time: 10_509_000 picoseconds. + Weight::from_parts(12_055_798, 0) .saturating_add(Weight::from_parts(0, 3675)) - // Standard Error: 3_605 - .saturating_add(Weight::from_parts(62_714, 0).saturating_mul(n.into())) - // Standard Error: 3_605 - .saturating_add(Weight::from_parts(72_261, 0).saturating_mul(s.into())) + // Standard Error: 2_305 + .saturating_add(Weight::from_parts(3_443, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } /// Storage: `BondedFungibles::Asset` (r:1 w:0) /// Proof: `BondedFungibles::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) /// Storage: `BondedFungibles::Metadata` (r:1 w:1) - /// Proof: `BondedFungibles::Metadata` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Proof: `BondedFungibles::Metadata` (`max_values`: None, `max_size`: Some(140), added: 2615, mode: `MaxEncodedLen`) fn force_clear_metadata() -> Weight { // Proof Size summary in bytes: - // Measured: `350` + // Measured: `444` // Estimated: `3675` - // Minimum execution time: 6_996_000 picoseconds. - Weight::from_parts(7_408_000, 0) + // Minimum execution time: 12_233_000 picoseconds. + Weight::from_parts(12_815_000, 0) .saturating_add(Weight::from_parts(0, 3675)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) @@ -367,8 +368,8 @@ impl pallet_bonded_assets::WeightInfo for WeightInfo // Proof Size summary in bytes: // Measured: `280` // Estimated: `3675` - // Minimum execution time: 5_816_000 picoseconds. - Weight::from_parts(6_225_000, 0) + // Minimum execution time: 10_207_000 picoseconds. + Weight::from_parts(10_620_000, 0) .saturating_add(Weight::from_parts(0, 3675)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -381,8 +382,8 @@ impl pallet_bonded_assets::WeightInfo for WeightInfo // Proof Size summary in bytes: // Measured: `314` // Estimated: `3675` - // Minimum execution time: 9_372_000 picoseconds. - Weight::from_parts(9_802_000, 0) + // Minimum execution time: 15_368_000 picoseconds. + Weight::from_parts(16_162_000, 0) .saturating_add(Weight::from_parts(0, 3675)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) @@ -399,8 +400,8 @@ impl pallet_bonded_assets::WeightInfo for WeightInfo // Proof Size summary in bytes: // Measured: `610` // Estimated: `6208` - // Minimum execution time: 29_488_000 picoseconds. - Weight::from_parts(30_631_000, 0) + // Minimum execution time: 44_392_000 picoseconds. + Weight::from_parts(45_926_000, 0) .saturating_add(Weight::from_parts(0, 6208)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(5)) @@ -413,8 +414,8 @@ impl pallet_bonded_assets::WeightInfo for WeightInfo // Proof Size summary in bytes: // Measured: `484` // Estimated: `3675` - // Minimum execution time: 10_844_000 picoseconds. - Weight::from_parts(11_277_000, 0) + // Minimum execution time: 17_013_000 picoseconds. + Weight::from_parts(17_615_000, 0) .saturating_add(Weight::from_parts(0, 3675)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) @@ -427,8 +428,8 @@ impl pallet_bonded_assets::WeightInfo for WeightInfo // Proof Size summary in bytes: // Measured: `484` // Estimated: `3675` - // Minimum execution time: 10_635_000 picoseconds. - Weight::from_parts(11_133_000, 0) + // Minimum execution time: 16_969_000 picoseconds. + Weight::from_parts(17_730_000, 0) .saturating_add(Weight::from_parts(0, 3675)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) @@ -439,8 +440,8 @@ impl pallet_bonded_assets::WeightInfo for WeightInfo // Proof Size summary in bytes: // Measured: `280` // Estimated: `3675` - // Minimum execution time: 5_844_000 picoseconds. - Weight::from_parts(6_365_000, 0) + // Minimum execution time: 10_660_000 picoseconds. + Weight::from_parts(11_118_000, 0) .saturating_add(Weight::from_parts(0, 3675)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -453,8 +454,8 @@ impl pallet_bonded_assets::WeightInfo for WeightInfo // Proof Size summary in bytes: // Measured: `280` // Estimated: `3675` - // Minimum execution time: 8_969_000 picoseconds. - Weight::from_parts(9_620_000, 0) + // Minimum execution time: 14_678_000 picoseconds. + Weight::from_parts(15_256_000, 0) .saturating_add(Weight::from_parts(0, 3675)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) @@ -467,8 +468,8 @@ impl pallet_bonded_assets::WeightInfo for WeightInfo // Proof Size summary in bytes: // Measured: `280` // Estimated: `3675` - // Minimum execution time: 8_357_000 picoseconds. - Weight::from_parts(8_621_000, 0) + // Minimum execution time: 14_010_000 picoseconds. + Weight::from_parts(14_854_000, 0) .saturating_add(Weight::from_parts(0, 3675)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) @@ -481,8 +482,8 @@ impl pallet_bonded_assets::WeightInfo for WeightInfo // Proof Size summary in bytes: // Measured: `406` // Estimated: `3675` - // Minimum execution time: 8_669_000 picoseconds. - Weight::from_parts(8_993_000, 0) + // Minimum execution time: 13_557_000 picoseconds. + Weight::from_parts(14_206_000, 0) .saturating_add(Weight::from_parts(0, 3675)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) @@ -495,8 +496,8 @@ impl pallet_bonded_assets::WeightInfo for WeightInfo // Proof Size summary in bytes: // Measured: `439` // Estimated: `3675` - // Minimum execution time: 7_975_000 picoseconds. - Weight::from_parts(8_287_000, 0) + // Minimum execution time: 13_061_000 picoseconds. + Weight::from_parts(13_681_000, 0) .saturating_add(Weight::from_parts(0, 3675)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) @@ -509,12 +510,28 @@ impl pallet_bonded_assets::WeightInfo for WeightInfo // Proof Size summary in bytes: // Measured: `388` // Estimated: `3675` - // Minimum execution time: 7_521_000 picoseconds. - Weight::from_parts(7_789_000, 0) + // Minimum execution time: 13_201_000 picoseconds. + Weight::from_parts(13_722_000, 0) .saturating_add(Weight::from_parts(0, 3675)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } + /// Storage: `BondedFungibles::Asset` (r:1 w:1) + /// Proof: `BondedFungibles::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) + /// Storage: `BondedFungibles::Account` (r:2 w:2) + /// Proof: `BondedFungibles::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(132), added: 2607, mode: `MaxEncodedLen`) + fn transfer_all() -> Weight { + // Proof Size summary in bytes: + // Measured: `440` + // Estimated: `6208` + // Minimum execution time: 43_581_000 picoseconds. + Weight::from_parts(45_042_000, 0) + .saturating_add(Weight::from_parts(0, 6208)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(4)) + } } #[cfg(test)] @@ -903,4 +920,16 @@ mod tests { > 3675 ); } + #[test] + fn test_transfer_all() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 6208 + ); + } } diff --git a/runtimes/peregrine/src/weights/pallet_bonded_coins.rs b/runtimes/peregrine/src/weights/pallet_bonded_coins.rs index d46e6dab48..3412dd993a 100644 --- a/runtimes/peregrine/src/weights/pallet_bonded_coins.rs +++ b/runtimes/peregrine/src/weights/pallet_bonded_coins.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_bonded_coins` //! diff --git a/runtimes/peregrine/src/weights/pallet_collators.rs b/runtimes/peregrine/src/weights/pallet_collators.rs new file mode 100644 index 0000000000..436f9995d6 --- /dev/null +++ b/runtimes/peregrine/src/weights/pallet_collators.rs @@ -0,0 +1,255 @@ +// KILT Blockchain – +// Copyright (C) 2025, KILT Foundation + +// The KILT Blockchain 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. + +// The KILT Blockchain 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 this program. If not, see . + +// If you feel like getting in touch with us, you can do so at + +//! Autogenerated weights for `pallet_collators` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-05-06, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `rust-2`, CPU: `12th Gen Intel(R) Core(TM) i9-12900K` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 + +// Executed Command: +// frame-omni-bencher +// v1 +// benchmark +// pallet +// --pallet=pallet-collators +// --extrinsic=* +// --genesis-builder=runtime +// --runtime=./target/release/wbuild/peregrine-runtime/peregrine_runtime.compact.compressed.wasm +// --header=HEADER-GPL +// --template=.maintain/runtime-weight-template.hbs +// --output=./runtimes/peregrine/src/weights/ + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_imports)] +#![allow(clippy::as_conversions)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +// TODO: Remove once the benchmarking stuff fully supports pallet instances. +use pallet_membership as pallet_collators; + +/// Weight functions for `pallet_collators`. +pub struct WeightInfo(PhantomData); +impl pallet_collators::WeightInfo for WeightInfo { + /// Storage: `Collators::Members` (r:1 w:1) + /// Proof: `Collators::Members` (`max_values`: Some(1), `max_size`: Some(1025), added: 1520, mode: `MaxEncodedLen`) + /// The range of component `m` is `[1, 31]`. + fn add_member(m: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `170 + m * (32 ±0)` + // Estimated: `2510` + // Minimum execution time: 8_472_000 picoseconds. + Weight::from_parts(9_157_371, 0) + .saturating_add(Weight::from_parts(0, 2510)) + // Standard Error: 1_170 + .saturating_add(Weight::from_parts(26_129, 0).saturating_mul(m.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: `Collators::Members` (r:1 w:1) + /// Proof: `Collators::Members` (`max_values`: Some(1), `max_size`: Some(1025), added: 1520, mode: `MaxEncodedLen`) + /// Storage: `Collators::Prime` (r:1 w:0) + /// Proof: `Collators::Prime` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) + /// Storage: UNKNOWN KEY `0xdfe4dad7b89644d5962c7bb034ca6f7bb10896c85af113f86bae1ab193a37922` (r:0 w:1) + /// Proof: UNKNOWN KEY `0xdfe4dad7b89644d5962c7bb034ca6f7bb10896c85af113f86bae1ab193a37922` (r:0 w:1) + /// The range of component `m` is `[2, 32]`. + fn remove_member(m: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `222 + m * (32 ±0)` + // Estimated: `2510 + m * (32 ±0)` + // Minimum execution time: 11_115_000 picoseconds. + Weight::from_parts(12_303_767, 0) + .saturating_add(Weight::from_parts(0, 2510)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 32).saturating_mul(m.into())) + } + /// Storage: `Collators::Members` (r:1 w:1) + /// Proof: `Collators::Members` (`max_values`: Some(1), `max_size`: Some(1025), added: 1520, mode: `MaxEncodedLen`) + /// Storage: `Collators::Prime` (r:1 w:0) + /// Proof: `Collators::Prime` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) + /// Storage: UNKNOWN KEY `0xdfe4dad7b89644d5962c7bb034ca6f7bb10896c85af113f86bae1ab193a37922` (r:0 w:1) + /// Proof: UNKNOWN KEY `0xdfe4dad7b89644d5962c7bb034ca6f7bb10896c85af113f86bae1ab193a37922` (r:0 w:1) + /// The range of component `m` is `[2, 32]`. + fn swap_member(m: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `222 + m * (32 ±0)` + // Estimated: `2510 + m * (32 ±0)` + // Minimum execution time: 10_888_000 picoseconds. + Weight::from_parts(11_823_159, 0) + .saturating_add(Weight::from_parts(0, 2510)) + // Standard Error: 1_913 + .saturating_add(Weight::from_parts(21_019, 0).saturating_mul(m.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 32).saturating_mul(m.into())) + } + /// Storage: `Collators::Members` (r:1 w:1) + /// Proof: `Collators::Members` (`max_values`: Some(1), `max_size`: Some(1025), added: 1520, mode: `MaxEncodedLen`) + /// Storage: `Collators::Prime` (r:1 w:0) + /// Proof: `Collators::Prime` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) + /// Storage: UNKNOWN KEY `0xdfe4dad7b89644d5962c7bb034ca6f7bb10896c85af113f86bae1ab193a37922` (r:0 w:1) + /// Proof: UNKNOWN KEY `0xdfe4dad7b89644d5962c7bb034ca6f7bb10896c85af113f86bae1ab193a37922` (r:0 w:1) + /// The range of component `m` is `[1, 32]`. + fn reset_members(m: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `222 + m * (32 ±0)` + // Estimated: `2510 + m * (32 ±0)` + // Minimum execution time: 10_864_000 picoseconds. + Weight::from_parts(11_892_378, 0) + .saturating_add(Weight::from_parts(0, 2510)) + // Standard Error: 1_333 + .saturating_add(Weight::from_parts(63_054, 0).saturating_mul(m.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 32).saturating_mul(m.into())) + } + /// Storage: `Collators::Members` (r:1 w:1) + /// Proof: `Collators::Members` (`max_values`: Some(1), `max_size`: Some(1025), added: 1520, mode: `MaxEncodedLen`) + /// Storage: `Collators::Prime` (r:1 w:1) + /// Proof: `Collators::Prime` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) + /// Storage: UNKNOWN KEY `0xdfe4dad7b89644d5962c7bb034ca6f7bb10896c85af113f86bae1ab193a37922` (r:0 w:1) + /// Proof: UNKNOWN KEY `0xdfe4dad7b89644d5962c7bb034ca6f7bb10896c85af113f86bae1ab193a37922` (r:0 w:1) + /// The range of component `m` is `[1, 32]`. + fn change_key(m: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `222 + m * (32 ±0)` + // Estimated: `2510 + m * (32 ±0)` + // Minimum execution time: 10_998_000 picoseconds. + Weight::from_parts(11_990_124, 0) + .saturating_add(Weight::from_parts(0, 2510)) + // Standard Error: 1_256 + .saturating_add(Weight::from_parts(19_368, 0).saturating_mul(m.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 32).saturating_mul(m.into())) + } + /// Storage: `Collators::Members` (r:1 w:0) + /// Proof: `Collators::Members` (`max_values`: Some(1), `max_size`: Some(1025), added: 1520, mode: `MaxEncodedLen`) + /// Storage: `Collators::Prime` (r:0 w:1) + /// Proof: `Collators::Prime` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) + /// Storage: UNKNOWN KEY `0xdfe4dad7b89644d5962c7bb034ca6f7bb10896c85af113f86bae1ab193a37922` (r:0 w:1) + /// Proof: UNKNOWN KEY `0xdfe4dad7b89644d5962c7bb034ca6f7bb10896c85af113f86bae1ab193a37922` (r:0 w:1) + /// The range of component `m` is `[1, 32]`. + fn set_prime(m: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `170 + m * (32 ±0)` + // Estimated: `2510 + m * (32 ±0)` + // Minimum execution time: 6_609_000 picoseconds. + Weight::from_parts(7_066_479, 0) + .saturating_add(Weight::from_parts(0, 2510)) + // Standard Error: 857 + .saturating_add(Weight::from_parts(12_319, 0).saturating_mul(m.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 32).saturating_mul(m.into())) + } + /// Storage: `Collators::Prime` (r:0 w:1) + /// Proof: `Collators::Prime` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) + /// Storage: UNKNOWN KEY `0xdfe4dad7b89644d5962c7bb034ca6f7bb10896c85af113f86bae1ab193a37922` (r:0 w:1) + /// Proof: UNKNOWN KEY `0xdfe4dad7b89644d5962c7bb034ca6f7bb10896c85af113f86bae1ab193a37922` (r:0 w:1) + fn clear_prime() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_246_000 picoseconds. + Weight::from_parts(2_417_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(2)) + } +} + +#[cfg(test)] +mod tests { + #[test] + fn test_add_member() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 2510 + ); + } + #[test] + fn test_remove_member() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 2510 + ); + } + #[test] + fn test_swap_member() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 2510 + ); + } + #[test] + fn test_reset_members() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 2510 + ); + } + #[test] + fn test_change_key() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 2510 + ); + } + #[test] + fn test_set_prime() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 2510 + ); + } +} diff --git a/runtimes/peregrine/src/weights/pallet_collective.rs b/runtimes/peregrine/src/weights/pallet_collective.rs index 4d2816d95b..69ac4f7d38 100644 --- a/runtimes/peregrine/src/weights/pallet_collective.rs +++ b/runtimes/peregrine/src/weights/pallet_collective.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_collective` //! diff --git a/runtimes/peregrine/src/weights/pallet_democracy.rs b/runtimes/peregrine/src/weights/pallet_democracy.rs index d01c996aa5..90a5526957 100644 --- a/runtimes/peregrine/src/weights/pallet_democracy.rs +++ b/runtimes/peregrine/src/weights/pallet_democracy.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_democracy` //! diff --git a/runtimes/peregrine/src/weights/pallet_deposit_storage.rs b/runtimes/peregrine/src/weights/pallet_deposit_storage.rs index a271aefab5..af742c834d 100644 --- a/runtimes/peregrine/src/weights/pallet_deposit_storage.rs +++ b/runtimes/peregrine/src/weights/pallet_deposit_storage.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_deposit_storage` //! diff --git a/runtimes/peregrine/src/weights/pallet_did_lookup.rs b/runtimes/peregrine/src/weights/pallet_did_lookup.rs index f4b360487e..b0146b0a7d 100644 --- a/runtimes/peregrine/src/weights/pallet_did_lookup.rs +++ b/runtimes/peregrine/src/weights/pallet_did_lookup.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_did_lookup` //! diff --git a/runtimes/peregrine/src/weights/pallet_dip_provider.rs b/runtimes/peregrine/src/weights/pallet_dip_provider.rs index 22b143de73..d763511a97 100644 --- a/runtimes/peregrine/src/weights/pallet_dip_provider.rs +++ b/runtimes/peregrine/src/weights/pallet_dip_provider.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_dip_provider` //! diff --git a/runtimes/peregrine/src/weights/pallet_indices.rs b/runtimes/peregrine/src/weights/pallet_indices.rs index 7d2f50de0e..6c2f6e8cb9 100644 --- a/runtimes/peregrine/src/weights/pallet_indices.rs +++ b/runtimes/peregrine/src/weights/pallet_indices.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_indices` //! diff --git a/runtimes/peregrine/src/weights/pallet_inflation.rs b/runtimes/peregrine/src/weights/pallet_inflation.rs deleted file mode 100644 index 8a192e1c5c..0000000000 --- a/runtimes/peregrine/src/weights/pallet_inflation.rs +++ /dev/null @@ -1,88 +0,0 @@ -// KILT Blockchain – -// Copyright (C) 2025, KILT Foundation - -// The KILT Blockchain 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. - -// The KILT Blockchain 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 this program. If not, see . - -// If you feel like getting in touch with us, you can do so at - -//! Autogenerated weights for `pallet_inflation` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 33.0.0 -//! DATE: 2024-06-20, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `eyrie-7`, CPU: `Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/kilt-parachain -// benchmark -// pallet -// --template=.maintain/runtime-weight-template.hbs -// --header=HEADER-GPL -// --wasm-execution=compiled -// --heap-pages=4096 -// --steps=50 -// --repeat=20 -// --chain=dev -// --pallet=pallet-inflation -// --extrinsic=* -// --output=./runtimes/peregrine/src/weights/pallet_inflation.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_imports)] -#![allow(clippy::as_conversions)] - -use frame_support::{traits::Get, weights::Weight}; -use sp_std::marker::PhantomData; - -/// Weight functions for `pallet_inflation`. -pub struct WeightInfo(PhantomData); -impl pallet_inflation::WeightInfo for WeightInfo { - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(132), added: 2607, mode: `MaxEncodedLen`) - fn on_initialize_mint_to_treasury() -> Weight { - // Proof Size summary in bytes: - // Measured: `107` - // Estimated: `3597` - // Minimum execution time: 19_289_000 picoseconds. - Weight::from_parts(19_441_000, 0) - .saturating_add(Weight::from_parts(0, 3597)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - fn on_initialize_no_action() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 222_000 picoseconds. - Weight::from_parts(228_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } -} - -#[cfg(test)] -mod tests { - #[test] - fn test_on_initialize_mint_to_treasury() { - assert!( - ::BlockWeights::get() - .per_class - .get(frame_support::dispatch::DispatchClass::Normal) - .max_extrinsic - .unwrap_or_else(::max_value) - .proof_size() - > 3597 - ); - } -} diff --git a/runtimes/peregrine/src/weights/pallet_membership.rs b/runtimes/peregrine/src/weights/pallet_membership.rs index 499c06eaaa..c9eb731d13 100644 --- a/runtimes/peregrine/src/weights/pallet_membership.rs +++ b/runtimes/peregrine/src/weights/pallet_membership.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_membership` //! @@ -97,7 +97,7 @@ impl pallet_membership::WeightInfo for WeightInfo { /// Storage: `TipsMembership::Prime` (r:1 w:0) /// Proof: `TipsMembership::Prime` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `Ignored`) /// The range of component `m` is `[1, 21]`. - fn reset_member(_m: u32, ) -> Weight { + fn reset_members(_m: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `187 + m * (32 ±0)` // Estimated: `990` @@ -140,7 +140,7 @@ impl pallet_membership::WeightInfo for WeightInfo { /// Storage: `TipsMembership::Prime` (r:0 w:1) /// Proof: `TipsMembership::Prime` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `Ignored`) /// The range of component `m` is `[1, 21]`. - fn clear_prime(_m: u32, ) -> Weight { + fn clear_prime( ) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` diff --git a/runtimes/peregrine/src/weights/pallet_message_queue.rs b/runtimes/peregrine/src/weights/pallet_message_queue.rs index 69e026b81e..a503cf0073 100644 --- a/runtimes/peregrine/src/weights/pallet_message_queue.rs +++ b/runtimes/peregrine/src/weights/pallet_message_queue.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_message_queue` //! diff --git a/runtimes/peregrine/src/weights/pallet_migration.rs b/runtimes/peregrine/src/weights/pallet_migration.rs index b526360891..aa3fb92c6d 100644 --- a/runtimes/peregrine/src/weights/pallet_migration.rs +++ b/runtimes/peregrine/src/weights/pallet_migration.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_migration` //! diff --git a/runtimes/peregrine/src/weights/pallet_multisig.rs b/runtimes/peregrine/src/weights/pallet_multisig.rs index d1bc884ee6..1951493696 100644 --- a/runtimes/peregrine/src/weights/pallet_multisig.rs +++ b/runtimes/peregrine/src/weights/pallet_multisig.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for pallet_multisig //! diff --git a/runtimes/peregrine/src/weights/pallet_preimage.rs b/runtimes/peregrine/src/weights/pallet_preimage.rs index 28fa2fbebc..ea4915db84 100644 --- a/runtimes/peregrine/src/weights/pallet_preimage.rs +++ b/runtimes/peregrine/src/weights/pallet_preimage.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_preimage` //! diff --git a/runtimes/peregrine/src/weights/pallet_proxy.rs b/runtimes/peregrine/src/weights/pallet_proxy.rs index 3b474eb2c4..e94d0b0087 100644 --- a/runtimes/peregrine/src/weights/pallet_proxy.rs +++ b/runtimes/peregrine/src/weights/pallet_proxy.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_proxy` //! diff --git a/runtimes/peregrine/src/weights/pallet_scheduler.rs b/runtimes/peregrine/src/weights/pallet_scheduler.rs index c0210a8202..c06d02f2d9 100644 --- a/runtimes/peregrine/src/weights/pallet_scheduler.rs +++ b/runtimes/peregrine/src/weights/pallet_scheduler.rs @@ -14,30 +14,28 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_scheduler` //! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 33.0.0 -//! DATE: 2024-06-20, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-05-12, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `eyrie-7`, CPU: `Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! HOSTNAME: `rust-2`, CPU: `12th Gen Intel(R) Core(TM) i9-12900K` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 // Executed Command: -// ./target/release/kilt-parachain +// frame-omni-bencher +// v1 // benchmark // pallet -// --template=.maintain/runtime-weight-template.hbs -// --header=HEADER-GPL -// --wasm-execution=compiled -// --heap-pages=4096 -// --steps=50 -// --repeat=20 -// --chain=dev // --pallet=pallet-scheduler // --extrinsic=* -// --output=./runtimes/peregrine/src/weights/pallet_scheduler.rs +// --genesis-builder=runtime +// --runtime=./target/release/wbuild/peregrine-runtime/peregrine_runtime.compact.compressed.wasm +// --header=HEADER-GPL +// --template=.maintain/runtime-weight-template.hbs +// --output=./runtimes/peregrine/src/weights/ #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_imports)] @@ -55,8 +53,8 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `36` // Estimated: `1493` - // Minimum execution time: 2_691_000 picoseconds. - Weight::from_parts(2_800_000, 0) + // Minimum execution time: 4_647_000 picoseconds. + Weight::from_parts(4_883_000, 0) .saturating_add(Weight::from_parts(0, 1493)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -68,11 +66,11 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `83 + s * (181 ±0)` // Estimated: `42632` - // Minimum execution time: 3_303_000 picoseconds. - Weight::from_parts(7_206_829, 0) + // Minimum execution time: 5_373_000 picoseconds. + Weight::from_parts(7_568_073, 0) .saturating_add(Weight::from_parts(0, 42632)) - // Standard Error: 2_466 - .saturating_add(Weight::from_parts(460_152, 0).saturating_mul(s.into())) + // Standard Error: 2_446 + .saturating_add(Weight::from_parts(276_325, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -80,12 +78,12 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 3_464_000 picoseconds. - Weight::from_parts(3_715_000, 0) + // Minimum execution time: 2_935_000 picoseconds. + Weight::from_parts(3_097_000, 0) .saturating_add(Weight::from_parts(0, 0)) } /// Storage: `Preimage::PreimageFor` (r:1 w:1) - /// Proof: `Preimage::PreimageFor` (`max_values`: None, `max_size`: Some(4194344), added: 4196819, mode: `Measured`) + /// Proof: `Preimage::PreimageFor` (`max_values`: None, `max_size`: Some(4194344), added: 4196819, mode: `MaxEncodedLen`) /// Storage: `Preimage::StatusFor` (r:1 w:0) /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) /// Storage: `Preimage::RequestStatusFor` (r:1 w:1) @@ -93,16 +91,15 @@ impl pallet_scheduler::WeightInfo for WeightInfo { /// The range of component `s` is `[128, 4194304]`. fn service_task_fetched(s: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `246 + s * (1 ±0)` - // Estimated: `3711 + s * (1 ±0)` - // Minimum execution time: 18_427_000 picoseconds. - Weight::from_parts(18_762_000, 0) - .saturating_add(Weight::from_parts(0, 3711)) - // Standard Error: 17 - .saturating_add(Weight::from_parts(1_557, 0).saturating_mul(s.into())) + // Measured: `213 + s * (1 ±0)` + // Estimated: `4197809` + // Minimum execution time: 15_916_000 picoseconds. + Weight::from_parts(16_472_000, 0) + .saturating_add(Weight::from_parts(0, 4197809)) + // Standard Error: 142 + .saturating_add(Weight::from_parts(13_204, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) - .saturating_add(Weight::from_parts(0, 1).saturating_mul(s.into())) } /// Storage: `Scheduler::Lookup` (r:0 w:1) /// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) @@ -110,8 +107,8 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 5_194_000 picoseconds. - Weight::from_parts(5_374_000, 0) + // Minimum execution time: 4_171_000 picoseconds. + Weight::from_parts(4_333_000, 0) .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -119,24 +116,24 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 3_554_000 picoseconds. - Weight::from_parts(3_666_000, 0) + // Minimum execution time: 3_082_000 picoseconds. + Weight::from_parts(3_284_000, 0) .saturating_add(Weight::from_parts(0, 0)) } fn execute_dispatch_signed() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 2_477_000 picoseconds. - Weight::from_parts(2_617_000, 0) + // Minimum execution time: 1_943_000 picoseconds. + Weight::from_parts(2_110_000, 0) .saturating_add(Weight::from_parts(0, 0)) } fn execute_dispatch_unsigned() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 2_507_000 picoseconds. - Weight::from_parts(2_604_000, 0) + // Minimum execution time: 1_965_000 picoseconds. + Weight::from_parts(2_047_000, 0) .saturating_add(Weight::from_parts(0, 0)) } /// Storage: `Scheduler::Agenda` (r:1 w:1) @@ -146,16 +143,18 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `83 + s * (181 ±0)` // Estimated: `42632` - // Minimum execution time: 10_931_000 picoseconds. - Weight::from_parts(15_038_764, 0) + // Minimum execution time: 8_540_000 picoseconds. + Weight::from_parts(12_005_932, 0) .saturating_add(Weight::from_parts(0, 42632)) - // Standard Error: 2_079 - .saturating_add(Weight::from_parts(482_973, 0).saturating_mul(s.into())) + // Standard Error: 1_768 + .saturating_add(Weight::from_parts(313_546, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } /// Storage: `Scheduler::Agenda` (r:1 w:1) /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(39167), added: 41642, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Retries` (r:0 w:1) + /// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(38), added: 2513, mode: `MaxEncodedLen`) /// Storage: `Scheduler::Lookup` (r:0 w:1) /// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) /// The range of component `s` is `[1, 50]`. @@ -163,13 +162,13 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `83 + s * (181 ±0)` // Estimated: `42632` - // Minimum execution time: 16_383_000 picoseconds. - Weight::from_parts(16_256_564, 0) + // Minimum execution time: 13_766_000 picoseconds. + Weight::from_parts(14_503_459, 0) .saturating_add(Weight::from_parts(0, 42632)) - // Standard Error: 786 - .saturating_add(Weight::from_parts(718_645, 0).saturating_mul(s.into())) + // Standard Error: 1_808 + .saturating_add(Weight::from_parts(495_489, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(T::DbWeight::get().writes(3)) } /// Storage: `Scheduler::Lookup` (r:1 w:1) /// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) @@ -180,11 +179,11 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `266 + s * (189 ±0)` // Estimated: `42632` - // Minimum execution time: 14_590_000 picoseconds. - Weight::from_parts(19_492_127, 0) + // Minimum execution time: 11_223_000 picoseconds. + Weight::from_parts(15_993_707, 0) .saturating_add(Weight::from_parts(0, 42632)) - // Standard Error: 2_745 - .saturating_add(Weight::from_parts(509_883, 0).saturating_mul(s.into())) + // Standard Error: 3_161 + .saturating_add(Weight::from_parts(349_634, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -192,19 +191,98 @@ impl pallet_scheduler::WeightInfo for WeightInfo { /// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) /// Storage: `Scheduler::Agenda` (r:1 w:1) /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(39167), added: 41642, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Retries` (r:0 w:1) + /// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(38), added: 2513, mode: `MaxEncodedLen`) /// The range of component `s` is `[1, 50]`. fn cancel_named(s: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `290 + s * (189 ±0)` // Estimated: `42632` - // Minimum execution time: 18_014_000 picoseconds. - Weight::from_parts(18_682_628, 0) + // Minimum execution time: 15_833_000 picoseconds. + Weight::from_parts(17_229_195, 0) .saturating_add(Weight::from_parts(0, 42632)) - // Standard Error: 1_730 - .saturating_add(Weight::from_parts(749_440, 0).saturating_mul(s.into())) + // Standard Error: 2_194 + .saturating_add(Weight::from_parts(518_980, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(3)) + } + /// Storage: `Scheduler::Agenda` (r:1 w:1) + /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(39167), added: 41642, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Retries` (r:0 w:1) + /// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(38), added: 2513, mode: `MaxEncodedLen`) + /// The range of component `s` is `[1, 50]`. + fn schedule_retry(s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `123` + // Estimated: `42632` + // Minimum execution time: 8_589_000 picoseconds. + Weight::from_parts(9_308_498, 0) + .saturating_add(Weight::from_parts(0, 42632)) + // Standard Error: 603 + .saturating_add(Weight::from_parts(25_962, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } + /// Storage: `Scheduler::Agenda` (r:1 w:0) + /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(39167), added: 41642, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Retries` (r:0 w:1) + /// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(38), added: 2513, mode: `MaxEncodedLen`) + fn set_retry() -> Weight { + // Proof Size summary in bytes: + // Measured: `9133` + // Estimated: `42632` + // Minimum execution time: 22_227_000 picoseconds. + Weight::from_parts(23_065_000, 0) + .saturating_add(Weight::from_parts(0, 42632)) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: `Scheduler::Lookup` (r:1 w:0) + /// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Agenda` (r:1 w:0) + /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(39167), added: 41642, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Retries` (r:0 w:1) + /// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(38), added: 2513, mode: `MaxEncodedLen`) + fn set_retry_named() -> Weight { + // Proof Size summary in bytes: + // Measured: `9815` + // Estimated: `42632` + // Minimum execution time: 27_138_000 picoseconds. + Weight::from_parts(27_964_000, 0) + .saturating_add(Weight::from_parts(0, 42632)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: `Scheduler::Agenda` (r:1 w:0) + /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(39167), added: 41642, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Retries` (r:0 w:1) + /// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(38), added: 2513, mode: `MaxEncodedLen`) + fn cancel_retry() -> Weight { + // Proof Size summary in bytes: + // Measured: `9145` + // Estimated: `42632` + // Minimum execution time: 21_253_000 picoseconds. + Weight::from_parts(21_962_000, 0) + .saturating_add(Weight::from_parts(0, 42632)) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: `Scheduler::Lookup` (r:1 w:0) + /// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Agenda` (r:1 w:0) + /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(39167), added: 41642, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Retries` (r:0 w:1) + /// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(38), added: 2513, mode: `MaxEncodedLen`) + fn cancel_retry_named() -> Weight { + // Proof Size summary in bytes: + // Measured: `9827` + // Estimated: `42632` + // Minimum execution time: 26_658_000 picoseconds. + Weight::from_parts(27_644_000, 0) + .saturating_add(Weight::from_parts(0, 42632)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } } #[cfg(test)] @@ -242,7 +320,7 @@ mod tests { .max_extrinsic .unwrap_or_else(::max_value) .proof_size() - > 3711 + > 3407870 ); } #[test] @@ -293,4 +371,64 @@ mod tests { > 42632 ); } + #[test] + fn test_schedule_retry() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 42632 + ); + } + #[test] + fn test_set_retry() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 42632 + ); + } + #[test] + fn test_set_retry_named() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 42632 + ); + } + #[test] + fn test_cancel_retry() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 42632 + ); + } + #[test] + fn test_cancel_retry_named() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 42632 + ); + } } diff --git a/runtimes/peregrine/src/weights/pallet_session.rs b/runtimes/peregrine/src/weights/pallet_session.rs index 5750cb5d55..76c191a794 100644 --- a/runtimes/peregrine/src/weights/pallet_session.rs +++ b/runtimes/peregrine/src/weights/pallet_session.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_session` //! diff --git a/runtimes/peregrine/src/weights/pallet_sudo.rs b/runtimes/peregrine/src/weights/pallet_sudo.rs index e4d53c90da..0d3e848485 100644 --- a/runtimes/peregrine/src/weights/pallet_sudo.rs +++ b/runtimes/peregrine/src/weights/pallet_sudo.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_sudo` //! diff --git a/runtimes/peregrine/src/weights/pallet_technical_committee_collective.rs b/runtimes/peregrine/src/weights/pallet_technical_committee_collective.rs index 6a60e2d087..a4628f0131 100644 --- a/runtimes/peregrine/src/weights/pallet_technical_committee_collective.rs +++ b/runtimes/peregrine/src/weights/pallet_technical_committee_collective.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_technical_committee_collective` //! diff --git a/runtimes/peregrine/src/weights/pallet_technical_membership.rs b/runtimes/peregrine/src/weights/pallet_technical_membership.rs index 5260395192..c2ec3694f6 100644 --- a/runtimes/peregrine/src/weights/pallet_technical_membership.rs +++ b/runtimes/peregrine/src/weights/pallet_technical_membership.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_technical_membership` //! @@ -124,7 +124,7 @@ impl pallet_technical_membership::WeightInfo for Weight /// Storage: `TechnicalCommittee::Prime` (r:0 w:1) /// Proof: `TechnicalCommittee::Prime` (`max_values`: Some(1), `max_size`: None, mode: `Ignored`) /// The range of component `m` is `[1, 100]`. - fn reset_member(_m: u32, ) -> Weight { + fn reset_members(_m: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `237 + m * (64 ±0)` // Estimated: `990` @@ -177,7 +177,7 @@ impl pallet_technical_membership::WeightInfo for Weight /// Storage: `TechnicalCommittee::Prime` (r:0 w:1) /// Proof: `TechnicalCommittee::Prime` (`max_values`: Some(1), `max_size`: None, mode: `Ignored`) /// The range of component `m` is `[1, 100]`. - fn clear_prime(_m: u32, ) -> Weight { + fn clear_prime( ) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` diff --git a/runtimes/peregrine/src/weights/pallet_timestamp.rs b/runtimes/peregrine/src/weights/pallet_timestamp.rs index 73f24f1e27..7c9e92095e 100644 --- a/runtimes/peregrine/src/weights/pallet_timestamp.rs +++ b/runtimes/peregrine/src/weights/pallet_timestamp.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_timestamp` //! diff --git a/runtimes/peregrine/src/weights/pallet_tips.rs b/runtimes/peregrine/src/weights/pallet_tips.rs index 1dc95fd242..b9f7174ffe 100644 --- a/runtimes/peregrine/src/weights/pallet_tips.rs +++ b/runtimes/peregrine/src/weights/pallet_tips.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_tips` //! diff --git a/runtimes/peregrine/src/weights/pallet_token_gateway.rs b/runtimes/peregrine/src/weights/pallet_token_gateway.rs new file mode 100644 index 0000000000..6f27639b3d --- /dev/null +++ b/runtimes/peregrine/src/weights/pallet_token_gateway.rs @@ -0,0 +1,182 @@ +// KILT Blockchain – +// Copyright (C) 2025, KILT Foundation + +// The KILT Blockchain 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. + +// The KILT Blockchain 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 this program. If not, see . + +// If you feel like getting in touch with us, you can do so at + +//! Autogenerated weights for `pallet_token_gateway` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-05-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `rust-2`, CPU: `12th Gen Intel(R) Core(TM) i9-12900K` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 + +// Executed Command: +// frame-omni-bencher +// v1 +// benchmark +// pallet +// --pallet=pallet-token-gateway +// --extrinsic=* +// --genesis-builder=runtime +// --runtime=./target/release/wbuild/peregrine-runtime/peregrine_runtime.compact.compressed.wasm +// --header=HEADER-GPL +// --template=.maintain/runtime-weight-template.hbs +// --output=./runtimes/peregrine/src/weights/ + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_imports)] +#![allow(clippy::as_conversions)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weight functions for `pallet_token_gateway`. +pub struct WeightInfo(PhantomData); +impl pallet_token_gateway::WeightInfo for WeightInfo { + /// Storage: `Hyperbridge::HostParams` (r:1 w:0) + /// Proof: `Hyperbridge::HostParams` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Ismp::Nonce` (r:1 w:1) + /// Proof: `Ismp::Nonce` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TokenGateway::Precisions` (r:0 w:100) + /// Proof: `TokenGateway::Precisions` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TokenGateway::NativeAssets` (r:0 w:1) + /// Proof: `TokenGateway::NativeAssets` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TokenGateway::LocalAssets` (r:0 w:1) + /// Proof: `TokenGateway::LocalAssets` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TokenGateway::SupportedAssets` (r:0 w:1) + /// Proof: `TokenGateway::SupportedAssets` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: UNKNOWN KEY `0x52657175657374436f6d6d69746d656e74736dbf7451ee5809df8f986d7fa449` (r:1 w:1) + /// Proof: UNKNOWN KEY `0x52657175657374436f6d6d69746d656e74736dbf7451ee5809df8f986d7fa449` (r:1 w:1) + /// The range of component `x` is `[1, 100]`. + fn create_erc6160_asset(x: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `290` + // Estimated: `3755` + // Minimum execution time: 31_268_000 picoseconds. + Weight::from_parts(30_872_263, 0) + .saturating_add(Weight::from_parts(0, 3755)) + // Standard Error: 3_317 + .saturating_add(Weight::from_parts(1_558_070, 0).saturating_mul(x.into())) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(5)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(x.into()))) + } + /// Storage: `TokenGateway::SupportedAssets` (r:1 w:0) + /// Proof: `TokenGateway::SupportedAssets` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TokenGateway::NativeAssets` (r:1 w:0) + /// Proof: `TokenGateway::NativeAssets` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(132), added: 2607, mode: `MaxEncodedLen`) + /// Storage: `TokenGateway::Precisions` (r:1 w:0) + /// Proof: `TokenGateway::Precisions` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Ismp::Nonce` (r:1 w:1) + /// Proof: `Ismp::Nonce` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: UNKNOWN KEY `0x52657175657374436f6d6d69746d656e747387c60cc3838067ec43c7c32db115` (r:1 w:1) + /// Proof: UNKNOWN KEY `0x52657175657374436f6d6d69746d656e747387c60cc3838067ec43c7c32db115` (r:1 w:1) + fn teleport() -> Weight { + // Proof Size summary in bytes: + // Measured: `732` + // Estimated: `4197` + // Minimum execution time: 64_709_000 picoseconds. + Weight::from_parts(66_906_000, 0) + .saturating_add(Weight::from_parts(0, 4197)) + .saturating_add(T::DbWeight::get().reads(6)) + .saturating_add(T::DbWeight::get().writes(3)) + } + /// Storage: `TokenGateway::TokenGatewayAddresses` (r:0 w:1) + /// Proof: `TokenGateway::TokenGatewayAddresses` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `x` is `[1, 100]`. + fn set_token_gateway_addresses(_x: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_490_000 picoseconds. + Weight::from_parts(4_037_612, 0) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: `Hyperbridge::HostParams` (r:1 w:0) + /// Proof: `Hyperbridge::HostParams` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Ismp::Nonce` (r:1 w:1) + /// Proof: `Ismp::Nonce` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: UNKNOWN KEY `0x52657175657374436f6d6d69746d656e7473063ffee434bbc145cf1b300aac5e` (r:1 w:1) + /// Proof: UNKNOWN KEY `0x52657175657374436f6d6d69746d656e7473063ffee434bbc145cf1b300aac5e` (r:1 w:1) + fn update_erc6160_asset() -> Weight { + // Proof Size summary in bytes: + // Measured: `455` + // Estimated: `3920` + // Minimum execution time: 24_180_000 picoseconds. + Weight::from_parts(25_391_000, 0) + .saturating_add(Weight::from_parts(0, 3920)) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(2)) + } + /// Storage: `TokenGateway::Precisions` (r:0 w:100) + /// Proof: `TokenGateway::Precisions` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `x` is `[1, 100]`. + fn update_asset_precision(x: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_861_000 picoseconds. + Weight::from_parts(2_719_181, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 3_076 + .saturating_add(Weight::from_parts(1_528_011, 0).saturating_mul(x.into())) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(x.into()))) + } +} + +#[cfg(test)] +mod tests { + #[test] + fn test_create_erc6160_asset() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 3755 + ); + } + #[test] + fn test_teleport() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4197 + ); + } + #[test] + fn test_update_erc6160_asset() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 3920 + ); + } +} diff --git a/runtimes/peregrine/src/weights/pallet_treasury.rs b/runtimes/peregrine/src/weights/pallet_treasury.rs index 25afce436e..faa261f1e2 100644 --- a/runtimes/peregrine/src/weights/pallet_treasury.rs +++ b/runtimes/peregrine/src/weights/pallet_treasury.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_treasury` //! @@ -65,51 +65,6 @@ impl pallet_treasury::WeightInfo for WeightInfo { .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(3)) } - /// Storage: `Treasury::ProposalCount` (r:1 w:1) - /// Proof: `Treasury::ProposalCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `Treasury::Proposals` (r:0 w:1) - /// Proof: `Treasury::Proposals` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) - fn propose_spend() -> Weight { - // Proof Size summary in bytes: - // Measured: `111` - // Estimated: `1489` - // Minimum execution time: 25_458_000 picoseconds. - Weight::from_parts(25_878_000, 0) - .saturating_add(Weight::from_parts(0, 1489)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Treasury::Proposals` (r:1 w:1) - /// Proof: `Treasury::Proposals` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:2 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(132), added: 2607, mode: `MaxEncodedLen`) - fn reject_proposal() -> Weight { - // Proof Size summary in bytes: - // Measured: `376` - // Estimated: `6204` - // Minimum execution time: 36_141_000 picoseconds. - Weight::from_parts(36_934_000, 0) - .saturating_add(Weight::from_parts(0, 6204)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `Treasury::Proposals` (r:1 w:0) - /// Proof: `Treasury::Proposals` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) - /// Storage: `Treasury::Approvals` (r:1 w:1) - /// Proof: `Treasury::Approvals` (`max_values`: Some(1), `max_size`: Some(402), added: 897, mode: `MaxEncodedLen`) - /// The range of component `p` is `[0, 99]`. - fn approve_proposal(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `433 + p * (8 ±0)` - // Estimated: `3573` - // Minimum execution time: 9_838_000 picoseconds. - Weight::from_parts(12_745_248, 0) - .saturating_add(Weight::from_parts(0, 3573)) - // Standard Error: 944 - .saturating_add(Weight::from_parts(34_217, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } /// Storage: `Treasury::Approvals` (r:1 w:1) /// Proof: `Treasury::Approvals` (`max_values`: Some(1), `max_size`: Some(402), added: 897, mode: `MaxEncodedLen`) fn remove_approval() -> Weight { diff --git a/runtimes/peregrine/src/weights/pallet_utility.rs b/runtimes/peregrine/src/weights/pallet_utility.rs index 3e4e22e44d..a0e73a03a0 100644 --- a/runtimes/peregrine/src/weights/pallet_utility.rs +++ b/runtimes/peregrine/src/weights/pallet_utility.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_utility` //! diff --git a/runtimes/peregrine/src/weights/pallet_vesting.rs b/runtimes/peregrine/src/weights/pallet_vesting.rs index 71942e4b8e..72e5be851e 100644 --- a/runtimes/peregrine/src/weights/pallet_vesting.rs +++ b/runtimes/peregrine/src/weights/pallet_vesting.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_vesting` //! diff --git a/runtimes/peregrine/src/weights/pallet_web3_names.rs b/runtimes/peregrine/src/weights/pallet_web3_names.rs index 78c2107d14..91306dfaed 100644 --- a/runtimes/peregrine/src/weights/pallet_web3_names.rs +++ b/runtimes/peregrine/src/weights/pallet_web3_names.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_web3_names` //! diff --git a/runtimes/peregrine/src/weights/pallet_xcm.rs b/runtimes/peregrine/src/weights/pallet_xcm.rs index 99c9adc77e..5d7d2e1dbb 100644 --- a/runtimes/peregrine/src/weights/pallet_xcm.rs +++ b/runtimes/peregrine/src/weights/pallet_xcm.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_xcm` //! diff --git a/runtimes/peregrine/src/weights/parachain_staking.rs b/runtimes/peregrine/src/weights/parachain_staking.rs index af3ccc606d..13c6863a4b 100644 --- a/runtimes/peregrine/src/weights/parachain_staking.rs +++ b/runtimes/peregrine/src/weights/parachain_staking.rs @@ -16,7 +16,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `parachain_staking` //! diff --git a/runtimes/peregrine/src/weights/public_credentials.rs b/runtimes/peregrine/src/weights/public_credentials.rs index 45a7871524..3822802559 100644 --- a/runtimes/peregrine/src/weights/public_credentials.rs +++ b/runtimes/peregrine/src/weights/public_credentials.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `public_credentials` //! diff --git a/runtimes/peregrine/src/weights/rocksdb_weights.rs b/runtimes/peregrine/src/weights/rocksdb_weights.rs index 41cfa41b6c..8eb043b437 100644 --- a/runtimes/peregrine/src/weights/rocksdb_weights.rs +++ b/runtimes/peregrine/src/weights/rocksdb_weights.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION //! 4.0.0-dev DATE: 2024-03-29 (Y/M/D) diff --git a/runtimes/peregrine/src/xcm.rs b/runtimes/peregrine/src/xcm.rs index 8ebe478b23..dfb476bc8e 100644 --- a/runtimes/peregrine/src/xcm.rs +++ b/runtimes/peregrine/src/xcm.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use crate::{ kilt::{CheckingAccount, KiltToEKiltSwitchPallet}, @@ -48,6 +48,7 @@ use xcm_builder::{ use xcm_executor::{traits::WithOriginFilter, XcmExecutor}; use runtime_common::{ + constants, xcm_config::{ DenyReserveTransferToRelayChain, DenyThenTry, HeapSize, HereLocation, LocalAssetTransactor, LocationToAccountId, MaxAssetsIntoHolding, MaxInstructions, MaxStale, ParentLocation, ParentOrSiblings, @@ -128,7 +129,7 @@ pub type XcmBarrier = TrailingSetTopicAsId< /// 1. Have a fixed weight; /// 2. Cannot lead to another call being made; /// 3. Have a defined proof size weight, e.g. no unbounded vecs in call -/// parameters. +/// parameters. pub struct SafeCallFilter; impl Contains for SafeCallFilter { fn contains(c: &RuntimeCall) -> bool { @@ -254,6 +255,10 @@ impl xcm_executor::Config for XcmConfig { type SafeCallFilter = SafeCallFilter; type Aliasers = Nothing; type TransactionalProcessor = FrameTransactionalProcessor; + type HrmpChannelAcceptedHandler = (); + type HrmpChannelClosingHandler = (); + type HrmpNewChannelOpenRequestHandler = (); + type XcmRecorder = PolkadotXcm; } /// Allows only local `Signed` origins to be converted into `MultiLocation`s by @@ -312,6 +317,8 @@ impl cumulus_pallet_xcmp_queue::Config for Runtime { type PriceForSiblingDelivery = NoPriceForMessageDelivery; type MaxInboundSuspended = ConstU32<1_000>; type XcmpQueue = TransformOrigin; + type MaxActiveOutboundChannels = ConstU32<{ constants::pallet_xcmp_queue::MAX_ACTIVE_OUTBOUND_CHANNELS }>; + type MaxPageSize = ConstU32<{ constants::pallet_xcmp_queue::MAX_PAGE_SIZE }>; } impl pallet_message_queue::Config for Runtime { @@ -328,4 +335,5 @@ impl pallet_message_queue::Config for Runtime { type HeapSize = HeapSize; type MaxStale = MaxStale; type ServiceWeight = ServiceWeight; + type IdleMaxServiceWeight = (); } diff --git a/runtimes/spiritnet/Cargo.toml b/runtimes/spiritnet/Cargo.toml index c5558eec57..55e0d6ef23 100644 --- a/runtimes/spiritnet/Cargo.toml +++ b/runtimes/spiritnet/Cargo.toml @@ -19,10 +19,12 @@ sp-io = { workspace = true } [dependencies] # External dependencies +anyhow = { workspace = true } cfg-if = { workspace = true } log = { workspace = true } parity-scale-codec = { workspace = true, features = ["derive"] } scale-info = { workspace = true, features = ["derive"] } +serde_json = { workspace = true } hex-literal = { workspace = true, optional = true } @@ -32,6 +34,7 @@ kilt-runtime-api-did = { workspace = true } kilt-runtime-api-public-credentials = { workspace = true } kilt-runtime-api-staking = { workspace = true } pallet-asset-switch-runtime-api = { workspace = true } +pallet-bonded-coins-runtime-api = { workspace = true } pallet-transaction-payment-rpc-runtime-api = { workspace = true } # KILT pallets & primitives @@ -42,10 +45,10 @@ did = { workspace = true } kilt-runtime-api-dip-provider = { workspace = true } kilt-support = { workspace = true } pallet-asset-switch = { workspace = true } +pallet-bonded-coins = { workspace = true } pallet-deposit-storage = { workspace = true } pallet-did-lookup = { workspace = true } pallet-dip-provider = { workspace = true } -pallet-inflation = { workspace = true } pallet-migration = { workspace = true } pallet-web3-names = { workspace = true } parachain-staking = { workspace = true } @@ -62,6 +65,7 @@ sp-metadata-ir = { workspace = true } sp-offchain = { workspace = true } sp-runtime = { workspace = true } sp-session = { workspace = true } +sp-staking = { workspace = true } sp-std = { workspace = true } sp-transaction-pool = { workspace = true } sp-version = { workspace = true } @@ -94,7 +98,7 @@ pallet-vesting = { workspace = true } # Cumulus dependencies cumulus-pallet-aura-ext = { workspace = true } -cumulus-pallet-parachain-system = { workspace = true, features = ["parameterized-consensus-hook"] } +cumulus-pallet-parachain-system = { workspace = true } cumulus-pallet-xcm = { workspace = true } cumulus-pallet-xcmp-queue = { workspace = true } cumulus-primitives-aura = { workspace = true } @@ -120,6 +124,15 @@ frame-system-benchmarking = { workspace = true, optional = true } # Runtime tests frame-try-runtime = { workspace = true, optional = true } +# ISMP +ismp = { workspace = true } +ismp-parachain = { workspace = true } +ismp-parachain-runtime-api = { workspace = true } +pallet-hyperbridge = { workspace = true } +pallet-ismp = { workspace = true, features = ["unsigned"] } +pallet-ismp-runtime-api = { workspace = true } +pallet-token-gateway = { workspace = true } + [features] default = ["std"] fast-gov = ["runtime-common/fast-gov"] @@ -130,7 +143,6 @@ runtime-benchmarks = [ "cumulus-pallet-parachain-system/runtime-benchmarks", "cumulus-pallet-session-benchmarking/runtime-benchmarks", "cumulus-pallet-xcmp-queue/runtime-benchmarks", - "cumulus-primitives-core/runtime-benchmarks", "cumulus-primitives-utility/runtime-benchmarks", "delegation/runtime-benchmarks", "did/runtime-benchmarks", @@ -139,17 +151,18 @@ runtime-benchmarks = [ "frame-system-benchmarking/runtime-benchmarks", "frame-system/runtime-benchmarks", "hex-literal", + "ismp-parachain/runtime-benchmarks", "kilt-support/runtime-benchmarks", "pallet-asset-switch/runtime-benchmarks", "pallet-assets/runtime-benchmarks", "pallet-balances/runtime-benchmarks", + "pallet-bonded-coins/runtime-benchmarks", "pallet-collective/runtime-benchmarks", "pallet-democracy/runtime-benchmarks", "pallet-deposit-storage/runtime-benchmarks", "pallet-did-lookup/runtime-benchmarks", "pallet-dip-provider/runtime-benchmarks", "pallet-indices/runtime-benchmarks", - "pallet-inflation/runtime-benchmarks", "pallet-membership/runtime-benchmarks", "pallet-message-queue/runtime-benchmarks", "pallet-migration/runtime-benchmarks", @@ -159,13 +172,13 @@ runtime-benchmarks = [ "pallet-scheduler/runtime-benchmarks", "pallet-timestamp/runtime-benchmarks", "pallet-tips/runtime-benchmarks", + "pallet-token-gateway/runtime-benchmarks", "pallet-treasury/runtime-benchmarks", "pallet-utility/runtime-benchmarks", "pallet-vesting/runtime-benchmarks", "pallet-web3-names/runtime-benchmarks", "pallet-xcm/runtime-benchmarks", "parachain-staking/runtime-benchmarks", - "polkadot-runtime-common/runtime-benchmarks", "public-credentials/runtime-benchmarks", "runtime-common/runtime-benchmarks", "sp-runtime/runtime-benchmarks", @@ -194,6 +207,9 @@ std = [ "frame-system-rpc-runtime-api/std", "frame-system/std", "frame-try-runtime?/std", + "ismp-parachain-runtime-api/std", + "ismp-parachain/std", + "ismp/std", "kilt-runtime-api-did/std", "kilt-runtime-api-dip-provider/std", "kilt-runtime-api-public-credentials/std", @@ -206,13 +222,16 @@ std = [ "pallet-aura/std", "pallet-authorship/std", "pallet-balances/std", + "pallet-bonded-coins-runtime-api/std", + "pallet-bonded-coins/std", "pallet-collective/std", "pallet-democracy/std", "pallet-deposit-storage/std", "pallet-did-lookup/std", "pallet-dip-provider/std", "pallet-indices/std", - "pallet-inflation/std", + "pallet-ismp-runtime-api/std", + "pallet-ismp/std", "pallet-membership/std", "pallet-message-queue/std", "pallet-migration/std", @@ -223,6 +242,7 @@ std = [ "pallet-session/std", "pallet-timestamp/std", "pallet-tips/std", + "pallet-token-gateway/std", "pallet-transaction-payment-rpc-runtime-api/std", "pallet-transaction-payment/std", "pallet-treasury/std", @@ -268,19 +288,21 @@ try-runtime = [ "frame-support/try-runtime", "frame-system/try-runtime", "frame-try-runtime", + "ismp-parachain/try-runtime", "kilt-support/try-runtime", "pallet-asset-switch/try-runtime", "pallet-assets/try-runtime", "pallet-aura/try-runtime", "pallet-authorship/try-runtime", "pallet-balances/try-runtime", + "pallet-bonded-coins/try-runtime", "pallet-collective/try-runtime", "pallet-democracy/try-runtime", "pallet-deposit-storage/try-runtime", "pallet-did-lookup/try-runtime", "pallet-dip-provider/try-runtime", "pallet-indices/try-runtime", - "pallet-inflation/try-runtime", + "pallet-ismp/try-runtime", "pallet-membership/try-runtime", "pallet-message-queue/try-runtime", "pallet-migration/try-runtime", @@ -291,6 +313,7 @@ try-runtime = [ "pallet-session/try-runtime", "pallet-timestamp/try-runtime", "pallet-tips/try-runtime", + "pallet-token-gateway/try-runtime", "pallet-transaction-payment/try-runtime", "pallet-treasury/try-runtime", "pallet-utility/try-runtime", diff --git a/runtimes/spiritnet/build.rs b/runtimes/spiritnet/build.rs index 2e4bb4790d..a3f9602b84 100644 --- a/runtimes/spiritnet/build.rs +++ b/runtimes/spiritnet/build.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use substrate_wasm_builder::WasmBuilder; diff --git a/runtimes/spiritnet/src/benchmarks/asset_switch.rs b/runtimes/spiritnet/src/benchmarks/asset_switch.rs index 6ad7518913..8aafed33e5 100644 --- a/runtimes/spiritnet/src/benchmarks/asset_switch.rs +++ b/runtimes/spiritnet/src/benchmarks/asset_switch.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at // Required since the pallet `AssetTransactor` will try to deduct the XCM fee // from the user's balance, and the asset must exist. diff --git a/runtimes/spiritnet/src/benchmarks/governance.rs b/runtimes/spiritnet/src/benchmarks/governance.rs index fc47092bab..44321ada0c 100644 --- a/runtimes/spiritnet/src/benchmarks/governance.rs +++ b/runtimes/spiritnet/src/benchmarks/governance.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{pallet_prelude::OptionQuery, storage_alias, traits::ChangeMembers}; use runtime_common::AccountId; diff --git a/runtimes/spiritnet/src/benchmarks/mod.rs b/runtimes/spiritnet/src/benchmarks/mod.rs index 0c7c99f61c..90bf16c4c1 100644 --- a/runtimes/spiritnet/src/benchmarks/mod.rs +++ b/runtimes/spiritnet/src/benchmarks/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_benchmarking::{ define_benchmarks, whitelisted_caller, BenchmarkBatch, BenchmarkConfig, BenchmarkError, BenchmarkList, Benchmarking, @@ -37,11 +37,11 @@ use sp_std::{boxed::Box, vec, vec::Vec}; use xcm::v4::{Asset, Assets, Fungibility, Location}; use crate::{ - xcm::XcmConfig, AllPalletsWithSystem, AssetSwitchPool1, Attestation, Balances, Council, Ctype, Delegation, - Democracy, DepositStorage, Did, DidLookup, DipProvider, Fungibles, Indices, Inflation, MessageQueue, Migration, - Multisig, ParachainStaking, ParachainSystem, Preimage, Proxy, PublicCredentials, Runtime, RuntimeEvent, Scheduler, - System, TechnicalCommittee, TechnicalMembership, Timestamp, Tips, TipsMembership, Treasury, Utility, Vesting, - Web3Names, + xcm::XcmConfig, AllPalletsWithSystem, AssetSwitchPool1, Attestation, Balances, Collators, Council, Ctype, + Delegation, Democracy, DepositStorage, Did, DidLookup, DipProvider, Fungibles, Indices, IsmpParachain, + MessageQueue, Migration, Multisig, ParachainStaking, ParachainSystem, Preimage, Proxy, PublicCredentials, Runtime, + RuntimeEvent, Scheduler, System, TechnicalCommittee, TechnicalMembership, Timestamp, Tips, TipsMembership, + TokenGateway, Treasury, Utility, Vesting, Web3Names, }; pub(crate) mod asset_switch; @@ -56,6 +56,9 @@ use pallet_collective as pallet_technical_committee_collective; #[allow(unused_imports)] use pallet_membership as pallet_technical_membership; +#[allow(unused_imports)] +use pallet_membership as pallet_collators; + define_benchmarks!( [frame_system, frame_system_benchmarking::Pallet::] [pallet_timestamp, Timestamp] @@ -76,7 +79,6 @@ define_benchmarks!( [attestation, Attestation] [delegation, Delegation] [did, Did] - [pallet_inflation, Inflation] [public_credentials, PublicCredentials] [pallet_xcm, pallet_xcm::benchmarking::Pallet::] [pallet_migration, Migration] @@ -93,10 +95,13 @@ define_benchmarks!( // pallet_membership instances [pallet_membership, TipsMembership] [pallet_technical_membership, TechnicalMembership] + [pallet_collators, Collators] // pallet_did_lookup instances [pallet_did_lookup, DidLookup] // pallet_web3_names instances [pallet_web3_names, Web3Names] + [ismp_parachain, IsmpParachain] + [pallet_token_gateway, TokenGateway] ); impl pallet_xcm::benchmarking::Config for Runtime { diff --git a/runtimes/spiritnet/src/benchmarks/web3_names.rs b/runtimes/spiritnet/src/benchmarks/web3_names.rs index c81ef1564f..845f7dadc5 100644 --- a/runtimes/spiritnet/src/benchmarks/web3_names.rs +++ b/runtimes/spiritnet/src/benchmarks/web3_names.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at pub(crate) use web3_names_deployment::Web3NamesBenchmarkHelper; mod web3_names_deployment { diff --git a/runtimes/spiritnet/src/genesis_state.rs b/runtimes/spiritnet/src/genesis_state.rs new file mode 100644 index 0000000000..0ea700fac5 --- /dev/null +++ b/runtimes/spiritnet/src/genesis_state.rs @@ -0,0 +1,145 @@ +// KILT Blockchain – +// Copyright (C) 2025, KILT Foundation + +// The KILT Blockchain 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. + +// The KILT Blockchain 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 this program. If not, see . + +// If you feel like getting in touch with us, you can do so at +#![allow(clippy::expect_used)] + +use crate::{ + BalancesConfig, CouncilConfig, ParachainInfoConfig, ParachainStakingConfig, PolkadotXcmConfig, + RuntimeGenesisConfig, SessionConfig, SessionKeys, TechnicalCommitteeConfig, +}; +use runtime_common::{ + constants::{kilt_inflation_config, staking::MinCollatorStake, KILT, MAX_COLLATOR_STAKE}, + get_account_id_from_secret, get_public_key_from_secret, AccountId, AuthorityId, Balance, +}; +use sp_core::sr25519; +use sp_genesis_builder::PresetId; +use sp_std::{vec, vec::Vec}; + +pub const KILT_PARA_ID: u32 = 2_086; +const SAFE_XCM_VERSION: u32 = xcm::prelude::XCM_VERSION; +const NEW_RUNTIME_PRESET: &str = "new"; + +pub mod development { + + use super::*; + + pub fn generate_genesis_state() -> serde_json::Value { + let alice = ( + get_account_id_from_secret::("Alice"), + get_public_key_from_secret::("Alice"), + ); + let bob = ( + get_account_id_from_secret::("Bob"), + get_public_key_from_secret::("Bob"), + ); + let endowed_accounts = [ + alice.0.clone(), + bob.0.clone(), + get_account_id_from_secret::("Charlie"), + get_account_id_from_secret::("Dave"), + get_account_id_from_secret::("Eve"), + get_account_id_from_secret::("Ferdie"), + ]; + + let config = RuntimeGenesisConfig { + balances: BalancesConfig { + balances: endowed_accounts.map(|acc| (acc, 10_000_000 * KILT)).to_vec(), + }, + session: SessionConfig { + keys: [alice.clone(), bob.clone()] + .map(|(acc, key)| (acc.clone(), acc, SessionKeys { aura: key })) + .to_vec(), + ..Default::default() + }, + parachain_info: ParachainInfoConfig { + parachain_id: KILT_PARA_ID.into(), + ..Default::default() + }, + parachain_staking: ParachainStakingConfig { + stakers: [alice.clone(), bob.clone()] + .map(|(acc, _)| -> (AccountId, Option, Balance) { + (acc, None, 2u128.saturating_mul(MinCollatorStake::get())) + }) + .to_vec(), + inflation_config: kilt_inflation_config(), + max_candidate_stake: MAX_COLLATOR_STAKE, + }, + council: CouncilConfig { + members: [alice.clone(), bob.clone()].map(|(acc, _)| acc).to_vec(), + phantom: Default::default(), + }, + technical_committee: TechnicalCommitteeConfig { + members: [alice, bob].map(|(acc, _)| acc).to_vec(), + phantom: Default::default(), + }, + polkadot_xcm: PolkadotXcmConfig { + safe_xcm_version: Some(SAFE_XCM_VERSION), + ..Default::default() + }, + ..Default::default() + }; + + serde_json::to_value(config).expect("Could not build genesis config.") + } +} + +pub mod production { + use super::*; + + pub fn generate_genesis_state() -> serde_json::Value { + let config = RuntimeGenesisConfig { + parachain_info: ParachainInfoConfig { + parachain_id: KILT_PARA_ID.into(), + ..Default::default() + }, + polkadot_xcm: PolkadotXcmConfig { + safe_xcm_version: Some(SAFE_XCM_VERSION), + ..Default::default() + }, + ..Default::default() + }; + + serde_json::to_value(config).expect("Could not build genesis config.") + } +} + +/// Provides the JSON representation of predefined genesis config for given +/// `id`. +pub fn get_preset(id: &PresetId) -> Option> { + let patch = match id.try_into() { + Ok(sp_genesis_builder::DEV_RUNTIME_PRESET) | Ok(sp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET) => { + development::generate_genesis_state() + } + Ok(NEW_RUNTIME_PRESET) => production::generate_genesis_state(), + _ => return None, + }; + + Some( + serde_json::to_string(&patch) + .expect("serialization to json is expected to work. qed.") + .into_bytes(), + ) +} + +/// List of supported presets. +pub fn preset_names() -> Vec { + vec![ + PresetId::from(sp_genesis_builder::DEV_RUNTIME_PRESET), + PresetId::from(sp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET), + PresetId::from(NEW_RUNTIME_PRESET), + ] +} diff --git a/runtimes/spiritnet/src/governance.rs b/runtimes/spiritnet/src/governance.rs index b3edcb7171..bd8b8d730e 100644 --- a/runtimes/spiritnet/src/governance.rs +++ b/runtimes/spiritnet/src/governance.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ parameter_types, @@ -27,10 +27,10 @@ use frame_support::{ }; use frame_system::{EnsureRoot, EnsureSigned}; use runtime_common::{ - constants::{self, KILT}, + constants::{self}, pallet_id, AccountId, Balance, BlockWeights, Tippers, }; -use sp_core::{ConstBool, ConstU128, ConstU32, ConstU64}; +use sp_core::{ConstBool, ConstU32, ConstU64}; use sp_runtime::{traits::AccountIdLookup, Perbill, Permill}; use crate::{ @@ -96,19 +96,14 @@ parameter_types! { impl pallet_treasury::Config for Runtime { type PalletId = pallet_id::Treasury; type Currency = Balances; - type ApproveOrigin = RootOrCollectiveProportion; type RejectOrigin = RootOrCollectiveProportion; type RuntimeEvent = RuntimeEvent; - type OnSlash = Treasury; - type ProposalBond = ProposalBond; - type ProposalBondMinimum = ConstU128<{ 20 * KILT }>; - type ProposalBondMaximum = (); type SpendPeriod = ConstU64<{ constants::governance::SPEND_PERIOD }>; #[cfg(not(feature = "runtime-benchmarks"))] type SpendOrigin = frame_support::traits::NeverEnsureOrigin; #[cfg(feature = "runtime-benchmarks")] type SpendOrigin = - frame_system::EnsureWithSuccess, AccountId, ConstU128<{ Balance::max_value() }>>; + frame_system::EnsureWithSuccess, AccountId, sp_core::ConstU128<{ Balance::MAX }>>; type Burn = Burn; type BurnDestination = (); type SpendFunds = (); @@ -135,6 +130,7 @@ impl pallet_tips::Config for Runtime { type RuntimeEvent = RuntimeEvent; type WeightInfo = weights::pallet_tips::WeightInfo; type MaxTipAmount = constants::tips::MaxTipAmount; + type OnSlash = Treasury; } #[allow(clippy::arithmetic_side_effects)] @@ -161,7 +157,7 @@ impl pallet_collective::Config for Runtime { type SetMembersOrigin = EnsureRoot; } -type TechnicalCollective = pallet_collective::Instance2; +pub(crate) type TechnicalCollective = pallet_collective::Instance2; impl pallet_collective::Config for Runtime { type RuntimeOrigin = RuntimeOrigin; type MaxProposalWeight = MaxProposalWeight; @@ -175,7 +171,7 @@ impl pallet_collective::Config for Runtime { type SetMembersOrigin = EnsureRoot; } -type RootOrMoreThanHalfCouncil = RootOrCollectiveProportion; +pub(crate) type RootOrMoreThanHalfCouncil = RootOrCollectiveProportion; type TechnicalMembershipProvider = pallet_membership::Instance1; impl pallet_membership::Config for Runtime { diff --git a/runtimes/spiritnet/src/ismp.rs b/runtimes/spiritnet/src/ismp.rs new file mode 100644 index 0000000000..b4579db386 --- /dev/null +++ b/runtimes/spiritnet/src/ismp.rs @@ -0,0 +1,103 @@ +// KILT Blockchain – +// Copyright (C) 2025, KILT Foundation + +// The KILT Blockchain 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. + +// The KILT Blockchain 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 this program. If not, see . + +// If you feel like getting in touch with us, you can do so at + +use frame_support::parameter_types; +use ismp::{host::StateMachine, module::IsmpModule, router::IsmpRouter}; +use runtime_common::{AccountId, Balance}; +use sp_core::{ConstU8, Get}; +use sp_std::{boxed::Box, vec::Vec}; +use xcm::v4::Location; + +use crate::{ + governance::{RootOrCollectiveProportion, TechnicalCollective}, + Balances, Fungibles, Hyperbridge, Ismp, IsmpParachain, Runtime, RuntimeEvent, Timestamp, TokenGateway, Treasury, +}; + +parameter_types! { + // The hyperbridge parachain on Polkadot + pub const Coprocessor: Option = Some(StateMachine::Polkadot(3367)); + pub const HostStateMachine: StateMachine = StateMachine::Polkadot(2086); +} + +#[derive(Default)] +pub struct Router; + +impl IsmpRouter for Router { + fn module_for_id(&self, input: Vec) -> Result, anyhow::Error> { + match input.as_slice() { + pallet_hyperbridge::PALLET_HYPERBRIDGE_ID => Ok(Box::new(pallet_hyperbridge::Pallet::::default())), + id if TokenGateway::is_token_gateway(id) => { + Ok(Box::new(pallet_token_gateway::Pallet::::default())) + } + _ => Err(ismp::Error::ModuleNotFound(input))?, + } + } +} + +impl pallet_ismp::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type AdminOrigin = RootOrCollectiveProportion; + type HostStateMachine = HostStateMachine; + type TimestampProvider = Timestamp; + type Balance = Balance; + type Currency = Balances; + type Coprocessor = Coprocessor; + type ConsensusClients = (ismp_parachain::ParachainConsensusClient,); + type Router = Router; + + type WeightProvider = (); + type OffchainDB = (); +} + +impl pallet_hyperbridge::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type IsmpHost = Ismp; +} + +impl ismp_parachain::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type IsmpHost = Ismp; + type WeightInfo = crate::weights::ismp_parachain::WeightInfo; +} + +pub struct AssetAdmin; +impl Get for AssetAdmin { + fn get() -> AccountId { + Treasury::account_id() + } +} + +parameter_types! { + pub const NativeAssetId: Location = Location::here(); +} + +impl pallet_token_gateway::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type Dispatcher = Hyperbridge; + type Assets = Fungibles; + #[cfg(not(feature = "runtime-benchmarks"))] + type CreateOrigin = RootOrCollectiveProportion; + #[cfg(feature = "runtime-benchmarks")] + type CreateOrigin = frame_system::EnsureSigned; + type AssetAdmin = AssetAdmin; + type Decimals = ConstU8<15>; + type NativeCurrency = Balances; + type NativeAssetId = NativeAssetId; + type EvmToSubstrate = (); + type WeightInfo = crate::weights::pallet_token_gateway::WeightInfo; +} diff --git a/runtimes/spiritnet/src/kilt/credential.rs b/runtimes/spiritnet/src/kilt/credential.rs index 3d849a5fbe..8c4a197a92 100644 --- a/runtimes/spiritnet/src/kilt/credential.rs +++ b/runtimes/spiritnet/src/kilt/credential.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use delegation::DelegationAc; use did::{DidRawOrigin, EnsureDidOrigin}; diff --git a/runtimes/spiritnet/src/kilt/did.rs b/runtimes/spiritnet/src/kilt/did.rs index d6f06b3b89..04435b87fa 100644 --- a/runtimes/spiritnet/src/kilt/did.rs +++ b/runtimes/spiritnet/src/kilt/did.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use did::{ DeriveDidCallAuthorizationVerificationKeyRelationship, DeriveDidCallKeyRelationshipResult, DidRawOrigin, @@ -34,7 +34,7 @@ impl DeriveDidCallAuthorizationVerificationKeyRelationship for RuntimeCall { /// ensure that all calls have the same VerificationKeyRelationship fn single_key_relationship(calls: &[RuntimeCall]) -> DeriveDidCallKeyRelationshipResult { let init = calls - .get(0) + .first() .ok_or(RelationshipDeriveError::InvalidCallParameter)? .derive_verification_key_relationship()?; calls diff --git a/runtimes/spiritnet/src/kilt/dip/mod.rs b/runtimes/spiritnet/src/kilt/dip/mod.rs index 574cd4047b..18a5d57896 100644 --- a/runtimes/spiritnet/src/kilt/dip/mod.rs +++ b/runtimes/spiritnet/src/kilt/dip/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use did::{DidRawOrigin, EnsureDidOrigin}; use frame_system::EnsureSigned; diff --git a/runtimes/spiritnet/src/kilt/dip/runtime_api.rs b/runtimes/spiritnet/src/kilt/dip/runtime_api.rs index ef53e4daa8..2b022a2159 100644 --- a/runtimes/spiritnet/src/kilt/dip/runtime_api.rs +++ b/runtimes/spiritnet/src/kilt/dip/runtime_api.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use did::KeyIdOf; use pallet_did_lookup::linkable_account::LinkableAccountId; diff --git a/runtimes/spiritnet/src/kilt/mod.rs b/runtimes/spiritnet/src/kilt/mod.rs index 2786edc13b..078615c688 100644 --- a/runtimes/spiritnet/src/kilt/mod.rs +++ b/runtimes/spiritnet/src/kilt/mod.rs @@ -14,14 +14,12 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::parameter_types; use frame_system::{pallet_prelude::BlockNumberFor, EnsureRoot, EnsureSigned}; use pallet_asset_switch::xcm::{AccountId32ToAccountId32JunctionConverter, MatchesSwitchPairXcmFeeFungibleAsset}; -use runtime_common::{ - asset_switch::hooks::RestrictSwitchDestinationToSelf, AccountId, Balance, SendDustAndFeesToTreasury, -}; +use runtime_common::{asset_switch::hooks::RestrictSwitchDestinationToSelf, AccountId, Balance}; use xcm_builder::{FungiblesAdapter, NoChecking}; use crate::{ @@ -56,20 +54,12 @@ impl parachain_staking::Config for Runtime { type MaxUnstakeRequests = constants::staking::MaxUnstakeRequests; type NetworkRewardRate = constants::staking::NetworkRewardRate; type NetworkRewardStart = constants::staking::NetworkRewardStart; - type NetworkRewardBeneficiary = SendDustAndFeesToTreasury; + type NetworkRewardBeneficiary = (); type WeightInfo = weights::parachain_staking::WeightInfo; const BLOCKS_PER_YEAR: BlockNumberFor = constants::BLOCKS_PER_YEAR; } -impl pallet_inflation::Config for Runtime { - type Currency = Balances; - type InitialPeriodLength = constants::treasury::InitialPeriodLength; - type InitialPeriodReward = constants::treasury::InitialPeriodReward; - type Beneficiary = SendDustAndFeesToTreasury; - type WeightInfo = weights::pallet_inflation::WeightInfo; -} - parameter_types! { pub CheckingAccount: AccountId = PolkadotXcm::check_account(); } diff --git a/runtimes/spiritnet/src/lib.rs b/runtimes/spiritnet/src/lib.rs index 75423f1959..247a5e4ea1 100644 --- a/runtimes/spiritnet/src/lib.rs +++ b/runtimes/spiritnet/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! The KILT runtime. This can be compiled with `#[no_std]`, ready for Wasm. #![cfg_attr(not(feature = "std"), no_std)] @@ -52,7 +52,6 @@ mod governance; mod kilt; pub use kilt::Web3Name; mod migrations; -pub use migrations::RuntimeMigrations; mod parachain; mod runtime_apis; use runtime_apis::_InternalImplRuntimeApis; @@ -60,6 +59,8 @@ pub use runtime_apis::{api, RuntimeApi}; mod system; use sp_version::RuntimeVersion; pub use system::{SessionKeys, SS_58_PREFIX}; +pub mod genesis_state; +mod ismp; use crate::runtime_apis::RUNTIME_API_VERSION; mod weights; @@ -77,10 +78,10 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("kilt-spiritnet"), impl_name: create_runtime_str!("kilt-spiritnet"), authoring_version: 1, - spec_version: 11600, + spec_version: 11602, impl_version: 0, apis: RUNTIME_API_VERSION, - transaction_version: 8, + transaction_version: 12, state_version: 0, }; @@ -113,6 +114,7 @@ construct_runtime! { ParachainStaking: parachain_staking = 21, Authorship: pallet_authorship = 20, AuraExt: cumulus_pallet_aura_ext = 24, + Collators: pallet_membership:: = 25, Democracy: pallet_democracy = 30, Council: pallet_collective:: = 31, @@ -153,7 +155,7 @@ construct_runtime! { Delegation: delegation = 63, Did: did = 64, // DELETED: CrowdloanContributors = 65, - Inflation: pallet_inflation = 66, + // DELETED: Inflation: pallet_inflation = 66, DidLookup: pallet_did_lookup = 67, Web3Names: pallet_web3_names = 68, PublicCredentials: public_credentials = 69, @@ -175,6 +177,12 @@ construct_runtime! { // DmpQueue: cumulus_pallet_dmp_queue = 85, // Queue and pass DMP messages on to be executed. MessageQueue: pallet_message_queue = 86, + + // ISMP + Ismp: pallet_ismp = 90, + Hyperbridge: pallet_hyperbridge = 91, + IsmpParachain: ismp_parachain = 92, + TokenGateway: pallet_token_gateway = 93, } } @@ -191,7 +199,7 @@ pub type Executive = frame_executive::Executive< Runtime, // Executes pallet hooks in the order of definition in construct_runtime AllPalletsWithSystem, - RuntimeMigrations, + crate::migrations::RuntimeMigrations, >; /// Block header type as expected by this runtime. diff --git a/runtimes/spiritnet/src/migrations/mod.rs b/runtimes/spiritnet/src/migrations/mod.rs index 28758a18d4..5856e33195 100644 --- a/runtimes/spiritnet/src/migrations/mod.rs +++ b/runtimes/spiritnet/src/migrations/mod.rs @@ -14,20 +14,27 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::parameter_types; use runtime_common::constants; -use crate::{weights, Balances, Runtime, RuntimeEvent}; +use crate::{weights, Balances, ParachainSystem, Runtime, RuntimeEvent}; parameter_types! { + pub const Inflation: &'static str = "Inflation"; pub const DmpPalletName: &'static str = "DmpQueue"; } +impl cumulus_pallet_xcmp_queue::migration::v5::V5Config for Runtime { + type ChannelList = ParachainSystem; +} + pub type RuntimeMigrations = ( pallet_xcm::migration::MigrateToLatestXcmVersion, frame_support::migrations::RemovePallet::DbWeight>, + cumulus_pallet_xcmp_queue::migration::v5::MigrateV4ToV5, + frame_support::migrations::RemovePallet::DbWeight>, ); impl pallet_migration::Config for Runtime { diff --git a/runtimes/spiritnet/src/parachain.rs b/runtimes/spiritnet/src/parachain.rs index 01975e4298..c83570bd19 100644 --- a/runtimes/spiritnet/src/parachain.rs +++ b/runtimes/spiritnet/src/parachain.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use cumulus_pallet_aura_ext::FixedVelocityConsensusHook; use cumulus_pallet_parachain_system::RelayNumberMonotonicallyIncreases; diff --git a/runtimes/spiritnet/src/runtime_apis.rs b/runtimes/spiritnet/src/runtime_apis.rs index 143f0fa784..c6ef1b0adb 100644 --- a/runtimes/spiritnet/src/runtime_apis.rs +++ b/runtimes/spiritnet/src/runtime_apis.rs @@ -4,14 +4,20 @@ use ::xcm::{ v4::{Asset, AssetId, Location}, VersionedAssetId, VersionedLocation, VersionedXcm, }; +use cumulus_pallet_parachain_system::RelayChainState; use cumulus_primitives_aura::Slot; use cumulus_primitives_core::CollationInfo; use frame_support::{ - genesis_builder_helper::{build_config, create_default_config}, + genesis_builder_helper::{build_state, get_preset}, pallet_prelude::{TransactionSource, TransactionValidity}, traits::PalletInfoAccess, weights::Weight, }; +use ismp::{ + consensus::{ConsensusClientId, StateMachineHeight, StateMachineId}, + host::StateMachine, + router::{Request, Response}, +}; use kilt_runtime_api_did::RawDidLinkedInfo; use kilt_support::traits::ItemFilter; use pallet_asset_switch::xcm::AccountId32ToAccountId32JunctionConverter; @@ -31,7 +37,7 @@ use runtime_common::{ AccountId, AuthorityId, Balance, BlockNumber, DidIdentifier, Hash, Nonce, }; use sp_api::impl_runtime_apis; -use sp_core::OpaqueMetadata; +use sp_core::{OpaqueMetadata, H256}; use sp_inherents::{CheckInherentsResult, InherentData}; use sp_metadata_ir::RuntimeApiMetadataIR; use sp_runtime::{ @@ -45,8 +51,8 @@ use crate::{ kilt::{DipProofError, DipProofRequest}, parachain::ConsensusHook, xcm::UniversalLocation, - AssetSwitchPool1, Aura, Block, Executive, InherentDataExt, ParachainStaking, ParachainSystem, Runtime, RuntimeCall, - RuntimeGenesisConfig, SessionKeys, TransactionPayment, Web3Name, VERSION, + AssetSwitchPool1, Block, Executive, InherentDataExt, IsmpParachain, ParachainStaking, ParachainSystem, Runtime, + RuntimeCall, RuntimeGenesisConfig, SessionKeys, TransactionPayment, Web3Name, VERSION, }; // This is necessary since by default `RUNTIME_API_VERSIONS` generated by @@ -79,7 +85,7 @@ impl_runtime_apis! { Executive::execute_block(block); } - fn initialize_block(header: &::Header) { + fn initialize_block(header: &::Header) -> sp_runtime::ExtrinsicInclusionMode { Executive::initialize_block(header) } } @@ -201,7 +207,7 @@ impl_runtime_apis! { } fn authorities() -> Vec { - Aura::authorities().into_inner() + pallet_aura::Authorities::::get().into_inner() } } @@ -221,15 +227,17 @@ impl_runtime_apis! { } impl sp_genesis_builder::GenesisBuilder for Runtime { - - fn create_default_config() -> Vec { - create_default_config::() + fn build_state(config: Vec) -> sp_genesis_builder::Result { + build_state::(config) } - fn build_config(config: Vec) -> sp_genesis_builder::Result { - build_config::(config) + fn get_preset(id: &Option) -> Option> { + get_preset::(id, crate::genesis_state::get_preset) } + fn preset_names() -> Vec { + crate::genesis_state::preset_names() + } } impl kilt_runtime_api_did::Did< @@ -452,6 +460,63 @@ impl_runtime_apis! { } } + + impl pallet_ismp_runtime_api::IsmpRuntimeApi::Hash> for Runtime { + fn host_state_machine() -> StateMachine { + ::HostStateMachine::get() + } + + fn challenge_period(state_machine_id: StateMachineId) -> Option { + pallet_ismp::Pallet::::challenge_period(state_machine_id) + } + + /// Fetch all ISMP events in the block, should only be called from runtime-api. + fn block_events() -> Vec<::ismp::events::Event> { + pallet_ismp::Pallet::::block_events() + } + + /// Fetch all ISMP events and their extrinsic metadata, should only be called from runtime-api. + fn block_events_with_metadata() -> Vec<(::ismp::events::Event, Option)> { + pallet_ismp::Pallet::::block_events_with_metadata() + } + + /// Return the scale encoded consensus state + fn consensus_state(id: ConsensusClientId) -> Option> { + pallet_ismp::Pallet::::consensus_states(id) + } + + /// Return the timestamp this client was last updated in seconds + fn state_machine_update_time(height: StateMachineHeight) -> Option { + pallet_ismp::Pallet::::state_machine_update_time(height) + } + + /// Return the latest height of the state machine + fn latest_state_machine_height(id: StateMachineId) -> Option { + pallet_ismp::Pallet::::latest_state_machine_height(id) + } + + /// Get actual requests + fn requests(commitments: Vec) -> Vec { + pallet_ismp::Pallet::::requests(commitments) + } + + /// Get actual requests + fn responses(commitments: Vec) -> Vec { + pallet_ismp::Pallet::::responses(commitments) + } + } + + impl ismp_parachain_runtime_api::IsmpParachainApi for Runtime { + fn para_ids() -> Vec { + IsmpParachain::para_ids() + } + + fn current_relay_chain_state() -> RelayChainState { + IsmpParachain::current_relay_chain_state() + } + } + + #[cfg(feature = "runtime-benchmarks")] impl frame_benchmarking::Benchmark for Runtime { fn benchmark_metadata(extra: bool) -> ( diff --git a/runtimes/spiritnet/src/system/mod.rs b/runtimes/spiritnet/src/system/mod.rs index b14c531a82..011c867b29 100644 --- a/runtimes/spiritnet/src/system/mod.rs +++ b/runtimes/spiritnet/src/system/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ parameter_types, @@ -26,6 +26,7 @@ use runtime_common::{ asset_switch::EnsureRootAsTreasury, constants, fees::{ToAuthorCredit, WeightToFee}, + session::{FixedLengthSession, SessionManager}, AccountId, AuthorityId, Balance, BlockHashCount, BlockLength, BlockWeights, FeeSplit, Hash, Nonce, SendDustAndFeesToTreasury, SlowAdjustingFeeUpdate, }; @@ -41,9 +42,9 @@ use sp_weights::ConstantMultiplier; use xcm::v4::Location; use crate::{ - governance::{CouncilCollective, RootOrCollectiveProportion}, - weights, Aura, Balances, Block, OriginCaller, PalletInfo, ParachainStaking, Preimage, Runtime, RuntimeCall, - RuntimeEvent, RuntimeFreezeReason, RuntimeHoldReason, RuntimeOrigin, RuntimeTask, System, VERSION, + governance::{CouncilCollective, RootOrCollectiveProportion, RootOrMoreThanHalfCouncil}, + weights, Aura, Balances, Block, OriginCaller, PalletInfo, Preimage, Runtime, RuntimeCall, RuntimeEvent, + RuntimeFreezeReason, RuntimeHoldReason, RuntimeOrigin, RuntimeTask, System, VERSION, }; pub(crate) mod proxy; @@ -93,7 +94,12 @@ impl frame_system::Config for Runtime { type SS58Prefix = ConstU16; /// The set code logic type OnSetCode = cumulus_pallet_parachain_system::ParachainSetCode; - type MaxConsumers = frame_support::traits::ConstU32<16>; + type MaxConsumers = frame_support::traits::ConstU32<100>; + type MultiBlockMigrator = (); + type PostInherents = (); + type PostTransactions = (); + type PreInherents = (); + type SingleBlockMigrations = (); } impl pallet_timestamp::Config for Runtime { @@ -145,9 +151,9 @@ impl pallet_session::Config for Runtime { type RuntimeEvent = RuntimeEvent; type ValidatorId = AccountId; type ValidatorIdOf = ConvertInto; - type ShouldEndSession = ParachainStaking; - type NextSessionRotation = ParachainStaking; - type SessionManager = ParachainStaking; + type ShouldEndSession = FixedLengthSession; + type NextSessionRotation = FixedLengthSession; + type SessionManager = SessionManager; type SessionHandler = ::KeyTypeIdProviders; type Keys = SessionKeys; type WeightInfo = weights::pallet_session::WeightInfo; @@ -159,11 +165,12 @@ impl pallet_aura::Config for Runtime { type DisabledValidators = (); type MaxAuthorities = ConstU32<{ constants::staking::MAX_CANDIDATES }>; type AllowMultipleBlocksPerSlot = ConstBool; + type SlotDuration = ConstU64<{ constants::SLOT_DURATION }>; } impl pallet_authorship::Config for Runtime { type FindAuthor = pallet_session::FindAccountFromAuthorIndex; - type EventHandler = ParachainStaking; + type EventHandler = (); } impl pallet_utility::Config for Runtime { @@ -274,3 +281,23 @@ impl pallet_scheduler::Config for Runtime { type OriginPrivilegeCmp = OriginPrivilegeCmp; type Preimages = Preimage; } + +type CollatorMembershipProvider = pallet_membership::Instance3; +impl pallet_membership::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type AddOrigin = RootOrMoreThanHalfCouncil; + type RemoveOrigin = RootOrMoreThanHalfCouncil; + type SwapOrigin = RootOrMoreThanHalfCouncil; + type ResetOrigin = RootOrMoreThanHalfCouncil; + #[cfg(not(feature = "runtime-benchmarks"))] + type PrimeOrigin = frame_support::traits::NeverEnsureOrigin; + #[cfg(feature = "runtime-benchmarks")] + type PrimeOrigin = frame_system::EnsureSigned; + type MembershipInitialized = (); + #[cfg(feature = "runtime-benchmarks")] + type MembershipChanged = crate::benchmarks::governance::MockMembershipChangedForBenchmarks; + #[cfg(not(feature = "runtime-benchmarks"))] + type MembershipChanged = (); + type MaxMembers = constants::staking::MaxCollators; + type WeightInfo = weights::pallet_collators::WeightInfo; +} diff --git a/runtimes/spiritnet/src/system/proxy.rs b/runtimes/spiritnet/src/system/proxy.rs index 11c0d816df..4b4a2b37ae 100644 --- a/runtimes/spiritnet/src/system/proxy.rs +++ b/runtimes/spiritnet/src/system/proxy.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::traits::InstanceFilter; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; diff --git a/runtimes/spiritnet/src/tests.rs b/runtimes/spiritnet/src/tests.rs index b5317ffc40..fffce9ed3c 100644 --- a/runtimes/spiritnet/src/tests.rs +++ b/runtimes/spiritnet/src/tests.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{traits::Currency, BoundedVec}; use pallet_dip_provider::IdentityCommitmentOf; @@ -183,7 +183,7 @@ fn test_derive_did_key_lookup() { RuntimeCall::DidLookup(pallet_did_lookup::Call::associate_account { req: AssociateAccountRequest::Polkadot( AccountId::new([1u8; 32]), - sp_runtime::MultiSignature::from(sp_core::ed25519::Signature([0; 64])) + sp_runtime::MultiSignature::from(sp_core::ed25519::Signature::from_raw([0; 64])) ), expiration: BlockNumber::default(), }) diff --git a/runtimes/spiritnet/src/weights/attestation.rs b/runtimes/spiritnet/src/weights/attestation.rs index 2ac68dc76e..36ff980836 100644 --- a/runtimes/spiritnet/src/weights/attestation.rs +++ b/runtimes/spiritnet/src/weights/attestation.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `attestation` //! diff --git a/runtimes/spiritnet/src/weights/ctype.rs b/runtimes/spiritnet/src/weights/ctype.rs index 656b4dbe53..279550b394 100644 --- a/runtimes/spiritnet/src/weights/ctype.rs +++ b/runtimes/spiritnet/src/weights/ctype.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `ctype` //! diff --git a/runtimes/spiritnet/src/weights/cumulus_pallet_parachain_system.rs b/runtimes/spiritnet/src/weights/cumulus_pallet_parachain_system.rs index 0a21077ceb..f27329be36 100644 --- a/runtimes/spiritnet/src/weights/cumulus_pallet_parachain_system.rs +++ b/runtimes/spiritnet/src/weights/cumulus_pallet_parachain_system.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `cumulus_pallet_parachain_system` //! diff --git a/runtimes/spiritnet/src/weights/delegation.rs b/runtimes/spiritnet/src/weights/delegation.rs index 60d8fcf7a8..5d5d877616 100644 --- a/runtimes/spiritnet/src/weights/delegation.rs +++ b/runtimes/spiritnet/src/weights/delegation.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `delegation` //! diff --git a/runtimes/spiritnet/src/weights/did.rs b/runtimes/spiritnet/src/weights/did.rs index 7a4979e4a8..155ab8523c 100644 --- a/runtimes/spiritnet/src/weights/did.rs +++ b/runtimes/spiritnet/src/weights/did.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `did` //! diff --git a/runtimes/spiritnet/src/weights/frame_system.rs b/runtimes/spiritnet/src/weights/frame_system.rs index 490c1d030d..05ba542d75 100644 --- a/runtimes/spiritnet/src/weights/frame_system.rs +++ b/runtimes/spiritnet/src/weights/frame_system.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `frame_system` //! diff --git a/runtimes/spiritnet/src/weights/ismp_parachain.rs b/runtimes/spiritnet/src/weights/ismp_parachain.rs new file mode 100644 index 0000000000..dafd48f957 --- /dev/null +++ b/runtimes/spiritnet/src/weights/ismp_parachain.rs @@ -0,0 +1,134 @@ +// KILT Blockchain – +// Copyright (C) 2025, KILT Foundation + +// The KILT Blockchain 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. + +// The KILT Blockchain 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 this program. If not, see . + +// If you feel like getting in touch with us, you can do so at + +//! Autogenerated weights for `ismp_parachain` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-05-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `rust-2`, CPU: `12th Gen Intel(R) Core(TM) i9-12900K` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 + +// Executed Command: +// frame-omni-bencher +// v1 +// benchmark +// pallet +// --pallet=ismp-parachain +// --extrinsic=* +// --genesis-builder=runtime +// --runtime=./target/release/wbuild/spiritnet-runtime/spiritnet_runtime.compact.compressed.wasm +// --header=HEADER-GPL +// --template=.maintain/runtime-weight-template.hbs +// --output=./runtimes/spiritnet/src/weights/ + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_imports)] +#![allow(clippy::as_conversions)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weight functions for `ismp_parachain`. +pub struct WeightInfo(PhantomData); +impl ismp_parachain::WeightInfo for WeightInfo { + /// Storage: `IsmpParachain::Parachains` (r:0 w:100) + /// Proof: `IsmpParachain::Parachains` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) + /// Storage: `Ismp::ChallengePeriod` (r:0 w:100) + /// Proof: `Ismp::ChallengePeriod` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `n` is `[1, 100]`. + fn add_parachain(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 6_230_000 picoseconds. + Weight::from_parts(5_017_544, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 3_189 + .saturating_add(Weight::from_parts(1_970_967, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(n.into()))) + } + /// Storage: `IsmpParachain::Parachains` (r:0 w:5) + /// Proof: `IsmpParachain::Parachains` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) + /// The range of component `n` is `[1, 100]`. + fn remove_parachain(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 7_446_000 picoseconds. + Weight::from_parts(8_612_220, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 490 + .saturating_add(Weight::from_parts(12_386, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().writes(5)) + } + /// Storage: `IsmpParachain::ConsensusUpdated` (r:1 w:1) + /// Proof: `IsmpParachain::ConsensusUpdated` (`max_values`: Some(1), `max_size`: Some(1), added: 496, mode: `MaxEncodedLen`) + /// Storage: `Ismp::ConsensusStateClient` (r:1 w:0) + /// Proof: `Ismp::ConsensusStateClient` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Ismp::ConsensusStates` (r:1 w:1) + /// Proof: `Ismp::ConsensusStates` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Ismp::FrozenConsensusClients` (r:1 w:0) + /// Proof: `Ismp::FrozenConsensusClients` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Timestamp::Now` (r:1 w:0) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + /// Storage: `Ismp::UnbondingPeriod` (r:1 w:0) + /// Proof: `Ismp::UnbondingPeriod` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Ismp::ConsensusClientUpdateTime` (r:1 w:1) + /// Proof: `Ismp::ConsensusClientUpdateTime` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `IsmpParachain::RelayChainStateCommitments` (r:1 w:0) + /// Proof: `IsmpParachain::RelayChainStateCommitments` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) + /// Storage: `ParachainSystem::ValidationData` (r:1 w:0) + /// Proof: `ParachainSystem::ValidationData` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `IsmpParachain::Parachains` (r:2 w:0) + /// Proof: `IsmpParachain::Parachains` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) + /// Storage: `Ismp::LatestStateMachineHeight` (r:1 w:1) + /// Proof: `Ismp::LatestStateMachineHeight` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Ismp::StateCommitments` (r:1 w:1) + /// Proof: `Ismp::StateCommitments` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Ismp::StateMachineUpdateTime` (r:0 w:1) + /// Proof: `Ismp::StateMachineUpdateTime` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: UNKNOWN KEY `0x7374617465859b5c7d03c68da7d492f1cc906e886ce9b49cc592d063993bdd8c` (r:1 w:1) + /// Proof: UNKNOWN KEY `0x7374617465859b5c7d03c68da7d492f1cc906e886ce9b49cc592d063993bdd8c` (r:1 w:1) + fn update_parachain_consensus() -> Weight { + // Proof Size summary in bytes: + // Measured: `753` + // Estimated: `5964` + // Minimum execution time: 75_663_000 picoseconds. + Weight::from_parts(77_561_000, 0) + .saturating_add(Weight::from_parts(0, 5964)) + .saturating_add(T::DbWeight::get().reads(14)) + .saturating_add(T::DbWeight::get().writes(7)) + } +} + +#[cfg(test)] +mod tests { + #[test] + fn test_update_parachain_consensus() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 5964 + ); + } +} diff --git a/runtimes/spiritnet/src/weights/mod.rs b/runtimes/spiritnet/src/weights/mod.rs index 154ec2bf46..ae474c2037 100644 --- a/runtimes/spiritnet/src/weights/mod.rs +++ b/runtimes/spiritnet/src/weights/mod.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at #![allow(unused_doc_comments)] pub mod attestation; @@ -23,16 +23,17 @@ pub mod cumulus_pallet_parachain_system; pub mod delegation; pub mod did; pub mod frame_system; +pub mod ismp_parachain; pub mod pallet_asset_switch; pub mod pallet_assets; pub mod pallet_balances; +pub mod pallet_collators; pub mod pallet_collective; pub mod pallet_democracy; pub mod pallet_deposit_storage; pub mod pallet_did_lookup; pub mod pallet_dip_provider; pub mod pallet_indices; -pub mod pallet_inflation; pub mod pallet_membership; pub mod pallet_message_queue; pub mod pallet_migration; @@ -45,6 +46,7 @@ pub mod pallet_technical_committee_collective; pub mod pallet_technical_membership; pub mod pallet_timestamp; pub mod pallet_tips; +pub mod pallet_token_gateway; pub mod pallet_treasury; pub mod pallet_utility; pub mod pallet_vesting; diff --git a/runtimes/spiritnet/src/weights/pallet_assets.rs b/runtimes/spiritnet/src/weights/pallet_assets.rs index 5717f115b8..5d30cda3ac 100644 --- a/runtimes/spiritnet/src/weights/pallet_assets.rs +++ b/runtimes/spiritnet/src/weights/pallet_assets.rs @@ -1,26 +1,25 @@ + //! Autogenerated weights for `pallet_assets` //! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 33.0.0 -//! DATE: 2024-08-26, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-05-05, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `rust-2`, CPU: `12th Gen Intel(R) Core(TM) i9-12900K` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("spiritnet-dev"), DB CACHE: 1024 +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 // Executed Command: -// ./target/debug/kilt-parachain +// frame-omni-bencher +// v1 // benchmark // pallet -// --chain=spiritnet-dev -// --steps=50 -// --repeat=20 // --pallet=pallet-assets // --extrinsic=* -// --execution=wasm -// --wasm-execution=compiled -// --heap-pages=4096 -// --output=./runtimes/spiritnet/src/weights/ +// --genesis-builder=runtime +// --runtime=./target/release/wbuild/spiritnet-runtime/spiritnet_runtime.compact.compressed.wasm +// --header=HEADER-GPL // --template=.maintain/runtime-weight-template.hbs +// --output=./runtimes/spiritnet/src/weights/ #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_imports)] @@ -34,26 +33,30 @@ pub struct WeightInfo(PhantomData); impl pallet_assets::WeightInfo for WeightInfo { /// Storage: `Fungibles::Asset` (r:1 w:1) /// Proof: `Fungibles::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) + /// Storage: `Fungibles::NextAssetId` (r:1 w:0) + /// Proof: `Fungibles::NextAssetId` (`max_values`: Some(1), `max_size`: Some(602), added: 1097, mode: `MaxEncodedLen`) fn create() -> Weight { // Proof Size summary in bytes: // Measured: `42` // Estimated: `4273` - // Minimum execution time: 670_284_000 picoseconds. - Weight::from_parts(830_855_000, 0) + // Minimum execution time: 10_247_000 picoseconds. + Weight::from_parts(10_566_000, 0) .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } /// Storage: `Fungibles::Asset` (r:1 w:1) /// Proof: `Fungibles::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) + /// Storage: `Fungibles::NextAssetId` (r:1 w:0) + /// Proof: `Fungibles::NextAssetId` (`max_values`: Some(1), `max_size`: Some(602), added: 1097, mode: `MaxEncodedLen`) fn force_create() -> Weight { // Proof Size summary in bytes: // Measured: `42` // Estimated: `4273` - // Minimum execution time: 699_768_000 picoseconds. - Weight::from_parts(784_398_000, 0) + // Minimum execution time: 9_923_000 picoseconds. + Weight::from_parts(10_556_000, 0) .saturating_add(Weight::from_parts(0, 4273)) - .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } /// Storage: `Fungibles::Asset` (r:1 w:1) @@ -62,8 +65,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `312` // Estimated: `4273` - // Minimum execution time: 697_104_000 picoseconds. - Weight::from_parts(761_710_000, 0) + // Minimum execution time: 9_708_000 picoseconds. + Weight::from_parts(10_212_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -79,11 +82,11 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0 + c * (212 ±0)` // Estimated: `4273 + c * (3207 ±0)` - // Minimum execution time: 929_714_000 picoseconds. - Weight::from_parts(2_652_804_841, 0) + // Minimum execution time: 13_149_000 picoseconds. + Weight::from_parts(13_489_000, 0) .saturating_add(Weight::from_parts(0, 4273)) - // Standard Error: 6_621_016 - .saturating_add(Weight::from_parts(178_537_863, 0).saturating_mul(c.into())) + // Standard Error: 216_226 + .saturating_add(Weight::from_parts(13_743_181, 0).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)) @@ -99,11 +102,11 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `447 + a * (86 ±0)` // Estimated: `4273 + a * (3221 ±0)` - // Minimum execution time: 183_722_000 picoseconds. - Weight::from_parts(185_234_000, 0) + // Minimum execution time: 12_868_000 picoseconds. + Weight::from_parts(13_303_000, 0) .saturating_add(Weight::from_parts(0, 4273)) - // Standard Error: 309_726 - .saturating_add(Weight::from_parts(68_577_378, 0).saturating_mul(a.into())) + // Standard Error: 3_646 + .saturating_add(Weight::from_parts(4_123_299, 0).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)) @@ -118,8 +121,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `278` // Estimated: `4273` - // Minimum execution time: 158_427_000 picoseconds. - Weight::from_parts(160_668_000, 0) + // Minimum execution time: 10_934_000 picoseconds. + Weight::from_parts(11_412_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) @@ -132,8 +135,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `278` // Estimated: `4273` - // Minimum execution time: 282_826_000 picoseconds. - Weight::from_parts(287_541_000, 0) + // Minimum execution time: 19_188_000 picoseconds. + Weight::from_parts(19_669_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) @@ -146,8 +149,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `384` // Estimated: `4273` - // Minimum execution time: 390_440_000 picoseconds. - Weight::from_parts(398_994_000, 0) + // Minimum execution time: 24_344_000 picoseconds. + Weight::from_parts(25_549_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) @@ -162,8 +165,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `436` // Estimated: `7404` - // Minimum execution time: 554_247_000 picoseconds. - Weight::from_parts(561_657_000, 0) + // Minimum execution time: 35_100_000 picoseconds. + Weight::from_parts(36_455_000, 0) .saturating_add(Weight::from_parts(0, 7404)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) @@ -178,8 +181,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `436` // Estimated: `7404` - // Minimum execution time: 505_609_000 picoseconds. - Weight::from_parts(511_182_000, 0) + // Minimum execution time: 31_491_000 picoseconds. + Weight::from_parts(32_227_000, 0) .saturating_add(Weight::from_parts(0, 7404)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) @@ -194,8 +197,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `436` // Estimated: `7404` - // Minimum execution time: 553_195_000 picoseconds. - Weight::from_parts(557_682_000, 0) + // Minimum execution time: 35_721_000 picoseconds. + Weight::from_parts(36_829_000, 0) .saturating_add(Weight::from_parts(0, 7404)) .saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().writes(4)) @@ -208,8 +211,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `384` // Estimated: `4273` - // Minimum execution time: 185_832_000 picoseconds. - Weight::from_parts(188_556_000, 0) + // Minimum execution time: 12_696_000 picoseconds. + Weight::from_parts(13_422_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) @@ -222,8 +225,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `384` // Estimated: `4273` - // Minimum execution time: 185_944_000 picoseconds. - Weight::from_parts(189_359_000, 0) + // Minimum execution time: 12_991_000 picoseconds. + Weight::from_parts(13_379_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) @@ -234,8 +237,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `312` // Estimated: `4273` - // Minimum execution time: 129_754_000 picoseconds. - Weight::from_parts(132_353_000, 0) + // Minimum execution time: 9_089_000 picoseconds. + Weight::from_parts(9_640_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -246,8 +249,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `312` // Estimated: `4273` - // Minimum execution time: 129_422_000 picoseconds. - Weight::from_parts(134_030_000, 0) + // Minimum execution time: 9_012_000 picoseconds. + Weight::from_parts(9_498_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -260,8 +263,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `278` // Estimated: `4273` - // Minimum execution time: 164_227_000 picoseconds. - Weight::from_parts(166_823_000, 0) + // Minimum execution time: 11_008_000 picoseconds. + Weight::from_parts(11_650_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) @@ -272,8 +275,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `278` // Estimated: `4273` - // Minimum execution time: 138_887_000 picoseconds. - Weight::from_parts(142_103_000, 0) + // Minimum execution time: 9_925_000 picoseconds. + Weight::from_parts(10_261_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -284,13 +287,17 @@ impl pallet_assets::WeightInfo for WeightInfo { /// Proof: `Fungibles::Metadata` (`max_values`: None, `max_size`: Some(646), added: 3121, mode: `MaxEncodedLen`) /// The range of component `n` is `[0, 4]`. /// The range of component `s` is `[0, 4]`. - fn set_metadata(_n: u32, _s: u32, ) -> Weight { + fn set_metadata(n: u32, s: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `278` // Estimated: `4273` - // Minimum execution time: 153_483_000 picoseconds. - Weight::from_parts(166_947_854, 0) + // Minimum execution time: 10_924_000 picoseconds. + Weight::from_parts(11_413_712, 0) .saturating_add(Weight::from_parts(0, 4273)) + // Standard Error: 6_452 + .saturating_add(Weight::from_parts(146_312, 0).saturating_mul(n.into())) + // Standard Error: 6_452 + .saturating_add(Weight::from_parts(88_466, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -302,8 +309,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `346` // Estimated: `4273` - // Minimum execution time: 161_504_000 picoseconds. - Weight::from_parts(163_432_000, 0) + // Minimum execution time: 12_061_000 picoseconds. + Weight::from_parts(12_513_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) @@ -314,17 +321,15 @@ impl pallet_assets::WeightInfo for WeightInfo { /// Proof: `Fungibles::Metadata` (`max_values`: None, `max_size`: Some(646), added: 3121, mode: `MaxEncodedLen`) /// The range of component `n` is `[0, 4]`. /// The range of component `s` is `[0, 4]`. - fn force_set_metadata(n: u32, s: u32, ) -> Weight { + fn force_set_metadata(n: u32, _s: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `117` // Estimated: `4273` - // Minimum execution time: 153_719_000 picoseconds. - Weight::from_parts(156_756_127, 0) + // Minimum execution time: 10_416_000 picoseconds. + Weight::from_parts(11_571_382, 0) .saturating_add(Weight::from_parts(0, 4273)) - // Standard Error: 42_141 - .saturating_add(Weight::from_parts(47_279, 0).saturating_mul(n.into())) - // Standard Error: 42_141 - .saturating_add(Weight::from_parts(606_325, 0).saturating_mul(s.into())) + // Standard Error: 6_210 + .saturating_add(Weight::from_parts(5_790, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -336,8 +341,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `346` // Estimated: `4273` - // Minimum execution time: 159_022_000 picoseconds. - Weight::from_parts(159_860_000, 0) + // Minimum execution time: 12_141_000 picoseconds. + Weight::from_parts(12_949_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) @@ -348,8 +353,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `278` // Estimated: `4273` - // Minimum execution time: 127_227_000 picoseconds. - Weight::from_parts(128_014_000, 0) + // Minimum execution time: 10_217_000 picoseconds. + Weight::from_parts(10_753_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -362,8 +367,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `312` // Estimated: `4273` - // Minimum execution time: 207_749_000 picoseconds. - Weight::from_parts(209_271_000, 0) + // Minimum execution time: 15_476_000 picoseconds. + Weight::from_parts(15_919_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) @@ -380,8 +385,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `604` // Estimated: `7404` - // Minimum execution time: 639_409_000 picoseconds. - Weight::from_parts(644_412_000, 0) + // Minimum execution time: 44_680_000 picoseconds. + Weight::from_parts(46_355_000, 0) .saturating_add(Weight::from_parts(0, 7404)) .saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().writes(5)) @@ -394,8 +399,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `480` // Estimated: `4273` - // Minimum execution time: 230_433_000 picoseconds. - Weight::from_parts(238_922_000, 0) + // Minimum execution time: 17_421_000 picoseconds. + Weight::from_parts(17_898_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) @@ -408,8 +413,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `480` // Estimated: `4273` - // Minimum execution time: 230_209_000 picoseconds. - Weight::from_parts(232_202_000, 0) + // Minimum execution time: 17_424_000 picoseconds. + Weight::from_parts(17_926_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) @@ -420,8 +425,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `278` // Estimated: `4273` - // Minimum execution time: 149_517_000 picoseconds. - Weight::from_parts(150_361_000, 0) + // Minimum execution time: 10_425_000 picoseconds. + Weight::from_parts(11_234_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -434,8 +439,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `278` // Estimated: `4273` - // Minimum execution time: 220_867_000 picoseconds. - Weight::from_parts(223_534_000, 0) + // Minimum execution time: 15_195_000 picoseconds. + Weight::from_parts(15_769_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) @@ -448,8 +453,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `278` // Estimated: `4273` - // Minimum execution time: 212_910_000 picoseconds. - Weight::from_parts(215_017_000, 0) + // Minimum execution time: 14_574_000 picoseconds. + Weight::from_parts(15_227_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) @@ -462,8 +467,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `402` // Estimated: `4273` - // Minimum execution time: 200_001_000 picoseconds. - Weight::from_parts(202_074_000, 0) + // Minimum execution time: 13_726_000 picoseconds. + Weight::from_parts(14_546_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) @@ -476,8 +481,8 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `435` // Estimated: `4273` - // Minimum execution time: 194_374_000 picoseconds. - Weight::from_parts(195_424_000, 0) + // Minimum execution time: 13_573_000 picoseconds. + Weight::from_parts(13_845_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) @@ -490,12 +495,28 @@ impl pallet_assets::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `384` // Estimated: `4273` - // Minimum execution time: 176_392_000 picoseconds. - Weight::from_parts(178_538_000, 0) + // Minimum execution time: 13_279_000 picoseconds. + Weight::from_parts(13_739_000, 0) .saturating_add(Weight::from_parts(0, 4273)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(1)) } + /// Storage: `Fungibles::Asset` (r:1 w:1) + /// Proof: `Fungibles::Asset` (`max_values`: None, `max_size`: Some(808), added: 3283, mode: `MaxEncodedLen`) + /// Storage: `Fungibles::Account` (r:2 w:2) + /// Proof: `Fungibles::Account` (`max_values`: None, `max_size`: Some(732), added: 3207, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(132), added: 2607, mode: `MaxEncodedLen`) + fn transfer_all() -> Weight { + // Proof Size summary in bytes: + // Measured: `436` + // Estimated: `7404` + // Minimum execution time: 45_651_000 picoseconds. + Weight::from_parts(46_335_000, 0) + .saturating_add(Weight::from_parts(0, 7404)) + .saturating_add(T::DbWeight::get().reads(4)) + .saturating_add(T::DbWeight::get().writes(4)) + } } #[cfg(test)] @@ -884,4 +905,16 @@ mod tests { > 4273 ); } + #[test] + fn test_transfer_all() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 7404 + ); + } } diff --git a/runtimes/spiritnet/src/weights/pallet_balances.rs b/runtimes/spiritnet/src/weights/pallet_balances.rs index 23d7cfd9a2..64cd244bd3 100644 --- a/runtimes/spiritnet/src/weights/pallet_balances.rs +++ b/runtimes/spiritnet/src/weights/pallet_balances.rs @@ -14,30 +14,28 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_balances` //! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 33.0.0 -//! DATE: 2024-06-21, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-05-05, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `eyrie-7`, CPU: `Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("spiritnet-dev"), DB CACHE: 1024 +//! HOSTNAME: `rust-2`, CPU: `12th Gen Intel(R) Core(TM) i9-12900K` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 // Executed Command: -// ./target/release/kilt-parachain +// frame-omni-bencher +// v1 // benchmark // pallet -// --template=.maintain/runtime-weight-template.hbs -// --header=HEADER-GPL -// --wasm-execution=compiled -// --heap-pages=4096 -// --steps=50 -// --repeat=20 -// --chain=spiritnet-dev // --pallet=pallet-balances // --extrinsic=* -// --output=./runtimes/spiritnet/src/weights/pallet_balances.rs +// --genesis-builder=runtime +// --runtime=./target/release/wbuild/spiritnet-runtime/spiritnet_runtime.compact.compressed.wasm +// --header=HEADER-GPL +// --template=.maintain/runtime-weight-template.hbs +// --output=./runtimes/spiritnet/src/weights/ #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_imports)] @@ -55,8 +53,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `107` // Estimated: `6204` - // Minimum execution time: 57_631_000 picoseconds. - Weight::from_parts(58_505_000, 0) + // Minimum execution time: 49_770_000 picoseconds. + Weight::from_parts(51_980_000, 0) .saturating_add(Weight::from_parts(0, 6204)) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) @@ -67,8 +65,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `3597` - // Minimum execution time: 36_640_000 picoseconds. - Weight::from_parts(37_398_000, 0) + // Minimum execution time: 31_950_000 picoseconds. + Weight::from_parts(32_938_000, 0) .saturating_add(Weight::from_parts(0, 3597)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -79,8 +77,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `178` // Estimated: `3597` - // Minimum execution time: 15_909_000 picoseconds. - Weight::from_parts(16_256_000, 0) + // Minimum execution time: 12_830_000 picoseconds. + Weight::from_parts(13_341_000, 0) .saturating_add(Weight::from_parts(0, 3597)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -91,8 +89,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `178` // Estimated: `3597` - // Minimum execution time: 20_849_000 picoseconds. - Weight::from_parts(21_268_000, 0) + // Minimum execution time: 18_957_000 picoseconds. + Weight::from_parts(19_910_000, 0) .saturating_add(Weight::from_parts(0, 3597)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -103,8 +101,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `214` // Estimated: `8811` - // Minimum execution time: 60_228_000 picoseconds. - Weight::from_parts(60_901_000, 0) + // Minimum execution time: 53_836_000 picoseconds. + Weight::from_parts(54_689_000, 0) .saturating_add(Weight::from_parts(0, 8811)) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)) @@ -115,8 +113,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `3597` - // Minimum execution time: 44_815_000 picoseconds. - Weight::from_parts(45_343_000, 0) + // Minimum execution time: 40_665_000 picoseconds. + Weight::from_parts(41_241_000, 0) .saturating_add(Weight::from_parts(0, 3597)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -127,8 +125,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `178` // Estimated: `3597` - // Minimum execution time: 18_525_000 picoseconds. - Weight::from_parts(18_948_000, 0) + // Minimum execution time: 15_387_000 picoseconds. + Weight::from_parts(15_877_000, 0) .saturating_add(Weight::from_parts(0, 3597)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -140,11 +138,11 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0 + u * (140 ±0)` // Estimated: `990 + u * (2607 ±0)` - // Minimum execution time: 17_564_000 picoseconds. - Weight::from_parts(17_764_000, 0) + // Minimum execution time: 14_361_000 picoseconds. + Weight::from_parts(15_040_000, 0) .saturating_add(Weight::from_parts(0, 990)) - // Standard Error: 9_627 - .saturating_add(Weight::from_parts(12_525_557, 0).saturating_mul(u.into())) + // Standard Error: 7_280 + .saturating_add(Weight::from_parts(10_836_342, 0).saturating_mul(u.into())) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(u.into()))) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(u.into()))) .saturating_add(Weight::from_parts(0, 2607).saturating_mul(u.into())) @@ -155,11 +153,31 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `1501` - // Minimum execution time: 6_375_000 picoseconds. - Weight::from_parts(6_719_000, 0) + // Minimum execution time: 5_350_000 picoseconds. + Weight::from_parts(5_593_000, 0) .saturating_add(Weight::from_parts(0, 1501)) .saturating_add(T::DbWeight::get().reads(1)) } + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(132), added: 2607, mode: `MaxEncodedLen`) + fn burn_allow_death() -> Weight { + // Proof Size summary in bytes: + // Measured: `107` + // Estimated: `3597` + // Minimum execution time: 35_603_000 picoseconds. + Weight::from_parts(36_339_000, 0) + .saturating_add(Weight::from_parts(0, 3597)) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + fn burn_keep_alive() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 16_327_000 picoseconds. + Weight::from_parts(16_772_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + } } #[cfg(test)] @@ -272,4 +290,16 @@ mod tests { > 1501 ); } + #[test] + fn test_burn_allow_death() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 3597 + ); + } } diff --git a/runtimes/spiritnet/src/weights/pallet_collators.rs b/runtimes/spiritnet/src/weights/pallet_collators.rs new file mode 100644 index 0000000000..8890bd0ade --- /dev/null +++ b/runtimes/spiritnet/src/weights/pallet_collators.rs @@ -0,0 +1,257 @@ +// KILT Blockchain – +// Copyright (C) 2025, KILT Foundation + +// The KILT Blockchain 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. + +// The KILT Blockchain 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 this program. If not, see . + +// If you feel like getting in touch with us, you can do so at + +//! Autogenerated weights for `pallet_collators` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-05-06, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `rust-2`, CPU: `12th Gen Intel(R) Core(TM) i9-12900K` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 + +// Executed Command: +// frame-omni-bencher +// v1 +// benchmark +// pallet +// --pallet=pallet-collators +// --extrinsic=* +// --genesis-builder=runtime +// --runtime=./target/release/wbuild/spiritnet-runtime/spiritnet_runtime.compact.compressed.wasm +// --header=HEADER-GPL +// --template=.maintain/runtime-weight-template.hbs +// --output=./runtimes/spiritnet/src/weights/ + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_imports)] +#![allow(clippy::as_conversions)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +// TODO: Remove once the benchmarking stuff fully supports pallet instances. +use pallet_membership as pallet_collators; + +/// Weight functions for `pallet_collators`. +pub struct WeightInfo(PhantomData); +impl pallet_collators::WeightInfo for WeightInfo { + /// Storage: `Collators::Members` (r:1 w:1) + /// Proof: `Collators::Members` (`max_values`: Some(1), `max_size`: Some(1025), added: 1520, mode: `MaxEncodedLen`) + /// The range of component `m` is `[1, 31]`. + fn add_member(m: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `170 + m * (32 ±0)` + // Estimated: `2510` + // Minimum execution time: 8_720_000 picoseconds. + Weight::from_parts(9_392_733, 0) + .saturating_add(Weight::from_parts(0, 2510)) + // Standard Error: 867 + .saturating_add(Weight::from_parts(15_705, 0).saturating_mul(m.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: `Collators::Members` (r:1 w:1) + /// Proof: `Collators::Members` (`max_values`: Some(1), `max_size`: Some(1025), added: 1520, mode: `MaxEncodedLen`) + /// Storage: `Collators::Prime` (r:1 w:0) + /// Proof: `Collators::Prime` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) + /// Storage: UNKNOWN KEY `0xdfe4dad7b89644d5962c7bb034ca6f7bb10896c85af113f86bae1ab193a37922` (r:0 w:1) + /// Proof: UNKNOWN KEY `0xdfe4dad7b89644d5962c7bb034ca6f7bb10896c85af113f86bae1ab193a37922` (r:0 w:1) + /// The range of component `m` is `[2, 32]`. + fn remove_member(m: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `222 + m * (32 ±0)` + // Estimated: `2510 + m * (32 ±0)` + // Minimum execution time: 10_650_000 picoseconds. + Weight::from_parts(11_552_390, 0) + .saturating_add(Weight::from_parts(0, 2510)) + // Standard Error: 1_358 + .saturating_add(Weight::from_parts(16_425, 0).saturating_mul(m.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 32).saturating_mul(m.into())) + } + /// Storage: `Collators::Members` (r:1 w:1) + /// Proof: `Collators::Members` (`max_values`: Some(1), `max_size`: Some(1025), added: 1520, mode: `MaxEncodedLen`) + /// Storage: `Collators::Prime` (r:1 w:0) + /// Proof: `Collators::Prime` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) + /// Storage: UNKNOWN KEY `0xdfe4dad7b89644d5962c7bb034ca6f7bb10896c85af113f86bae1ab193a37922` (r:0 w:1) + /// Proof: UNKNOWN KEY `0xdfe4dad7b89644d5962c7bb034ca6f7bb10896c85af113f86bae1ab193a37922` (r:0 w:1) + /// The range of component `m` is `[2, 32]`. + fn swap_member(m: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `222 + m * (32 ±0)` + // Estimated: `2510 + m * (32 ±0)` + // Minimum execution time: 10_847_000 picoseconds. + Weight::from_parts(11_627_801, 0) + .saturating_add(Weight::from_parts(0, 2510)) + // Standard Error: 1_381 + .saturating_add(Weight::from_parts(20_179, 0).saturating_mul(m.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 32).saturating_mul(m.into())) + } + /// Storage: `Collators::Members` (r:1 w:1) + /// Proof: `Collators::Members` (`max_values`: Some(1), `max_size`: Some(1025), added: 1520, mode: `MaxEncodedLen`) + /// Storage: `Collators::Prime` (r:1 w:0) + /// Proof: `Collators::Prime` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) + /// Storage: UNKNOWN KEY `0xdfe4dad7b89644d5962c7bb034ca6f7bb10896c85af113f86bae1ab193a37922` (r:0 w:1) + /// Proof: UNKNOWN KEY `0xdfe4dad7b89644d5962c7bb034ca6f7bb10896c85af113f86bae1ab193a37922` (r:0 w:1) + /// The range of component `m` is `[1, 32]`. + fn reset_members(m: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `222 + m * (32 ±0)` + // Estimated: `2510 + m * (32 ±0)` + // Minimum execution time: 10_579_000 picoseconds. + Weight::from_parts(11_637_226, 0) + .saturating_add(Weight::from_parts(0, 2510)) + // Standard Error: 1_622 + .saturating_add(Weight::from_parts(93_061, 0).saturating_mul(m.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 32).saturating_mul(m.into())) + } + /// Storage: `Collators::Members` (r:1 w:1) + /// Proof: `Collators::Members` (`max_values`: Some(1), `max_size`: Some(1025), added: 1520, mode: `MaxEncodedLen`) + /// Storage: `Collators::Prime` (r:1 w:1) + /// Proof: `Collators::Prime` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) + /// Storage: UNKNOWN KEY `0xdfe4dad7b89644d5962c7bb034ca6f7bb10896c85af113f86bae1ab193a37922` (r:0 w:1) + /// Proof: UNKNOWN KEY `0xdfe4dad7b89644d5962c7bb034ca6f7bb10896c85af113f86bae1ab193a37922` (r:0 w:1) + /// The range of component `m` is `[1, 32]`. + fn change_key(m: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `222 + m * (32 ±0)` + // Estimated: `2510 + m * (32 ±0)` + // Minimum execution time: 11_199_000 picoseconds. + Weight::from_parts(12_267_525, 0) + .saturating_add(Weight::from_parts(0, 2510)) + // Standard Error: 1_565 + .saturating_add(Weight::from_parts(24_021, 0).saturating_mul(m.into())) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(3)) + .saturating_add(Weight::from_parts(0, 32).saturating_mul(m.into())) + } + /// Storage: `Collators::Members` (r:1 w:0) + /// Proof: `Collators::Members` (`max_values`: Some(1), `max_size`: Some(1025), added: 1520, mode: `MaxEncodedLen`) + /// Storage: `Collators::Prime` (r:0 w:1) + /// Proof: `Collators::Prime` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) + /// Storage: UNKNOWN KEY `0xdfe4dad7b89644d5962c7bb034ca6f7bb10896c85af113f86bae1ab193a37922` (r:0 w:1) + /// Proof: UNKNOWN KEY `0xdfe4dad7b89644d5962c7bb034ca6f7bb10896c85af113f86bae1ab193a37922` (r:0 w:1) + /// The range of component `m` is `[1, 32]`. + fn set_prime(m: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `170 + m * (32 ±0)` + // Estimated: `2510 + m * (32 ±0)` + // Minimum execution time: 6_616_000 picoseconds. + Weight::from_parts(7_156_149, 0) + .saturating_add(Weight::from_parts(0, 2510)) + // Standard Error: 725 + .saturating_add(Weight::from_parts(11_271, 0).saturating_mul(m.into())) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(Weight::from_parts(0, 32).saturating_mul(m.into())) + } + /// Storage: `Collators::Prime` (r:0 w:1) + /// Proof: `Collators::Prime` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) + /// Storage: UNKNOWN KEY `0xdfe4dad7b89644d5962c7bb034ca6f7bb10896c85af113f86bae1ab193a37922` (r:0 w:1) + /// Proof: UNKNOWN KEY `0xdfe4dad7b89644d5962c7bb034ca6f7bb10896c85af113f86bae1ab193a37922` (r:0 w:1) + fn clear_prime() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_312_000 picoseconds. + Weight::from_parts(2_454_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(2)) + } +} + +#[cfg(test)] +mod tests { + #[test] + fn test_add_member() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 2510 + ); + } + #[test] + fn test_remove_member() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 2510 + ); + } + #[test] + fn test_swap_member() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 2510 + ); + } + #[test] + fn test_reset_members() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 2510 + ); + } + #[test] + fn test_change_key() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 2510 + ); + } + #[test] + fn test_set_prime() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 2510 + ); + } +} diff --git a/runtimes/spiritnet/src/weights/pallet_collective.rs b/runtimes/spiritnet/src/weights/pallet_collective.rs index 4d2816d95b..69ac4f7d38 100644 --- a/runtimes/spiritnet/src/weights/pallet_collective.rs +++ b/runtimes/spiritnet/src/weights/pallet_collective.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_collective` //! diff --git a/runtimes/spiritnet/src/weights/pallet_democracy.rs b/runtimes/spiritnet/src/weights/pallet_democracy.rs index 36775ca692..0e64d583c1 100644 --- a/runtimes/spiritnet/src/weights/pallet_democracy.rs +++ b/runtimes/spiritnet/src/weights/pallet_democracy.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_democracy` //! diff --git a/runtimes/spiritnet/src/weights/pallet_deposit_storage.rs b/runtimes/spiritnet/src/weights/pallet_deposit_storage.rs index 0b985deb66..7d0bb23013 100644 --- a/runtimes/spiritnet/src/weights/pallet_deposit_storage.rs +++ b/runtimes/spiritnet/src/weights/pallet_deposit_storage.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_deposit_storage` //! diff --git a/runtimes/spiritnet/src/weights/pallet_did_lookup.rs b/runtimes/spiritnet/src/weights/pallet_did_lookup.rs index 3cf08f713a..a541d5fc1b 100644 --- a/runtimes/spiritnet/src/weights/pallet_did_lookup.rs +++ b/runtimes/spiritnet/src/weights/pallet_did_lookup.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_did_lookup` //! diff --git a/runtimes/spiritnet/src/weights/pallet_dip_provider.rs b/runtimes/spiritnet/src/weights/pallet_dip_provider.rs index db0bf514aa..f3d8a472db 100644 --- a/runtimes/spiritnet/src/weights/pallet_dip_provider.rs +++ b/runtimes/spiritnet/src/weights/pallet_dip_provider.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_dip_provider` //! diff --git a/runtimes/spiritnet/src/weights/pallet_indices.rs b/runtimes/spiritnet/src/weights/pallet_indices.rs index 9b13f76945..e1799696a1 100644 --- a/runtimes/spiritnet/src/weights/pallet_indices.rs +++ b/runtimes/spiritnet/src/weights/pallet_indices.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_indices` //! diff --git a/runtimes/spiritnet/src/weights/pallet_inflation.rs b/runtimes/spiritnet/src/weights/pallet_inflation.rs deleted file mode 100644 index 20b39f3db1..0000000000 --- a/runtimes/spiritnet/src/weights/pallet_inflation.rs +++ /dev/null @@ -1,88 +0,0 @@ -// KILT Blockchain – -// Copyright (C) 2025, KILT Foundation - -// The KILT Blockchain 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. - -// The KILT Blockchain 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 this program. If not, see . - -// If you feel like getting in touch with us, you can do so at - -//! Autogenerated weights for `pallet_inflation` -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 33.0.0 -//! DATE: 2024-06-21, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `eyrie-7`, CPU: `Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("spiritnet-dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/kilt-parachain -// benchmark -// pallet -// --template=.maintain/runtime-weight-template.hbs -// --header=HEADER-GPL -// --wasm-execution=compiled -// --heap-pages=4096 -// --steps=50 -// --repeat=20 -// --chain=spiritnet-dev -// --pallet=pallet-inflation -// --extrinsic=* -// --output=./runtimes/spiritnet/src/weights/pallet_inflation.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_imports)] -#![allow(clippy::as_conversions)] - -use frame_support::{traits::Get, weights::Weight}; -use sp_std::marker::PhantomData; - -/// Weight functions for `pallet_inflation`. -pub struct WeightInfo(PhantomData); -impl pallet_inflation::WeightInfo for WeightInfo { - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(132), added: 2607, mode: `MaxEncodedLen`) - fn on_initialize_mint_to_treasury() -> Weight { - // Proof Size summary in bytes: - // Measured: `107` - // Estimated: `3597` - // Minimum execution time: 19_031_000 picoseconds. - Weight::from_parts(19_533_000, 0) - .saturating_add(Weight::from_parts(0, 3597)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(1)) - } - fn on_initialize_no_action() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 201_000 picoseconds. - Weight::from_parts(224_000, 0) - .saturating_add(Weight::from_parts(0, 0)) - } -} - -#[cfg(test)] -mod tests { - #[test] - fn test_on_initialize_mint_to_treasury() { - assert!( - ::BlockWeights::get() - .per_class - .get(frame_support::dispatch::DispatchClass::Normal) - .max_extrinsic - .unwrap_or_else(::max_value) - .proof_size() - > 3597 - ); - } -} diff --git a/runtimes/spiritnet/src/weights/pallet_membership.rs b/runtimes/spiritnet/src/weights/pallet_membership.rs index 499c06eaaa..f46d36ec1e 100644 --- a/runtimes/spiritnet/src/weights/pallet_membership.rs +++ b/runtimes/spiritnet/src/weights/pallet_membership.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_membership` //! @@ -97,7 +97,7 @@ impl pallet_membership::WeightInfo for WeightInfo { /// Storage: `TipsMembership::Prime` (r:1 w:0) /// Proof: `TipsMembership::Prime` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `Ignored`) /// The range of component `m` is `[1, 21]`. - fn reset_member(_m: u32, ) -> Weight { + fn reset_members(_m: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `187 + m * (32 ±0)` // Estimated: `990` @@ -140,7 +140,7 @@ impl pallet_membership::WeightInfo for WeightInfo { /// Storage: `TipsMembership::Prime` (r:0 w:1) /// Proof: `TipsMembership::Prime` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `Ignored`) /// The range of component `m` is `[1, 21]`. - fn clear_prime(_m: u32, ) -> Weight { + fn clear_prime() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` diff --git a/runtimes/spiritnet/src/weights/pallet_message_queue.rs b/runtimes/spiritnet/src/weights/pallet_message_queue.rs index 309a10dbed..7fe65dacd3 100644 --- a/runtimes/spiritnet/src/weights/pallet_message_queue.rs +++ b/runtimes/spiritnet/src/weights/pallet_message_queue.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_message_queue` //! diff --git a/runtimes/spiritnet/src/weights/pallet_migration.rs b/runtimes/spiritnet/src/weights/pallet_migration.rs index bdfc3ed861..03cdba1ea5 100644 --- a/runtimes/spiritnet/src/weights/pallet_migration.rs +++ b/runtimes/spiritnet/src/weights/pallet_migration.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_migration` //! diff --git a/runtimes/spiritnet/src/weights/pallet_multisig.rs b/runtimes/spiritnet/src/weights/pallet_multisig.rs index 58729b5e5c..fe3f3a78c7 100644 --- a/runtimes/spiritnet/src/weights/pallet_multisig.rs +++ b/runtimes/spiritnet/src/weights/pallet_multisig.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for pallet_multisig //! diff --git a/runtimes/spiritnet/src/weights/pallet_preimage.rs b/runtimes/spiritnet/src/weights/pallet_preimage.rs index c36b6d108e..9d8c405003 100644 --- a/runtimes/spiritnet/src/weights/pallet_preimage.rs +++ b/runtimes/spiritnet/src/weights/pallet_preimage.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_preimage` //! diff --git a/runtimes/spiritnet/src/weights/pallet_proxy.rs b/runtimes/spiritnet/src/weights/pallet_proxy.rs index 7399bd1157..39eaba26e6 100644 --- a/runtimes/spiritnet/src/weights/pallet_proxy.rs +++ b/runtimes/spiritnet/src/weights/pallet_proxy.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_proxy` //! diff --git a/runtimes/spiritnet/src/weights/pallet_scheduler.rs b/runtimes/spiritnet/src/weights/pallet_scheduler.rs index 6c3745c341..e488250db5 100644 --- a/runtimes/spiritnet/src/weights/pallet_scheduler.rs +++ b/runtimes/spiritnet/src/weights/pallet_scheduler.rs @@ -14,30 +14,28 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_scheduler` //! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 33.0.0 -//! DATE: 2024-06-21, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-05-12, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `eyrie-7`, CPU: `Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("spiritnet-dev"), DB CACHE: 1024 +//! HOSTNAME: `rust-2`, CPU: `12th Gen Intel(R) Core(TM) i9-12900K` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 // Executed Command: -// ./target/release/kilt-parachain +// frame-omni-bencher +// v1 // benchmark // pallet -// --template=.maintain/runtime-weight-template.hbs -// --header=HEADER-GPL -// --wasm-execution=compiled -// --heap-pages=4096 -// --steps=50 -// --repeat=20 -// --chain=spiritnet-dev // --pallet=pallet-scheduler // --extrinsic=* -// --output=./runtimes/spiritnet/src/weights/pallet_scheduler.rs +// --genesis-builder=runtime +// --runtime=./target/release/wbuild/spiritnet-runtime/spiritnet_runtime.compact.compressed.wasm +// --header=HEADER-GPL +// --template=.maintain/runtime-weight-template.hbs +// --output=./runtimes/spiritnet/src/weights/ #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_imports)] @@ -55,8 +53,8 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `36` // Estimated: `1493` - // Minimum execution time: 2_704_000 picoseconds. - Weight::from_parts(2_856_000, 0) + // Minimum execution time: 2_760_000 picoseconds. + Weight::from_parts(3_012_000, 0) .saturating_add(Weight::from_parts(0, 1493)) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) @@ -68,11 +66,11 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `83 + s * (181 ±0)` // Estimated: `42632` - // Minimum execution time: 3_299_000 picoseconds. - Weight::from_parts(7_000_035, 0) + // Minimum execution time: 3_096_000 picoseconds. + Weight::from_parts(6_711_407, 0) .saturating_add(Weight::from_parts(0, 42632)) - // Standard Error: 1_779 - .saturating_add(Weight::from_parts(460_372, 0).saturating_mul(s.into())) + // Standard Error: 1_823 + .saturating_add(Weight::from_parts(307_448, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -80,12 +78,12 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 3_435_000 picoseconds. - Weight::from_parts(3_651_000, 0) + // Minimum execution time: 3_003_000 picoseconds. + Weight::from_parts(3_160_000, 0) .saturating_add(Weight::from_parts(0, 0)) } /// Storage: `Preimage::PreimageFor` (r:1 w:1) - /// Proof: `Preimage::PreimageFor` (`max_values`: None, `max_size`: Some(4194344), added: 4196819, mode: `Measured`) + /// Proof: `Preimage::PreimageFor` (`max_values`: None, `max_size`: Some(4194344), added: 4196819, mode: `MaxEncodedLen`) /// Storage: `Preimage::StatusFor` (r:1 w:0) /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) /// Storage: `Preimage::RequestStatusFor` (r:1 w:1) @@ -93,16 +91,15 @@ impl pallet_scheduler::WeightInfo for WeightInfo { /// The range of component `s` is `[128, 4194304]`. fn service_task_fetched(s: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `246 + s * (1 ±0)` - // Estimated: `3711 + s * (1 ±0)` - // Minimum execution time: 18_570_000 picoseconds. - Weight::from_parts(18_744_000, 0) - .saturating_add(Weight::from_parts(0, 3711)) - // Standard Error: 19 - .saturating_add(Weight::from_parts(1_753, 0).saturating_mul(s.into())) + // Measured: `213 + s * (1 ±0)` + // Estimated: `4197809` + // Minimum execution time: 16_067_000 picoseconds. + Weight::from_parts(16_263_000, 0) + .saturating_add(Weight::from_parts(0, 4197809)) + // Standard Error: 138 + .saturating_add(Weight::from_parts(12_403, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(2)) - .saturating_add(Weight::from_parts(0, 1).saturating_mul(s.into())) } /// Storage: `Scheduler::Lookup` (r:0 w:1) /// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) @@ -110,8 +107,8 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 5_090_000 picoseconds. - Weight::from_parts(5_248_000, 0) + // Minimum execution time: 4_220_000 picoseconds. + Weight::from_parts(4_339_000, 0) .saturating_add(Weight::from_parts(0, 0)) .saturating_add(T::DbWeight::get().writes(1)) } @@ -119,24 +116,24 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 3_434_000 picoseconds. - Weight::from_parts(3_559_000, 0) + // Minimum execution time: 2_935_000 picoseconds. + Weight::from_parts(3_119_000, 0) .saturating_add(Weight::from_parts(0, 0)) } fn execute_dispatch_signed() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 2_287_000 picoseconds. - Weight::from_parts(2_404_000, 0) + // Minimum execution time: 1_947_000 picoseconds. + Weight::from_parts(2_044_000, 0) .saturating_add(Weight::from_parts(0, 0)) } fn execute_dispatch_unsigned() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 2_250_000 picoseconds. - Weight::from_parts(2_443_000, 0) + // Minimum execution time: 1_928_000 picoseconds. + Weight::from_parts(2_046_000, 0) .saturating_add(Weight::from_parts(0, 0)) } /// Storage: `Scheduler::Agenda` (r:1 w:1) @@ -146,16 +143,18 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `83 + s * (181 ±0)` // Estimated: `42632` - // Minimum execution time: 10_638_000 picoseconds. - Weight::from_parts(14_687_147, 0) + // Minimum execution time: 8_529_000 picoseconds. + Weight::from_parts(12_074_512, 0) .saturating_add(Weight::from_parts(0, 42632)) - // Standard Error: 1_913 - .saturating_add(Weight::from_parts(482_171, 0).saturating_mul(s.into())) + // Standard Error: 1_932 + .saturating_add(Weight::from_parts(326_973, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(1)) } /// Storage: `Scheduler::Agenda` (r:1 w:1) /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(39167), added: 41642, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Retries` (r:0 w:1) + /// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(38), added: 2513, mode: `MaxEncodedLen`) /// Storage: `Scheduler::Lookup` (r:0 w:1) /// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) /// The range of component `s` is `[1, 50]`. @@ -163,13 +162,13 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `83 + s * (181 ±0)` // Estimated: `42632` - // Minimum execution time: 16_149_000 picoseconds. - Weight::from_parts(15_809_362, 0) + // Minimum execution time: 13_718_000 picoseconds. + Weight::from_parts(14_428_235, 0) .saturating_add(Weight::from_parts(0, 42632)) - // Standard Error: 743 - .saturating_add(Weight::from_parts(733_748, 0).saturating_mul(s.into())) + // Standard Error: 1_107 + .saturating_add(Weight::from_parts(513_210, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(2)) + .saturating_add(T::DbWeight::get().writes(3)) } /// Storage: `Scheduler::Lookup` (r:1 w:1) /// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) @@ -180,11 +179,11 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `266 + s * (189 ±0)` // Estimated: `42632` - // Minimum execution time: 14_144_000 picoseconds. - Weight::from_parts(19_188_976, 0) + // Minimum execution time: 11_058_000 picoseconds. + Weight::from_parts(15_802_187, 0) .saturating_add(Weight::from_parts(0, 42632)) - // Standard Error: 2_723 - .saturating_add(Weight::from_parts(514_586, 0).saturating_mul(s.into())) + // Standard Error: 2_880 + .saturating_add(Weight::from_parts(374_796, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(2)) } @@ -192,19 +191,98 @@ impl pallet_scheduler::WeightInfo for WeightInfo { /// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) /// Storage: `Scheduler::Agenda` (r:1 w:1) /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(39167), added: 41642, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Retries` (r:0 w:1) + /// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(38), added: 2513, mode: `MaxEncodedLen`) /// The range of component `s` is `[1, 50]`. fn cancel_named(s: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `290 + s * (189 ±0)` // Estimated: `42632` - // Minimum execution time: 18_108_000 picoseconds. - Weight::from_parts(18_326_622, 0) + // Minimum execution time: 15_653_000 picoseconds. + Weight::from_parts(17_038_595, 0) .saturating_add(Weight::from_parts(0, 42632)) - // Standard Error: 1_010 - .saturating_add(Weight::from_parts(757_085, 0).saturating_mul(s.into())) + // Standard Error: 1_938 + .saturating_add(Weight::from_parts(541_501, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(3)) + } + /// Storage: `Scheduler::Agenda` (r:1 w:1) + /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(39167), added: 41642, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Retries` (r:0 w:1) + /// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(38), added: 2513, mode: `MaxEncodedLen`) + /// The range of component `s` is `[1, 50]`. + fn schedule_retry(s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `123` + // Estimated: `42632` + // Minimum execution time: 8_716_000 picoseconds. + Weight::from_parts(9_465_301, 0) + .saturating_add(Weight::from_parts(0, 42632)) + // Standard Error: 776 + .saturating_add(Weight::from_parts(25_885, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().writes(2)) } + /// Storage: `Scheduler::Agenda` (r:1 w:0) + /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(39167), added: 41642, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Retries` (r:0 w:1) + /// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(38), added: 2513, mode: `MaxEncodedLen`) + fn set_retry() -> Weight { + // Proof Size summary in bytes: + // Measured: `9133` + // Estimated: `42632` + // Minimum execution time: 23_528_000 picoseconds. + Weight::from_parts(24_163_000, 0) + .saturating_add(Weight::from_parts(0, 42632)) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: `Scheduler::Lookup` (r:1 w:0) + /// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Agenda` (r:1 w:0) + /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(39167), added: 41642, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Retries` (r:0 w:1) + /// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(38), added: 2513, mode: `MaxEncodedLen`) + fn set_retry_named() -> Weight { + // Proof Size summary in bytes: + // Measured: `9815` + // Estimated: `42632` + // Minimum execution time: 29_289_000 picoseconds. + Weight::from_parts(30_006_000, 0) + .saturating_add(Weight::from_parts(0, 42632)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: `Scheduler::Agenda` (r:1 w:0) + /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(39167), added: 41642, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Retries` (r:0 w:1) + /// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(38), added: 2513, mode: `MaxEncodedLen`) + fn cancel_retry() -> Weight { + // Proof Size summary in bytes: + // Measured: `9145` + // Estimated: `42632` + // Minimum execution time: 23_050_000 picoseconds. + Weight::from_parts(23_468_000, 0) + .saturating_add(Weight::from_parts(0, 42632)) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: `Scheduler::Lookup` (r:1 w:0) + /// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Agenda` (r:1 w:0) + /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(39167), added: 41642, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Retries` (r:0 w:1) + /// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(38), added: 2513, mode: `MaxEncodedLen`) + fn cancel_retry_named() -> Weight { + // Proof Size summary in bytes: + // Measured: `9827` + // Estimated: `42632` + // Minimum execution time: 28_494_000 picoseconds. + Weight::from_parts(29_535_000, 0) + .saturating_add(Weight::from_parts(0, 42632)) + .saturating_add(T::DbWeight::get().reads(2)) + .saturating_add(T::DbWeight::get().writes(1)) + } } #[cfg(test)] @@ -242,7 +320,7 @@ mod tests { .max_extrinsic .unwrap_or_else(::max_value) .proof_size() - > 3711 + > 3407870 ); } #[test] @@ -293,4 +371,64 @@ mod tests { > 42632 ); } + #[test] + fn test_schedule_retry() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 42632 + ); + } + #[test] + fn test_set_retry() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 42632 + ); + } + #[test] + fn test_set_retry_named() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 42632 + ); + } + #[test] + fn test_cancel_retry() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 42632 + ); + } + #[test] + fn test_cancel_retry_named() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 42632 + ); + } } diff --git a/runtimes/spiritnet/src/weights/pallet_session.rs b/runtimes/spiritnet/src/weights/pallet_session.rs index af270518c5..3910a12804 100644 --- a/runtimes/spiritnet/src/weights/pallet_session.rs +++ b/runtimes/spiritnet/src/weights/pallet_session.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_session` //! diff --git a/runtimes/spiritnet/src/weights/pallet_technical_committee_collective.rs b/runtimes/spiritnet/src/weights/pallet_technical_committee_collective.rs index 6a60e2d087..a4628f0131 100644 --- a/runtimes/spiritnet/src/weights/pallet_technical_committee_collective.rs +++ b/runtimes/spiritnet/src/weights/pallet_technical_committee_collective.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_technical_committee_collective` //! diff --git a/runtimes/spiritnet/src/weights/pallet_technical_membership.rs b/runtimes/spiritnet/src/weights/pallet_technical_membership.rs index 5260395192..e579f815f9 100644 --- a/runtimes/spiritnet/src/weights/pallet_technical_membership.rs +++ b/runtimes/spiritnet/src/weights/pallet_technical_membership.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_technical_membership` //! @@ -52,6 +52,8 @@ use pallet_membership as pallet_technical_membership; /// Weight functions for `pallet_technical_membership`. pub struct WeightInfo(PhantomData); impl pallet_technical_membership::WeightInfo for WeightInfo { + + /// Storage: `TechnicalMembership::Members` (r:1 w:1) /// Proof: `TechnicalMembership::Members` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `Ignored`) /// Storage: `TechnicalCommittee::Proposals` (r:1 w:0) @@ -124,7 +126,7 @@ impl pallet_technical_membership::WeightInfo for Weight /// Storage: `TechnicalCommittee::Prime` (r:0 w:1) /// Proof: `TechnicalCommittee::Prime` (`max_values`: Some(1), `max_size`: None, mode: `Ignored`) /// The range of component `m` is `[1, 100]`. - fn reset_member(_m: u32, ) -> Weight { + fn reset_members(_m: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `237 + m * (64 ±0)` // Estimated: `990` @@ -177,7 +179,7 @@ impl pallet_technical_membership::WeightInfo for Weight /// Storage: `TechnicalCommittee::Prime` (r:0 w:1) /// Proof: `TechnicalCommittee::Prime` (`max_values`: Some(1), `max_size`: None, mode: `Ignored`) /// The range of component `m` is `[1, 100]`. - fn clear_prime(_m: u32, ) -> Weight { + fn clear_prime() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` diff --git a/runtimes/spiritnet/src/weights/pallet_timestamp.rs b/runtimes/spiritnet/src/weights/pallet_timestamp.rs index b47801c801..5da2c1a7d5 100644 --- a/runtimes/spiritnet/src/weights/pallet_timestamp.rs +++ b/runtimes/spiritnet/src/weights/pallet_timestamp.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_timestamp` //! diff --git a/runtimes/spiritnet/src/weights/pallet_tips.rs b/runtimes/spiritnet/src/weights/pallet_tips.rs index b1b860f0c5..7a570f74d3 100644 --- a/runtimes/spiritnet/src/weights/pallet_tips.rs +++ b/runtimes/spiritnet/src/weights/pallet_tips.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_tips` //! diff --git a/runtimes/spiritnet/src/weights/pallet_token_gateway.rs b/runtimes/spiritnet/src/weights/pallet_token_gateway.rs new file mode 100644 index 0000000000..6d3ffaf04d --- /dev/null +++ b/runtimes/spiritnet/src/weights/pallet_token_gateway.rs @@ -0,0 +1,184 @@ +// KILT Blockchain – +// Copyright (C) 2025, KILT Foundation + +// The KILT Blockchain 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. + +// The KILT Blockchain 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 this program. If not, see . + +// If you feel like getting in touch with us, you can do so at + +//! Autogenerated weights for `pallet_token_gateway` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-05-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `rust-2`, CPU: `12th Gen Intel(R) Core(TM) i9-12900K` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 + +// Executed Command: +// frame-omni-bencher +// v1 +// benchmark +// pallet +// --pallet=pallet-token-gateway +// --extrinsic=* +// --genesis-builder=runtime +// --runtime=./target/release/wbuild/spiritnet-runtime/spiritnet_runtime.compact.compressed.wasm +// --header=HEADER-GPL +// --template=.maintain/runtime-weight-template.hbs +// --output=./runtimes/spiritnet/src/weights/ + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_imports)] +#![allow(clippy::as_conversions)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weight functions for `pallet_token_gateway`. +pub struct WeightInfo(PhantomData); +impl pallet_token_gateway::WeightInfo for WeightInfo { + /// Storage: `Hyperbridge::HostParams` (r:1 w:0) + /// Proof: `Hyperbridge::HostParams` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Ismp::Nonce` (r:1 w:1) + /// Proof: `Ismp::Nonce` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TokenGateway::Precisions` (r:0 w:100) + /// Proof: `TokenGateway::Precisions` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TokenGateway::NativeAssets` (r:0 w:1) + /// Proof: `TokenGateway::NativeAssets` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TokenGateway::LocalAssets` (r:0 w:1) + /// Proof: `TokenGateway::LocalAssets` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TokenGateway::SupportedAssets` (r:0 w:1) + /// Proof: `TokenGateway::SupportedAssets` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: UNKNOWN KEY `0x52657175657374436f6d6d69746d656e74736dbf7451ee5809df8f986d7fa449` (r:1 w:1) + /// Proof: UNKNOWN KEY `0x52657175657374436f6d6d69746d656e74736dbf7451ee5809df8f986d7fa449` (r:1 w:1) + /// The range of component `x` is `[1, 100]`. + fn create_erc6160_asset(x: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `290` + // Estimated: `3755` + // Minimum execution time: 29_974_000 picoseconds. + Weight::from_parts(32_747_433, 0) + .saturating_add(Weight::from_parts(0, 3755)) + // Standard Error: 4_554 + .saturating_add(Weight::from_parts(1_675_177, 0).saturating_mul(x.into())) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(5)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(x.into()))) + } + /// Storage: `TokenGateway::SupportedAssets` (r:1 w:0) + /// Proof: `TokenGateway::SupportedAssets` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TokenGateway::NativeAssets` (r:1 w:0) + /// Proof: `TokenGateway::NativeAssets` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(132), added: 2607, mode: `MaxEncodedLen`) + /// Storage: `TokenGateway::Precisions` (r:1 w:0) + /// Proof: `TokenGateway::Precisions` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Ismp::Nonce` (r:1 w:1) + /// Proof: `Ismp::Nonce` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: UNKNOWN KEY `0x52657175657374436f6d6d69746d656e747387c60cc3838067ec43c7c32db115` (r:1 w:1) + /// Proof: UNKNOWN KEY `0x52657175657374436f6d6d69746d656e747387c60cc3838067ec43c7c32db115` (r:1 w:1) + fn teleport() -> Weight { + // Proof Size summary in bytes: + // Measured: `732` + // Estimated: `4197` + // Minimum execution time: 64_977_000 picoseconds. + Weight::from_parts(67_796_000, 0) + .saturating_add(Weight::from_parts(0, 4197)) + .saturating_add(T::DbWeight::get().reads(6)) + .saturating_add(T::DbWeight::get().writes(3)) + } + /// Storage: `TokenGateway::TokenGatewayAddresses` (r:0 w:1) + /// Proof: `TokenGateway::TokenGatewayAddresses` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `x` is `[1, 100]`. + fn set_token_gateway_addresses(x: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_553_000 picoseconds. + Weight::from_parts(3_928_493, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 181 + .saturating_add(Weight::from_parts(1_795, 0).saturating_mul(x.into())) + .saturating_add(T::DbWeight::get().writes(1)) + } + /// Storage: `Hyperbridge::HostParams` (r:1 w:0) + /// Proof: `Hyperbridge::HostParams` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Ismp::Nonce` (r:1 w:1) + /// Proof: `Ismp::Nonce` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: UNKNOWN KEY `0x52657175657374436f6d6d69746d656e7473063ffee434bbc145cf1b300aac5e` (r:1 w:1) + /// Proof: UNKNOWN KEY `0x52657175657374436f6d6d69746d656e7473063ffee434bbc145cf1b300aac5e` (r:1 w:1) + fn update_erc6160_asset() -> Weight { + // Proof Size summary in bytes: + // Measured: `455` + // Estimated: `3920` + // Minimum execution time: 24_059_000 picoseconds. + Weight::from_parts(25_861_000, 0) + .saturating_add(Weight::from_parts(0, 3920)) + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(2)) + } + /// Storage: `TokenGateway::Precisions` (r:0 w:100) + /// Proof: `TokenGateway::Precisions` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `x` is `[1, 100]`. + fn update_asset_precision(x: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_781_000 picoseconds. + Weight::from_parts(3_283_265, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 3_391 + .saturating_add(Weight::from_parts(1_610_356, 0).saturating_mul(x.into())) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(x.into()))) + } +} + +#[cfg(test)] +mod tests { + #[test] + fn test_create_erc6160_asset() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 3755 + ); + } + #[test] + fn test_teleport() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4197 + ); + } + #[test] + fn test_update_erc6160_asset() { + assert!( + ::BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 3920 + ); + } +} diff --git a/runtimes/spiritnet/src/weights/pallet_treasury.rs b/runtimes/spiritnet/src/weights/pallet_treasury.rs index 2544605dcc..c956a0078d 100644 --- a/runtimes/spiritnet/src/weights/pallet_treasury.rs +++ b/runtimes/spiritnet/src/weights/pallet_treasury.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_treasury` //! @@ -65,51 +65,7 @@ impl pallet_treasury::WeightInfo for WeightInfo { .saturating_add(T::DbWeight::get().reads(2)) .saturating_add(T::DbWeight::get().writes(3)) } - /// Storage: `Treasury::ProposalCount` (r:1 w:1) - /// Proof: `Treasury::ProposalCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `Treasury::Proposals` (r:0 w:1) - /// Proof: `Treasury::Proposals` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) - fn propose_spend() -> Weight { - // Proof Size summary in bytes: - // Measured: `111` - // Estimated: `1489` - // Minimum execution time: 25_896_000 picoseconds. - Weight::from_parts(26_447_000, 0) - .saturating_add(Weight::from_parts(0, 1489)) - .saturating_add(T::DbWeight::get().reads(1)) - .saturating_add(T::DbWeight::get().writes(2)) - } - /// Storage: `Treasury::Proposals` (r:1 w:1) - /// Proof: `Treasury::Proposals` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:2 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(132), added: 2607, mode: `MaxEncodedLen`) - fn reject_proposal() -> Weight { - // Proof Size summary in bytes: - // Measured: `376` - // Estimated: `6204` - // Minimum execution time: 36_905_000 picoseconds. - Weight::from_parts(37_206_000, 0) - .saturating_add(Weight::from_parts(0, 6204)) - .saturating_add(T::DbWeight::get().reads(3)) - .saturating_add(T::DbWeight::get().writes(3)) - } - /// Storage: `Treasury::Proposals` (r:1 w:0) - /// Proof: `Treasury::Proposals` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) - /// Storage: `Treasury::Approvals` (r:1 w:1) - /// Proof: `Treasury::Approvals` (`max_values`: Some(1), `max_size`: Some(402), added: 897, mode: `MaxEncodedLen`) - /// The range of component `p` is `[0, 99]`. - fn approve_proposal(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `433 + p * (8 ±0)` - // Estimated: `3573` - // Minimum execution time: 9_645_000 picoseconds. - Weight::from_parts(12_567_224, 0) - .saturating_add(Weight::from_parts(0, 3573)) - // Standard Error: 953 - .saturating_add(Weight::from_parts(38_099, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(2)) - .saturating_add(T::DbWeight::get().writes(1)) - } + /// Storage: `Treasury::Approvals` (r:1 w:1) /// Proof: `Treasury::Approvals` (`max_values`: Some(1), `max_size`: Some(402), added: 897, mode: `MaxEncodedLen`) fn remove_approval() -> Weight { diff --git a/runtimes/spiritnet/src/weights/pallet_utility.rs b/runtimes/spiritnet/src/weights/pallet_utility.rs index f6ed741629..8ea6412c7d 100644 --- a/runtimes/spiritnet/src/weights/pallet_utility.rs +++ b/runtimes/spiritnet/src/weights/pallet_utility.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_utility` //! diff --git a/runtimes/spiritnet/src/weights/pallet_vesting.rs b/runtimes/spiritnet/src/weights/pallet_vesting.rs index a0f4b4e85c..63489caf8f 100644 --- a/runtimes/spiritnet/src/weights/pallet_vesting.rs +++ b/runtimes/spiritnet/src/weights/pallet_vesting.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_vesting` //! diff --git a/runtimes/spiritnet/src/weights/pallet_web3_names.rs b/runtimes/spiritnet/src/weights/pallet_web3_names.rs index 56f958ffb0..54b2eec0c2 100644 --- a/runtimes/spiritnet/src/weights/pallet_web3_names.rs +++ b/runtimes/spiritnet/src/weights/pallet_web3_names.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_web3_names` //! diff --git a/runtimes/spiritnet/src/weights/pallet_xcm.rs b/runtimes/spiritnet/src/weights/pallet_xcm.rs index a914efb668..0d332fedeb 100644 --- a/runtimes/spiritnet/src/weights/pallet_xcm.rs +++ b/runtimes/spiritnet/src/weights/pallet_xcm.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `pallet_xcm` //! diff --git a/runtimes/spiritnet/src/weights/parachain_staking.rs b/runtimes/spiritnet/src/weights/parachain_staking.rs index 7c8ac7f678..6c71341a97 100644 --- a/runtimes/spiritnet/src/weights/parachain_staking.rs +++ b/runtimes/spiritnet/src/weights/parachain_staking.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for parachain_staking //! diff --git a/runtimes/spiritnet/src/weights/public_credentials.rs b/runtimes/spiritnet/src/weights/public_credentials.rs index 7e02c53e99..b145ba0f40 100644 --- a/runtimes/spiritnet/src/weights/public_credentials.rs +++ b/runtimes/spiritnet/src/weights/public_credentials.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! Autogenerated weights for `public_credentials` //! diff --git a/runtimes/spiritnet/src/weights/rocksdb_weights.rs b/runtimes/spiritnet/src/weights/rocksdb_weights.rs index 41cfa41b6c..8eb043b437 100644 --- a/runtimes/spiritnet/src/weights/rocksdb_weights.rs +++ b/runtimes/spiritnet/src/weights/rocksdb_weights.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION //! 4.0.0-dev DATE: 2024-03-29 (Y/M/D) diff --git a/runtimes/spiritnet/src/xcm.rs b/runtimes/spiritnet/src/xcm.rs index 0bd04f6d93..3590df04c2 100644 --- a/runtimes/spiritnet/src/xcm.rs +++ b/runtimes/spiritnet/src/xcm.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use crate::{ kilt::{CheckingAccount, KiltToEKiltSwitchPallet}, @@ -48,6 +48,7 @@ use xcm_builder::{ use xcm_executor::{traits::WithOriginFilter, XcmExecutor}; use runtime_common::{ + constants, xcm_config::{ DenyReserveTransferToRelayChain, DenyThenTry, HeapSize, HereLocation, LocalAssetTransactor, LocationToAccountId, MaxAssetsIntoHolding, MaxInstructions, MaxStale, ParentLocation, ParentOrSiblings, @@ -125,7 +126,7 @@ pub type XcmBarrier = TrailingSetTopicAsId< /// 1. Have a fixed weight; /// 2. Cannot lead to another call being made; /// 3. Have a defined proof size weight, e.g. no unbounded vecs in call -/// parameters. +/// parameters. pub struct SafeCallFilter; impl Contains for SafeCallFilter { fn contains(c: &RuntimeCall) -> bool { @@ -249,6 +250,10 @@ impl xcm_executor::Config for XcmConfig { type SafeCallFilter = SafeCallFilter; type Aliasers = Nothing; type TransactionalProcessor = FrameTransactionalProcessor; + type HrmpChannelAcceptedHandler = (); + type HrmpChannelClosingHandler = (); + type HrmpNewChannelOpenRequestHandler = (); + type XcmRecorder = PolkadotXcm; } /// Allows only local `Signed` origins to be converted into `MultiLocation`s by @@ -311,6 +316,8 @@ impl cumulus_pallet_xcmp_queue::Config for Runtime { type PriceForSiblingDelivery = NoPriceForMessageDelivery; type MaxInboundSuspended = MaxInboundSuspended; type XcmpQueue = TransformOrigin; + type MaxActiveOutboundChannels = ConstU32<{ constants::pallet_xcmp_queue::MAX_ACTIVE_OUTBOUND_CHANNELS }>; + type MaxPageSize = ConstU32<{ constants::pallet_xcmp_queue::MAX_PAGE_SIZE }>; } impl pallet_message_queue::Config for Runtime { @@ -327,4 +334,5 @@ impl pallet_message_queue::Config for Runtime { type HeapSize = HeapSize; type MaxStale = MaxStale; type ServiceWeight = ServiceWeight; + type IdleMaxServiceWeight = (); } diff --git a/rust-toolchain.toml b/rust-toolchain.toml index bd89201550..882e9d86c9 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,4 +1,4 @@ [toolchain] -channel = "1.74.0" +channel = "1.81.0" components = ["clippy", "rust-src", "rustfmt"] targets = ["wasm32-unknown-unknown"] diff --git a/scripts/run_benches_for_runtime.sh b/scripts/run_benches_for_runtime.sh index fec3551cb5..57fbe0d30d 100755 --- a/scripts/run_benches_for_runtime.sh +++ b/scripts/run_benches_for_runtime.sh @@ -8,9 +8,8 @@ set -x runtime=${1-"peregrine"} profile=${2-"release"} -chain=$([ "$1" == "spiritnet" ] && echo "spiritnet-dev" || echo "dev") # Dev profile is the debug target -standard_args="--profile $profile --locked --features=runtime-benchmarks --bin=kilt-parachain" +standard_args="--profile $profile --locked --features=runtime-benchmarks --package $runtime-runtime" pallets=( pallet-migration @@ -22,7 +21,6 @@ pallets=( pallet-balances pallet-democracy pallet-indices - pallet-inflation pallet-preimage pallet-proxy pallet-scheduler @@ -45,15 +43,17 @@ pallets=( # `pallet-membership` instances pallet-membership pallet-technical-membership + pallet-collators # `pallet-collective` instances pallet-collective pallet-technical-committee-collective # `pallet-did-lookup` instances pallet-did-lookup - pallet-unique-linking # `pallet-web3-names` instances - pallet-dot-names pallet-web3-names + # ISMP + ismp-parachain + pallet-token-gateway ) # Add Peregrine-only pallets here! @@ -65,27 +65,31 @@ if [ "$runtime" = "peregrine" ]; then ) fi -echo "[+] Running all runtime benchmarks for \"$runtime\", \"--chain=$chain\" and profile \"$profile\"" +echo "[+] Running all runtime benchmarks for \"$runtime\", and profile \"$profile\"" cargo build $standard_args -if [ $profile == "dev" ]; then +if [ "$profile" = "dev" ]; then target_folder="debug" + file_extension=".wasm" # We care about benchmark correctness, not accuracy. additional_args="--steps=2 --repeat=1 --default-pov-mode=ignored" else target_folder=$profile + file_extension=".compact.compressed.wasm" additional_args="--header=HEADER-GPL --template=.maintain/runtime-weight-template.hbs --output=./runtimes/${runtime}/src/weights/" fi +wasm_path="./target/$target_folder/wbuild/$runtime-runtime/${runtime}_runtime$file_extension" + for pallet in "${pallets[@]}"; do echo "Runtime: $runtime. Pallet: $pallet" # shellcheck disable=SC2086 - ./target/$target_folder/kilt-parachain benchmark pallet \ - --heap-pages=4096 \ - --chain="${chain}" \ + frame-omni-bencher v1 benchmark pallet \ --pallet="$pallet" \ --extrinsic="*" \ + --genesis-builder="runtime" \ + --runtime=$wasm_path \ $additional_args bench_status=$? diff --git a/support/src/deposit.rs b/support/src/deposit.rs index b8ba2fb034..b2a1fb1ec4 100644 --- a/support/src/deposit.rs +++ b/support/src/deposit.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::traits::{ fungible::{hold::Mutate, Inspect}, diff --git a/support/src/lib.rs b/support/src/lib.rs index b36ea2a20c..643623c47e 100644 --- a/support/src/lib.rs +++ b/support/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at #![cfg_attr(not(feature = "std"), no_std)] mod deposit; diff --git a/support/src/migration.rs b/support/src/migration.rs index 348b004ea5..5d23432c19 100644 --- a/support/src/migration.rs +++ b/support/src/migration.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::{ pallet_prelude::DispatchResult, diff --git a/support/src/mock.rs b/support/src/mock.rs index e8584c4519..875c6968ea 100644 --- a/support/src/mock.rs +++ b/support/src/mock.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at //! This module contains utilities for testing. @@ -34,6 +34,7 @@ use sp_std::marker::PhantomData; /// WARNING: This is only used for testing! #[frame_support::pallet] #[allow(dead_code)] +#[allow(clippy::manual_inspect)] pub mod mock_origin { use sp_std::marker::PhantomData; diff --git a/support/src/signature.rs b/support/src/signature.rs index fb908f9518..a98164b5ee 100644 --- a/support/src/signature.rs +++ b/support/src/signature.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use scale_info::TypeInfo; use sp_weights::Weight; diff --git a/support/src/test_utils.rs b/support/src/test_utils.rs index eea69b885c..4fac8c3dac 100644 --- a/support/src/test_utils.rs +++ b/support/src/test_utils.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use scale_info::prelude::string::String; use sp_runtime::TryRuntimeError; diff --git a/support/src/traits.rs b/support/src/traits.rs index d69dcd592c..1005ce8ec4 100644 --- a/support/src/traits.rs +++ b/support/src/traits.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use frame_support::traits::{ fungible::hold::Mutate, diff --git a/support/src/xcm.rs b/support/src/xcm.rs index 8f7b1e3807..25436211f1 100644 --- a/support/src/xcm.rs +++ b/support/src/xcm.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// If you feel like getting in touch with us, you can do so at +// If you feel like getting in touch with us, you can do so at use sp_std::marker::PhantomData; use sp_weights::Weight; diff --git a/zombienet/README.md b/zombienet/README.md index 2f957525fb..22b9f809b9 100644 --- a/zombienet/README.md +++ b/zombienet/README.md @@ -51,5 +51,5 @@ In case the relaychain version should be updated to reflect what is deployed on 1. Head to the [paseo-network/runtimes repo](https://github.com/paseo-network/runtimes) 2. Checkout the right tag corresponding to the new version to deploy in the Zombienet environment, e.g., [`v1.3.1`](https://github.com/paseo-network/runtimes/tree/v1.3.1) 3. Run `cargo run --release --features fast-runtime -p chain-spec-generator -- paseo-local > out.json`, which saves the new chainspec into a temporary `out.json` file -4. Move the file into `runtimes/peregrine` and rename it to `paseo-local-fast--.json`, e.g., `polkadot-local-fast-v1.3.1-e1fd37c` +4. Move the file into `runtimes/peregrine` and rename it to `paseo-local-fast--.json`, e.g., `paseo-local-fast-v1.3.1-e1fd37c` 5. Update the `peregrine/.env` file to set the right Docker image tag for the `RELAY_IMAGE` variable diff --git a/zombienet/runtimes/peregrine/.env b/zombienet/runtimes/peregrine/.env index a44d7f1d84..bd5cfb21e2 100644 --- a/zombienet/runtimes/peregrine/.env +++ b/zombienet/runtimes/peregrine/.env @@ -1,4 +1,4 @@ RELAY_IMAGE=parity/polkadot:v1.15.2 RELAY_RPC=50001 -PARA_IMAGE=kiltprotocol/kilt-node:1.14.3 +PARA_IMAGE=kiltprotocol/kilt-node:1.15.2 PARA_RPC=50010 diff --git a/zombienet/runtimes/peregrine/paseo-local-fast-v1.4.3-3de4702.json b/zombienet/runtimes/peregrine/paseo-local-fast-v1.4.3-3de4702.json new file mode 100644 index 0000000000..00a86d5f82 --- /dev/null +++ b/zombienet/runtimes/peregrine/paseo-local-fast-v1.4.3-3de4702.json @@ -0,0 +1,216 @@ +{ + "name": "Paseo Local Testnet", + "id": "paseo-local", + "chainType": "Local", + "bootNodes": [], + "telemetryEndpoints": null, + "protocolId": "pas", + "properties": { + "ss58Format": 0, + "tokenDecimals": 10 + }, + "codeSubstitutes": {}, + "genesis": { + "runtimeGenesis": { + "code": "0x52bc537646db8e0528b52ffd00586c3a061ee088381d581040096bd2015189ff1fb112191ded195ea26b97742649cf123b3f1505df7813ff0726c8dafb2f81088b4573fd0f037cbd69b1ddff217f17c239bcf0759868b2f73f5f73fed80c226c6a4bffff936d84a8354208d95bee1d25224e1bb61af560ae7876a45fdfaf18aae60edfb2e6901e9134d3dcd8ecd723350db2b6d621ac606513ccf4641fdd1cad6226d38b8dab993ed6389ae96910c54ccfb4c654ad3ee8551521425a8920e955152f99e658e3cc5aeef76bf6c8be4feba39aeb938da3572e78c9fd9cc675eed3d1c4fa002da219a96d69c54a6c1c7d9f0675e5214b4c0b59ea1064df04b33dd938f3d9defef6c88a95fdbd7dcd1e59b1326fb6bf18cb73565db6cfe9a3ced9838da3575463b2bdd8389bed69e3e8ed6fe3eaed6990c54cb74c6b48d5a9da4e429a699049e67e58eb4d31f74d6beb6d3d93ad65e7ab1ce58d618b60e3cc9aede929f5516f5a0e487a3a16a15da3b718ec1a3d52872dd6f26691fa70aa6972d397a36ec45cdf7f511f4e952a377d90a3bc5cdf87511f4e952a377d90ebfba1156b69f3487d3855aadcf4418ef2727d5fa43e9cea991c25e6fafe8bfa70aa54b9e9835cdfa7a3924b4595eb91ba8e4648aa5c2f368ee63e1d8d54aa5c8fd4488dd4484d831a339199d698eada4f8434838d33fbf6f43d217021fbf5a6fded1a7d684bb06bf438b26f4f4f47257d268bc1aed1d3aed123f554ad42c290521bf3045bba46f3ed1a3d1d87d0aed12335a5852990f5f48a8a2ad387309ac1c699fd7afa9e10b8907d7bb3fe768d3eac25d8357a1cd9afa7a7a392c6b76b7da68ac1aed1d3aed1db9276ad31ed5a7d1dfb61156d59739734d712ec1a7d8ffdd056daafdbb57aa4466aa446ea2ec5aed54f75ad5b42ba83aca7a72da534ec166700e10a41861066088106251a841083121a216451628192164a612881a1f485529692174a652875a14486520b94c650e242298d92184a689e2891518a42090ba52794a050c2527242a909251428a540c9054a5428ad40490a25334a53d4304a2a502aa35484520e4a422825a1348492089442a0848412114a40287540498c12089432a0a401a517946050a2414906a51994aa946250caa2e401a50f28fda02401252ba520947450b280d216250e28d5a08445498b5204949c512285920e2809a3a48b120e28e141090594eca0e40525554a6c500243922c94d4a024062533289121091049c22489411230929c91248c246224b94a324692299270812406245e400803c9982464920c91c488244d24c142c90d4a2c80a40449be24c1218904924420890f4972402203085e20b900922a10be40d205122f906c81e40b245948d020e1020918484c90c4862435203902c955922b926c91040d1223929c497243121120f982240448c020c180122c49c424e90012112409011218905400c90c494680244b9220905020090840c802218d245b400023891749b2926891840549ba486205021a48aa40a2059216904c000908906091a487245d905c81a40b922c90b040090e20d400091710688084082456288940921924518112aa246924d92189154956a004882419480206c91048c4245993048d245424a902c995241c50b225490d92d040490e48ce2491c19134475a70e48b23611c01e3481647b438228223638e2c7144892357474a7024eb881147c41cf9c091151c698248088e24714405478e3822c511121c41e288098e943942e648088c44c0c80b46b018b962c48a912a492f487241d2194966249591144512144958494f24b520698c243192c2480223e90b232e1869c10855d29aa434926a90844652569217495d247191248324354931488241529aa41924a149da22498ba42c92ce24b120098ba42b92ac48aa22898aa4152425917495744492124946249120a904493c246d20a987a41f92ac9238900444d297a42d491d48f2927481a41c927c48c240120e495c9226909481a4112449204987242d495d927648aa405204924250848c22698a8851648c2261144153048c225c14e9a2c81645ae28524591141439411133455650848a22531489a24899222c2872a6c898224c1481a288088aa8a0c8088a0c51444c111a8a54a00897221428f243110c14c940110d14d940910b14f1a1880e457a480a53c486221d281243111e8a78a0489722578a782982a5c80b45ac100983c81744b8209205912e887841248b081a2267886841840a225b10a9828815445630240544c010c900110c10a1227201222e10a932640d112f446420e2039116885c19e282216a86c460481943d2d420869031e48cca6548d6102a866031840543ac889c60480686686088962111189245c81842d40c79418819425a304406241600618d1027843421e4072147085942c898205308b940102a847840881142ae84d02044062133088941080c42aa8460400816212f08b112040642aa0489411035415e10640c211d1012441031849840881042ac840021840342761062812055043123e48b101c846c115283901b84d82024072161826405f922481941d204b90aa243901882c030548650046cac48b221c8960e5a3004021dc460080c4368f06003b9323f21c845f1d3c54f19b82572637030811c99dc09724cd0a6c04d8143225704292688171da03124810e6a70353639e8f480cb1aca61280b1206364ce0c2c8430ca9c126024340f458b18304433e0c6dd911061022808811f202dc1943160022822136dc18c1901b86bed89019bac050971d26c845e4203207b255de40ce40fe922f907d407a81101aa12e8050010489214dd8ec10840540bcfc78e007180f9cf881010f9e10a2e1470b3f5c109a8007657e54c951440e222e141e303164072313e000870ec4f0008c0717b0c10122583a7841770192810ec2f060041d44d18112421ae820031cf8504280831b7ac4c0c1961e5b8ebe28671802e3888ca134424318a989cde0c112425a82b47044032111c464304223889520588488c83571c2111138323734372ef017b716dcc0080206900dfc58e13870cbba6df1f30517e626c62d0bdc05100de08218d3b8790104033f1900f2c32dcdcf05643b6034188c9b163960807080e8889b0b7e3040840491096e61d0aa9059e05646075f602f6e5f102971eb42481a3f40dccedcc8f8f981c8889c2f40c0e08a30b205c80549109075006701a12db82a38177037e05ae091060f19f088012e0b0f337030f08001cd8a0d161e8ce17106073ce06218e28187163cb2c09d0102c490171e56f028830715402c60af78a4618107143cb07025d821c5cf193f54ec6062c7123b94d891440e0f003802005b0070c34f0bb70800c0860dbcd800cd065bfc58f97121870b3aced021011d11d0610391246e30b063c824a0e3ca4d0637336e33d061e546831b1ab7346e67dcd4e870e156031d556e6b7450e968e1f602222fdc5eb8e9708be1c6e5460123326255423d5c2d6ca8e03183211718a55162196a8190044a2d3cd418993124466c4b902b466718cdc0a88c1b0e312b3c6a6054835206a33437aa9b0c463038e2e2688ca3326e2d78d0825b0eb72cb72b462d187a010f1adc6a208ae2060122286e371061dd68202a73b3812805372db7198854402405d113b2246e566e16b879e006c44d885b076e45dc7ab80571fb402c06b828704218a1c0e8043f26f8a96294c4b500f9c0ac0b590680f4f0920148075e31180961e4819f25808ce0393c02408a7859c944e458014f0b3c556464c8d2e43822c7103944802b43e484903286e420248ddd0051098848801bc1500f433b00198208865b82211c88aab018442fe090018e3470a0818306386640e402073b10b5104383e30c1c66e070018e32706479900687131c588083080ca1c18104866a7084e628cd51d6d11947621c797104832330ca2a212f387eb8490247078caeb049c19015436a7860d14d60e8cc90d510568e0f39180072019c122f2a9c99db184714387201481047543f1a0012e62802382f643c1c4960ac016e06b82e30174733089dc1117154830c0c8e05e39aa32c4259e0a4c05a1c619151e06804375e28f2c450961f31704ce0500024043614d84e2054c4510b361c38a0405f71e48cd642c74b9bc13d71e44c2d0da335342cb82b645f703200f2a5364411197ec6d4462044032020388205ce04425a0879814323c402212eba31dd124256425984a410ea801004842c7014861017a10f08092184835006847c8865119241c88632062130472f10e2410808212c2110083d2194c4911a2127844820d48450995815a3171c7571e482a130844a808308a12ba11c86c628b30855c0e88c901237256e43dc4c70b3aa3b540b0881c11017590484b8008807849c807625881138273e831b623014415cb871036e8b1b597eccf86102f7c58d198a648153a08405462ee8008cdb161b666c5870040435aae0d4e0b8a831450d15d4984050143570a8b185b6040e061c54e06651b62084c5688cf24a69a5ac3243c3c68cd015232eee19212b311786be300ac3a80b0f9238c2c2088c92aa74c166053c5c6094e58112472c383a63948507262861509e2973383243880231188e626024031e680c9961a4c59017187d61b445a94359435981d202250e475a18896184c6c80b0f9028b794569c43c2047961080c7029c00d71a48c9f713382cc10248b201d08424490249ee664bc051fe36270d0c5830f00d57084c38f11427c388a01f782210c0c51e02709213d08e922d30148871f597ec8f023861f30fca8faf1c2110d47567e44f0d3819f30383482841164054069706984bad054202b73d482d80b34276833d09ea04180e6c25116b41666351822a3a4c183316831d0aae010410f0d3d10a0c980230438408043081c62707c80b6029a195a161a15075c68340ce9610683a109ccb21822c18f18d9045a033d59168ba12086c2fc84f153440f991e140881420896111c7065c8c874e0820eca106a8110193231b806b21000d1d0411a19086418907911a201590588961072464c4d4c879816a11b6234c462108a4108061a0c421888d910ab6196460ccb910c8eb68875217481580e4330886921b4438c8b180e423f0885406803b12c84c4085519d180c70b625bc42a1083c0d019421e285f100a4268891b981b0fb7ab9b985b066e3edc46700bc14d04b712dc3670bbc02dcccdcb0d03b7256e44dc4070fb72fbe15681db113712dcbadc3470dbe166c42d891b12370e286d11bb926401a3181865018011b80ee0c8e041c3b305cf191e2c9e27ee0cb80c0e23c70b8f0c391bc8c9c01007846aa815a0bdd053905ae84880278bd215382c7022c8f9a1c80b723420e322d380ec0238313f1ce8600c990f3f41744006101f4a1884c208e96073c56c8dd00c422310e280d017a1176caae020871b14dc9ce0c6899b2638e8c1860b9b33376338d0014711362af8d9e1074d4f153649f450d173029b0e0ce97054e5a7079c95d0194494188a00f9020be652009bb132c091c0ce6047096cb65834c81978a4004b41ab4aca02030347f1dae1558120555e5c5e14c058af1b7066d82f32215e50bcb078c8d80fd82b682cf801f3b301a0180ce102c46ac8962351108df901e367053d5308597304cb1e91c48b0d081a1a5c153f4afc0cb1a3cc10181d553f6314d9e1270b2557785c21fb61080e41bab80d3f561025314343cba25d61a9e849419025c81a481bc81bc82d36033c29b03ebc5a488281232dd68a245a8eaa685c08d9c0cf07ac17b815d82a84986932f76ac645ce1a4b831b434e8aa1187ece24b900121f641ee08161080582140154868c0349cce0b07ec8f054d1bc20824417019a163f42f494a1758183091910415ad0c38490299258e08813b8353f447414414210c580448a246a800851c4024060f0038515812c881d5028a94092176422389a00768105c10f17342b7eca5c187229a09d69287063d84002f781107050e201243c24d9801015002141510b947ca006182541fc54f173f593e6878c9f297ea4f829c10f123f4ec8c2d0b0a065f173858e17864a80248910b6d0c4a07d8113430997a10a28d182bb325a02842e767c612383844ab6011a183f47e0336c5f1ce182b685ad89202608a2459033418ef80101122b484620b30ab2c50d1a7644b1a30348b0dcaa1e15f498e959410837e4a4a10402488a08fa40921f90b8608402d6082520907541b2830e2c448a10b2025b832131fc3421eba1516003c3480edd0c3f235022840e1868610c81e216834e04778bebc5e5e2a2b9595d10b78bfb45ec060fc8a8b1c30d269254b9677446dc28ba2bd9078e4021b40586c1910d3f5e70199806780635a4e84a806380d56032b00c92cc90c40aceba52188d3152e2c70538207eb4c0655104862233fc445124cb900d492ee04e70c3060f74c02dc066e031f00b7021c081e0a7053f583f6686641882c0113343341ce980f3000e8c1f2f7eb0f8c9c21d81b322e7023f28f861c1cf098e60f82101ae053f2a3892e1678b9f14fc7c212403b8348094200817393d1c4140080a843021c44b1032822001644610344194c069867839f244120d188d1b0b7031481a93b404de2209869f2770541c21e3c814372c7282180244ed04353235140c8d604804361d6c11e0d1028f2a3c5c300a63d401a3208870208a00510e3c51f094e191e2c61637b8b8816626c52c05b332b3236648cc4c30fb32cbc00ccc0d2f373070e302b92a6ec0e0869a1b31b841c68d16e4b6c8719143c3d3054f168f17b911dc40819018dc20933b226744ae8c9c193917e4ce1c885b0da96028053643d8146143c48ccbcc02b30a006100080cd0171e5ff008830718cfc037700dd8b86063c5a68a0d0bdb191b0b807001c40b205dd890e2ea60a30cd904f904e9c4cc03b30fcc84d8e1821d67ec306347173bb27678c123091e4bf05022471739b2727891e3090b450e2c591ab60cd91a9b0529040902f2033c4b902e20cf20cdb089c036846d04365c6a24a81561c30b1b5936ba30aa3282c1e8059b151b16db95232eb8268eaee05c80abc1510e3828702ac0d1e0680bce08dc185c1247371cbd80d3a20816113284701152812210b827b84b5c23ee98cbc455e20e718b50cae272e086b95d92387177b8390c51c191140c79c2bee052d935160644c61011813d63596053605560cb0c91a2c81916cb4a6191b063ec1296099b842563516087b023b04ad8135822ac098694b1137062256075b011b0541607abc5d660b3d81b7a8d85809dc16eb136741a9606db4283d158740a5a8a56c11126ba4c9f19124503ba89fed249b4097a4c63f513ad448ba031d04b340fcd449fa08fe8219a882e62085623d123683147cca814302b9aba45f582ca036a172815887a81eaa5da506f98922281c9120316a080042020690403148000221c4000212849820484230128e24107481ff8a8122032ca51442a11d64cebbb68b55d7a62d2802552982ca1b06449586d13284b4b96b88a8a8054803e2da5c004ca9219102e146ae969e90419100ad02528262a34a0480f900940392d45451101041b402440532861051d203a50282a382d61c1a9c912275232141504c08293901d2011a04f4b4b262c61c16929cac993a52625901c680a25acf003040721205be813d4d2d3139325529648592aa104262994304211901b6e406ca0519e3029e1c91326416a4001ea04284b4fb4d0a525139644815a0285c2094e96a6d88040803e3d71c2046aa9c992a525138480d0c082d3920a4d4b9c48c950509652608189d281cc40974a801205ca122625408992a484ec03244b9328252c35010222037d626189e98985a523032881c4f0e444482e81c0c0034855109017e80d102cf40a45a1842852966640aca870821313a044296189132979a9014c723a40aa080171a18428514e54685aea01a405dac4c912a8a52727154a9001a1a24f4b4e4e58e2444a6622a50914264e457e7eac8112f4230d16a09c384541014a0526403f6a409f9e969ef8fc4003e7070d66600293a5273a3f64409d5248210524b01f6a5870827a5a2a010a93ff8881930a502afcf8010326a72826f0f8f102da6409ca094e9ea0a8b0f4a4012a4439fa71868d1f6650a8a5a7252ea04f4e9e58306169a9014b9c48c92c98b0b494dbf951c653d18f3474498525159a96a4e084c99312643fc8808a12b5e40993a8284e52a43009fad102fab4e4a40214932513962c35890265f6630cfae414e54903983c396922460950587862120665e2c4440a18274071c2540293062c494185149c407192c21714ea29ca93254e51a42c39655113a2447192b2448a13149e9c96a04c89b2848525a6f28717f469a9c992932752a43081a202d08f2ee8d312940a529e9c34d9f9c10545e189090af8071abae42465c9929313159a969c963c991025a5c68f2d281494a51496a098403d991025a5f6430bfab40415256ac9122851683fb2a02c3460c999a7274b50a03041a1842552527042614913282a44690014272c808212a584254d2934c1823ea5c0c4898994254e51aea0514ce8f961057d8282b214b554056d02854909443fa8a04b4da294e0f36305d4298a094f4b4f66e813940a52a0548872e3c71429a8f0f4c4c4c60f155026504c9a2c8112c5499325a827274f4e4b52847ea4803e2d39452961090b504e9e38690093274e984431f98f32f4498a0a519c4e58f2f3430afae41405ea294a121327264ab11f51d0294ea464a72526a728065052fe80822e413169e2e40993a8254b2a2ca91082084d964e38818908387e60f5fc7882424151214a094b964e602265c993d3121313a8a7254f4c9c96f00f272813a8282a342d7982b2c489947c0214274c4ca00640fbd104d00f324f9840458142c1063f4e409d4e7092c292252826272c3d596ab2e4a9c9d21294db0f269c961a90c2520a423fc650149e983c797a12258a141b3f96a051a0962841974a80c2e40993062c8902b5e4090a8a9328413f92a04f4d9c984c59725a720214274da02c4959e2444a7e7a12258a121427294449827f20419f984a5842a10413d02728284b4e4b284071f21f47407162c2ec8711b404274f509c3841adb0b484852752a43059e2b4d4e4891315724c25447992a3fdb8a24f3d3f4a40992ca1fd20014d61091328264d98402d21b1f95184039c3c61e204ca0914273a3f88a04c254479d280254b502a94b0b4c2d2cd8f21a8539420e28f11d028264071e2a4c9929314274b9e308182b2948213a725292b2c317962021423375a979e3480091414154c580255c292939326509c2c592273f283e503030b2bd3a9905e5151e53a65651eb904b9449552bf6b75747874acb5564747c75a1ecbc3a3733defa31fedba06bdf6ba4ef45e0d448a5eedeb75f5ae077aaf57178b5d13c0ee762dcf6b79dd5ed34a6dcb6b79e3e851da755ee7799ee772dd568bdaf4addd6383ad71a4955657d794b6bc96e7792dd0455bb769d75e47abe775476b47bdaee535a5dded55cff3aeedeedbaa9e573ddbdd6e8ffe743df5ceba56d775ad0ebc5ebd9de791dfedcfd575de0776d734042bede8ed40afbda62eaf41cfeb9a82d6a3a0d751eb5d8f52da1abb5d3db628f5ba6eb0a3d745291daf0bece8ed5a14f4ace751bad475ad96d7c4eb68c7a34379286c1c5d2e10ec68773d6a3d7abbb03b6a3daf6bcf865dbd8ef6b59eadd5f3bcd07a9e476f48b21bf42c08d20a7a945ecfeb17e87523485ddd0d96506bafe9ed9a52afa374d68d2e8f5e4abb56839476b4015dd7eaeef668df6e10f43c973752afa9f53cda3593cebb24095edf0b82ae7bc1aebbf6baeebc259652da6183dd1d0882afb0dbde6e4a414a36a5d48752afbb5df5d6ced29b5a77b4d67dd3b5eb4b9264935d3b0a827dbdda1e6dd1163b7ac7f1b6ab3bf082dd75edddeebadb75a0ab0373726e83b49b8eaeeea377a4bdc36befb6d7d7f33aaf5290825e773b4a9bdeae5fddb73bafbdde61290563ddb940d0e5b95caeaebb032f0882dd05bbeebad656abd575ddd8023ddb6ad916035a976cb55a0d82200517d08a75d71debdabbdda0ab15d0dd4d6bea757f9ed7b4bb6ecff33c1b94b66e773bafab2e8f7a7d69839eedf6e8a5381ef5baa62def76ec761df5bcee17edaf3ba4b47b7583200cb6d35588a7eb04c0ba3b7adbbb5d471b2fd8d4eb3c0a765da52008820d82f782b741ef82384d9b760776572b38b6d7dd40dad8dd39b7f300d05dcb0ba2b4bb8580db59afbbae69e7755fdbb9a8cbab1d7d79b4a320a537301bd0a66b58078379de6d5a77396456a8294f77b5af51773b4abfee4a29ed037894d24b290e0e4ed7aebb760776b5767789dad54dbbea7d15f4e96aed2aedaeeb68a594527a7f6b7783b71bfb764dbd6e79dd794d9bd6ae1b0100606d4abb969dd28eb6ab37f036e8a6b4d6eed5755d67bbea755dd7b4d2dbdd8e7ab46be779395ef7ceedbe9ea743472bc755abab2b9853bb5daeee7675d796675bd5b31ef560ed79ae4bb391b5edba6fd4a3d46bb53cdab4bb7d6395764d3deab95ab456af7a16acd5001dc6187b96badaeb3aaf00b4af8ea7536bedf66ad75d831dd88d2e97cbd579b4d6264077678dbaabd79d085df7a503a8b5bb97d735d802a02f9b10ba95eaedee7d29699b6ecf45eded1c57777dd3ddd9dbf776c7ba6d77b7d794d6ee4690d2f6bcee24dd5eb78a3cda5d47bb5ddd21b9e9ba8e7a5ead5d6dcff3bacebbd6bb9e77eff5605e0ecfbb9e473daf9b767ff476f436783b0a5a5bbdfaf23c0a42e77594deee52afe5b93ab0eb3ada5ef751fa855f48e9f77d6149eb577e9476d3afbb8f7e5ffdbecfa35ff77c1fede9a61f0de947ebf7f5f785b4694f18521ad230a4948615a4b7ab4d614247baebba2f58fb76bddda55ed779e0bdf77677675b392dda759ee7bd68bffad5b4697bb429056517eceed64a3bdaedd198b5d6765dd7c19a52ea75b4a3dd3400dd85bd5e36af96d9bc8cd06e1c8f52da7dbb9baeb3d15d9b1655ebb56aeddb7540fda2ddeb456b07a31dd84dbba665eda61d95795dd7aff63cefa6e98dd77dd9dc78bd6044362f98cc4b02619dcd7ff3baa11d9575b4a3b4dbebbeb7ebbadbdddb75b7ebc02236605f2260df68b06f836dd3b76d34e8d5eeee2aa5ed35e5698f7a21a5614729ed9a76d3eeaebd21d4eb68cbebe875b5eddad5eb6c77ddad5d7b9476a5dd5d10f4bc7befed4b2bbdf7de4baf4729ed3cefde4b3dcfbbf128a51ea5d7eb6e5fda97d2eb02c1aebb1e6daf3d6fecaefb767dabe7795e77bbabddddaebb2ed7e7515a69f5687737a59452cfb35d48bb414ae9bdb4abe781dd4d29bddd5dbbb1bbae7b6c976d35ed8e525777f7edee3aafbbbb7677dd7577775d5710ec46b0ebbaeb68b579b7dbf3404f080e1cd65a9be359eb795e108f761da59ed7e5c0fb510a0ee521da58c1eb759ee7799ef5903e0062fb613d9b33f3acd7799e075e075e7b9ee77db5bbf776f75ed7edeabdb7f33c97f5f1eadab3dd9e47e9edeeebaeeb3acf52af95d20881cace68b3e0142585a514bc1eaa434a0a4ca09e96527002f59f06a8f064e3a0d6a30914264b969c98484921ca0ef2099312a23c19dac0c9c6d2d3d392939414a2947024d20d96a2a294b0e4a48309c7630329252c3d110599e0c46929aa06073a78f0d8a0898d28284b1688ea8062e2b40465e984254c9e9a94b0b4240a9414169c4aa881b3c25213284e964071c20485124c3021ca8f846a10d510c269f2c4090a252c817aa2021313969ad876e07c7e56883205ea87894909252c31e1786cf09d0d749c00c5090a4f4c50780a4ea0a0a8e0847b9800a582cf120a4ba0a0387192b2a484272729d0704d969c969a38455982e3b1c1920d9698983c69c09225274e50434e4ca09e84709e6425dd204a14a71ea6129834e0c993284e433c982c39f5b0b0c4b4046a8525283f3f504b27c8769ea09e9cacb044fba80e28519c4095c0e4090a1327a825504e5248214aad06dd600527262c3949c13e4e4c969e9430c3690265498a14264b964e60e21405ea89163e598a5a7ab26405262900dd9c10e5c99213a03839e184284f6435859f28284b96521d4ba04471f2e4b414b56469c9c984254e51a0989410e5c913264ba05658a2454159b2442f2c4d4fb049a052532d5ad02535453d4f4a6aea4e49494d8153539dd43965edd4946b0c4998aa3029a96ba5aad4544b4d5ddb2448d52929297ba5a4e8548b042a2545a5a43ea973ea9e746aea2361aa4e494d5912a4ea9494549daa525252534d82549d024998aa52954e495512a8949494d454272545a5a69a042a252525353575a73e12a42a25814e79244cd5a98e044a9b043a35754998aa53535396043a35d5244cd5a94a029daa249ce0c1a0524a6b0a4f4c68f548562c4dd790960b9b37bb1ebe96b6cd9ac59b01982a41a69448c4a6ab6c125d25cdd5b6ca269bede90748236497347fa1579addebc172567153cd1fc691c32a826551fe4a5ad7e8bbd3b1feab5d0dea699079cbf661ade390fb2bb91e369fbd838d4d289b69d75acf699cebf631571862337cebe15786ff6e1f8665cda1f83adeaeb51e96348b65589b56fbaa347f25ed5a2d4644a391b962d3bbadd52b696e95e0072554972bcee95a7bd85ca134c14c41ead9d0a0aed97f7fd73e6c69794bb3e6a6ba66cd9a35d92ba16ca6af25d8358ac5aef5e9d861b26b7d31e741b5c6d16c698d7bb627a23e6c9e72d52e4b9802499f4386484c4088eccaf5a1ade11529f551a97208c83a365daace893a0e696a8f9ef9c48056b4d0b8445a3ba8595664faaeaedac10d4517f5e1c395693532c16c82475eb5755061f0826c4e65b3adc866bde9657b705422951b47753ec1a9e6fa568e8b0c45111ca3eecba45712102237c172bd3d8cfaa035c8f65eed80666b7636bd5cad90f5df38a4a91af1a84622d48a5c1fd2afd65a415bebeddaabfebb72668790d233902075d7a65a6b083b2d5148a6ee42d9ec6e522e1e7625cd4b5fe8a76817afa7147bd80a96a29cf72a9c5cfd7dcdd2b89c7cdf130218d27c92bbdfb299934dca45083467c57bcdd2b57b1348b366e122df9ff4a4b5bd804b087608419833545439eff5a157d25c2da9ee0668f0c1851e8ac859c15294abafc2c9d5d20a96ce7daf0292abf7ca2a20b9d34a84fa53c9daee2b96874f246bbbfff0692582f78acf5bdbbd876fd4da4c309bf4eaaadea45814062f30f1650c2a34904514cff7217821696e0a07324558c0024698e98019399aa3376f229c8a2a57b3344e28df572d99d690eaa9ee4b8110056bd3c9c18a4ccbf42a0712641f4eb76c6fdefa10d6b7a311576eb2f69d54be1d9a6c71d377efa654fe30140f333dc150ee9dd9be2bbd5f25d4092dd9c35fc0eed7637a42d164ef1d14ea8496dcddec7c3d0c85a2c91d941f56ae7287bf5091329ae208a3298ec0e60ad9be96f4744480d1144798af7cdf955fa8485134b9d669935db3267fa1f299e1025bbab48d2e1c184375a55034f90b95d1144750793fac5c8154d4092d2e17289a5c0b535134397a53ccf7947640a99149afb6c02043d5fc856a078b20aa7c414595a3988a1488a9e82f36adc5a6943c8a609305161848c30a129cdcefdacb40686fcb1bbcc8395da3a2bd32b67be27637ec6ef8c1636224a2daaf07af95e9d50d12f8c6a0917340d18ea941ce69ba99468b2a06bfd1963587a068cb223437d535232d6a9116f57b2a06487a65031ad9bcb96f33bdba21876c82b90f8ad407a5b94f4b57a6573764b9997e5e776d570abe282da2bf5f84b471b54b5bef34f4ca2edbd2e976a6d70622b250be0f4129241515550b14a9edbf7148df1b95d472872dd1ab382832d71f3467ba32fdad1dd022487a5583964c33cd218c5eeaa3667a6f3442e6ebbdbbd7dacefd6f0cc054feee959d6de9f479ef0ef565fb6e545245afacd96ba26bb287292532dbf6ed7844285f4c6951635b6628b56c5f7335d31864fb2ea1d4b2c59516f55ba3925ab698d2a2c6a057bb0884de433b76af995ed9a04689fd91bac71448f3f9b5c6993d727fef13bd71f4ca8634b91f446b5c7d63b3e658d7bad6b57e8f433cfcd162650e8ec66ac0caf4aa863063a657355ce51ef628a86dfd1ed2e390a0aef5bbd64dc8e77e8e18d45ddb2d6109647db8026b29a5169ba31232eae64ba9a5b4a4d9969416511d651521ad2220e995162fb9cbf40a026332bdf1522fc534c8ae1012a1e1002885755de7e19abb846de912928e0198caf7e2fab096446a066b59f354ad3586e8ee3b7dd85d393bd2dd77dff77df5dff77dd8bcefee5fed3a26193aafeb3ccff33caff3bc7bf55dc954710812406289dd6243daf43d8230959928bdd9af94ac57a1f56e82efee954ce0bddb7276c43281b7a7d98a5e695fcbb03defa1e78556acdfa1ba5c1fdeeff5b471a677bbd7fa1e87545ab109be715497bf2375d889b5fcde95ddd9d2b4073153f7fee779360661bda5d9cd8ed47bf73053f77a9ac32e9d9a7cb277a82ef773066045b1714d5f8eeaecbd4f1b07327dbf2036ebbfd7dcafe390cec93d1aa157545454b9b1d9fdc3515df61e76a22debbbf44ec722f77da4f6ca5ab169df61a6db5d6d2d10f092e9150d66b209cbf73832bda221eb9e36ceeb42afb4b46b9576cdbcb9ef95e6546e0cf674ddc3aeeb86d8237557d61c56b1e7f55d59deb148cddd911a6cdc8c48cddd3b0c66a6102440da26a9dcf56226d204f40729e69b43d8edaa3d28ce1a13e9db5beff5b771667726eb1d6c5c674fcc488dd453b5d631215d4286300808714198aa18ecdafd7d08536a92caf7f7f5b4e68b1b10d20e69a637141b373b62d7acc9f64c509d4f887265fbda42f6c9b6b610d2c6d987c0e5dadf87b7acb98ed7da2375cd74b447eaa5d09e5e2ced69e862adbd7990edbb30db7b40a3414bb6b71e6c1c539f6c9bed5f1bdab56b8ab9de24b33d156fe3cc7eee5e4cfba8abb7d5c6ddaed5ab19ac647ab08f688ebe8e7d3a12e95f0c8a8debeea6228b1a5a7320e9d51634b952e5f7c3a32ad2320ac9644fb359a93ad3ab2d6772cd9562731c724fcba89be96f698434a7b23da53e66465cf9dea453e47ba75bbeb80996e94dba269bf67d245bd21669592740d6d74c9b077d1d9bde44668b6995aaa33093efbd238a0415558e9e2abc8df34e5f25d38794fa783d0ca7c4bf4a4a8b446c866feaec3dc466e7f0f562694a65b1e697f92495c3dfbb4ea98fd65fb4e885cdf0f6e35b25a5452336c55b9a6bd9f4ad59b3268d7c2f96e614911a9634bb4aa68ba36af66e7aefecdd8e47eefb3487afa55973bd1d89787f3d2c6746b2e915114f695115cba6ba26837f95b323d7fbdec266cdadbb4ab366d743af346bf63efe8e4aeebdd3718878a4ce9295efbd87346c918e45c687d8bc39b41d05e6d75fb88e466ef61e86747c61732abf2e965160161f9666cde129f5216253fc131f99d2a2f0e1916c585a7b3abe7093cd63697ab7a7e3917b8f2241e5420e61b471e1e96fe35ca7af6391ba268b98d222330cdf3dc49412b56e5df554b4a8fb579ade54ab7a56425a6bc0cad7da770d952a7b325c65eff621ac4f6feddb62b3ef3153e3a6ba26dbf2964cfdfb5ada5babbeed4623fdc64d53547976e4bedfd89ccaf734237548edd16925c277f0fd7a658f407c56aadc87eb15cdf442489a6bae51d0227a6a6d8dcd3a26d3d72b6ba3372b55a6b7fdeeb764baf7f5158bfab0d8bcbfa7eff148a5cadeeb68e4dec3a6fdc53323fdeefd0e33d957aabeb5b862d1227aa496eaa9db968c90d61a425a2340d2ab18b0f214550e6134c8ac54d9756a8f76de07ed91cefba43dca793f668f70debf3dbab179ff668fc8f77bd823d8fb211d8bb4b039bef5d76d59e339e5159f93e595daaf9087a1e6aee0e338acbcd2f32bb3c3be535e99fdcace6d5ca7bc627f45e740c729af10fd0ace71e0f3e7386e53ca82f02934bb0c9fb4a19fe56ffc0a0cb5e7367a64eff9697b8f8d9f3d37bacd6fca2b3880f089f17ff039844f005cd6e3387e1c3f878e039f58761f7cfa1cc7af587cdad78a6ef119741c41413f7f1e844f1aed413f715cc76b58263b103e83f099e3378e818e7f061d089f32dc37f829fb06f82c12c2a7d07fa30be1b3e8dfe0e7bf013e8d6c607ca39f3678943a7ebb8161b8d168cf71e3c64fa0dfc0278d031eb6c85a9b950dd9c011d4e383315019343b92d170fcd0663e43b738dc4cc78f868e6ce070381c0e1c8e839e1e205cda08a21d47908f8d1fda8f0f9ef5d85eda21196de60334843b029205f5585cdab0fde0703666d7f1238be347c7e170380e82705cc77b943d808e8e7eda7e7434d463d3710e7a3890f5e8f1f3e73d703d683fb3231c4796030e7efa9c030e806438dc75bc076de83d827038dcd14f9f231c8ef77060e3e03e7efedc470f1e3d7e02bd47dda047d0d1114dc77137fc0e7ee277508f38f8d9730ef07934fbed67791f1b6c90e3a7cf73e8780fa3e738d1cdc67dbcc74f1cef5179e0f0b963c779e013c7e3e7cf79e073078f6f80cf1d1bbc07900e227c02e04242433ed7f1a31c396edc20227a8e1c3f6dcf91e367cf8fdec14ffb0eeaade83e7eceeea302e0371fefe067f9dbcfa0f7d881cf1cf8ccf1a2a21cf8d4f1a2a29f3f2f2afa89e339be0111d16ff8acd56e64f40d4e743bd1cfa013e1b38661a83f815e7b8f9fb2f7a8b8237cf2e0711c3e7be07efe387cf2c05d073e79fc76fbd14f7c1d3f6dbc037c72c0c10180cf227c165d28073e89885e84cf1c17127ad1cf128f406ddf8bf0495474a29f00f8b112b57df7b10186e166844f227c12dde8a58e9f403889dabeebd8e03a8e446ddfff93f6e393839ff7c0e7bf03e8357cfe1c9fb503ed38d04f7b207cfefc39f009f4b2fc99e3364c02b57ddf8ff089b39d073e75e053c77700009f1be8b0572e3ead44b0aff17b1d3f75e073089336d7b90cc7a8edfbcd28073e8bc813c9882efb49844f1cf8e4736e03d77e06e115a80d6329361bafe133e842f837f0692308d7c0a795778c4f1f4c6fbef39e0f76a01f9ff7fcf4c1270ddfa8edfb093bce67b807b57dbf79d853d29c5756aa2c2b69ee2bcdd6e9ed78a4deac54b9f51e894c51e5d6e948a475f048dd53f25c56c6fe95e2bd323c92456aa48e9554acbed31c4f49c5aae9c34f357b7f9acadd69ee559ae0473cfb5ea9f2a5caa15886c0850c2fdef5b08a6159a9321d91d03539c44ce1c5d20cf1cc483df87a1037cd8ed48307b13995eb699e7d9fa2ca2755a677952180212b55a6197caba479a7a4d6d6d729416bebe794a4b5f571ca98b5f56fca5b5bdfa6ac595b9f2c6fd6d687953dacad4f8340cc54a932ad215534f5f58d89f0f6e80aec3ffd7e65e7de8bfa57647f3d87fd1518ea63373ab5475764f8bcb9edf915a087a707edd195db159ecb4e1fb3475776f0b97318ec329bc3caeffcdcc1a74dd0653f772e1ef62b169f2078129fe43ffbd3e213c430d49fe07f6ef3f1f4a43dbae2c2a7ebdd0f65f8c4ff6a5ce8fd5df6b32fc367d79dc4a7ebe44fd9c35fb9efc1674ece6ff069dfc267eb65f8b37c884f6b7f869f1d87242fe2b3ebeec2a7c5a7cf5d27edc99fe2497c76383fbbdb6ee327791bf8ccc9b90e3e75fe7dffc167cecf753e9ddbf8f9dd063e7f5af6e7672b08c350c3c127ce75743ec3d1d1c1afe172fdc7c7e50a5dad5247b66363c9af5bae1d0b863a1dacecc4066536b006cb8fb4a4ebd3093b7147b60396309bced56ad990fc746c4472a725ca6cbe06db052b3b1ddbe9c82c283444860d2bc3e3b0b1e11212c29185b665b3fdecdb6cad9d1dfc1a09be260e0dfd747d68a8fc3ed8f16da2ebb6ae56fb59be265403613ae4f18764361f3a8e9f3bc761b3fd0c6fb3613b8e9fad4e48282c8f5feb745e6b2121a1a19fdf87f0292464638fc3860d9f9fe27d5ac7b7fddca7c60e8edb7eca6eabd56edc063e6baf61e3b69faed7f849e2a0e3e0b4ecf8423e3eaff1f3f3d97d6adce7a7cd7dc00b9de827ec44f5463b8e9fb0e3a841af81e3443f775ee327785b8d46c3a7d94efb599e567f86a7ddc66cf61a3ff8f4c1a7cf6b7cf6f3d94ff1b3fab3bb8dd77e92afd51b423fbf0be1f386d0313e6ffce7e7b59ff6f867eb44f81c1a7a103e67f89c1d07e7347cf6f47c864fda71703efba9f3193e7b66eff92962246aab0f3a8e1ae2cd7df0d983cf9efb5c148f7fba8ef17953e3f86788a5505bfdcd71fc74e115a8ad1e073e87300cd516de063e5daee7e033e7a18d873f5b7884109faef0347cba2eb62efe2cb112b5d5d37eeae0246aabafe15348e737f089f1896fa37c103e6bfc189f140c2b3220b3a60266d850952ba17861cb133320630257a0c85d298f24c320b5d597f83cfe0ea6d4560f84a9b5d1fff8c84ec3e72cf61e7c4e0de18130b0cc6040034e0c91934d51c0052a6a3862053230b3434ef6d306c7a8ad5e86cf18a6d66684cd5aa63f6198a4b67a1e0c5a1bfdce4f8b51a0b6fa1d7cea60186aee8acd73f0093b0e86e196bb627f834f9bd761f89cbac0971a7cb9809a33c62823676915693ce0430d145073840c7257ec613f49dc83daea61f87c616a6d39b0d923d39f1fbe515bfd8863d6467f362681daea457c8618865aee8a77173e3d0801112de0c01952a4d940ae856178ee0a901130f84009a8c03283307257fadf4f10d7a8adfec3a787a9b51561f396e9cf0e9fdaea2f26ad8d9e7eca4ad9ba684d1886746ccc549af6f52152e34cf166ce3dbd52e34c119ba7079228c3053b3b3b3adfb9c9730f7af4f81459eef11d373fb8787a218d9be58877ca29727a111a67ee60f30131e8628918e8e8e8f45ce7e6ce8100f9145806b263c7a7c8f28e03e0b9d327352e272727e7537e72ce879c7e84c6993ad874400f46ac208c9e9e9e1e1a8d76b3839b460000c0a7c832009e4f0f42e3cc1c6cfe60d3079b40d8cc09727a0534ce447acf45cff358b84283353358a10b2e56aa76767674bee30384cd1530c0439a2d3a3a3a3a4039d8fc92c04109327a6eeafcc7cd9dd37a7a7a6e7270b348878e4f91651d377ddcccb1c1069f22cb1bdce4e939363f2f24b8d202cf0811b0c08cce0a33b63ce10384cd0b032dca9ce0e8a6ce3bb8b9f3d9d1d1a7c0f2d1cd1e37896eb74f91e5db4d1e3b268d043c602f70840c3ed023e0a105646a195798a9e27153e71cdcdc39ee264f6de2061772a85534709566aa8b9830ae5011024d162f4637750e809b3bdf7193270b0ab0243044103ef870da00440e691c70f505191414ddd4b98e9b3bcf719307873550f0f073c398155cf1598106196c0062f679000c0e43e0b8a9f3dacd9d13dde4e9f1c064a08b32b41f6c76123833811b7e7cb079bf08a20a347c66d8ec34621c21c67653e7376eee7ce826cfac079b5d8415385ce9a161b3f2e0250a2f683fd8c4654009287e7cb049c5ca023d2c51e3a6ce836ef2f8ccb07986802a0266cc7ab0f9801970b166099e373df1f4d0b0f900aa2c4f8cd979d3d3ce799e43fbc1a6038c5822cb183c3c3c3be7b999f3f2a6ce7f6eee1cdfe4b9f1c1260b46c8a0872876767676c81936bf1074510315b3373dcd603dd8ecb838420a2b7adef4d4f3d9735a346c5e29a2804103b3d9a7f4e4d9cd279d373de9bce7b39b39dfb9a973dacd9ef3dc9c8537d86c32bc9821a3a7e7537a72cfcda79c373de55ce73d2089cdeed2011390d1d1d1c9b9ce27c2b049d3c0328412393939392ed1bb93d8c2a6540d6400012c375bcfb9097bcf4df23a376f64dec5377577f22e8ae2a7fc64f12136a5bc8c218511ad373db5446ce274f7de44dea9bbe779de416c9e59c8d0e20c180cd63a0c9b1e366dbaaeebba7fd864018b34337c69b55ae05bd8ecb019bab0b90296196c91060882e0cd9bc76ebaeeddfc4819363f1c6430823384e060b30313040d4c00bee9097cd960b3795042061280231962b36e9901042d802008defc1edebc39ce4dd76537412324ec4e24116c52b9b2400a74f8def4f4fde649b0936f6add097692243fe5279317824d079829a38814b8def4e4faf71b6c92d824d23aec4df74eadc36030d85fd864a18634ae78f9be4fe9c9dfcda79b373ddddcf50f9b306c0ab9e9d474df7a53913bddb7de6a7dca4f6e7dc466f704123e94e1727d4a4f76dd7c22dff444fee6ae9bb0bf6e921f6fde1cbce9c2660b9bae9b4f535c38f97eca4fbe776aba2ff226a7fb221f7223d8b427a8c24a15373737379f606f7a829dfc0d362f464ac2a654135384e0022449de7cba6f7aba879dc466112c8408361f004495183c0183c16e3e7d700fc3e6109cd4357a21d8fc60b802861ab279efa7f4e47bf329f7a6a70f9efbbdd97abe79f3dc4df21fdcbcd80c8241e81abd0b9b770b1816e890cda7fca60ffe94c322748d3ee3116e2261054cf9f2077f9aa2933ff8949efc0156ea1a3decdf6d2e7e769f03ddc6857efb06ef711ff7e0407efcf8e181071e74d041073e7c7c0a2cfbe080030e7af4e80100007c0a2c03e066d14d1b369bed668e9b378686866e1add14c28103c7cd1d376b44449f22cb443779dcbc151515ddc4ddd49123c7a7c8728e9b47381c8e070f1e3b767c0a2cef3032fa145836ba79bb1964c3868d9b3a6eda6edcf81459be7173839b4342429f22cb423701b0c1069f02cb1bdc24baf9a0a04f91e5a09b386ab54f91e5dacd0d74e8d071bbdd6ab54f81e5da4ddb4d9fb22c6f0eddfcc1f8536419dfc47113a8468d4f91e51a46469f22cb463972e4282a2a222222c281e3536019c7d0d090cd660b0afa14580ebaf97333a7a7a7e726d04d9dd96c76f337776834da4d1b37797c7c3e45967d6edeb859fefcfcdc14ba8981803e4596816ed68484846edcb861c3c6a7c0b28dff5360f937cb9b624e4ece4d7cb34747e7536459e7668d9bb39d9d4f91e59d9b41356a7c0a2cd7b8e973b313c54f9165f1268d87e7536499e7660d8c7159963c3c9f02cb3c377b6e863838383767376536369f22cb36376937639ef729b2ecfd9f22cb070202faf9f9f1f1f1a1d13e059669b3d9aca7a747143f0596c59bb29b372449de8cdd84bd5eaf9bddcd11043f4596c19b3937bf30fc14590e6feadcc491c964443b376d62b14f91e5d80e9e9d9d1d1d1d9d9c9c4f81e59caefb1458ee6ee2d45a373737a0cd8d1461301879f395338e634cc4e653942b7b7f9a3266ef5360d9bb1906b968abd5ba20edfb3e4596bf778ddef47a748dfe29cae6ee4f535eb9fb1459eef0bdf750b17cb1075da34d1fe47ba426a171179b24748d5a3c33d2b7ef5bcc644faf72bd79244bc7217da49e2a52815811d220935ee53eadb5568c748580492208a4528e08b1116814e7e41415cbf65160b677820273934d832adb43c5b2c50a788e04b3d923f7eb7bd8232b56ac54014a13e6ba57f9e0cc2cd7dd4a15bae68a2a870547ae3b960e72ddabf4a0a2a2ca5575b9eefd1c69dfaf0f69ad81a4573064c93db23d1d8d7090ef6dc9747be41cd92333d9f7c8743cd2235bdcf441262147d64cafaa30902b48c64eed11cd99b7dcef4a129a07bdb27db9a03506925e61b122d3ab2b55d984e53e5541a6575774c821ac6b2698fbb48f68dbfaf4611d5320ebe9959534f9bbf7fededdf44ab06b7db0bc5debe3c8ef34b767e4c3de91ba8eddc32a7a35f7d83db495f6ab71defbb771e03bf7bf92e6d02b6906cb9ac3ae7a071f8265cd7604b147911a2cbd875e09559b8c90d97b8f49347b58ec5aedb039953bd0034bf366d31ecae6ef741cd21da9c3908e453e6cdefcbd75b0349fc17ba5699aa687821473850c9e760d3c926d954d67be074b9396bf9266afbcf936d97c4fc72117dfae555bd2ae5532d31a5360bd1008290e92be9eb6422ea8b511bb16eb5a7d97e995953339a76bf55446abb7d65aebefbb6a5f6bbfdaeeee3d982f9e1de97edf61b3e6fec55035f76d91a9dc98768dd6aed62142dab8dbddf4fa5e09e6dbb8eef46157d67c4b9a87dc77e5ecbee6fbb08e43fa9e521bf3045bbadf32042ea4f7eef6751c62f12d69ee4adae22d69b5314fc0a56b34f77b4c2c216811cd761cd2a7a387e938e476cd1ea9e9984487d423b557dedc9534dfb2e6295b6b56487f90f5f421e541d2911ea9294e4883cce73e3d6d5c3d7d97213d22c9aed98b5db3a7e310b06bf648dd833473b27d7dac71f7f6614ee3ee698deb6e1f56f19634d3b13b522375975140f9690acc017d6473df472093bf2ba07116a9bf2dd586fc758e358e5e61a1257f64e3ecbfe734eefefb681a0b43486b09c87b7b85055536c1dc9dd6e6e08a34b66f4fa33e68b6f7a13eeaad15404893a620e9fb315aeda09a60db4c32d3ff88b5f6e4154264fb1c504400d847375773c791e9d5152f640a0b2b08c8b6caf48a0a2a7277c9f4cacc08722dd3ab29c0300255254d36a788f0b2a9420d4a640aab2020ed11995e9501932b12995e45812613657a1545963a1671357126379190e943581a0be426a95736a1b4c002964d28303be0f4904d281f7a08b5c826940c5a74d97c5ac107325582630458d97c12839529484535d235f953b5f697b0a9e6ef61f7af7c4aa2b962a62a86a457508891cdceddbb74aab4a83b14989be89a3cdee51ab10ab10c15eb5cb5a40f4bd37be74101051a79bceb61e772dd8e231150bcab1cdfe391d66b351b575a54efba589a9deb916c18450f9666cd535f6d178420bdb96d576c1ec9369db91eacf5b5be89d6c29a1cd55f7fb56213aa735345237bbfdfa3c8fce452b590cd7ed387460b6b72146876afb84bd1ec26d08a0b2d64a7282fb71ef5e5a7a9dcba6fb3e94b93bb437593cd1e9e19a957d9be5b35aaf37dd81d80a912e44a89fa2d5b73edd26c7db5bb1bd7d69941ccd4a7f5c344e8fb466ebe98c9de6226faa6afafde17210d326fd407688f42db755dd72a4fabce76363c07d0bd2bf5d12128b15d67c4f51da9416a6df75d798d841596bb77d93df42af561337deab71eb662d676ef2a496bbbdf38a43be89a1931a776c87d2f03b9b1d3b3f7290f7748c39648c7928a555fcaf596eb88558b560f90f40a0b4db64406e07a0b5369dd7502d05c0b5bf5bb7214c00b1fe45cb8666df7e1a8c4beb1a904fe850f72adb76e7e48976bb0b4b20f7b346293c52ebb7ba3119bdc2599fb5315a44db52b292daaa27d9904c81d0e5f62a53e68a67da45640361390ed6d308890d60e50573d8d7c428cdccf1940587f2069ad53b53d08ab15d9bfff81ac257cd083d3220c5a902221dd1b20a43b1d4d08924dc0c2d1192a2aa4c325a842d7acb125b0985adb0648d1e2a0af5dab3f5baa4e555b61e892ef5d5af27dab867b3269b2f790cc997c3f36f1f1f43931da836a8df37e7f5b2df156140f8a62d399452537873487b0906976e47bf7effbdec22392f073bdbe830f5baed3dc726122e05b6f8907cb9abdea7a8ba9fb5caed6a8e4de8599ba9bf74f53d93b382ab96f8967f27eff61d3bb885b9fca5d39de554ee5702a8bb0d22bcdf0b655328dbfadc34a2b56ac58811d0ba53a6a67ef358785521da6cd1eae39244b736149b3392586400172bcb5a391f01e36c7877816fefb88672106ef95ae7fe0c70422b1e0071ab96fe1b0e595b31626d23d7c88b3f890c975d35312624a8b70535dd3ba55721f66af669a3b7ab0854cffbaede8e141e36896aa53ae0e6910a640d6d3da0f61d50b5945a5b0d364fb3e53ab482f9bb16c6f93cd2fdbd33334cd107a8662bd405e9b6cc2e8990c5ee57b5b3a912618a6c240de6c8254f9de1e0c035e2179f7ce00055b5090c5eb3aafebba6ebc43bc1622a4d9f34e40269be2cdd92b26b0b2b5a78db7e21b676f2ff61148abe504d14c6fff511f77bc3d0ee9ee9fd779b4e8662760ef2debd775deedbfaeebbc92c68495ba26d6fddec3b4ae7598dedb4d26a4a73eac49cbf6d582b7dead77fb1ea0676fad776b43efd56382cafbecbee6ceb37b7a35668d19debbeb81f48a8990befba53ebcd377d447cd3bbad67d06f9d6b5ee74b4a6e8e5d63853a4f591ebdd3da03e4e8bc077276a5cf71e36f0417d04b60d34673b1a47afc69439ca691bf8ee33eaa3e62e6c95b4ae81b731406a0f045f90c1cfbedbdc79f67da75763d2647a35c68c9c53d616a6750dfcca8e16791d0642ead99027e2cab52d9deaaa24a44e1477aebf3e0c4b2244c0338162a65763c4c81d2df2fae069d9779560fffb4e8fd4149bdfc3874db179fa1645229e62136c5ac18a0b2d5065a730c44d4f5379bc3985063558939f2816982d31e41187d8a4b4a4592ccd15b2eb8888cd15b2eb94fed292a9754a71d3994d1bdada231157a6b408c986e2f7bdbfecc24cdfdbfcbe8325cd1f48cba9b05e206a976c312dc2d6d0892f57372aa989ae3e08dee5026bd90596f5ae52bc577ede4357d961afa460695e22e35db72578b10c8f64c1f021fdab342b54e706df6abd62d76b0962f3d2ae55229ea5b996e35bad5b6c86a12d3fb37b481ea9ad88cd338b2e4bd20642e2530af693360f7bf2b55ce96b195e2cfb644973b0d24a14c59276ad3512f15c0f4bf048d605b668eed2546233d2ef70ed120218b276c934dbd72e627b344ce50feade62b3de96e6e91405de1eeadeeb51492d9b52b93357680252d2bd62b308ab0418d99cea1e76e2d7d94e2877432c8e02f1577616c368776fe4b93601596c4ee5ee5e699ed9ebeebdc72342d9b49ed9b7efe8bbeca2cad576714b81a4ef6ea5637dd8274881bcb1dcefeffd612b56b52ff691cdf593b0923bd6356a6d3c2c8a995e2541821760f6deaed9db3c922022e7d02986442199ee3d721fda32cafe5ef3287777bae50e37c1eeed71886d7a07024aad15130498caf5a9d85fb1f8850f72fd96eafaf0de320ac9742f94cd5c7367b68cb8ba2f20dd2277f80b5882efca02184d61c49a1cfdedbe5091a24e68c981988a3aa1c53c73d7baa5500eab50ee2742fa42420d12449820ebc60f371070f537cad546aecfe9a36a82aa1b082f2f8eb00289aa6c73bda744e446f243eedb23c8e4be2dcdea7aebb7fbfd1d95f4ed6fd9130218f2965df6aeeab29dcbba6ec58bf62ed76d58566f2c00782a20a6127aa21d8f80621d0b0022004bcd81a782a5e63cef54bc11c053014700ffdd6ab9845cb2fde98d4764c9f6b6bbeb9ecd6dee9555c07bef4a2957ae3ba53ebe7b58ca95f36e562556a9aaf5ae2b6bae555a357d50b590ae63f96e159eca95eb7e0f3b35028d1c862514570e2f96465cafdf9148fd8d78b3647a125efc783b1229a1841f7f539a53d9a61e568aa7230815c3ea5fe52c1c8d40e2ca0a2384c841995e19a1c508aad96b1cbd7116beca59388e47ea6efcc623e38dc0cadf78c495ed3d5c05c4e754ce85b17cafb96e2cbf547d220e8f943b7c7addbfb73c2cd575f77e4a81f770d573deab9e6b6129b0ebdefdf36cd87d165e29123cc9153a3c0bdf75af15cfc20e4f75c93d0eb1af5d074a790d6a11d2a0b061971a21471660bc544edf8cbfb9917df44ec711c6df942278fa114e2a391b22748ebc59042a3c174f853ccfe92802cf457cbe4e76a7e308e4798ed44464fb5a821fb23d15bb5104d96d2e96e35f2515d95fef4604f47cbc578a20bb0d3e5fcf693decc407fd7cf57cc4a7ece2aba4b95849457ccf834a2a3d973da7a4728a97bd559a53d9ac5506925e95804b0ebb128acb882b77cf7918d61101afe71c5652791d769bf27cdde66479be4e9e8e0890e59427ec4117cba91cdef5f0133b3a22e0b4f9f813f6d8e92882ec3df8243fda94547a4e059f4af9538a0ad06f9ef393bccd61e5f99f3df8277ef95849e53cc58f3f756e83cfd8cf9de39ce6824a2ae7399e3c69ff79e7ba5184d76dde8d239097e1732a073b4f79d61c0c77a508afee36980a799b879f68c70288efc154c6bffe8d1e1641762ae261bf29cff12f2c4585e7412388b84acfc5c3b0942b67f3b19472e5484a7d74d8bce52f55af8b58ca9513efdda6849d2cc723d9b1acb90290f8143f622caf5b7998e949f7d6bddb1ca9436cde72eb2e6c76ab84626b959edbe0b3e66c602ae7eca7cf4fda7f1e74b0fc2e96557a1e749ef28c9de7a13743974c9dd0e2cdd0257beff22dc24aa650e44a02925e8d41229bb17c7f9fefc708b1440f25c862452601191270b9b25202325764aeb690204b11698a3853c45511618ad8924351eccad9878fb4b2f79a5df9cbca14cd97953d8a267b3fac5c5d2daca8b2f72f7b397c895d39ebfe95b30e1bc9de5b19cc74346234c51154e268e48795abec39a1e5f5207cd6dc59038f27c65223cef959e2aae760580ae8e28fa580b0547d90bb3295831df69c19e4fa9fb2ea399bfb94b4526a7cce67588a7c0e4962a911573d475e7c4f794ee5644d1f6426935623935e05a126d79a8b9555cf9de0f9b3ea39a9d7c5db9ca73c77b0d40b5781e5fcd4c15237cfc155cf8dc7c155cfd960a91b5cf5dceb22ae02c3d4da4c7a15449a5c31d4a550e48a53209dc866f7254c7e42b1f2a7bae4d62800f1e3497b34e2aaf12f8c65c4553ec8bda83dfa3d380a60bccd497b6483ab5e27319617b6f23efefeeb301301a672b0cebd7ea548f0ac5454e40af46ad6fd752ccfbdeedd94923d3cebb00864bd4942ae1f3195f1e2efc1da41c5f746049c6abc783b8a20fe85cfd7c5d728f64c814d8211841561b07ca0412b07c4e45aeb69503dba3763b9fb1b67de72f7ee37302877ef41e6ae46ee1ed4479deb1ee34096dc9d46e634cebeebbad3ab07846ab28d4caf80c0cab60582eb2d7cab39c0237515d2f596abac10205d7866a4a9a8b2bd1415556eed38a293a36e7ed2fa2c89e61676bdcb5019a9c3aed9894b6d8bb759c44d75cdf89ac3301c5f2279736303c455dbfc8624c91e956e1ede9b87dd0dece6751bf2f582bd1eda22aad75f15acec3a6d9c089e5e044b50bc42b60e823977cd4e90654ed75caf58c8d6c18fff6e922308e1e9084288916a0e97075d73fd2b7b74cdf5b0873d12d236d75d3db2ab47769d8e42bae68a65d74d8a44763db4e26ddccc1e0831995e013144060f366e66715300684eaad9e69ac10b82e043da958eb779c4afd72c8ae20b1662532a87df80fa08ef72fdf6a8e65cafd9239cbb7eab1de09435278a4080c93932bdb25293b3accc5c512c4df1b331bc394e391b6dcad968637347259c879e18e23cfcc41087c4b9b1c133110623610f3b31849545d4f71800249d0b33512c6f8b107475ebf46199ecd5ec0db1adb273abbc5d035faf90dfbddbdfaa1178a2ae81af750d3cf8b0668f76b40d3c68eec8e04d309bb50cba50cbe0e9b8a36be069203bf0e60e28acd82a6bee9aa99513d9cbdec3dab6da97399567466c97b37ed4979b2a55165fb3ab9cf567ae9a672e1c80a92ce22f2f7c901b4fafacc8647a65d5446e85d894c2d447ebe0417b043b78d21ed51cf8983db239f8d70e5c071fda9435e72acd294d649715115659321a567495a6ebb3f053c8e42928c8adf2a9e62fe46dca59f89aeb1cac9c85380410762c3507fb433b2ad93cecc45679731d8728d93cf4c45669331d056023009a7bd99455e81a35e3c9b24acdc1f0cc859b606bf297aa1db9f1556069e4b0d4dc782b201515d50b57f9d6e4c687576c959de9c8a48e6511f575444222b1f93bd84d75dda509f3d741cdb583bef90abb64b2af19066ababbd3ab1fcec8f4ea8717e43e88cd2762feeea94066a8afbcd9f38ee687ab1fc2fcd0e5c8e779a7dea9e78d463a5faf66ef1f922e7f577ec89271a6571bc8ca1b30938132bdda80980d80c965a6571bb89243d8cd662d770faa1dd06a6fde36e5924d5aee6e7a48ec1b338d48da6626ef1dadbbfaa10239563be85ccbce75bca7f62699bb838deb77176b07d448df625bb37deda0915824b74c6951b561bce46e8a6c7dd892cbdc0f614d3577159bb58e47ee1b9b5ec4e44aa4dee66e8a5ccda7a95cdfbd89ae59b3264cb65d19a543e4b9df4d916b19a59369d72eb618aa8f3c77bff1cc48356b3e523b0c15661f84c8509da36ab647b265b665991b2accf4535ded26781893ed5dde55ee4e1b574bd75b4cb67729b177bd8e207c5805329b978a2a43b95caebef5a8c475b366a67a17e86a30d97e6c32eb3bfcb5b45f4d754df65ec7b73ebeb1badaea5add815dd7b6d5977d1c673c64657bd7671f793093eded288a17c7971886339f9f1b81f9fcc06a98d9388ee358ce5ee0387bebb3590bc7a7cbf8cc66b3d9acf4213d9fefdce787c6f9bc7b980334b36a6640e28823dec6b9987aeefa2d9b3defb9eb88bdeb210dedcda772fbfcf319cff3f1e158ce7e68dcecddbf7148288a22ed48ed23964e46c49f8bb08b57848963389b9d5636d53cbb58d6ec5dcc9dcdec77363ef6f1a1972b5865a55973cfe9a8c496c7f79432598ca7ec74e85af79dd29ed1359bd23cf34d699e64699eafd23c73ed74685cb56a72f76acfe832611d5d7866c49ec97bbdfdfd773a2679f73f346e7cf7701cc7f7f823752d5fafb34caf96788107353d54f1a0030f555dd4842259f5dcc5df75d7f17951ac3f348ee6eee378a46eb5fe7aebafd7bb87afd7eb15ba5c224c144fba4a27232e5778f02ed75dae50aca5ab09487e9d66d70b5636d5fc7a7d5462cb2f3c3b32be7ec4f587ae75ff4bd7917a851fbfc498ea2f4bf0b504abeba59577b0d66e1c42af262046ae466cb9628f88ae75ef11492bbbb03925bb1ed20642f5522a7bafa5b942ae7f598fe5392a52e57f2a6b45185ba872c75668f3008fe5b91fc4e67d4973debd9b1d1750c4666ddd55da87a5b9426e9d8e486ab965c4e52aed3d221ad77a67765c72f756d9585deb4c3177354cee6a0f64f7c6aa61ba2a44ee727277f2a7b97bfde1ddc506f2777714a1fc6f4711fe13ffb87c87993c3b35eb1a1721ad35987175c9f73da7076b07df9131d9bea7343bcffeea09010c39fb2d9be52ddf321d67476a4a7de8c8ad23d3b1070ce9fd96eba8a4e766e7b1e68acd9a416c8e23110e32a545e06b396273aa8978e554aee5ecafd2ec7923f9eb40404040b740400fad080474a426c99f9f9f875524cb9f9ff738e4e7f5124551dc410ced55f411414fa6574a60e5b04794812f02e2a95c4bf334eb5ff74ab37efccb8a217a5d96da736130f1b07148264b9ac39958c77a5a58c724ddbda4ee30100d17ed3ca79d8746a3d15cb4fbf8d06847ead3683490866747802e1e48144318ac7ae929cd9a67ff7e2efe473ca53ecc5ba6dd9cbd1f8e44ec6735d30ec2ac1830511445b1f4e94625369efb9ce73e66fb783822acd302f3f1117d7c7c4a98cbe7765462cb3e78762476d863873da4954e37d30ebb39a227840883c16047ea57f65ab0c3f0ec88ecafcbc4d34a30d72e8d13757c9ea6b2579a9f99fbb1acf9258a34fb944d358b1fc59abdd34a9aeb43f1b3b2e748b6a7a459567e65ba761f2bbd305dbbe729bb2c9f19f37495e699cd4ecb915a16f1ecc8ce5fdfc1a09aaeddbfb08ecde66726df836a3e333965ed81ecfc95695cf584c0296b0f64cd5e98c6bdcc4e4bbe0f6d56e36c6c5cae8f446ad9f5b0459bd538d76f778f71bdc721ae37128dab952449f274446a32b45634ab974cde8e43c8d792661b25b64ce246a26bf7b54bd86ad5d66feb4bf95a22753dad3584df014c2ecaf4ca026abae4a34caf76c8ea929571995e75099395696488c83e995e59804bb640960ab4208737e2579a350c453a82d83c33f85a9a64ae2fcbaae74ab196f82c2fe5cad1e601820f43b1bc076b288aadd6bb7b9fd5d33c956747c07b2f025a31bc8acd33d74fe56a4ba8cef5e0a8c416fef5f02fdc65e9da0d7f1f9a509d43702452cbe1e93824acdeebf8da350f43757e892f0c33c1ec7d2c9d8c8c076fe4e6e3a99311f03637421efc884def3798766dfc88cd9b6db0d954f378109bb46bdec9572dc7926658d90424bf680e8fd4390c4725b61ce2d911d75b77619bd5b5fbd65d5c1ad7faad5df2bd09a291ef5b65edd2b5fbb0a7b64036b5d0420b64c5df690f2413789a4d2b468fe9a93d90f5f720ae5781cc5064f6f097aae7ce16a24b133c50e5a46e9611133822478585732a17f4176e392cb79c557d97a571568cc6d5cc25d36cda34b9c7e4fb2653c366d5e8310da48659bde4fb0a063712b87a6920b8ea906936c17c7f1b37f3fea5eab9f234dfd72e8d9b795804b27ce70aa48c55a3faaeeca144f5dd8884ccf6771401bfbc1d4578f91e43a0b91a98b4b6fa3a8640731883d6564b4cadadded525d31a5277caa78dce80d1cf32bde242d5af4caf28302653aa2fd32b0afc90e9d5e5f29eea03d9995e51604ba627c3fedea579ab9efbc4efc3e777a9ef0bad684b9a8ba8e5b09a509d2d915ab65fc02375979d1257b996ed99efbb04cbaae74011ac7ace0302e213bcd477da3cfaa291bba4074b9aa3a3129bfbb8c97e256d1e26bd9a001219aa7377691ccd4a6cd9e2dae5cb350612e0d24452cf46ecdaed1a7dced12dab6eeede962290b97b4aed4d3a45b677ba658b9b60f9cbb5b62bc25acb581359dea81bd898432bd2d2e6513c93a3c4177dbf472597ca084965c409ec5a6d2f95891e468bfa26c52f5ad4f761d777b7902b26bbd661a15af3ad754b7871eeeed531b90fbe12a9eff7eb084277ad628f201ce9830f693582a4573a88c9af83af6258453b0e113153f8f1aed2ecc33058be1ebeca99914b459561bfd9663a1a21a932ecafb25265d891fa55d61cf699c4c3445cbfd7915a9b1716bbe6ddec338177dd044fdf3dbca3d9fa6b04e1a6ebf53a5287772c520f3eecc43a822078a4b6e311d741a6172db287d1224b952f2db24ce4a56a21c36ede6cdefc3aac746aa269a8a832d44d260f2566f2a27582f2b2e8241ecacbe4e978644986bdf3eb64d904946117cba60faa0883c130a544afd7c32b7669ba2e3ea463912642ad208233ec7534527930a75ac830dc5dd23c96a6f8fab0a467aaa719aca79ecd87c9ae7918e7ee55bd17844de4cdf44a87209ac82ed32b1d7ec8b4a8c6388ea3f8f0e3388ee369d04883300cc3300cc3f034283ca3d56ab5c07f6fb55aadd669506b8cef212dabe43a36132ee49cb2e65e93475af4750976ed7bfd4ecbfaa57e216ffebe8fd4c790fef75da43ebed3a0af8b901ef690524a2906bb06a30d1369d1ebe3c587aeb70efef360f4b03e0cf62e83605e84dddf614ba1980ff8b24e28144d6e2a525cd9954113647ae2ca2e0cc50562f3de04bb7f6ff7f72ec35b6fd7baee87438ed0abdcd844cafdb025526b734faf32bdca418c4c4f8dc8dd579a377ba5f944ccf79dd8b5d187b0ebc8c68146eec316bbf2de27b2eff5635da334bca2f7d6916c2d73625d78cba89abb32aa66af73fd961e66f2ee5d6c42e56b8ab97b882687b7b9733833429dd092c377f966e5107735eaba77ad7b486b53fba2d5a8b3b77c22e6ea31b5ca5bbecbebca27b23ec7557e6f95e0ebd804661a2da20731bd978ad04877cbae43ea0b1ea96f593378ef1f58c6c8b08baaf75d5fcc746f0f22b9b76079cbdfeff5dd2f088207f13d926d1273dff6faf6edd7fe85d11c5b7e0feb58a4ff3d6cb18edfebbf1e232404608a0824d21df4f0579adf99eec187f7564a9390c123b559f33d882925ba2391ee178347b2f59f87c5ae51b35f9d2e06c1b05d1dedc33a52cf863c7d47a47321cc8877af8aefc4bbc4b7ee72953965ab24cda89aa36a16690e9b56daf755f16991578a98c97b8b6c5cf82f84d51cd27108f56cc8aeb97ecbe2eb38a42259a4aea5593393f7d6a98f9abff2b4889e6cdc2dd38725d9350ae6ef88f716be5d83b9c4d7510a78178e758d5ec43965cdb4b6b039955b17cb5a3e641ab06665fa7a861e81b4870c69d6a81a1dfac88ab15adad64f93c6a459675e37a9999bd983343b0b8b3441343213a4d959fd05055205e6ac58e1e1e1794f1a1d1d1d1d1d1d9d63e991d3a147567676765e05a606cced7c6767e7587ad817a80f277a959b3ec85faad435392a0ac48a95aa1eb9d8ab6ab9d8ad54c572b167511f4d554dfe52d523c7f35aae075be1e1b9152cb55c159b06558ee7587ae4c6f851f59c152c60ae0a4c0d159658aeca870615552e76d35ae1b9d9647820c355602e862d96dce729774a9d32a7c4296f4a9b920807c89a4d2be69a750c7d6205b96fcd501f62a88fe7be054362938ec96667e5b050636d6260d80473353362119bf44c88cd58ae592c08637b80b1369acdceea62ad161decb5d82acb022a6ba3b9b3ae5c53b016c3780a24dd20f7452a466e03849492f40a29a98f727da53e7aae3f42e3c0dc5700f541025926dbdcb9bbe4b249d1c8fdda073a6eb9ff01f571df0f6fe964ef140566faa6e7a8305fe54a95432bdef2278757bc654f0e3bf196b11c7ae22d7972f889b7dcc92128de5227872df19639397489b7c4c96128def22687a2784b1d391cc55bde72f8126f29e61026ded2954352bc652b8736e22dbd1cde88b7ec728823def2e63047bca5cda18e78cbcee14e0e8ece0e0f36a2bfcaa25d1356212a165a52204d30373de28aab0c65b335caddff97fb3972373de20a34b969116d5a441fda2b7cb857e4d05df1827705d5d78a01f8faa2355ae18235118e57a22d62043ff0da00ccc503792b606393e5e6667a84155538221a392e17e884917376c47a44156872ce8e4e0ece8d0d097b8d62e86a813c5dbf31c2ca0529f6d3c4b2d4d0a37a0b6ff6104d3a460d1605b1c6978d09fe8686d824752ee29d576c3effb0a6b32a110d244713500e1cddc5dafa61a8786ef65cf67ead6a9c49fbccfcb9cffb554be3cc1fc8c42fcda0d7306fdcc6dbac5d0867825013ba51d26c0495b11ab8cc295f92403fa5e8432bc1594f7965b192f28ca0802222dbfba72d0b85c63501d9d258a1714d4067644d7288c901c3f13e0939c21411750123a571f8c45273586a0e4bcdf5188aa5d4b81d9d1c9c1b1b12f61a1b27e21087cba8950324fa6ef76c6ffc65c8667b952c7733ea6b64f40673b33723dc5d72e0b3b38af0d94336dc5763b0cc54a1865185508d7baa154341499122e5c9932728a0804293264d4820810405284001238c3082082288a0a4a404020820242525091122040909c9030f3ce8d1a3c78e1d3b6eb71b111151ad560b0a0afa4fa3d162b1584e4e0e4992a2288260d72aeec95a7cafc5b4d6ee8ad72ef6dfcd9b77b3477735261d43b156b047356bb3076f82ad9ba44b4d0e6f5e04bd319fd75ddb5990950a9248cd8d9fc49b2ac45400ca8deb782294ec11cd3dc4afbbb049af5ad8ec0162f396ab02093057059917ce555126966dae0a2bd2b8fa5651edb12cadd8acb4d65c6b57f9d7a458179b358bcd5a9fc912d220d33e419a1d86765587316b55eed72c7b746aabaf8137f20ad23c1dd3dd160b8b9006991d15883bab96e9d75962ecd105afc83131ac6cc69ab147b7aa6d7d064de3609e38da2e7cfd8fc548f256f555eed323cca0916b6755b125cc0d230419312e22ca5cb590b062cc25d3b8c6fa2dd33812c3f09746d3b817ee328d1bf197c66a9cd8671a17e226d3380fb7158debf0c56da671168f11239bd74c0d2b084a4ad7684f72729a88a202ae084a285c12c2108fe0bd8a21468b62573468b2586185955aa6a241864c1d33a6a611c5ae12c5a612c5aaa6ac5490bd654b162d5aaab264b1525565a9ac5841a3a99a4a0d1a689ca1464d3da3714fa288eb192d464dd3b82751c4354d676575564d533fc61eb5186deb9f91bbd1c86d25f7c16ab3e4fe87c774969aac5cbbf47051860f59a96bed35c185952c42d73a96822b8ac82374ad2d982d34640574ad3faa0c6412bad6a11750e8909b74ad7da864304446a16bfd12c1163ae4275d6b9e18c65893a574ad5d5d28e0810cd5b5be66a840a2b3c49b63a7711d6792ada6f57ea341051e67eebcaa7166cc66699c0942d74a295d13f204050f9a942474ad6f53ee2815d0b53eac1ca1242a45a8954a25e82a69199262999159e123a3c9d090e1d3869965c9c4e891c97ed4583033343f3fb75467cc66b75dcefcd07067a5519366d623c3b6ca6ab13ad45cb855ab7dd87c366b5ca8f042c50f540811a382086cbea3e2691e29421a64de33394b1621aaaac258b172a9c0a0818617356aba9c710697346974e85a5b319ebe0fdb2c9bd563beef0a71c380f08310215e3cf0804b83e0dd0282f876b5d40b0674b96e9796bd3a5433a479bb5ab4b41862a0b167c2371a34d60a6bc60a2bca8cb758e3bb4c1932afdb3164c820d1637a8cbd1241842d56cb771040c852055e88106ba5754bd5ba071e341aadc6f51d3bceb8ddd274ad714fd6622222a898aef5d3bd38a86b351be69e46fb2127c78b2876add64f9d0eedbda9fec9c3160cf9a6fa4462dae5d5669d91cd8a7575d321f7112b20934db0c7d8a3aaa66d7df0854d901cb149c6c431e198c62655a3a652a9a9158c3dba5bdad6e7027a217f885d21721f4cb657574b9618b4d935d383862cf62a59cee762f5f8f8fc82b1b66e82dd31d6e6439be1ab45872ed676c35c31f7aa525d2db7294818be5af2179a18395f661f5fd7f9d27318f99d2fb2dbdc9ce74bec38f522f09420ec9442744a0f72704a294f50684282024610e1668f68b8d6b6fad92dd71e4cdb66f6c8f52d6c92b2ab5c0f62339663780c585f3b6c927db119abb7f89ed9699d1d421a64825a729fd67c6b36eb986f8c3df2c0f4d7054c16983360cc80c1b202264b982d62ccefca53638f3caac6b2479d99b6f5af434c0b59f551fdb11849f5a5b1473407925f9adcef3c301e55980e0d34c450a326eb8c33d0a44973460c31acc8ca3283064d993367b0acf853873b2bba5633d3b8a7ee4d173335d5354f1deecc74ad5fc77466baaa3a660c2573b1c032a219d28a9c333134b4ac43d55cc7841153a6fbf78c3daa64cadc3356dc3368ee193172df3363a2204def2aeb876cd6315ab0f2d592fb578c87e595f1cef0ce7868bc349e159e189e192febca0c498f588197ac658b10ada5a74bff7ae9df308deb5f2e8dbb3f34ae09d654754cc5aa662e189b95ad187d46d7d234ee7d7b46e3cc46e37daba67126f8be45c35eaac699e3fbd74ae34c9be5fd5bd53813f6fecdd238d36e79df6635aead0e9de62af72d118d2377c4340ea62344e35e39efdb308d1b71df7a699c88fbb6cbfbb66f7f685cebc6e67d0ba671a00c9fd5cc19cba5715fc5b2b68ef1e03ac6dafa5238b9eeb366d5ee34f62867068db6512b6da3593a6c925bda4673c569722be0d2369a2f4e432b15a4d3d354bef504f5c8067b586debffb19887e561951e185ad40793fbd75aeb7954b95f57e081ad2958ef54715fb9be15aba89edc732c5ecebeca6b27079e3e06cbdd5bb18a92e57a2c5fae7b151a4feee6f4a0077eaf02149e5e0c73ad5ba9ea72e1b1d89ceb556067a8a872587072302056b0dce4c48f307ada98236fa5cae66e8ea5cbd9bc0a8c4a27a773fa8b399c5ba9ba399d63b9b99c5701baa2a2ca61c9c9c98058b182c595e3b9952a2f273b96cec55e0596868a2a87e5a6e7f4391593b456525aab979534aaa33e56fa501df53ce50fd551bf5302511df53aa58ceae8a13a6654c70ed5c14375501df5b052a43aea5fe54875d48fe58beaa8174b18d5511f962daaa3de55baa88efa5619521df560e9511df55ff9511df55e09521df55d994375d4df5287eaa8b7e5a53aeabbeca88efaa92a156b7ba6bdeeba83faffc4eff434dafdbceeda1c2b26925ecaab1d4648af8e4d8ecde9836cec2f6973fa9c1b1b9b57c9723ba73f4e77eff4e2cef79dd65dafeac9ed841775c6bf5ed593cbc1562613ec069f5666b5c15626ec55def2962058d26862f9974141ded4ab6d16210d0241928cc5407a3a953bf7911a14c1fbdddb135d7cae601febaa00c972ad262029d6e635c192823cef28902df0c3376bb3ef616df648d666f1a9646df623589b3d09b74ad5618534c8f4ba1cadd0b63ed5ad2af7cd1e5a72d3aa436e5a953b305860289a6c5e331dd535b341366fd50d73abac9833564c4e363bcb6ac97265b375e82bb375a863d2f46b172f15891aa60a517fa84454311d16568d08841e1e24ed107243323b30b903f303994e4c474437a613a243224c77d59ff5ecdbe2d3d3a187b4efe75c6b9b803c2dd6d66f5897656dfdee5e15508765e68c8d75d7e22e8db5f53b35d6d6f7a8ac4d0ab2deecb03c6faab65846481b477f75c46e97c2c9d10735ee94d2b1c1c921e402f299c9c81aa7cf21aa81e355b25c8dd39fa708ff87d6d38fede4dc5c0a47acb101fe0fad14ba61e352356e3b3dada808ff87568e8f09d96cd0831be8b8e153ea6654ab1103730cf1cc720ccd786ce8dc6046bf1164f4aad52873dcf7c476726e2ec573b288089f553d391cf894aad5288186de13dbc9b9b9940efe29c5a36363c3561f4e2dbc10b6127f4ad5f80d6cd5b281adba4b013d085bd99f52351a1fbfc4c731206c05fbc164f3f0c1562f4cd230381b31ad47c4946747075b81f8e2602b0fdfe04bd6981a1b8c4078a31d9643de5c2a44f2a1fd9037979ad1f136564f70f277299ee3c0b095bd54ec3aa727499e58ce75c64b89ef21ebcdeb5263edc725869f5d6a94b239eda79428354bb247a794781f6c05fe941a4f9b61ab1e19b6fa1e6b5d8a07bc39cea55eb7f929c5d387fd94dac156f7e2a5c8ebd4134bcd9d5239d8aae2188e0bd36eb0550b9336200e22b1550eb67a82933d7cf0e22b25622ba89a2da6d8aaa572a65a7dadd2903783b249f36ee6647a7184b651413a75873d853ae19328e2f03cb95cb2a7f1cb59d593ebf9f8a7d76be76f82ddf0dcd6fadfd3c6bd47e68a559d50fc934d55438bec697eb2390f3ead986c76f069c5f46a8ddf2d89bbc14f3737f844e2c9c606d3ae91ef2b0cd5b8177e7abd3014114f1a37e2a771c44f8418a171227e12453c421705342ec44f618815e0a549e35cf8c9e5c24dba56b36fe1a7560b53312036699a0f3f7d6fea3f7d9886c1f8a9bea9315353cd4ff77db149cf38c1deaf651a0c951a305965f20fa6bbb497c6bd78ba346ec40912a27122fe12a671e155e35cd7f9a171ad9868df44340ec434308dfb6220cfb562a235c0caf62da6711eb6628a5931e5542b2672cd9a35692a15e47d48c722cf8dcdda745fa92089505a641699150ab21eabaac915ab8c0ac8ce6655a3c61e7597eeee52d57477a96ababb5435dd5d2ad6adaae1d9c1b96d82e1e0b3b37a723a553840725ed593c3c179952c176b02ea33d6665f25cbe95889c5de62acad09a6f3364315e3d9c1dd054c186bd3c16795ac278783fb6a8cb5d93796b54941f6cdeed26932ad21054e91bd7381909693eba13ca026581a2a2a1f970ba70996a374b2eb503757f1c6a9e9cb513cae980b9b368feac94e4d3547c57278a89a73742a36c947c96c6ec2d3a60f72144e761dca23618feac9e3ab62f3f5285976393501e5289d5c0fd5b95cd81c1fd5d3f4a2a2a2caae43d9fc556c8a8f9259eac3a9c9e6a898cb65868feac9b5d6536cbafe0427e37c379e0d6e8275e485d97e758fb80926368f0a8ab80908c427083e4a96cd107f39abc0ce0bbeaa27d77a544f3671b20b370155015ab3664d0ec4b479d44be1e4aa64b90f9f411e3edfe19376f11993e52c3e739a477d554fae31d93c5c52607b56fa3b932d1d935fe0fdde7d07efb5a6b2f91a5f6fdaaa2e43b0754defaa3a419ab6aa9e21292d32c727dfd51ddf6554589afdbd1f96e3c7b2c70f230931d36d815963c4bf6e52acd7c52c17366bd65d177b42e0425e30e35fd8a458233629960b9bb52c62d35675b62adb572d4830f628c9daec41902463313ae6aa71ddfe6285bf0e312d6495eb6647059a21cf641bfe82c936bc79d3649bc5253f8f513577d8e50b8f651391be383b42af7287748c49b15aa549d5d43eefaa96cdae8b49b1b2d975a16ab2d975c996e6c65433f54cb6af3ad823d8eda5a0691bcdf649f688e66e5631376b989b15cc91bcb0a2c50623758146dba849c79018a98b33da06c3485d88d1369ab1cc9cc9caf61505e4fdce882d46e02adb7a7b93aa3129d6c526c5ca35dc0469d62ef4ca8b2cd9a46ad4a4e923a5b6f5cd983973262b2b9bb50b4d93a6cdda25dbd72ed54b05537fa861aa10554c25a25e5524babbbbbbbbbbbbbbbbbbfb0aa7da2d6a9a2e63fa76de07b65c6145e28a08314284f9018c972e505c68b31e598c6747a74a015646a012e1545a610a311a57a1b21a174a41d338d793338d6ba16045e3c026661af79150a6719e02b01ad78d404684aed5314a5dabc7ea52eb635d50247362b407d53460421a6476970c464db65584f12a0076ea35b1393d0a8d33c1278d335b521a67ba9e737aa84a664c45e2aa1221a60a11a6fe00a66bf63522fa1bfd0efa1e26cf7770a6ecb1d97b7c4e3bbddca75ca16bf634fb5909d535fb9eb272919552ba661f2bab0e5db3e7299f74cd7ea7ac5bba66af53a2d035fb9cb26ae99a3d4ed9a46bf63765cdd2357b9b9284aed99365adea9a3dac5440d7ec5f65b5d235fbb11ca1ac545d332b95192e8d0bcfd0a171ae345b1ad712434be3c0ac2c8dfbd05435ce3b63a5719d154dd5b86b068dc67519358dab58af65fa58d9aac97d93aa01936d2db759cbd429c87acb56345b076f86777dbc686d6ee2fce656e739b72074ad3ee83a6552d7de35215da3750da96bb1ae79d0b59caef5e85ab9a36be50d2c89ba56eb2e99d6989ad58f0c56ee03511f4f505fae54904d35df6851bf9e9a51428bfa941edda8ad7f6f82f626c9c393e92b14e40dac6548939aa92a20bb11ec5105d3b67e18500c7945cdd431b96f26f76ff6a852b5ad0f8224198b65f396fbd9ac543505a449fb581603a1e5022bf7e871bbd56ab1184982a0f9c5f5efe63396f0ae33995ee58f8b34995e19a157f9c3e654fe94d0abfc9d8e45c0dcefd285967cf3cd5d50e59b6f1761720ec32a76a392eff75d79b1e7510fa86009efc255e1cff1ae5711ff4caff2abb45265d53a16aba60fb2f78beda8a45eadc9b5caaa756a6d4d952bf8168ef232ad39f02a8f6555cdb92e96e16b8e8e47a4a8a0f4cd108c65f3f5206892d466c672bd19cb204892b1d85fabdd6e47d4dacc1ed97c8f5b9b3d35bbf3dac32608a4b1a902ed1d362b53534d931b9be0c5663d2db21757b3736e82e5c6667db6b7473467adbd1a83952d35936da667be6e49218e116b61bf2241d22eaeb249c9e43e0adffb4fc47e9357f83e093baef715f0fd1c8f252707be3fc287cf2a9f18cfa9e05c84562c6cf1c04ee514b1d407b32b89b1b087e7545ef8e636b0d7a900fd7b1f84584c0c4317cfa98cf8d4b9cf7360aff13b95f2587272b150145d2eb0f51307533965c7093fd8eb54fed1258a20486bf5fc9c612a327cfe5c47e77385af53911d1441b0d5eaa1c52eb6c09e1e5aec65e8fad93ad8339bd168b1dfd53a48fb399e4acf8130951f1f6ce5fd0b41176dd6835bb19f32dc3a18b36b72ad9f52568a2b5db890e3c1565476f029f5c19a35391d6c659f834f9c1b6c556f83a5aad5c5414d833437c89083d52a84172dbac8bdb095596f316dc456a6bd4745c4a7548d2104668c91fb7e4a5529ae7451251762ab0e939406696ec8927361ab8bc5bae605276841ae85ad2cbed50368b4f0220762ab8a411b4308cc1023f7e19ce6b104596fded954d7a299900699354cee9aa5fe1076601450ad78a96017114e2ef7d301047ba8aef5168b4dda35fbe5468b90289fecfd49d7b260f30bce9150b04738f806d3b68d77fd3be8259b340bc91ed52c6debf7884dd08ad8245bd88ce5f05509925ea11963d62cb95fad90993c14995bef9f3bf9752857b6791f8a96c743dd0c7b1f852e8b879a3dc1c93678c79849dc03cc92651826faf20bdfbe2ca0ece1a09a475c7361138c1a730b7bd0b5679366e5be02c2dc3a944e1edf17e13b142cbbde07a195c1f785bc0e65915e601e312d9645fc109b77e19c9bdcc2b18acd188845317f98c426993d282f7757d962f3660b15b364e74b699113a545380cd92dabf0fae47a289b9dbed82b3b91dea16eb2d33dcee9c19efc61a858060fe565a7d679b2532b741daa959dc4b74e4fe66427114391f975a8581e0f256627588e53944d7682612832df1c2a966d0e05cb4e2486023379985354989d7030149873ee0415cb3b8722b3cea17432ce6953550315cbb23b419139769ed3bf714e506406a245f53ed4a89e5e565a5a541f2b9b16d5f394941ad5ef94335a54af53f6d0a2fa9c52468bea714a1a2daabf296f6851bd4d89438beac9528716d5c3ca1c5a54ff2a5fb4a87e2cc592a446f561e92a435a54df2a456a540f961f2daaff4a901ad57b250f2daaefca1d5a547fcb182daab7a5478beabbbcd4a87e2a566d0ac29a0449afd0506553acdd9ea88154f9e47cec836037b73f0e9bdbd37a7eca8e2527f7ba7dac6724754e65a7bc54cf6bdc3e67246fc69f52e56b9ccae983a56cdc761ea0df9e8c913736a702c3a794d06d5caa76a0973fb1e4e460f854725c6af6a0db8b5f483216bbb9b179fd94e1538ae8b69f5245b7f153eac66b971aba508df2a75410fe67a7723b969c1c7913bbb1b179e98c3f77882ef4536ae8372e55f4da4f29d97b2eb5f319d04fc5e85241c7363736afd708fbc983a99c52451fba14d16ffc948aed5c76299e9fe353c1b994cf835e36afd76b1c6152dd448ebccef882c174c8df643bb14bdde460393a3f757e4ae5c81bf1d85ceaf5d84f299ffffccc81a94815612bf144d8aa9bfd94b279cf4f299eef5c2a76d9a9c02ed54de4744e05073ea586b055df86adea4fa91ab66a5d085bdd4bddc056e06d602bd74fa9206c657e6f1cab81adccf0151f632bd33b58622b13bc0bffd8ca74bd8581b095d9fac5b4d97fb095797f4af5dc075b99dd454c85864fa9f1334c368ffa53eaf51e4c368ffe29757319b60ab12815c3562e1e6cd5c2a0cd77b01588b1e4e47472f059e5933b6197ca913f71f029f5fa0db6faa4c6db602b0f4b5d324144912371952a556d80020d0ae46058ea85ad3a4cb1d50d9a72755826bcd944afa8a8b2bd193eca27b74e4f5d60eb513ef9c3e0a37cb287cda66e22935fe7c40c92c8b0289f7cb1d954c9e012460ef915e5932b369b2e9920a2c8e3cda61ae5931b9b4df5bea97a31c59731b2787a5bf690b0d72876cd62158072e86a819fd7615305a05c31d35501285fcc4429088a2249e6e4c462b4aef5995e7f99082df501d57dd48753d42cd743b58bfa708adac9e0a1be17f5e11425cbdfa16ea80fa7285af60e5575a80fa7289edc1dca93511f4e513db90f65eda36cae51a1477d44e1e41ae565f0f42dea23ea95410c762daa8ad447546ba43ea26cf2874518f51175b3e723ca86fa88cac91e2671a88fa82f87fa8882e50ee7ec501f51cd437d44b972fb88bac98d633dd4475437a33ea2c67c7d44e9e48b693fd4471408447d4491b97d581feaa3f13ff5558b4308a345f555a7de2dd264ef0d2a89239070b31873f30836cbe6eeb51e8d33e998a4aebb5250ee8872f7116a387277125cef8e823db262e5c21ef45197a3575a80c95dee5e0b6b393372a96eb6a4c59ea545965aef94964e4d1fe4a645f6505ea6af39a8719d133d947764491350aea765d307b9d2225b31916e2c525fc70094e6579a0fc8de4f2a54a440296bdfb4854d7b26109b1e11ef6da4b149c596b300741d8fd8570f1fa9efc71af7e1bc77f7deebbf925e65d1257b6597c9c6510f046cd61a642f0d4a444fc7359488dea3a244dd42db34600d425a8f20ef2959c4e25725dd47565cb762651fb64a7ad51db648cf8c20dc5189a5b97619691b8029086450c98da64982944158fe1ed6ee654a694942ca6012521128b949ca88081480a91d32381299ea929b48a8af9729d5052cbd0f145d604b749534d72a69cec3a1cb94ca2ce892bd93adf2169b7654729b6c66b2ef3ecfbedafafa5bce8ef459c87dafbb177c287f4f52ba2ca0baf9fbed11087637c96c3e7ff76e5233f93b09dfbff788e5ef3bd297648fac5881f87b93a715a8e407570a94b1400ba31c630851cd681240038315603050301a0e88e34093347b148012a7a65252a0c9c3240742061963882106000306c0cc00cc0c01000097f8e3fa17ed693da30d254173513040c4b2ca65964109cd4618ff6f2edb57342585acab2fb15c1ad63ac59817ddc1c8b8b23e18a47ee6ed32d237a54e6c1bc531bd3e4c0b3254912c5d89918944733c7262c1e494d03ac25d1978cfa46d5fb443e28397d99ac4dcb55c66df802658c4d725803e051181e40d23cca7ee9fbfdd696617c2e2e5a0f86640f469fbbcfbd10af2b8cd9cdd354bd188e57f7d4173b0a8e713adf342685b8ac789c9f704a1b0e938b0d6fccba2866d4f8ae7a0d77c5782f6b41b41cd965ab7a6d35a9714c9c066671c70640ccc90a7a44c9d5d8d738a883bd0ea210c45235815796898039213cd6b85170acdf8c618a0616c69b7e60e3008a70f5a5c612b9d4c4b2873e4df261b33e17b661430f21b0125f81010a98f5d3a65100aa6ce608e52e7386b88facf080ae5a507aa560966592938a21602089bec4d070f9e73c072aed79226bc85ed08d3afe3259b525c0785c4080b73ad8a2c4ba127427ca35aa55276660dac030752b05141bae8b66c301688531c7bb64a189df95b6d8f0a3f40a68feb56bb400c96cdb1bdde0fb67db66b232c701fc6205da32ada17c48ab9848c10ad8445356489400a0098a2c185be56244ab75d68479d95afbafaeb3e34bfe669e50b4448ba3a91e9c6250c63960d3a6b6a8d8fb5d607da59d6499957964890b524a33d83de9a7aa31fe28f7017ac44b4a6748fe7cf2c00f09f4a97b243226d3a8b7e53284428d041254ea0f45591dbaa0d42f0d52a0532d13e9bd3620d9b37d0ee018a021ee6c8e479463b289e34d033ec43c2fadd209910b4505874c1c6771e215230397537f9551510e48089de2286e4d5ded6e51cc3d001117a326fc29128328e56645ee1dfcec3fc1c969ad8f1186501856c6c3ce307a3398aa8fc0014684988f56e615527229505d5b502a1b2fd9e0b67c21aff2092d973d95fdcc8b011bb307ef6736d1fb84548608e42b728b1f181b5c58f7676802488c9dc0a35c06ac8b832249081d113e694a095f2564217b9558b6f0bbd715b2b37dbc266a4d84f5cb754de365e847ea2147dcd02ae18351ba9114ea5cae369f942faceb0044cc27d59b103834d4c8bdca54316acb44b95505711698160b9ad55ab07eadd3f8024151776228e24cc5281cd2344f1a29023e42af550a976cba975b5e6b4cd6d9fa6b3185055eef87f715117f13618a93fb77827eb6d1e114602bb054507d8e3ece469b26dd0015b37fd659ee936541dc72363b2f2ea3cc05d3417dcc996db65e3e2e247676972206def1ec3425411054baa1249ed0cbeba3d22fe9c5904f438e84cf147e6e971f71f7bd33ae86ad374da1799dc405cada4e3cd7a59edc38f805a60dc4f69488f018d5c66f8ce32e7c7f4aca4ea9ba0553b8d00ff725489019bac6c70cfa4c7efecaf48abd750577766818f7da48a827ba9dc709c27eeafe95b4995b770d79abd05b885eea653e688bbbd27d74c05b4eae38746a8bf1d92d408890a915ecaa2cf28b48a3d89ba5c6237d24c8a60cdc96296ebdb9674dac45e986d928d8ed6e055c94c86c3b16dcdba50e5709a2e93d28924b36c6deb361b5a1be85aa0f566261b7655b8b0602767ce3643b3b2038c03e792f221b9a45cf7a3bcda58cde410b99a58ed18c5dd90829070e72b3c5313b04cf1cc64eab8cc9460edef2b338cb935eafc1a19c48a6175dfee4316e4782fba7c33951773681f6c25ecbdea2368d8c5fdb043f82b637dc9cf048ef72655a3d04e234f84df6667aa268a2f9b5d4cc3c4b91db84b425187f072136fffe19ac0f05868f809c10e975c4595a38044c71b7c2514adf94f54b32f52e37c267a534c19721db3aac0fc1a605c1b0422fe7a78f0903b04f658d3ef4ca2dd32404bd24b0ec62cc1a2e0b276c58060d26c624043cb3316b01c63cb6a548c4ec0d88b7cc06cccdbcdd21856a027003994351ec540376d55f415e07f529bc86bd78315535d1bf269ecff17da4de7603f83ab8dbe3f594810529bc713d144469018e1514cdd342c834dcb265ecc0189c8ae42098dbd61a5ca7bb0070e5dfd04e2839cf5d02fdeea7a206bfa7e7d59c89c93a5c3b80b330f13ebf2c31d9de9b2c5f864b343c9830682fc70bfe38c2be3327a4501b5287ea5409c3ff7003b72192951a46d278f1a7eb4ed063ca17097396ccb018c65263eaa17595112ce66429673b6ee163a06dea1a4c57fe7f65c42d8421dda7b446ea662880ecde5f774794b4750123e0f0a9a41e2920b96f706d5cad324dfd78f88264295d424e892911537f8b88f920873329e76a9ae936368f40112cf8cf408316c9d862647a9c351bcbb6cc92d7db27198ae7137da92c9cbcf1ac90f4bcfd382c8ab686e8477755af08e7b26871c7ee89d0a05f3b415e46e4a7562a7aa30c766011e448c3dc900c7729ab1df9db2867e62a1f2fdff56c9b35acb14309b543ca4162204e43c2a8b4d6b8601d00c2997e0f680b7f581f83dc2fd1f552802fda807ee0d64e2d7d488afbb96ca7c780b3956418f4465ad31dd1115c3d02d46ca14e5a7a0dac69eb56ca6f7e6cfee536f6a652e74558d73af27736ce9191d55488f37f8f8494d14cc78618b89ac05701f609aa4adf359e14ca35f6f30d54a99cd27d6abaca4e8dad53dbc86ba0b1b376c426b199f8c295424157247d629eecdff625f55d8e267bfb72ae214fb610fe62ba9f8190dfed66168974f5996e9a7c31f2d0a9dcb1569e6615936a47a4468be3d54905298325f683f59368d51f0eb803558f644458c8369889f82051535d44bd471187612518635e16f40e0683a91b4f27d62037d8f22756cbe6e6c3125c03c3a23cc5aa2278060c716b2595d3edb3e96146fb24f739992cd8bcb673b980090c6aa45a5b51182f580bad6c92e057ed3b6059774e8b64cdc8c5ce9d8c6ad70e6a59d3a4a6669f0dfac5fe81ccd3701af9016bdccfadfef298c83bcebb2e0ecfbe946197741928b89b96b9a7205c918eeaff9d6b2568309fbc41f26b3a8815bd517656a1241eeb0f7d9d6facdc64490a24b5197d3cc66a2d5a80000ff069735c763880e2ceb58b536d2d2c7d6ef530b476cf4a8cc5c29a94206ab133331daa364f8873b2b18955b81c87eeb6e639c53085719452e63d76b7a1fae9c2c72b48fc5a5e3ef87a1b360c64afb371ef696b5f9855da16aafa5969ec32b7880097c5f4123d5366cdda0c3f6e8ed77c8a3bae1a6106c03ee421596211a10f1bc5f360627fd796529d5f9438ae8ddd7ae03d163904f9c84bd1e7db79e95e6a188c625560104043df9cc5da5f3050e9dcdb2ea3cf2223532a9a900b30743891bb5c09dd4b4e130a1e77e89b35655349a150da8626b544b5278bc3a145d6e00909e4c77e48de24601c5f98d39aa55b3a69eae1939d9882adac4296e5e523757e09b2a7026c18cadd83e5232c8a9e05c86976c934971bea25054b46976d5d5b0cbf11e20b7d2693566fec976ab552404b3e89f5dc82d4983b9573e98a102331cab700af2f426e86c36513221740f362baadea83eb98b623c32b88b4ca0768d843c8172321bb85ce8deb8aa1857f4dc14b380880afef19061c68dae37942af4acdf13e85304be31847d5028a35144b7464786bd06750fa4e5e02e161c5b5b817c175c1afba00e40043a617b0f23fe8c14411e538c465991fed2761675868a10697af5f71781ebeb3bdad94d861761cb2b06410714dddb896f89da37e6100a5f618cb59290e52c31a71eca6fbf2d671234707ff1cedb018883992f53492df7d3dc3731218f2275e3690dd452776c86a5211fc7d0bb561c573b0541f296fa86560a7837d10071a375c86dbbc7d6812c2099e4b385ce3e6d371f301b966cfb9237b755f595accb76a34593d19e4c9db64fa65f6fdb83deb1aad8158cc7f5fe056e815de089955aa268666c2e0cbb222ddcf4776ee4c9fcedf0598d597708ec7f8395d273016502c474b4ed7088fa770dc74b99f0afa04f5fc4dcbc360e649a82764d498f4162f8b92871f5c9a718ea3e70c1f1f36e4cf48242a685c99e8b99714108beaf36e743a85f496ceda72eddc67553056feb71ee6d81b931945f9713a634fdf6590e3420df320ef586838d78efdc34d1c7404d8edb8d6718a562c19e16176141569d5fed08c341930f2e43a20386a116c82759e6459be5b33f062bece757b46ed5933cfd3ec71b36b578e46d6718878af5bbbc2b6c89fe2f7fc6494b58764db5288646742d773709db07a8b6a746c97a44b84eecff3794b92988a1e6d2ba765339d0c35cfe6055c5635df34c1dd2f78c413f27739f3a9069e9d040fe973d65815a088eb2d338bf1b75644f98a412d209d128a1e2e96fc147769fb28ade0f521de2716f2e78f8e9ab4d84b5424a7a51c5da57c34a30877091ef7d34627eb5c2bb9f9de40713898f4f4436030cc349f0978f8b1ada41f076c215be0a0ff96a23ebcbdc20987e8006ec126c29f018115078d99eb8959cf91d3440df42aa35fd8c2b5a914b9c380fab0db4822b51e25b360142db81d8452651fe568ec829d2b5434142b7a04ad204b94dd63c986459e5560d21b23724150593326c253d30256c1fc537529069f4dc74ea328d42b7b10a949de95da61525e16b1bf93ffae70ba6b193b3c72da5af352073317abc90d7b6a3b005edddaaea0e393b1b7de3ae8a6e4e59f1db72019d1f44ae5ddd54bf7d0203dc9526c6e21ab46f7d9a3dae80785945a6e513d7d294b8385186d77b86052d5ce5e63361d94407605561cc6b26f485bbc2df79cd929fbc3a8bb6fc14d64e1e2a435be3d888ee2eb3a2b5ebda840dca15b714120d2e4270993acfde560a81aa763754fc98561bdd3500487f92a87e078f2b369aace29f4d5eab1e9a701297df51639abefd53323122a0a44eb285fcb04490f6352f157c78812630ee52757c8b235d592ad81d34769c9025a199b219c378c60ae830cad0267c9c8834ed5fa0811d085bc1a7e94dce1c4805979b8ff60f6ba301d5c8e3d3e47ece4020cb78a03176c06b526074739a978d7c8a3e9a408783fcb01cc35b1c78a81e0296f47dbc51d2bd639e803a7efc5d221a79f3bb2bce9f840ca64d8cdfd77b217d2551a74935caaa84ab2ba9dafe240337cb77f88259de48d89aef5e777fe05c082f1e68116bd63dfc0753d39eabc43a6bae831225c53ff7cfafa85ef5bf8ea1ccfe6bf584629e612682c07d40ffb88eedab9752b2dfc1691483f0510f2d4a0c707e76fd7864b37e54646a6623c6c0f6c5f096d280601fd1d922c7cdde2ee41e692e84ffb4a014d56b5e0fa24a7b9a11420211b5b70b1c04b45ac1cfbfbc39ba544c93ee027ee5a86dd9eca597c043a9be11283145ff46506919c4928b11d2ca71541f93bc59f4538cca5834b164b73c96154916f3802f0c2223067cb1d6f63c5648a98325df794911c8575ade46e2d896247c171c1b5c4f96b811b9cd51c2082dac3608823d05c358e54e968d22da96e1a4f3b9265ea4da85d7995a9ede6404027117f92f23a50c117dab48d089b0820119c155488677ad4b8f4b8ff9780603eef22eab8b1b533979bd4893e8c9d89cf7d5f2a211507db2f709302c22aa98863e1994619e3625a6b5884190d8897eebefdd1af04fa0cf088377fd860eefe37f9d433079153bfad20e51dcc15f272b667ab55cc7231c3d9a44f9609fc414e790595eeea4a9297d1ef2fc85fdd9a5de5a2d5a98ee677272a4a00f999a0e67825ffeda624ab8b52e867e4f7285b1b931e75ee3e9f49387b2b23b7eb4910a140c8fbba3515c39719bf0a459194d678b465374b18c44512225e67f1190a529b21af71f081e1cef8820b7312dd8bdbf77fd4f310184986a2a77e57c218c2345af1c06a74d6840f8480ecdd2c8f912154f432e7f3f63b6dfe4aa79781392e8fc99e2c26442dc7de1c085526408335c99a8ab3f2700a25a223b213c5411058e0b16ad4cfbff2e5198c5e8a49016839c36104d48e12374140d3fbb79a24bc0b20cf570b629d801bf65a43450303f9a2b6ac435af92d3e7b985e41f8ddb74583930cb0036feb17a22fb72d9dd4c9418642b378eea7d01e6560aa317d96b33b35aac5ed279a84c246c4afebe96f8ad4448dd26de0b2602241e3f19131547ef25845352f15471a4a5084f877e2876f1fb381702ea68399b0d442d18c32768baf7af38603fa6b832831bd065c4ce7ae2a8c28803e1f383648a40ed24c916512225fa8271ccd1c5553d69943a6e0d06c9902bb64d3ddb7e83068b1fe29d9ad51aec8be0c214360d23005e2e990ac087aee8358504bcdc12ca64475419d7f47d6e146432afa1a707aea1449cd38a336dfe0aa3ebe9af89310b7c446597b7828a8a23b5803fb8618d5b4997b9321bb909e8b848bad5b876c630f8b26662b0bd1e65157e9b8e5cdff45f178b3759ecc1dbb543211e289d1daa19d5dfaaea47676733f99ef89c935d91b18ebe2f716dad9001ca68c186d6a133cfb72a1c7215ffda8a44b2f839be846f0de7ac21887706f019ee544fb8df3eb5a452aa32c03da6d17768741e164410eecd3ec8f8d729661a367eca4959e8dd0929ab43eb03db9cd57d401a2c5d47f3ec2606fb639ba63784fe70ec646493b5272815f64b2e1b110a020a1128c4cdc5a957f5ac57543161ccebc8e1163f42a040e049b59472e2004b684de1d0f034f1aa33e4e9a917af9b91ae8a86b7e57290ed80c96dd4c59f9876234320e40db97ed229b2e5e6f4d49fd8cc46dc644293d0e1d12f450ea679e032c999327791da0737643b08c66e1fcea002cccd46caa5e88d152c801d40e14137bfe30e13654778bb72aca6b61aa69a87535c097f4310019d139c19d5c50147452b65bca0b3726b17a074211394f4c7ce569c26b9ff16ec571d2a0030fd1a577a7a13b0c172205d56f06983eb1178d6cb7818946a8947c121bef173ccc24e6bc8735c2f64e4b4969b11fbc6ebf0b95b14fed5396c9e280f4d3a613c948d0000f6ac111dd2505974f885f8fda5ddee4102a447e1481a3c6585e4cc98c561a20633ce2485bacd95c2a615c2afdd22d8ed6c1299ac46cb519d58976c62ff10401e37323a92f058ec98b088736ad7ef162f5be0580aaf559a49c0a24f394c3683cf1e2e59b2cf5862b5a6e781a71fe1753bf8fe05c796819fb3ec2dff2d0dfcfe9ebebdcd77450c1f43eb463acca44cff69a3f855e4299e6a9556a3e9681e8886de8b5337eb2c3f54e4832b0bbe3abcf5729e4d98a8efa3e57d8e5bc2375c5e9bb9acbaee43d76d2027fe08d62a49f9c3c200a38e8739602c0d26cac3124471dde896e9e1703f8df4e6dd3941347122e3cc06c76f86b4c92c2a7bba1595008f2313bd17dd51a3221072808c4577f65414a0dee6429be2aea22bc148201f5ea0d44405d2b20a0540f13625fb792429782534ef5f67ed32a6be3ec2aaf66575c6a5e114afdb414f988f342b74ac3b2c742d6aa129e1bf5b9e8848e5617c74007b004fc38540f7a422447c1726ade3755aa9386470e8753a9ebe6cd26eae3bfadabb95d76d91da1c6b37e336ee69a197081826db9ede507b210be1cf4a6492acd8b66d6c6cb4c6fd4d0777d1c27574c53c51123846393c828880a55f81af780b734c60c6841a350c54f153382d168f681b0b690e1add178755b38c317fb4d2f8aef4f4d580fab93930507cddd33ee31ae9b01fd23df2c424fc3717225a8d699d240c6f3e862155313d1ad845fdcd02c71312dc619f8ed2ad449a69974416a5980df686b394879232d1a54feb687454fbc7995b36ac06808a7061c6492c2e67559c5b364a62852dccae5f47eb1eb5e654152e11d77af6ce08c5a1b25d1c8987e291218ebec6f768887f25c68127063172a3c1720c9c4475d3aa97c726f94b5ea9d25dd24fd1874bc61ccb6457003b9172d0a24451ffa9731ad54d8b9e6130fcc2aaf27be768bcef1037a557a51a11888dff7a405efc6c0b8650561f444113a8c55050d4fb9170f21c2b41fc0a880e0b2623de7f2540c3e28757c73e7f4e93fb27e8426350f6d24b0fda1eea21db43ed00f33ba68aecdb067681b3d53d94af576894af7c1b69cf3588c0914f528e5e79e36bcb9363a2f39ec5d8d4843beb6b3fb91005cd82f8a1c555baa24af4133505607b1a406124d8168bc0292c1cbd7cd8d675e775f2fe076d6d204a9952a49c383a5a941f2aada65152992c753d2c9cdd6c5a623bc7668fbe6ee1819aa6682558d0d0631bced884b5603bd9dfe1a82b020b7b20b31ea9d10485d1b6656499e83a8ea66b6b1e1bf0024fa1d52dc7021f0d422a959922e69f9e18987c796b8fe4cac6614de9b649144bb4396b15b25b22ae22e53441ee667d51e457956202a852f2920c22483d82b548085a8a8c993300e7893838aef145dfa802cda30ac829cd17e3553fe789fdc354c7aecbb40472f5846eacd13680c2b02833bab6faa4681a320eda30cbee93d832fffc414b480b4a1d2950907a8f08e66dc7e619c8b82d1a6473d3ab88247110d536bd27e492e3052027d334357e54d3eb03adf2a48c70269ba07d985de1199fff0ab2c9e27111fcf44ad6a343bc29c97c88331a66b03aa6ad891045f46879db0e50885b0e8f0102c9abf24b229dbc58c33a50b90a6cd6e10583c926c7335850332a45a6540c2adbedb9f2b6c62b611c30578f4e78e1b894f99f116a8dd15d14775c0699184b2cfc4d35e518d71a0d9a36c56f27909338c35b7b487dbf9a012ad85a6b8f93b03b98630951619091e52640607b78fba3a4638d2de7805d13928de9349263ef6516183637c5f98d293e42e15ecde7949142f5803b102739a349ef006541ab41144be2fe1468cf2befb139985510a5cdad55d05aa4ee2b613844a174b365db8cf32926d48c6777045c22fddf270331ee30c50cf3e3ea923b9ef247a7432a3d05d3a5f68cb01ff428822970a2b4a73931a45020400e36b8deac760a514527e363c3d39fd0d385b0bba97e1ea7090d0d484048ad54eead3896e18d4d580b7458fb86742ff31928962ffb99153fc49b7b0d9b46d842612070d5ad2b0cf8a5a8e54bbd37b2418e49f40c8d18577a6dcacacb02a723cd65fc4546d4c353eb98acdc3ce65419b07b214ab361054a4085addfaa8b8bb0dc75350516512a10243fb84052cff03306c0b5248508652efbb31cc8d5115d1add0c1d12a47c0d41f60b97b294a67143799702a1d5bc07895e83bdde08d9f8d894e6848ad7b28530ad9bff075b67ed42a753c32219944f156499ab0989acc1c83efc325512c495946a49cc429a4b25574bb49cac270d58c33159ac46db60e80a2ead09c177358ca94211c446aaeace86a2be288b0675e0fc135cf0856620c39287feb8d9de5469f76cc758693139edc9e8a54919e20f223e5d9595b78c4beeb670a6e6a48f3e90e3ac16c6554276dc330dfdcb8b75a8d8453fb537733ce87506da0d73a10f160c8b129a9d3705c69ac330cd7c7872aeaa800201f1ac49ae64a641001bcf5310666db9a214e28116ec6e0d15522826f40757749dade8c96d41a7eb9b50489d587445f719394157597685e61bb8415d1cff3c902bd3f2122b8f1d68e353e6e5dc5d102f215eee641684ed8c6ad9060bc50929dd94f9e09d8b925d65b2c59896e3793f9daf582930a23b68844d4790b4b4728a08a7fcc5a37186b543d47f40d4f00ca26e74a0cc41106d0752cd9598eb0f150c80fa9b4b18feb700c009db82a10979e5c8ed373dc386203e192c26cfb8f58be99875514b85a8e664d7381b6f90fd46e6a6b9f80ee75621e72ade2cc4c55fefa12c146a40801e5c5c6bc4db7b8336aa1be69d9c18852f24d28a1fed018aa444fe6830cf0c117343a306665c551dae7823da88afe2aab624f6c249a7149bc240c39e8d14051261e3091725f59cfc073c25b802038bfc58f4202995e9937fe2b8107cbec7837e5fce40c653fe9da6b79db4e0739d9017505a4bc24ee4206b98b14c9805297ccd8d6245adaa370e44a2b9533c45ba5a9cbf7bd0824a1c4a52a20b7f1349707ba4d0987fa1cbae415268483d57ff5d09590f2362be94e3c3c67efdb18d6695c8c27edab41764e84acca81df6b71f860ff33a1e26da571538e7d82c5bda60498e8e03ca41e73d2d6d3b27c8251c35164f5262e27985a4b22d01712c823897a8c4016afda10a40fc0bea691e234c7cd4e01c2b8a1ed0803639c3450d4963e80e82d33bbda8de2f612104e86ef031c7f87dae726eb28b1bf6140cc3a5e8a45744a7a2b9ffcc62eb9699285313473e66441b54c0d1881815153b7d08bd6ca6a66b810a3a2b6c0c40c7669422aa6e42ee2d80258ec65462494bda11d13816c36f260d6ddb8ab219563c7670175ec0f529bda8e95b27408218c3ad93e8351da61d4b4af0815d37524228a349298832465520f40e03da0d4ab775631a5a64e42ab918f2bedb00ad436ff94e42ff8a265fafca9b1628f8ff7b723fad2d6de6598da8fb506f4ed2dd893b2d8686b79b46574abdbca49139fb30228c151265cb68c243568c541fb04085527889194d0ac5d6375b0896e723baf28f6876b39585d088b61d526ae5653a25f23bc23a5af53af7875ccd76eaba29d96fd3f48286912a880982f209009643979a572e7d7373a50c6d6d7e8bc89a7c2ceb01f89f980f9b40ea3b78b14f50c564cf7bac0e93c537f6eb16edc91389799c7f2e4c83dad1fe25340468173d7e23bb8769264e9ba533b993601abe4a980ddffeaa7898bb111c9ee545185be025e1f8b29350e3ae0a17115dd2e339bc04991b12f4fff57a5ca49c81ce7e1b744b87e8432f567569e6b02915d047294056ead1468c348d79cce7cd103952b8c269ead8130160f7b5a26cf400da2131a2e8ef8051b270890127e2d8116cbe68d1161d9d850f85b2d68552bd13b18a56f173ab83214816d1c059c5a001ac8655aba083da2a2e395c13dee0b4b51e0d73a0c9462b53d347dfaab0f5a9781294653b6907e2f941631259da32f070a86cbe88528ab0c09f6175b556b1bc50d6d1531b59b42acc0576187bdc1c3220e8153ab49aea52134dd899ba7254653b24931102be2aa7307be6de9a3de6626903dc56e04dc43c5eaf9b707d7e13aee2579705510b2fe4b3ae182f546306f08d61a93ca1b527e4a26e40198e0481b62956dfb0693b10996964ee6eaf373fd45a9186240e8173a6c0a880af9d86d4c7e1104d0b3c77de3cfa85829608b6cfc2ddea07014e33d34acbabba04c1f06a8c96e943ddd6793233abb68529a96c707793a0d39bd9fb5d44610cee834db0c4c4128c9801c7eeea5420f3fdfc114677ba713ca51f942a1e36e0bad61be71574bcc1bc983981798a955bd7c4551aa1034dd6b0832c9e7cdd571235d69fdf58082fb906628fca4d3fbefd7d5c36daca8f0f21de610a4e5d6b64fe6250595092d7c58121ac15fd59525cdcf6d9c70622267d84b0fc0e2cb00ebe7493b80a7d6f4d6f93e5f038683c3685401782023d67160253f67377da254c2f7f1b1b82e22c7ef334c07ed0a5eb4353325e3eb6f99f732e3a3f161ebd18452a3ca121869945515636e45459e131d8550b2c662a03cd141e8a9034a58cd75791498823874e14d4222b673fbc04448fb0cd42498528d100af8b2602c2803a9250c625a5ec221040614501c20866787fba114a8d7e33c1774784267a8e4d603c7b876d110b5d3ce066028e9204b7cda2ea772d1ad8cd8c204e0ddc9ca1e9791622d2a96179c5fef0427d01e899b8d2a9809e4f430173f1e68ad0ec6cc2f27cb8a53e0ac1d79cc79f943a72380a35c07991d303acdce7df87bb18067d9e8e674beea5cafdcc8f55eba13f6c288f3b27445565de2ae1d40e0e6eaa6fb6ffde6f6ca6d4883df4fefd2fa3b4402cefda7462e203a7e94ad183c2aef77e05423852e0f904e88b42aa0e96d54ad8836e5b326ad0022e9ded622666fc1535770791cb151ece475a31abbf1cbf06ca9f30ff34fe827e8d6de71fcbcb34dafbcbca51d712018073472c01bfa2b0aa4407ae5ccb654ce5d3e8d117f3e91c189812ccf60c0a3e3db099c4ccf748c0b3309fdf09687b2c491beada275ae5ee076839fb9e64410248500b70e66a6994148e61d23b44b45385b3691ad090c7066f8189f67a9d351603b28493e011bbd9506206f3cfe1266b436a9dc60ca2be7556821f085c34c491b7147ba7ce3ffbff8fca8a193340a9a302b8f205eb359d771e7d02b1fd079cf3675308e045585d02f45ba776d13044d6917eaced5be40148ef29fa79007df2e7b846ae26e8e127462ea1e2fdc9652467538225efdd3b1c4b5cfed270d250aed5c70bcb5530d3a54e845f8d3859fe4d2fee1c0d8d6cd2d0aa125bac696730142041e7eba182d2f4c2945387b6c90dcc3973bd10f8b0b3540aa82f937b43da089e2bd513a415122fa8e9f422a4e380207aeeea8b9c9580972f9c6dddb47301858f08aa66cfe3d2d46b6491b1968853484fe4b82f8f1afa965bbe348f4d2729d49c97b03e06588b53db52e58adf1ed8a0f06b50534152be706d631fec0162213af05e602b2639dcc3811836a3374729eae0f762aa4dc1cfacb26ccbf8ef46e9584b2c1a86c79335cb0ba74724c5961d96d3e06e39ca0c34104ba0b7985bd3fc1d80f7de585f56623b51a1e288aaaf87cad893780ffa5ad93c9e02b0a9c3afd40fa199c0a3836f4ce16bead1bc61ec130fa3e5521ac9b6697210c2838b5fc42e9c89b9546e3d16a1bb102f7dccc4eb1a0e7f8778ece250c18dc910bdcde7422257f5581465e18eb57bae989b7e01252162bcdf924d1516a224ba46814d442657a6b175b9768944eb81c441cb414eb9059dcca1fe131253dd86237f07117e72c4cc3b1bac962de97149c6e3f842fda5cbb264510998638eba65c5a72320f45b789b442856279ed7106dfde20444f51b8a684c6449850274e8483defa83984f52891a67f1778b733917090014483bbb9019f7f8526d8bedaebd8d7df57bb29b7f0703d147e73e87de0e5782a2074950cfd158161a9466866157bc8acf4fdd32b79eccc2b3233e0ed8457dee1fa024f18de5e3b952df316efbd9874d9ae736f6a00ee8211ca88800de88042a723ef399b1b146bf26d9354c6cf1ec39fb9de19d66c01080aa461436e4d90cd2551da63b75039e2c0147239a32e721ea1085c2510b553b8d3966936e8c21aac9d5f87dc040a5d5efbee68a421aee3b79865bd44052788e62f9ca600404592b5e1ff0dc61515b1963cc030b4cf3c8c157b9eed40d67df3bd75c91fad5a72b670a58c1dc7915ab56984ba45cfa21fec3ba8044441051e2d1134752347ca60314dfdbea10822f5c8c58ebe253f8677890e3909cc24bd87616a5c829f7177ae2d1172b17395752880623fa782255fca9ab3711faf518d3e7f7d4fc12c1cafea2103628f9ca9b25488c30e8200ab6da0eb6f812e44ad8bbe8bfd58ae4e2f15977543cde694a9e4f481c84957776daa8e12b8008e84b78af7b4aa350f8fad56cd3b4ab3d7a55155d992cc9a79843ebae65053848537f234f030b7619c2450d95eac580687be42f7db07895acea16408c6c4ae520c747af596a8d5bc00e4ea64f6b43422c29d2446a66cff61dfd6f0d5cafd5cad2875ab310aac789400399dac73dda0832dbc71176e725b0e76d6df08e1267d3a2d510478e930ca0dd46875d9c95e388c959b7c40bfe7cf58c953b2317908a75cc935431df2aa72aae6296a3b33e033eb0e29b2d7f223092aab422239c03ab4acb633e245bb7dace91039c4f9ff8b50d55627a7eab43d8084eeecf1df83d2f6c0eef25175ebbfe3b53d657a574b26a922c74fc42658f3e9dfdf38784830ee147e62cc757841b3b820455471a0cac659dfce91482a4b148ee94b883da91b8fd621cb7e05e1a05d6c4448c0662c9199d39e4e7d4f8d398ac6b3df5b1a4ba172969374927d8128af64b116b3e84b2002dfb5c3c3e896eb6a8fd2c10794b8114df8d592bf3cf8b323ffc50a03a5aab73d5fc0a5f2a6190ee06acdb38f3eeb1ec241a0be3760f01294a8370bdab933406b5c7a651951b7f0383d28231e37d50681dadf49fad004cb70d78b0ca0ef71c0550e6705e08ea2741a692abd33255aa9290384275362f2f479c8e230d1b9b94c3f78475a23c7229cb8f7dd2f44c1e00d02e0d4d66d8d508e09a00e9e5d356559bb56d37da04eeafc2289c1abdd590640a33a6c4a502d4d12d8a1701012577b9203e1fbc96d05d1f6aae39ae711ecf8b02d527791ca4440d534e80b0cea2a3943a10a99cb378fd8f7d386681314df86f37e21ce39d9f60497527e78cdd0e5384bfa81d656c221d19356159cb1c4d097470d55cefce39b799f9013a862a579aba4acd1f0a519ae7e2d1a9ea3c260dfb17d1b026cefa4d9918ddf513389a60779039f748abced60c6df1913cfc9e1a004788b53f0ecf530c07d7b936f8364c9b5c29ba13e068082d6ee4427c2bb4ace7c3f6aa8a1117387e91b58c60cbb3c14b8a75aa8bc3e82a7d2a76c12b08896a24e21f5c395ace13d8b7b11f7906ac0a210109cfb57b470288c86466c047ea208f1577e2c410e8f305be48266ed5cf4f2e6ddba2646db786a92a9eb9c6e20bb539724f2b756c0d23a187b8bca2c3301abaf7bbf65900c9239362123cbd85c7a414460f632474f93e6f87264d65d4a021fa5ff4720b012139b7d376306740b077a70e4ab1928fa30f1303d9cff38d7fa904534eaea985c6f274afc095ba06a4e782ae51f10bc0ebad692f6c2ba29f739c9e13a40cdf5c18e555cdf665d769f58d55c5c1df7268c14c9330a5996e70918ddc302f5415f9c88225a4f662702d955af93e842dcc46b0ee615aaa6f8c2089818948e6f5fa742c1bc0204f3493e0869bfc537da788b9b199f96d84c336113b5ea52cb9dc8416462f4121952c2c688e8e17e8d779dbc7ae8861a3b369b1c00c1cef26374919d604078d928182527cc8d763c91388cf45708c49ca95c57c5decd98dc91fb3031a86fdbb05fcb1a365d8dedb032745b207b0b711529f5aeb56d80f57320e21ecdcac03c7cb7329f5a4d74a965c019b493d4a934ae5f1684a2820058b35d4c4c04d21b0947373c2d1c72feb4086b82729962cb417631760c1970d335e81fae67cdc24c1eefedff59b7cb7c97462ee945dcb27632b3c685dde5f9a7128a28b9419c0de57751bab55d12589da6685823ff7a642f0052e49057fb52d64a48bec7645d4d5ca2dedb38c129a3f4f6d6246249635a06f905b43140f7399a50b7b9cef31da269379d6c69a180d8fa6133c53179c85449d46c600e6da4a8f5495bc3aef6fd44c557a700953fc1e70c9dab0d052fc52ba64ade9939046e1d1d5202ec61688e1d414087a7383dec910fa4cf4563dfbbc9668c344fe9a0f288109760e31e618f15b4c038a286c3fbfa75f2fd643961826118b55896d94e4e90c83285c83290d7136feeadca687ab6c24d0eebd5287fa0decd4354ebc097331aa1c6594f4798149aba88f27ad4ebee1a6d9cb3d3d345c9804582e1fffecaeb0c12c6ff946ccd36a700082e2eeb169452601b4d68773b388f7c34a702b975ab3a103b36a9df849b48670096e0fc864e6bd10c0a0e189a06fe6320ada544e0f2330d2c82942fe41bdd81d284ab7a402ded862caf2e551ecf1b9b375bac8a55d215296713d978209e8711dff199f7bff3aa766e1f490a984ff1f0fb13659ae8368067a1bc7f62af9cf25211b721cd5035397d5579b66f78bf52d473f081397d824b9032449acf389d64191f3de665755810002eb916d83155cb3916a4432e30d4f0f1b26586ebbb693198c64205b6088db89dc27acc9d4c24ae590281947d8c9e385a15e4a04541a874fe582036a5fd2b9816b267efe8e62d1d4845b0b63c49159135a0f269e48ff3b8eec2aff0f533c771d820cc80bda00e8c4ab6f064bcb9113bd7b74873c6d7bedf9c7a0e29324bc051acf1830334be3b1ec657248df6c4d804b98b73f1e332a41c830b76b8ef5b6ddfd084514ab7d4be456981a86510c5a49176f0222de1fe5aa0116db7531fd39efb19e1717d7161b7b8a0f4265467c932c74018e00298f784de6c7984ad1afdb741b99f345280414461ac0208349b160bad2337737922054b892de42332cbdf4b9022b736911d913ae69c8a3ed3c212840dad4ea45f4644c7a26aab056862a056a1d0539f78d120b010df479496e25f162f42c94161699e994f826d3d8ee1e6cb33ac960ae5668f982311e9723b4846b540bc06de50c46409df1e1d5c09112f120eb95cf6bd8abbfcd01828706b1ef1e6d009711ede0baea74899a8507bc9a8de149d256a4d1ec10e3579f8089415a3717a9486f7dba653690008b8aed8880215345620bdddc4bd8f1ea2e2a2e366706bb8196e2376cfcc2da1297e4cedf63e522192e792d75e452eff24a4e2196a0a2a65fead408a51da393375af1e73bdf11f153e1ed6012dcf3bed8d375c3768c11ededc1f4b59a951d5df5d30ee90dafe414b7b11efe8c15e27e8d3cb8cd1ffaf2253575fab1dbaadee745d6c79b7c4a35bf7abf8358569267449f8512b05b57a735c2948375f3f166649918251b8cb2e05febae2ae43c0fda2d2710dd67aecc4f45164fc85fb67d921a84a6a1f0645ccbbfcfbd02026fe46cd6b64e6eaaa292a94506e185288ce79a0074d9d8ba832a4dc489571a915b532629c851f1f2fc837c0baffc9f1f27001e80a8e37705a6fe3801155609e560a16f05eae7b0fd9b19b7542b2262ece38922c2c95d833289893a2b7f586d7291ae6ccc84daf8b14048c460a269bfeca3654bbff5ec37cd831267e6f0d738546de8da1af1851661a409a42607a773273bce0bfc39164777c9ce07d96840e253b72310bcda85feeecd36d6c2996e19dc07a33bd294063766f0b76cc56205c6594ec980da267659879af23fad1d49737f2d3933043eaba99b3a40fe65893f53de2464ac43e9899806fd80a819c5411a19684a0df87ddef4a8184309bbb57ae4e049cf8a92e7d61daab20192ddfe129d3b2b6d61427f8e46a33334fe82698ae893cad6db73ef6e065ed518f20efcc452b55e5e8197db05c6fb0d0227820f6b19613420a7eb8adce5be385e14c4e902150df526c6c24b90fa20e43a98fa42e886a9a098bd61cd185d457fa61b0963f81e7766b80a3ce3d88bdee5d2408d6a799f296fd6c617b9d2ec9cc5155132888c9bad46f3064fd58a2a769bf3bc8e0a325bf5df3e57efaa403bf69745973f1285459ab2e5be7b13715da5bd79a134e9d12a4a2fb76bc6f6cfbc185c269880a3ca9af206cf2a21c9c9408c712b257b024c67da06dcf82cf2d092f378cf2e173097851179ad2dde1da60fc5d71c023fa136543d427ed4a6c16a500f50a2b3ce38d7321d4adff108810534a9c37c6670675b55a53ee9d11b9d77ec6b4dfa17ff614bd418227a6d9b896746d2e0aa99dd30d8c648172ac943e09087a141e971615840e885d8bd68cf00b31e988f7f89b986ee10d331963fbc8c507b787f834920d458003d7645cf5826ccd36501408c15d689c28bd9ebd576bb9d26150e033e522e8c72aa490df67a9134251462ffd7738cbd91db5eb1c095400d742fd780a8945302f663f9dd62d99b1dc891d8382c59516bfb5c00a36e5db51ee5391b264571f0c3128c60e6a38de8ba233f465d558ce9fa8fca37bbd070cbdebc89ea9ee97f9bc29a338ccfd35bf28ea9701f62b99ecdb198d86600a5a84d68eccbd0ab262c5702c89322c3a712f62659d458ce583fc999ee26f6dc76c02c3522abf95ba571c36c6ef24f084441fcb23e9ed14fb9c73bbd2ca7fcc8b6700e9719395cb720820b989363bbb1d1459c8e706b180bbab5dba6f3446b75142d25babf50c035d595fcaf0c768c3deb8c39e8dbb338037298b3f4ffd03436becbf993f456cc16b2f7960166c991aed3a67f37d20797b285cfba0230953ad34f272704946f671c81c35be88aa97d7bdabd6247103deae9a43c4a926f12a28b356582406309855f0c9cb5e17b9fbbea854472f91faa2630fae70a862a8531df93ed417f9c6372b4f2e4f4017a5a2e1f65b133902528ff81b1057c99f9e17994ff00e24776628227e2f45dc959d5013e0da11e61974a4a8099952333ad0d146a99f090d10d840c8e7cf24c3a5d0d4411a6fd050717e2a9fdd4965b202f2eb346075cf66ff65bff5c9f5f157275a29e69f1392966a2e9878cd16a3632175f021f810a5ca3868408d31ad982b4ee7449d10875a663fc13f7d61b04647b5a943756b8d806973652aeb2569e02cd196a3a25b2c62daa5517ca0ccf56000f2159ff9e294fecd7aa11b25795a014b9391fe2650768043c25b818153f53e90d648557c79f4584b7def639efb87bc7e554231a82081ca490d0f08fe8bef317cc7484314f1ee5df1f3a7dbd2b2f2a267ca6ca62305e51d83ce15eccebdfb028ca5ccf16f1ba8a4256b708f977bddd7d3856615d3ab1e45fc389fd4d202e715f76a4f046c97d4b6ff83297575edb4fe40ce3c4964c67bbc4fdf48cc413efd65f16964139c0e0e5f17118fd69acbcac28fceb5bd545f1ed82cb025ea9f049105c44fa416f6f9e3d4ec240d80289d1cc74542bad37afd7c84b33be5e29993cea0cbbb7123b8d5390b6ab83d0e49b967e3f4eca99052d4298341ce821515e821dd5889633668c7b3d9f4389301d6871f6b6220ad1a580799d58a09ada35c21377bdf7b79cccc72a50564b3e41fc455178c7255c617949655e8f366ab263db58886a58aa9ee279b6c5452da53893c6e6d33b2fcf4cc1c64cef9718bfced43a7034d977e66db8d51b5064612667078173ca4b33f9017578b9c4179dde2a8c7cc3c530119c4c701490d1ac4104a7c5767bd106f52ed98f6e70b7ca781a5b1009c2cdb5979b47b25542e884db7d402dce7737bd80cbd0be302b5ab3858432845693e3d0ffcc864adbc28ea54451bd616d4cc216409c25c65f0e82918da1a4eabe0815279ff319c883fa8483d87c7163e0a33738fd88f0c5d4d9920408fb96dd7b32c35c5a49c7e2e58da5a27346512e946e0191fe43e5f64df92d1d5268b5f20d4568b80679dbd7d15df8b50f1b4c231d25178e04d8e30b6166f8a65c122026d6956890f95d79e5729ba5054c7b0a851c8696cff52caf7534f15b50b3489ea487e8b28418e24764d625633c77247cdf935b60f2bd456d47b1da114e02a8428e5b908650890e7bdf4fb8b383ac0e9f3d7a9d68d0e718f8d62edfea29ed0f18f8d6da46677c8fa8c14e97b16f1c4f2bdbf997a69e22afbba537893dc6172f93f75c85e2ae9a77d71105901f3405db2a9134fb1594a939e9b093e0e8e2bfcb09823f74bc3e6c779fabb5aa942142ffe1a9dada406aae20ef3f144276cfe342803015302b5a6e0347fcdcfa299e0b60960fb273dba3cb08275e2bcbfea17b6c73d9d0964a2fc24a5ffca0537d69d88420715a53dc4022f6a5a112066a42f9de326dec219ae9886fd7173e6c66424c698d9803ed3e9519e401b7252a930484ff3e095d83ff85d04c9925d180856dd38500c302348762665add2372aa985a5f3e1ac285beab239cc4cbcd397973e0e5ab67f0351b269b86ea3d07012442056e54f1048b17c8c59f4b7e9dcda9dd336b5685846592c7181a01f1f7668da31ff9f01d92e45e7b361c50df5099fdff0e7bd0c272f7e972015b4c827bc57a3f0666d93191c6b0634fd82d2f4c9575c81158c0e5de05601e9c906ed62712266dc987379eb4379f13623794cb965984dcaee86204a4cfd692de9fe3093123e8a329da597193bdc566c6d04ce6ea48008c11f1bdd0cacdc0bcce14a028393584d9d9402a216d5d01b03572e2b1d43c356442ec6d63e2350bce8146d9adc7f287336a5388bd61dc5c56d3d149d4d6b604d94e6eabe1084ba48712dd9ba074e740519d6a22520c8c56462089ab3b9b21d7bf9f2494cf03899adc5a050d77ee033342b8dff8058d400f6808ff89e84a152c3a616d07d3f60b2fdca73cf617ec0353e786b4ce636a5b2b4cba9d66a39f12fd6dafddc525e660fa1f097a4470c2f2b50a72d5fb9ea02cd0232dec4ce6d784d04cb0da6e7636cc135ed40b11aa0b521792df0476402c26bc4be09a044d50418705a38e9524a738455f31340bce6d4dd4e9573f6a9484d020eb2a46c6e51cb4f57c8750c33defc3825077efb36dcb4d2730ecce99303fb78d85572d81a594e226052f75adffe8a892f43707e971ad27653253c2e0f52454738c9177cb49ebd427b4c4b8d851c317296e57afa6b1133953b00fce08388b4806eaac4cbbc9b44085be52580d55c9057a2d3236473fd7f3f901bc28a8dae31b400e8f51be8ad3c0bb1eb08890cd0049831eafb9d94a143054f510bcc42691e90ec4e20d94010c6b61325d3bdf5f2b6048c1067caaf6e0256f4ffac19de4c4323b050c57bdee0c3179d1dd4ddefc7e6789b7c8fd3c9c722039ad42db1aa88a1175c1420224a02184f7005ac6fdd618a4866e39506ce21ac74af82939db12efae0070e150dba97930564ab0d3c14308f41e83291c4edad1c172d8d51d97bc35175d72caa712a9603aa45824dc0395d9f34dc94e08cba175b6ac82ad960064c800aa30c4694937fff765133a5a98314f6859389e2b0e1c701865998874188439c0c82ed0a65bee3f7ff42a7817c71328af8b9acff4080e3c4e09ad07d594a1556ef49fa9461cca6a691849382d7f50a7f4a13a51b132cd617b19cbf5d31c54d2ab0a65c66e5b94ffa0feff8a2f72c93a5b0280b592b6f5d7353a99985fcdc91198f7c46df993b1126dc8955bed4d59f5ad39ee8153f0e0f13d5796641b43c0385cdec5fb7013cee0102e30fe2265e701da4264b296b4ac9d0d25b1e924bf56ec1ddd3deaea730f1daed6fce39bf58ef643b5659504a39769191cc75278f5c57bec1e49ed0bf1070e8305210cd27bd03cefd9231aa6ff61d6a807123983716530e60d5a50b8aadedff5fdfcbbe82c84fa9a30963e9c7a0b5fe973ecb0d6f4813a484d511bcc3d93f611b606b7da407e452770999269015641a8d6593cd074bc760fc73281f5beaee18e3b78282906523e13c49374260179e870887469a54e67ffd60f08c12e35dd1d755ce6932dd50254acbf0e250c103f4cfb2b2d93cd5e47d52394897917f6512aabfdc1a409fce53e1953ef31068cce09c504329be5afc6b747aed82bb6e302edc0e214d5051380cadcc408d3da235861e1d207976bd8474c35ce4162843df3eccd8da487cf03e8ec6b10635a0ebe4d37809890780b86d556ccae3dbfc3bc7216599afce45c9a7656ef5b94bbb02a9ca3dd381b3f11965df177b7d53c43654642448d0986b1ae68f786b2026bca3ffca4c477d366d81800934f0d25b154046e275614219e980a640d74233f1c45238eabd5c24c8bc7c9b5fc81349067ee5ca73f9bd67963d42c6af2ac9a92d5ca73661eeb631424110d963b8f30ab76395262a02936deed184299815099f4f42cfb01b92aa8908144fb50e8be8dc0676a253808eec4ff4ec69bdc8b5ad30c9d6bd32cb842511764c46fff68e584daa84c6ac11155d9907232831e60bd81b55acdafc3fadf7f0193f289eed06d160fe6538bcc8dc727e7a8698436a0c65087cf9f8ce414d2ac17d237e450dce1d365e7883c01aa6ad40f894064a906f91ecc51463ff08323fbef322cb889e2540d0eb17d859ae2a28e1dfb0a2b68cfcf1d26af3ddea136eb9998bf22cb9c106c967d6021455868c9efaa514c29a21738d7e78c7098e242e9dc0896b0df3b790e316972aec83ca5549b12285dd5828c6e5934509c2a840c33fc818fff5623a3dc7acb56c78665b6ab75eef3aec520067adeaeafccb8ff27e42fedf2da17421666d7fc1515c4615cfa40e433847a3f47aa3d49a1def93cc834ca38a820a4983bd960c5dca8649a052330959766ab3927849904b905d36534395b2f045b897c8917dbb7fc48022f685e3f8383e8c795b09612487ef52f0ce05c82021c6b8480cc1d941131bcf702a0473589b9c12461c110ea5e8be4effd0a8936959d88ab8cc17bae5645911c9677a76aee584865a36f3b65864a0adcfc2b0be92f68f45c20ea5a3e9e9a98c61c345f968ddee50a30b2b38ccf09d5d89ef3244daed2e328ab0016628196d51c02e09077169f3ea822e799f4420498c7e4185d4ba144e7b649e6d06d1fef37f9d2b9f78208a8fa1c38618b569bd04c4c9ecb2822586986a7306db8d0302ad532008f2d9f8694d132f833da29ec3c985f8bbf38cc83cbf7d5cf4cb70d9739b222b4585e3d222b55ce338d6cb5e7301d8bc6c60030e317850a6a96fcb8ea2f1c11bb106e5a169bd1bd243dfc5366a5a06e58af5325bf7cdfe7d12e06609b1d1672bdafd4ea9850ff987a2dd7543cf15b24e7a1655e10b80af2f534c948ef6b745c3da8389e11fa78abb6e41e705839d07f46e1699941888e55621449104d66e864d803009c762023763b5e8b8a29973ba918dff1e68f3e55d478255654bb8b2d84b47d994f054eb7f6fbf4f2933000f6a9f697d9b1874eef7c2cf78fed6f55891eb56dd47dc28c15abb9023344fdd7784dd587c537854d91fa63ba056598a1baa6dc58235b8d016f1819cc422cec4bf08f238a9e3cc28eb8d0dfc0df443b9c2c245fc6c4fd0586d63ae1fdfdfb1326fe66e56f395b5f6f5a08af294d3a000dd45fa4e3aa0f1e79305e451cf9a69bfcda9b730c957e383c8bad1c299d12a01b8bf8b6d8457e59075071e2d28001e33ff9c5ebc31a2bfcfe26d3616e2b0341fc418dbcffc54e3ad0da59cb161510e4e8b55e8b94690fe17da8999dfb1cc0a2abde2fc102cf3aa76bc919a6b9046b1b2ef340518959b5428532e74a0a895b9cc7f285ffe9f0092c6251d4f514ac09d35e20c0fa0050833102cce48b0e542a78e2ad420e05e20d752e83fb6b09d1962134abf779ab0853c939499ba449e9a1b8e03cab6c611bf63b045e29af6278d0978bfef5c3a0f28bb9512d732bba3e3a96bd5c53e1724059931718d8b85a3a4cee08023ef9c571c4d4379e242ed23e8f12a431ed7a2b10208fb7c24e7a27c93bd149ce67ed64cbdf917d17d7c8c665e608fabf1925b6087b99af47a6288d3ae077fa7de3526cafe13cf6d8fbc063cd926aefba6051ddc77b6f30dd236d6ebef8dab5348d24e89dbd0907b7b2da2fbf988ae2840ea59634675ffd658e39f79c37b11bdc957699301a9f57211ab466ff954da6840eaa96ecb6c738d88eaea917d7b41d5ed5cbacbedf2612e4857bddb458938669ba1db2d02ddb87b710af21b7faa95122dd32717060b71ba7775e67b225d857599aa0b240774c90363b87f71d5b601ca3ae7fdbace6b8176292ea645412f5ab3538bded93a7640ab41d6515c97b93a4018ca186c2f42a70b8b8606d7b19e22d90049bb58840fc98069b96f55ea4cf73681f68ce929901440d3cb9ceda66713181b8bbe7cba7bcc235fd871604f7fb3e710049f9210aeb8a502a6e914b812d756e0aea1f534e844118270b7105e41ccc47308b2e2adbb50a4925aa44d5985789ae33aecda86b06cb9c2b3e66a42a61136523f5a4d32e54cc4683931209fac64f049b6c36d21a4437e91b7815eae4399448953f95630e5a349a6610a106da5364a2387dc31125dcfd40734cddf6434efbcadc731b2504ec2c4f8c721ba4c900b856955f9aecddf7f22d3e2c4d81ec733abfb4993cf4c66670eb14502a14784e47cb25c0f27d02e8923ca11a69baed61bf24f986322acc21ad8ec3becbc6664adf099256f1a267067a0fe2c27d0736ba56531d87c100c275b54d82838aac5625ef103a0e30bcf7a60429f8c643b760276a084a67d7c1681700ceeaab94a7bb6b31e179604ea136c01a25465102336e47eaa4310ed94b6a24abd7717e1777c29e59ae3c41b9f8bf8463ea633068c7a6b9ab1aebf1cd3fc23de7c2ec637f934cd3030ea55699675feea18f3df78f37351becba7e9a681514f5d33d6f1b763997fc69bbf8bf85e3ea63107887aab9ab1bebf1cab3ac5b277ef227a93afd20d03a7e6d525a88adee5a352e752274dc1fa77ff18dae140c2373acd734d239f9b390686ba05769d76347087fb1baf403ca71dfdbae63541762c3087eb3fa700bd7bbeeac2513089a3dbcb23d713ebea6f5e2d118b1bc57f2dfbaa3472ed11eb0a515bf3f20634fa32a4ed88413b35edbde5297d2a42e3975674a68fc53d14de5eb3e9a48f9e767a706c8b1e03813de65e99699029c52db207a9cc4edfff1d2dafe15cb29ec5ca7ae30e684bb8142d0f88a3292b3f71e9b189d332838cde5176690063e9b7c9f1ee835327b10fbbb242d590a6341994d7bc20a9d72466a289c5b8b999754f45d3f305ebed4de681bae79a70c5cbc40e0f9589e908e5e7d931b7ec46fd2027b3e84bf81782bce676cfbd680413e78fc7d66189143f7f0207d0c7adaad414d34faa69fcd77f38e240ac97e2978aa27c5c99507af977a99f4b9bedaeebc9d8cf5f5c2f82dd1e4754cc62edfedb77bfc3d3becf1d262766365990444775cae97e24a9936d0eca9019f5c1e76d099c08d0aaddc42c9d058eecfcadd5bfad1cff7e5ccd6ad6b8dfb314d488dfb3f462f203be9a68e54a49f4875ff27911859c174ad3c6d499a5b446d899a5a346eccc97fa2511f7e585d2a9f17446a9b3f13ba3346f4c9d09a5e0a4e656ecc2cdd9f834c34d6fcc9ba9d46fbccd6c696712e43e76e9463179a999fa0461879bf1237ff2b39917c327c933dc77f9616572cf970992e2649f7c5670219f7c9b8043ba3e3ca5b76a9e3cdff3444870d8f33d2b88c911be4c5052d42ff829845163c584fce437417c00492dbfadce248dee005f71c0bea14936c5a0faec64f093f8b8727c568d28c70be6b3159644cf9de65376028ac9218e3af9eade183e64f329178ae394b3deedc71f2b32c22204b84af727f8c18a85868d3ada01a1cfad02940202e8d6e30ce1403f94920c1cb25859abb3bb25ffd585f2bf7a74fad94dc04bdcc641f61cab2ad7934d6c67ad2484666961487e47aaff571d2b5177c1afa609101d6084e623162166b0355240cb839122dc537f3fff9fa34076192829edae51cc9e7b888cb4c39210f2d379d0e3138db0b3811b11c6f1b77a1652683d2d6a0fe30e845309cf470ade83346ab09d1b791e976eed772cc5b59edace8f8bea0253dcd997f79cf3e3e7d551ab6c51ee6cdd1416cacd3a93e1a9686442217531a0dc96401f1e052f939432d242760ea313ef3c2b671c86f7501a3171c76a9e3f9b77fe6264c0e5056da725a0c584a92fd8c7839cf381f340afd5b538efcf533616fac63bd5f734a099d2484619306ad78d5f2c8e975d34ba0be89a43c21eec244bb33b30f51beb322fe1c9e5030da94d353fb8a9df05ba80095bc791cfd43ad5bdfa573ff8661360e3dc5a0abc1099c9e1c5be80e64d00c3053665c5ba2069d8784c235afb9866eaa22d434ee4151a6f9f68eeb20b8540eef5bb20f3907566b456512ba0b58a5606855b9413e33c51c58d4d4de31a370325e6a3a0f8c69fc01c655ffed248b7ca76ef75fd7f65ca690dd65b1f959e510ec4a6d4abb3321e4f305737873201cadece072d8302d53ebd4e243d5662fb974986cdc83e0373cfca95e3e33711bfd02966240c182f24d39fabde1af146083065e128ee9c640cee5c3bc64321ba4f9e7c2647d99711e98fb59d4fabb31bb1073708513f20c4ca439b4834f6baab2ef86283004bda7463a11ef10dfb0fdc0a49951fd30843a7efad7915029029faa304f9488cf54695752cbcae77fd58514dd6ed7aff8979af3c8003d2e48c46a29364e283c2e8bcb2389d58b3fcf137d6c7d2f53367ed18b2c194ba71245c457a452115a37833790957222bf4738f820bd1ce2eab99c92da3750aefe39e0e464838b9472e50aae1f5114883a08f445588ee3b4fbafff7aa6e34b2397053837b50773ea77c6c769149f2d0aa53d20e2ca93a2b38468919f2cb4d75cb28e86b5fc403a5293ab0865943c0180163c96886bed1eaf4608ecfc2bffee26bd09b6e81f02807ad80416423a2ad0a50f92c51652e7bba305f10ef6bb182d8086eef59d191e8c64cc42e0fec8e4dad50baeda73d1c54a74f30b93b44d0a69438eb41173e674b7e9831c810e5ad38e0ab4a7a614bc48d7588170f0ba1992541b3f7481ca32937e0008fc3244d9663da9fdb8cf57c526d1cd176d61dc6049216d9aa35cb77f712d21261f110d684bbbfc41b337d1cdffed53f168293e32efd641b366a5d463ddf7ece311d554d1c2998941eceeef25ad6f41c3f77098e121dd90e2bd63b8ffbe2b41c52c592766a11420980193a580a48b7e48713989b6e5c6284337969cc0c6dd4bd0fb70cf2b1d266823e724f24a4cf38a2d8b3f10370df47c86a4f78faf50da99598091933300926164e713d57d94922741388da07a96c68c725dd1e781fca36ca214d1d55102d0530639d595e88371250c8368505ab0677027daba6d09d65cbaea7c5148b448604fbf1e2f6ed6f76b31c728a9547363e2c3bb691422dfc3863ade5e80c1b89c38acd4d2cd970a70ee2762766d1079229126d8aa118c6294428861e908f9811f979e7739759e2a677952f6361e35b21b2c269591e9073d22232a5489fbe498537bdcf44c1161c69f152542e8da3231a60413eb0193b09344610cdd3d933d83e731eed90653981fb00a9a092ae5b7da2bad52cd5b98f8258114d76282462ec9cf426247169aa4e8f11c25a85cec1db05e3f88d7689aeff4801bcad9073befdbfac644a0869bf53082cfe4499058609bb3b0ceaeab8f10ae48137967960fe728f5b1e185b110a2f58edb31629b980488a89be5bc8d078bc76ecdc126fd3f7a797c88fc714b6df028de75eabb3d1e161f67b0e2a261c8b83dd595e11b9ec50eadaaad94962ee3855e5f4a122d658a3f9c577a674cbe5a9e9f7ec4ed904ae2f5592713ea09ae335f4b4b2bab1b8b06c43b0614f1dc329e8bbd257ac5e687c5d7e8ad981e707c03d4c2770324459a28208cd0de0137c2e3f722e925f306a3c1229008c4dc81d7f2aa8a2c3dd3945884750428f7b9ef68c7c5636c183df4a8207f05f004be21dc29d6b024d140105b1733e4d80d79586230f424322a0f35d21a06b013359f4596d1e0a8c79672704c8d4ab1120700fe9f49465666bba28669a3d03045225a21546f652c450c68b14ab92d4ad0fdc57139e5d31c6e102bb9ddfb7e56cd0f68d7a1e3a1204819737b6977285a89163ceb6db3c0372785f4bc238ea1a9eacf061923fce1fc8145769a4887e779a8cf4f309eb1463ee7b4fd7e435daf74b7e115bc6def83d0a46c983f8567c30add715ed72800b298fe0f9fda0594a5ddee78fb6d5a07fc064ced22a7455d0280a3449c2a101aa358d05ee841688f74303fa440c51f6187a422bbcbac04735152514e64b5e4eef3987495e14504c0d19a411114cf9b67bb8d94698f40a6c8040029e70d367f4242476524c3ecb0480c8e41ac0888eabb31838c01b0e0de03e8ad287f6f2dba421c055390db31182134ed5b60c2d4bca88be9b36a9b905a665de3578e1d5d1c73260189f4d2f334c8e075e73ed2ffbb72f30264deb6b0193db68782f256b79b91d40aa3b38f3568d9224d245e01a3c86086ee493aa3c8b759561d9e60aa523910032409af4c6e58697013a84d955b0c5c5ae6853ae3bc19eb560c1b23ba1654334ebf6331a2bef686968ef89355cc60d2e6c43cbacb9f71751708f622521dcc02bbf34da9e11e94ecfddcc5f3d4a5500a55e36805fe78a2b6694517894ea56dbcd8ef74394f858c23581d94e93c1de0d85446dcbdeec92d7a2af0ea7a1d7d5a7ac46eb0fc7a9163814c4eccee704a1878656e9d83d8918ca377fd4e387b47cdccb5752f2b2ce7895a5c52dc78f75b95d0d62e12a2d5aec9d21be5ab28b5e54eb66cee7c1ae4af21a5d87ca303e1d76a488c4272fea94c2974985c35daeda4100bb3b09aec0e879912127868aa5219083585c18a77189d080d25d457b3bee4c6309577cf8cc8478ba47b641ce460ca0882e25b20553532b51a365b9e9c29f249b0db174c0a207dd0b139473824504c5915514d6267329763c99b6c3f57d48a8f06b0b8bf12c3609c8fdea84340ca1fbfd0a1ae4b4e4bdf69d5c57b63c6dfc824f5464f8444de4bbcf5094f1d3e31ce3d1fa870eff3af4e4b35174e24f9894221b094e68dc0c62a6b6e0f86b9dc65879c2b22015a75d0aa4bd7060def39186f7189a83b949c9e002c9954ec50bcec19c425ee73236404ccced182068a01501798473d65ae7ec662239445efce831dda9aa0fea04a3fe96765af1c9838496a1aac241c8b34e3a6774c92fde0be3178e72d1cff4bd9492a0167b125793c556de580bf72422850f5bcdf1b5d5c56a0359477742775fd3470e52352cc737595d0b67d148d0dd1dd005959820a13300b4e693a6196c0797330584362b294f491a24797e5004664b931f321a070ac355995f408aa1facddc0f3b6d0130c8fb1badd485de8f7e07e80f7743fa363ce5ecdc7d0e40bfaa6020065a8859a1beb3b8369e6686e3cac6b93953e601532315061eff303cb3ec186cf2536b972bffb4da447f100852b1b1fd67dc5bcddce8870d1426b7aea2fd9f403aedb591d53c0bb71ce7d134ff31884bb6cc3d66675284b5044ccd57f2c2cb1e74f3900e044fcc1f9f19e7dc27455fb640806ef0bb44d123938840a7726d5fe48a1404dec18a49c47a98903e01f76a029da51a3f12bc108bdea9adb85882d8a7a6e1e1363df975eef1cac049fbedd8f3580d38ef76d3abaf4b473057717449440cbe6d86a7e1b9eb43e964f0fd6286132dc4cb700fd36606ae7186daaee0a3463e29fa0e426ec1f07c1b7e547536b9f4875d5d42608653de538ce9d071050cfa5670360f87fd77820ac5f130e138756d08d081c708031fdd4c1df36c4fa6821fed5f6c56ac0bc8e3480774038a99e0bd41561524972323acf03ed2cdd260586f96514aa0c92be79a59e37d2c8e0639fc22ea00fc95cc852ba282f8ff3cbcfe7dba07084b5f9f6531163f6af22ba9e6f16aa35bf6974e2048db9915d50e83ad62741497800d0ef1f99b95955e064571fe0b5916eeb8673094c7b5116d30ca7b0fae19dbc6db0b4235a653fef3182e24546c0f5b74105cec6a4432b2a171c6c51449972132cdd51cc9e0448ed95a4e72fe38c02869d6c8240e0a7b463931ed757f550dc86293287d0a46522409f38b9bb9bf0a4f5d9a5019d8e7cbd7891bb45d158c563b61d947e4eb9d1d3ba1bc11076952ef03448e194c41a0847644c9d918c2c6381b5b20d03e653f44c8670620f03894fdcf042bcc53e2514d086074eb1160122042479294b6796f55835e048a683993f5b3cb3c6c8da93d389211c34e86ca1d30c3d9060ad3c9cac61046e9f2aba17296bc12fe683a805e2e4458ab31b8861c8739c33574bcae1f93d52f56488219be7043d2aea0c5c9ee4687c01cf849bc0da04af3938766140c72fd66d478ec940534928e64ef9cde616c9c522c1083e2c1b1fd71fba6b843acefe8359e22ba5916bf9a3e93d9da8c7f660011d7644980846dab14bf67376029a5b8ee562fd5c760e776cde406508781af55dcbba1f348731123c280b415097e3955b4a37ab8bee58e556872ba053d542d8c9aa9c627b35e014c7504fead44b40e5c3096594d3a29c6d89b7829a165076cf982ffe09fdf6d8ed0358f44b7317ee10e7d6c138a0b2efcf7ffc1b33130220e0f47f7dbe338ddc348e532c08c94579fbe7a490d1220a2ecb5672f8fb75576fb64cdc89a256a8d6c42f6967b07a30d260f7a0ef7bcd3aee9bc9bbc9beeed80bd9b6c60efaa777665330ebc2a3d9a0cd071dcf77937835fad2ceaad29e356be6fb5baaa2bd4fa4d77b7754dd7eedd6cbaa5dfcc943d1d654b377b2dacd9ecc5eb5abd7e3beb27d35796eb1ad3fdcdf41ab36cce76eea0d569e1d3e39409f1d991edb5be9bb39be22ee29bf7de457c8d808ab9ecdd1e89b9fce134e6726823bed457702cb7040a41b0ccc1746fc5c32bc5ef5badbaaefb9e5aad5611af6cd6b82fab8e7ab43bf206d3658ee9f228abc3904f75e53fdba5d54d1cc799ee5add03f0c01cf715d7795de9b3a99bb569aa319740a1077ecbe8ac2e7902155cffca81bb7c67e2e1cd60bdeb1aaf0edeb39926dbc0a6ef39c4def77cece9f8c1aba39e5b1c973f8fe5ab7c3ae9a0ddf9c912af525f39cbee48ac52d9151b53b6853dd5bd9b5bd88bc12b8ecb1f3699b8d57581a683a6afbaef661cf87bab528ff752b6f4cfa26e3e5d9d16b6919a6a4cd373b87b375deedeb97bb1c359bbd26d0d7cdb65a65e03f9b64b3cdb624993ead515bae804d3e0bed1d8689fa70faf4bbb34e2e9a78c325e577dbcd65957bd8b8bf3ba388eebcd55ebbdef795df439f3bd7db3d9b53d16611a1cafd9ecda2e8d9ceddaebddae5dbb4d68300d8e457d79942455c2086ff2f4cea6ea334fe3d433c5db73aa4b598fe59e65792a87c42e3a0cf972bca73a96adf72cf896d7fbbda6eea9ee9d65730bb3582cd5e7855ebd7716f8ae3dcf828f26ef370d661cd87b9b6e60bd7eaf4ff5c4ac9e39ecad9e3fecadaeebbb07e08155d7f53d47f5d5bf9ab219074ebdda8c03d7d6a32987d5554f815787219f7757eaacd7eb5d57eae2acaefaea2a8f47e29577d253a9ceba34ede81800e691abd559ac950ee7a8f7be72b3eaae6e8fc41ecb33c531b1e426026fbf992d36a71edfb23945129240d08fe4f4c81fd77d5cee91ee4772f71e894fef586f233eed1147d675e11cab7eac7aea3c12bb7054e7ae3a9743621e89572c37f3c02c4f5996cd386a54cf204e812cd65329f0e60fa7fe7dc5c60ebf9b3fccbacab21e5be6f2ef660eb3aeba8b8d1d53ddcce1d46f26cb661c2c07df81392cb747e2d523ce3a2dbc7aea5d7babd54d6f130ef7d5bb9555bdebda74001ecd62255ed9c6ab9b255e5df5150b9e65bfb3d8dcc22c9f2bcf61fdfb0aebdf592c5f3978597e3357b6318bcddf4ba7a61b1aabbe325d1a11bb589eb33aeb2cabb3be4a9d75538f1da6be726387e0cd2d9cfa4dafacea2a55feae4e0b778fb74677296fa657338c8c03bb70727a2496e77aeae579eaed9138c7013924963f9677592097fb10e01e916d04b637d4c50ef58016ce89aebbb6f96dbefb351df2ba48cf999727dd559fd35dbedeeef25de9d66f57723736115f1cd2894fa8cd3ab28894974f743422d631ef8acfa1a4d79b68b8b8e7d0cf73776dcfd13ebf5dedf35ac75b6fbcf192de3611df7cd6ae8e2c92e9d5894ff0bc3d135f42e9d170cea424d24d974a9207cb1f70a6c1b4c3522d91ae614ebb41a3b887d7a1bcc2474fefec2631be5a97f4da2729a5f37ada90bf6ab8e1f6628c41df22ce68d467522a5343698d897366d8619c8df3ac3cc0f0bca4420786e937d9c387d0e8e59cb03813ff435fe0939f3c1453f0ebe6cd1c9e35d75a2bfd3639da758046ea716d810efc425828036302b632c5b227d54c33a8dcc2976313585e4687d2a643a9dd9be63aac37b78c0ee56f3a94524a7a439806a3afdb6c83e33f1cbd178e2d9bd62efd3a884fbe8b35c62abe4d9652d045584765952fb7b8fb03d6320fd6f28e29a3f0d1648afba6491507c74969238393c1d2e6efeb0f37a9f4be572a9deb9afad2bd96752f95ba92ecd1b1aee10211962002e63412778ab9ebd2ce03bfca3714cfd9194f7c38a6ecc6468b4f8e6c66163e7909640b828de4b0f7eccd78829bb253476989d2ae64f3310f7d808dd773088aaf7175e3ac87a52cbda3ef12a5cf2d5cb792cd1cbe3a1ed68eb71e0df70a864a244d87215f648273a422e5eba86039a57412a9442269c0024ba690b6534c9a32d424e8228cc41d616983a363a573dcf7b55a7f18e2037ddd4b5787215f3cc2f496f4aef4ee5d472ad5f89942125e6084b5ebd8e0ed9dd4e291243239d0d12aadf0e5d7f761a1cc17b7aeb53e9a6af824a9c213457460783b7e800da6d7a36922baae3f5fad0e65307d274d33c20e6957b7eda63d93b72369871ba703c3f55d29ec90fe661e0d73afdccd8db993ae59d876ee076b3b321dd2d374489b5219b5132cced07f1d7ad186a326a995204679858e0d8e317e1e0fba1b332669744c6eb0508606468c3143929df1c4c7617963430f71469e479532075db5b16bcd3a21a61c47e2b8edee54cce59f4dabf573fb4dd76f9ba6512073be6b68acf59aa66975e341921b08ba532bdf9dd4a627e9266595528b5abced437eb32d5bca96b45bca733caad488a8737b9e734e6dab9aa68530cca33e4fad9bb1c31867b62dbe707c0b469c89a791d9e47644bc16352d5e8bcfd1228df1821f9d8dc44d9c8920a554a39aa67d3c608d5e52f9e429ecd561bcc735109fbc06c33146c43019365b12ba2ced8c979737e7d0de8fd7857333c5595e8707e68179e06e5a170ed530add23846cdf2500c933607c5f25d5b170e2d6112ee23be68aa11ab54a9b8e70d372cad8e0dd5b6cad94cb19497099d171b041a0a674df3a400fb352b1367642bc11a134c2fb51099b468d860fac6c0973d1898be756c347a6ad3f468a7953652f540f92ca5bca0f7c2fd9766390e67faaf4310539c3ddc1ec5790776d1d801040464014c8fc279071010900f8a63ace9a14349b537fd7c3735aa9d5e69c527cfc33464d4af0ea7f0e557d8b7e9fa2f29e5a349deb46d759fb1265dbe85b3cbf374b07ce9f2a47736e3c05dc749797377cafdb3abab7b8e7ce9ddd501049f0b47be74794b1a0eac5d7b0bcfb79a035f06717f7e054f09764d8e40c0ed75e8f5bff6f1e5bfbb6327351b74277d4a18e52d1c3f27613cc9c68e69114bf9a1278ce0ae15a7626ece5ae7dda938ffe0da7408bd6635da69a7d3d22032867e03e90ec818fad44629df7573d24927a5ef1ab983c3f35dc7830ae9f0666a1abd3b15cf793dcb993af67d873f9247eded081dbd396a316a8f9739917648dfe799583b059f6947630f3dc42735cba3614de334edd4724d3e7aedf439daeda6f7d5612b89115e02c5136a23ee203cb44fe935ade212a7d90642b9bb53319dc1694170e669eef1a4531b4fb23d848c819eb39a6946ac8f39d4186fded1403ae4a86d201dd29bb95371addf384b676cd40011e3294fe7e5489286a08bb09b18e38738231fb9c7ef9402592b8f87750d6d914a8f5a6725b6a16b6ca099329a1b1b9bee46f5689ab132dd4c039bded96c9361d80bd2b1f9ece10c628eabb296e716e658b88b63ca5aee64f9be56abeb9ec3ee99e666765675cf46cc623387576c96b867e2bc03f34c0c1eec585d8d57922a3c81c1ebc030f84e7a2c4bf10a787556d6071c2d7cb212cb748d4c4b76d7ce7802652506bb4676f3eb5ad646c7e6a9c5a1c37939c597e3516c02ffc0a3138f70f71b3cf48043d7749fb7d135dee777e89a884df7de799ec9f468aaa14a620746e0ee37ede9d8501c4ddded81871d3a942603ec00a281c34a7344b6d2ab2d7dda7c3c3dbc75ac025f96c19b0c4dd7d06f87d135de371d9bed32ba86f4edd572967658ef9decd7b17a936d75acd6e34aef7673e2506d694514d2a725b50d5dd3bd65329b8e75d7427c393ad1e7a187ae990330651e0d0b799f35dcbbf6a5214531128d30178df0f6fec057cf71a71288b33a0cf9a25195b208263b3d7b9dcc7b6ee19bbed5ceca80d1b1bec9d381957a060d95369b3f59f79a194f7cf5a4670f6f9f76c6131f77d2b929eb2e3767cff9cce19bbd6a7928a93b08fdae6b34d6a7657db3d9267378bb79e5d9039fbfd533787a6e999e5f78cb30bc3dfc9e65f0f64ca37a8681b777b344536d684c76c6135f8e34bac6e4bdce58a3de35acafd81d6ef41067e653d6869b48b90ebf199bef681449337f38b770e6708e4559c7066bf47abd2235208ae0e3b8a4093e702491482412fd6632c92b4d390c01c1147751005f0f618a3bea712d5bbdd65a9f251378cb1209de6ea6b59a66d4a19b494d3348db9b880d08a65d43ba59e2adc68869a543b8da6873e8b034cda0b77d74487f33713a5cbfae918f43a59b79d02f69c2131ce2b8a40949963841087e81e392262c793205b7e0b884094bc0ddf4b424289139a48548bcdd0ed2611de236900eabf72d53ccd3587e7bf6b6fab9fa76f3e9f5b165e0b3e9717b8a93a5be7dd57de3991feaa08d1dfb32cfc4dd37d4cd3c1473d77418f29d2e0fc59514ad0e433ed3e599b892ded70039f214d79b43aa34f350ec9dde45870f7c3c13f34c2c916898be899001e06e8ef78ae3dd1c790d57adbb99c734e5a06179791ad76b373710bc351132866d7bd8514a6fd669e1ed75f3c18169f601d39d284f6d86e1b470c681e96f7a7b400bd39b535f4ffad735f3a619a54f930e20f8b40ba514e0e3b3d4c14fd30d32557de6b0d71dab97b0aed9ee7ca779dc94a5be0308080888f4fa9bf6ac90ea9a1502af8fcf545fd9af63da3beb75a86d57d992e53adc0eeb9a7a730b6f9f6fd30d24954dbd64e5abdd0104040404961cc9ca5818376313c473ce3967bdd907d7537bb537902642c6404f5f356d67d253a796e8e2cd1f8e1eedb069934f7e7b6f97eb0d7cfdec5d2df3502c89a49452e8b4308e0b4458a20858bead4e0b6fd7558362794abf033b835e5eca433184fb43580e45d4b32c3275cfd2098e6fa0542a954aa552291f2a954aa552a9544056abd56ab55a5d089b16d220088220085e089b19f8d6941c57bd380eeadf492e50e75a5498c662bbab9b53adae51dd2c14de1f7b5bdfcd422fee4fccc1a36e1672714faebbdce4b11ce6a5df56d7e238a77fb0e3987e3ac7c2f47a35bb3d7533eabb59a8c5fd89b9e0e96621d8fd793978d3cd422cee8febad7b2d777989e5af77301724dd9c71bc9fec714af75e5fba16b3c1a06e367d3bdd2c74efcfcbfdba062964ef8febe04b370bfdfeb4bcf58ef4ba1f17739cee1ecc7148ef5e8ec39df42de394be1d67eb1aef66a198fbe3ba5e77b310ccfd693978d2cd422ff787e5ad732ed7abafe3d493aeb98ea3bdbabc7471384ee8757f5a2e576f1672dd1f962ce4727f5a97eb1afaac6f37b71c677b3d77b3908fcf5ac7d1a850cbfd61b9f4dbcd42adfbc33a788de52cf787b5420f5ada3550168faf5b62d0d1aec92eed11372e3d42c1f41b10383e6f947b0e1e8abd9b6537a9c45ef7eedd34451c1cefa87aefd434638702016d00f3986ab06079730470c974b30d1e271801ee8c83fb25db5dda8d870d70cb3c4b3b12b7a4415070bf120941c509dcb88568422484121c038e444260000fc144161802f7b7cd54a3bf35de249e59e22dc699fa79fb07d3c6537bae8fda95fdb853276ea22021b88762d30d8db557db7893519060f91c12b79c4620ea2105c75624eae1030f01c74814d4034704743b1f8d4f7882dc9e309f008b475a8f29c59114ad5774a2c40a20a0f2c4111f2a904f74c082233851851352828084276c10481cd87450f27640a1e0482438be99f0e5e8a499f0457979e06ece498452215202d1b4b776db07d1376dc0d910876e5a2f209da4a8d7eaa44620301539491184054e4441706093c1942ec7e7dcef36d266fb66c64adab499b11867d8a099b138c339e7676bc66ca791344bbf19a3258ddac9cd988d3863534a1b3316737a261692403d0947d30e14086807d93bc4a159bd34662cfea65be21fc9636baaa423021ac203523c814214264e0841d08c0201d3b7a880a91556841c2902092a40c0a48a0da40071240252027738120181a00809ee7712924c19e95d490d4472d23e9e9036d9f580e307594422913e1410673d4c59e9fdafd595ac9c556ba3f4d2a500e9f5869cbd715d0ca8e7ce5d0a74afb338ebe40c1b1ca974aebe747f48afdcb977d6e70803e4142ee001d0ac7bbdcf0fe9a577f787f4527d6d2253c6bddf45a6acb691aec1c993196b1bd268c66c17e9505e02491ff4dad831639c75318023ddd0c5804aba3433d6363e63d566ae9114d1713186ec502e3a0cf9ba488e9d1ba973bfb15df51942a6475334d55739545f6512894475a5d19406325d59c45de924ca93231c3ddce8f03b8f19bde9ee20228bd01f24d067a510e903c8dcc9c180d4eb19b0dd7403442cc43dc70d1fefa5a77ec307f5eedbbbefda772dc7fc4e0e06b818402a9df4383b3d878dd3fd664cbe012e069caebaea5260e6c36366002133269fb24d64c6e43febea6fe731eba655409cf520fdf44e9a18503ae9f346f7d3a3e986770375dbc78cc99fae6bde74df40664cbeb334664cbe646dcc983cc9bae6b5c1ddd68cc9d71b6ef666c6fadab09931791eb39f138fd91b15284471041d28d182285c30851dec800ab33984a2233ca1420d96408591d9fc81122415b448e1830a58c023aac006560460d283182c8144098e20410d4f48c1922140c1010dae908285e3922d68e048370423b606c385842f7f1fb805204ee0b77d53b65d182dafc082376f73f46518306440f19d705c724514387f9f4cd8a11cba220958c371c91545c0391ce2400f7ad08379ae7be082486b1f616e9f130aa4edead8e02905f7c9dd9b19934d747393628b4d9e6c44403001cfc3e636cf4d29b44a2dcd9c37c3724850b40490243f6e2034eb27fc8088264934618a2bf8987513d81536c09f0a70a6d962d0c518635b2949c11343463e7a1c0d20091e00c20d34d0831d1861167b306571c6cde2230f4440302102a2052cdf2aca6e3a26af712e2c91f0e50fa4306c643cf1511c975c810218df1542db058fbeef0b655e5728f1825d4104e730041a89450bf66a5dabdc6bbda9d6860ea5a4b45b4b970a1a6dbd43235f09c725549e806fa6acb5c95a2b1524e05a6be95c89db6aad5486806bc5b5825478806bfd23d78238b4912c8c8ec96b9686b66032346e5a0f5b466731382ea182022a42b8ae40881a47c3a26df5dbb66ddb460508deb6ede60a5219026fdb1f636ce73eaf4bf0d9d0785146672c705ca20529b4e00495828c3cc0463c691c9d84c28c4ba628c271c9144670ee26784ea1047793aee988a514f97664916f8649e61f2cefd655f8a41449644a13382ed1820f7c85ef244d3106e9f3a458537afe72eb619436386f987b8e43252b4b10a5509c99a73165b248dc6400249118c37c1ce26eb6b1a937d3d084e1e92d2acaf216f95c35e2d00d70c411e7fe922b7c609ec6b4875e00389a6a6898de09a4c1a08b5cfc2212730a40092e059405341dd24c9937003c051698f0fc6d709acdcbc40ba4a40217504214156061f653032196a0228828a4186136bf2cd025e28644d66670c50a66f0042620107282198d410c9af084218c1881090250824b01d5ae8e0d0b6ad5948084103041e24488276060468d3a0025892464c0074cb030a33282681f30ddb3e0660a3e88d82e0b24d0e649416b8d064631ad1893dd70432c5e30d9a24e2035a637cfab03c3f4af96d076faedde4c8927a5d408987698d29b6d884353d6a2560461e3eeabd58241c39998e04c439b46a15b6119655e8cc968644dec30b360d9497c5f2bd7d0742861742804cfc6f3eac0b0c430320d4d1cb2820333b4b00e59705c62c5117c824945115664c0002c38c699d8467473b66cad484a9301644f6fc62a98a8820906279df4045520514507a846b529b8ab30a20a1fdaa66d55c099e2294d7096384a31c5896d8a0ca6189953949853864c0932ed92293fae309d4ca7275694a29cbc39840ff56541075fea4b658109dc9f4c38524c7d382ec94212aa1555ad485c9c9182fb089c298602678a631688c01c290b3db89537ed1226154500533a8802154354184da18a2756f4c099c35518e1f80ec725555451451453b45e9c1942850b70e6f0122a86a062053873f354188937ca2c50e950dc391bf15d723d3dbdb95fcf25c1dceb122c14c1db39db435fd7d2a6d193c0fad275e16c277d3be97a93e3b69b53df269c7a4e870f7cf5e6d4afc38a807ab9831d6af73545d06d6f75cdb10005d36b587002670e2fc1421378de6bcd9676b0f51be47d75186f3280c4a5542e52725b37677b9f3b98b57f1d9a70b4d39ba3dd5f70b691fe3aa47dd9dd7d85c00ea776637f35f172099dd4525f86e11b19a9ed2eedf43ed1a5591b345a36878080808098c5efd0048ebfd1b2cfe27b7082e37d80328b4bacc0047f389ea76be2922a14e1f81d5d03d4b29ec587320080e369a40670b4c1f1ed82af715c52852338cbc0464a3a8c31eccf2b545f1dd6aba572d10ac72554c000ce1c8e128808ba25541062e7e3e81455a6b082dc705c320514d38c392795314ee1648aa3385b467a72e14c9c7ff07c8482d6832345340922035380c22cfa200522286209118a3042126632cce1781b376ca62c0edd74093e79cec7ac882e764d4729ed28dd4a5b692b6da5122d5d8f6e5be739bb4b37cff7dc5e6b4e7f4649ce2bba14341340e8224cd31e67493e070d9677078565bfe073e1482246c0fd1c34b86f0fc5f2c638335ff069744e8e93e7d972705b9f33e1c04346be2f29e7e53e8fc4741aa14a8e6847a694dd739e5a570d7a5d35e8ef0e6054c74695c40e36a063a3719847c3944e8c73202020ba833ea2646a44606d9b69576835e75a2667da3fedafdf4c5bf06d96d368c05a38b57b114665958e9a9c5b4dfc2837653c349044148c080283261628c28cfeeb1a18987ec9147c80e9612dab337a9996d1198f258c8cc00548a88290a125b0e0cb1e06e7d63773261c9748410ae6705c0205089c61348830f8320c37d829f8342934518364c2295dbbb9f452c9e6d09cf9edd434430aa0ee7b52f08bc491dae348997bce3c6773368fcb1cedf0e3a289a604314a29a5945246a18919638cfdc9491985beb8440a50e08e18ec5082b13d90fa3a74f52391902438e7c04887d1d5f786c6d9284987114722214638e7a0488ddc5a56affdd72e43d332d2b5dbdcb4acbb761af15a2cf66333d6dfeed7612f8902134dbbd7357189144e60eddfcba85b5679004c07b6021a871e00ebd1783415f4681fa00fb0c1395eaee7b28e4dc759af917cf5711e53530e3df70136785e7a636b00ca1428511c7313578d93b8258effa4f646c1c7049a2993942601538a29e570a4f76bc1e7c1c239a3404269064c8ce088284400441066fd6fca78109183172c49324513809c98d180fbad1fe1db9ac0193683d0495ad3324d26817068599cd1597c17a50cbeb8248a203885e3922882c05906cf59f401ce32f0c491099e87cd73fdcd2870c0e1f9dfd608be0c62af63f2a0fc6b86932f628a5f705c1245114c715c12451238734dd8442061b82f67d357922a4081e9357a4ae5a6699ad61ee0a6c418e7268383a4c134346ce07e482c7cf2393681a351131cdf4521b891d1618c4c70fc244d08a3a7488644231a8d814f7ebe756c384a65d0b98472502c74ba3fad190f5d43fcc4f266eef26ad8bbbc2e1c920b47522c6fd69efb597e9e07265d924e34ca41b18e0d2e9d3399ce9924f6ec8dbde52cb8e150b9ca516a83b6691bee96a134ecfe86b589fbc21aff481ea6a642f81e0fe21063f8c4192ecbc0f1b096fd30637287f76892713336378d1e7d56621f1c3b6c6e5a532683a0ceddcc611905451a0216ced3700f42fa444dd449ef4824148aa403c39c8e0f388c7ce81a99560fd149d8793638d8d098dcfd6061c7e6e77b7c403ee4107d236579e8986669e040e4d41b0aaa13f13bb48c87a681830d9b5ae24ea856cb6e66acca6866acce70c2771c53e675ac9ee3beafd5ca1e96539cc0f572881d5dd3d70011fbe81a573f62ee071e09d4357deb658faed97c349acece78e2cbde8c273eed9d81fa1d3c5dd32ded8c27be7973a9d07ddd5deaa9cb4371e3e8b07b20591f4e345cdfb33a71a64f33ebab9455a8d5c3a1f343d778448a649e8a4d27bd9a5ebdd7c71b0457e9499d68844d3751dc598a4b3602d5832d8bb338ab979148b817c418e33bf0c9770f3c1ce5120de4ebe3c41b60291fb52d12610922a000cb8da2c085031ae1408f045212edbc745299a3cdb8852ec61a6ae9e74f6faca174f6ac522500fd1c3b2787c431c618fd1c638c04c071ca29449519f8ba36dd905bd8f4f9ce81e3ae6b7571bc8e266bba67ef7d5af0f36d7bb53a000fdc5d572af5994cab2f7ef103af0bfc0e7eefbe39e3ca66d3cd38709cfff7eeb35e97bad2a2502bcf9fac356335b751047361ae4393981b730518fdfe0ba8d85efb1d3e7386d06b4460384d12db6b91190ec3c83d0c09e91d132e1eca5ee3c265723793f96e02f6995d3cfccc2e5ce6309ce6316ee666388c03e0e6cfe6e696ecd6dc1f6e3eee2c0e1f3d34108d9cc2d341747a081fba070f92ca0e528a8d0ea364e1cb14898c22b5ad5e980b9d154ca9b8b0748a141a8542a1479aa550504b9f484b9db0d449d17dab09ec2d9f50185581e12e9f474db8b8cb09cd5f9f519ca812fee553ca93190ef339050a171ef349e508c67f0a0445e6b66b6c62c818c0cdcc86739f07a8c1026345c6ca860e676a074b7b744881269539654a9909b0134a87f308b0f308073ba1984f3aec6ba3c3aeb1b9373aec1897870e5bc6eda1c31ec0f5a1c3be995d9d0edb86fb4387cd5d9ecf1c7e001baf81c35974f809015f51c0bd047cb5809752525e9e0528c0ea60650f1bd6278792d5e9503e011e02ecc9f2606bd81d0e606dc40e535fd9d8e16ae52c3676c87249440847e09ccce2f7f34912545a1cf60985911777f1098589d8c34f291dce17eec227950e99744dee662e73daa3c3f9180ec3e711cecd9c0ca7f98c42e3e68f86cff069804bc40655aa588173720d87717ac3cdf7319f9098e89a8c4ad23559a6a46b32006ef3793ad43539008ff179caa46bb2002ee3f3b468004d6e8c669f79860d178702ccb07ddd10c0b606200019018801006b6361c82c6769a84cd821015ef37973d9e72990aec936477d9e06e99a8c0f80cf53215d9363dcf499670fc0e72991aec93268125d930b70017c9e16e99a3c006aa46b320e059859191dce630ba3c3f91b2bd3e13c016cd8e1fc00ac0064d8d8a1f6005819312c006cacacc6869d355994ad01863d0d33d8960c3436060b839db13c1dcecbbc605db031eb4368c1172eacd70266298b6bada5543a9cbfa5533a9c8fb1544a87f3309646e970fec55228f48842419f5027a8930ee7299229b3d1317996cbba995b91076ffe5637c7232cafbab99592ff2892293b5037d3606983bf9be3506ec5a2f7e7d414206359e87715be790c00ed707bc826628c58c4086ea01eb8ebe39469543ac1fd7eeefebefe0d277878d203143e1ce180a213e507293cf43b76e8cd995702619f69812f4723a3d9a49337464a29c7719ee77ddf078260eb3ae86dc5bfa6f4819114a20b0c115d400aa20b3cd16aa250e96d85be4f2b843ab542a76b56c8f4cd0a79af5648883ece53eddc76affee34e8123a4e7c8cf88650e795fa4dbe22e58efb75d4fcbf15379d4ee1a74afaec9423edf772405b51aef71f15c893480d2f539b2233f0790ba3e4776e415f2f1998f050830fb502793d75d1f0b1060563a058ecc4bbb53e008e972de297084a3c0917a297044bb6087930247e86d75384f81237d5f1dced4873a99bceefad0233e1ce779df0782adad74297064bb47b49b23c7636b2ad45fcf53cf2b66a6ee39a977214aa7f3f6f5f9d9be1d35df54fb0fe9dce35f4db9f91fd2b556ff673bade7e67f4aa7efff70dfaefd943e2f44e953a128f7fe8ff62d457afd4fa7fa7eba7727214a33d3ad40cce954fa0fe9aa2b849c75a9f98dfe473bea3e42c899cf4ff77a214ab3efa24ed78754dfdc7fe6e97db8cc4cdeed6e6caafda76ad74aa4cbdde7679efb4f3de58490339f9fba5d98467f66df770d295965d0d118578cf9a94198cdeb23c46936ef8345b50aa0aaf87099cd5f88d28c3efe1a9d2c1f2e331750f59dba94877a812cd577ea56a8548ba502bf53b7925a812cf05371745bad7c2f2c5075fa8ff7ef3e42944a1c5db9f69fed3e2d6f696fb5aecf0f5772b55c9f9f12e5a21540662f16a8fa3a1f214a33d775f9299d05aabe5347aada7fbc4f16a8fa4e1d69fec7a3db77bacf0feadd7d7e4caffff14ebacfcf76d685750dfd7d7541d57da56eebbb2dd47d9d2e68bab0ff78f7ddfd4a3792aec7d5cb6dd7d37ee8bcff714952513783f872c4ef90bec37da77e67fbce8e0e981d1dd508f775ccc8119f23de7cd273906e7e71cfc1dddcaacf516f06b7e7d8620eede61c34e6e8cf8eddb78785e58549267451073df7ed3b3ab493ae63befb975aa95a2c2dadbb5cc7eb3bf2eec4e870c176766e707da7f51dd67754df417d67de7b8d981a7247caeb7ab9f9e5baf92d979b5b5a37bf56586e66addcdc528137af543783a8d4cd1feae6cf7b8f0b3edd6cba3b315e8f0bee6e2e5dd2e56eae41c0f5eec46837f7b83cf36c3c5e9262a083754dde91cf7fbd5a2d10fc3ecfe37a5cf07c8cc93d2e983ef36c98deac538380e7ed6149d9405d4b528984e226cf86eb7708807b40bceda0700f0b6b39781a6b97f2c2e6564bf755ea48b7653a715f6a556bb3b44e2eedd2177aaf8a3166df69a48bf5f154ab1bc795489d773a4f7fa9e7001f0f9eb00a3ccf8657e761e11d1466797ccbc32bcfd14331cb7928669d07c43b04c02e1e156e3d074f09b73c47cf865de769ec9283e7c3302f7f9da78577268ec9c173c2397a1ac75c1967605e2c8d33f22fabc519799725b9582ecec8b7d8ba7971a62ba14ea62fa562ad807166d5d28a332caf38e372798189819173ca0ddae68e3331ce6c28ede6be8d38236f8069a24c028932e964c666bf553404c4a6155a8a259029fb21c6e65badefcbdc0e90299d4c998d189b7712a3911309446a20cecc284dc527cf842ec2ba48f4030a96b8939e8d1823ce3b83f876ba8aaf757a39a50944380775f9ce39df4f40a9733d5427f958bd3404f80ec8cabd20ac9bde395661b9cb3be7b4dc95a5932c9fe438e4b23e2e7607cf0f3a16470f27696f74288166acdff264f25e72c201b5d81ed2a110db411a480fd12adb3d1aa8432a724a87ddf2ee92ae4bd314293265341deb7fdb4f45ee0e3880efdba07a5f06ea7d1a96f761b0fed5b79bba765b8ff8fbbcdeceab0fdb91d1e566ae5edad26261ad802b55ea439d4ed99aae2cd261dfebee32e9b0873a6c251df6ce7625922b99e8b07f83ac5243ca261df61b0b1fbd153e2b7c33882f626a000d37ded92851114de048544412dce1485444119645ba66ce98d345764eccef1063c8a30e46dc458ae4b03c56a9d20425982567bb820ade90748d0e12e9e6d4aaa3eb6e0e89f4f94e92d3753a4ca69be3799f3a4ea79b6332e95859b939a7d3e7bb2867e5b14a952a54f0caa70ed675f4596e03b16e8ebc9d44952a549a480f69211d64daf6d13da67c5936d00e4edc78c203143d1cf9000547141d293ff0ecc89b035e9f1dd3c797656464b247c7a64c0ed1b12993433a36db8a2fd326a68cae6ee654377fa99b5bc7e1f6f9779f6f913effd51dc999eebd74f34b187573ecd4e871c1b906019faee9ca1e37ec785712e9ae1c52ba5208e9ca20dcdda997fe0659a5869449f89040462421baf873a4735ef7d267ba77d44f473dbe95faf7d4e35fababbe72f02c67852d6fc9b8e2695efefacbe361c41ce6318fb7b1ffede365b0f83d8bc7dfb438ec2d1e6fc38bbbf88bebd891d7117bf8d875bc7017fec2e36dc4183ae47772e66dc419791b7fc1ba100b5f581b5ad89b1b2bc35a1b1b0be3c5d2b8ac4c8b0d4396857992762879845203ea9a0a5fc4b35e7eda7a4b30ba665b79cce96f6be976dcca5f5eff986f30b79bc9f5d2ff72aebe6ebf51168dd5a05ca156def2bb4e82f9cb4bafc79c73b97d65d92e6d698dbaa913cb4d6fb90773d7eb2f2e8f79a975bb6ab1c1280bed364b8229ed54f5d5cf02f316d70bebfeb41e73927d09dca8d657ddac7aaddc57d720ffd5513067f9e9f5969b5ceebad7facb3bd663def6be48a997601b0b7a35abbaf96bbd40c17cf5d3eb2c37b9bce55ec7facb4931b755426d5acc77f30975b3104cbebe7239cb3b52e9e5829ce97583d15e4e377b9f90ed48adb3bcc4b9ee577af7ad74aa554aba769c52eb2bd6595aaeb76de74ee9b76ba48b734ec8b5b1be3a5db97673bd975e5bf9ea94f5c9ba3f2be0fc2a95822ebe5e54a53aebf11c08bef5788f85e58b89792c7697d0cc77e4858266fe22b4fa8ebc39417c3982f8847c106006f319c4f78885825687797101e1727d7e0002020aa2e5faf02cc1240747b4ae0f04829460031ccc7c2c408019ebfaf000f1822552663e154055b10001662bd7c7d5cf91e305b2c4c46656d7e788779f23dd7d8e68f7f1590c0ba87afdbcaebacf91d37f50ff49dde708bdeafa1cc191f77c8ee07897d8bbcf11f923b55361ef3826a11953ec26d3cdd8335dd38ad08adea3f46697bc38f4f3110bbda4f49ef2fedd96964b4abe08b9c0cb67d4bd9b71bc9fbc671c79f90c83e35dde7cba773d18f0c5e472794b8bb5b29ae962799eaa542aed666da5bb2dd6bbb7e0c8d79bebc19877375dd7e5338e908b7cb99437bf4010fc4d87b1ad0e25e966d2bb9b4c2c2c2cdefdc2c00e65e9e6d24db1988b9bdee2c5d7a1fc668e639a9971217cc1eb6010928981eb509a64b8e919a7a379f78c63ba331ca79be1fecc44196668ee4fecaf18ee0f0b0c33f748e95e26f6c2fd015d88dd23a40b0b595edc9f18172cf70877c31620ecfeb0b000ef917a656eccef0ff8d71f738f6c97a64309c3f2fba3faebbafabd0525aeb0c1acb7a0c41543b3ec62b90bf8dc727f28102f58728599aac5728f6817060bfcfda14b30c9c10766e03d42af4d8772757fb42025d880c94c758fcc2bc3f240b50a03443f86e02fc2e24d0fd4061f381a383c1c743e1b3f803b7448cfd321bd8eee7ba343fa1d1d521ddd97870ee97d3aa433886f47e21ef945a21f4d7024fa6104e738f404d33705c2f237b7a16bb6d3d3e81aedf438d8e81aeef43bdce0a16b4a11cbd7a9c7e6e84aafd3add123c0ddbbaed5d9f89bce41ea5addadd136e891202907470249b7463301cf1ef94d2e47e5be1a5d05cf1ee9d51c5af5eaad314780e7259763d338edd69836c03db26b2f479fc7f42dd3f334f62613f0fcedd1f03cbdc9e6c8bb1383e78f2305c2f332ba469ededbc1e89acafaafd9df7aaebb1eeb30e7ecff1af37badb5b1f48aac2799ae29bdded9c39cc4bdfcb6b44ef763dde55e29e630ef485cabb2d05ab696df55c1ba06d5fac9dee5a698bf4a5dcb2fe8a2b6d0601b8b66912b2a9cfe268f232f047ef6ada3eef28261b93f2dff4b2cbf2bc7495d153bcef7d4b9aa6dddf72efbab9b57af95fbc3baafd4cd42b1fb630ffe43bddce527d75f37b51ce65edffb2a85c7f902560805436aad9523494b24340405407a8523d112572c310512573ab9704a38be71bc5902b8049fa42648620a13c820c525f9b2472dd7b1e3486482234c000467fac92a60509f1c9540089c65142978ca291ba67753c2640b38cb26b20926344d0a9144a8c059163182e7bc0442299647620a24a080c412b816207101da02188e4448c800092443b5882ec2320d96377b98f6ab631296045009a0f439193e4dc8c49761580279a0113e181c89903002531c89902002e7560a58c002b9a5406e330574d2a902581321d163aea0351248214113e6916923c3c8477124225265cab44027928f4816e84412468b23119122e0138e44448a700e8d4e20a1cc9a38ef9ab2ee49c48d83ec9bf56f20c17d1e9c30ebfbd03591888811f884fb3a232882fb3ff477b42cce1a47d907e229935362acdf20ce120ae6401cbb26c630b78f0ff7a396ca3b9012898820c13c8de5b384324300789a72d8b0bc3771a6df52be88b314c244c84d87fd83cfb638eefb5a446812249ddd1a14b82570ab1e60206a54ce4d4e2d68c1a80444a881130b483181213f3062891f68000a4e98d1283025124194a9440947a210dce005136b22782282263598306e086440af0d0c192180c1b431c19761848004b8e248148223700ead90041d3234e488142a44e02c7b481ff33a734627210802e7f8c46b1a8de96f5a7e4a69120da1026922c1c29168c811300947a22146339824a052eb76b97ddbb66ddbb66ddbb66ddbb64dca73dfb6735bdde423a5d7a4b661d9fa6a6b55caed9dcdb2a84a256a9da9b5ca291f615b118e18628b71a63ad938ac3dbe55d32dfb4c3b8daea1583b0e31c6c4da6d70da3df0a5694fb0a641c1da1f56acbd6adf1e056b736ab4f5f57098ce6ddbb64d85250fe28c0a6bdb16e3ccf6edf6b6456e087412c1f32e22f8fa120445581ad1c02003159f420a28567802a55966a1b31067e663e8981fa0825e213106bd59e2197d80e9e99d42e2ccfc4dcf215fc42a2c641e5184e7fcecc0d79215e0034331166b0af081a218469c4f78be00479c55b8001f9041a4320005f8400d620c7112f19438d1441e718423d11150e01cabe079195d13898e7002c7a1389b1f8082651106c1178940900467940c1936e0d0b2cfe677e81a8ae76fc41813cff340048222784e28f0848227ce510a9ee1cd920738a2e2136e903c8833f19d26859a5a0984a5cdf2f19a29075984e5669ab103c3f23d705b25b0ecba480620e2383bf0b570bc148a3174c81e580ac599f8183a948833f15209dcb74862fa1867ba86d401eecb1dc418b228cec4ef20cec44b1ec418b2cf23c6e83b513186bc2685f9f630cd1c155204c71be048e481287087eae294b9bc3c9ec6fc61cae8e3a590297b3d76272bbd788c79bc4c3265aec77f31be8729bb8f973ea6ccf4788964caec633ccd94818fbf3165ab47178fa9c78753d6f2781b53067bfc8e296379bc2432652c1edfb2b0fbc261b8cc5996c50d82b1788babac8b1b1473f1f0277b6f100c3367ddb3f606b5b8b727d91737688675997336e606852feec2ab75dda06b0ffb665f6e90eb75835eb8f0d85d6cd0cbb7c79cc80340b0fc4acc5fdfee0f9919cc3f1b14737fbc300b3a3de675d73b1bf4ba3f566641dc5ff7c769f6bfdc20977f6fb1419deb2b076d906be52f47d9a095fb63ce825aff5e8e7ac90655a0fbcbfd31a3d920d4fd21805990f798eefe78dd757f80b320edaeaf6cd00b30dc1f2db320d25f9fb93fb859d0bcebd406b1ee0fd52c88f54fe6fe90b3a095bffc85fb639b05a11e73161be4c2fde19a056d77c5ee0fd82ca8e5df5ddc14de1fa85990e9317f717fd8cc82ea5f77717f946641abbf3c658358bc02413c662dee8f17b3207ad7effd119b05b1fcbb41f73fe4acf4b6411508e23183dd1f0398057d8f8979e906ad3c087cd0ea41a9abcee2fe90cd824a7fdd1bb43d487b107d507ffe757b7ff42c28f597df06f55d3728e606750f2a3d88f4a07aee3fe4cc75181b04fee506fd90b3d70dfa1e847ad0e941de4d77dd209707b53ca8f520d6597e335d6c8b0d672cbe6559ec8e198b67594964c6623c6857f6c68cc5abac049ab1f8949545662cfeb3df8cc5a3ecc9f63063f1262b7dcc58bc6725125bb23733164fb238662c9eb312c88cc5572b93cc58fc663f63f19aa5f687198b9f560a99b1f8b6d2e6f04c6caad1fa9991dc0f6224e2c010078c28a19372800811073e40c4810c704afca8a26dda5605519026aa4014040aa2204b88823041142405444192200a32842848114441828e8882043125094020da8012a20d3421da80112ab8912032020ad1063a40b48121a0b00422236c4064040b8c1821c4882252888cc8005111501019f183c8881e408ca8ec808803382032a288c8082740f0f60d08114c4f910019c2dbb717115cef6282a1812878fb060408d3d3dfd02f952e2517e30ca9545a3d89c5f23586e5699001cbaf0000cbdb1b60f97bd2d0e4b8ef8ba4a11b56258d441a82711836f3c030de45138b9b7960162b4d748d34326ad2a4a8880993a121254a922461627533131dd6fa152448563c13774dc0be62a46baa14e95e3aa3245ec097774d88802ef05dd110d7ab6322e405f37a371404e630ef940079ebef920cd1352e5abc6362c547d6a9780a6ee9ba97171074b95e2f1898f7b8e0ffe6acd3c2319c67c32dde35d1617dd6a958a7855b2d6e0f0bb75c9d166e7987a4c37aa0292b25e9583d0dcfdc4b495a30e122c90b25e1508c890b452f3491319a797d07c3eb63b0608b5de9013e018f40286014500a38e5c582543abb02c4bdf495fceaa86b72cb6b78fd0a8aeaf5ab285d936338cdeb57526478fd6aca0caf5f51f15e0f823d4eaf077da05e0f0ef1bdbee444ee71c101f88e4cddd5448cbf9a00e0304caad8fcaf2f2991bdf5fa52929ab73c0028548cd329c6bbdf9b1fc3640280f7727b73ebce30c37b5cb08d0c77274686af86e6d2c86a6ed699b886bbf2ac33b1ea9e67c32bb78785535767e26f05f5e4e484c989d7c40c463234e990a6a8c36aef5087d53eebac6012930eeb79366c6f0f0baf5c9d154c8ae1c60e5d2e0db7c5d2e8b0be6571e8b0fe76870eeb612c0f1dd6bfac0f1dd6bbac4e87358cb92f37b7481706bb326357803aac97b120950eeb5fb0e0940eeb5db0a014300a08053c02a1009f7458df567cace70e498764ca54513a56cf7da5ab8a223b24b06792163ed6732c626129be9930ec31cbe695105c0fb3793584eb3b2957abd233f8a4815647f3c7c77db57aee90c438c3ca16b36e90df26cb82374b0cbecfb2392ec1acafd88c02c22e2158ae9ee30d629e01f0f22c03cb738ce33e16ebe09318abcf16b31ea3ac431263f5acb7e906f0db930b7c590ee53a845d77e5d3740378dad23a8c2a8a2a8a2a4a4beb302febb22e55141a9e57474520132ed8d78348acbdaf078ddccbe2f56011162c60af079380c15abc1e24d2a2858bd783435cdc17af0785bc7811be1e0c12c69e13bef07a10482c769d1a04fcc2ed6161176e8e0b2f3c7333cf5f0ccf2d19ee829531fb4387f5a1e5e9b0fe85ddd161bd0bebd3617d0b2b81ea59d4df7a6be5ea68ca6874ac9ee3beafd5caaf432e2d2dadd60f03f37ab9ae6b067da42117ef2da6b74e3fea30df5fa9bbac6a0af1b93c979264d210ae2f25b1cfbfcf2d16cfdf3377d2338749cf1f263db730e9cfc7a4773d3aa016542293292ea4c888f2028a3c7a85ef7181e205f39cd7eb4b4f606287b1d7ed6161d7cd91af343c7748c2271d92b0a5f5c77c56e073797d5fc1cd5875bdfe02f398d360c365b460b4c8842e56127d3b12570ac05c30afd78f30408b82129cb8c2cc076480468322888460e613bb06d78f30c054258925e460e6e3750df5476a6c43506e400473331eb3d833c870f36962b8b905c3cccd9fcc0b3773d8855b8addf0661aeec5cd369f8bdbb5b86dc5178930d004f844c22e0b8bfb726fcca3bdab87abd7969bb9d66dfdb79e9b32f049c7ea636e6ec1dcdc7ab9f97bddcab9b806ea583df7b5dcfce155ebe6165e3d31c2b98170cdaba3dc401a40b23ad20010ccf28ef2452222a2e09ee29b403812116184596e870457ed2b761ebcca824f707dca669611aeff6c6629c2f5289b5b43b8fe64734b125c6fb2d905497615c1f5f5a452921c8d705e1d6155145c1f4daf1a240d1ae850288cc2f338a35031361f5bb6d47e33c1174ce6a3a9edf670aad54a8bb668b7877371bd9c5a7a7bb8cba2058d71b7877321c6e8f15ef8667a5a98cabb8362d51b5960b64b635c68977b1163eca06088317a5e985e2f861823e2d936621e556a17905c138f1651da4cbab5214ddb946c5b4d522bc704c74d23a5ee39a5f36cd8d4ddee3a3d2cecdd1c4f1a4dd98d8ecd3b71f2e4c9d111e7d91d4a16868d8c1b1b68e040e739eefb9adb8aaa66b45127da7c42fb68ca288de914e29b417c37484c2fbd0e7a211083795ab82351069ce0cc310184cbdfe9b9850a638c2f67faf896337bbcb49c09d4f2729a0a58cae9291f97d352724ecee9a30efbbbb9ce9c86d261abfeeddabd2953a956eee9e616b8ba9d8c12522273e8a868e8a8a8a8a8a888882ceaa1a1a3a1a3a1a3a1a3a1a3a129934424112292c8941d53a64c996263eb68148da2d1d0511f8561188639c429952ad574ca524fdd3e4ab510550b396a21472d4475943a1a3a1a1a1a1a1a9a40501d0309618c41da294dda914837bf43f9ea50b67278a5e728c9793abb28356f16d94a9c57e92495aa0c36226d9a57e22a2d71953a31e24a5c2d22e36efeeacd2d4f06172952a448110954446be5e8e406b77db38b368d8686868686e67176246efba83ceaa8db45bfe97611beb1631ceac68ed5d6c2979b4813691ea68e518199cb7ce6f13bc470181ec3e36fc8709acbf0781e68f80ca7e1f13dd47018afe1f13ec85e73d9e37100e03607c0e37502f0180fc0e37f10c0655c008fe7993c3c02b03ffca0a38303870f355818968619ac0cf6868d01063b231343560cb4b85e628a002531a9109953864c2942669420130a90a321a090763e2122a9b6d5568b4b8bf7101216b0eb7abdc0c4dc9e22518167bd081f7b41e63331d05c061a680f5a04882631a95022730a1d32a55021330a0d32a15020f3880e31a1a03e3e3b9f2449922449921e8a01009babfe2171f117e163495e5022f3991898d05c061a60bc066aa4c3d9590a54839d546812730a2532a5d021330a1532a1d020f388029950d0215ef8e87016e1f90984637d604bf5bdad987f2289e09c45e3a001aebae1df7c82e7fc7ce2038a218e804009124588942153884c2a490015a13d683321935025dad0c6a416b59ab418b990708b0b73b17fb5c0cfe326902326a02489a244cad014264da508a8490f231f1dce89671fb1b8ad9b9880dd96e390e45e97234089ebba9e80a1d77d3d07262ff725a567a8542ad7aa8445cd1c43330248004000431500304018120b0563c1384f44e90714000d9eba5852204bb42088719041c618428031060080c088c00061b60150556c11681b5204164426c2c847063e7095b485ea4a0e2e74d99620799467a23d50be2d2389f79e3e17691d0602badc2af09ef649aa9cda754909b9d899d5fc6ff6cc7cffd8272ef006f40b993df71af2e015d09d5e6d735fcbe12c8460e63b38f9a77adce1300a9b8f9a6bf843774287fd319f7b0795f33f0da481332f4f8eb0e025d7f5f7a740ca30882e1f20995ca5786a538175b8b8166443c11250c704c319a25ce35dd0d5a1ed8b71e3ec4a3127a810486f751d00073454e59770bd5c65c4e026e3820081f191d7ed4c5d910031d8a1c184f6f152bf3b1226d47dfb54f05de61333efddceea3be02c9c3a436c5b784f9cf17ed22559e1ce41bc8025d780cb3246877b9551557a7d6d7ac9fef698d0989fb5f4d8bd108afd84d39b94c13e2dac70a064cc004050403a3f1cb577c09f43d02066a5ea1d5d3a6b9c74bd80ee1b03c605cc4490141fd475e03b1e178754fe0f6bce7273c90c5d7a75712fdf651c487df779e1e3cad976fcc812a7bbe93a05e0028443b862c5e790997b86f8d230e6105501045e71081026dda7d05811fbd28638ab664c265736511b338a981fd082e4ce0999c20ad6a2c72c3030b657115108d9ecc9188542fcbb18d002861d081d4e119e9fb0945eb1e88f44704369cdc97b07c77535084e73d593a42d1caa6600d2b1850a767c2b004da8011d65e677be4410d89c1747735591204060ac5c8d4a7307f7f8b50ae392d28a1fbaec10f511663ffdd9771be0d498671c7304351364c65b8ec61ac773a424e6c14b99676cddf4552c944e224d2aee348122f624eab03434919796100c634d0b4b45b66dd2db9a30f39d3c8721b29ef15ef04dd3b3b22ea07942c3f07a76677313933d5332d1c20686bfca91ad21b2570699a18cc2f4e4e58815678cca70c8721796c9a343e6ffe17852849e7829560d575a341b21cc95fae381b7815b70ae5e129ab8ecc7f5675dff45d33da7f000196e16bf1593f6eb02d4a08638a50860cb57a2ab2e906c61ff37de01c063f543f342699f77f132bb83e14e491262a7a619e89f5c618e9350645002f399aa77a01579a0c9340c4487305585a60b37a27311527c1981f3fb46494e26572fd800d6c275d555a71a4796e8f5dc8bfd2e3ef667bf31ba4aa7c47a8037462b1be8611b452f61045e784445d72c72c1f1acad3a8a23da55e5ca7b5dc8b5710a8a80bba0e62dd8ca8580e85b51d2ac82333eb90f17c4c3d6487de905d363764af7657db890572be0be2076a4f1287a8fef96d69de7e6ed5aa05b2ae982f3e7d1cc9b426479525404959f38bb51c7bc8a6a91a947581f969f392491242ba7d0927e05d502eb08d4c444824e167e0f006ab7e007d46dd70def9fdb17088ed419066750212b6451a8ba0bdbf132d03588a092c576deb59c7423bebefdbb220e1f78a3baf02ba42f01910b2d648114e62454c1522da0fb859edae1ee0866c4cc832e94bd95143776d4831180245d60064756e2515636babc9193f8f30a0b5c2f56f336e5fa6ef9d41e72d9f2b53b75d252c916618cd8ec3d3317c59172ad25bec09d8a7c135d9ed4b21b77e935d206362f7b7fb922dce28a203711663ce72518bbbbead674b73b14ffe4c4094743e116f04175ecbed9fa741961af26b9a08814e582ef88f16ad841d07cda6c0a780be08c2ef74da4a0030b722a74080d111c26cab34030229ea17fd06274deb930b4dfa30d10028bc21a00bb8268fbfb053bec7813d39f4becf8a7e8ac00c26a404e53aa1d92a29dd82e9c0a771370bb07c39f7df6fbe99d64eca5670bc84d2e58deb4056ef26ee06ff26fe6dce07537e8f9a9f6c5438add5a394dafb6d1c9746eca1a21b939285996e717ac48d22c54f74c307049143e270c7deb45f429b422898f1cc36e1c58c6f34449136dc3d775d5081ce932d7aea7074809b18a64b6cf335e9dd7bb34b0aa9338fcf193ba79b16ea259ce22387068c68fc2b25fd951f8d28c55ce8ca4c7176c1fda8c81ec176579f648f63258b93548f05e1e716d2955f2a129817c7096562c45167c18ca164fa84029deae55e8748663843b71b0c525b1bf10576bbbd99f3c342f89a7f1b23e45860b544ba73a107f71a6a6742224350c31021d7e66c807bd32af14a0efe3969a26da5c4d68162cf65c94052ed52bb9be7ad0b303eabdb427482e79316f098bddd82e13845c29b605cef977ad6928b8e8c595193ed1e001dc8895afbbe81e8d353a6269c07a4ad234850a37907bdd85fed1150111ecfb87671d1aa824bdd202074daf301e65160d56b5537299e390328a784aec7d0eb1c578dbef8651f109d4e9375f27a81092b7cb25e7d09c0ef42b89fe25442f96020d10f43a0d7371437ae6e576015932e358fe9ea6de8ad4c3f700fcf58dfaa04ceac67a1bf3a645aa020751f30f657e2040feae75636a06f71f9dfde8617eb71174dc66c224fe4b4ba20bc05f31ffc2af725c9968e2ef1d4af3ff060bd66d13072e230056d573a2f5d5bc46a29f13560642c8cf862f7631ed945846ef76867b89db7c33d08490377ca515043d50cec8463b420bdeff5b69dc017103d20ab969fbf0d7f364c4773754f1875d96c7649f80e11f1ecad32af83958aac7819f80aefed3ffe6fff73ffe2ffcb38add6858a7c0c14f2cd3f56e2cb3e6a645dc163dd94d144a4913fc6fa38355ab2aad2037dc0bf8ba965ad480fe8c00b769b2f42c96dde7a3e296895f7b29ad903ff20ffa416cd3928f7beb7d3d8186ff005214cd9e9c9998027937e3743a40c81684298cc13080bbbd76643cac9b442548f81a6e1ca266713d0f8a78f6167c90265a4eb62685c93ac3d40b9f1b1d077371cccdedb62810e5b05fb298f1ffd8c26319d20e1c0f591463c5945af1f9984501aefef001df96627d807511fb0ea2cca1b5e889168587d187523f32fc39b81394af51c6494ae4eb6053d492d6b4bc5c384aa6fdca5a7a46001f5a40d9194c95db1cbe0ebc3db462e3f0180e2823b7e1c171ae442793b4ea74e08adaf03d91b2ead2c14d02e867a0f474c72f030651360438ff273613a1d58e2981532d188dd08a5a2468d1c9f96a17b4406e46c40a37e7ca789a6fcf2e4563d38cb7c06a3134a68e3e688013e8d4d1e28e5fda644f4f95c5b58f7205a2719b0522ed920a46a76a779599b040388a8ade2dbbb8c75bbc77c8ce3e76621b8886cd06fa9e35e0e8a23a1d6a9222ddd054e18ccfd911124c0d703902eca0b9d48ebdcfb33ec4054df614ba09b3b8f4c32ab84de504c1937a3bffc48f2356e861c31996a03085097757de87ec07e7f0bcd04b9063015dd0304a180b305cb2363528ffb12ead33e5bae620d3a3e9128235fb9407106158aeb7d39d2e1a9c8523676383c40003e7e65b59b014eb69a201916f59fecc41b28f793e0cbfd31e4fda27892c61ac0a80e38bb2aaaea9c92359f3268aea2fbabc2ba0ccddba0ba519a3cb94889ac594df83935aa70ee04796b7a78c2f86095c299f58944a6c32037484cbc952bdfc3bdbac1cec51b107c6efb0fe93041c1b313e376b6963b33170d9197899c6ced4750724d62b7658bb6e01eb6a5c1dee16755bff761453c851c86a92eb12ed7ccbbb227a5207b52b70a72a4dae45a3ed99eb4a8dbf6fb86ab7f1cdec2c7511cfef4b0906452a8e369d0d4f8113b290e6575f6bd922e4c876a551e18af6d155ae9abb3d65d1149652d303027169192f9f7c3a0d0864d161ca3c8dd036c12f6cd2ea976ecbfe5efeaa7879e76526532541425041f345cb437cc39cdb73044ab7fa0adcaca4e5525573698ce4d3810eba47a0d972fbfa6f0b39b18dd032aa9d224d83b39a36961c5273decd8d1081d220e08ff890d21606726c4adb520877c94c8764e68c87ea89169717565a6e4caa9d98bcd323ae83e7aff3e41a36c3bc78027516101aacb9f6459769a0d318050f62381910582396b023fa84a8c174b96cda76df4017c01bb47a94fbe401e6d768979f8a57725f1ef10a81af7d06622cbe1878a72db6c718d40a400ad791f7ce62ba73c17b04c468f340abe3cf0bdec7ea3060a00e24cabd6decf359794f3399b3f01a21092ec51dbe9857b326391d61230bf041a9c4c93c852ef02c7592c37ce338d440dae9c01aeb761b30890ad952639624cba5363265522312ef31fb88644a8e2c3215b3c8a6e58f8940d60551f8333ebeaa1e5b7aebd9650d5aa2c4c41f767004fdb28c54647c757ae6d89ae91bc4badab228bfc934a34950846f9890c5f4eb5cbc3179e5f16616033ecef92c1fc5c775200899695ebed8fccb3651a8815ddf4e3d11ecdd2271a05f8f5b5780382d24206c8bc339a0e63003d1f7e9b8bf92f54a521f16a1455ad118f8f99c29db0aca3c8678c53ed5e40966000fa9dd0c0e210bf90c1d8810bd55846b7e23e499167673f89834e453236683254380e5549082e87b2283560f343317e25226a11de93da69ef4e5298cb4eb9aa5e53800358d1f4d1ca55ec518f65988f10c44045cd429aa9f8bb5c545b236dbc50be08463cf9c5766be39c72411cd842f9acc6c4d00e687124f5991898108764ca9b58843edc02b6d78a5da5fd82e73c00d418c1aaeecb77b1d385f165b1fbc73596b956048f8f43be66d47ef176afa13d650ff82ad5226b0e6c0203a4d8de8a4f6825f2b4062163eb1246d3c20f8c8aa5586b6be9df617aca38b3f0b2498c29f48863707f7b94eb23209ad01f8d92095e99a0afbba68c1c35532392d62ca0d6436fb761afc91fe36559550789afe0293e98c92332cb9d381075863b6c9c52a160b7d961545ab830c7df337bf50fbfe911504958f38bff03e7b9b759376ad002e93d5263cc1224feaed3d028ad2a02b3f64914c1c7491075375513cf275e830b0b826c28d7946876e38927e7dd50384251e4b54da305ec63ded45202f0ec96fe1a53767b32a83cacc2f14c4cbd711e21d24d24cb08eaf89271c7370aa04d30e5de5fa64f504933131b58a78a3eadadbbb6e84aa8dd7f35f38381dc036c505f72769a4205b50b0861684c505c3b6147491b02d5c6c20504dcfdee7067c8a76a4763c704e3a49f3fce5f6f677409083d2e6499c128d5336de1b448d3c89ca63724072c8681d90e1e09afb29bd98fb667ad0ced63013be7cea2f742914c1d4cf9f153470bcd4360bff9a70feaba50385d3a47f0ba9f152d2da356006ad1f732d067c019825e10a8a757e126ef1cb57960f5a80ee3056b0f3a95f9edcb18b210880ee778869906f7f008fe7367cca486a0a2319342dee628266d983d5ccab58ef446007730b74759a1fdc6e6f5c79c2596dbf028641a478e7bb86838fbb3c1cf127c8554a563f251ec22c09488f3b2536908d59ed5c645346664ac63380d599b419b8beb5ae90c62025babed6e851a2d228c31877e1b91401f5f15a8107510a5bf6e2d5108475c61054a4f31342bfd6f36c37ebb6df02189bd1e827e00b7bf3859e75315e06046744dc76b19be65bf20b3f88f53c4cca3f41009fb4ba01f90ff92bd26f2420a8a3032f56a9e723ce539c3b0ea64f7efe41da7df09ba5c42cb2571a3700bd2ce06beb62fda756f570300b79b27ea15b6ee270e8983fc12afa8f89695fee9b68a32a756eaf7bd28a3c4dd85f79817a4f0d7ada43abd818a7aca04f82bfed339fa55e2eadae13b2509bd7c2ce21be426a8cd805c87c1fc1fef76257e5f1f70b5e1d18502b0c247c63a70857fad105169bcfc05f762b87733d1462567bd167be7ef2199182f66e9cec50b642ade8af556b8bb21c9e572dc837752d498743a0697a5a843e21c3608be631004b674e610b49a055124050d73bc548b8035ac69064482277d49612f1322cc2d9b82209791d9490a4c93d62a2f1ad79220938575696a5b9318a5136ccde3f6626de4f58af9d791c1989d1bbf7d5d16baa27e80fdaf37a63880e3a52b5f8a2e7f0c8198fa3ff04197425d7a7ac43b02761e97fadc810c6a80dbddbb3d26363081352e718d700bb63e26d6000603670907a19330c7a38eff3ba4be25243cb16c736a83e0fbe6797cd73d1592d2f710258dc399d9b2bbe338ca37c4bb25aceaddaaf685bb80627d1e4d1de6ad73c93bc63084421fea151e32e60e0ecec95969bfd6d69fba5516b0cddfdb4e5ced0c9dd731df5f33bfa2c5d689855003d2f2689443dbe20d9e41a85a82791c3d3da90b88f4d3cb4979e1b7781d34ec74808803e07acf39964d5bf70c96f3cc5f615a234f2a037f022f572025c57c6827fcc2abb7ab1cffd20fbec6390e47a7c5ef5f173c989f889f10246a91c3b2b4927b6bdb9a7a419880abdf58ccb62b74ba20faafeff2f035c156980596270ea9372caa295d6f0c384d9c68a8b52377e71eef66563f79231242b8f77080cb6420008ff8887dbbfbc3af9d37238a1effebbba56e01807f694cdd8330e87b2d0cf343f36fcb046c14e32edaa3efa412b9fe2cabecfec510cf7ce934bccfdb96561e3165b4c440a4ad55569ed34d0852c9ef0db1a56e3fa84e93dc8b291ce8f56a9de91d2922d51b2cb5679ff62099f8da9face96f03d3db54eb7bf959083c80b86250e0e227318963c37889c6258dab64164d7a954e3655f1e829d7c3082b39f495b65a672e3274de0adf1c93c7d0c6e3d948e0c0ef9507d28f8229bfa7cf085bcfac8e0cb93fad0a1bd216d984ecb8f25f89139dedd4361a1d6f360fa26786ebb128a803c420e1704006c19b7da6df543a939d50f8397ce4b3f506e12973b8487e550789893e161e2131ec623fc3742c4c6bfa1172bbff8c837bfafa8f5eae8b503c83ec89cfb02e0281fa01111c2a742a5654865871e12625825ee2dc52a5ac4ed18375463e3b6ba3fcc4bd66fe185aa78238e263ccc3c923d3a1f983399d4971a7a59fd46dd999b103ad8f26e39b140ab788797f2700509ca6a22406c741839a219ae6a3721a6b7f444f7259e80972b385c68fbb9d0a1ce657f38ce980b453ca0ac15454591ba32b0253706b6eef521bafbef196d5399c38cb2372d96590fab7a50bae37a669864211902ef7a767f4cf68cc2f04cb31e2fbc86bd19adcffcb5a686dfe26811d852035e0733d2063872c854f3bf6e1d069dfe32fb57edf7bb4abb8895df58dcb2be2a43b0555c9612c60c154d207ab22f0742717a5c24d4745826d96443acfbe1aff470caf29d30505eedaeb7f3c07434890084df004433ba0426ef13ba41293f25e4703d0a5d17558d18c485b95ceefd5ce4625fccc5deef995f418702885147443bce564c1b05f6c57353f8a522c0ea850cb370968a8a0cfe5bf859703300b1983526a349695cc87365d116ba8e360e159d10ad2e7b4317f4d371b7000ee7eadf6ef8a12d5df6bd2ff4bde3feb5897369b793fb419e2d76a02ee8bb7f4bf2275a1889abe6368ee5c8089b7b4531a3b20b591be006e00da11887c52c00f5ce820f464f75c3207f30aac0538307a7bf7bb69c158579d4b12aab6261727796ecdbac2c3214d686c83322c6409c0c4831279c38b14d8cde55e42014668655b681352f7aa804448c0fc1dd08e452624013f64bdac781519294c1be97a708c4af44c02fc053d2e181aaac861c36e6d83007269c9be6642e75398f48fcd5d76b7bfe29e55eafc2dad32e0120f22bfa9b1988409ffbcba80e8fa9c57b67461c6ee399e3d1b7c402f80249e3e26e3f4de7140fca74de286006cba6a7ba5bc189d29a2ab5a5c2f69415b5d626293494fc0925ecd55479923df8a77037d9836f44e85f85951c545369fa265eafbb4f76998b64294d96349b1a3999dec4fc866d4ee22fa14c170560ada41d163b574191a56897297a4da8642e71e22d163d87292fb9c8338e6a14021ff39e2e7e1cc79b886d648853afd7a06c1dea232f9a3f6f93a3956f81680ad3e2566edd89d529aec8a179e57f800750de715d4ffcc754194ed6f0046891b6ba05d11a4351bfa940937e91f1d38385dc1e9ea4e889c6063013c501d8ceed5d40a16045696c056adc745b35376b4e75eb7ffaaa31bccd3c6ef33ea512c52c942141a99152c7c0e236c572d9d5ee5b2c314856ea817307c7e307c4b596cf5503d5084d6a5c466cd5b89c1f452fb9f14c65f4963a9e552a372a8eacd6338ed32afafbd4507c21cbd40f210e97c50897502cd3cfa55d4c36f0db72e198f762125dcf5470b676ad865abea962bd91562a25a15d3e75ad560ac8517add63d2014fe832a87c38a02f53ef49884d6468f1a8009be151c7bda34e3ca4d50e1b3ef4a67645b65c41276f105011fd248a6b04c6c835278603a0bbefe38769c02b10777fdbab70302b10b69822acd6755bb185ee2e166631014a4c8725bf17302f25fae638aef2fa747c61ab5fa77993b4381a2174713152bd64edb1cbce6825e5baeb1baa8a6f4ee9d6fcd159864bd0e2ca8f7aef91976921dff2cb401e4203cd86b20905acd7ad2c99afdabdb16e6e95a835cd786e45f4104335e62600c3f0d067964d1ca2eccfdc9db94da720c7f0a931b827cee07135d8faac7d344d2e55340151954c08bc52700935e9ec475e0215a13117c1e0501acf9b7de5506c5ac7a37aca257658cd5338af0f3e000763f9035276b1bab46ef6f04c274167668004659f8e282921f6e192f745b53bd88b01d2021ee91c23694270c3fd081a6d0b81cecdb03b1a43f775aa8be3ababe08f69dd0383dbccff5ccf5d68ca254a7cee5fc0d8da0f5bc18c0ca74933ce15c10d239de35dbb315d486d51a60a5b91f92a6494a8a92c5f02ac6a3cb315cf0caca7a109e6235b071fc4a09c998079e1101de890ab2102d01d931e2fa0dd5d217f15e4a4b3a47f9258ec1c5d520284b0670710e369d7d39051722d0ae01cbccc68880db83e30254017ee45400f06c9a2ca036f6195c2ee849d512ce25b016407a1fbcc79381b0451db47088a3d6ba5653267ec0116912d627ad9caec02a8cd3c5ce08b0ab4df06eaa63032893985d661535cd90f480777ec3ef3661ce163f11026ea3febb9632093cc4e41654884dfa5d272ad5828d50cb64551203c9216bdde2ea79245ca032734a042954c1c9722538c3bbfa1aacdebb555f521be9ddb372f8853b5150a21d5457b1e4651ebedc1103417ad1b92f001e0a689b2f6d087fe64e2ed2f6b59ab3612aa4276035d5c1a686c0a744940278c4d63de777628bcef86b4920fa3ebd660da4508a43e7ec2c2ee155ea3be9cb1bc0fc628904dc92f24ac10e01b5c2511de3fbdb963507084b9f9e54d23973d931b4e205538842d9349de5c34c4994a73d529f92369d622bade52a7d5bf2fbb2602841d93506d93c4154b5ae0f24d696e40e0e9233e360b7c404571b585d650341586cc4e65b61f661a88ce58e625ee832ddb6db6e48c2d2e56d438777a138b67904fe6c1f29675f4d6311975ea378e4b8a3631417eccd61018aa8fcda2d0a8263b9bcba96a0cd12f3a42cc5efb4ff8f0dc39fe464a5b5b53352bf50b23f5f630c4349f8b4442135bb6b09a0b9a93c75cb87323fddb59b1f49c1581d50de90f8cc25c6f879e845d0489206826d6fc5f06abacd462ec7a0ae433a4d295f74acaec6e5fd3af49c2fee6e4768980079698f4bfbc973ea37c9101032a04977841661c69f6256274ff5ab41c0082093004988e364635c50590f1fdc7b05429f3f18f9d1d68edcc9be4555c1e4842cf3f9adb468f3b071c1f9450d01b95f700aba938fcaccb2180771e6fadf1dd68ba3d5677c94476bbaf9583407f7632e42461141ab3530354b25ae58d88e1d4faee017ee72b77b9a1dbd3226249ec6c362c4a46a3321976f2c23a1c3e10a2aab0b82deea0c11e6e0b59884d96898e87818f078b13831d0757f07df0cc295840f2aa400eb4ea5cdb9f38e186b4042b97aefdb8828af4d0a291f0e18737dd0a91a671506d72b05ed4a0f90ac4b9c793b51f24f4d7f85d7725e1c9e71c973ce09c36390eb3ba633216535e4e855dfb523278655899a526ab17eb7733ccc31a698277559ee030bfe0949cd8c943b17b4f702c7aabc42658c3ece8621d2c6e0026638bfdc55a9f1cf40fe28ed1a7507116eb191c9d58bb87bd2957a9ab64bf0e2d89b15909a8ff5126b25b48fd20729e250f4673a71ed3189a9b5500a9dbb15ebc8cfffb5253c7307d7b38d26f912b1c54320bd39c5826c1dd4b493d17c22baccdb2683d28956238b0f081854561cba597fd4d1fef1c359c800521c18e75b93d67c09f953b55b83dafb438a9b4e442b90540d6613739bdbb278863ba63af00fe913a479b3b2eae9cdd33ce104e9caf876f917e7817b9668f10e6094a87f801464982df2cdcdf80e0e1ec09e4e237c3ff9425e59b85a53e7ae631d9ccec096f73b5482c2a7bb2ce319e44745a074ef04b7d1a2cc8ee16ae7220b2a564c8f85dbb61994a506f89b457ec8285ac16e3205701007e186f884aedd7fa0695ba10a9418fe04ff82587b6595a90624fb7de0cd9a3b5d9335f9332e175f014dbb64f9dde72d20665a486b7bb79f9c4df781206df7b2d186f1eedcefe382d4018026f68b0751f678f71c8d1d6d3c89d8d4daafaea295fc2fa03637390ec904d82b6c65ed5d0f49f5d57fe18cc64bdfec0720ab7181a176868aed73496857041199bea9086d3fa559118a2e02bb3895c2a89ae2d01b3e5f4bd09fdb350f4922bcd1e9ab65ea5b84c158b2681bd35071d6398a4a69ae558eb67b334991aaceebb6af80740ad75f1d4ed61263e55a6ce102108d1e100bf190e13476eadc265c75fcc5db8ea2c994b2a15528c3a8e7eb3fe257cc4132ea700b8c6fa864df80e558c40d8cd0eca9b378597e99a96b1409fdf3cc73b755c5e83179deb5d04cada8c727c7df4a08af87c2823438161099db3ef3f6cd6d5b4b5d2d85ca86fa1c6e06a2f1b4ffe97580bb972336d7bb07b32e8b5f634dd37955d608b7f22ea1a294f5b5faa033e02ca2e0d6c244b31acd0fd8fecca477dc0bdf202154139f2995459cf18b0f3f2b8d407e5899766cdddb30befd6b1a4db8e0719265a44173bcabd354c5a9e3c663ab44918a99a534bbb72dbf0c83d643b5d7f7be6bf35a24a8cac96708ed6044249d3582b369e08704f65ba030029a7f78db1145c5cc176949d4dd99e7a0dbeb795d4dce5ae333045b4cd93d788cd36b47beda3cf91ff6c51dfa104cce02d6c0ab7d0dedb4219bda82cf40bff7d3e500e425d94fc044a7c126c6dbb1710b0b377225da02c8633a0d81817dec380e34f0bb51c6bd3f95786f94ee1879b10e303a5f44988cfcff53650b997437fc100458811b9925ef0221556b8ded243052f326d3bafe24ad7a252649293cf8565349f897c966622e77df21a438d4375602f87d7e74deeabfc6b50a68aed8e7a74a16ea63e67d2536a0bf43eeae7a38da9c94d8cccb57f4bb91bf34cba34271a8ccc0b06033df4b778d381e86a926ef7e3ea46e3b4e964f286ef5ddfc98132df807289342588785cfcf58af76613629e89f36cee9adec165b4ccaa1f07974f681fb718abc520a7dc111851b3b6c187e0196fc9eec0c49bb5fcd164f54bd5a24cd032328d5be0cf61ed6f54f7839f19aaa009ba5ebbd3a085a0de8e588944eec4fd9d7f7b3899681ef1ea084dc54d4c0fc169581dc136dd2cf5126c2a98394de8880880677504c519f3101938f3c81d102623375344634fc317eca4af670815f50e5fb050435f6f987efd31658284ba0597dad12bb16042786a54691c6ca49516661d8e1ee361b01e9ac932787a2be9d700fc33ff5792eb33908c103b257fd38d6d0ad7f9f80c59a8e71822253cee50c53d66ab2409f165848e55c525c5beb827081f0d80369bcd10b7ec891261ec34dbacddbb08f96d0a833c399bc70668b37bb52174a5b88740bad9d6799049ba669037b75d90c6c1a768b36c481f686b23ad76e50669a067e6f3dc9f579f5f8e33d9604a8101ddacb82696ebb22455a5883f6ca0ccba9e9910b9510d51acc94784ccee375848bb7e17d732be983fa373f3db638fc6c6f0878a35a5d3adcb24b54639f8998b1737d8b2545ba99943da55b33572626e277e42adca882016287c6425ec4363fc42007e4f4cf4997455dedb9966c8e5e90f3985891b6b1eed2aec4c7ea0d9f9b305df12773735e5cf8135c437ac4b5272f89eec947c240b97cd2d55624e4fd5a65ddade673ce0e2e21160d9096082b8345e32129fbf5a610e46c495d8d6752d0bc5915d704bc58528b19443bbcc16444d514155de1c9f27db2ec0f8ea2783af8375590389b19d626f92b58bba081364ade4ab1fc05c42bc9ad7c590345a57e3fd35b2e5ba40b3abc78bc567e7da4914e7b7ebf5435936c0f79e006d96c706a8e87245a9e5124eabb03a4f985f9d4b46ae65fcf92a52902ab352af234bc9eb46a5444323f1c33227aea8967b78c059715713087421de8f20caad5963d99a16d88c64dbc5eb244e1b186eefdd9a8cb81168fdf738274fa205547142f8544287b14b62d54e4b251e4fd71f34036c72a21451afb16a6a06283f5972d73b103e1cd1152be9ac8e2a7b45e8c0a376cda0b22ea64b344f6936a64b0f07ae3aca04e44036e6e2c86e4bb94283f9954b0242a6f2e6da38bb680443e7835a8e311e6063ad111b0646367e4d39661998cc8371239275411612125a29b2e2f6803a6833e9cbdd9627df303d4a3359435c1854472a4ef196d6457c27d2601a3b1eb7753c6ef02e949e511121dc74b08de9867db2baf5b86ea1c6daca1412df6fc5311c541df0ae1e0f152df05defe92b9185fbff3ed40125e0298c0f5d25a024802bdf7d6666be7039805394a55945682fc82516aaa91dc17be52c9f6c7d240cdba6bdf91e8100b3f5d67b08c75a4054e9c6b348ca8e13afa3b16653e7bc49fda50a433e01671753cb8bae76162d25d8ceb597d8088abc06c84093bf315220df3e749fa54481f56ea1a00f4b077b2a61040449de01686e85e0a8e7462aa0f28678f58e3820fbed5043c358843332bd4659ac431f7c020f63d293f864c3d95d87be18ac8ffd28ec6d5469350ec4afb256782093c4f52760446b4ad6b6da38f23050e0b8a3d460e194be961cfd8c9dccd203b42c9de06a9707d4f787c7db982da473b3128cc7f6792b5e17bae15359d6f10d3d7bc7e554513bac00ecd5bbf14d665932410047105b6fd2f8c9a0dd22b88ae8e8c7b2eb67d017bef1f425b020d0fdc6ee0622dc3f0ab7a35ae48325123feb8d36276f89fbc22ebd3c45bba33f6cfabc05985198c9c7be244b252083bd74af154489d35afd50eb3e30fd2eb45fda361487eb519185d3ebc3416df2fb1debc36f342db63e6f1f12a7d8dee73a223d3315967a198a3c4734fa5bec43cd8509c4c645314fe4c8d2768cb24e98d945e3c2ff650d0db8e125392fb70092ef57495698bb84d3e738f867dbfcc85e03456db448d0bee09ee7fa015251b6a207234857f43a586c0d0c01a47ea724727d7b3add322fa55c62d4a0beb5e19b4e8c24774b710ac8fb5c8149e6cee33cff9f7a6d934af0cbfcb0bd0ff9bce4469c055b9a0ca2fec16b14db9af51b1169cb88c88f0b30f74077ad5db4edbafc7067b47d70a658b293f18912cd5e4b04a8c2861cfbb7c98aa6b958973fd4e1b6ad10dddd2faffcd6cc7e441bca926b65c01d5fde2df6a5b0ad02edc24f748d41238697eb59ec11d546ccb25cd06e091263f4ca6883068f858dd8ea9ecdd68f374c3d6fc422d38b764946d1f3215685bdcd35ad8322daf4197404a9f1ceebdefa0e922d3a6e34abe80fdd2b76d3924bda9edb45f1ad365b31a033d6230b1e165ab98f8e94a72b317000047daa4c37cc0fe093496e4297df6c354e8ce0c0bd9dcf86205b3e003af2f3a99164c385de1f8199b1e7ca3255a4b413dbc72b61d0a33059b306280d0dea15b088b326eeb0ffbea3bd29009a6a19e02146e55a8143b2b9630f7d69355acdc83c6841481042b4a13d6861dc7060a4981095c05950009fa563524ea74f9eeaa1a2a62d513a7751e253e05a373a2476d61bda15e48f6dc878dc2ae4d79343544354ee1ea02373e580053ac4e508e42ee6042cb2a7668ebe6220bab0ff96eb4836bf415004048f76c4a61f6ca79d416dae5c5438b0336eb4bdc0ec245b09c99d6c97591be5f000fa0b6163737716fb95b1d65e52cc6dc4b6a26d8b43210af3d9a684888cb9a76a66abe34a6679fb8c68d62efc7d18b6d73acf75603e18297ac07ce200df09379403ef6f2bf6cdf3dc3de0df10e6d556bc8e678e2a8b7f1a1e9e3f8a4168f2b068cb29da6b42a2f10cae9f0738acedbcb9b1bd712b0883ea08923d695ddfa85bd95a1239638210cd8b814b3662fa35ec6e4f5590311570239fbd2f51d7214cabd176ce2a8fcd642356643db38f01e4eb5806357cccc998ae8c32d3958e5f2256a06afb28662eb33258fafa9577d88fcf94cb6d134d9e5b21c236e0ea47931af56648afc32cab875787336cbbd244d67381c92804dd37200f514256aa8a140d7025d1cd5c0bd169681b2a27c8e2fd8589486f66e2e8a38818cec8e3f81320d82c8acb3b62c761b1179f78283d2d4a76e4718df1d47dd24219787eae2cdd09465d24f2aef26495fd6ae1a4fa8752df3906673c2bba512629e91f94d5018d1ef3b38646638f5f037a046548ee0675f650a94abc2db438820f663d04e8d35760a9de898b36d2e3fd22d805c044a77140593267b3ce1be22504eb0fddffb4bb48d630355b0ac8a7681a5ccd642cf5c7366d71c633de03dbbf43ca7f1b00a8c73f432125e15a55016d39da3299091478b6f3abc0303e0c7bbf88074735605ec52952fcbb6ff660e1fd54a7a9c2e03413fa6540a318c8db50f64605d2edbfbb24dbc267032899da28c193b41592965ab7d143fa1fda8faab035f7673e05c7d3c51023be084299a31636d3c231828761a18bf4237afc8ca1bf8320a71ea025a5791c3928aa89d07a003d863de443236a62b1a5b101acc575580fadc6b7697124889343cbe37022069996617751f00a679ed83b5620203eb91151c4087c3b9331036b013c4eb13bb1f7693b14aeffe227521ed1f100c35bcd320fb0659ae6fea3dfcac544f44339a241a968f5f2fd902ee6f9dde96c704a6a6cb5994c2fc353d3913d69001f73f3650f81d07f45819fb41e19ce0e5fcfbed77c637613bd58fedc6c8baf6f707491fccf8c1bee09ab74b48c37183a28852922e1e60232a6d8427a32c4a20d8cf73111de45bdd5fe895fea8d4ed422364d24aaf6ecc8177032fa0b5aee83cf34d3342f6c3d138d2f4862d2d6732266a581dde1462363fcc02700cddd9aa1ff61176f66b49cfb110f5076c22e61fc1b7973fbdd5f73c2b2b82ba36676d88f86c3ef93e8750cbda4fb4ed32bcb20be37aae70f95dfb80c26930c6a0d9494cbc48d23f0f5a65c1ed005ff668d40d0db22c1cac55f78a6c299c97381fc4f0dc6cab28675abdd19c8b1b18c335bd82b189765869f937569ca249dee31abe35eed0670da2e071977c5d029b599e0ef7c36b68582cb21b91f229e3a313a258bf10ab8645a0731340adf9d0ad9fd6347e06009bb9da6c659c3937552bd0a09b100769a1b871ef93ab9493cddc31185c7ef7bd28d5a03f8f071aebc487db29b9bf1a977360783d6a0770ce245e0dfdafa48146d052ebd06114201bd1c6cfc5a40850e5efc43813c01cf0677933411fe0428246b2c4d5f2b2cefb4f1cf1e6615b57086748626d48f3c99326351d3642cc0606505b2c535d03c2a24a5ca2e40e090194f955ec4e805e311bb4da00fe323e14d118f09176d30555244e21ff0a8c1a4ecb7526f7649429dc537c70c3a4607b402555493a2f08f83e72cc50c56e1e0b2f51baeb4698a4a555291f17d848280682bd3eb6eea2242ea4730793920550abae5cf041dff3f28e26a310e82822507818a6ad48ce5535cacae5af02d0445578a4176bba4b5c6e6481e5368d920e8fa9f4f83913a914ffeda8a990ee7b0d8c9197c7feb558e87cc755436147e1d720789b738fc12d6d6bcd512c4cd22e7c2fb494362ae45a43d579a2ffae56d8bdc7f5e1d6cb4e7fd7128d9b679074476ab08d62aec8c873af81e4a92a428a7fe9c051368c1cd282b12d0ab7e1cae9921b4e0ab5eea9d3b3aa0c619235344e9ac828428349c1bfcdf358e86ad275d7650614fce7515031b4fc1fa6a29de5c1b50823e4d7287a1fd89d99b16ae4b4fd677ddd88777979a3adb4e7f169eaf15753aa6bb1b5b16eb212c0db490e71e4d1708bbf534fb7ad5c37a080d8088e244eae0d53c4f0eb2db7afe3e7956897fd79163bef82925f094e1771560eb5c3565774b7279de80c31d66c28e72f577926f2a7143b1552b0540196eeec394a49f63c4c6adf9728a073f490af7d4b339e77c660a4dfbc2212bdf9b2a9f9d3c502fd7c00fc6673d04b88bbabf2b2bf07e4a74afa5db570dba5a2eefe9cf185b1a76d9c66020918ee4c33dc9afd21aaa71d5434463864bc6c00114bc15d18d141bc56cb73ab4ace8a7ccf10c6404c0ba9f3d8bee127ae23be92d747d45cf6f8279a12ac5f1f42cae2e2d3210046af4e724629b889f6abc904f2c5240865652e38859d80219c20b8e4fe917e5ae8f1eb57c2b388d5f0fef2a119ddb13a6fc3ee68ce1f180c4fa85d573c1022add015a87a1def546d019b16ea100ad239629690884670c2b937c58494231793d43279c148e108effae7b8e6a57a92a4e5bd5fe569c142cabcae2468d13c789ca4488afbb1a46b4fd83c94cde56ef34d00135954aec0b9b2f87cd742b6811ce9439d0b3b80675d1d852da4a49d372f3e7509a0c37386a94b9c01ab31eea3e73b08c2c1d41335dca8c3c4ec82d7928268e210f5ed80ea2e5d8fa554df7d5de8b2fcf3db320fac6b33486a3f94672489b0df89a46b27b6ecd555511c5c29d4b4de7475bc42fb62261859a374e8968ea1963cbfecaea581efc86ded892835cf56e4b28fc02004886099818e0631143073b0800dd7a3b147301b8cbd2ee78421d1d7deb4c39b8037de7e6d91a7cf3a4a093ec5f5441b26f3fc2f7c04b767299347589f3ad7f0072b1ef201768b23c9ee49a0868b8fca0f3724b93c20a6d57321416e3cfa33069b9927b4e0ca803f53eac78a77eaedbaed049a4840b3d3b278f9b650392a438b64d363fa367abcaa7c91d812020bf3081fa1727f36e80a0d7509edfc79c7d7591be011da16e1e4bcdc2e7bb417c9a9ee37e230d4473eeca1120dceb9441b4ce1e44f9e229a9b12cc66ba528858aa2140c061dea89899e989efbde0732f7a35fe6268628a00b41ff6b18f1640eee797213749c4f7a50ecdd43877f4518413c48342e09ed0b5a02bb92fff6d15581204336c3ac8a902e818585d1576ffad26f213230292f40753b8756b93b0bd57be3a8ae66cf249fc0c18f0f358b2d9f9631e7729a32a1747e3804f826ec994a1ad5d8004aa77c7c7b0ef935f1408ae189e7c7ba8ce1f9100b09f196e6401bc3c3ed0a741c62780f7299964fe0fc7443809bae00c230cd4d6e7117910341b23b8355c77653441193cd47616dd0404a14796629ab93ff8fc017f96845fcac8e9c0487f4a5cfc5a1994088241f462d97c5f09918ede9dcc65271adc54fe92019b9766f00ffee08d2791f89c539fde5c2e22e4eef6d8e7a7674734202ee374d719837a0781d42f5fc8c03a39cd4c4be40dfa10426ef835ad4fd0220ab61117fe30558e12b329268226eddfe7754d02cf3d6df8543beca49346bca0c237365f6de962fa54b1ca277235da405fe299d2528bb9b035903dfb336df441bf667a6fd5d14834131bb1b5b329d406ec5b5dc5d60c50e2bd55ec33cbfa59d90cbc1da92385727b71e5a4ff7c484a12a4de3a80c483eafb19832f000a913d0bdb2335412203a649ce8e55658ed6bc70fd0a79de2dbea5d809500e91a7a99c8ae1c6b935addf019bed1ec1de3eacf43a38593f4d5c3140ae50808b94e8d13789d421d6657bb62cace5a37502fdba1edd1eb87ebb2c97fbee1603c1789aba73fe2688fc04388d4c1d422e55057bb8345e1ebc89d29c02cd1301bc3665d4658519f7833d36a69abc195dae9a7aff7e194bbb8ca2a802cf2a6d5f41c307bdc24f66c1a562d11212e09f864ea8456ffb04bf1c06e46e12ed03e9f42c4844d580bcddc3b37471d9d4cb5d67cecb791cc53cde9f77e456257ca573142987f6204b93496e5c16e65c2e92d86f2426c782373be2439b3a1e0bad022ca71340ad1ddb242817c89784bd952feb62489264b2a949f6ddcf80641132cdeaa8742660e43a64fc08a0b9dd9531badaada55fdc9e455211d04c7f340ce531ee3d747dce8174c91ae3546ae308380aa47d4ba8b629d2a3f4a483382820423ac449ab4dc7acb80e8357ec8ca22ea09bd34b4418d27d89835aca9f8b3a6eeaddc8b6b6c26247a25d937e192812e5ecf11120b07c1702ea53c90e15b1db2d4deb3d191f454266ac176cb3e58f8dad399e7e539c1a4555f56faa24099b070afc502e391b55b91d1cb3c5034f5abfef6833485d40303ba08fc5641af9ecb2000c04be3474712098033c82389b9e591a1fc2731248e7ce4cb31c28280ce3b5113ee1e2519114449e7a9bfe064b081bec713e651c5e1ca5e9a6abe50dca7b64d3fa6a4077f431c868ea963ac631fa2f1ef5ae580119efc4c36b29e5d7f1be758cf90888f34459dd330e6b2a270cb01175b0ccc2a2e3bac59781a1fb176d98710991c916848585ef3d488848e1d62447286b3748496d39c3a9aafd3ab46ee939b9353a87947c58558b0a95df62c0b54808abb7bf4b88112a8ff7368caa204c9350a52f92505fe1e9f9a2e8c522a418592cee0b57751d6746d5d9f43a9c9b153366c2c4951998851e2c0883375175d5b76f85de67f30b8ef4c97cf17a0c29bf5ae0b741be414dddabf4cb2f46138114d6977b6ea8c87b2c1b9d13a0221d6a8e67a99a1dbfd18a125bd7bcad2e775053f74a869a85bd429ca0b978b3ed127f4ac6406d9a858a9adc47d9dc2b00fe7011dc885ef23f4a6eb4c1a752d1c0c8fb96db95c4a136bdf2fb6000524a23fa21876d23e3241a45f3e4a73a90889c108f2a7b038d38f099276f2518e0ab0288b95216835a2b247cb3c9664f53fa0ec11f51a2b033de563310130ce9f6000862f23f899aece8dd9838d8bec8908f6fe290a071ddd81c8612e74255f67370428fefd8f13eaa0e39ead765e4c7560e8238ba28ba65e286d8bdde79f9a78b27705f05a2f43b2b479e8a363308cd5371b94760fc0797159e1bbd080731b118014721db67fce073c0b4f24f7dc980e9f4d7c2f0a5ec477b91246377cb0ba8c8cc0c27a572e005ad09e349ff504a09e6f84fc3dea118706ed15358dea59f9712b2462fe7aaf823d69bc4dead6ca99ea4f51809288aa7ae375f59c309184f1e35bc591f2c08796a4d141248d94f90eebbc231acda59cb87410106c43772c26c7e08aa502618d4c523beb7be841448326d7283acd787a5105baca852c34b5ba59c7c5d2ff03b652996ebefbeeacb8b7d46da96306d58fd501880f15df4be0e5061d6d34faaceb8027e9b5c4593cc6d61fe6eb8067052434cf358f75548586fbcfd5ef8d619ed072ee9412514d8e2cedac439c535136c797e9e15bf399280ff24f4c2f824545483131526d1e87eaf89ecb7ee0810c9e986bf298d3b49126ff3df59c8caede5b00954afd1576e840899c83f5bb069fbf8347ab1ccc5d0b1c4df2bf3a11aa836ddbd7424609661771581d3003e6604aea2770226a11f6aa02bb3abd7723e46dd4617e9ab5c1cc31c712bb366ee056e77470f5bf4026425767bba06a955e755b445deb5d59bc53133633ba5f9141af562f0caada28fbff5fe244e99595a4212918b65210f4a5579a9605ef1fc53e79eafe2bf1e009dd844eaefc3d450c30247057e221b1a2460009c70b427a241bda14bd2fbe8f1895c3bc3cfc556e8881bdc06489882224cac4202692fe60dfeb9ed740e8f327a2dcd44cff20d28c23d70f40774395326402b17669d2c689c8f8de5da7171c5d91847032e37796b272b4f6ab4c2c306a92513867934b84f18ded8f7ea3137801e9f96d40630a6c65b811a556cd0ef0001310c7bc9b2044d4114f7531bb14be14ad416ddf103db1ffe3038b0cfcd86b88eb8122175e49f25bc78a31d0c117a0400eec65b58eda49ad82a6b13188e8390d1562735132fa2cda6218a9ff13942c00d7bce83462c64f0fe23f84f3164db3a6606e59003c671960ee763a9e079e0ab427c8c04c287ee3dc76574fc61c4f166bec77d70bfcb5c0247d2d5209fb85ab70cb8c0d7b0725221ce134ffc5c1f7173efe65435383457179e16a1adaae5b4d385f55c8deb0325dd52841065489329015642b9a9ca42f64ecf163452bc159b1197a063c3e0be3aabc897aff49ac087973c1ec1998ded5c78a87be3427ece98b5bd8147a938489de82952b54e40dc68da7ae701b2a4f5745c340de8c8bfa4542f9169cb223a55ca9204e2235fd03204c8fbb0b799eecbf4c4b17690a8278ba1a86cdc4029e4046b46e51e7c59f6d3dff0a5ca051a6fd49a8c9b1a0f50c430c203e0db4cf0244c3a1447397358e264a4e08dc6b8f494159a19adaad23e57539ca3cbc6e4c25673d584bb582591cb2f33da67c2d097b11532c2ed281c008a30f5f4316c0bad7dc87413cbb27eca447fa77398485d6c400a797a375a5ad3a08d913bc0c8563ac69c927a4632387915ce853d01170ddcea02892a301eb63d6e158112684871e4a436f8737c80a5e2dddaf3991408c61987f632034e14ea5a8c6bd864097ee5b6e1c109e366dd43aa8be9289689815bc5eea3e4a16526d63881aca3b8f03191f1a901e3e44f0af851cdf467bf5facf0b0de78d777bab4c41e8ed73f9d7d95356d94623354fb74f36e76441758aa4e77dfd37bd3d8adea2810ca0a2bf2677259586e414417a5d006e98e1d0cfe865e72e4cbade28fda401631643ec1cdb890c081d7035a4b246593c67f061ad70f302ca1c72ecffaa60568f17b0943a599a6ef9d8386ebfb8c686bdbb238341fbbb61b8bbbe2934113d40476a5930da72f45590b98ffd18623e618fb71e6e7ecee3a6cb270d26b0e979b9bec65e03948dff7b23b4e110a586ca5b31c2879b63a111ebb35837bef5d91deeb44a9f74934f55fd25b7080fc5a070d8f46bf33b444af46b70cd9d10a1050ee8e3a8328967f20b68cb588e6700b68709832494d26dd51410ffc30b48e65a906380f1ad1684f62fd1c87b49113423282a2e54201e562c5d285204c84250ee7ce734731844e2548a4e512c150ca395c90fb37c9057173892af1e109dc0f2758c1fdb2304b06ac0dae6504dbb3323c748be5e42227d75a5a85bbdf078e7bdf2240bcefeb3c29a4710abd32c2080a94cf5f10cc9c267e2ec45c1e8370c66851687ed6cd1432ea0d2cf984fceae2cd054a1782f9c9abba2ed2447cba318e981aa4be0764dbfcf2df2c814f83e5ed993a04994c40b0b9aaa94c59258e4bbb37335035be3c0ddc757718cc10c903aa60ecd74e8522d6d8200741502d6620e40b9122f386727775ae6849d9e406095e047e9b61e910df632723de1dbda80809ddb8b811f269dd21c5b1de916d092a818e0150a3d614ed817376dff61603fe4a99723bca79c3a021dce30af5518eb94ed3ad62f352ac8d09c6eefb0afda058239a4b3b92bb45d281c6503eb6746154b5ad5dafe989a5d560b96330d3b9192ad3293856544a476182285c940bfee7305ba3ffc583e3265d28fc61a3310d86b668e282550a5179f02290de7dd57f36a4ef88755e64406d2ed38d2f9e401d8ef5555a9a7f99a64f832a1bfd5c96ae06469f7ab6266317c2c834880b0685f0e2f53ba9242e5d666b0de1e80c82494a021e186259b80dd0d41d3d4356012114b4aac6d7c9ed36beda02db08b22284f23a1f16f603d8e06af1f2b4da18dd2dbaa12d48643d23d8c88dfce67da5edf0ce1a98c1e2816e56b96a697735712c4286249fd0b92eafbd19fed10ec13afd0f22be69ead163f4cc4d0d197e3db10dacdd6c6e99b8559ad79d0f5ad11d250b90675cb0ee484b2e117ddb60053749ac05bd6d92de233c4330dda7a0e856b4664fbc569b31dc713b767838a9d2a263dd6b8f07513b59c3944d0dad9901644ee6ddc915bd32d41ff829057a55ab716999cd40cae88440ba3b079e3cd7897339d7fa0c018ad38b02c303166388f25f0bb61e035c8c45654f7b521a2440732b061a054717cb93a7139f53785243252bf0db79b5ecda748513efa94ba79f0150c95719bdc27e33c6c0c3199d28892e9aadae217d0d3263fc18987826e23d12dabc3f982959a76401a02b46b3a97dc2570171d15c7b61d1a9b20bf2f4a8c20cd75055dc3952d4e03f08c00c8f8b0848aa5170e52c5f7a4097e11feb7e571135ac374f08c36eb1fd325473ab8f1f26d690c26d80595716e478694664dbcb1a982aa5c239dc222d462903e47384d67222e892e1c9ee17e33787679ba247618da4054ade4006172684f60fd05caaad497e2e8a48795e7e41db964f4327538eadffc685b9421a129d573d68ab5a0f64ac6c5c4ec24b1612d704a7c479e2cd0439803c9706acf09e7d0df97b3e4a50dddb1b21c76fdde29b1e1bec596fb8211735823ab3689486c7927f978b98b0efa5b50f9eb83f68ee81c8511491641e578d9c02ce64c203fdf6fa9706e23841e638f773e4310898fd07f0b331828c215edd7462960612b8f0ca648cf644a214dd88dc23017eef0287531d2e7104214f2a245ce62dad94fc4941722e1de431f14cc942402660e50ef23d62552e4df8e21a896dee36cf63bb4390d6f9ab07c9ac7e69b136dc6a85c9215b6d46477b2600828547217c9f74441004a375ee1e08efa9102c127204a69966b2d85f397a97d13973bfe553cf1edcd08e4ca90d4f0cc0e35a06163fee107dfb786392b1d1e0eed60e9a2d02c0bb08fd4fbb33f195082fb815eb8e3fb26db7bd3697e2387b84dcee6f8bda047bc27c5d3790e694fe2bc9ece3923bb6b2c0fbe457beb2dbc43ed0bbc562a8af36034a1944ee1ee57dd8b27e3c9e836084becd4401a568859666c30e7c7fc06c8f35591295c53a832157b0b9cc8104b59e4c8a7d573f2cfd2c5f4fb858d4f6eb770d1eca55b3eb0382fe50ea21445e9b0a7b218f0c0bb28ed76c3718a587a7d2739cd7dae615bfc8fb22cceee7de217476bc4b0db16da18f6344cef36bf551f00a3fa1789e0559246d65310cf22114e3b56e94d6156fd73be692a5554f1ad9b35a320d7ddc723d75020bc244d4657208cc3b6920711bcc5efa7d21b5ef4e45cf57ffd7d12e86f7f73fa9367339b635cf469ce00032f82ca1456db2937c5a7ab368ddceb1676462839cc0e4f1b910685118635dfa9a62ceb4051a9c7defc66da9b3b61c92ea05bd6f9a3bbfaf8368baf6b73f8fbe07c032df26d103b669939fc3f95d59c15513a9f51ad78e8f797ca037c77e7b9cc03e08825d38d2c0befcbbf9618cfdf218c50f38f3f9f7c9d584ee154093269d7818fd7c475b5d2aaa11dc0060ba812d9f39a018964534506a1dfef078a75aacfa53663d43521e9c08abce1b46c2d40013a8f49faebfbe4e3d14ea85da424b33981ae4de1ce7276d2ea770c70aefa0f9693fe3f86774b786de15db73b842973dbbd111587eb4c4c8ad29fc04a6ffccd8c2c6ae9adba2762402162a708491749b213f8f503d94984cc248945ee5c709e790e4e09199a7e09ba6af3dda8b51ee3a312791059f9b39d3add0164ad065be41a2ef6b3f8a4a4ff2d9a9980347ac69ac41e46a8f9fbbb76ac1f0898693dd1d8be70d7238f9c442602a89fee576796486fedd2668d1f538254b137a77188642bae6e667a7def815a846bd33056575cdeb12233a24a33fd1c14ac039f6bf94d70895a3da479257cdc61d3c8fb48abd03c2216e172b3fdd6af891ee9ad14ce06e2c7cd659cd22155382102897e3d9186f0e92c03689c482b4591cdecc413e108c738b7b588c27617dda55eeb93ff454118a646e9fbb8230417d42633cde5fd6e683284fd1499e609dfc540ada31a1142f7693d1135b636fd14f19e88c298c03d945da8bda569846bde6f98d0b075b9e01d67b373850a3360ff74afdd16b85c41f74728c6b9ad8dbbca8aefa86a6e7e3a7cf5a9e6dc308c8e98f3e460ef2cbabec5d6d69cf69ddef8482a7e1a4acadd25baace68317ca35bbf50d93d1d18a3747dbfc15ac11097c45f71aac0f9e4f0fb8c974782bb45e66321b22ffc0d39e23637b82f81594ff67169142bc918cc0ef622e1b67b83747802dab5138362e17e970345a67eaa4cebbf0e3c49495a737d84fd5ff91eb80647444a6b292dfba67fa7f225642cb6a5c99eb1717c7a74dbe9ae8d59a41ea5c15e541bf9abbff973c9da97f103fc7f266334307bd1b45a0bb5becfe7fde61831a6810fb5814e884f99c10ae525a02faebc0b7be7018457b730724f9e033a0b775604893ae7e6bc5353401db44054d09585cda78c70701994af8601a22be7c215c4f03cf0152609bceb49bf15b21084e7171d56a0e387e7bc2382b789a1e8346fda106f578b10b7fe2264e541df50a63271154500ba107c98e906b2bb333595172be6ee490746b4ee75fb97ecb448965105b368bb3f81e4a49d8d77c5ef8b96a314c3b0b7cc748bb9f96d8f0c4aefb65745ebea8796a0f743d11ab9d99441c02f1015a824d71860cc84311bc5c715147129dbd5b482e9d992cbf0f2c7c7adcc524916ad37e6e6a2110ca579db0120a4e0c9380032c2077c2921dbb4b5013d12f7dec60310d5a6c8e4ed2abb378619e4b5c2439680ff57448cf47deaad640593a4db5409f30be8ccbc6482b42731cd9ae5be23c9f36866a8ae63f95064254a6e88834c8d59ee474161f471f7b02df072ca3361c99d73b131c8a90a46e98cc86dd2df5543bc050815ba1815bab73ddf70e9c14b30f836049f24ed12891b7fc1878c2b19da1421668c5df64818bb35960b9de3176eaa00001a32826603ab8ab11868503789f920481c77c77cabd3cb349f0276587c55583ba27a7c481064acab4463629d5d7f542cddc0316aa172aab08ab28cfbfe26041115213de4feb6ac228e932dc73a1810156730559578958b6b91d5b08604717c87ff06d661379b3eed0707e7f2dab1950ce0e13e9bbf71471048dfa22040fd22acf94dd9b37c514c831fe55b9d02968bdc035b90f43eef933c089e507ded2565a02238441c9e920a0f5b418d08d32974e494ff58a21d7eb8c98d3602252df59274f5cc5df64145172bf28a00dc58a2235d4fc1a3547e98edc5277087bdcb251d3914d5cabc0e1e9bfead43ca4646578be9e700efe36e9ef9feda9a10b9c40e7b5100f7390a6a441335a8a26fd5db2001fb4076975bc079162846122136537f243a75df71e40ce9e178a068f32a98cc32b0ea35f4b24b075719251203181ef7de768a28c76713ef52b160b2a679577ff2ae8d66b0ca509f43f39c06b688c2eab470ead36ffed69a0d5d9f665efded0f804c258a9f32badf7adfde88625450bfc743d35383ae25580e6f25f965f6bed313fc99d57c16cd5384ef595162527d038e7f7b1b8945cf513daf5e6a744d4df0cdcc89dd86dde8e6d9596f30938277c20918359cca86f9e9cfd1d3d25d904aa349a137161ed5786377d4af3f89233e39c470c1a20b9cb246091068172ddbface6cbf94cbdd779d399b0aa62b58fa6c2c38a22ae802bff4ca14dd02c25f95ce3239de79aa8820002ceb9da251db798e3da4425ef22656890c6e645a8e08484f48d247d39a2daca1e420f396ba33ede244b82006448a22414d18d8dd908a4e5a5ebd7f36d86775686ad784791b83692e402d08e55cfb3394a1110232f4426ef5aeb84398bb9d7a266b517324f28433f5bb60d98a60ed83572a1b9c8cc52b764a1668894e6e335b0a985a3faeed61e9c8ab76a7f8c3518fa86a8a0c3af5269495a99af3c6d2bc93b2ce0c9afef0dc086a609e97cf30832c5d0087f265c240e3d82584fb558154845de8eefc02d80175d5fcc22ac888967d95f9cdac721054078bd74e3d8944abc782f6714a720609eb1ffd259a9465bdf5ac90e9d14db121854514a95b1588d9c8eb449ed8f1469484f94cfc77dfa0ae01b3eb0113360e4989515c11281846a0d55d0b93623460731221996d0c691303a81ca67297a8effc9e8c4255a4211d43bda36d0cbcb3a4c1e321add2829a35ec890044a4b70ee987bbc4ac9eaaa8376564f22352845d59d614fd1b55d415b5a85b9e01d075a5f16eabbf1b08d3adcebe3a870f61e5a1e79f15923a19cfca4f95a1644c90e84ab6e7de352cd71191fd0f2e75887b82a57507b60e65d8b0963bb0781b0d4e9cb4e550b8691e85e429543211e8a0baae796a80e4a521402438923889a10046bc357063b4f366fd087467c9815af1a2151bfe949a25111c96d691b3ddd0abf8d4f4bcc1ac93fe3432f38b0e845f11459b2d73f3e6f1f14d50d3e03992448af1b29f61474fc20509fbb040a0ca1a6ffcfc37049d641ad0e568903f28fd0f1e9b908a635bbe240d65869410cd6efa5a01110f051a1c029b452a42e1fa071f0e5e510d7bf4ac0681f3df72c2bda28187a1905db96dc22fcf75144c9c59e9c307cbc98af1f48cfc1137332d53ca372cbf5f37a8648048214d68fc7960c57d9c8bbe32a2659f8ac7c15b6b6bf46f08e9a69c23d0cb92819730918ce6475e9ba6b32a557b978ed20538f3573cde3007c7483a06f904868d44bfead6aaf82d6cc1a9916c109495527e0aafb95c7c66b259c70880a21b6f8fbaca96e7a7f84a59fcb0e7a4c328cd57d9bf0126e40d04c2276ce6682b34c185165b671df5886a4644220e729ee239765ba0ef7f78de1f6bab9dcdc6f8cfbcbcd7173ddcd6f591a18751662e51a16614504460dc060dc06faf6e23d18f960fb7e2f02cb14814b1529144cd0f713499caad04a2b6bc018ae83337b44ef38948ca6652ca8cdffa85f42a92756ae87bdc9511696484c928cd6cf9e71358ae894e10816f562238df0627cf6f0c6d1680e9c22744296cf2cde995c6d8a9741a12975bf7e6ecc9ad2a5af34e8210a9e70748d96c38ccd277b73cf0e6f4087bd8a0b93fdf4e42c89372d65b6af916ffee522a18fee9b01e5bcde7fc1a2d491557f5ace1314a4352fd32d33bebeb36ac457362442a43b25488ce3fc402247319881b696f9d7475bb2f62d6cde78920f8d4a707c49be782a5a1daad5331d7a778f1ab04705426279a1600f88edf41ce4d02e88c7c11c9bc361d0b54a506e6779bdc4bad9d416628b30734061d3165c1b2e3d980c0b2541a49e19b25e0637db29b0e496dc980ecc91cd4dd9358872b15ff68e640e075e122cda94d900370a9c4b0d2da24314eb1bd5ce5fa6c4e73cd2f613764e8d6801a57546f73fc36c883d80b9064f33543fc836e16a9840e962020096643efd222a848749a0aa2dfec2e2e448c80907986df9c6c54dcdeacc6b531e9b30b6a61b6bcbd29f9010ce8fe2048e39f72dd1138725bc0182078391da42540e725ef4398306aa6eeea6a507a076dea2f087e908400c502e47af05dc16257fabd633a893d576038329a85141bc69db56cefdc7a3c9a3ed5a6b5f91982b1f3d75faa54dd41313a895eb721d310f76acb9417774c1705e8840ea9506707b8eee4e3c272910ec732d31c3a40bd5d71d18596ceaa2c3b57750858d554f62359f7e0111be7f7960d848c26069562e6e359f739951359140d28e1e2d3d1ff53fbc2f89b1d4ec47ac91cfb69804f71a3379ecc65c6d79b83e6b5345ad357bc125058589723478bbb38f294b482f098a8589d226da8be62f0d382cfa378514e4dc9f191984f6a1a98b79553fc969d6105fc8ebf15a8adc10c1fab06997b881537fd10a913e7ef2343eb3511c6d520a88b25a21747482ebad2c1f5d2d73bec25dd55b75e564929b7feebd67fd21de88583aecffe8d58e2ddb4ca4740423229dbcc17a16a2d66035a257698ab7309f9dcac468fb8630cff4e6a1af6b28933538ab78ca5572e91297c53f43adda7d94b2f7b772554a69f170a8be8661793589f26b82caab8fe68dd5af10213dde66856664c19dfa6f01bde61e60729d2a6370b2824278f3c35a7794f0e91b0062a7350698a5c19776af8c977957e96a1c87466113a4106cd1dbaa07306d5b2929028394f639209717e10bb1ba7700cde2d91c0c219935e1089331f048371138609489d5eb09cb3342e4495c1cf87aebd44019083ccf8790e4090ac997dd6d5f6b74ee98c68eee13116a3b66cf0126f72cc286a7c6f57f79cc3444231a3d3fcdac3fca60543b44272b55d8c2f2439aa28de215522f8e52cb7b55334e537da934a6b0a466b9405eec3e03488ce9011990ca1bbc725a857c6e77f8fd008ce3fcc5bbffe5bdedc86f1ce8aad89f5e44ea9c769547201773258626ad0c02865ac24799750ddd8183ae7bbff0975ef9b3bbdf1948b048487faee5a962ebbc4e3871a46d4e9e11012b7421608d731ff4e919fbd4954fc9cd445ed55daa584537ed2bcadb1b2ff3915cd725574a8e68183f04235939ab11212ce354fa4177cbf670e12e8adaea4d9c7ac61fe2096805ed3e1cd201aded77c28142ccc9ba36c3ed0a8b4502e27d81ec8341dc4132aeaab72feffaf5655a4173de6cf172f346b6a9e18b39d472423273ddd6670035eb826219245fa950db81e6ed54047cb86f9d44b89b8620b81e07093a8c2ca676b4a12c024c0ae3a050e21f29b0982b57b02d2f452fc3650598c45f96f64059058d90abc6abba9a0e67439672cda4977b00641cb210e4b7c27cc918cc3626b0e80ecf7ac32ea1775a3aec1b4a34fa40ec05edd14b1154d6287db71b98e271be047d61fcb1020f29b6fc0c90f29d04ea285320327c273dfcfffe5bdfcaa4a602f5b84edbdbca3921bd08087e8961e1c7d3c16360c3f4c11c99e8d5b391c3dc6bc5727d207f865bb1345e311ae6e7b2a78444c6caa4cf2778d3e134750a46a18c4602e11d81fa7e8909beb0e4cd540b5198b0bde92d00a67cbe9730220515be661f09466ec399071fd8233a9675464464a136028ca88d7aadb1c1d6a8d81a5db235c87561cb86aa52606db0317dbeb95a3aae2bcafcc0a35bdf3bc802bb921ec79f6683cad75bea58fa40a53de2550c4388297235d4a5f724cc732ae960f4c0886c3c370553a7245520ab63ba631f3b4252b0f1100d9355562993994b5ddf069d460136d6a6f1f37811018809392c93c7efebc6660793a909dec19c1ad314d38fb07db0d49a154f3203c1cbdff7e08fb0fa9586006beeaafe4470f49654e7e1642c62bcf056ffed4799b649bfd89a15f7352560344f2752b33128eb246164f254b0d3e9fb003503637a3045403351d0373e31cfd3dd14a6d067a87bbb8ea5cc583d61203eac3ca58e0fc656fcb33ce50331ceb1c2569a3e331b9cdf5a045dae4e00fd8349a80a65c610c9c86f4773634fc36641c1c034bb900c2bfdd672808aa64482ca0753a667c0f1b036c63c4acce953eb66aee43212ea866c79a40aa163e55ebcfcada5a6b2c28347e2cd90eea2ec7a5968bd3e17dca7f17f028cb188a0e8545392d4cdbcf4dc8e7e308ebed7544c45a5d905e0b51eb72f6336bd973641bbf0086a4af2d1d3fffd7ec300afc6444924e50b2cc4070ee549a53ace7cb6b67a0ee36a9dcac98c993f585df0e250048b504ea491fbc63180203b8ac00c8272322ad7a8fc86dcca07c9c5cc2e263459786d11b8495ee4bf3b48fb45d4d0e2d0f92f53cc6ea2a25a24da866cc2b1ceb80e7ef2f028d1861805291e6fc5bafebd7f2baeea62b322e8c7e56d8568a61f5e9d7a8cd7eadef25a6bfb799d4caf799a5ca9496bf137eb05ea24c58144e632b15722e25954747e7752e3e95c094d50bda12c2f0e2903554ff7d8b043b3519fb98e3f444a775d54e78c84ced045e5963cf00a9098a057bc1640aceaa1db4f0dba78752c1a34d911e2dee9ea7fb054e65f0e7e57b5c73394f868f7b39c0dce2d2d2d545b956525aa2fa0557d99224205fd59bd1fcfea4309706926f3ffcaacbaef9477b942c7bf4b1d3eba61b4516251268d7ab9fe527bcf49aa8f10b063ac90cfbbd475612f758cab333981ccfabedb082b48f98d1571137ba9b3ec442f9341b7790e1c2012c9094ce880aa4fc8a865f35cb7c8656afb9daa1e3850371750bfd3eac6f52e44cc1a030ac852935b20cec24a07b553171f57807e890554e8f783bca089852b33d257aeba59a993dce96e87f111765c712595c8ea60fc19ba931b0806020359512bb4e7e22f7116f01f4f0dd3569b1bb1bd16645a5056364424215beebde596524a2965a409e908f2084764ed70441753e908ac990e563fc6a87eccb19d1ed9079ccbff416bb4cec1279ee74ab485479014d138f742a54ceb3c73f6c9e6151c4590552722a1681ed8dc03d905f043d656ea5e5d26c30fb2d790019296c37066cb582b5b461d21f5514740e5239c9ebaa6355a764f7e5529d3b23fc93e4a30db0c6eb63a068244df86363f646da5352beb461d325f6665d1b62a2512fd279bcbef0106a06da1ac3e5e0405562840828c1218c8a8406120534301560932b61b06f37764976cfd32aa882d3fceec088ab85271f8ea9ecd8a88505267952857156254cf72de50d41651fb7baf1015c7d9ac680825bbc2d4d5e76d55abf74c519982f2a3ffe04df726288b18f348f4699451461c9140d65a8aef0f193590442707a2c634458d9941425d4b37708330cbc2ae2fa3a670f851e85bd8f465d49413f167a7e769d1d3a91aa86fea31ea6ec3532aa1767aa698fc284edda95a06572c31c50c0f4a322c99219852c2532ab436f00213a0f8b2030e5296a03e649b392e6722aab60dcacbf7244300239582a9188ae84186a419a838516185892850604132e796f3b679be266c31e79c0e9b734a6ecc2a08c124449304e269cb5514335548b170a7095708a87baf105eee77af1755221e46403922822621ac5081bd4238fdbd426cf97b9558224820e6481834627ea049c464e192e8bc8c12c3e4f3cb28314b2c0a588a09a3c4c276c48439c1864901c9ac8181c112305ad8105ce1fd320a4c159825608a8029c265431005860a18272698609128add56a35242ab9d8126a17515f4ae0220df54db1621ee5450b23a8182317cb16a9cdaa1e2349f418d96eb5368a086b8dd8282fd65a6b24ea043fce9070318344030a4d4bd0b0c291a5a42b696090a584295d7ae8e2080b3634761af1b24407c556802b2337a850a67602941a54b880823456b6a4d9d26aaa14b75850024b0aac66e08209ad56616122ca0a2dd05cb942ab45be8ae06b25e2ab47abd5ba90ed92e66bcd558b3d513590e0c79eaa1c3aba9ce99282342fcc2085172d801001114353281d69422506184ccd12b65c2e9f0e09952396430d0d2b645b842826c6cb0b9d9712385b24f6328acbd57f2fa3a2947e0b4fe683ba4f0dcebfe006653e34f775dcd701f17a78ae39cebdcd732f0482dd6edadbb4b78140b05bb7af6ed3dda6bdf9c9cf03ec96c867dfc0d1fed601d5e198243f0fbcd627bf1b93be731f9e7ffe85ef49fa72b9ace5326ac9d5fa6aadb5d65aabe3d0513d108876cfe5d74387b27ae0f50eb4ce651069ceade5d4473d2d3cbde1bbe16b6ddef4ad110681d42336cc1dd4d775991db2151cbf300d4922d995d40944321af51e254f5d9482467df682af791a84d253c741a32e83a83d12a74d99b5a7492fbfe93607e95b66a141030505d4d4def206f6e412681b05c2a9c3828b13f591bf7181a23e72ff14c3458acb116f35cdda2b8068ca505b4061b185cc3a81b5b2659dc05ad978b852f05d614a2e6b086c65b35943602b9b95db6685b15636585610d5ca96c5e55ad986a88270c10918176a4e1070c2440a4f9c18810ac4e0258ef1cdcee1ea546c2a5ae7401815ad53c18530ba2b5117dafb83138ff1e6b64eb1eda63ed66d173f90f96189c734ec3fd2091e52b0224114ac295768d873254a2a81942e582530cde0c313341cc2a6d8dbfa7dc1c3b76e42387e60f28308aa0b765743ad62bf5e469d8085af577bbf8c3a4109944842c5c42d546c59c18f22ade2552cc3273824614a06a4d729d665d2e5d73addbaa51b48c73824328501923602095b0e6b5b38653a0eabd10462ebf4db63fa0df574eb515d317e8231c5e108f4337ab241a72d7f8498a4b3b630146fba19ab2b0648da1199ec83eb0c90b41b3ee0c93d4a8284075c9f5f0324ed864462d547caefc93e72daf389c83e38e24365b20f64f5790724d1b0cb2c1ccec67d9444f5b90b70b2254dd2a6c87c84399c3394cd1088ec8992d3aecb7accf0c90d49989201bb81dc928a4f6a2460bf1889be0f1a662ace2fac4db13e45d663ba94549472aad26b84959504628b942d4b5b98c8516cf9b2e5a9aec08271c2891e8ef06045eced4faac3d6ef416a83e208f59149a88f7c5a427de4cfcfe8c67e131a67128a1556d88206cb5515528e5c40e5861fbebcf0840b5c3c39c94f52b0e770164a99e6ed1393b74f4dec9543b0a0c484134370414516346b02ab2bb26a0841094db427f6ac49a81ea06ae57a28410f4b7e8c658a916c0a6461e2e1888bcaa98a1b2a2714ec5039456d2a271d6aa89c6ed0544e28e85069e1626aa9a2156e1da5654a4b971ab4f4d05169b9b269a962b5e060b32c6541a285042faa3d0a8542549c59b25e50d12c53bca0cac284a68acaf2258b16259480c5e874e933a1221c3f692e70d23cf92d60862db7e087dd054e1a0525ed03c7fcb673172869149cb4097617cc6e41ce352877c785b1a91d9a48fada7cfcf91ac2264487e4f3146111c568d57528fd54ad56838256fd8333afbf62a9cdaf5e81ea30f83a4e3d797b4e4ae9a474c7a8e7a03f630b549ab416ade59e1091249a2b24d272978f48f54768f9746f3b80963dfed81fad16a8d4f224dacf4c088748f56f08e4492bf4c074e951ce8a67ed055f5ea9ca51ebbd2ff3e432ab443f656068c104393c31c50db4d17f62fd28feb4f4679209ce7ce1e2841592288d80368fec4026851f7890610bdadc62061496b8c08a090a8ed0e60b7eced97be14aa0ddec97e3ac54551ff979861513b43035e5861d4440bb5afcb562f537ca4a169f867202cbc999252ea8aa43502e56a4582941b609a893ea909562d9a895998afac8cf3d9468ef281da86091883df6f4843f549c07b8c264c46ebd8cd2a1c94f1f7b7e4aa879001d96f2e7a0312a529fe94d66febe8c6a2af3857a9a289a404163648624354070e1c2c48917a04491851042ec11666b0d52f41701f2a94b206a0d41ae5467326d1985c3981fb55b8b644f33928c133f3c3988b465d49426bf7951f263867a193545fa30a5e9a7eb09347599aa82c54b6f62f23244a202f0e494b24a0e559a48b08a0b5552b0d65aaebbaa52c318e3ce23d3419173ce9ea6f244658c04a94491546690515454f8beef736d2c2a4a5bcb292d9053ccbc5eafd79472ce2965bc564b4aa0ea25899a32664b54151e967832e9fab797c9504aa0a82a552fa3aa9c79980d4947394aa9287e9453649ea89536ca3245d32a0a1338ca13f587598b120494978bc3130e50a29c80132ab251b2e0884225e388c2844f108586ed0450b878d7cb28282eb84748696b5e46412973632fa3a07499e0cb282836403932775e463159dd7b2fd7516da94e6fdbb6751e931353134f731cc7793a8a49898c97514f58a0fd65d413315f8c97514fa47cdfd772e5bc8c7a52ebbc969099f5b21eded7afe138842bb265cb07f6742ac670b0a0374d549818fbc3bd32031ad4f0091233a031a327484608067950500c18413c3b329da09cd80dce8b20585050904d4d50d06bbb5a419ff682baca05e5a00d5f4b27adb5823ef9329435b4b52de9525a1648445d416d335ca9a088ce876e88ccc5e381491bf102a7c4c322e350a6160567b1bd249e0d4eb68602c5fe76e0c66c8fcbcdda9f104e3c23ba0550190c46a2cba1b302d3904dd8b02e0b3a3352f646d221d9d9854d696f4dd88c162e6a6f537a04594a8b22f7892c5050a24322afe0bd0ca24813ded2f6e3c69cf7e3de56aa0429a912b210e99073ce9b11574f9dd4132fd8fae597ab33dc0c5758bacbae29412f194167657331785e7676e225b1af94cd8a153aa0c00a324d5831c5173426e82ad0bca06340b3439e010d159c0bdb7bf9050d0c72d67699c0a5b0b9259accd69181a3b23f2d1d0b3b77d954d8790c9a7d5f7eb982cc114a447145550d574891abb4406f7105171e147b23e9616717ba2f7b6bca575a30103b4b754fec6d4a2fed1a33d8098b2b700c7b7bf9058b18704f3bbffc92c50a3f6eaf8bcdbdfc92c50bef21d9f8e5972c9afc28a1f00ff5d93424bab24709c523c726b2b42f555abc7e198491223f8a531d0cde105596d60b8e96baaea3fdaaafe397726808fd4a89b6be3164fef521b3b270add8521bec0b9e951c5c0924f5a643f5fab03dae5f0772c35d2507560229791182eac7fd54d4d4673848509d7a1973c65abfdf635f9f2eddbacde276ebf6f30182fb16c8f5ca42f5eb5e8698faeb49ef594dbf1eb687bdf6821ba01dccacb7a13883a8e3cf12b1e98fa2386fc8bf911c6c0e0aa9bf858eeb770405e5e53a253d80182bc9e50d5f5be99ca09731589098a0040d5ba7f41cb4da314eacaea0973124a094d28bc718b1d65abc7958186329cb78117366ab22e5c1f7ca3cf8d53d1712fd0cd4ef5cee5c3d00f56c730c22e5c7be8163077e8b3d76eb39ea0547cf47cf73388ef5b55b1088e73594f900df737073f92960840d6847baf15ebb9730637ebff412e6e9392e942140fa6ce55dfbad05d2ffbccef1fb3ad076d9d373be02ea77edad17314c2fbd8439a3c14b2f61d2fc7c2ffb96bd1a6da1ac6e5e37c71b97376bc35d7b2b67d07f1377e1c98e6a56d6db9841d2638ff39eebc5cf4d0d986843a3a6e7156e77c168ed7c3a3ae6bde8605c4dde5b0bebdbd95c31b593ce2059b3b25ece2059c5933d9e7c2f6192bc3f951cd4df2185ccdf8090edb1dfd16a20e9c56e5653a433862fc71a2f5dd2992fc59240d57f8f350dd628a7a0f8b12ea5f9eab44dbd5255a2241faeb0600a89a92763a4a055af559528e986275c3cb1e1091fa24043ab5ead2a51520c459660c18b120f4eb268d5eb55259229b8ba62030b6956b89203adca4a24694d989a9cbe4255a9ea816cceb9516c6fb6bb3a1d25d4acc9294af5f5a98719a8549548d22815a5a2543e28a5a255d48a5e7df5ac396e665ab1bdd7e2bad1bc014ec87cec63f7d6e5bc817d449a5fbb1752b16a8fdd866310ef3d2f61987cec3d2f53a2299e4b97f3c67ce916cf1bd687f5eb18046243190f19ca10e034946907122a79ea9d8749f23444aa8fc3d1fa066a8fc15d4be385354d0d37152b97cdd534449246279d97c9bc31a9d2cbf74a94949494e449b4717e90da43033f5ae06d06ea63cf6006ea6f618ccbc6e03893be0274e807081108010341e68d69abf414dee701a1df51e7d6ed751ec9c1fce9990e5ddf40b5df844cfa09d1b44356d5e49db7ca5ae3b8cdda27c4d66a333c52769ccfe1c881df7cd40e84fa96bdd65aa923e1ba81436adebc56ba85d58f8c360e1432b3401e09346136a6a7fde2458c93173152758bd9273bbf8c42b3040e6892c02fa3d0141143bd178d161d1e4c1bf6320a8d0d3fc6626892e0ec604516383bd4bc8cb27afa9b97515654fd389bb2569a3cb553a6a467e8995aa9d5c5c2daecb6553a37aba769edbdd76e9ce5b84a27a7f1b66d96f3ace7553a3dac336799b8cf7e5fa5f3cbbaf33cfbd94eebcf2a712ffb7a553a5f5ab79e9e5edae5b24e2f29291b6b6353e9b471a2496812aa4497e812552a53a64c192b2b2a2b2b2a29538a93d364729a4e9389481a2269b0ec549a4a1d9809389a3e6ab520482a6c31ae74e2ea55cc5970cb99e3bc4e775a573ab5a7bbcef3b4fe74eb73752e57a5d3d5d2dfe7d2ad96cbf5da355d4d4da5b3e6a5f77ed5d4c06c6eba9b9b4ae70d4cdbd8dc6818ece6e685c67911eb62b14a670c47bf7811d33838622c7673b4ceb72347d6c964954e190ccdc31343c3700d0386f5efc8431b8695ce50a675747686d8dfd1b2ef48f6f9a8e2ce77f4f9a87f430d54d0e3d130783e1fdc5f31861723860d63e496acc7d74969add6de8bf1b6d9a7bd5343c9e5568c8ad427ad2f64664de0ad9404a254a424074d8ea67872f3c6a49fa13d4a9a79b2122519a9a248161337409902044d72c1148316b8884261aa099a7419fa74af4a39a994e028bdd65aabad28d43a35806bf0a8e7914ebd74e99b742cfdda6aa1ece9b5da5aa1d46a6b7d7ac5d3292a4aaf3509b45d5db932b1bdb2b414958492cba354e6a0b47e329cc1239c6fa052a66d2ec191040e445244db8e20c141db5cc9d2b2d75086c30f3697ff63d3f2bd37fb9864245dcaea035e6ac7582918e36d8eb6a9eaa76f753ab6d3efb5b83ad9a3a54ef26fe1f8d535b56e416d6f4d02cd6ab5ec6d73ebde065aba61f72491fcac0fa9f353800c7bd2e3709c8f3d506163b0832e7bba37ab9cf586b21e75025f43db2481749429b1ec5a432036efd13e350a87d00f22846773d8b37aaebe55c7d5afadd4e6b0a7cbfab549766e5951a24489c28353adb5d629a594d5fa586b65226dadb5d65a6dadb5565b6badb55e18ccc6d65aad0cb6875a6bb53dd45a6bb54c2ad792f5e0befafc1a8e5b6e82eed0c213296a466c802242044cae504a9913b292b8e209862ea6f460a9871fb26ce9c28a2a4ef89b84962cc20b4ac8818988a52dae76984a596cd8d36d0d7b5a6b2ddda4acd65a6b2b88adb5da9ac05eb7d60e4929c2603645d55a6b65a834ece9326709448baccdb282346cef85cc7cefb54c6487f435d459765626965a26d3de566d4a29e556f1b5d532b9d44e294a1fafe37b711872577892836e7234bf95a18e19df8bed56a5cc5a4a6e6722eb79cbd567763a16db5bfa0cdd633c90ea02125848acc0de8084919e44fb3edffee3f3edd3b7f65748e4e5da896cff3c89d679befd47e72ff77c7b0b94d15ca06c86b205b8bce53f5cdef2e9ad90c89419fe68794d4844367d571fec49b4961391cd70c88f1ab7710648da915c7db06fb7098910b1719bb02689e6f2249a4bdacbc7fdf825693b94d507bba47d340f4ca2756012ed5a10091b71218f0cea90414225808a183b05795011fb0b875925f23acb4145ecd8b16d625f3965694ec1a3a3e6e16d2e7b3c4f3aadd56801316c570256c740257ae9531dcc551152895a0e0934868af2cf50919691dc6b04f354a9e7bcb70f5a7b1cf2a0620e500715abe350dad87954e93a24c8c37988f54702499f31119b2d81013a348a1c44ed5142a5608f122a878e2ca356eff3e306840192e675ee01cf5fb656b32ebff34dc6851ffc0f0945ebc258f5c978db1c6ff42f6897d856cea62e074f2c6266d5d862270c7c68985242315841500e50fc98e0099c25ac1334ac6c18191518591052322941681a51be684d2306509fcee00a1a966a800248a971cee09043d20e808611b6a8467b913d5dda211bed5904f07212652e6410c3063b6383a79e9876273472f4e622873ada470918056081e5d9d1338ad0e1d11b4c0e0c2de321c76268a12a705c0b99b137a0de200c2cd436aa6c64681b4258af47e770b1a77333f4aeb2d1d0fb4cbe19689f1daca8676564ae3e5aec92690d3d038a4e031d54c28ff639614f398176b6f0bc3952f7616303f8a21751b0c7bcdfbb432ef7320c92efcb3026e9acb54a4c7dfe48ad4f0d7bb42f41a1347bcc4fc19172d682d4bdd84b9b97af97b1eab31f7f47f3b3f743c31ef35310a7cc1eadcccab04bbaef79537af4ad8f49f573d0f73a4d41d9127bcc149481d1f3f313e0bd2f679b8b4619f6e06b37dbd2ae0db6a6140ce288929a0ce63daaaba6f96abc69aaf398f45cfe31e96d18440249b7b123f520b09f59eb36c8eca757af331c623f889cc2e227bdb5bff2863fa8483518a322cce94653507654dfbed014942ded314f9f53683af8f2eb411f04db5a508c8db22d8bcdbfefe90cb18f843f26fb607300fc7c4fa675865e066ef09eac964ef9e3d2b0d31f270942efe5680a3a0e7bcc14dc597bcc14f449c11e33050b70668f9682338cd863a6e00eb3c72cf37909e66172052fc33dca3e90607ec6cb8ee857400249cf5e1ed6eb8f36cc66de73bbc49632f4816627bd6733a82928e4c41e2d053718b3c7fc14b461668f39887e58cf7754df72efcd985e5e8679c6774443537037ed315370bb40bcb21e49ef51f0e6efbf57699db2de9606dfb3eff968ecddfb7c3f6cad76dfe7fb312958dfe7fb21a16838ccf4bd1a9a82e2973d660a0eb18f747f5371dfd69824dffbd1140c2ab2476bdfca7ac830464519440fb11f2486371815a5d71a93de9b3f1ad4f09111821e03064fd08e4c4a9d9c18ce8b1b984d504bd623e8addf9f60fe9b2c6c6d7dd975b7f7e26a60362f6e62383a393b32183c1e23047b5c7e46325e6398254f5da2745dbacd86e90a419419ea24bb3ce59050577a708f8c27529070930e1c4c218e10d4f252ea5243131c4e7814e9e0451e03871a27605a5852b49400a12618423078a8d8500de18492d0e37026f96086c3ce6c4766e526ca115188cc1e87b3f6e3078ace8f4e4e0e3835604145849fc721120822959818c3e141e68c89e2caac80f838c440047a9ebc700d06e9797113659b18840884e05260ae41a40bb3e9c1a80bb70420ddc7e10715d8b1c2b9c67827e6b4c79ed7aebd870e75f6e9d76d3d605a70f2b8c33982ec3c0e3110c3e2f9eb15cb99f35e9ed02bf62fef1516058155b9be37ecb1b5fb3bef6e7d3d50d40228c198287e0781fdbe3bfc11614fc9f65d2e57d6fa6697d3cf288748f65dee0add3e92cea1e5fafb9cbaa73dcf1b790661fd9b7bb1c79dd69fbfc39ebd25ff7ea090f99f7df9b532b8e511518e88f25f10fd1fac03af3730015bd7b3257ac69c47fb391cb15befc211fb45aa9fed67e7bad8ce4e6cc3605bbf9e37e40c1aad0e4750767ebdab42aa85c99832c078d2658f56624b7f8cefbc93cade4975afcf69eff5597dd66be79cd85a6bafcfeab3e26b31c6738616631ce6a033273c2b351dc23e3706f5fc99eb0846f43be2de8622127be23ac25f3a44a5885de20f5c293998a24e8d24da9bcb4d6efbe5164ae07b846f676dcd704a206cafa52d12fe33fafced904f04e037f73a0e7cb4be8646d7b96fc78b07c06fe1950263bc658ecb1b9e7a820163bc6d580b8cf196f386a3608cb7cc751d97375c8224a2400263bc658ecb1bfe8231de32d7795a7b1d97379c03148cf1b6e12dae2c15733e151165afcfead3628cb7cc759ed65ec7e50d37d53ab3c84ca80163bc65aef3bc8ecb1b3e8331de32d7795a7b1d97376c03c678cb5ce769ed755cde700c92b0c2186f1b26e28b931815608cb7cc759ed65ec7e50d83c1186f99eb3cafe3f2865530260636507105e31830c65bce1be662266bce8931de32c7e50d2bdd1bca705a4b69579eec19edac92f3deb198fbbc9240e21093562a3b357ca8768a8f0cf64a11c2ba38879cf78ec582a0e02dcacb9fcc755ece7bc762eea2e8fa9161cb50709c80a344e69876ec3b0d299ceb9ec83254924a9644e7e1f0d273de3b16739779f1f40db228fa734283e96bd990f3de3460d072d5a06134ac706d1aa604c2be5f4d443d83e1b0e04587ea0c3b319a0fb11a1b13783f95684cd9c064984b9c8ab42eb01b89bd92f0d6eb0b1c1800e05770623ad3a159824d452db19ca599642ae96091a3f382d4eb8841838ecc859e1f7de7477f4f6bafe3f2b66dd002d90e0966b3a222af618767491a1e1823203335859f4af1a18211a385a9024c11c359d872ce7bcfa0194338a8240dd60e020c57c0e2eaea685e5151a625d477cc96d193c20b35d13323491749468e915d70083dfdf9b4e72e8ab35951d106523368a0e02ef4f3a33fd7795a7b9dbb28ce663698a091810860453b36c464206a1da7624e1ad147e98c95d52f00a4cdabea03834f0d2de9904b8a55f59b05353440d223f5e38345831f9dab09f9897cc1b07f808e6c99cb79ef584c8402b26104aa6786137bfae836828a887a062bda81ea1132721b5dece95e90967448eac77b623b1be64eb4859b8f3dd9c71dce47d88fdef9a87ff42e676eef1ccaea83353ad6d32b9f10ece9deac691614141464230828e827b0f7e6ebf57abda4dcf66764e9eb33fa76e01ca4e63332b2f448f4afd3d90f15a5e770f608c7205c57e599dc835290ab53c87ceadcacc737c5e2eae919aba7554f6999222433eb6c64f3ed103f53d168c3f4cdcd8b1738b1cf288408eca00f8204928ea3482806db1130026107fd1f124826dbd9e1c91b0fe6e1e1b93cb6d2c9235fb44622ae177a7f47efbd34ceb7437c9d69b51208e733da94524a49b8f7bac0cba133475acf69cd7764a363b0fd5ececcc991b09886e5e89befe88594c9a84c366538d9253de7332a929ee61949d041451dd9cce86747a4228c67c38011234691d04c6ef872b2fd3c31bca21436f51c9582755ef7e40c1af5e7cc7ede9352078696ede8185ee9f4fb19e9a7a08e21276d8d23d0fc30be1ef6b304328af1ed98af2590148af1f9986fa90803d431be23fa3a7f3be86f50bf2765501953c6b52dd834b467ce6ceaf2db01e339270944431d8632a60c59c3cf48cbf03baa323ea3e9327450517acf6744bd27cc31838618b5c77d6d8d5aa3460d5aa3c6ac21735ae3075ef62306cd73183fce7fe2854448a0e519336864908128faf8b88a8c846acc34f8c177a391813845595b2309197c46bb228930802e9b86197c47f5459fcf28d7a85163da9f1fa04a812690c4b6064c83cf68ffd4eb94525afd520b0a99b00df419e9017cd9a37e1b413317003e231d80000460763f2f5d4a6af4f3eda0af25905b16ec51db4bddfe48e4692823047f3c060c9e9f9f9d1fd9cfcf8f4ececf4fece7c7563a6db4643d826647118085d64a4790d6fadc517fc7dcc11332a97baef9defc3ca879064d97615cad23466a5f3f0f726456161458b5b79f0737d75a4bafb5f6da6aadcda0857ffa517d2b8166761d71cf7d3bba4a27ac358af0d2f34bd790239c9f7eb47f86b21e413f3dff0c5d428e7a04bdd7aa745a293b2eb7bad6fced939f519ef2e3be1dd2855c0934bd4a4712deeea821286154d454ac620d93eab44d78d2edf53925685750a953f1e64beb7d316344f63288225dbe5441d155bd75272c2d97c2a49b30f99628714d252ace239b48075e2204a9a9400819841f5d0278c81c388466549c73728eb9d0f35a6bad15bbc755c7e07ef1c261e0bc9972caabf167245b52bb40f949d7b76b40f97ac91a1b294c7507733cda15e32673ded792ed1a9b1b9cd88ece0e4f0c30e4e9a191010c1f0d7e6c74509d53f521d256531febb29ba1abe9744b3a5dad5bd25dadabe5dc2dbd751dea5d136785c3a5c1e1acb8342fceeae3acb8346fddf5e928f6c85171545c15070557268f3be6da3e8ab31a1f8b7254af09c722a1d90e47b1e72b4ce3a0b9935d9eb03849a84c446e8a91a562e4a62c959b7253967aebb1bc04234b819197b294bc9497b214337bcc4a59292bc94b72129e9d1d737186a3886767ef58cc5d1467b3a21fb9a54c0609373149c1b1656d5530362c185bd586b5556d552f36299ead0ccf26b595d9a436a9adcc137bdc9c36a70d6aebb23ded88b322a199d08685c3099326455b954d098c8d09c6a66463da946c4aacc33016cf968407636d493016c6da92ac608fd80a5be12b8c053eb323db311785663bb2bd6331775194dab0142d295922849bc0503c988a0743612a0c85a16a30d30e7edac14cf80933e12727f68897f0126e829d60263217673fe20fa6124a328f4ca5195ee15ef160259e7b8595eed5bdc24a6f7d5faa9d7b66e752dd3397ea52dd3352ecf14a5da93b75c9dc31b29c1df31f59cda97bc762ee5078c96cd63a40e4e7fe709b5ca7dbe43add26b7c9bd4a97c955ba4caed255ba4ca6d8a3c5c2bab57b240d4eccc7988b393dbe1383e9dcf323b704bb4e3f48414410bf2aa65c3b56ae9d29ab4ad4317d53531ae6fab37aebfa7ad754e37a6deb54e5901dc375523aa68ea96bca4e63668d93cb89e3ec980e384b35836ce7f4859d14156dabe55b88838a3d5a2626db4465b1746ebd52e5c47a3ce71dc3de8123e7f4d65be0d88d79eb1766b178eb36e018440ca102b2ebf9ca717606ced6388eb34b9cccd6ec12676b9cad719c5de2388eab561cc7d5345cb5e2d2705cb5e2aa15c7a5e17074b8259f41d5bdba03a3aa3b3f724b762948cf0f105ef80d28bf05cedfe47b529683bd565995d55a6ba5393587564aebeda4466ea99beac87454dd186ea912c5dcfa98b9a59d1815b9980ec73555294897470276a490aa92aa9292aaa24d5d685317da449bbaec18ec391fb786d1aa1d1d38723c39e5c4629a3ea14a9f57b769f2e550a52695a83a69aa44955a2d977408eaf56dd7558c1e79727282aab9a247e66b5e7d9f6f7ae4adbbbe2c4e95a873d24e55aa523d51d13a51b1636262ea9c32551626a62c3a0e9b419c7be096aa443a214e28a94f06a95ae048a5c48a6642311d981452b1aa9854d59c7336e974a969ea329bba64c99205c7f70ce29c2a114e68a90fc7b9b59eabd4ac0a02fbe911f77c32956693a9d4642a4d2511e6911a1c11e61179358f642dafa4a61424ebb19d17653ea34ae5793bf48f1a481917903ed665928847f5b1369248c743a83ed6abe78530970e8f102a51a5aa3ef6b5e736551d546d2d9cd7f65a7d2c8e5797f3868e1964bd866390f037af65a03655adaa99e968b9c2eaf2573852eb1bd440d26f4ebf0eaa672aba6a759a4195aa1265aaaf52bd750f6b49873aa64a8413764e35647a5b868a968a8a9d14b59d140766f6c82dbd756e49aa091d1aab93133a3466263a3476521c133a94e9d0f6d6abd3bc2145872c153930cf208e03b1b7c03a265b70d43fcaaa20faab63d80beffa0d381f06ceb701e7d3f95d0d38ff05cedfe07c1738ff03e76b70e2b8f45143e91ec881720679d23325d271193e7d0f6bfa6d0e6bf9f65183e7fce5a38ce76cb49e739924e2dc25875cceb98d24c271cef5bcf13383ac732e9d7baee59bc7cc1ef56b58ac1265aa57b8ff67dee8a4dc46cbad4bc9c1f6917e759f376a56d6cbc71844317749a21caf5ee5500d918e576e933e9cd780558a9ce7802ee9c3790ce4fc0572be41ce5271fbfc3ae0422135537187998ae1e3809bf4a9ee02ab14ab67aa4ae4929dd4bc216550751be3ab7f2e6b751da4a8158ef4c74eeaedd620d55ba4fa9b7be0a82d68671076b975553674beb0043bf564909f1f7ba95721330715a59492964493d507d3215d91f05bcf5e67edafdf1c6f49c0e23327643ee7eab44b1773bcd5af9d37a8644a5ace8a582a5523020000244317002020140c8884b22048b234d43e14800f65984458422c948b838130067118c4500c0741c410628841ca1884249aa90a89700120001c720698bcbc35b1ecc70643324afaad2706d5b2128af2c0caaa64402a0af6dedf8a051e42e451ac602ca43375951b4169da8876d915bafba14f82b14380e23db6682d12cfab38821b5d5569bb559c58a35c7d94ea06c70fd9869e1f9f364c1e11b98a7481398e3a5c18b17ab8c3b155522939f2d0cbebda60d275bab5d9b6b914f4709d745fe899d15068c3015150cdc37121f746b4dcfda06b926bfb20d497bacb8476f38a6e06d8bba66ccf592cae539a8ad0d0d0b686e34bccd9af422051c44f66e605cb4aebf7056ae12fc8e64ad771c7dde772bad144f6a41602033b1bfb8ff8d8aa208c14f43d56e01b1084367d5062de6b29868eb6f0e5233ea92f5560b3b7a80a262286a25fa9691659b4363d3855eda121ce06015e86d4bf0716feedad742fc0e0ba3c9f765b3c4aa41c45043e07d428a4fb7b81e69f89359ffd5a844ba5f04a40f792b8bbebfb5bec92be44cc1797101d83131653b61c8ba5fe1211133df82b5d44ef68029b35153520bc29a56d6c2b782501597baecdda1d4ea3c56511800c38ed40d4869935594b1ee63523ef9a8b6ca231223639980b0344cc8a072521ba77c565716a4c17bc920ec00cb05ecf91f9f7f2d77166ea199585d281cd5897b629958de6e1c9a784e5f70af23d0754a97a93ee72d5ead86f37d507193471a1639b446374002fcc0abf8b65bb9a73d884bf051517935507434f45b3949db17d4a02a074c12df9a9a807c2fbf25295820f39fdd941eff8328e83a153498beef473cafcb6e0cbf24685edb3c13223a08a5a07bbe42ee3e829244aaac636e8aad54be20993b7e4526e6d8236a129fdbccaa0f24c7527083074aef75e4bb3c525ccae359517060ab97b3dd7d4d5a53b0e2f1f8a7b717097e5ffc87425dd39e26354bebcc86d4cf4515e90b089a9a08fdbaea7b4a6990b8fd3389a7f4dd2ed18dde6162fe46ecc8d4c2d9a57136b9e83ea455232405215deac69a10e28d937b0925a5d348f3d5296a14c7313f5ef5adfe929f8b7cda378fbad0b40ed0d3f564321fa61ca5888e4c44f835c195fb4e00e7e3120bbb87861df275cec4e8377b7a1418818b9eda13d6f629fcfbea221bbb45ecbacd01e162df20dc531c98ff86b3699f7c24efa3152fb247c166048e5d49e8d4d75a92a0fe2daf856728db7e39ba05955f64507fcebc90620012e65aa1de7b39c015bdc0cf1a85d22b11b8b30a4f1a5a668a91e33b8c494766196837d6f5a223276a7742f5060a0a991b5faf8c3f0da240ddc9fbac8e62b84b6cc68117b1d46b59560f46d93d13731d0ce7f661b7e23c98bc0ac15ebb609dd1a89c819f8cd9f61b96c2e5ed0419d20204fc71c9a97ed6fb6d09775a12358bfcd30d92a1c2937b05908734e70fbd728fae55347d4b2ac2aacdf9aefff38efd9a503b2df56cfd4e1ed0c39031107e71c46a0f37f185288627fac2811a6a6442f7a7cf900c703d7bddeddb934626423269d8227ae404f00fa22f30874400f44160082f0221c5845c173a7d2e9fe3810228da0d53f6738b3d4e3badd1f0c54d4e5007aa335e932256e6b1974f49ba14d77c9345f5fcff51d1cfd2ae2fe4b6bcb0b9fa2b8ad0bc5b5571caf2c53dad175c92761f5965d985f9c699d1e2d74e405bcd4313c4e398c5136c830af3e852d81fa986d2d9004cfe3a45d5da71cca8983915dce777694d801c900f0921778e4642b8b5ce2750634c321a838179ec9284c27986fa83379ea836ad2ffb1b6f53a9b9d31a5271c91f182490508d933801181782f197f387abb92cf61a658f37d48309efa1949155a382a7475cd2bf60a8addfd285360517a022c4d1076a098a5461176f580c6a4bcea58de3efe0b820e8e52fca4a441d8ce056d199310d7b61f4020a37c8e8399b7d18d950fd58bf52b2c5a49a80a1590913729a06edd88bcf885485890bccc81942965c133a3e8e2e7f1b522e690315435e1a557d13a2391745b16a0ad13ba5766aed173ded48f996fd7ce55f898dd3a29fdf26e7ab03c1ba80e3b24eeb00fccf667334cde01c6eb266b98cbcc463319be00d8d737935eac9b542867bbb7d18faefd0d50b416316ff6f2b585d37301022f579ae232ae4f2009e1c6abb8b311739f888be80a6a82cdbcaa118f97081d9e0fdeed5602bd31b001ab829692c83f529252838e0d7e9a36d6f71e6ab2c7c55339307c52f8948ff87c14a38a2fb54ca607409c9683e7f23d8c08a6a3e63feef7620c03e4f78d5feba46273cf560f9b14c2030add96de98b8b619912d7a7e3ead67e3910628f02da20f300e398da047054c45d11e18646e1099ae055c3207841cc7022e950b219763082b5c02a6ee070359c8a67ec1b464b45686751006c62ef2a81bbbc36c5561ab7b5e5aa08d2b8b17ffa5c82a7367dd994dbdee6b54ce1a18fc724e32622bb64a182e7b66ba0045a3d303869e2bcbe23329f06b6a950b0cb84a4720a9261e169ffc96bc0631bf02f4234cdc23e37de709dd27465a007dda0729cfcb672585c1abf03c19d0c87ccb4ea8869075e53590a53419881c62f3399fb2035ac90a4e78e5257524ae028b781df083174d8692f39f25c22dc8d7ff62d8ecd534ef1870de5ce31604b9fadb3b522080c17f3725bc75adb34232cd25e3b71a9b860f850a9be36067cb2d1de5d94604b71814668cb7b491c7f086ca13c2dd5122b0a68241cc0642040b38ed43d5a9d9845f0cc8a72bf115a73a12822958d1ad49cfded95c261ed5da0c879925a7fed8d78588db7d527083cecf012581cade004667079bc6fd0bc1a0d7329553ce914006e25792e0fdcbce85de34a03dea7f833f716fed44a7fcb030c567b35b33de97a588fef002c8d92ee8821226f57e7f77dd768f05300cc8ca3ec37f5279a53c605dbf0b989f9684b5af3b3b24d3342117933cbbb76118a8547466f303fdd73d536ec9e8bf3b11dbeedf7380ddd30109b0b3a2c7c8ca0fd7f11e34f4a1dd2f18ffd15dbc5f9fa40830f07f1b12d739dad1904c6193e9597ccd4bc4a4daa6e240b3e4548cfdbaa931ee86182c5bc421ba8163d50d6581f2c3ff4b40c563a7704476cd6daa53ee4a0ae1d1eda47f2b209fd4ef7d04cb3bcc16fcbf2a16e0a0e82e624d251be1a033e8967ddbe724b203e00b001024561b62c8356b233f4b3a1aad94e73db5dcd9ec49a89454db62b85238f77a848aa36ad6e696e6b70719cc0e95a9843675098a94b68ddee55ce990edb2e332d302cb02449cd6e47b1e1d0a9088091e2f2ccb35ebb4fb7a6d765189e66dfceac61987946f55e96a43823ce9f93a8026adeee55983e43043b0face3f38bc99c7de6de337389a54d6cec3a178ba3a356932786d8a067c14d7f7e314bc1e542633a6bd518dc3653bd376ef53902ba3d8b75637fb5aea07b33a00f30b5d6d81976d156532b28e050f4ada832936047fc293b2a14f433e806d54b952318bbf7e795ee564dd2140ee32b571f03ac206d1af26b9a2df4831ba734872058a082e9d8b1ea963fe2d54857588a1fc77de2d6c53e625222f5d637c988b4f721d8a54c975813d4a5136814c0a06794cc2b8da885366fa320e13ac3fd8894397210c29c78fd8772a6fd2e08ae3c61691aa5388ec1dc9fcbab82049410625fb7ec68ab152521532ef594ad62b7f8bfac0ea6a6333629134f92615920b41886d2aac6f004a9378209cbc7a82466acc7b88445a718b09eaad29c2868bf4f174dcc99ccedee399e95491bfcfc854bfc5489c8a7ea9f61702a3b73facb89090146334fc2191c8093621def1d0cd2d64f491f5380700d7880f14d93639e8edf598a060bcc923483179447c780f90420f4f80dcadf6ee8817dbcc2447a444e7d2597a28359bc3e7fb14ad8e18690640d9b2752c2d399e4dc4810d0401556c1900ef35966755cc80a7328d4c5ca7c71b4f7f3793f9cefa0ec8a6787d642bc0494dbb60bb693465e75533348b9771c330c491e6ef467d2cd22a966f4f8001edf0f51dfe191d140e16a2afc313081a19918fd3fc34edb7eac907a14816c5be2e14049c97ecab87f02b2d6b528bc6f62dae7e43617988d3038b338cce0c3579e6ab208da60bdd2f9fe5840a03714059e3555584ffa00ac01a244b76e7d07d010750207e90c0d26d047a2f111bc8b4d432f787a24c6460c0bdab0070d96880efd70c01bbccac60aa8bf469798c1b408f00b4e74a7dff07fa61aa5f01ba2f98bf0539024ab57351299414689b13bf718c69426c3602f556e00e78f4fa0f59dd6aa1497d22ba1b39a6dfaf0acfea7923cce6867af00c657b485c12a047024aa91934e9027e6a941b4b9c210ec88307f4411bf25b5f35a5dc648a239fbea0b29a230c167188a4a2156a1a57bb8c7829b1057cc4ea4620f83d95a10aa76f1a0cd7deb668fb8fd77b4d605d20584ab03c909244ce0297d63aa09530ee9e42972d04c7632e3a1da37ed766627991e74b5d2346b3fb0d543a2c154125050a80fe04aa8664459342e76731b662ad34100664019ac383138d84bf83ec98fe05251abb3829554f815fe7b199e480a6de6d835fe708049fefae20cc9e63c539d74f786ff541069e4d1fe7b05bfc8ec0cb710bd0056c4319626a0d5677fc9f5c740ca1717ec160c16fc5e444d8c9e43607f3944fc9dad37247865b7efb2c89ae03eea94b9888d5e9568bd761e91e3b7aef9f1e283b4f16096a1e6dd8605b428aa27d53f80bcaf3d1cb0e599d44a9e4c753d592c465649a2d6eab8ea4dd7b6f65381d68096e86aab351b75c994c37f429957bae5c58e9c94dc86bdbbfb392aa7ecf9c5853fc011c294b3e330ba7f5ae3c47e6a697428bc0fa5fa293b4e85b3d6204cd293653116c6c82a527869fbf87f18c226a68db4385b34d8458d9cb677b982a59c369f5eb4f98496f59d16726bdcfbd4dcee3bab33e8f8fd4cbad39a73749e3094563240599c801d00b3d054868e6de662ccbc7d15501cc2624004b2c136423e4c02b611bfa41ebd9a63a16b40105e64b8827a1f671a39fdba8062d6d49268100c5e2d394d5679f437ee704f051191fcbbd9804f0616ef29c34bda65705f1bf72300c3a57aa53772275eaaf13622bf02459112e89da10724b9ebbc54c8c4ca389db86bb25d05d8640d24c69bd7bff70442d5f9cb4b175c6c5382f33c2bc7df70fa0cc96b41c6cd6867ea33c9fd127e426c50ab8576be9b3edede5408ed6c6aaed5ce1b7dab266ff200ab06ef81b830fb1bb005305a85efd94175f10f5feb3df3b1c8097474f9669e5d87431d9ebc5f112b92ac5490db9fc9145408e28d3b64bd1d2c93530022c583c711c9ce120b1a0e44027a4423087cecbb853a78500d1ae12e150d6e8592264442d5de609cb6cfbe19216d1c950142d568e477dab54ad09d81a3d8c63163013d8a85fb348c45a36cfec42d6b89dbb1da4f9b2215c3873249e4ff332192cc598d703bb825110e8e65fe1745f333eaf5ed3197454fe745e0a6a682ef048f7952fe91209f5e45e71f43c9562e8c3ea4ff31abebb946d2f9991f5a07b70199242bf9ed6944d6e8ed78f157bdffc06ced868673c9b613a6c6547a63975bbb4ea931b34acff0ad89283567c02313ab51f33b3e49fb10e23191ab174f62f9338218b4b190b9dbb548254e4de1a30f71b27ccc0fba95ce9b29ed9a8d253aa304b8416c2959116b0c328291437ab17fb156fd3d24174c860406453c5e0aa28212003ded8ed5d99935313d65d911aa9f1e1598138000d0eaabb254a19318b49d340e142d62f2b67814fd9cbc236c560b67f79358e11571c84adc481b0775c82ab7eb101b7ec7b1403618e3e7307c58a45702e75149aa3eadd222996f46c4e988a41e8138fccf0bba85e3e3d6f8b43b0ed7a9c7797d8355d8dc3e4ea630bb67c881cd0d74b43e7402176b3ea59f556c25917f60356c0d2eb55efe4f8c05d34974d8136f750b7774719f639fbd7e1a2a557835a41696723ca890c2d3bc8d61afc8d362c687b95cecbbc8ede6d07bf950dd1fb8dc2e579a8c385d4271ef6f8740621b093912a141575e0a0f2d26f9efd7ef115f9ed319f900b8f19a43d265f7b42fd5cecc7fe59278b55f2878198dc961df196f0729357491b5438f836fdde932de9d8871443f2bb41050e3977b73ad0777d195bfff1105fb1656f86d467b7a2f6182f2f231269311b3b4a8db82d708b6e1344731cd1d627ab57e903067676d22986ca0b1c78c8afbcfe89533769844777b203b733da95ebd9f6a501aab9e10da3c22686a74d14ae6ae67c296ed0dc54b5d0515d5e115c44db8dda6a091530303ea311ba312e6a3f240e2f95aaaa63421dbd3a25e2343b49bd12bad77f72dd924aaf1027f8a671fcc992aad159f45d0ce5feb8a84a964c7f4b521b3d685e0ad5522a00239c60928d64e41fbb3d926da0fb2dfbea1c6aee1104fed4e5ccc4c830dcac278c324ec7ae9650bde8902d84c384bbe86a95df75ed2e1eed00648636209041c43fb43ba70cde5374ebe27b05e594d1c7ddfe04a6c40176d3482eae8b8dd47fa63295ae5d0f885bc21a95e29267f0e86e71d833d43c8928149bf1877e9d5c39c56f309e4637470a16220100cab9f140e955ca9696226d1094db836ed3ea9c201b96c3b9f7f62bafd0cc8a6210852233c5e35ef87078372b6b585fd4ecdf0811dfb4a0d1e88fbf9c534592ea88a88eb73ce2bc46e8ff90a3f57ce9e7944507fd9a193fb0537b07e1428d6659ea7385e8ba78d236e5f605bdd64c83919d586dc0987a4621f87c292a4793418db11fb83a21d09290913dcb441ae209bb84cbf5f48b85ae206ee4130f73dfcca1f748ebe3fee121baccbfcf125f0c318eddbe5d3c202cfef50f65e9575a4f064f0450fab54377fb22e4aa7fd2794653807b4d1fb5937432d5c97743fed24aef991f7a0dcd7532d44432f6ce2234087285324628ecd1786598133f397fda564da8d0d8ccd62b738f38218f0edcdf16d2305ec3857b0a0aceda172bf402948e5635a91063bd7fe727504ac94d6a7f660d7ac59ed856c62514ef20fa4f02127f4b41e0d2723ab4c81cab4db829cbe4de53ee3ec6dda8c434f1ca4c0ec53a95be3fc7c55488bed23368dd6d527e693cb40630f65791a506daae0d7e2e261956975133e65d789064b9813bf0c2f5fd4f4eab1ba7157bc0e3742eab9ddc28e40a60ac49cbeae63c6f3c1d0f378b0b6485932e99b708c45b7e689ee3346f484ed3408c91193555176f2feea8f78c9aeef46120f2fe1f56e0a60cb055aaf85199bf1f25ccfd2c0a5158fb106a21a7fbae3ed8ac2c27f03823ed5e7aa80d8577fd2b5b017cba4698d35388d69d080f5708c19c81b0910e01ab10a0fce1b0891402ab920f3c8f5bc1eb6633351fecfe454eb842c54f155213a5c1ed0472f3e4420211f8a69843b371e9b97309f996ba945f6cadc45b3db8aafbf0550197c61b12e45ff468398272fdb97d1a02c38242851a3aacae52544203b8173b6af19013285b447b779618c3530298be7253b46e3c63b90db9b5dcb71ce0da55379328545874d56fff7f30f2aca4e3869555572a94b2ca106b962e0f0af55dde9e6650657dfa41f8ccb396e2d08d1d9f77fe0b8782c27541f5de8543c3a7adf305fa4c256570943289f8a805a70c464f4434336d680af743f657a08aa27c3927a8c52a0697c637c471576e8cd64a4ceea30d85d99d0f3603af22692e38246e7202b136533751a3dd398b5c106b06eaee81cfffca470694c4a303c9e5e71c107407ca6006fb9821f72cd634271ccd14255bad0c562801db19b8d35d88b29323ca7a9d212bd4913993500a99dbe515237507f706261866db6e02ae3194773fd04a084bd0c13a85fe9405f036cf2e9ce0a75c89b450c4a983d1ff09e8e4da7324427665e588284cb541d1a7e56ae15f0af6da8d529b57e21804f52bfad41c4e27b6be8eb58580bbf9b149ab22c4a83dc958251db7cc7d68f3c6cf4ba838ad501b388ebb94ceb613c9b0219ac51ecd95d9abf2bce31adffe6d149d83a5063c7f41fa26c5afd1a4f2a0421c0b5d578890de9006cda4f349065742b6d08bcdd80db84210163efe6cbc852b7faa98b2eb025a7d70bd22a08f574f118a0a64b0b4393350af64b0564ab03e7cd5895658abb645ad14ec065b759b46aef5e6dd460252f25c877c2471c1e7a0b25a1c24121205c8245d4f4baf7a89ba515d9d990c4aab61a70f21e3930594339c5ed06434865024301bab4c962de90b49dd0e11238c19fa4b64536a4aba089a4932864adf75b1bf9a21f917ec0c093dbd2bc4d0c968b787b8a7e119c64b6028ce88d098b86069ea793862ac42403c42fb511211751e953fbe90b9de22cfa9a79c5902cddaae99cff55df8555ee391c7e7cabb46b218009f76e7441f3dd97be14447f28b215290f8c3c2e67a4e0ce177e8ce9d3d677d02c9502e90ec5ba809f1298586c2fb0548cd65c688d0d6153c286f68d5d7799caeba726fe1113a4e643671be96baca21e9ec42a64e185211cd422c0315d2e2829d38f671dfcfc118e75179225d0b96154cf141eed2122ad004a1d261ccf0c6098d28ae44740bfe92ada9c1b1f0cdc0931bc8cb01cd77e1adda03ddf04c1d5ccc3098be92e9774e3e930bcd0ec0c72a237153b4c468b8f51532f6187fa93b275f5c3d194e2f0bde432fa682070e4026d46cf00c079c38969ed5700cb910d90c98a324bae1ad6a592f917f04495b58dac242b1cd21c09b6621429775ff6807094fcc999357e94c2162b4bf875971f0ed40a240bd644d2403520246092adedd98eea413e2c2f63159305f1d782c883be6847f3e236c8f8293b40795306ac0a38a626e5177a61be321c40078d8bd8c09304960db4baa6d0248db66c5e8c087038f0d46e05829964e94055502bfda8b59179008d6efd293a0fdf00167589d41a699a96937c92dd8f761047f85f52e295d96c7f9f087030f0d7a5451cd7512f089851dcad2805b0cf94c9b502c100f3521f304cc12ac608ec8de8288194dd33c2173428c1230216ceb3bad690168cbbedae8c043c31e0c26305de156a413c7c1f66252e05c69d7f430c52b547983ec872c9564614c9c31116309fcc804ecafda956409ea191d7e78e0513f077ae120e827dac4d89e6024bf72226e74fb92382604b19519baa189dd41ad5c096b58dfc8b0472b82c377ad0b702911bc08e218612000cd590224f542f1a05f1ffdf356cbf567635c8d610050d5416b316c2b1ad4ec8a9538cf30c7cd88484a21d6d1c291ad6a3b14a4b5c14c65228411aa68bb286d80467e906ee46427b7f5cc4d5dc739c5e0d827285ae25ce538f310091248154ad003df101dd637e88d9c364215ca0c12ae060a93a33a777414b96c41e082c703c935aa1c51824fa1b01713735af2bcdcf90e37c1c115b81734219819f3225d8a852005c8c280489fef204574db2aa11b3f5c500c80fc1c32c69c43a2313a8fb716cc42327951636d6f197197ce728e658915ecaae7ebf7eed335333c793ae4c4ff4d630109ae60e03db63e7f10615b142a4fcf27998343ef780eb29941b5255881cb8ee1f4cc03e3574c52c628ae1249e02d319bd71da0ea76a30a7382c3aa2a49fc7e4c71cf0815d20a305d5ff28620e5a3403590f43010db80a8b55a75fde38754c5356513786cac557f236ae608e18cf81582b04c760c1cca88aaad7b242581fc44f30f306a2f21f9fe0deb0f924212f1b5842e378da7b56f1435df527203cac037c083a1877618dafd0d8f6dbc5b12dc030bdfbbbd63b79e8edece602337ac549104648c3df81a08aa02f9f11d0f8087d001f723073dd9ba3bb9c2babc1057d56ee464d12e269f35fc5adf62763c1c7872509274090a15e45acb71c0093e098dcef002f9102023fb5873b7faa3098b2490f0d1d19f20f999a0facb85aff3cab51a1dfc7632b27b2978509e4500c5b2cf6c32d8de83ee3d7eef09f18dde8710d45261649b22119c8027d82518df7df7bca9420c30f0701c6f3887beca252772e36fcee2845cc9752085116a525eedb3a7f4db431bb6e7146dcaaaf063547d337c8261214c32747e863e5d34304055661e8489a7280aa11ad46401f0388a63d4f2c14656951a39b08eb0d859a565e4ae3e837a1bdfb2b1d163feab9f01b91f0adf449eea85b1eaf9c6871974b4a7b08f1748158771d1aeaaee931c244190e9177539a27c4888dbf6884f21473049c72a87aa720b84c62c174d8c322770f2adc399c9a548ebc1b6e8d798fcf0f5b7659784020987703f0ab808e30c9d6098386cede89f853abcc721ece31850c31c29a7cd0568d5f2744c4985d6d4ac2046f391a6e0be8e07cbce988430ea3cb15f8d8db71bf39c45f5c754fd42091d185b55378f035e56ee450546ea511b94fa6fd446a1ff6142b1519fd2e5d0b1319d40e27462dcab7b38c7a8402324ba3be5b87fd0a4d4f1ee076b1bb5fe69981f3f5e4a648c46ec1c4878e6146b96464a6efbb2afc8c4d5acfe6fc45fc9fc02aed7d9bddbb513da8663d52cc0c7237ab09a64d45cf6cd55526f2e6a48c161fd140e5e918fa5281a238f3963902b42827c0c427c708e07d24cca1d8f30c13657493d3fd28a7e2c7b6e005fe35ab177c4234f2aaaf20bf08a465629d585a37b8f4ea060f5861f152165d18949b8fc6be1445568b1a3f4533b9c880b841b562765206f0e8765bbd01b26db91b056bcffaf80e1d61ddf0283e4dbf858003f9190c69fd4f42829da9e83d703ec08f90bb116c60abf314a85f32ab69580630ac85a9dda762c44b18624ed07a886aa5ee010b07c9d9443f81d0a582b42401f1d52c8a9478015cfbbd2c8844540e7d29450ebff028a516d79f5717c36a1d4fb6490e6809a2acc9aa904f17b76c46eab7ab901943778e7a5f7844e8a9cd59f5d2444892549aa39461209ce104898133cd595418d10b3ddce387c0093314f204507498c8ad4f20e8a02a46cff0bdf07b97e6541120b475edf0e04138ce30cea4304010751876bb608736e12d46c569ca2ef9edaa2fcc8ca073ddae7cf39ebdf14d60f74e50c9a559381dcb794f115f45d805ca0392d43314aed7cc319e6c2006ad557c4b7879862c877af6c85d93d6c715e1ec5612ed8edcbae0d561374d8225445a3fc8c405fd54e5e40b740888fab2be547032837d592710856f4a206e3f676c6443e9dadf2731fc101a5be8ff9f162cabb39d8271875cdd9cfc5c61914e6eec0a3cea509b0b1d65399b7e67150bccfc76064f0fdb3c43c6c4143b9e4c59efb2f6351616b05a4066a873f3721ac682ecaa7382c075e629659448d9d697c607a3f98d49ef9960d356fe032f62549bc8af8cb1810b221cf782e9a58b35e51af7bc855ac308f55267f20c0d80359719429100bd956487d15fe1e4a196966367cea94c47d6998c3b7e33281cc33c1a4c941decc5a2a4422524211083a4697a50aa2c81d7284bbff5de3bf197974c2071de4ec1731fa5d927ed20cda217c1a754aabf49a6ea5799e5f17c41a3c9c8041ab444a113298b8979531b95d1f01df7a3d024b0980757c11a1f6a78c1d3234c339d0b7c03ac59c9eebc6b1dd7b1a1162e816bd8afe8e6965c2e6e2ea87d1c7d2a5367003d6594122e3b62f97f96d145eb35e242fcf87f4820f71562c2b6c8465e50d3eac8bb1bf4e24fc06c49016fc3e96ab207475a9931c2f8657a09082eeff5b58a9a6048f03f0be83681be5f4f5eda3f6cdc0fa93030d148b52e56fd5bc548d47b8b11ce340ad4cc7ed007af1f1dfe1a6e3c9d10b6047a35278f995897fa588213249e971df23505c590d383ac77003529ac2a054b9e56be489f8e924fd06d06bbf786372e3a9b2939077c3c5258b7c97ec7db5b0952f7e60fcebc54f711774b0dec35072127c50a466b221b19262cded767a891496f5869f11a7a6a2b78b9238d86fba57ff50e58888fbca19ed2f9c03c04c3b92aa83853d170a10479781bb09dba5797b415da79cf90c30c796723381f72d592a32e93e6e3e2733008e7d445d0bd451e37718e0c8a0aa302dbce7f3f5a256c3e0e0add7a538dad9a7aa230e7bafe54462cae8ed1e8559e1824c5a134aa696d5d4a961411ae70b58e3a952934ec9846cada168f05e127e8e324a04f452eb660c26e8e3d15ca11bb50628137d5338d0b2af5d53468d4daa2eb79cd6b622b912784bd0eb1da6823f451fdb21dcb897103aa2cd5f80e0d5a659ca7b10b585158cc02a0ba6ec6c76c0c0cd12ed8bc248e1b96d9e836ce0601b1d46a20ad47c9e242361c08d1e26ad087a765e3a2330e0890f3651bc70f53afdb68e8bcd4edaebd7a5c1053b758e94841f4111869e4bbfb006ecb76163790dc2e2b1ac6234feb59a4646634ceff2e2a94c9b24a5e5fd9d0f8779c490c68013a1846cf1da33d632eb05b2d2b37aafa90910d9a0fb1ade3a69c2d5a995ee2c5da7a12d991a64d12660975efdd924e18dbaf59571ecdc92534f652601ca41f90802ba673ea3326d6bffbfd1f93b467f9cfed7b0de12da966516874dd6b15a40a3ab06942059b3f4d9c8e97db84987d9ac8f92bbc24cd97fb3609712ca68375c16bc679176074d21af2132b4bbc3d198c6e088f94562fb67fb6969fdadb2164cdd54ed5fbcba2bb535dc8140ab1129b5c643301bd16c1bf8fb3f4932cb964bbcad0c62d1e3501aa4bf2163e0730475a957629de12ac825cb373f42305e55f33589d9b600c68187ac8f3938522f495c13ecf49b811352551c150bc89d6db45df30aed51f9783c8e593d3435fa3655c6772c1ff158bfe5b1f8d06313348315a248a59f1fac58038313089198f6d8c353e6c28e36d4a1e865c669040b8ac67f8b6366e9434335b9a0df239561756a649b586f02a2cd84c429c434d4f8e7840310c6c184675ca9eaa752c6297d4067908af06c6aad6aae23abd771a476b60c1172ad903170d1e41c98391afddf1a54e5fa8e602563c085566aead3e9343985d0a17d021043fdb2c4e359e33aadc179f973c3729a8428e52903558846da820e83a92fc5a8248a07595e466ec064453e26deb79b46d85d4afbe6b666cdb245ab388b796b6e8879f39cf35d18f4da277803595a2a67aa03e01cb11316a1c559521af9599916d4b2e22c91d5855c469a612e9005e40faf7632dd2cfd83a8f7d14234b843216c37bcfa18588f4e33d3c5e9b938eb12666c66877535c1aa0a04d837beb88b82fa6a0bfd5fd78b4bd2cca912beabc9dc05931dde1ff441cf5e277aaac1b053efe59bc8379a80bdd73572c68114469d4917748df8f4f1ac5e601d419f0a11a29abfdbf2769a84612496dc0be0fa94baae20dd962c7dff118a0cd0f9fb481c34371b2c135bc895d8ee912f47288a397abed1be5fa2ddc047e3b2465d39d81ea574d6bceb74040a6d250002b67293d7441a29a5553e7c498918e713755dcb8fb45f0a46c83a812d3c1b877b561da308bf1dc2dde37134da07612b8c66716a1df80760441618e5f9372f604a540e31d9d2a4b5f694fdc851655cb8a2d22aac3e46c33aef40669ebfec017b331c3094b6b2f7c6941d9869aa1d32db0c1beb16944db5109d173bb029cb857713ee2efef00b1dab5110fb7aa72cbeaf1ef81d4065146fe3c4d884362f923c02badfdbee56413407b4e5e90d8b24c219d34f68d61a6b3a52fa67ef892df9370f1dc0683a7a128c494fa85e77b080bf0a187c23c26101f95dba7d8549587313da14060b2ec7a740e8cc1897aa92131727ce1afc7780cc3d1afa87d21ad4cf1fcc4aaef29b5fd15aee7153b76d5d319a49cec80720c350880d95dc9ee189b03a7637ed53a37157f6a97e5d0ba0810944d2a0a4f1114412ec03b1e63b702d8a7292ac21ea3a20c997137ae8ebbab85f41c652fec67ca46ad04571f984106e3f23cd17607c04a9dd63b3b5ededd5eac5d2e70a99e8ead09e376604d764388b9cec5ee5d83bee5f0160de903de7fb1ed02e04dc5cf68fcf3e634500bcfa4738831c9be0b6d663b10c6e532e6768da186a511516564939be92bb6c22e335c4694eaa945b8ff1257f1aa7c0a00549071b51f096fa8504ebe5740ba40393de1ebcc0a9d50f4090bb6ad050c96a32f01ee88b98ab505ac2f90bb59da481f4d80f8369554d11dac036b6dbd912301641ce82ff693092f056271d38552a87f9c37b3ca60748ebe04a8f5bf728f2c750bb2c0052b885a3050c32091bbd835152fa3e576af68340e0ee9097491cb9960d5ece7605d7bac4125945226d085af2c3f96fad07c8c1b79247a3d3525626ef351224b9d07b56d6d6ab48269638b9ce26958f4444970d448e2265a581c1b5add737ab78de4c9c4b1a5e9e4867dd94948f10f4d9779328cc75b8b5c302638eb23e85c66729385dd59881d484b4c9db60d4c3c6044de4222a22c6035a80d5ba9c0c6c741eaf90c5e7dff1dedc0f7209876c4297c7ec5ec20ab6b8662fda01f27a2962209cea88221a34f46c9fb660172bdeb91f4f7a2b504478d9f0db3d185a5008b58e1681a774cdd5ffff12824d06e5b4407da52034a315a9676f2d325c1c5328c1cc05d974e88c8ee701156eed28b90015188e3e05e6944134a48040f1870b8b1311f78be470f3c0362d8ceda16274b3c5f5ce4dab5881e82f514613db21f3dbce4207e8dd41a1cdfcb3ee889d852996e1c8e9c688f2af0346da8bc44a5bd25c6c214d17f646210d69614a2df8e1d6517e041b132cedb76d7ac6dcc7461e8659517f4ff0d5f7ddcf23e93c512015ff94dce967825a364ab42be967332a4a2f0670563aec47df8860a822d31d67f39469e8a0df1fd08881f0962a5e0af5443944a50c4b6e714ec8fe21af527394b207ef3810ee624e0dd3e6e759ae4da7e64cf2b405e78e1ff3e897faf0810bddd885a0e1f7a0bfcb400e123463c6a20b367e4d309d8ff1dd4a95d46af671d8fffd4d4fee50faad79928ae24ac9e66c3da5c7d68c5e6a10cfe4701014edf57e315d7792d36be931351f954e7c84850b59631accd202618b01a6c2ad85b1df38e94490bd18887445ab575213331af2967d8ed47dbed3f8649fdc7003cce760b2b2073cde99bc1bf094d8176848055d638767bac45fcbc254e6214e0d07e71bddade80c0b7ce88f632c72833412e5d52539e41a834722a4e83e343959c320c79ae32c140bc7ef692f4de727caecc63eadd84caec9a4d06ffeb8ffcd0caa26cffd097aee46a3602861fddbfcd5c76232cb88fddb6370e1014fa75d8933e8a202e6515e18140fb302271c1e677adc28f54cd9d552830ea9250d3421a5d0bb6756a800573a72d97b99fa07e4ba91b2445e894c5bf821cc506b0336f774a1f0269585b79bb4c8ea781461bd0a3afdb6ffc8c33a2ef2b324c299e198a08fb727b4ef1bbb5eda35d50acc88ea6ffe6c114ef4a8ec4a3487387ae81df0513613a9ce86bc5c27b39f97417e17b0cfa7fceda739d7ff7881931cfcb06e12fe0fd251c88aeb8990f76c3b0e907dbfa3096f8356fc3feb27f4997a34106429848360b642a985efc281b02423010a927a79046700d28e9bd386b4113737eb8be59e993a8b0ffc40ed1d656188408aacd78be549f6fc01d68b9cd127f4852c57f5cfec05c819e9af9e881222fab75d1b8da4e7af3af643aed7ad7e517a6d01fd9d9318347c859211d5ab421570f16f50213714161b652649190454a3f3338b90c415809dd9740a62bf503803194682a4b9cfea9ee4bdd2d9b9db1ef6789d574cd2870700427591916a44d79f214150aa909f2f236caa9f553794e7cf947763dc7b2be6a622a19f97bdb14ff3dab60589ec4f5fceaeda5c42f676067533833d3da0cd27d39cfeb18e4c8efebf34e47e557cb580cf9fe325e49e08df28035aa7fed8bf13eb470244dd46a5f151941b5357700620e5aa69aec417bb9816c68dba447ccaa09fad1c3ccc50cf553077eb18bd01cdecc623cad61dfb0086445d3bfb8ff53c036b350b16c766c99c447e013975aeb11f4dd8161ae450f252ea98420d17ad8bf69bdc4fe0c809b69c933e0bf0cd2d9905749c245f8a9292851a39962f356cf8f98a309dde8c68e8bd0629f700e88d92f23964d4692fa43d2b9ac45b2fd06badd9345a898e9d8e1757a701d211ac3107432d218a0a24cf9096f70c4934c3d434b48cb9b2db624071c4c731c4e372090350734397936703a4345a0456101483acbf90fec113836bdfd25d1fe93b14fed1611b5db927ac9548498e881e69a61e4a9a45048e05bc89433cceeeeaccfa38a0de433e793ab00296e350e46e29ff25b09834e8d6f89f5c3dc353de97a18bfe9a52e38a4e3ab8dd094b6d51e47418468a6ff3c6d0fcc24cd19b9440aa6220ea762e41291e4bcbdf1ab4069f5088eefc2f20301a22496cd99b30e4e47d448ca1c1efa618a9e647d35a18de0f797d5ce7c125cacb44041dc81148348b358f49335292460ca978f1dd232809ad63d4f2ef77d6f2588d3901df135fc2fe6b8ec9d6e4f8323245b3ab04a8c63c1a6ebdd404e814520d80dea94a2e9a37686ee347be5f7cf611cc423ca7ed5d342335c21a5fcd0bfa785c7b3ff29090ec8ac6ae807a5b8e2e967466fc040cebbd29ef1d5c421e0ce27c1e227d3057a8c7505599d0816b7e9cfc312644b0022e999e9e35321d36903a1b1d1eb15fb7c80c88bb638f15b0e2fd9e58eaa42073697c7396df27418419ac980a505e8ac682d61e0cbad1250eb836ec0f8e3f9026a3914da696c9060d303a73de48da625a2a7b22e9b2635c3ce2e3e4ba27f1307b7072a80b5286877f09b7170920f780905d5473cb83b01c615e0a3fc4018804ad6f154e5cb430e5a0d7bd21b2e3177fe3c04d1a0ec63b168ad5e92a64aa2982d4af8d66b7a7de215f396d50b5902c78ea2c0bc68f3d820564153d00ade57f4d53eb36b1e3a89f011d75756d2cc568e190cef819229d804e8d8814bfa250a20d7cd5c6a8369da04d211986bd00a7dcd8293fbfaf6bdd97cc0deaad821dd78bbe11d5a7db633ac78df7d46517024932f9b25aef5ac9ca8cae91e631941d7c8f58772b10c63294c5db457f6ce7e23d25992cf70a422e62e192bf0ea05a4e851a2acd748b4392e8483e938a9bc3ad1070b0c0200c2a8c4ed21214d30884f762bcc1c62e3c6de01901dfa3fedf2eb77ce717cbff6628de91abb4817a6ee1fe3763fb4256b6f7b9972ceaa62a35136011a9f66498b7a3e802237b475986228ef01e86aa47df35cb7bf666d21e7e2cae44273305deacacb89b006dd7f56dc8de55cfba7ea6a97b07c814a701ba7c8ec820a2a055fb1f3281122d51e3bc75c09e341ef6c57c361840aa9773e3993169dab83da0d83740d1322e3ce62bc4b446ef6e8882fb8a01cf1b3c771492a6e3b38d6d662e5306200331cfd8cf9ee2d4811c75cf9207d7150f42fdff806d16909a6f8a27cb283e18c753d9673625a82a00380302d19857e20805031ba8cca18d531f7c3e57361a35f8e5b7b2de3af95ac3b21d3a284260ec5fbd95419794e6a779b2c2507dff25470fc6bcfe7ae00a14bef81124eeb5080f2859e2ef1e4334ea62cada3fe221feb513a0b3bb50f6468570fdf29c1cc7045a29eb6ab1d3d096f6e27dc5d917dfa0761c428c0cbb2b4afd15f225f6e6d7ab5a22545c437914ec8f28a3c963169e3132667aea216c5c353d470ebb985c0045fcd9ce779b80023087fe936237d713c0f4747a6d7df0fda238768cf88e58ce8dc031d7f6a8c6fe6bd4859d9bc92d59a5e0b36561dd540ef3bcf5dc8d1932f4e0f9ca5826b8f09be2d34b32158c14eb12e2ad3d81a5671d52187c1422f3045e31a80896cb97eeb6433921a66eb3f53e0b8d8132f0002d5e8e2fdb36729f75028bcbafdb2c02bc91f54bb8f359bd6a3f2083777eede7ca91c7f20aa13b56a605248c46764fa0a38ffd6ea8fe7ff43115693b48b201ddda64c01151404e459726da06c6e9543c10759aa208bdf366d561845ca4b7c67d6bdea85de84037d508ee9752396ec2a2db627719345ab89025e37232050a539b91a9507686133147147904145fda67ffda0f160226ee7c51d7f15b0ef22379d0b1b00d88e2796fca835e4773b8502bbe27e8cc05cfec7cb7d3a499f36b610a6b62325d9070d673e8498722ac5c8f5f57ea6d02a9dd91ebf55ebce179fca3519bc462429c68d3562b0853c1d0c06cb9c976807b4fec7ff52ba1e336b7042f6bd5014420e576fa563f8524e78fec77ba3d5605487809e5e48a68ebe6bb883fb49546774dda3c01fa0102407ceeb228a154de2a93b50b95e8a4f2ad5efdd158ec86d16fce66967794fab7b0cbd744420b0a8fa53431eec26cb6d82bc18db3fd8f39209c3b5951d687b259063a3eb96fbeb8a4003f689661babe2e2639c231fa504de21e76028d5c1d6e1969969103588b7cd1128421460087ba3c0cc7e664fc2bbdaae104d6b20ebf342c22b6f3de4cee5fbda1fe647995ed79923244474fcb069e33f510e69bbb9c80e8101c4d95dc646c8284fad6014799634911ce70ed483e716a4c5502363c62aa67d1b0ebd2daac5d051934417d5eb4860b9ff3af157c773d694376633fb3d2afefbb4df0d2e85ed8d492988d02096a1e162c89a8b1a599deb1f75557bdac99615740121579831e7e9382e53a3d07cbcc926d7fbe41a0fe59e6f62898a9cbc64afdcb55c57f01126fd694ae02dbcaf6d8c42e9019a994b5589e98a6f4f4f89bb351190726c7982158fb04228e26fc3beb497f5c113137a81bef23293b7800d77ad34c34341097d28e3e1d95e82e9beab0dd21e48ac92e2f550405121fbcdda3740b39b464eea801ad2e3c56536d95be5a606908f5741061e99ac154b9fe6998e5ceee6a935b5a92e94e3074f0052d7cec87aa5477997f22b9f69f53be0f1c63ea8b60a86bd73edb1611ac4b893c6921b6fa89c34a4982c0ae7c666b67cae05844c2fc60c41e651987954f4985176224aa8f5676fdcb40c6b220d0e9abbb1ec66a57c7bf9c5e10ee5d8a67e90bffc56091351cab13d896e26d279f3d47f46e679a40c625f8126207589e194802a661ca22c6cc3e98a47d4b0946d96678f04e48ef84915d3419d9fa2a1f06d6bc608a435b85f44036afe5637d6d662c1c77925b9d83f60525b51d1a7b95d3d0236e081d0775a5a4d20d7e0a9fa495a8a6eda35dd4276574c55accf1052a0e7023a6b8769141b7158f018e8e54f433567788abc2a8ec212e5d709cda68c923548310f22a8bda8ed7797590a25c22097ec48b7a366969f5118a334455f6e5064c25213b27f5ee94f57a34d60a4b689a736f2aa1cde9850bae62b5cd3271b2c84c4727060188c1d4211180b8e24a73436167b16ba4ea17b7ba0697779c161fa61f5f48dc027be2609e480df449a663237bac38f4c702d32e22c4165e067cbc9f3c416853b431a6917d5be016cd67f6419663cf18440a57d3dcd75fec6d952f6167b7b8f09f97f91dc45ef060d54d7402f05b19a8a12134dd3553d6823fce426d97bdbbd517fe807390bcf5e577ea8b1b7ba26639c900b08b250a38584be0ff1209c3e7c0a951953cf6d07758b66531e60cc14b3c618f5b3b9cdfe5749dd4a52812a7e2f5f4631b32956d8ae89e382a87f647d0e70552c64fc019aa957ab77b2bf502ad60f29a04756c0f30aa92a57101d21cd4d1a54a2f43eb89e38012df40ddd08a8e73d15d064de8bcc29881fe5f3246d562e69eca088ebe90538f1c8cbcc8732f76a4ee450beb94a73cf9b12cbb3529c98f91e2a53275caa1e776f99fe07735787563e633a5271b7ef4cfb64a939b9b1281985d1c9dfee95af9bd01576a7a45a05e84fb78e415fbc27e4c4a0adcd62bbc05aba98d543253a21197d1f7391bd4df484e7e694a00faf62f1e5331aaf62c308071f7b8ded4ddd6db4d0e8312007510cbdffe17790fd4a3eef62201b885b812b274c5abafa4224bd2fb4bfd60bd51db8aa27dd194180b42cb9696ac8d082d2fcfbddc954539e21e6c360e01dbef5e0119aad8d7018608156a40609331a79e465ea96a57884554c994ed7facd916530fdbdbf39691b5ef258c08e74ea44e7fcc5d79e38f20b6d775451dea00e525ff63bc0a3c69319123daef15a890bb2dd71e8be3c8637172202e72158f5fbdf1f3e4e458fe42d27e392a2782deae527d5226dacb877ccc5bdffdc0a0bbae6db1f19df73978746f12a97c6e8da5fb8ac511bd0f7aed3763fb3306346cf32f0654ce691441380b1ec0bb54c55622eaed4e47789ea57cbc7bb61ab25b6a1a7bcf7d10ca207183475c789a9fe7b9c684dc737185e78cf2db6087fef5b0f70a985773d7b633160fb5674c419c548bddb2f2c68cdc9a68eb468b31662a3b613ec357949f7c4585477749944345ea63b575e07ff305a372f74d3d8872aca7aae6bce6e751c74052d90b505a88767ee3682a3a24e95225890f81d1a6828d3130d1b789647909683bee9223f93ab2d9e5bc3af193b161ec233ef3d43130365bdbc6ee62e23047395b2c5c4f182628b1ffdb2b0da9db487935270e8a42e629307ae4d56859c20945b22f918456d182dfc2131e571a505d26325bb4ed663c904f26126cc8a8a2c420b9873b00986329a5c498d1a7e21ac78c5eace02be92ca504da9c3838032425dc7d1eef90b1826754d5e128b749bab3f114398fe3bc821e0eb35a7fb4e21705d1c7bd2aaf1b8f250bb723bdb4e66579dfa78a9bcbb1b6c5a605a298f129dda380b6565fea3b958233e6ad23496d4d53b64adb78ba007b5d6cd3078bb4cefe2cbb3cd6aa561d55edb288954b8a49ba4e3b73d94614419e4f4343c00aa90f76806461605318483262005a4b394da6ed78e28c065104b435abf5b492881e1de7100396d59bdcc1a647455b4ee39935609be6672646a6e636bb58529656c25eee17408226baf072bf68ecb7210a039878580ce67ec9f9da60ae82385c87b980f8165b721848231543f26d3b756fa25f568214da85e8f5fd4827f47ce4d53cdc319e1d2bad43cad50e73450d37528f54bdaf39c7e303366167223eee5873a5e05366b41bbcdfd01511ea6ec8ef80b9846c43a0f7c2e9761de3bf627ca0f2c1e8545906697c83d83d770b2dfab720d068bd079cdef78ec641fedc98e042a66c96f634f424137cbf152bd333930e153937eb1105a4310aeac28c67a9c86f7aa5917efa428c777a3ae7cb69331d9632676ae835e44289c9dedfaea43c864da772de4d2a6b6eb15ca8c961a390b0812fb817d751bf817614d387b6498c4173c59a65245a661cd17791e29e1293709830310d87d975ac9e57f9c23fa97e444c933c2546b5ba5caf1808bfc960991f54343b8cb748b8c89bb6b368c0821110cbb23bc6fb9b5885700ae3668d7eab25a7f9001b157626f95de70121a3722013b56016feba7b8bfb5b0ac9a47052751d79d6dc790dd9884550510f57682cba94ec596203e0b2b2b75b95b53200864756116f77b76a819ad9492dd65f108a0e979f348bcfb12dc83010617130d13660c39936d9a8a94bb1c8134a20eca18005c0f1137cd2618e84b91f3df67178e9aafcc244f88ee2e06de4ea28ccba986a777c23bad9de629ec577814093c58628f04e73bf409902a5b565424b5d2a1ddb76ff1f3922f9cd042f7ec2e8a477b2165aa27da02bf214f8082d615a249bb138628a2161a89884f8e8d459403b0c689a94daabf12ccdc9ce13bf624f4ee6f386ae8e81e894a52035aac49e5cf64d90204ec43b59af3c738627af6b9bb87eee45b7c20213127392945e92875b4b1bd20cc6b0797ebc41b995e1da986ff4a26d114ff8ce34dda71f76d708ee5271ac50f5b70e4babf8674371d201ae8ba2289a8c5aeb55003af5ed8fe9d476387d29c796258a6bea9ddac319513b7be7aa020fccb7b3be53339d230a6c45fe013cdf4eec9d6b0fd87c313d5351040b52961ba166e8632b6425671471b33f729028762af70d524a80815c5d6233e0e0f0cb5934459ebd8fda9df53a0658beba0d14f882e52cf4aa32b691d636c897d899d4f98ab60b27cd304ede5ce7f242637adcbbb4129b3efb99ac3dc7d8fb0b65b4588b1bbe3c3a622e7dae4a6ec6af96e245e9eb7d60fc7fc0f2d216b7c202f96887b57c25d9469adc8baf57d3924a023bcde4f80ac94e8591847f653914b654f5ab7d21917812662f683bbb460f0863f5ca542db3e5cba734855c6bc2bdd29e3bcda3ecb9a41116d351dbbcc617224b71ff2a817521709d13d4596d577284ea8367e10aa717b3dfaeecc70331f40098d34d700b519821fd32801f45b486f43f955de3cf4cde6005f5df00b6a2222de5b96ef0ec99ab99e6418bc42e4ac0d0308a3ead280029282bef12d8598aba1b86bd2fcd7f5b2cb2a8b5b83f5591d52b3603ee1dc8abc3819ba1afdb4c38ea60cd7524e541598a350e5ac9891c9715231e61b88b451900e05b33a3ba2ee92c6d46c321bebb23e24fee7ab0d0c90f5d22d0bdebc2566952397d4fd5507181af48a7bfef1cf04e49d7ab6ddd6334b36e7dcbf564817f5c396fa6bd0497f7c756d9517baee40384dc2004bc42054e010614154f1038e36e3aaa40e3ce5a430de2e833d7f58580a20f0b143342d80cface5ac366745e91cef2851ba898d0b898d038b9434ff205442e480f2ba52061450b4a07311316981aa221b4775b6fb2f79652eecc14dd1515157fbd8dd36e8ce4afb76fda8dbf92e4f8fcd9d3ec6d1cacf37e8e323ddb89da70a6e510bf614173560e4b6d4a61631e1a851985fda0761b1d7dfdf5a3af23b0a3b0f20c12b3077e360ac3c36b8424ca719dc8d80ac1da5dbefd7561940bc9b643a0b6435c2b1cd4c66550fc2300dc4cf6e4a6e1b39b5487aea79e8742aad00f2733d307aab38e7aeb4940c8f9eaebeaa883b03a0a2c9104afc25498f3a5bebfa86f6103d406b08e02a5d80faa54d459a012f652e79c044ec00d0fa4f08e243af521a05276135ae70c30a155a00b9280a0f39dbb204d5d7513da05baddb562873eb0024b90c05ab10d01cbcc24f44b6feabb84cb255bf60faa76ceba099def6b957529c6673f9cdce58bcc4cd7539da7ae731054df014b5caecc745323d78e4be9bc3a3f811978869317f95775d69380b0face773b571d845ddec181b0731658e2a601ef0adced2e1cdea9be7355557737d579ea3a1d76cb4c17277f65662a2fde71478e2edb98e1e831a888cfb01546b1f1af0bf9b05221234e942c476417312725489494855932c688dc0ae44710903258658a4384c869e245856c4d5f7ce6a3c569180d0bef065d5a8cc4679f00acf1d79056ebbff1d9d75fc767e5d0440b322ad4b8490912b7a61c0e800fa01d578ebcc979a2afe364392cb91409a3564604cc1fa4be8ed9caa1091667aeac71e1a184cd90ac9a38711be3ead2531405bae00568ae4591f3124946703e911c30e72f28d72ca92aea14c571c3c25e84c7c083ae067f0008010582830fdac33f9170daa083061c3268a2da3042c3149308a194075d6aea8e187ad0a93420518e7d51694f2f300070a09fc4061a644035624a84d4306aeaaf8780fae1eb64a66bdbf32d7950d8f404254515fca150203e3c890d34c8806ac49408a96194148ed21e74aa11502475da1cd7513f0921ded1840a400c1a3a7c88c266bab63ddf9207854d4f5052c11f09101f3c6cf0a48153061da8388c689ada20428314d35018e5417ffa704784f0a0434549516dad69755a41486ca041065423a644480da342407df8eb203efcf07532d3b5edf9963c286c7a820afe761f3c3c654035624a84d4302a04d4138ed2c0830e259585a655b18c1a644035624a84d4302a0414880e7ffd83871fbe4e66bab63ddf9207854d4fc11f958727a7111da638886892da30d410c5144208e541176ab8234078d09b3a3c41fdf56be5a665abaea8464c89901a46858002f141c35ff7f0f4c3d7c94cd7b6e75bf2a0b029f8137a72ea20426a1815020ac407218e9af2a0375d2f91a51d22e116a744480da3424081f8e001c35f7f72fae1eb64a66bdbf32d795018fcb55ee22829a70e1c864d511b426880620221fce04177e01de1c1831ec420bc2e829796288411a4865121a0407cf0f004fceb4e1d7ef83a99e9daf67c4b1e0cfe781d3834858002f1c1c393e3a8280f7af0fa06ceb44517f840540828101f3c3c3955f8eb1d38fcf07532d3b5edf9963cf8eb417168da0042c307260fc2270fba6fc21de1e4415faae0fe80b4d60884094081f8e0e1c9a9c384bfcea1e987af9399ae6dcfb714fc1d356dd0e0e1c9a9830f477df0a02f15a04b8be4c1071f3c3c3975e070f4d79b36fcf07532d3b5edf9823fdfd3060d4c4ec20e1ef496774770f0a0f78eee88260fba6fe9af9368d2265101e0c9a983100f9be9daf682bf095ee23b8249c8a1a9c5511d3ce83ddf5f878ad22a3d4975e0d02484cd746d83bf252f71549307ddbc23983ce8e81d21cce041dfdd111b3078d085ee080d1ef43684de5f175a6929049b9a36a07f5dc3afbc4e7bf7d7997ee575ba2efce1eb743d8363f8a5d7690dfe2a788987440f7aba660b3ec740fc9597e9fa855f7a9d2e30f8732f7154060fba89a33078d0d33be282075b29ed6fed65c0f02baff0fa859f799d2e70680dfe805ee2a80b8ec1cd3b22e81880dba4f0a4bd177ee5afbc4e25166e124c3badafe86ac92312c2e03782f9d881bf9f5bf855f851f82dfd947ebfa49fefb7917e67bddf2ed53e7b5176de8fe8d70e6517ca55ea6f97b56e90cf9efb1dafd767b02fd3d6e7c22729121e7cf0800b7c4004128a5658c6adcb85ef117f8569ac41cf881e181880f2b32b652f3f3581e689f1bd5f58784d2aa8a711502447aa371dc5986a0b0baf09d524f4b569085237cb08f5d4f4d93194d914745f084f256eb1e94d47316e1261046170c9178270031f08bee9a82f7d761c7cc0047ca9d78e7016e003d3515faf5d73084b9ffd0480afb7a621f8a0a442e87d2e41c28ff0c2107a4d7935814b3ec2ba4b7c8b85374ff089b5e575cae608f97b49d432988504073903b7efcb5c7261ca6518000a40c28307a821c335250b5a10191fe0e2c6079d239c9617236c6072394ba1305cb0cd5092ec322202266d6ccadc49012850912d0ce841444d8d366bb478f97e543941e365070e0a1796296069d6745dc1f12aea1cc4499cac3438d870210256c1c5960d275894c4e9d1b9cd4b1d175c8a602919e2240784cb8b2677daa8e17a8266558516a68aca09304294e494dc9e28f1c1634d15a3c9c6020d0ab0221693204472247499c1e46d0c4d8a3d6944bac8c4b262b44102f13174b542cd933855aab214d1f4a952dc53878ded870e132aeae81994e409d70a1f547dbacccc925ce921e3c34619088b9c192ac4d8d8d265694b4e518e0d3f4c8e6cc920236389972d80e414f3e82c83ad4c902756f648e9c1d6c234bb74ece0c1a40f0c396eb4d09093e785953260663cd8523c9130f104899f21675e986961d182858991b83f7f92ec0874ba79029fd824b7dac2105173a24ce7373fbe54e4c902458cce5a7d4c1d9ff1a03abb303f997d7c64e121064b8daa3c2658c800c361a304335cc074060e6fd1e8cb3236347e07bf88880837315335de4c0d112147449da91c6ca65eb8494e6d89303355c298ecf6d8ccb953970eada93008001213c042ecd898e5753c33c3269aee56a196d73b6a638997cd0a0b8f390d0f71d5f0b2b1a185e1e135331bdee311ec87370b0f49c0c23e248199b01fe182a819f3d507dbf030c547f30b4795e062b01c8acd70946ed06e75acb28e7d48c8315c8b1d2319bb5b38ea06c15197abe84ef1a8d36e8cf5d8b1168eda23a02d36de41144eb4fbbe15a9dee0e286eeb8b5fba699ad49a5a92585d0ec69f7053b22a1c0c2c6581161fab4fb6edd2c244f5b41b8d6257fda7dab1e6335555dab7ba54ef5d0d38e20fc400822ecf6f8697769f680027c0082eecfd29d763fed11ce2728a954049cd458084bad632091a2d673ed90d06f04be0fc107086581f848a4c8d5df087a1f42ef4594293a81f84884e722c09829101f89f01cfd8d60fd10d6f7a914bc1ff602e22311221741c70b3361179176741bc2bc3ce5b089d406d29a4809d386c44bca00e0cca8fc280217c658421c29671c2b1fa43ee74352c00bb2089a3959d2f4d8401a187d8e38f69cd99383ad08d0064b3e1f891b5b2bbaac906f7a400026481032900a17358c70760cc141420580328c844fa3394286cc1a372fc890c02ceced0aae8f1c3f38ca08bd91024091c89c1a2abcae90690ff8e81316084c1d214774eede78f3e37339306f867cce83cee5520a65699a735f1c306b763e07a573b93497a3504616e64a47e65e792b9da758d7a8f30fa48edd83d4f72dc2a565b24c3b7b92ca3e5f79a6c8b0af2b567ebfdbda01f70b92c5627a6ee54e12d93f03cfce176a5996a6f97bd36f084c8cf1c5c09d3b51d44f9faf6d4d33f5f304e69c71ce39031dbd671fb52ca76e39559653660274b4d713a0a3c57e6f2e013ada5b4e05a02c4f1445f145336a96add02e71dda86529f5a22dd714e37635cb8caf69e684cc9203f6d52fdb4129c3af2f059b9e7054e91788d7dc018f164f7199ea32a5e5629f22bbd8a79077ca0bc6f72492a594b4f74b322f74bec4c2350bcac034aedd77cb14d4ee5be4d30e51c9bf0eb25a11345aa125d94dbbfdcb6490df69f615b3c4cc66a054a0b6bc2370f17109e8b36a523092b1b0c8affcbd69c26962c68736efe54a8f5f37ccb7ce9f9c263b905cab8b758db768dae9526bc3627383bb406613c5a8a4884ccb3412f83cdf303122d93a2974b5abf049caefea6fda39aa99b999c0b4abdde6e3346ddb9c3ab9f2ea50be72c5bc5f9fcbe5fc6e99be6bbc5839bfc55bbc40c956ba017799f4a5b567489fd4935057962480bb0c73608e25e6ae7c310ff158909209bbcfd8628d5dab94ad0d42220f7155c984ef5a79c74a26ecbeb4f60c57217d52edd316fa7cad2e4582d71e3bda65634b9bad351cc586dbcc738dcb8c3963c55ccef5ec80c3e6370e82bed022e6f61b579d2c11453bd242accdefbb463cbd503d2ad6e2fcbe6351a6a3d88ded52a68ea628aaf3d44be45c8703816115750e8862a15699e99a264e8cf2b883e2be1413c4f51bedf1d7cbe4976283723cdaa39cca702587ab00acb35b665273fbeb3ecfc30d62faa83916f575611e9ab0725d0412f270aa842d5c61c53c34a1af5f2ba1b2305bb08afafa3566cc9587a59990b362b1583ca1af63631ee223de822b5ae521082843001df5758c8591499c76fd22bff210b3b1fdbd7eb7b8eef1027988e132d375ec411e52c1b881d4d73f7880d4f5ab33f288c469a56ecfa389ccc0eb1865a172e0a42dbdccb189f385bc6138aa640367ec9ee1a8f2babd0b4e575d29073401c2e9aabb60e7eb0954cab9097d7ab9f30f76ad3f090da1ce025b60090741c8596009a1a11575d54bbdcbad9e5bfd832ad585dc8466fd299f38f7818d24586d7cdc847e37ac8332226426d4bd44121076be7a8924209cbef312494060fdf40b6426d441585d0596f82033a1be02dd4a9cc01224c2765e9ea940259d9783cae4e9a55e814a3a6009186042a7c00faacacc940376506675214f02025b22895202545f1d04d557608924392fa10273401054170296b845e0ddca4ca8b3c0b0a2eafb62f5c218d103e64409c61274a957df770babababbeae2056f522d774a9cb3b28ea748931532c16f50e5822c9076789ab4fb647bd7c10a6dcecc17242df646642cf3213eabb9bf66855d8a37ec332530765da52977bb2d05981fa3d6626f486b16e49c8489982552cea529fbeeff1baa945a854b45bf857d8f4745357d7a13033dd9db70210e1c42906eeecc23c342f8a00d47769ce6cdfe7a435fd34af07a7b43bdd23e057c21ecc7e335009bb5f0cec000397fefa5097d67fe9f3182e65c41493b8e9a2af3f95431359676a90349e744909a3af4b95c31194b9b5188bebd2f6425f27510e4770a54c4fb288178a135a8faa6482ab5e76e32ffdba0934f7b4010880290cc0c5b7cca6107612b8045e2e679576dfb4b4ec69dab63e5fdae78b4f5c6213bea4342dfadb4f60100b4d70711e159f6a0e4577c09df39ce73c353d3d4738df5cf1b00d8039f4a2f56fcb61883c7baef488a1a6c996beee2b8765d81c196d47ce909c00a4af7b39f4b083851dad3d2eba7ae8ebc27258fa815b935356c4e1a789be5e062fee9327cc1d3d73daebe79a38edf5f4cb2c453a5274b29c6811d766297281d16629fe09d35ed7e9c06acbfea849adb5d78bcc06b5d7cd185f9625d7ac69b39ca021a268864c4b46078a9f36c975d65e37bf2c0bc4a4fcd2d792041e92aad3662946f9d200aa5f3636f3eb666336b23dc6488cccc68783eb000e0e234da4285c70679976b9d80eb25fa4286ddae7d80ef29ab21de4f4559d4ea87c74485919b8b2342b754e9befd91b8e32ddb29bc0ec4d6062ab52787a46c3c30c9799b267d3f886d566b56616d53e97f8b2addd663100f9b339a7dd66d8e73f812856d805a258588886627df60c9787669ab6adcfd4ca6e6a951c329976df38adcfb8fceb4b8684634ca8416f9c94ac353d7183a4266d83618eb9454d0b17a49292344b1233908ea301921d2a0c5e4c29bdc70ca1018d89488a50a9840c16845c087127e85c2906a2132990294d050dd64c0a17c898135ab33449698a0f0a4f8a04b56614c24bcf4d7bbda8431835eaccf9ccf9cc18eb88649869931cd296d45bb793e9cbbca8eff6f4ed2bcbb22c81fbc4c01271c626c61903b1d0a9cabc1833a1c01863ac3421c9c724a42400a6c7be7b0cdc23a07742d710495baa6985a9697da9691d77d8a77c084aff299dfe533a811de81dd04a0a3f65a1b9963ebd5b7df753d79f55ab7725706795ea5b02b7ef4fdf663e33b034dd3cdf4c2f899cfbed9c9fa6ab59a7d301d33307fc6d132d81fb29e82b77eac1d73970af7f6e2502dc9c9bbf10d62f3d5782fcfbfe08d6d701f7089f024358df0495cffec2304c741a0329ed93274f9e0835d9a66f14fd61f4dcbd6e455f2dcf1368ee56a62d535da1fe382161c2ae4d3d5224344413513ebbba03fbecba6d424adb12a1a892192524af68c570a4d7c167bfc49297a6e5793acb12cfa315c9b73e495a318899b07ad16ca2b43a94a54c6155c251c1e84f2f7386c2affe7e7ffa0596a790e915d4f206e0b3ab779b6882a26d5ecfdf5ec0e7b3b4b08680e2ab0bf9adad20e0ca7426c560d5608e195c2f9c5d585b248608fcceaeb4feefafab19d03f7b58282ce37c09a75c6b4b37af3235e0c2df2ffaecf73c819b696dda720d5436daeb5bf7e5367132ad5049261ad6105c36ac1dd634ad1dbc7058f7cdf2b7ec8ea5589e03db41930e6babc4696deba44f2bd3130f4f9ed806e49d7b7df6fb61edfaec7707fcb00ac95210eb053750ab53d10cb132b968ef36c1e4b37a3b94a5d2e9e99f39c513c0d4b2bc39e700aed8d85e97bad15ebf44eec5f9f8d87393d489160ba58a5b58e22ef5cbab2ccbb22ccb12248810c2062ef000100ae001092aa8276170c9d76624aa3a546234b4b32c93c92f5dcdbf1b2488696e9966c63803f116142ecf129768aec4e5c5a9aec4e5aec42589b0a7952d71797190205f963e54e22d227c3c7e89b7b0b0f4b7b7b737375cc445b7b1b1b3b3b0b3b3b09b9575b1eed6ddba5877036b22b8954911dc2e70a1a0beccd77c32db5a9cb3699ee89a4353334d33bea979a2b974a7cba5ba9dcaae42a69050c657485d59a1764868a86d898a783db3d7cbf8f6887845bd23a38c914c24a48c2f12122e312e7d6c07f7fef2e309b85c32979632be4b3db683dfd1114b809200d9b7de5f99c41240f7197882d6c4c03229bdbcf2fe05ee0c94aed154b5bc389b272a85a3cd95692ae4c59cd3aa431767f33c1d65892b4e75eaeeee76bbf2bc18671163ede95857555878164b9050020b4ff3bcfad3eac43a57a299ba08d9bcf93c87f045efb4ed5393f04958a72defc254a458789eb8aacdbe53a2548a36fb09f43badafe7d63eb505c0429dd6df3c961cb079a70d6261e98e853b245d9a4391908484944060b5ea422b4bec2db12c316d7b42436d8aef059ec037d4dec78f812720a158b619dfb645859404807ea0c78e7f1357622bc40620f7e9100ebfa1f09cf80d0555940344510e1020406cf90da2480bc406d156c40502edb19747be41a83d7610c53c34a1242ecccf1eaf20705ae81536fa94508298287a83c03b7e839822e645164176aaaee80d822c6b06963b46cebcf0d21b84d66f101fa460595123c48798367a8368da926486141a6446a4de2074fc0681a7c66f101b049e0f783e7cf800f7f803efed03efed4351f14351f14351f1c3071e650451e162230c1a7d8cd2a788042d4e97de1fac4af8fd018b6a45b2ac8c0a1a71c2e8fdc1d8a2ebc85909c62c357a7fc8f1fb03570784a8619951a64b8f32bd3f1c8708b9520326ab4913bd3f187f7ff8f0418b072d1e3c78807bec8167e68167e621cd439a070fc9c7eea198870e1043648a0ab624d2071b10b2aa2f2e508c01d1db03c6f1dbc3923e6c6e6141aed2daf4f66022c69ee41e3e72bcb4fcd1db03bef1dbc38c3c2dd814afaedce8ede10886ad28e40c8a2c4ef4f660e3b7070f1e783e9e783e9e9e9ee01e3ff1823cf1823c1d9f8e4fc7a7a7621e96707ed6d8515355e585c693a1032689968f2e417a3f65fd7eca8a12084a97343054bef47e8231848d18112c6d56c0e8fd54e3f71317087fb8cc74189598b9d0fbe9280140317814d172060b97de4f98c6ef273c487e3f3d99f971f2e3e4e4e604f7d8290eaf11c5b5f19c784e3ca7e463772ae6a1091b35ce4829e3840e98206da74f165898190e367a3b59e119bf9db0ccb8f0b438116885de4e57f858593132c9aa32476fa72dacdf4e5c769ee00063db13c68ede4e6b04550162b144899597de4e58c66f273c4c7e3b391151e94044a543870e1ddeaefcee1017d621ac438724d763374ce6b459d364cd86de1d5c5ca95a22484d961358f4ee8063fcee8047caef0e1dcc88d23a183b6c75c07aec1d8a7948c49699aef77c77b022ca513a11e5189439b871807bcc8188031107220e441c8838241f3b87621e9ad091442c488f1c71468a681f2de0cee89903e385de1c60fce68005074d8d142b5cb6b4f4e6f0a28c0d2c0e1f2283f4e680af7e73b832a239f913058f9815bd399c5fdcca9051d387ca516f0ef8c56f0e78d07e73e06056a7a94e535353d3dbe326b726b726b7a626b11d2aacd284b4d98ad3bbe9985c7b2325ebed4d12bd9b5cfc6e6a6a3223b26a2af2ddb4f5d89b8a797882222dc6ee88bd50dbe2c1901c4c4a7842834f13bd9b5afc6ec26ac76c68c76cd8b061c3dbe30d6dda86366d439bb66143310f4d4c11e373e625cf9b1a695a069fb61e4bb2d4ece8bd015bfdded0e426058b3b5f6a2485e8bd41042229c46461c1842d4bef0d98c5ef0d3cdc900d592b33a74715bd371439a1b37604cf1538587a6f58f17bc3860dad0a0dad0a0d1a3468c8e0b786d64a436ba5a1d590c4c3e7b7060ded96069e6f0d1adaa306e3630d1a3414f3b00dd36035548769a80e131313d3db63a621a621a621a6e463672ae661a987465c99b6aeaf4071b4891f5966f49029a2c2c920bd99acb08adf4c586868aaa058e1e622a93793314f15ae36336e628a7a3355fd66e2b2409a944171596cd0c9a23713d28a2e7c74c05953658fde4c5f297e3385312199cc8676088776088542e1d46fe1d09670684b38b42514b6f82d443e160e7d098542a4d028140a8b79389426b4124a9341284d860c193288f89d4128994128994128992143860c664270c7cff095816bc82a83f17d67d87aec198a7988801e56c48a3821432663cfdb0a1e49372543f4ce80e277062c21320c42641830ac6d0c1830bc3dc61027844108831086e463c750ccc3017475a982244a589c144d74e6479a2c389eb460a23706ab13bf31607df1824406b2cd0f2bbd3118893c71f32128ce8e337a63d8fae26f0c49353cb4941cddc8d01b031c97174b76c08953d31bc3a0df18306030db7361cf850b172e0c7f5f8883bb700697d4fa7de18219d611eb8b4b68eb82f1b72e6c5dc07aec178a79287414ba604516240b0683c1b7c741161964914116190c2e95a98aa3230d173b3bf40e8680d342e12646201636f40e0afa1d0c0b221f07cdd864d0b8835b8f3d58ccc311713b02d9a8f2c5c71a2d3dbc5868999184a17730d0ef209b0403360906186080c1db630cd82306ec1103f68841f2b16350ccc3b2cb0a2d215c66694e509c656d6ae851c1870b8bde18c4fdc600ab832b686243d0644811d31b03a3862bee391312b706a73706807e6360c34f55142f452b65c2f4c6c0099aab353a43bea8d11b833fbf31c00003b33ac03a40201008f51b18b7ba9db925c57e03816656472be017908b3502815b8f1db8438c95317051ba90993a52c30994386763baf406faf90dc45aa9fc562abfdfeff706e2f72feef16f0dfbad61bfe48f2b0356809860a9b1f142a1f7ef2b8dcc993845c420d1fb07f7fb97a7cbefdf2fed67fcfddb7aecbf621e26a9b9eaa2864d589339ec9a305e696aa0b87aa3f7afcfef1fd61e57f7b8af616f7b7f73b80fbf5d857338f73c677efb7633aba3d51797d18d6fdc72acc7eec53c5cb93c4ae91465900537b8c716c02c8059405a405a40262d608121425603859232bd2dbcc0c165cd9a9430bd2df0f96de148d70db0306567b4f2e86d41edc6589d30af3183def4b6b0e7b7050b16cc1ebb85621eaaaa052b7546057546850a15e01e5750b32aa85915d4ad0aea560575ab42f2b157f012064b99ad202bcc34912c58d8d4d881078698de15de7e57f0632779020f0e2146bee85da1848f2044b2cc9465f5d1bb829edf15b8486007c91b3c295cb8c8d2bbc2f1c61b58110b191535f4ae90e777853c7f7e57507f579043410e050a1432fca6d046a18d021c05380a14928f9d42310f3d4b203340e4a098c242fba97276e249571d177a53c0f39b42183d3088d8a9f3c5ad85de14562f7696c4d501b2a388de14dc7e53e05262c5cd8a2a715100e94de18886052906c98a1f82f4a670e7370515bf290cfda67065e9cad2d212dce3a5b1a5b1a5b3a5b3a5b3e4635f2ae661b9668c1cb0235ad880d11f9cd1c2c248183659c8f45eb2b2f37b09cb0477ceec6901c56b4e17bd978c467e50f96196a2cd8ede4b757e2f05fab233c3b804cb1f357a2f1d71e01013478592225ff45e6afbbdb4b4b4cba1b4cba1a4a404f75869a7a5b4d352e252e252e24a3e76a5621e86d026c9152729c0debed69258549658b953a74a6f253abf959ec4add52162a44f0bbd958c5d57623a969851c3446fa539bf95e08c6c61991944c636486f25b0415932f01031eb93426f2539bf959426fc56c23301cf840913e01e4fd0bd4dd0bd4dd815274c9830a14c8f27583bb4589c690f42027531baade18246ef096cbf276081c0c80e1649da9e90f9d07b82110e1a4166f274e99143ef09717e4f28ddbab4fc214236434b9ade1320001627480f9b1b6206e93d01ceef0913f6049d96249d96a4a424b8c74966496649694969493b29f9d8938a7928021e3ba0a015dfda245f10b9c195a7eb8d93a4de496f7e276149ad1d87f0d10267868bde494616490d2154cedcbe0cd13b69ed77129701c4b6e280f8a053c20dbd938a1cf18125d0db8eb1277a27b9f99d34f63b2949e7c3a7f3e1f3f92afcf6e982f874417c47dfd1774c3e765f310f1b30470d0a36567706b18579b595f96187ac4f99debe36bf7d25da10277ac2b839f1a28ddebe351628d4b498b115c889de3e36bf7d5c81e81cf94a8307880fbd7dc7c774b6d0e0f041738586debee46f9fcfe707c90f121212dc63a4142945d221e9907448c9c78e54cc43135a63655ddace825c75e9352f29849879d1448dde486b7e236115b924b9e8e07222a63792b100750605e22328469a98de486a7e2371257181c2cc8b32177bf44672e25685e485182f3a54f4464af31b09ed3712f231d29bd2e9cda0c7476b8f8f8e8ede1e1fb11da1b11da93df6a3136c61cc9a5425916f4c50cc8c3529138b13a3f791da982c60565dc4f87123a6f7118a223bd2bc2085b445d1fb08cdef23aec74e5ea0795d5d4111a3f791d21c382baac2f4e88aa1f7d199df474747574aa72b838cb0d198d198d199d1999151f2b11b15f3d08497a03470525c85fd18a235006386d559578f2c6ef43632f3db080bc31d3d49e24ac09376466fa31378ba5809a3864d0f217a1ba57d608d8e1e593ef2c091d1db08035734b8b0d13143ab4d6fa332bf8d8c8cccd21cbd3447afd7f3fdeea55abd54ab9772f552ae5eda2be661cf4f1423482342c084e9d64d5a932180688469a277cf8accef1e5693648f1879904474e8dd333e9e516576c48a451d38bd7b637ef7be5460a1b073658f0a307af78e65c7196fd6f471bbd2bb87f6bb17d6433eee9995235215a553aa62909a4eefa2a4de456c456e45708f8be21e5b159dbd5551da632f8a81a5469e36479eccd13daab040b3a24bc79a11bd8bc4fc2e3282432d29244e9b2314bd8b3290116407eb0b0d41677a1785f95d14841313850f9e1d675bf42e3236596b33254bd81a13bd8bc0fc2e2a2aca25e1e592f0783cdedbd16fde110d1fd5f8fce6214df0ccc28e615f5c673ce3198fc72be6612eb97956b91644b916444444708f89725744b92ba29c91286724ca11251f3b51310fcbb14141a664614206c696c6800d347ab00c1af4e68cde4467bf895c88d19202ec851b4145f42632fe930a2f3368e2208922486fa2ad2fbf89b8848879d175e28a18bd89c6f4287a61059252a5379197df4444446c5a366debf618ee71bbd6aeb56ead5bebd6b6c53c3481240614275d59e4d81003b475c2eb48a7cf94337ab75d7eb7582da67ce9ca13858c96de2d96953e6d71700c0aebd2bb35fbdd6641c2c687c9922053a4e8dd1ebf04c73c5fe0e89892468bde2d17dc221fb76668942134cad090db10dce321140c83b5a1c8211439840e251ffb50310f4b2c28624ce123e4898f327d5c2136e50a8c2263f41edaf27b08eb7198b21e7f9a082acba1f7504927cb0d4067f2ec495ae93da4e5f710504b1b15675761c098e93d548ab9d1e6ad8c0a990b3c7a0f217f0f0d0dd511aa23242424f4f6426e426e426e42423c7e0b0999591dad848450a390f18d42d8858a798872099d5ad8530bcbbab170cfc69d66d8ac2d8d4d63d358b60417698e6c31a24181c402d99b1e66a074c548a1379be5371be74d569933634db4b0d19b2dff84f96375b5e478a4a2375bf69bdde1a5234a178a2a2a8c7ab3c7c72e666c61a3a4851ca3de2cd96f9665cdce24eb99645dd7f5edd7f3b89ec775afc9c7be16f3d0c40c3f6aa6e45071a78e0c4dc1c9d50ab6267efcc8d17b1dfbbd92a02346116cc61121567aaf34a0d4483bebc2327ee9bd62f9bd4209c393042b89959132bdd7283ac476d0e171852b8cdeabd8ef755dcdd2a8695455557fbfd5a49a5493aa5ae5b7aa9ac1a947b82faed34a35bebaa516f3f0dcaa95b96367eed8ed76bbb7722a6e2b336d2591bf773bf36b77fcafafdd11942e37940c3a022486debb2c1448215de0d4e8b145efdd15ecbb621e9ae6ceca8f2efbd1e9dc7470afcb71ba1ca733ad743a53977cecba621e9664d4a41143c3ca20235f25998e143ad2c8f8f871426f5dd86f1d16923234af1e57b6c6f4d61985880162658dd95b9c36bd755b567eebb4788079d9a2c34a5b96debae30bfe5479d304ee09942f7aebaafcd6e9746639499a93a4699abe7d1a978f693ea6f998a665706a863c22bfb8725a6afcb4ad948d2d05930393cbe5fc770e0de7d6d0da703277964cb2f99d433ece99c1e58e705f393740b8bc0671f92882e99d33be0ac6d028a243d013e416bd7354b0e78a7998adacfeface59e122282e82a228dca318098a91a0f80bc55f2846933f14cac246eb0b17154c8c1adf1854468f9f2f2be4e88d82fd46b1448431f229dbb2e3cb14bdd126604d8294e1e386c44a6f74ca6f34aa8d12143d8ae05093466f940aa0ad2e2f02099a33466f54ca6f1445a266d846e9846d0c5263a1f799fc93edf13ecfb73fe3b0319f67e79e35427ebcc01283851a8830b0234f8c82b8acd1fb8cf2fb549384869a235960e879d3fb341efbd0189426edaa0e15bdcfadafdf2704cad0a8526445132e30f43e55b4c911e3ad4b932972f43ea1fc3ec34e64eef769f6388a79a398268e7b0c86c1da9067c8248adf26f24db3e431f96572b999c66d16f3b0fcc26688569e1f76ac04d21a6c9cb072a3cc893c46f4369ffc36b14a503ae1199471dc0898e91673ce5c09e0b3c34b5b0f3c64569858c2c30ed89a98ab3e70f4ce5f4e7ee7b0dfd9ec1ab3b19887525d6d53ced6e294f8d06c3286d0719175678b9bded9caeb77c662002ec7e08ddb1ee3b7c7710fc069382d39c243e9747ddf401e063d1466bade8671d76f5c9af9a224a967cc0e243af4c6df7535654df245a0227ae3266f0249961d6df89c1ddde0b49a14696d526e8815d11b33f98db126c064899b266354bc19a437b67a7c54b6050e3906ab6a8ac66e7fe31e0f7aec2e2847e84aa7ebf8f735bbc8e3ef1bd6648d1b14b1192bb604d21cae8094e921455017197d977c9861850cc9d69f36619ac6133f6f6f969445418395bc064e56e8d80144499515fa7855a64e1b4164c4acd0d845c82494687bec1bc0c3f5cdedc58d225ca210d1b8879b189e287fb4ccd137c963f7e5a1cf4c9b366381905c61a3f10aafafb6256c567dcae8a73c2caf3471d3424d972e72d23476a93cfcd110fbf316c48b953651f7c8632f008e421fbb504bbb85b4f5d78fb0d423ac3436b80a692c1b05b8bfcef4a635b232321a712d59bd92917102d75f07b26977cfedaff7d2926eb4bbe7f5d7996ab4bb17f6d77b5b3e606feb4ece79fe2be677ef735ee67ccecd2c3aa7f685c9e75cc712733e27ae7617c5fd752722edee59fdf5a615ed2e4afe75a42eed2e02fbeb485cda5d84fceb455c455c7f1d439b7617816937efedaf2b9db5bba8f8d795aeb49b67f6d795c2dacd4bfbeb4a43dacd0bf2d79584b49b77fceb1880b49b28eeaf63f8d16e9ed55f274a236233224aebb1fd757da6dd44617f1dc39e761369fd750c6fed26e2faeb44564544567f1d439d76b76e7f5db769779bf6d7dbadf6d886f1da2da2f6e82d30ecaf6b2bed6eadfe3ad29b760fb9fdf5a12fe450dad0d70b018790ecaad5da3db4f5d7858654b84f87a2b45b2869c686953fdb3fcff3f4a6d3a1d23f3d28c45126742af5697a4a61d8d26e21e45f17c212123ae661360a61fd29b495133afe75a72fed66e1fe3a9b4cfe751dd66e16f9d7f59d76b3ac156b4cad9e35fe75bda6ddabdb5f5fd3d6b4bfee48dabd5ae5212ea6562b970a67fcbb723ddcdf2bbdd7477b69be544be67954cda39e9e3daac646ed514f59229a54937f5d439876ab607f5d039876abc8bf4ee4d56e35ebaf1375b55bddfaeb13dcdabd6bfbeb13eeb47b07f7d72d6cb57b37f6d72df468f7eeecaf8780d3ee9dd65f0ff1e6bafb68b7eeedaffb56bb77c5bfdefe69b7ceecafb77eae339169b72ec85f671ad36eddf1af6bd0a6dd69dc5fd7804dbb75567f3d6563fb2ba6e84d4f5b9f699aa6f926ea669a98221afef45c5439c6c8a37eb244d44459a229d592b53b1dfbebed58bbd3b3bfaed4a4dda9d65f5762d2ee94ebafa75679681466a6567f5dd318966147614661c73cccbde1b0dc592e997bcb85e5ceae43a16977eeeaaf439d6977cef8d74388b51b5dfbeb21aeb41b75536b370af6d73ba069378afceba8156a44b950abd3785dc399769f6e7fbdc396769f667fbd8396769f697f3de94fbbcfe35f37e1f21017adf2f0726526631e66232e9a707fd337fef50e65da6d26ff3a118c769b5b7fbdc5badeca68b769f5d72fd869773efe75a4b27663b4bf8e44d66e9c0c58861451d3393c9fcbe5789ecbf9297ece4e1f263f7e10c9f322170390588a2046d2b0e4dc72b962ae28977311d27c4e284787cb182530e8280994f340318a171e5b716820c9ddc9e550e4da5cce2fd797cf21c9e15cee2cb7e66e12c6e78e72494e1c397bb333e74e6ec4150ea48c1a2e7490e5ece4722e972297cbe53658a2a15e5df3aaea6d8f57dd2748cdab2e54fd49f51b8325aa52685b9ad649534f536f53f7a5eea9930884e653bf305862ba7b687e2fbda1a2576f0175fdea3e19bfc6cdf9d54b3ebffabd6289abf054e56841497a5539a125e44c9735237e6868a9836a78131b5256ccb3c50842112272d8d068b070d3f607cf1f3abff3fb8225eef6fae7eadb26dffa75c1125b966559d653d65bd67dac9f18cffa6dc112d9a2305fe4d78a2516a53c3822cff3cb8225f256b0c41c36fa537979e4a9fcaa608954c5178fa29ea2dea2ee43ddb3303fe12823471d4aaaec51162df3e4001203c7173f644c50b13f41f25c1962054d0f940e8a16d123143de1e6d10e251c8ade2c3487aa687bb4e988a22baaa2296ae5f528148a8641d11645593445c9f2047a74690b4579e8114d5115bdca7a1455d2270d061914627df4c66919fc5041274d98215294a0780e8a51fc86f6d02aa5dfeb0baeeff53cf5f33dbf552cb117fc221e718690e1b1e2e78ddec22f7ad3430a8d15275000d1fbe98be4fc96fa223f3abee8058e2ff29b8225166d902eeda64fa1a8522f7769f66985d44b289fba997a6ae7536fc13e759f9d409fbadf09fbd485493e752bfb148fd5a74ea2059e4fdd83279ffa072efc7cea17054b4cd39eb785cff3723f3dcfcb2df53c1e8fc773af73e479566ccff37b8225f2d6675932968c15635996f574c59d67bdf57ab68cc59d6759965d617cd66f9125b26ddbb6ada77948c29434b82bae638b1cba9d40162846318810155574cbf66ddbba0996d8ae5fd433558cba4555554f51245ff5f6f86a598a41af96557d79b54cc58f575515c58c57fd052c515dd7755d4d00098b81234612c95a965e99b2987859f9b9e1b5a5d738bfaeabbb8025ae1bfcee2dfd0e8afd6e82fa1cd5e7dccc9d08f2396fc13ee7be37409f73df03f639179ef81c191f2c9f23eb53f539319ff3122c313794850812c90fb03a40ca375b47c29ac4a001250f1cdeef9894f0634a1caf354ff4cedb3c24409c112c597db27a64d1bb37bf733ff23b323d397ee72d6089bba3b2a2f18f9c052cf1c8886cd09637f215b044a3940496885a0d9fd47811ae823407979d06d255c38b491a0a339df184b148728646674f97ce6b9fdd859e754881d385c505f2ad2ac6d48a3a2d00dd70ebd395dde45c9473d682f39997e1a0f0c1e6c41b2b2b30f20192c049616648b20c506e93997cdfadcb859574c28d0c3b6e3aea3cd15daaa6183123e74909994dced70c456ef3997d80f98c94e120b37e6861b1a9c845755c98d181a68b8d31e364c61957a1c8bd9cf30fafcfbe9c73ceb9acc1ecb3e3332060180da7e57c9473f66cc5f5395f659cd58c22f3b2993d87092993c75620234bd28e8c2168ece89da7587591b90974268e998cd7e48c947d83efec96dfc23ee78053c6468c2c3c557a9bc53c555aa809aa42a34d6fd34acd6f13cb349a5b9fb7c985840897e9f5d9cbb67af0397386224b6ff30b015c376404a9b3e5064d6f332ccd6f13994d34338d836f3369ae7d76938dc96fb3ed735b1f1d73be205974e96dbab559f9d263c54d0f3c7a9b706abfcf623eaf4eac0ebe4f63f6738bebcf19e4f39f3b6256c089438385de27d706205d9e04795207c71cbdcf239adfe7d71946c1f73976229d7c9f6727da673fd3d27c3ed53cc455112345c9952834f43e934b82e8a9a2a34b89de27db99dfa7db0987163f6fd4eaeab3a35875d02c2b7d884c29e238a1376a6c809658d80e237cf69cd01b35f31be5428f157ca35ee89707df68d8d8674791659f2764f4ec339af6194da26c9fd136d4ed836f140e8dfbecb9221228b9aacf2cb4e0e8827285490bbd73569ff5f44122274e912171f4ce61a5e5dcd6e71c1708dfb9a3d767cf7d25499203d3e1444a8e30343533a8e89d0b0353d6f602c817363cc2f4ce95f99d3bcba57dcea9e59250be736cb9b6cf9e735b93bfbe90a500c2054b8ade39b8397cb67ca0301edf60e99d16c9fc4ead52acd418c277ba15e4b3a75c4a7e7c4e9164f9fa63fcd276a687dee9f1331e2d48165970ac90e99d7e8df99d86a5c828dfa9597a36f49da66a9f3d4d2e19f3395dfb7c644c879d1e60b4d4e89db27d26bbd23268ca9d2a6ef44eddd07ea770baa2ceeaf3d661657d769d51a7f580b03e6a31daa4b00223cf1024488d9eaf315d7aebb8c4fcd61d755f227cebc05c17e65b87ccae3b53f25987d6a5ca891a1d41646346bd75699fadc0dcc0e3c50598227aeb92617eebd8746e9f756f9f9f74709f77c55dd567df592177579f77589f77c6cfbbad1dd7ee38c2f7ee6b07f6d97761387663c535b02c708ca8e1c3a6f70ef9d9ca8e2d3b3ad0d85c60d17b7706e6f72e2df979efd6766c19f8deb9edde3efb0eceebc4e77ca54d8a3216584856e8ad16f568d18991a74c0fad2c7aab5667bf552ce39606be552e2447319f5df5fa4c650c3264ed0d908d137aab5f9fd714f1c127459a3f34f456c3befc5691ea999ab6816f35a9ae7d7695cdcbcf67b56d0b5c169622539098a1d05b75fb1ca7650a8b2d2902add9a2b70ae7e5f75ab472accf7b357ef6556b6bc91ae473992a35a6a0f93a0148ef95ebb3b14b0c90323b665f7aafc72ebfd7afb015f9bed7b315edb3af69603eaf6a4832d2a070d3e223ce85de6b72ed06b28dc6123533b8e8bdb299e515ee335bd4be59ababcfce62bd7d7636ab026e476eb0d1f0aa82a1376bfc8c42061ee419376896e8cd6e7dc65c7eb35c9f3307be59afcfecd7e7cd867d669da83d00dcc451be0780a780250280030e38e0800347014be4c0b513b2d73e024bd429d3bf9315ff7e0296f829091224bce03c0937014b24b181978ddfc04bc01237484d0dba8abc062e024bd42015f1193451f3193809586206f7a9a8a8a89aa4792a1f014ba4f20c7eaf3f02cb8ff0b4c98b1fc104f9235c042c7144bbbe51ef8ddc346222e38dbc353a92bd9187c0128d7cc15f83f42953674a943158741e12a04c0c488a3c39e888ad5b7e4bfdeaab1c277d909001f44390995e43ccb0b3c34e172874dcf4aae5d7a3905f8f5fbf7a0858e23ae5268e02f153534bf2fc946f9638b5be084f45782b02c78bf012ce8b7010b044112e45e6a596c8782925515eca3fc012a5da0e3f4cf2f643f7004b1ca6ec474545452589f351de019618e5153e44922b1fc239c01243a450506c34141412b387f20db04428df6eb7dbed76bbdd6ee71a60893b1020ca681020920fc233c012417cf810a63f7c38b2e23f380658e2071f8b444fd14c8b3d6857f4163e4ba64289122368da90b1c8df52cf3afbd5f5e30a8b3b34d25869164b8e275972ec9043c68e66b33c6b24d0b346fc3ceb176089ac070f50b4072344de4311b7f7e01660891e7c153cade06d05f7552842e72b7805586205b37f2a32e39f9c022cf12975e212f34e3e0196e8643e053c050e09a018676b4e680a7125b4e071f6e50eb24d53287b0a5c5f9e824b802552f0e0eff53b74e082f11d88787d078f004becd0262525252539045862120733cfc11fc01239a43e9fcf37e4ec7dee0096e8f326217bbec91bc0129bb46c28f31b84c4f80d41a0fc0667004bdc8084848484e420b04424e7f59eb7f4bc319ae72dcf7d3c20629ee70b60893c575555555555555557004b548f8ec0f41110ab3ffa61f6479e009678e4237b0d3eeebc06ff80256a4873390344592107100e2f7c96e4382026a945ac8a192eb41c592e97cbe57cb07d2ee7086089b9f57bbdeff5b68c7ccf078beff538fb9e1f8025f67c19d22b699aa6698f229fa66e009698eeb5c5f03bf8ed996f3ddde1e65bf7e5f896c79c6f77b4f8d60bc0125be18e042d41545aa02032c38f091c4280d4909386458f18148fa15272aec0f02c3983230c51095ba2d8412346070ecba3ee5a831ed5827bd409c012d1bd3e933369e178262fb73c930f802532b569bfd72f82faddfb22378bca4a50f2453a567c919739c67c910b8025162dbdb02cc79217ba072c5118009698596406359fc13b608919963c5df276c97d4b4bbee4c2a5a52fbfb4e3c3a34e648968ce396707004bcc1cb0c4250c52923c06d72c1143ef95a6ba9c6063c6e66dcd512b3951439286048b579f1d5a49ec95f22b295dac62b198422b29e95ea94c4a8e573203464c0ffd60cab127724a80a2f6d9fd2bc96717163fbb5414b7cffe2c3123772808fe181913068e0cb539032082034857932465651abd62e2088c1880c8ac81f3c3ce940ab23d6fba7c591245a3618fba3f49f3a89378b2e6d127651e75122c114d6ec01295a4c860bc909b388a48287521a19c0b09b9149f17fa4df5425e0a7929c44548280b09a942422e82d0909090d0ad121242858458212187f1acb3ae014b6451144551144551d4336089a81732ae579d8a25aa392b39e74ce6e333198fcf3e8225e6b1cf8d69f99c4fb1c45c9aa6e998d8a72ec2a558a290067fa10c6dc55ff0214bbc5056a6f6e7e9e9e9ede9bed33d78a2e7a743492101fd4975e2333d519c46e7e922a0fd4954c29df8cc9d28cea3f3f4cb35e3cf8be4bce7ee3c91ced36f92cb93bb76d9aedb852b9ee7e938cbf8458bc26facb5c5753c31d89f617f9ea7e3b32c16364efbd3cb8d931bb361b73f7de3b73f31dc9fb9f867aeb2b2d2fb9dafb08c5b5c3cdf19c9d1e73b7f81fde939eccf9f79eccf8cfc339ffd99d3927f9e992dc97776cb6f62c47c929b382ac32779144b4c2a2a2a2a2af2102cb1c8ccfbc2c0799f43b1441f8fc7e3f11c044be4457db9971e0d3ebae577d3a34cbfa11edda2516f533ceabeb3288fbac778d48560d01ef5a7303c1efd12e551ffc01251a9b66ddbd63db0c436ccd9d4efe0e7df4d6dde288acedea6f8ec3eb3319fdd857c59d665cd977911f2d9a5beb0f8cc65cb677f62895948484848c89d58a290abaadaa5d52d6aaf7259f26a9157bd034b547d5dd7750b905f9b1e49cb9b47f2269688b4dbed763bdfc012771bfc91161b7fe41a58e2912e97cbe572b95c4ecbd5e772cec4127319bc11b2ca1bb990251aa5c14f7d3f7deae596fad4d3344dddbf3e2d4332f9d433b0c4b4cbf7d6bee71858622f3f0be7a4450bb82340ae6876d08f3d7cac1031beb5d02cb6f26c1636cffa0596c8b2c433c3a97dd0cbe4071d0396180c1335f43a4ff350016a6d6b39ae94a868a37526aedadc8833f3c50796325a57e575ee3a17669d4ee75280847e53bdce4b9d973a4c45e7a5aea8cbe9742e42f27545ba3f50926996ac9961e97c20ed78499e41814507a6d3a53a9daad3f9e5c25125991930afbb4836d801cb9ab275d58646ef7b7c5d932e2a6d557a5294e97dbf5e87a7e874ba7dcf5ea7537b9d9771cf8e79d6812c912d4b87fbb1c4aca6cd78d59d25aa696aa28a1a962c6768d4c491d1699a17379054c6c0dcf8a353299fa6b5f8d42db0c474c2e7bc64f339afc012735feede9f4b7fead027193c7f96b1f22719e2e9ba474b3162dcbcf8286188912b8d9611f424ab855a9da40c8d4679948c4c97477d8925a2aec41275c9b0c7400dd063e01358220667963cd113994841444ddc9c37565d5734918a166cb87cd910b2064d137d3d11111111914b097aa2df5442205b82d0f95a7343c4d642490b3d6ac24e1061284444271151263289d4e63c111191137949f48408eb899e8ac562910825ca444fbf7b6a331e45bd5593f2a827b144d47725174996a1f1f1f90c94cfee6389d94f4f5b1ff1c4e0d333579ffa114b4c8d582251897ca097610ff41e4b04a65d3f3444040e99561711240b3de46d1e7a404c8d8d38429078bee821273f34343434e452627e88ea877619f6435eee12f9435eeef26ca8542b933fe4bb641b721170545966e6f843e5db0f99353172658c2bc751ef12ee87c88270b911e60e1c197adfe20f790d0dddac1fdad7f8434337c80f25bf8825e6d03fab9640498e8d4d011ba44f6ff3b0449bc1674dca15dc9c2a7d76fd1906c79fce638967d2a7523e75229698a6e717e04d5c599c295af264d1d9db3c6c8b0421a3f6a348878ace4dd2f4e4e0a369321ef52196880ab1c421ae8fc2f03f33b32557bec480e14690fe799b8726a0c07179c2e543c59117fae73e1c8599fccf3d0f6f51f8f3271c95fdf7f312cdffd07ef7b47c69f5f989ce62aa7c2643a3f1d95996f89332cfa4ff8ebe267806ee9b2c5901e4477dc26f9f6ec1848512e4ff5970f457827b028fc226fc2c008fc096b44ea89c50515151bd3da68a3ba23aa23aa24a3e76aa621e0ae00d9b91cb0f1464c6e81e37ead8587327cf9ade54f8f89b8aac4e9132182ab0b4d19bea28ae089a2f7058d0ecd19b6ac96f2a27b21f5c674a8833e88ade541b0439f3a24cac4c9b377a5329f94d454565760463c4118c1123468c78fbf37bc41116dae3116a23b87414b362f061e382a6f708295058587993a70c8f357a8f48f27b845bd8ef1132f41e6176b435c288e47bc4d6631f51cc4310e0b04821e5c71418698386fc10036387c91bbd4720f93d02cb884ae96444656a6a6a6acbefa9b8b0b3c77b2aed713b95fcf27b6aca2cedf8784f4db14d191f4f6d4d613df6a9621e1ac165a6eb147c4f59f5ea88e8d51121428488372dbf45f4dc44f4dc44f4dc44887043f35b840833abe3e32de28bcbc828c2f8788bd81281f5d84514f3d068826f11563d26523d2652526e708fa5e27a5e586acdabad27d593ea4925a596f6c4e1d2c4860a266a7a4b098aa2c3ac2b0bce4a9cde52477e4b494999a5191f6fa9adc72e85c6238992376ff634f101b5244c0949705071e2426f2923bfa5b07a3b86bd1d7f7d0f070d876cc321dce361dcd6f0ecf11ea63df621982cac649e326330d0de5c486981e20c07da51ef6191dfc30a5f37eaf4785363070ebd87267c5ca121f68627eb861dbd875cbf8756e024d3c430b347efe154093686a86053278e87de4322bf87c3a19f283f515151708fa38aa28aa27a51bda85e54f2b14715f3b0cc9364a3e685162f53c6e81435fe80e949abd344efa821bfa3b06898c521c296a3cc18bda3eec428212d051a1b1f417a4709f91dc5e16dcd079699a01a3ff48eeab0230b90237029d8fcd13b0a07f91d151555942644519a10214284787b1c222e1922192244f2b18728e661299605ce9e1d59d81cc5741a13356976684081a1770820bf43603d0b275ad4fc00c4e68ade218c6d68c68adc28638487de217efc0ec13582a0147fc476dc889246ef10c71f40f0003902564297de217cfc0e1122445114a8a228505050708fa18ac0a08ac0a0905048282454f2b143217d90d13168079523646b8b1e41dab8c49dd9a33714defa0d658249941978d6e00c01f2476f283761612b749440b6446fa81ebfa1b8d6dacc7c99c2e38b9bde502c30e226e48b94186880e80dc5234fbe0b3aa49282702492696748a9096c674a80dce04ce1928aafd6e7c2a7977aa9ac137ecead09a470c4b84542da62012becc0328a0057b4c272b3b0e5413f686a50d8c4180d9be1314c05f5bbd022c906bc504c4b4aa5856120076cacc454180a37e1601a150cce7183bb6718df347c93f83af0c2f50b255cabeb17ebefbdd73f7031bec0f431e0c9c56bd5b669860b2eccd0846b12569bfd82922d1c040e0e4e65ea1386f4324cea4998b63e0d17828c992137e4494bae4b614164d31954d39a84d506e3da3965575fe6ec8ec34cac045c597a8c7deb7ec8a2a7699a39e79c82a90a96d777db9b06f19dcae779a2393f73e8799ea6699af9774bdddf4cf43727fdc5b9877abf34db36accce29bf025efcb74f7a5e3127f95a6893f4d8c31bef7b6ea503af43b7de04ef3f537ddaf13f69b5134df9203f63df425eaa797ce9623d2eb84bdfcd451d455eca6631f2a873dd3375e7aec6a36dbda2d7cbce6f29a9eeb4e653d58590f50d4cf9fced5fc2936dbd21f5255bba11eeb1c3b957ab21ee4569cae79b79eea8ae6d803e89e7e4d39e750467950d8544e9d8ef7536aaeec973a23e997bad4cb545796171ebbce392887bab49cc2af73a93b22e73a9fba1a5c5d4e99aef3cb1275657a817744f65baabe591658ee80e594e9f73abe23d8d7b90adcec6fd7c12d395c576f79ef2d4fa11db04c819bfdebb402afd3755f1eb225d3753ce1b7cf48c5e78921d32caf9765f9fb32e9cb2f6ffed2441d05ae5898afb0af411ee3f6bcf98a8aefd560c834b179cd8b4d37b3e9f9ed732ea74c60100b310c3388a3b0e79b7354567b8c49e01bc4c2156a79bab5b56da6975eb6696632dd838cf67a1aa5c464ba92d2073a5740a975c03233e99c880e789e6526d374aa3be2bee9d74af8e4a699146cce74a92f13304b54b4719d518e5e5fe554f918a69477040e1372bc631696875549b2d16c6b4fbcf0cd237a3e3d0047e1210ee2663a148e325d0a0f596db221f2a603000fcb33b3ec4ef14dff004719bde920e0a8b2cc8edb9b7e013cbcdaf4f37886bde92b5c27c938ce3fb5942382d7290c478d21f7c9e54d37db5acc9a7b5ad34bf649a8e6d0df53c9c1f41bbc233c944ea69b20def48dc1f413e8c342d30d70a6457f2757c92163a19d8137d3262440abddc2a6a7720a75d3d51ceb41ba5ef60078d5e57567aeeab9ae6c6e15623d283ff51498a63aa15c5a72c87e663fdd7471ea062b39b6fb1baeb4db64fb11f2a76b5225104e471d0596b872ecb859e913e833754cd1e6198fb5306dfe4c1d5374c97680e954e1d202c84d519f3fa52da6215c5ffafc95574f56095ffafc2db5d0aab99abf8b278c1a9b3e7f4b4be8408102a7cf1f852518c71e2f2b2b2ab0f469fe9afa74a5e9f3fc993f25104c3ffd0496c8b12852d426b05577baf4447742ac465de8b660c2244d9f3f25405a1dea35096e493a6b779af4a5dd695259bbd3a09776a741b312270b323139fa0542697fb4e94e71f40bae9a364b262f405fba17d66e530332ed363108a24199769b7fdd42095f7ff61738424eb2d1ee344b0aae1f21bf9200f05fe06ec10b4b0ed74b33793c08a900a4dd29fb67c318074cda6d6638c3fbd2266d79f2f284c60356bbd3d3cba99c7f533fac84e129e225897bb8a8c1a6cf1f53d91d402c8afafc05d768f55c7f21dec06c691545d1f4d21863274d9f3fa135ba5cba726745d892e921c69730ad743d5b6d7983d4180b9d352ca50bece08515cdb415c7fa6977ba010b5b142e758cc69fb66a09f404931b728afa05bb32469d448900e5da5fa063e1558732a069b73994e621e602a6ef082f607a20b57ac3babcb6b48abf3c41726935afe6afbcb2c34b51abe6e58a6274a3cb3f47396bfaeaf89106a6d514df32dd956360ea68d1ead086b0d631f005d904c642323670b53bb532b3d25327020958580a4bd53ccfd2344b21e6c2425d9aa6a92e4d91a45c5c4858041cd3d4dcc14deff4ea426eaa5ebaea4bbd2d876dc9743d4dd9a154e84cebbf9f94525ffd6aa19f52eaac9b5afd29a5c00ef23f4955d0f375e2050a2628fee8eb1e94c3320f9d253e8c3029b256a66ffad3fdb6f075befd55555555e0d6f9e9423fcf4c69dea1aefb959f2699c1e9129a5039fdf397bef97b2a611533e4accd47d5951a0a2bda98d9b136270e85c63f127b5aff3d34540e3d8d9ab0217dbcb469e9eb48e5b01c5495c4870f18657accd0d72d94c3d28d8fab1878d2d29451d3d73394431218017989e1d34488988ad122159fb65885b18c5888bd3ccbb3d44acdd2a8857337e3f00d5f5aecdb5c7154ceb3abb9dfbe9fbbc0dfed12b97daf6bbaf0c155287da29249e7ecfa2b413e3df75bffaabfdd6f04eb5fe01ee143581ff59b5e02947fcdcf26d69bf1a8e5bd4034bd9c732ea74ac79e5446ad5888a3864a61090480072507ec43655459621740e90100b0b0047250729092d26e1fdb25161cc2face4139b53b8bc3d7344df37434679aa6a933733a1d7aba504b2f835e9697ad68560d79b9f352e7a59097a563381c978b65dc97bef115af88c87b5e3a2ef67e658985f72ccbb66dbd6c8165c9e134753b7545cbd65136f5b22ccbf2059fa2dea6455eb2449eabad1709b1beb6c8d95f095ed096e09a5aecefba95bcd2347e49d4ba696cbd74538b35b3db2fc7616199d97eb92dbf6161e9ba5f86c3c212883dfd61362c4c622176f487d7b010dfb7b8db86856e5878d9b050c38cb6f47dd9cca29b1e514d2f8327b8af614dbbd335b784bf2ed6151696ae9a66d69d6e9aa6699af9d49d276a9aa7e7d2f3749d9ba6b99abf9ceb7e2578c19ba7795904988fc180534adaf35796c2ecf8cb741387a517cdf276abfe96c04cd7cb7b2f15f5ba79af796fc6bf0260e1bdf7de7befbd5e06af1df57a79ab58e22d6221b04419ecd2e2bf7043665affb21cb3e2b50509a60fd80a5d7a5a0e39f85941834dd994234574e96d39fc21530c2982848f1cafa1091578ec549dc5d9c89143975e064b6008b29b9a2a425966ab9b76d11e972507fcf526092360615996a689cd0c4caf5aec1b90ed757cb1d174ae34ed4998faa43c2cadc567c8b4a73753b74fa59242e3a769d9ead3b44ddbd6e7f3a56ddaba4fd8bee963919fa6c837cbe4a7525ca994a719eed3e4a77eb93e75df9bfea6f9b7fd9b6650fcf4e8ecafdf37e588a3afd2e97a7924e5afef1b272adff832cd59989f324e7e18e132b1020d97341c74d88cd9d1a593c051d98609222d6c3c09028683cd972ed710f10a03a54d8c325dbad07d7117eebee128a42fb39e4a8e302411b1af3fbadcba41e42dcb97af38baf4bb7693386a04521f020b3ec14bbf6a38ca82977ed370947b996b7ce9179987e5da1592b62c156aecf4d143135640e2f0e022b386ce9a2efd7ee1a84ce3cb32675baef2fcd8c26345977eb9f27008c70d274cc472b42175e977abf46b2cfd62957ead70549ef165053035dea2d8482b3343974e421e8230f29562cd0c297f96e8d24528fd03a55fa0f4cb76db32781cf5f37b62f864fa0e0adff4fd0475c6eab7d4131591efb24462e0bb3c2bd1d24cf95da685956a6f9665d077599e01fb5dc295716f565dab37f7c5ca421bfb7d8d34f4be5a6fde206f5eae378f65747edfaf0ba6e4fb8e2131f8be6768538abf6fda0dbdef92ef9bc1f7bd7d4cb762b13843ef1bf7a689b19e6cf98dddb0d69b3888898fd8eb8acb6ffc7586c1de1c53a13746be89cfd0068dfdc6698ed5dec42676c36f64c47e63381cf766ce48be73ce1293f23b1b5de89db5de34dd3c7ac16dfdce5f19eccd3cf6a697663e7b136d2cc9ef9ce659edcd2214660733ccd5ef0cf742ef1cf7a659659a586f66650913666abd6906e13a8e01f2dbfcb2a1b709f6a639867cd33c2ba3f6db4c7b3387dea6da9be65a95de26db9ba6db9be6db9b25bf4d38187a9b716f9e556f629d566f9e586f9e59745efc3e8d6ffaa9f5e619e44df33c7abd99e5f7f995a5f709f6669bc2e499397c98a69771a69e772633b82c0f8bebdbf60a8f221a3e5d66acd4d12d8e129a0c411b24474e11dd627ddb4279db2679dbbad49b6fa9bef5b2f5b2c5716d1bd5b6bc56a87511d07cbbb62038e14ae3e54d888b19ad8f18663e56dc69b3d266196deb650ba2355b4f5bba71e741a0691038b03c08f719753c08bf67582288153cde175e189e91c7f37253f1c4f078bc5db66139799ef33c85f13cf7d5789efb8c36cf73a1d7f35c8a86d9f39c44d6f3dc831a6ccff30fb2c29ee70fa8f1bc321b6dcff30fe0a8b2ecc6d8f3fc9a6189bc284ff310037b06ad59a295e5050c1d85a2c50c25377c0879534647c5f8282fbb3eca6f1a4b8c6aa1f79a2428894c5292a4242f37d52725b99904e3f84930a27c520c289f2403c627b9940c299f8435e3aacc27f92dc31293a0a0a0a0c43c945f322c116a0c4b6ccda9aa9ff28bc612a7d296031c23565fe494c10247572022eb0254dcb30606195d01c657a850a14285b73367cf739e5f312c91d7b66d7b06f9addf302cb105c3122b48f5de27c297c507e73714d5fb7c6efae2d4789ffbe2e8799f3b1b92f7b1e9799f1c33ef7312739abccf4b3844dee7f78c25fa906fe67ccf7b18701d9921680f8b3360ba57652310202966e42879a27bf9ea7b3d0fe2a8d67bbd5ecfa5b4bea7f64cb0a8a2464f182036b892f444945dc1e939c33283ab975ff47abc5e2fa907c7ea933cc9ef17969894e65fa3478b153e71c640266a74612182a2c60e4032b20b1e8fc77387a3e2795ebee1f33cbf5e58228fe88d99f7f9edc2127d663e51d47ad99667dfb66e220919352e020d7951c215dd028a51872b4f96d6159a6e5b7cebfea6ecdb3760dffa3563892d1796d873333262e4a1e98dbcdc506fc4a537d51b191995686cf8bc919636f2b60d8d37726f03f6462e6c53e78dfcc98d923772293776de68edc61bad857923bf5b58a2915a140bcf8ac530b3630c59a0153234ebc18f33c8323b68c2e868365b3dcb7a10475570d685ac3fe1289fb30e85a3ce34439e6d593e4e9cd4c8c2a20815386c0f45921770a20029c384cd2cd8cb82604fb049ecc9aa017b3689d5f1834cda913740c858ef52a7069b201f695fd8bc82c52ceb250ab6c7a2ac5f2e37cf16b126846cc12144c994ad322bd8ded1488b62124eca0e36ab605923966d59d6a994c9a66f1dea5b2a35c96fb37ceb29916fddd7baaf59fbd68563dffa5312cdb72ec5a6eb5bbf5a58626be4e516be9197fbe98dbcdc526fe4469ee6e12ecd0e2d7fe668c180d346dee6e101048da9d226cf111d61b451d51bb91ba919f3467e912cd1a8d703fe0e7eafe97b5274af9706d0f7d4ecf89e9757bee7370b4bec9d8352e8889264a39125b6c287da0b2c575f390558194be4252525514832a29392dc5b7cd29a4ff24bc6129384203c2da295228655191f0de20c8f2e387bde0ce1934283c8281e845ada83f03bc61241f8ae7cbee0fb92689fb735dea7d6e37d70dee7170b4bf4092b54a850810c0d9aafe0578c2556b8c21259322e5e755555555575a1aaaa64ca5e3d525555555b1585ea535555555555e5a927d4245555555555d59e7a42ada096d1fa0a5ec16f184bacd0ebf57a3dbf5658622f49ed93fc56618949298fc7e351e1f03e3239dee7178c25fadab66ddbb66ddbd6ef1496d81a79f9f5467ea5b044a3d40536969861b1268b8b2f9a4df3e29281e20a142e6c9acd279e65c9de883deb370a4b64bf58a28aa6f6eb1a86ab2c4c942d146d62f42ac3cf90b7a4979db72c7acdc55ff1afab0bf310ebd59ff2d0d4ab4bc1f99568fde3e3ea89942a41545cad61592c5a5cc1d275b60e5ad7520deb5d264bb65f5d04b43eab71ebd73158bf16adebbaaeebaaf74d1be382e72dcf7d3cbf505822cfdbb6254bf3e45bbf4f5862cbb22ccbb22ccbb27e9db044363fbdaaaaaa8a66068dccab7ebd58a2dac51257a9262fe5b7094b94a2e029056f29b88f02050fe228d529b89002852c429e82977b9e9ef5cb8425b2aaaafa38fa129648a103983cdfc1af1296d8e10c8ed1171515151515b9b0a8c8a1c0acf9a222205fbeac8023c60e8daf2239624ca07489f9102b1254748b8a4e14b54545c3df3d3028be1da25b305cdffa4dc2125bdfeae9eaed1ae8d73340bffa45c212575f7b4baf22d13bf8aaa97afac5c9abde7ee9f3aafbd98a57cf9abceaf6aadf232c519562bd65e39ef5d2f6ac5f232c91f5222cb1086d6987fee06d93ffe0be15ffc1c67ff0cbc5123fb8fa1e501c9fa4adc10164879af650b259a983240c1b59202eed01d07bf0e041750f1ebc0c8b0bb1b157dd54fd126189ea1096e861439f3cbfc1af1096b8214de3f4c4d88a226689984e95fc8933e4ad4b901c3174fae7d3342df294ce9e4f532f532fd33d699af6d2d44588f269f996fa49d3626a94a67eb9767cba4bb310c141674db10e9614038382f8c153b482024a8afda4a9a7294efd26d3740f17ab3e69633bcc84a4baac84342dba38912226c570699aa6a99a3a36a61cd2344d71daa6285236d560832b2ccbb22ccbb24116d0260547173a654762e478f2e24ccccd19b63e3a3781b284a841e2228d6ef31c81882163636d0d059f0b8425b66158545555c554954a8552d53a7e5e5555d58555afaaaa93c0c3e555f780c5abfe819657fdfe6089ea7a6fac4b3fce98ed89a381e34daf6cc85c21917772b450d32bdef36b1d22bffaf5c11257249ea72b9e57f63cbf5b2c91d71ab559bd91df1e2cd1c8c3f7e88c7dcf2f0f96d82b22a393f5457e77b0c4a2548b25a6f8eca8f7fa48251252d0ec77d32379b9a11ec9a91e09c9913cadf248eeb362e791dcbb1ec985617c1ec99fc41ee90aa047f252d023f9d5c11291a8c0fd6ee7e9cedbdddbefcae4ce77bf23fbdd6faadfed76bbddbadbedd29d8bb0dbed767376bb7677dca53b7557c5ed77423b2f775eee76c8df1577bcddcecb2dcf739edf125822afacca8b1c6d5bf669dbb66ddbd6af9125b61a5c2113533d15f4aaaaaaaaaa47caab7e71e09812e7e6c89e226a6809a8f261f505861d30383df7064b5ccb2e4de99437cf82217916cccfb35490cf964db9f1ac5f1b2c917dca62893b26323c9ec96f0d96c834e6ca1f1d797ae4ed91fb8e8e8e8e8e5c6ac51f51a5e0c58d2e6ebc8c2ea01c7999874983669c583227e9e6c8519ea3a323f5e8680cdaabaa5f1a2c514dc7b8f8d4ef0c969862b1c423b7df733008c873e057064be4006ecbe73ce7d666899e274a906d9ae85c0f3438142f02a8f3a814a899cba3a1147392398806100000431700302818108a06a3284ab224e81e14001675a65860481e48e3444f29648c31848000000000000080414200f604365d69d0ff0da8810f2e3b6918e44f7df3c581d370db22499d9bb12d44e41c33bf917e3ac99346b53337506219273f7b64c6c692bfd401af7e17590015aa4c81420944018ea4cd874f14e86f235bc0bf23da23946b60a3b06ecba35ea37f2b6eb3fb5ccb5f4595023e6bf046498794c5b1a28495244074e33ec785e28f0ae653bba0ae172898b3aae442a3bcfe18c9747221cb18e93cff20da5cdfc397826fc7e0e55d1d45586ff3ad71a8e3088b88b343a5fa5e730790883eeea9634b1da384211507595b5c312e83970216790179a0179221813e2bb6f98a9c2d82832fb5d88f5e631c6c04846a9136854260c8dc1b1b12f4a93ba7b27c141b59394a61fd9385a403b5dbf9f0e2417686f250612af7774126e3b9c0279e2110623b90a727da7cf501781d795e9bf8de7954946cd206349cd78cea4ef2d77bb1589d3d9a5d71e6ad82ee29225e6a5d7b590ea1cbbb1ecd5a8feb6a9fd39fa8280d501d66fc90f698fa0e2973b1227777e2c00086887482affd35f544e84abfff3e4faea0139ae98adc773361ce1d29c8ed0a960dbe8e82ef7ea4f705cd263cb8e74dbf3671ed7670e8aabd3e41f668f22f30696639d7db083635f31fd0094a99a48627ef0c5940184dfe765f5c3fd0c1a6d39430ad96ab9f51d7f8894334d372ad49b96cc3d97690d7358b6862bfe6ac9b8161475d4abec46ba3833c868d2807018f2d1c3543e2e6f5ce4658b20e292dc2bf68bbba125ecea78a65c50ade887f82a82131f2931ae8c05eb07c4e6753e4b50cf9c905f021d7b223234084c07a26dd721ded97f58d7ddee5c6453ac60d68f6495c9acbd4176f6c66443c4058985fd79dd102a2d253861d217889ab86ec5ea9619954ebc054579d07bdbe9eb523f578ce6910cbf6c1d23b35539439af80caf4b7dc11ed549bca3443f0a4f2e6331da3ba8d08b4af52443be3e4e563c5228523b8a03565cbb3dbb0231a925024865ff79ccdc4c9274c47a8487ceb9ad2fdbdba756ebee78f41560443e41be33548ac1d597a3a71f3f3e76f2fb4025ba6a26c4804cf3826854b081114edfddcae6a3f3af778a7f17dc63827647f5b99825350f2dae124a4b888ff87a1f2b33780f66164212c09d6e14922417e2ed8fd5e4c48e906d984f094e8ab4dbf577af7acad4897d2aa3c05077eaa6351f73ab3a3d708a3a58fea8dc1d4775610d9b3f6f065dff3737ba149f6d9d4b468b43ada06a94e3d727c85ea84470ec89e504373f8d5349f720fb3d8f5cdef9061da5fdcae82e2c876dd5ebf8aecf81c055de54b7fff22e2f96670145c98738df5812a2ac6a1c4e9bb09109a324cbd917ddaffa1e9f623c0a50968463d2aece0fee9c8a39ec1d4844ff8389ae4cd92246a44a19b7823547467b442a588dab88c088689340364cbbabf59f7c63ec99ce1d3a94582ea8f4c2066ab855dbb73afc5faaf1062157bd0d4dd3ee054538c54d3d4d88c180ba81978e53a1cfda039a7c46d9d5751ddc6c0e054622a57b1287627a272e74fcc4bb1f80331cdbd1f6fe94bbff4b574e34bd046fd3ef6af5bf8d8da075bb44b53a698a4bbb9f63a37a8342240b031e986c4a94b3dd371d8f9c9104549fb41b33c2f21ca7ecbde960186ba5629564def2981399894020dcb71ba4bc329110643ba37217c441a37a6b48bb5d4c302062f735050a9eee52342548ec3bb9c9b4f794453603d657cf1942b2e4f99c49c984d9e0ed34ceebc1e5f509b49d1a7d45df50a7c0565a582978e3a47250eb4cc9f7b6af165b66c1c21948e02000cf09c91423496432c31795a5e351def08b3d316cc028225e03cf4f3a195dac3334af2a557c312bf76f91c954b860f5f2728477ac608e989e9c247baec7edd172db6e0a758ebfc9b3b7dd4e7d84be375f9cbdd9f6df0e0b0a10e3cb569b25f7cd1b499f96fda01c925f5989696fa88d6c32e8bf05a7c3403f870cb254fe682b89d11910f65e2291191dab06b773e949e039e1f1a0a792cfe9a451dd54124b57786acb83305d3473a19a0290c517d735ba011a19853b494c7dfe143e06d302b6a300cf5d18e855c2df8c2c70f7d87fcee893504c38347a2644494324422a4381676f0a53cc43d79156c492263af522f65c43839bf09f5ca096b951b976843912db8f50022856ba4850ecd4a687ac7b0f8dc40068269e58e19a3e4dacec2e281e8955412de2f3edd42aee4774e90683320afafbf799d4348eaaaad767c41ba0f641c8245201f0d1b50785e0b06b4ecd71516fd3c63022540691b164d3699472b6f4642dce3e4dcd6e21019a089fc7674c5fcd82a08e501f249e405c18eee28a01a75d5addd2264c3a7be1f4ca845183c7b0f38b12d0da4bff507cbf9ed5e976d2c0258a9b4b69b627b8e4ee05f04b0020925806db50fa07ca1ef0927efc7c0e7681787fbd92ca318898c498802f81fa8ba1d04139cf9a3bf3a81c7b947c8ff1a1f5d03eda90f382671a163e4c4d561c2d62903f7760f791e63241ba40823d6f0b5ec1604deb85e9ca47e9ec695f783553eaab2c86a940820637154f49bb8cde59e920e21d876193de63a3d5616c9e2242634dce6028d732fe534305989018f63bcd7a728c58c82f319a2945a7190c62dc5ef6b319945a6168bc580988be170a21b3d5701dfc1002c1d15de8d3330413107f71d8c7fa3c33b983d5f3bb36d94cb793082c4710d0b170589aad13ce0319002c11c1bd6f4e4c13c395e12bc86e30c9672eef6fbec9588a43dce9280baf9d9820a1d9387dda9b41dcad8228b39cf49c977c2efe5e869c6e06ca472313bcf5d4cf7adf6f59cfabf1ea4c6a54f13ab5715456a81dbe27dacbc4f7f7cb91a7bc172ef92da2009c27d619260fa24e5a8b984b9f7ee5862768e7f3fa88077c0484d01625216fa61e45b41deafac7cdca02f1b09b87f7c98878f6d3533ac5ad6d42cb46234d8ef0860341349d5c2cd24f884bc0ec8bf0aa9e702e53659badf90a5cc7e893a60ac39c84c803f6ebfe2362a4b1456f108b8c3a7b4d79345ced5ee133cda479d4b4345f1730d655c42c3256f820dd4b397d632071cecf94d228f7b8768e3392a44c6fd78b4af00b7356f536668e16c4f3042c667c45e26b99f61509ab941861696e8cbb6f7e7dae29ea1905fcdc9e5ac64bc9c8b38a214e554d29d2494748896493a1592b8f10bd3da403250976189342d89b2ca209334d81c7c64f63ebb7ed2ef857f77588a6760d877d03762f04671237d7662da735676db182cf4c1e79ddd60f3fc200e497fa3163db4c93b0448dcb331e499de33d5e6aae51ee2e1c692cff8f3998ba3893368c83032a1d1bbdcbc171f95642657acc3702aea31d28a5964956db560bf267e88eb9ab4897f2691f5417cae795881fdc190f26a360b2e6784996a15d0366579d23379eec4cc676a80f2b65c5c9e2f05e40be2db467ab1a7aefeed1446391e4e0e4a10c22b0ab89d4496a2083fd699b9d9f4dac7e00513507bf511ed9f71fc8aa7f8b95a783b1a9f7abaa92c9d9c69dae1ced90e7626c3b6f1562e5afa19e7b62d90364728d09d6faf536fb5bab5ec2f5474783e059a344b0af5bfa1336f9a407c89e80e3b87f54c738769be4d7b48740e98dbd3697953c258307d0dde9164b3a2d1ec6d9acc004382c84a338333ae8cabff00bb3afd2b2414c759db4a74be2b9cb9e1c2228dc71f5ff92b48b7ed413c3ba2f70284bdc9e9a6ba8c059cd448e90af43eed7910539acbd89f34aec23866d04594ed84de1bc4022cf2785cbf2c92e3b85ba3eb04cb97711fd70b5a045dee08ad98b5a093701384fc2ceae9df64988c5c1ce2968abf1099bdf28d96731c1439f356131624c9a20d5f93d435bb4504b95bd2e4599f7e301ac03cd63cdbd68302fb9b371de5ec830a905a14dccacb4217a45fd8c7f063eb1d3a11d7ea98203ad6212660ff0324185b3ace82ddb7237bb1260e84df2f8eb400d0609a4ac156f8a9977e551237e1a7549b180fcada2a13cf13a88a603e3198c0188c7f5228b99144b0c7dfd08bb17a38d270faeb7e4ab7de4c0bc7e0b10ee3ecac982b0207b8f255341b9d62d3678e19f2ff1ca8c78e42fd9f6f345e2a51ec802f0271a4a574311c01d9dd2599c344eeee29a1c68df06bda80a72da2ec14ffe2225d5f6ecbcb8a5e0df4946553281cfe2d987e4d370c9acfd06c4f55689986166333af7f24bfa8a21c2e7bc5e24011697a824dbb88804d9a21a4aff5dab33934d01632dc1c9618a107de41ffd8893ca17b929d50ab0ce34bb609c1deae92b8bbbaf7e57d545e2bbaef2cde79c550cbe49d05c429f523cb854656e8bcadaab818bfc34a82f2031c69ca49c07470d924b01064cf5311132172703017cbbe747e36c503772e7aada0142dc51505636b7ff24bea78676511f3d3251515e4a710ef9b20d799e2a4a350d7d7bc2c86cd12bd1d13d4cb5c24ed3340672a6435e24fb1d39213ee62e64aa1106776d200fa79338433b893beb51c4cd5b0bd980bfb7d21b2638272af0d14f33fcf0e72a09f50e332e554596e5d87711da023c3d39691c13b8509375de2649762c42d4d4fed7bdf28237dc9295df1d74375836ff845f84309b27e94628f0b487957eb00a9fb915779703fd5de91143cf3632d54e436343b8f0822cdd235a30c876eaf04858d09d77a8218890366d7bc3a86eb58d953e7cd596b28eea2a878c97b328af3ae3148d17995df5d097fd81ce05da1fbd42c02d642be3b61335d92a2b2e3b94ffee64c9db889ed544902165e04ed632adb128b18aedf371bcb3a2fb2d9d8ea590f75ab7926a590f99fed8444485059bf2107349d673ad26f476cd1783d70e52ad89028952c7ca44bf74c1d72580139375dc443d44186a5e3980a0b949882c348f7ef8f628e7a32bad45b46e4d27b9e1d2087f500a7e3a998de04904c2bf41a9003170ff1b652846ddd4f81c639c76fa29beb3e213c5fa432b1f40b67633ce31962bf99f6242820d96c714b009ef5bce1f6ca709c7d39454c3d0b6c3e7ed48f44f57a519de1375e7105a93a0e9dd47423bfb307335bba3315070d6bab079e4367a042cdddf8031a32ff982a4e079f9a97ed2915f476e2f64242bea4c8c18ff3d957879c4c6e1c0c296a89f5a7a8caf5803f5fee206e68e054f24d0f7874ebde4a626779d45f476eaa814d4ceb4fa5cfc46e6dc4121a9b07e0e97070b12ff3884da721678f7113991c182901bc8089c61586f363802673850c78ed7428a3f08b45ede8b14734627d21f17cfa402c8b7309e3087b9bd843114f0cefc782ccc03951f281b81967ffba077b3add5383ccf085993079396b19780d2d2116945113d54773aefd7dcc3092d15c3392a6d727097f27cfaaf7b888a0aa68e7ead4a2f8d812714ed417702da00c6eecebd20e3f4cb5c14afeec22de546baf4ef175b8f7860634eb92863438f018de1687430430ba6784e8d9a4b26c590a9493ffd70672d0860a4d0f461ef3dc40b2dae7e212f7292eb72fe9c2dc0bf37317cc2a1593ebf9df9a2e3ace162cfeb6dcedbdaf80d09ae35b23101ac7575a8c209cce76bbb9de922b8482cbfd4d53f896538d193d7dd4e6e377b5984014cbd5cc6f35c3ee9d828ed23338a4f77416937a5585dceb6c761791eb5a3ea3f9cdcc0f48b70a55fd591d4ba867408c2907b1ab6561f563171af4bfa0afb7ff4ae2273afaf648e2a21b92b60131a27f58badd036ac9dd5014dc7071b016216431991cd9071b1422f03415ad8d2857ca2d9e03bd0b6becef2fcc11d0ead22fa73601a81ae0347a778a83dab57a82bb2397fba6572682a33125177bcc130c154c4a9f0acbc11a573b21b33beaccfe9154b5292aed348b769db502a49624588b92af005290d63975c5bd9d502fa73a3f5b0e53fd78b4a33c7451c6e8d2fd2878831a582841bb2f878d408cbf33a29ed78d291caf5b6bfb212a932600131a46e884dfc3d7a92170194ad6e8c74888a1e9d9744148adc9ee74c5afdabfbc60183a02118428a83a8dfd5a1ac8401532488599f59164903ba12d0f44e0655c44dd8dc3329512dd873564f18800e23a342bbef8b071218fe34929f414598e00700c73bb53d76656dda5d7137b52c3d4b081e2f3bcd6d104d9a27f28c87b6d4a6b18f616498bc20166039290ea52a913d00fcf6e039de0c28f36c40b663fdfa385efac0bcaf7109d291412a61cd7d2e25cb7932da8daa804a78331936f34520b594e9b1c394d769f3ed9a71940e4a985733b107cf290d1616153372582f3ae10616c184506692e414c7a52985230897d02a0b11846a03db58680c968793344f16a8885c0d150649b49d6e0c040b6e0559ea800ac2ae7849a106f020fefec933491b4279681a5755393443466b87b5cece5a825da4d6cfd4a12d82921fe1dbeb4f70a351f05f19531d05631b4cd6847a11124735efcc6e8e5e1697f068a0386b4eb1e40beac5f9711d050f01989269e33f6ed5ab9ca5a9123e606240ee32269e7ea096b3b76f9d357cd1144e19367d29b1cdb2791b5af3e1db8829bdbf179ab0f713c3cad6e2e4cec7c8e6946bcb14dee55f94bfd9671d88e6bd93be33b2881f401a0eeb72d5973bc912f6327dfa50622d120527c8c8cd0c458ba89827d20756668f855d1babee75cf05159dd79c30ddc8c048a3d7388ee6cbe9edcf562f2587f1c7ea44bdbe5719cbfe8b86239ef44e7aa375f7b057b7014310d3dcd8157cec3a5602ecdb4737ceb8f58ccafec59fd47ab12552dc93f39698eb58d400cdadaf339cf4e89b7a670cf209e9b6c6010a31070d816bd9a2a8ff26cf0d8819f0d06d128716187fee058ec32c7180056b5b5138d2d82e69d60a3e0491adc30b19962f2d0b0ff18cb50d13fcf4825f090cc88051b442b45a14d54d29353f04a8cf1adf62ebd6288bcc2c5a43661852a4b7b726160e04d056ef1427e005ef6bfb8177f78a74aab8437314497a64e8f9e688b42b6c30838e672a85a6618d86e6a894fb334c207500dff409d3f6d9cbce8c162298de9b571bb9a78dfcae131d84d1621a2d53a5498ce1674f1969e09fbc522ee757e4cb1782f8cd0f13d1e0da8533e7cf8cd39d94c9e16ff3c2d1c29e77192b1c1e4a371f1fdf5cb3c1d6f35f0fd7221205d492e03709a3f98622bbb564001bd41322327a9a9229993f1d6c56a027ed2669cbad64235a9c0689bc7fd0845cc1574d7a5217bd05ae07829675f20cc9d3b448886aec2aaae25a27e6dddecfee828ca016d22f11db04c88e46a61d46d1f816ac4acf23c9361edba46752653b3b7903d1a676247c8912d67230d215b4d5417c19cb94153e545e23e00aa60e5b10e0101ad61dd4a0ff69f286677e849de8bea56242f135ee131b331655beebb9a8e1da510f7606a6f2d0896432827992444c66ca462904a259231480869d4d25a87f71c229efc40f559057b42872dd4cdc32213a8c6d1c017b6131cb651478d0b4e39744585bf1e43735ea6df2dac6ca0550c49a7ef9333da1d0878a96451939b50a18a997f230147e9efe0e83f421d12efd0a49fc8f468d68b28c332e23fb06028a9e3aa22af1842cacd100b8082a876544183fdfe830e9b7de7718d86ceae5594cfd607bc4005a0274a4787b5fcac6f276f1f0d9d3239b93a48015a037d80db1937a4f92a29d6462a99247f080920a8103f74da973ae1595b477361d44edfb353c65f18d909cabf9e69126741a03ed0c4711ad28e0b7a0ea2f77f2f4482ea19a85270f4eda3dfcb8c8a8f426bd1b8c108be2b27d3030bd2c67c1dc883de22cf8046a6b06d5e1fc6b39239a3caeb801f422ed39d88eaaeffb2f14dee834e825cfc25483aa9322590452b0d3b5181391b36cbd160c06d7c189981b212d28be4a6897f43c8cf810e792f96bc411379539f93e9b9ab534e7a1c102f672cb10c07c08bf95758774f37b432b923ae77846ab59db3435608a4742d19ecec9ec2c857029c9564a92d95129082434863b66454371a913a78b9870a3c38c75bdb5d09d5f360d945f1e861b9413c70a558d3944b2c8cb7e1189cd9fe3dcea4b51a79d726455173f3e53207d10c6fa9930aca60ef20051f57c9e8b78ce8ad12ee04d424c82c761420ef84c82940b3606b81b9d6939ff555c6f345b1fed162f1e9a0fc242d9c686d24a41aca4b2df202a8f91103352e51c3eda026d2b64de435900cd926917f1a2df33423dc154d7f04a7d769306f0c2b0116efd2cd4d1a295f30fc027ef94a9ed5fb5405d902f7c5c6f64aedbd1bed3d76ab905652ce746ac4cec6aa113bc1d33ab625df3a375c9cd689fa149646284d9f28a76f21d171905906ebad4628ce37305e797600510404bd8e44e27abb02056215ac0ee09a7dca2001066ad264aefb7a0e605456eb84be70dc13b78116454f2aa50b8072b4aaf9aae5fb2b1775d9909210e6a288877436cf7c49a05d94949a0188bd305a184835ec636819be2bb31c15acb4d07ef91ee5c3505368068e312eba52ae31abf39ed7d68d91bb964d66447f4e2d51e356a20312cdaccabc04978898e2909e974233c1fffb8450964797545724a1526c21a6b549e2ac5281f2286be9cc1b9b770acb709bcd23e76412beaf26b67cf5f08473fe3b9ff2d6b6faf4c64a839186334d59d4f6d91f96390011fc539a623c74e76f8e61be05292aae4f373c3be82165d635f293ebd07bd458c289a8bbee296b4d6b64f01ef093b6c8597e1dae26dea371eab700b37164479e8b0faed7f89e531ca61e75d37fd896c565efcdc94f7d85db682f5b25a881a2ddc4f3ef166db87978d3e7e22944fb0e480b60f32f95281409b723a14ee427e36a939afa020d6b7621acc066cd5f4a68f4be2cd13b0e123aa667d1ba57c2f4c64348581656b949b5c68dbf030f6fca6e06728c490997f282346ba7ac8be2e92b8229a65155debbda3136066f520fc56c23d2915aa92e0fa74eefac48402f0300d7fc0840e022aa9e2fa14ba55fe6b23eec613270a88a344009e7e2750802eee8677ffb9664e91502f82d26a40b922907316a5155b7e5aae5573e08f9f664a4f02d3f37b176c17a622de6f24de0011905f2c35655123244c4b4233af2bae3e45ee783c8a675db6a5ca20b8c2b04d091a1a7fdb3864307e2bdac1942fe87a6be7ee629cab020b0651097d6b6a62fb44b997a954d70c0d5e864027a8432750fe3f3889c646a18dc92b72bbfada92ce1659ac6e13a8a52ca66922cda73e32eb93bca325c923920d7ca704c1218cc6760c4c8266f4c3146ec93840b223b24e7eacc70409739c0424ac7df2acee9d28b929aa82f0405789a5b6e19b87134e25a11bb4058a1cd2043c741adb0224cfb15b5bf0bfe00481f5c064087560e8c11c327b0c6e5fccc40959402d40d2b805c0b389c9caa125a8f9179823e3b127cdf0430577f7cb249101ac9bf26f902410f46315549769a4e23173d58db84d731933dfbcb9c992a0d15c161c6b88ade58cfe2d79b5a74b08ac9c85e7d11d7367b4044eae02e6980105736f633b9f849c77b2a7b3bde563a42c4faca54a9dbdb4d4045fc160ce771e49e0875e8a60fbedf0fc3db2fb9143c4c66f5213a6791b649785c81b6cf758c77ca26de37120b2c71b9d1b19ed67b7cfc7d808ef43f7b87f6de7a75b68d43c6a279b5afc60055cdbeec4ba60b8ab972b3b1171ad8a3bbad6ad2af9865fa540aa78089fb904c8eb81bdb26ff79cbfb5cc83c8f0b4c24512c76e4bf0a6de83e5b8607e7c4ad7c786d973d954bc23a0f4416afbc714ee0e2296c8efcd22d17b6e519192ae84ded488f97249fc7c2661e67ae2dfa638fe610a15beb0871f358dd6b36aa1d983a3038f26c912ccb5bcda4daa665ab30d00a06398b33c434e365ff435b032eacce3fdbd63efb597c5f4b6a9639e9582e38781eff73550c547d031977480b8b2e9be157fb3bd8e27b5519aaf153ae160828b5a24137b31011a67f43a8082b7da430e28c8f755375352c3a8d4dcf4c6b729a5f1896bbbea27131a4354b8ec25539280c08cde429de8a867a31478d2db00e3b1e24cf18b4a24f5e8fefe81f61d0b08ae2db79c2daf7c4e87bec3fda3c4c09ef3056ff62f3015acec6795beaddcf4e722250c5c0a8febe43efa30c263cec5d6c8944cfe16c3366b6fdee1b15453639803c89eff192101cd55f2a00404bd2ae68be459ad07a7234a769835ace8a7eea2c493e56f0569bc0cf98671a739359e0cfeb01982759ddef44547a892b90d5ce9bbaefc4f0b8aa2108564d3f0322ad011ad9199e7cb634c113f3df3ae32f30e80e0a4bdcda212777dca14cf1ac7204c58c3c996dbc88a66dfb38f488db339f5478a78ae6b6e129ce5c5b23c154021ef5894cf5d001591c389fc0a92fc512dcc4961da09aca52f93f2e9f4810e23cbf36044068046f5039bc240aca9040997182db8be20b77660286ecb890becc146e2089f14fd0a5a1eaa89254341060d23188d23bc621cc09eb189109b4d20d8278334ac5b7bea23fdaa1bf8fcdcffa0cf7c6f14c8fc868fbdfb0a78f142fa6d6ee9afe00754be142320638e0fa13f27b9b2a4d7e0d4f3bae5006af80913328aa16d896b649216c7ec9496bc0b7bc135a0e002b87c4849b1be9c7330ee1e4ee23de169fecd87baef57db2c1e7eac5e8beac0f25db4e8fb5e580c4f0dd208e0beab5a419504ae46ce41e1431c3ab13ec3639b6c5f2c47f225d8f3667084dcdc558c0c8a8eb4b5058f7e600bb4a813e778b05ae4463fd6219a75f8e40f00403322ec3de7d76974fed95b42849b418b52df1518ed19680effdfe375676e5a787fb6107d588160907c2b4ffe6a2e1c63e758b95c263ed05737d355362110682942cca01709b8aa7944d09d86e9ca8ff6cb5fc7fce0ff6b2f24db959be36a415fc4eb9e7654924fe8fecb555c361ada8fe88091430ee4b2166a914e7cdfdffc9e0cee5225cf39a229d5f871ff4a14420adc7ebc5c46cc9abde70a2b4bef801e476675d1bb0a770aea2e01f37ff373ec1888689be58431e9a80bd39e4bfd47b8e58991670ceb45f8a034bcc06e0816c6e691be1c5c27d48c785423887bad73720f75ca5c5389db1c03a947922acba3348cea11e7a71c7e09b258a440dfd5f36f2f5e29d5bb18f61eae9fa3394e47f2b3a27680c5266d29759a97a232b9182d30e7c59758186a435423fc84320b7fa89cd7b3aa2c03134d1c4683e49480ac63ef289a060eb6ccbfe02ad57d4253043f354a696352ec052320fd2d7e8cde27e9c711fedb739deee12d21ba94bbea3dcc9e435e2442c2e15141a947698a34d61e9b4b24483441ab389952f09d9444ea5b5eb39e88d330e30e78e877427d7bf1e11af39395751dd46f4a9f21a41e42b5f37ac52663718f2f8f2a581cbedf2600cb8df1eea4303857b3b97ba1782360d272d7a0e5393b56b70657949e1e9d319979902d74ba1308dcd27513b16ce9a18e01a5c781908b065630290a14f9e244fc814ade52fbca6e8aded29031c5f74f29d57fd9490a6c93b945b2bd89b866fa14e139c394811ecac6fdc66b3fbabe33ee017aaab31798e476c43e10af8ca43bc6d0e53160c03107874ad82b393883ca332edd5a5da8fe0eeb30ebe7da245dc7d20e20e3e694be7f2bd4435556d62a83bd6a50be4b10e8d7c8050ce8b6646378ad2b102f370891792d9edb1dd8deae11f455795630769af39acd3fefac0170c6c68475196fc2ffd6aa48a00839a24cdf3dcad125185737787c3428eef4b90fe398c8dbe1f44c4d9ab7a851ea566fb0bffe5d3dde3edfde649cbad8f352f1ef0b21ac9c16999c4b66febb215b45feda31e35cc871a025ce97f23b372d0b94a3c0072da55dc6f40e7cb3333e8d0dc1dc58f95aa62ef44118e8ca43bdd3d24259d152d791993a8d37d9b85ccd27ec13c46bd97f1c1a65c72fc4a0f88ddd1b1a01d15c28900c08d894392778eeb50fc5869370c44cdcddac80efe09bf3d9d43c8d3fa76f454fd4d36754f095e674eb03c82c7bdbc6a79cbc1ab2c877517d1dace669aa388880bc23631bc41a82750324588c614a2e262ba30640cc584e4d3841e65eabe88dd3c5d3ac09494356756cbc690fa054aa564ef3b65642498872d059e921de3aeb4ab73ade4d76268d79a06c8f334f2d0ddbe84d4e766da7ada063e2e6c01ef4f8f3006be9d8653c0b370e666f64c53c1f9039ac569160cf181b2179dfc027978250426b9c6411c56d723a1d3dc77ac767996e1dace43803c9eed9a4e7b05306489cbb5c8d42cbac18b606c35e9b6f9af6ad2c6a3ac32291e57c9f8628b3b4007c3e89bd58e33284c95a857e33c1691ccdf121812c36d1ea3b5b43e0a83c3e873c2f8e510a470d49a44d1fa3a8c681f693ea0e3e6bdf88b9c2ab53e09ce831b7e5e97128c2d0e86c1df8f346b5a4d4d8b986c433c5878245542c8d58c823556acb1f63946eff0729a1ea2a95c09d50c3b9844239911dec3f34a5f7e1be1522f76fdfe08d574003a5b487e931f8f5b049deba0aa52ecff73e14d5099f04613e0c19b328e084d866f86e11ff920936115f83713b33a1c04bac76bf2a29e0fc4ef4bab0612769e62417b61a67a49f9bc88c7190dee339b97c835e41f91222d25c38b29d3ccd46cfcc462319a3a8e0e813f746a17ffaacc3daab2cc379fc0e083a2599de7ccfd917f69ff1d43fbcf0e435b534f7d04ce6664ba5916841cf2ba9b6730b5ade30370f6eaf1f859b4d93c2e127babe523cc092bf734cf6cfa0fd40f280e07419d2f3050f9c633fd396c200cfe28dba995a6164a782ed209c91fbac38bfacf534cfdb29795f3fb8de7d49291ecd473c04fd08f6f2121bcffb401cd45498929fbf0900abdcdc92fc52a38002a8d723a33fcc1620979e440ecc856b6c3f76e16111e2ce50839d18ed899e03965a2a7e8676ed2dec194238c0098a4954b4a465f70523ec3c2fa491a007b38db7cf874541fbdd634fd7e25f364cdacdb00d82049ab668891749f515f46a993ed5b0b40160293a4803fcd5ee1b0aeb3c0a4eed6ba6a3bc4ef26187824aa07eb869ec42bff0e382c9d30873b3d241e26fc7a60ac9e7dfee7639aff4d299ba18b42c4b8b206412162b412f35ec25023e7b2fcc7b8ac95659330fa5aa26f33ef19f68a1b087370d77fbecaf685cb1a7cdc0597441bc966bd64cadab0520f69cb4040cd401496fcbe5b035b8e92a7602301c2f102d763139a216fffce886aa7b05a90c84913c6eb248bb78a596f98c432003659b9b33bb42e08fcb26b116652fc982555cc2f68157457b5199195f91d2b5c51d9fd05278714927b5b512c4b4a20f29c974933324b0d7e92493642fbecedb29e5d53530665669ca676d54f59870c67237ea1cfdc4c3a15b414a9b15de2c6a93bb64561a6e66439360fc2b06f3120b08b139728ccf0bbb290d04c111cf1825dd9aba061e2c5747142b8ea4f323098dc7926109355bc6cfa4027b8505b01d37a93c6129d696cb2484fca5afa8ac04d79b02c68f1e4b9ba96d845742de397c5e2feb9f368fcf121096c16f6db2311aa0640f4ea2494406f2dbf05e2c6719ba76de24d9c6276942808c95d2de20ddd1033385450705596c570443b90bf07e92064b7a00afe6717bec3f1fdea6bd636ec6db1e489714b39c5fa0cf9a6a95d5906ab6735271f23212b2ff39abca0fe076a74e8a200f70b1642c66738d71ebfada2ded6d54cea8d8fd9c9ce193008828f2845f051e3aac3e43193521476c2e62f066a92869c51048f34e9f8787651376259beec760515e88d1a904f32637452d629217583a6b276853e1f52a1bdeb768c11f945f6bbcbfcc7ba3d68699afd98d3f91322484f75aa7352f562e87f15dd0a337d214281ebcc9ed3060d9a0f62d391161299f65680dc432d8f23c79ac8461c383497353f6fc81dd13c4fd0349df7c91953134c2dbe34e320c7dd92a033e4d0cccc66fbc4a7720cac39137de05a5a87905f74ea4f2ca91807d207eb4ed531f095feb418f705984735f8c7a9b28ee57ad3955df80fe4607b15ce967598d688fdb7befe0fa0074911ab707226903d3d3e6ed8766e23038fbbdfa60f599a254e459a9b83cf4fdb56dba8c43f1bffbb792d9341fee29897025b09565ebf23e2be406c1087c9d2a34a5ca04837bb9fd909c0648fb84dd4291b6a03a3a2e5a77b96822a1ccfa4e83572b6e027d2aa4cac56c7616f2297a6e5206212e37674f598063a4e27f5e2693892437f6938e1e85ba8df84fe94abdcfa7190b018df168911a381921a869b86277a11f62327d02227fdb2116c4fad2211af15adaff56456d64a1b1f5e4ac1bf545a6869ef49ec63941d8cbe2f5889fea2c7e7bdd6214fce1646fb63a6a01f269d0a4f53f2f9c93a63c2033774832727101bddb2b20ff528f9a3ee9374ab3c6a7a2927549591858487a3353ac7adb14f26f20a85fcd9c02d6d908cc60a5a05b93c3939114199d0a5b76e2bd5df6050d0024c961abba7f5515f5d01d0cf00740ca5b231bfed3379ac3b975a02e6d6e4c690c5ee74c3387b104049816ce41102a3b095dfcc39d50e1578da08eb4b965190086afdada7eb8a775bd5c5aa51faecaa4abdbe815664ca55030ddf4a4aab1d5573b60e1abea5097988114ddd1f6955d998fb241ca13d3e6eefd88979f69ef384357fa80ff220276dab7e888936838c1dea4fa9648b334729e55a907af1d3bfa3fcd970a2334a247bf126ea17cf8308b62cafe5da1971e338e625168386a34cb65d12b724a2c5f0c6b375834e50a83bd272b8d3bbcf8e6b39f8d5f8d96a250ad91cfb7b19c05b0b48db127598484ebee25ecb2b41e94acbd99dae83559bf0fbab7d8f0b335a286517536fc53973b7bc661e52f888f43f5336d152906b2cf64f44d735c05d2bc6618131a0abeef37f2c1ec9fb80b1b8e44415f685fb201fb42ffd6f4986476cd150f7b83f7f9280e187e7ef2b82899c13bed830a988435ca8712b7d334e4a28660e1886360d59ad99b24c789ffc50ac09a4c0be8395ff9b57ba052e9dc5753c5b27c4a59bac3ade677c7aacee3359706286a7457f52972e4a076a50ffeb4bea6ba115cf77f00e6bbbed1f9d2fe0be5c1a9e28816fdce943ac0b6855f4582e3a806c24fadafaaa8feea82913db9c8f181735e7ffc8b10874e8f7c4dadef544f620389e4c0a4ad82963be696895e4aa8a36cdb2d7d211f64777edb12e401166851f2744bcb7474fbcd34b10e232821cdd4acb4652a506839d1949941a4ee733131230c94df9e099bddcab97a38d87ce17c04c0800e41ab06cdce823d03e687b166fe963c4d3c4f66aa7002d57a6f15b6631ac221adf4393805af8f39abd991992c795f187396abe77b54ae9c97dd9e93073af7a27e7a94ec876f2f50ae2c42691f8b80eee181fcabb8526719293ddca4fdb5cb703062ee833671c4f10fd8dd035486222e00b82a69390c12f02361239a61f44b0f5d365ab4667e818c87a9a784df8958de81d8ef0c4975807726232a52c51033882ea5b8fba62090b9cb9b4c59e23f40c7c15248b3e042e76cee3995d340218d42270a9f4b5a3627f3def3a8bc033dcb3112a733fc33a7c1169e4897effe510d9b24262c6d22de54263e85c19c63e43b5fb23a41e6af14218ce78037d6cc0e6de1114ae14f9cb254f184c3dff9d3440f49a34c79338b3426d64054441ba8bbe93b3c4797974b0230768b22f8ad92b444eaf78365a9b01e29a3d1e9e0e71f760e05cdc8b2b58304c24072e69b38b145886fb6a7668102d8db8c728d96c8d07bc509e05a9d8877f4e590ea07558c9a6e59a5afcbf6fdbaa3456ad51dff93fdbea350ea7057e4d05ab09d3c469475220d728d3cd45850c896f481a323a6275cdb26ff879743df64509e560ed32c0d26a5bd72fc79581c55bfa9ff46e21ac76afac657463be217ca2753ff29542860f11f72e5a40a9576ea3fa9165d76a7523f8e62147b9bd4af5e2a5e1c3af23da6adf8d2d1d4dc4d1c2eda8d8ca404d9028f9eb278a51865dd5b13d9c92b57e6da5797c72c84e39c5bbcd4497b0b226a98de6908d04bd95652981b670024a3c81dd1270cc0aba8535a97b6fc5842b5a83470cdfba385a9f043287e17ed74b09afd32baa14b4bf6a5e874065f5c5b2a1b3048dbe7cc11ad4d9cf9858bf96caa327f8621dc5fee317d324c639a29e76e51141b3e818adb597a508ebbf7744b2d8e9c47cd6fca3c4e17a1e9477204331fa0da70371048b30cc4869928f95a071c02b24399113a663a55fc66531b9652d75fb89759951c724d6e504faccf77b0c0c2a86cc4d6783049d6679c3a6d9677e3b59cad02d74f2a3f79e61cb7e2268bfbc173587ce5f6d269603979d1786f107570afb14e99a9926732dfb45cd3c72a4c4a1b0162080c5d5e09d40bbebc434bbbf48d5d75696c8bc205671038198e80baa5753c6c3fa33794d62e9eb0e05235a1f5b0829d7264c5a00ff241825d8bb865ac9433900337da7f934064dad0c2bb7b4d3a34151c99bdfcfdbc6177c08747d939ac0fb1cf2131f1f5c3bbb0141701338630ccc119aa7785ae81de26c43cdc467b5f5dd81cc9ea53757a92943aded5bd313aefe143aff8a77c51c26a915d7e9e7146eea7c0bd5e7d23ab60ec18fcc33a91410fe69832af08d10e066cda74322edc7827dce176c44a727ab08008bda82dd4959856c5d89086dfb1288c870300ba65216b8fd4a3eaaa8566f45ed0f8aace65b06a2b7f0c8996d275e402e73090fb9b5586f162872aacaeec7159bcc055984eeb743d95a66d032137896ddb7033b5de59e87dd6a32bec324e0b3a9c5278c625fb98211a391c8c210c3945019710561f4d09e0043bb345668360ab857fd5571d6a2d6ef831a56455bdb9f23e2242c532b3650acc952037c93eeb80814b96398b57c55bda8120bec186864faac250013c7c8e409f9868f92f70f0957ed01d52403c1addff2ea4f90d6c9cca0c794008b36780d6710cfb346d1eb242b09618354ad7fbc89d447e9e2c514a0ecbfdad55a65a863ad3a827c7710c0745403394e491e531f5a39fe9003e0f287d2f56b3c14650db9750fcea60419afc430a2da31812beda71e453d6cce6104f14d438a60302470e6c9b72b028cfc7ea7a0f447b3ba0a53943db21019e54abcb8e79910169fd5168d3155c24796cb8d827e3f67bf015f101b75775f789d523683143fbafa2e26b650f5827eb1393b47326f49e46f0d9760f86ba9fb30c3eb5d6ee4af6b88314de53520d4f79c7982902516815a9509bdd888dd006af953e6608e831fcb44accd1e7490164d2119618066ecd72b0dd92e07c36f5d0d0c0d3c0a1fe0f8753459074a507f192fa27b4b9052051f035583bf5b8d065a30ca544fc88190ff77266d893a7243651aec80a9be44072e784041545f6e01c8e3ee1f03ae2c23063aa6688ce56d979b9eaea7f2269c2f321e86613e165d9fb3885dd68aa449478f0b49afe195c9eecd6fd034ce876ef8a27ec9cdb825846c68b26cf8dbaadf439fef4bb4f0bb748aada77049d77a2ed2006cb8038e1222bb0f68457e06b5d938d472c95bf753a1965651e442261130c8af2e1a01de3d1f0d2dca0e49ac3eb71d3fd1143549248ad4c76c7cfde06f8d7f163e9365a1f22ac1e5c82a4925f7b341f284d09dddfe215394ea696c25f0c9ab75191f0445913bdf00cdc908ae742f4fa1ad235b31d083c937bd61bd838ba63af8cd40e1a926783879911ea043ef398269eac3097aa684aa067504fde916099c7ce7b20922c43df59144eac04087123f53649701831eb63ef3a68b3b58214b6a9732ee9a09df68892913914c44c1e87c6c4bb355b52277f09ee85023718c6869fdb0503b7c87fbb33130d43ac7ac24d46cf9e4ecd2da6dfef76fcbbed807c79251690aede07429d38a5b77a7c09226ea69b72b04b7d8af97590e14a018f7810e293e10c1d315f9c0670dbddca8c1c139a19d7afa48ec12a83a68d1dd1206e32e0487ab13dd8db43fae4cb2a574fcbace9e4d5ab93848bea0826e849fe8100330881af3c3321e7878e78369be9136c22349bcffee34dcdd912855022722d9897b48f2d92e72f3fb1c140f351c514791b47b9c6a0c3dd5078a19412593ee77e510291f48bc033a57be18a4244ea94f209b23509608da08df0c842c2dd13714bd1a382f4303bdfbfdbd43f384decfea41b2e783fed645172b5e180f2fbbc0c774a3a1cc0565d1c5fa4b8fd98026c8d6a8ddfcf7d0b40b35b07fb3ae9619a9d306cb55fa93e69d9302b84ebecabeec4967388e5cb2a50719d59425aa043438d11ee38c558cb023c281a76a50bf32f062dc170a9688b1ca0a94702d2ec2ad9a27fb923cb1014238b773c7aa1d987e3740a674e24e6075d3f9aea7f7943c3bc58f26dfb22ff492228da4db324cbee1054865b3dd8503298d3c2ecb2aeb57c96ceb25a08c3e30afaa98c19fd076e4b752a9d8745aa54565645dba9957d3052df59be214e621957385c3f9c843bb5bc05308854f9ac0dfa9c40fe6b8898a060c0f7c28765077d25facbe871b297e917bddec29a1f18ab4149130eb2a485bb077204c37c21bb06314170b3cc7640ef2874a3cdd2d71fcdb593524ce277491788e46b9a1c1e755ad9d2f4b1d73417d90dca2b9f327033ac45029f8996857e36831d686fdb53146fa71d4cf61430821f9aea4032e84037a13121951b267c9d30c901ef2e3b1c5550468bcf186136711c02e14a4ea97185c5feb2df04b9621fa6ced1bcb0c1c08d099b3cd05ddb995f30ed7f64149b8d384d5420954b082b4cbe357101cde180454fe7a5b74df5f266087d059d2e05c73224ed62a38853fb7f895e13bddf71bd3ce54abdee43feafc550f7b8d1bd90a09a2b4a6e5bf941fb792d2c0ee2f61ebe1e5800ac187066561a78341e931d138d8de063499ea3da3e43b472928f362cce1b5b7d5592d3598c6f810155c065fe216d453b8455c8f0bac813c9cd4db7802d3f6ecda05ed5f0ef10c8d12c7dd35ef54596fdb443faf913181c37d857939c9280d2123f61b501c265dc46e714e7c5af796ad89f0828fe85dfa9158a948f8a1523940bf5338041d2cc8af8d7df7153bbdda335c093cf0d8d95ddeb6fec6eb89c14fd197cf8a7f3d277b8216c36c2de2c97beddd0428330e8215c2751b067a9ae83340e947b72dd314537980756eb34b8786bdadcbf97f6425ae931959e46c8717e3c6d255d4689742b0e2c7ad8e9fa095ce2f254a285d8f4a54ebe6e9fce875e92ea6a727b42949c5641c7437e7b98f879e3d59cacaaaa1e1ef4b075fa81577c71f278ce120d5c3ebeee08bb1be9a4ce057a6a35b5f47ab3633e726909f90b66e2cbb812741a637ebd367599dbc690ec9250a5e6c8ce0c6605e2873963c69288e4ff891f9d8f2d9e4e7a2646f9d3abf7c6ab4bd44d8b9dc8d22b5e93e5d4466c2628a7a2c0c9eae621e331a3b004419a2d7cbea00f087df0b7123ca63fa91c6d23afce3d7d2986d8699b09a4be0617e622ac2268a4131bf4fccb95dedfc5b12c208a61e01484f9e493efa20097f5a7a460a42284179e02ce7f1c01c098f8139a84ab69b1c4178c1423b611ac7dcb8909d17ed78da7e739918c0c3ad1a1c7334533608c784a080ff84d14319a18eb0110983510767df6e8c781cc70c850a8efa38667b59324bc787b916be3a85d895d04d6b18bf09cf91616514cdae3860938b63c211b98c22cefae3d9dfc1526348c7e0acee48c8a6db31cff4b50c8ad1307b28323bc19ecb709731d0063398ee262876c570b94c4e6828164651183b8f0804c31d19460577aa03ba27b157b3be4382ceb0274d8c74bb67a698de8f24973430cd637c8f7b166046e3058bc4c5cc97a859f0129efa6cba0508b078022ed63b5c9982978901f88918467d996c53be717d9dc88675af9839c27f4b5113033d9e82ba8a058448cf9a8a430a8673eca14d49c30b028299aed59c00782cf8e00c27cbcb124c55b05bdc682f64a75e7cadffd16e193117cca81bb308ddfbca42fb6f8cb0f17ac196e8b39ccc6a785f3caebbafc083922b5c6a0576996dda81f1b5500e6a00a60c9e5639635a21ee350350616ee327d463352006852d184d2026d291efb800489ac9a59aea78605a8668b40dd82b715581e065cec10a6936cab5287a80741d5034cd41bdebc5eb2e796af61fda40b27c3014c6466c770f8b55b7bb9daf5051a17e6912d43d113e6b1ce65075e37e72a3b9540390d559e302a990cadd4d7a3919aef916f5d31e7c6773a2b0a2d187ca13f32ee2c15dcc54e582e6345601d0dc568eddde64c3552a83c5537dfbdfdb473b7eebf24420e328e32b0ae789c475aba5ae15446ba2a95237ac9dd640536c56fd61becc5f85b9680ba1d5af6505a1888a9b43a51fd58393c4dd720388382a65350738266655763a4d47d368be7f60289a6f17a2e801d255efd36861348c9d567262d3741927104b7edc0458b8c51bf621fa5d6f031320acb17f5079da538b2a2221e1804b7ea0058cfeffeeab204846524b8c1ec83b08a60acd70b7d2813cc730767a7ad38d6209a042cbc99b309f1e37b33e63e7b9979f74b79a07afa6ebaf972e237acafaa165747597b693042d2bd1d0d9afd53eb01ba3f0fb12a4d7c9fa58e447e9bccbcb9621241a69c27198753b6fc1aeadf4e40666e7baa824b6505272f9feddae221c30b8fad5e155d7caa31f3bdcf1b0e997b13cee4596aea024ef4fb3bdf346a74833a8f81bbe8db8cda137487b0db9d1d1036ba7e0597c98466f7a7eb59132d3914200197cbd5e6e097cd07e71545b142d118053fc2ede773133be497b0a498bf7391c2b8e5d7d1c1fe6285649bdb63ce291f0b49a115cf0227e805dc6b86ad50945cab06caa04973945112140c71169470ea6d8ad400ac8e4a917acff481ca6d7c866313329210ed7c2848db02c337075892acffc0391b8409a5e227ac8b260f0db582cce96cf937703e056abfedb517ba8210d947a1038b5ad290a637c321210322c8f88dc9ed329dfc821dfa10c595f17bee190787e21e7ee813e508c9c764040910fa0f55460617d720e40d95708b887af935e7185f7f040291ad730c17b727e35850e8dfa1369e93558f9d717bc201797ac5974f22a2a8a83954c6d39dbe9c5e8c2356a503a071a5f706154519b500b8566054e1536e3d24b86e45af3fc73186a0df5b3787f54263631bb675c313c16cef3362569669c34d11f4dfa03f73383042872feb31895e37cf15de5a57fe8a34a5ed2ff0e1b1005d4d40231b08a2ea1f61bd15cf2b7168b9744695465aaa363ec1e1aa602e91ac0d9c523a557815549944dd94126d59cae14c788e5546010720e80874cadcaffd0a840523b2aa09812a60461b4e00ab1d2f97254d658c69a00fcff576e2ae2c010f419d9b06015d6aad56d91cee260612ea34b67eeddef13174adfb00dc56cd2c235f873d3050b0cbefbad98c1c8c9ab1e30ec06917be9fa45232019183409386a687f20b289e2adf543cba41ac803ab40a165147ae5ec58167658a16ad4f440eebef62a38d04c1d4dcf9f8ca428d0d8a14c31921d015e27044e32828b831ca45e82776459f4baf6ebe12d37d37537c7d7da95be884754ee509c0a031153afb8f8679b5e89beb193253ad11e8606a33939542c45a949a4ee18d37e0533a2a6d596a7a5892428ed9a3b7f4d3282346db5d29e6bbb23b4b2e4c91e572b2b68b6265f77e54f34864fd629ea4299c48e74b8843b3ff057841471d7d7e79ce9020bb40fb8a1ccbe8b18849f1d219cb68f5b6bae15ba1f9a7dad65465d73e0e50cd4937e34f262a6f08cd7e5a369b755fd2959fbfc458558c2cbd4afabc4d45f3ebcf86b85d49022a181a8336b6fd044315449dfb0c4594e27d02389430496551f571c0500ad2576635b8fd9c60565c48eec31bdbaf5e2f5ced28bad9797de1cbdb15eae7a25efacd882de2476a08f9fde74977b6acfc2c276ef382f32b154d7ad7ed5c7ac9686a4eafb1b7d156494462ded734ca3fb565bfd9da9d4ea3f32a6f85f947a40343a405a2dc0a7e23755af8a45652f3d340fd31b416f3d121a5ac41ff41a148edf09443b12d80ccd539d9ce9fc96688642b23f3174a6118fb8c03676b3adb83b902d35cb766f79cdbf3bc1c8da605422d890cbaa804cf078f7e063e88dfd9862716688303800902bc80d5dd118e838a8d2d20db638e79e0643b99d12356d98d4e19e3eb6845d4c44d40973badc9254f6919f37c6679bffb055282490a92cd352a57395f98b409d0a9d4a09e17deaa59a8a2b7ba972b014ca3d23a742d64c3ba318142af64bcf09673ac14caa009541a45d95670164414b8b4bc6e69839195191088d17686037b454e5f06b3deaaf453c53d9814bac90dfbeb49f09a702192917286952643bdc19ced364a621179a82a7bd3cfae54c25c2682cd6288f9572a5595ea15e028de0eb121fe06621bac8904945d6861662977eda503da9b86ddac9e71764d56b07d18176cedcdea46639dc06ba641c7c6035632163da03ec9527977ee0907b78fa318d7747b7efc40050607735051caef1c3275d720c6ccf1104894e4677408d593b71c2092764f6db4a18c5b934d8adf789832dcdfa517f7db46ac2a6007eec9a20e0fda8c243c6147e43acc4cebf23ba5a37f8b30097e72c2eacbf77f40df1a68a8ef19f265bc7b698c684f751cec8a728f8c0e34ad567f091a37f27e550ad9af99a7dd9fa08a33c18529bc7d40701b1af0945a2f35bde0c9010e90779d426f326ca9bd860eba92d520f82c092db3dac6c129c593cd04fce7d25cad231487e24a38085c770be5cc324ffba180fe17f325693f805bb93b2b8a673b6fe930c9289773cdbb13b6feac5f647b6445f9edd8737bca12212f22796ba215a90a2564196f586ef2a4324c914104c78d0cf800bfa222ee770544472a47a9fa377a87d4d46c2264f38ed50d91ec2a4df43c622101041dee61d74d06df797c863dbb41e6099869db22700cdf433498fa10e68bc1d291564f7a670747ae0dfe6611f05d2bde8f3f835fb1991bb0aa160019e1bc3452bb31723369c01bdfa898d819b03b1aa4aee34dc83b550d28e78973ec1e86c67be1609213f2285b4f05ff01b188a791f7325ba9d1c7c67eee1d7993ac7b0a9d3ce3af6e38b4a2f54cb62b12683657f117401063f256f6b758ce459272735a87bb609b5dda2d0e4a92308a043e35907915e47f42c95e74060e1ee18bd34749e58b7a6db592a9edbdf88974eba4891a4ea10652e8baf3efc1b20cddcd02c8b152b42221432b002637dc6c621a42002d149b412f863a8527c505a068cd032c4b55df8f7132bddfcb039f142e0bdd00ddcb73faedf8cc041bfe9e905c1bd7343dc0611141d2ba00209a3fd6db1ddde409d2aa1974495da1b441c725c9b96ba181b651dbe443a001d7dad633565c599198dbca263c91fc532484b3b171136d3ead5fc4c8b217f33b1437766950b74eb107304996f1fb27ee4601210687ae23968062da120629459c470a6c1c680c02bff603cb28328e8662707ff614dd4601450e6197634f43cc93d02c3f51004e8a489f05adc9c47b4c842c6c31feb29eb70e12a3fe48e73537f98119685610abbf94d266f014953ce7b0679a6bdafaeff6a346b769059ccc3c776dc9d6940c56208e2453ceae67497d723be3994bc28e7b111274f4fc8ccff7e6a27d94f68cb72923bbdf51d7498677cf2ef274460619efc9cd82dab627ab256a7008d054bd1e9729aeadbe5f8260b1d3a0d3bfbeaf040a34f96f0571f780fa910300c41717b3af06cb50eebdd658889dde0bff2a2273c8ca43c08f5f230a93de47398d534d1877773937514fc4d36a7f0536b9798b041a80970888c7f7d9d34dd66d1e548a0e2e049a20d52f3ba759917ab2f18fbc26125cf2c5b5a4fb2d9884cf57aa39672bcee4110e7818bb24b38ec3f435d934a2c4993653dc9e40e9e23cbf56f483d23362eb5d88907878895b1e18461ef338f9e990aa58f09a7e52b4168df15db9de3aee4912cc7be4e20b5814e45fab04a2c7eef86fc3e3d9e67b588bc06ba3230d980f098f2ad7c2f27e062ec56714d986f831e25fc3410de2e068991ed55a299bc3ecc8b44e718c74c7559c23a646406513376e4c5a373e8b71c65e805a003f6b8b797d573fd7917ffc7996d595f7123ef27db8cc4d7cc91e324fa568372ee2cd35a59867ed1c735d698ac0ee935967ac4203b8feaf1084e1c4c08c596441f4496ab3536ea1eeb29fc26308936a527cb92f839e088254a80204a9b5b1231ea1022c504244b3d50d448178ef888915566000afa56f63837778c4a73f3be158622ff4375efa8e0cc9485fa843077faf43c6b8222670bdfd959d942cfa67fc2a1b4cfe0a095de7afc360198cabd4b62aded89c7a0f3ba58e98ec04172d4c4d52694111daf2558f5cf314f7a7ad6fdc3f657af56ddb9ec28c9aef1aa96da25fd95c98c1cd1dcddb1a07063abc3eba715c9bdafb915c2f4272aa7e0e62233c4db3d864fd3f355fa42c7ed0b1656e47d78fbd61cdc43740fdb431a60d42d2fed4dcda4476ec44605bb0e1de91718c21d73d666ec867f3c3e68174dc40f4c60ae305cb8411c083723243a402c1dd274d352a4d830b4f9842d08a187f200b3bcab60ddad2d41610195470af0f3f74e72727e62914d42a2ab1a1f434d63e2cda196118d230a6153635ad84611f875c6d1a6df106dc589e2e2b90c788a674a9fe867ca081a1120d6f611d0e6c69334a5be98025494c6753d94f0047dac24415f71b2212dbdd27b730f03d529c2c0e13f90399eec6aa470c521cf69d6c1b1efc44d9ce52894bd97cdf848acddb747bf64dc207a5f411c9cb313a3513da0b8aad7e4defd4131aa1e2dd22078aa26cea344db419657e297559e507e1ba4c1a98466f0a8fe2cdea9825e39f6c14f665be26c5ad9cd439916b8395a18b55e1ed64f30b11cc149d31e4508af43402d716aac37242124e3ec5f743388d3768ce6b797e2329d4f06c50cbcd110f3154563bf0df872041593a0d30681512c5426efa35e15930698a1b7ce10b5b1f04481787ead9bb2ae8548039ce86188683bf1b4e80b3d02028861d0e0298b85906113f68c8bad4a386111d9713822c170ed494e730f96630d01d5c638e83891949cbec95c1a6186a47f6efb336a1207166068d2c1ca4702a4b370a2e87e414ef258f780c98f600fb69fe82ab42a6d6132577a52468a932b152393eb924d35251eb759d232669a66e351642ee5de9b29590f068842f6c5c56b813215e42cbe5ca881a7544ee25afb88fa03d051e2344694bd034b16171b2f628de5f5f47247fde7cd9f9a01b420100711f648b8f93fecd242e66469aa13ced720039cf8be4e4114541a72f3030aecdcec26dd3f7f233c69143b7e3916410ee2d53287a730d3ed2291101fe78595ee88b5eaece4e25c649824733744f1c332b2c626e0f89fbd9e4a299a117df4abc672aac83d79d72485fb825877632e3803e71d5cb8cd0750d661686c4b4fedbbd8af319ddc6499a3324e99446ba96d2c3de19f106cfdd9bd12eeef178ff25f9cfb3f025cc7a3810fba733c45919f8870063ef4000ac5a5b173940c0bc02cb1ab2a25fb8d55549f825a297ea62843351c8033c203561dab6f43facc76c3f50d4f3ae97600105c7ee732b34f42a436a4930bd30edd62a8de3aa22afef699ec7e2aee09376a6270807247519f63b2ecf330d556278cb0c2cca6dc23342f1ac1d227b23dc1180462ecdc2d50507abc29e233532d06b65c431158507f43c34923027b0ccb170b0c59d60cad1b4c491e7d4e4460e8465b6c833f55a76b9d6b096647abbc2055e2c1ef1fa7738fba0d4ab748597d9078e8244cd9914ce457663a03edebab05fc3fd250c156b1f1b727442e11c3b8d9d6136d6ea6b9400d1bb85281e70e98e55de809b4287e47d25038b11f7835720148a83d0a1115dd218aa2f78f1865f3432402f91ef188255a2e8a1d4465e2e0aaa99e860e9a89e6b911e2147bd689b9979f0ebfb5d7b33f7d3dc7cf980898ba04e8f97fe929eec12a190d86f8ec225ccfb3e066c6d9dc6d3fa003eb240611122f05cbc061593261418e51510804fd8e75391c9e83e0c6029e2506d9c44edfb087361c9f3310d2dabcf89d27451b87a64fb609e1e759e3e569f8b834fb69b3f89c478fb16d06d8ed94751c911e40c0b836884f7d4941d611da15718d1f41d468ca0dda6e760e2c0352af56439263d5d9ea158f80856249650cd45ca7a857dcc2ccb31a9229d7896cf76240e792b82401754fc73060a133a5226601e88121cd3192d23d122d6d6e69316995d1d179b67cd54b0e13294aa229ad4927e818b23003546fe5d594901c7fb61a2bfbb01380a841ac90bc95034609d97307d67dd9bb766277ea5ec2356e73e948039d20fc4284682d69cc7a7ec49819643f789a75f63224ba834116ab7867aec1520d04662f3787a9ebe03de94cb63c62415b61d456afe05baf0345c625a4b73ff95c213b536918db7264669ad8c022a85e922ed31970b7a25c2103faee4d56abe1f2f579e7234c5767a13114c70ab8eaaa669445a1c25353f290b49ddd855c98305da4405031950c136e9d05719faad8058e55bfe68e007610b0542efdb1e3239fa923e3220357bc791c10c2f9b342a72e42269569f4451ecfed396d7abcfce2c9850118bc76836ccc329c2c7c096181ab2cf9d02a1dd4d3e2e9877704bf8047890b30a111ad5979ecd489aa3914b40b4464e866c59bd2d4e6e3c0b6053441012e068af59d6eaa31906b518cda389ada14761a4724773145511345a847f1d4e438f55114b552e0348049d8358aa22e0a0c0d3149b56be3be5d6880cc14ba04eabeb52e804cb417614d162c58a816924298562e3a43070d2919e8951d41c5eed9f1fc3cc6db45529187f91b015b9a90a5d25b172b2045d98b0dfbaaaa022953f7e207fbaada18999585c482c82c48be82ccb64d67f91f7aa15807177e99fc76cf1801093a849ca326071913ddc595b78bc29c6650bd43be4ee5ccbceafcb75f07615caa3312ca96a9bdd80055e99242b5d7ec560a8ad85c78d2abfa0404e2f7bb900ee7f263335761b40a2e3d0905435aac6d183969b436b67e5fffc2c76970540f1fdb5497754f56c203ac0725cf031193714543b578439fb3c4561d802f3404b7b316f330db750d6a6157668e4c16f4ae9255982dc95b2f3cbea4f3e8b81cc35e7998f2b4f7de490cd467970f68d3a982cc93297f5ef61b2d0ad1fa2998bd420f4be3e186f2aa706eb2344e0ace74671b0db2eb791bc24400afcfaf6f5d21ec7e858571de040c065b397d4c03f923a8ab0e4aaf0547267cc53733baca236d4242be01f2408598214efa52be3a420e9181f86a21344097d8702262a88f9f2831951f01d622d055c79efe1dbd956020d92ca47a8479a4e10b72ad3f1eccec1de81f4e48b0da2728544c7d7409e99c88027c93316d7e59dd99148a5c1a3fc2975dc44e791a7099b0384741777e16fc0ff3ce27d8e5bccb5c0cb9575ebc5e4c222c94335f0d80e48e992c188c5cd5e8a9d603a672ecb452d207c1c22d3e4587890d721d7df87c987bb2ed8f45bb3f03eb8b8f3ef4f167888c7e32902f605c5e1392300b362a8399f91e998127bddf90dc1a484ae41934d38633c5135a62b8f6742ac68c8816743880d3b9c887581570a369243b57e391e081a2e03aff018e65150dd8b06d758b680545086ee457835ea1eef819d570e7e3099f8f580225f591d6380680eba9808680fe043b62fb43a46e26f222d9edf2283c38d244a868c64b92b9eb37b729caa915142694906742cff53faf60dfcad2af1d574715f379f8bd562958afa9ad841b48c497035fd32e21c4fa203fa574d300bfedc6ec193223f05dcab43357eed72969dbf5b798db59d9624c40a9b5d034a3e2fcf3d6d3a9d055bd0f51d520667df40917e507904c8ba71efb04d5d59749bd817f6c1b49cad0eafbf04e81c0aea938cbc067d0af3da18382219ed69278178691703de732107ea6774e8da226e1da0663cc03c0086c30b2b9d78f7a31d63c182fdb2aae95ab9e57d526d91ea4120a6e485c80e28f27e41b7b9794b3599cf1de1673c3a09923e4325ad748432c7091aef66607572783357fcc7722e2f3d5844d50da586565370e891518b0728d053f3b21b588bc5734744cfafd5d4abf8d216e3920cf8d42894918f43bfdcb5f1ce15be201d67c32a0cf8b231b27866fd1314c49b61adcc5060f7e20a8ec2b04a2de1c7f04ed6937f155692d109bb13ca628e7b950a214ab877506931fbabb00c036409d8a5c0bd1643d4fa95ebc3d80e1fe91f8936015e3f9c121d090c2efe78fb7fd7a46c008c478364fc6c6e7382cd2ac105b75d8027bcfd3cc0b5defb9befa8d387803fddae29545945975641088cd8ec7d9d24e35c35d3b6893e676224231b490ae79bb48179e3db2351e06a995b7768de0207e05c26778fd5b2d1ccb7821e55b11bd9278ca137528f47eb468dd143e8d342b82ac88f65d4b3a278d915ddd4f641f85985f717af70aa18d23a9812ab04845a1767a0dded448677e03053c0bc64c71e2a075ad60f10d6cb6e09a0501ca9669f617cfdf1b2af642ba2bda532f6b984aa5bc4d615f3968e8ec3bb2e38c45ba2a66eb44d15c6313b5f03d0ad59f03faff7ebafd4463430aa91c9e911b2ad9a4f3fd8d8a227018d6a7a12809c5071c239d8ae962722385d25787403b17c2a58f562d6d4d1daa766e22deb9a0dd3016995ecd763e2f874a21139cc586e0b95de46c221a7e9542b57ad2e167b9a71066b9b45288e1f3bee0df79dcdaaabcbf5c91b6bf01006e1769481b794d74a38fa69016146300e2b55b448c59124d218d0f217dffdc3192f6b2ad32f7b315db99d819ac35eaf4cab94a10c9c5897527ba99ff2934b6ca3e86acc22021b6b1ca2667a266d5ffb73ddb9e4cd3c41535fc6a57b562deb361939f54e8206301e42fdff37f17b69aaa0c758b46d526a910c965f23ec4dc8ab5552576033df11b36f26abfe68d786d955dabf0636bd5b35ffb79bfea23f8bed6060557fb68007a9c87fcf0ce03926ee1faef2b37c6f75c51018fba732ce416e3adf0967fcc56f07edcbeb75046c479a31d7a09450cf7e9b358b854ce3305185d02556c111435b9addcdd0125a77ce3a2b4692afd4eaaca1cec449212b15e9ee806452cf437c60d169f83b75f4e65bb94b5eccf622673fe161bb48c3ae6100a09426627b26733fb63e701c3c5346e911791b81d28025b6353fb4af85405560630817edce2c46931c9fcc1fdb2a0ca342f6e4d7cc4be01d7fbe6fbdfcb19a7c554cee49a91defda7201549fdc955b67c36d5c52938fdcdb719c7c470cdbf6dddcb09a29ce64b0b8a8fdc379e7a6fb6df3dd12066568ac87b4249abefa5bef5438984e61e9d4e2a12089dd137c9c58635a94a8c2e43fea149b5ff4383e6bed073be7a917f8c5d65fd75a2d5381105db4084be958c86597da1699dcc40a311d39f59031f68380189645d409fac776ed65ee220103441240204f10455202a96216f23600582460c5405de57b4dcbfba9dd977718191e4e7f104c8e887208aabacef06b4fd81777fa53bd4582360fbb76ffb64fff6afec47519dac0f8f00c264c85ce13456ec4aa70e6416a18cb7ece39753b44f341d4fe40e042f8ec7dd44cf1fe5126bf05cde8dd58068cf1e2de9d8d2c0207cd70077ecc57e345db85d1b15d2f888e2bd6290d8d9060115a50c38f70ce1ed398075cdaad47bfe638b13eb9136386d29d03661b2187d41655a5417e96c248e797874105128ce2d94c790d982d82acabd88b94905d8710bff3464303e828d49a0552066a62e29546a21411a905f9d4ee6addb53d6b121a3d34396187308901a4b93bc40a1e88749e0490752e0db1558f1630cb925641143b299f186665443687ba6783a3c3e1ee62426222a7c1efa5af0c1501d430a73a3fb85f3447a8facb6b32afbd4b21e797289b2b2e5412e71f33dbab005cfd7420c9c74a9b03e263f32c00d6dec346da85af946bca893e10297e961977d3c602c15066c206ae81269d27e93cdfe401e84b59d421e0a4dadf0e5889bb1f95f3cbdf0f34843a17051555ff97f5c9b9dd8d0cd40c77dc6bcaccc4a716d2196c08cd80878c3f1c7f21dee1224ab44e2ba90cbd1c83ecb11d3777a2f3a295a75f610dc41293d5e9a222d26e5f4fd5763aa09203536ddbd5317cc462d53adc2bbe426bae9af402e8f63cec68a8bee56533466ff2a94f5eda88403e3747fd19aa6b628a8f888450d4b6bde60c4cc8dd0ed960de33c5c4c029adfc56c58300c1dd7016d1d45295c50b0668a9284afc9d116ad14b8d8bc285a79fa3454e5852d649084a43d380b8b777ad50a188e4f15667e6940f8a2834fff8a01f3ca9b58f39c7ddb3759400aad9f1cd32bdc4d4a29a54c294929536406db06ef06364e4c53be3e613921d5c18f6178d5307c62487f9dc0e9e08ff0bfc2e4edbf5fb9a8aa4f56b42df6553edc00860982c5b0aa9af3f5eb79833ee9ffc3e7f2065f24fe0d241c37bc1b3010c1359676fe38966519080402dbce83bbf837d800d621f4cc7e0b8ab43e21aa3f86c1f92aacfbab272a7ab36b0fba3a040cf2a5ecabb0feb71f1375064ddcfb7740fdebc05f4f7c682995ebaa6ed03cb835d6df6e87ac0f2d26c006acc61298c0e8aaea88124058d9ce4dd694950deabd37bbf7aab2acf64157d540dffd23075f85ad57b583de19b0f911448044225b52e05f03295f5e538e7bf8f58970fdf03d7cd582af8238f928f38fb76efeb8b7293f7ee5b583ca8fe15787d0f3065f8b7d941f6b399665f875dbce39df32bbaada42d0ea6f259b5f85f56f4880fa3d7cfe3578f1c77d547fd1a528a48a5376ccc73df3b543d76b7befbd6776b32c0733497186aab9ba79cca1d8fcbdf7de7b5d61e7751601bbc29e80c016d7999d8f22f67c04f18ffbaf7f0fff71bbf351fec7edba6eeb7d2712f93cef143d3dd1d32f82ce2fb164b15663557b106ce1875f6fb51475ee5ef87a668b30c91defabda030b5fcfbcabda03fff51c0347be9e5b75d640e1d733bbd5629300e0d7b30b4401c803bfce8aab21abda03f9ebf905a200e455589d4754ed41fbf5dc81f0d857e7579d85aaf6e0fd7a96810cd07c502b623ccda460cb336a200a1a6f46740ec80cd30d35a3d645557be07e3d03813abe3ac3ea1c077530b8833c180cb6eacaba5d183c96e0aff366db7bfeb8fb38d21fd92122feb8a7bb883f6e39eee28f5bbaf9fc515db670187fdc657ffec836937e0ff1c7eddc537fdc5227b809af6721feb89102a061b2f3c75df435d29b3fb2d119bf79119cbc90f3ccc0f77cdbf5ce79f766e4eb2d249215a2f567f70bf0b5d6dfd2173aa0cfeddc9e94a004a78e24d4d867bd916cef277de8465cacf9706741903fee0d783454f9a39bc1963fee1426005079dd6aadbbd6acd65aeb556b3584344e4105f7ef59a31c7791c6eb599d572775007b56917e0afdab730afd1fd7e28c3feeff013385f6abe0fe0d096057291d420d21f8f5c9bab4410aefd7250668a30b04b691b31aa8fcd1dd1964f9e3e6293240e0fe0eb47f7ec8bf9e5c60e78f6e6f79bb5bb66ddb766ddbb66dd5b6d521d6bfa562b14689ff965afbbcafce25ac2bbad98075849d37ac9e5d35ca3a429bac2baa9434459d41a8b38815dd5467107046beea87fceadc00a0afce2b5001dbd547a894ba57adeee0980e1c345feb3063fb19bed66196f7a3d39d7f641971d4520a5c8003ebca6c54671194407bc07e75569107884e935f9d3f50fd51c5d99fc4ace2ab3304d49fafceb3aace17f0f024293c057e05f4ca2ea28b7a7e79ab09f2559e82efab7d242ffeb871be9e55600a0c921dcf160dad299b651db12fb8d59101c152cb2b91e47c919756858c3b51c2c40a7e7c4e3f5c34d18580488b571b5ef2459b717ae4771e8a0f7fdcd2af6792194ff2e50f4ebf4fd459c3990fd6f8e32efb7ad620f547b6f9f51c42cfaf3306517fdcceaf6710517fdc525fcf1ab6fc915d7e3d075578cfaef4599d416057f85c1257a703e712b4acf249665754c9547696011b3020bcb43eb42a09d4c52ddb56505a5b3322d9a29e79073d93d878f50779b4043e3bef0e20f8f07be6c03ae2b855d01e5c4003287fb99530dcf9231bfd7a4e49f2ec346f8f1c9d654716160a5c80037a45fff54882729171050562546711e89512457d505d287e88d9a430aa738a925f4f8e7cc5d7ead05a62afaecbbbe79ac191c9a4f528f32e0a78c8bf40ef96778b8e3c5782cbfccbd4f2f02551f0595c448611e4edb5f1fb6586e73d6f0b2fbfe8381e4823b689a98103efe54dfa7707d6f3252b3a9a07d688fbbc8b15439f7dc8f33217e95b1d3c5257cef7b6f7ccbf73f0b3c81be53dccbbc3bb3c3073a9b551a3eff02d14a6f12e5eace5dbafb5f288b8497c2c3e8aad6421c9a6dcdb0c32d1cb437928a3f00e43b683bcd2a4220f4ddaafb75c6cfe118595e9afebbaaed4bfd39888f75f6bdded707b84c46b5bc822196edfc41ae5b8713e3bc73f4ea887650a71b521b22873db039277897e26f216501516ef12fd4c4c995552ba07251adb072bd1834811a1f2014beb6105a2db3345baaf4f4d0c834454aaddb49d1ce4812dc4a0079d1b61d2c96559f6c8f2872240a098f013eff1f69a32e241896667a758c87392da59d7a0b568555a9dbe7ab2ff859d21cadf1a63686397ea12890722373b67861b35246c0b17c02f1261ce5d984f160ca3141dc486f888eea8c878f4107a89e1d313f2f133bda1b59663624705dd5798b7ea439fe4a4e22b3ab36154348522060f221aa32056302c943a97713f5439621e504a39a1a278d039197b13455b75411f510f654ccc569dd9ddd94b0b1a382764efbcf7de477ee7dc1f60e9e86b8515736b0563874a7205d1c3c133a3a4f2d962d16abe241bd11475473270c62e03869d9a191e8e0d639f7ad92f522c7c747c91ed0dcaac6faa85d89e548c90d3f44651d28e865ebd2a0ca3e063f9be40b7edc7198ebeb7651090908d8ba01432c6c48cdc86d71e0e5702b251d0a3a1562c0b4ac8802b29a5657305b89a123e483dbcf6d45250fdbc9c73aec1e7ef8b81f3241a18a03e97c7ec620858456798ee76a0c918395a578be51a8c1c2e9b4657299d532e2319c8f2e6e8dcded5defb85df6138043729e7ad5f611ca170f3194267c300349eb0562cb54de98c9d65aac1726dd0869c4d521e1b56cd59dfdf124712e9c78d1a7f461ba9ab31ceb8e9f61b2a514eced997a21b2ad27baec3764c91233146f8827e0fe36b019431ecb3bbc5c279dbf21686cd986b51375da78712a3b334e5f311ccdc543ee72cee0bb7258afa9269426661625e1c3cf15802355dd0ac3db984f1ae1f35b0dbb239632f1b858a219f5daea273feb66f04e6ac72c8c84b9a6132f6b2b29c299c39227b2c0d27cf10fbf40a7a5927af2712f6d28b211340478ba21e250e183a7454488a1c37ca9c575d387e841e658928ab211e206b4b2130b6a9058bddd582a8a5235b6108485d570b2cdee1b9f7de3be7f0b38ff97bef636c72e72eda38ee7219b29f7b3ede19cf22d3e0d30fc6c28edd949090351d75368c7dc8a5e529475484c5737512937bf1f9db5f2f21aae94bd438518565e303ae6947a2e68a85dc1a0b341f26b81ceb736aead9a5a7b8fd7caaabe0039d0c4ed594a6c55609259c153598583234d066fff2793739ef9fbfef8de95ad448a54be20a6766ed6679c3b089e45ad434ee8e5f39c1c491f8db76f61cc773dfbb921ce4c35c98fd8aa6bb481231439cfbdf7bef5d1ec23dbdd01637ceb34460b293cd54c4c5056143f210798092e7f98369e6a663e4ac0c25b02985fae26c5a064d24819adf9811e4c4dcf4ab2d861359901f343a68da36b384cd9e8ccbd299cf19160be3ae2f2a0b2ccd8ad902cb7d1ef6dea54478c3e26cef1daeeaf7e1ef6c1c279fc69a4916612c8a7342c278502d7fe0949c55796b50398e5d9eacec8423937bdfc1ea8d610bc370b4b4848600e17190798a89067d5dc52501e168ad30f44ed6037eeb6726c27c946e2f8e8c2934d0a0c272a2b87c58a4ad18a8ad3f1cec0b3277cbefac8571234653ca6f0f0d8e8b3b92fa48ce90f229d4127e4465ceb76462742e145932d78e8e6c15eb15efbe300c93c033f4be729bc24d6e7abd6ca4e2261f8bae78ed3673ceff0b5461fd76d05d31823e77fb6e07de67d9e5b3cb2e75f23e9f4d9c3ad3cf39183997d794edb22bc3b5b8e7cd1e019de0ceb53704c0e88845edca521819f9ecb22b3a08d27922481125a81c467e421cfe3d0f875b8b02125b38ae1345cfe7b309fbb2542fcb7d5c7496022dd6c8f993f56e91ad60613e7b3e86a28b83ea57d52544c6d9127d57654b01f304b1a1f5ea6967d682c1e1740ab4508e28aa081d22a54c5dd900c05230f3b3228ab09b835703189b6fc07738ce17c01f2a7508102e7857d91978f45676d50f6fad9b01bce1cc7d433c9dce7643d70be2ebb90cba01061c03602bc53206eb873e195854316141618d4080c1949421714dc9301714ca7a1d71818a090b8afbe14be83fac68c435c598e7473ca045a31b03b2110b287c04cac2050be4dcdc36fc5c189eac1c8a86183af40ee83090cc445da69f1aeb0311205060ef89c4794e4951516161d9f31149060e42e89a3282cc40aca0af8846d4331b2fc09a861259cbc30b9fa84378302bd920eb75c406229148241265931225bbb24f84d04de444947f247e229158a22c5196284b9425cad56b8349c9736f8832a140035a348a02370aa16cd18e820a88fe0ba1aa0622d62ae090814d2add1d7c719885cc7f247ef913d7940cd4660cb36ce21333102376d0b3eaae29c813bd8eb8a0629280111b0b502c586042f120eb75c4488992665d81b22bfba404ab44aac4a944a9a4a824a864e7288c4285d096288476a2107a240aa1422803b491c816337079f8206bb46894c4d77d10ae29c51a17e87544900545af1035ebe1474a51d6f2d0040584880f88ef276ae0422c7620ff23519728b710aa14428b2dbe030c8a29177cf05044b1e0a4c35ce450aca04841b15834291637144b3410316420290e8bbd78c142b138e285c122508e8b30fbba6d91ef627155576490a843ac731168e5d57f2412519aebfac1337e59e70d1e74083d9f7c7d63ab7a073b406a20c31f5d10013c3a32c0268517e3a287d98dbb9626aa291c492f3150e4a0307630173b443a31682e516c901fcf4334e47227e310f3e24fad4813970a1c762a9486533c39680e58d0511a065c502fd684dc9d6ad1d605f617edf3e8905fa9d0f775a53b6e4f691f904b67ea5c2570e527d743636ec654dd0e3c55c485e9c5e303cec60543ee908b3377aee55ad44bcc5e0257b3f7b7e534bc7c38dde7f09b7384cbe158e01cde8a01fdbd076f82ac07b1749726654103d366ec27c0ea74a8a5591dc119fbdcef7d85614cd27b27e9aad5f204ab2592165f5e375435d2b31e13f0d9a1d2aae2cb7aca3dc36adeb02b2792de7bef721caf4a83928a05ed582549c0ec686a8905e6a2acec752a2f409293d2e4e863a361ec3d737f3eeef26e6a183b5c728b3f974ce5d28e860e3bf1e26c29c59308d51b86111a2d4392395ee0c19d600ee86fe7466d28c9bae940ebe14b9a49f5c9e8f7c5d036d41e0179d93124aed59094848bb0021a1cd3fb11ca51636e8ffd81c4b79d4845dc145cec6840c9f140bba66e7d6ad7bbdbaeb0020c09e5430424cdc8775c25a1be6cf40c113272b6cf3977dd76daf2b17d37c543e229f170f07cf086f096784b9cc3ce1dcbdfbbd19adc3bf4daf7b957a18d7099eda76da36a110e938e672f870572ede84c831e4285f58296b424a32f9ed1d34734248596d41babe603d744e5f4d4e3326baad15491affbdff77d5d77ceb91635d48d7a29d16db64b21313755214187c4cbc1f2edd91876d220d762323b762e84416e838fc346a1456b58c1e61169603b14af074bf5f6deb59caf0efb21759a9884f155cd592ad2fedff77d5dd7aa682d6a2527292c12ac9e5c65b736aeaab245386b7b03c21aed3427c4211212847568c25471d6210b5a7731497168f0f09027e8aa9cb08c9cf5d174f77957d31e87a98d1f4937566c3cb0ba7cef6f9f77efbd2b55b7edbdf73ea3f41984cad1b20fc3921d05f4d6cea2885825f3a425729cd02d99a9b1a85b4a0fee23851f307dca4c3909d17d8d300415b533b4170684c372b8c01d72bb0833a4bb0f1873b683e4b40a03d72dc19cf30eb3babf6eaf2bcb62afea8c8b514b58ce39e72ce7bce537c038f65c665f2c2fd860b78eeeb3c1eb992b7203e3236d832caae44d54d011dafbbeae6bc3b616b55c5e09367d499a126e76380b7ffe9c094b5434b1bd197214f0e0c93331891153f413e354e6c3f2681249be24d1d2741811819d4ffd8001db8ef6795cc18f9017bfb9b626a591f391690d1903e2022da7c492eecc8ad987147b714657a32cefc7724fe9b4c31925b7b6b555e6188bb30a86a278544335866e963a44b8f8493213ea83317bf55ab2c15ddfd3de9c4c9ddc54da5c4e1cd84cd4c8d9e85fb33fb79a256daf527bdb9973ce39ef33e79c033f2f32ed7ec8de5fb8755bd7fdd21b8850ed85ed70c6f1e520e187d3f285d3e86c0e7e55187e9d34921e04567e3084eabaf86818b9169e9247d7188cd70c16c7cc9270a6ca9bc9482d38ef943830e9c3e9f3e91bea5bf62df531fb9a9ce539c6549685218dd83213449f77998841000be82075c1c99003434be9ddf9e2bc5d3f698a8e9ec99ca70a17e1ca2582060edb813a64ecc70f857d3384d00625036bcd60ce399f71be6f90ee8fef6ae78f4c476ae4794c75317a61389e8c9c25db729982bbf31b1a85283b18032d40ba5ca068c18248e710caaa126243ad47d1d8b3ce09deda03a1a18226c92f66092ac8088d2ab9a2072687d8530ffa66e065859a570c8e2563af5bd1430cea86e885b1439f6f6d6cd8ef6251530d3c6c7888ecf4d8e1f9317624d58f2b3d99a0bcb79f1154ccf50b9ad41cba36dc465e12769431e7c5cfdfd7e56a0c91cb82a968f2190e751777a38ccfc473470edddd8ca8d7990a281ba9b048c86158cf872d6a57ae93857a5141af373a20968a80319bba30b0343130f6cbd93324e6cb01a26a6a79a5b9ef09a92c6bed956cf9ecf2b5c8561ca42d12ae245aa42627a02dad84aea098d88c5c46c9448e9032332523f6f9045be332e19ccb7c0348d12431206d5c502f99b6af1cc926321e4ec111809686dc361b80bdbf15eed464b4c993026ec60aaaba2e1f5c7f3266d4c0e25e8a702f4832b2a476a0e0fa0262327b0a325d2ac1f0cb55e6f3396f5d0edd6da72eef8b860a09430038c0e872e2c4ce6e9c2f497c49bef0e6f426f586f5f67c2b7b437b63e3422ceefabeeffbbe4a6b513b49613dcb1440038db318b9acc12cbbc2af6b904834042252ce7bdcba9c1a224a3c35394458daa81be2029532b774788f3becb3dbf5b41d8372c9d4924956732766dc62e88c5ceb73b1b79e0bb0969a2f905484912da9247859399134b63348af9d0a855acc0af9399ff6b9b75dcc6afa399779348e63fdd5e6131d318aa9420ad206a3872a855e968f990b2eafbeac16661894dbc5dab025828981fc86930a9ba314cca93c24bce6dd8f9793b1633ddfae1614c0d8c59e30b12af7b96f9bdf3b5170184b59b9da2fb9b2ee3c9a5c5eaf261a1329a6dccba070ebfc72835eb96ed0d25ad4cca613ca51088a72ee253584bde9dd87732d6aa81bf552a2db6c820fbb14150b2f58b78d81aa432eacbeaff61a6207e55e7f41c3159fe2f2f7bda2598b7a27a8c83de14a298573ee592493678033700e33bf0e9b9bfede991f8455f875f5238c3d5e0cb3c5ef8baaac6ba121496590bd38da3564627018d9191c0f81612a26bc20bf4e405b299f41a86cedca28d7a2c6f1195a2e75952f99690c33c3d4f1599150c96ec209e71ba3fac8502f0c4b49df57039703c91e2216426e6f7b460e37648aa4ecdb5332f24de3035bcd68d0a95665870e5b5a34bf77a5fbc66defbdf7b86ddb203b8c6320249b2407573977dbcddd1b2cba9ddbd95d471c55d90fdbb6e51cce672deaa1e5121c73866ba6c03955585e9875f19832ebcef0ebba793371ef4016d8de3bdbbb876160db7d7c962eb43e5f7b41973efa7d3dd7f144909f8fa8530e1c58fdd5c7a64ee527174b720baa21cf5a91c66ed4e048f88f8bdfeb95732d6a6894842b29e7ae0bc350726b51e78900d597a4d9091221aaa8e9beaddbee19a7544c5c9d1098ac9b24d38b1746eec328ab0ecc26878a648c7785e1d719e439d2efd2368cb4bdee733ec2590b5a0b860ab831c32bcec62f4bcdf884e5049323353164ec5be669a2c882670b528773a1dc2a20b22c0ceb2dad45cd7443d06b7a62f7481717fa1fb0fbe1c1ebdf925c64edbdb7dd8ef3b6ddda037f4e2053ca72d8921eacbefc7ddb2ed7ac504b6c51bbef2bf4beafebfef5ad459da4d9092a3a01a9b42b48c2b01a394918417d10a8aa26909e3b302663afc2ea51abe1a91133f61df37b7be4e3b806678fb058562b5d7757a08e11d1ac48d74bba0473d006a97af79d6d2d5aa16662083387276ec80fa0adfc00475a9e1cdd4f0fa758dd120bc224d77b1f73ae450d8d4addec46189b7216f785db1f4d9bc340ac8eca39e75d85f3de7b531fa1a977ce39e71cdc769f287b7960e0b35bc35b186ef6de7bdf5b504d35e52bab9a00b3c6b43126cc447bba8e0932764f311153e5fd425e9495b9955f573c253e029e13e79d881d120e27d3cd9874e4a7672ccd8c39c6b661d42ce8e5f5de7bef70979e741502435471f7fb9290e592a0e5ba5aec870f8647c66945b45fb47eba97160be18f1f1054599c559b0f95abea0a5bb9979e047269736f495dd36909193a9c4e534958333c3be992c3fd71a2f02fa0ab675734dbbbbb5c52fbcdc9d0bb36f60c9c166d6b07c3ac005613632e65769cc35f3d41bff761efbdf761efbdf7dee3aea59d767e90c1f07a537bda2e6f322b72504d85cca4ea85b125a72d172d1eaf6d420399aeb43b69919ab03f0cfab2af3827ff3d6161f85d71befe6a9ac65361dcf6af28371f73577d5f11909aae8be4e4ec0ce387e7d59214dd8ada2d42c112678c5acf8c23b9154808e2f3be1af4d660bd390d5c07dcbbf077cebbef7db96158ae6fa4cfdfb68b9f8e98554fcd1d71338c7696782d96863c01a9ca9111567ba5e128873d1eb69d732177ae634247261e42e041726aeae9d8dbfafbfb0013d29414086b4d47da74dbf775b9909ca4ea9d57db14ddd24b9027bf921c5e55307b27706411e9a28024012993b6145161c3a5442154c74386ebba45416b5117293949613d45282a2339a3f29b127bdb9bdbebeb79db4cc8c0da61f1e754ca38722a8c84a6a64ed411a919f131d571aed1c499b5f28f0ab907eafb8b659705043681306c64f47b677bef9c5ff05370464e607467594577cb1963734596dea286a810bb00c35d249d2f48ecfcb1018fa08948740af561c667ec753a683632355116f102b2a61c56b0db63b196d32663e4604e30369c41c474b0d3afaaf6abe9c241a9fdbad1d4ddde551856b245edb6bdf7defbb0f7ded90f407ac03c64e0b6543b567e44f76dd9cef230e75ad4d011c2a230ecb6ace6526e2c7ba2fe10e3d3fb7c6ede7b255143c2668738bf6ccb3994451abba14245e4398ec3c0d1bdf7debbefbdf7cea1f73c17a9cf82f618504279f415c19261668246cd56de8c9fd2d8f79e48564126009e356af8c8fab4e692c57ac51339673b3ba36f2deae4094d349dd8b6575dbbed3c4d85b2432519341796f2730ee5729b035d8b3a2a75b32b21675a820e92b3084d5c0869aaf14b8ee518f98964f389286a880956c80f1c9c27745b2ef4897befbd731ef76869e20d7bedf0ebd17361ea6c09d1b2d961935156a717b3428e79e161980ca98546c50ca0bd64082d6a7ce4682093ca8c3d0feb420e0d6c5269f76e29f9467828e06ab1e48381c1d27103b53733c20f2630a416d9991a5ed2aa2b09fd3d6b479dcca292868002973da8a4cc99093b8708c2880000090800731800000570180682304f032d950614800e2ec684c0884c1c1007438138180a8aa12806a2200662000841280883201a881d941d9685dde3a83045140283c36e1a517c3897b42804dab245a41b408b50562e4576f5714a2bf0b018bc185e5bdcc0801b093d560c9ae1bc4c90a26de52f288143601813421594c7490295fd15277cb99f1e9e336b878e4d9b4c530de4ecd014a8ee3a1866c2b77e0e4886f12f8db7fa0c6c7f43df1f37d27d49bf386b1ee975dfbc8fe3314d281729c5912c0e69552d460cc864acb0b7f8da95667f422035ad3e812b4fdcdbe5746c72db3296df8639a474294a5c4737ff05d10ca94834018566a4a04d23781e08eb5989ee9b256662b017640cdd6d13d1c8990e1bdeeac1a6d7d8e25f9a913100132e1aa8a1fa5a730aabc3a9d79d0fe8658778327c3beef22f59d17f9a252acf7ec978f9584bc2a0c48ebffc43cb76278995afb073bec8fa65f1c77e461f98ceb12ce5ba1c2da6ee5bdabedc2361052aef5e3c66ae20f22bc9d976276c9ed8d6cd680208b0392dae29e19a89d5ee5ae373f37f7da67e1367b9a78cb18db21002aede70b1c2ca57bbd6ee7a339a5a33455b37509528578fe1e112c8547a296dd259c6216ce00711947e6b26fe7c0836bdbedf8c24108d9185c660a38138ff261b657f9e9f6cb2495b0d912fb254892f59766598f5c5674db72303a6b2123c1f692293178f84d21cd552f93e96edd48b47e59b8c515927a052d272ccc8e0fd409ef662a3d125dcab32f6e7a7f81f731a2620dc11cbb617c596061154fbd384a9527896e5c1c060ecc7c0ed45e781cd297e49a56252ead2a2548357142e487384ea82bd5abc8179d5c22f61db6d06e7712a9b5496974a7f8d3d438a42238032b6e2a13198c774f9ed1d9c9e3725278d6e580938cbe5790c15b6a4f3030aa3666db93aef2bb07602d452498567bcaeb87a20980f8732728aaa2b82f1869de001332973d254960ab25e794c4035fb2f41a4d8ce4cb4066971c0cf3e954fdb19c522fa7ffb363d778c9ce3c4b22880c62491e1a2a940a8a6b2663764fe8694f995c727d021c54eb15b781c3595b6b2aee75993da5863dc2235f6c5b37f33ea8964b06cd923d6bcdbc37cd20af7f28dd5cbdb8ef224889fe2c4e87c696c395e1f132aa62b5f3b35ab4e465430099310855471c85e0a10290243dc42ee3aaf100bad4b9d3cf48b93462c4133651128365cd49449efc0d7dd38af15de035527f5273ed8aea192c4288b9052ac9a05cf082b4659918a669f6ccb5a08503bc5de5c39e5604ac9e63c61d6d2e7e06a2481e3bef6cc78851f49a1f31feaa191b6b8e3b55ee666d84b45b6fc92291ff1cb2a0c2dba2ce30d34087092afb8ab882667e1388f38bcc214e21c7c1eecee0e4c505d16b3397a99be25b0e4fae9454e956c67a43b1e30f847bd3ba54aedc126007c99dc25e01fffce73f5d5918fe18747cf26a4a726a3879cbce5e60dca9529e1683710bfd64f3150506bc72d4c81e95543e066fc302f5fbcd764e474caefec8cac1073fa5b918e9274881008915fac905b15c467474006badb9d6f62d5b07b4aa5347be6342bf320e07f7f33c169993da4122301c549f1f9bea4870390a2b4982445d8ed5284ffff8d936a4dbf8575d1d35464f245a35425517b654e7c28a193109f6c11cb8a9b9c2922bfd5b3a7de6fb3db3c823a481336cfe8991f3e3016527239294b00dfdd61683c7b34665fe90186b2abe888194a0d140ca048be0ced51898cb4e4a70fdbcded200bfcc9886d65c01ae316f0f23b785fa0c43152d11a2f782c1122b41229c8442039a46ff529c242ef176f52a0fb05618850b88894b152889adf6671d7d9bacca5b0402bcf0529420366066b119cfb97fcf7012e9e97ad232598364dfa25ed682f57478f74b34ea2877733528ddf918625a1b20d4c1f5cfc9e5c31dde518aa19841b49a4cf5ef36d93812c68c58d1b691a93dedb4d23da3f4d66f731c57b9580901cba93174b110217c7e0b5ea101080d3ff790ab268b72a1c2ab983cba2b1af93e7ec689762777c7543fb3ba5bc274058be73fca555b893c6d1ccbf0783ed18074755416b48596bc9efdde7fbcf06c39cb093b1980e00f19cedbc1eba761ba1c9436f3e2997805523958e8f7395c66a20414032116a4b48978ad16a354254b84cfee9c2808160f7959a30f88a24c272cc47b580765ea6093741c9f08d5b6a082ac3a527288421f753397bb684f255e2badda132b781f33c4130c18e7c3d8c020ade8aaee7ebe4fc2e39432ba4c5849266c0a99c70b3cc8bcf5b920825c5435a0c72763142ff8c683135ed9b4d57c2395119bbfc875648cc42bc3c263d984f1c713cd640894e1e4dbb75ac7141158fbf8d62b4296592ac951018da02cb72a4564506e45307ea98a9847b77194f4cae8c8d3e9c19853f4b0a5bda03a0bbf20d01302ed60e7578953d1f92a5c823e25856db68aa3580194692153b26c2ae48ce84ab96262344e180902c28591b158af298145391666b8818629288d8b7c7c17ad8ca5d55e0e61251a2c08ffba7c49a154880be9948328803fb3cfe995a6ef5f4ad0dc31d4ed2aa6c0616846b48067d96f4206c915c4dc7ae8df93e4ebe91df8828b1779fdf2e02d3f4b134d7cd5bc6ab8908404535dbfc33b35e5ce08e378a10d12ed06f7924963f66f584e31d85445925a101628717c1f66193509654a4dfe5b593c51fbb2efc881d47c508ba55aa229e5b52e2942b9224b149f702ebc2b90606c4877a1ad34d3f699a523b1f6935e66149963b89139b593efea9601333fd002ef1d58a5c27c98fa240c4aefdefa009d8106bc37e747c23c91ab881aa7b32d8e4af8a852539424ce4ad15130b091454f96c5ecc062e80d7e56908c4c703c237089e983a7569b69c7a9fbfc8e27fd0cbc94995c02401f18f35c8d2cd93b7785c1678c476938c0291023667d7ede091e78e1dffd79892cc7a742ae1ceff19bcbedac498aee1d1a3f32f6cf2b6ab0f58edd23cba3e36e553f15d60c1804d4fc5c456b1ddc23a748d9640e38b9e14c522ffc7950becf5d024d8766eabb5e6a4ccea423919fe406f6849a662dc8dc8d093c3cc364b43ca8693a1c0e7b9b083a725610ffa018a0336b6533adbfa5cabaacf673c21251afc2ba2c71353b2f5882efefff3321e06ca55fef59c24f70f8c1b2782867be614709cd6b0e79b896cad4762756291caf89bff85e15dce376a8a127aa35fdeeeb42c09f85b72b7c859e5fa6b30ffb173f2723e9e334c167862243e9b0345c3329a42f4840c94f2247d8c08c369a33d2cc64be8b3d19e761c538c29542494072554549bd52da8ed486ef4ea69d2e0016f6c645f08d02d49ae4913c4c62a27d0417ef9ba05c40c55569809cd5b967e5624e985a59c17e7c7a8c2f3110f9cd2cd1153fcd41bcdbb6022bea36c70adde442b787cc5244cdcfbac28fd71b963216ad2e22dfaff38e4d634a6f1f82f02ea89279cf5467220d40fc2e956f80578f8b5f12962f0d16e76014352e7a8fc18fba1b1975bbb747e2237f8759f5994dd881ba0e5f884da2cb4ddb8ffd9329066e6c91d9422d0d4ba12e81f4cd047f7942fecde41bbd62ba8d053493dd7d76efb48531f50a24af995f7b5242f775ca29129c81cf1347ab5a4be4b2a6e997659101788ace6b84e1db80ee1470b1467718075b288cfacfc44170141b5463bb5674cb4a7e9ed87005a4a4e83fc50e430e47ebb00e76cc5fbcaaa123414dd72b9f740b0ea328624447d69a271b0b8b3536b7275eb9ea7c9c2074d410d0fff74b796a5b6d82e30e7409d412f51901f6190761c17359c8dec1800153fd1d21b82d6e3087f6bce27781602c56ee70e05654d5b10192e8716884ac4f8e9938e9f013ec89745ba4fde4516654fbbb0a644b127d71f23cd572da700aa556294e731ebbdedd28ec9559a90710274b0adad8be50daeba07b8ef04ebf4e1645742098c9f68ddedfb6b08545202e556ac99e3b663cb26706407d305207d633b36b5d24f5414b4f2c214b9a06016b6f13d3c7b8f550ac773681b174706a8f28e9ca4d152f76a37829367baa7622220c2693d11fbfc2186f98fc9df701ed831f1f2256864038c70aa15422e9ab049e06f599418a3d4030304ece8dd87340f24b3f252933b72aa140efb0f47199a01c949c2c835380faba4de2375ba055d2d0eb0ad0ce0214747797e74cfc71690dfbc2143e41234c9c2e694824c0e7f0d9978293a58aded724c349787c92a159877d993ac893a000ddc5a814b6c9f4f0c4f1dd28f8fd1f4636ab77117ae867edcbec09c0392f3bd558a22c47332238559a9ad45bc6d05238a00e12d207d0cce63f01899654eb3b029bf286e45e3a49389e7ff5806a5a44525455c49c591263279f148a485d62fda4e6b39c49d5a00ea4ff1f02eb637e513cc7a24a1e52f7756c2a1d2e9cddc20c74a3c96c3722d2033c5c5bdb05d863a2db627c9b3fe268ad24ccd967583b417a004c642cb11b0aa6484188d07765b626eb6ac330b1c453c88125c1849464ba5de0cada711e8030f5fb887ea4cd684f74607bcf16229bcd0df00052108377bedd7ec0afabcbc30ec84e0c2395635a49a251d4d163856f13de6cd861ebb2a8508bb90e0c0cab08de65128fb526d1e516b21bdedac65225bdef1afa283d3e04fa7f603f2f448a2198ce81915df137642aca7d4e6ab52a6ad8c6b3c8ced7affb823bf644320d07f9141489f5cc8e6024a1b40926e2cd94cffb164ed58e15196e6a074642df6469331530866f2793c44d78fdb075c8ce74ac676a8f31e99032fbe65f9886ee5d838bed684ac8d75446ac89d498663029355e61159fc16bfd4f69eb8d32d96a280d5b57d1f415668dac37179b4570792774739db65e78c8d59f11b3f297289c667c92611f6deb8020afd3004ef3f8fa5d1ad5c699b14ff9f698630f3a38ddd17611bd8f7f6d5d12fa4295e79d6d839bf2135b80d5a941f88e34b20b4b49355e9e73a567bccc1791124892d14b1fc73bdcb1955a4a9a2bb843f216b398bdca0c3b0d54ea58ae24f34f9567961387b0dbf08564562aa53e5527f47a9d3a13502d1685d680153bf3d08c45bd40aab592693f3fa71346193e5c36b25cde188f7585bbfae84c03d8df79cc8b6472c9bf93d8b34270f687d5c57dec524a48101e3f117c3bf6f55862e0fd11e3c2894b53d060b1dea8835a6c2338b5099aff6572bb24712e9122a3cc5b639b8e78ac082f70f2eb1eae446b6ee2b760a96fc569d7d8de7c74d79f935b26adf9d47aeb6abc519279b658df532eae3986930a57170cf183252bc09d155a186d6e3bf322d7ad7e55015ad07d35f4488ea6bf76dca037667893fc5061378e9aa7389ae0552a116d6e4a628452ac981d931c96be4d515ce120fcc7da3474afe79093eba5adcb7c2f2292f12c98517d7dbda6f495d86a38887866086341ea25f0dd5d342fd815d3145e420b07173e0b3fc870b5ffc146fbb34adbc12de8d8a72d87bd85240b766d1a7169e0b0ab73c6e01545328335ffeca17c4ee47d87097c07078dc30e7b672a9de73f5747fc39fb348c4b065f5c3ea16c31568b68c9704494e4e220603e756f5665eedb042e1c63f5491c2d6f8f4921a909cd53e4a67c0adea29a9146f8022e3564ed5c1b1485e225620eea0bd100bcb4a1b2946a3628e736c0a32a85ec5d78898fb2d661e1e5d3fdac104562e63142d3ac1c9f990dfd5ccf110ce437e72d80239ea439d3df5adc306d144638a4eac205e40663db0ad44705069ba494b0e13eade574756225d621443a956ea309bc4b9eb483fc7e6f07456d760cdfbbeca5e1143fc4d49ef2b83acccaa8aab767375cdca2393315494aec77d1275034d2e5b254d8627400facaed0093502a9cc96264bb0f693b968767cafea69a305bd9c41589e9af277129f3dd8d9610cc685a242620828ba92a6ef68c9618a529c5c52fc32f3b515e06e8f4c20cc7ddb61b60feda8848ce73f4ea65401c5557384a05a17364e310e057c4ab5e3b2a2dadb1e7841a92032c558591cf03a938a07a879d460b2fd9fe6267fbed81220fd86e67b245b3c0e10776cf9a0166194da3c069fb905053d6cd307306f20b645e0445f3cd7d2356dc1aeceeeb5eb0a8217ed0861939586df0836194a438d3aa0b9a2bd82cb0341c1eeeed0f24ca59e1071fa3015098d8b300be10012623c5cb61c5ce7de9e2850ef050d1b7480c9616eb429d497db78727dd5e2e32a2e1abccf4fe4cc37679eec86b2b615324f0f3c11716ec6a64b644b8071d183a3c0ebc08313b4e834664c797203630a84df6330ba89d1f98a0ad3f20246c41069e3afbca789788e56705bcaf22de1425bc55b7582ded9fad8dde4c0467a938d81796300c0b290bbbc15c8c3bc76b2ec7bb318667a84c2358cf90079b8e33057e7dbf010a523e74dd12eb49c4c186d52a69aa3f1d2d01a85eb86941eaaf8a47f0db74cd1f9de4f5c5675e813255d8c6ea6f28a37d648cd17c3bd692e3e3f7ff13214bafce658dea2ca6823fcefc5a09f338d105a5694352a9723e0af0a09a67eb41e77e9f9de19c30c9b0eb29d31c166a6b723abaa46467adef1d08661b414d3e595b3a8f321e26950c1a0ffd361091fac9aca0fb8815e64859b9fe9c6be9d5c9794e14d3e946af5e4558abb66d9dbd5150f96ee5ee190c69c14a422298b0d376d4f65bea99904ab0b5a6453bc1059d51e822f04bed9a536cc487dc0e05aa6d190e44781a44aa5b7e7827114ed294f3f533f417c43c9bc088c0423c3db8b6980742a8691928c1f4678512f7564f809ac00924d68109e71fe538505ccd2ca338090a25fcc451110f0c26b5b29c64c66f863885a1466545292182683725c4e680d26b2192e643841c460ef41470c57cbdc375cb0c4b246ea908ea9f05204627248fe85700a5bd26e3c352fb7a4238f4fbd7d91d98c21b8d04e2d5b0774508da44b2598b1abb34bf9deb584c30bdce8621648fd78e1743d44b6e1e1d962d55b0e196aa60010eed84ad1680c7b656a1e54149a212454287019c9682833a810784219b882606c19b01d6ee7247dffa27b2e24dcb61931e213cc2109f14a15839c2ca651f05d90837565b2d3ad51cfbc7d0dff6980f1347fe4e271e4b9dec2c754bb096d875cb20d261bc973b4e34f709288940a56dac16a8f3bdcb8d76af75164e6743c9b16c02146c6f1eb1726365b87f3c3857655cd24df287ed30ce2488a26cc94cf6aebed5a03e8d2286dc0c12a9b8a130d8150ece22e83e438ae1c9e2986f3a48c9811c7c90d1d044af9be5931d0d8a908b35bb73f52fad1ddb6c52ca416316e37afd03712bd1d276ca673e302b8052f95f5be7711b24c6ab508e8302a340be8f867312facd1beed97ecd227bdf8a950c96d186fd499af0a1539145545b9bd64a9245e79052f458c4e50a354db9575245003a7d1708faba23ed2638c0a95020921e25451908a544f27ea8d90bc8e2b3901d26361e5f19d2910cc1d755c5942081d8952c03c52fb205561c9a496a387f21aa990c102abdc324f68ee90db31839ce9b1c648a5c71405408bdaa8e01973fac1260b83b0cb41609249c7405bf38ed298a8453aeb832dfcb5a8c4bbc2920441a8983474837889b6852c53846126ea2d9f118a8d3193198f81bb1506c9fa0dcc8c8e35d275719f51f7c496aee8d9b984b57658eae2cead5668820b22b2cca3c2b465fbb96c14d01d3c162c6212ad72512b0948ba5e080ab9d6b5b3504572b204a822af702cc6caf3cba6c66857dbddeaaeb24b513e692161a5f34c453d297e9f2384690a5e5e557cae15aaa682b6f96008138ce33fd2199be1602b5a1681b68d41ffb082d7080b4fd284d40a263e6f12aa2d9ebc68a5e052b294cbdde465ef09dc9f3d2395a56dd0c7ac410a011204ebc39b7a0cf170830ec47ca71e1a4aa052da792beebc406409a4d4368fb5967df0315863739115e2e40c70aeea1251c356503de6689c71e5afff1047f35a2f43f69b9d567a10e268c823604fcd114d8738bf4c73d77913e2d8606490736320ca46c4e9294bb7cd9e58e57aaeceed341975d20a6c0fc4e5ce3e5b6c8e819b270ca0927e6391a32af35edc57808d78b66dcac651dc2b362028a3c4829b08709b53864b947812b31f24159c22e1484e356e593e0389cd24854c9d62907a42b3e9ac7c756df9a37d454f4b7a3fd115059c331429fddbbff5c97ab3e2522e279dd7cb98b4b6645e148c00f0597572dcaa238752d1442060fed4bc0717aad3c4d827427e3e1367dc4227a96e30ba9e8c3a8c14d274481f53bc42e691dbaf7894d47fb935e8b1df66a8883af11b75ac3c8aeb8bcbbe370834f8b429c6b46e435e02cc433b808dcfbea94810f6855ba2a115d5df1063329aa9e185d415bb6a7d4505fdb99c17926ad6b62c34a9a44acdc4e96d92038d344b942c79e5910152845513751006e84f41680f1b117f2ab1b4ed645d87a22e23af38541795f83caaeff3ffe13a660fe0c52718ca749dd391c535c8d91c26ef6cbf25ec6859a206297b35ec4ad0df2a2441c620a17fbf3954cf3e85cf0ca08278f9148e346a8272afb7dc0007264b04ad2831284ab5354737274c0f5dd43716025ea3a23024e8352ab87f573518482e4238ea4374239f4469ffbd43a3a0c2e9080064696cf2630eaa1e28b2aff46f0f54a7471ff0011d5b9bc793547390ea0b151010f7c431406ab9827785ae08cf020c69842f717379d48d52a0037e429b0920e55e3986eafca981550c3702b2b00f94692e3c424b470830e2b605c5c8df6af2a5bb010913d652e41b8bcc0b7833ed78fff9a3bdc5def1e67f2c42305901d618d6ca8e2b37d294e1013b210dd3524bd7a5a46f23d3115c9251a374261283323ea9feaa2efe2fb236f6d456f58b0a457a30f44f315cb14bf15bcbdd5f7290013d93d567a98ddf6a8b6da7c8697b945d5a505ec73591f1bf2498565b72e2749f29048098d2a0587267e6ca1964da4ca2e12b335fb6e450c900a039ba13e840505f20d0ba6fdf15d3de68a0ca7eda4ab3eeb68e54ed8aea77eef6d11050f1f8c8c8bf6854feb12826eb8bcea883935982bca67a0613523d50b5abf478a0f4d8c0250b9db7309f386f3d9eb97603b30489ee09c227f1884e2206800b32e2f0d9873c4d174d3ef2cf8060f804bfbc30ed275a23435671374e6cc0baab7dc2f691dea91eb00a1749dbca79b977e2901255729c290033004c60dd40c33d6af0653de9599e685c8279a1c5daf98fc8b8a247810d7c9e16c1fb4483665295f4595fa1890d1f19f017e435c88a096560fdd2637b21287f8d99b71d8d9dd92bec783504e0c8d95a295fb747421dd0415c7bf31141cca9c4dc0a181c0f26959d22b72d61015cdeb67f13cb04392253ac4f1816be3be594c179490d83e751a4b9777b8691bcb54862ea136882fb94d5cbdfb91007e23cfca6588837eef1f80c160c9b1f39e32457ad22da01d53ca3b070fef7e826e4555469c363f5dac53f872267892a3dce321294eacc774c716c94232a0cd1d1b8cfa66cd01164999cf77e4ac78c04f6656148165be414ec47e36bd12e1d02ae53b5474ea442160897bc016b43b37b05d6216bec102cf9567911a3a4954f5aa341aeb68922837739476271df530f6578d20d45a10142b1fe73a20de617dbfbd2ca2d38d47c00d086d94abc94306a402e0eacefe46005568462c3f36b00d89ee0e2a8015e123f359a0cfe74d3aa86b3e05764cb1b9fd4834c4071efde5365aa6e8a59f36b35fdf8af9755c6396e3426c6f82c7b38a0fd7d6ae6e751c8963d7f0a62f5c3d39161e818aa0092301fbb4630146d142df03cdd05cbc415294872a4baf7bb192ff9da1489ba5610d68bf741cd08b6e1877e92f0d55adcf154de87693fa7e8890cd882be6f671a518ee728dce23b9c53083b43bc6215de89f5b2a0302fc38cc511c32fafce8e5e242150373eb9cfa80d902efb6bf1d47ad8049b747a363311bcd901ba23f57003f218df5a2701197fc1f8a82fcf3ad44c838715b96caabb4db622999c9a8a8759fda9de730f3fa34f944f7a0c5a560d754ec1206aec9c152b7bf686fc049d3a21999a97dd453ec59713e0ab53da4c886c3a159467aa289b8afce50a178239ea9f8e0e367c480b3e8e7f9cbe300c8c41c218eb99657cf5c2a160b13e31cab595bcf72c24d6f7b81f04cea81aba7e2c864024a9a9d51ec417c34c7abb3b5cfb560f255b19c87282aee5603a00248f0e8fac3265e7f0e3670c3d4027d769b2d66a951a5d95aeba82f651b46e229e9700f80f22ae373accb1867211cd097682cb2945d71e4b99408dec0817353519986524c8b92099db1e0a5c6c478ccd7a50a4cad7644c09b3fd97987cc2555db7af54c23bd987d850a3724694d440b75f5fc08c9f60a01622a054abf5df01e2b18141ed33e112d2f96a20d750b0983e7bcaf0a134377de2b3630bee6fe0a9a9f72f1a47df0a04a7a359ed83307646e4b4c3c87b2a50e0f5c48604ec97716ffd721e02e4d43a307e58abb6cffa49142eb0942368d55b9a9fef4fc25b2f0899f2345cfcdf16099d16211da01c9ceaf918214dc373a8843d3131bc0a07de0da4fc182aa1589cbefcd17dc27490dc2b315b71510eca8338e881c80282e210adf8178b51d41534177ca2f21311c5ea897b7af72c12722fac44d1bdf69537f423687f8eea1f4f8e97bbadccf415d154675a9d74190ca458b947840b0d426a9d1124fd86bd6ecd8b0b40668af8f8b16c9de2ac0c1961fb619c6f242114448ed97b42dfa5d2ecc35cc37933466b61675e9c4044086c0547f45876f97e2de8caa415c3fcb9c8a08a6c56a96b4bedfb873a7135e3de1728fa01a93d3dc9c7234041a7ce28d5da1de510a813c6740a26da5145018809bc95198957950c8738a32f22723240098c8946ae6304471db82f5eee3fcfbf73afb03f24eb437dfa485cda744ce095e8ed73cc7835625ff748714fc97674dbdfa371de2e2b29e465f636aae2990d8c67b9ca513b53985948fa953c81524c4a50fdf26139f4024b190f2d150034161af60ff473837eda01e885d20605a3df18b73716dd1edfc8322a5f8f922e8a54725fd4c3cb7105c28700ce28dcae6a504a3a1681468297e3bc63750cecc45a1a1a5227ab05751f091dd9e16585664b54a9f57f59c77e5f0d2551809cfd47e36e21733faafd6e64ff1884e979d3947b77cbebc2a2fc8fc5a21cb8d42d0fc5e3d4ef19702f6dd3a1cb9a663322f6840d6fbc665c83d8f514f1063c907db295343d1c7760ad5a0e9fce0a42d2793af99f6455f9b9191bf664380daf8b193dbf32cae0b650f8d798212c768b2131a7c00ec8b191d7e1b3987623402a5ecc349e19e8e8e2c820a0c95c147260053fd8bfe898369a62eb67ceb1013087d0cd7e7e294045a549586995a22f251de784b236ad762fc0d21e95acec6b53427df3dfbb0af5fec4d3abde636705e74eb8bf6968a83a97cc0831ebfcebc015125cd0354b5d3102a31cffd0ed7b4ab6457d0244ab7ecf3ba9fd010fb93f117e6a38cb1eef204d67c53bf647cda216e9e98b3cc75e95141527133b475725f102675fd0c5ddbf7262ab34a9df8dbda73cffdb6f810df0d3d8ff39b55038b06ca5abf5e015aa5212ae61d5a81af5e69ffe06992170ed63e53cef37c233dea14ec706ca918185d6b2a286a0271c455c0953180d442863107732f509c161d0136237f5d9525e2424539e099a21787749537dffc58013b4a682467ea30265f3cfa90a9ee90bb5e3a8a00c6001d878bee77c68eaa230e23c5c9872d1fc6f6a9d08c1b9ab75b318e5beba07354b4597844f453e2856d46ed3ac56e45619c5ee6eda3047ad1e4ba8b080bd5c5ded643a0f48c771ff9153f01ecbbd3b910bb02f4d926cf8491538ee30a3f5bd83e47d743e264c2b4eadb15b9acde371aec8de4ba21fc9453546f8c75671868e88defb1b35ee2f22975022767f3d42589f34d8b396812448cfdb0a5e0f85a794b2b3032f51c6eca1d20653a5f7aa7b07ef8141ae49811822b92039480a6bef2e6b4ec8194e972537e0f98dacc8c727d88bf015b3211ef964c7ad279bab0e1a9e8d138e88e094758908dde012fda6dc8242e68106cd114905d43340abf4edf62d9e4869885f4084f15e5901e0f4502ec7a77812c98d77610c6975686ce698b5d2473118bb5f9285918776f2201e005f59837fb4323bb5f6d240a6ebda725c353d8d9fd95015b76438554553e64247388ac14aeded0cac459f815b180c24b18ecba4173af20586c469d8efd00f296d5afb7bb3f5fa9d28451d68cdae6b9d8f10e1d2fe7996d31b46f2b70c9cc776e8047a04b190047a373001f56e4caa82b885e371d179d8c1cc1b9f2e86b1033fae4b75d8c4da7272053b74b8a2f282ab0a40e283f995fddd31c9478f062f66458cea0c64214c20d84054ad187ac1475ee18fc1c5746148c7c39002ef593aa9d0cd9ef4c66f35c092b7de553f320529dc0ebab24b4289102c4abe72a93c22cfaa8bac393ec175ed1970ce35bc183831a3e90511e913d1f71dffc21fa1c253542ccd9b63a56877b5d39c82f5a7609fcba203859833f5e493afa44d8a99c3c345a1aa32bc9e10a9ab451b11422c06786840aa2947fa3ef14b186974a2ef22cf890a6e8323530e4532f6a24f35d9ce1882d0be4031099852cee517050b88c1c000d855ab0a1aeed2e87b80b4273db821860cf76aa5c4a84d4e10412985af88da4f74a2ed9e00f5893d407130ee15860e2499f3b869b2faa9c3d598bb8b0ca4f76cc3424acb2ad5a880c7ecf758016ce3fb4872d3f3aea6baeee0d2c38172dfdbd20a4bd89272a2b988f41f9fb9df3310deccef1118aa360d0dacfc4b49bb883dad728b457f6f0f6c20bed49dd8134fce1614d8cfb61275abfdd21b40b498b57d41214fac97c828fe3b0da3e97a0141c1528e1867bd96f4c41b32c2d0f5ba7482fd1631d3f55abc89af39267cab564d855344b074cc177b3d70ac28cf02d7a755e3ea8f8d2e29ac316b1057959219b23d873ec42fc3d1f0444662bf8be169834ba08e64fe3bb9fd3ee44ad404cd895481e6f0df6c5785254cdc51540dba577b4806e04e730ac8a08718cbbbbcc748e8437dfb322beeb84cb4a1503cdddace31e68ddaf1b34f98f13bce0eec9987cd30f72ea1b57e1fb328d01b7077720a9001ea791c7a3539905c8ea36b0e2e7c0ed14a86113931d7a1df6984c8e3ad8caf541a8ad899965b8628571a568371337fdb91e135a81f603ca36d0e07e4c7a83d51a01d712c011911cd8da809527c02c73cf60cae63aca0c16b7d76f7213648a37ce4eddba85df3ab7dbd23c711ffca8f398f501ea4604efd5d0138447e5f29dbee5906f8b4320fe4dd1c2cea92177cfaa98ae5dac4cfaea72220d1c52f4232a1b4c53bd23828a5044308b062029240d402b891d252dc259d902bc3fa717b4f062bb28773f2cf068ee4ebe4cda1942c48b004dc03f1156e93ee7bfc535dfefca93f8a1a95effc2d53f73f74fc37620c37323149f14a2263174cb491b283dcfb520423b702430e7cd044780ed98d94a757603809822c4aa5cdca268992d87936186d6385b11d6470765546d6c502e5e69cb85d8c3d9f25eb9e65950b1cac168c08d5b62dfdabaa00d11658920ce1408dbd260af1a1b7c57fa16609ef9f3051f4987b8958031e270bd3bc7da0130287d63d1f491a4bcfcb4faa4adcdf99e308b0a567f5f2b1eedb0369810c9ab16ef92502da979088dfa7b30d748afd8ff54c7d00c93c7ffab2bef185ee8a8b5912b6de46837418fab865f4bdd3bfd5c381ec60da4a0e0fad24c7572646be4471c2f876d3ec4c7f8cca0badfb5acd731d8194ebeb18e3c349af4b16b6cccd958b56b894d894e5f69d16adfc59cc76fbac56a0608d7ba046bf112ec2f13d3d33b4d439fdccc4b52bfa3a424c3a2c960b5a24206e436ec89ba0ab03520b0fbacba95c293086cd779c3148c182880b1496e1f3fd123a486ff1875d78caa8a00b19f913f0a1cd57dd0eb1b4dc8682aeb1e3d205928bae67b542f95afb725160fda264c43db0ffbc654a7b3416a02b73e5dac64bcc256b7607a54cf4f18eb3011df8ec21cd7cfd39c44dc0d7259b5a9052e113775b17631122d34b42822f5dc8f4467b217743ae2ef4f5fbbf7dac4a08fa66fecdda36787820e4120025bdea8c4c025f01a326568e864344d85dafe872012b931971d671d76fc1af8f1356eb46c8ecab85aa5bce88d6a48b7ba2b6e2b201fb3a60f05150835a310a926d9b3828885f550787e05be7076b435267ab1a66aaac5a3344f84d542037b31c7657d8f656b7fdced9977e8a9c2e84adbc6e2a862c2cac7150991f8874acf3e631bc257b63af9932ddca277a052658930a998180f910c57ced43e7462c3a78382b2e293072711444e0e7834c4132f17ddf8acf0b95a66c50b8c7594d44e3ae02cb1614d6b2f62103524f6cd4a28e63433292e0b01da926a1a55f631e104527e3483ec2c56515da9e8eda6867e72205cee6fdf8abc5f009362c5f1b28b2a80ae8dac9f4d5ee5faee2292aa787a940774f9cd0e35ac7c86808ed6aa39c5ae5f80f94fa7e76b9c27e4a560851da97fcf43a6ab742da17788d6758fba07d1ff59084dd4c60377036a6a56c485c9259ab2f2b6b6551ab70ed80b4fdfceb80ab94d7334ce737a5717db08df6f830b07189dce7937e49340f3b5fb401dc808223d3ade76b1e6dc4b907da7928fa11c34e69ff9adfc089acb76749fa71459be8487d52306ea5b8b55df97612c59fb2af1798bd9fb06e5cda474a4b56f82216d981e7abe1594b0bbaaa9cf1ad20843013104723c7d6061cbf6f13eaa60ed7b6313514ea927a8231876b37a3702d593343ce2aa59610fe037521a26af0d6362ef5d1df278c080458f105a59eedfdbdad63f4060642a5c509bc2887699cd0c37b8e5355d8a98af5567436dba45ce64680676a93da73302fc98cf52fe4027119d5e925a92740483f18211a774ee5bf448c28c67fb925b2798e5384edc3f36465c06776818b6b848c5cc38221e509408c56f420f715fcff307ffa658bd97ff9e79a12c84f3ce54f55b671160badbc8ef92969d4f321da42f40d89edc0c5523388e896e908210059c3135c408dc6b4a3bae7018238714dbde17202520bb99f4a2e3bf7f603e4f1808e1f467c16d1ef09dd8c316fb3e22973875553519208df21b50ad6783ae8b43f8ba68a1cfbfd6e7e55301afe4f1dfbd7afa2d06d5fa21a150b792b7dfe9c310f08c86287321040e01944b9b191022fa3a13d3e3dd1be93c5ace06e2dab0b0dc5f27c21ec55d3a31f2385336bf144f5f1119441562a1c0169fc14c9015e822f18c83fd115ce5708cb8b27c86683eaa5555bc862309f9ac642689d98769a1bea82ccedc28fc5d0ab17951a7adc8f26cb67b844ad6cfd812abb58b85ffbdecc4578fd62ec5dbee5ef2be873a03a58be4a35677a008995bc3848a38d924c508b9f716badaa6445ff3ddb3ed5892156065a9d056edb860dadc60d77a68029e268cf18ec8e2acbdb6dc0d145c351fe8b682b158e477e5a87175ed984e8f2f96c95058fa996e895d6e026df9af519c0df22e3dc2f63225ce53350f76626c94e82463dc86de9f1ccb1f0690ddb44194e68bce4fdb4fdfdb28b0fba2ccd7fce063b0cdb395a9dec6788f7b5b2626f62e4f3d2c7a8dc0e37cffed0e7d3c3965824186c269e5999aba2c1f42327576605ceaae1e0739bf358f2bbbe163368d0f57b75585857e964cbf8636e38e2c47d429049cf01e322e2ced248cf9f143ecdaa8ac770d86cc800508b3f688b754ccbfe9a5602b180f1572b6715442f90b1ca85f141c3787ebd6a13eb327d9f566c836521f6a60e122846e97031a96599dfff2adaccb69ee035815c5229b021ffa2808ec81d74feaa95e7f39438349b54d5cc0dbe7c5fd18130f1c03098fb673325c9f0eaae83fdc23693241bca2bebd275cde0f1cb5cbf01602f0dc34411cab5d604e63932bcea543825b79d4bf2d1bdfc327652a537813c00d2911549894ec7d0114612b89b3d5141852e6ec9b35c8639a50a9844c75969a20993154e8adf8cfca8bc96d7707070bf20173b3197af27f412e437c0cbda8fab9fa0a5200e5003be030ce497d42d4e1e0f904ed6d13e04856b1feaab40a1000433e5c0bfaccefe86d7d2bca756da85ae6317714cabfe0cf3481bc2807640bb15d61c59fa247a7b1d2ea19d28d3fdb251de806b06192126e06fdd3c7d9e89d3c5c9eaa01238c979370a86197f9fa6ff3d14c161248fc861d9004c76f5a685b951eace0115dbb6e133549b0373edc71a38fe2d37f611ff3641eb353ea71dbe7e74ffee8b0985baef656c99351b4490ff9c1e5fe1e299e934d62c22eb3380bf938796f895d2d574d5a3e1b0ec6e79f605020cab5c463301591196a81f9e7987ce21888f9a989308a382d10c2dcce88d02e8cb1d1300002b819b8950f9974379031e7f9370453ac7ea6cbb6517aef9e7f5d73d55dc6664795c7e7914ba9bd87061406b88b53cc3c117970202fdecd5f17bbf88a1174132aa282aba95f3f3a946470e1249d2a4af8ad2acd5b1a3b552d3dda1a49a5507ccf78e9220e14cb33d8681a3c1c4fbc1156db5df849ca469285f96a1691064d8d0cf67398b1274a128d140a6a8ba78dac2cf9e8c25ca4b94fb687de8661a578480011af0f4345570cc29753df6b368f2b708ef2f7f70c215d108d002102f42cc5f878449da28fcab4441bcee92b6a33bc9911cc90bbb6cb46a49d584c725a1900641c1be44420936a4a7228ffc5206a2283aaf7fef2da54c49ee263b3b03400328035a44ad736676787f1f3da53d746ae9f5f5e128cc3ba8aafa369c80c03843b22982796e4ee02df918adf08a7132c9e1bd8d9eba8451dc4f97780154d989b1feff9fc0cabbe762d64f922827d911d04cb3cd45326a660aefe4151f4f2437b81455431198c9649948732a2ab23cd6617590b83827272c93ed1b38e4d8845031e5527035adb726078ea766fbde2c52bfceefaca337ac3a2286b36d8defef900144ea290794141387c3cedc09485b42367074ce00558b5fd42261daf3a44d96de164583c1c1e412234ecb0c0b43189d003293849a32f2a1385ae83c1b408b2f3ea21874df65b1dfe99c5568b52e71a9648b18d532f1d510f36aa32ecb0d3c37c986d3928e1f166a2c8f74644349636beb08cbdf1cdde4061e4aceccc90f008f951e25b16e643007dfabf6eceeca60da438543a208a531eda19943abffb5aea85a0df7ff3eb4c8909d1abb64901674eade5361690f2d0331f5d429f9d5cda532ba88470218921a75b578eed85acf694ed7bb8c85f5b67798661d9afcff2bf1febffdfff59b1994339c18a310c3373a85cd49fbda86c8baab774e3f3d5903a63dd4c35a8d767376cf3a77ed7c6b5d8fbfb48702f388634dce282ec010adab49f964734201aba71b558e0e120fec02a9a9915e14ec4bb8e1caff2ebfb02e528fbba6baf5e6907e373532985555d8c6c97680ca1c0b291c174629846e44804c6d6e401c46356d625234393c544538efbeae7be58142c4012c38b587ea94a932656055486a766f9d2c4acba1dcfba8f6509ddfaac691cdd86f27480c0d92b3b919b917c6d21003b06aa89e45beb11e727866e741d00592878b9c1785139ab22c582ca371ec4e9048a692bf2adf4e8e192038cb1ba920275712cccfdcebf28ae1a0968f0d05ab18a231afedc14872ef7ffa39e06f745d37568c60d6bf213f8e9981b4fbf5ec62c0c2927169c4132f2992da968999a013560b245cd7ad35a6b4e26ea54df2bbfbfb8eaa01a241eb5c67e345eda1ba65db2ca820cb3efb52cfa3295cdd340d83f3213e77fdff155f257dbcef3a4132d59d8a3b7e9c334c7b28d1d892737c15ddbabbbbbbb7daddbfd5d9cf8c59ff857d615db77105cd12f2adb81b57324859777777675de3bdb5d257e6ca5fd8894e3d51950689d852104e2fa849ba10348c5b67adbeab78d7b226dc7a5d57c7a1e391eedcd557bdd21efaf5af77c64715924e5b15b88afe014017908bca05124a5aabaad3b5c6caf595bbc2ba6e65539a767777f7d653dd12cd9805297e53631ac493b8bed6c260da438543a23184f0e81ddc4f521273ef43ed770cd2155d2a7cb6da110306f7b583173ebe6c68500539f18b1ab2a520af2b20ad2956c7ede09f7f5d8714d31eaaf434b5cc228678e5fceeabfc9bb0ee62e535eafeb3ec516edbff2940f571a2ae40565dd9bce2c465f5f30f8a669fc53d9ddbd00b0e7328598a13494778a46a3c19bd4b1f604c5b6d3f8adcb55697c6b4871e914966f3f5b074ee35af3a6362f67271e08556f706f24a7be897fe0014a6f54fa664e79ef3ff3ffb346fab6abdc5d791fee91618f0dfdd4bfc9b42690f2d2a6dd07c4a51810082bf2042d28ca3e48eab204416c75d335503fc90f29df802d2a416d5148423b52347d1a80811570d6759d053520fa17fdecaafeb90a387214837c922f573edbdb5fec06cbece0f5b69ad9ba6c56731ee5dbd7739a8ddb97b9b4e00aca1e10143be990db15ca909690123c714645d77d6b266c51d00a82b3034a9232fb79b96229028219929a75048ce81500000f7288c31b0ffff113c44f7f6ffffdb176b393f8c0c0d857ab0fc8fa5af204480dc40e1a02d1ea3bb851375a29a385df2ffbfcb0b61067cf366585715031957138258e938ab9a8a632a828a424e242c261b9d23aca4248974d17a6f2270690ff5bd84700655549aa11a73494d3730863f68733dcc2164362658688cf7ee014c7b68cd8e16d1434805a7a1c377f7bf79d93730f070ab2a73ad9ba90a3c6a0595e7258286eebedbfbdd3f3b0caa81b3e9ee6e129521051434a847010468754c639a04134330629324ecc6d94d1b1ebe3ea4042d23421b22c1984124c682cb11b0db257966df216fa4e8b8da7ac841e06a62111735b11bc9e699c9d090d366eee8c713f6697d265c77675dd5d1e0329b9963b10da36e00b21c55315250f311032ba25652820b21e2ce8b0e1c62dab679f5f0e6cc2c5950d53a1dbaae295ef5e972f64634d215c4e2ad4e8e9ab1271eb9222c8e7b56dcb34e786930cf4d01be690f75a66d00847b15341be974aecb4f8633a4f3068e26826834cbd99295f6aede3a5f057355aefecf8fd4447cae6731397d2eebe9d67b2c519ab4a8bdad5472bbafc9afb8957fbd7779d76a1e0265c2a20b52e5efa7d3bd45c0bd689d3ede3dcdb487be4ead414f9ad6fb15d07509bd0aa0afea75557ad31eea1ca194f6297a5fc8eeee7e41677f07320092a7aaa69faf1b4f393c6383ae35b22f34a437070b71b6dfe6305f028e43a77372710d911b4d26799e3c5e57ab62da43959e4a584d6d36ef08ee589dd33118178dc525ee25ecaf38692f0207cef722725efef5d6198898757e3304962f606d6535969466e024fd019591a82431362a1d219ee0fe3fc884f7ffffffff1adedb865b6ae86641e7caa1b8184b251118d08ab52f16c7483331b2892e0c3e5ef8a8893b9ee08385fb9a643257fe3978c5b2862f3ec7e7013c748c4a6a2d4e98c346b036372c05ef793a4be374ef1c61da4387445d22c7a8c2a6a578015dd8e10e7bd59fdfbde797f65060cd8e10899e62eeb05755fffb0ca9acfe213d6c6d5a7e180ad2b2d648c2d21e5aa69f2e92b8949f0a90434b5c4d070a36bbbb22fe2fa01fa91d55cf5415e79f72a0e0ab2f21c629b06adcebfa0beeaddd6fe8fcf89f501d0378e2c6540d8e259cd50246480b9123905251314994c332e613cd3e8e17eb3ee33a3a9782a0799d4d37807a695bcccea868ffffff5925cb6604c1767457ae1633dfaf58f7207b92ffbeaefbea29b9e2ae36a9c91d27ea8e001247a1aaea8ec0e8912ae04a27450afa4baa3d54bbbbbb515add5b7331831a70c8785b31e6c403c4e238060a512d170a5a0d68c971d960febcf031992ccb3aab2bfed83be6943a43118363d45116611847516f50c59b211e5d1896c4346b77ef1a49b5876a479531c3ec4962d070112b63b2d7ccd20d4ed2f2078b1f15e182315706359480f3889035cc74e69b731272afaee71ea2f8ba6ff8ffff0d9881dd275d95746f9929ad81cc526b1ed710d8f37622a229ad85aad17eced9fd25a63dd47844269925dee6da6aa2957fac9ff7ff273fd464afbf8a036d6bb66d47da35bff344e704cb8de8c4fd4fd330a687b0a69ba63c2e1f667777cfdf3a8a4ed9f533dcf04009d1820595b882622111895a00177d95ffffdd0ca2faaf852649dbee4b39a17b053fe04d931e1632bc4e418a36a4685c30d245952d86b28c642796462dc2e4de2634cacc986744221d0d30953e4d3abcae64dc3031f42193fc2d6f065135d2e5bb49e15497c773796e8a0a4497524f2ae0922a660b8d7bebad9bb215f72438bfbc91c15dd266c72bbdf1e1cd7570ffff2d64da4393cce6fb1eb69cff17dcddfd82bbf39c05d235ce4c8ff18dfffffff62a23d178a0ac6e848c61ab354c58da43cb9e2060e27ec01a102d7658bdb3ce98c44c53eb12888a624a2e948edc3054cfd6eb787319029ed8e972c95975493e4f8ff1ba3ecbd21efa7c11cfb817d1f6fbdf1ab2aa05e7a641e777349e0eabcba689836eed98b39b0a2f41cd92c8d0587bd16307988d088ad8245919f1306ac328118ba1eda0aa416b5a819f2008e2d911b316e3e6b6ae28926a0fd5bba5d90f6567a54df0efbdb52efa4a7b6858d9f34351dcef031168f628d8b28fced1bd5977677732e815f0aae66ae74a08bfeebb5d4b6c770244ae10c0d2b52d3bc2adb36effc4ddb523754c43466a627c2f12a510ec4484a26a626b6371e6206e7c5ab3e9bafa34bdc5e7756f5bec36c9fd89f20fc2a53dd4f7122c21234cab8aa0c05b1629524165bb23b5bbef7d05a7b17c1aeb45630555766a7b6fad6992690f65365f675a081a38a7c0fd8483eec925b7b402357d84b189ba39db0dbaffffedff4b209703d413a2b8af593cefcaffffffbffbfff9bf7df69560403a19f4bafe206978ff1ff3477418541476041a2e713fab605a138b5b35e57c42b8a3206ec24c2b8c38282051ca15268458bce6cdc7cf12d88ed39b001c98fe4296690ff5fa0a1321a44c73c073d909eec9e7babbbbbbbb06c723989c706aa8689211e1e39826421374890bab41e4c0e662007a74d7badd201cc161134274d251866b64c1848125e96164f962f47cbcae34e0d21eea7bd1a046306b8da694f6d0a7a9a5d71709b430a7600a65efadf52b4c7be890683c22932d2fd3773252992e1739f4287922e4a5f8a32ca8a7050c09644d1b6415989010cc75c43cc98f97656f250550b9019f5231be4c1460b5e6248a05a91d015990a2c821db60261494240deeadb1587cadb86f56457f8e690f456a0d7e9229599f51057e92c692624b46445809a90290abb3ac57cea80770e7f6748b7bfbe514d7ffcd30ea0691fda8d40ffa7a60086a01131968041cc250204af33cb0ad0114000713d054c07c442c443c441286c481f018100c02836130180c0006c1c04038200646458abddb037445463e454e49a74005356039b7b71c6aaec0bd44033f8d99a58d22df00cc39999ec1f56c67d5af1cf17ac0e2ef7e7fff9284ec3576d1d6a00fe51c11e458c86a9b8422bcd41a7e4346e30a30262d6c54f24c523819e9846c014a9ac55377787a8963d52bac968f7834550b84f3a4e9ef135f5d5ac1524630d7829eceb1595440a034becf6b5b7626cbaca655f551c41b898510804e27c0729a14bd7ee3bbb34e244454588ee3196192e9d7cc0f2adbd3e969eb2a24da2dd90fa8196b9398ede44bd5a279102295a2386d4c88267f183e604f0a4c93b4cc994033be764944d633455f06e2a33cacc3939b46a616ed1bdb86fba4fb698d77e33da5331ddffd935459d31512a09471928895120e5e878018bbb78f8ab3da3ccd6658c753d25091be971b40e42a0d9023b111addaedd04dee8004f0cd5c5e82d665dc918b4b0495642bc9ebbb0ac40b2667e57df7f22dac7f78a33dac8b7b325d5568f2a32044e9331893c8bbb3a54d084abd2fd372f3e3d342d31f497afc4ca98b5f986dd4130d2822b9138c0b643902f69716282ad3f18a555feae014398a171e7a9fead629b8f3f700f1d56e69687550fc60f715a07b980f4d2597167e98a3d0c701c947b0852569085392ef7d2aabe3d443184f312c1c278175f3e517eb0aa3027808cf7fc1821808dd479088e14e067a4865814a19304ae96949ae875f02b91167f88a03db261aceaf6b8a51d12fd5659019074f8acd0bfe62eca2f5b9435dde13e82e817201795891e62ab81a09afcd214998691a5a371b3d5523470563a9db23fc00e5ab3d3f40eb2a9a6c803afc9a8c0c399867fe797ea1a19259a5daad6b4ed51ac9d3a051fee5544d9a551a664ba8d84fbb3f217f1ce2b541a39e55efa680c867e498713d47bc6ac8a09b5a592a980635b64e3febdabde819eb5cd18f879f68987b534f2f2542c7efe9bc1b8f31e31a39b64855d1d0911d53e34ac1862804a9609d31f8417e949883fae58160e601cadbddbbbbad0e5903ebd264ed98dcd069482d57b3af5a3fc8978e3566768f9a66b4796ef718ea1117dd6e7a17ce3016f0d26d0dc7a9473d3eaaa0d225389994f2f315ca2a5e7da19b538c12ce835c0f2c76a7be630a01bc382db035821b219808ec54183417973014666005413c1e420cecd4bab244bf799a7912005cefb0b2324a36b5caaef2f7535206c87606da9dd69c29015216d7b447cec725978856e535ffe3e7aaf401fae7dc3974f3114b3a5304cbab1000e28e94fc6b2daaea186e51f9b168e073d5af45df40205bd074bb08a30b946a0b73f940675cb83f753b30cc4c91e0f0caa4dfbed12c0667e7b55cc6182844959c02f3648fb3f5f0fef6077efa9dbeb2f1c74ab9ca81134589a309596a200277946131ba3dc71cc1df74d953cca529008c20d1757614fccfa421c530c0d22bf71e74b5c0a400ce6b81d70dd3882635b823063b4b794b7d6860e443e2160a0a45590e543da7fa36b08efa5ab87ff770be433ddcf824191d173ef49fd0af0d1f99fa2e1efb840bb2dec99f629e08dbd5dd2710fb1d8e46b331d4bfa1784281af461c9979617e264a4a8829d61f2b57500cb721bcdf274bb80727822dd9e760713990ae4897461d28df53844b122d1c42153a86ceb6902639a5f7270b315808ec537884b3b3f57d6a4ae2e84b43dda211904772ce03eda8b1250ddd29335c2599c209f4f9d6c1110a3d6df341c2bdd8ef3f4c3876e75dd1c69b3f0fcb06e5439cbe04a278027d0279b6f92c02f70877fcbe2d8fec5d3344ee240433c19d0a632552b2bc4736b7021a131bf963a2ece177f7485619728ff0aeb08ac3853b170b7c3cd9a1ba729e4801c92754dca6e39a90eb99d121380f013f39de8592a40e35632b4b247bb17682e163d78308a4177d8be1e99da2fc9d880c8a3142e9abce9a6b7f4c509a7ca6f0da2db67a09f7897abe63a4706ace9a6b95fca1ad6531f74ae5af42f7e51f1565cf9509c2b07fb237e70797d9e827576c58bc9f4a57b7d19ccd7f60cc3898cb9474e65fb46fb0fab129895bf65687487c1b8699d4f9e1b21353c7bd3e09124c6ffcbe1747a69b920d35122b5429e48ab179166820438dc4f4af925e7e828c366a5de4a0fd68158754c56e386da672b62c5f36e48813e45dd8014ed0650d20ffea2d087e1b44bd7e7ae106ec6334026d055ee683d6330917053fe5d2e452d4d8e0ea418c0de8d14a317b42d34066e04532c55a0c7c4236388b9dd73a1aad186262f9f1dddb97779c2a0d95a3882f5015410791d926ac66c57782626df290880e6d9d3a63dbed2c5d1ecc31f6179d77cd17e7addddea51c7fe97de71af6a5c95388d87f2fe8c89a484b2d33b75dd8b406a9260b9bdb4c2f557d0518a2d889ed49e481c5f9749744677a887f505e54a8544914b7e68e7056d893e163d599ceb5fbc66e04d165dad4d417bfdb2267c9f5fd4116b8638b85634a30d692c33fb11500670b1d002db20579df0f9c24405ae3559820e9cd244dd492be27d04572f26c27a5af6a6f862e7273d68be3fcd0a90c10a2e0b2c1bf946285d495b27889bc1a568ed23b8f72d0e4ad125aaba51158e7df8abdde3924330f051a239f0ab212750af6c18642d864d7a256d88e504c826a93bde42f94b00e408ba11579c22ad29a6e8b8e68ac2331b134286e15602a829bd80e457016b393e811f3b6107fedf561003bb6466824466f8b7ccc6a11db86fe147f7cd6c417dc4a192cd0d3524389f6216770d149875b3c1f28f55bc75dccc811932742687938946540c87cf28b93fc31043afcd4e5826b224f4e6aeee03960415da27d093ea2fadc7210a3b29a7531ac407bd0c3a3bf034cbd0f70125afa5779f450db4603edb8962a721a5d241e47afe57f2190f0b8380a8828c838e02151aac8627ba844bc3984a9e50a018feadd4df8c58dd9bd00c889249d143562761e75f809d4ecff0deaed613a9e490e53b635fcf08d78872e201b7bb31114583a8bb06fd2657a83619fcea667f24535b3f5484fa8ddb4c9a60a5c7b8e0b8e8c8d7197d2a19534b60a24cd98e2da7e8f4e1ebf20101588283821a24c3ec87ea0a248cd08ba680701db044c73b38db3963c268ec900f313f3e278d76e9753afa603731aead16feef90f741cbc12e2a8e917ae9d7f171f0bc242cb7a1e499d3430d9fb06ac56040cf45141ce392cb2006ba6bf50e83296af0aa0484af1ac097b58d36fce275bca56d1edca8771b8f3e8b0334b8a24e9b41c88a2812d6cbf59e64be2e1ac715496ccc0584027cb090bcdd098caf51f1dafc009311c9798f890a6e70c2be68207913cc374e33059b33abab8125c4c0e42a3bae8698901f0d8873d258a647b87ee1ee95ac462263c8546ac118afff22fabbb45adbc40a209ba54dea7c2c20476fb5c122e451508792fdf329049e692a1a78cd8263819a7e5fcb2b029864524e72dd9ebe64df6217f82f5039abba3ebe2b1a3daf709f2ba0c2d03548f060e04bb83c647f7085df36ff537baac19c8527dcde42341cccbd5ac39c4ee75cd30906b3b5210bb46ee24983307948f0f8740961434dbd1993699ec91c09250b790ce1190e4b7ecb2b70370fd214c1002dcf4770f3b538f04787187c889d47bafaee64cf1125f00f56b142567a0cd46b147b96efeed55d705ebfb32434cdf9c34ddc6bd6b4e4b915c263330e8e18bbc329e3a92d09697301fb1cbdecbca218817b831614a0750e7ec24b63b896d5075324c5637a52dd48106347302131adaeacdbc1af7b9e4cb18612b61644d84ff21d69e850b2dc928970ac12938d918fe4190c543e521ac471834eafbf52f13e462339076fa0bb7e2c7a02bdf09e4a051d74c3efaa2f3198627d457cb0776411d3ff4195c0675e52608b229f010ec3de05a823b528dabeac9d1f8847e9730f53b0eb8984c62cb87c5a75862adda5af4a3b10fe1252700524aad3a81b07aa77b777a89a60fea64b71c1c1c352fc86e460cc5dad84868b01b67d87a7a93045bf05881170e0c40c9ade2fea946922e4805985d0a2575891552c143e17942eae148865a9ab453a1e468733af3ce18bb479241de32ccc269ca65c2a3a9edfbb58625fa96b96acb81d8d466d7a8629754e3e1e74f5ba36742ccbcd82ad646e2db8f8aa361bb070142b012bf1f0dae05377af030bf317f4eb211f2a6001845c3a9c686e524a0d08bff729f4ea4411c6b88bc03b113dbd3bbc5f647962f107ad6ba74ae0b0739a09e8511436cbda2f63300fd34c841a98175627f382d8e498e21dc93863ff4236241e808dba69276662fac875311eb56360f06558baecd6b1a5595473fbe97162deb6649c2e78ff85d43faeabe52d4cb2aecef524d9b2e0e42a61949a27b13c390e89e624c3431026626ddc19643b943102fa6ac68795cfa42fc91c830c238b0faa9324d15f839cc0bb6ffa9b07570780ceb7eb8d75e7275aae5c5ce3ced92bb1aadc4791d0e68f34d5675b9d97e0758050c0fb6e4f2a1fa60538dbb2ca68d13a48904ab4e553d3e97417987b15a584cfd9e0953a8dbbdc8d24b506db3f6747309fed3fb3369c513c4c8497c0d8d42a962d32341eb3b770c0b7ee4ec058d18fab1bddf070311f36c177ab7c192c327279bb31e2052898db59224833d34da841271c7052d0c5df451fd7e8d2687922bcbe80e7b4796af44f9747ae0c574bc84ad41e0c01da317052c4107538b1b3723619e05b133593b1a81d7cb7896929b34e433cd78ff646fd4799408d11da0f454d20d6bea33688cec67d243f49649357a8ac4d63962a20a31a9244e9e1f5c6b184a1327e7bc8aa3f8eb515340a71ad3a0c22a65b12f6057ca9eb51a3c532842b2dd27ac336e0c9860f6a67f1f0bee04124d9809cad2229f70a659344940eba6d5dd96e9135af6ffbc77c619cab275a4124c42ba06da65d8d833b22a736e8486e1fcb3868ed8900fb9cb4bce294b3c0a57a2d1a40fa19ad4c09360c853f19b01f2948356a66dccf27bd39097aff10bd905922acd4b9cfd0088a38959c1883ccc55cddde11a8a1e2f12563466faf86659a71302ed77026eb09a59552a737f0db6520599570eed1e216812daa6dcfd8b2d5aa6de0245d7b720365f3a9d8a4911faba48b57ee119320c227e4fe174c30c32ded1421187669e2e5cc31f68fde47091e18f83d4c645e99a65be3508502738995ec0bd48d12b74fd02461a34348c5eefa0c4f4fd6c2e18ad9779d3b70757edcfd6b8759b37f779002437d5cb448c97328a5f451a89eeaa9df4ef3c11ecee83e41493861b761e490fe85a01b2f86b6fb59192feb1306c0a28bbdcff0ee690d0043402ecbfb8d43eb275425ee0003728a8c533b638bafbb90644689a2bc7be7fc672d9be8c9a837fa718e02f9cb33da94dff1fd593bb1dc6f3f20b8210ba995c57185c85f51942c7c36dfad3e437ce44200b94a12f98f0a2ac7f1b31cf0da239025108c90ed9edac8388afbfb476876680674554a3c3c39a3f50039555a58e9efd6b211fc24126a007f6464356932597f460e98cc36ac589934a7b6a943905dc5454d035e154c92c147fb5102da7ecb7362708f5df0e48580e9242d09958a1f0c859cbdd1334a558bc897a32da528de8c6d152bf2205085908a631292b8a7af833d4c515b4f44330b4244109f016b235c5fd680a973f7fcc93631ceca547ef2b97fcdf5285c58f56705970aeaf5c5c15e86009eeaa9c803ef1853d549dff01ceb9c4d309bdd08bf408ba6e7f8a839f3a390d2aef42c5d3d8322f6a509b651190c02a9c980c155487b0c44460955b8bac3bd0b84d8c513f07d3bd32b0a6289d843a2e30cd107dbfa4b27ad408fd799d5b91acfc8e6e623d91848186f4e6950dcdbd416f9a8e1720aaa5147b8cd0a9f89df778cb4d5fe6016b52d5202a65e215bcb06ce8bbd97a37d7aaa0de0d7787782be09d825b688338b864752c25ce4d0bd25324562c7ffe16f639a95a57cf3bf116c21fa55647614c4b7c43750b470a703ddaf9b1c1811192d000b46ccda463438afb50f42d3f500b530826819d0a615d640f31221a1e1bd2d9634e5b65f9e76c23f7bbe91f1052162b5d99684f624f2c5ed2960cb984db1512af1a5ecfd0c09edd65cfc4c465a2f6f66a6b54c0931e7a7494dd38a11d5980c748bfeb811a52daecb428c55c514af6b077595606047ed91e3b5a4b8a7b877a56cd7f6ca42a23c332651e0d23b6d5bfa52d02ab29b7748f12bb906b84fbd838f8886680c8a37a65329937e282e0d579bc2497f1379973e8140790fe0cf851cbc8215951cee65a5fcba07e78b9d51fa116aa2d5e9ab9193ac91cc820d6ece5aba2e3a88be4dea3eb946f7192ca2290968f1713c14127a0875ef25fec4e022e8a0486455a76d1eb34b165163b70e06214b0a2921c7a2ebb3658b250ecde6925571676eeaa677fe7b7cd76732e4123f96c11dda1417c00726c1b5820ed369b9ab139e5da311bda12e674d4d770446f8981c075d8bd0f3683dc11f774ae3d7b05da9eacda508c7a9018456370d3b720fc747b9c9f240d013ccf0673c069d4b5435b80fd19b38993629c4b317cf9ec646d4233e1544fb61ac27e1afb480e49015d582f7a28ce2375c3fb5bedc4dd37d49b9e8a0c0a6596e367f55ef3d6d3b6db64356bc4dc72caecd818b1bfae88bd5479843d0edefee57a7a02f008aa9e52a33fc35e7da55bd63e3f69a316a9f4bf045e9f0ae8f4561bf62b092ed6cc45a865e37d138c2066b02a39d46452c9f427252c3a11e468bac40aad904d4fc16861b1d16819ee00982af1a908254bfde207484b36373b4cd5875e8a4f44b19ff43588ccbdf2cdc501593c5e345bf1dc2ff9c06bad4b6126d84b4644bdfe7c5681ecd9849d5e1c622f4e3896adbfca8059775738473f9a4469712e2591b4317a9779abebb2b00ce1b115e95e2e15c9eb358865cd5714cc865976da2ae65d7f60c512c8979b28784c0b8e3db51c54a4d99c5208fba38bc5143494f4c4a938c2ec803b69ecd4175352f84195f4834bc3fedb1eac8465432fef9b81fb6bb4ef595963923325500dd9778e198f8a60c9b0a227c5438a984b3e86e6fe264e61b7624b16bc271752bcd47174697087a45fbf022295c5e0e47a9a4de00b6015b2634158448b9bf654eaa5a7be4c7d4a58948df56b4abfa587c8f1ada13d1e6a1e5ca283b77d3fb17e908f33270efbb3e6af92b5c0ba4b23216a31c93c13dc428774baa4c4fafdddde8f4e1b74c1e9390e51b5bb6bcaebae572ccc8194a9bf8e8b1157c6a5982a213013ee88a3e35818a0d8328382f9e027ed5055c796327dd9394063c800992de8d079ecc87a1f4803cc81cbca208e1722ac4215b342588bec590c26d1af69c5ad95924bfc984fa5ef5155f61ab35581999ab2bd2990a613644f521a10db1bd474c1250271d24b03213bfb9b6f292d69c6673866bf626cd3038cbbc1225c84a483d411232a0a96dd9508906120e7f453885503cc5099a275da0d13677c65ff77996e3edb34cadb238d897949deb187ba37535efaac5859e402b2cf33d246c991781f5f0f018dad1a1bf0f81c308e2b5ca7012c3faa98687462b7438f0f390544f5ffb98c468e9da589ce65020f9da20b681625875221ba0e35f84ffb1597fee82bef6a4c4e896fa5cfc04301456aa527a3c148fb640c11312ccf8c12daa5ab5f5b68f5586ac18c3e44517883d7fc9804edde6da6868cb1b4bff850f40b5c6d82c390b09a58c042bf4d99e1c5fa2c638ce05e64462f3ee92d57fb295567fa1a8bb632fd7b0fecc98d9ef8098dd270e818b3b07440ba336e88bbcc7ca4e298e9234ba25d235b6f8e9741ec479aa335b1d5385e99297f0e295f4c7af124bbe3ba007287a1b0efb28417766b60c038253918ff471c9506b3e325eb472d8356147bb3157788e93733e0439a685a0c651c9ab75864230cbdc79681eecaa6ebb7213075f0e6ca0c4e6f1f25c23950eed005a7c75796fc6b95e724c7c86488e8126c571e6cd9fb83bda56216df881b6d8944903482c47468196ee2e29ec5b6471822d1a60c33485d29e6d2f973ee123d43207d5c22609834d49c4bfaf99d0ceb726405744c3d24ba44f7277c413775b7603fedd02027c7e093ecd3241cec1461c905e1c415b32c3623b081ac5ed94be4f05856adae9ae6420a344466d2d86dc68bdad7035c6c79cef36feddc4c1b0dd76cf89bd640c549a5a11abe3e78f03eb514cd2fbf33e01c723a6a7ac6e85fac03731511029816da95084e317a83f51a3d963f7e41b68193e1f88440b3548febc471d0a00918cb843f0c05a161c050ca91d46673d35c6c47b267af0ddbdb1b875bb3e4e74bc2b2c5f4e46b0568be34f0ba840c228c0b8092648701a775ae401f71b54606276c79256f909d67035814adfd0e653c734c3f71c366ebf7aed9554f97672cc1e802b3ca4d4f81cac73570c715aabab04281c792e62ac711f1557c9d83063c2ca97e0fdbaa0007a3e82535c414eb8fda3894690211d344ccadc378264fcc2afdfd0b68e917a2125019ac277f435b0605f563668884f97fb1f9cb9462195cccb527633ad14ed12df57485d034d9e56685c572c6c455dd1824421ef336bdf459f07c9629d80885b44d141fbb62833d0ff290f57de19e583988a2ea07bd08de4411be1f364a19eac66419c3d717cac1ea594ead32f316bc498fe554f70f68cd1f974711248887f0dafebc11fed3d7fbf5390d6096215208cc0b70b291cf260436b92516284d43986d1001d1150728a7bcf0f8e5d2f511e93269b961ac730057a3e0da66a94741e2584472d2d55844678590ae0d7e3fb9cf62c7173356ab282fd025b4308654a995b1878e0d04db65f7d07b52adaf8781d0d84efc899111d9492f69bae4b8ba1acdb6d066c86471cf2ca8e30807956513942fccb484fbe4109dd4eaa4aa73a341e63c9964abf14b98835d2f50e04261d00bda59be60f92447c5eada5a414f6f6c63d31cf4dd250868b571813ed34c8feeffd1adbe040e49fea15d8c11b12a344f78bb4afbd10fd8102955e9f8322b0b961f61227db41db7e61b534e7c1b9c29a2f322dcfd6265e294cb1a18459d15993c61325f91756b9e8fb30bc9b3882c02e476be3b4f15c0306de864258b9d8b92e5511189bfbd5b741c0f64fe9982f05e22bab857f22dfff707a68a67759dde6de9f092915bc64685b19eb46ab7d40e81dfca604069174bb80e5b005249ca99b208c8cf7691c257281012b0e9890c7c90f6aac79ca818e4fc99983813929d2391cf9f3be9c8664c3a1992e37e23d47de5b2c2e450e3433ae4a0eccb1832b18fb985e5680c9f8bfeca5fa1276dae306a1292f7545d07a6167183adf65705b52ee81d3ee23b05de853a0190157a3721d5a78f0889f39ba064fc12c2cef57b972d0fcedde4129d018ad05c1ee4c40e25a4a4d2d7f8b946a0fdcba2a58f00aecd1a308b6ad454ac0cbeee792d40d6e21485444e314a13985e735d14ba8d9419d479b09edd4332039f91934c3842ad28634bc9a73b080286b0ec69b80853146481774acddba3a0529aeaf672ede15d852fa24562c7ea21b935557e3e5f3dde18eb4d08ab9f651de75bf8c17ac793cb31ccbd98fe488bf9c207daef8f3e7cf88e0f7d66fc930aec43788e0b58d282e2cd21f99f56ea8ddf38f47f9eedb04bc6341364d8321462e63bdb6efbe2c383d32919a42ebd73b22ecb7aea25a042add6d94a8b6af4d9d4675c8d6ea81cd326282a1db5a738e1d5c8588884749e544c034dd6f006d6172bf336f0e5863ad6720d44a447e5a95190afd3d05d2f17e3d1e629be3b40398bafad76e9f00a2831b344128b45609fc23813972e43ab5a9b26a6ce84abbe6627fff86e9bfd6e7983af54ae4f8d54c4cca48473e1bbc83a6ae6a47d9df01c20a63ff9b4b62be2031d378150396103d76226d90dec32bc8a1842884708731a233b18a817b0a4231e66471b60bc188f22ba84cfe74bfa49fcc6333d83337cf787b1325c1b55496737c66bb4631310bdaa213b8d35cc5c75f61a3929b7cfafdf724fb16453c6c64b30c0378802cb3691ef1b96fe69a561d10e192a22613069afcaae70d03712644248047ddd574fe74330bfe35ed0b8770b67d559f471b9cf7375c0cfa201c697212c1a9cacce0a5ca68e8499f5c4297ac3f98c30da769f7d0fc7a8187ef63437a2aa30b5788aaea3c308e9b33d8013f5c63fc00db46a577d333b14493e818d2291e5ef9870da327c6e33fb7791d1f5a7f14b015b7bcda1008dc0150d61e0496bc88920a609254a5dcde66e96903b80d939da2587b213d29d5bd8f4264a7427e2c1d94db6302597c67ddd3919ccc488be38ed6820445da0f68cde53a7a614b09eef09e8438d4a6726cc3e4b081241392f7f82334086075071700e64db05a61daac9c117af7bdc7c957ac9e18e8ccb40078e5e9457777237613b527a1c7130bb6e1805c8d82ae405cf81c1c265f79243c116590f422b1e4e418f1f6b7f53c4b774bfb07dd3537c4f5498361999cf83e316dc3ff8bdc0adedcd39818eb7ef626b0d5d9f270c9b10dc9d05b8d2ad4285838dd682c08cf334f11f58a8e9d73d65eff7c0525024a05d1ff66ec6d4367f4a5012e607bcdd78c92d29a41f89e1c52ecfa75397b0508aa38d8b58df4a90cdc9f47024480e93f7c94581df101481e78702417a8009750ce4640d06c8334fca12dda1ee5092bdf55629a5e1f1f13c81970a39c51f894e0ffbe5e238860c1f194944eec1bd7706de8e3e36c62843a1978459c5caf756dcda4b831953d41eba32b97ca866fb3595cd4ea22ba51eec95b28ba867582a2d0d55bfa3a03d03b44f4e316ae72757f0264597de5151851972885512e75f8b199ddf0d7bddd4134dd16a4319d7f48ecc179acafb217972f7d07e941cf83fa212f9079ec419af69c7f2cd8e6db1165a1934abaea7b516c3ed5c341042aa8c4aeb9c275b8c6240aeb6ae73bd4e3b2afd24a3574464438b0f8a98bb5e45345e04ff6a9f6cce8da0b15cfa7fbede82d63f49ab33e8f591a80cc76d0927c8328c062b916cbf1e2b745c8bfb1b9b289a623443abc96b8ab8a9e97a2377b2d99464e4729ec7438f036fd136fa0ed6d629552aabc58f5fbf4d09b4de427b0656a4390fd1b08d48f6b1d796a5b6548a0c69e91e6e0474961f6b3c52162313215ca305fbdabe584118b44c2519fe271137d70e7d9b75b02d29424222cca140db110ef54ec2d77e0d1fd25c55eee35fa2cdad1c571aab8a428b6f398f5feb897b060f96626840c0a342a82e26f3ca1630afcd4aa6f93cec8236a3197f8a4b35b9a6f35099a52a1d881e758234a3831f4f44df01d949abd449e5a4a629d6b08ccd5a695430ab55b90813bf222e1bfedf0c27d7b740de9dd2c42deb1f3a8a518d33010dcb82b4920f2f8ae54737f66885c4594ebc8a03c0631a0a7110a1a3e9f8a47195014c0d028bd4a7c8d6ac0e746c308ac2862d45536b4a785c0b3f1bae9cea1318cc602a456f610713330e8cb7969d4fb840c75f564c3b4ec86c5a36b3948226a938df57e0989f8210e4f5bc46395920582399354a18336e5b80ad5d55b7ad8e42829caf47ba85eeccad1de2172e805f68011f4f329991981aa915b0fa5e6454e4445205f0b14694fdb8161311448aaf079f632132f3e771d0d20d54375972860424498f766ba87826904efce97aad1c451614b04fd3ae072bcd20c8f031865f3e0b75b874639634083c00658a46dc389fbeb76976ed140dcd9cbf1f62095d6a06a4a30056a5dcc9f40c4e4ae10df47167922035f82da8ff9a48f8ddf5a44a71b291938e7ca2777f764468ab85a325567fa414c776b3d630b4a70c82f893519be0347203f8f462c3734cd77453851c3ab8ef3712560309bea2a6000d797bfa0bb9930bb846297dcfa269e118078aa5bd58e92dc2a70f7a34820f66118ef34f35e70ff56fec1adf549602a4a1d52441160cfe271549165ed2def853114a7096321d664ffb90ec690ad396c7215c49868772e874023d6321c861de46f1b58b742f16d4712884e6b813d702a143b2927cc0d94b7a7f7d08a94506b9885ec2590d9c3320d25097f1966ff1835f8e9f58361b94770504379829b59e1b9198885c28cab692a34d221c8811bcdb655f703c933070fdcb5ce3098e1fa480a4a7f6b0fc5041254bb9bf5ad550abedccfd01017157b5c2fed9e915b05ce8003322ed2952a84ff2f2c1b36f6d8d4ff957916474d56548b0086b5046274ef0ed6804f623a31429acc97e17f665bdab5fb0058fab60338644ff35a5398a2b4c1350746f103bfee23f04d514b78fd2f5b8a116f72553eaf0d26f1be7912ca213542b6af11782004fe93ce406a8b32dc1a23394583bd68e12a6facc731105be53b6c2574f1b6fd34ae532b12515d81402adb1517c77b31abb129091f59772bac6848ea981999d3a88b902d0ad64d542bc7e688a7b071c520c633374927ca056a0f6bd400832dc80011ae650335560ce2975fdd38be83255f29056d0a768456801d88d020fe8f24721dc2042811abcc99b1ba0719514a6157f71414d3c32f1c9afb8817ff0d695498f0c380bfefa481f0bec70079da7077b1813c5bdb79432a52d9bec18031e0327032abbdcb3d3b9c6ce2b0bbd35a0396303c63c409e208f9067c843e429ba49bcadb37e93ecdfbeebf8d9b0eecd95a6be29546bc0d5a635e89261c139fd518d51ed245d4886b812e2901dbb6e82be2d8df726e2c46faad57feebdc0178d2d0c140b60c04d258bf804d1ebde5244f54d8bc70e52489d8118d543e6d9b36602c96aa594800247359c3a78881985f6d65663cb17f76fd13bfb3bca17517dd3e211f91fbe96ff7ae7cc7266921fc9ff3fcb767023bae7d6aaffcab5ed6ba30beb5fa0f6b248d4d82cbba978bdac77efbe6bbde986594306891e1bc82d2a9736a15b8c113e5804f95f59d657f53ee5fbbcded77c5f5a071fb4c525b3eb944652e2ebcedace81287e538d91431a93068c493ac6e8a435ce52a5a8dcdd5d19c01154df54388cc1416439b141260001ef74777777777713f79d23ae608fdb550a272917ca6aacd06cd09029703da2efe2de2c8b8d68459e494338434cdcacc754c94b9af8f9a9fde8b0ec9612d2f6e28e1fbb13f60175aa8a4b5baa6f9ac6d43a96d5d95d678ff83002e9b86182e715b514206fbd191551762565a67e28eb710af9c38e7727aeab3a51d79dead7a48ba88647268de8331e0dba1ce47553e4860ba8110ebf2314f423469109245a1c7e85d2629159bd03d6ced6a053ceea3b88026e574697c85cb8113d9570a2e8052199192ba9f5696ab895b4b6fbab654b01047067972f2996afede57ff98281faff5fe4d12347d149a86c45023c7a0805e56001448613cf0f8a91c9ea4ea9394fe5ec94a3704e7e7ff796c5a6f1b56cbb7fa3d0ee7b0b15d5373d2297ba8310b30588b2ebc48902f363babb6bb07466d46adb3a02646d3a0b52ee5ce9f89c9d0d8d5171d9f019abc1d4d64e0915f986593f36b1163e0cbcb5e89dfdfd84b754df94e97cfe06bce8ffd6593d422b896a9db1f63696757535a1da508da856cc2cd875d8f1ffefdfffabf9aa1f80e48e08160c47161bd821b4a4e5308547d212bbf8e7cfbe36f54d65b44f97a3d2c3d2c10d508bcb1289bc4beeddbaf3c10d013617c0719024d47a80dd1024ebeeee2c2efab0702f9e691a43e9059a29232d154fab114bd98ca0c35a738804844894c112ac9a5b490832da4844f120eea869a52759121a51b02c210bdc7366d9b6a2faa647e492e9ecd0f6740bb2bbbb67dd12e1ad299477d4e17036926757381f3f3e52a04ef40437049528c09db5c219befcbb4759eebafbffffff163765ecf94e2df25bb6b90c2c9c273c9413931a48b25e147d46224348ac5e0481863181ba90989ca4ba19555168385e62ce2305945a3d367a443070b844a0e544a43809c12b2161888ea21b215a4864ea5c6bf2583b932a266db961281981946155de40c91041cf4c475591d65812e9a8a5c554c626e61402e346a745efecef3b0ca9be69d852873175614e95b0274b4b8fd579d552b18318404093fa3d5b88c259c1c17b663b86c0c8466825c15de988b1384bf091edb9caa8adbbffff1c4606e0ce5299355ffe356456c3dab2adb4bb135d160a7914a00a7f2d94cd8b6f2ba5cc56baf2fd8e3d1409dd9dc6af0aba3788a6a8d69e7442ba7ab7375792faa64e554afd81cbabc5fd4f72ceee46a6faa6ce278c31caebc130fdb6d6bac79128bc4a5a18999464b9b8e13295985096c42945511b1294ce46138f8e1930c88f0fc015425940e98878ead13eb118b142c9f8b52205c123c61841441dfe864077d735717f0be93d8b7bca49b2a2eedc63b17daeace8e74b1ae5420eeeb9b6ad2a3c0273adce59749e15b4a4c19dc50afabdfceb76effe16b2baff9507cbc29c05dd4bfeffbfa46dcf86dc5dddd73c8d4bf77e73e237d51f18e97122868e26d18783275ffcedb9a3928ea030620423e2e5d05351a0e3e71dce2aa956636445ac172475ff7fe1cbff3f01717e9c2bb5a2a649656fedee1ac7bbd7ffeb5e05635c891ef54d81b2072568e4ecba91eb164ddcfcd3b9bacf1f2dbabbeeebff5fd1b5b8673f7252dfb44a79e4a572d46469c1ff3b27750e4d4c5c0a98a621dd2b11a6e752f6d3c49d9d8afabdfc37a04b2184d5d75a510b236e1cbe8d05589aef6b9883c3afc812fa68a281dffd11e781e7dc3a6bfd1eade23df79a8c3662675081fc7f9682b52920ba01138165a36644064984b682700405b150f1f60188a25843d70e7165cc6bac399636061d6b6bcab4b8b0ceae3b9b9689df5463fc5865d9a84f7dd31ccd41b4471740c7370e5e86e4ba8802802553fb710176648511039ea28e75de5b27811e77ebbfc7cbaddbb6ede530f9ae8a8c04b1315ac976bcb8d38e278846d00e9d19bcdb76ffefc710a5e664f5d2b02eeb58f6d9ffffd7f94f9cf84db50ccdb26351fca61a3f056195b5b93689548afc1c5df84581949858e0f9c9695162c8ad85de13f6f16de093a383695babc8bead535514b5a40e6a4eaed35b2c2de7dcb6df3ec0c46faa1dd74a10e5e16ad94bbda5df127029b8245c1a9af86029131f7c2c3b80d5db5d9615a214e225a49955dcdd5719cfb664b8257e53edeecf84a3e08451b305b005b219632708d9e1420aa888144f7dae4d2848404834304ea634782f9e02d554df340dfa01aa4dc6f7212ae733e816c011492631e23c840b2d8598424ea1a7505406eff3ebbc6165d9136927a027da7eff7ae70d3b6f370832df5d9caeea0514484236debecc96d8a24864c621e22a764497145122c72643a0b5ed7fea7e98e74ff1ed86f7ce71e2748026981a3906c4548f8e8e8e9e49d0dcc9f3690b2c39c3f6a329ac821d643b8e66f86a82c0e8fc7c19fb80380766c7994380afafafafaf2f2c1601206a1364b6209b906db85955b3aa7e1bba49d4ec4c75b3acd03de79cdb635bd45104e0c092d11699f8244673f09c99c65c055ba011853d290159ab59993656e495108112a833376851d0975293ae88df543fbbb66deb2ad58fd7b3af45287153e673ae85c9e0f05a4daea1e00b2fe8285bc188903922300436f6cd6aed6ef633039a05b3ca66751a854effffffffbf7eb1d4061963b3c4489a368cb461b278efa8faa63c0f46f4fe99e4ec8704103423acf56b44890830a07eb4a0c4be66349150239b1fb099f507d6d60e03237ccd08a3d13104cd49c3f26707e6b9b8944401a561de7fbbfbd74a32a23c8bf6521a299952aca25f289245d113500e6f34e40a38e60405b5fa60db699dfcffae2cc3ef207b6fad8f4cf54d9dcf0fc728aff741eae7167c1d11be057529cdca7ab02f6ee440d434718c5428b288326e29c8b4f22948b5b7b77587fb31c5103edd946688780440c2c5d80d1bb435b0aadd153d66fdafb43fbfbf37d92011d09a657d08d5371d128b47e432c60713bb23a13b78a9060dea9a9a23fac4bb771ccba6a852df54a9bd744d159814692c2d2b1b26e237d5d96dda552db5a8d0353624844c86eae62944001411498f9a37b39eb3e8aef5cc517d53e492e97cc2cc44617abc2128354510a0f1cfb2412ff54d9b690f1384fe6f9c8b64dcf53fb0a761383eb55ae26755825832b3a6bac4d3f5ffffd3d420d5deb3e8187b710c40afeade4480ea9b06853a86c850eb920c74dcceda6bfe3f71adb596537dd32708ad28aff7038250067b4c8dd5a8f1c0094212f274d44832a8f56871f63384c435625812838895d393c2d5d35321140ef9e970f81ca7d50b25d04d4d10997d93a2d36044a2a6c246ec69559282eb896887ac8c262da90babc0cd25559ca01429691b8cf123c7d004d58b154d4494072b8aa85488a0715a61d0eeeede7e8e15d7c1980c301d376b5234ce8848dc58da39fe0071312d385d77df53960d06d537150e891e048bdfa2b72ec3d009aff489c7f090305698bf0dea736f2d75a4eac51d05a733b91c56d13be3c72cfb3452df34a9c3d3e955b2ceae7d489126678588a3e60a2444d4f52006c5892a02e3aab97defbf2212d4ff1e62650819dcedd2ab242f68f29333695bfdffff4277ad6a9db3c6381c39322bea4e50908a49c6995df5ffb78fb3eeb056004d76399cd35aeff4a86f0a44c328c9a9cac38e72068e0955839ed075f3bb7b8e82a8afaaf6fc0464d93df5f47b716fc0dddd1bc8ff8edb3aaa6f8a5c3235882da7d61a9875a53567805440397d7435526ac49c647ea8669aa6f49aeebd1454df5438e4608998e344d2291f9ba1202a2e188756a5bea93206cdeb3194b85e2dad6c7ed78d7aebac4f3e892278b23ed62cfbc3a9bee98fa7fe11d5a9b03b34bb7361bed6c92af54d955ecdb40e49a8bb6480606a88dbaabaa1291ae3c4d3e5ac0c29d33711f8cbfd96ad3b7be5d4f3f2afb1563a7b37bb2a2e78ef1b1aea9b1a81b8495af1585101a7f140c392c30d7164a83541f54d85430d53436499c1739523d6e55c33b3d9799b9e1d0a29b87a2fbab2623c9faa8732e29193b85639934a562ce4a5be69330d46086a410811672a5b3f411958889869001cafe282539f4f7dd31c1de3eb5159211a05cd811391b0a8f48f596b62809a01e318680418c460180ae338ad310714000612cc54ac7058284450381408c5a1f018140c80826130280c048501c0402812c3aa24d6dc6d46832107aca3b78216cb7d4a95cdb90620609f4dc5270fd0cea11ae4c26c2ca93c997d0195a6725b766916e3d3ab58649ff79b1ca72d0888fff5043e542ba9bc66263b14f6a92ed9eafd24d0a65b728785546e545be6c44f731869030bbd2f127422fb8216a7269f559cd5435bc981d7646e7543968d1e0d1c13353aa259b90a1d0e74c66be858cd48a116d3dd5c1d7cdf0a1e8fcc1175d15fd91adbc1babdd0f1e569207e04591ac5a70f1fc3afa8dc0fc53cc4b2154305cad07088936cca791aaba07d086e11650056245755b9daee36a15276ec9a77a0b36b68fcda4b1b85deeddf8eed8352558b4381d1a6835372148c67b65f9b70ec69072afe8f9e28dcb7a5e8012ebde0da900dd37f1280552f66403b2a98bb300d52603b145b594c261de142d284e5e1b764a5e6680b3db40dffeac7b3fb3c7daec5ebbffe21f99b4a8f8428378a2f7b39a1d613631c4e603ac8be44c3e4c0489934593782ac9ccfe295b7f6eadca07dec65fe2c0f19f8658af5195a48810d47c94725bbb53b2677fa1ccbc1d28b71b114057e16bc04cf644e3bf2dc87a8e4daf3cf7fe85538c4fd738485aad3c341a6354b7e1882d35e88fe059dad57fae6d626eb438d50d9ae3fac67ef735b48a9d322b0c1a473edb5517630a485e103cd92836510f7424904d2107000c1548466af77af199fc239fd1862480a18898033c37a97d7a40fe34f481fd6bfad871f8c3fa33b2a2e55069a95d29304edce68f9e10f388e5ec7431595f674086e21afae56e2cf45ed79887b659a0a246b78df4c06d967de768d14b2082b70d1016d2aaf4e5e913de7a548fb993d6b5f21085127a9aea198008a2062f8ab20483c91370b86c0c54abff24f2e24b91f81ff7d5d6427302adbbfd781c1fd0ee91f9caeb0cfc15375e52b894e3c0c045180ccdab92666198a4a9cb9dcb80a024d5da13c8ce17fe3d64de83e698ae2915bc3d896be858f6d1d3de12cafc2de0076cb039856d609449af2f53a7c5c8a202aa3407cd7f1d3d063d23eede101ea90911b85948a250d71f1d37d37d160413c34c3fd55d647876fe5807ccc93f819c87edd44b026dfab3397dc696802e8fcfd87d4c74b2dcdeaa21e26f4c9f13af9fe9fc7db72169fa6bd17af4f65991d692baf853f7e181a2da94f1a9da57cb7dee02ada5b7477d859f69b4d9b88403ce9b98dfe0dc4b480d8b2ff87bdfb8d82dc6975b1951aa26ebc257d94a64d2da7e93fc5b519ca7101b9c6ed89e2a7e45cbba453aa6ca626e1e965f73099d7652967faf426c5b1188a0b802dd471ac978c1a956b48900b0e931a33c1316e543ac2d285cd79885c7dc15bb5a03aa5857237d2970a79b6554d867cc3af3d80330f60337dc58cf0110961ff82dec2fd41f350136cfc63b9fbfc07d01c245ea5f380d71219b3228b654724898648fba33a4bf723fe4e94ef8d1344198f5fb2ebfe888b2f943e25483a32c039a154c3d4e710d905c9d638dcf1f33c80b46db2504e56cd0fddce2018c19734dedbabcf851a604ffcf7c8b2974114155d0fde225df2404f49e67f0e4b0b5992892ac4cee2f48e6175557f5d9629f70435b9bd1234e6ca8e863dc685bfc1a03be5d4138abf3b6b74267c946fc0503fdd79c464272a3d9570a812a13a719c02b6c81a5c3220703cf0b5171a0e3c1e30f2b607fcb7a67c2a3e814bf6f746f0f6d4b9e5b34b821f4cd4cf54f0ba4ce86482aa8d52913baaf28351981bf65e49e191cf1d2911f7c661b5d8efd8b0092003197bc0e9c49582515cce653a5c35e6ec2da331880eae359a341af85bc93cb2d379b691e6adbfe0978268466caf99c0709996485625c59d44c5c10f630bd724128ad5dda7fb901f51463aae91a68fc841c56913394a71eac55df5a1142dd17d659b8d43a4779a4f956fa2d043d1558b9b979361a632167a4a976abd9324075ef1289eb0b07b884c5b4a07ddc7487940ab6cf56aa003063692ead09e9aa5d19656b29fbf9a88b34c58c4f410f93f6c1c68ccd129f0b32dad1c5c60b0140191d4f77d22a894a7c566c2bf71c1bf249203343a981acdff05153272d6c987529d9296c03fa93c30f666db7ead6f240b6bc4455dc7ffcac1143c3ace5b79fdb0189178048a0e32ae860a694c827a959502c04df6f1288ded04190c09c5002c19030927f013bb066790e4ddca1a3cc786ee2a611502947aaa1cf4f8483e2d2f0140a650eda85cd4b27f01734a9106c65ea7144fb6c2fb02e939ec7b3043c923b760305bf8aaeb50e3644deccd591c7ab5753b68508fc8823588de26b946acab8a078d5a9683dbde60218b824e390bfe10a34c7698e2dff5219665da83ae11eb843434a54f8efa386942ffebac1efe0990f9821536eee850461b352f8a88b9834aaee9744b56af794f1b5fac31a83300ab65d2e06529df3dec36e8e74af11543dc194e473afa9827d35c0fd0c7b833ce4621fce6d4c9c06a9e5b793ea6a7322f68d8ed751ce92ac60fb48ef092411c40246294ac82846470cee6283625db774cfcafc90c322adaf291e10e4b5946e9a4d908a06d2273b83979e05ed13a4309c19aeb30fc081e10601018f7237ee41a854f85ec8236e1cb141fa65eb57124745d7a8e2d9823d3bc3f99423a54dc89601ddc5419f6dd34b45918ed420a93db11adaaff2be6361dffeb4cdfacb1dd89388c9d966a1396584cb9d6033c78ce3345aacded3243b90be875be3575ce4b80409d69cf528f3412a72e6ce568821ceeb57ea54cb263c8f5f7b0a99c4929eae055468556a23ab2049ca58cbc260b37fbfe887fe17c0e8c11f5bab8435e7771a42a0b1e5ae7fd3451f1e28ce15f9c288845d6d31ccc83672c6919b5caeb28e0f9536fcebacce1e0af75fa4bcb6cf2455d356b92fb9ba6616b5197c69660ca0477ba4022707069b577c3a676691504b8f7b70423977b53ab50b59488d51830144b642c3510c203595798ab93163382af2357baab2040391f65ee8c231f0d79cca1c346aea34dd363a6ae13c924d0416ee6cc9f8c2233d7badfe68268d4a0ec612b5042c7c48dcae42b42e9d0254094ccf49a096d49c764f6ed5e114561156622d9b379ef04cc9e5c10d36c21e6fb8357b5377bd6d0b225324fc48ec5a1d24a21d8da8cb3dc150dac93140ad51313a2437a1c8a875200a95d213f603822d05296fd05c0451829619ea501571ec5d9ca3ace2db32070cf0963e924e5de0d85e25d34699e40119e7ba05cfcfe7764a88d1c8765ddf1b1774f9948e1690766199bc629838b7fc6424216cc9ffb7b4551302ce583732db7d96a50af4074d4097a13509c46a8b7d70f65e9e45092ca116223a631ac529acfe65e3244f1ee1d8af5918d771d9d5aec3e40a66ad8652a033e69c82a0cef4e4a5c312e6b190504245434a05620442c0acadd62a840c1b156005d004200d586de6dcc45c015fe93b3a103602268e702a610fba4d646772da94fc8883d1bbc2469c67a60f0dc1bdcc8c76cdcbe906352f82c786d22f6116237dbe110a185fab6c67e0f4516231af0b680cd45d3f51058c5af41da0aba6d46777dd51169532d284937a6e4c77bd08d3ab340ba9db9f77288dcd39d7037be6c4fe78b814734ddc219523a81f2879a079dad1b8ecb21a756034a78d6af3ad928a31e32a31768ac76c04d35662fb00607d80da11da14ad23bbae80d2ce1ae00ea008cce50c783ad8961312d6c3d37cb54ae58eb09b95d910ffd4bad65272a8f9a370a8dfc5a54b08385e743600dcc7351c29a99f8b4bf6df4c9022815e06ce5019600f3745315c0b8e636fbe3c9fb42badd1457d434e9198ee65854029c04913061d4352ea8496d5027ec5b6812a49a79ed7807756bc1ce34e3a9ecb05801592bd31684bf65b1f68b5928f9effb70202a69b8ce12a5b8cf00dda73894c79c2687ed6a46b1d86f7af34032eaa0463356a551e7e9414dc03e518f1d834d07707bb84fedd988e6318b2c4752a2832fcb2baf34cb580d0db93ce10341cb7ab8fa04e6ffddaa7e56865d08065411b9cec5f505cc7e4181a9d13d5248bebd69b915dedeb9328900f623d405a3cadaec91f8091a94c9b4c1df44ce24dfa2f5bc0cb04720bb851f476b15aa3dce7a26495ce97b92feadee71710dd934e87a8028246262ae048b4ea915093bf1d32b28fbffee6d22ed304b929a71172033e91174865363af857a2c3da6797773cde6d0c016b2b121a4044975f366456329e64fa0f42862012185796b88015a8efaee263c9a294aa8d3f2bfb02a84256a14d00b630c1f970157062fd25f0c306367302ad72cf23ed369afdb47b3ab84d31fe11182064c704ac6ff1ea8c6dd8a59a875417a229a26c04364874e2d43d182bb890ff228445744929e6e130c82eac9c75ca2264308a9d016684ddc42b576eb240f8910965bf9fb93f0c463a659b71f5047c4de2c08fa5c825206798bc1ee8b2cc4dcac2b4411c659144b251cd5d33a068a23a8a2fe9499a463716e5c63e2632934db92468997cc889ab3a654bf8f5ba60d4f75eab2efab217954bcd1655dab97ff27a766f1e3c1713fdf56da815e0b9f0ab5d333bbce3618db2efb903d1c45408dc224c661c4dc02e33550c08cc33874db7f414f5cd6b1849ce8aa0532d59c4a1d505065d49d288c1a35568018c48641062ef83a330d88fe2395b6d84520a6fcd3fd1a219af48a4958733fafa86d38fbfd1f1e8dc264141e383d099193bd7955831684f09fdfaa7238104af4928a9b662399386aab456ac07700dee183b226e061caf5d55ea9172ab9f95fbb361cd1f942170aab3e0688970c9da84debd541150e531e0ca6a1e5aad2d62bfd81c8d26a7813c7df475122a17d3acfc3daf786331881377366fcc089209e9749dae2ec3b14149201763de61a02b2ce0cc11ae31f8548511d50085067826039c2f064c596245bb7281f7a14debf4aa073247e5d4d3b85e02c23694ea941a7a2bfe15aab971043917bccd32511c6dacee0abe7cac15f873e3052f1d9703c07a850ef10a69055b6311a0aa0790131d175f86c4a8e429e1d0b016c468ccf62a7cd2469d3d08d620d8b665278450e2e2e09d88a17044c9843ad2033a11df79f297c826a66ccaf094978a70ae55ae4e2d17464d50c576fe525946862f9a557a25f55109f329e3e9912093629f5a5aa957f6b24b68c266f60cbbce95f0c77dd13aff2226cf6c7d2452dbe8099084daa72eb0312fa5974ed66509b7e8b4abf0475dc6df8ab77795bc14980356e21b906e27326b4c80a960dd6fd79ae31c9c65da4d3f04f3a14d74cb35fe111b6bdd1a7dd0a69b9a44ddf4205e6bade10061877e1068a1805cacef1ee4e5820ff47ea91401a73ae4e30511a05baf27060d684a15cd063cc18ee11860103dff60654ebb7a6d2b3b8071984876fdecb046bfa19b860465ab588b06cd1f9f106098c7636425d334adf5331212be99002c591c91c17b8fa70065f10d3b166744be68732322b6b0f91a757d11cfa306fada00c004eae8b7f37c624a21f5f7d9bf7378ee281f6c1393c9f8dbe401ed94c5209043de754d5735eb1dbfa5de99dd7c3dac6b2c2b37f48bc0fefb730b3e4762fe95af8963035b5f0c3a85ca0cbbad6c604f264ff3a2b3e180cd15d5c8f10fdc0c65ddec60048f9dc74578fbdad541d8e265e2a5e9a6f0a32073a941ed93670b8360ba10ac31ba28a922353f5f80398d30970f352a84c25a4b772ac2353e66cd42406fdacac45b4155cb3f8c47271e9dfa8819f454c0b29d1d8d8771f085ddf545f5ab1ea0be6514cd48acdc4bb230762d525194a1e0a3d72ef05c9b76a1b072550bb3bda682fcab6c80ab9a510d14af40e1ea9b86f7b45f180f36c4064f35bd1f387d07e6af5765204196e0356927ed1bf0a46a6aad26b515d1fe1c1e2b409e01952359292c3dca5398d297ac840a8798c44bd068fd876ee51bb4b58dc8d889e52242ea6c4b885654556c615a81955621e4fa3f224a19a2c0467850e686485ccc0c25222db0874164e26ea1124d871b07d97a04bfc84beda5344ed6dafd33285202b90d5150dd2d00029470b5cd79482e5a5ba5ebba858f39232a3f4d03072919076b0061b09b4eec2de536918ea8441f31adce79b878b822b83ca06bc7c0cac8469c8de5ab6c58859ae6e7f5119bc55e26a3a7c3f853ef550093765d863dbe4fe57a41a20fa7aa733dcbcf989b1559bcf4d765a808faba888a74caa420e124ab5f851e5a9169d3e00400dfca0131586724eef49602b6305b345bef7c0c158bab249cfd8e56ce50c4de83e7133ace41314fe490105fb424c1f688c158f10e429227044611a048e50604bd49c7424564a7b4c2f34c76b9da7859b3d610481199a3543ba3e664e1efb7ad3dc043482a3f1fa02a888650ed98fda04be8ac1040caa469b36213c5d45569ef2629910c4fb6e8698e94eeada550d81433033bca005c026fd37338334c4e47cae3f6d8771412f70194a7fa387791c8218777507dc06d1e101574d7477d91238f506329b4f414797b3f9ab6a6c4a2706358cce5307b2fb871b801dbe161839d2cadda0b692bd19159acea5c83478ffdd023a2221d65e03105c6fea9a0a792fb49a1ce9beb387112df8543ea3dd101bf288c7f6be5341d908a5a3eb48b70900e614cc08ca2c459f60667408f872ecbbb8f67588406ab8fc39e6d37e29025f2aa6239a2ab1a61622074510ef8a1c4ad2686909ad3fbc4f44717d978d31437608a6527d7a593f2402b057170240c51380aeda90649f88d34f16316c771535200fe319d9d7e1c4dede41778012008f76f08a238fcd28d93d2d89e495407b238ef63ba380fe54eb053d18ca24b2f86f45c84ceb29a52a6a762f9e15ac1a74bd284fe1db851d3522b665115c0be262ab892eaa7768ad79634a8109e14ec3206787c067e8a1dec197473f0e55ae0c8086df22992baf43715e02ad9317b9a57a5059de9f8af8f423abdd55b74df37dd0e346d534bec1a5251410464f3203e34b217d93415c8f39d281406d25bd8427437345572513e1b04174b07cfb80a1acb321cb9d7c0b9d08473dff70e4f77eed9a8805840a8481c89409ba0d19eff8c661b73e6e6f4c3f16b25e06f5e2e79b3c2a2483187d92a0cd8bacc44c8b7048b6c32beacd27aa5c1f706405b865458bb9b61586a7ac74e4a75b18f100c0886a243a83e1a328b16efeeefdf4e432fb58bf51b675029b5fefa722c4ff16814bee0c48a29a9d2219c4f2948c390bab8264628aff910c83250ffee08917a14d2f30423c5c00c8e150aeec857ba2050c9cb891cc72485b041d52b835b3ba762c07f485f318c15cdda454052362e5f580d9a62ef25d20b59e15fed6db1d429fa77023e8d084a13cba71c9952d76de3d557869143d536dc01fc841b05bca0d3a85d6e84e920621dabc4d5a192f71a6512a870bf1f19af828a785556b6952dbaa8f00adf4d01afd4d00d806813791273594ebc5dd361ecf91ae415700a9da9ec88d418b59a68a4660841e535582ac33a8ebc9048b20b9dda846a8d8762817b14415243821eb89c0610032a4243f2942f87920138c8e96174bf585487c7cf8faebc02760400692362895b8aebd865cc34dcdc09c75c611ea18d4f04a895445a62b2499d5c8f4f7fac76e90e975dd760e425222210c548cfe018ff07c0472b0981d48caeee705818e558756d2fe311a9d2ff77b3d605f843ac955d55543ff4e9d72543b3932625197570ef941467f03331621361b62a902c6cc41637134549760de838d619cdaae4dfd35636c403a4c7172d16689b100119e39ca4ed1aed3be851e7174cbc972003cad72ebc958f054d7eb0a10a1c92f8321b227a52b8e90315913c8ad125ae1c73028181b82bf07e6ea516fced1f157792b8b41c10f850123e286b508135d91857082f8a9e85a4a4d12d78d5409d17d6d50505e379ab3cd767e344827713a452de89d6bf9aff680ad06a3b119d73f359c3d982afc7f62d711809a9e509345445b61fa174db2585fbd4e7b87831e3fada148cc42751c92528155e9ed084b24c9b60bbe410efb7cf61004d5a4f1f4af6b99a3f85ae6046655b3d387bec97196390cc3e01a292807feb79a44f8135a1124e198f94b3843a7908f6343db1e7bbb6b295d8c26ad9ef955db8cac886bbaf63302558902ebe3dd749c62c4c9de826ce810efb1e5e998ae577950a873501b9470c8f7cd62003fb402eaf772890133db1e55f3b6c378453b87e8761f95fb3268697c1b7aa13acda4ea54cf9240d07235102c32727857ec2b023ba972bab35b1bab2b65a176d35fd17be91eea1d4dc79e7c7376fc391f25c144af24aa397e44121133f340022c4b42f8f0b5c8e3d49a203cc8a9009207102373b1fd54185674e621fd400d647969eeaa70f4e7ffd3c3056a8fa37ceaccba22bd3a2d27523516781efadb5b1cfa5216743e4bd5684b415c676aa33c308374c3ebb4ddd4d0ae65c85dca53a3e9f9d7d465797ef22c9ea921cef10400ad3cb28b6ef1556796be2e44bbf0f5ed50298e3f1617ef4829b0b0257b2d9c45a44f6c0209c59592ab28a970fe2a802c68b8c4bed79f2b0951132806ff351c77029e27b664977cd550ff2917aaa7916b3e98efb2fff1acd76f5b7e6390307632520d5218e52fb59f8730c2e56ada1e8512ee236ad5ae071c8443c5eb5c2375f88dace9b2270b8e69dc3a5c95b5946c4e8aa3e08dae3dbf06961ecbcc2581869206786f8bdbbf9db47b9529a6ba937f0cb31bc37698f7e28430230941b6d23d33afa9aa361349b76a1668f2a8906d55175a8c49fcdd5b0d787408412510747657dc570d08d682ecc6822147903dc25c5025124005694ad40636c06d56a91fe2aec40dee330823e9372088b05854c8d3058dfbb32fa186ff81f64dd31d734191642aa300b721b7fd2f7b611ba89bf0985a876a21d71659a4882946b63d2184d31462f2b759c3b98b7f7e68af5e2911baa4ad02bf6662f6ff20c073680ab620a6d7e5c69415ee8483dca25b864cb9b1773a44a273ca12e387c0e5ec85e1a4d8d97b6b52e15a6010485314ba38064731e69d8a5d30b632ebfa5b1bb609ac270acd4cf8ad73b255796fe12288a87c782744b654d9c5c6a12cfa8b17662c20b201b91669c04bbec5f3e315b880af7dae7938351043f85bdaf3b924d5c0b5719494e33d4fc08152ba5c2e719436c0c3a03d8845e0d96d92dde5c771093508007122331138ad152d8dc2d447cb232813fc8e2666f9c636938a97e42126bf0e16da41fb09ec8f2c5a2098663e3741d46333e815a7bceb7224ce66f5f96bded094a1078c4f4d261684e09262d0fc83fbe94aaefe2a71f1ef6e7b40b1a14399769aa982e9ae89abc0a6045a335184ecf1f137f4a7f4fac8542851bf733d02555c8ce067c7146de8bf10a3b9a7615381d3035797a912650aa9825b030dafc67bfcaf0fe8ee6868d070efe32bfd20fe1db2e72468c8c395286ac9b16ffe83b5207d914ec246f29d4ddd694c114711425109c63f23a86659108cc2d6a1a633162551f7a11e0495da1c12903aad9d4cd17b30dd2e228339ebe0cac66fd93fb64a03ccdd39d7795c461c70a803601d66733aff41a6efd599d7b4ee79b218fca6b550695d7a24412cf31f430d0f5b6e2a9665afc55a318e5618caa0437e1a853edfbc40c17235f81adcd89064d54f320d8b77be9335e34bbb8a8d124e76a186b60f929aec6296cd986bc1245f0c75be4e65346cdd8246ea4343fc583db85147572b2177b6aad29085aea8ab40708197fc3dd04e4f56877aa89af41673e1d68bcc1adae43cdc51cf497104163a60415a74a8a931f6f6c671292a1960d2a435fe31e9456743f0b59710f10c0a10734cfd3d6822d1d431e0c5d461a56ff55749391c74c72d3bdbc2c4d19684dd1692c1f222c463228c2eeb543ecae5bce1b293415ec46239535a51f5d9cace0ae2e916542c55cb7a8a7ba3f149eb46f2778603688e3037c42042e1fb3160a92cd1f10eb547b6e7fa058bffcfc20cf7a5ad40b8064d9b982ad32eac5eef636455a92b34f63ea293b381cb97a643d6970f30a0d261dbbba5c04843a66e7e5507bdfdcf09d0293ac154a2b8d3d2f82f7160781febf91d2922b7d42a1190efb3e1c212b6543103b48548b8960aa9a4ae322aaaff075a69fef44d02d2847215969006432e2ddc68ac53fcca4a8fd1b8856189758a0dab369766dd60a6a9963dc0464ac6e7b6ca73d45c1252251686c8d3b974e81b65004324f13cfbe37ad8426ac29bc0f5c3caff9b4b0496f68b8957077ec94723571979c498b1a1ea129dce0ff543157a410ea6110aab6fc02cb580bdec55265de0e5d6a11bb1ffc19d68b692889f0ce11e20dac104dbf358eaa05698fa2cf5412e26d1c9e8df8e416460abcdf8aee6e06a41e50cde7c5572a43de9aa992105efe460e3ac34358f0b9b09ce084cd592876643b1209b7ebb100ace3e86a285d63eeb6db45cdb3475b01ca2e35f31488fa11e7b078434c1bf36b74f1d959434f379a9a480e2552cf02a492346b713142b641a1596176bb1d20f48426d97b7c239f9983adf02e58413bc1d84e587b337d426a79842a6d70cd783ec141245b0585c26d6cf90a974d266b116cd85114595ba99538981099b2e38b10456d295a3fe574e3456ba5952c5799532329fcb6bf28a168e84cedd28248d221b2ac07d0a0c4e71001430917b2df751d817ffff82490cd640d4e527a6a3d265a372e170b2d43f3a6d048a74f938f1557ef42fb064a89308005cb63c0a931e64c532ccb315119033696433fec9b6c38afc777ca0d522e01a4821d993b444d2d618fe8374711c00ca33c7bf79e1c04b9f164b553fdd3625a81aacb4911e3f05adb1b0f6e79f92f04ad68ff0eaa1a09cf2826639d3ed386195f5cf519b873a4636a22149b224624f08376f5338ec50492ccb7897551016de285dc6708e09225a4f89e18d7c5e023374aaa94cbd27ddb447b47b21c025036d2619a6fe899b06a27d172b528fd665a2e4a40b7517aba86916773c6d0432e81472e8ac191449deed42ab94625d3ef3c8bdbad004460f33497ab88f252c6f27e7df95e1568e3f4368bbf200de8f45309d5517de4fb14fc6ab002602400c213ab783b1282bdfe0d79f0ccb068031f3435f814d91560e3a3034cec874f2768ad0557a133973d64074871d20c773c1f0383ef2380bbf52544c89a68d7132cdf538bacd3db4d0d44b60b4e921f238a94a8c106d87a6e6a8b0b272eaa6f0b82b68151980e9c1d5e5a7f03c87c56d5b1931457e0ef55a2efbd002361ade7404d4d48b0f8bf71dfda8ed6cbecde74af007a7604ff1120cf386245f3c9a986a68e0e3d302602096488d08eea52f13fa76caa46f637bf14d3c184e2f9e28e59c8c6b37987bf6721dd731e86481bc67ee11fcf42596841232003394e53143006f6e013c197e95c81791e01f88ca93607dbd88dcdc1b0a176116a310840c988a2122aadb877fd9e23fb9e11dc6e4ef00e67c7ba90a96e90dc48390a910021379f8fe28d15e944cd6752f5611c12a7e77d2965686330c5fd04ae7d6c7ccb8a09e677a4c37851cccbfa443208d124c94c0d441454f8481bc9b359ce38aa5fe71ded5a10411bf9d038f0eab9404a4c142908997772995efd6529eeff1606b13194fbb22b690a6abe9e7ad230b63f050e83306561e749dc9e2b850ec7933dc0598e7c20b7bc1bb8be654f727584b11950f1580e6b68a559c363b5daabd31ef92e554c6b1e46fc191d8464f7e2356ea23e650d194093ac341a54b440af7703e8ef098ff151ced63e7c735c47761630cb542b08909b3fdd8aff40c99b13f4076ee860ec2a700946397371a3d2c542c25db8fe71970bd67c133d492be3528176f273b5c539ae9cbcd65e3cff084535b647548503315bc374146a714323e6a160659121c70bf22b5e47720045e04620716a6918013fcc756a33fa98d6ca81522a6a43ab5733e2349c1d0557610af7d3067a0bddef0ac3edd3a0885484e1a6e22a8207f8efcbd686750507057b014c55375baf320967837685358d9a78cbc7417dad49125e285a036dd077b22ba80a9ee4b4da0332c350c551476366d332fa566e549ca767809113e710723c33bad5a41c6188624dc1211f43c46e1770fe25bcffa70a7d3c9557ad46854a8dc257acd665437e9192878e8267051af7f8ac58c7a5490c0b63ffe5120086cb1b5e5b7df1ea99f07d4bd547a04db30771988a5c248e89748d960f61fb04894b9378e625bdc644d8799d8484fa5f78b327fd76502cf6ccd3b0fff16f47806c73be01b6503d7d873b52d84fe205be436c5eb89f4e91b02a29c3c19c1acc350dec436ad21a7348ea857d8508656c3d40ce2eb4606c4646bdef5265af7fc923a868f9812d38991e06b52c83f067d590493ef5bc86184d031701b5f690ee83a979e006a3a1d5165a68e41b04c6a62a784d0a6162a95d440030939d9871dbe860e85322b591f771a6a5af96c4f645f37e588b6dd598e58271eb1af2361d5830bf68a04cf842a701ac63f9fd25107d35d877ecfbf75d1dff51fa283d9f6239a385e6980243d7fb006be3b6c267b210085d1edfcdbaeee5ce2960dc0320c61ba15002f6ac1e11300c5b3fbfeccc54d5d94bfac01a20b1aa98e35b161138a89ec3280182c27037a46c2705a40d855a503f92864d44023293eada85a5cd1236f5a0e7bbfb071cda283b1606f6a4654b4045857a983340a801f38ee58394013ed93df73fedf80570c8aa499f67360018e70d459df9b500d7e8c03914df6de524a29939432a51d0d085e069c0619f623ec8a27d18adbaddb0ecbd22e59518b26729a8079ae72ef1fb09cc3c4c660ab223941393d3601b62a92e3c35ebe99e5973d84b0fcb2921fb0fc9235679fd6e24310567e652bedb28f0dcec2671f9c955ffde56df3ab065983fceaca564a2fe55f3fe55b36acb4bea4558d626d57c54acc7ad29f68559f48db7d76935b251ffb7ab1adfebc2efdacfffcbe70dc1e2d6f8bf5f9aba3dbe49ff09ddc5af8e37bf40d6e97ff6da53e554f6a2f417d5fd12872031c09748d951a55911bdcd87e083041634fb62a7283225b2be6415615d1a9b105b055911c14d9faac57a1555d377c7c2e6ed7d9f7cea7a990a72e6ddff53d2e3febe8fb983dbdb696f7f36ff4cebf0b474bfdf96ebb6c43731066b93dec57cb751097ad0762dcacfc1b4e62eeaf671d66717f6d95f3c1ba42d896f8d65b7fa3ffb210b7dd1d967dd7b5dd1d96ca0ecb62d7dfb8b61d966c97dede6d327430221b6d2e6db1ed72a0878d6f49b9711066994fdfd2aaf37f5b8d96bb6af0c175d14517349ec6d6da42d6e20fed953658f6b2bd75dbb1d7a56d7c29bfbaa71a7cbe72906e63214fe3a432c3bc6ad0e194cb3eb82ebab0aeaafe6f38b771104ea93e35e2b984835a60c44b5914a22822052f2c98c192210ef02718d18418289afc18718043111c6102eb88156471c8b9fbc8bf9a334208637418823745cf7b8149107680032446a860a84917405640c4134048f08214f44e0c3170efd82a0a1abcf40e0c4b80c14680c1150fa194940edd344a8593b3d3f313046d1812ea91d3452723b420bb280124a2a3e6841042081d5239a18c3152ea04a046a98c1c192a52e2399cd0c473503184bbe51c096f428ee6c4712895a4417881b383034e8fcc44a005234b9078025108200888f08008bb00112a7011d3841f3b3f2a1922430061e21edd8236fa65491075778790065d01c4ba3b00383709a045932962f0418fe30910b9b162cc2a5659161dbe28518405520fd9213d9141d8de32458d52e920a3446627b17f26d09225272d8419584884122429b2964388200e439264a5598aa557125200370141095e5ee694446e6a2c845e31a93841724e19c51184a250c5957dbba09720984c0a0694608901c86cce17875249086be6831b7757e5f8c94183206982413410b2b0a6a4e4a2a651aa1b9c9c9d9e0970f1036dc01a63f20f1323a39113aa7504ab9b88d8f864414800108b184c01be20378d52e1e4ecd810a407eb228a980009950e3e3f4ba054062a8250458e8f112d94785d1461a70916fcc08916f4984c558fad8c80eae9c1208410624f057a744a7f80d32855ce4ecf0f0e3f08b2a05beeee6ead80d2490406c6421825c97f082487c214052a8a1a17a53c814fa35440468e0c15e1700225d0060178b0e39e3841485a42aa512aa224372c81c90d4c78f1939c3044166030b8f3e97173528a430f7ae6b420848ee4882406a014071f0441685925cb1320e4489ce4916848418a2c18e96206798110ca0ac2398b3835a2741ac10926164277e8d690aa6a21a627e6272628466894e3502af99cbb2d588f3c33a4b0e4481347881461059c064011052e503251ec1c71aa82112718c08a90153c208281165414d1c2cdd3820b0222da9e803102164424a18513cee22a159dd21a2869944a871a3491d97584179f222051f263840360173c47509144102d524da8b864cc810dee820551fc0bc3406859b5bac3007b87043103b894a0fe3d59454d153755e05491e32f679432be28b450a35413f89192d9152e8b772c087de60730b6e0724e30a2a18790010a60a8c15a0001162af7b260a10c4a0f4802902934f9913a81500f246600850e6c6005227c8826951e1d420ad0d800592252c0874e8c938ee4484677af2ee345a0c24fe959fce3502a49725851ba054da354361248b68409872d74fe34624209cf0c155078a2a8032f3d476886f4a0063f785c3049c52b46323a9c59d4647193054e163959ec64d193c5cf13828ac8021492c8c214a4c04295050c8c3041111ffc2095031782727e30057016922842a3c70c6aa63003202818b284081e931e4a14514445112aae9002922a0892de0737350580b263c71849eeee9e49679a73e7a5512a1869c30e2a338d9c67091e1d1e213c3e3c403c46788ef00c2941041b2128a4c829dd196a94aa48023b4a9e0021fd71428d7587c1dd61283d386725a24e271f9d73074c1aa57a81c1b1831282144da67b370ccce1062808dddddd3377b72c7797d59c720b4031a0257f944a8149a3542f303714a1628831c808217488c25730e20627777787b0462b2a8deeeeeede165d5851f8e0042f5401051ef40006478470848b17b06024065384600b2c9e801ac2434002a3042ccae08589026067001ea593c85646d842878804496f0914603429a2c2092a8620e20a30c8c0ce103639e80151154ba24e51bbbbbc9c403df1e63cf2238f04c92342f248eaa19c30c6482916388e458e63b1e358f438163f8e45906321e45ebd18108a1ae355590c76ae1841570cd98004333836421ce04cc02c11539384a7e85d01092824124570770712848b9989236cbe011dd3021b0ca00a2660400006525c8c600940008212314fc94c1500e8400f9810c24b9027a440d413ce197d62f478328597a124742013a488a19c238aaa78566824b480083b304c30410a9e9d29a3840edd730205252002420a84031ceb4e0252428634d30170429219ee4568ca282fff0b0435963be1020e70289d520009b110c630c114314f1001146892d0c201b0095a60420453b82088151c00ab708424518a236c11c3227280af5e9abc9e02a8512a23f24886c31443a66f4b0b21ea5e4039e7103a57a2b1033230020405ce0f12ac701345122510c21545d8e051c106df1a0f7d7ad805ff8d485fb9171f350bf4e97d656d8776776f259563845e67ac0f61e9af84ee5eda5afae37b65cbddfd6bd4723c08dd61fc809d5fe7a6e1a80fdfbde1774ff8b3e7ec097ff676fdf9bd7d70d6373861dfb77c9259e6860deddba14fef2f98ec563ef67d6b9787ede7f361773ba43142ff862d0daf1c264fa7376e758b2c6555c1efbf2ed0f6fb53d8dd106e0ddf51cddfa1bc7fb149d236daaa7c7ffaf72dddae0bf48969f02f2dbabbbbbb7ff5bf6ffd46c39e4aa743f83d5383f6c6aaf0e90f98e6d32b9da99e4a7f2cfcc903be5bc951dfb3ec9fc3adf04b8502dfdaaea96ef0e9e61032cfb955192df1fda1ff8c52cae8b007895f5802e38f4cd6fa7bb255e5deadd4f7fedee3b3df70ae8be2bf0b077cf7eee18bff306e5bff7b4cabdca5550e656e777ebf45e976e7e6f2ace7e088df22b7187d936d85ebad7a3d66bb25b81a2b6565cb92ad94f2bba86bf0cb7f178ef9d757d75b95a595959595dff2dd5583acb197f6fa647d5f35585b552f8de3cbd0dea1c47f41537128f14dda49d6a7f8542bb166aad3b22cabb2ac39e5d3ef2169d18b4a09c3b2a465c570e16fe95d88b1b93c0b636bf95b929665cda774b3a496f17d765ad60d37b52ab5fb017b7dadaef952bbb6fb706037b3d6943f99f45022c4fc4e5ddf43f2af6d6ed77a16b3a6b5696cbba86b5ccfb78b2cffed24d65fce618b995f78dea266ea53fc8b04d97d97879d314679b90e625eeb23a5d2faf93dc42cfc73eb227b2d8ae5706db7ad7cb6b0b75e3c75e926b216e9a55b01c0939eb45dd2c3f87bf230b6d2e6f2ec8bad65be7cfaf764b35e7800d0a72f7f92acc72af7b4f3597b565269fd8dee214e91ef2e1cf329ff0bed9ea6b575aa4fb26673ce9991fe624fcae6f5d95f6cbb99bdb6ecabeb86fa93ced94456da1adb0aebe79cf3fdc4e676a32f0df543d5a06d2b98458316957ac90123f443a6cd1fb5159c32bf6a9787ad6ee5a6834d662569540f443cda0a667956feb3f36f15f482c6491c8a7c19da0d8722dfd29e0580c6c4ca37699543692b324dfe487b7dfab75eba957aadc7b6cb39565e9bcbb32d74937fadcde559ebe5571705d8d65abf536d4513553ab7b6825364d5436a177474ac65a9694656ba417edcae0df2e3c7e72b07f9919f75b61b8d83be6f2d127e47fa137ed5b6fb70c86fa1db659bb9dedaab7f3e6cd063556c55c406284b649f2db24410bc6af54fc5f9fddd85a3dd57958deef189a6c6570d53e36fed007d82f0fb85666a14f8ae3d8d3ec1265601b62ac284cfa91ad1d1d35a6bad9dc5efac568c471eb5e71e9dd6afd5e5deb5ba5d0d47bf8dfce3536b7cb6351f62174d7c70366e97d93eff0cbdf2e2f95948d798f12f0be1589f5fa56bd0e7af2ef7db76ea13fc6b88ecb16bd0460d5aa765f6b9759ac9ba767958ff57ab4aad7777ec8eddb13b767fd9e06274a7d4a5b7169f570e75bbd8bbaf7f49ff71a3319e6cfefdf12f691b7d65ebaadc19e2635ad46eb68db6caae1bbb40c0d8cf3a9ce2ccae5eddd7e869b0bdddebabd1d6227ff4f3efb314903fdab0a9dd67afaf5116610288ad76fe8e7db64669a5fc7769b0fc375a6ad042cb64c6067698e4fde1d2f82dadb218bfd42e0f2bdf79880fc20333fae4cf2308b33ceb2f43079bf92f340d348a3fd57ae8937fd54a7df2c7b467df7681b07f69fe96f6fac457c55249b7bbc3aaf32fad4f5be4c7a74cbf6e976acf357681b0f2f9b2015af9150781570dac12a30ae607dddd33db2308ffaa53fe95378cef31feb3cece9ffd9d6bb7dc9dbf7336f6b6bb1806df05c34c1a84127bec7a287dbb6cbd7b3be74ee4bfd04cd6fd4bd27a8c3a49ab7cbbd7e602adb5dd1e95ce4d962caca54c8c0f76743d82809d7228e860bf081f9c31c618617c8cdbb5beebcb18ff85db32b752faf830b4ec1a7de90529d3aa3e8db6db4398b5b940ebe8c3ef979bc3972d74ebb9c9f7fd6e8659a23f74c8df5bc96150811c109040a71c0a48dfd85057e36adc8c9b711d844339209d722867e36a5ce0a527ffe2dd5f93ad4f1f5aec85963914f7279a0bb4f1ab1eeaa126ea2137e366ae109c2e10586ec6e46aac5236e369b8191a9ccde9002a33d8b8e1661caa536ee6f518351d02074262f4c85f63c4c1123818a209251601b62ad2444fdc325bc5afdc57f1abe85cb2e683b315bc22d0c3f28bcff19f10de6e5545faefb290e783b3fece9ffe734e397f5a9b4b5b997df632e65fd2677f5dba2f1c2d71bb4c63dcdc15e3c95fffe28ad7096973694b3f9bcf58b9d1aeb79b39b42fb616f75b777777cb9174ce8152c29f18ad77e7ef847a181122c8ba873dd02742a06eab65c321cc92040241a020cbcfccdcccccad84e1104ee18d7768321ed63ddf3090ae81135d07e1a0117b9bc21ee80381ec6d17ad6fd71736b1124a292b4dd99623f7fef22fb6b9406b49299d730d7d38c5bde477187cd8d327cfb23f7975ede4394766a6cb39f064ebc9c9b5462794528a614fff8eb613ac5adbc9d7134929a5f067ce39ffba174a697d37b30745f372f3830dcc4e0ecebc79289a979b1f6c60fce78946ff824338856623ccaa6efdbe1ebae9609391522fe7e9bc9b1e1e4f88f5cf1e8ef51ff963967f7d712b8c0a722b7c93c3a1c0cf4c598ed59efdfb5eaceb6093d1edf24dd45c12ea9434dfb81507fde1c321cc42b70b84854338c59b587f12ca4247647d0431e86f6d5756cbbae0905492ed5228a1ad524a49371768670f1c027fa68443fa25631992f0e0f5341aa67d3cd934efe56b99b85d9aa5498702ab56f9cf96699986e96919da4e0a52c6524a9a071bc6078c0cea41f86894b4d30b1b34f4299a66bc05a18410c2f890105a504a09252621dc5a86534c2509d33e20cab21ac6c78d4dd7d8f90dd33e2c1a08219461ecf9d1d4589efcbc957e26bb968d5656b27cf8f061632f84e91ad0070d6cd4f57044e9537e0a31482fe883e1d630d793e6248de6c94fd2d6527ff4f3a4fee8227da575ced92892263f93a17493d85f6a3dc536fab74e8ba4cdcf6498e5fd7cd6b9ead6322e2554ab8c948136953a229443e8079236bab496e194918fb6244329221e2de3e284308d8df449bea571509fe497b41bdab32f5c865926a5ffae1b9e6ad7e5c987918928194e912e40f163550ba8df3036353131b092e1b28f1713f31333821f9818771bd70d1353c33f35c4ee039c68a519950cd439e79c73ce3937ea46753b17b9c67d75ea1ac5e901846f6c330cb5b1edda86639a3b3ba91d83eaee6eda300dd3300d03c4deae0ce36cba3aeab806fb1e79b58051fccb1fe3df1d56b5807afdfbc4b91d56bb8671ce75cc35225d738eb29fa46d948db61af6512dc0c9bffe320a2ccfc9319cc231313131f22fcf0041e00611950c313131ae02a11c1598a9648889896122acf3f79c683666605425434c0cfba8dfdb651fd6775831312ea05afc83dea5f17c78e777612bdd7d726f51057dc516c2a7d135f8fb3108fd31d30c4e7956569adddd1d1bc2f8ed38b0872a3d0e009f63edcc02274683fd52de4a32d9fbcbc34af8e20122563d1a1ee7fd2b6ecc32e137ff35a1e5c2163a84ce29fe8fbfdba157ffdb57daface2cd6c3ebab489d592e4beb2fb5dc85330be4134ec134682fad642d0ddaa9dd130b7fa81a7f0c6b696ee92d59e8cf5eda89b5b467a703619dafcbfc28a57b65121164d778cec5c8c383ef75c4577f7edde8dc5474e8a874f4a0ec9460d4089b3ce86016b62a1a682775f4e050cd543b397c09a37391075739279f8721e7a87377e7970e4e31c1c74395a25fab2bbe6b74bb0f47fd8c87243d8a8420a2cf03b3dc0f0cd9b85df75c59af7c60b61a707faba1195ca435f2f63eb26b5918b5cbc346485d075115c5ca8f87580dc9f84e37ae523a98e5ca9e6eb74ad9936c7369eb2fa96b54f9365cdae518a3ebe08153e24bfe18ab8ed1f5a37932baaebf59fc6bf455ea6096192cb38e4bfb9941351304a606ad0eff990101d30f5607a7f848e3c774700aeb6016077a09501e56870effab6273833e1d40581d23cd1fd351e3d2f7bfb4d6bffed2bf5ae6c7bf757369bac99f53c7943a38c5312e05c5d14b6613e7702a727c1819097caec34838a71949f798ed86c0f1b9886d945fbbb2130913b9b955fc52a3d1277f4b3bf5c93f86a6e250fc61986665edadee7e4e75c5cca9a26eab63bd2fb2488ab144ea17b1479d914c1ebbe3b4be5697fca859db7d38ea47195f32e9a14408cee19455646565a3e37e7e2e622eb2fcccd6f38cad6379fb98ec5a6eb90ee2f2edca395da3535c64efb42ef7df939f2422dbff19bf987f4f623c8c9fdbb521fe88495bb65dd6d1a48cfd9ce294f8eec2217ff29f681be7f409c3468f911eabf4b3af230ad0cfb411f6755669e35fdd1b7dd5dc5ae8cb9f7febd769619afcab922f59a76bf4cbaf324535a09f1c423f500d5a46c22cd0c6971ab43252403f39847ec0b4ca4838a53ed52e0f4bddc6af8f83807a2042c20309b33c1b9f95a1830dffe8b04f9fe2c7d060689543f12b07cbd6ba5d20ecbb6e906f6d93ead8f8943ee7206196aa06a69a64249c12471dc308b04da7ac92cc73ce8fdfa91e82cede4510f6bbbf2e10ce77595bd15674ea0d79fc629faca0c954d4f09f4708e37755ffe4332b55b580aa92e1ba1458f8fd62dffb9225537b4b1a464fe24b982ce9940c24640f1af01d78a01d8dc4a08e44b42a281249b2a30a9aee23914824fe44223ddb5d215facec9ecb62233212c1a8c79fae51c520f982512a4348045ceb1cad75fae4a4eb209cc62318a5feb53a8dd26b7577ea244ab5371272282987e2be6a4c54c9e06a8d4031484aecfd29e5548f234208d9f8f12702c96884528c561a89307f3462c4f2df2864f93932f3498cbcf54e9fdc5f3799930e5a5a09595aa56cd42e0f57638cf188bd543a177f22508c46a26b893306919e66db8d4196fe679cb93badfc4a560ba82fb7bb83ca48ba198dff22114ea1118847dae528fc10c1ba79398d087bbd0c6cc322f52431c61883acbcb41889304bdc227d4fe256da39131be90621b4325ceac608544d4d2412df22c229d15f0e8e8b824bdd38a248047e2442a33fc71aebff2a21d8db43b0fe2fb4eed122caa1f857edc7fa4722cc12239148e4eea88276b4cc6a6ef27a121b7f229118346524d223c30869ca689c663c84f0e3734eefc81e0a5faa942255691ed73c4aa8a9a26771ce8e378fe3705e354f0be12eaad5cbdcca3b6d0715923643a354208705fa049f7aff54de89ddd3b479463e7227b96fefab47fe737e8c2d8452d7cd403d7e84f0b1ee39a777684f77edd83d5da3f2f4f85866d661fa2b241e4ee1cd022fc89e74d0ba36c3ba758d8675dae541a973eef6ac3172ce8eeb896e0ab1cd73c516629b1d69ba631de79aa7772c7b55acab32ecf9c251f160d855b3abd659ab905ae5d7fab5d60b5e2a3c3c155a97c14d92289139fc6bf3708a4bab7938a54e4fd2304dfaa579e4bb3f27d1e1a13ef99334266a14ffa7e2566e543f2a3ccc527978fab7ca3a9cd33c2d44c6e649cd5822d50ff5686aaccfe6d5d4fe201595a67f3b355ba56ef1a98acafbf17e3c540a42f17e52340f657a363f6e38f750efc7ab793fd43915b7c2a80ddcf012168ea0abeaeb47d85637b701c171cedd03e2dca37936eefd6016ec7de49c3bf76ee4feba73ee86c3de0fc73726f76a9c631c20a847e39c73cfe6fde07f29e6d40dde706cb29bf14d563279773f20f63af8508fe6d938fa6ae8bbafafc6ba97ff7a45c5e5ddb85c91ca50ea5595cc6ed0f78353dca33162e13f94ca4a9659590f1b90aeb3f7e3c252d7855d72524a5f8df57ecc4ef27e8c2ed7437be61c61d7843d2e47e7e687d1f5d6fbc12957f5a06bd3c1264bf5f8f4f000eac1ad306a036e856fdecba9ee06c8fbf17e2c81ba793fdce6fdf4a1de8f57f37eb0c5316cf1344c33da47d334ca649229954ca6924946a6eaf744b564d3b48cb7732648371b7dca6181ac464769ad95542a9148b5963292959d5ea3dac78d4d4dfb704d538a33b40c0b326965f265fb689ba6699946c552e9225d34981c0afcd2d532edc3726df47ce1684b4f12fb51f7f557c567745dd748deca076b199589236964cd94a396c15cc8c459026b99935bb1e150e05f2d53a29918bff4c9865be1211ac5d907b4b29e52a95492b1655ee0a15ea35641d845e92372570d91d28cbef54ea3e1c65503fc4ace60c351ead4a73966efb48e782773927be19e7efc7be2d49154689c62649d4829a534d2d72c84dab0fc2a4fe364a326bb2a4fc34ae71c8dced10e42fa9b7d8c5b9c8eb4b9cfb66b237328f0dd53678d68a4ac135de5e3aa0c5a15a3149b946274cea7944e8b46ca5c2bad7f6ba51fbf3eb5a8f5745a16a5561059319961da5129b1fe93f25f1cc4721e82cef000bf587f8b83bc5b51712870fe95d4649554dc4a0f8de253c5425a63a53272902a080031983edddd524a877277358ec6e14635e7e366aee033ddd443ae6686566ec6d1f8d8be6aa05b85591f3586d134d027988da66f3bf409fec9c1cbbd78a9f1d04353fa0e456f2aa50ee5b4f40ee36f8ca72e3c75181bddae0bdb8db15118f2a9538c5249bb44ddb51d24a5343152ca406c6c730da554525743ffba1a9b660ceb21de7af891dd0ac8c2b700f47637f652e8bcdfa15c0d95cea33b1aeb9e5e2f311a4b5f5e6c937faf8d4acb5fd278299452baa4efdc2575284e71d974ebd4c95e5bf6d9bcb2f9d6d36bcbacec6ba6f98faaa3b1cf56e972460e59a7945ad3ca34fa2337739bc8cd7413baf530a9373b39386ec66ad2c3a44f7e63fd9069d68fdc0ca758d5bd585baa490f8f935bd9c1a1c03f9d98e86093b512df0113ba84a89be1147f547333d1d1b81946fd91d9b02b95938d57712e7394d28f0f7ba04f8c10084a0affdd4a0f0ea56da4545227fa15d21efa6f5057a55c75a9a6100e8143600f1cf2e23c9049d738813d40de4a7ae54627e91a29b7c24195d321f0a76bc81a1c32914fca2c3399fe4fa7caa8171f54499ca3b190b871923e41f8197c41daeec964f576a5d45887779c1b718ba18fb7158730cbe81dfe5c19a189a8d48d1835a95433340000200093160000300c0e860343719c695a84b00f14800e69b0465c469ac803c224c86110c7400c620c018600038821061907595107cbafdd51160e5f9c1e192a5948b69d0423db697dcffbb753b43ab4a0ce8bf683c544e0adb453e31a85def5d929aa6ff909989574dc4ac29478d6da297ab59310f05e7d882c000709c072cd0ecea4639e829fd620b939e14ca5e8bf70cd05c4c36de8e5cb7cdde76f30cb29dae24b1d7cd880013096dfa1d73fe32e41093f77adce773cc1d659fc64db086545f50a1f523afea6dd8580e828f44af4ed7dbed45e4dc2edefc28189746d362c84ba19e6d5e1191a3c0eb77593c872172f9ce841831658596a02e7cd1cccc782f1cbc1324de3b4c8cf1054932393d7e33f71f55d195dc68abd39efc30080c8d62839ff70ad32c86334c45972b388e89a8befe74b2834ecf956e8e743b1ac9e6ce2c864e162b7e6d46665d458063c0b246c6d40069b3864832033ff530e606102f562ff41edce089413aa4a0f1b00c643895f6fc5842faa1dddfe1b0204594065c9969b525024bba0984a7dacecf90569934085cd22683024f1cd58fc85e4c92ccd6a1fb3a27c901c2e32394c62ee2e18e684a0942ee7a3e8dfb394588a2093b51cb8edfa3151b0086634b88f12261967dcb871df9902708ea9625d054a411398b0408ef77ef15233e391c96cea043950008aa8acc3157c5fcb3504f530bc54f0164112338368f6124fa2af27a314c812bca427131df6da685f697dfdef31fc98b4e98e694cbc59e3a6f730452e23db4a93d378eafa6b43d72398f2204fb9a0e91c2fc7c68cbe30560c30ae1cf43307c7c71646f040eae452547132c4a7f5ac641623f88ac93237808cc92c33a5f5c3eb7a1f6526de94fd878d17eaf743966934d9b7505ce2aa2d598c3f7209d55b472eecb1c578af4f5dcfdbada78bba68f4c47eb470ad0a63d137d9d586e1613b9a7cb357f2e0186708eed5f69fb58b1f98d2e9775cb650a4dd2e05887649a58c331d31e3e802bdfc6dbc5550f6d57dac6386a423dc56d40641fc80ecb6c5d45e301eca5fe748c5080021116af6bc1f78bbb9fa6c9cf03a747cc15a04324f58e434ddea400abbcabd6664117726f600c6317d3af12074b7fcb05f37b125eff08116f31113a91d2d50dd5fa49263aa217726a0046f3c44601c2a848eed85c1f0ea664c2fb85ac9a43faee29a286319620cdfd932645a9a6f6fcc586978b1bec0b3c300dab87d8cb908be0e90188728867de1d2ec302fcdc0cb8ecc75c9e80f5039b6ca7a63e0a18470f1ceeb0ea5b9a89aa93162019bbb2ab04b42ea6c5d3e10e74b96cc2c642890fc1738d2ffd4d37320ed1c6b8a01b68f81a87cce518d8ffef52d32f9a743f3cc8f15eaef9d545a64a210581f5b7ad30d8c0fac0de87b68815a545638978b1506255d22e69005cab4f860fcfe20aa02db280d2c6a91d74880a83bc687c9c792b3328f8683328235123cc54440860d43e0e343217b6dbb05e7f4951271c68651aa3547165e73d569f09d0ae92c8e1b72ab63b145d1e35856b61add5700d4f0340a2eeb1ca3f8d925b83d8058acd951748152f3a27aeda431156eaaffcfd19372565b470b364b30db31e45fe8aad75fc0fa0fc351ad71c070683fb26fd262c400fb1a104bf262f8082e5325db5f21b1bd086de972a8bd451fccd017425b7292cb81c3113833fde3161917c4aed08f1b6e9514b26bb05fd486f873be41294400c6a4354ba0ed08eef76f8d608c61f73d0b989e52c10d0a055c378cc6782d7b93ca21f62cf3303b1287d3e59400bc9599c74ec3295a69c100e9c8097332445154252b2dc7f239a83911ec51b12c82649d2c156a548669e084d3bd63970651065ace1cf88d889f84f5ee3fda48d6c070f251079c8c641419318a616328894f430c0e20c85242a43f063aea338028235e12fa13c4db8b48d557fbeabd520558761d0107b3120ef84cd361b9c10542c657efffc0d84a2a661e59e66d955481c173c157bf7e96e5858d50411b802bf817227dee9a5b3e3876a29905649d19a587194cfda3ac5add806c39c88f01c1f92bbd866d1df31aca7fc23fb7633b6e104ff86f7e6f509a5549ff852c1da208bf4266e41e2a90cdc989f5f7a8288f1e3baccb1b07e7a6d0e6ee7e056489e7899d0b06079623e622e641f6a40763ecf8c34228330df7302f117750e99aff0f5771f41b92d5e415cefb4ca73b889c98a8869163c3a2b19b4bea587078c167d48a0715d9a7915f9e1f1315116d3c5ffae8ca2608a65e2ad18d0fa2c898d0b7a76c8306990da485a4d8b7424ca08fa175ae9210f7c389d405e8617026465fd1fba466e5a147685abc341b61127b1185249cc52d81a373a3e6cb366a8ba386709b19852deb62153facce21b219faee13cbf8d05778b1cdc6539502f9c25e5d4889f22c44a9ee6c965e4758f1815f2b58b8ac420454099b7f0be2ebcdd07150f62c5e0e1327096cdeea8cfc561abdd74c67f12a6c2137ab7dbd9dbc5dbb6a48d23d64e7b1aa6909baaa21b60dd99b622d7c0d71d3530cb89e3e7655743d0d11595a2302977f992db27fcbb2139588575e5ddd51bd5772e8b5362e9191cb77311a3aa4c3c3074e7be38edd1d9de7ff54a727f8ac2a5906951227a125a87450fc769bee388151d681fc6274a05ffeead59a0c4286f4a18cf204d9690c308ac5c2e97f4681ac10c1f4b749fd10a45339b0b48f49e523e407efe35c8aa87f9a223c44eda824e83cd486cac555cf66dc88260723534350552ae008dc26d4f668708037978778a6b40a043586a550c7d8d86345ca15907ac069769905025dd18f7db3ee2fd9484da3116e9a56f5314b32747a5bf19a2506f3ef4fc6586208eb4f0c9a7cd5e60fda9d5397c664aae4b67b0813160c3cf0ac0e4b8071dbb4362cb006c36999bca737d288e73626840e05e647c80d81308d6fa943c0851e9d45e04f0ba7c59132e53351bc5ae4e2c31d9c8c45d78e26877280a1dec01b5a8efe530125c75e5439e5c438cd2d617de43574c671f60715b17152370591029dcf6f11838c0c7c501bfb52c9bbd81d329aff04223e0fb65fec354516c14e36f241697611669a6adf7d2e0c23da400a09cce2a85fa1a2fca626eef905d6b0aad97c347b221317e373cb63e3cdd5c46af0ecabfe2a91b08b02b39d5a094c531d1534accd3e191c41d47816db69df995bd13a209ea86465cbc39f54967007b88585f6444b5902fd24dcda92983f0e8e9ed94ea13dc0317f6373cfe4429f98da70d8339eaace1dbe2ab27a0a392d5156ff844dcaa91287fbf0d472ce193d04a36e725a3d68d1ea42616bed0f4b928089b47a227cd26d02c7eb1929edc9e4852133de36bd57515c089a6dbafbbf23765984ba23924b16d5b9eb3c6672ccbc389290a344a6837b142f19a2288c92bc8b1ce587fadf504a0f3a182f14c55f8af2060d27e79078771e5310ee2f5ec53e3c383605a8ccdb303dd27b5f204baa299be5254b4308c230eb2173b2d2b094a10882d86ec9fd35abe8bc40359d62fe345b39ca89682fca195689f8e2d534ad8e97d44e931fbd77b8ab221a880e57ff705388c36467e80436624d2eeccfcae9fb97c09eed054b58585fbab26bc41075e1492f49550cb250c7445c0b0b2438f4469e2a2255b1949dfdee2fa4198773810ce970aff386748c1cf21038d99411cab04ec811523f5982ae4a9de63e96a2a3807cf393238e66293843ebc3a8bdb185bfb2e5722c58ba50d8a2f78e076c4bdd2b8767233a149c1af1e1bcc4875011f689d75c83cb8d75b45cc198bb9385f438828dbd1573e101fe190ea6a03917bccf794fa4e8b9004851089de45f83492b075d96442cd1db0060ad21117c4a405f176f72e77ccab07a0feeb97919d16bf8d59fb6212709b2b8b5f5d1e2b9759442f4b859c54f3bbe43c2aa62381975fd821264cb0f89f63f9fe27e9ea8466156ec0c8745777cb78ac9ace8d3b7510bc6a1d8b955634193eafd8096216a252724bc7ca085e51b67896705a2deffa26b4f88fa4615608209dd5354125693e54b55f5dc66731cdd7aff78065b1470d23dc58295d231f866ee295fa69629aa1496566df9f7d483644b4f298bdf8e2709e6c9c5f28e17070af1442789ea5736fe0a98b100fa673a9c39be187b25b90d5bee846c0420077d742b7bb8e835c375ca7aae2826d110bf8eeb64f1ea8a8507180b412c83c37b22a9280203f52535a15d8415634f852af1e7c429db5f2707e361d91715f4bdc0dab6350ae105a115b9983ec71048d0553c2ef59caee0740c6b0e692e44a7646f2bca43ade31806a72e7e49a88e883d81752dd255db3e03851809da546116565a248af8e0fe0bb9b245538ac5ba71d2f9c403f87491040ebd1b6313426956812a3605df6e0339cc1ab3269c1236b6a528a446ab89b2c3e826ff992eeca69c77431028d479d3edde6b36d45681a02ba65e81526b139ba2f7db92602db8495cd23fd592656dda8e5ad4b3032e7f693fec687f8a69630c2df78e95b067c8a5e28e5c338f1f003103fb36cf788042ad7f283661d2d7202dc3a9579bc9759d3b9328c08002a423bdd8dd9143f5ba214f88d111f27e97a9d0bb44761bd00c15972951f678ed8e3c42a63201713be4f5eef1a962ef7ac230a3b0c22e25420e17c5d537739d2ed330b8e90dd168dc4c93fe16185d95a194137c4109d6a98381a5c6b65c4b679bd9dbc1882b2065fb97fd6829b079880126ab747e66b493774d8becfad0e573801db2c321e08474535b70e33069d9bb3d7a2e53180355b4382c099f5736809bd92b49d9237ccc15db24b49df371cf3d11452adabba4ec5f0cf693f7b117434de1f49fd848a6e8b6e02b036511d2282abd32637b77810518f9d69058443a6db9624263e52faef5339fff4b5e6b5f1658a0bc6408169fe09e9ef9a5c309fd962e15af72829b2c9b9220def1110484d695bc1c4b0aef09f57c4d8a3540e91f29df1cafdb81a19099752b19987a0c0e3f42e14dbfbd81cc2c93247ac5c338f6928a5bc21fb4f4c52689d1e32f8a63bf9810a3b0e5bc16f7363034cbeb0c8417c10bf94160999d018bb4d88d0dcb4e7f4409653dfe80026039a313a070a215fc6f33a67caa2add64ebd5e30119dac5271be9f8aee1260f4c13f9eb3fa58a4c046e409db52f5bfefee4938a7f5d4bf1dda49cb2653844f465d9fceb096926747652912f8810af89dbb20a305e87463719ae285dbde694758e0829cc861dee06ea9ee17428876b5ee4ff2007410e0ea2d04ca4cab820be8830bb3a69ef1381b2919cdbd037b4faf964d955513a1b6684905d7866c74fabbd1874f0c1a27e11e4b4945417617eb6e018ae201ae4a9ebeba5805d5efda47669717cf6d7d1fc0fc1b54a38ca20222c69e7637a01d78df2ebefb8254b94550c1e048ec8685c9371fbf25df0f0c72ae6740da22acdf874b1090197c1408717ec0f8b4f8b6ee79fd4e105953cc42ed6c8f9f14f84da9741aa8c226ea8f9a3be8c3dce952b55ce334eb4d93c44a01dff2ae0bbd3b7786a1685151204b70464905063f0167de7441058190dfd9a1ece67884768f98b522feb8ec52e9657ab7e1e12ed0ffbde3cc4707ce2229530ef9385fd5492cdb9c4f76b2d0640bdc467d826cd84cbe2be4db00bd1c9ab31929ef2e44244f289ee80a9a5b9e050b2b41801f3adf3c07d8d55b6248f11f372d89232ef2e969b159700d7174637409914a28ab5cca2fc991129e6adf5d6a48b3d651a76d1c28919ce0f9805897ec95bc945a83dd7380249406626a8f8f4c6f1235baf6855519a0b44a6446efcab3437167ace3c4cd2c4686e57200a415b51eb117bf4b2d8e71c4f4bd8e8af8ded6d9a8eaca2aaabf73cf2090f0c3d11ce10ab934544a64f3223d6dbd7b3ce361e1a8b907230dc15642efa7a4b0fa02abcef79a28a4667787307070d43c8a9762c87640a47b73bd8b5c07af603ad1f86583ff0c53dc4f74d8515676d0f7d88f45ee74ce3ac0d0d717a8428508f81f2991d2d8ae7cb58d934b45bac08e19d483995df1226d891d5828f6075d953d7c00d942ff6118ee8189c359a068abc696932c306f920d1b7ff5ca3a39d48b4183e7dd80e60a70234d5037010f55889c729fc0061c8f5d2ae04acd68aa61c98fc595fc67af35681351e44e005a54534ab4ecd34f809226669295be377b2115d58a7baaa3e421fbf0f52acebe54971b1427c10ca8200e8242fffa2dc15ccf14d6e5442af62b004111726ff4aea0672c821395b7e06ccb4dd58a561ae066c5fb81e8d58556f12f638352dc96365e092ce8c8a18567cc85c11221bae6ad45b15bb0dc38e98c516b5994f7aaba689935f9217e32372cc216128961b1c7998ff1f40212236724535f3232bec4194e6ad4624481fb7184967f6dee44a7170e7f60ceeb52c3dcac04e97209dd35941b0fac8897d57621eb420aa1019ac1ae701c90ea19e821244698b754adb4bfb1ca34516a67549fa3424a7bc81612574dda4a5eaa281fb118ac1688556b25445c07ab9a52d4b4b75fa091de38d6a529d50cde6cd1d794ad1af2dc04890aa76c420fffaa2e4a38e8ade8fe222c1727a17048cd6a6027f0d5f37d07cca42f14d08834cdbb184b2632705c1746a880b78e6e236356a8c8824557b2fff6ecd0bcd66aeb539ca632368db8c1d02737ec4386948f7e78487dc067f4079d048a4327c741aafc3934e2e522ceab9284bf4565f50eba553bae833c6c52ba3141620b1a40642d7927cf7c1123b56a919c3b329a95defdf3de47d747092a5160627cd475f739a84dabb185d1c212a8718c365c8faf909140b0e076d141cebbbf62d1f019fde8907fc7ab7e25002015d0f249bc81a82f42f924db0e9d3648e1f7effbb1e48e28dccae23e152ae956e2658e8302f82e3c11adb1996c83abc7d2098fd13ad48209717b5d0abf59d9bf90f4353a2acfbb5b4547fc6a966795091223149b8c6b313b9603901fd108bd4f5b77a1af48f9e5ac66630495dc2163675c1e99f8605b80660e97127d5572ad89c4fb0c0e491c242959786d14f0fa17a61fd7079eb9b75985af8c54ec1e3df3f8ea5b7ebb093fea762f2cecbd6b35384c9034923cc8dc9dc8ad3a02bb20fd86dacc4fba301db89c9645bc51dc0645f053023b99454e44b634f36ab555d7bf05faf8e6ec22aa1a0088841dd4b1df054cf0f240309b6ea712066288c577ab7d7b2fca942abcf9c1064eaa134266922f31223eb4e6008f4efb45c0c8ccf4884a78ee286d25228be393af1a4ddc6d5ca2071728a8f86e283a8c2ac239a9166d2f5970103bd5882ba093c5ff4ad2d5700d3367b3d46c7f7d09febc9ebca2fd4293b1cba53ff9fc188394d207b93002f74123ec3825d0f3f1221238e845ef7d8c33a2926e6227708b23d2e2bd017446215ee94e8c6fabe214dea163c3f8cccd107570eda5e03f921d5024f8eb48db92848ecca3c5b247572089087343d83f9008ac988958ac7c622d056dc01901851ac15ed20444dfd07d5e28b83f3e9bb2d9038b86e5f45aeb598a0ee9d4dcc4049ac5724f27ef1033159c8c41bdf7becbdf965324aba85e870ac24fc42a5f9109ae21650a71f898ee3073674f13305cbfa4085583762248e7089b5de19d6f7dcb891b07405e7ea59fbee21a0921299c06b4c5abd7f4c8f00c7083b7a86624a8c08296a127cdc33e9342c2ec303d3f44dd99b0abf3493dc791998428b405238043f102a6ea6ae252530471f9d0c3b1a9757170a681831bba1c4d41a9158ea39791ce640ff0293a32dbb2aeedec3fa22a5db0972db408fe59b8c09cc647d9986bc7cf115552aa12b13723b052dc55a11c165730bbfa56cd6e81fe682d6dae7d0d1fa78c287f51444a03f96792a7176bc7831f1ba967492e46c7951d5ec1a1d2aee6ab5956c0fe3c9aa2a8072518ece1240673aa1f814c945de546b8be83e1d2ce7a4985cce48a4b5d964da76cc576c2c169b38fa296b18ce2bd15fa8a807816d214d0a78703e70568c83a36085043e99d5cb0ff6a709cc81eb4553333376d8498367deb68a90c4aa39556ad779be3386cc9c032ef5d5512e2cfe66b59410f3ca70fea22533345fead4c2b34c4dc33d39c4799e4944c862dccbda12f763c63304a506c785bab8435cbd2995c920eeae02cf258ae5e5d8ceb8a24db82581d77658121fc0231eff98016c2ebad1cbac5ade3ac5478b4a2567a979df595c31342b007b5f71c8d65230465f7c0b1ba4a25f8b0a118dbde2cf1858c6bbdd2b4556111c0ed547ee20e2bd51c4c552fc22aab81863f65367f426a8778b0ca01b1dd182c388ee6ff42931e22b3956090f7ed6dae57946750731f414568ea7523f7d82a2ec2195c01b72f7ce8629b12ac945e6b433edeb057f72cf3355e4fe3cf2c81995809f8c0cd28bc8abcb60a5f1baa63880031198019b887ecb42aa939d738c496162ed8fdeb6a0e3b6b50bc64b0976a14c32275206f1c1ea6496265b43468f112019845d0be14c64ce50d58e22dcd07a83cf691fb361505acac33b4f4527a6dca8721304008b4f0fc11849e69c223d162a4da6e6be4cbde690dbee58dc8032a2664587ce1969d7a6a884709ed856d3243df8426b270d3fc94674ae72d9c108dbbbbd4244655777e8f2cbb43cc46518b05899d6f1d1ab84fe0c06f7dc1f62181712d86036f7e7f05fdabeca833eddfff62e33143b94d5a5757869db094b9b328920a0aeed06e961bc1b2290d3d227c016eb4773023267511ce4ca8ffd5fb41c211306dd0d5592f215b108bc173d47a09b987cbc5274724c4766abbeb9c9e2961408de1f385d4d10c86b5f1b1000ebbea99ed84fec03c67adb4d3ee26797b06eebf9e5056bf7018424518d5ece9412d6790a0df9f642567ea4beb7576004504e81f6026d80be316dde98699220fc0336a04a79c63b05e7055919bc83e5823139ebf017a57772f7d1ce72298b298a9a1d38c9d9b74f2a6daf6876c2d8438a760600e5b9d1e36a136de583ffa5ffbbbed8459c21ae9cdfc6c8b2feb2c26b655a633ccb019d2499536134bfc4d54e9a5e5884a6b643ac98d22df77bf182b6f9b073c3b66de1f254ffb52b8e592c17b9d735dd1aa9e8f3df4e4e0e46475dec7867e87601fdef0f5a5266ccde982c1f4ad19d5b2d03d143136621549d94811f3983aca325b87afdde0e8ec50c60081c47472fc19d772358f239677ce24e01847ff5fee00fdc15f3f381872fe6d825810e1a8005f4362269644f7e72e8ed6a67773e27397918535f3b47b6575845ae9d2f235b83f764d248be4aae4cda70097649f396e7f242e8c475142f2a126315adba76727e3bbe83e182f478cb4517f79a99c6e8eef93ed7c13add5f7589523ced6c27f032881d65b3bf037018efda3b0f4b52dfdadf419909143d23c026eb53f134b2e28bb100e8fea6e267213874065f789001a2f1776237459411237753103fb673238be0d9dfc91c69838bcd06318fe74bc418ffe495146eb6c4dd3b3a312278a49790ebd771dcfda1751c3c5f5ce21d08106b6d9eb32aee959a77fcadc6b0b681039efc501880096a808fbf263c177083e8e51fda3324551d06618745cdff6757fd83f6c7ef9cb5918a9f92388a6b11b1f5aed929f72d33abc285e702c5efd009fdb48a1b51ae58de649920f9f3d8721111b931a796c62268b3e672c8db9144d56d25790635accfc335908e902349cb1cd0cae8a59c54bc98c3a4828dc89c3783d5d3d62053211db03534cf9ccab06f6cd8175066985edd00f144781c48f2d937cdd196b71de218ad470f07cef0b5b2c01c932fd86f770e6161cdc115eb36b0f69ab0ebab3949ae3089b1c66f738e4922f67e280ac694f4116301d5762cbb9c6255f392483be73f1f1dd30d64127f021577765c268a36d1387682fffbeb24937b974e232093f99c9d1d694fcc1510271bc01b8d5d45af33d9a69dcaf65b08e3c4fd95bd2a93869118abda49ac8950c68f16e14b8521af47ed042562bba8cb09c7054268c5f3b9620db79d41979d226a2ceb5a92dac12ef97b9da4d8acb9bfe6ff4e2acecd4bdd275475e0b8de1f40d5448e384ace0b98e93ef3db8e6c027bd1e7ef7bb61c8923fc0422d7ef76f2bbb5b88a0434afb2a042a8db69705b390e9672dc69b77348f8c6e033be550f8a70682870e7fa3c1502f81fe748d6e876b2c787d8b5da21f93b1e30d9c74399be277de74680a6ccf60c3df259e3db2d5bae0a34bcca483bc91771d8057f91738c22f54b136ef27ecca760a40d0e2dbc7c15ad6e1f18006a87c12bfed8f2e6b0801200e1e410197146102e70e73b9a2af082af60b06bf5491bb486062ec9b523e177a050e7ac9533783b6d99813b1b282027bd0eef353e90370feedcfb639b0098136e10494f4a2818f3ee9ece4ebaa83461b8989d311399f5f8e5946ee770c0d234f7c081008b4f248f19a615aafbc3e424231de871066a9b5ff3819c42965b540bff6889db1df3a4d6f75e0cafceb50969d438b16149e79de591cb5c4259a500c3625a56ecd599f2b30264643fdf762037e045c1105c58076b75559b1beaafcefcdfcf7a88fd1a8f78d57b0baf2508e5fe8188057697504b9defd2c1b6eb2841098a61c93ec278844ade4075365112bf9eaf02a493e455e8fd1fd9849a641143e730bdb59064365da30cd18a04bf74a56a0a795c0f5e2493c0c79e3429c98930649c833e28f9ea200d36e509565b663e051d1c767434815dd1258a8021819473ea2a8f7d3ea967604286a8eee27d01a82254d3ff254910bf80dffc07c79d0ee505302ffdf532551a4d2602062573be368276231da90a0330a3f08d84c3c92690a05b913b961915bd9bf512c0b449071ae9a2386afb3465e1076398266c4d4e10dd1d88aa972e852786158ca9793247b947af9cef4de02ffc993dde68f229ead196ba35e238963ff4ecdb5a50b9738df5844a988cbd593dd189daa460a45b49506c6ff6059826ca4fa61272db76115c537942de8be712fef29fd9ce28b872a8bb5c27b39595e1f2340aa1691949694855a27106da5ad0ca4983ce14c249d7cda5cab3c5c3eece32a97fab96b1657a38e5afc32d8fb2e6cb9540444c0ee9aa94da751a032e9eb13c04971296d2a8c3c5ee0bd54b51f5fc60eb8ae6719e700171dec2d642bbb97139db0596255b54baed516d4b12a75e383de348b80735930b75e85a8c1dde9040fd62b43c7a94356f0183d77b5fe162683138e6afdd5e130b045e3061183a1ca4f62c85e5b2aaaa71535b6bba0c2a24b890b123149e54aa59e58a9e15851ea16933b0cfd363b0a7cf13d35cce4ae43dac0769b5f8f98d0a5b146e4f1c1cf528c448359f698e7555a9ecf21ae62d00a40e1ca967fee6035fec92fb3c709fc17fc7049101f3ade71f4aa41ea37c58219d19a9994b30aabe35cf4aea549e9b256eb195279a45ed129d2f7d029652cd2a2698612a45794916c06fa474a20131029b0d21ba12e734faff68942ac1ecae99479e5fb485091bd4067b16ec9d95760406b621b6a7c5ca25877e42ccf5b9c426e4a9eafa132f5dfa0390a02a094dde67bc466c979a06412cc672740593c287db2048196486352864c4d49898ec504cbf1e2fde3e98111524db83a5421ee5a676cc1300740f9b3777a187e7dab9dd29abbf94eeac5c7ec86677b374c9982ec75f192ee72134951f6aba355bdf4cb8bc7bcf6c4ae5e79ac2f017ebb0a37e9c9ecd12fa83538340c401803ab33159977b26a0dcb9d676bd1c4a3d014facfa42a102b69c90be299049a0b5b08188b4d7355d4e8673db733a74dece33c3a7c03bb64cbb96f9a399a7c753bcd6854e6e5d64a6414d01ab2edc2ffdfdf20a6b2f4243add1de40f4c27ead1302ab6e00735b83ad11d14deeb9ba0d7cdb4123928bb8b97f9bf119f9c7bc6b7a0084d2b33d340daa03009454059efe7a39b874b4ecac7c1eec96798db195bde8b75b83f514cdad88d92bf90e2f85db5817b556a177f695fac7b113081ed3a6e4589d8a8c25d91bc5044e3dce5ee6f2dfa8b5d34ac70db9d258a3bdba8742078faeee510fd4bb6f193a32362500eca9af16817e57ca45afa884156c1c80b3acee81597a709427327642f78933dacaa4bcfca90700b7e2f8420af87f96f8b7313049719320cf03aae7cbe9f6889b6b9808fd86518301f52d4aa672d50da555953399703b808ba2d559c1a4041664a57203382e3efe60a84e816aaa0826d45a090ffec8d5e73c41df862988c468022e529e0a914b2f2d08301aa08912c1aa93839b1723ac5dfd8ac0d1b223eef60826b58034483eeef155f1f11c1c784773aa0b0340604795161c41c42a9f5ac6d8f886cbe5b91702a7bfe5d87b83343895b339383ed4dfb35dcb7ac3e946936f1b320f2e8aacda27b1f0d54c8d3e98c2bb4cfac172382769be92c38d923c592298470a47bf1f4673d8e68c90ae7b2548d0eaecfb284fb3ee56d137a896962d2a93a13cdbf2180e8751aaa118ee22d273d6571b162add1ad1b44e0848322198d3fa41dbe1e7f942e2baa2addb7bfc3f0515e1c54692d6c119cbd3ebd17c1d8e5d2cde39fa19f55f3776af0f4effa7de5153cc15b2df19bd3981238f26b5816bad1e1b352f4e384bb4d0fea4fa9a3f62dad0389a110cf5f7ee2cbf8f8300e001c749fe9cdd9719b16df0939fe4b4e48aa140cdbbb065302bebf183b15f7b9840ebf572e200f20aedad5c32823559e6dc6ac18ea79f54eb99af73dda66d4f95968e10871b89055cc2f6b445e289c2402e16e09b3a0d85c44282bccb894a9552f4042477f9ba5ef826afcba86561dfcdbfd17cdb1257460288436039b984c8728d0286ea9c7e3a116238a9911933c392c08871987ce7e7c3473a2a13c835e234aa963f3a637125e99802b8024abc4508424b64f69eb1a5dbef17f768c1e93d6562c9afda19a8ceef24bff01bd0f38af3ef7e9e003cd9492ebde0de1963e83d8a1cbe993a18679eee97b4f21e62635c3017ddaaca15c807d2ca0efc7362a04e59379dca099127c8dcdb66b6a7ecf0433b293d1196fc50b26fc95b5b9e826395594768c8a06e195f5eeccce68d93f253fe6a6e417d32ed72d2b6c06c621bcf02f2ed414e4f24e1402e39958419c49aa321218ab63328a0bb32a15e8de51c71e2041bab1f00aa3081e4f82769d16b4985f00791b64b4b8a4042756d5709f84136774af30c8677e1c45c265c2641f1e8280791027f057b02f636909d96034e94f36b007c8b199c7e64a558ae0ed178eb07183ac658aea8d5218316d15dd31c91f61a844e4ffa77b5da8b8f9bd25733a3d01acbba432a607ad871a11532ccc55251b377dfb6ac169a80384f24a2755aae98d9efdab7c96d837dc8432927dff6a7ed1f3867962a795710f1c1705bf792ab224530315bbb32c3da040985f3a5495614362386eddc488f18d59fb4c0b1ae4d9c46d8c54cf58631a6febbcef7bed10653ded0eadf7fccde9fa068bd710c7abc879dea2bf5b2bcfdc381995e876e7c16fc6418dfcff2ec03b67069acaf1399f730a6ea5c989b7988e0898f4adef997ea50cd12083ad2c7266c9a95909d3cdd9ca46c866ac4d20c5d03407c377ebd4de66282993c9398b539482f0fe40d7385720fb44d472db3cb5957e7667752fdb47acb21ba5e00054324a5e250be71f7a1e6a70efc43b8e4c2668d522fb6fdea26dfc38c06517a2737444df0ee60870c303772d75d691c326f6391b61f9f48fc7739cddd2efc3f85776fbb9f3aae39fe84ba2d808eb8ca17d6bcb8e4bb1707c3d5b725cada940228f5d0668a28be6c62b71af5312e600700ab90b6a183f70a96eadbd71a7a23ffa28bbd42e0704117bab8b7268a06b629a7d53c6c6bd711b2b3f38496e978ce36fbb5b5a64b6c2b5e03a7877c7d00f6738fe4e6be3dc9c52cbf711baf0f069c9920c0b7d1a103db6bb24d4491bd52197b88eb3151df8e4438d69b3a456fa9b27c4ff9dfe92eb0764e58fb884afd06abd42b2a7808bc601de01518f63c1c5a119e82d91ab82d3cce98c0de708e61383c07b9b59873b680a1ce597799f4cf39b6bf4f702c59ab5a4af03ed9e6f47c8b85ec2c07f034381c1a489f792adef66f82cd30c6c39f6df041173169c801cc0e7c4c4869f723090e5b837c028012e25c6ae3173bfcacb0875786dd0827ce0ae53ba033d82542aab2566ff2ecc0d7565fa305d4b509c145df964543ae3c33f6c6abbacbd5ab1881862a6fffd87fab971ff9a75b78f1684d216e0bf7cabe10fd6a0ce804e3c2d6327645eb9712b07b529f48f437bc93f0b7fce2485a0b63d74c37775e57810d1b3d0f9715e90ee8aeabe323b003a575131c0d5ee25faeaeb98a67d7c6c2329a7da0f862520e9986fc59c824fcd9478d1a1e3c3cc7939b2ca4d51352a7b10fe19a7aef1a25c54616c098b38680629f7aa70e7a201cfafb4385026fdf8dc3077e6b7eab35f2ecd5daca3962b362478324f83e7ab9a3218f1b0811c4e919f35538c5f38c80d3347ed8d9ea0f409bb3169b8be75f77d2b91e0da238207b2dabf7ea44cd16833d17c75c0e623637f024489473522defe85cc6f808c4aefce9177d6f81107ca36b76d83678d534eef40f661801d6feeebe42e55fb38ca30316eea4c44ad1550bf03e198863c04dbe6ba67bec0de147eceff47ededc6b0de4b8a5a896780fa56b171bf9f00e3ef355296e6978bc714df9b7fb0910046d0e5429f945184430d3ba3418e77f3386eecd261d9f27cfef8c01d5ef40e982cebacb452a63c1ecb76199fd07a1b4bba8294ddf0a8b438390cfb307e406581a3f30c6c1f8f7e96ca508dbc15bfdd7b0e61dfbc03c54b72bc35dc5a4aac3614c06a9da2bb839b8dde9d9b9ec2fcdaf3ff89fc7e7d43e7ea8e0af9312fa08fcabbcda954264944c898b3b275ec6563cab55f70e1f3c7c2945de58bf1f14d9d8a1bbc5733af75486b839133addd0742851c43f211f1420fa035ead458ff023287c5239599e85fa1f74249f81c39addbe5416cc65832336fb884b01220a602c83fac3c0c7215e4fc394d9947bb3609e20d4ec79264d74ef58b3051cd6cdff4218cca8c9532e503d648681d263095670ad1e41479e9edfa59a4cd0fe88372361a2152d30f0284da0f57a476a71f30b75c08afa736ec380f63e2f1d7b14f2a7e88fcb225ec5b301da60b4d1b52a8d5f80ca11a99f50445c76137be01cc531081bbe729c0173dcc55136ae3155097dd01919773a756e73c977f9784ce790e1ebc86a893b1d298114409cb3cca1b6ec2ee58af48296f99980bc5861c9f18589342f35fd53f0efebe005b49c05f437589d15d0bb8931102d1c74d7dc45d782447eccf6f036f15b837504dcfc82095e2299b107b3c01f9a111ba0770c39b961bb923120bb7f5ebb4a0543e65fc8d202e33daac40880efe307cead04ef88000bdad3504bd766d4f3187abd69e94724f9fe93c8ff0661eda05ddf91841130396cb95506a089dae10aa509cc7c760923cf6b719982611b00ae432e0b0606234dd4bc7b9ab992561f19d97a5ec59560d82d07501f44b65d6b5eb6f7df41a3665a1df2eef26c0c674149aec70706ab32349cb1305baac2499355cc60086c48b9cbd267831c4ce1ea88a385b7e24dbd73d6ea52b6b1b30294e6f0c6399e23eed5174cfef6697f9055f4322b6976162e9d684d09b9b1f7e002c82cfafdd694b4bcfbb3a8dd2f82faaddb475c2402bf65d99340200e4779748920b9512df37b9d00d8eced48aa7d29e7b45441021877a1f219be8bceb92c5b8f90bc9bddcf80ec27ed35855bd19ebc0bcc5eea41b905abf86d2cd33c80d6242f96de361ef4e7de70aaf366c50b4ca93de82a0be174fc956efb7ac07d91f4d27f9ecb2282c539132bd34ceaaa479e77e67ab7b6cc1ba25650e925c688833fb6e781b526141365a1cd7883a505d9de483e3e3d226598127c95756f1e0bf9d0fb798810a88f2b8aef1b58921c0c353f38845767cb347ddd69c6ade3115fcfa387c4e5da00b4a9ff61e08b7d842dd64139cf6603ff5f17a1604b616a10367a0ccac5a37f31c4688702f48388c77d0434fad6625b04ca66b430bf142836a2d8f31aae8f357d8e10b4c41215d68152957aa9e1c7fc622960e7e22dcb6de918d61581b61511217872573eaef20a984f07e6554eb01f5f386f4fca62e4c919c016d6f8a627ca260f7d483330e5792b141d633155974faf61f327f3d521765ebfa3e84327763888fa9a264ea1bc20d479f4394b75c09a3c282f37e3283fc12e460e7671ee06ddb69be55237561fa7d8b3db79fecca66c1eed0c950e7d320b397d60d758c40d0bbc6270b59651aa15264fb03474c95c22cb2f961a1c54d8debfb27798763eef961c221ccc84e00155c767547c7dc70b0f2a5b3150c49a2846bc6b32a33f3d47297ce9b809f98676a36d74fdea3f73fd6aecabe7d4399f8435c9a2cdb9f2c1f5a9dc02d2ba0b5c73f5e770a053f4931756a3444d180b4c6803f610e0f867401be3014df4ea55cab8d8077be7c4f3813ec18aca3c82a2d8bc0faac7f730d62b3e5198c592f366b105132004d19c9e5d767992e73674a7487f056657474285079ed7117e974d67be66fe6251ba0876ebb98c77a644c73ba1dc7a7f594d3f1fdb660145b7c214256ae5e6a82063be3f28f19b16d5f8c61251c99a1c8f070fe3bf23f6ef7a773067f6ca2b4e0bb1b28b5d10837fb49936fd58efba8aa0190647c24423233f99c544379cb80fef550deb5211e9474a8eb3e3062aa8264d06829d1cb2ad20e0102a011b37ecda7a10fb08835b64cc4780e5cae7456e3c9300f18db4a1965143861e337cfca38aa2e649875a5f5aef2b925655dc3446912af6aa618d7226b5fb033324c6a2d87185d6f7a453c19e5dfd3cacb72ac038bf0d04272fcd5a9ea5f03360caf93e9b5760e256ad7aed76f39c889a8cde9cefbdfe49c261a0e6e3c4ce2cb2c4f1473b3b430fb4f65ab6f5abefd0e98f4c54760225b12dca20a6f47f3516e8489303f6bc68fccab1e9bb96edd2aa89e56a73a9fdcf84331ba92d2273e4050b14599cc01c89d2680f82ebdc026115b171712957f14c5657404c02e9e8c5e9ee3bfe38061df85c89101bd7a0fcda4eeb4b762fec249c810c0703a57162267e022b8f2bc7c4c085c91a6d8a31279acbdd5bfcd46f4a688b0bf872bcbba312788e4a887add83bd64d1c927f3bc49f0132c0eb9d3437e009c6f5759f37d0f752d547a1ad8eea5e724ba565a728705aaa144825a37b1daf863548ddca4d91be2ec260b8d14e6476c83a2c1c38a326c220657a6c676290ede1533b4edadd9f549345c9510a1416d2c580d370ba990877a99cc90999be4d2252c00709d47bcda33027acda3724e122883bdf3e6ed1753e352fb0730413c06bdd940ad0a9a78cd8ab2f4843ffcf22cd12a31a6c9a6ad2c81e745ffd80a68cf39e24a0b500a19596df5dea150594c64c0862b1217316dac279b3e0a1dd4f8485195059cfd5004cbfbd43172d01355396b955b3cf1e0b4561229c26beb88c922cb5958b09600db3b5b0900d2391e6c52697c12c634845a4c81badeda1e89511c58077a4e6ecb43804ec0635b56ed193c065f66de6843c89b500286422c750fb67d0be1fa30ec3ec27a88c7ec0b70f44f0a9c96901aa1b5bda0d0b0e8c37e13841960edc35bd56480f161996c8ab89a5fd57febaf623d8bb25d90e1ba3150c453005726865487bf46044397496175703d780e2375cc5503c60b8e953028035db433a1f3d2d0984330c46fe16e4228f583ba6d697a82cfdfaf31546fa6d4a3d049bc715809f8cb85671f357fb1857c826bf9ad13edc12f756c3b6ead4fe5656672173783b6e3daf6ac3d0eb341333bdbb0d2af6613d482e55765a494b961dad62f4071f3e43fc64b698a5c5eb1ae3e4c1f598bf6573476e176972b198d166ed28a49cf385887050bf489116e7ce2a0fc9e28f0abaf54222c1e6e6559b0b7eeb43cfa602f8cb80ab46ad4081af6f856433c58caf51d1b6f450ffebcc9698099e75ee493a4b1d0be4806eca7079c8c0da4ee687bbcf8b818ae162aba3bb8ac454c262ccaeb6a5c03580f32ecefde922076508a9c870c349be088682b1bcd4d9832171ab35579fe810cb7d41952091175c4fd235b3f91b716c2bc0452825dbfbf9761bdc25501d0eb6e4c00785c039a67fe0dcf9f40c5993f21de9531176e160f359b7c7e50615bcecb46382b5dd55e4f22db114c4080241c04105d45d1f97719974dc677250f3b0f52f90ffb01561bc5cb075ac8ec164099c8fe21f3b271d854776cd19fa0a52ee4321ef2f78be2dc899df8eb3a1ef95358016089b72ce88e4e553fee4df967dcf2b25d7aabad5076e057be7fa14dc85fbda750aa15ad63a18d0ff641b9ef4f3f9dfe2e5ce68fbde18f3403b5fa5d8e5f61abefc0dfd2d0660bf49a78385a48d258933cef679667df7ed80648d0f966f3ee789d743c7fe7b327581ac0c73d9238e62b737e6bf9de9fbf755748c2333e0c35798f83b8106a00a5cef9a09e2433ae4ce20e369cebbfd526e7b3cd20f57e29f516723ad5d2393fafbace582f58d7ceab32d36de6cb630b4b301668a12461a25a36b5f2984d14a9d94523784bed59e31ccdc1168d507968aa82ed671954d43565b8de6c603c82bd53e5b96b912f270a698e0a25a5c7a86cdf93c52f2e7fd5e7fa67e49acd6ca39c297feb4b2ef5bce560052423bfd437b7dd4335ae25276bd59ba03a22791902c783131a05d24bbcb9cccf8edcc378061515ff9ac6692822674c0f0813fe41363ec564fc3372022bc470629d82cdd7e6533f1f2ddef22d28355e4853c5744d5bf0c863b2ede904c4b1e97b5d3bc598ec3acb7b8ad596f19b81fc42483e8451594034f9ec6ebc3348d7d4dee7b10a8235a2a625d33a860e6e9ac99529e745d2a19ad9edcc666e5c0de9bfc7640348a572e1139dbf4fab3e62534d69e73c13af352e22bcca447b12c3505cd7410eec294780703379126b3ceb97281fbd7b4e0cbbe80a6be7e1be10e37b60db99a10bdc80a5d1e7768c164151d62ba28928aaf0f091574a6049a027c98cfe88cc8fded4e43d67f9858140eeaa14ff84042e179cd2d7d74a0123a014762ca27f6040296bcbcf5b443d6be5579cbcdb77049d4650ed992daea321e87fb83cc10643c35df985a056ecad7187daad7c889008ab0332e63aa8c95e6e2d62e59825da69b5df25254f6a84353264867438722196c3b11624186e90198ee264419bc74dc543ffdd8c1380ec8a715a0fb27711498f2674a8cab90b2d4b0c9d850c60ce40a7e8b84cf4dba005b57ed109691f5fcccfa5fd8458162e658c45c105efaa24900ab76b18af1c01600476e5449792b00fea6e5ff50708ca68ace01f5ce33532efd07641567afe4e2a73d905082b9eb0b51cc69bca5997223823bd77951ecfdcb5ae12551d96a6f83268e0eebed9a7c75d563d53818bf58c6f9d9f3b3eeb46dcc5da912cb17355aab0f967585428b640f89484e94a0d8bb351cca93bfd9906768781d6329ed6ce06642ee09311932acdff641da6063d75c45626331d73c25552eace04c90a5671818f86a073d3d077eaadf0d2bdfbff70c4b608a4eefc67249fda4214e78db253a315b374480e6216630c29c301dab2090dc28cc0c6ce00d7eb048ed963bbb8c87cebf1a12b7b60fc9c1dc102046e8090d6fbd36a5536b30c04d7bcecd81784c974d94dc55e4478f2e2c75f0f074b892a9323c665e818ef55d6bceee9f32a30dce48906ec294fbf19d66e5fbbaad5e857377f52f469e507ff45bac56a127139f1c72c640660f217cba78cf5703b702ec089d52d3f934073b658cfef7b294c647eb254cee23c619415b3550c5ab922950652d322e412a463a668b78d20ee05818457f3afaff6f81262167e8acde21d6ab48ce39a3222424e00f06f89f67664e7a79a20580a826b08344f6bfe16849df2084ce6e9cbefe673505781c180fff69ea04fa1e6f6ff2264e62316cd88169407e5620c588060bddd491a3c528121034c09c094097689bd4c33f3cedcf74edf43238a5c00c2251f8845f4264c9f5e2497572e1891552c18e1978886158ef4f8d94e4724e360605f191a20dcc7a413593994a21165e16d4ad507634cca6d73668f311cd22f2f639c2f96ee6cec0937e3bbd45502e0030d690fa594f1a4515a9059b482affdbac538c6ca2137e4057d9ee7a9e5cb59bfd94225d0a02e19b4e19b7bb9bf767479da6a23c114465057244026191472202eb7fc595937c860a33c88aa56ce9ce51e7e42989a245e2f0f0d27d3aee4f44f9d668d228db14e1f1ab67c895f2530f62efb9d4bd5590f80cf8fe9c72b60bd764f2c126ec224632def8da425e9c9c4c961a229d0c6201c87960582c6ff699284a5c2a89a68d7a4ecea4a25235653f12855a2a23203557376d496111fb7a1e88506db1a5ab40d6771328c5243d5b2a17eb2f75dab17410958e18b1050713cb05c16c19f2768ed812aeb2cdf2058f407b9c756f88dc8bfb85a442f6d5dce841e64da9a145e87bba3eabb153360faaa0d7cab0d65928be0fbab89c741c017cced8b821d9aeec7a54f56f62aa5e8b191e5bc946103406959d7753e38a0fdab8fdf2b90be1ca3cd7bb37fc1323696ba531abea2baab559cd429f1845e558e1b2c8effe777f5f4802820bf2f024818071f2be8b43271f0266bfca0afb7379855253aca161e78e60ae4c9f393478b36a7add0cabe4c444c999cf69371f75970a0db011b28ec63e6fa024ef65e58e12b2d802a15c1899f74bbc452775a0d8be3f782db7b75cf43461874911490b1c72e6f5d402017f8e51a2a79db99a25b2f743d7bf2149c21f112ce4305e77424f1b0ab6b0b66e5dbae72c4484d0c951b7a2d7d74a6ff1115655c4d2b4370fa73897c70d4e38a3f90fd9629ddddc2ce2ce58a475657b5542ef1f43b6ce90d868273b8a92fc363a0f5ba3c7977e52d685c9b8467c72d2c589f25d3176e4c235ab862f7c5334f5cd093cf01c36f6c93c00d3b9916d4159e513e21b5d63747d2a5a02df3c61a864920d58106e0d189113595d91a3773857b1a4953e96da371c7d102466b49103d27f64303fcb6b78a20941412bdcf3348dcd0d07c5714a9bde3a0961b8dcd18683c35949340894d0b89a5e5b3ed28173bca5865a9e85907e1ec12700f7f99c6d3ceece1a1576f7eea2067fa16c693ab6ccc0da23ac3eab54ef3375846f0645405c796de49ada63d1db9248b3413b4135a9b50db7b403ce66ca2fb5c51a0fa1417a301ea8855dd23aaa7ea3c68bc44dc6e3beca118cf6c032e4d1c08cbb53e8451472895455021800a2205ba079cdc50d63eea04f0db521be76bee5866c3d2132e3d883e38ec84dd326a89b2b9a467ca342d17038b1dbd29e4e61d1de573a0e930a81d5a2a571dd2ef10ad06cc10a923060e823dcb9dc290cda9b0d27957a8b8990299fee91ec97bf54446cd3471baca6fb736f16e6e9294a97772ce482526d387838019e1382b5dc79454660e0d910aee8dee52d940a939a00ac5ede8160d1637dfbb3efd8fd91bc1cded5128e008ac8f6153804f93979bfcfa48a4e9a04c0222e3a9b88ad68e6b66626690525282d8721cadba0751281515c3080e527c4f537bd6e53410275484a856e9b4cb8e3a39b1d0a2c29c4d4df78335f10a93b4a0c9856cd26f98b9b2d51aefb2cd56dfc34505327d1c7857c9a0c3e5e5764632bd0ef492551c5b7e89a07a76945013d3540226272a9090fe3334a51fd410c073f691e2a2dc4745765e7183a77dbd666c03c0a48d540c3d016514b82a686dcfa8127a781e1dfca15bfca7c5b4d6464ec150232fc11f04a0148d143b2a5cab06942e7b2400b75d2bc5d0321aa63a22958167dc9cbcb1a81a4e0bc79bdffbc6bea1bd7c38416a11a094608a096ae876c7e164ce93d7a2b9d45ad13c0922790ce4162e7160dac6c0cb08ab4db96d565fb6768add7b9e2197688e8e90c4e0cfd847acdd9629561416fd59b314d387d33ae13a716262ec8f90300ef96e7f74469130222ca182c175a0e50f33490f92228980cfdd2fd1d255ddebe86167c8eb9c1b0ec2b262712a99585ce378f0fe62c5985c3dbc00b50b525a80e204282926a51e4ea51658063629e6fb0701b172577e33a4f8f70f52712a1f9bbac534dae236c1517075c6434794677430c4f4bde5822ab5d2676e5582b8d15a6ee0672a821a22f16617c3d205be7b40a55611c22416554b887a50f7f4d6d2105008cf763f2405e7c32fb5709702f83c804b794ec75ae5d5306527c711fe8f6c42a735a1abbdb78b1f4150525fa22c1141acdf5a69959c338d5843018a9062d7b85068cca08d1d247a8f52d104a8524f8292d9795f24075140eaca211ab081448b83fda178a225100cc80b534dc1ae70ffbd34d901e501c6da8a237021f810c6031b0b47fa788ccfe5ba168c521e5808525ea1a746ac856e87820e745a9f8a8c811cb13e601d19b8521191e31eb7a011078090faecb33252667b6ec7b163afa0279e082487a988ff57d71bf9a77fbab2a6dc0ed610b9ae66d6a4c7d1374529e294a4d6aeb352707560c07d8c035e08198a5a84a1ec40a14d4e887fa68d86a11f2c72ed4623f57ceb9e28e526266d42cfd41b7d4251eac9dff3c9c0032450aa3b4c987e7bda9a8caa4a84169d37ba5b8b31625a6ba530adf24c78380ecab773fbeeca1e19b1c23122cd8790b2791d1539992a6b01770f95af10c99377cf2548d2a4218928366ab28cfe85da48c24466157e25e6a390bd0ed27c33a381d0641233a27dee34144a83d15992c9974e298e58b68f3305aabb3ccd8be546e3aed841e336aab42ce788e67eef1de754e4e0f49b84859e4c12ba9335b876d557988340a68c0f7f368a663b1024ac905221e27452f406a9aa20e53949c160d4422710fea4f46891b529910a571afbb31fdcef1229d66d92be94ad9b020574cb4a54ce95a3068e928e35bf018ed5d603820255f7c9d994fa391f0ab51055032db7412e502818b013dd6b7266e4472ebc6e4c7504381b8aa888076e4621be955619e88193b657eef16981b69ddd6ca790d12a198802aa47eafa712944155f6b526a0dcf0402162f8dae501b154c5e8217d10f3069abe8a95b1201bdf7e06b2015fce087f61b555a4c09b5a1379fef6cdc8accc608a2a6098210f52809e48393a0c3a76f357c90f720665d22f1b7edc3dc1b8adf2d239a29c7d4c241b4f45ae54953a3e530eb104987f8c0b6cdc75879ccc4a04c19b0cbd92131f5be053426caa9c5873d9f6a1242d26b91c3714f92c485b1a62668f29c39265fc72e0758b89ee6810cc036429f64b4b065437782b0882b104dd5ffb6154edf65dd23fc6e9c7adc1e7506d4b4205f90b9bec22d8866d088a3fd43ffbcd4c57309aabe67fb23a2c7c09df0fd85f6a63d29fca25f95d0cbf0bbdb83fc728e0c51ff34be919d9f93663a520cebd34b3a3e7133a78e17d8739ea1d90f5ee72a3cda2c34960eb6d4d1b64fb7df3fdd041f0fe8f3d8f2774ae67d2dcd131e566f2cf43365405d750ae5ba642a2f45438ab0dafafa6f9f5a0c1d2fee61eb24d2d63341bc1bc30474ed278836947c2721d726d49be3638632c5cef1b13b4b7242af713cf2acc431623e8df98b39a0f35ac749061425402907a272499895545b71842aaff0624a6a5aa1f8cf18acdeb4df5b5a0d6e8e9a5e22a0510c0212fc9fbf2867d6d111696c20b74325551f0692158f1a2e1c4bb741dbe4d6b5084571140c9e029d18e24d9c91b9b11e2b4b457f8c4519fe2c0720441e6b61d559edfe30329a48983ef7c3e19541d92afe4cbe813ca7e15246ed9e532a776c8ff76f1160562e5f3902fe8a1fc3cb57329e8abde8b83574853639147aa07db4d86ac50de61dadadaf68217ce69eda1a0132bf2e69a281cb84638d00e40764c245b867cc4edc7fdd6a1dd84aa0f450f80d5849afb56efc2e0d95109a0f3919edd32657788febfbc777cd22a27eecf9a0f83ababa14206194ee4e0837d0f83c69aa12fe32f164682fb0439ca297b1af77dfad3d0d2be88725540f4db14a8435ed3e908b7c21b42feab3ba426491b75fa1050e0f6a9f39460b632c4e5b16b6c23b665dea586a911cd8b4ec7266ccb17d6a5cc256545fc9cabf26b6e03c09530844880b33b604a2669dd52393adb58c6849241646c1d3615670da328e7bd48bc83c202b1478fcae65ba6cba3c902656b220541945c5c9085194cd7c5a2672f0ac18e3909b51826b99d4088d5f1870cee9925aa0f2410bfc6c454047df600c5afccc9bb2b8f26b4c8da9187229d7bc04652a578e5298580dfb961d94cd84b34e8bf636c0c8c2966ca1248d79c509b370ca8508972c6c589a04fdc549d2c09d400f645ca9cf61f8c66eaf6fa660a234a5610f7e62af4d44c0ea94dd4574e61ddbf711d364da50fb1eaeaa9b6026c159d607b79286e660bbf30869989a92990d7dee75314f62cc157615532778c148518eb2a151a9c0951db3d09e9040b453b42b27c1d3436c6c426f19d3b1ed923109c3ffeca8f940152b5d3412f4204c7ade5f4e059cd40865259d5747179aa43c65f7d29a2cdcce7706944c2048b9d1edc4e5757f2ceeeae4bbed7f6f13ee1c575af2635d6a3408ebe606e0f16031a461cd9310067322aafad2105deee820f533b271a30dd96c55ca7db57840a2f445650fca0b4d793e0e4448c643c1e91fc0274dd6c4cc204c386bd7796402ea56ea2784732990efa10d98e53d5c3f624ca440406bd9702e590f3b1bec34315da44c3d6c345fc3b4cb196fbb8c36c2061f104ad7f624ac1f292af42067804055d9873b5bf086b3c8d24413bb5b0135d0750e900988352f155c380ad93079fa4b59bfae93024d2fabd9e9aacf1178992f2e303673aaa0c085aa05c7208224aab568b2a1036a7b1db5b8a1b91f45bdf851c615c42dbb556459e5dfe03c528bdf3378706062788eac4f35648a82a5dd438d348a3ab7f1fee044dd0de7e90eaead32125cce03041aebcb96d44585385306c982dab9ccbac54eccaf331a7630aee4d77d81463b28f900fee6be50b55fbe87592db36286a96074f0fdf8eddaab0de52ea76cb01a9fba8cf3504625b81ed1485b59d1a0c53edaf4358f08634188283e25dae1426345b00a358ce8995ec098200229014461a2c4bb3f289872624237c9350650a358326509243f25ffaf51369b0013d308eeed8a0d701ed903f96529f893ed3525f6aea325ec9942710849f5819ff24e0af9218c17d4e0de5883e7e51327e38e063ecafe0acc0261b168524afd5a7fda2bb90b1b3c3e71f15f164d244714665d5d52135c7dc2849fca1cc0321be9f8b7ffd6ce69f10a58690a9152fd1e40e556e1e12162d8fffdd6841fd489264beeab6d2ae71b9e262b3803eb65a0135a82ee28f8d199c00d158226810494514be3e45ac2577fec205183249c5aa152cb96100d889b9bd6305737e106f23e8f2790d3049304e497570019b54c5cfcc4be518ded9ab969f1d5192712da29aaef11627ad04a6c6c6678b16252131b1b856b995e7ae4b21f9f3ff9fb0b98ca216a733e6c2ef513c7b6cd5f82f3a0f9a42d6bd26e31d40ddfc7450471f7bdee9534168da0fc6d298a8044afe6385ee9f02a24f92101d7fdf392a5057ddc8a0abab52568fdeedf7827d1edb832301de64828cc89fc884af97e7fd4c30f551f1a286f24e3be2dc002ab5d103b37e7fb70d771be0186fb1e6bef73c426c0fcb53efb1263159da036a7a83b83529033487e4cdba609d63eafd633becdeb0b2f43b706c7fefff24ec64dd380b50cfc213221dd8f2051e01bfe60ae301c090e25b0c25ee4f9a5b340d4d718658b864a3414b4a1c370e22357d8d9dc33b1f4a0b284c97b7b2912362656984f44329494794d323394b198003da574ac1c0b6ec5f4d5f51a5f2827f39c466c805bb869ec4229a517386667b71b52fc5416a8fbba3192a30924d16c675af43655df17f4fe7974b2400544e8d57fd3dc806a24e610a8ac734427d6571fae30371cc5e5fa43782eef617c33697469647ebd53fb60009473107f7240fcce2ce3d06c24db8f08b5d1f72b0ea4c2c5281b25a81e4929768328564bc29b4f0ba0d17d053590bb49e376ebb74a93d4311d11c0a8dfc1632440cd327c1e3533f9dd100d4fdb76e1d93d48007e46cafe57644c41a2c6ff5dbedbc5f60a83f99251f809ffcbec4f8bd54bf48579bc3fe67b5391950d26121bc1513c0404aaeaee8f58501c15a50d99502f3bf3120c8f2318f86401463d4795b40863c4803426621907844ee8cbca6451e303aa793cced71a1c8123041188e27634e078bdf33078901abab67607ca37b71045ec7fd45a37490891145ad9dd3b930ccb088d08be083f8264f9510e19e5f8e2288e6ed178f340a63870546e4c6e53729a971939ccadb5543299545424a5f11497eb531cf36240a53614470eca19687cc9fdce236f96e7b80f4f694baab1d19266ecbf8fd16e15698634639222cdbc329082645af598a44832a41ad28c3449916648349e4249411e7d1591975aa553f17829be271f29477d8f2463493579cb2a25cd64f22365e8f3401fd2cccca609117869a68d97a2cc23d1bcbe71c921c3244592a1a49af7de24cd906a3cc5493536b9bfdb8488a7d4c655ca07778334f1794e86cf7f643ae724e5c8dbb3d624459299243b2989269366de25d1e4f74d1d07c6bb3e387ba4995ef14832736e33c73449e160a4996e81bd498667f5d9cfdf6076991099249a4c31d20c9e26444c7a4833120b728475c3927921cd60a499cf8c199814b020a4234833930612c9f1493397e358324e7a3121e23af256f164f9dba4a9744c9ef0927cd20c698634f31c27d7ca7132b5965a6a4d8898a44833241ad24cd5d3832a1a59178646e4f1b2c003da3a638cb17da01e258dc8c3928e45dac84fe047eda1ac24a594caa794ca4bd2f818849476d388d6c797f2868b8c8c98ecef7a46c34829bd91c8603cc58289c93cb8a20cad1bb3b432855294fdebf316d9335aa6b2a4ec19b46164459bc6f58e5116d9cb08c38ad67b06a51e8db08d84655957c6269594528b46bf9d71c60ca487152f453924084a63dc5c4ea6a9f849fc4a43b12c3a9f5ab9aa669cb3694cd9488484cc1fa548df0dfa6cd88831ba77f24ea27c369e8d1fcfc6181eb5555555ff6ef054b736aaeafdb8eca5c24bf431ade4254adf644434d252b4b5d5dd3d865feeb5c280bec2aaaae43712501572b604b3d4f7b7a1b76d551f5068442bb83d99ca7e20636fdd55bfd230bc411f2e1b971a1934d83f98eab19aafcefd6e38fbdbbb516daa7a77797fa561b72aed7770372b53eb8a28566bf58f7159eb5ebfc2aa27f37917bdb56e410dc22c550422ddc7c2e4edbbcb019516c220d72accf66b55df8e68db679156ab57b7d65aefe786fe5616eb415f431feb411f6babbbe3aab2f5ed5f56adeeb2ac77d755b50ac7d262ae2e27686e706caa6743db3890adaa7a2227c8901f1ca8aabf2a1e2fe2a5ea495abfbc93eaabfa18b6da5559d694b16c0d727d948598140fbbea54f3543b10b68eca777a67c70459152353ae777c4eda3bcde32934c6279d7464310f5553f112a576ced93d75ced6a1a959e7c47864cfa73b54ea60ba684f1efade9c5dc4a5470691d6e954a5294ff1d4c8eadec9c1dd4a251d4c53944b9e32678a69bb276fb352da3a9d9a3c94e2d1d3f7b16d514a27c5266d1dda37a32ab3997b86659fcf2eecfef5c1175f3ae6d53c73ceb7b3755473ce4bab6236d101f223882905267ae7fa9d6b7610202f260f91d93bbd73cdad7ff858b95ec5470692e5635755abaacaaa6a1e1d3aa8a8ba6b55c95855da1a6032d77930ee734e1f5e67adfe69172082c6eb13faf9de7b34568f545b495ecce8b7921129922351099e93a48e887030677d31d3da7ed63e6b9fb5cf7a56f5ec6bfb1e0e70f09e7defbdf7de8b3ea79cd6f279fdc4f08c7ee1eacd07f3a66b9b23f2aa5aebbd7f6bfded9ab55a6b718cd5bf62157b77595755afaad2aa7a36ae4aea5c955599d88a523a459d438f2ae795de3f95f8acfc7ff9ff1105d4f66874efe8464f4f71900550865a4bb57e917c141a499d38082fc97f69fdc7fa90f5235f6914a0d65a3b2f6be757d5b45745abeb6789b5d3da92b75b0c6bad2da9de4e6badadec9c5a10404c6be9d4e8bc7ebeb593523a9f526aed652b3be9843a5204c24420ac1bc504c2850da4fc010869adb5d6aa2a6b2b6bd249adf5b6aaec57d55755655154a3caca4a56b2aa66356735edacfa49344b5a0c61bc34e58f60d19598bdd7aad7b557b5d65ad4d6f99956516b2dcd9676c379f9b4d65aeba7fd4c739005b6c744022eb0b6210ba8c51487d2e0dcd84016583127e7e69de0ccb73a605119c4c23a28b497f3236748102a5f4e3b69e8a3193d9bf972ca4b5ad25a0b67adb3565362968601b92606c7028f490505fe29c2d389e744dbdfc0633aa95896e984c263595875a178865d7741205ea788c38462995c5c8e890793ca9cd6f479ea162a9e62a9407ac281e379cb344d976399542c94d3fd0f4a96587c5ff1cb233c992c6b5d8ffd0633862f4bdb60b616ca499e4e29465e3a9deae9e5c98ad69fba85753ab9bb479413d69f2004f937a1946aadf44d35519e7a45e99df87fa9543aa1946aa9e43494d3e9146ff0827c2af9ce45d98457734239c033d1d3a379419efbd5fae9856d396023dc0e37bc642badf6040a814021100845a620bca158aac197c3738f4a67a2d6d6974fa9e9c625878c6793dd646b28ad74d21a4fb9dfdbabc9fddbb3a1ae4dc135c12da18003389453cd7521c40b5aca2e3cc5a926b36b26179ee2cf5ba8896e5e4153b7a8a1af7a34a76ef1de6dbd2e29fb2ff803c527b6938f4a7fd39d1ae8bc3927a69bfcb71cf266b23eef24fea5749443de9c13399cbac5e773659f2bbb2e0c0d257fde7eaa4793e147eb5336e79cd34d6156f874332dc5d4aaea56d8555d2de614dd869115aed0686831f44e965f9dfaad53af68ecbaf2fd0529dae0065741968ff909b2fccb4590e5df9311a7ab5921cbdf5044386e07f9702a01852c3f5342968f1521cbbf4ea713ac6a051f86962b0c2ddbb730b45c61baa154d5e9d154f47493b50a1b873743da503e411f3a954dd04a36219b903db2099aa763dab88e933d459c16fe89d8323a27a64d75ef27bc6fde5559ec4cb81da0732bac87d63bf65bdff88bd3f0237c463c22d69645a2954e5ce9448e3fe5d45e209445a413d35aef192e47c8982f59beecf19422f609f7ead39b00423ee129553e91e36ff325c797314ad978e4336670af6824a39c47e4cd63953db288944f48fb2d9b98d6bb7462734fc8f321e05a08d12be0cf8933186ee1084429a56ca257b82c227f36e62f9e850ca5ec11a25b58d231716345a3d52d3a47af80d2b2d78537182e48c5f12be944d544b790b2091aa30e1359d8428e4f1f8c6ca257c4fa956ca257544bc21b9803e600ee20c7b79e4e139da35bf413bd027efd1c2f59c66f1a39f613dde2a1c0ad880f3fd179fc0b9e92f12fc4b8e21260fdbbd8f214ad736bdbe7e93f31bd587fbc6d692ef74b95c00bee679a3f9262faf29e5629a5ec97f39b86d24c3c723b3c918522bfa794de3b1afd974a9d5ffc0248c829c6184d28279e93e984124fd1744239c5188100afa78c3c656e285994829e7ac57c682fecab462deca875699da7b6c14bfbaa6df57acb415ad1d309e5e42a1d5cd77539219c8e0ecc1042748b215e5c971be2c510d7e52e07d824aca56f33f82c1c0367e0e58961789e98087c0121f00b2fc1cdfaf873bea49fbdfb8a37f7d3b137b6700caffedbf58e37538617b6788821aeb72eccd21fb38587e81511e3189e3797774520e6c643cc216c7d970fd6cf8f33bef748dfc9e583f5f2ed46f374d66c8096c4c5ce4fe8477f987d9a5d158dfa9dce10d74ac1b7971237c891516427c4062bc8d6ada6e1296fe2f9291306c27ff3a7bb82e4cf4e480e9d6c3f9fcfe72325148540d0728ec54a4387900153be98cf07ea3c1b2fe6f98880cd1f6debfc719de732fc917fff8fc5087ef1c1db086ff74bb008bf77f2401ffde4fdd3775f7d5591dd8be903f6f733adb3a3557d4c730db0ffe2b1e8977e58bef954e4183f7e8c57730db01fafecaf867dbfbcfb3efb4c7398062fad14351d4caefbddfce2b31163843420cf7ec42bda44920c898634f3bc852443ca619222c9906a4835249a77fbbb4d8890664833a419d28ccf197fc36562228cd3f01b1e638221caf141ef9c05f5ac37e78382b0e3cd7a0dafe135bc06112a841556f8b556cb921056f8d54241399d9eb73893cbb9ce84a95cd75ebfa1400a4fa7d3c925ebf804b4a00561dc61bc86d7b8ae194ee3f21bd975f90cec9d06e631172ee2651786bd2dc6ed0b3b79f7d3d06b780dafe13530976aa8719a1b0fe6dd907932aef3605e4d7d376e8c7fbbef3b89cef36c3c1b994f175c1f178fc6e9d73c707ac7f316d73ada876b1dcda37934cefcce32dc1b0f59c3b0288418ec1dbda377f48e2973c52b5ed775c5bf5ecc75efbdd9bdd7651fc3f0cabbec75efaf7876bd657d30ec7aa00c036558d69f7bbd853d1bcfc6ac82b520b4a06559b54a082df8d6abb2fa6a655996552ccbacebc22bcfaa1fc3335cc4cb991501fbf7ba6a8c7eda9ffeda7eed55ba70ed9d5e512b3af19665b84be6720d127babc588450cc3ec3f1723161fb33d2da66d373f6f310204daac088437970ca2f9105e7998fd189e315cc4cb23bfe222ecadef111008e3ad4d2ed71d6a505f8ddf7fe47e51280e89a03791f19feb1ec1defacdb528f4c1db677833614c253bfdf71676176ffdb973aa1b877169f1e8376eb84c4ce58fc23c85f062f1f9cd5ed04752fa4e30bc5d5656f1e622b22e9f3e4c2e2d4e034af86eb84c8cf5985a616aad9fff5cd79c3034e70ccd0c9b18e893fdcd308721ca56645123743b14971667aa5c4ee5557b3b4a9595fcca1f8dbfa1d069c9d34964c91a4828a1eb409a1b32f0c5d407039fcc0602bd98090281640592a107fd9c2310cbee2c9924778e645384cdecb1fb22ede33cd965d96703e4340eeffdcff7f3fd7c3fdf3fa5d1719343521bdb3592e690d2fd6fd4a6fe6b127041fd2a87973fedbc0f29e9b78be2b7514929a4cd399f047449e68b40f33f77e2edfecf00a430199114e045ffa02fc03f01fe07f0afe25f00ff58fbc75b0ef803800180379a026ff79a6014781b8d7009de9e048fe0ad24c221d0fcdc0c9b158bac1cdc4a413724d1b8bbbb4b8bbf33499164dc4939bc21de5ef6ef1c6e5343a271779394936a4834ae49c00557562fffb95f77ec3dfb9b617ee16a591cc34d8888ac49854ef54deb74112fe23d44ac3791ebead4755d105e16c4feb2efbe3e89e10b57efc4d60a6fad83cadee99dcb2713629c9d8a73fa9c5d24ce4ebd4e651676ef65c9f86e5b47f6ef9dcca3164c4ee3514a479ed27cb3905f1ff909c59fcd4d11e843a00f7671866188442251f41a5ec324b1f0de7cef3dbcb9b4509af7ee654967bb37df7b23f6ab772e00bfd16bf2dbe849547efe8bc7e2dfdf2b097d4630086f370ec98fe26df4af7d0eef1c0bfc0078e75808e049ef1c0b158fe29d6331802f79e75810e047424f00cdb9930168f45568f405a0614dd39c3b79cdb9138ab718f273c001c01b05004e81b74bc2781ba1c023bc7d0926c15b69046f2653086f2af2e24d855efcfec253666b314bc5f05f531c144700bccee0c5bc47f362ec8b292119c122f8cecdcf3b37c2eee48349b0732713bb1388b7517e0ffd8826d29c07f4196d373bf45941cc62f106e3fb67e3d978369e0d0ff9b4017bf27c29e99390d247ca41a2a994d2ebadaf28c59b3f352132b5b7c97f96c59b0911d89134439ae9896170dad6d94114e79cc3d2a54546760ffb9dc93dec97a57c975bdb5c8ecb51a23c1429a5b42c95186ff055783b9d4eb62112629c0e13e59c3ee5f41b713a4ce530bf5915fbf91753f9577330d3e83b91d8629af3932dc6a3da8de62c157ed46b585e43045d2c8f55a8aa2a0234d5cf4ad21cd446469ad1901b44c5541add1ab1944de39a66545fa8a8984ca5d2bf734e521c1407a5194271c822744846693ad7a73643a4cbfc505131994aa57f160ee327f15fbca7341407b5f1944787d0e774ea9bb8bf5f1d440a55eb21b556aaa3d64a73ac38c521df93efbdf7de93efbdf7de7bf2bdf7f07befbdd71487ac41ea7b5a436d6af7ab382e3a64dc647f4a436b688eec787bcf3efa680e4fb15f9fe2a03972fd8dded01fb5d65a6badb5c69c5a298e5e51f1901fdcad7de4f8eda37f780a9058f10665ad5587036cad35340765f1dea84d7e56a536f9d147eb4f3ae9a493627aef68f45f2a99a83b1d95174e1d664971d4f48a7e5abf9d4e539a0ea283b93b16a363b8adeeee6e5bcdeea636b2d69cf8a30e913127cb52c964525191329bb3e7167564b6dfdddddddd14c79c2ffd32e70714ba19765576be54a92353597e08249dc8f23f9ed381eb3d597e865d3e24cbaf3c88671447afb073d258fce6cb9c3161a6cce3c07befbdf766b51ce6b170f1a3dbe4e8343946952e7de764995b7e7d99e34ee407a20fa8b2e250c482c390de71014f992e5e0841048c0cd4de9155dc3c3e86112df7c553b02368c0c8e4b80113d33b5a47afc0ae0cbb2e8b072b0e3cf48e209a070f2b3dfc0004059270b7b7e0f03a784a7f498509a525c74b0c237a47ebb078b856ef7019690c0c56befebdcb42fff95a3feef3719f985a41b57e3e235048f4a18b5524cf5b3e9f4ff5f980de6980ea87e4f32424bfe2205075b39657f415c5370d8a110cda4623a292fa79120cfa111c0a69db1519e1b2dc3e420897e5a644d86b7c0c4f9955f51fec6aa01769776a59086fa0fa8d5bc6536a55e586f194ecdf77cc0d1a1b1e39686a649561b7fad6b00754d5c50423dcce9b03f202882028705da2cb84bb99ae104c3cccebdff7e029f0e2e134ae4be463f4583c5ccacf6bbc92ce9420a92006fafbb55ebcdd7099985a3fb54e87f960967e900c3de86576d1e72dd76fd07bebe79dc6a7defb19f93af26e422ff167a4393fa9180bfdc4b7a21851d083b42d0b1de1b2643b2e4b16c25e23a3f7c232edf3212d9b1a06c2db077b0ddce229945e17abd89561987e6bd765f90c4b0947b89d9dd7f018cbb294b0835a168d5e01dff21912c3af3ab28c9044a3ef04624b58a782469700b71a029fc7303c9b872ca78ac45bf633cb66e867f6f91547f90d8505f49f979795a2cfb4ede6e72d466058f62b2fd33697338261d9bd19cb88e8dd0501f9a25f71957c3fc31b4abe788be1212c4538fb9be153b7f8fc7c2bb58fb65ddf4598d60584cb727d7cdfa0eb5d78cac4ef81a080a760f602f741d94fcdfae0ede253afc8be718ba76458e589f094faf6df672086a758ffde887ee923f2fba671444b6cea15d677fdd6ecaf3c5bab101f3091bb4676427a00244367caef01f263114c12f7e0298d55bc64425159f9c153aa8a2e619b1f3f02e1be8957fc3da571abf0141d32e0295bdfc8efdfc720e23d0c4fb94ebda24dbd026e72032e73626a9121e79473ca39e59cb2ee9c93ec673d7c68b99e045cbfa1c07c7a12420bc29c0c9a4edde2f548f88ae8a63d33892900f3c341bcfc30109e1ffec14bf29f34e1152fc9fbf0dfc3d6d71d1ede50f276b9b79a733b6cf4ed575bf5ef33ed2dcebec61a5dfcecb7f959fdd3094ecc124fd53cf50a39f1e9358d9ae7b6b448a306dd0ef2fb6a403b776c93918be838e4f810cf975a753be49c724e39a79c53ce096b0b87751f2df41f2d34ff4de9e26e2ec673e182a75df0642e5c4cb9e3220b698f65740216793d4e04c20cdb32f86fa334f45be578b2ac2a8937f9623c87a5c30e3bc70e6f8e09e8bf61f16176cc72e18de2cd3191e7cc1e3e966196885918b623fb076cc639e79c537e8eb0b3c41810e58959e257d74bbfc9dfe8cdaddd4b029f0f5d9aa5c5f9b66712201be3c79fd5639ad4686e2d86b4cf4b0dfba945ec2feb571eb5aed544a314bf51cc3f44e0e1e1e1b13cd65adb3c31f2c4581ecb1363adb52c8c4ec022afa78978a9535ec2cde3a5b9659b7bf9249d37a43977fad9ae4aa7b53b35e68a7be7aa2c4fefc4142a201495601001879c224f51de6088aa7796a744eb5d2ff434d4ee4596fd4ba35eb2ef1c1465f9f52d69bbf47eef68f43c2ee79a4146464646a665aebb8d7294f92123f3c35ab7aab69540f06c5c6bf46440d4afff68f4ae3cff68a1c73492bfda4829a4d5112dc7058196481b7d48337912ade4473414365a75f41fcde431ade4af8602a435ca04c5a8c44b218dfa49fd116de427f5451a8906fa1527d1b01fd1ee7f40d484423fdad5fe9df467362e17eb170b628c36b0e6d1f80d1819d78189f112bcac1892af2826a2ef3a8f086f37538ae2e99b883e85888a9e3ec9048548f4fd232a7a27d92e8cbf2221c12c94c45a18521b98853e09c52cf06326c1cfc66df86c442ca631e7219128f39fcbde339cbafb570b731559becff0193ea37277d700cc1bbd19f19120b03be53217f64edfb40eec9d4eb94ceff40d7cd1bf773c7ac7a2a24eb93b82bde35055a36f69d75b91967d48bb0f2f1facbf7e6a1587349166cdd0679ae857de28a489b4a96da69c69a0bfdae7451ae843dae7dde503c5b651aef861fa4ee8639a43659aaddae5495c9af5ee72e128ecfdcaa3afa2e4a5ee4feda476523ba99d54efbc75db635f8c0cc020e202f255fdf2b7ea25fef9d7cbc74cf92b747f6912b8f10e5fd0c2156f3053cce2aceaaff95b351fd6b0710ccf7008192b7d27847c261f42c628618c11e24d88215e3c199fcbeeb1975ae52579d9b76d615ab49526bfafaa926f69f16dacba9a5f5d0cb0fed2ec639af598e6e0d580f95567c9808a4e0cdf3f08df5d11c2a739ab2f256e288d5280411e90f7c34bf0f9f01284f8e5887e7b39229297787b39f4ad73591fbe7bf24da4a7f80a03e045d8e4454fd2680acdb913d13bc722c5570f00cdb91391e8536824cd448b2834e74e44f2e2182fdfdf62bcf8a287dafd78318b88e445243ffff5a8300bc9c38f24118baf47ceeb414d2ad0fa0d7e77b7f57232edc9f4b11849f97a3c9cc7e3e1bc1e2fa7e7e1bc1e2fe7f17838afc7cbe9793d1e4e8f5e015feb17162f2a12bc5d917b2c1af5dea278ca564251144a228a1d45242faa85dd774c82b7cf5434e39dbcbf7262f966bc196f46c5802046df3328bd7734a23d23bf1176ef048507f7de7b2fa7474e8f9c1e393d727a8cf8c8122dd9bb64d9bbabb30cfbdee06392070d1e1fcb6a2424f6adc9eec61c4207210fd98d449665b63f3f35f9f79300fdf52b1efa159f6ec5e9471f6812a0bf5a12213ce351a0ff6811a4413f991d69e08d27e331b067c0cf5f3f5fe2189e230dec6fa6597e42a7fd6bf1fd0fde3a678fc9bf176698253ef617c62e8c9b4623d155b65644bb185686ce4e4dbe5b795ae8dab10da41d9103eb49f0a81cd85f79712291d500555025222919610fe59380be0404fa11487e09e849403f02023d7d9185d50aaa4098a5aaac5a816a05aa239780ceef8d32bdf43dad2e1f2a90d58fbd7704cd0f7db5b0f710e8136fbfc4ac5a599526fa780804d6a998f109e8c42be23dd889780942ec292fc1cd53f4a69c7324f6310c7b126d44c35ea4611fd29c3b8911419a732712430b314b05bf8059eec3a717d24a299611a660c6ae7fc1793c2513fd0b010040824ff74fe1ee14df7e711885074fd95c4e36a94c7730649becd99ffa5fff91e7f020bbd7ec84e4c02083b21392830305985fc6c0e8f64b8b28dcf7dbfbcb8dfb9dbbffc8e4aea23d0cd6a9782d72c061461b9cd08214caba8c0d82a064340f74787a58303164043a6e641b9828411a44807a9a63430b9838e981119c403dcdf920820886a09e46daf15860e3062fee8220ec48b59464bc6003948c03eccce046004050324aac5063a005992adca881fdc10bd4e003cb7a1aa4c11014d45ae28c2beca40025e3c9000938ae26bcf00303c2041b12e8608952663dcda1a0d672a2841b1ba064b828d4a0ae1a9460a343132d0059503bb9410207f53487ea2442c073837ada028280b2220b6a8e095060c38c911e15a4e106f534530a65491ecc124c48014a8675a3021cc8080d41417c4b2ca8b915764a40837a9a0080a0ecc8825a4bb42941097080925142820f37a0e03fadc5944291c05110531416d4422a184310c6807a9a5bc30a50d6c482dadb51630734a8a7b9257280e2119337b8a5b842769454550af7588cb84506ea0c43c43003f5b401dc407dbb4c81cddecaa70da89a732bfa7ed366ca9ebde793922470bdf515b8b085ddab00961b0c13c58029b3f83f0c654497ca211610408620e0a06c176102107ef8ce0b087c6cc12dd1230227504e0d3030326d48bd2007013963785a4b1f41046fb8024a462c01ca51e7a5311c61874e108460dd63f11cf53452bb1dfaad18e0a4502011c0e4a05e911e3928d71c6a0129b81104d5529181043350321050240d3e40bd77ad656a0125438403d4e36107520882724dd811830eca4aeb69ee47123bc841d9693dad4100022abca05c33e940594a9ddbc13941899c1c946b294c8092e1dd41ac5341aa80adef9400c2445555d5bb644a2b4adf0eac5331e9abd01c8a6a0ec5c3473ea9dfbfa59dc5cba1404e7eefe2858ffc9e102137f93d2150d0913d3bea7d898711e4f7e211f97d0e2af0ec844061266f3ce446519a237c94427f3fb0a40ab4b4186e50f5ab8fd1d902a4fe121c544b090eca7ef59d9d8acda4d135dcf7bf8e853bc31858a0c4132f6841097a50fe23c7a2071304d9014d1361f0c21850feef5844e00b43b450049b1822c400e55f722c5c84008716d03401084928c211283f11824304c747b6ae91b84e88123cb21382f344de6ef6df213b214ad0c81f9732011c1e5de25a389d9eec7f5d8b09e0e4f40a97b791ec50db5cde253b2d6a4648e00557080e8f6cfd6aedfdd45c726b315e964f0ad03d1f58e729b0dd3b468de4b24baeb56235b3bfe2d166d289e8d1fe755d50f3e17afa7e39e0c24dc8d6d30b08097b96ebe763d7cfbf30297bec49197e40295fff2ed95dd7859f7deef20146cd25c32ea2e39021e07600c2edf03e3e7c15a4881f50cad0c5eaf882e93c45b6cbcbdfb67598f483cbf47d709962972cbfe13f972c3597231ee2b9c4ee2258a7a25ad1e78c7d437dc6e85f4907942c5c2b0bd7ff411ae19b1e75f4a45051d2c1be981753617f59ef5c1098e6dc898f4697d6b7b5ea01881f82e021bf20418270212626262626860b5288752aec8b0b10e18ca0365e9ad4c64b13fa8b201052a7f049f0086f31e2ff63417aaf167645185a78fb0c4b1952c79b4a8610caef8f1ad41c435ad32be0776bf0dd15018aa35740dc2f3dc3df4fde9bbc112ec1db25c14142f85ebc8db0ffd29b3eabe4ad6176280e8a63a767e4d512ac53614729de4aa588c4b796e660eff44debf48e4905e5df49e90b3b566a27b593da49eda476525fb80e52e95106ef8a4655fde73146bcc1b0aad93a5450e28a5f5bd8c27dd68df039a10b5d286578214ee3d8b862f1a4b49abda375f40e938a9720cab35011e15f5eb874d43b44bdc30bd779895af7514741519127d349850e5f62e2f41a85894bad0b6f9e65fd9acef2eae3db7b798c533e98951fbc348296f626adbac070fd3d0b0cd7ff411ae1bb82752aac76b91af1646411334f19d9abadfd638c2fdf1a65ebe363723e1b30ee2b3f78098eb41e344b33bd135835f897cea5cf461ba05b70749f3e7dea5ce7a5e982449e97e2abc3d07f2cac7f278e371551457163e734bcc60a0f5efae1b150e127ef7fbc4b0b5ec36b684147c6b4cbfe4644128d97ba8899257487fd288e407f9366743c055f497b9efb7e7b162d19787979794191e051a49936404b86df1a7edf2fcac8739f42a7d1a9137760ad280412fa259d2ad24364b64e17699d26d229ec2f50d53a5a074eef604348f170407ac745aacaac0bf44e8ba7d4aab2b2ab6ff44eebecf4cd1243e89d266297b89be8e221daf954656defb44edf9050d83b9ec1b89e9e95aca4f5862b5b45ca3967770a9942ced94d0117eeaa554f0a5fac53b1c997fc607440e4956539dca6e6ce2c743fd76f21cccab2ec49321929479565d5cdb291fbf566d704fdc42e13223593a15b31698634d32b2aacc765c15e0dce65c1de0cd24caf988ffd8bf194597de529d9a3e12996cc0d1a0cfbeb22cd3c1c52cdab79362fc7bb793a3c8587a734698624d32baebf2ccb9aa42c901ea419528db516084e65ed169f78405ecef3419a21c95893947d39f93d1029e5cb21cd98f49810912f9817ec6c1c2f59590feb54bcb80011f87e26e5cc648eaa22a9aa9965150966917faddfb2cfdfcb6259963dadc9a88e922ca3352425d963d888e42b4c422f0b54425281e608f49d02bd1212931832f54e5e094935220a813e3f47d9639bcb4995e08d8e46f0f625532a7b7a7fbec5b4ab6dd7870897e5021284cb72f5cd07531cf306c75332fcac8fea3f7df156e1d6a1f49f954236c4532c26649114110c531cbd82d29a5e61d9cbc2f4a5666da538288d97e05b148508b7f3864271fce0298d690e2fa1f4507ddc6d1484910a4fe9d1a728e990ca6ff31c455244280e5a53290d955f4529290e9713848a8ac9542afd8f464e3a498380044921b2b20ea36e2c7ad0d73a41342050e86b9d28429845bee8b71733f2a24f56f2f5c1d090c0d03f181009e84b425f43d57b93d936cf046f94e48d3614242323d097a4483491b67d5e8ee45c964fd350e2b27c3ebeef91cfb778cacc400c7947b4cfdf2bc25ba8693ca556202de5dadc00d16193a3fbfe8a17f1e27071f552cb32acf1b3e13a989342ce25c253ba7f420cd34417097753b92d9590b887189595f918c46c6e80e8b0c9f1607a05fc764c8ede68341af57dd1011359cb4e880e7070c023dbcca9d82e9411b34fc64b8d19d0d8df5dd7cbb5a8ca0cc1edbca9e4f76e6220de8dca65d1fd71b714b702418a67c353fa75788ec80b0ab878361e4c2575a0e6dec98dcf86f364773dd4a50a6eac0c6febf0c1e3331b276f2538d93572efbded43746feb1819f915df9a47fe7cfd60f29dbcafa1970d23aab61251886424aa89a8c4ecd92a72c99008000000400033160000380c0c060362a1809ce8a2061e14001377a244604c9b88246212a530661422c6183002000302022392040438259e9ff7002c17bacac9121631e16fc2924eae9e90116d7ac75d604fac0208e5bd692bb97639c78ed5cbd4ef3c62508bcdbb201a9f37d284f414ecde79a0dd2a52d5121d4b77582202f1712c2e6cfb87f9ff6d5c37e5d1580243003455f49f963215cf93847e96c2b1449c6cf3a0798eb37a8a4932e7fe77dddfd85b66778515b7f958148fa4bfeb69bfb1f2787ad0a1a2c285edd2cd047d4499cb634f132365aff6c88804622b5165f33d01029ea834d38d6a8305788d9f39812b981a1b8ae11a08f60110e656eeeea3472a4cd97dcfca131d359cf54869dcdd7d8843253117cf7e88f8e57bd1654261458e249d308f71c4ee33dec74950d95b94d728ba5c5d7e1dffec1795eab57e51bb8f7ed1ec16b12bafa2e2d21ca6270800f723fa0122591d650c73ea3a80b671da71d839b48d67166fae84c0d88720970b003e35c613fc930500ff237fcedeff057f8ccb8d5fccfc208fa015891bd04054191174a7a758058e91988d407d917e024781f06c072361088919c904e255fddeb4a4dfab51faf3999319428cd3c2a9694b873a50932fe2d8707ca4bfc4226a0437ff6818be26c3ff76c2e86f484341731169c67080cc0f72ac91fd21e82e9df5a39bc9bd0d9b517dc35ada58c8574100f7bc4c324c72cbbd51a6e8c09311f790300454fddbb3444cb4591368f901918f5597736ed29763dabd4302d56a0e6418756b12a65906dca9178756023b06292da78d72683bfcd6ec42f474937c32fd3c7b3269e0e5654040e9238a1ecd6ce5c76ce6d83787305a8a5facac1f2f846ff6a40d0e4a72a23c926cc8aedaa823aa7d24b2789adf13bf3fd27da883dea8bd33e3768a6dee59f174d9cab076821f86129967d41ddd90e23937c76910140b5f95007f7095597cd06a08741997b737388c196a2f32200c71f2aea03c3e11132dfdf976ad41c4ed960a600fe52997377d3ae5dce5621fc5b1505967069ee1b1afe25f412192d961f27332e09e981c235eb89b2e8d70e020db03415dd236e389d18bf4f7200f3e77d3cf959d023b3c186dc6fec9b6dd74cf2250686e548733efff6eb3b0d9089f41280ff8e9fb76d30febea58a015e0ed632a23eedf3e4c2f566d572fe93eab9640876e3579f2c042115785a7d706fa655aa1258727f162711ec769ec338b43df3870d1fe3b21035a0bffc8898aaa52101c7025e0617b8f74a3db4ac2249f599da6dc967736b9381aaecaea0c50deb430effd63d7258148ec00c4f158f48a1f0d5e1bff2a3b62fae84bfad2e80a4235c3ca1461cd85901230836750f0a3d3e7b640e508a809896b76032a6e86d262c4f0a8f51a0d48d3d19093058cf10b128f0efb04a2e6456d111e8b727848b9eda045e26c1c0021e040b25c36dfa813650075c5f5a7e836f0fe17d0ea484e07351e170fa8761cb9e8bde6de1968f91ffca7884d29698b340d9354ff3a6070f556ec09234a9ca3aeda4e0a9a69b5c9f7150ea0ee490a10ac9a1ce30a710b3bc5ceb7df85e72aca9439e6b8cdb2c0b035b3095adcd3af619233f30dce0951e056d20a23c2935123337d2a03f25982b19e1bb8e3c282627a7c36bf04ad2d26156c8536bda63f60490b2b7b20e52c2920acb0df843b7f1abd938b8918d0f0bab263991d5d8fa5e8f8eef89371d6718b4de44f7000f8079c7350db26528cc528f5b62f889e4d9dec08898e3a44c97be8a8a671b3452e86fbe7260b4e084f1b88b48b2fd9161f0d85d5c9d98c832110f8d70d77b509b1bc04c18985942ee939b428efb9ae6e3018f33353c454e14138110ae7e398ec00f16e96b5aae6016e2c0b7c286f3a1a9fc5d51c4fe0c486d7b19bbf9ec2fda19bd20f2f393436158ca1e04328131449392975b70341215922f37e2c18d6a179d78abdd5e30b83d504b64d0dac16f628a65a1f50fa33b13d75d61733d180423beb0c01ec65f6bf3c7ddab7de5f7071c43cb17250efbc63cf0c4db0f851cf1a9f8307557e6c8bcf1b2c443643d17b84751230474de387a867848f3539cb65c8c1bee7d0b4c2143e2d7de2d88e16c27eeba163f083df644f02ad848884bc105310f0fd8e10eef7584722514ac88b0ea9ebc2acb53c88f54ec85c9857c4b2c17b9b0732aba2c982ff250a82eff8c1dc2e7e752a7db18320a83ad9e6fdba50d84245a90612ec755c41c86222d7bc8010d7f1c96bac8dc223056f81f2ac22ebd17937204bcb1590f45ad807920e14277a0798fdcfaa2170a10d9ee9fa87cc5c3fcd85129fa23491212cc5544b9f86045b42943dd2f33f89ab38a2cf444244b32c55de84fe961f372e7f00a11f315c07dc3af93725f007cbe7616021f59232535a7a063babb8b8fcbdacd18a13c0050d6e37fdaf32056f894b05a341d039b5abac7bd55fc98302e6b151d3089b9b0f832feac096b6d24cb5518adb580b98a1d298cbc1084d2ab190361121386484b5b702fd5316b87287b6ce3f09048f0d286afb2dbc5967aaf9ddd5b1d400596b761c38eadd7b80bb7a9fb7e7f01f38441778abc522218870f04c8e10e32f71f923b7b551a9045d84952cfb99f76a00d9b3c509226234a16883258f6d0d83b4ac42dd396fac9fc5810b4f521022e92aa0b5b5d49634bb2211f35a8b15a51456aa0cbb79c071d566a71bc770e101f6a78a73d48bb5c83937cb61b28f8deedb6e54ad0f48450b37600bc21c027eb82033bcfb56d2e86e3e8389985ff27091762591ea694438504705757ebcfdf59ef386d6185346e04eca25064c35a37095ec5ff11164f9a9b57465b3e86f9a5dbc9b980eeb119d535ed5e06d77762e74588db03cc830cd220d64b659da1575c4537f3c384a5c8ba9df8f0985088940775014d3b6a9c298a047c818546826b2860d7e562a3b8d59198c1143bf592df7220c7662238e44f3c2a23941b1586ff2bff9efb5f45f336623132b226e278f6eb1397931deb4936fa1789104a1b69cdce2e061c721455b2ad8376ddf261a03e1ccfc9a1ce437dad91c48d7bc4559d4e102a7019a2e53fb5c56e62bdb131392881c2b9cb862e4e42cbb5e9df80d6586e5f1366b2639079441241e694b2efba69658a5b55ea989bc02ab168cdec46d0295df34745e3182a83b595895e180954e7b0d4f5b0e0e23f80a57a90902abc573ebe33fc507de9a5943f0b9c398e344b251f9ce3bcd4dea907ccee9f1f6653acffec0ffa35c8abbb5a20e0e8f7d03b6baef301857ce1f8baea4da9bfbfd171b682570a746cd9d71c4682108030f17801b2e0a05333ce10a3c2f42aebf700420715b84033c4f8e03594eda9737cc4afbf1e4d50e2766e8a8d04c0c284dc7a8f0c4df578d9f1fb5a71bc361ed2f1074ef342b6dc61e92913ef1bd0d6497f4cc97fa54020bf1c2981b5597e73c717394755561df5693e3610eefb49926097520399f62c3a02bc2f651e037bb7d8011f6183c835759424e6493bb5223201cb6ef3437afae78cdf6ae0abc66afdf95d6d837de6000038327543590a1db7c4e5a84689dbb7f5fdc0eda993a9482fdbd49cdcccfe443d0184e655ba4c1c26d1fb1c5a7e7687bc05f2fa18999fce5a5cc7e6ddd6338a8dcd61d735bfafb9d9a72c7619f80fb3d6209382dde377e99ab7992dc54eb1b958630e3f632f8460dacd3569a2f1ea11566cba3034098ccb38ccebcbd34c74b1300b60000680b3e67222f53a1fcf8c77f6e28f99ed22ecb0f2b84dcd9ae60a8fc0b0a33114d29edb281a96baeaefdd2e0659111a4aa97384e52d374628ec394bfbdba75835304332737a2641b8feeff66338485a9fb9a3f043836c6ceb5e1580b391cff10f28c780510f2009ec51324328456dd4a7391226ead770bcb46ddb24720ab9142a94add50f9ef89835cd49ef48cc23feca4288036811d2a7738e4c1f632baf562961728994ab33bec3202f4f08a3b81e0b84467b3eafb2d7df3a3330fb4062455e1240df4644fcedb5e3f8072a41c9462e70ff7f65533e2fc3eff20cb4a97286d1c846dba27244c9918eb8a1f8b85e516bb51149ffeb1ae101f2d191015e43a10b55e3d22648e659b9c113fd9913ce727505437c06eafafb451b1528161ffff3658077174876cd54e6e628deb1904ea5e272eef89ac5146ce14d25bf33558e6488c5c54bd4ffd54afcefa7ff7dcea5f848e0115fdbf528d5c0b4064298052ec4f497367560323b0835b729b40b9b4927c112a9525bdefa112d7a1955645b7fd4594428fdda002e0ac03ff8e8a53b1a8b71ec4bbf66f5a3d2df05911e01b425a3f369ac84105ca2b811c2b0dfb4b3ab2bdb7dfd05451518d0e2f1ac84bea96606b8fa295d740160c706d0a9c069bff4cbf71c06bcc4863b386646084abde4d81e4e2e7f9fffc2875ea9ee2b0c987435f1f3de2b840f70052351af9bbaffce89f84e31887863fc4f2dfc138980eca7eb69ff4b6af5afc82c7e6a64daf480afb8020d9300e85bdd5af05fd6efc285ce5f129f44510a2f8ea5bfb1599b639b27118c0d02dd46457264634c439d4e9c444d882a8868000c659c171582251db489edf8f296bc04c7c083b851c86b2e2ff044c25c7bde527baa23631aae2828a1b918cac851694be77561246298e983a4fed7562b2614a94f81f97440639073a606e7e8feec2e691cfdcef08d97f6c1c5372705c09d0b74da69848d77e38de3ddf23713ae092deca0700e0b3c7c441caac4a59229a26532fc06526bfe5f21f2b5b0cb5bc0113db2f90ea76d5b2599201f7a4f4a3ebb41c065a365e06958cac5428b5b0a6d3f4848abf7ded247d0a96b73c0b0701cb873c8b1fda9c1cb36a3b125a019251060aa238b0a337689655d0a3f93c768eca30f2810a935066381e44ec2c05fff0ff54746847a1338a2e5dc337e384b0a15c474c11933f1ca9fc646aed56658fa7bc070bc74f0f211606cf5e23b011fccda4c923828bcf94f7e9765a194b69c3f19120122d787f5016e2a443c68872998408bfa7c20f275245a452207b022792acccc0f28223ecbf537af75173ecb50f1c18931e189feea74ab7731f1983e6b27aaf134dc348ec2fbb82f7c1442fde8a92623b0b911af7190b05dcfb35bd1174732f6a6b37c5b6ac586743a2b03284f0c1a44e4a3250301d257f73b0695a516b00e262d0cb1fd0248100397011bebc171bc4c61f6cdce60d65974db6b7f8b3d61ca31d00bbd731a6816c750742b2161a80c2d27613c96d80c2f6136b8f9a519037d90615062fe51bbd011574762126daf2570f69a8a1b6943febde127895e5465ea46fc9d80668f2e7f827bd7b92bf3af267b06b68cabe7b9d2469410c1940b557f4b8e6f0f243e4cf204fa23ea079127af62744b03b1062e113e629efa5be5fce6494f7c3976d9a7cbf58cbcf8cf810a97327f0ec8380835e97829752eea714f72025b1d9e653b047040d5274c03ebd2e4d8a320c0360a5327d3c8310004758bc6d017e4e3b0b00139b91eb8f8ee9c40674ef8c7aada55e5eaeed8fc78190c22ec20b0e3598d7515079893bfd545cca3938b6b7c322545b219130ade7ac1d0938f17633643c8111a9bd3782e89228a658794b2926543ec632572ef210282700426d94fa247923a2849bc1804bae095df923b46c061c487372bc5af41befdae13c20063da71e7523c01571251a3fc39781e13b628d2b3c9db1f97a549cb4f2037ae0f94e0753c8468b18fd211deb27047dd305e174341fe8ce30885a193ac8c403cf6ba3672723a87cfea79e0d716d2155988ec37471ee486578d6a99903dd82b5cb66afb0d4a048079f088b639278ad93ed96628c2b006b6eacbe5ae501062de9045fe33e59a148b19e9e00d354412852a7c950dc0e8e939613eec25833c99f0fbdcbfd1a49c6e14d0891346d3955442b2aecfa0ef998ec44e7ea39f1648f9371f539efce0a1b10e2f6c6b0893553fcd00ab4d25b2ae5e4187175bc283586adfd163246b157206843817f8569c08bc007610497aed28e07d35f834c35880526dd9549c639924982b146e17c9909f0428d2692f57835e3d830ce375b6ee6194a20dc605314c82ee8cc815e86d895f1a68cf28299e083ef17914612236bd065182262db64a913ebf5ee2a74bfadbb03ea8065c2896280e812683fa527250be7031e5de41c2bfbc2b9f600bad68ac1f58b17583ba4cb45fbfd12ef401611a115fbc4242d4d09f471b4b1909ac2b3a544184f00a8e4485875bbf3b7c27d5a9e99500d4ace4a87957c8b961003d727c8007a23514ad04ddcdc13491b508cd2ff81619cce80f32c8db32c0fda7970aa2f2bc559a907c2440f2581cdfa404a3d9763c0b78de278d10e5478094ec96c71d0fde12bc252642b66640c8a01afeb54311c01bf7ccfa5530825882e293b421075c193867980c4024a0aca197f4389602e1033c3a721a5dab1bfa85af744eaa911aaff0ee03ff78f26d2759f7349e076e12f21c8e541521d913e8316231f8f48bca88d49edcb6f5c4fd85352e4ca7eed076a261db143f1c2c1aa524be4838d22dfdd87eeeb1f3a788a71067a987a5cd93aa6c48abfefca99740c669ef824162e667672ae552cab04363a623a30b161703090a1e23e7b15fec992d86af2c22df724e8631527e7be0132f8c0bafd3a635f92c1e655b3cba636db33957e0a5449dabdb0f6958b23685bfaa39cbe61d27e13a19d0fd04d4737dd2e37832b3ed7178763a9269f7bb621259d7b0cb0ef59d4807bb0213460fc64d5b356b947640a35d3d01b21b16066350556d697a90d834f14f000775d37733c59201802675043b76537ab48946d4419e55e1ee86015cb3b28349b132e5e72cfca3b4b5793830c33c3ac93686093946140982c7b24e153de4c37245286bc53890c90b8c8a4f2d87c5269ba40f279f984627201f9d7b9a7eceff93a54a350529d023408d8dbd50792b75c600c301b66b53bcdcf53dea94c6d6c9adc229dd8cdcfac8bd88ff7d34ef33ce7d5bf3db6c25708fb40db21369cd106e0265fabdf17907700c9246721b49e8bc687dc35bd678232e58503f2f36ae93b793eee94706d1dbd71698a6707ae745bad174635dcfb9e9c46d56af6d564b6e8b8e19e3f4f7c161bc5362a067de767322882fc27bb6e6cd5b65700421cddad44a28d7c5fa2e322cf06030d722fca98d61ee59c1cd007eb5012c3bdc06539c20a9b73afe2e9a0f8ddf71b0a871287aacdbe3d2b98b6c8a8c1c0552438a03ab6682ce85f9ff0525d024a859bd3d5539be15810c1ef7fac2556df818974a545341718bdad8cb87eb53fc33f7989ffe20af0046f647ca3ae128bd9d300becebb180a172352c05d7681b063447662af312f3b436bf24dd41428091c052136db1e4da0c97c046997ec9b7a64ed5f4d28109d7ba9894a5124a57def78af5f290fc79d1c88def1cfab73b1b086c99c9dad36bbdb22068f5f060811175ef102dae10a63a26006562ca110b1dd52680a8ce8784d15ac7b318567e97742a020a9d50b7ac183a6d93991a255b94d149a8b8192806b1c4987d5d24ec6098ffb832f1ca77ab9b1ae58b576830cd2a63de22e72e38729c43196659118c46805280ca2582d404f9534c12fb72fda9b18770a3a8ba615711be0d2105433f06ed828f1f23be2e98eaea478c971b7e4d279d0333a66a02023eee54ddaf0da9c4e5e73db6c55038ee3941842f981f56d579511cbe12e34ed5da68ec3873288226d53788736e19d28936b4a44a0b5d40f4755f18ec4394743f76c153dda1899b02a31cf4dfb5a7e1761d046bfe82c8b31aee456e237840db2c52ba304e6bd064ff7b76cd9de52f4dd3d7c1666bd506f71066d64437d91277ee587d0bf89f941d3c97025eb6762bc6d2c9e4b08e5dc965e4e8c7d49e9f90c1e31fa953a17bbbd03d7a541996006842e353315841ad202499ac5c15bbf4f91d0b193f572699ed619c8c5e6b9a29221902b01a9fd5336ef8a59bf0ab33985d1a191576503c4dcf8fae79f2c40a2f5f570cdc7376a1b33789559081d1b8e2e06fdbf4b790a7bdeeac5ec2e2e71c1c4d61fe1f2f0d8f6aa553cc8d1a2f7af0d76ec373efd139b56cf4fec2641901c1ee98980d728fb85424744f6ec63112b49469459e0b226f6f48ad2bb2ddf88a9af10218581242352bcc288860a26248897b376d000fd8a63f3ee2d282b7871661a3ace0cac09c65f3f4cd2099de4ef0a44c652e875cd7d0578dae3e47c2ae8e4262857ecf8ca820834577a5212b3db17a5d9bb92fb391e016fc5840ab7d508f0ba99576b9d2c38b8354feb163e06078417c921aad109596539655a43388eb1063d8509e01a14032b62caa7eeab3660fcdd5438d291ba0a46233c09ac3f07e27075440216eb9c07ec67ad413b328155d5593f526dd4798307a1dd5070cd01cd058f454a2e7ae659890000cbceb9f9c69ba45ad12a89ac393a13edfda21048cbe168d331f22531b1f21825a0690922ba2b8a62907fa500048f019c794443f80fc661834c2a695ebf76a44030cb844c68964009f159098f587724861bae454538a2550d1872436245205db426a7e90a020824d80d7bcd3d95a7f7c47f09f95cc23a147f95d96641339b78c6cda47c35a170fed8c0425517885310147fda4b052e46885587b985863df004b5b0c91978656f19ef9451ff480ce9f4fd0490ae14883ce8eb69a9b17efa12fafcc5fc5fcd1ab31824c55766e0157b104081e9d8586513d57be9fb5f913e475857ac2924d685b006d77aa979a045fd481d956e43c6de9c0ab2abafbb790b0e31f3d00222b7060f2eca1711b99f2a5ef2f98fac3ab194b9f66b526d55900c2e67d028f4e77226468b3a5f357ef89328a77d6f565c2bfed167d9c85d09d32e92f433d22d17f78e154f102e6023ca831c2be5481dcbe5eeffdf06ce524150956080380998b211682315e8b5c13a034ae2f553695310b4a28e9c3841b959131b718b8d70ac6cac49c79a8dc2d4c27d72de07ba4f8d5da7131ff0745b9f8de271a067e38f056c1b46ab1ba198f4cd737e1cd8c341cebcd9c0d52ae3b0902eee8f46817d21461dbbdf1b278c719a296e5be14477a42fa48cae5990e5ac7c54eb7128b285475c6b5a0ade16c402b5ab697e6e1188ac80d89217fa1bcc2604e514aca120f348d0632584e8c052f55cd1253b07c2e4584123eb684b0ed243eb1b4aab2519075ee395742e257e5a32e5924362654f55b78499ff547ffb278b5213588a23ad5e46c72c2628c9b166b39362f110aa763ec1358c56888041c16c3bcee63ac86c15016463327b84799f500ca7f7b1b930970c131960b4fa33ed852b8dab6eb86f00f3d5108cd65b2b6a74d04a1a44758c44f2e8722d37e06e73ce314d442b12617496b3acde7a686c8a90a668bc9066089d563ad152db37d626ab5b33ec20d17490644dbc3402d30f3585ea11bd3833d9670469e62d88d89182be636192ba7d4b836335b4e01808d6cf0b12a62d7ff778c5c557d12dfc4daf53ebfa7a4a9cb950be5d906aaa6ef70dc27d045032ca74ed60de61f8b4f8080f3a9ab58ef0ec790e6f721f9d15c8eee497d22bdf1d54780d6a11735765769622bbd084c18c4677682b6ec05fef5e8783047103acd63293eabf8c25d5d8757e5e29336cc8a7301b6418fd832bb4d3e3d3207f6066bba6abe1b305bb0bc13f7d07afc8a46dc7a63926bc3973522f81face96c7a9715a6da7af403d5569d546fffe64755f31d5df71f0c7943e6412b727720823bdea80a67f1ff91fb969719e61f3d96ffae2a4f38271de99918a7ee8b3138f79c6a9118d235938757783301fd06eca3bf4b5de4b4f1db7cef79419d0653b15870fb9b64a983ae0168f439ba61cfdf3304d5e593834f89d0eb63913b8c7e369638c07023dac426a16bab963e436a6cd31be63e1960887d4ba3cb8595c9c41a9884c36e5821d886f922f79838e414ddf032fbaf4b147f3e80cb072519b0bdd3e09a054033119bd8995421ad4606520208e41da745619c48014392574876ce6940f4dbda8c0debc9344c0fd3ccba59820b273b4f43ee298aa1e33d14c64112b2674583aa3d4a403bf096556c70e845d44dde4a4c15d32edcb83f345271b25520d694d766c0dcb6999859ad8d019ff9ac658ec45c94b60182c305dda74cc33a69e350aebc57ab017d58ae0248d1eaee9a04c089f6aaccc4d44ebffb62bfa209aae7d99250d8a3ce896bbd86a462ba307cf064da709ec5afa2d1c42ecd925202ba7abe710d3659ca13a13ce165a3db3e691849cf2c522317a29fdde2911d4acba08dfe684af5881aaf7eca669b8b78c00c9fbc5806a98f67a2e3925699709911df8583222c1540c2d12377407eb3974b9652429ddd74a1aa47eba8e706907c7ecb2372a35efc4ee033ad88ed2cec4e33a6f595fb213b402f7dd7e50cbd30e1d197ad7caf7f78a37d7bbee35b396ab15eb546ce63c74165e4454d35fc376a8757ad593b869f60a73e940e69c872edddfadccc36b1ee1079317f607f92e7973e681a816cbff4fe6ac217931044063d2a0fdec4def86debe2172c0bf48f5e371f9cf903e245081f13f348734dd13b3066101533dd759b68f9d69a5d60d3746b4d475ecc5086379ba77d7cf719e80506a34b160fdf6ac6ae26e173c2a61a5824e7efd8c408e24f1ddc354c5b8d19b32c6faf1c7518419a05cd445c4e417ddc981e296486623cad583660a3460f4aa03212eafc5a575f908dd0c7119fe8f259546ad6b71985a10737539ea93fe072e0643b2f75938c943443487e31b05759bcc3bcc105b4ed1be4ccc7f0f5b09882cdab5342f176e6b4d25b967fb5d945a271454697d758933f118426e2c738be2202d9c31425bd8c820c609421527a9e9003452add3e0ad6e9d779c9b6468bfe29cd5c6c620b1c847d7f6223dff67388cf801ef69352aacab7276f3b0a9862803b32de2367f2df233364b9d057eb17997377edbe2f66a7e387c487a44b15e18dad37de4ff1b90d0631b4aab4d94938a7f0a1a6097a246a45b4a82deeb94debd7164069ef8def110842d64026e344329dd6e9bfb13e1b2b0cf736e0255dd5064c8c902f30517d8b386c497ab43c12b8491262df22110996e3870abd01b80171d7967e79684073f162451e082c4a00dd0a9a9386988306f6c21b2d551285aa857ccfa107c6cb2b4747ad4c916e5c67940583ee03870e3e7e1c0c23082cf24e41921683f209ab0280477120192447a05f43b08089afaea1b4a86befb19ca301b8179b282b0fe3f8aad47b9ecd112501a341c5d077503b450fbc2096011d854bdd9f846d72820b5b73806fa9e76e162cd0ebd11e30e6ac92fef80d159f0aa0ab1b16776346c85b890bcd01a7a93cbdd7a8d9713c9ab87b8d6a51e7cdc4691d16f410279f71ca1688137aadf29b43c841dde27e5611047ffd2363fd39dcf8353a69bbb8991d50dddf25d0e4fed745539bfa83af462b65da54bb03f5c40e17d2f398a6cff7411b635339559d1b0a620e2981981b790f1b1cc4ad3df26fabd4e677140e495bea2c5a06c64ab81f23b7e60f657e3afcb7f24daaf30f6ef049dbc0fc8acd0debf4399639a966ff6dad1aff0b2083ec5e933da035d1bdebcf5ef82cd33e5de8f7b579768fccef22b60d694f518ce375fc79436e2eff62152a67982f032b1f40b10dd1585f0075e87d5e490546782e3ef66418b620c1212fcdd502b5ea3057e135344c006c0e3dffc54b427ca4db6bf03fd9e3543dd3269f773b9448bef6d500ea0b17cc72b284a84079cca8f92321c006db408deff2e9e28a0fe4eaf9a706c1d0c6b7de4c44434a150697001093c16e191a0fe74fc81b78a85c7f63a8ffdc5b4f846d8dc7c197c31312480a8b55244060bb512d6cd8c69361256b9095b1c9984d8c2aab8222a1a7f6fb2f75952407006cf50f11f6e5e68655fde2b6e4a5520fb4746cf23dc3a00290b0f2f16540d2363f46a19cbc0dc09082afc5e772c2d951572e22d05a87b665b85dc375bb566db4021c19b2046d781c5c8b315806a152369ba28ab24c6556188116f9bcbed36f1ffdeca6140c2b44aa204b403ba110b815281972c2af71e63ca8ab4aa5c51c3265784ae6ea79a51555c210a03ecb9f4a21903bca58ee4c2676f3f7f704a057d87cad26485a7dc90c4bc1809dd7ac3408023c54cae61a225b4983f6bf4bf715dbbce27094813aeb81c9134a14da1372a4e84e305992710a9d04f01bea8c8745a4cc2c873c69a0750812da3b1cc05b2bacecbd29c7356e5122da058766ad1af6c4975c3403724049c690192a26fd28c2ccf4e7b85037a02c8a9bdeaacdf2d51a68ce4dbb995eaa0c95eae56f7cfc6effe75be7603ac0919fdab8f4ba785ef9e27ee104b51ff463a2ceeadce6b0be2856155bb505fa128bada8c92f6fd90d8504fc099be8ef6cc7d543f550902671e07e4f069e46690532cd69001be2a31bcf18de9034a645b543fa59284f168dd5d992557490fe00ea4bacfb393b3bedc73db427b346f9d29d5bffd24a96203cc3de94c9e3b787b2a8d50ac9fa36628c58a73f12d1ed0fcf6baf75b2f09dc5e9179119360ceefa1f61edf9748ed22f068ed47cc8ca803d0445e9a8211af34249f340ee64eab09e841cb555c95e6dc9711e0dd8b1eb4bf3dc819164dd9be0cfa89e587493de4b6b876cdd174d94d255864955951537e5d5f977955e8683b83dea296e218b8964084a325ceeaf02c2d8fb5c0f305021a5055749cf9f0d3a3e1c5122abbb3420dc86e4d2686c40523967b07eaeb073484939de3d1b974ce230b4edfb0c88e51dc92af242b8b6e3cb02571aa9e6e0b73d375f6e1628e8f608d5468f6e074ec4ea8b15396ed0d924fa460c6eb3d23f446b738394ff7227fd1cdeddece87e810bf5264f9d6dbb4c0e1f275e2b0a0049cd3706c5821e994baaad6729b5d8b114991737245c6f3cc8ce63ab319db8c7535268257d0eb5fe06579250b2589cd6d67bf338e33a398bfb6e4ceac215f5ce761c01db51bcf233a2492ae68756e03a98d51aca26968ed32fe0b038a97a437251c5a65d646f57102f766f32e0666dfab3c68ce9e171e8b68d85ddb8730973adefe3b2ba016a0347758aefad953e218663d05d082cfcf41d00b95840006110fbe4016fad715cedff304a4523172e8e265177579c1c461ee9ad718c23d8b857e49d9042031b850fbe76fb7975b779255328eb14651b45313901fc6c565e8b108fb17bc318ab404f3561f068d46cb04aba401810804867a9605caf8e8e75575a2a8cb0e18f61f5be43479143561a53987e1caba716cb5f74158e00d7e01bd4f5670948a3104e960283b12222e40acf3ee1ba1cdd4e419f3a0e2b80d8ab7ab3b242349075ef622b4240a40da21474a108323d1a070de0f1bd8cfa30ac03870bb83dfd8e64c0fdcc0703df2d3819b843a6e388519da0fb99ccd09424203098dea4677c0aa9916863f81975f05ee5d933e75c823f214893326724ea29f6be2e343b60049db8b6afd7d0ec6fe10fa1cd36820e9773c59766dca90359d9bbae954579c5e8ce97449dc1dbe5301a9765c201216f056b2125722a7f64a5661f173e703e15b97833ecf1f47cb71a4094cd7353049b6bf9629ffe6a0e687950e1e1dc84486a4bc9ce3901360bd3c43af664d9e17baba72d55a895ffe4fe87bafce5a7484a943fa8af0ae8bb4340d7d585c0cf2f492b762323aed65803e4851e3339c28ae614464433683dc3545f10603d84b291f1b19e66edb894b9285b48a6ae2e22f97c9f265b8f8ca016870dae34b51da75d3f60e5de4d4fb350df1e4d2ea3490e84d85432d834db7659daec985f00e88fe2886492175d814773a1b5c787df9dafeb78d8b89c62ff4d0714efa32aca5f22b4db8ba7c3ead4b2e4393a0b28f18670bf5f8958730f2a7f38e69212f262aac14db791b14b38444093344713dc01929338c9ea248c0d2968573cbda2a2a222e272704d51116d591d26f808135ec760ed25cea65384e8dab28d3847ab6068dfc34d4331cf607d0113508a2f85531aa8a4643b4739bbfc67a8c5fc0c219b57cea3f8b90aab20aa36ad13ab025924ca98646e8ca8bb61a0f01849537abdc0c4bb90c504af39f8e94b72fadd6dfbcb8cd4879319c34da3e40525e997de8367a705a0356a4794af389b594ec37bd993fa08ac302a4b9a7dfa29d47e1f3f7be2bbfc0cad912cbb26d5e77ae3bb040ed40df690a04763f7daa05e89c036a5b6e1882d296e96392058d9a449bf2cde07f82d1892a8dbd39667f72b4d04b59329155ab8e53b35f8e428219c6ad804856b36115717f877d9cf51230655ddbc6a8557420e35b92c115a343cc723445479f6681304a0031a7f0d54ad58a4f34c79f41f6ad71c14a6d4cd4cd5583532643c97eab1478c314c20b195de0861cd4a4d3b60369c57bffc5a20fc99febca483ffa65b6d2608c2bab13cbcccab13106ef9493dcc4c5f8d3f629c49a40f872e92acda99a8861aa8dc0fa91859b902a41aaaa62576e0625f35cad6fd6bd7a30aedb512c86035dbdc6e90d3217a6100e3fe859f398dfe3db35b4806a815878cb6a14b4fca4255a0a844b555e187efb35ffe1a42d9504da2727069523adf13bd63d1ff5ca94774752ff35a2a5a3f71b60cc36d5189838c501f1035c8f12f852b28fcaf76f366846aaf583d859050fdec7fb53f463003e0de05951273128e731867c285908b62648f6161518bd738e621aa191db7e8eeba1ea4c4e517a6b5366adbdc16233ecc16c243f888e97812f02262bd50b5aef9f62b8118bf838d919fceda0c7d3814db70318e6abb8be8a64fc98629a7fa0d8f4fa8daabd578a010d8009083fc12f87d729e3669c0b9a223391c5aed882f7499b2ccef62422942accd46e5c2820948f88e41226b4ad58a1c17124b8081659413aaa81383c657a25e74789cb1cfacb5fae113aa6f130bd79f9ded18669d72377eff6a636902c1df465011466ba4e502befb7e3c51ed4c550fac8c392408e2973a2331ee30acc2fe43e74e889f8430d1bec08c39553856f9c280c1e992d974fed00fc7b22044cbc5955b4ab7635501d40dfecb081364c1398506f9784e57f99a3906b9384bf0e606411f22870354e7b0cbf8de127918931540414a5403dc6dd93ac67ce2a6ebe0a7435e5001d379513e489b91326eb8e66a02da902a207ec6185695f8ff0a192f0ff8c80cc00417f344b7bad41c163b36801c3686186eb32fa98294e31dba70119bb147351db1626ee6dba86ebb4bedb2c06b7ea7a545a8a5942b8c8ce7fa47231127227b498549412870aa776f5bd986c4c26c54e059e7f4a34e1209b5a7569788abed79a64ca1234d477df72ee1921f1692837ee437d3f7b7e10fb412174c80286be1d48a65990b121110eeb0defa3dd6c713e39d30928f386018e9e0bf8ba08e32ed44c7971fea50d293fc487a2e65ea83018b6b50e7020cf5a2df2b99e97dd09f8193a649276d6faa5680f06f4ab4d8575bf6ba26d507c9d6667f49bb3d6f89420fb349763841b551032d94717a4aa80b44ae5dcd6e49c31737080f278714bd50aa8d4ac744d50021aabc226e2ac785556f3426f66a1585d5bdf2354aa4d41c5225871aa048f0bf1602bc59086d2aba4190295b7e03d1e1847f5d9992c2dbcd6329df7e4dcc093f0796102095c0921942c53429d1f8e28e0b0353847abdb7977021f8a80d3d679ba81912f90509e006aa5f062f1f9c65edf59a9f6333becc3d2dfd412edb957aa765cdabe281dc1dceb2b27fafdd7036b38f97aea592814ae19c04226afb4f3422b94a0bef44e168d402d901d61cbc53f4e58ec8daae51a300d817129d3d063473aeff4597ec38dab62066b0202bf114abea3cb1df633a59b8d291ff60775b8c75fb6f8a094be9a1941ead350e95272f64ee920db92908cfdc02b4bb04f645d3fab164840b056dbaa1e12fc2abc36c067956c0ea8d41af79eb66ba76b86c569abc718e2ab70b143338150e45bb1d8af0a2b2f11afc10a272b6e1266585fa67fe72048b19be554347ea59dfbe270c9496ac3b0718c773a26a6450bf348ce3ff0de375231184e6aaed793a521d6e44e998dc0747bcc574a63c94e6181b38906b78510b89216d545a2d10ec915bc95b898120276ddb5e3eb41abb7ca33d00bb57cf99a2bd812c83cbe95af9aaada7b6a158cb2870a0a046e8cf69ee7f84638f8ead9a1e30cb967a975a78c3b1fd3035cca3375d73207c4d433c39f1d4f37c85a32b11331bd134e15291015928e07cb2fa1df4db228aa60d20190cf9e2524c5bf4966bddeda328d07253b2925cfcf241537ad5c03527bac0b0a933b57e0967b16b7fec6c87561d0b38e6f2160225d076691f69051fc22a424665698209713e86be0aa7ca945a2abeb8793ddc7ad2e93119955f01f4a2dfcde1ee94755e04c7d9fc55ca2b6f3f022672eb95a674bbe4cab2af0866964706e38434bb4245cc3297807640b7893b213b27d17b316827906f9f94f36c0fcc7886412eb5844f00548d4c667107cacbf07874e2bd74ba6824fde681592c9a6864450a5689c53de42a08ac35cfdac26863dcc15dc5921080b2cb2d81c56884f3edb5a9e8fd095389fedcf288580d15747444dc5d7ec16cc026e90a97cf916dc2a3ef532ad99ca9c024c86b457556e5f40b7e54a3d071a227cd9bd5d9c5302efd7b4d1e196af95ce14c4ae2134059a81d8d779519cd952538b40e7aa82892c6c58eed31bd60465fc495c5748a0a341c8f98ac3c5b3fbca8d5a4c24fdeb28e112de170f761517300039b89a0176700efdd9f04f7620b64785c9481af01e1f7b51d8dc7c192c3ca184ad737865f1f29b5bf66db31795b5029214e10a5bd2bb0851003c3e5de28e6936df931add6c4cbe95409053849bf156374fee697cad94ab926fae5089b952434c7ff95e9b305d83e67091917dfea11e76946a4f96a9e529ad8ab285ab37ad0ba28a42a655a7b0456fc146b25fcd489e3994dad7920459877bfce18d7dd199df685ce5682e8bdcc981de1dc228177c1017644cf72d214c5f8571c95c75798b6f0dc4af18490cd8f588ea51d7342a54e295fbbaeb5622091676c37e6e462480f478e9f53bb8c578bcc05ab01f5a48b545fa96e7fd1b4586c5f6ef69a1158aba0464cd49777a02f92d3d2341d6dc4a520c85cd9bdd5663e6ea85681ba51abc10b7213104c898749bc21efa91371f125f12dcc1bab5751dd7257274d3375a0ca3ab0e28a07ae1833d4a860a70d48782aef0f35964dc444b5c5be69eb8c12b4e48fea1222a8362b40c7189ee92273e57cedb287d398565d4c46c9c6b209a1b75731c3b110d9ad7ea68a4e844d7df1f75d39746af28030e358681981f3ac96d4a3faeffc310f8435df64770f8c76ff23faea28ce8b506944cefb943d026a20f9cf49e4dd1437c54a22df4aeb9edb011f9d4c121e7f27bb36f8871a770889f944077b1fb2c783067d9dfd8839270d2367102efcd434aca1a618826c908a598d6fb1b7b6a2e4bed5b151ab467ef87eaaaec99e91b9148133bdc3a553b84d99e814989f6d0d4b8fa5f7756452bd6e2e1b6c9ee83a1dfba5f61a683b98a1e5278af9b9ee088a13a907ee598b17f36283f6805dd341909c8c24a0cd77e3f275312843fe7d41097886e2c21feb5a62cb08b1947344812dc45cc0f79ba4b2004bb7221d1a64d8f98ab2400dfe3f5e1eab7026010b78e0e88021fd04072d33c335429bf0df71eea6d36a040362c780a39b2ef82a32d0464f92e9c4d2bc862a3b3ce1b43fe4071cf58f2e52d3ecf7438255f694d7ca2c8c548e84bd0749a7fc3316ad25d11c2a4f9015115baaa158a7648a12e86b4d249bb346cbc85c64ccb6b8ebac2067a9fa66927ae3012856b95a707f36e8bdd86f6a60f329eb498cb16eb316761db42fca59b1fb1eb66d92391f60b125e075f0400db08e02456eefa0bcfc8972cefbee07e5ca425d6ebac26e805e88610f90476b53aa98971c476ad9c3884d1759e11264518fe1c3bdd9680f4ebd1dfc2561fd4dba01f8e6bb8c54eb324b770a62a4870d1eac99ce1a4225cd1cce8c9828368e6a74e850aa66ef53ba5cf5db982ecb21e7df169fead6b036327d0329ac236c6f9075dc6c61c71cc1b5cc4866e101ff06f37b3b258383eb3c8c1ce295b300868d70ccf3340986c82e9e5a28ffcf2e3fab53b5b3025b97d9b4e61f3da7c77e4c2a8821d52d7d605671f45abdf8186a8014a66037b36b0939ddc952ba645b6cb969023de10d2dd629fb9b1a65a4c89b5095fce638b4fa5bc02ac08981f244cae334020ec026a1c4057c8e1ae2f44c87c0841673e8f2df8a62d44185715b8969413dec9c2ed70f2df3ab203d50f3bf089abbac93ebb34ba215e088dbb417dddb3fba172373c7c580d23fd4785a0c9a67be4c595278da56ff6b80f082541079c2ddeb2796394cb34265c90ca6358aa81ca98f3827bcf559bf1cb077fab95c4497e04c9c33c7671652aeaa6643f74bd513bd466da01a456323888c065e58450a3f8fe45e2d92eb9b6a60a1ba0ab70243edb0b1998d23e0d4edfdaca3899d573d1e00d5d04f7485fd165e3aa7e8520a6645b15cbd7f5f8b059d2e68afa96079153f7e4e34c557ffb89a2bbb0ddeb3e511c0083c5d95ea8e4ab82c06e8440c706722682bc59b7d23bc714217977552e713826fb88bad3a98fac62586bd4813b5d2ce83d4d657b3720c1c53261d25a2922895953456d29d197f09db17d3d28c219db1b0ee0d5208b4018144754068b18b6c30bfaa61ec964e985db09907025dc674692c68057c32eef3b89c3ca1734312a098067dbc56a281c0be69e00a906763923f6903b8325102d1f89898ed2574df4e8c8fb3e9e4a07548453693a6e549108ea28f9ed2a95d2e4128db3142bf679b3f58032203ed7047910d71224f629323749909a1f91c54489f3d628a6b8ab4f4850b42266832d12b8df4702efab4ca4c1d6f4ef2fcc869c6c90fc8f8db860bfe3b5148bb5246bcb7c3bdd72ed1a8e3579ce538dd9001b0b97df556f7b1307047ce100ea8f11c048998cca09f647fd9377d515eaf89407f74c359c6d5f3d3414e4d1329b33ebcee3b6c33a3c933f2324fb914caa727d1bf76381dedb64c891be877bb36713df97acc68f582d7760e3e292ed8555578355eb69ba65dc5f528d79bde6a103e8962e62281ff1d7252a267e3b13ff7e08be42a4d5025627c6607c41249be2aa866f0def1862c764c604c1c759fadb4988008f02cadcd232a1f671849ba6b0f7d6b58f2009a346440970f5ee553f628a3b1036cb9dd1dce84ab41b0e2fdee576fa5cab5fea82dc48bbee56b9a20e677ab7cccb9ecbbb2dedf616c08d7af7f19dd9d2d8bbbc538b61d4a8dba9d60033bf47498b0dc1fb47f7d15b34aaa2bccb3f1890e489be5ee05fb325522be53e69666380814281ac70d810ce79644df8c065c53db999f9fa2fd5bbe09a4d990e2b33e30228e8c365353821dd06b700db33575c786608a43aafc84dff55d589e73a56a5aa9e2b90b03506dcc8c58adaeee09aadd14df3d95b9c19ffad897336bb6664703ab169a871bba7120578cdfd0e2f0b3b3446cf6ccbd71cc9496ed3d847b849e5c4db9e275133d83c09f24b546139256ac3afd6b8bb84219be1f791c977beab1493d537bc81bdb29c8e3b8b0b58b266d3cb60b3d1856378b6a9d3862588e842ed7835c314b38dde1451cee236d2ce1fd22c666458bfd9a47de720c55cbea0c252ac1caf29c7b6389309d15d382024d554d8f89f371ba1ad8f4fd58a9974dd69e9e65384608ed384f15b88415c842c9e3f910b238d38469210f1b20c290e91692e332d986f285b29fa8698911560219fd033ef9cb56321f9e26c82eb7781b7c0d4808b65bf5893c951dce3504da03956ee8cb6785f9bf66d23cf28b5890deffbd85c308e3ec36dfe4205580d9278af73c6d64935ba9b75bd9af5d8dad8843e13c0a0d8748d06cfc1c23022901fc81ecf30350e700c334d27b9b2ee14565b82d518843161eca7ec0a7f749aeb3d1793b003a5dcb711da847f6f7aadf6b342c38f66d51258c5a958fbc7ccea3eba721c74a9f8ec144acc6c9d899a78162efa6855d8fc257ce549dc26311f2d8e638a4ac243673dc5b0da083ea849a7e5c9100eb082cf17243100d3613c63634452b925e49e44472dac5b56dca64ce5a9325d9d331a1f613a64dcfe6331922a385b43d730531846749e4278ef8f68012977089e7af78df1574bf5493595c2fb19fc9283b81f0cac70e2149319ad053dd13215924e8b5983873bb55ac5d67ed99c5f60c595b94c05510a4fc7292903276e81d68d6632b9f931b40c27a7399d260148ebae31bd010f879a940b70429743340292d373ea721aa92053262b2745a98e36b6e8d12fea00259b5eacb915e157c07145dc3708cbee0bf9e520ad9259268c1bed2faa77da9d72663540d90d242f126c00e04bb1bebc57c8ba6df8528a27f82eabb98a6bd598f2eff9a4f3e5d3c20e4cd3de814617facd1daa345d3bae6698bac9a4e50f1b5f5e4a2ab0b396a77cb7ce7dc34c7c997096791c1f33dcf5f7bf973129301ac4967aac65755e8677f9decbbca9aa9beb12bce6cb71fd827b8ad2c6b33f44a01a8d1f55f9eab2a87c0cc08c7f771f1130e31aad7b77785dd85257af0312956c109be07ed247539095881dbecfbec87c3649e5212ce3de9574a6a9f3cfc9b5959c58465afe3203b80edf45b8249d16a471ef4ab53bdb4c997201cc485d6a575131b2947bf732be1b03f2ff3ec3d5ccb3289861a3a2eb6a0fb5b95f8b9f2b608de76ccd285d86ea55c3fbbe324d536a39b1d94de7d80a529b4dce53e252699a3da19f1c272d6e86a21d1c81275127680fa798c4e90322b87e9dac337022791e14ea81a64ffd3f1fbc0541606e1730bc973a7843eaa9c334e37b28c69bd6410a2e8b15776524f8394241210a893a9057c92cd8fad497950505972c2e3ff451a938704b58c08c44497bc20a48886b94fbca3805a5a690ba2fe887b3e06648c18ca328caf673ef80bd69e6ebfc631563f4b997d63f49d1013db82b1ece1500a6c8eb41afdbc7cb702ac60a380be008b72754011bf312e1ab61d373a4d839cf3f26a12918bc612a028b5780ebf52f535558143fdc057dc2923265b55b4152541f80f97e6178778795e41a246a144ebc17aacf270141f10c0caa5b5d206e88bbef4c1a0c32e3734e5a72c385a91cebc8ffc2419ac1ac793e900b70e209be20f8c3b9397f094e4ee6941031e92bf37897d7ec20e8d380f0e0d0c5803488b83526aa0763719acc2ce558ad6ce15f5560fb501fdcaa57e55b02785aa4c9484ed7da98bf6833240e0ffffc7d59ca49e23303a54115bf621e5b8afdfa3a0e25940c40cb5a1c3128719433893fdc2c36232e48eab172a91f4b645db92f92547869d6f71923ed6d85290a925209440aa645d255b2860350b2965402b146f040f900e196ade0c7bc767b6b50ae0d6a894860b4d7058e08a7f31b0c224c0d5ea2f623b435ee47b695a9653d492d81d64cd3d3d72ed204cfb5a19a70325400681d2c2976a9b99aa4e2b6d621a61cb2d8ceff16414bea0eba5cb601dfe44ea15b898f027d1f740d00fa54798c083d604ac5f0ff677d083ca2c99b9cd5fd55e4e016d128d06dab587957400261421cffaa69114cb2b987ea0986ffeea49cb4add1061adeff57f018f107e52d9a889407b783f8dbe48b1ee5c15726f23897b90d5f387f0c6a91efbf97a3e64536a7fa48f9bc405fd525211bff75c193c34d7d20c0c0a0a4fd4dec25026b573bf2319e0babcb6b8feedf666cd791bee6cbb9a0964ec32ec5e8e5ec96992e339781c76ea95a2bafea8e18cf9df2d7a315c6143776c0c452d7db2c07beb2e9b38fe71af06b30b3a3ad71e39f6584bb281be0c5491ecaa912ed73032521191a88f90c90d7f0aa2f183c50744c32f0ca1de7d3cd862aadee7711a87e48a20fec992a1ff7086d0b6ac2212454d73e821ccfd6a5a7d42c24461f5ad6939b0b606dba410dc54e20b3757e5cccce301e99b620bd4a68d661a864f7087442d9795fc3b688c3a95ad440246f8b3728f71d85abcf87959b30892dbccb8d2d2a8a5dd0463c5fb968b6576e4b803d7640582e63937a52f7bf5419e1f4c172798ca8ce15e8b534e55e4b7a670b906b0e2d218413170020ccf6e9c9984a2bb4b0ff6e2a516d69a669fa04864b3e484499accfeaafb78fb86185cd99b4d1df3e10802aa97a0a975491a225c74d03b628cbf9de554f8ffc82866c9461c9da82d71d5f8b5a519288a3a13392364ccc9700abcb9ab6ccb3d654bb4683c2b61c66d3be361c1c6e39c3a50102b52e1b411b3400274add56c6804348a0ac3d043b9e767f8acb0c348ac1130036e76eb75f5e7b7fbab150f9555394f4a758085e308d815aaf8691ffa9c0e2d61abfd3b18cb698aeafb32db7947a64964a9a8717dd77405dc491b5266dbd1d6a3b4b3fc5b4a21523f74939866be01f8a28af4275dfaa915de4c86702d5c7d0bae5ff348597a23b8fc3821f923fceb2e23a93731e6a1e5e29856c511a7c1bb78bdb5b19a63c4a4785950363bac8de85fb65d7a3eebb746f906d35a2e74f21c36a0db19fa8f56e23c298e734dae66098dc769a6c119d4b49d53bd32fa6855091547b11769833c3d0627c689f8888c3007c5489a78eaf1bc6464012610e633344d3f8e7985f3d484da93acfaa730312e8414c2e3ab8cd17bd5fa93a461f46dd41755eb6bf8a8f676a584b47a0c4a5c5e64f5a0738d6eceba64959d42e519e1cab2693223cbcac0bbca142cb5fcaacda3b9bc6e8cdcec857ca3256956ba1bbce8a976e15a7f9671a4b9ca501bde2c1d04a1cb8029816e6f9447c8a7ea859fae8f8bc99b9b03c59658fe7491352234cf132a7ce285609f2912a760dd3a9b6727d9d0a4dfd7c845c8b33d6d452c029b13c9df326c7682e90e68e18ec7715910821769d37e4b318be2d1c5f7679dabcde1349b1e0e550b2107a94ac9b6079c525ed0848514056c77790608b7fa20918542cfccda98a524ed5a39a083c469397bccf4c1cfe2918a02b444e8e219f1f7b87c45fb0d38062a7eb3453d60128a8495c6b51cb7e78511322987d85660abb5e374da8bda85581029614b053932144132b818b9664048704609daebefbcafee9e753dc7f1ee27ebc119103248df8c1f9b2ea6c52ac87649b0a80c0734bb6ff9821d9f4d7e630f1fa3c9adaba3ed0ef07e7285ebcfb7b2a58f375064dcafc2880256e8bb270e3d5ecba4213cadd7499455e4837dc834524210e6fee209359b7e37cbb6c695eb41b85fe5af78bb203c4dbd8e953ee5386a9404b721dae99a1daf3905a66b8697eb90de12587dc568972d2a02d9d611c62a85a460632990361dee5834574a0e6402a186ffa1a5b87cfa2673f5c8c70b5e6fea6650f3d410d5ed5d2f9850afac9a3ea74e00f89fca08bfa2c233299d23b19a428c21aa2dcb4bf2295286e21cc3f6eb8ff059a1a758484b17c57b37880ab61789664f4b783ad748a48dd7845b26f341ad25d6c5c772c5e5fdd2f80873fa72b181225e4f13c00b7c2c3ce1dc7a73d5de32f054ee5c51648144f05e5e795415d8609b53240da604409c75841b6f4da69cedcab8aa7b8572cd2d108dd859dbc067943503bd461c31cc72c86803b089dcb0108f793a57a0541cd0bf8473e357a06870e0e342320eafaf358d7bfe6818774ad0da56c9fde655bbb9bbd2728c2d09c0b8e220583847285d989b731690aedd07058dad41d33040c15c6a989a97a0a6096cf9c862232e1439d88c67aafc6be891ceedc8d871b1a8d4ca248e61f418dbb116e0e9dea81a6c9eca39fa9f7b9149ff7dd7c477cfebf1cb9c1e229fa01e8d1d421f1bd0d11691d046f989999336630e61990442536a47918cd3abcfbbf9e1d626702b46a2f97d17b01c22f8effa95b019a3a878443a0ba497ecbc32fd0d81c80fce09f7af997985c77a440d2a4d6bc4a0cbde4e24a461ec7ea7c284904754987a100ef6c9d82820ae8241348b63796b167f029864552df252fcd1c3a263a7b06726ca6b8b39d1dc839a53a32d74b86ba526a05f4085419a4b10e1807f617c6d0d40ec68d293035c1d75eb507f21730eb02966d91b0780744c06803f00ae2b42791c2cb4873304eac2db2016677b23322df141aa4d17040650322d0e710d5a9ca949dbf1a70b7f5986f452c629cfd9629c4207512517cd8875026e2de256c9b7a741855685285e42ac88e4103ce636b7e2b39d89a4959eb65bb8073b66a8c0435315fb892a744988e11376034d98851f69b8127580db5513d83084185e35e87753f7c9ec4f99b8d5d22b2fecc54f8993816730efb677b4d19b3c7cac38ccb00a8b2dfe64db7c22128832d7a1bb8072be2f5f4f96c05171ee400752fdcb1193156b3c701204525dd8516f82b575ffca992d6e4944a9052664f16091cf00df79c3192ee1a21796ddeb80a6b9e4fe11bf4b7e5adadf3046e9130f2e846e77a842b49b66fb469ab89743ff2b373a3f576a66ee7c82d05a9c9dfe8a09219e63238f57c0a9df2907d23dd950860f1a1c4a964d7eb96a5f301dac9b2d965a29a0685c6a3cab461e2cb39ab2dc030e346ff2b70db2fb710d3a873e838326b17812916dfe1ac96225dbb60f6496fba544f7ce4d6aba533b02d3e82389f6e0784feac28123b76f01b52fb9e8a2616194421794545fba37b018fcf8febd002fa2bbd591c5f70a39f78ade488f0122c52aeb9f9fec034c2cb053cbcf8bdb27cb5086c8c0f9feb335cd9f3025469cc68ba3d97994427bc542ea5445990f4406c8fa45af1b0544ac233be098142fb71b8e62237da43dbb45e87dafa60493748f3192fff494bcf63248ffef0e185eaf4abc44ba05496ec73fbf793783131ec19bad6c5030e5d6115879cfd09f871537a69324e34f3c75e91221b6de6d78d98ed65b1fee82b3056241a472fc37515493f83c2a683f24d02958024ff745c9aaac92f4793a9635042e7d4f9542e6222456300c446497a912f783f8cb9e1bc589e4e418a6ed3b36a5e7ef72049e679dad99a10ea26e4d891a503730c70068f4b624383e33b82269c0d3ac38224add55f37d43423ebb124f767d2a228ca8fe46fdd2dc1f1a6e7896374e4ecc856a9c42cc9a9883e9176636f088dc392c388c852922d61e940e12dc31e5d63ce6d01ba5e92fd7ae4b56c8ca15b6c4a3f95f8cdf5204ce8380de71884b0d50bf722bd5bc8e4830f8e0f94851044250b150445142a0ddbcbd9dd1a03bebe66aad6ce177c1963269d002bfde04bd6d09f7cb163006d7b3294995cbca6b4965c72aa561cfd76afbe154cae452ba0534294f581ca06d65037e82a2ca48451bd05a6b1e49b4ee1f8f13e5d14ebb8410a8b9b6b0de3b161580f9328b1d7ec6907fe9110899e1608d13bdda44c652b6bf46799c3c80f7d5ed6b505cbea02c3c2b8a77d47a37aad866f0c60f5a5335496aa3179b062f3a3017ed702357e9e365e34ba1a95c6864d82ad117ce7a1a94a844adc9c4da96817004e3188314acd89442d4c7184c82b90a78f718a4122a34da9fb9b9c166288036e596e4a39c00acd4f31664d3a1757bea63dd0773942724a5873459efb966a8e2ab4d029b46420c3b6de6f666248eec11835a1986cdbc6b0643d4b6264afbf74d1d001ea8d1ceab2d74701493f446894a1c4483c76038df0229d2ba1a099790f68a6ad93fef3ba79801db6f0730497017b9f8b08a059a1579ade6c6320cdc95fcaca36863cad5e23cc5e9251f4312a1f860133865cc82a9681b92b683fb4819c4cabe255f33ce3ce4580f775ef6cac3ba089ed93f47304ba9b889032124ae4fa9d5da0b02394bb9a573c1e67f01cf7084c64a0511604ae106d7e5d1498c08684df0c8da04457b35953b5c7441c2859680c5101a4140fb651fa1393d6163e3c1f48fecba8a3c6cf2115391a24974f12dcbe72ce8ced2382cb449a7e9279cac0309e91194212ad8d21d0c4322be7ae63f0d922372953230b1474869ecb89ecf419fbbd8f59930b3c65080e4914ab67ac565e58e8a4ccddcfc514c6d9bbc419756eaae0796d5aa9dd17b48ef506d3d799a6680828ab7b09f4a0874a34f4a1990f14e6c70ad1c94da7a73d7171ab565b398dd4d2c7f98bfb09305f4fb179af0898a7cc5d68d43eb6880b06296cf4d1e048b8602a07b4e1db04a344ced7c7a74bb1e0593624e04d5c48e3efbf3b5ccb83e463bff91db7a991bc6f1de6f8d5239e1d0ad4e9b6b6ce2496d33d73f69d078b1a7d8e267f0267d1fd767452060c28e099ed6a43d9a6adb284ea4a3f07a065de04c45fb6f53c724561d18141f06f8a09d451793b0579d926e34184844752add1a8f897152eff99ef6ddfd354dce29cb40219faeebf5e5cb84c9b88ba07604a057f33944183d70334a5c49ac417fe0af50141230a4c526bae900c40350015c406b5020498c4bc2e8deaf2f0b4ddc0b1662547bda524d17b3978d67d76e4dde73698b8a1556dae0069880a666461b06b54a871aeb71bfdfc2277d5944e13a7bd00082a0b8bbc485e18bb2130f947130bcd6e57f90e59da9d4b9b07c13f63d5f7c22825e45a1b36ba3ea688905c126a1261331b059808c1bf3388b42d11896c2eaa5c68609327c04946bff442b561fd4e6654687a34ec0f86a6bf237a56182718971633379dc145f50e62bd9d2bc9306f9b6377a2ee35dcc9a4428d99df3a9f21e2906c37394b312ef5b656380124141bf54ebd075ee0a690f57e4f71715993117001939aac8b42d66bd1628e4e784aa835939bbf6a93fc9665334d0e84c35309b4056c15337fda0b58abfb3efabcc7907e414e8eda3923d96a8938196463218992ef6ba1d566840ceb498ef60ab138b9a57fef77262439e65846031bd0dfe3af3f6ff68b14a6f802326a63247af314e029d8b269d3f0f182126a647e5192b37c689eb3e2e330bbdf6199bcf78c7eef80fad45d19ed53215f2a3804cfe9d3bf8a38d2b97058f84e557e088dc452d3c1a135bb4e6b8b00ff1d19eaee8b4db94d14fa834a1eeabb68a0d1d0343fb3aa61805e3e13a5ca9af48b905e62b82bd8a2034153fe57838294b64734dbbef600896d61c592f6b019e09755869768a1dd37d0ac4e1d1985ec46fa058ed0df96d42248e1d5c16488950428f4844a1f906da6806fcc26dc8513b80a806c52a0283256012285096307afb5111d4f296be65165827f4ea07943280d3a11856e5edd393947df39fc1f883fe2611e0cdea3db6421cb1598f1d7dc4bab0d7ff4bfac7f585ca2315e4514f43809dd7d0f4dee2d10f7abe78a6ff5a10974bf1b5e9096fb52782e57d3f8fb014a940a2a548ff2078018920633e4f762850b30a7e687f90c2dc502a2e59f4353383ac11266ef2a619565279af0c4d2095f012f1341102fd1a4c742ecc4ef2709147e6e0e3c603f8835f8ed10aec258c8fd058375ad7a83d8a2d250bf504510febf0b815a4080ba9e244836f5e6f9b3307c2896bfc8a781ce65570b40d31f193d6626923ff3d65b3201e69e54c0baf1f04e1f8e59a9589d39863f7b87c2a5b49623af9c39175293f8631a41483816bbae9032d0a553abb67e06bfb4ccc117d2abb0f63b60f170d47e32fd5a9ae7caf024fc0dea0ac6a4748a862eae18b5cfa6611192a18e0a62d727a8d2510e94914e2dbb4b510739321a1420fcd804adac1708ea6f8fbce73c6912427e424a26b992c1ad2447c16f31154c2f8c0da5691979be3ee2c247e6f2316feb391d7ef7ddb7f43df884d9268d75f89e5a7f25be638e91804fc9f2fe90d411710392946700efd185a7094e00f317c456ac94c228e223c2606459ba6d5ded34776e3a3d18507cea94b5c197f2a6a530312807eb9dc023b572910067a95c34e08bd0f127e2b1b8e70ba0ed50e5f8c2ccc1ee184c0a358645c779470bd3d16a2b26d41963d360ae30bc45812b2e40f1e7aaa3554613c4e47d406cd30b6413fbf7dcb294265d783b3360507c4c317f34a094386714c72c29bbfc2795f9a68cf97e2ceeb9ed8afe994b4c179081c7ae6a0772c7ee7a8e69a329252738174bdf691188ca3561f17e1770b52639760e18f064ed5c12a7714f5bca9064e6574070b1ff0b3fe68362703e7cc042dd31760ee49dd62891ed9f9cc73a5945ff9025886462d343f1e8dbbf04143d7fd29b7912d8d4c45d01351f4c92d033cd6b04e3eececc633125232e5f030d7dc2c655acdee33f67fe2368f3183225c6c0f44b2b9e193afb685e30ffa8b0fae4d23adc3f5fa03689a2c9221dea6b84cc0fc2b6c323f06721fbae1069381e81383ef29b79b98fed533a1068f6573fc7dac0f80151a8994ad11bffff9fd106d3f9c45f6fc06dc1fad9f98ff51c2ba5660e0ed1a65453ff33bd32fc2d6d654ff37f867a5b2239aecfd659ddfbfb67f7f529f3026afb8c97ebad88b143ffee17baf83278ff137e3bfe0534d406dabefb330880d9cc5c2d7e320cd33fc37a83861a1edb7634ddb1e34242427176c95ee28064e320724a88ebe73fb37cd5c5063e413e0446d094e5bc40bae11c290a46f7d9e86dff599816f5529ceaf00e982e156e4826294cb06779c717a90f0948c683318066d24e2f906a3742fbd64f8edac33adbfc468800606e59a419b1ab70fcf12038866a9e6549520a91589158a0e10609a3b6c5a7c66b8d59d8c3ce002dd97b3f5ee62e4d5ae07833cc402388c172935c738d1f88d87874cbaff18a019af76d4093ad3a71aab61d40b204557866ed25fec5a0b7e066f1aa4748a307d7b84afbf2d88e14bb700886faeba4af89675c05cc01dae84ab080252e50b792445f1ba0e5d48f6248fb3fafdc980c08fa82d77c80e615088cdb5ededdabc05d307fe0ea4bf5d4a3eebe6c190612a73ebf05993ad47ad0b74cab97f5d806994acbc357ceb7f6da758445f7d8b59f774306661677a5b225152ca0a91710b23bb698ca48255b6e768740b3ccd7320bd84192e4eab10523e2e952fb2f9126c18a243648569f5135c28647168d1af936b9474fa12c5d9655f51e9a1f641e2d1a29c8dabf70f35d0983a92462bda8e05b75314b82c1c366047c116db4367b1cabaebac42dd35a76015c6ac1c2111f4e34ef1e0f90a84eba64ea5c41e3568cb2608a9d64784a9cff1b8747cbbfa143f478b2e585f59b33e5e14b26d03186bab7a38d81c8fc218a6409a375cb0ef84663ce49bd399ae58551423ed61289c11dd030032ba043656236dbaac93d8c8629f186a5bf7a322feac5d1900f517b42040803a32df5552111b0c78d1656470eed1f8fcb40ca8d4383a2106893466bed9c152c12e1659a3e54e602e7a78f2b130347ab3a029013721af26207e941e5df87e9538c9d936928c66931c4447f401681abfffeb02115718c25fc19eceff765d1c836b2a0d6a4a2839e33c5d87ff02cb2e1c3442f35509296eab170d1388b6c9ceb150dd4a9995a3ebf20b443cdd97077fe70613559701b479ca2b3fc6f7a72c892f9dfab09d88ad10d66fc95ad86429356f26034c7f2ef6a7ff7e7905f526c44438d7f28c0f09067420b0f5c8e2a0d0574783427c6f0951b93badb633cc1fe4f76547d81aef38f895b7e06dfce942fdd39dafd0ca7c137035dc0875cbed14e5a1375909f6b1f5c339fb1283839d222ed26c8fee0c9562cc9e424148be32a984b6cef1230ecba6ef154ea33824e2e76c7d04d98ad6edb99b8a2bafd3886f68d3f7c9beef29f5bd3a023722b74f9930b4ace8623138a8f5ad32b3cb7d5438432946ba7f12e7f4f00a1066d80e45a6baf72d1310e2e0ea6e3d47d1da48c01bb51e830ffa9b3144ae2d64d15710a5621f2f9bed463a418285646473b43cf10103f47da6ac691ad1150a97c9470440bfd91832f8c976b13712361fd1f236ea11d5afaab582dcd5d48a2affe2605aa46d2323b9966a261e3e909de8105f336e72ee31626b19045a03d3693ee335bc8bff02de4f6973c610cb9db6139f91701f87d598a93e0ce6897437c5d76a66bd6ad4604ef5fd8e2223efaec900ce2ada642b0da4d2aaaa99055a8fd7029be2fc227ecfcfddb32534182ca0a261c3fee47fcc96f12047df0e4b4f255cf2c94d9d9d97bf4d6f59a7b78b28cc11709fa6e513eaf953fb294e5069dcabaecb505c94fab58c90a915938d5a1a5f88389cf0a416b93bbf5cf16e91b12b4cda851d5577dc6740a69850ff31226443ab5c40aecc013fdff6cc2da0cd6c8761f5894fe266337b0ab0ee2a5cbafd409f2687424b1dbcb262bde960440e4eb00ff887dab023e7773e0903671426f99ff1f1b27e4c62379a2f6faa8e9d5aba14623ebd68cf613373e5c00c0faa3a426addbc441ed90f7ab8e8691b1d09650b4a1695f9e6125029fddf70bee96d0c3d765c0652f72b6c822fdd8eae83eced369ce421c62e4d74c0b62c862b2e939a33baa3e7ffc95b15fc5df193bb0eda873dd4bc31ab81ae35cc64cf3459c380705915b9a57752a4ee9d77f4252eb1e35c38f82bcb4b6913543eacf003643fd64850e4be807aa9afed88fabeaa3114ba19955ad9bfed10a0a57c9f713dd561df855039ee8acb162e0a7700fda4e92c180212a384549a00a44599246858b82255656c241ea8ff62c23fdcb6d443c7a6a9bc9caa37119ea6b19fa1fcb0cc4b2ac1822625fd923208da5682888fc7c2cd4f52def541c6369232178c33e59681c6ad54a9f148be53dd9daeb76d61981815967f217731b710d72ca0641e34c6e1e4c4e8347ec2f963a5a25f4fbbadc1ff9077e198419450f08c473907b730e16cb51a5fd7787f3b63066d0b37145ba50cdfc19a4edaf5487b2cb6d5c9dc0d81cb92a746490dd73333eccfeaf1d608fd29d2478b23cde204d96ce95828403d5c907442d3f128eb49c72a0793e6c6b79d6cb6da1b168a93a5090fc9730065240969be9327f50b3acb42cbed0e0105d76944fbaab2f286d33ae0e436a6d18db1324b5119b82a7e79142c021bd96a2e6ead364abe706298f1b21b0322ae6b03430d55878d4c7bbf6a0f6faec7f58b1ecc6ae1174204e646ea533e75452ff95b2915324814a31c3ad2c3c4e01101d303554a57819149647b5a85494a6b0fa0d16954a371c539a1ba15d0ddc545f503c18ef6639a8c893c406e00688ef0eb95933ce2fbc192af8a2a08ad64067e7fae65330e0990ab91e8c038f1d4c596693c22400130eeb323bab9f5930485226746b885bf805946c7da7435354816e06661690f9c943615fb0933531b2c90a8eb885d6e9ea5526e3501e186c713759b09075f459bcb1310eee5aa000b428febccbb21aed9f35e1d382042509c52931d523dffab46b6ba3e72ef8c1aeb39bb9c1bb4457e1a8b921e3ca00a5eb8417109162636e136837505e41507209c56f3ed88c0bab9504283f7538dc98582393cf948c2c383796217c22c0b39d313e99f2b03d3cefa959d9b8f7f553ff98c8ffe09492ee9cd46b2d4994a045a4f6b17e9691629ee206a93a81f0f8674315632ecf9fcf7d06757e3994f9892e3c6f260701b5fd5862facd1ce7eeabf8cde8c3a606bfa68eb1f9393208bd141f9039761d35c878a3946e15f46129425179bb49598fa48df70f6f2e08734200c153f906b1c47aa1420dfe5210978f058561aaf9e550c90d8350a9f5bd4b46607bf70ea2b77f9d62a057c22b39c57a449db1e9c104df878872c23aee0f0cc8229eb0398e77a3ea6964acfd55d05644b7a1586b7f6b8ee99f5b6752854e4ccd74fbe7f9a88b8cdd646612f7d4ddfb0ed61960d2564221de7dd9f931645466a06cdca8b07e4f8b5ccb916a41169b089e4b83ef5d4ecd6475a2508a0d13a7f4a9a93951139ff08fe34a87206efe39aba36feacc442370c021a24d1593ef895ab8f96ac01e04b6e1298d25fd3c16abdba7e3ac2c30f06ebf5f2ca12d2899f57a2198817ccd6a7b11f0482ed3f596154c06f6cb44bcf4de7364092c80d3c833029f1ab258d180d3460d227baa9fc33023a2b9dfa62d88acf7a141d991ca23184cc824e0effa22056550c7aac8bc3455689c7eadb7c3efbde6a7502182a4f8659990e4da3baad7223de0441deb687d9402eee1c703f653fbb25d5e79f1eb98e09aa29e2429a9655428db1c4f5b09d990a63f60830c7f1163263207007fb405ca52f7de5cd8d85f051b12ff7591d0015edc912091d9ba85ccccaa0cbd7177fa66af069670ad8ccb15561fb6260730c3ee3433b5c8c86fade7b83d87cc9ee789926244f8e15b226de0699bc67c536f31f2582ca53f37fda841c086c454b893763710167045b1989e50775bef8f487ff4a46637934d489ee073916808cd9e36ce60f5ca4c92e2f75b7c8af2d212a3854f1e56df34d5c231ac851fca2e1a87c8a97a48e6da1c9de219e96e268b77e2f6cb192c810385548af7a276b8c4c0fd952965bc66fed594efe69953296282ea565038238a24c5e75475db0e3595ffc7fc1e0d43702477672e2cb8a7376e163ba2b538f5167e459a1bf32677a0dd586113b7eff5ea65d390949b342b0ede5cf09a985ff6a7a137905bfe9437f22f1780b7104939f7a4c5660a583565def0086192ae3772673d48a2c4b992170df7c6ea9f09466a0faec69b97a0aac495b1f4ee781e4c4d9b84d732af44e49549e8698b6dca5f9d1b22ed451e0a2ee8c9b63453e046ae24f440767261f563e14fb920dbcb1a4e61e9dee599dbd2911d52c51a2d1f9351b760f3a832fbbe569c0c5f0b277dfc326150dc84498acdaf64014a64ca904e44a1c73ef9870013504a254c0732fc3b88c1db4f8650dc97b61b6faa68d0ef45b7f21e0cecaf884ba8bcbe20558ee189a2722d3618a9f0395d14812e813a0254c08f29bf992adb98fd33eb217f2e556fa36bb9aac91763b86172548d805724fdedb4a26b549d4db79226c51b2b5d541dba52acb7f33df6b6b8005e4c8fe646e29f5df65e5cb0533bbab771abe32be8d64fd34a54a1db6e6fd112ccce6e6cc190e6c41ca24af439cb3663b079cdae8d72def42e0174f1fdd60cd56d754fc750a56d323139cb4265adbbb371f8ad9f900e825f373da25ff09d8c4eb59b56099ac19a3caf7490cf940a155949e6f92620d5521e145312213ed761415e77aeebb9b69fc12f179f0004debf57f6d0b02d6eb8a6c699c13be676019a247b8de5291c8dd5394db49659fb8131a71858e77711a14f02814ec97abc4ab87fb3eb93eacd5995f40bafdab09e112f71bfce2b16f38726db66c1c4c80e3be05d357ec6eb784a0fbca56d95122cd5e379ee87f84a29bec869b1fadd1d3a221fc34f9544b495b303be0ba23789254ef65020263b9b8b3d6d51135b13dea3bd0b2fb8bd80bc00a23e5b64b9aad18d6f74c8d6eaeca019770bba7ea299f67a7abf880a403b959e5919d2497da440d80064b3fdc63ec3a2e29d2007f50fe45903eacc7a8f5a2094324e0709fa740265db538b7f354c66c3f415c123b8a588e55fde25bd176befe25e0af3325888a46f405804c86f470fc8617318f0389038aba0691d257799940f87377eed8482bcebfc01620c99b4b6f7de5b4ab9a54c32057a092308ca082eb1d4c006161e9eee1ed24a95c99da3cfe8b3ce6e90622716b3592a716507587884500171fbca1548c40f9b8d2b9aa47a684a5195dc5b725fb162948bd8383222533b3aac10a5a6d0508ede93e3cbd7f119c7a1e7759225ac308251162a6108a1f1a408234851e3083c5c6c58592b058a95228c8c7001136ddc808c1f10b1040dcc50e283bd9bc3c1782fe004175ba210820e70b0a5dfd0a2083628c1a20b1190c001154534106104186ce146156d20e105162bb880c1c32ae2ae852c689bdd0aa47cd33de26f0de84228b426d32b0abd4a1f3fee34de627399f6feb50a02b9510ec80df6c85d8050c63debbe3feeb3232920bd77dcb71c9431426984914bfde5c8e45209df3828a3506540964bfa8ee3014fe6f199b07df695a2a31c3feec49ea2438ebf4d8f7305524ea17b4406f870c328145f518ca6e91c1f63e2364dcc11b3dd577a435efe7e065eee6700254fd9ebe5f3fae3d0fdbcc6ac28244ff16f8e3c71270ac917edc3289485f1a565a906638a4f8e1f893c258055bce2c411397ec452c62af6152b3b397eccd257ae10231fddf88cf759c6c1f83b727cc4f1f1a30f29885bc4a7053f6892061958645082325cb043d1184df470692b45406bcc20071aaa98010929579a30e2ca0e8cb058c51a9ff147491e3e2385767c3b3a3050d84639e41c3c70c838be1da010b524c37c3b40610fdd90e717e67416566b04594801454f163228c9028d294f00c143cf1166c021c98b062e7ef8098307253e3254f810832a9420e2090b56f1bd6f10c5154f900084348040060e5d841084141818c10912a8ce628925454118a561031a2f7c51c410549838838b0c56f15fae0b440c810b0b5e39281145bf2186910f98282308a32545eefd18c128e2064ad02009a1274eb6c8824416565411859655fffd7418e1bed03dfaf3956be3607f0a0e7646058a2068d146116af44053c3490ba000c20d5494b18a495cb083c41b614809420928497220e40317e8804b122f384203f11585a2501c8a449deab1448c2652dc2005131e56f16351a73a20440fac384211927842cb2abe7f37de5372ef67cb2d851a6ec01c49f1862785cf186ab8b1751b3b490842185bb6a0a208bd8323042d6103103f24a18220cc128aa49081092eaca8b2c6141974461423d6d8419718744006412821ca12b4a5a78c354c3f3b30630937d6e0a818a1a814e5f83e6aac7822ab505640c9f17dd474413c566e15e02709a2d76a43b1b2a4b40a96dc66e4be42458b290937e458597e9f8ab8212a34a15476857dcb9600c83db7bfbbbf9b5b4b8edeade01f01a28b7d7fc8e5fe1b3f3e4a556323bf515c7f0e2a63180e67c63e0e51ab8375b6e7b00ef72d537094e927f93985ac4cbf46d6ef880ef675defc579b7f0e2af791e6740acc2b4a1ba6257cc028c20c597c2d66f796620b91d3a02860941045862fa8fcf4952a9a643be7ecd44c0f984051a2870836f460159feb549222dab081070a1f82a850a1a523161e2e586c5822840dcbc2e841e8042a8250e41f5344a662fa14df5a1db9b59081499638bcb9b197900a2e398cc9307101f1db5fe64b96c4f1b3c58e2b4d9c817abd5e59ae3c3165c7952a96ccc8ecabf84572ac20c7c781c9d1861cfdeb0c33ff6699c7318dbd84445042f74e85602788ca173fc0728517abf85aa75a07529870a1e488218cc164157fba5122a20412dd1cb3f5999be3dfa6b9d977c8e03676dca5a1e845b69641e2205642e3663f3ffe466d70a805c0cacdbec66da4ad8d81dd03fb1ad7f1990c9300cb1a86613e1703129fc15ee5a9f87a40d1cd50f353f019ec7ff80c0a7b554d0c0e625ef6461cc43efb1c07b1b7997e5e86310e698daba361245ac0a6f1bc2331cfced85f99c2de2453fed88be04b685c18b2d7beb087ea9069edbd1886cc05ef0f86f91a9db1bb1b87737b79246618e86bbfe5ceb11b22e7b7492f635e86b1d7c913c91ad784c3de92b107f2c58d476217d68e7cff57d6b3b58ce9821fa272d843335c9fe6f769a2fa34bfa64ff3db464883b3bbc1f91d1ac918a5141fd1c9d85cf5f74c31a610638a2e88b6e4f7d45cc52b4467e4f831201194dc57a6e092c3ee92e31b20f715a225d126cbef8fa4c3a5b9fb2b536cc9de49c0c90d4db9fbf8aa212e989dc7eab097756e6d18c86bc1cbb03784fbee8970df6117506bfbee5dda734fa47bd293b06bfbee7b253bd60ef7dd6fdde765ff2beef332cc32c9d3fc5e9172b8488054b9fd611fbd8c83607f212ae7a85c871837e69689d208cf65d9a04cdd2d7614e80d6fd9fb77412a7e51dd2d00566ec871396448718862f98c0d6dbeb98412be4fc7d7d2abafe393ac603eaf6edd2764ca0d9b28dbfc10987ff916ccbfe47898afb8f5f23ab00e8e7fa9b77ec994713c4cee3eee5fbe5ed970dd71610e2afb60a8369d29ce4175aed8e37ca6768ee227b33c35577d250a9f2c39d9f9e96ff4b35976dfc200ba74e9926b0c58ae36afd019861cfffad8571c027f0cc3a08c8324af5f3c014c3231a6777777efc25fc6dddddd8cecee2fe3d6561db9af48d1626560637ea04324207bff0cd7f8fb40d68a05ab56488d8dcd7d454a96ea758c20d9c7ec0770c36657e837acac61cca6c64237becfcee2cf8c2b2d1ec00a6e7cf9790e9f09a3a9694cdd236a8d844c5f8515dcd6a289a3dc4632087532e4d83ddc05e0c6f58f9fa35f7e6edcf8feb35bc18423f3f5e221c7503fe61a975d0b26e48ac312648a1fe70062ebd4cd722ca160e5c677293248b92065893eb50b52a0e81e9d439b65199d410d88a890b30b12b30a3b772bf56ffd75ee1880236eb45855e5f6c7d845c9f2a3db001ce1315b42859deb5d90141077e6be22c506d963c1b3bf5b317554636b99eec6df8de5ec97a82d4007c38bfa81d3d04310a2e2ca0bb258814413252bdc40021444e8610631c0787ea0432460055a95c971b9e672c871b9af0ced80656b19ce4ffe6e5de8d58e12ece72ba94fbf5f0ab171f006942715aaa583edd1c1e7e789bb076d18773907fd0130c355750f7f114c8a6f301c49b955f2d4c50dad4cd177266e1885220d0e3aa5f5c95fd3607268c328644214ca9c03c00cd7737f77f60424dc508582aa9b8aeca1aac6e987234ffed8d772c7413f21891b46a1d844146a9ab6522e15d97990a54f36860640058aecbe55c9aa802244ab155263b3b9bb632134434c6e2c982083092ec02815994c5ea76afc146dd38c00269918d39b728c8c35bdcf98621c8c24a06244952c62008320d458f90d47cc9005074998a28d9e95d7c0836a64dda99bbc2055d4c798ac8dcfc41cbffded2dc3f4e00f7288aa43b83b75345eb070628decfe16a361476e2c9c98226fb9b170424b29dad8a990b281d77777974b58c9ee5e57ee38acbe055ed4be655ffbf89af612ebdcd749b28a9d75703e4989eb026a692e4dc3e86798628cb5cc94ee67607fb939e573d8c5bd74753fbf57d8c35ec4d8f7aaf4dd223df7ae1226612fcae7342ec6d74cda5637cdd68e89d8ccf1d5250ffd91806e6cc9b7d8a32d7ffbd913b19f7df6aecc556bbc3fafbf7eaffa63d91b07a7268666e9fcfe6be79cfd2d33a53b145bcbc4dcd9e5a494da98e5c7453abf7b97cca89ddf7d6b620ffbf99eed3ee296c41ef6f2bb9fdfda481a89d3b2e7381c0729ce7190524a33d277b8e256f73a2fdf61cffe25fdcbf7fcee2b6e912a7dfaa4cfb37f572c4afb88dea33c7fabd88d3ccdc73a25bfc32eb7c4484cc02383cd37325532c27089e2b09487f8ca3f661f8566969fee1187e8d3fc1983a61179be511c923f8ff21442224f33f2c8534f1f496c449ee68341b8a11d8a427452ec0d919f3d117f8b33ec026ad9f777652fe9663f4f042dc43cdfd2cc88473f0ec9d37c3a7fcec7700c0ece79654a1e652da0a9da63df7beabec480f389d49e48963d97612f66bf612f662652d07501d577cdcfde259fb396b47d7741b2ec6bcd5bf779b1c68fd57d9e0a31e33888c5e7bc686baddf2bcbd23e725a16db6bd6be355fc35e6dc9d77e7b22da6fdbbbb8d79ec8f6dd77d89579475488397eafb8afc64ffbadfe8a05665faf6a778f9825996e8b7abb313225df3e11e99fb9cb6e5ac5de90ed35ecd27efb4efb0d7b757b0e7bb5e549c3a03cbd3c61a6a02bdfc4da51625fbe92ec9d25b137b137f19c495695ab95abb3068f25ddbefc967d29df7ec5adec1debb857ede7ade8cb93c9d22dd2311a6cf25b067b89bd9cdd437efc429c1c5f7ef4fb3b12bbe49826e0d98b3fdf66ecf3e2d3ef6cbd88731c741c232e101f6eccdb0b220872e3a03f8b94c3cdc1380efa03a972a37f63d171b0659d6f96294c9eb2cd639027da631d89065d7d520db9658ae33eece3becc768f0c7b9877cdc7f1fe1a873dfad87bdcc3fcc41efdf9382c0c0e98af573848b1644b24a03be303680db971e8f85e45dc82c11ed79dc7c29103e6717c0be671601da0f83ad8c37cc42d1c9f03ebccf8f274e529eb5594d8cf191f50737fecbc21d8bf7c06e65fec61be351f87c761dfcb63dfba3fb1c73d0e0cc33cf62d1c3f1fe6318f83f9743ccc13c9f138b00bc7e77818ec026ae1c0bf23c7bb3cfb1e87bd2138be842702f33bb06bc7c37c09d805d4daf130ef2ae171e8f85ebde0e08eefca53f639be972879ca74648fa384af573bbe5ee9f87a95e3eb55c6611c07b3ad7bb91cf75b89e3b8dfb8279534dc5f8e29977efb3cd26f6f33a9c32f38987d8e83d977e6701ccc9e64c4bd0e66af61cec12c93c9300c7db411b5ed7648b9a1297bf65f5ea6487f9f48e95fb00bbb805adc97b06731ec596c8599b07fec41ec515a0db9bf98affd62fc843d2793b1271d715d40f15ddd93dec57de9fd69cddd05c19efcee3dfba4885b1cf6e4735f9aa452498b18122f4e9211f7371c63f286744ffa16f7dc77a4efbe557aee49df953ecf92be97273d91fb25ec2afd2de187f95ef5eabecb9bef59ec0d293d8e27427a18ec8279d2e3c02ea016cc93de85e34bdf2bbbc1dc0f5583032b7dbd82f97af5f2f5ea7ebd329172b83a16233171d67edde2d7ef15d745fb724c79fbfa79f9f3b4ac1ab1c5079ba47a0604f6291e7efa64fc843d767a837563e3339704125d1c99eab661354de7f958638d3546d41d6ba2e4097bee53c91336b10954e3864d1479fc7164eabe6c64eaf620913732f5f22f5007a825ffe5b96ffa1cd6e1fe05ebc8e71e004a6e962fa57f9b26c794ebc76571439bb1eff8009bdb259ffbf9b980e8bbe693bebbd67cd253dc92cfc1a0c9cf25ffe5e7e7ba3f9be6e064ed29a59ffdf6c140bfc68c6bf6dbd7b9651784b5335f7e675aff7e402d89bdf8f2efbf606ffbcfe545ecd16fb5bc0d7b140f99fff244e4df9fff222fa59f69a129a42ad023b10b9763ca155f07b1bf26921197e5208651ee2b614fc2ee4ba68cf4dcd7ed91a95ebd3286bd8d3c61ff38c641ec8154b9fef7a77ab7a46d1c9437dcf0b37c39b193faf2762dbda05fcc333ec079727bd97cd213994fc22ea056f7f25df24b5fc2ae557fcc9452faa423ae3784f4f389741f3b2f7bf94956f323fdfc1669621da00cb7ba9758477ef73af3499f64d538b9bb4778b3fd8c8b5d724cdef696fbbc0dd38f7190be2519712d9e0ed207e2c3f59f38dca0396b4e2724db77f6f589686f9f48fd0dbbb2af6f33ecb16c967dd5b017b15df58a22a11f5ff4230ffdd8433f66dacfaf63f64828a59acfcdb433ad4fd9a89127faddb12aebbbf970e489be9515ab40336ed86ce884a94c9fce20f1991dba7250a6e4fbd34f350df6f4679a66fe0d4ae328d3ba9588b8d83755d534cdcdf46d64ca3edd21838b656feb83157b58fc567d491fc4de65df9f7a18f6221e22bf7e4bba8030dcf2b7ef925f2df677551c572427172b1db90f8af2dd4afe12b73c15711b2432f9ccbdf42536e90e1bdcd0aebc573bfeaba278849f3c7748b938991199f222f632501f7b22f6e913c13ec3aefad853ec026a55ecb1e87bad02fc24314597557d0c7bf17b65b1b7ead56c2df38dcc47323fbe26fdeac47eacdf639a36f2dc3cdf081299c2de825775b5a0e409fb6cbe9b10cc12cc13c3a03ccd07b5dcb0b5e4f8cc7c1c2300b838b851fe9cf7273ab682d2b5609620aa694a59be4aa67e0711b73f76ac1dfb91e4c4dfb1d74f435c0179d8b7e8afe49b642a62afdf553f7a8d3d0c0ff1a7df721750e356fcfa2e7fdaaab85d143ba9c92d6591ee456c3ba4dcf073f41a7b43e6634f44be63177601b5fc25f6fa7be5923fb1d7d8ae7a159f34c4fd1cfe8328558c1eb9b059967df6bbd28a522daa47022883073e45d5a3f32c914c82c41803164ad0cf4fd093182506f551ece91e5e19378c3eb1e2348d1de2c112276d2d019ab82158051b60d3b41b3f208802e58328f071b67e24fd91e7bed11b5dd1456d34fb6dfa66c67e8090b800f9dd4334381f94a928030c4c2cc8f36dc8f37b4a0e93081165906d147ac782cc0b0de208a9ff3a729944082929c9e222dd637e7fc1ead3fcd2d77d227d357dead6be0c2b427d96655ffc8344ac53d03dc26bf41a7dfae70d6229c8c23eaaefa3fa64235335772ad17363503facbd44ff208842a954481c10c6f5999ea88517dd181fcee34ff84cf8cee33db88fff781347c2831c8a0bf9d0fb00dd8a0f2943f379787a7a66d843f1251483249657e2f0d990f34da6274f66d84393852f8729c892b1f8ca92e950a6141f2972bb08a8489fd1b324fa84cd46f41f9fe9d82408ca134353888a902c792d51d974c71f9fe8234ff26ed65a30fbff9a235924cf37993afa4c232fc4c0624da73e749b9fcc5ea7d7e9bf799c2d491377f7c0307b85daa6f85e2419ab1708314bc4128be2501c8a4591287a118b620fe8a0019cb861148a42598a1a90832ae4908422837884f2c7070fd58f146c58ad1b0dbc207f64907c22a3c8203f23f3f8c1236372e88a5a7f64b92138133e0fd4764476e192ebc78e057fe523b24b97186c0e429f049eab086aec05601f83294f9d0acc06b1c7f2cc35baec49ba98161a287a6a4d6d3b5948a742cac9365b3a29760fec5fbe611e7b4ed2fb8cb456c934faf1117b624fe41122f67c6e758f1f46dcb0d940a2e3a369fc87c88621debe91a982d70bec799962bec1f9bf06a53442120bad349646a7d15d3a69768fed371464fb12dc7ee64d07fc9965acb288b1912fbc4f8c0ef79a4cff0328820e321f93678e3c258a0b63c8989d3538a5d6963043addd830414c840358ddb8b6a1afafd5fbf6ecfdda980ca9f8f187954d3788ea272eedae6da068239aaac1de56ddb6cf29642deb42329c8f6b72f67d1c6e7864ff4028ec3ba90f3eedc17583a42813e5435290861b56e8a948eeeabc4c6d5e1be867283198a1b96b464f9252d3e83e198d21972656f4f51d3f8f7f3f83cb38418a98adcbc806324069dd70e4f8faa4a8d105528e67c0cdd108592f1f13275efdf1f231a1dbc08426d4534a0253231821343ea77e292eb365db092e82eb2cfbe1c3f491a236ed8435aeee7c4ca93446971c31eaaf191824cfda3ee7fd00ca229cda6098d6127b5b617cd09f1938c80105ac820830e2164a85546cf9b735f6cacc1f9b26321cb58cb49a2ee249b9912f9dae2a03cfa96cf849e057c1e28d58f146c84b06e3ccb916bf12e7ef4f91100c60dddc88dbc0bf9ca22f7d3e8343a97715f6c50fbf799f02d49fb1a7fcbc2320e4a210e4a9a275de79a4f1e98d0c30f954ae5447b5b5599ad3b82b6d001140540e25faf571a5bec0088bac514262ab027cb2d6428ca32cbee58a0380c216de449d214a169555000c2917bb180f244bebbd3d8d1dddddddddddddde3b7f702dcfddda5fb101b03a1b283caed2e480d0e377ea0c60737e270432e73285c017a0120082b5428e9404d951bdfdd7ddb71c4edaee686db5fe3ef81386b3a5583ea14ea3bf56d3bd540b21cddee8024a1490e1e4c88e272d83e90236effd63baadcee6a7aae7f8d778c2098df3f818c71e58732dfb243d396db5dcd0cb77f2889ad65b61d4edca65fe3fe12122d71b0e91ce24acc2362708c1bdf3dc2a00245cc00841f9cf001153f0cc00b27d09042e587297c00d26f4b600319d480c94f0c62e04490cf51123f88e2460d1b0062a70540550091c50b7a8c2c696cb184146a1c799193f0c0e5a7089e283ff8c0c4023414d1250c22347182887e2b81272dc85265072a5c942461d2022a4040830c1b14312523604b127410c60e2dc072c307b448e38b329cbc666006907e53cdd6fdb6fff69bfa3bd7ef59330f944a255312db60aefbacab8f6a1a9b2bb8ed9072c10c25531e467a22da9348767b0d7b18ee0b822855cd9661150a04b1c871d8a398a5f9e72fbbf7e75e72dff2ef4c1fa9895bb5ec2b6971b08a51c2a6dc9e2c6a554787db9c8b2deeebc7aff52dd671f9dbafef028a1cf6e8ccbe5e99bc885bf2eb2bf1b73f594d53f38cf36d6e64cafefccd725f9f48dd21e5da742c99eaf025b9485f42d9b06e8a90f00dcbc666b5d2fa14b7ac8dab1d07a7479f55ef92bb937ba427df93d81bb251eca22ea0167ded5db559b5524a7f8b9d8c2fc89b9683f37310f9f1880b91b5b3bdf69b74ffb7f5f3e4d74a297d57f615bb8fca2ab5f3c71ba2bdfd96d6cade8b987bf9d1629ded1d8babeee2933ebac262c43c967c177a25b163977f5757d8aabb20241209c7939e088e27619877c1fcfd8b5da487d93c56e93d177a557a8f08e9495f45d042cc15c7c378f4eff7aaf495fe05bbee93fe05bb805af749ef7af9129d73ce3927f5b97da8ecabb19c36b539e5aabb2058cbdfc366af4c0fa2e28b4b32bd0ea1330ff9a9a69c208eb441bd0aa4f5b7d31157254f2879a26f021da4d8bbbae7de45fafb3472f53b0cb748d8abb8eb8c59af561bfd9b26a3d1b6d7e99ec39e7d528b7b9dfb9c36bd865cb3f679f6eefe36392d488bfb0eeb0069dc6bb78a51ea501c284ff4e919252d60498c4c7f765dfd6e0d79ab35e4f619e7699fb135d06a49992474e7cb5ba5a8df7993399f910f893cd5fa75ad5baef26ba5df6d9f3d11ed3bec92af69d6b1bb945bdf3aebc4de90aee37ec3aeedb9f9bd7271df616f62533571b831928e65449e4c1d8e83556217d07c97fcd892d8a38e37dcc22879aab78983157b238e234ff52f120ed6b7f83e71b0fe6d92ab7f0624f6ac630fcb40863d8b3ded5b1e866b1cac5fbfc6ebe3d437521f49fdf8aabf458b87c8d73e03f235dcf29401ff0cdfc813a9894b6f90bbbd626b99b07d06f31f0ecef706896ea8c2bece37aa9aa6d152fe3ba45c954c7918f7da6318d6b1bfd2c99ec31e86ad8333c96abec57ec3ec13e134cd65b7d311b7e5c9a6469ea62ae87235644e7b9e6c9ffb967d0eeb6c1808c3702b7b0deb94b6605f8361964a9ee697b894d85095b674cb7ed6ab967d1da7f841799a9f55aa1a1bd67d4da7556c2d6337ffb62f9f88f68e5dd805d472ecaaaf7d99252d71638eb9b3f62ef9f65dfe9a17ed172d531e863d225df71ae7614f84f3303c64c32dc19627221d06b1e9b42502f942762f5bca962db94de218691a99d2c0dc3592a5b1e4497ef7712a0dab40346e23d191fd20ca84e13828557e92afb22ad219d7488e8340b4b87d1df4b0c7a20d3d257cb124bf64d958e460a7571388140367ba00f5075435164fec641d2c3480665cd384a6ea8f7df1abcddd4d8c62fe36ff745162ccc426326cb6b684c68581be7b96659994524a0c430c58185df0af66b4e75bf975c67f032eac7001174ab4acb1aa912fbf966f738e2bd7b83118c817b73fcc9123c60566c00f36603263139bd8c4be039d928f611bd68d2c026a1f761bd9879d86c44253dbfc24f2c49ea6f1b1a04925791cc47ae212326efd30f2e41d4cdcee6a78eedf293e139f94230f9023dcf832f76f1ee7df29b5ca2572107b2060dc30f24cc9d85b8b752cc28880c50636b0ac600b0f54fcf628dd435a8f3c98c79b32c05013de4afe0f65f932463a38c9324ba31c9e6499e54a7ee431ca81090b1c4a96519a06fb1e445165f9fee2b2e5a806cb0d6dd6f6cbd2842c5f3c6311dbc10d635050d370f119ccc8284b162d5a8e8e424b258b206611c456fc78a20d91a769ba2d0b1a063d449601b0d8c51c19b7baa0ab0861b512404363c53a55faf81db56d7efc20e0801e1144711f9ad07df842fa302b91beeee3bef91de9fa58c447361c02e9d2a54bcea216b39869d9ec94a6c1d02feb1e5126804702301f3fb234218709c8940719a6f407c00c1747eedf24284d53a26ecc28f241442a0057b2a4eeebf50ac2ca5f484ff667f90c4cf61ebcb27f11d3948c654bf61b5cff70d6d870fdb7e8ce5930c0e8d1e31095be0f2718dd3ec001c093a6c11c203bcd7e80da3d9c760fa7d99f85b6711e64f74176a2a619414ffc9abe84444d7c70ec41871b46283d4da344a7ac3c75cc41c71de4582505a44f728ad8813ec90f824d23cb36b27c1cb6951b798ae286118abfec893b748a054d1361722a8c3d4a740f1997d06484328008e504245c0cf48dfc224bd9463b6cf46fc68831e8091244376348b95c5715e86339a81c851cf4ef18147e8d2cc2438cab803136061071fb6f78f090315adb349dfde70396b89d438bbddbf0ab1f7ef2a19aa524ee0522e5c6191da8014f6e28937dc6ca1413777eec39678cf1b575ad718b29d04ffe412a8daf2ec3610a72f631c618e31f894752805b9333e175c39b5da3b429be69f9c91ffb5840dc777275e20b8cb0461945ab14c8211819ad5efe7e32fefd3b2f7fb3d76a8c31c6f869bf651b50f6f7a3e15740b3ffc7ceedd57d128f4cfacd5aec57e8eca345b2975f9a582ed12f74a33c67c8f52a762a704fc2f1b5308747deb08663deb861ab8a4cf1cfe191a9eae503c23ebb2f3f1e18e5a72a83c40dbb68cadbfca889f1197f1d33b8618e2ac39e25057159fe37fe45fc71fc77c4e086efcf9229ff1bb9535734fc0aa87232a083314795b39f36c61863cc5a8c0c7b56ab7454e4a083efa03f115e80903b3480abd827ccdff17640f709b2054ccb134517e4ea7fbc8eacd634dbb6b59c5dc76d5806249182be15524e6aedc9e24bf778c95858828c659e46d07cd22428049f1822aa82c5a88b2c5a62136f0246a16e885c551c83e4497e967257914964127fe62a68e8c64009fad60ff83c50aa1f29d80861ddfc043df1281ec4460ebf0069dcd07d7c98f89033f981171b6733caad20474e9edfe0b440f1c6bc3c3d200939570a1a9d46078510c20277c8b21ad8a0a046f5c2c94b8eb602f6d044d194a1a0a021211ff2570e411000576ee8ee265b1444679d15cbeed5ef1cbb1662ae389e60939c679a950ca9d505bbc50523f79b91fb1f1cd299a8b8525030dd133a7bdb27aad9fa369f4d122563526aad207d0e845f118e1bd2345ea1d45a8938000d0e588c1896e71432435586898ffd10c62783a962330af303e303d304e6094c100c149827608660a6c010c114c9f8c84491f1698e8d0cf3ca937e19982995f191f19127495599aeb6ef6b907ef715a04ff4493d5a7040a62fe3235324191f199fee63c101d9fe26a9f68549a8c54eb8a7df9519ca9c12c1c60088000641d3031150d8e2afc2bf27c146a7d169a55372bc286f6f7f32fd1a0fcad48544a61be693ed67990bb28ff509a1c981e35670bf6614da78f5309bfcf4f4fcf824f103e60314e186918767092ba88ba209768f05285144a3d3e8d25a9a17ad1d7d469f52868a9dd8fc84e739656c01053944419e982552810a4a3052c1f6d27eb42dda919645cba21d695ab42eda911644c4830537d48c3423ad0bed677bd100d5e020f84890e924b638df3386f90a9d316cc3300c93536654fb84f460b918f29c0d4e24766adad442b5f3ea23232f243abc6e1c3c5d71c3d68293a39257e6ec42083d3438439d59b3cc509ba387fb864d0a2824af9d253d3df8fca0a6a89298f2ceb2dac692a91cc9254b5f697143b0823e13461ebf59ac41ecb38cbd2c41c603052036b18a7980313cb620326cd532544a0808c67d1923f7d63a7d16b5b5343bd4ea450d3ff491fb7980617c39fa843da6813ca7e5f2bd3a17f38984aa6ddd813a5c1b9fa14f85f84c67add26e05cf56fb582d6b6bc5f52b9571d0c6c11c386c1bd7346e1d030275e8185f48a1917cc4c8dca1a75f3a6431c1884e8cce39256504ee78711a42ad344380b78f50f4031cb2d29acd8d4cb1baefb9cd26c344d6312b63bf6dd6a90f45b669fca5c3f384969e1e7c7e9a201104456808878b112b5ca268229a2662c04b9bd05fee4740a74e596f3691a87e46430e7c793e087e3689a6d9a6f119607d9a1fbb164a90c31164ec6783d3cdf8a6714a676c70ea68131a9c3301f8a6a11f93bbbf693ccf1b9e40a18b23466e18a6184f6daf09f193358187064d38793698932363988c913c5ffefbcccc32d3d4023ef1028524d0e834ba1fd1994d803f480d8b56a481cf03a5fa91828d10d68da6699aa6f9e4f09fc7921b6a429a90f6446b59aa38409758346528286848c8cad02b061f37b8617cf2c424a46866ffe920b1b6d6fa930b6739f8c60dbfd65710a4ec589859523a3311343d4a686ac7428f91ebfc62be41cac98d890ec8d23a006320ad0a7ec20927640cd53de67bb6dff769cafc85c7f92ebb18aaa9229b0d248c5e4876787a7a60f2d3e449d0cd1945a29cc1c37e67ae79fd96cfb0b8cfca96836f2a62a5d0ca1e8542519f69d8d0f8442fdcdddddddd87d415284f3e7a704377af2bcf523484d334019ce6a8740cf6c5494d2aa5684400008000d314003020100c078462b1804428a972c30f14000b90aa44624a9788b31c884118c418838801ca10640000040c189919a13a3f469802edffc9ad0482d810ceafe55fbe087f3236c28390f6afc4352d742bfc021e12c0b18c8583a1ee1fef67493672f729d97906736d13aef532783b623010928d845e0be240e6cb7c1436105b96d990744b2042386705b437e6d0ee92932d8890870287b816ef89a7506e3aef1930d69474175f8d1e300e94620c1ab8db5c418f9f6bbcfca0ffa14a3aba31470d40559ca7dd1180dc64ee12c6c6d283aefb3cde2d080ba3f0467bde4b216a22c267d00717778d719f22a4e2450c0b00547e172b502a3b1a22952259f226fea345b56f2357753744b75182b95e8f389eca765fde936d223aaf2daa143519677f85ec5eacfa669123f7b2d13a9d626f80660b4e6a85fa255ef1d3ef02eba696acfd3d345eccd851c5a7eca73d0cb416ce23a985088928e2de16f34348f811ac0997c9eb02cd7be3c5f8254248777f14845421819050ec07e9a774b670593e871e248cddc1b9e54f85dd836473863bb22f3e0f13deb0e1befb2a58ef798d252120c58dd8ae85d55b1b66a79d3fe55907918a4dfc4d253452c3b3a9af6375586526516ea49cca509b343b9bb4a3a335e78e63a543c96530846acc882a6e85956c28c13c845b38e4f704c1955fba84ecd11d87e31a3704bb7374a9863674c9b78657b28e499fc5843b636ee0b94b4afd0b2c3b8acdb2b1f81440ea0fe88cabd33213908a846c4fba55b68aba9821a2b6f593ffc58c4701b64b58b1373c1bd43ae88ad94b1adc2c56683894972b66db744f10f74b9fe3fc753b2eeee1ba64b06804c07dc56c07498d724686985a9de389b958d9d2e056ccc2b5c7e262f181c2cbeadcfedb8232d0bc002b66bb4ddece5f5a734a04ac918c5cab12d822bd079bd6a8aa7264a3f49344942bbd5712188ca14e2ca1b5985454488829ec9b71fdf659e04ad751fda5ecf073bbe0ee220343966e04bb19c24858dfa3176448a877a2ecd9f66ee9cb45accb1827d729a805e2d006d1ba2e21b5b74c60cbaa0f7dafead3f66584a06ae2a57dc387ada56f20c9f018b0d6dd0eb4b1c4c9fe196ed4ab77caf2eec24cec184bac9f21d58c91745410f926ed07da10ccccbda2a51cb1ba7b187c831f704a802695752009d7b3e4422536d197bf4e6902394c2f3e180b01b0da79e380931b9539de2bd0aad1d782a8311f863bf2c0080f525d0141cd081b6cc3c94a62e6508e03c8a846bca96feff9182a1df73b9eb6720250b5f6b990e29ea758d03e71c7787e9ff5be255bef7b215a2182ca86ee2a9e486a9635afddc761393c73ec1bbe3abd600504d64d442a2281154ecf87964c65214522978c187ede782743047eec63e12b2b62ec7b6a9218ba4ace57af0ce180c8e29c19861f8c986f193d84373866dc4f0aa6f059d7083db209bbb941f39c2a12f7288dc92084d16b7813909911d251c674eb1ebc079377c210cb605f32e552dbef0d174dd2d175cc8ee7894e20b10a369a95c2e010adab0fe87984b3db19453559698fa97760737beb3966135972b24d4b26ee88ab8e8b7fdcbf0994bffa3d883e5603de10c5522789b47717e57bdce1c21d6d87113fbadb0ff1f99312ef7e3ee33924a0d4ab68422e66382b2eed15b0e102a08544b586a10b69209ab3d9c196b7ada893fa9602ee79979b031b44544964a5c1c942260210877657e7f22a88b74a26783b03ef91d16c0de7b311ad51adabbcc3589c2a7f3fd8a3c3cc9ac7b1d057b7456cc98f07959f237f7e001ec734aa3b607cb84192bddfa2dfe9495a163713d35db35d7b522d1a209a2878bb854834004e63728b7ece3a73ffead056d0b1a83b55a51eaa4d5db6a54289548abbe3f85670714a862cd505e43de26cdc097e7608d088e0503a6b9b4cd718d921ae87130051afb1a39d1802383459a85f4c4d985030b511aa18156c4687dc0aa7c0a5e3bf893c4e0664f23d35c27c48217358cd4e66ca029c33e099d6406e4ae207cbe0e036a689f434bcf5c0be043fd4d4e8c99072bf6c7e71336707e7d1fb889ba0eb49be57911ee162d00c55cee93bdfaec8d82dd2c722e372d70e4e84eb5a090b8e96e549ea8de1633f2cc9beb7859ba977840ba3a503230b2c970189e57985ea583c7d07e157155973a86e2279bc79dbe3e75cab07111c737ba95d55998e6cdf06c76d60c21f5e2961be3ce06cba95cfc7eda961bd38d3e64a49976eca5ff147b3b8cb76463d6ae309b3531544bc3a4df83a68d1c55ddd9ee42b4a78c5473555c1d83f0ca430ce4a97427353631e607a83d3208e109d8f9351fb1b1f49ad862144385502e162937404647cf86477d21c619626a01a16fcfdfc33e731b015fa72f88a0bbe5ef23298270ffff0cac18801681f05eaaf02e8d34c95b1b57c2b6f48f3d9aab099c74b41ab18bc974e125de3fd8ad1bb9946b2c6175d9f021910e4473c0cdab292ff83c16f46c1f8720b766b6c2eed089a99ec9568644c604ccce6559fee969c9e4ee770d0f51a968c5b4c7168f6d1266c1f413dcec657cb7f7b3217f2f3c5d9863086698cde96cdd9fa847301deefbc4fde5494b02c4d40e7f3e1c59b4b2367ef3c52834178ea3db796393aeb9960c5ce4efc1de373a28596a5c3bd742d81d98251f779d6101e302c040885156c62426c3ace6d873311c54f11450e09faba60d82a57e2a747aee07c26324d527449cd3d987a3fffdda0209dc95ea756f050128a3acd0c5ba0e8872960c8a05be0e4d9ff31d72814720004ae7e1cc9b1ace773a670a91e3cf54705e05cf8b3a3e3e8d97001aef9ade9c9c266072ea258cfc216737dcc8c67f288957e3b53cae83e4a5a945b68229985399dc067fb0b574787a1109a59e9234069c2f4c6cf2e452fc48234ed82369b27018593c6af074decdc728671c88d92f1d9a501c573408498f11a2cc6aafa3d1e7f99ac5ccde991dd3240f43998d778205069fe07dc75d5ea410f910d3a18079405cd2a9a65fa26fbbe0d4773a27bc0d6eeed2ed0996f674a6c4e32a6f32dc3bc710ca9847c96f9b6c93fbe84f181a78a0cc8429a2d520e8c9118af2d2c9467aa50a148caad6dcfbb82716ef7df950da43e437ed8248c81ed7958c8a2322eaff7c4cceb754a4f34290b9cdbd2e15aa8551d3c282c779cbcf0add5ba3f9ff777ca151702888362b1468b5668b83c5e84d4f3b866a15693f5a615839a138662ff985476e65d6edaf3b945bb8cadfd529f4c34cf128ff41ee49d9cf98530abcccccfa64b2595fcb92a2a0239791c8f29d32f08207b8d4d18e9431bd712a53cc367bc0b2a413b120a4baa5fb4cc36040e516d65f228f2bfbe0630026427419b003537acd4deac7491a14078c69748af547b53fe888087669e667619924b70c9056e62372fa4e1d37552df4dd6413415eb0ce28746840c7dfb50d8b04f75235ce252e335967b10b811529fb74fe798b7f83724253bb525d931fc01850c41ce497acd37266f39074db14dcdf8b8a8a9b4b394cebec11ab57dbfd25596d6f48fc1216d8562e2ffe98f8d306b302b311a36bad89da2752bb36fe788121aadab85599110d9887f10a5a5531e4c6446059184af0dec1e64517e6671fc0c7809fd2ae5635d924c51f5b04a51e0466bc210c7a6409b444245c35bad7a78bc7445d8668eade290c3fc53e408c17d73d708a0513bcb5208cbb6c5e67470be46cb881d692c7857f5d342f77acd5aac6786a1d012d1c7d7861b6f92cef64a0ae4548abc4a6fd4a6296084abce92f1a026caac2d3fa9f6dda222ce42dd59a05272d5c925b042b3ac7f154e91f54f77c7ec3929ee96e186c76f4908337b333d5908a5f24b1d231b20b69d4a135d3256b49b5a4411a862d0cfb7c3ab29d88aac88343f1542e2da8167c6e7544b08a0bc1ec51945475a008106840412fd54d4628e69b310d4bfdc898fa89d50a44ed2924ce6df353502fc5d7d5de1f493c0a6de2116ddd49d9d9c3feb6714239f9a1c83ca3f048813a05735fb42f2a55da436fff82e7a6a4f08330606d502be1f436086e8bd15622b972203faab0d183b40304b2dff52ee98c454511f6bed875d3cb67f4e0fef184bca35903f9bb3cd68281b94614657f959b8f8b1d8d9052f15c4d09872a4452d4aeb5b891969e02050565286f04c3761cd822431b4845b4c24915b54d4279116c0034ff7a8ac28c811bac2216ef4ba687588a59815c517b0c532720cf7e3bcf51c4c03fcdc6a1e9fff1dba1ac9623a0f828b6ebdd03534ce704d9588915d3b7a8b734d251acb977c2430cb6d50f5b393f2d024492a501bc65ddba9e6d1e5d94e1b62d0c986533ab1dc90de7f888cd5f2e587e3345f6cc9f38f8eb43b406fb9789465f620a1a3a165bfe5e2690b894ad6062e9a17e175b1792797edd05eec94dc0b1e9478761a6a5b756ac5892d3fb6eb417dc5b40377effa1588af1d1adbce2bb9a0a0d7d3c2e287fb0f9ab3f63ba002312586a52ff97189c2a2aca5b07826e9e5ed11c6c05418d4569ce7f39c7106758f820c125b899d747314c799e1e56fb40381ee176d15ff8114ab8a452f5c7b337abaf5eb4e19577767edfa03cf180f5c8d2ae210d63df8b23288e1dee71e93d8ffeb000b02658ccb5edef1cd9836691c70e59f9927a5dcc229d7c0fff7cbe40bf08cf79c13396d2766c5ee067e83e0d9149b2d32b32630331670567d0b8d17469104ab46651b6c155552d666617e38e49335429bf87bf842d88d06e7c75b108bdebaa4a76c1a58d6bfe61e891bb8f948eff7c13f834c0a7c15cdde13f1be44f618288a5a54ce1eff08ee92a9bb98ff012f4c1121fd2f92bac0cf56c87a94e61e29fff6fe69fab801b3eb7be80f03773602d72012f6cb51bbefd3027eea147131d2e2e0bb56f032e7caa240de7a659fc01de20211f18c3d4df7accb992410be16a85a7f843b14829d2885acbf935985def5dd7f4cf52c3cd635f0d8f39174138b71e2f022d8a1e7b7e2b57fd71585b63bd63e242b01371fca4fa3ae24fcf0c326761aadebe7874667dc877d7a4cef321b3ed0a821cc21420e5692d300f443589ecb66178167ea61054025d4875218cdffdc28ea31222eb8e3617b4abe3ff8a3699c56e5892b95a7062f1c8f3be066d01911d36d6b4bdd6fe5065ff9df048714257580c5d8bd6252d40110e8f63d8063094a74b3533e5fc245610e1121b207130e667718b193558d2bf2b020791580a7991808eb088aab2a9d5bbdfd11639a0347186c9d601ce46faec4b3bfff0ed0e82088ffaace544140ba9dc23f33ee7b05d536c3435611ccfc00ee3c691a4567e0cae2c3c832aa5b5ca2ca0633445051e9144813e67b00ff74debaced42b0020807e210e9e164c6c7562d86ad18cadcb1789a15786d1a7920f365ebc30dce3464f81cb0f4bf9be84891e6ccb9949fe201d29fb6374c0d3b1443a7d2a01e3adfefeb4aa91625af12e24978c1964d422769b68ae97a2fa112afcae20520966bc0c7bc98c88a8697b7742cb7ff5c6d30ab3337b72df8bdf09b244ec4a76920aba67f2f7272d5e4fabd15b5a8093d34a9c79279c06dc4892d16291d0e68cfa9ae280cf64a495b1bbc7b75496d9d3ae402d8d3bbceb1b4b82524eae700f86666f9e28677c5167a5957030b01f59c31e240bc1bc21f30ba612778a6205da9dc2605b432451741d8230c06813583b74b5745ed3754d9add1aff2d42ed2f3266e4d9c0b8205fa6751041b22d055b966a6856d9359fb2b9fbf5ac80d27931cf89119264ab2624391487d1f7cd98ccab368cbfb24e2920b3fd681594f4fe81ecdfabceb17a624aa16a72a1d41608ae0413b1d0fe6bb6fb7566599e8168df42c0e49a5c57bf4e349bae860b4640d7e56a46a045aeb9f18683c1549ffd0d6174700cd50e1e14e8a64ab649f6bdb00f8635e10a2bc87189dc417cffca1c3e4b90601b0e0ff45c4fa07b4a8569f99b2de9ba5a98c1076fa229af720ae34da1725fce6f3d0a3302471dcf79895f79f016f8b1c85b06c274e996ee232b1ec04aefdc648659ea2167890677b36fb03d55d0160876a7c40454803e3060c902447d5382cafdd927a9ac7f525207389ef5292f1ed2364f57526bc6c7eb53b12dc2bc2c683285700eb5bea67b9302c7ed3311325aaad50e8843ea7093fe9ced6f6a3ee7b9a273c374b7f0c200aa8b55b6a38a4ac7cc3a8a5fc1694daa6f0e6f718655375b85820018fccbaf8f3a47afdfba2c9e16d71456007be372bca949b6ef3f96d51a2c95402aeff8d973883ef8973223cc20d4ce0a665b535c0c4cf793dbf8b1b91dad501692f9785d2c81bed281a62d76bc7d3b37a4a8c36615a85878b6e82956aa1e972a6133a805710028e8234766543be091cd0c5fd8c89a9ce3bb9253d0ac96bf0a792aaf1b4108b87f6ff4afc6a4faafb82fbdaf1433ff28a2259eddc62a60faaa114e56591b36107b9018a77319401526418f241ab9ad6051c30da1db90156c0ce0e67f582ac9e54abaaeba7a5d158690d46dc2b1216c4191c599f78174a1cd15efa17511ce08b02ceb2e635aa06d7d13fa2f91282622ae60d540135adedb25ded3753ef06271a88c840843e4f3d7f420efcb6d3903374842f12644a9e9256f4dd9e00d25c260d9ae9a4ffa47eaa843204008c298a1c8dfb8342e029400de816da315c6b591cf6861348e0d9a0996e097bc97ea8697f222f7a1b05a0249f48e5bbef8179797180a1a9784d2ca421f921ce0f08e7b92c1441ed8c09f4118fe099724af0a0e40bdc11ad6ca17ac16894b894b45c75e81962573ad9234eb947bf96617b45ae6d7257696e084831c4a8c69312e41ce5e1710cd2960743449870efc277172421e158eca875a47f2497bfafeb1ad2ac58d4ba8f5d178ce99d46380b49444c2bae9f0df5bfa79a8236039fe017e55df2e5390e7500e626cfd5837825c0ac9c92091675d3fbebb32be4dccd501c84e276258ebc53ed6a796b546bdf95aa570ae4d14fc657b74267a0050d0820089fb9c0262f50fc346d910203df93f7f77b7dd26b8a3dfda12da90d89e19093dd71b5f43ff1943a1a795a1fb13caf4e61638454d264f54187583c993a374b063c3f3170672a30abc26345613e2211f708ec2009aadd4817d14c3c2e9cddced117d143c4598b990db612879dac2c6616974fa51363c6bb53d80836149ef72daae998274ec1670c14c8d2148328e08d93662e6af054ed3485f5e8c2c4072945a44842c577676443ee618465a1558cac0b18b8257bc112f73976c5786ddf20e2ce1c1b6e1943dd98be441a0d31b914247d940aa23c6e97b64811ebd3bc5e47daea618d41e7d119a11a29d82a1a0bbb0ce81f0491819a185603d24ec8af0f54bef5f6da2cce5923bf9912b444db3287fa0bb962d308129246f8b4088e40ea2dea691043801548506268b886db6481e9923217fc4ae616cf0966e713939c0bc93406cbb2769265aba3c72dc1f18ecec5d129b762a60056e079b01ea365266b89840a94107d295c4a81798bb00b0b75b543680521287242d9d626f33d0f5dfdb01410e403a12f1d69d497e4c73312d3914e72b2280cb600f984d24509a197bfdc1b4b19a52e855e7dea93b46fc9ff299619d1aaddc49ff2202227f6fbe8e6714369f7012d4c4986277c2997b302b52516569695980883d2417a27df139179045e4fcbb890f819185a1cdbb26cd7186f5d8da877df8ea61f58db7690a6bf27a4c8c8bfd91a0a7245e0398a79d051677106ed9e01c7c40f2154ad627c1f82739a6a2c34b1b6f8f3fe97cf06dfb10a67af18c9659c9bcab5b86d7e4c62bed60b1c8b00aac0f205d7d4d8acdd753f8b909fa49e34b61c50f0dbfe7c538b92c9cab0ccd6cbeb3fb946f3267618d039ae96f8e087704a53b45e242316f6bb9cb1c2ca5edf41f8a465b798573b5ea39f6460809be4939e8b418f9888df02dd7b03b5aa2bb3e77607bd3989cfa858669346e1246f5e2cff5c5f3d36a93700898f872a8b3c40f8b9f4c27f07208f743d8449bfb75d07584d973370bf22b84610ffcfecc5caa821b55b2d5c5c6fe9bedac91ce873160d32d123b5a0d907a4ed3052c180593fc30ee2dda91afb2b9b657e99e875e485200f0c3a7042c1cbfc2e889e347218613f197b9eb02cd18b73176610d2b7b72087f6b1454b1be22bbb50df85baef805c87d6ebdd0cd4e443589ba8330280d78070183452c4c94f88cc8ad0a8a76d157ddf0a5d709d2bd4052bee767aa564c17d174b25e0883de8f7f4fc5fa870ab8a39998740e23085283251918c159f0ef33760a9ba4a572ef86a453260be6d5fdbfea0510476d50cc9ed3c19700a02ce793041dacc38f00e0a5bb0e0d1da0e09bafb1880a004ca5fd976af3736d6bffeff2981a32f760d9c3a45799f3c3aaf73cc7feea95adf776831e3ba061d453c990d858c0f10271b75aacb80c9921fa34f2e48c6cfa8649e3751754ed7b4968766798589a43c37299587f471c675cc0183a1338ec9eb245711ff0589e010fdbd2c5850959480f9384f600592a5cc863c15fe4dcd48c3e6ece4b32072de534a2bcc6191419dcbfc729d88ac5d589f0db3efeb02deec8d41e779682493833b5962c79e844009349b6ae43bb308ff08cb401599c7c3803991d54038b3a5903e990525bbb3ac7821995f5b6a4ffaef1f2e381d2a7e07e1772dd9dcc77c48a8c32686818c3998622f8ed53c3d50076f0e89461e213748e2c59bc8532893d7996c3c14a0bb2f5216b5a745b1d80379f3a983a92ed13ec803815a226480688bddf551ae4b582e3a33c5ae1ae54c3d40bd6141b926ac2c2f80e026188d98ef894eb77cd6bd29b2e6519365cf2f0a55c4608e2b996e14b2a38e09962fc1693e316c35898a5f0c1a38e2ae4dddb892e00023928bcdfa3189665cc44328d0c09d4da5857d1990e0733fe8bbfb0c5917cd60778880ec95c83041972dc850d29a4d7c0004550bf37fd98e014590fe1580611ddb6a005ee0fb59d2f8a83a161d5acc22a3de1d92d342a7346f72ce57ae44a9f1822e5afd5c6cd730b49e242ec16038d6a5c865e0cc78429098dba9609b25ffbcf66a2adc467b0637796bd17cb7c84d152c18a57c179089f92e1fae6ec0075980d251e802202c288be4ab83d22d49befb947ad5dfd43fa2fdaadf34be537cf832a34fa45071b6b3cb9c2b5dad48d135705caa13b9386abe7a602ec81b6742a55cefce1153b178d0166e950e5fdb1cd7f5024e58390f945865b7d376140a5862c0d015dfb3b6cd856e67871cb9ed7ebf3dad8a296f253741c135372180431d2b58e6c501f798c1350a05d3fe0f888820392ef2ee45c81c5cbc74fa29654b627049bf0eb6cc6b528001f7b6455f4e9ff28594239d353f30784644d7e25c152e8144d41c039291d84c3e772518db3f1c8a007c7c5aeb1e1b8420e94a556cd9e09ec45082400a1cdba354cb5d12142e313f50c21122df878748812de6f74b1e61e0c5bcd1dd183212676d237b7c97c8c9174ed73f1f121712daae89164e6af3a531832e25d9963c00c70a911d07e93a1ac0af4738e19b9be19be96bb1f3c0e3123fa984240f0712239c094e7e57cd88e8fd9387f6ca3c491c0fae0ae5fc8be257092df6f0be108dc25d350580b974daa7daaeae3159b629c7431b80e701954038087e0ae90b3ada0db830610f7b9ce8db217789f934b80bf6224d1cf213bd4f5b229282fd97184cce1c1d46ebbda355d124435b02d85471a2548d10b7224a932d7252d7c063a570cac2a7db52da237556ad7b830b6e8ad82a2c82c0d5698eecc25e510b8d1625f2444b6eba2f27b5602969b3108ec9a48bdab839b26effb9977519134b41a4dd5be9d49fcde44562a95623ce7b19ecfc3042045b72011b6198916c7337706ee3c16e297f77d9b58640b3a489076d7ef8288200a4ad5ebdb45b51991c4b7f807475b68b4785e795bcbf76c396168712ef32bb96d6bc55e9129bf6a81f126b139645b92af9ee9d5d93c39772b26e4df145e0dd472018f1591170c1fc43659177d321a39e03ca502c528c3e7cdfb3c0be8b452bd7f5906a18ef6bd8c8ea10bcbfee8553685ce7cade12e2d912fe6698c66b045909388667b7d123db1295a4d43a5683f609b68a27f8daf5b15fdf1271a23967902f7e82f036791be8da89623ed3a05cb07d7fe20a32346b2dc2a4962086ba58edb4c206426fe7b274268a3b89e0a9ea21bb4a0702305f1ec14ba7875fdc4f866c2db086f45a025a54eff13ff534f514cd94e0f099f0bdd74a0c596f1d85360bdabfd87d1f3fec9f3418f6984bf42609827207ed81782f55630e183e4f82386dce713affe16763b7ff58ce6967a90d8b217750aae74262b3a0b1a98142d9fedfeff3d02b4ff0cf672486140a7106f4b746da1cd3fe4e450eebce0e4ac807e98ccb9247f653fdb27f1b876aa3b08560dafb243a1680fccef64bcefc17f49f4a626de57d45e65d021f950e9190f44c0729754f57b15623116d837ca354e9e41654b5de9bdd645a7719299516730dafbf850e75c3ec8b3abc32ba8c02d69942dba9d30f27daf17b4669c4faabf56aeff412d1d6f1e3e743d6b0a1480455b8739925dc71c5eab5c0c5b5ce58b2dd7f78ab1386030adb35c67defb855ec1d736b0f248f40aaf27b08e8ada147d6cb2f12a284c1841196c7cd281399de88df8f4e19dc2281646f08fe25d3c72002fe391b277a270a51767065c7d1643c23e38fdefcfd4039d1223de5094b308f2b6a501533116ba99494e423f50f1ef55213d66dd53d60c718b2edba5ede904049b1b9a8eb6503296758712a012f226caab584a6db39ebdc1894179fc64c138e4270812282231252b150d701a68f31185c9b9edacd4b213205aaba0403acd53b4071f57d421966261723fc4f4e2cb7c1e48b6825cd3bbe3f76469b4a66e7e4e60248255a17535db00e4cca800107443f6d33826b3af60e64559f7f273b409fc94002db18752863fa4627772fd61475ddf221349366346871465016a0048a971138525dbfcc138921ed1a8aec20584efa2e45cbbb2fefb29ff845fa0e7dd53c22905397fbe5a5c24fa27cd198b6e9f8fc9d019aa99576f5b82bcd01742f2715f15ea9228d68474a71ac6d04b6bf058f24db3c51d5f49e6eb50512bc9312d312a62b22b61e603df9dae20ee653720d96995fc9c3d9cead84e29755cf262f32ace040abe23e94c07130bd93aba8e4656826936a59000ca6480d20e542519090cdc489bc3c0a0a0baca18eddb8e2a573ca0558bcbcf0ba7aa55cbf1b75ae5856ff056a51252b8d323211585aaef9851e82d595d41c8bba20742dba244d5ff4c5c8213feca887abc27983f96318212742d0d740154d7c7a01a651f4a84995b2c2bb927768b3a4b184b8136519a17f8d4cb8c43272f25255f1ed3b7ce8b590b03ce050f08d35f79048b92fae6cb3f9b74f280d39607c64bb240a1c65e7d3d2be215135471aefb1f89a738aec8de315acb11457156d94f307a8a1e019bb0576cdf8cfd022302dbf4118cf472e458e512c444c919806b43a489f4e5af9372a5b79556ca6ed48729ddff2a17764e8dddec82cf3e38a072dd3b2c8dd1c10dd9d73a7e079a8bc8d2a2e87740a35c079132a08379d210020542026fd4263aea63d8ad6ec1b4791dfee2ed4a8a30d5aa26be08eee48764c51e2c580507809b0184f2da59045e4add2c4ef30467843a37014fe9602d4a7fd08c437edb676370c71a8f8506dc7bcf5d3bdd0bdc4924cd8e875286ddda71bd9d7c6fcd258c77bcd9833b8300a59fbc24b8bfc4ec7d5649a886548eeaa10055957cbf98b08965cc810803206075cbb3ec9ca1844b6bca0727b2954333a871bac5368265f7ec791ceaf9245d8d416354419a38f429695beec2a1af11ce42c9f11d603c028e3ce6864b8f732cdfecb9f22675c61cfbbcae40fa1f12b4d8429b28a6d8b69aabc3b927c0770c44fd31ac0c0d1a5262e482b4b33d36f10646fd60d56c13c3502a1e14ec1b38557bd1cc205ba8f20cec7d3f37611d9f9ed5e2903e3ca555eb7fb84ba8b9d60a30201cf87f1003d1e6115d1aa4f55149dc05e198f399ff003cfd09c6fd855b0dd96c5104e12c1e4145b782929065b8985c1fb67770de1d5c8334eff098a0c70211388c04bc5a9db8beab994b7221d5099e275c1d9753b4073e0fa7500f35662449644d19410ade8af55f9398f8bb78ed011d1b227464ba9ade6ba4b83935b3de8d8bf362819f92dc48e41b10afd04e4289e46a00ebd7818e78830e47e274a147906d428ead3277b352e40820022290a3e1c17e4f56878282e4e756b3eb2e115728c7a5d412e5f147ed0d8570e921987024e0eeec1800de7b01d7c96862ca008bad75bf7e353111806a99338c95c9efad97e36115b0c7d88a276e08f8a857fcba756c3e4b309f3cba58716a7e9fe9b42fd1289fc3a2d15d667d755c0e543bfc4ad8230c626359fa58fdb630d18703b9580ad0706b09d5b34e9614ae965d07159087e62900074c20a4f674516fca5d27cee003c0ff937d9792aa001cf445cca6e28530fdecd15711a21b558af70eea1222d3dd551585e9f775b6050bf730ee2527219cccf300ae16acc67eace288f43e9fa533c968680561c8ee5708c2ffc59bd60219727564d433ee02d2f3a0c921c8809f64b7ed367dca64ff432b4f67a467b2269cc40bf519eaf4077f842c19ae8ae2012a4384a80bb3142d8c35ad33ab5a27a2c1285a7671bcbf00b6172bbfa0adddabaab945d73c02dd6f11560191620e55afd1e7978b1a53efffc89bd2c51c85c6c8b2adedb96820ccd9f6b8840871e6fdf5a9e2e40b44cd81b8d282d8f10980742f1d37aa31ce4a64577256874651211b19e5f9d221d9ea642147ba7291a276f5598c145afa2eadbdd092e6df9b3f5ea8b85f878dcc81df2e2dc21a0eb13a0fbdffe5c3ebb915930b73d7830840a7035993c5acc962b5191cc277c1481143621aafa1e32f38e4a2ca90b5bcace09a352b435adf7dd9119992f64f1ad6cf5c5c1a9a44eb41b933bf1468f3651542db028fa35fb087c03e42a2bf2a52a574fbf03099ef93bcc3f001b494ef74e58cd03aafa80590463e1e55b8ea41bf4b34edc001686e1ec629b2681c14c1b321834454ae1cf3d2107cfee8028322d941305a39daeefe743478980185d293f9da4b7c0a84ac787d0c93c3930770e7b166305e2ac7e6f38b62d109889f6b307ca10900aaba61fb41293256299e75789f99d7c6c1654f105b503c311cf0ddb63724a7ac033e2663077c3e4611c12afd0274a1705f25782f0b91846285f6867a31be0017c9b1b120e3d23c5956df209880737f8dcddc0d58df7266eabc9ba023a13b0bfce4002f6f9fa0e2ab381114238d78e6b908a586e62a9bb9309c58b1315f8b809480b41b039a8e2e191d23ca30221be0822f435c0cae8f75343088fad0e86a4cbab69b46f80f307312fd5749d0593009f17f5d5eb904dfc5878b78f2ecbd524bba6b98ab9aec315b6e99a90045041022a9857808689524ec40636b573545b9f516bc9cce79c4019b00b68bc6567ffdc830aa1f0c247a135debc3eba949561e96f65f73c20f47c395f50787e34353efc50a611834f8dfcae9dfa39190cd1d526afbbaa990d060050dd4306dd822c427b720e6782e34c00abda74b966fe5e26cb9cf603ad770984fb3edf01cf08822ea3c9879ee451df18508baf87a21d10947c168487a119a9d7b411e698f59eed0954103b58d364d38c22516028d96fccb3f00cbca44459820ff6b03c2facf3ede3e6b43899bdd99ab6311ed2d78f96d45d7464106f2d6aebf065fca566339dcfc16a730837ce8a6d1465b7e0d1290501d604fa508e910284fba4cb97aff633de01a9a085750b97212bbfa53bdbc70e4e20a3d1fdd3e3f5cedc41d8eafac1dd4f132d2efb4558d67d37ae5994efa7b93494b275941eb52b85b2510dc93be0610e6aeec87772104a6db08d29181e499094ebb21887b525c2a7755af306544543e54256987191cfbc7a4902bf10b229858794a3961856bdd7000ff4fb52642e753942fa1b1a8d579b137e9d0c4a9154f2806b96c2cd05e297d7c97209187fa2ed1c35360bb3a11f08c503fe55a24606ef9b0021c82e3a0e10a96d3d5537e1a2f22e0d36003caf61dffd2dd22a60952feb89749dc5b547e01d801c2f27a8b668b425194bc7652546a0a8613b5dd5d09e7022eb6a37ebc7892c00104ca072d6a04e0202ea1703dfd52d2d39903937cea0413c38ca52ce32f0276bf1784f341469c6a0a884f984f00c4a6c33534bcc11590710fd02b0d2e7fe30b6dcd5408a6586b35ad4b3b99d7ad6db411b7fb34df79377439e47135b75e1d6bd13826976c1f908ff18d8b58f9e9239a4d8ce25b00861c170d059d216a97bacf846b021c4c97af4f6a313fadc5d9f50cf0e2ea8b716f46df0a60410eaf51e506b26567c379d4810205009b85e1fc8f7ad04171cbf4508d07adbaa143dd37f6c5cedeef5b212b1eb23035d45dabade15d5231c73324142d52950d9cca15a9e2ce6abb23ff786ba3a752484829e26bc23c9c9fbacf1cd4866869876927d3c647024fa23e0378c8341dd43db77f920879461387ad17e060cf86edd2e7655231baab9d110f791614375026106a0dc38625e366765405e982c359533084f0d6bb8a63d6724270f1f940bdb84e95d9483799349efd7d675f2bbc2bbe7f66f64d282bfb4d79a5be3f41c45e7309c7c8e40eaff8a89aa3af86706b964c68ac72841e363c62d8bfcfcba12ea9eda78e2c1275f20acf524f9ce8f1ea0fdb4a01d2f61da697ff42eb57c260047092eff569d00b73e11af4834df2cf07770f10321aceb334c48b0bb7b83899750b25e6d5da00c2f34cccaf5f3970bdd7652060fdcaca055b9843e44123fac018d05fd41b8019f6eed11a895ae31e0d1d3448912222f676a853d39271efed9b7130b5e34188b049eb63a1dbe5e590439746379785df7e6f5dea09f0779d7a5ce972166ca56de2237b400deb969c022340b1b0419ca024398a795b578ea24f20c6262e0b83e1c3b55e1703b59c7db890b172c1cd3ec712f241b38fcad689f246f9e84d1978ee6a7ead915acf82a3f670eb2776ccc03ab560fd892b563ec7646e896c009cca22bc0af39ffdcd33523e4132ea93734c3f735c3395c77896812c7480b1a1aa4ca65e0d024657233af209d32638eec63c121fba7b8f877e4ba0f74fd15ad2799a0c22e8f8e210154c5b654c325e4974474a9d9187ff25b139724542a7c483ee1380a5dd12ca7073bb29b7713c91b0473ebaf680465051689741b9cdae08d49f2c3524f659a2c982fd2eccff5d12a4fac4e3f96cdc9216c203554857374975a07961a7b3827b9e52adf0ff4a6fe5bc2c47c2ff6f909b57d25df9ef5e8f03c97821384dda3209472eb91a87ce768e0286b243cbcb7765f73171eee0d6f35444837a18274513aaf7910704266c5d0e706bc54a20a39eba4a3dcf359511e28dd7b726f02e0ed1110fe176a3df69f346102226a009ac0b604e2539669552c7373103c14c622a85ff1453e9a6dd93a9d0f0bcf867b5a122956b0158099b3ec16687a28f2502a3b98054f44c9e29beb249b3361583d122ff75231696859363d46e7e118e396d0d3abe47a41fd67b84a8110883bd921bac7369943f293bbf35c6dcd4672bcf7f3d52a0cbf1b8d7164d06e7155d186fe2596dc82e0ce51ff73e930d1c725a2a7318c09124e50ecb8496891e57bd30f1e234d6aa39d4522d4fe7b2bfe1cf1f14c759a1a614b81cf42095b65b3b334ef9cce5d6d1c6dc2b41a138152ce20f91bf338e7d9e661d55ed740922572ed64187f774614706e8934bef09245e6d20f656c8823d65eb5018733057e3f491bf31d59680efa0881c56914ab385d9d3fbcb0d81192f8f0e69331d0a6605a4cf87d6eeddd17212382069f7f41a525914e718ad2532b1031bc8822b4f6f589e417ace41117e3dfcb12ab22b4015483bf5c7089c1590fa4f88155a703a0e40d6ff2256a59d823a0dde56b0516b93802ab0363c729a8aca318df18488ad0736d86d2d3092abf6c8a969d69d3afbe340b33872ec22b05610b190b701ac4834c5c49614f3b91d9d76b65d73857c06f8cd27292542274fb98a407d57e0e40199e28af38774208a23490e68fe82845c1fbaf209bb61f8a1ab25e5c45f7e537787bb2a9243f425b3f52a21ed323efebfe3541fa613aedc77b244f72d2357a1f950d04f049c5bfe630f0c41b77ecacf7a7006c39d35eba2e29375ba1fd00b55de5a9cb6eee44beac1e68ca579404fb4266ec221ca4eab071912b282ee6fcc03b0eab3a8db419b300ecbea99650cabdec52574f771797567e8c13e2bd41035f161fb79e6a294108ce5748c2566a17fd35b7dd682071940cf4230bd07a689d9b6ac7eba44789a15ee77afa2cd5586607480acbb986127014aa6600ec374c122ba9e47788ea12948702a30672fc38053c3defa61c5f33c3c6e6a7da204c60105e32c1ca89e83862750e32cc520fca8c3e20f87e19809d8959e7e42eb7949271f7c72b0c52afcb50b2e6c72f4604c2627bfe856405c8c5d05fd687c75a1fbe15148f82d5c00c5196868f68927258853b00225b47d827c9cf5bd59a70dbc2065fe53720f68276dcf8069979c6dd079329bec2403b6b3380aa1ed2980e403b524b819023f1098d4139e88eaa559964a759626cd8c2aebbc0f613c4f3b6c84a9f63af0331b43e0445b853adb6d0c35d3a78c414a6aced9d4c70c14572194a0ae091e4830abd9f0fa73abcd09bb5d66c034e59262b3973a8ba3a17d7caa406da70b41b4c107fae9b2f491e1d322899ce03874b76a96177eb1ec1b04091b9a74f39da1eb984f482b8cefa641252337a1631ceaf8172e672438400336aaa8f97618a97bdcd25a6c1b9d5959dc273f58e0d0cdcbdd372605478ba0dd0b17185fba3657271be3c5ebd0a036a420b328d17a68ac58a9972fcfe078146405e55417122e2b920df96fa406f40797439ca2591a9c5bb5dc17e3e874a05a25f7218505df70b18e635280d6661329e4e982a4a3268bc639535af3eac84dd1ad891994c04e1f294f15433cc2bc120696e06994d9c43d283c45541cc252833d5fc07687581b9fa118807ee0a7c300055812cca056d2a49c1904236b9b3a1d26786f8b107c0686b45f6adbf9f99c1016a4abd408a50b60b0060a7a19ea169e8db45e6f0aa58217f016253693dcb880092d4b25e9809c013515cddb41faa35a5c39856d89e3440324d5fa382625e0b028ac4733c3d79e9a0b6520f6dc92498e2456192354be4dae6ad71e722388101630bd2909b54a2897dbcec2ddb28c968f5cafc1edbc7b06af70ff2925ada7776f22ca9a708c8d803f9d7ed45cd20aeb445cfa2f78565433561e24379cd2e1cd71f227b4fa57fa09c0644ff5f06f5a8e7a72c0b4b76b121a6b4aff6357771d87e3f86182667da1665b30e477685b1a44be9bd92042ec8d3001c3ec19a9fe1d140662797b45be666b745b90be3660627d379ce04d982c4fbc5abb3d89d90f894cc3bc9ac8c4033604fe1102e6769259637d5bf341b5035f2f44d725b34d40e83eaa30f9b51472bde77c7c2e0da6cb2cb3cecdc67e9670ab67e8f878ff992a904872d4d0c06991862c4140a8cc46a6936a405634401f6104a5ef95a7d9be05d90a3cf2b47963dc398ed69fd7f2cd697ccaaedb36ed1df458f58d8c4bdeb312f30743a94f12bd3bcba35614abb17aaddfe0c1b93b296fb7b3dbaf398d34e0c91ad60c906a514594b706fa55e556f00084646c0874a1f9501cfffb7847dbc88ec38d07110c454130137e465b08101e5edc6cc98290e318de0e0332e294540a40c6ae94aa04d2d604574cbbe2aaa81fadabeeb4c6deb1e9fda340845d1f23d409c5233843c462a480c7a4313fb39a94c20fa81d31e394c9a33b5a81871fa389b57eacf422512696fb9c5ea51f792918ee25d402677b93fd10e50fa458d1f75d544f85daf7923e4a48e118c13744ca0938ace8268ff5d5e3348c537c03fa2bb5151e8f8de554d02d5a3d44743278105ba891e144157f41426c9b84152340cc90a45f1a870b58b97bbdb7e5173cb22585af721d28d7d91e2dab5bba2f384a7d2eef39043b00898d8381c85f55c02c4dc7e6b3cb8d58bbe6dda8092e99402f3a142b03ea74225d94cd7b42158b337f88b75b236289d6ef6210f603425fc0c27061c44881ce2c48b5a2c83fe7b6d0c88c11f76a788499988c859f77c5f43d1ab221b2c058838073120f8ec2f966e7bbd41578632c017b1d1736a5479c143df1380285a84f7142db8cc62c52b9158c6c865817b8472cef7e24011d8ca6c15b05f962840175327252b31e480add136b9a6ad32e5abead4483fe17dfbcc814932960d0a24cc028b41d965c2d61290dbe6a300fcaba349303a35a6985f4e45489176ad14405f07b5f39f39c04abe7eb422a28aedae5e92c7cbe2619de3555f88e90fe37ab3d26819f1fe8b37ef7229a0937408687f37b37c0586210309b1f7a3bdb8877956030b74d3773b23ff4f6697182f9f3127e2e2c0146792a8c0577f89e9f2dd0bc606dcaeee7d46a7f715dc17bd8807181fac0e55c4d9b558151519379e3b92b0102a0a9565ff2ebdb53fd390e463d8e472789cb2e96dc7ed934ef14b60e585c48bf7dd1164f88187af3fedd487c65f88d4039ddc2c75b4fa3f720e7299682421246f32fb19d56832a10b852c842129e7e17aae0c372dbb4198ca772b76027fc371ef1876e7a5359960cbf0e538ebc0ac03b3b54446a3e8e6c125883ff715a2e927d12bca876b5d5e1fada811e11fd4c41a019327ac00dbffd42f451b8d148dbb4332caa4cef325f6331540a8c42b9c3d0e89e115530dd515efc87d0e2dd17b4be51827c99d5a3a748ad3d90efe60b4b39249615a8418e3694ea6cb77dce021766a73d746346a0844f94c6f08d6b9572ce3cc88950a48d0905ffefae86cd25cd4ece602e067e2b8603f06c05066d2ac1c5cb41c5bd75fd5ce33c1dbed453ba36f78b8a1c4f1786c8e59aedeff885d3d6a27ae3541d14896adb36dc6b79a518cf5a31335bdfadf7c90773f67f117f9bba2821e5137bc11a9550017823a1428a627aa5a9dd11905d406999765e3a11b64c10d6d1a2d35d8ba9df045e1558691c9195f96bbd27cc7cad0206fd17ef9cb77c2bf11c515d2a2a2a49cb450b5ec4370534c3e9f0ab8242bfe3a5cdc4776856c18f6bbfa622834101fdafcd4859f0b52d4ae714de72f18f90fb0c59af27035d1d41e070d92729ec2953d7029d086a1362557044d6d300e6558f0d4aed1ba60deefeecea6c27152bb1c5d7ecda9272303ac9ca9d271ad64b5dacae95c56accf159a4660223b24899df2ff8f7e0d704946dcb6479869610c651ca7237ed856e2b04a546f7231cb59de583a154aaf9e6e31d7a901fae00b377651a913cd4a8aea09dc085780e5211e6aae8cc1bf4f1ae7aa3ad51d29206a0a1e456623b6c41e80618c7adc98850c905a3bea34940b52be89436dee037d7a30b881f24266c9db69739c6c9a1d7b36ad212e1800464b1405e6b9543cdf6678c816b3f02b8999d7c0557fdd01142423f14c6ca98911a6e14b65679fd19e264e6d48d05a1acb41e04b57bd1fc6a93e10d5552599e9fa01c004e8182d9b0a1c082542f12d355716fd5d0ffe753079a33c44489d2637336de312202aaed64a029e10d26f1351da11cbb5f6276e715bc20c653507d24b8fd7b7cf0f4f8a3ebb85061139a64ba386aa614b0dc40f5d13014ef3f789e70488960e4219b28223f436b5b561e9555c532bd2e6026e11ed544058e9be76f5e522d532efddd876cc7cb242abfbfdad17653770d3e4c8dec288a77d9179709eff0436d6b88b694db5707c4b214276a026a39644068081d00c3e4207c93d6a8cbf7b881429cc56d7d7ab7a5dbbd1175969320b2530dd0fcf696641e9032b4a59443014c6a3250ac886689786e83b7e0786c8c6b81be0c7248b070960c82d51d3fb71a0ccb247b1c36126d5a393af25c6fd9748f524ddc22d3f41f5de8319dbdbc231d981c3f55520e9a52d098e7c251cd5cd5f8a2dc44f427ebab72ee23b9a307071375454855f8679cf84c2b3b02b4207bf936a243a09cca6b150fd59bc13e4a7e461581cb8857c22d70ff8a166e0e67f23ba7f9a1a1808e8d2acdeb4dda2f11d5aacbec1d801d587ad945452790632c3bf7534a83c11d83222fc641f276827aff1c46d0173ccfd10ee1cff30cb40f941d65fbaae147d1135c0f24bb785b32b852263308dfb3b9c1fb1284d11151c59344a63008af7a7e9daccef9173004351cf6613fde2bbc17c1db29217828ace806fe0bbe6c3708c21b97ec09affa8dbc1cf33c0f5edf4ac6e7d0d186f9ea62d9b713f10d2b1705c9ee9545339c21da9a1fb4224e81c2c61e74a439b108bfe3c3c8971eac439c88c3777d61ac04c99f2fec41084ae938f74c5d3d9526874bfff210029ab228996e1ea0f6f06bca0e68145dcd1aed57a9416b29c633387ed2e752aa232a2e5794997a0f18c9e1d916b272256a9d795e09fd8d09957273af99087cea9c2681d3654c8d5fce64849d21b78b8bfd0a053ff15d2107f7d54afc928beffb3c30215c0fb7138f3fe28a9f9a4548834b132ede488ccf36f708e27cb02e4fc95374aa0bade0aad1d367ec130851485b42806681c9930e7120c9b7e573f6cb158ba885d0bebde06b9110cb1cd3290455481f303c11955a0844e37f92c49a6ad67da44e932bcc28b05b19a6b812d6d615db198c0eb1f337224a7629a91ab38c541d97c8071dd95c14fb8196b6c3010ae07400b8ca6df59b95f23b19c538bdafb3f67256300f75bc4e1d42275f8fc170dd39864b02e78d4cd160135a113ecae93939fa85d4d2ec097435980e92dccfca388e9758aad7e536c06682bbf0118d372d60182275533f504fca2996321f27ebf0fe9ff9c2652b9453142a33efbb8648d1115c9d051255a4e3ea0e9eeff188f89489c5610a0dd44e564791212f8a0610ed45915467649ec07d174524bf0a59296005ca0dbfcc0944811435441a72a7ea069120d45934e3706d3e1e5c2472da99d03c60dbd1480df7e51a661b9433548704c4e651801d9ab04a6c0821e87299bf8238ef52c62e03c97c272c6d68945856052b6b08d698706e1323319bd0918619abb448b85a03516019cf68476c97d0af798e60e1885a24089f382c50c3555d22138a2f4a5b8f60ba4456744e4147664bc401c319d39c932606fedb75f81666f9746141634f11a731286b42bffc705d78c92f38a0616d69325eadb795765c54c3933819dd3308822c33cec77eac57502cd6e6b4951c07530894159e41aa764ee8bc50d821b4d939d7627a80c0d8825aa501f73c45d57a138d7a5ccc374928a566771a4e08a6d8c378ebccda8800d977bf27a0af5034a6940ecce5722fa2d69353a5cef9ced9a31b3f7992ff9bdd30b802b14e130f42c568972fe08ad6f662b5a6f43bf18fb1b5388c510524ad65fb9bed28b6c0893894ac04ad344fa1a33683b3b0a5ab4f2453ffe08050029daa192935cb2d3d51f5ad5e1e565c9496af4c5c4445864954200c91b710fecf4954b102becdbf430dd11ae0b8f196e26209287325a39b356cbbe49a56771b05135243eb6ed7249ae6374b408cc23714689d8c2d1a53082874b0d8edf6060725a9d585328a9e9bff2fd89ca628dbc1f153484d324eb813144b901a2a64452bd50919a61ae96a49a31f3ca8045278284843a44e64365c22b4e7b9d85648a09325efab6f6801e69d6f95226b4f298a7dd5a0fbc4d2ccea4a98585469ce142f54a17d5d3e524ead36ec597477d8260d89c2de629983a260722e8aefe2f5bb3df8785b45e132e54c7ef3ea3a1e7233ca87dc8213446ebb86c86da389c9522da313e52e887768a7216e5d89b94c944a91800708822f7eea599d3a03c82b522ff2650d878b1a8311902435fcc6b51383bc2ad604ee826fda71518a3b1135b121e6b7a195f197ca183e119d013ec9f08101f966f024771ff885400a5b78a94c20cd92ac16b0226b3290f80a9b502c5810f1ffacaba5b589d4df063230f5a9b1b4921b17b682eb7b644e242c260ead231ee2f0d4256dddce6161121ac1050180c176c9f402d36f3c163476c68941fa7acf2c56639eeb5f010fe794bd808f7659ede183e957c4d6de0959a269c3dbc34c980c054f2862a92c3ccdcfe7dd37eeca8ea995198166831006c4058f691e9faaa25da16b0ee2f4b3e610fffb7296df20f61ebff7f641f49fd82d27c2e36db56e903c2f1db4c49f7611945e5b301ce2ba4129c0dd2024e73377d054bce028cc7059885376317f5fab0fa05b52aaddbf6981630c2ecd6d20ca41ed250a1c4cfea2803e54c20a54242baa607f7a1112389a1863a22ef8318c254c2d98be7f5e106a13797f1f7bfdbd704fd60d3b21028880d97e0008bc2872c92739812957938b8551bbb41f22505d728b4b10162bed01a86159759396c2036870440f1a8f64080c0431cfa52be5301ee15c79844d1afc9289a87ec105c421cc8d63199d3b928e12fdfb6f97cc4d86def826c88e39e6967c622dffc1665543af5366af2d03760427ee151fd762062b519250e8c68d4137646f466c69e6faf88743dceb735cdc8e252b7c9936ff035b6ab4085c0c5d4b7eeb22bcbf3258f4b97902e5eca0c0fdaac685f417799eec89096ff7bb09ce6e8a22333df992349d871b5f8acb131fd0eda7941cb1295deaeedc5f1977ba233cc3f0bad4c6bad33f45ffb9b41910a981d11ede58bb4c90d64d2c73f64db01afc09f615f15e1861eef3f645275e04b682bba6f144389cc359c68d670833712f5e8fc0ef76d05c2f620af69401795c071155f55fb3c352849d3b9560ad21846897fcf3658bc38b45398fb022302475c0220e70a88e3beb1ad81cb791b3b6edae34d32d08f005d9f15ca0ac55eb0de2cd2dadade5367c00985fe7c2d10172ab9785387ebc5e350f70a10fa59053e873d790a440faced32e9e47b3466f025c21285cee41c035e4e95e7f7660d222841db125853591166ab3f7a7552bd5a540542a57eb0216ae6c3f4dec23b65a2540b5f83df7ebeb3c3152730cc4794ef760e78627de863ac3f8bf395505a08dac0706bc54af43767b80de48ee3da0dd1692608fa636945feb115c7f9a9d5b802d407184e39879c78c4943de4a79ff8f246c84cabbf9d979c169126314d1e1ecf06d217a7de6b4af3e3e8ed5ad45c11e650e66bad16e8a52e2dad72e146743865a4e0b88d0e6ded55c0108344ea18fe2b11185248134ba81f18b99ebe6e5f7afd73534081d8ac855b845f6522b5126fa55674c899e9735406c0611d51b1e759591c0cc0497d3dd80f8edacbad2921bf74717591930177d943e653bce85f9dfc04b3a339cc6b1cfac310b7896134954397d9439e2bc8844b8008562d7a1297e5217074548856d4e2d08d7fe4894030e6204177706b53ff37fe6915ee037a86d3071835e627155f2bf8c398988bb6627420cd6ec7a04cb9cf6df8b1ad8191b1bb7f16d980d0b9f0a8f9610b33c1a9a4e14f499034c27f6138c6aabae1c49b214ad91faacc6ba15e6b9f9f7282477a59d949a08dee1d5ff25381a2684108f181012e34fda431917e7b0b40f2056eba0f0a0e7b9ca2ea8b18f19e09ca4a5d1eb1f4836db5f1799bb55b8f802c90ca34b312bf797d607ad28ed5466df9e65c63c326697fb8dd8d23a616eee76fbcf247dbee6079b0d09c6be3a4e99ffbacb5cf2fad8d16e923fc4fbd1426f9eac26a0b3d01ca50f3921aec5c72210a691bc74e968b5131e2e388d5f0a5d911d97d022292d144db309270b023742e9d6c84fbd083c21144a70165c5afed65c9d720b5607e31b1587af8f8b20d3059283fbb7e6c2f85d26221694b42c3f39041c1b44d5c1dec723dc2bbdfbe07ee39a2e24fb382b9f72c422464ebfa2487d116389fdac82041fd009e567c513eb9026eaac9269103cc2e849fc5cce646d2de72b7d2ff3a9f9d43bf8e37c9098a8fb230665f5bb2b93098971a68e0956761173e44e61d4515ee5ac96188d8c0a3fa25746e321a1c7fa2357b9da8717bc5022a22e9849d2b15b41f12dd8201fe85498c5c6816864928ccba296a9be3bf291d718128ea0fcae9ce721cefc736b96b2605aeabffeec940771f16e1f31ee24b79e7307aaaa05e27b466845bfae9d949a1894e293dcd270d61250b7971ff87123f2123907d85e95ac6ff77e04fd148a3a5982718bbfeee53a8e083b30c991a77f16703b0ad18d23630b35bbdc578838917412f438152b1881c69f1c715bd1cc1de7442ccf6976dbebd5daa998a1a791eb3d51d267f72e492522cb8c9e0fa8e870b472b14483895e7f061ce48560d6e50251b633d72fff9d10e73a988b5c28b0b6a26c8e4dce787b516a210f8e3c686851ca10dfbd448590593dcfb95ac9ba6f0af2af438fb1f3061aee0453bd5fd20aa9a40bef31d1794628eca993099f5ea9bce003544669d1919be14af87efc806a822d3dbff4df7e4ca3eb5c717deebc6ee5d45fe5c7cebebcf29007736aeb8e298aebfae147413689a10597429f8a53d794b91a645c2905f7f59c5e48ab92448eed2c249a713fb0e6c6527a0b2018eff4546d1647481660b57e724e44d065f77ac644537338c8910bc150f4d6a0c2ab285782c553f92e9ddec3e434f8527425e3deea35b7d017db9222ddd7ba8b931adb7aa4bb04561e47bbbf5d51bc34925adc0a8f879c7f11950df97c69e703891c2f3c74866ae9dc18515dab9af606f082ee1d58ac2e5a2e9ae0595e79cc5e6c6e9f09d39f0868053e3a035f2491d0e60e747d0d3e0b0d4feeed86d479110633a6860eb2a4b60b0cd1e77950d5feec61471b527d0eace976d043c7a46ab40f82ccdb318801a2822683e548cbfc4259eee390bb0c951636c0ea441e6a5239dd0c70360e642b6a1510665baf1a3f214db6269ed91f6b90856bf5bb8cab02439841865cf9f789742ecd964fd7b0e725e7809fd4af264b356482a055da2ea1b868f476c6e4b649e007a4528d6eb472ee27ad4683e5c462cbf575c6ae77af23ba668d5f6bde35c6d5a6d874881b196dfcaef7b6b3ece39bb76496656b4b7d4dcbc50f934b696ddf864220e233515d21f22ea30424801a66be1f2b0a20a204f4aa82f378402309302f8f5ea35dade94909661085f7178d642c4ef4d526ca406af2eb4e2c24c5055ebd9740f914e894691643f9f80452fda6c1683be6acb5883c7c3d6ed1446b1211066762d2604f27e662f3a1bdd5e9d93390699fbb6f2a5857224c8bdf7bde8f8d7cc54a1fcb72af4059c77076e3f96b25cb3f73e3eb2de0f68c44ccf0a74faf824bd25789def029a881019b436a7ad19e702370419aab6dbc84d292948b72776593f7df338273d611f253e3cbe7303e9dd066f1951232362e8abf8ce020edb5d6f3c84a99914d9ee6ebc07dca0433c2346cae72120e563c8e50fedee66d29e11f9aa75230b66cbc90d3c823b668542e74a8aaffbf69f5eaf10e998175d7116a5b9d1860b67fc5e5a37693cf472b55ac788e3db8c6452b391200469769c0da4f65e607c0624eafaa7b60291018c2fd702120b8d76c9493126af53074c1a02c6ed77a037f9217ced3e842a77d2d8f5f0bd153dabb24121e496607e69e9f6b97288dde24854caf4c5dec6ff44dc1afe94bec291155bc119ed1a6a15c0c638c54b1049ade77c65b3092b24a072b3b08ee133fe43cdc3214641b65edc6dc3231b137b09e393937c6c084f8b942042b14d0c78a79c9df79200ee011c2142219b29fef891d4c43a39d850c36eb3d8eb2511e8e61ed0c322d229290bd37d9726f29539232550c0f0cc00c2da02972cf61232fb8878778cb93310f06934c5f3ff7dde1e738ee397cc4c81c9a41e38479386c03cc9f419dd1349a433f50a39d9f1ab8a75f43f740b8a71f840bd275a756d261f560de4a09dd5ed242738a3bce2325471b88348f5a4953ae3ffb67356336b5cb62aae1ab64680a2e0584cb5a75e8438a4b9d478f1b1f53683f339637f514cfc6faf2efd83da0622212afc62e3b0d2b5bd1d77ea4e0ea76345318b42d5bb6a491339aa5ab7ed7aeecfd6f56f1bb139cac195f8e525c4ed3fd4ea0a150689476cd7c7d7a44a550a4766553dad509f92b005f9f12f90b00f6b25a3f86e18f3779f426fbd449bbc65eda2c385641d4af79140483c164f879d9a84f95d4a74b98b44b52511acaf52951bb8cfa55c5faed0433f90bf4d77f7d87f94b84afef40febaf19fa4cef2193fdb6db49f756f4129bdec735aeb843452a5c140ac10e9fefc74e872c912c773c3acf5de63812c70e60080de0243b0a788c7c60300f7e0781bd87b6c7c108bc5c98038403fb27194ebefe4d3872b6b7b7fd5fcb68467b043e9d026dbe76c48b9a33fc9f549941ad093bce5ad247f551abcf4f26159f3ac3f4af298ad11f39cc7fcd540ddaa6fadc73c56e3c7ebb197272f515ea0bc18bd3cc9f55f8c32a0ad81a4d89ac2bce67bbe9997628e1fa106f77c33b849f852ac791c5f7f031b09d8411d6a21b8030a0193beed73bc1447006b7e840f82e3736023391ec78f808d14f1e4781c6fa4a788678487e5c04700f0397e04dc53c453f338704f510e6c24c7d7609410da007eaefdd58fde64e302e06b1ec78fcfa406e3c0393639f07bcbd6f724299a50a4fd09b4b1c37d620394a20c28f307ca3c03da1f7e84e438402936d2c94abb584a58da25f3b54bf2275da5cca920dcd19b647e01d4054fa70519b08fd2b8383ec7b3704309eab21a380603751092582cdbb60e6c291da5c3fa74db3ec3817b8a787050f9ca817b8ac6263972fc088fe3b797d2657ff334bc2915841b73c61ddb091389a30106c84c99c81df5fd8cab7da53f491dd6464094fbf2bd6499da654637751a4d6c7c863d0ddc04c7d7f79f76514c7f3a4c6ad7a6a45da3c784da353650a6438db48489c49138b0f41696def226a4fabdd448fef2a66ed5bfd72601e1ba92153f4acaf5fdc89b5e9222696b7d4871bd813a28b6a4e16fc79bbc559fc26c2f7558749b690049ae3fccd78038c017bc556b3052c40099690d468a2886e1781c46deaa5ff352cc01c28ed87823387e84cff1e31c1a21079e474635f88f72b5818bece7f89a1f2513931cb8064f1107b6f1567d1f220a72217f49b19eaa7fb578c30de3be6a7866517dbd3f379082fe433630f5167479cf707f9d32c3806397578db4cad86320f853d443fe868900fe148d334bae6fe36f803f45633bc9f56db88031d4fc598c9a3945437dae615c770d6b97ec1005fab2c32245bed3776f710c9ebfd3379387bf13c6bdd461589fe6549598198e9420c3064d3b8c21af60c1823152b0c5062fc022d63ffd878265215b3cb348cf6eded4619d49e0b412c4a5b00eeb6fd8d3e8d087946b1fcfa6256fd55faaaf8153a9432c4edccfa337e55adf9bea53587d0a549f06d517940fab0320c59c44435928f1fe1c21eda2b97f88440d716fb2103cde2b9f85b6dd524b6e4aab8f58c18fdae7e12cee790ff7d8d7b091edb3efd1b23772fafa3ea211efed6ba07d23a8d71e35c445e16f3ec7d9efde3efd1cd7c0d35b70eb9d186aa645f44ff8f3aff5edf3548da7436971b3bc29684287f2c775e2ce1f592de92dd932bb8193357246a6e9d26f3086ce393d52472f643e52c690e50b79944918904a99884694fb2538a6ceb81f0afef4291e2f901df370fb53be057752e85082f51bac4a5952a7fe92611c79b1c45d9c3f76daf5597b03ae0066a08ebf1442822b714e8f0e7d1871471e79fe78a323668a70d2b862bcb8f3c32b47797a0f90ef421c5c0d59e1f6cffca3c32964480b2fd4c8964042fa35899886b0d0c20b31f4fc34e557bb3e16cd8db492a32464480b2fc837ea8aa40e3aa4d26c051dfdea11bbf1efe16f82ff0f31b468cafe2cb8bf3f0fff1efe2638ebd270597786dbff80397d4a8a82616e81616e4925b9ef6f020c5c5952c9c249ae4f83b83c3af4a7d8c68794bbeaf0ead0e1cfc3bf87bf09190f43f227e57e1e45779c413f83fce5820abaf9845d54d65e9cc252ce9103358f43b2e318ea475fe6d36f584ed568c592ce493005074339869a6d96defc26a9d740187c34017a31f559bf90fe146842b75a322027e5839bf363a75f48c7e0b35fb3c98f147684acd02f99c4420b2e24e5fe22ff3447393f7684b4d7b6049c7cdd2e4f8e032dc00206489441e5c9954f02081b9cd420344308c4f95c460d71b5cfbe81f0786f2b196d33c973892bfb82071be820cb2796eca089102c208349945ddef9d13ebba99cfd64caf3c71eca4bde9a1f43c4cd96fcc5fde9e77f03f92bc85fd9d432df4715977e88749bc85f1cfee4732ffdb5fd94389f0c62ff74927ffaedb53732b651e63e7b9ed36fa37c140820310664960c836fc12e3431729dc35903cd5887f369985bc422893f1bb9a304204c382cb388167f52cbde3e4ff616f714c9efc13c9b4de560e3dad203d1cf922962206588298ace38e3071af89024cedfc01b6fcdb7e08f8ae4662f6488b7e6df58f0056fcd9c222efd20da674bde1f93185f1634308591c54f164a3328e539e7521634583192bdf6d2e3c95ec3df4e4f11cfd6f21135dc63e488b6245a181026578ada9228458b61da92a8fd386179ca4fca01cce03621e44514973cbf9f78f124cf6f281afe66508742de1941f333702acd240634d0d064d2418da4c3118ab7a0cc2550e6930ea7cbf9de124abbfa358d3082c16032b49269637e3399df4edaa85d3763c124cfefa37ef537893a9c3fe74fa6f92437509edf401dd4423d349fa88e6abf10c17d3b2f81fc40f1271d4fd13f881191fe14af3f7d2e03a5c84d4f47fefc6cca1945bffcba82529c4751481c6991921afcf0e626e7c74ecca7e0be2640ffcd136cd9b2e507a24f9ef8430113913f71f6c9f27d722a4903b2c04187257498828933368006115120415124c69238dfc10f9bb8f2c31a29f7f397f92ee0072476b0c5c99626475e1c31c40f8a48e28326449affd066fe0d91a467e41a7956fa5d87b6c7957bfa09d674a843fbeab4d1ea2cd2af39430cf60314643397cc212e8eb2c7d02e1d3692e9469ae1faeeaa080c2828c6a688bf7aa40e8c38c3483ce2edf084495c7dff84f9abe76b62858beaf7cf10e9b6cb25e3a472fffce14ee83ef50e6e291dedaad2eed898b282713cc650c35e81d25b40cd8ebf6c5ef0689ba5a3c3220ec33d36b951f0fe3ba1fef615fc4ef07a828f3c7f03bf13fceb57ec936dfab27414913bfa731a012bb8278fa14f7f7a1a89e33bdeea3f9d8294c81dfd2bf46bfe74cb65926cca29b89a56ed97e18a3f160d2e029b40fd33e81a794b385933aa8e723fd8c3d5ace4e699b44e9a8691cd6daa2db46b859f2255ccf7ab8cb264d9617f10d73fcbcc18103db0228a174b34d10333b00082073814a1c5061888fd145c61889e4925882bc600127b8eb4be8001418cf92306b021ca9258e3bbe7cb019278e4db81d853030f6903f4c76016da009d807bb36dca36eb40d40f19f2e2929a5935f3110a357a9c9c21b8d28b9895dcde3cf2d78c79abff1eb9a454aa97f2a5fa3c632eb19718c7793aaa58bb5c320e2a77d775e08a85767df77df2c5e3cc2cac70fdfefb2be6ef87ed52fd7d1ded72f97b5ff65fef85d850e28ed20a0378f00a73c85f2da0300cc6dc0a5cfde52e37f30afc4ee8c60f8597ff4eb8bfbaef937d72f73e99abddfd7a81300483c16410af0b96a1dcdf41ed721769be5f35e4afeffb5544fe9af9fe3abdfbaabb846796213297cf3c1dd5cb801f8fccc7bcccc7fcf45ef05432833a6cd58d85716fbf8f22ee2897bae9dd0b76de03b25fa1c3467ddedf6f25ed1a554228ef76bf64194c5a6ccc34fa258ffa07a85d48da25a96cc124bfa6f809f9cbc6f7c79ac6601ff17aab6b7cccb3fe460dfcdd97620cfe2efe804c31e68318116bfc14df5bfd407eb852f41163be06c702a5780354fdf4742e930e7ba8c3ee1b6007cdd8c5ed44252471241581dea0354009b6e0afc722e07903630f8faccc793a332677f4df5812abde03ec571f719e40dba10df0a78806fc402c42334b22c8168c61e60cf411a5977d4e6b556252b2f61290385768b28a1d0c655a4517b14c290bed9243ac6cc27a29d678771b6ff5d7006fbcd51f030a61d3cf23648576d0e6e9d15a33176e727602adf8931dfe4861c666ac7f2ef54fa6fed9a4e27c56fd61c1c91adaaecf5fd220581fc60c71e7df396d86508d562871ce73c9fe92c35c57c45f5ff55765ffee793ade9fc7556e28c4fe0b460e90c8fd2856932444c0490923f777454ab68b34c60972ff290c24c8080ab252bb59e47eebe9b4cd635c963f8f2cbfc8b58a3144ae9fb178dae5d9a790d31d7ee0b94fa1f976becd95397f1275b9f3b80a6387dc58482a618091fbef1294dc5f5949b8c0874e8a22f7fb4ab64b765b3942885cdf041dc4fa29ecf8eb0e9138f3de804d295d3237151c08e56e2053a8a40efd648e6e8d67fdfca5267fb1b0119967bd4bc6b132cf7a23335fe37de66b7c1099677d4e6379624696589e28c9a3ca4af69732c812cb13265965a55d2b252c5c533ffd4887783a3c1dee4ca66e2e75cbfffb9ee6c3457349ee10c2eda701732c113fb0674ec1450d78108f481f742116f54faf042eeea518866f47c7c65f32ef332a22195045e42dff7b3dce5f5ebabb7c7b0fc88430c0ca1926425f15050158dcaa8a925d15654abb4615939cd4ae5145949dc85f2c237fd58872d42e29ed5abdbf0aa95d158f2eb032ccd3f7573169c15b9eb9bd315808cf6a2ab9bc5f177f154e39c69d67bb6497989a1ae65fe37acbdfdabbc21de2af344aa5988c2dc9a5b92499327c97e493a5251e2609843022c756edb500484b5eb9d3242b40b1bca2ee4e2b909177347a60fc40764c6f186208ff49654d0a34a10e1e373926fce0999a2671a4acf97efb96a6e6479a2c844e7df9337bed2793964f7bcf3273b19d9f1afabdaf611e79abbffb0c9c9f5d003b4b05653bdc7e21e40ef99a2890adfe27582a9847f4effc78dffd4bee3924777486ba7243ec830aab6975c27c694392628ff71f979dc4ede873ec2dfb72cb962d693cc0738661f09179d95787b44795712711930ee7904605276bc61553a6cf49e9f2619641fe52618fc1d8d57561a13ee5b1f07a6cf4a0793fa500d9064881bee4b198a7d3583aa4b4b99e23938b1bf4000cb1869f008b78c4460bc41a2fff5b44f7becb7335c0a2d337e8027ef682f753cf733ff5d6621e9747e11ed4bb7c4feaeffb88a8a72cd6bd59f673a252b0fbf2a94761e92d8fa568f7273083653adeaa44a654326df297cbd31f33981292caac4f645aa5c8b4c220533cde7c45a663645abdc8f4e5ac57327d17d063207526b9e3c22eaaa78827e6efbbbc919d4fe19e7beffd8b8fbc602336331f83df832a1151bb5cb2c4e9b263564d72e929e2b9ff72ff7b991f2f96de92c143bcf5834c6c0617c968b9ab8779977f79d6ab7e7c15ceb1499a3456ae0ceb5128140ac350309967a93e258367ac0d409ff528fa034022c60a0a72d80fa94fa552a94fe12346666a0e79ab5d8d84858be6ab1ea53a9a407e407dea6b3451bdf4267055185654ff48d19c3f45aae768f7d4d3e17ef5c3f5ec65bdc78a72470fca9269ac88c66a075618b012797d012b146fd177015560c5d206a02fdbc594e977e591021e49f050e2fa23f1207f7590b7e8dba020d99588070beed84144b23f3d3d6289c4d039ab441a13e93f4ddb7ffa9cd6bae7c4e304478a826c7066e9906269577fcc5fd4c85bf4959462b1a52526268f7550a694d2268923b3146766b8334f708abe44df99e8cfcc707ba4b04c7f95a5575a564b1d52baca92e9d398bf2a90bdd48c0e298dd12e688c8a91e9487b90294523d3af40f362ad02652ac7db35b995a843bac4548d7075d2217d1f55dcb191dc06bffeaf22cd6aa5c34ae42d3a80a23be98f35e680fe8a3f147c9ce4fa32e3fee91ad621fdda44f42b14faf5e8574ca7fe22c69f17874bbfdfdd6987ef3295c7e76174adc4a1425c4929165b5a62629a563af4de41e204c957f6fe2dd4434d245fa06c21a46b4686fe3019268fbd43f6a7a08cdce1af812ad9f2963f96a31bd020fa09b0bc049a4119eb314d87fd2e842bbd9c1cdc599556777777777777f7ea5e29ab3a13e7b5697db592900421778cd8b28a0d94e4973c9a4c8864952e8472e7fe09a55f99d8dfd3b0ee9f222121a020215945194a727f91176030a020a1a60ed2ecf3276c1e315f0d98464c1ce4ab2527ec9190a40bf2f82ec0c1210001405046467ec527c81dfd8e43b9a33fe88e13366173c848e25c217164fe50e2f8f7b74ea81c0eb9fbe504923b4c70c39a0e7d6871b5f71739e9a1e0441c7f59ce30cffc2aba88e5183c530e4ca44cc18904e4430836bf4f4ea6015a70c1eecee04acfc7963bd22cbf59295477c97ed5c06a5aecb7e9d19f6342ff8ebd3477d3be36dc1419573ecb5acaa23db2a81294d22cd37f4b677016f703d262913c6172077d1182b82932ee7ccedb6927eb8b60823b9f565c0217774e81629f4a393d7d0fc8978d179138f5a9eae94f227f794fcd782d56326dba38c8a07a97379a99e1da2c7752b8e77a9fd3ee7d4050a8db619efb1eeee9bfa9e7f13e857b8aba7751e19efe94835f873f20aaf7e771c14652eff2ddbd11ef551f10ef55cfe3bdea3bcc937a97e77101bfee274c55046805214d1cf681837b3aea90bea5afd1bfe024f229044af7c0296de32f0f98116af92c2c2c995ad9acab5e9029fd2249d08f008fb422ad481de4adb721cc0f6d4a903829b9e307573e27c194dc313f5ca1a5d46233e7cb26851d9e2b4479be90cb4a8d20cf4705313fb4b9c9999e923831b7417583a42ca970319471b2a47203257942f19737f349db82c9c60669b8287499868c2e13d75df1d89fbdddbe3d1d1cea08dd82d3a843ff219f9b1a008a3b001a6e2b91383064506c78c81dfe282eee3c8a62932bd85ef7ae5202aa84ec8faaa02cb4a4439f431dbad15739f0abf8eb77a8efbec7e381c41d5541285015c4624d28789c4b4639e50a0da982fe327918febbe62ec56e744126718d27920924d433734261983d1de660a1728358fedc2e6903275952e142494ac9920a174bd78c6ef95b81c5a464af97a95d9fed5c35e476665a666736ed9c5a76ef1704abb3a753d3e1378da1363873a665339b736a1967bbbba5c86046b972b3096e97a00594fef0f3a9a6f930a174cb1f8f372be9d05f15448201085d6f3cfa2091ed9f206b90b1dc711239b138a607d78b78cbbfe66f66dcc3ddbd4717b40decf631caed24379d399b0788728b30f52041b7504e877ee4cf75e742832f548c85d49251d88cb273dfb2a72ae88a212b42565005a984a6d00f4a427ecdc8ce948add7142618249e34836e1be72ff42bfb8f77781036fd335c33b28ed72c938a7ecb585685389491baf77f72e9464ffc93424b3d0a1ab827cc8fe50e6d1449a499d5541feba4c964915946fe4cb64802dee7899b2b7a03ada31e46d43ff3401fbd949b3f8dbd1acfd0c7f75c35fd5defedca8d5723acb6c6b1e863bf0977757235a999a429bd5ac5257920dfa4dbf979a498ba48ce4af13648bfe665517a98420d8edaac0c934973aacff65e344d2b2c93497fa35c2d13483fe6cead727d26f18fdfea1df48a84ba6df4aa867fa3d447f22cda42d99d29f4a4b99d2de2271e6d3252ded22a1042eee38972652cf24a4bcfd1802f9cb3efd9e9b0ef7fc95612215694122854de4af09d4d4c4c4b4b4148b292949249f4b3e4b48e23a8ac9f5efd7c0cce36bdaa4deb589c53f648bbeb5f7070fa43bce2531e412ed41a66864fa52b60c0e4b559134b70ccaa872119e8e7f1157fe9cfff5983a6a97cc31d4cdbff35935f3431df36f524729a4541479ce54148e534390ee9f3aea708ea9a3fca92369e9103795a445e1fa650d27bd06925adcd38f0d94c3c51d1b282b2171e8fbcf1b3758ac2c938d330d50ec27c756ee90781b0390574fdcf1e68b1920b3fca47c1d20b5521a21a5011a594aa905b6cc624989d3403ebd8172bcf10620cb164823835b7f499074f5b712204d4b7a1f7fcef117e4f4dcab70f2c90d8ed3cacfe46f3e596a339824646fbbd3db784bd5c31d6fce913ba605248efc09e4adf9d6de1b799c3732c5a3f4029499019da5ff743881fcd557666bbe17416308391973bee46c8ddd94e78fb3887c85c4ad85dc61c575240ed4e1f49f3c9f76b91b89d095419e1992becc21e3ce228cf0b1c51671e70aedb2b4730ced60455a9692cc9238f43d35843b29a53157e470fd436a87e011833b9f01a86c6686ebc2c9eebde77e535d96eada68fd9acb7faaeba2ba1fd31786cb7ce9c7f217403f853d05c6d03fab7ff97e019f660a3b4f98731b1d1d7a168366318f0e6f6c747418527f1f52a07cc0c99a39f3fc67bde48bfe9c538b0e8933c19e221eee37dcb33df73da7ef508dc23ddc7b58629a0e3b544f118ff7a9efe19e7ea3d06f573dde4cbdf7f5813049610fff45e14f0b827a6f7bef539ff23ccf7b0f1fd9f156b5f91f8e4e2093ba09caccd1ae3d9d9d9f0ef714f1785120312d31c9a423e93b3cf3c475545a4dd6843a9450a194e76734b8282b322577c6e807b7cb920a154cb419dc982ca950a1c32904d7258dee873be34546e572599c68705fa46c4a971e6d4cf7d44405821423ebe4a2b2a42205059b0da424b13868432377dfdcdb66d188d24dd7cb92ca145aec9229b6b0711b43cda0f1c8c326dbdc0c014beeaf4c49de1452781d16a3dc4f97b6252e4c9654a67052d1b8ac2ca94ca1441be3be6449650a1962a8326cee3060b9df99b2a5bb8d71720118596e21783acd836bb9e8aa5c5b038e0657256543e3662de86cb8a72ca9b8e049ae41708191b4107832e42d99b51348d32d167d2d715bda4bb3acb284953cb2503e70f5e59c7139b1702ec6a12f5bb6e69faccb4c678aa7dc315553e24cb9e3a65035edaae970867287f7cf62751cce693cc058422b4f1950cacd6a2939ae68baeb57d7ee93d5935a96b7e64bd57cef1310ae72bfedeeee28ea2f65484777f7eaa3bb7b369dd34629a5942c967c8ac1b96d2c7b62699c9452520a769eb2d75a168be58e4729a5fcc1e3094a29c5144f29592f5fd9537cb37f2a03a5b7a8cb259572877c1a1870b39daa68cd261622774c2da55994dd240e0c336f2ada49519d6e2779333cca98a5276e53d129634c12e784b3c9d8d62d613c40960fca9710af4eab530f6569755a1d95d22ead4eaba76ed609799a8e5eb9f3bb3a7db94fabaf607e80325995351b2c5f6300ee9557888695b0cd026ae6e1c49d7ffbaadef17861e4664ff40aa1980ae15c5e5428217247bf90992d3829e79c1aa8d90556cec9138fdf8ebf2acffc992077c807b39422fb7cf82a6840035655d3755dcd09f3d6642e5533cd2ed4e4bb9aa0e755c3c0c0c4789f4c4da7ef016ffa32f34c184ca43fbfc63b8e79e49148b1f5162b0563351898ac460c4c85a1ceea296128c53d4744c79d8fb44fb7bde1f11177e2214410e3d65a2bcb86378de37c99eaa833d5653296cf396b0ddb6d9d4c0eaa9cc698f2a343991c5cb12377e4dcd0e326fc0ee5abcaedbc02baf35f55eeccaf2a57e698d3e6e9c8779813ce2adb70f1d2b9b87b55622295baeaaf3a54dd3cbabb7b27a54b4a6b59acfab4d6ea298ac1f1b3d7fad273800899487de915947f512a2971ba17c9ad4e36573689636b68ac2c73332b64f90e02400777ca97f174e4db5c91f5e50ef936572875779a9e3c9eb8535a771144c8fec60836df023cb364f65e6ba594d2ac524c24a3ed3443e24a2c4b625896246ddeb773e2fe5a974cc42da8813f36dc88276c1fc88a1cd6366e03b53f814037a2f61cf8638315b507ba114f1ba8bd05a57802b7d7400b032b57ef015ade402afbc3a0e58a8938aedf238f440f6cef01fb3773a76e3e8ccc72f54e525951927663263955273d89c716783071e75717549e8efcff4e989ee7e774287b74289f82d75b003661477b559ed46b75015f5aab0ad3c574b2c3d9353c06ccac82dc217ffc165077e48ece59c0cc371dd6cfaa3c7e40a6d8d98585f2522e3373bfefcb41d349f9a7bc695966d9c6bc91a346c7f27458f46bd05a7f821dee1c237c0bf06c0180a30b3d1dafe9240e0f05dfb285cbd14970bca394125b0a06400000d0a1a3b6e45759a98e9afd05b0bd3ffd2072cb961d5d05c7ce5e69101fe286ed00e4001ef5f18820dabf91c7999b58dc7344d4706d192689e328c82c39c353eea03fb367497377d772baa36affec9f376cdcc9d6aeab4cdcb7a9bd2a0339fb59379f1aa849297ce8cb1df5c10ad49f1a19d67f5615f21488a254ded5ec76aa5c977279f9b4e8561926adb8c393c3db29ab9953ba750541d5f0e42ed8a24bf6aaac664e69762b76ce035b9c620aa5a219c8feaaec52e43a432266a5c4817819d6b7b2ae90fda536af6461c5230164e388397d46d3b22c93d50822cd5a2d8b264510213427a6735299930a94038431e7519dae59ab65a159ab65c1a47a3be02e8b8b5b0319b06caed53181f5a35b6d820c774ef104ceaacac0cd9928b32ccbb23ab52a932a0a6844e9eede0402972576a9a7aefaf2737ea4b003440589335179e2ebe4ca0e4f8ea50cb9d3e9743acd0d4bb9637bb94db76fadcdb22ccbb22c9321eda129b0c529aa6eaa035b9c220a94f7859b7d9e5a338a59bd88f257edf2a774054e7be890bf54a2fcb05f7e6d2a333cb21c8fef584e2d7d5342cbc857e62cd6f49f2e7dace6b376d380fb7951e0f44628446dd4ee0a71a7d6497f7d1e66da8ceda4bf6444292558814c9f8222b77577e84eaec63dc19d1e8c10afc98eb7b448ba41a0ba6b823b5ffacb45bc4b542e17470917513ef7d2497fa144f9dcca5f9e8882cc12d3a5f0838ba9d14951be8326e4746873c5518d134b469466dc3b862ec856bf7441eee0d184bfac289f9bf93a177098b89dc48141bce92177f070c10d8d8dce662fab586ddca0e1ff8d6eebb76da3c59dcf89d05d20be93fe0245f99c082f8208376cd08028d92e0d0779659471fb55797e038670e76b4be8489a2cade050824c93fb0f50c35c12bbf35fb2aca202113895231e469b7340822b5f5651c1151b2bf2cdb28a0aa0c842771cc11daf0a88c8f7873bcad84d953bca2c59becdb28a0a72e0e17a4280c9b28a124b79b4345c54965594b89247ebce85ad228cd856d437b033e8a9444d37df0a1e35ec424d6e1b503a6b723dcb2a4a5c916db36490291479f44a4cc9dddd37b2cdb28a1252f258936fc06559be84c1fc3b9f5573e43f9f47bb5679fe4d0ff244cd39b12c492d79fe0b50f2944d30a049b4439e46508e90f29c32b749e7cf5851142f799c59e6d264cab3a97f8c8072500ba9208fbd24cf69f433e78f3d25cf1c25cf77c1eac87bd92ecf2ba2923d29b2f7b687eca5a006d9fb4fc117d9fb300921b2f736497491bdbf314241f68cb2644f0922b2f74ad4cea14c3bcf4bfadcfdc9d3e928c7d1644e72481c1227028e7b4e5a1122734fb9bf47c82073cf42620499436288cc219183ccfd8d932532f73f9c5091b9df29022273cf793a9c1285e5d35b4fe744a7d8b6a79b1137e4cd082bf246f482bcfde6e96cff65fb99a7630f90b52d597bcdd3d168326d52039d3a298e0bf24893bde60a57802b218ed24a765f813b153e7f5c799c48a8984b867ac83e84e87f9bc8feac21a6ecff2ac8fea11065647f1b29d93f07055b64ff1f4ab2ffce1054b2ff101ab25761f282ec5f640618112f001281ac520452f62649b2bf0f59c9ddd3c79baa24f386659fde4b59f6b2421b58a639f66f638558af67d97b274bcbb21be70b7470d1d3f1898515568228239f0006419c2077f308d17277bbc400fa194a0110404812bb9bc81dcbfd26b40f4fa7afd4600b1d37f2c8830b209664207eb0240626282208194a1045ae9f4374031f6c3c01140b09be208111b95f019e4eb344a3010839a181501072fd1e774e15c208628b0c49904892e463840e8a924cb08514162c5922032f0617a78a100e38723f023c9d26618a3995c8f569fd03783ad592d082a6f9414aae578cc0875cffe64e0acc1054021b8420082126e80d36a001042482a0031a1588212c2797a7530930d2e48681d83e7c91fb071f72bff4a104b9ffe5e9f48b3dcca9448c12727d03d82288e8e1bb001701fd56490a7a1023f7f3b85b8c96e8e167ba4aa0f2002d107b30120119b99f00b448082004d9b824e1ebb74e728be00538c8fd362c5f82c8044032e0ec9830b95f5e91fb07e0e9b45dea82aac8f579c821d7d791c5e81d60e0e291eb5b21e4fa02f074aa6884fb4a872662b0830cb97e003c9d1a45ad49c890d20aa5b8a2430190547122490e49b284415986858951470e5c1885204908c4a88224885c1f00243c71af16230ff9823cf618a59429598805489269d8f053840d47dc4043ae1fde40835cdf0688882a4034c0e1071caae4fa43723822d76fa1c8083012a0e8ba3cbf5e4182470f24c4514a298009727d5aabcc10835cabd0d0e4e7e7c706b9fe4d0e0eb9fe4e951a9ee4fa39488862ad9258809a547b6cb912c496a65cff6149b97e4843ae3254c9f56b3c9d2a0641a9528f3cd208a107b9d640ac43a822d72d41e4fa383c9dfa2390b2821440b1f203254bc8344a10d382871888f1c411b5042868010e20160268220d262154910614b91f1381430ef2888aa0c58f200852a45182201c91fbdf88316cd820f7dff0749aa5040e42df4c2e23cbf2ac5cd42d2a967ac60c72558158ff36c19ab84003084a727d1a4fa7da1829b16a8839bcbce4d9e5fa2b9a5c5f8e3a72e5916b8ffa7294532a962c40d42d6a0ac471fee43a914c253c3823d7a7f5ad955c9fc53446aeff3d8092eb8734e4fa366434c9f56f60b97e4e195872fd1f4ee4fa42cc3823d71fe2031ae4fa2d1c912b951f5091eb1943b9fe0c92f174aa909514dc90ab0864708923757cf6141e4cb18333727f8ca7d3ac1830a1e4ce172a802a5b9ac8fd2e38d8411157ac3c9dca8ae940074fa828a5d2b6cb59f5bfdec0832180b2b881a8e88958dfc65f37251062861fcc80092a3410ebdfb4ab92e0064080918930c61d592cb4cb3f3569aed082456e1d2ca1a586dc7f7fcb098892d804157f13d8deeea0baeeed9f58212b437d97d3134aea25f741bc14f7a71387bffa15db74981d4d28474849d909488bdecfee51597f9665dc679d75d65996654043de0af21611875ff056f6610fee38a1308df20639fb2c8bd243fc65b17ff62df86bc39bc59f16843bfd76d2be33b2bdf741ac35e2655a769a4a4b5996655f018953ff32757b498c4e230b9422d7b465aa696fb537e2238b3501edb30fd2656fb7ee6e1a4bfb9cb6439b269b889a9a34212d6ca79b90e98eacd38ff6d9ff6c6f4f62a545c0099b41281dae0dd6d1a18f29acefb63d6c99f61c77441e3d90a7da57152448a4bea575bafb3b1eeb6f5b7d5b414d7a0c00c70772aae0f654fb34ce5bc3b65976458694f2b469569e364d5a1a5c29adf6596b354a93e0b2ae9db85ffe99848b91e216b1db091bb1d6da8d5564c226d00ccadebed43c155af4e760f6edd0f639cd5d596d9a6eb6213b5a6663e32d8a03fa3ded82bd1191869aa9e17696d9fb07a96f3fa7356b411bd7344d7b6df624e2644d37fe80505a2bfefcdbc8d72fc5f93fe6f75396cd8f2427f2ad3f0f7dff8a7b3ed1b1d8f34dfc4dbca33db5b7824fc3ee497fa7fecf0a5a07bb7bca1013bbf30120843ccea71d72f46d1c41df7648e9cd1957be966595152051836d7697837bb3acb20220b41c5c5496555690643b6272b52618da3160ca622c87c151cd62eb2947f4db0530d38a252b98ba25f3686f1528a09c6230642f1446a727a7cd915c1b5952594112ab3484d31228c4e0587053595281e2ca15f79425152892a8403165c2e87c2b5cb094fbfb4425ca151c70d65a168b3afd764a334aaf7dedeb4dd93b6373d219decc6ef9a106feffdfff6f9f8dfa9738f24889aeaccd3559e2ef846e1e1dca1dde4df03b61d6e439e79d3099abdd0447adb529b58aa295faf46c2050296da51dbe306409003a70dafda3c39bfaee78eca71d76d31ee9d8dddd52ca19709cec9752aedacead61fa47efe6d11efa7777bb04c79a9152ea74ecce634c0547ffb13dcb06479c7bebce5ced2438ce0ce5e3b37661b5cd6a275adf35db9d5ed24c8bed3422b26d3b6d35f36cd689699779f7f275cc1bcd9e52d866adf8be703b4a2967058688d66544508e52ce2ba59a3ddda4d0f5a815675aed4d0a9d3c9a5271563b7b727f6a3bce4545b1f6aed9ecbbecb92cdbb24da3ef5ac75922b22dcbb6ed74c253eec8363cb686abd5b211a6ba137102e83d69d7ecb3fa1561a7d3da655ad6e5a6ee1feed5c2730898335889b3651ad78216aa71590b7306dbc464e70c9bd56cbbead681ecb272af795b87748300162609fda3007686bca063822f43bff1eafd4da66d29584a2ba5b582545a19faa3c04e86fedc4ebbae0c575660b213d16c3da1366ec75f9785eebd029c77789c5f336dbb4981eb41a9b66537297012491e71720ac5d92d47b76ef374b4df3c0674dec69a7665f93fdaf5352ba852efad3e3d02784c12361717f04a79820fb9600a94fe42ce7e564f86f5b96f974a8630353163e69d10730298d10ea577ef2f95e4611fecb63cb693f7acb2a2363ce58eda476cc0d498313b0ca821c9fd5d836cf54f25d99bc86e3c5280560dcfec67b0c876f5134b793eb561dcf9041a2f726aa1384fa420bbbfc44ba72f61cb88592ea4a012061a5474312509d167071390d1c4162118a287336a10454f72bf09fd2908a9dfd93be5944c1d8a17d9a14c91dd6db82b160d9424d905a52b6579ab571d76a551dcc9eaae5b7d936d78685f3f7b2dd33417c29c79f78dbddd8d8371a9f66397a57c0d64c1fd0e3d850ea9135786333fb71520845b00f9eac2f9f405204990ae3ac3311c3bbfb424c1559f7e4abab29761ad5eda663ae794d3dbcef953f33c6d166b9e639cfbcb7ab5bffdfce97fa3b8d63ecbfa0ded7fad5be6ee9c0e7b7438b3c445dc24b9164e25672bfb75eb27cdca23f2e8c730731c9779f5ac6222d98f53059048f6db6fd65297a7ecb7edb90ceccfb2110c21032b7e204a79fafad9af6fb37f162f20959a92a590cab82929d9df4717a17fd9ff4a1c997f64f5cffe997d16c11d69eea6ed551a9786a58021dca66fa3c3f7feb9344f4fa746c67af91c0531106622a123514a458b93ac24d1b75f59abf7116bd478d6f3d478d667cfc23d4519e661fd0af77cfd5ff62ad6f77c6d331c04e657d888ea5f54f84a981aef23ded50bcc677ffd6ba68d215c17104b6fe11c6fb9fcb7e3f29f0a768aabff82cc09b8fcea83dc57adfee2cffeca051769f84361fb55cccf7c1099efa508833ffb30ef23bee0d5c33ccfea61704f91f73ddf0bfeb8ffecaf3ccce3f2300f837bbe0e6b8047f5a957418a37def2ff4ef80302f32f1f04e65fb0112329dca3c249415e5ef52a6ce4e29d1717fc7158033c2e7f5f0529aa7ef54154bfc2468a78569f7a2317f73c0e925ae1213ee2288f563fdad8d0925c5e8af7695e8a2eb8c86222dbf7cbed57e07d1710f5f2edc4bc0a528cf920375ee62dde997921377051fff73232ef23c6c4c4dc7819dc23f3377091f631ef237231a0cccb1b81792332f885978ff91b0f84c98d09f3d6ea6d3cccbffc386130bffa09bcbc0dfcedac563f4517979fa2cb67ffc6fb8833e067f1b733f336fe062edafe7b1ff1037b8a78be9fc13d452a48f1c74811cfcca7de88f496ea8dcce01994faef6d3c10261f06f2c3bd4ff3aa4f797f7f02a9a7c1dfcebd9fd31f28c519708a32e014ad7f1b65146320cc44eccf281d823386002b779c4c63ff647f1782657f57bb5c9a917dff58716269d7378f3a94d2a1b7500f359105e9d7a794ce6c737b1566a5712f2eaabbd5eb42685d0873f61a7e009547543e5cbf80c1c91aff97d44e6f33d7ddcccf6d8ad2b4bf47ac1b85f6b35d7b1e21ed1e8ba65bdadf16dc1f3dda6542bbec6b7f0275b64dfb76595c4f6fe99ffef1b86117c26cbfb33104edcbf6ada669da5bcd6a4fd3a1028670b36ee6e7d62cbf6a75064ed674a7d3e70f7ecec33deabb3f7d3bdeb9f156ff123c856e1afcb60ef53ca747fdf62814ea7d440e057edba736ef839c50efa18ca45c035ecb29a2fe0b3245d44f1185a5e8157d2868bffd8689c80ec797598a27ecf96b3aac3737393f7632d0a6eab829e2e6f4d091fb15308421db55055ce6fa0ee5cc5ebba996f2d55ff1bd291f7aa4bb69e02270bf25715007c825e0300777fb93b6c37aa9c431b90c775e87cd4d0f137ea42084a949c9044a29a5ce470faefcb1fb764ea7ff826c2f534a3b3938d26173d3a30b71be09aa3c3f052d79be9094d26c9d760db8ccbe76e08f0f0c0252a4292530046fc01f42bc35ff04561fd87b6ba662292c9f52cad7dbbec0ca4ccaec65963d116969f6637dedb9fa7495bd46b32cf3cf6aad692cbab04ab43084b8a2495b851646152772c8a72cab3801cb232b8f9d51cede25f70de23ead95b856635a989ad2e89f066a24d977900f652fabca0914e4ec554bda758012b8b855f34e98c346bc3f715afd1eee4fd89e70cfe93b8e03a5e8a986f264f2d7571fb5e5ec65f7a90fe2fdfd14be6f641b591754090989df0e6a7a405abc3f536f818048f17e4ec3bcfb6cc6bc83fc26dfd814ea88a6d1540ac1b8b1cfb2f72ccbb67eae7f4ebffd4fb7e37d4ed72c967d06cbd9a374b853084f251dfa9832bfab367de0e0ca9f8d7948b9f5a5383fcb3e33f256f64a4ab1d8d212135316933bbe2a45ab522828fbb924fbc4ec279193ece793ecb39f51b29f48fd6a317b9550f6aa21551239cb7eaa92903833267764df4e4a4822cb7ef290fd0cca3221a6112a23ef7b853b51ebc395c9b24a1361e4d1a682d1c40d9eb85f96559a90026be2886d06579565952648e0a409245b9aa8e18499604e545a132039d1cdc6b05adcad0b0e8b165a1337cbb20a1355aa304105aa0e051d716790e07ab85e10638c20896bb3acc2c40e1bd1d5b2acc204906502c681342c4ba5b457298f2c6b037b2d2b65b9d38b5d75f68276c4810c356e6c7dc3d0835106cac69208160ca58f262876030c2a5ebe1d9a6c80a1c46a8607261a308ae06470887d60fc70593934cd58306aa8c1c3c6e64689162566c85c9bef2c66a8623a6b2f12181220d6cd72617448aab1c5b6da4129268b0c502f41443059a8b02e39405965492246e503d14b9612c05c2431972c3b70291b8054368b0c28540f44f70b172f0953ea8b1acc742210427d31850b9764c8fbc289ee2402a5ee8b23bcad0725ce7e11446777809d6cfc0b1daea6a45b7249b7ecb384a0ca6c80627980aa381c695f7434092cc3c27900aa3630f0bab3f6f240446d3ccfe98514762221723bbd78e2ddce36200952b7e44daaf9db597b59e3ef08a98ca8244cb7754dcd325523000000002315002020100c898462b168300d6461880f14000d86ae446e529989b32cc9510819430c21001000000060000a6838096f00663ccf85128e8cd4fd3b77f9aa79a5789e1ac7b1e264ac0cf1734495255c2deddd41341897467de4bf3cbd6bdb5c1a3b39af87b38cf9e44894468c9901b2b20d18350322e02e665ee6a9dd323731715e025e89794282c1a470db1f4befb0f39b6199ea3595cb5b9048752ae9ea23d58e08232574482d2ff1ceb21b91974a628bfc4b32f4e8e8dd6b00a497b439fef2d9cb9ce82b8d682ae67f8fb6dd9a5a99bae3538f739b859feb4fb1bbc2ae888399b94a4a8ab27dbb2654bf031004c084977de968f99a3189adc1316556f8d3a06ff9fd82cc2be5abec1ab36cfc2148545d98cac7e2aae023c38a75e08ddd4419e022779351f8f5608c95d840d2b2618cad436e9e043d9d5cbab62b569ee74a73b995bf1b6aeedd694f8fd1741c7eb4b075b1f597d0d5cc5772fea840cd9e03d44b1f890b28f39b2d76b14e7c4820b59a88a1d9232a72a19a5cc3ee55c1e0f3910342d508eadd6f1954f9508479dc512d03d9bc30e267de467588d42c5865fea7e29c3f450055c53442d6748a30241ef70bca54638dcdfa7fbdceb270bd9ba03e54ee0aa9a18637e30052dd6eef6162e77f65e18ebf71c4ed8b142240bfce7409511588e0cc86c10771ef6b8079002102bdde51a2b31251c39d07cba92458ab04bc5c5b60ce28e828efec1871901b85177d3fe83134ada51b45e012610fde6d4d97feb2099b09e2d520ca4c97ac22f8615da30a3fae4db40bdf284d0a214661900727194c799be6e98e618bc80c0695620d71bb87b405a13b5a3f9af23e5b81f86caa2424ac011a00eda9b50d56ca096569ca1be41e1e3f0ee2080d16f944522fce831a183ff3d9b4266f7c5346a62486ff9147712d351bc5698c8e383690f3e44be4259a0c0921ebc2deeca41a0a0961e38b220d292b414855b8a0cb456c300626556affda17775d12126a85143423a99ddd1ecdb08c5ff322dffb4ba4f04d2a8f98f0ba5d031056d395bac295fd29da1840e78b343a4545a298bb63cdbd0c656db023071123ff0cacc02417cba16fa3b8c8dfa3ba4ea8cc1e7f772b1e9052d56ec3985847ab4afce4f3719d85ea92ca35853d23fc260e2909a6874a16d43c38d0466fd25b1d218bf995a7f4169422d00879437d56ef696a75d7d4bab03fb451b1609f954207c68e0ee178ee69e26c5a6d48cdafa0139270e322efa6c0fa353156b1e4d493dfa7220dbf4406d6778b9c536d914d2a0fb15143dea716d2ff0cc16e4c90764d94020dc3af16510e492203f20e5171c3246baf6130f3d724fae58b434b34c016dde9d6831256015e0c93511206072a394e458ed78abcb4fec3e200152e762a3cfd33813e4c20e0143977c085692c3073665fffcb51e4c5309cec5043d57ff7970c582fc6a8f49d526e31433a3af5243650354d31b419d178f6c4fca4f22a3efc18e304e492784969ab23cf6b02350d108b287dda71ec010a910366aca0158f8b504e675b2299a837cafb5d9ae925e89b7a8f173b46d4474351aad7f109427e45bf2716b42e86eed5d5cd7513cc9e7df832cf7886b7935cc9c7066097f3c43c4fb98b190560cd82040d35be928e6ea12c725c36449316dc632869709aa656047bccd0bb329c1e1031461bf2fb0f75bebae405d0784eecc7dc55c4cccd0060924e089d000c877495acab242d7d7179f0842ac777d2a342a0c4deb932b5bac06538555c6031abda2f332c824090ba2bb5e013f25d5cf740482798ed36ae498c40263977ed75decc125344f6d17c1b18828af51eb90bdc9e74afb3e75054dc2aed9fbc596965eec63164a87c3067cecbb39de2650a972a3f9a2c152e04b82ceab8123ba70b1f2e39067af7d26e20fc3951d372ec533ca0eeecd97c14517f677a1997d6f47cd6999108e515ab3b0cdda4e85b43f172852424b88998ac473c186b91b1d18ed5d989111b768d74fed86fa7cf9a80c2330c338b5e2c7b1356726da7abfb9b77a595795d265e0f86d4fa80acfbc662d712f7036df3a5e3f7fe5aefb47b96295ac0d529ebe5d75103c2cc734702515ed46e3468eec7d7588deceb9df61cb793a6ca888b9c8890f2640c1fb2dd96dededd5fbf0f07950f9bd7b9e8d6a2244506b385a4ffff62065cb483a667c15691a75431dc56ae9324681f7de81136b0e27c0dec2fc0a98f5f9d49f4809dcfc16c7d1facbc4ecb8af728129a67161e8cc4797c7e867db5c701efbd595f50877d7faeab385d87bdf5f286168d85c1be4daf5a0b4c49229f86bf8d8dbc24a9c0ab013d350828728e1fa11be1c286b3e1920ddf1054b72c9c9cd3c73f9b67e8586e1288e1ed536454f197426fa34160702373169c40ebce91b3ba01d3ffb04498b711249cdc88dcba325e2d54d39b88d7da2f7bb80d9f55147c7bc21af50e375e237c91f30050164bff50c6121f033bf2fcfae890fc9ae464cbb2f4c1d182bd86673feec20296612ea56256d8e4c6b95419135c10f9a6e9fd3e32a7760b0e029a7bf5a9c28b5563702cb3c56a8fab23b19c5e5989570cf2daf2ba0f429b0694824f15dd446fa3c255836fdbcc569bfea4a7cb6c6d73d41ca152c44afc56465f926061a44c54e03450ab71234f5f29cb67edb64d544080a15744c1c9f7044406a15519e413fc3f196c8b67c9504419272f403cbc78f8952d8662a873272ae4a2d27051160685c1408b749e0724ef7788dce0ada909f93a85be381882fe64cc0b9db18728a044e8702c4d693b65372dfd12dcbf39c9d3172d38499068035bdee976f3ed23a02c2978aed3c8d9786f1096682b15c5416c087f8fefbc418db06af02b0e5d28a488f48f4946805fc478ea8587d5b88b3ee49f439e88678f5af1b4680cd9c995f033ccf1da63eafcd8bbc2210c2c7f8d52250aac32dcfb1aad0314f32e22fc880e166e52b9a594dfdac0a6001277a0042b64a1a1ab8716d0aa5a79c5ac657bb188e502136b774240f836807b81fb8a010164cb5e1351323b3fb5b2fa6120208a7946b63c622ac2af3605d7169c3546b908f0dfd51acc1f6c9188196f77b1b258c4df44e78e6258b43c7d2cca22906eea837a1af5bacc8965da06a70fb67e5fc498bc625a9eda31b5b84ff1fb495e860f12372d460f6c17976c796215d3ee4a1a5b132b5689fb9d894bf786cfc6edfeeb0d5fd2ad8861fd134ba1b3ac4d98508bb254397c85685a50b84a7b0b966f602ed7de589f22f14d40b311fc37055dc01a97e15542947c8dddc43588da410899921f2bdbb35f4ce18d661ec24ed48d6eff9aee4a131311a10ad9fe96f81dcc8e15b2fae22e8c3389eceb43108de20c747c8e3dae812de4f734cd62066d5bc8c046fd1ed0059a0d52c26613c38c0dd76477575b801f5e01ba551c1880b62beca1fef6073975bc054455334ecc832f4710d672c535cdacbb928f17ce2f14ac04f74dbb67014689a72fd2af0eb4b29b1ba0600f16461a178954a3e6a5259075dfb6e9c2f35aa5c061b82df770682eace68fa2b1decf407c830aef61b34a83b7fdf8e5b492c870e05f4f8fba054cefeaa559191d8dd826278479d5394677dcc50acd7e7a2251c8ad5911b46c938fb9d392f027f89d3f1d3ebf67107189a8174fd163310a1617ad22cd9fceb89378edd69847f237ab8b8d6954cec4c6aead23611d0dfee49221fb24f40ab713d42be8a4960f9bcdf8d621e2ebd75524b738bb20bcad053048b155eed5531032cfe294975c4c6e8539a7090d6929f50343c6b37e38e69200e7d66587c10869a56e6d0b7e7a95c2367700898200f17291d5b81c7ed6616ec2d57ec9f8cc2bd61206f211f16c7389fa55a66fc923ebc4c3b00fd4233c2c1e00b05e4b6322a33461835bc9488178555afa484b1b856bc8a9115bdbf9cda1733e86a9428b4eaeb2f7423d87f222793131f45d8079284b8b18e0ef59d09cec149cc448c7d87f5090e7e9b9463cc3ed8fe56f5a7983580d49f551323de3b2aeb3313c384055a2b69f651823089720ac0541663b11993484c4fd3420e9daee2395f5942fc2176106f82046de7d291239073934a89e7a2c428fc47f482cb2b8a5c823645d7f02259a1add6052bf1ce5908853ac3e9a0fcdda39205f6f36eaaa7a1b3d8e242282f7265f5aebd2ab7251d072a91477d41bc8e688e1bec6a69d9cdab5e01c4231359c37987bb7e12ab8c5290fe7cfabf1906df60821465a0439ad8ead2c0bae6520cd7a6c583ee55a415ea83be0c2a5639601dd1d531ee90d8dbc528c9c53b2c53430d6e7ec15fabb04f1144c8dc54982bf75a4042d5ad8fb9d2456f4bcfa183fc55411dd9da6db7e823447cf323f779d80b66ac7d415a1aa13c1a604a10df601043e1265936fc84bb8862b93dcfb552c89e45b02862a2f6334b713c3e16246978cdca5e29a2258ff163e4e7e7141701d04d5629c64afd61d8539776eefc4b26b83f45ef5850b08f095e3bf5e4dbd9025a7e61031cc489c55b39b507003153c52fc98fa5288ab7a3c8ba286c968522d52139c79d4f71a4ca16079c465bcdc37aa8bcda40602eb3ee18df8e753ca647e85e1d46e5e80e34a3430a99ea80c8de805269f5440c0108e7993c513657628f0de9a9c5b9a8dc8ac74a110c1a4b786f314033c5e6bec1d6bbedd991a8bedff68b5d4b822c8e3c8c793ff2cd5994f7fa43f4a8c12ac50b32ca8624f7d0fd4efdfd915ce265ea5dfbf008cfd5942ac811ae08360743f5558cc04bc9bbd3079be18908b648d701eabfd7842776871611a6d83eb5bc38e422fccaeb14c2fd18a2952ee56104214bd4ba09d1205d39181a64b56f0ea8a469fcd7bbba210b94fba935ef51d789ec91f76eaa8578dd2e8c5f4f238191a7865caf4ee746c9e9eda0e84a9847df030d5e830a8b738f1cecadee44fef8f6c3b2bbc529aef9f6d264c55406510c3ed4a35c07a6a6cda1eadc8576f48599711033581d897bb07c2a49ca8a785537dddfceb9faed8052c7da7b7dd01c144aae32cc1bbcd1beb224ebf2ac7c84a64f05e296dff75ebc5131dfc4f778e130fa045aec4975c7e482489516406f37e9bf2518a166222ab1e56cf62a7ec20c44cec29f4d7a04d8c1273eb45367ff38a961d77215affc8eeeb877ea85d5190f5e1914fe7e9b27ad1081a09bccc2984b416f59286ba65e1b86538c0e748c93910c203191a6b8d32ad21709cba9d5113e294b556764aefaef9c84029f8ad49ba5ed01fb07617658cf0dc3cd4b08a931ee9a7be03f102290d75699219f019b754d3c561ea886d22c6b92d4632d2ac117b9d7f9646613b9bdb99f8be1e84cd4a82c1a8e534e98b43d32f54ed795faa855a3ebb44182e804fcd6f2c16fb3b8734894077a26f4ae097cd3412d9e5e31c56bdd5b7347a0d9493e94fd59ae085ad443187812f1184279068cc126362b622e8f643d604b3266762a225a06b44b81ef3599324f7fcebcf5d0336d32d85091e20ba024a7ba5970c1363665c5ac9bc89831e47a8ab7c7bc313f4bc69a4b9c58c07c5efc44fa3bfbb01e8f59234817ba647664abbce6d55af78b34334399084a5876a1d05408bafb0ffae2524bc1eaf9059017b4cf9905e784901c1628e11b1808f09139485eacd4cf8d01444d4c8f5ac1329e003b4541195ac451031522088e43e1e59a86348c4bd928f8ccaaa34bd7da26be4384d6f99f6ec36c0da9ba568362999d7866d1eed8bc02c1c122522a8686da4d31f84f841f4394be893ccb7eaa6831945cc92ded57e1425ccf6698d3c4a2c27b8556d476663573ef298d00d40f1fc3606b7c1deb94868026ed8b6f6715125f5e734214d99774773ea35dd8012eb0bf3820580dd5d4682dd61e547c116c616cfeee091e829541aba50682ce8184030812806b98a5bddd33383f8ac19ad07769d2b2f683c54b93b1c02d36bde35d808ced04c4f223962bc910c26daacabc8d00c07c3a8240dd453a3f98bac22734d9e4bf9643158d713abda9d8f06aaefc24498200f242a0e34071f394613c2966641e1293c58e85d12a6496ce9d217c1fb1c3828d28a1bbd7fac3fe488d1646ef06f7f8ed0ae78ca4d201c34a8312b7433b87133acb78dde4f3520ea2499528ff819b24578cf3d45fd961a654ba7c9b41ad982c57e0bbccf354e042aa5639ec69683170a65d3c9c9ba82ebe510071330ce87c466e97aec04798168f2589d919a0e6706284cf8716614998e49b074030f70e803529d65b2419bf17f62c3b74009d4ad82af42bd8c80874896e4cb5bf02caf42c89d979637901424a8d4c2564a8ef4d3ea7405c3a7e681388e1ad8e3cfc974b8f3f2a90f875d765be743a2da6481dbc11189eb00e408cb906e7e0f24a1fc1daeed9b2bdc19c39a4ebd6e03c161db42b0a0b2d1dac30c870bf62f0791fb4e9736b44c7cd2c2772534788cc6f2a10b4e0c84f0471a8db641881441d8b7af228a328beb8cda4404be1713566e4aa12595ce517a40e690139cfa2a2ffaa8898febf7daaec3af19af89e5fb57c1a18a5f0ef89a2910447a74cd4aafccab0a795205588d14a5714ad14ce7e38441697b40987fe88ae912057c9d30874b29c4342ec0032cf8b0d81b782b009ead18f14f4fc3fa6def6d67ede8c14a3d113e2c0bcd77b7011e6c4768ac80d092c7645a257d7ec8985c4871c6027c0964d2902b33f8296ea2c33d8a7903ce19fca047fcab4d74c509da9fd7ee36f154dbff771390686a8c08acb32f29d880d7fc4597aa0c2a72dc0e0b7b1b7f7d65dc3f8a49cb39fe5a687db96f77198cd4c5f6803e498ed7bc0fb68b897bcd3f5d5607b416f866b20074c61b99362864d7da8901b772bcd11265e20ee259883dfd0bf2f06883c24df387abd4f66c7c074fdeb22b717b41105f41e6d6374aea103d3620d3967c14409f269f06e5e8fde36280f212a9a27bd364299c627fb0edffcc316541a6f4affc40f42abff2f20fb1bc82a482944a140407cc93a4f9ce508e52df4845824703a8699adde611d0db9b8937dc1449ed207ce3459203c67ceeb291f8e26ef7592b769f170baf26f6f925df8b10d0ea18433a5a695e8692127e04e713ff96f92e88f845dcf273d20d8b402c700130f9d60c889922691e1b9f12d92e7f5a8caa4422b4d5a73a6d4f3a5bd24907e294b4e64207221dba5de8e97eb33feb657d9a655c782f0655439119d14f8c8eea845ed45b9630fa4a8ebe0c53be57e9c6536d31ed96b0198c4a98d4500479991181d3be40060e1e79457d921dba23ae81bd331b030468c9644502138d739f2e7908d3a125320a570bd4059b9e132e430133722c2301a888eef01b928c8ad4707fe8e2e3749f5294c0434cdd1affa274b1bad370e034ac58a959efc1bc4f19c24b180dab777c54790d1cfc56106f30a413a49334e8ce47232f1cf0deb5597f1bb709cd122d06424adf60176dcc209c6f89aef4dd6ca506a4161de83398ed973531b66d432e33898ab40aae765f29feb57888bba85bf583c7de7b35032288b0407e64bd2e68384a560440c2e1057140309be1d31d459cc959569253ad99d978e618c9429023d5b4c1c5816547666ebb1fc4f6a76d725593ac5615fb2bb7508f8825bbc79927c1e468ad7cc13ff9e6d342209ef7a192c47810b44eb69641f6c47a3f8ac1d414c6516014c4ab13983e4b1583e77476d32cbdbc4769eabd8d9ffd2f793d37997fcb53029892af9c4311fe870eb23f779647f724e06af4400ce90119961ee019a6076028e3b2a41fbd55667e8825ffcda13898205004ac8b76df196ccad9b691ef19c111d5abd504023c0c43d9341c4be065c3e99b0b52967a5e8f8d053db67f4981bcb074a30c865c4d8c334991599e8dd6d3bc8b70be3f9ec5fd6e98233250986a4a890920c4901e813b8c00a899561a795c4757262f55e4cf7aee2d704813ca3d3a64ee87ddd3ddc08a4b7b1afb6d6bf4d6ab0f9247af1f645f1264a071c4d2b6c0809844419baa75ad0af2a776d38294b2e07758a38f9e3320e71f0daca0fabb9a1ffd5dd71bba3d0e193f4ab8d2cd9527796e94029549fa7da0579db4cde1cbe98ed723788239ff6dbbb491a7b597cb908f0e284e07f107e1b1712653730e71d7b656f54b42238413359e638d0882d3b0a51ed4c1bac2c185fa83202f92eff0e1118818a012cabb62cef3a6d4a9c7148ed776079407e533bde9b0376595cd9fbd574799c4433c6ad7502c31db86a13e9aa1317dc46ca55d40cc741f465855a3e8e1eb3d9d387d95a5348dc920f7a44ed016f2b7361f52f97103818cbf9894794ab4272430735d81a2df018495357ed3f32cadd609a1236d4a20f7842b7ee44c3b31c22cb4e2b90e1fc8e5fd2785ac86128ce57ccf5320f4e4895fb04dad38b12c0a5707445e4e479ba1c30574e393fca7ba3db37d0524d585f54da9b88f0d28f75e11357dc951639a2c14c10f036746bc8befbdbb1c753ce5471ccdc76903573300d8799437127cc6710fe76528b93fa3889cb8f997cfb43492635d56e45e9a6bd1e15b41f50ce78dbd368f05d5c711ccc15fe69407e7362974c17e22d686e587407c78ba1d2bf93777f48d88dc2cb52c7c3a74bb927b372e476fed5e159651e2be91882fa03336a3cbd6762530f7a502420473431a107c8d2b53735f5b573ae1d6fc4cdefaa5aabd3c0c2d3a2caf3817a203e9a1c6a14680475f252d68384cfa0a166a6d1f8450450dd950c95f7f6628f45d56337605ffd0f96821ed527f99abe76643daa5330712c5fb9b0f277a08ed18069ea8bc9e9de596956e05c57059752cdbb68b58dc233ea2a722d4baf844d16c3531e7f5d043bba4d8cd2fea88063f3bf0cad188eec40787c1c0546a58d2a9287c067a98fc4f5e0ce6761947b6ee4889f25a50270cca35fcb8fd3f9006d1c6182a41fe79e47be1142c1437f35e24809a202edc116281e979b7c0e5c35c307244694cf528e7787d8630b8af923c6217d5009fcc90a072f1dc69db3d2d84bb920d77226105c796c737aa5e4142daa1bb267fcb5fda445dd4d0b86e4df97774863ea76787dbe08a301fedd87b10f8433964d31db8135fe5e422496fe2c3e63276a7710c51ef5106d4ad6fc20550de1f621c577b028c14bbde4918e1a8e7246b7aa2bc4fcfd3c0e8cdcb79e82b6c418f3e7b5852a04ae76a9c6c95ad55abad1e508d9ab40631b0285b3d1fa3adbd5ca869abe2b9099893a46e167c2440010df88bbe4568ea7c9272329d926e6d265e50cd87503d63d4d21238b6f436ac7794cad21fb6f0a44b587ae6bdd20fe4698182985e1ef20b3205d72532d375b6d9571976aae7e38acf9c78deb17394cbedb1513a04531bed1d97029cf488b65c90aa79d986f1633ec6b882450c8aa0f441b177fc414b16de1f144108a5577d56351e20801b24b62cc493290620eb3ee23ad3b2966bcba676e7a4f3793ab5d262b1473a19896c3126b85e1e53f58d159aeb54b79d06351c730f1fadb0e042e9f8c24496ff705bb620dd20b60ae173e46a29028ed50de8d695ea794df2a4331de9b51c1ab19ca2157bbf4710a69ac2eb8cddc4d65215957396ea404a9b34c09661371d99ca2f0f8e1bf4f138432db01ca574db5aab1a2ce91aaeeda50d9adc2eb4a894322e1bd2d4738db942f003ce282dbc036ba9f91569ac7a473936d08337e1357293b16fc78c5c9fee263d25729a916b97cc5d976c2d2d252f970a3b4c33921d0606540250e7338a144b4caed585e6f9568322bc909c903c8109e4f1eaa913e43a5add42baa5e490716f87995d3d594dfa25ca3d117f6791b9427a651a23e53c33d32e714abefbcae909ac2f4157f902b538912ba6574db78e5c32eaed2a93eba75ba4ad4cae32726de729695ffdb5e948a9c47f6222e474e8ae8bcb20deb1704838a943aa41c2b2c1584378434ac66f4a9f34cb51daf5d24a2357e5cf6e2ab892e81672fedc818f2cfa701a8bc94871333ee921dfa45209fc0a8daa516ebdf57d9fa51d8936d66e82a251a46181aec517303148a5b0de629e1f104894a9ff5e063a507cbf47f1a403f73bf1f68592303e71417fdb3791c54503abf5a8256361eece69b495d31f1870605d8c625fb3788d0bb4532c90ed1d9cb34a58ccec1270b77e6032cb0da6285715167696528975c0b5d06fa7819a75ee2946a4d2855655e966752b70a1bfd1a2b3d0635ab4384aa7ef39b1d031a2cfeb9a96c9843128663b87dfb0ed1a7e0e625e6d3572343c831ec3d355985d32292fe97fa94d020299873c484f2d28b33ea05513ee891624bb05b30fe64d92164fa57c2b5a7ccaf58a499e03308bcfcc1d403192c9e942c0a2a5a63dcadf04d0384f953bfae0b5ca8b2b9896bcc54f4628477b2fa701b1b5cd0ea404aad6142137b09bd5f771b341fc99699a1b2d84e6abfe374f342fe7b321e5e64c0352721830a8292832c105a38bba5d7bb989a5eceebe28e75da8f25f952cc934ed0533d42f4296a54d0fbd0680345974911df1cd74669f56212c4ae9cfb1894d95410d555c55b9098e68b71c0aa0225663299d199b1fb038eb857016033656da40a12f627a4238e18222017e895ae0269d2d04aa7aea740400143d3b1f778bdb7e34e039fce3a39104ad6cbf225b3fb29a8c4817861453aba1cfed1078744c276f36b87018d10b38f3829dc1e115c7d207c77f275b4dd3059ef8cde0355224a9d1a88ce6b75dd0412a2a4aa7e3dc1818194ce0907bffef595812732a19a6bf0ce7ed1f25897440433e9c86e4b436bad0866ef411b471b1d1c8713c61c58e21754fa3472a72edab55b914f10863b3139ae3cd00bd314a92ecff7d42d77076e3350e9cb0156a85dd92356f75d9a2f820b1aee39054fada7700e05c4363f3784ee0c1f505bb5ab8eea0ebfb329ca3062a7cecd74fe12b7e64a57839e9c890a0247a2f59d5042c2a28281803403bc346fa9d4ec476209a1f42dcbf2b396d02fd01455f4850b95350968625d0e2964b9c2d47f9533b10b4c2327ee29f4b73dffb08b32a05c5d19dcce7df549c2cba999edb575ef65ca08889814341d2704f82bf4d3a97bb765cb423ba47aed4be5a655c6b55c6e777eea2e263c7ed6fc5bbdd339813bfcbbcd45f685db8824abd6ea59d746228ee673b2be3fa34812a7e66307986f3386300b499f265320e125715da79006ec4544dcb11eb7957cdaa12bc12a4375d4d2b2d6fa510bd742bac3492e33af0b540cf6dd2c80adc0d3e01a06eb51d0247387ce6438206849de44f134f160a26423a101981ad07c2f5fc3845a066fb7bfaa05b02ddd040d084ae5009279ca552d9ceeddf7eb1d226e355deed24ac8b7e0fc49317482ebf18aa3fa24fc87189cbb0b588bd4ec32343c91e52f5f937fd302ebfa65df4b55951b82312fced7d34878a10061d1879d8fb936061b396ba3b9a4196b4c5de9907bfea56e7588e2fa1cdb20b5d4a21d1e12dd618b49720c7d7ba26b869d9f51986eaa63de3b0d4a863354cc261ff0b73c2470a47b3531ce43e38b4a04f75baaeae96eda186a67d53ec6be9c7f32a271665f4d5789a96602bd047e100bc585cdd810f8edf15785f73a268411f9531296e2b7932201dd474883dc787024e5a7d0f8171be24a87088affa1880ae334ed95ff8f4666807385472ab4e41a5b4dbb65a3046854e40c4536be00cb3a9d795d645bd6dd911314cebdc8501b8a7355e70da296a836293bdc190efa7964f117048710d36123bde5543a07fc4b60168992e57e022b991fd3854ada8d40f00b67d88fec1242b96f49400b0e548a1bc61d07f566b3bb09e4bf7d4f3cd6eb3b9f38a58ff5412a3060bc339396872d65acb9bcd3a110af30f036ff4faf71ccdaaaa8a8ae8db1381cc69f94763031890af22ea90a1bda7268d1957b3ccc7df4b4c2a882c719bdac99319422159c33e6fd80f7751f422dcd360ca5e99da2ebb19258a593c6bc7ffb5ce1efc6f4933a18c8e2a4e98944cd07ab0a967704df6479277cf472d4fff9a77e13985e8fb1d3a3d3467cd7aeafd712f3b433786d3481f75b5a5f643e24da7ad15bf0052ecdbf28d7b562c254e0248061fbf091df284b00db65068c7248127e6113557f1dc51fd4825ac8a2143662836d0788849c03465b0d6e872b447562dbe3adf078f89146e0bd8cb01a401b12166efa10528b933b3a4bb502955d20f867aeea9d98ea80b5f8fbb1765da7f795238aaaf47294ed6688b0450ba167280035ac1942497777346995086acc0b6891aa789dedc8f15beb40b99e086e93927ebcfb058c5b9c62e0d2ea9b72a03560a816e7befba11788eac6547cb9fbbeafb1d811b9b20d16569c867396ad5b6328c23101f1003285000c0a968ff965d4b0b8018d4895f5a419fa567e907fb02f77bd8ab6a669b61b480218ac9c5530845051cee3a0929be54e44fecf64d14313e7444c13047c977c425d099156aabf59a66a7b726c68d5fd12e7353fda536ec3fe7b5d0e63e15b7fa65d21d00434104a0fc29825496c73c356d670a5af360c9871030937b19346f5a4fca3019546c5a41899b4cb7f41fc8907e32f11c606a748473a86631a6ba494ef16e04f17b5945acd10b9adf4e87035ef66bb528e57be5987131ba5c01ff811394411db834483f5369bc06761ea0a734b041eeee9982cce99b73ebf9ab12a4489702c5f10958f7d265a032f057e611bd65a5d65dd2d58ac24aebbead5839dbeb19c42625835631cc59291ac979fb87aec60f410c6c8279a031fcf797d669a68d07a4b1ec694cd1dab4429a95fd1f0e9537e53819258958b865e6783154019af69a8a12f69ecf8afafdc23cedb8959199104c1fceb9f3ae3f64173ac39faf95b3cba0ffc221a9ff8cfeaf976f354060c8767fa1afa139d5ac0891688d36c768fb62a0214654fb6905f30714370b54d331f41b8d23a21df8ba271e4aac37fbf44ee6c0076d1768438cecca06f90d33836a4a6927e1e91548c46368eaef41ad8d01148797d643088fbc294575568feea6a69b78a7d0ed34ac6fa25c689f27c6a70100bff97075ebac76b599e32932db2134b762a8cf21f0f30e4ebaaf1832b71d928b5fd54b9bec90fbd76aab70071404f6eb81e15ba13ab9731cd2132a7e6ba89bc76519550f971184a169ffa716315c14b430ffa896762351efd78235b47c339087d183c543067108eaac7465e30d7731871cea6de8d951a3ba3199648f24a4e6172369408271c241b84f6e2e185425702f347514d5e407b20551aacf027f6a8efe67b18a92e6bbfa27fa87e881ea7d6ef95479a6e74dba5c3e2746d1a73df6210e715ef4617fa2577af295ff3d4efdccd5490c98b637f5ce3a2bf8411cd9d1002917d74c0f991dd2ffc5c27fe1924f98c833d59cd7f35571d7948a943e0a7b167a89657444c00a25b194444cdc7df52e83811bdefc8c8aa714ff30087fb7fe9d55414a59b3c5bbf9f3ef51c506d6eb52ef8538d068144ad4afd753746fafdbe8efa0a03b1e25e98861924ea765e1c89509a210e3a0702c993fd8051813db9284d2644690c6bb317c384f65d5d4ac14fb3ff3cbfaf852890b150be261bab576106829734476b45bd073c9a88997feabd10d9bc866caf242eb7ab4c6eece45acdcf99e694cfcb35968fba08bb58e2ac73e2e615d7ce7fdb8eef7a0e033bc3227074b01c779ccc79499cc973a4e0910f15e474d629d7b10bfbb7560e9994b47c2d1ea972a0bdfce4dc375ad73391eda55408d2112a2236285b91922433f39f63d96ad04e30dc6c327cdfaaf3b1b4d568976543f621b9f3013210f948f556145cff2ff7303717d598ae8ae8d05b045c9f11749aed6a28eef607c4f3aa12eefe10bb79e35e75d85c7b3080721c7fd9cac5b17512cdbd84666a3cd0194c7db7ea4f09ec2e2614f1942906c99ba4b0dd0115a6bbfd9162f1bacc3f663948430cff9ed6aaf924d17021f9b056b4b609f696863fcd380b6e7a67e8d1ba9752fb7c82c27f5d562cc7f40d90dadbb7154433e91c9be819d6e84503c35b2b269a175f403192076905256fb08ba13ec9b9d10adc7bba30381a60c89bdc62d97a0281f86d284a84247db5c69595b54f7cc9a7006977d73cf5b3f4fb956db8bcbe7241fa09c7120024630bf9ea075a92304b3e6ad0886b58f1cf2c0c584165a54f07f0dd70583baf414b5c07e2fde98f1066b5cb90c920642e4fcfcafce6265933b783da40e4c8d738b78264aadf8fc49206e36c8f391e842722a980502a53ee1b1ed2625525bf5118e0462154b7daccbe9ff756ea6004c2a35da4c1d8c67152a028cd8319ee7ab9528815a8043fdf6cecea0f42a449ef6d509417e630d8df2a02e36a9597368b7dd99823bd4c74992935c92fc265258fb81f8535720df386a28995b4e5678ca9bc83916a5c8965d3339e5b72e29ef9757a061b2195fd7514f784bbcfd73c41de285472ffe083531d96913098682db68c3a2b586df2af9fe23581149c5b7330d4912e0985b14368156f1b374cf655337dd523e43f725c9e968a7250eb44945cc30b7d9b1cac9a6fa71f17532950826aee867f817e4bbfe2d167b7b1bbe56e85a8c8a4f6d2b4450cceb976d963777cd5185dbc35019e9a6c1918f5bb7dc39a363c8666d14244661d3c09bf8449010a6cd1983043b72e35e36f7fa2ebd5494975f3d9f86251fbd0cdc13f3ef466222b338603cba9cd0388c39725b183a9807736b1231ab0344ed088401808e21530dcacb012fc00d8afd0d1678d14f86284abab4dae362764e3a1c2a635e263618778fb6845eca32da21f1dbcf35097e7c19df2e89a1a38140f005a7d64e06975b83e3f432fc51d230d50bae8a6840158f0ef7e2402b4aa2d326660303a01a2362a71f5f86b8ae77bda191cd87e20322127c40d4e31b5b074a8f117fbd2b519b2ae9bd90b96b37a09169dfa225b2961e56c097a17026bd81068fbef3639ac9de1f0e9706dec1f3a741dcda81453b2aa98439bbdfaa94f5ea17e721d5eb864f87d9e9aff816ad9f691ac8a66a1167ae8e4305f0775d6e44eb2819225f87eded7eb9bb936af3e7f8cb8f214e0e924d1faa3817f0d538fc1879039470e647070ed098ae9d22ccd35b9039a441ea7518e38951097ef347f17cad4992f77d745fae0ccf54f488c2deeb1b925dc31f205c0bf514f76ad5953a813f200db0c1f5bee3dd2dab9f181d7f31a6b1ad9eddde12a516bdb119d7a90bd07b3456ce8d8bff8e1189ab80d5ee78c3d7ef307115995cca456dc4664ee2879e30d4b522e1b42a473d73f1d46e787e9272dfb0feb4123122613001bddd4a728fd598169e420426edb7ded52dd0a1f681c4af14e849c98c1f3445f204a487c2bbcb822d7e483e8137ce29cd73e4fc0bd9f5fa9528af8c6b0a4a870a1816b25dc0ebcc84ba9b8c87793f5f2d3b22669c1074eef2111dde06415f77fd93030a7f0683cb1257867742ee5d6fb2405b42f8808b064e0342cb979e36cd64c786b01f36219314027349d408dfa7c1fade6f87dd0e60585b10034156a22deb550b4a4b0861208812ba11db8327015a89728b57375edfd3a03b9992bff2b5d3afa2f0c57c5191292331be6220a08680370878c6256b59cfeb07fe4c67a4c4bbabe71e0e772ba4952282b20f12608c81d22d717d00703310b1dfd31f55e7fc0685fff136b0af47117da42f91eb5a70ddbb06416f83657fb1579ed11e9a4a21d42f5d1da6ca29ee4603f44980b017c5794355d230e98ee6dd59a56d6195eee598302b1fcc68b51435718d0f538ed62e3cd106b837b902a651e34e818d60d305cbf7aff9fda4a509d7736bc9f9a40b073649db4fa86d289c6155e7a4083f17cd512b011d139d79b2f6442f83ab2c7b48029915ce64f795444812a20bd2c314ba1a46976348dac6dbec2adac8feecf34c8afceb0fbe2111af5266f8888ef5369643bd6103cba240491959b4c599e208e1b8ef2ad708ebc7a9f03159ddaf95a8c4d53dd3906076ae417fdedf17002883472855c7b1e836d2e2009777bded33549528c5fbd29268f201caed382e40a4a82a0b9182a00fb25689f4b0de1a16d774cdffa58832bc1e598ee4e3b95e09993a71485d71462103f4621a76e76b2c61b083e4bfbe5ed30d6eed0c04e790a696ca82663ccb10dc1f33a72e7f6dc40d06dc1d93d1a312b78afe83c9ef2a3d76ae586792035a00421fbb345ce6c2d463cd72661bcc16b9c904766933cc281c781fb2db2138eca7901f66b544880b51cb32d229efb44bc42c4c24a3548fb36aba15756f8b604d59c37a15e7c1178f7072aeb2ab2c24a8c799ce7e91310ea2e5b4fca66b11b3294f902901d495f899a176fd0fcfe925fc9a1e288d2db8bdaf40f6af40040e1648e4476288c804fc8db15628f1fe0326953616acc8956ace593f91d3380c94bcfba44d71e943ddcc9db86606ea2375d18f2da26b2a26ec989b733142d6f99612c5f4ee84e3405ca51423dbe20d52fb9a7ed027460fd9809e1ad181f6ebe349a748a31d6d0ea8aba0ccb9af82ef98768d472da7f4736eb6d93ec0c119042ccbbbf21774b96488c95959c1997ae296e6f1a0edc76360c8df8a12ba083cb206853eea063dbc32857f67524b678904edc5cc4a5174328d8b4233cedcfd15d0ace5882c046aa23951c1f9fee5eaeac8bdaa66b841bd4945e6ff93a31b96c367916b9161506fa8d0fc7f733b4be5caa894324318c8b15e8fcdee33b1f5f4143769773522db85ffd3026bbb5194a3e9649c13a418a446ebe272dd7792f4e7e607fdf0f6013b136952954830660844da328f725db99b54fc66f48bdf5d74fadd19ed1362569d52faaa16de36d1c5d3b045b446b2cd85bcb698b755ca450822125ea11325248fae9c199706e55a15e26cb138544452ba8ee1b72158ce1d8e1da8efabe40c2ad1d84ad9c5e054773bc5ec6b576d336717ac1da4b648856b60ef1d1bf7261618dd7525cbe9eb58608662021ca416f744d1c186e46f09b754c6c2026e99caed00cc079851274e4f31b799b88b896a556d02f6b61fb2b2564c35a4eee1dea44557d7f9389719c0eb26baae9daa4aaf90380cd17dc82021f75a4c7f8bb07bdfd358474c1ce36a04114bc3390c135d041a7a420603cb84976497232aa27a4d8458e929a11c55ac04c4ac854f0c28ac123210b424ff76c1703c22e13c6b5ed708b09597d6813d54cc716d1c2e26b64480d53680522df935bfc66196c3af918302da3ddf6db0d39441adedfdff2763e362119c2ed11453f6b4645028876439adf78de6a0941ec61890f8c2e95f420e3c586477116b8409c9e8fd723ad100164035afd8381d324aec6c0b13b3475b580bd4ababe49b25f40032560fcede546385ba23fb0fd0307cf1e538d3eaeac5ab558826438ba4b3c2411403feb4cd8602d933aa8bf96c71ccbcd6b038aeefbc4932c9b9dcc39431f823961ab419a10dbb75a16faa88655344be1fcb083bc6ffe3c51bd2552b4abdf01a459961fe998472e91c20eb754e5021a4baa641a94c1d6ab39497849b5c197b85df0bd0b63d8d1a65d2342d6d23a7d16cda6b776a01e79ea3bdf2388f99f1e949fbb663185db551e8077f2d6c0cd2cd37b74d0535ab485828ead822d1e1646d90f7ee8cdf61c45233b6c4e3db795277ced250af98ab3a91476c6b7a72f33250da89d9eebc8c065ba3c6d1660c9427363633327bb83d669d0bd5a6976300c12ea016212edc9c0531fcd7abd549cb4847c974017561ce4f14308344b8f3abc4de41b027212ba051ddea6306ecc0068f335284e2283ec47049b745331b949a4f7b4ccad81a274326bf4fbf680f9f636f645be0029ae08b5c3ebeec1a45ff6a6b6d79d842a5a1df272bce37ab1c842bbd6111edb2ef49a414934eb089a94b1a3176de62633830aed67b4b5bb5c5433f57e9ca9ed7f9a88bc5150a96a122b9a950838fcfad2d71e428ff05a27a415d3feafd9270ed1dc558bde8e9f64517cd6925bc17a3c07043e8eba23ef772a590044a2c9ddf9090b146f4c6439b66c9ee947f361a2d13bf58176177fb824d1b52482cfc6519152a9b6d1ac8ff3ffbcfa6507c8de106cf82b2995b905bdf6a95b770a966226401126059d256b5a4e4ed92b0af5502f4710a9b3b546006f305da43045914722d1a531e1d2aafd6e388d5222f5548cceb02b33628c052e411b003637ed4ef1976c2dbe4560816d399ec572ddd7ea11059a08f37b525ef49002bdcb14e1f417857caa38a841de7a4ea823b99244e29b43f3efcf3decb32e3c3517122ea0c012bbb897d55c484e36d28f7ca466e0206622a250f6d956b45fdf5acdc186438464f1aeb815e0ad474551f21898ddd4a11591ee4e5e691d66ab3e63a9bb36c4da3e26fc71d689b1d454824f17a6420df65f8907a887bf97f3f4d9454ddf4554a23eaaf6762192ebc4e5428285e7b943f537cb62bfb1107a498a172c2a29290aa123da44b4bd4542622d77e8bdc23dae3333a07eb3c0948392abc334c44932f4fc4804314c7c9376ab0389302c1a81d37aa22fb629d40a813b77227e1d1e408d1afce235490ea060b488c3b94f5837d0d00c83b8ae0a1f8d0868dac6880d69510830d3c1d61cde9f42f93de710a9a0c00b1f6ce8c674c917ce22d6d1a358d80afde1683e869870ad33559450dd74286a0f18cabceeb9aea0cc26a090ac210ea8e764afcf4e5085c04c1e7e4a59310cf8c7cc80c808f6d83ea14dee7c5cdeb4261a26b90bbf008ff270a9314c3464c631cb8a4dcb50d0c41a3baeec565661fbb008f753bfdbfe93fa60a4dd1ba5c0087ba91fa5cc04bbcf279563c5e3d845aec1f8b7521da386ef4db41b537ce4072728029c50678bd7d5edf0e66090e6716838bd43f13ce2e0bad9451372cded63ac2d9f294565dba2ab41b09e9b382f6302c06d6767d83b529ed6fb42466b688b3b500e8d2d8cd3c03eebf774ae82c90b40564060788d939217ab95f8eca236c630aad4955d3eb758ac579aade3ecc13738b427b295b222c7e2adcae0122882a3b01941cea87d6f499cdc83ce69d07579a5098981a48c1ff9b854afcefe8b3543161d1818ea4409f8b71c3444092af4459d1a47e222e0ec2193ebe783a9b5b84f2cc6f1348ac363da8290a12cf7727c5f24482b8b22ea62e49632e93b0db725001f9725f46184451aa99b55cac6ee917fbdb8647c5f72b6dedc053a5d8d4e635711481d37594de842760935f0e28e0019ad09514ce4855e409d5339ae2fcd0fe2674de7a703d0699629c6cf4f40a8b8aa4f7c0d3b595a81f2576fe66d026297be233b76a30d94034ce3760455dd870bbb261442825a6b763adf311998f71d43d796f062902d0c6f23b527bd77ae14c58f733fca98fa990236e76953a1cd9961afaaedef5562b5b31cfd2533c51c6ad91c784503e27866ba570986cd8b113a112e97403989870163e65f21cc7d14e614928981ce852eab248fd8c68ed516ab0920b58e2c02e196e6bc9a2e15c25840832da138e9094549b1c2dac0f2fbb2aca0888bd2859f78d5850f65649b9009eea2ddad6259dafea4f3a712b212f1800732c1d1c8b2e6fa1b0d9723cdc19f46f7cb3e6c22005bb6a13e897e64d69bd242e05dd28f0521292da3f722db19955395b76e2561d2ec03bcb4588f2f6f59fd7b8dc7036d8e657331bac11542e5e0ac8ba8b792ca7acc3063a9e5012f2ae1451b95f765b5c597d1d7285d51d86876700703bc7310db768b12b458f62a966c79944c64ece60dedaece42544085b99fc4f50a960d5583573f21ba6bdc84ad64de2cc7faef9b9ecb59dd2369c04c22e878560f5fe4162a88c03a187bca0607a35a3ab22fe7c10638bf1296e9a53d459a47c2967004b59a3ae50b8e72f72a47dc1daef316b402109fc7fa9e145e57e8188507ef27f131e0b5a8dbf6c3e8ec4da98b3fa2e6c11c1e8378f6b4090e1fd3d4adc5862988b8f10a92fdf50cddf19b93d0ecd619360088872bc804210a4089104a59e1fcb080d67a4a6374977542909a0f805adf223c0b512428e295a24c66edd3ba0532d7e602e27619f59c182fbee0316e0b989285be37e75afef96efc5aadfc59237a7d4da7ad89d4a3e16901e06d8202df938c5f603a3391f8f69244ad5e48bb5dd44be79f3b8a192b8f48c268ac8f8b267536a8ac2ef4aa44e318b079c781c7bf848565b46c620287fef5ccda53331193b1f1876f383fa4303167e801124481da57c4c68183610c1528ecf78ed8d2b6051b45dfde7d32cfe23d5f836119b3ad4b1b2ba993972eb27e84e9eb8526e5b11ff22515aeb2f1365482c38632f989514552badecfd52b04f5b1ca13517e2157129a9f255aec579f3f0d99672870037ab0836c2dfec96f79b345636178208af5a5fe0032b5c6088199385207aaeb4ddd0b56ce0bbac03079605d27443330a17e1fb0e07fe630ced95835e642b1a696278a64b9e19f044aa88c59de048140a55761b5dd6b8c439ecda1a144fc746d388edcffdaabd2fe3c89d86e05a547045553c5dc786f1c2ab43fa802e9f5393e485c46654d44d1828066232f2477ada3bb954b1b9f3f32b04caff6b4fb84105c2bc10899869ce05caf0f3f25d8654f168d152f1528e8c439a769179dde81912cc5658e893aa098a337c75048286e591419990f6b572a887879401b5c230587f1bded1c0abf6c6da72b08ca809ad354de68f8518bc950a51cc93410e1e8ee3758a78a213ef31422a2841a318b68366b9677681691d5f39556523cd2cad84a61f454a8fd1c4d9bd0455fad105b1ad59085b45bcdd5a0b68379ba9bdd6fd4a203b14dec218037063782d709e03720267a303a9285dc4082715ff29d51029394b2d5427f042ee1994740282efdadd4df8a48f727a46107afe399b3406a491d8ce79e12fe4bc160ea83ce11e583e835749b61d07e6608e02c163bcbcd87ca0cb30cd1773a9320c8e595122e3bcb107ed18f9a4e9e71360c1d01e069d63bcb100926e08f1ce75d6402b60f2960b06e291e80776801838987a4ef8b2a1645c9bdaf892335bd018d0d83e1177715c7c29a91842dcc5b61b805c7cddd675e2531a5c01451744394aa158601c463e4f88a1cfbf6e74396cae9a34f5f87782d3de4c1bb16fc36a6266a15bf365329841a404b999c9b780ab4a01f3a76d2b058f4f807d30cd97ae7ff1b2724e9c8184b1946a1e2d8a0a1172de1fcc3776f154a9059f5c092c7d4dfde1f1c76a4a6f184d81596da8bb172279f18837d9abb7fa204c003a0a9bcb5ad2d4f31ef138300f490c11b8038aae7cbac46d7139d8b2a7fd79d1a00b5b2675092a0fbaaea1d75b8af33e06f57e84c322db82c8621bfe62342d1cb124841a8b98b3d6f319aac2b004427cc69d171348e3d587ccecfd2c9938118e94146e5e449ae3d169ed6db5312c7c03c3db2815b991c2e56518728edab59689b95222ff5cca76cc885e7d4a716fa1c748f54a392af74b66ac8a550b13b01de50a69878b8263b5d59fb9764620f702fe23982c8395d6d998d0830934d0a56bf1f88def658c7037164e5dc8bd12f0b014756403e9ef7422a8db84eab9e99669802761f0e2dfb24e3454243bbe06e130928ee86c0f821e51a63efeba7762ce4cd34301738abb25dd6edaf91428fb041a2c6f1eac80e035616bb804defd158a416b126aa890bf51d7bdbba67b017d0785bc48281fae16434a2ac440ca0f7ca0c673254a27b08797958996d2890a6c49d7cc0109753a53ebc38ff73b646d1ff7df28b95805bcba61a09b60b825f7aff439f0d9f50a84534f5e8232692018267e22e801c5e1cd09b302dc4e70ec771282c29e47873c82df383981bfd1fe90854675d60be5ed78e59baefc482b679eb0eb3fd6fab92b2ff467159d2b69bd19b88a36df4a6d370b743864874c3a6ca0511e5b2a27c76ae8a7e3ac6ecbda89360146b64d1792be1eb64d670d1c8cffe70d69840ba8b93bdaae8e234eff4ca604fc5b64a7d52bd67514bd59d1c599776aa2b060a47f07cb84c6882a9ac8e06497a6e1f02d4c204ea81f489bfaa0e4f5c59804f45af084c590744d61b21bf844347098d3881fe0f76794120e4128ed7d2bb178e018159149d7cef930c95bac492e2923040fa4ac0b4994b856201071579411ca13f984d081754f9402229114f4b30e46085b4b858dab8b72c3e1b4ef9f9fcc7f79631643ab4db50bff960299acf05227cb1c1496437da31a979177237195018f77787f623ffd1d48391f826a82fdbf9952f1002538e7c05bf14bd894e9a5da9115e18828b4936d6f939c9333c4c0dd4b8a88b82c22fa31456a38767d8d8da4085138a941b5641d14bed7e41aea0a7df2edd79d89c646e3d0662cc1cf47b725f453bb1e4c2209b3db2c48a3498126bd8353eebd541ddf07f2413307b4e4e8363c74e566cdfe4a3e460d41085da1bf8ce9087e1e0ba4021bf18b2159770bf9dbe43059de7cf04bde2d9aa8ee1db45c9f779820d40e033cb4fca070ea0ee53f4d17c86f8a04babc3b027bccc2eee042e55475c019216a4925423d9c8b64bb643a699349cf0d74bd8fdfb9a60b02d188c910dd01482326ca4dd31c259383ec47a06498dcac5ba541bc0831f90565b86031e8a0532cf8d1226ea5186d6f2782670a318f23dec0548b647417145080af82ac0631b2f87e9a8f4db7a8570946fd580bb828afed0f225452a314c1a8d62d544a4ab5bef5d87d226b2bccbe43e410f2741ae38d08153d797195a767a1d8a154ed14138287ee983effd50034d896d7ce225638ecac438d7d6aa121720a52ab7984d74feb3497c24a6410cd4318ddb5781bc52559948d6e14aa06d51bbe5f787f684b6dd5551e918c6cb72d099908e163ceaaf7c37b3f0f24f106fd55ef98a52654b90f49353c0c6f93bde1e1170a0e6a428bcfd4817cad1e4d8da732cf12ece8d15b60eaeb0bc9a6f8d09abc6bd0ed1f4956d962027a53001ba0dd3f8b87ede06895ddbf9116ccec64866e9996751a38104be78a65762fcaa3b4e001cb0c9109b082ef33202000da8a26be6a606d6a40fc995d1c456342246b24d39e138131e21b96ecf035e27c251ab75113b44b8ab4126482613b84195d9ba5f9a34e9e5a37e0af69e994e58ecd80415ba6d5eeb8e8d264bb7b81f72eab606cfa171bfda1c11de42383c90e432673b43c3395875ae6772b34d48320756053671bda66d943e09b42e5b615de883498e63843791362de29845a8031f60bc3e511adde1121817bf059c236df5adcc54a4dd442b715de7b1453553c74a189e7aac1597b53a53ffa2b13f7c19232c61267a004f42962290777526fd3ca2592837662c12d51ac90f015e04fa4ad17f30202e60c4dc05433eb188e1e568a6b22c4fca7ce2b066d7c94621540830c14f8ea0a247a1b214d82e8a35d816d3c6411b4f22ccb822511e85c86e38dcce80533c9b51104d93885b459d0d45c2dbb2550aeae6df2a54a548cad5544662259fe3b84b03dd266713910dab86988bcd89636651e0f2f08d2e006533388fa236777d5d4fc004b275958acb76947c9929fad15ffb278c6095b6910ce77df43462b6322b71e592fa504757a31ed94dc614f2b21e0074e7a2a510890e620a6d570c9fe6b0890f27af6f5fe08b0b52fa81000e216f0dc8cac10a67d93cb9b41f0956b327bebf60c583bc46a40869bee617a3b1e72dd4c00091a0b98373efdaacd7e966205df442ef2a0ef3b24f11578fd428c172bfccfa942e0301f1cb627b1e4766d5e36e629f0433414c0c06374c4a6718c8ac5a726a8d190c77cf683c3e5833f1933947852daf92fce48f304bab73045ba9bdba9bc17c1c995abac6b5cfa8df6d1f2e7f82bd1c6f4b03248856ca43039e0cd899d3adda4cbdff0172f1a64302b20a5266e176d073f2b0fe979e7a5528b4b1e90320a345db9e607f1d088c5f1258416cd557221ec25913c8226df0484ec8581a14bc8790dfa80c467569d9d150cbe187cdc07fee4a99a198a5defba855b00f22b05d40d098879d7692baa9aef7a5f5bddbc0e3920eb7ded7db504fae386dd836d14a3e9ba74c93550a3d381a24028f080a032417fce92b147916f51c3ea9760bff0a403565f2700bcd162e0ec2b72a3d4f52b94ab6614b24013e2035d6bb957d4c0cd37f9dea55b13721813cc39b03cfcd42dba46bd742f3876ec661281e8761f7592220e5647d508b22dab76c1c762170b2d9f633f45705cb55075a25a3b0e5cf7bd192b309e7f2616ebf612439eb4f93bead4f4c39272e9aaf7c204d15f230d4bbaeeaef074e2bd4207cfae8768af6254cf7b3d292ead8154563d9a2e0e5a86e87493d896616e31cd14a7b92ae204dd29b6a07558b4c9c8bfb1cc5bdc4d9e4a10f65d30c81d640e1e0bac7914d2bb0fa4202f1829c139050e3d7399ca4b7df791f7542e213570ba433acca637a2b77b0a1e5417382da660c7c6c60f627e164c854582a9c2fedfdab857a35af80832c259af2ee4208c7e8611ba249eb0211be5abdb50e113a6a44c2efe07f4e8ac0652647344b7e5885f8c30bc9ce4f588db37ddefa79c35e6db48ef4b36d2ec9c8f8304d09650df3ac0c2cd15d958dec471ccad22d0a46e025540129284ba0cd374cc0e7a479625b55597286a12b20a3f05cf9ed79c824b794bb1ed3b294362e1c85c2a80cbca73096a674bbf632ec4c3c979797d696f9ab3f957aceec5d7fc51721850dbcd0ab861f4c524750d6779406ae48042b4386d35924edb914d456f2dffaa87b7958cc2439eeb7f31c5e0f2c5ff57422dec9191ba17a6b34187f9ae53bd4b58b673e5f64bc1d0c5953f9b9365462a022de0a60a9788358290d65816c51ea2a5f520dbb8189ce10aaee3c22a8308fd079a6cb58831244ebcd69e89584cfce478e11de6de118a6aefbaabb61bfd45764ce50b45a4e0725572d9a3affb2b64620d26013fd1fcc201086126a9041339e31fe09a33b4c029724b14c064edaf6a588742587e013af9807b2ddd538a76f6a38f35003c331f66b969f510421a7daf56e549ab077115f77bf2a3666e208bdb0a1e5dda3c69f8b79af758767f4c5d3b737a307f3368a13bb2ed6e0d7f59214c7977c62e16550241c45ba580a177615d48eaa9b0a7adf9b36ff7fc1826b50aaf6a895b9b2115804b07b168943be1f94d38b1f34687b8a3502ecdaf3e0fd22d4321dca928442d07ca941a6a5538c44064e4a738e386306264ea837820bee257b74b5ac2179aae912800aaabb4410bc3a409460ff544d885c92c71cbd4a44a790105e1447a4c2e8c8fed25dc3f0e85d1c74031d0c17a6ccef39d61d99cc10dc386b96a5d3a1558e73fd8cd092956312cd632fd6f8d95b4da3c5b87b0dfcb56b79e22d0bfc9f1ee114ccb9afba4166f9ceb93f6227ef98684a71f2e7a8c70475367ef5a47deb87350cef5bd0fd5883ee12f5df8091b4688c1ead6d683d7752853c160ffab8b94064dfffc631190620d94f88b655946e9a3a5838828a69850cfbffc139ec52535b8e0742e89055ca49f894b2e5f1770815691ce9c8d70be1a03eaba3951312c73ced325bfac010f3b6eb2bac03318a8eb3d83045285df715ecc96e87b52463328021ab5728163e6c00746c11d569b47fd5986e263f6ab8a04b7895c26d5e3ccf1308b381ee0b3e075e46cbebb372f9dc369978ee8d852e33bf73f613cc376a5cb8b196d8d9077552e0f87a1ed8411191e80fd3b9cbcae9f8d7839d3dd08abf1639271115013b0b7ff69e20ae4434175f687866f5b13bc5a4ff24dbebd3d57263640eb72829c0f367816390bbaa2ac16e3cb631e88be7b0a281ee5d6d51d707da8d1e740bdeeae7a2727bd315601c6add9ea10a511d00938c480f97266ef7e9e19ec370079679f7d924df657c1993e498c8a1b6afd9d4f68dbabe8f0fd6423ea86f59e54f62aca7e7ad321defc493f2588a7f4ccdeab08208f17bdf48f96b66a17a4d8037ecd02240e19d8f72da81ec5fbf324e41c08f403ce49b1684e9241e6c44f6f39d99515a91ad71b9eb015ecb574ad37168ecad150117081843a3b87cb0e49483f71aa502624e36c694f23a0cd4951b0bc15481006c73164e9208d896613acc7b661843f365d0e6d42ceeb69e995ca632ce4a5d0138611a678631a3fbdf64d685c158c40b14842690ae241058f78576dbd803e7ed0e328bc7d3e2f02d52f236e05041aa3d445708ddbfa63d80d779e744120074698ec494b1da943d8552481acf5008e7971bf2e1a59f46c94f3050b362ca159a30c5605fd74500ccdf79e2b01fc5cc6189616075b28ba769fccce3e1b5e05dad84621e3f7d63c8db749e6c411d3cb5c1a6a1d1a111948294395f031b0920a31c33130949407fffb328fb150a38ac3ffe835a185fa8300457764c347de0489c406d5131bb67a7399023bc803be1dcd694d57d7b1d46569fbb2054316116314c941630472bdefab464d08f9bed596dd6ea442cb5f5b7044f0fbafadd9ffb90f0dda4f8838a1c9ce4330e21f56eaa21f74aef502d61151e8e6960fd27584184ef683e13f78aa234d0d2dea98482edcafd72b142d7948919928671f785af8c39ea1eed341eaf8a4f13f5fdd605efde75745dc1f4388ec05d0bd4f61906eee852a1f7df56faf6b340e0f6b9e45f8475e9e574af0174006e2fada55091897b597b119b76e922c2bddcb4c54efcb9a9e2f400ee364798dcb9922b72eba1fcb20cd9e5941bae95873c9a52022768c637afeb525507626930e42aacabffcd2feb44b609e4a0bdf9788a0fa31887d190808c55248b9ffa86fa50bcc6f3ddb210810d1ec115e5aedae3273ac09e88cf7cf183f8d27844a5006c594b6e58344fa94a6ad36cc84648d2aee3b5d39ecba8ab3920f8d9b6812e390b1e1d874b86de372a65aa107057e4fcb359fda728d7d988023d7a4d7d27a6aeecc0a967dc317da3d95af7a52e8348f0f197eacf74fb230d5c8988c860bc2f9bc022ead06a8c93429a923e73e30e0f149dc097cfb3b01f4f378576396f90ed4b1425fa422f96ebc92dca5ccdd312e9d696512d980ceb41144a36aa64c1e3c4257e1beb9854c4f6324cf98d20670f33bf893ffa92966b37bfd007aa58fc974858c12bdfffb45da2413cbbbf1a25a2a380540a273bc63ce3befac3e8b6914ba3c9fc3241bf7dab0b01fac10ac5b1cb9f25586cdeb4c2d6ae23b7b878e48ad07a568b56926c30f9aadb6995ee4a4b784d4e640ccacf6231358246f93d820a814155a94e5855357d3a232801817dca5d08b9c8bed30fac158a1c8e1f8a1be43b6ac02169c463549e3e6b4fb8e8be933d9ddd146d7220601cba4fb58bb94e90223818cae16a0c3addd23b03d1f9ec0274594656668d9d1bba66ab365fbdfe09ace66dad87ffbbac9092c72e2a30ff7b356d211bc53968ca854ece478a3c39f8d420e84b45087e350d1d931a627a45f9cbd947d05dffc15b57d8238a404ab5618d224c770f02ab8cdddb43bb5e3cfc367bcc2b90cafdf42ff02d7785c0837a98812895e177c71c0f5d9d8df1315321373fdfca289f5634eae20ec10b2b0ef2d71f1e1c73b234d79c9e1fac64180bc99e8f2f992c670f05c1f037889fb717c63bb8088637fb93cc4c0cb073692adc3d9c3cc6d31d02888f357a0e4848b0e4a3c45ba117454fa369ec8259425b0b0afd54662005d250a9989ddc6e0f8ff9d4e88303224ac805a772ea2dade5f9639f3d9b58eb93ef3d8f048803427d89031a39ea16127482e62016892ced56eb2091c59c00cf56d665852848ab7d243c8e87640c0ed254fcd01ca91087f362df9e78c44a9b3d5d57449426947d34ef6650fc6feacca3468cfabad015fd9199bfadd773dc83d2ceb3f32189a6e99dd4ae1b005ff78527a38a18d2e7bbeec4784f1bc37fbf90cb3b17a987cc83024acf514b06b187c9195182a2e2a5730f2337b0821f899255e9d2c9a49a05847edbfce80efbe4a4f31519ccde214fce9c427cdbe0e9b3f22b6f3069fdadb855fd51eacebbc63719be6e5b47bada1c3c05d39ef557f8d39cf3a1428128261994a54822197d5f40d7bdbbd609da0c79d5751339d9cc0e00bb086e714234f1b91fa667d168a038ff56058811fea4fdc3faa71c38a327b536976ba86026d970dd5d36740bdc20180984e0cf89bee00444ae7565559612525be4918dab3784afa9e9fa69be3f3e4d49ccfbc99c3f10686be7c9a1a00507de15a6e020950b07c2c852640ee55ba7f6563a4c2101a6471d0c61fd8c81b33708bf9b5ef4c5835f2ef2b4f87525621fe1dcfc4e2a09849afc52299906de8a89f5933516ea6ee5612994f3697f60b17f72adcf18e712d4b8fd90f0ce34a04f4aab2bc8027fcac60ed2ce26a2ecb3d587449d3318760ead859cd0a4298670df90ef13a32b731885dbc8a0f909e601f32f6a75cfefa134af6dcdd412c152fb1b485c0c2a6e3931a3a647779015d32544cbe1c79dfe456c2cc15e3d330d1077b4e991237b89ccef0eb21c0138cd8dacad5fb6f987c1802eb6faa80ebbaffaf426620b83e5f9eba6191b08ce3755cf3b10161a6f8e0f2921ad86cc52e01e4ca063624b1323dca6d79636c49af8b16a4a031b0d63c689630389f3f80f3d638be7c4b29ed221a9eb74ff12f2b3e45e6fd7101c341e18c08df938d6e7bc51a7c8336f48c4cb5ae320fb8f6da532de8d790b4f89a1a4f7c6791cc038a0bf220995445a38384d6768a4461170d63730fdf19d394f62a9988d8c22fecceae97591a6ab3974b180329bdeb57a1c7c860602236519f3426951e70599643796c76f53cee2997a65c252c20296b215c9dcadc5e84ae17ac2da7bc323ff90248bdbf12bd8093b574dac406b991c465319069766aade4d0443d558487ef968fe8f9968d1f59bd44b98323f92c8fd70eb537599085fbc6a714b6ac9a11b1da222789f254f7aafe31e6222fa9454cf2d5869ec9a0465f338277c6c6bd577b6664241ac25f885ad19931a6b0350638f243aaf7c978c2503edeeb7be4348106355481834357c561b7118b4c3dae2791f1065e6fb2425ed12d864dc830fc160c300224c5bd9e2fe2b8603dd54cf0486cb6326e50ab0d451a97858e610a4718100a9b60272a6948350470ec85da9ef35a0c1990c19b34370cf4aaf2e0d4a7472fee6284463069dcf3223f9b0dc185ead67c8c186a43283ab34f60a3f23a3c83d868776492500ffdacf936780bbdc863b6315081ab25efd08182c10df027083286898fb75f3c4647bd6889abebd4c8801ae81220d1efa89385ece247d64f67d68b139c530013809113592295d5bd541c613f9af3a8836b66934680940e869148666b9e15141587733800a21e39a22b6814c7866eb9b4e1730819d1fba8c7d6d2256c99529e03584e0c0a576c84c44a1a9a0d3b1fde6effd247c43715c56e2e862b3b2e842e41a614a44e8e4c4ba1e82541349b3db2d7b48db3359085e59851e3927542fccc80209da554c06dc7f4ffedb613bcf846ec3a238e5b0a232103f43336d3b101837a01101355ae4778c4411ea96b889f1b2db5e6835b6f4927c2b63f95dd4cea9f48366d58d5ac4d1ad3a05c9b10145cd1764bb8bb30c839d06c2563d4f887434fd8a51ce2262275761b53d83f93b5e40f053463d22037b878c739f044cec264ab294b1dc4d55573b61c108d2f84c30191ca14e00db8e384e3e307c36dd4cdffc6751455f0c041d2cab4f3b629e04b8f676f14f437e2aea2daba27f7958c9888b45a7cff69d33abe494ad6e5df71f7105410e98425374e14f9940c5b8aa19e7282d9795e621411dd0c1db177d49a52a56475b3edfb8edc2ad73968fb460d6bbd433333208005499ea6a11af0e9660e1bd62bef7122d5ce27ace435dc62a831486b3e62a7f113643cec593fc319c4b0f9bf0a3b61cb47c97ebaae30b9a765abe394e3a6fb611e68dc2e82bf43dab1bd9f9be78f5e3ab9ba94f5ad8a6365dbfa1c52ebcde88dd7c1ee90aee4340f05c1fc4ee7b211eafb3d8efe12124e8dfc4784548cfca8d99341a3db411047bccfbf002ba2a0b229e9834737d4e8d00dee1267292bb5e241f09168a1bd92b6f61a58b1a0e8894589a791f02baca7083ac5d0920b0ba9a3e6f9665d7f944403f47f4dff9a54f21e1f4603cb65028cbb2b5c2df0cdbeb78c6086ef03f2410125d64cf7fd947b7cafd7b56e1c01be745d73df6b85badc012f0a5c254709155d8eb303cc68d9ee4568c25dbccf4dce8530d91e94a14ef117c0b03408cac12430256b4f12268233bbbf5ad290a30a53ee2bfd19c5835759de7a8dc3f2c573b28b9c23664254aaa8e2f0ca182d92a2777375e0c973fd383727ecd15b81c16035d00325b519d93e63d368e276fd02355d6e5d95039b08ced43701fca8758126e4bdc882e650b6ed8f3b95c228cd2c2abd416dd4923babdd06d5260bb05a81f616dc96cf8d339ad9349d8a413d8f53907748d7ff9a4e95d1074792db6d15fe6a91e48f3d0d49a4f1a51e3d16b816c92f2d60e97bcdfc0709ee8bfa55a62609b370664a684ba6d040b9075ab47e27b13c43b9ead44f0c37dce64dafdb611cc1ce1f361035605c8cc52ced0c6edc7ddb3236d70734c28a706e37b7d739e5865c68e0f9cae8276b35eda3401bae3d3cbe9b53401ba4984017162a2242a9d37babe2ece0440459d83e1f2cb0c607cf35ad82c4bd837dd4f29b7d2066c00d75f1c39588942c473bd3a3d5bce9b6bfeac66a1ff0f388168400630bc9546bf2a168f74ceadbe24ab6d98ad6bc1aa4fd7f62bff5c2c453ef1e7f80ad088766d81f800cd49ac7313aeb9600f3eeccc7e73c0ee65567c7d94432410d053012954dd0b02c782a31b3129bb2d1c6e3e26c50f7e0608aac0efeafd03a6ff641f98c0241584dcc2d9af1a5274bde5222f87a63fbc64d5cc74077719cf310eb2f2b8171f3420e420cd66b7fe8d1f5ad36972aa4191765dcc217efecd102c5e278c9ac9e3938e08b4fdfe672552f364ab1999131418d82f21ea6800b69dfe63cbcd1881284817715e1aa44b16e7bf0c93227d6800e459d08ddf82becd2037941aaaef3ab0d43227a3ff82066505a7d4e13057a261827829cfd78d466f5ee456818f97d378021aac1b8c47715feb82241c8232d3cc8b78caacdc0d812149fe4a7c5760531baf85378726e390127ae70c5b430200d1ec1e3514814c8124b48f9bfa5e3eee7ba21f68c197f21aced525ae467a08d8928c0f7349e8286ebd3c194a74c9b2b8a8a4084654a9ba3825887bca6089b7dfcdf8fe3280a8a5a4d940be6e601eb900b2938b52fecf52ca58753a9b212ce4c87093c21540894e697d5ee57c0a455d8f67adbc4628d375c3737072860644ebab548917fd25036633a4be99d2c71b9ae4590d2e5576cef8254cfc7e5d1415705b7c5d3b4c9cbe7a106f5521b8cd419c3631cb40d80a0dca7066da2a47952bbad611fff1a37685d310507ba9cd5724927540456a312072150e3270c66e052553e33649602161b39c32a688208e503fe88369b0e6f4ec1f3757689253f3fc1624a5242f81139a0a84b1bedf41f272553c273d4dc3881128eecee04cd8b64a171625bc953b6f8e61a9dfacabf9195ca5e4f39397a35f608c64d588ca618428e8b360fc65bde38f6f7720a5b5326ec5cc7a7b79a83165f56816e883c22877323d461027298819336fd0814051be1a4898afe91a374ffc86de0886760ff2a0a523dbeea2e79018a8621a9db3e82acbc5e28906eda846b7aba8a5f7794491b3950d96307ba1cf180767529e7d391a3cd7687b608807c40d005d3f346109c030ce051ecd7df9a95052c89f0c4d6a0c0bcb68e488e388d85700c7612513c24d1a5a90f5c1bb64b01c2533db295d3149b4598a3657d57194cff846d03038e0854d59cc56de3dddc66727b47ce9269d210d4d6fe3992ff1f1230c48868a335a0cdb914b6fada5328045a078ebf915eba5e6f7a4a2c241070e1ea65357e6371daef7ed7899d68fbcc78705b983a196c66f1bb1d82ffeb04e41fccb8fa8031573019cd0cce79cdcd7e325938d2565a05cdf35aafd0da55a0a7336b03d9f001983352ecb5bff00300ee49afcdb8a2bf5abb567c336c897ff6dcf7b64060911fa073fe8fbf50a902fb4b2fd9b5453f134e53ccf8a446c4fd84430a0a1000010007cd782c197e6c7608ba16bbf34c845c3fb26411326484dedd860192956b21c44656020fe6f30bd3416f6a732e2b15c185c16f0f03cf1203f03e540c7ed6db58756155210177d38eb44d704cc7e00519b82603acca40b90c796486becda0f53cce854dd1c99cdc2b7539f20dc87e6dde41c3d298d1a02e48e1661a7e671adb5e04fd6a20236bc8896be810b1415999d7bd84063d25f4db33306366889b59c4484476dead3f619b95cc11ca4e192b4c9c4bdf68b46d110658488725c6c3dc60b722539a9ecbb0e17f4d3640901c7c256678190925c0d9e9c45b0f9937badbb80b52b41074e2ec56c612e8449e5d5eeff62eeb90eb6a989f90ae203d43e21d46a2cb8fe963a998178da3488fcd1f88e352491fd7c4319bcfb81a1aa6d251e5a3ffdfdb03a9528aeca071d2b8195cc7e1b6f7f9080242e0060f64d43e7068e9e65b7e9de6f1c11b0e3b1164806aeccb63a1926c04551b0776b364b411c230f80e5501aec6be09a99e0168aa69b162ab8f5fe75a59fdec1f7b521a2928550c859e01a92484c81ac5278a9fd34d1823d93c7ca3098b529516f3ab60389d542ddf086c86202d3b80ec2ec4cad0b6283435c9b78004cb463b4e23b661632aa73319a15913cf300088c367ef7bc758ff66bddc65c4bc6b7bcd3e6fecd3d977a82621db5f18c1e9d9007d4c56b86ea47088085720690f40b3478a516aa5ea989fccf2261124c4669bf8ab0d0138eab915b1d6684e7209b6270ac55d878d2bfce6960ef4e7ae5be1e501e2df80824481e269d83a386d1c9a4ddc0d6a7860e1ee6d7970d36f71f07655bb705f44a0619d16d95d9f51c721f51553af69e77a80ae7d5fd74c56afd39e0100fbee910f18e6c10a63dd801ea42cabac068faafdd56b97d86c972f961ac9865bd11289199f8dc2ec7e4e9fa9421df090383574a974cc8d64eea8b0c1d8c5126bfebf434a06e0af640572afb640dc0db74f49f3ab7b9b2d35fbf02059c8163d75744a49daf029de0c23ada54c929041f983eeee5318987e0dd49524344ba9229ce29f5421508c3111f0f2f2bdc5d75042357fa836e108f883d762203989f4344c705606cd3621b3a3a34e889dfaf3039d0ca72946522f926c1c562d1570811389923991335a466279a8d03a7c81e3378c86886914df485d52402d8f3af63c92e34019c4ee1859fc8c7a4783126427263dad6acbf662629af516da51b40b8ef25a3f237d90abf0aebd5b12749dfd1ef8183fc7143b36976a937e07357993d18049a66c7431744bd530adf41a7c2710858a3e00e1fa3010795154fcde655b0d9b8b3b20a3a765e24c515fa32aa179eb92444121e1c7281049eb980c244c3ddc95776c559a190fa844bedb3d003ad4fffefdb1cec5118e881776e8774fd8a66a891f61c0cf84ab243882b63b7227a5521db1a4825a99c58b0222e9f8e96356f556ab295e7fb382131d6253bd2da2a657fde124928176e8ae18683d8f7c821e787b135f8fcc912241408513f3e3c4ea9848502b83d872e567053a13ccbe8845d424f8039d4b14fdadbe1d7dbe95c61cff120cd4221b50ba5cb3842ea75921a32415da161f0d24154f6cead4fa4ea742fd507489ec8c9074e4a16c102c4d7f07a574968e47696620698d86298ef17503cf4dd8c7f37a4f41d7ce33b655b0bc3dd2496d7eb11aaaae7305a31277cb7cb4af4c506aae02cc9ff42d66aa1a7bce0558aeec9c1bf22a9ba9e0fef27e0d267fd139bd4df8714d4ef11751e58923e88e578aef2bdce34f251c83709f7b82d5e61e40de1b8dc6253a97fac0e70349e6ed61c401de24724d709bd0243e5fe5c78977036ac157093bc8811b1d2cc7ed0dd89a0776e808ae64757781df3c447166b5b12b05df5cd1e5ecac7de0b1be4ece978ca7126fad7d31b1ddfb1a7ce4e4c51eb5e1435c0192369f44e3f10a94cad530067b5773f2175898166d6e1e3187140ecc2ec38c968d7fe6e72965eb39f9521182f3641c2124cc6042c4bdb3cf1d35627dbb0a693f7fd2bc877b37c01195f1dff9910124a0a95f3d743f269cd1e3c13e6ea1fc3990c939e10b6840dcb757a1c3e60b3977a03d589b8a5e4887ce623ed599fcfeccd7887e4d458e851dd4fe6b4c92740712a9bb33a4213ce4fdd3bf1664a49bc34f0d392ce0d6262b05b1fc1d00af8f9795889a8d9b9a1cd73fa2d5fc7c0c8532e259321428f877fe6d6ef966a0ff3692afe2a4be4874ceb105cf4e7d8db2d8d0846166e6fa5f01f7b7ce2add06a893058abd442c4005412aadfa23fed8a415f78789c5ff339a7c04ba775ef9c180a509efb922050ab466113ff8a4168640bfdfcb25213d81a7a8fbbc08c8934adcd73168f60d231a68d1668e9454c34500571f7405d0c708722649a48560a54de0fb3603cf32a6dc2dd7f94519552d3e241c28a73945724071fcedd46e855420d84f99d199224aaeee571a2a9abfbf9cf5d1ffdb8e4143109d5641b6ff98824b5e1345320864bf90af0b0b3bbaf92363a9a0434811258c126221464a6c412032e91044c0aae5feb172feac0f725f078bc4892766c41812eea3dd9502132a41dd4117294403480642497083be6fee8af3906b22daaf3cce10e82f62fd6683c6de7fb611acc28d3c42d8d48fba46198191d9913ea4882b4e5b39a55b8f93e8c136bd4b78a18d6ca0206b026e8d2266f51b5e2c61b763e52ec6677526c10aae506337af3cc3dcb373098175046b1bf5145086538d8e69cc2c61c9143a51658bc60240ac0b44cbe57e818b76b3dbee6bd6c8a1ea30698719ba2b2dc4397df2edcea5ec1a8fe55e654e9f5d25967302ad27aa8019f5307bcdedcef3d10b7e7a4dd551153e126a35385afb81a0d27bb45d4dec6b98467b0455d756de1b095e7c260d2babc6d1fe9a128cfa9b4cfd110de98c9a4a028410369f36af94128d304ba3c4737891dd8b8cc611bfa6d308ce47bd534cbe540b8ca960a6a55b746fe956c8c1715d7b2b1c5994aa14e510295fa123039eda2882518b01baff80b4103ca5d4151caeae007e4c9f51d7902269de76c84e8b50f57502d4b5a85044fc5c532b4b3b4d26426bf0ba977bccac574a60546185d0280a477c6b495b66dbed02b9e1418e913cf399be266b328357699707cd284c245b54578aa41769e1337b2230aa467257207f2aac5f377e31b7bd47d519f0a3e457b86e292ac10e747cc6efab11d389a787051ffac20a1be5034c8de48d2cf1ea2099a345343c079bbaa067d5334177831477ac564851ce58b7f0bc8b2751a3e97d43b1a25e4b519251a655a9e43a9b4db68af22467fcc25711691ce366f4d5ac74f2e222071fe72371fecb1964d1a0f1623bc63df0209bdf8e8b6a7e25a487d435ffb5ed9748a73d30e5e9a5f4e0bf3341b70fe817d7dcb10ceacf9b448cbc210bfd5dadbc06b6e5e83a9a5caf28778ddcbc83d269302eb4d38c8aa210301115e00dec8afe3ee0f444c89d5153fb2f320b7e4f8e018c5c37169bc89a2cca784d6d906682fe12be4e78e60f470aef300839c9600b799c51759ac53a7c3d1804d85379845c0d6a7c4dc7ba42019a65c281f4ed1ca7ff84f4fe247d6d19ac3aafa5744f01ea3caf2c01ec2df7fda10b1dd026678ef0ffcd9c00a0d5742bb5c90df842e12aadd1b49b4c3e3dad51eecc0e87204e8ba81328d85f6664dd5b78c25b1193f7e76fcbda793695d9524ca0eb7db6d89ce8a9042d0ce3a7c42e94067a86e1770ea814521d95859e0033b9c75a6b64a5f7336ef46e274f958266230a580fb53dadc9f5081df5c96ad93787f8912cb5394abb9fd7e272f31495334f30a040faf92edd646f08207b76fcd29f39a9e62266988f1c8e2f05d1f681b063ef78ff15efff94406c83c61bbce395fdb4f18ca654393a410704632d419203d2e40f8888d63ab0a2f9c11719ad32f8e103d6492dbf7594bf59efe2e669927b689ba936333acb69f54ed73ba64b212584e46c80efb09a490f556ce678adc43014f62c2a6cef5a09312cb510c6a0d01088992b207f3ce39d5d478840eb21d544f9abb14a24a621325191caf9318ebe4340303d733a194420b97ca173eedc92f1a2595d3a9601c28c5f9c3344b2b32d8406917e4ed70067f1812e7bc0b0f893e9bf1761017cb50df0a5ba7166918d394433f830fc2a568b88ec87e4bda1abec9d3fa0bf98e942d750031f80e06c5aff982169a5f101727746e3e86592d20216c7e75a0957cb0f012d8b743e69bfef242f30b4f3034a2d0fa25b3014566dc61d13d98a32a7b9dde7726ec45b5e7d9fc57ec235ad9d0a063fb35b3eeab121d0f7311e16e7084bf28632072c0084859fe78c820c19f22f5c4c53fd739e0fd4e3315bd1978a86d99a57f6366d62b6bbbbbbb794524a19770a3c0ae60952bcd80668d0a0e14d0c86460d0c52045091522e6fdf119b14161d7492ca6c1b155326932cc0262550a9e209d000432e68d20418ac200b2f8204c10a3266300232a4747189b0228909655e9182d24847da23c61e2992d20f74c9154ed02654880e51a22955a7ee1cd95365ce397b36123cb334e764e284077b9a6605dab306ed598588f69452a7ecf9b14231992e7db04d44bc4c425c6cd32dd65e52f94ca08ece5639fe6c546ca98a5d7ae9b329a97045133a2f8c3ffa6c30265d71c4269df4d99046a37b9fcd087f5628d9dfbfcfe6f33ebdeeb20a2ee46bdc36f729676a8480a2e747e7c595b60d084d8e50c50d9a14794b134542264c9882043ad60a261fa08207a659ca81a6c528d9b6da3da700626084045d88a18427092f7b012db608c11174e082a21cbcec7dc1b63d90ea0adfd8f33756d69ed1828dc1c3f560bd24ea4106330822e2042760bcacab880f2128c307670855f1b2b508db7a60db1f40735182c7d5aa0e618b6f7a9b023cdad56186c0448b27842290f460b566f77c1dc20f39776a34e0d9f71d36855cf68572b139859c80e7909e4fa878ef6158026bbfb4890b0a3cfe86e95367badffa7baf0e929e7d79f6dda610d602731ae79dc6d1af23d914ba9f43f79348cee474800c267a4842101f6042115ef7538a9cc1a108434a54c1430f4f18f2bad896f60ba0539cc8628a335e1504b86253a7033b2bf15c291d462badb4de2cc3307167187631ecde7b7f174dedbdf7563a2966df511e7aaf1e29a5748719ed548fd8bdaf37d496bc2629a6abd674f76428470462d040c747092734a18817ed620b2b7896f8e00444884291317ab03168003386119b812e700c2d48d4058e4145bd508c5185b60d552ae41a022f625b3219c208f618d30d014b939c71d1d69433c4ab1306e769fc01c30294a028ec51fe783c4526c05fec1a548413c63b0bca429b0770cd602a990431d1f449044f180bc187070c9eb425932025dbdb924990cf1ec5cc085a12d8b425932023f618b335c1980b303382e88ab0f643161434024e09413c784cc098192098620a1251ba28782b422605635ac8608a2b76a0f9006b53e00c082b03abe4400b03894d0c239d0e30270416406c4a98c2076d89293c900541d23a6ed446312c4851c6d65130907c5e98b81d4f0a27a3cd8b9e4e8a283c8d488893620952e6c5106dc9243a229e2158be20c2440a137c600ca91cc1270a334c74fbe2c77ab1328f50445b528bc2c9c80852824c6368340b8112667051e0704b2a94e0a2c3811241db0f186f4985123f9813256aa04151c2080e05d8b425154a00e1a3440f5ee0d39654249142617614422c5b52f1033076d089624c8c8da1b6664dcd0a2bd8d8f3a30d4e45b5e747959e74ced05969e8453126866a4a71121df85ae9ca899a546a89624aaab5524ae9e8f33aca6d54cb6a8da1b66490a6d8b595a6d27b7933b5568fe09694a24637b098b4da15206cefe962a66b2b96a9645a49db302ac340a8d175fdb88082b650e77ddee77da36e44e2aead24bc5d5b71492ba9642a28530c60cd0adbc6961ad782019e255bafe974afada715bb82aa280fc4f4886575d1d36dbd2ce004531e282fee98ed72b97e5cf6e747be438d5c9735724805219d945265cfbbe7c49a47451c6a4cc436e311caa079d4d66bc04a596d4cd522b632d3361d3969e9d65a6bad152bdd5a6bad351b4d9a2731d5f635cb3bda6bbb967b0001cd6bd3d977b417a7354cfba69dd3364cbeb6cc5aec1ac88e7737e5c52ee75daeee7a338cab5d87795997615ac5dfbdb7ca7aeda82391acbdf75e4bfa30e6b162b17d2b0b748b7344cd6aabad165b52d6952a96bd6631f2f5d67b5f6bad1a5351d67aafa5aa1b745c8c16f71247dda866ab87cda971ad19766fb11aa305b534468b5a6badf252b84e23d563921312c62427f5d65a2b76b79b917076b70e939cdcad138ac23d416d2b1485231ae2a2e8adbb425138a2212e8aceb84b22d55a836ed3b4ade3e4dc3aeea749a6246b72bf8edb8cc83212d6b2cb755ef53a2eab32a33d1a129bf7659a46c29ec691482497f791f0bd76a4759c8749f666234c7262b15fec19867dd857b7d7ed66d608ecc3b06f7bdd46d8a7c7b9318ef386a640416dd9725e3734450ad1944ddf6ed34858db3a0e939c6c1806f4245b723b6e33e249368566503622dd1a411cad16cbb4cdc31b29cf1df91d3175b88e74ede630228ab9f7dedb619ed0901232cc6a9c5094d11556e384a26c4f509da7719f158ab2110d6d514624ecca2286902e9033a3d34f9f3a33d2130979044582befbbe8ffefc502b9a688ddb7e9a604ab026f6fb691204d464e48d3e1beea3ee52d690a80f92253a6ec37a924c1528d693244302f56123da439364d48722c9681212ee328e442261ca4389501854ca438db868686828cf10efdb461ae5a14668114a841a21618ee4913e9b7a120d9d9945b5454fb98d479d217d343464312a64688af867ab61d92bf2ccf0a8106de5c346b5a8ce60d9ba5487a4bdc3779ee3b66e680a1494edb8a1295288a668bae4bdf4eda03b038299412b2268f30929674de326d07d822df1669169640e31c4a6404f3021ecc98854e9bc2a1c373b8fd6d0410176701440b8d9a9586168abb66ae06ca83321b5f7b11dbb0f7bce1ec3341d522d5fb5de861b72a89876ac4d1d6c871a6cb84108571b535b34315c106402a69f93de0f582b841d152ff0d4969440b34b9c7431358a24dc932550f676bb1dfccfa66d2dcb9c78654b5200aea00324b8b0af10aed85708427c052139ded83587adc746ec7a10e809bbfe4f30d9f5620ca058b2eb6510aa18dadbdc48921e4fec581bba34b8ced8d76aedab18058f34bbe6a09e94fa44378509da2b88198424f4b607ffb3adf6d95d860d02916db77da6cda04e2fca1e4f40f0c0b6960910401258fb8445c21e574a5e10806d954cb1ed0f886cfbfbd9d8124ceb8385b9b12d0b39acb43fb0d6076ba7dcd8a3b442866c6b2fad9d49b685b26d132f7b7c31e68b6d4fe3e2f133c6b6b70106db3e0724db7e071f28a1c3440f7696c0f323461126847a9a40024908b63d132786b0ededcfec39c2635b742e6e620922367db5168919db5a6b5f0385800dd2ea161d4c43093336f542d0d9df6b149438a4945ab671b0747ed1cda9470c6398b4f65f6c9aeb00613c2188235c4045105b44f17a40124e20b2c5116224c1840b905c1c70520801cb9cd0a84dd23375c2b0c73cfdcd3ca59f3a9455eebae517f2a0f355c7dc618fecf437d929bdd13e35cebc5643f9d796959a072856a9fd26bb86436fb2e3cc67daa60ad149980ae02db0f67b33ed2e7aafad377b51ec69cf25d9c9c7cdb2630fa2fdde3bb38b7a3b98b6bdfcbd8f2cc8bde651d14e1f5f38750f4dfbc8b4e8ca02d7e3699fc38f2bf0bc876977d1ebd2324c5ed10bd0e21b6ccda0c88e612a33f7ee5847f0a8ed7b29de0263cf8e691cb863592803dd21ef390d669a0773efbd37c42b30fd08b36f4c95c2da7793c8da0c33b5ab6634a33ae471297dc574f822a2f4528c0813a171d5168f9b67d5344bc03fec08132322c99c066bebee1dba0d3b771fd9b54de3a161587875b0cb0ce329a211715c86691c941c746acb16ed106150c0b0a52f686f61b74d5ed88e9d479de1be4309805dcb3bd496cec6429a6dadf541b6dbcb57a7e590bedbceddc7a6755a7b1059f113bc5dbb36f830216b24207160afc136d6c4a43c580c2ac032c080626397130b1bbc7bbe0a8dce5df6d49991fe340d6310fc77c6da2300292fe7398ac1aac7963dcea11dda4391501ffa43813079a61049c59697385c52e0a0bab38598b58c3973436d91216baafd685b0002617db03ccc1d0d5cc06cc963317bcc1e24bc3d835e694f2dc3f2607db0405822b39241915011092ace0b60cbc7481cb608473d10f0c86d6e0e90339b6cd5cdae90732ab52b8069ab358943f2605aa36ac91a89598cbebea334c4660f5406b3332c044100f5aabfa1fe0790fa1d70eae7ce5092cd838a2e2d307707c80dcc191b5303b2267badb90702aa9161c82f6c05b25f6bed02646b1e8b2ec0e811a4695a96e7e6516704205bf3051062228bb1b1ebb33c77b57902552735481c2cc01a156b9d3d248e18971418a856a0abeb0238bd6dd6e6bcb0df8c83d5e10c337d43efeffd04da374fa0391ae322912d7aa0272850ddf6f5618a40d6cc19851e90082cc4b45fc819ba2364872c91acd9819ca13db5457f0fde0e603228f501884bdb25051eadcf8fad3ff58788481231d922ca0ec0964cb6e8c1766981bd5b7afb236bb8b04d4c26ba9833158cd9722264a9806285156a9a68a2fe589f2f248e0af402ece9b9535bb306d828894649a46d9c10b366ce3d83903577d66002cda94d228840971478ac3f75a61619712d627f90359302d52255d374916a4f202d10b2e69ededa60ca5c194c919e6e21035c845d811c438eb1c7fa438176113cce2076102fd8f4955ed660d31319aaba6a1a04a9485958744fcfa6bf41d6c8d73943671340130a2a24892890c421ada401d09132442990113640b2a6563b87281010415508217a845d8159af0826d184125a1b65da6a7fa88c0f9da1f1639558201b649bd82776c842a1b744564afda9404335a8cef47044ce21595381a88c64b2c50f9bdad8f43593a280e7e55703490c3c5f17e0bdfb7942d69939d402821873013ad9940e61536d88658f126807a545a8487feaccf561b6e881d084c097087a2b1136fd97ed50b642b5e50354672c91dd816cd1bb437475c0a24d2f65530a647d9cf0c4a6b74c0cf518b13e3f570412077d97ad1014b8025191bed29f8b64a524a7f636f5086a36e48cacd9a1da298be813b266bee89a2c3a48a19833b25230a6cc2442c52927c562534a450b72aa30ce21a8127ebb439da150cc163d153a58ecd42e7852b0297d42e2a016062278b4b1a5141855032c3f17086e0f5923c12798984545f6a144a2889c3ab487cad04da593211d1d9d0ed01dca4387d021a811c9840842b60f54d2773ed86beff5b6b473d22115a49a7651984db574d5007b8f09a22e2c6b24a5b48b4eba80e99e5be301f2466fcfb9c3a90a222063064b5041184561bc6c0e92b4c08722c86068075a88f631f60359804104853defb4439d018508d9d9b1d7b6c07d60d75bbab5000114d31eb4bf36421394103146123e50c0210a499404418705493c718b404119dbfe005426db1abb10e111bc41bae8931b6c7aca834da1ddab19d1c61bf4078c61180f718758ac6dabc71bf4053634a319c5ae94b136731efbaed4486783ddfbc42eef893015e6dff5f295fbf4f0e6e9b1d375ce6ccecff9d9607ade556fe41f30959b354a0c9a91a921a1d5c0f2234090457380e52cef5858206044d3340d09239a114dd330788d0702449a981f9418180fa13a78088cf19011c61fc618638c47238c87184287e0d28854c2a4d1f7ad86608c9a61c12c2893caca4985620153aa14c8825a3999544894a504413cbe3a615bfa96e9deb66ddbb66d723b446a3de51952691169c3f4729759cdc3a795cc96719c0ed9e6bee5d0c727e588153ce8018f8ece0bfc11a96fdbc601a19be3aec301f0e03b30cfef06d43a4736ef47dddc04a848a9272d15890c11b2b3830ece10de8e2cc2d5db81b9f7910ee36d9ba7edae7aac2578f4ee7a49e6a7630543c5093439fa840a2d01da942c290151b1a46468e33ccee3e476ecdef6acf4ccd3eea2727b2eeac9a21dd20e894708d08e901d6a84caec502194c763c0134fef6c2a49ea0c8d863559248b48b2a8c845457b7153d11a1569ea18236a34de719da1f1ba1d46ab1d4698c7d354882ca279d283b7bdcdf2ed9a94f9be7d7e361b8b66ab751d208695db775dccdecedd1bf1f6bc8fe2f6feede9304b552ab3e48debee8a0caa9041cccef6cd3779e5944d36085396219d84195564d60dd9d9f64c6331e931679be4500efbfef84e69123ab37a35edda64577c5242eb4a9fae9edce4ee2591814dd76efa67b16b1967350f9fc04e7b76c619670c6d19b46dd221db26bbe5a775dde5965f02e6192e6abafc6c4c3a070dadb5d6c9626201529203083c914c249674d4a70520f008e4821fcdcf86f41df82cbf59e55d142ad69bddcd50229a076b09f62ebf1d08b8a144eacc2c92ad7a10c45548dd31838ab5a834c5460770c90c5d2aa262dda13225aef43a7e7718d6ddf44d8f9f8eee5a497edc515c89fa745df743934881bb1929f058c3902dc9802cc890a7539f3a539a423bd5b12df55153e929a529a98eebb2aeeb4a6694a6948aa84cd775e1476d66a5ebc1e0c5d9d3532fcbeb6783dd7b6f3737056691ad12b4c71c241490417bd338b01cbf7e3a588e2fbf1d2e2a767751963ccaa003d056f7fa1bc24fa589baa7f4338de931a6d32cdff448e3aae0e8a83c43e92b799c5176fd29e720d9ddb50ce4ee12943d3ace63a77f8cbc6c4759bba17eba677b3db455efcd1e2ad68fb8c0f427003e30c9228c3d521fea435b7503b1d6e991a33e62b55a866babee1f1f9ac4fede18fabf0049ac8a4e8ab29adc2bb2e84204590c210a0e08278880832d06591c2124c40ab22081a605164f084112bac0628b9b05feb0a0e2e37a3c2c96386d330051d4618103cd870b8ac29799e0c90c268082b198012784850b3c212c7e18cdf04311161dc03c3c4e9ae0cd508222275f78339ca0c74914ab19787c54aee08e2c91848e055cfc54b19db1c4135ff440c81233f0885862882c4ae081257480d0815ab94dab55cba4c4a4bcb5d60ad65aabadb556add62a259552532a29b594725b3722853169b517cbb89b699bb669d8c6655c8775def5ba0facda37aa97dac62312257578524a3b19f9ae1bc92d0c9a9853c6f75e0cc3aad534b96ddbe66974a35d673d6fe69cdd8118d3c2dbaca55b69dbb22c6fdb967dbbd935a0d1f1deda8bad64dab8795cad3593526e5c266fccbdb5caabe95aabddbaceb399d5c0cf096d4a29a5ac14bb564a2965bd158bb1b5d66ab1d03417dc8a65b73ab959d558a66d76d628998a295b4169b31a512b86bddad77b2f86dd779857efbdf7ddc6596c03ddbdf7dd37b2f624d29cf76aef4a2a998aa96a17c5c20282e0cddea9bc1aceb0ae5675ceec6aef5a3ccc2573c18e6937abb50213bb15c35eedeb9d754eec1ae124c9a459fd6cecbec762b46ecb9fa88d21ff08d0d218660b09902ad0d38d66d32071d05f5db5cd669d77b3110963e047b944bc1b0112077d0d24642aa66c4e293f27989af75e5d017b20da6675f6de7b310cf36eb6715ce771d8063e1aac37adcdb6cfebbeecdd37b2a38ee48d26b6eb49d3daccc65e95ab62f254aec964f26e09e59d502c2c20087a13a5f2405538c3b95aadbca96af1562d5ebd77b92ef75cea7fafb6c078fac3dec178733e8549ed4ee193c1ee143e1a2c0d7aa45779ea2bd94473762a03c1b64ae52815aba2a2254ad3ae47cd45f3d4a9ed6d6ef339bca4e9bc693e6675941e350d6370f54d146362561f6956397c4b1e5939868a93f4956a458f397be5a7130d9531cd14a51763c63a44876aebf4f05dc8aaa20ea13e4ba5524aa39ea14ad7545fc9e05119084603e92bbdba8bbaea8ae5aa3c7ee312cbe7694c5922b1e9bdb9e7c7a28160bbf4940c14037353fd83749025cf4d4b79fc2edd554b199f9eae82d2e3d4d9a8affc749a8b661129b4c43354ba0ca2a5d38825209a5d2ac952498fa8e3bbea49e5a82cf78ace2e5d7e32d85396db9475a89b54c22a25d25db444a2dd88eaf1d33f6e6cef9c77f0591d1ae7d090668360688b071dbd8449ede091a4c7a9c7b93beaa954744a195458585854f228afa252a954295ce61d72a3fef202f372108502355572e32b476995e9f293524a1976f33b3dcca630a45e984d26d6ed175ee70b29bbd3bced6b392bb7d8b0eea29cc7caa7cb0f1cbd2d73f6e9d817beebbe1dddd7c252b1aeba4b8b4a754c529175e70ed549739de6d272f99dc2bbb4803f81153cdd3cd6e5b7439ea5f2b60a75561eb5adba44e51b5fc92390bae56f0020532055d17ed911da2f7f21f2d9353ececd4202101288ec1aaf7124f4ccdd7d99cae8e49d3eeed4bdc0bc7cee979797bb683762792af58e255d949a587a9c9bf516d4e9f453185e7ea75318cadcd1d9cd6f6af394856178425dfb74b0be22a594072f7f41bda2b14f07eb358ecae259393b9c61ee1a9f35703ce62e6acae3411a1ce323aa845442aa5fce4c1f39af52c96fc70a5781c8f6d9517a76cb6514a12840bbe5f2d3d172979fb2cb352ab3b2227399d7bca600a716264ececc4c476766666670720a70aa394dd641c7dc01f84ccd6b4d0b339461859f2eb74b3dca85d7bc0041f3265378ba848a73a4401b888af3a1a6419f4d1812e0a3cf46a562e1f3a339cd02c8a10ed44917804c78558f20b0ea39eec25db49b3600703de726c75d780b7741e31c6941dfb87097c679e12e1c0786e778ceaba39e0b396ce1fbf29523872de8b0478ebbeec3856f1de485bb70970e72e4e685bbf020303c07006eb890656dd5e81c59d65601f4286ec963abf4c863ab62581f79ec1f31dbf450a36278f9811fbd1da27e51596e9aac834d003ea375a8f0d3c13c96f6ca59792c6d99dfc83acc7d92f995d1928a04d0e3006ee5e92d3fadfc2b77c9768585d30770571d40a63f3acc1d7301e4b95798de0a39670ba0e5790cc0553805da2cdf585e2a026f5f4e2a95caa14183064c0a2f2ff293ad1a35c4cbcfa6c65d34494b0b8bc562b1504765fa43c57927b66412856877f303c0e567038028bbe5ac9b918425bbe5aa3f49920424846cb9e51c82251330786a91d3a7a3e5e1c11c4a1717179779d3c19073fc85ecc255c8e00390e706409e9f3e750604315e992b5f99390ec36bc801c36b70418f396cd45f78273fd65519a5c798ad3a4bc5439525155997f947cc66bdbbb1554765561e6f6cd6651e6fb62adfb332e692c7d2667d16b15893758df511dc2bf9944d2cd64d3f7d34b49c05bee5e07750a9542595eaa6ab7c34b45ca543196e1cbcdc6149cad696f8f2c32178d35d1500596e1872cecb94e9cf7e21e7bc6ee43167b7bc9353092c992861882db7dc1d8b87fa6c5487c9366cd838cba7b2711b2b27160b8542a156c29c8dbacc20a802efa239a71c9e9ec25b37e5f0f4d6530041103c088e4030d4e1e9e2612ec393f7d9b0de75f20bf598b343d5a5c97413ca64421d8592aacf0685d2e3945454817ab45ba5c19587399c817579d666e950861a7f798dbfdc45577278d233d4f8cb612ebe5bf160c839af1772ce6b7e2dbaa6088fb3489270861ac7711c1a0797d7b8dc339ce1050797bf5cee297e8a9f23cc61f28d77f243e91167a30ee6716ef0ac3ce26cd63baa43750255aaf0aa9fe44d2ad547a12abcfcf7d1909da1e950b1de7289fa0aeb461ee7d6a19ef17297ac43adf1963ce26cf1ac0c84ee1a47652074bf7c258f382e596e0064b9e5e7a7ba46e3326389c3c66d9c95b1c441e3aa5cda363e96360d1be76cd0f846e3f2d36143d36889355234720a1926d3974c4b446096a33e9777a1e75199d459cef24e4ac97217656139f82ef454aaabc24fa50a3f1ba93d2aa6ae51999c9d3af66929161b9796bb682a679df3bbe951ec8a2bae905734c07e3692059da794ad4eb65664eb245b268dca47d59cb99c41d4dc73e523c8927aa7848a53eaaf083cce220a4481aaa6610c522473d446ab3aeb96f5265ba552a9ce82ea2a95eaf5b351b1f2344346664f1919d99ac7b3c80c2a83fafce7eaf374c725870b1ff17e018667dfa1cec0a0717d41bba07368973c37ca7aabe7d53beb1d853a4b1e73368b4d2a8f76a738107510859a451cc771ef5cb24c6549c5d55307f398b3c177d573c93612c8d90273cb4fab54328f2cecd4bb16f0ddf45ab2dc6304b6ea8ccd62b1be436ed673f62a8f73afaeca63deaacb3c4a60cbb354f7de516f95c3cb4fae72ce96f947dea15e61aa90ba2a8f04d8a9bb6a2aa30e66161b946e808cac91a56fe56452b9a5227ef78d3dd9c29ff8a3d5c62fc16c4cfaa5a33c829eccdc789c4535ecabed8f1bbbd62da505fa80203a29a5e431a449087ad89d9c28c0920918457627edad75563cebbca769d8668254a43945e0d1d39eb3413a75a9088c5d7e538f39db76766bf3db313fee368f38db5ea36256b3edd3823603a17b4545aad1905d1007783c9d5655e2e0247fb41c741a959132059a068a313b9394ce2c7e54f103227890c40c9c30e2a5c213432011f4c44e13a117bd309802ab22df25518c412a6dc98448083bdb920991121174f3988e79c6a612879c7424250e29eb3eb550033c4e23bb8e5a0c3be0c53ad3bd9e86479df93e7a15370f9faac4b68b8ef297bdfcdac29b98656d522b824ec2b480021cc382de21b7dc0788c196329e7abcb167cca8ed12dea511dc2571974a7f9d39bd640f66295b9ee7752c2578c41b5391d2d716f7d9d2e937a69f34ce91d271c4cddda44bfac6f4d34f1ae7b5c5dda4735ef41dcd77cfd98316bf1308f160451ea64420a8d1d3a14ae92ffdeea23994c4fa5daaccaccca06eca8e3ae9edbb40a531678fded59f5d3d955ceae667d3591dc620b7fd0eb9adb61fc552b679a4ffde51af9449b89473f0273d2ad6ba8d3f62c41b39765df2e3c6a69f1ea61c0a3628bc9801cc46850fc8e0b1f75a2b6a37adad402761ee911d72c75481bf5706e6f4a2057b7e5e9bc7e20ea65121b4dae30d285d1461840f1841e80832f082875d4fbf1ac3e2a3d549b3d08e9bc0c326edec615b24886c2b8297b5d65aab59eb4d3a8424507e280208bca21730991ed8a9e2a6ef8208d6b34d36ed6a5293454fd09c20e4e48493770004b862002f72a1050fbc13134e42186309270a73c21ee879a7d5964cb8c0628f300b98b58b5d2f67a5b1e9b58bd289c56cd17781c1d8748a4163673aa14288d01e78e891dab2a293309ad6b3cb98b73c6416082772866a5ce02f640d23ff89d1025359ad1e355bebadbdda35d612662f37463367d50460616cf69af5965f68350f4d67fab535f3c6964827a5cccd58a0a21cb15f99691943c5cb014a2b111ef0010f6498bb473dcb6ba0475d07764d8f2896a7ee0375f02c4fbdbbdf75a80a5fd2372b8e9b517dae2eb7928b5ec917c75d9543ec1baddcfbb81177fa0a0e15ef4f3b50f102d191039cc38f9a28f8d39cbedeca1c82a408cf6682ce9e3e6cc9248c29614061c2842026745ef88d3ed543fde950e3845fe5703a3c7de1c9061d9e82c8da1ae951129d46a37c95962f0f7ba4a0e5fa777e9f0eee980715750ee75d2e5f2d39fcea3e5477d1415cae7a905f9cf30a75386f5a1e7e3e649d751cd55b6c78a7c7b94797af976c74efd847c31161386f33efe35f7da57172ba8e7af3dbf18539e4bee2ce3dd43847387d137ea571f4c3e3e4ab9ef392dfeaf2e583f5900bbf7a10d55d9ef3f2b10a12ea0adcaceea27156bab65e2e7af9d2da86eb23f3f295e5eb7b6d27bdb2d2c94f8737336fdf77adbbf7e971cebc72f93d40c53dd4b2b61e60436d71b7c1729a071547faf4da69575dc9729fbc1be0514ef1362078de5567e4ebd3928adfa81be9b0874ab57af82057753ec2202bedaaad51a86de04145eede251d0254bc618ffad41f509fd2e103e841d5c3dfa81e722a1dceafee72d5551a27e474d8a3e5e17db43cd4ac0709ef83f596b7e820aacb978b0ea7feaae52b172d6bcbc7ea2e77d1415af44acbdaea2e5f39afee5bbde53e562df721e567b332d223dda39fbeca2d2ef9dc391d72bf69f9ea37bf4b1872fafb247d94e53e651c5648a4b7e4d59f5d4624d25754fe04253b0c7bb87c751f2ef7f1a9472056e5dde96763d223dda7af8c3e1f7ee7dedd2587a3550e47e1f7dfe52dab96afeee3dae52d3a873dbf52f90907d33995ab705a071795af7498679ca1a2ed0ef352b98535bfa92740c5fb9a3170e9dee7bcf67d7e956da8adeff5d33cb8ed3393ce65efa53c620d84923e670662f7f64e95c339e79c930339cca3ab74f87df59c174ea8c34f873dc2ab7ef3e91bd5571ac7759c4f4b570db37ccdece91b2adeabb27c7559874dbec02c5f2d14c1355051bb9155de55b3f1872cd1500aa22744667473a640300cb3967da5c779a30a43508f3fb452b7caa31cda2b28ac99e5ee9efacc2915fe9ff3f2ffe6e5d73847f0715eb43cd63739e59a98f47cf902493aeca19fef433feb20476e609eb1d660ea3ef2f5b50e02a35db5359fba7cbde467f0f3d3f15df5e9083f350f2a4ed6bf3c02b1bb7496cb1c4245fb529e44a868af230778b2e84944c59a2838d4298d83eae057ef527a9c3b75f0474ecf56b1e6c7ba8a25a9f8430aed14f8d42ad41d0d43d6535986a57a0e3ba56fa8b84a813ebb67db8060a80ac3e35cbf3cd437f9ff354ed636d4d6fc9f934ad14fa3e2cb53cfe17cc9e194b5d51273ac6364d6f336ecd4ea39afe79c570a1a46c7d4d6ea25cbd781ccc9caa91b2aae0ece2c37b81a82da95f6963cce9e6b27da5a9401b489ec4f077654ea5dea20b802c1bbea0cf82c6b8be5f290e5e52e2c30f7f1c3e4bf1c4607397293fff220fa17613e750cf8e7d448b341d567f8996fa808d64045b08259bb2a8f78a7589e733610593377ea5d4bb601dfc92f0ccf02c787a99fbef29cc3d4492b1da6b48ea9830a4cfa387978606e3f85a8ccfc6d0ab7e0adea36dfea5b95a7906360b2ab7417ad299d5db5957ace31b595fa4beacfa987190374b32e3f1ddf43201247ea615ea9f2d8a2352aa6b4fd747c0775f8995567e5d55d35ccdb57d9bb2a73a3ab54e153a96b20d0eea6b77a08fee539af9ff5983a13ae348f1ef4f34350873dfe97df7c751cad43f0392f595b2cbdd22f1a27eb10d493e7cf795dc7e8b802a77098d7f8f5718edcfc2fc7397243e37fd638476ef26b681c1eb5659faf35ce911bfdac716cd02fa7314e9e8ff2e7a31cba7c65adfa28835e744c6da92e5fd797525280d13ce6c19cb36fa8a87a987fd44045d55d34d3dec90fd423ce06afe9e7cfbbeacccba714a1dd4def39e795758f1460fdfc9c57ceeb25eb9cf3ca39e7f592e74b6a2d6b2b6b1eb595e58b7e40248e3953793b98bba3f238378b46dd554fd99455f2388376cfa86d521ec59c69cde6b13bceeeb8ac6579fe7efeaee82a8b4ec28c131bd917c9bd119a24f739c450f14ee0062a43f58d1f544694b2b3bbeb51cf46a462ad31f7d5138ab981cded593b2910cd961efb74d07ab139848af7344a601ba8ccf8430e6ded373540a0ab3a7bef28bd0c9b662bcddde547430e54accf818a98b6d5da6d8da05f99466ee4982918013c4a33c01a0f595b3eb307890c8cb0405bf737c7290598d2388147166e707fd06c23545b9a26f03885ecfb71eaec3bca299b08764c5b2a0ea13207824365e4be529b1d0deeabbcf7d8adc7b20e1cd8f632eb30b7f5640e1ef0385f3f6aa7593378635bbd8ac20dfac354137412a6ab1597e84bf45e4ab7772a9ec771a5e76c4a4b1cc751d1db5b761755c1be598cc5031e57bb1eaca0f8fa15895e1674d67e6645a7bdb8d6d37b9a75e0c0c6f0bc9cd9939f4d2d9de3de8d3f68448d8adaa8ebfe65fad97ce10eb9e97376cda33cda3cdad063051eee8e73ce9e1588a942f75167a9b89d2b65e7bee5539635ccea0c3cded8f6948386ca8c3f6edcd0f630f6a3d7053668cfa77cc0736e0fa7324bcfb62d5faddecda11be0710e0515d5f9cbeaa2896290fdfd913314c90ddaf40ad1d0c4c48822a553e52e4a91742a9f327f9e3e8abf17496dcd43a151e84c9d99498f47e9112ce9114b3a91cc2965088f154ea6305902cf8c7d49264bd8d973cb8ad25a0f154b9a6e2171cc2f0c3cd62dea16b246eea9027eaaeceeae37bf1da59f682a8ff42b9f9f4aeb70c9356886f9e92869fad34aae4d80d05d5b009a4265c63a7a4b8094b4f0041eeb501da232238e4265c6ca23054a252a7dfe7c96744d527da81844659a54a1528906a1466da3a4ac9169743a68ddb4542acd4d4b79e4c05e520252a2648905e62ebdfefc3589cff6f9a1e2b440dd25adc3ac42ea12201ce0b12aa942942cf1a93f2d0481c73a44d12e4265c62a64cf1e2315091254e606554851ce6bbefb615c561e5353f83cada8348c7e79d15a8f78abb48ba6473175aa699325daeeacd7ddcf8646f974d07d3a8f4da75099939e353e6a629d69a5f03a43e3a5b7b2986ba4dea53295a2048f344a142a4e1a39857cfa11b34ba781d22852a84ceaf3744aeadb4137a59a0ad51c018ff409142a33ca4945fa49f544fdf4541e6fecd44fb994c71bbb749ac79b4d6bd8a9d3fce3c6569d5eca63e92b2b7925cf5d4b59ee931ebfa7b4a5a28a4a92f9c9a0eaac97b3eaaad2bbd24d799c7be5a83c7ea34e5d29ef90bbf4ae7a2a058cdfa66ba5d277c85dd2a6a42fa8448c580a7b542a550302000000008315002028100c088482a14894e6b9b2570714800f7da2446e4e9c09a420c961148410428418400001000801001a1a1a2b4f535941e645498fd0845c00f63e0f9681b918f13675513de090262efcfb928335e2b21f1cc74665ab31679383899721bd032414c88c4805d6c40d6a5253e8285f481dea6241e24691cd897e854f49af5f385600c97c849e395c8e94fcad4a2d935a5fb84655a2fb57630c8b332f4548c0c1f8019da06724fea70056e0725740a7204f4d519a1b84d44ceed181370d6961f32e2615861e141101163e60eecc7aefd5233ad2c9351ae699141c18830cba73a31b3ea530de48857be9a3c3edf50278e833faae094b891f80ad2fa7a7704321ad5af91199ccf2f9cd0e46d076153c9449b04cb1f4a229fcfc41788637c566b3afd4d38e5b8c3293c179d2bb4af5bcb3e56c3c095293f8608c9cedfb50d8770ed00d9a1bc49514020090a1dc67d417b031e56a09face6fdd05fb94821dba66bffc0561810f89698cf9f7cdf5b4a7f8abef8524dff63087db934c075b116ef448cb7387f81e6aa864152be85e67ab81b118ac070b8dcf0291670ad4f8ceb5d7e6156c60b17e6a499ec994c0c2565268aa34ea43b754ba9c39f73a8e31a9b9021ec9063b2c92d4ac8a40793646ccb308a0ed0f083dac9c46899273e6ec82d560837c27a46876f2d2d38bc435aa1dab18bf5523e4e80f4a65e82feb5f6067c7a4a04f327cd6e975e8ac09053e3558cdbda832035c8200558a64b69ec3b7342b4ff29cd82882f29540ea4e816618a5886029deb7620967e6501999578dc3542972af9c3cad4c7c7ab64ff251f9ebe5f1f1bec462628354b67ed91acf2205d0e8c008e20f6c169d46b801f465d62ba2768e47937011423b8ad580e730a3567752eeded14e0e61fb92f4d69cf5ea6b54b9706b37adf52bad6d9cce265ad3c8fb963ee7c2085f6301c2985099673a32782f2cc2f66c5f000decece2252f3850c968821fdb6d440402b1a236203534bfad3820b8c42a666b221814f3a8e79e17b3e72255d99a3040f85aca20263fe4ab1b44debe10c9447977057afa36c832c62f22316d9464a4f6dee80006eb2741c135b1d21f63b5a32ac24a2398602a0d579ec00dfe884a0ae7f95b6049ea4abc609270a15e648b724c34a9626c69fae7a8ebf8adbdee7b0a690567d04923b8e66684b3b2d348cc01923c0795664faf0c6918931c38d910b01001132a7070c3054c7e0b28897037e8ccb12047cb0144e15cb3b34ca5171d00678fa1241a6b20dbbd6639945238b0047bbfcf958639739423ea48090bdc37cf1470980986c00ec30d87b49467056d1bb6d60746c0611c4475a3d03ec6111d8fe4340483cb7ff14a9e5088ee7ab755bb5867826703b480285a08d04789c936979f720abb00be38e24b8c3095fc9e26b16b522c256d041a61fdb122bd3c1b687b88ec4d5e9b683a096b0be0a677c014938c259cafd3d362198317ab89779078bd3f8cec5f5535dc3bbc97f26d897aab03842cf3c9c5dbb5b3aeb0e80df2325c6bc7e4e3bb6f3f9239b5bc673549533915e954940dfd1074b7155e92dbe8699e9b07d6586d6115f6db4ad938d9084fc7114a24267c19e2102b724b20fcb684d7871d8c20a593741ba0fe8782f2f66888854a214b61006fd753298e5a7aa0cb14ab8c952bebfb0172282d726d98048041ec9320cdd46a9df5629a1c7b56f28239eebf872fa8a412155f86728cffe9940f7987fad6e7e508cce6ad4e9c6ca04c1ce256cced8e4f5b259db5014059310e75d1024974aaa0c7151a1c765f9ee6d8ddd78af3f84d723b760ab68aa1eb7ba76aa5f21d328b0ea6eade2e22c297718d54fe8c1c5697f912673cd98a00400b2658f8f2fe6a02609170a7a92b2f80f2d87194a63fe93d723bac56b3f20b20ff22adb58abb2c7b0d7436c322b96fcab46f68832a7a0acacaf31efd11edf8bbc15d15c77f72802693e912a8d707f29c8b5939288c2e30c9bdd5aa3334ca28944113badbaf9942b994cdbb5bb8b2dae6db111e092801159a749a820284cfe5378f17bb12ee753611b234245087dcea0b5ea64d255100a1649bbfeb91a3b256c8cb8519f1acbebb55de2f9763111efb9ac702daad54d340c72210d7b3ac2f58aca00ddbd707eae0211b6535776cee10f559f1fa446c28de3426cbf97a4475b662866d19d16ae0081a47b59ce210e24b3b95466dbfe7d264d74b53196059dd4e08004aa9f7a300a6495df730fbc3b0a82882d15ae7012431d4c750a3ed96f9cdbd6f28eb3729a982ddf64b8acb07e72f25487f85914eed37c68cffacef28dd8b17af340bf641373f3c070bfba3183b3c4506dd499b5e501e0438b93469de3a500053601e9a4eeb09e442b1028e8505153a96830359a261e9144c475365722d1f824a05ced0c0ad4ca65f255ade150cf75581a36534b78e07d13af16ee08e8161b48b65b52606679c8c060e62f01fcd5d1521ac018823a17e5f8a5ecd644270f53d01681975d15114ff010d6b3dc802887ba5767c3a5e5cd5426f4e021b3ea7e9caf615decc70f5154101f66b5ce8e4be19ed9433a2b2751b5cd592d77d72345d0250abf6a3a3b0b21591eecd022993386e81f950dcbd2e22c1685f475855e1b66b5f2eea04f19eaf9881b45eee91c91fc0a2d6ad567737d92bf7af810845f16ea16b0b22818f83a7283cd46825fd46c91492fa270ceaeb99d29634d396cd6d971cbe6fa1ed05525dca9b5aeec52ad398cccdf897e2f2ce425e116a1a9fb93f53b2b083aac4338f05f088307e59b122ae5b2619104630e7024a785da7c0253ab4129947f1c4a760f312d0ebf539995debd4fd48ba6bc1c895fa0f17ff7ed043594d162029a765863280f270aee1c992c02f13ef27fa66ccab06d96f76d07ec43a631585155db867f3e4663c8da6a5f5f0bbd70aa4b63347d6cd6936017033ef8c6559519eb2e75a6a23d811c7e3fbcea5e607a10b831167710bfb06bf0f3ab108408a859b88d429866157427b1ec889a841a0ec1605a1e8553d07db64bf3361492cf01d294a981af8b0291678ed2e491ff2a79344576612266ad50bbe7883136be2be4c4dbd04087e399d9bee839a3507c9997122da7cf16693dd02e7667fa130bf618783671764ccb0834ea9f391723dd018f514c061af73cb06bb966ff183ef5088e4e4c687ab2b01124baf49ff5512ca2b98a2288eaf9e1624c78a39cf268fc8e390066e3a93c7c4b5e616613585c1d3ca49277c642d6e3497b2a80b06bee5dd1399a32e5629f2d9e02f24f680766ec219db657e7e14fd706872c22a38cae2d6f8ace3d655ee317254f1b86b36672716d8f17ed32e30baa77ab9a8b6b70b9367d3af871e521702f5241d4739555e3e857730f024c8fdcd42f2c1113d1476141db2068dcad7c17bd067aa9784f01e813b874e155d8e1ea3761ee62a310d1f7c39252681da1ebf63ddf4f11bf82dacc6c2b316a0ee97b4d136cbf3d5f66a8808f71189c0ed5c4d439bbc280f11bfaa815ccd107a73f2153cb677ff174a59ab2843b9df89494da4181a0d2d7085474932c1c74b9534b42bc0bc01a166298f9261d7f58da4d4b6e2751f1935b394f26d30390be2d0d0f2750e92ac586ac469a9b394e711a8198dcb7ec30e3878dd74937e618b464639e963c4212d4299851d79ea71369e323dfc868191337ff6144bb1acd6c3cbdea6a94411619db3d6a1652df324088b15bbdc01fa1c424098d5f8e5c88942640696af974f1633fa734201a00428a8aadcca64ca120ae06fcd89d8524597cfdcbd7a5b060962c188229b4dd22d2bfa351d7896fb21faa8dddfa30a0e6b4b1131395acc3fcd46ed3b7b9ca084c51c80952354cb462d5b14ab86fd5acc2f3b97079d34f32949957d79a9394affc382e776b1d4d7187681353d5001426cb7c3dc0403370b3d24af6e18c3bcc7ce509e225af3bbc51f4e58323218010f5254641e9999cc01b17b77f321b6f28e8018be4c01b1efc232cde985a3578b5524b09d191532ae89a88d8b791f9a983937c81cafc0d893b9477101e56d8206434df383e51a253276ace026a90191f83f7505438f61672eee51a835c2b8a3385b6514d26bbfc4260efb8d4929c692849cc2b72b98b3c85d75e16aea3f527851866e41ea4e2bb5cd03f2466835655510e16181fa8e55f53d3244c889826b048e617be73aa75ec8bb832f2797da81c0c0dd90d1cd5c0853979dd5150d0ed0564949fdb713c44ce8dfeed3e1919ec2918af9d6b223951dd10a1ffa23362dd887c7625cffc06a7cb11c583365a5efac1bb879c1efd5b836d12bb3d1bf7f8c574143a53ae1105e538e5f2333bef9d2db88657c07aabbca27fc6a238eeac16025fc774cd0e43c36e1d031282ab99e0227355de23b3b2f2fa255f7c0a3eb8e2bf79f7973840caae5fa8d7b404dbff89707d45ec07d9352d820778eb075cc57c2be9f77c642153b06e33fb2187e8767c79bfb842642b252c6e3f8eb5feb2a55ee93e7cd32dd7a68bbf273c3de15c5c33624028f069f7042da5ad06f798e130fe891396c2a8391b2c3db4556f04bb6759bea8a5f4bfbbb0f6be580433928c0c183361b7240e6f190b36821f5359d1d02ac29c65e5c15e81c2f455abf02002dc1a051eef8d50243524e71005274bd4eebd04baf58be6f6449063c5c2d876fd89486d239f6fb5018768edc55b5cbc5f6022f03a9c1dc6ec05136486122ee7b85bfad0ec3d82dc3c7b8eef17616d2eb6ab38c20b7a9eca0dd66fa2b578ea8eeed38af18c700656ae62835e91aa9e5fc18935bb6f9f010a48a76990ed508ac86afcde3d8595d2b6c52c0ca0c028de7d38d705304905bf372dd4c7b6a7d27b1dafae65df232741adef697b25596ca6c0b3135528525ac8bb84c1301218908c4749b37e1a7a82c60ad7cc4023e968b9b2ba1b2a62a59fddd72b45df126bcb5a0eeb946310de0893e2462eb88783ce862f4d2e675e64a27b0624d4620cd8efc271a6eb49679d57ca3789e24b7cdaa5f657c4401780e7b40f40ade826e620e72face25348cedf6ca795ed8eab36d20dccbda7dd368c0ef8e5879b2ecb3a1d5440c21426a1b97ac7a187160a781d2b92eefdcadba4a6eb492e362766653ce02be87147be5e8a94d236009c172d70151d6fdcadb748c394f3edbde4750fd21cd2feeb05c535b43a20c02e58bb9f1176759fb45c1e163bbd8995fd1ce166ffe4063859ab555075a6541a5c997de5582e09155f4ca140d8474e316fa9ae3d43341ff5bc02979a38a4ef0d93bf2b624379414695ae42668281389430bc4f047cd1a2aa9152016dec9d8101555e2d4a32af8b28371e4ba0b0d86607c887168bbf20bf27fb4f477e422d48cf20d63d3f6d9e84c60927156a19ca1fc0594f7125f93a79adc9eacda50840ef966df358098d08c995b08595dedf942a4606e5edbd05bcdca2e292a42d10c5af56c0061f3f3cd21eef1ca0399b704b8a87db3530ffcabe66997a672bc74d56cd45722cbdd7feba48affa0bd520d53602654242c34015badb2dea65e22e88375168c78e2135dc0081f103e3d999bc523d1c12a815dbd3c72cb172c2f08611bbfe9180de23532adda083a29fb4e0a62e554930c12e5f5a93289a49b3f048f7d0d38cd6495c968c15c0925a50910241c281f0e38a668b1adb54bb7909d70ed6ddc4ca8b051c28a4858eba45c8435ff6891c375aa0a6044a2a00fd4e73fc8e5f6b4e375e04f8d26e12150d1fc2940057c06390464e046f482279f18c4d610e522e569bfc4bab8b6a12feb915d8184032d67c4930bb77fb46e0dfa484dd352a5078ee7b0420ee222ee45784662a0c44ff2cb068813b12b7c19c75d3965799fc0f6d1080cf269b97178076b34345b3432a4a0296a1947b158634d3a7a3135826060551411ea73e564025c688906b601f7c694ab9491be15c3de56185aa30112392192b4e2891b59c03d8222c3137b17e6c20a7a32d36b08a317da04328b4ff4b3d2ac232e733e2a41310058bf06c3065083c6f9e653fe44db089c2c84b9b1404580f89be66f136c604f765da81f366c1f6a88d9a1d1ae2b3b6a20e99d61dd055d70354bdbadc9278a1ce4b36d25df965993a8ddc993df04160cbf1364f33d7baffb2b5c9e5d1dfacc41e9c04565067abc44b18530a40e239c21d21a1b0628c419d2dd384e12fa304d70ec198da851d93d1d89565deec6e636e585d502e4e1f2c0e6814601a0aed338b536d2db88453cb1ae0c6874d640e9425d01515cafeb4485742abc872b1589effc9cc11ccd1ddb3eb3740202c2221a3f72e7f9dc49b2aae9ea12e277555c543f2c7ed1b84742553a70c714938c5cde13f5b24ae465aa7d1906d8b96cc4c0a991f5f680e230a020bcff6c232a97febb9b18a1c80d5ca7b2434773a4c8f94904c3e54a73964b6623e67f2f2809b275663df18f03494b0bf67353ed04e420ce750ddfb9602b6f2e030a691dcb4cadcf992f34b82e8a82f81fe2fb30e8387d50debe02e24a9b15f7f8cf2ddefa931ee0149fd38747481156dcc9de88632cf0e9a0bee6f5dfb21179e0217da082d9a45e4428b6c0ca5e46f4d312ba99c9c19602e07ef2e518bccccc765f3a6a5170ab80dbfec8e4d0f30004d6f696159a22ada462f30c504ea46d8e0f785ed6167f68455c9abb32c3451bce3c4cbb2f5cd7e8b7a0748858c99ece160069f624b37197537549237424c0ff9a47ab983ba5c6128c971875d51f587ccaeed15abf04e65281d09c8be6d017637e6590e4b993b5df352c8b26c502a3ea8eff32031df9a020c723012c6de1b812ef825d9877d3d6ae66d24c33055e12817019cefe27c19858009f72998698a43943448425a918594356f29eb87590815206bb48ca6631651e33efbd447a33b12980549192bef0e8413448cbbdf25515ab0952a345b2a3818f66eefb78c0287340a104fe347f4ce6c5eae35bf4dc5a8dbc56d83102c074d6f4702a06cf4b163c579fc3adbf12ae872ff153d399590ada1701771e092ed8f4688c8550d801e2651b6bae2bce0ea88b6329f851959e1771599aa410500720593e4c417be12a3b56be07d249e98e63272206e43c1e12841c58c1476358c13558f3ee236303091aac74e13b925f1bd9948e9d4403c43fb39cc1370c8307974275b43ce672e0d183247113f9a5184bf57977921ddbc641b7469187db5b44753f1298f23648d87d9786218315404b5fb0bdbb4b4aace50392a6b9cb162c4ec1ec48b96ab2059c5374a0bbe15841b23f95d95edda5b17e176a633fa57bbb75e14d6187579b0d3c699dcb8b6ef9a10d08e8b697e7c5dbd6e8c021e08c2c634059e039bf9bb8fdbc41ba9853720be55087f139b630dba9a3ade13afe0e34a8ceac5e2ba2b2dd839d394ddee410cd428a7e10ec82f8788724cf3b8c5cf981ef121afba412bfc556c1640b4bb4093fa5e3af7e63a617915d4f91a565c2a5d396464d78bef24fec9484623f7a314c18eedc1c6f0f60f7221c31c2b47b5ac93fb1272c705514f2a2e052da7b50e8d7751920be3241c01c49d109b50c173a9e868aa7508d7695fa1e3d9d0246702a80984b0d62a76d56d045f4a337b29e3f1cd0d3c3714afe4a4d649e0e1039a816bc180b889e3f0547ffd73afc198345e29d3d1e977acfe3828857374b8195de98197f7d904dddb42e751162e874b4877eb43056b9fc205feff730a818ce058b3a9a3ee530637c68d1b98c1aa07149d1b6dae8a80dad1e7cd0194d09bfe401dcfc51de89a09cc12d5c0d52139b49fa0f839864d6dcaddb49e4b239b61aea56747c135ac64d8eff0a25b88f75a658ab7b70a1b5615e4393af0cff7c7ddb667e77bff7c2196aa689ed829f708a434e1074ac2862557df6c9084d61fee4d3c9761667cb555abe03ec54010350924c205d74b265230f1070fa2ce9b2c659027280c6c3b109987007531dfc5e01d6c68ae18fbb79e229e69d601c646aca3322fae4b4cc955b6f086c14ef71974d6978dfefc3165ccf3818951b17d6cfc8226d88227a296378aa1f56e1c3e05d3caaed75ba6839ca03f86e21184c78ecb2a08a6e576a0373e522dccacc792d83c8a82adf85366af38353b1ecaeb8fd15bf08dc89949cd20098b954ba55d4487c912ed0700237c3053d723ed87aea3468cd6406d786d2de1f3368c41e0c2833d836151a82f1fcb693f916bc4bcbb74c3cbdbe850f993294d85cfd90913eb94ff218fc3a7e1f3444d34a1c455f99f439942a34dcd7d349811f83d9254181025191989eb31bc68630742a52bf79c463e5af26423244835c3aa4bc181ee1f2eb65b13385aa31136cbfb41b414f5a725a4c8a89d15fac0605cd5504a26d88b45a83e58785537f4557ebb2430165fdcd46aff425a20844861f4b394f81ba1effddae4e6cae07e23f3ec16545f9a0ab8000d361225da05a86ea6c13cfac74a2ea551416d73272eb48af8d3884ea4f28c30c8c465ae1699bff142bba57dd758a94558c10d693a2fd4443325b2511f44a2202a47887ab895aad4dfb7a95e10a0a6a562d978ea34a0bc9473f9f704cede74a7b1df237ed2057419e866d967d3330eaba6cf6be9fdddb90345111865b554c18a6e26acb489274575c61ca5be64c001512f0cf364d03102c8fcf4d3f109fdcac7e7b3dead33226d587cee1b3fc2b2d6a592c8879ebff3a139fef851de2c0a44dee2723428163175dd050bf95de835f82fe6d8dd8c30dd529dc0bd14a13c6ed2718bb0c3a4bd33817c7ad877127e7c910b32c73e614b8a1e614ae53b6a5c76f8a5ca4fe63638e74a5710c92bef1e16128a2f68d0578e432673ea25f00e5faf8b0b1b7e8465f9603d4a8872ee3d8186e6ed3128d70569ab324567019fd25c83bc0e9c3fd5d39609bc9442d74f33cea1d6f37d20c579233957e99bd92df73422fbde9c0bb43302392035c060dcf7174e8465ff32700bdcdbdf9c83cbaf45fe1866e5110c854bd757144d3e40050e9e01d9b992fec9e9ad4191c95f3b24a9a528e67878527edb02a5fb15217e351340a3f9f43f49fcf81cc342d90d1106479d2122af02e61829daab859a1aebdb36f0524ac123bf49ee8c323009aaf569e82835fce81c7c8f27c1dc1a38496f5e96a18115d7d68d827f4f008bb0727913e54503e80c5661f03d6b4f5f3066fbb55f75df17cf8462d32645493e9b6cd28d20eb621456e3b96d2d85846f6d350a66f03647a2827c05b6274241b6bdb4a83a2c8cef18d986fcaf063d76faea565f38ab7d931dbbb816973a0d60a76370d183622b68e5f5728aca0cc198bdd9ffb36abb5399a75d5e297dd4489a2133d6728c9ff11f32444ff05ebfc31f8abce57b8d20c75636a31103ce6d782b508d4e7d347a1f96e92b84ebcde84edf79ee466cf117d9ca9c92096470f72e2cc4da9bcb9f96430057b986dfc4d00d81a7480947a19c9ff532daf2e4d9248c17199a0208a53507a5c9b55652eee0c9efd8e4ce98fd0f8a920c50a5e708bd3efe212a089d39c078969647650d860b982b70d9b08f4d024722ea4623d26d9dfb2c99f3cd90f42b19e55d95f0d2768e05b29df32b28d0a6e03c4cb935d113a916f8c68775aef78485338ae912b3f62c15b638dde5453eba8837c014d095b1a57104a094fad2ebd4d03521cdebc58fc0fd172c11c4fb160a236f92c06c0ec7b320c595daed3ea8a1d92f27f022d3a8b814a6823207e98dd5b1e64b522fbf59f9496da8516178ccecb70f1560f93db55ed03bc8f84164fe5954e9ad8ea8b7e6c6b40539268d6406034b5967b87a18ef2968ac6e1cfbea9cb238893b66232bdce163e781925c0b174b1b63608f1c75d29013ff81ef59418052c8733cb8beea172ba18f7522814cb5b5f6d70303dc6390f450f121ebd4078d7c8e65d397612fed4dbe0060961765672a77b2aeaf24c3354d94c6f8635f3b53fe0d90afae9cbf2962da4718919e26acbcf0028520d70ee6bb759f9c9139c9f866096f820b314e32630c25463e42ee4d412a233c442b42ece083116e307320596c3ed437889d632500ad6965742a430d6542eb38d55c54b4e17025d2d6bc2ab33f2b3815b09e4221ea722e2d8503d293039533772571a300028a2d92bc81d02d6e3b11a28f97de70a7c2d9c4286539197211ce1131d8c2ff4f5e9dafca58c32029bf79858078fda466a831d86c021078695342f6f9a24f05079daf28f1c1311febaf99e71e148f644643f1ceb17ad76f93695caa77546de898844b92708d7abea25356ffa312905b698ef9d488e8c3076d028f869f6a3c258dbd54c924b15be8809e73ea1267fc0c4bf11ab717683e18e9280ee922bbc6195229e044342952975bd2807de66d9710963cfa27ada46ddcf2a8576dca1efc09287095adc8daa103fc3b7dac69afcb5b8f0f9a0f59581ddf4f048116acb1bc59aa5e68387f209106c843d5d84db668048b52ee3478e708d2bd5b538391d9638a1f674d6510052b994fff3c60832ad5daa598de610104ec087345d07dda8b03e982e4ebcdae84d822a1da02f74790b83953338aa9263afc8c0cf3479cbdd0095d72526ea35e3259fb9b6b991882c11a3164fdcf6a5d58e77fa835eca67d8147877849d697348b540fea63453e30884f5cb9513a68236a0d58c5ab64581e9d8e26af8c20a964762ad349741be1e0f575f05e3ad119d79614e33bf1da70ffd9f7ca9dc8237b93cf7e4aa568f5d1215586fec81d4d74251776d41bd4769f092c931071011d5a5d2fa07d740d01114dcc0efd6cb9089fbd224b45d6e3471cf5e8b87915d2fc6df9bdcb5a67824001d2585c5964a2321f0275831b4b7c2fc1a4299d1c780d76bf3d5915071a2ec1f4eb67f2fd23f8244a04e9aeddb51381bfbe85f57d8081ce9ca48084e6c9c8420bd11a9db95eb56bda16c00a6db55e99f373733c8d94bb0b899a9f5163dc26e330ea309bf73ff34f20f2e821ec877ba97fefd1eccb9ca6fa0c9584b5132ff9f33d458dcfabf645650bd010adea0ece8591c913364117462ab88882508098af57878f5a7fea5c6745933b913000a31997d0e98555a509bc1cd6cc492c28dc692070425dabbd6bb936bfa5cdd4488b4247b7e93e1a6d882f7cb77c83886668de1e0256b478bd2d694a4930bcf2335fbb4cf37cb9d201b39e8977c2e642c8f0e1b98eeac1d3b0939a15b5b04908168f26f9bf5a323e8c21f6b29a22e6fed30d359279e1bf487647547e27386abf9597b48bd94db2e73304688db58af1a638dc466d6e04c636bf2eee1a15ed51aa008b875cb93dd3ce14475cfaffa725eb4f43618b40c7df46d5bb14431b9be84e4ae3273b12cf5cf5fe4f2bb604ae1e136f19bed4e4efcc5f75950f69d7ee9bad64a2f7d89e06eb7b37291ab9ed1df4586ba81e75d940a17e21df55c876889da8b5fe450fe5d28a5eeb121e16dde24a1e1d9b4d47b149cfba31d5eae3d42115dd7c017c7762845a90a56d61916ef806f6976b3ea0c78d13d14f8e1e2bdeeffa33a43e9ef01b9d223fc54b5230670a2d2260f66f4977b10ee229d0dc7c18af0deb0450a46169555a5fb79600842e2034d22590affe3c2ef2f9845e5146191548bb1d9bb34f6f377221945ed3786da3431f4ee5f459fe3f8ae03b827382989d96fc8f64770565a41b74b7648e02dbf590d768735b8725a264618a17b199db8506a16f94d0e1c10bccc4aee7a31a88c6d8c770a25bf24da9a25f0c13ec49566ab6e65a38a53130faf5891c809f5b9e477fac1dd11b08a7df053eff6ba84c69dfd022d969cfcd15c9ecfd0b15c910a73834e70fe0bcd679102e3d8227d7d472fe34d5b79899b4356f9bf706ac036f259c44c9d9eb12539b1a45d88f6ea3035037c040c09f6a938da500c4a03c0c4faea5770569e535f58451d5cf4562e014001d5c6d54e30b778db3ae5e409427999050073c3645aab01b360cd2f8adca89a6a25fa3d4c15a769b40351fa86ba8504b8ae43c2af8bf755e3d2949f776abbe08d5cd72da9df092a96efd46ee6d00a3db16b057315632ab82f3b82c0d89dc534457facf8ec9a75f345ac4ed9f6faa9ddb424b00c030d97c582e0baaadb41dcb8bc6edd696fd8d1e5d211c5eefa0f1bafbda15c809bee61bd644e495c8b15fbbf98e9a01c3ab15dd7db0bbcb34718d9025187468ffa095bc06c1e4fa4ec8faa05fa67f6eda8425a7cb4f5d079edad1e7671dbf3d7d584a62c2cf9ee9e45f412da33f0dbdd835d44b43c8f9a0fca7907b8621a4c582cb298271425d67e22e22ed8b415d97cba549f05b0e41ed5ae506ba46ffb6be2e0f98481371c1de0e2735be6c8cd5e73eb7627d4317415296e1c9d0a155ae6fa5b8319ca7a71c1073d5fcd9a6087b9db5ef1bba7e987eabb58ffef63ed5fb6f1cec5dab5eff28c2aa07cfef01ff4b206c86c99db09cc7f50c48c6505f320b0c012a87818ad2598ceae914f84c3ada4730cb58e505ba0998e50d14bd3731fd15f39b19402ed7675cc4cb6b90a3ca14d726886e226bb3cda983a2e9d8f64c2cd9d990f2ab45a0ea3969680a1571a880864513610de7fc755ef1727431df92e314f5c4f2a0703116cc13a875cfcd931661d280d11042b22d99ee09616c227b38efe5fccc212540a2395fc068f6a61ee7d6c5a46c61f76f1811fa083c2c9fe0e1e25cbe6018d07c4fda23ded2830fd80a1af70166d57c72377e3009d203b0d709382951616b3a8c06db93c43db173e1dd8956fdfa9155d2d404a4290a8f8ed88f406af21d540dfc559700e8469a637086a56b062d93ab9400ccdef79f22f3da8f49d26eaac1cadf3e4fe99a2c08b60ab3cda440369a25d143fba61792fda85987331d015b1218f706b03482767a0f9ec823a306a64e103014236a6f0dfb0fedf4d770155ca68ccf8ad45a5584821e4541089f113de9a43c4563277180c8e6a073f410cee666966459bbb54a4a2a00b86680c7ebb36ce29b39984138831cf46f9d9e1b3c69a2ccf67d9b06f288c49a527146bb209fef47ad664906cea69c6ffcd53c935c83b57cf0c8bdb5c8d7645b5300ca33fb3e953b188f82527bcfcb34a91a727552791e358c020e1d674295fc426ee8c3093e956d1ddf72080a84627df2f0ba9eb06f72008bd3adb61f6916e8647c51bff5883bef27eb330b09186f2cd076dd47474930fd284428eda2a1c40d09c9e6a919bbbc1ac55421253878abb4d8032902e0021254f3b91ed067b047e7421fa1441cfbd135938ae26b6c3658b0b44fe5f978360234832c936f5a7aa52817129f517d2ba6e74cd4c3bfc640715b195dc35e83e51f4f47188561313464140da9c71f90a12ba84efe9f722da6d29ea7e9caaefd3d73fae3a9545677d30aaf78b449bf52f08ce3125a3d541fa652222a5bcac64b64576c75548424e84c55e59ae05d3860081889cd07f776167e184bf6cdee34e8593ff56e0d72e218670cbc325f8b21892434917305ed9a5f57876f28d34189d5fab5445527bf1cae6682997e8a30f580b36d863731fd6d7c7563d0b661c0f53c16b167c2df65672d20f0732d7ed2a661dfa5ac6351c0df0b0ce4d468a84594998f3c4e57ac5548aadf59243552d54d86496f1d14446eae55f0f3b072260123f6f4b72313fc8b7ac73cadfdd34efc2df85afaaf5179a0d1d92a49d0741cd6b5e7cc7c3903440d559bb44d7a1a652fc78e40fc07627ccccc75b45d4776fc857288f14c9255e0f3ba4203df2de07dd992f3585b93ec73f20336f6d2cbc195373d1cbc9883e34cf8003d142f941fa9654615c466abd26ea6a159fa7f5f021790b1696e06db4d62645a1e3c4732f822b71a5e1f2b9e93190c62c5adcb6d742b192025bad13a35c85e62a1190c750ca7f9e12303663d05adf4985b0d9884a2194fc3c7853ad6cedad6a2b1e49f59461489e5ee31e413838765c7bf8082e8e55f4d2ac9abc7e11220b1c1509b1500f5a7f22ec646f65f2c6891dd8c09f155d03be63bc09870144ce6fc2bc1d882c7a9d83cf94770f19b1192379e38f42d94e2a1e8e395b5ff26464e11906a26cfd0c7dd3508d1e584027bfe813bae57e763eb5eb36185dba9e1d415b302aae910e88a62cf5142a53d09db15d602e1b686810c1adedba1ea014d6251c871753de05b0b9281b213882e749d4330a1c95feb3f419e47f3e0194e32149614cfc0184ce4a21b03db003e4a07a29fd43f6cdb3c14cf29668e7e4ea584cef8e975f7588ee712042fa4884bd8f268337f71700a21659bf1ea5a39adc95da70f583c5b6d0c94f7096c57bcde22fd0e09f12876a151c7b59f9b3cf4d3b865c02fe48d61901641a602ae8eb6b71bd4d4b985b9365c4cf1dc2760b5e881f2bd5c20d6c1a753e8e4d21f66eaa38f852d9cbfab1a96abafb2ab085685a1e341c19e51dc5b9fec46dce8789b72cea55d12d6acba8e0931fa27c8c2a4899d529aefa421868562c8593012ffb52d614da094d17aa7f8e8118852d25cf1431aa055c1107636e38582ac2c1f8b316ce0e3818335a60b0bf5eb135ed3935a598a6b4c11e9114b0a2a2f16db2c122405203fa3cc099331819fce557ec4387a9070cf68236bc769449ad8453be7484fafbb3c2bcf4767479b11fef0e85d4083f4e4cd338d2c398958532fc75fc942df2587f24a6f699f69ae5a8f4fb0e6a13ad50313c3735ae57cf6dec1aec651a20a6640d78aa2cbc0e23fa0d2ecedad3078bb0cf9de76a7c15b98fa054a9b9e3630f6a480c3b17646d925888fb5dd4acf14211ddbbf6a3179ce7f58c538782c2d4ee662bf322c631e4ccd3b181924124850bb40db4b9d63add55564a9ea52cbce2ced9dae6c1218e78a075f611ad4457b7412e4096a7e1379d80adf5069bedae41f09378e29180713fb06116a0000e53a6d2ba57e5a1439b7466182d7fc56fbe81053b39bf0645577c75d7a9de257188ff7c2454affdf01795a9d8e94069c52f7699468afb0750bf7d46594c14e339013bfd84b0eb2dc89f4c08bca80102d3cc6462ecce015614b89b6b6fa27dc5f7d73520e99853a3cd393ef3fae40e8a6ddd987da8629d291411c88890fb5ca0c189c707b33217c275df361f4fd9bfdda32936962e3f3ce92e290277d2f0029a8a4e52963d67a53274e7f3982493bd5b481f6c91a198ed6b2c688b1ede1c5fb1a284227120b4023cdbce310fd88c4df2e2c5ca4e0eb4175734de7505ded6219f951efa4590bf32412427a1f1f9d031f682f55ece9149d56f1103e31b73f4389882a0d5a71ca367ba49d77bd850e5081bc3f66375432e155fc2c07615998a25455139b9cd451c1518deea9a04262319db952f0517af0acfa0784b2d073dc99c47cf590a52cb6581bd6da1a195a6cf592bf6b6581678e1bfaa99b1b2c529dd4543b859ef2922c6125581fbaaa64202f1c15b85cb41cd96d2ec9914cb70dc2c130d4b69e4d268c545fad2211aa2737a6d92973a2fc993b9efd039dc32b0287c50dcd084b454a5aa13123259c30be97d1a978f35f103ce2d901d4d7dc2badf8e09eb0e21384f72f1ffbe274331f26c85145f64822b15a6149007f809cb95f6e8c35d31e601de5e47baccbb27d84b2af68bfa16744a6fa71e2528fe7224cc33ea93dc5c31371ed3e6bc53adcf7cfa5e711a6bd170680d65ec97ead9ad41e3fbaefc2204adf1378781a1619c5eb338ae5ad709af7d6cd853b70507e579a1f094de54495323e5e4ea5fe076ba332b56b424fb939f31975104abc7ea31fb9e94731f021aa1cc381d13379ca6a9b09b028c590bedff4693b96c32ccbee85d55ce6feb7a97b755e10718ba7de86a81aacf5c083e42a8ce7f98cacbc923141b4aa674d70d6eda2ffb2bcf2ef362b0e1304d25d474754f3a796aa8f60984d20bcba66d10fe62dd52816afe27a958a5a4548fa590e273103aeba50366535824b2ac5ac4671e91762211c230e0b62063e7af401b2a59f46f36aa0e319c5093910a45963fdf97c3924ca7f7f1d85c4f1091bfdcb9b91ea882f54f2e217ac5c0cbfcb6645811cdcf3e1b7da8d4ae3a61469ebd2624bfa4c92760f76252083d2a07b364c3aae79239fc22482ee8065103699600cab0b6d10fe02fc0fa38ec617488bbca198195e0e88071705c9c5a6c17dfc4a6922827d13d643e941a2b8efde3ea21c5d69ccd60eadaef0b7047a9a132a4ff07db253e21eb3b9bd24a15a178bd50fa229ba3889a54258bc78e4bbc4b9fe4a8ad64013a153c44222af075039379ca13910a51be6d3398ab0cf412d4506dea7876278b36b1e112903c2dbc0f0aff404dd61f51cdff7e00ee41f18fb41c92bd5a2b1f256511a4a26aac3de10bfa306a26ff466d4ba2a12224ea675585917c576542c20fed8649cd58ebf96e928a430273281fca8d5ab391aa23bfb2b736e970e0f1d6ca77cb6f3ea6b18dfd2fb8877456b8dad230ae254a0c183a256227b821d3db895689f48c2278e8e76f7d24e658b7c54f7b6932bfb2a1ab1055db07402f9d50fac621d35b59ad7fd0ed28d78f93934f38ca686f1cd08d4dfcc61aee8af3926b27cbc9244d35bcd0078109c909cedca18a8e32ccf6b23e5e9dd18ce5a652f62efcb74d9d3ec4ce9c481d052d27b6b23c990536b135c1b9c3002100f4cc201ac44825a917efe5c0596ce317f32f278c6718986723e79df02962c420f5b0f6f37ebe942c356e3cc884fc98c56e1641d2735d725374b4ee8a5de096af810bd6079012e774539ea1d3da1abe3e75d3e25a38bf619c16bf41ac6640cbfca4f044826c4915e55ce1a6387264487efac084b60879d4ecb9255d9398a6a4add9186e71f9bd1b7a3f8ec8419aebeb3b012de0b0e19cc85e76a432e1d56120623b9dc6114e4785705c4b1bddf7d367a4883d294a8f9aad6c949456327361733e6358bc7387c337eb4f614bdc224c1e956245ad1143c5bd5e313f21d919373af752a60dae89d5344ee9464c5d7e383f1f0acce1a51dc76617c61698e50f93f7af94fb4ccb51693f8bf6789f5e9c4ce77dc4d1b89604096a8c14aab7c7b4583f89d6dd0cbc15d9887f6ee317d42c13aa84ba7113a811bdef9e833d9bd8a1eaf56e54bd3f9c98c3eb33c4cd62cc5b13c7af7e5894f3d55972660754d77862b9050b62458b0ba7ad46676273d4d4ad550a8056d11e853a18c21f30383b83f23c123d7cb36e066a896b58575f4fa564a5de7b3288b9fb668dd34d972e13fd411c3f5d976c518a66aacd34b9b198436d18bfdf6b5231f2d224494bb7368b5101cc6804c10530a57011d35451194047964cd631cc5ccd314998e0eb06aec4d27a671cb1d74339ea800553aba8e31028172581e59223014c131628080e432fd43f9131ebfac230c50dbb1ca7cbaf51ccc3280cfe7700cd611ebf10b90809aeb55ad45657b923b34d04a092a0436e970f17dc1ff54932fe20216a01291cd08055b690eebc4ea9c2efba5b880b1e1a1827afe140acefb8f0787c66cfbafa5cdb4f30f0a05ffa817d6e294e7a981120ac6317ec319517d10664186ca325527b20ee030388d433012eef9aa4e42078495a3571a400be0293067839a81ccc548b34bccfe8d46d865ac5cea8a39ad05180b04446b59cfee2714c151f94ee82500737725cdcc115568abbce03a352005fcc50050e6e474bae4f0b65470a512517936e75123288d6b7622a3f54a1fd42a79eba6b9ef7907116421d6afb8076567a0d75a88fa6d2d383ee9aae7a5a72c253555534622f66d14a5247aa066f0990bd8b13e7928d58fae94d073166ba1d96b0b3092158ab0b3a082cca90c0729dea7009df69a68e052ee9c9116e7d5da0d3833154d4ab004d783f8a9bb425134173ec672ff68350b5283fa0665e88a1b84607f392a9b0395f554aa63b84bfdfd844c6c2ae5bea32186f0b6c1fc19137e9fc075fd5f22df2b65f72212cb4b7301f229b61c59073b6f1fcd7f5425b8eac050c2d052f837dc9a40fd0ab19bed002960dfc0285b4690eb709d71081d6cc2c0aad99ca041ce9c954720be4d389a8f4eab99ed582e145bdfae7149a93f4db5047ddcf8f517c8acbe0e33980931b2d99a1b324f01cefd1f502b9fe2c84e210d042ab7895e8d36c655a958115a21dedbb15b245291c8a4a4633611ca783482ccad3b11248bb2844db57e91637fe9d6fbba28ab93bb183b1fb873e00ecf938da4b1d0a8af0af2ec710592b1f17aa5ea4a7c1f68a8fdbc304f48b4e2731d8b628fc0a47ca7eea0aa80282e9c58b024042ee193f57325255ab8c0d991e61c2340eee876d99bd0d24c46ae885bc008704168c0fe3ca98389f573f06b60c380acc215b394c7a26f6f73cd1a0296b70b589562f0e4a7a694a2962d3007a7dbea5a8bec196a4bf2cdca4ece75fa6b8684a7133ca54ee5eb6c0469c69ec2d328b1e33d97235e75b5160e9ad141cab9af615ea8d745b8e934fe10495e82b935c206850e898002fe8de43ef6bfac991bda288703db826e06d8a4388990db3c83d439321f6fdf347858ae69a9a7a0e03e043a312430c70d72aaf95edc2a8db883fe94d440b4273563dd958a19737742e8a858ffc2c23f42ce2ab255b3a31c5982156c4dcf4cc24cfdb0ea1c9d0a8a9e43ec231704e93464f0432db62f353795afbff18bcbc44131b514ac0ccd01459bfd8edcf351fa926407b31f01a2169e3bd633dd1305f2554be92a590a7801bb0653939f78388fdc304218787b4722307683e12c86264389759c08f255fbd70ec31fbb5a6d314befe51c0e0dff9f26103d81bd95d3c116ddb396f5f3b7b2d890570cc969a04ffc6bccf1b31f383b649f42aea8e16b652ff79e6ef045eb471f83428d39e3ac7c6ab9c3cc67df843a389a91e506e8acebb3a8cf6146b9380e36d5d7169b0cc4cc4cc73b1b769c8f2a0d3d9d3ade3552c6c6632be0972d14ab1643efc4e019ad416f91b3dc9af3fadc39f6b9aa9c0a8294cdc2d7c571f69a674658be29c8b3de4d2dd5c0d6ba98b290f10cb913abb0972a941996430b4d4d22b08c680b9dc9f5849464c71596d98920a2e6164e79ad219baf097aa0a6d232ba92fb2b75440379aa920817bc33b7617f901a2fa5fdfac4cc6dcb5722dab997dbbec80521e847ecea823e2b7b192fc779898caad74d8808532402c175e49a5bf88b87ad5debab7ec1c808dff3f4ecac3d004b04ec1bf2a93617ad853a8e8e023463c5bcc17758cfc4c32bc0eea4a6db8ae937982a1713cdf52fe76aaf9ff3994c0a28bbc133bb7e0aae8c1bf50bac61f008522da61f0ed011a61340ed94de502be2f1882a004ab4caed46f4f2b480274a5972bf98c32783e370ed3c46c95c0e65bd4551660ba21c92030d7668ac92976c62f7350aa9622338add716198c90de502f9ee6c55e9dd4c8b0a6450e6a6b745fb001802df0f05ee81d0b84940072e037b87008fc077075aecd17a07d8632274add07c85458c6c37a43e6ed67f690af8ed6285aa2930286a95aa6a4453dda158cbad02933d086fb71a12fd115332a7f5089521a8c41548c1f752268efed50d8fb5c0d7c16d45263c324b0d89ef0e975931bf7e3bf1d30e8bf58626f15f0e62641f706e84ed9349300416bb8b83c963f57c2ee3c23738c8edbee1bf05f9ea86f1af1950e08f0ee77fa3c9f89903a275afaf531a67e6e13442d7c8530e4e1ea5f0f31a2108aabc91bd5ab4f08f7e5ef9950f7c9af67ed87076a3ef042ab5847ffe9a81fc99817e42403e55d0cfe5677670e635b6e4265878eee14a9f681a964e408a202ab48cf37d2062e5b17c30141639eaae7be26722b5bb33ab9182986861cd396d84a70c90614dd1fbb85d0009242a3edcb1130688da0d5c4e301017a7398c846b5acdb3fe014d87073f96395421888ca4cc48eb4c492cfa23c10b52bcb71e34c01c344a1e9c38216eafa1409d9bd801d89dea372cc8b2403b41dd83b55010097460343825a6037530c42bdc3a4690555ae4966a4bd59453adf2c04ac75bf5827220dd007f2a57442c02ab30af58af58fc678ee8ba2a004130b036f91317ff74b48375fb45cef9dbbde7f0cc4a94e7a286686ac362865339881cb8e1de2548cb2f3183e2fd25705a485a4fc65b76bac388d90e85a1dec1da209a8c92cb6e6b221cd16408a9b676309f9c6212afd311970e07580c64c8500da00850fba2dc9ba284bcd7782a7b8de4adb947e9a375a639ac10439d321a73c14439f932832e18fc65f7dd43097816d5ba6ab03ad66703c18ca7e35ebaa1423c2635dc91cb98135d66640e7bf6aebed95fd0824e3f74b3b58003993ff9701d9cc769b0fc1624530bb8d690b5d7f87802597c07a9abeb8723c8160bfa0f7ecc6a986b882b36a4da59b9a4ada36f5110b08842478872292132d96f6be8de25e5ee6188a90c828f07bb6e632c0208905ec3b10df5b0e8264404c522a9799df238be641e2a94d8991ab38e1160d176ccb0b9f838a915c861721741f99948beaccc8aa0984e651c99b73395dadba0f1f200118bc991a8d34c4d5ab300b9cc3d7e0a963541f1081b916b5103731b5c491c964b4164468b320dd0250dbf9d160b5b86f4c394c94cf2d2633a45749f8de8aaeacb2e935312b78cf885e8fe23f6d2bc8ef361b3f4e708229f61938a72c775042c3a32df6501577fecb55cf2104549b2e78e54da43ba09b778b55d2f2b7ff3fe767d5ec43a268a40198b2b7abbe81859f2b1dcdd06c40bc64721752c8919ba5de4fbc82173bbdb794593da91f4acbeb261f19918570114d1081e8152ac8104f13e8c32def22293b7de7a7118c6271ac98a15592a44970e9ed45d371922add54a14400dc1caac0c03e7216726b88ae0791b9da7adccea88c1882bce957e084145a68a328dbbddbfa3033adfdf93866ff55e105f83a708fc18fc078f3b78f1d05f7cf024ff9cdc0c9ec80681fc52131108396ce547d6dc3b173cde88a323590d5ef0b61d325090d3373738c1abbe52243e44d479876dd65edc9c825620bb0de4fa1ce6590f091e07bab778337804c2a5e122db38bf54fff03a5af0ea5110098788107c94578bc21bc2071bea33ef905cffd9d5da00faf8b5184fb313d47a89191574b041fe73a3f70d5efdb720cef119bce392938e99fd24ad1f672e0825101bce2c1457436e26e183c2894fb0aac0310994b6487b32668a3e1dd88a94a740e82f6e873043bf845184471bf143a00e8146f323caea43d0f46cdddebc10f928b9c75875f6515bf682a01805712c3bc46072392ae0e2c3103f04340d8a763146f83721a72152ef84fabb590a595a4024d49f351283ea6719d547a88b96796c4ed2523e99f3b9c34ddd1fcc1f422ee1a7a5278098a336bde7be95688f5da66c643fed9e94aa6c1c3a79004c49ec157c99ce7ee5696b994f592eeaa3b2ef7e9f1035fea226752cd59eaffaae6391861fc004b8c57fb09a7f7ab6504fec35d1c51074f6aa67f8c03c39c28493f028e127c783336df8c041b235904806e75ff35614085d013bf800be1ac90b863b6ee52f0315f69ce3c0ab563ed5ad853f1061ca988506384fec4b16e88c769c21e20ad20599302a64933bf920bfc7e858bb0b793fb3c34d58877bd1418783b1e444ff68613e09e8c4cebc4dd8d994f17b0bce869f091a7eef1c828c443f393550fdd189fb6c6ce2db9a7163b38a3c62dfe5e7a9eca812bfb113f735c98a8d7637d8edaec70fe8876611769f563b76e61a037b6ef396125c39d7de43a7f6984e4ad670a5ac5d0dd456dcdb40507d6827637fcb511d208c20d209d1f6228fef13d6719d4b4819428cc05120fd5ab507e8ca7e128d953800a1ed26ba00fe0f610678655377b6db8d07845fac7468bbc7ddca0d8b95533374146ed8628d762f5076b7d10fdbf7ecc6490be704fc5f47931fd76247211c3ea2f12a433bf14b386c00533cbacc58d77475f9a49e068a3d82299b063f98e24ba46d12e6c7b9a3313bb2a157bb796aa7ebc03c608321a9953df11c26932cda003b52f11129e40b74297edfdb91147a12bb6cf0235f2f9255b3301fa0e84e69682bf549852e9771953ee1f7005667dcf80a4311cf89272972be7a9bbd8b56b843a290847825952c22fe0edefef94e76fe49e680311634415bf9029c049d3af93b47c1edc04e265d03d8dc216b1feed08c593008ff058a618cabc23d5e58f61c23ef6962131cacab488d57b85d0fbac745eb864ae16686786409a808fb4fd12a5acf25dc1e0e3dc468211a94235081f2ccacd1f1c42ef56b8dd00646c6bba0ec17d946a33359643ddbad52eba5f28258a19b2105861a0694da25a43bad3fdb6f31e648cbe6244bd14121d03f0a0d43bbf59ff023d6818b8e0303ce96b43ea23537a2229044c8d8002608d019a9aef92b4a736f21226f2a1b5ee1585ea3e303e73a7a3ae20c2482dd8b5592c4bd51e7b091f080abc4d92df704ae9ffb0e4698480ae04ec1f63a28942a1e4f90d16556392d9b99add7faaf8a887de13343182c824042eb08a4924545b017a6f535b7d97c618590b1c4953807494808ae8cc3dc8b10dddc91c23b131d4b8426e023d628fe5c313fb9775e96718aac2e6e53de80e5d3b8db84e62c8f7c232fbbc00853de455bd5477445605b87f2b3af85351d24123c7f503bdf56513965e395ce4802e55733e9d5486762408bd45d57227e5fa9e44173f46a0bc8ed8c451938b291971a51b6479bf0787c3db93f0f284f2347cd153a3da3721b14d3460b98a9f09e63d554a067740cc04f041833625e994c0db80aa7416cbd30e25fe35ce147054195db6bf1a85d3eb3019bcdf9237ee905c00821f29d69ef1ef18c6fcb9fdcc178f512c748fc2ce515c987d9478c2666830dbc5ee7d06275fb6e218d0aa6cef6e44cbce4c7c8758dc4a21e03681ff42aa14c8cbb3ee0e623bb3e2cad8dae46e07311a84145a5f28cff83dc88f13969a1a1150d72a0ecfaaa0b7d2dddfe9b04ebbd693b38a0df656eb503646997a6b2eadab9e588526a25cb0bb45f156e0c6141de5e6ed40bb613e55374858146c3b852cb3dc001cc1b19a4514d457bf5463a8562165751e6e3b5ae724ce006debda07d48bb6e88a009d042b7d148d738565243b134a755a19991925dcbd2b8e1344d9f729c5ad6e1fcc030116a45204af312336c43ed4f475b22d78bd7f9d172ef0ba89d72e3dd4437e447b9040ed3c6bb58cc03a28fbf665369d3ec8d95660093f317734fa9441102146f6b5f9664ab042f037e841db3b7fa3e8325dfc2be7c02ff53ae5045bbb96e570f8082ac7ce3dc8e002741c0c0b42195a6e068bf816c4fbeb5815592ca4760d82f73035d121b9564ae214ba80380211045413f9ac53f50c7235d40bfc21790c578bff0cf14a58188976679de36162c2081dbe7c5b7b1407149f55963b6b1f86bc21ebbc3dfcc4e619a848d25bc93e0b11b0934e31b5410328334c0b95655c3220c7d319eaa909ef479553d78c5555f5ab070c5928534688774e31bb3dfa60eddccae14fc4f4d4fb12a1eb9c181f8af164e31de2a92825de9033f699bb335ce6f35efabb5a36a367bf5125ea2a3bd068da283148769499789490c59e9155b5c9255a61b19f022f85ebaaf276912b921a1d0b2186964b63b5ee8c89655e5d97db5af6a0d777c7e02cc4ab039dad252f09bcd641a84671d32216b9c235d1c679f3a14eef228181beabc99f35ef3cb9315ea8337f9637d2b3e99f51f92959f77509b41e0741362956cc4807c334a9d326e63f9635cbc6e03c156ccd94ebe2624a4a8efdc71c135080ee5dfb2e47db2cab6b9147206438ace4d775c9e9ebad568b413e2e8632e482ce5b20e03fd21e1e78d17f022f9d78606915435fd7fa59db565b64f862b5a51f959d9863bce1371bf5967978827d196ba48cae37c5c2bf8683481cd1002f7409b21103448b0719f48ab8ebe250dfc05d22b37b5a9e2e480bd6f5919c95d9f8254c54f31ebfb56f254edf15cfc4ca214151b77413389523c6c94bfd11c4dc801eb7df4bd8101f262ac1e09227d37627c64a7bade2386b9c7f8031714abd0993cd4903a046a0fd026d80e7cf7a7f4e0b7dae8fee7b1b62b87015725dfbee4b4c988a0137bd075356555863bfc444941e7bbfc45efef2a5bc2e50cc33c2038e4cf3129567971f88bf798b2cc5d32847e883983fbee46565f784e92d6be3508163d2951c08b460301833340b2ea1ca1a2b41056b285f735318ae00cde2f64158fd6725e5f8705fffb7e4b733756654d97d83b43a1ab414cd1b224b49906fa703ddc9bfb0eb85293e7e19abdbd8791d1cd42388fc87bbbad8b4f627b0a4f7d34ad9ceee26152c30b5e52a7052f554fefab8b346a0ced6ac5e2c29c8f268096503f7ba102d997819cb5e3b1517dad50a5af1ad0bba7c06f45faf023e610a9b524c0b24e9298f109805665ef18191286210f8ad8a0af65980ec619c160e2d784597f211819aca8a24207dfc8bf500736e04dcad829ecbfeb8d196ed9baeefe9dbe1d12151f0fc391d3300863252c02163ef2c79b87a09f5462a6a6a07d1879777d5c42148bffd1fdd3f38f5b38412ba013fbbfdde0a15c06f4b1fef7867a8e2b304d62ee614f63f12912130201a1eb411680d9f0efc0190d7856b9d7ea9fee1f6be7fed7f46c3f75bffdc4ba1bbce26ad63c334283a73ab2fb683b867308453d644b3b0945554576c7e67006a556ee24fc528e7b10a9fdab4d7fa8c79edf131ab5725f1bc52e9593ebb786eed4726cf9758096b0206971c3358ca575689747478ec60a4f19f637353bd3bac7dff4ab5f1cad256465a07367cdd59893f9d40db01d9cc113e0eab1d11fe5b8657e7976b9a7339d6d70f3f43367f1685e924fc07d4f1adcf8e94901f7b0a7f0f1bfbf9a3d0ebdc484688d4ce48dcb64fd809786e9d46a417d9082922ad1359854e7484c96adc421499504c3292968799e6070f7f5a441fdff93069acf797272a4f79a2c01fef29313a528df254e41be4f32b0fffac90613d129225c70cf91d42b22b51397b261f4c0bfb153ebe77868ef1ac46ed320eea9f370b56ea0e4cff5c935ccf084024a9f07629abf90bcfcc13888c568e4b44b1b355f788e0ac47e6e1c303fc924d6b80f3afc0d6160fb7c92c175f7a545fad04ccaf43f9385218623b946e2e2476edc92f5ab64828d15f62eee944fe02846e7ca736161b0ed88ed5718d824a0d21b644845822632cad8fdd8442339cbbac34cbf2305d4c81dbd69faa1a836de5aa2e6ad92c253c650dd30100383d3c411de7c942295580b2d141ef55d353956576a7d4ba355572ec584870fd031e26fc11205f08ea78120bea1be427d8c023fbc09b05875d4841a7e51c9fc7cfd44d4ae46743720f90919a4b3aa3a5522618c3622e266d3ffc3a32b10c43efb75386cd80485579d8b8220b307e534f26fefcdac5f088d4991174abb04fcc1792dabf84f8fb850a89f1c9108b76af6730e1c707aa81525a48e944121ecc304e6c0555f4202748f63b53e0d23e6bc10a16bd0f510202b105ffb26f7c58672568ae3140f6ad284593c5078d6370585762e04cea5e14dd8f626d557847a66875b3172b8fbf5f2677608f9888bdf641a452ef6f200bc335a9f7d5473241e0931a0dadaf8cba7676fbca7d7ee118c5b70eea550532dc4f5e24cdbd6984bd746ed46e09902322f040ec53fb82af45c50750435049a6f1b1197e3176c1fb3d0715b86013a152cb9daa391de9b1cce2d16bf70e9bb608b775ac4dcb92a16bf88b8809c4d75af3e3963a98a5f14f48356825d1adba1f8b3db53660fd75e3a621b17763fa2b538fb0b276d1934208ed4a3770b8535c6af89b95cb73aac5631cc241bc38b86480778bc38386404b5f937becbbf3b06c8ea82293380ed3b60bdc4bfbf505fc3dd6688a86cf2d44807556c6c710728c06c80aebe093712512719efc73f8c9a2807cc105ce1398616ea602d03b0ef7552fe177fc79d549225b1bff018c0c232e14823d3e10d165e6cd069f3443ae68e41280b28d89ed2587fb32fa777a9a2ed9d372f1360f0a0fd0d57c3fe24364022ca72512e7341ae42f2e261bcc797715f41dbc14cdd613cc77d64d01935263b185e4bd761d89dc1d9a8655b73faa05665d6d9ab7699e3cc7b0f34b5341e57c8e2dc7fe757d4facae580ba7f51860097ed331a7ea5bc5e560ca346d1b90bf4226a6d9af7969ad5095cb8e4b783184254e35b80ed183e6cfe82c4078daa1fd0e24014141971be0a20841bdfefb4087bfe689632e3c013797f7b6c622dd6fb3edfd8131c17598fdfbb3ce1e43ac22c34c68697c2e27efac030e8420581086a64de8444b2d68d6edbf8d5b3b527b5f6b57feac1913c1dd9250e1f3afb47dbcd3686c518a05b82707b90d0b76d1a0bd11ea217a6b53cce24da630fa57a8486e70e1d14955d9807f1ced737ef109815ab6792cc95a1ebc6c79af42be16e070a28af3381331d6ba16d7da216b68fa2a34b280cc88a066b3d067a428e86e331917397676b048ecd3d96b85bd2233f58da898ebb96979553d2377940aa9d5ed4c6ac6817a865a0fdbaa492973fb14371c577cc033d6d864f73503c8d2012f4b55f4fcfc442d3a7e4a515f940a285e6d25ba3693283043b264785f753f920a46babe9b9a87e8b9edc0da689c71619346b7c728eca6a928d8ab1a87af5d7a7d2afe591d94964a83ab85f92bcf6f6cb74d18a2c900b7e383a31bf156989e3f27376aa9f9e501a5ee04e7bad96d3ee867682478b0c98b43fd5b1681d98016ce3d7deca285f7d9f3245cd506f97bd381e769f283ecf7a39fc4fb6dbd5bad859304efa0e79ce9b26095e2344463fb71c17394ffadd04fa2af574ea186b09d372ea504f5d659371c85db340c078aa0829d04673a89500f243c178ce17572c7a7c7da02dc141e831c6436c8c9a46dfb9c023780e7a11b3fef8bf033a91959eaa5d876c2cd4f71dc30460dae6ab4eda531fce11def92a66aaa79fc8837c2876c8b6af15eee032f40907e2231486f08a446b0f0c9e04c3a6f96707ebcb80275588edc405090db40874e672408e326987b3e68cb34637f69d0b1ec58a5b2738949e66eb2b6d15edcc7d910d8b8aafc66d1b2e22d9f97e8e30783a6db933f301de91f1b39239a82c96763ff2f75a8a7d6aa32f9689ffad3f002dbab388a242f361df1b0a1b4e936315f2503a95d14c287c5ef8fd076650ecb8116beec48cd2e01a39f539d81b79fc5493d9bd4306025b725cba5c10706887434dffcafcd1232e178c0c79383eee7a3fd8bc5f35a357aeebbe11a4b9c4e3d370bc1ed5b907080512760247ecb3ce019e629e07d8df4a651b2c461d470d5993ec3ea4d86a3ddfcccb9e8687b972447f11b9be30e4a565c55a1e6729de099645e54bcef03c1c55d89c28cae580095840daee7e0268a22edbce0e694a9840913bd82a6d07b632e20280bba31e9e5858b5c57c8aead10b67a02f549cbaad8198709a901832ad2740329476f543c0e52241c7bd82e60d0d8bd4588cf7460a254fa5976f4a4ccd1c4c5d6e7a26e9cf96df61952795a8207b25dc867448af0a7da24d63c59401a5a037359c1f65ffc38be7cb98ec8721f1c2b153b051f4f52e8c76a9d24cc46e97307d7cb60bd017161cdd32c99644c90f9318895692373b0e51fd908fe713bab0739b97219138bdc70b0275fc0a41e167dbcb7da5e24a90305bde39627c19e8713aa47bb639697eaae3d23ab0f5af67c66cbccbacf8c7eb203c15c599f53227dcd52e7a9facc7f9a9868ea32ffcb76a55339d4c93aea530cbc94502cd297af39af02f15ae935d0085aaeeceb698f861e70429d95720ab3e21aa0c379bf1c17599df65d421023ad1246eaa06957b97670e572ba428590d73843856149ee67da51d22b497ef575517ecab41dddec73d7955a22da8609ec800d492c6434b48cfc9d564e87ab17ad4a5921c49258d4ddfd065979893d07e0f14ff98538d75de22645021bab3459c1997a040f3734e358399b158b7af618aaeba82ff5b1d2883c48c1defe2f942278ecbfe18a2bfb399f1b2bc987543011ed8ef355042599a2cf992a03c758443aea28b92cf6ccfda6a52621d5c7cbefda5db3c4b380dcedfd98357676f36f4bb5cc94ccfd545b204991ec165b5d19882db795277bd0813d1b8fa0d6f29456913e8ee74e93382a43531ac434bc2a8339015287ec6eace45c9b0c9f6c215b691787cf2f712654aec895f85d1dd2d1417b55b14c45ae9e6767e9c7d443ddf5577e4013b3c8b8e1c270ac6e561aeb70fa4ead6ef2da328c8011b5146fae4850d0e77edde8217481eafe53e7b9400809426ab95d45db5e6c7023a35ab15bcb9c37a92e2780b69e9abb57bbcdacdc0f69b36e71eeda3ca55898ab1ee06ce42030463bde0bbd59a6764019e35e9fdf8a9941862808da1e282b2d61a5c6aaffcb8f1270d9c4ad30de21ae3fb24f47feeaf05d16a693aeea0eb6bba14ec19994baef932b90e78403716788267c11fa83643552b204c320e8cf00b17a70b5b5604d3d608086a8467fbf9c417ac6e70b3240fc67e29ac2ce26d22c0dd1db95e337f38a9f883531b80d3f409f7a38937a87cc6ba03de6ef78308d927a39973d9e54a53095b59d20ed36b239d31211b166b09fddeb21e4a70908d712bd90e007ead201b033d8c7a32ba79e012eedf7eb1a553f8f8806c9e07f0ca66f974cdbb6dd8c48d465d039284fc8f3310d7ea7de37e2638bf663358e24d088e6e1ee03083f7c7fdc9dc1121dce0d5a29e98a3c1744e678914fcd58a40441a55e6b33d5da113ffc2ba48e5c4f33337a364d674544ec8db4d7f82f27e0e3a87aff31ba91c834067da1dc86cf755ab8b8c4419409474e29921842d6f961334e32f0decbf18e46c12dd752830366ab992dd75a0da48b296e5304792644d2bc4176700bff73182654198e82e65fb1da73e9d908b731f76f93b8a830e5891e9ce56c12e763a8cb38f0f8fdf0d10ad6c55400cee98174f7e443d31ac9bd578cc36ce7df454667372a23831ceffe8da4b57610b088398cce9892a86a877bdb9d26adb0a05ea5545c698a825f605f18392a6ad8319ec3b7e481a29a924f2a64361b90e64ddad1c37d57a9ee2e90e79e0641a8ef7efd2275542750a4a3140893438404ae3667f18d3f987a82185f3a8cb20eb6ab890504edd3a08ea3f20597d1c204bf375a37e5b2cad304c700608a01ac4ea2fd9a871a32e54b9966494f306a6fb245fe9aba7f94628479664121cdbae96fcf1a3cf9e6e717e1224c3904537037b3266f4da153f8c7aab805ac275148d5502cd4c7f75e84884a1031430a2d8d9a4a2a9058cba97f79a9072313244d1e089383b61e58cc840c7bde5123e8ae9a5caa0e0ccc5da956805b690117a005ad2e3aa262fa6634235ca01728b71315bacc9c153cdba70b11ec6257aa6a464df88758057b80b7a3f68d0e2c36d5bc1b1f7422341fe484eb939d5384eb25a41b810aac860b8705d4f3918a82cde4395bb1a8fab8431b98de1172fb81bea3424c2a1819ec797b5d45c6717e19ec8d7a410cbca8701f9357fb164f089c958b50f6e188495e1a3561e779334caf020be16df09f0c6cb6a01732deb000a0ea98daf051ae9b44edf0511e898daa58292b9b876a17bf7e229d6ad7440714b3550230a9ab375269e1d6499d1f509f7ab2615bbffd269f2d9ed7287192dfa2be3393ba2a7d199b38dfd87d939d3e9fd5ddba35b708fd937a110350368dd1c8f93a7e70e1938e280e4c8efe34321a2fb1c2f1047beb612b1ea91bcfe57f65ed70dff1c8a235ff215f371398bd5021cfd0b442f1cf9fdfe57742770f3fcc53fdbe86bf0ae4831d3c3f30426a6bd8c4ce6e7210aa09c1189c00239c77beebf1a55e9e541509278433cb6ad45c0c1400c7f39053e81ae986dddbeb41d9a5d6904318b239115ba68a5cbf85af17ed39e9657ba30930612b7e0fa322038eb02a38154ba8856bc407e704086c75989922af64c50c252a2448d91019237646b0fc8cb783cb12ceda08668db6c17cb2909bb72e1d17000355c8ded159ffa183842c649239f8dee72de3367d3033f865c72bfbae59c9260b6d6dc3a9b219d973ddd1ba4697b40d3d9cec488f60212f8aed90a7108d5aeddd5fe7aceef36189f063689751238b46423c78e96c07f6cadb081829e2b31626d7d28da495ebed7b5be8cccacba7ccdc2583dfb6483313bc8819c3637ed00c6313c1504b506f138775f290f7fd83ad6f721b476e74adbd18caf3a33a2ec65f54cd757620959bccd1ae9a67789dd67de6365f317340229cbdb5168cc33516847c84a4c073e046659903c5aae01e55ac9cb40f39755316881a98d5ef8f1c3e19bd92107f6f75e318f51d29d2b33c2c21fb2fb12fb97da4dd5ca91d16dcc516d52db415bec01c031f9ae46aeb5c38c90beb957c3e23a1af2592aeb0f6f8eda83b1947b066da651ee7277e76b318a3ac8060e99c2e08a5f38195f01d28044eebe5cfdc5b1e6f2be09b82985e3aa40b522697a0f163dfb939510f56240edb91daf761900c199989dadc34b16751c32a651e0c3f25ef005f19db1964e8fc461648c5cf5013b994fda749755c4b59da5708ebc76f5a93f5836a6ae26fd576432178ceaa6d34f72334d12dc741ec0e29b045a5a151aeab4243f577a8afb9b488addf82d49065ffc16632b6d4d5faa2e16e3acdffcca5badd3ae38b46231768eb64e6b9b78df5bead854a779a62f509464b26af2271b4b79c6cc8d76c5b99b9696b8c0cb55303e61e9c9e862e9e861e19c297904c2f4bca19ac314e72bb94d4491ad4d0416cbf2c9862373115ad3eeac3a8874cc802dc20c093b47e4735a5fd91744ba28f24979044ff2d1c000dc980a10977c345952664c14a3a45a913626a50eca093014928af88408f95291e0735ee992a2a50a33214d8ec6f8c42b49bb467a8d1d5b98c6de64dd94bc7af31cb79848815185a6b43d028e70967c7e8f74ba729d1cafc3648ff8ed0097bef1c6e29e146d3e5062f58f807997a45833c15faed8dad628c0309e17ea661b5b1f14fefa34b464d4d219085021e39c88c7280d4cdeeff873655bd29e08facd08b664ce0b874689b25766e65de50d55b1463b25c467e6082038437831fc9ac279f3fefc208e21af234c51049a5fc3a459409815b5c59900ad5edcc94c000b46dcd8b0ed90ba2f34a4de314891d15604e7e61766a8461e6130d88c3cc046f206db0dfcd775af8451d938335a1ea2b7ff18d3ce5a7a0b145b36249f1a45df5ab35e6a12e9956e12d9bd03740b8309bf093f4aa18b2ea244b60b4d215bfa1cf40ba2183fcb40d99571c6b8ba3a1c5353ecc2dd37a7699a6837598a5ea73a9d4db3ebd87575d5717735c5faca692a43a6fa4632b1e7e1112c2f18bae8a28b249a70c10517748b2db6d0420b2d867035a6d393ea291b5c8de9f3a489546bd0cf9348d494451659fcc28efb512346a151830c050a1422a6794be15044e648baa2b0c0020bb8e46644c5680519c84006a92422c9b81f258bc3a1ba7da92a59da66ba4caf3eeb4b56972a6d33515d23bd1ae95d71c515524a2313754a69283d2bacb0c2046318c3187a108318c410b9e819128630842116814a863c79f2043ea17c000318c0a0bff0852f78c00b5ef0c207bad0852ec44c70069c11aba8a28a98890b5ce0020bddc216b61033f5804311f9533b71e22436c9a9648c452ef7a374ee47a9eaa94b95d68216b4503541a58c1bb8dc0f12c5fd20511a4e9a4435bc96052d0b5a16e410f1883db50e73cfc3f938e4421629279c8ff0a379e14831b1414e824062ba6a5cbf8ee5cb7c2266472f628fff9c11f41a45fe288862a7170e90aea06fd799d15e33613890e676889ef2920ae82a1aa44ba2a73c4507095da46ba6cb759d99eb7abc2a46a5776919e8d973ce1886dd06dcd875f6d57ddfd73510e802759feca04f762dbbcccc5d86fdeab02b891d656695de8c784e6b51238fea66b8266b103122b9e1864829f609d9d207ea44964ac8247cd8f30a2822cf472513a6869e0993264d9c38d999f3869dcd038c3b3f001189d8330b36209c5179e2b5a9a4924a2aa9a492523db7ce8c9109f747dc0b58805753f3801b381421850ee9c1ebb01104ce800f0267c429a70b943109d702596eb86488132ce68445967080094d0b76c3251ca0c2864b3880c48687625f1b2ee180133b9e023f3cf10318f657f70f4d2cf9c10a3f30d1508bcf865668424568c328acd889bfa232e42f66d7d0d3e9f453c3e972634e7aa77232431fe5635e204c016c9889afc93c6c72e8814367b6981899f81b35732688cecca74b94b95123e58cc293bde1920d80607f752f21d264c90636406db864033b3b2406249b0611af054ccf5d907cade34a9a96753c220f400fbacecc954040981e908261537a1f740c9b5e74850cc3430a23760ef2e59b9e838dd5c1d8409e6edd3a0f283d88b16114508cd83d264ca4828a020b241b46410628fb65c328b0e0b99fbab8b51b64bd61146458b2efbc483136479a8e8ff567e91c7436d659af68bc68606c4b531535e5c84d8024991e6eaa242e894ca214b189135bf2c0d0194a062492c8972949cf1179447c62ea4446c8f2a5d2503b7baac0684fdac775ab311330310150e4e95f74e27a5462d2f88a3db8146b5d90dce925f0298f7c69d9340143c89207ffba7e5d25e40b35427a949a2a3539f1848a3967a211384a363d9018040d36cda11c8d902f93d6410e51518804a709797a117a6a9d4ed4d24ca4473fe9b824425152b58e1ab0c8d429066b80db4775eb54c8ae3e262d23ed7de4c806580d2798236932cab2a14e4db56aebd33475361c0d96c3c60e77ede0cea1e23696adaa5455299e2b7a369d369d66283e7d0f253840988060478a239b3ef2c02766b029f7966fc8c32607f932514bdc18c0085b50b2f1a71b89233dea0109a2d5a952134c029440cad14b24b030432faf6862d3cb23f245b4e925134536bd44129fd0d3575a07e3053e4862e6565caf05dccb0bff76918ae8e4c2a16dac13b081fc491e2a5ee28ef478264c0f8944e442c2e448177aeae48b4fb60b7a48af5e36e4b640dc627b7006bdd60da008144d92182006f9933c39e6b91cdae5351d443444bbd4413e3a88003c302324c6c08a2766b4c32b877c108e3a9cd1cee5101d4291c20a5e9811229d2069428319ed211d44c835a2450dae30a3e925ea413ac8d4420f5538321344c8e742e01434a022c9cc472f319de2e4488fde7640a447b91147cabb3eefaa69905e0fe94dc75030a2cf9638a1a7ba18e9d16b3ae4cba439996d83e4a1973df472087a7904fd8d09533361ae128808493c812d14cb8e88c9233d4d06f9fb865d90b823bd9823bd1873e40b8c7f9c734a215c08f7dcb6f917381891a73e02a3b0b92d642a1e41028b2c959048c8233edca87690b73b2c5192568fdbd94c17fc184ccbd9dcb0ea5d79a4efab6531b113aca18233e8b9294e91d26f12a6002dde88061a3236d0d7544a2f834d2b58837c059b5c9d292b1e54d6a9e7a8f554fd0ed42d3a239d1146931e9ed8d6879e6da95bdfb1a37ad55cac9a9bb656e8f198e81c7934c4c8d870434d49870dc63baeb5c36a9b99cabb919eec01e406cc919e9cc196ff3c0803619c01ac0136f184920a0417b6c8d46badae66c2596b4c4cfc7489dc74395dc7d7f125b3c3bcdee162fa8a9a42f478a367a16fa1f746f434d0c7d0d3902f71861eda6e877b3b5fbf437636dd0ef315490cb16c8fd7649061a43fc8f09229923f4ae361929d29618c31c618638c31ca0891e1e10da51a2e64f90f26b90a648ae4ef9f719aa00955a7ef505966cd8c30a01e6f05303266e46948b2e563aa989197f98d1b4ab0f240c5b697cf4b7a40625bdd81ea3b76505aa60916b093095b1b2ed91902268f768449be180a6329c80d12260047e8e091430f9c1c203072463e46e6049f3052621b0b01218450b6f8e3e7e963a45d4df72b32bc14b0c5553364d2947e7c9c37d0520d4cd2e3850bbf80085f40990993eb968f24632e64285345be610318f215583214254c10821168c1490f0d3c88604915582005098c9891d3124dc0555555d51495128e505544c8f506991b4b7680a8b67bde865144d9c29e820a25967082214a56800509341ebaf8c10648a0d0b383122801082f100188269e30a1440986dc2bcc00891e443063021ebc70e11e7e1061253c68816330dd207363c9ce0a96ec0081e7490b90e8f9210744f890851636c0420a56d0c51088f0012192b0c40f6210841494119e1c5142832344d427b210c3177090848b2aa8408980e207113821840cba8081089ac89e90bf4d062e682288fd6489278c20045620019c134208e1670322ca60c5135e2005322c61a4044918030bae5042112f10c206195dc872cb1993a015420863e0830d218410420a6b2ca233a3e421de0da3a801175b3ede5a1b5e6a556851a836ac1b7ec6c359d9804ef1d5dcf0d4f50038850e8050c2094518810a5998b95955d559a9a94a586bad9166d85c010867d6b4515e7051cb533b90af0da38862c46d41c61b4611a5677f786262a9200acffe300e792da18c310eb1b44c546cb50cd8246fb8421360b83c59b0375081840966052748b86e98a289798dea0d56d8ee172c4a21a10c4eb4547984fdecc08a7554758c4de20424b6fcec897f51861688e61149a468a264438bdb900944e8420910420823c5497cc049e58c2b3cc82db065ce69043acd9a1af902e113b6ac81108030d4298da11446f83345a6184e53ac28ef899a3c273a273ae18f86bd0500c26c35c01ae6270c0e7000d89e7a650739be06ce90c7760dac01d68c462325354a942899b01aa8a406d6002b24b7d22921845006e1813bc9a98bd0a354035b4e74d218372065cbebb6bfc93fc60da6688192163c010b3698911f411858851e76b0832268b0850966268c13c60320c182bccc9488e12ee1896a6767a747e6511746ecdac51539e72136316871b19446c4b065dd524e139d499848ccf984100bb4d0c2164cec796f0b267b7ec4050dbad0c2893da794930545f6bc0d73ce394dd187fc616fee38a712661644d8736641863d4b3a78d84c220ca10a26a4a0051a448189993925b1a70af6bc0d96132c588103546c61831f66a614f9f33c2849b694cf50b8d852da800623a078c20b40a08509a6d042024a94f890c4129c180245055000514131448b11287a50412184171d226ef0822b5ca1882c6890c40621842b768648d104042f368cc28a156c6cc328ac08820ba32984e8ccd29352decc2f7f589e4552bfd3cd684fed492f5e46ce39b75c3f85b8a7a8e7475fe9a49a7eba7c747fcf6dab555f20ef8fa3dcf4b8bb3d7538c019f0b4cba25615f58aa2625c903fbc6bad5e5f2b7d01ba6f463b248f08f774dbd7df2ee38eb2ddc791ac53f6571764d358a76e6988693abb1dfcd5511fa5bf203b47daee0bb26b3dd555b7ba1a70ca7e690cc3275940f63db69bfaaffea85b1c16bebacfb2f2c241fdd3d9d7c6f2255f7bbea537ec19c6bf8e49da73ca559eb10d24ba8eb55fd23fb734f99f67ed178da5619ae3afdc3ee52ad9b767299be648a1e38734477a683bfe767c1591ca4157b1ae8b0ee39ae648a26b17792bff9ce5d8e7d83f8f913de5d995dd7af66be5d7579ea23912e82a4fb9ca2d8d8cc7b88ccfca8ae6485ff9e731589e61fc66cf0e23744e73342faef2179a23fdc561809e7290e648073d85058bae9de5daf12d4df7cf3bcdd1fc2bbfe668649ce532344713e3301e4363182c9aa3e1fee2dc0bdd223dbb9da3091df410487bd2b3f85af6acb3f46c680638b2a42a5f689e612765f9c2d16016be764b02dd82feb9d77e3547631dd3e0ab1c5fe51ae92bf907dd9e05f48fe6489f87fe79281fbbe898e648cfb787f285235dcf7e698e7481f0555434474ab9e8291ce929b73447bad6459a235d74fbcb178ee6c3d1685fb946ba76ac39d28ae668b68bbe698e46e5295749d121e9d98bf4263dfb503ea6399aeba05f1aa4399acfb57fb4a659a4679f3547931d3fd31c0df6ebd8a5b1e668f4a5671b5037758b066f0abe521ff491f4a1f98e71ca885a08ac55a9c9422b6175ab7b2ba527bd83fa64d9aba5bd5597f2276dbd7aac3b425da27a6a795b35b6acebd8b574e997e5aea63ff804bc75cb5dfb69d9c327f4c759ba64edb3b6c77e559ab3fa3ac6e157b7cf307cfbeed21cd625eeea129cf0d60e6af5c7555dfa2e51ad73855069ab50efedb5f6d61dd9b5cada813d57ba94694d9730cdf319ec59d3d0026930e506699d28cf67288ed240a36a996143960d27ded510e621e503ea9c49299d73ce8df2a6496a1f93ce99bb7aa6a68a4a205b6a1f94ae144da58d7c4e7d3e4d139d9134b5917ca88d68a731c2f319eda36366767c6f6bfafbd56515c41d6751b03a7552a5e19cf310b66cf8496368a001ad5349355703fb7512fea51072d6396b4e93b39a23d1e7bdfd889bd25c0deaf3248a4427292464ea5cd2e2c09c30704e09339c919d62af62e00c3803c21970c6740867c019f310ced8e00c0805fa9cb9a5c6808c8daa2a6f9a2aaa4e90c2530cc8d8d4a7aa19a0b32b06e86c1ac3009d4de91869816f1d5e6caa2f3df901224ffdfd03449654a422c0619de6fd71135e666a92a5a135bab4c6d2245beba7696f1dda5ccd594daaf675ba871b67579f9a5210e258ba8a9a8313d2c32770824db0951352523d756e9a8755cbd4dc467af038d283a32df52b3ddaa71f7d8f68ae61c081e99ea759ce29a745518a0a4d7839e12545391ac891381c3bc8c61cd555759d7134f330529a549dbe3a7d8416d61fcba94bd2453547338d759c758e4e5493ae267196defac7594dda58e8b1a5271dd278cb4992ee2f796ebabd30c96a282bae1b4baa7345ca05375e35beba6d7c757fdc94ffd4bae2ac0dda5fcfd2248ad24f93aa1e9faf26d97a6ff1218ce670ec0d645b5893aed570c218ae6a12a58d64a7da88f698bd6df938b511ec9536922f7f1f35faea8ba927e15fafb759eb8b9ea3388aa355358aa9eee9ef9986d265deaa64a549d631a6a174e1eaa7571c75aebe7ac7554de2284dfab671d0cfc357a48944f585509d2b2923dc8dfaf3ab0af50db83979683be8dd80db0275ebc0b27fe86c39bb8f9bdf76de909bfa06dc796f1bc21a6316a8cfea95d4d9ce56cd4de728f94a69128ef4ac7393b6af2a8da3be3a3cf5719325558da371a427274dc2915ec5138babc491d88cd85f0c62c76b43e275c826d9c913289afb5c3e7450048162a6b163a561c7cf50a29f1eba7c7c966559167fb5eefec650b752a25edd4e7471d6a5ac5cebeead6bbbec440f7529bfd6b5a3de82aefd622c2f9543196959d082f9524b5fbce0542e35b73dfbbde82b1db7694e4597b2a7fcda6a6fadaae8b7a220ac249410c2940942092584304bf9943dd4dd6bd6c769874c761cb2e1ef8f28ea3e4ed371c84ee9e02f45af8bba30cc82544c7412896e579a4e1d775feca126a59de6ec183661a150e836e00e5d6783bafc4fa7759fcdd640c75af64fa7b3b59bb3ce3ad65d5fccb566743421944cd9c28d4ca292f84444129b884954283b8f3d71089c9113afc9996c4aaa7dad396fdbef791c7c7d2461bfced9c0ee2f7b2f7bedfd755d7bed456472f7dc75abb94be373973aa62afc8b2baaa28e31555115a62a8e746fcfd9b8568fa457af6559d5aa44e64dccae11a368ae1e3ed931890dbf9b986d2346d9963a57377cb239ce46159954bf9512f8d2133d314ae48915149c980447aa4e9db351e991937da9eed2a5a9e174798cb229c9d3e94bf3f213d544a6863a46c70aa1121be242f9d2c2c12fc4c158addb5bda6acd55e7eab95aaba43e8f5bf6366978966db76c782ae13d1d2b4e2bf0bc3d7c7cfdf4ea91c3e156acb3c15d672bcdc973f3b0529a9b9793b764335dec2b0a7e07fefd0eecd7e1298e3adeb272952e6172d21f4795f02dd96cbce1678df4aaf428961e9c5052aa63e584030cc3b069a79df6f36ce973d00555b8aaaa6845cbd26162c7df0f8529ea33699446d5aed2345e0bb060b6d1eaafb4e363ee3efa493977cc697aada06a4dbface9f7b391170e4cd36b596b2f23b32cbb0db8b3ef1b8bfb3aed3e1bec14c67436c5d6af6575d36d57358d7464098163ad342cf2082e8936c62a628c31661598a1fa54299d6d610a53bfa88a459588fe86a85a4df71ec34018ce37df7b3bea58671d771fded3ef87c60be3df7b5dcfb29a75d8e115b34e6747eca27e3b4bd30acb90e58f48263079a7a870a4a74953e3e048efc30314e0cd74901c0e97fb512a5d6d6375a96a1b1b4a49ed0a162ae511b70231db077cfc512346a93171248ad2a329fe4622d6737df6527d16a38611b93a4f513bf6d2e7583b76229fe349bd860d7a759052d989d805703854cfbec33efffe7a2974d0afbe423a53d74b9f5f8dc847df4c9f511b538fea89d85b8f97bdf5d15ad6199c1886318df57df78a62fae92636d9f337932752491d31f16c22448800e0490849cf67c867c8670805825aab0f1f1f3e3e7c7af8f4f0e9a18734713f4893c691de44a21a47e348efc3c387870f0fb4097c8d0823fc85d5b113b1cfaa632fd967875d8cb2e105f345c4ca115ed7fd7522da8f1a3a9bbe868d798d2e8a9d487df6782d80c3813af61df5d92d0bf48fa531487f68ce5ad644340dafb36f83ead168ebccdfd951af4ea4de3e562f45d19e5fca8e693a13c974d679ba5c5373d61f00678610b9b42672ad579f9dcfce6767f234c174a4a45010254a94254398ec79fa9b95ae55d5ed3e9d7ded555dd5a782f003b30c76f7f10ad0d69af3b6fd4076224fecc17ebdd638b9486cfe4773d6f1ad665dcf168771d8bc5e3fb139a7273d0fc884a93b3c3dd8ebbf38c4132756d6785893acf54ae2aedb571c18942d6fbc4dba1a6a4f7a24204a3684b2e1a5d6448d2bebbe203b7bb148b5029dcaa02c1ecb9faebad665fd4dba317959fcca5ab8a23e47e49efce9c9d61159beee4f4f9ef3f0d393bf39758eecc9f2308bd3082e8cd917c7541c73ce39a7e62e4dc231fb3a77550ef78d7dcd39e79c532525665b7bdd7bddebbad7bdee7555ba9b98adf294ee2626e510420821a792a22d10a3e08e23a51c9fb391a247f52b31348b2ec1d0d79f2e51b62d571c8305c68acefef04dccd57d3776fd3c77df8d9d7feb8461b98a0c1515d155aea2f23c617e15fc9bd27d3776ca6ff7c5ecfbd97d37b68accb5e91c895164c8b88cf95f3a3d7baa74daf1c4134f3cf1c437f69cfffc76f9a22ed4d1203dfc773230be5e3cc6897087f118e3a5178fa14bdc61c0788c977e193134916b1d1b63185f89a1594e04c68d8dbf729d0dc3a2e19cfa5fc11a04d2f4376376863587f5f4ead6a95fd8477513331a79de5feb94524af90141ae9fff8020cb4f7d13b32bad43487e80b0d4758c599a74696cb38b5520db5eb6d2aecbe6745f869dca997baa7c9011458370c6947b567835c08270868cbc37676e8af241153115414dd5c51ac21973b296ad744f58da2aac65adb555765f3dfeec7c606db91ad7f1499786d75abf56866121787dea791a7c6b6dd56e3b8cc6d246429f3438f450beaeaeba5677ce2ce895b540556502135457f6cf49a0e74bbbf56ae5b30f083ba7bd668d04a5675fafe64897c491ac9e735ef9d6cfb593f23389fdbaf5e9b42e63cd5de7b0cf0ce32ecdd5c0bf27614d82d2b33457c3b2b81ab5d27da550ef258e7a6dc4281bb37ebb8fcb0e77cdbeaf179c73ce9961fad6b4d65aacabfe583e2bdd37da357b03a9a4c888f142d3df686be730c6f6ba412714babc447401988c84dcf1735771e85fdd1e7af102a492222306037442312e83542fd221e94da12c23c700a9a46ca28e6503a9a4c0787199b9d2bdd01fcbe5b76eb4b9ee66b4a9c3e83e960f4b77330275df688354b66f93acd9b7da6aabadb6da6addd6fb2b25a75bb049baae69d8e195e5a53759dfebc4ea65e90f735d015e90b5e3cc6c9ae604bad6dd486ffafd277c61d9eddf41e962aff214eca2af7c83481c40aaaf9a8695bf38c97a7de5ce75a30f6f3bd21fde57e58a6e75577f3531d29bbe7534a437c5c0e0d0b65749d1f6226db3adf6d2dfb7bdadfaabdeb6a31dbaa40eea6e46f8e379bf9d76da69e7f56a63a79d76da7becd964b2277c6274b539adb596460d72c65dd6eb397c2d0bc428b5d63969d420cf7f23bdc524e210f8d6a63ac94fe28e35caa494525acf3a1a35c898e6eead6ae9ef6664551b16885162cf864d6a7cb049ec69b2630f8d1a64f86fc4c96e8a0b634fb597382e3f23cf0ed143d675b885409187f85697441a4e0b77ba04d210ea4fdeb242a0ec9bc873f51779f6758c3ff573769f1028362c6be73f3abbc72e167976d659969e28ebd6927bfaa86e22cfa6aa17567d3e66555dfa64ebfab2d7833a0e9fe32e5de2b02e71d87278ce1b58ff62ead207ab9ac3afa00e4e97f9e9e07481d3650eb165cf86b776806649f60cd1b3e71025d047479ee9023f5dd20291a735e5a77509752a0ec7e757cddd0764dfac491f7de95b5d6928336bf775df9cc7163467f701d9b37eac39b511d02b486bf61fec57f7d1756bdd373557ad4fa79ecdaedeea6adcf393dcd3079533f74704f913419efacbc1bab8e1567fd56bdeb2aee3cfdb6d67782f0deb26bd39f5b4afd7d66d67682b5769124d966b1266d8d7ef250e7af90b2184905e6290ba6a5057f7713b5e5ce57097387ab84b1b3bee30c618535d7a71955fc7eee58eed2b9f81c27e5f502fae9909279c704298a24bdb572e7f41a0155028a4cdecf4c241b34fcb86425be832d27aada67dd5e9ec696f75da431d4853e9e57b950ece685987755f69df5fb8b46f66e8be19f63ca5f7d347fc27e76f66d893fd34eb3f1ec8945edecce0633ae583eaa0f4a8f76f5bceaffa13824c2f670841a6a68fcc3898be6fcbc6bcbcc5312f6f6126cdcb09bbef56f7e54c1890b1afd7db8e9a733240a75a105babfbacd59fcdce99b68d7cea361b8b42a07bcbea3e9b6d6587d65a7b7fbd7658541f026175fbe84c7fdaf7a7fb341cf9d485f8b397b1dd67b3ed6f59f21ece4ff862800edcb65a73261c958feaf1d74eba6decb4d37a9d77de79a79d76da396fc09de79c5073d486e1d74b7398a3eeb5af96352d880422d95fa673a65d1dde0642d99828d96264a0e6aafc3129e7e428ee563d7fe8588b6443fb41241b36b91a506d1de6a41d6104a594a39de9af6667f1baacc1528a44979137e0ee485a0ded9fcbc878810eaf14f9d5ec4b3bbd0c3d9ca04f4709ed867de92f3b7c4a57b1f4e80bf082fc41191ad2f5202a29f54f47437ab253399557764dd3d5a531d5375bf9d5553a285dacfe6a76f5aa76a311485255b8906757a7ba2b7f219c2edf0e4f76fc8440d992277e42a0ec7848fdabf0da01a7cb2704caae6eb58ca4f44de4e1894e2ebc594c8cb7ebe36900fdbab1edaf94d9f255e7488cf2f9803ef2a07c2299d68187978d985a73deb6dff3ece1f4da8d240dd2a31a407d84af9dc8f50c5f7b095f2b5dcf7476eda5ec5aa68980f4a76353ff503213c96e6cea1845498923fed3d9f2325248d5a992eae1528eab96abd7fa8eebf8f0b4e2901d7b29b3a54bdbd84c971ae9d5486f662183978d0fdfe01f3a95c6808cdddde07d0f29c7009d5d358771adae6680cef661edeb2dfc726e70cebec145dce9aaf151080fab4f5685efa73925c51ae2681ce9557959359cdf941d90d35ad46b6759dd57b7554f75daf3a9db0e3bdc403eae941dbb3a4c5f5da2b0edbe9c69751f90fb4be30e4e98ac84b3ad6740aab50303b22fac73e6edbe9cb94d18516854123df4e22c079de59f95ab7c457bce99cc8d09c3e5083de521d1b51c9828e7783e0caec4f21767c9df3457fac6726e85bbca394cfb4af7ec5d69e5a2afd4c078caff140dfa8b8334d0b183aec1b876187fc1a95cc784d19fa7fc030386e64a87f194eb3fd4953acde590f1ed32349723c6b9c7d05ce99d4a69bbca8be7958bfe8b9e6f7304e0290f80e672b41cc65b34970300ff01a0b91cfaddb5deba6b2e470c7d63bad8910c9763bbca37155d335d6cbe4873393c1dd066bad40903ba7650699b305cc9e6f860bf882bd91c2a4fc92e7aa6b91cd8738e7ceef9dc4525118cd06d8ed2b7d03f5f29d992769076956b57c9e738cd955e7ce52fb812f717d75c694573a5afdca6682e87e8302e2a65cd9540cf073d1f86e672b07ce52c9acbf1427bd3c57e458fa68bfda6b91c39b4528e3a5dec453a46733940cf39b6e99203d332d365ca4de74a0d087833d892233795970deaf7f7be52bf01734b188d508350955a5da530108aca979c89838fd620944569ceaca89b33f3ce96cf3b1049e846ba85655913a5424c336e309d7a418740b3ce1eed0c67dc8042273775e3c8971bc8a4c7445d287630c4a6afdd0d641277b0e5e30e262442a090c2ea15df57f9f251af60c8b0de9899feeaadd1be073022c75a73c30d3c43f28552d30709238c60d75a29247495de976bdc998e3491a1215359bf371ba9a327c8ab06bd4e51cf324ec81f8d4dc306e94d12855ead140ebaadad9f35ce7a7a91e4ced617b0cfa93bc219f5f5ea20b7b5f1eab82d6fbacce9d365d2902ff5869a1b6ec0253a78c850b69e7637dbae557fd56965c397694898b86343130a0574e7a37b5297d4e9740c656751e5a9fb74367564cf3022c76a0be52a7be4cb4d842279a69e20fcb02b28bba238120c029d28a63b3de410ceaeecafad8e439bd210f4e8ed76b3ab29445187f6198afc611cc22e1cc2d995bdccbc1d841e8ebcab5b1a64ba6539cbd6e2cd205f6eb64d65023401064ed826186cf90906a1d068eab9c7d7d50d59a2b22e27cb473d7d3cf50fbfaa3a476e7b7a8fad5774b3c8971c59e11c59ebed2b8d322d397dd0043bfcc5264a614551145551af54656d47aa309ebc9d5130f9d37484763aa4cb7c9ebfdad208c022c767dd69cda64ead8fae111edd5b94d294c6c8971c6a44d5bcb3b393436d4af5577daa34479272a2e2ced4a4fa70610ba4b34e1c163ece9fd3b57e6598cd9e2ed2f7a42b354d539d26ea22693a2b4553f5d4830b5bbe4721325cf20124dbbe1ab204652fa38f78ebb53a758bc6665c43d60c7dba0e32f60f9df8ca92a2e648716767eeb8e37f84bd24d95bcf6cf6f481f51e46928ffeac9931842edf5453f5d1da3a4cbb5e6c692c5f72269833599423d11d5a73969307e28efe6e5a2cfbd8cd106b153b52c52b9b6a9b7e76d3d326eca8e691c88724a9508fc0f4554ce740690e54e4694d60a2708ca12d9469a03b46bedcb490589a080315372d94ce226c791f5463e9cd0f4ab1e7a70e22b9d22ae1c2163a2b95da47257d752279d0855a235bf784e5cbaca827a89cafab656ab36d7599997510bad08efa84e3dbd64d6d8ca121bdf9181a60f890bfbce7265f482b49b2c0445571a449c496f751694cb19cbaa0507a72d28f76a28f3af2548f3d3b609ce829cfa64448be7c31057bd640852a8570a10796143962479d3337949e012ef460002e9c3073864e1b524759e3c29bc94f9fd7478edc125eca43a87590db07945e13ee0c0564cbc7cbc6d4c1192a5fa4f69133e53f35152275a4fc713979b87d4c1f39734fcd494d8a5a87b97d481961288e3b40a8040c2c217264432248763c8510d61989145942c408196112384d7a34856982507fd43335a9494dda1dea4d7a303405f8899a26cd91a653a7360a9ef2403f41ba299c2df465a2f3cba329e4394d10ae606b82768be1cecfa9453c3b1b705b2046d1b08b1d0b17fb3392e192215dd85fa8d2b0e1e5355843dcf238c31a4244789ee7793a3ccff3f4f7d13c1d1b87bc5c6bce3a74789ee77973ce7944c7b6bc6de9987362d3f37e6be1b6fd76eba9409efcceb9f500993070d63471529f3ca6d69caf830c281b2af17e90b76ddbb6ad478fad47edb1f5d837dbd6636721514d8fad8728d4e3dab66dbb712989d910c9b66d37a437b7fd79706edb76437a780856aba4678411a128b2b560ce38dbba3bb6abe0cbdab40a4e11696b612cebaeeec3d997d563cf8becfc70acecb6bb44225d4138e70daad329b9ad139c60de79532e9a295d1569eee2f0bde8f375c79c9fd3b2a6e62cceda9172d1e1af2da56838ef1139140a4d2288b8d30ac3755df5bab25f979dc4815dbbc7371b434ceb63986992257f5dd5775da19b9d5d3a6e421be3fcddeca91ddf5c212a7413dad7752f0c0a6daabaae6b1e3a01937ca4b9faec1a4bad57b5216f7b988763ee0de1eb107f37a14a63873cbc04ceb08e7dc0d9d9e121ca0c08ce284109ee219c0167c019f31b9c41d5433803ce6062abadd9eb2b6c33f064dba98784f5650f3bad3f2d034ff6cda4afebf75a1f5c6f555b75f71f0be769ead976a2a69e6dfd4e3c5311f9729d67df0c38d9d533f064cfa967cf2f034f76f56a2a22bd09e4ea7a39ddea6ea61e1cd4a7bfc0c1883cd15dd9e35f95d5a40c57f7c39a9bceddf9ec5ae7a63af5c7ddf93abd7ece796bd23753cfa60ebfec8875c4b67f3135091ffbd433f56c6ebafd357de2ee6a6eb2b37acd8e6c6b92b224367c131bde3a626747369c7a36a956436c786ad2c1a28504c9fd45cdbe9ce7fd399756360da74bf519ed9a7d89b6a973441d8572deb6dff36a2e76abbbbe4d9849254554b3e7b4b407c238a4bf39daa0d1c71ac59e3a443ea2decbc7ecb4d34e3bedfc087bb6bc15bb7178de3947b1a70e918fb88e9bf0783628f989cd68da5a77ac7c3bac9ea75f5ad1508fa60bb4992ef0b167bac809b4442884a3d650e8e626a4838c9bd0c697b3e67a73b36f4259e86663d02784590bfad48c61fad3423b6737a150d57113fa6eacc5f4576f6acd3914ca6a6857af35671a76ce3bef9c33f45a73be73cedf100d2792d4510b0b94a15a73aeb5864234b64763c37b9bc686c7b8082288e70b2fbdb46715bbb8fb70bebab3e6304dd2f0854331cecea1d7ef957176962dc6d9795f0c5f46e2e0db65cfb81a115591fec84c0bcbfb43efbd40b8cba1bbaa4890bfb84349402bbaa991acbfd9b579cdebf33c39fb0bb337e3ec65f5c75d7be9fc71579346d29b98cea1235bf1e46c9597acf2595e2232c61877b2bb6ecd0a4e4c5b41765583ec1c59d90aeb6fde6fde66b7ba7cacfbe4c5b7ca5d8edc59d6d5fd1941feee0832baebe530665dbf87f3d927866575fedae35b8d6968d539a7fee694349ac3bf136b127e25ad26d95fb7a4cf633b2bc6bb5eb12aa1029c13b2a28b34ce3c68db5b9648a4bf1cabcb1eaaaa1cfd55c73e2bbec1bbaa6a55c91bbcab0af2577d207fb1c7fef3816ce90f36514196affbf381fc8d3e1fc8757e3e90e7ab7f3e90e561f54adfe03c05015b8c318639333bbe99c6f073b1ad15c8ce4013ffe65b7bb5915008fbd4896f27b765ab4a08212a20324582218668c2852d2d2d2d2d2d3c78b4f0e0d1826b0b8f7d7f43a294dc048f161e39671e2a2a1aca969696a96553d59cd3499da1e5467a2dafd00a5967686969b9919efc482d0423abc5c271ad96fa43e776f75647dd6ad9f872ce39218450d69b16ad85c7c6588a28d4b2eb7960a25086d58372d6dfa7655f50f77db453372db565df2bab964e133cb6d5526b3e0febf2be629d755679ecf959eba5b1d6372d372d5a9121908b9baa8449138d4d3bedb4d3cecfd9b25b76f538848b1beaf68612264d9ca0b1e50c50fea665eb20a30b1b3ef144179ed8b00bf013433d58c14b29458b4add1764571605aa21edb5cb522efa8e14d10e9be91202815650a4c80a8a14295224cbe90a177a1b5f5eceffe5edab5eebd865760de7c3ad635f9e8e9d3529d39ac6bf2084f0baf142d9d25a77bb4fc7bebfa17f2d7b6218ec82d2c35ebb4fc7aec7dde76d8c7fe94fc785bbfb6d4e55a4bfed3a8c6c97911feb1975adcbb4b73fdeb6f6ab7b029db2aff8ea6a68db02a98ca8844d76c4490b952211000000002315002028140c0a8542a178401204c1670714800d909648784c9c49b3244b29660c318610020000000040606444c220001b5c135d757ee5815b26179040b1ebf596873413523d3134768937451e6cb22eb8dcc726d10237a6a2943bf9a69b80ce3e181f2474eaf54ab392897fa6c6348128186dfddf950a13ed90cf044d6972014140268641d4373b34866516667b02bf7dd7076d29cb875793ff02144fd5d78dee6e44e1218180bcfc61ac3eac35a96816b29780847077d000dabee2215c73bf13cb0803d683be3651d6df1d7fd5df17d896de6b17473be0811ae338a0e647d97a4faaf58725015442788f3ab376d1fa7cda72d1d64e8f3d361ce9cb4c9f0fe45e694825d02681f0459181891bd0f2dd26b806c913179ab6e497d035e559e9c07636ab41e30f8a964838df8198fd59bfcc57d5b2cc43cd31d854b4f83511899b6fbd32752395f982c54321526388ff6d6c837ea757e38738181c3232e51b2145847836dcc12eeab0a67b3bf74a381787f7a5217f2726fa965e5288c6aead11002e80b14a4058490a03e09477251d0cfb0aca9850e1384266f6ddfb8dda7f5951751285918b2efa94628b65c1c94b1c3d6752d03daa6e46c5a4440d81671536526d45e0303a15b8b9324305c7974ea87925a4af3ab0660a0ab7ee91e332423f93013656d626a1f38de54ac9820a4cf6be57e4902a3f70c3b4009a4022ea831b76e3d459e8207d96b681c395faaa4bf136cdf11f87bceb72092de4c194694ea410dcf9c067ea6e15716e53047169e63baed21486254ac5ba5e097afe4d9b6de44485d12a85b31a8e4d4d7f9260cd91a4effb0f7e2b0c308be50424a5f95b01e1142f5898001b3d81ecf699f00193201f0acb8f40a82ca0259a2cd2bc52a89fabb20acee6346c0d42d93ef79213300cbc4e83f88e1389390fbeaad46c3ecc28ce5d50b960a31989b186c59fddad6989d515a2b10728cd564c49957413fb87ebcfe52fdc323fff6f3574650d1bd1881333004b34c69ef388a8e55a36ea698313f09b276f8fac9d168931559d8e03792bfdd3ec1f104a8b0a14cb1ee73820aa4c9b2915108e6ecbc31b00e6fc05adc72adb383a0e94e135f434b0b90fe7e7f1256b22d4ecbfb1940eb9e04576f002a1440c4d5804e6694f773809bda48361060e1a7b6e9a32358840f2794bd5bb3dc54c803039c29cf9cba93634fd724032336c35377edb0c805426d43756900673f7a6d1029c5d95a0424847fd37eed330118b93e90c9ea83544be04a70e20d1cf3b14adf893b5b40212a7d9a672d659352d979e5a105a74969eb81cd456107f9ec5af103eb27dd2d1c584cba1dc0318fd2b7768b470b49adb4943e3203337aa0c41def22d6cee32a0dd052002b167472aab1fa4740c615d2c2c0eb660612171161618ef790a6572d511ecf4c1810525a46697a2e812dbfb68f9170e4b9752736d41af8a9bbf80df194e061d85103079eaab53066e5cf58706fdad8a00681a73d891453d7c0a3726cc64a691205553248ecb8a48095e815c4297a7b890a8919dc6d3d49042084fd37f3ee511db1cec8119e1ec72ce78a7168307c744459098c4631f9764a99d2165744c3901268ec5408df68f215e6fb8f7dc7613bca0460e9b03d1413a33b5e690d5de06165ebf00a3c5e292c1f27e6067fbd5be0bc9ed647c39316d812b9c84b2a2a2eb47a3dab99423c1c7d944f69f17fe07200f676142e875a19d10e454e71232e61066afdfe32ff84218d324e36073edc32242a796ad369e34f15263ffc9942bdfbd1303a73ec5e880d0644bcbe180856c318d06b5b4d4ece4ee126f70641fee338049def2dcddcbf141b528a0be89345c805380b02f5e6fb7b3f06cd7d395d297e08df0408a614d0fd45fbead7323cc9933bc5c31334c6496d58789c1bb3398d6236a2e47323ef6659e039db518e70bbe8399c2a019dbce5aca28b74ac953d9ec5f62f12eb16f50f863197188e6882c0b4288401297a44f78dd85a631adcb42c50f3e31c54514618a37b8f16369a17552a7be09ecd08cb29affa5b51908f29a2608dc862ad5a71a0258a4353325107e62683e712434f8bd662b122665f3833206faa14828b24f18dac9a678838398e7ed122c06ae1a9df0ff9a08ca901ffbeb664140598d8cc964f32335a92e16d8a25e8698d079485495f200a757c50d742c156497950932a5fc091b6ea7655b9e88b7b72af44df393d50901e39a68fbb520dc141b68f637e98c7e7b1bb4272ed891880d7aea723a8cf0c5e7975ba2664710538b201c63a40f4ed8189a11f31204bb3068dc0891dc425518acf23a5e619c5e93c5815ff885eb5349f3a255abf6302678131d9e5c749074013c98ac0329a724a55f576af0802e01b6bafe83a1f511d1b039feda23eafec181b63363ac0b07358a946565b2e80336a453c9a5e70da542f3f3c7ac896c92c5727751e7433f6a30e46e612656e13f978ece5113d30426cf0a78c581d85fb2d623aaef38cad9d147f471268da26071a9747ee4157ccae0ee9e0e18064fa3e976198430d6d1ee547b4a68e1e95de88013acd33bdfb04b5b379e82e057642ce88b400a1f04c8505c383b1c12519300106b5dc2c3b03d89b7ede7b543c29dc29896ff4957e063310023a9adff57b2f42e792b261b5219b1d032478b07f41f94a76a4662b3855a22be3285b32b2a2bf4cb69ab32fc1b41676e5b7948d64f2f5a3ac13b48e9a52a59f813f6d50dd089051478572ca981f2ba072d4beeae2eb9d98849905525dee6ef4bb648c9bd6d9fa28908fe662c0418984cf1b665151387a3e6fb17e43d300b3a00ed1698d9063bb97d64f69ab9621de93f3bd796a4aeed8a8a67dcb1bf36236b14470dc8d53c3829ba004473aa3ab4bf7732ee4f6a9be4192ed406db7d43672cb088a7115c8ffd82ecaa83dc8f126f828629144d80a0b9017ab0472c6a5825b9201c416e17627023d410b96ea2d7bc16faad4581154697dc215b9b51db15c0909b7e5657291125db4ff8b61e81b785dd3db2caa9767cb0cd5cc5d3305d65ea17e5389a8758b2936b47956fc3b1f0de28b5bfa57560a0c10fe288c7affac6a8cc416a02149935a6cc3ac21a835c5dfb00d9ab11e01062d21badc5c1209793a3de76b1515427f2033d15c9224d01ebb062c0256dc572be34f8aa098a95b844fa17081ea0f5d343c5fa6284bf493345b859b7ff0c12bb0d705d8d74f60dccefd7e4d9e78c2eb222754062133ad3bfca3fa0734d3c5be2ced7c7235b4ca449b49ee7a916c23d00524d10fd02aef452258e17210c08e71c7acb069f8d4a3812ad2583ac0a138eecb5f301608304f3a4b097e4e24741178c31448156517ae45b48738e3c49f580e9631b2e324d6b46c676447ff5108c2c8f066db1f68daa69f3d94d6207077793d1ca2350aefb7231bf833f2cda369e1361a4f1171c23833c808358f00c458496628dbbb33a38e88766991dfbc886970bdd89d4030f3ae01a78969f6acbd25a825b6401075f98f800a1b6e8f39df91605abee2597a61fd75e77dad267e2104362c5034e9291e12a427868d7926921c7d6c56d22a65fb5f3fefc81907c052481c7b23de7d32f708ed0f3734d23b6b09b3d9b1a90c3b810a2c5cf518a2a1fddf03656cbf6dde77348dcf37500d6ebfa816c559260d2184daf5dc8eb35a8601edddd652223c45217f3d5c1837c767ca4d581d96bd0f96c14919eb95be0131f0d5b0462c66ddc6d92fb2d875f8f6cd8624dc621aeaaee4211b95d48642861c0962d095a9e7df340b2f970835cda272144ad1ff1bfba8d5a243e610e88fdf92d827d64033c2db3157b311cc4e4939cbdc4ac84aa465da988d1a67f0f982cac00e07ce0fc0e932fc7290c003d9bc9a945457788793e13c5cdff98da231f09243dfc2fe0c17c4859841e18109ada9b0287f0fe8c781ef2f0c54bcc1048a85b3d5b716b32ffc66bbede748e90190252279ad28bacb8a8508ae78c55884bb67132554658464cbbeea39b85b3f0520eafd4ee4c8be6acc1b43ed5a4856a7fd4bdb4138d631b8fe70d1797ba58bc715aacd26c1fcf2f73024e9309acf43102596897b73aa57977e2d0ac82006a4e3a046a9c85af6f1d0e6a41cb49e548160ad457ccf3a193c2dc958487c0f7e9774be60f3aacdad9f3692f9bddff7993f5ccb59a2c5a109df70883725a82ed38892f7a1a9aaa09eae9930f32f30bd4f0f0dac519cbe7cc86b00ddaf474ce0ef332ee1ce5636bc85f3efe0c7e6b3b0060b130625f6bac4f2cb6e46708709c85858f9ef121a2cfbc012f7a7e913617bb92fe712626aec6688008cf177df495a6eee6ac5340359e7907bd7c3d75485cccb7c3c254e848c2f191df8aa2071daec9d80f1d1174c881f115729fd2b0c165c578a730e2e8503bcea1e2816f6814d208e25901fdda606f58acb54f743de267807d15b0de66e87402f5686c4ae763626bc0f7af9451d68310f39e079dca7e68853f9d6baa1d9e0fef77f7ae278b6c93f0338a791e03c311c8e5784b819573501a0d1517a01eb0047e8659d6eff75c30d3dae5d7bd74c3d39c5f399ac19f14d8fb035a3bd517e02fabcd8e4c9baf4a0fd0895d167eec5d2e9cc474b3ad4c9dfc53e7e1e7f9410841b6797dcd3ae25fe98114d861330079e9a0958dbece0006043fd7c37df22697adff128aa989d82bfbe75028ba549da82f63756441d2a4f0731f38e04c447b6e202c7f5b57095de53e1849750e4628a916a4787b764fc27f3ffbab8f550cda4657d913bc22baff595ab9c3cfb9b1fec7f8e47fc751ffa144fc9974ff2aae9a906100b41a833dca5d0edaed16125bf09272ab524c107bc484acd091c7254c50aef5f529e9d33f8c2d0ecccf556700fdc5c4f6fbb77a9f472d81a5eeb6f88d7d5da97fd31862bcf517f875e98f639cc0e94cc678953ee31eefb9cfe7dc03655492d488db80ff8a963b3805954e7e4ce43c216420cdfa08e3dd56989132e977c898ffad4838dd675778463ba2b651c10e5b40e4f7f9059410f32909dd25d5ec8de4d3a3e51bdcf07d5ed94324c8326a42803754e5e15c4eb34258e5ce048aad1096183b1c088006afab8334f902c3db0d1675f2251043e4b576cf05aa56e4e34971fbf38498e203ead88a5fc688c392937df98174b89b8a8f257f15a2e28f518557f1ad80fadd5128295a88235d59c5372ad1cf582c2fb5e253802da00136c3acd71592c2f8188a9fde8b2ef97ee265adcb10291b403a0ec769c98d762babdde6bab4c47fd88c4acb843bc81a1de801e489c4ef1f925b14f157b2e1a930345ae2be5a1af11fd5f23a5ac891e76c4260a0c8027c41fc7e732ebcf2785d4b83d910a328d0234f982ee2ee6da7b901f7b481a441a229ee047d61cd844aec43ed09af9b10be10439f005ded09970d020557d306b1a2d20d0abae62b7982a64997a72f21b5a9069f1f451e7cbbc89762e0c534296c5048899b966692a3afff2923c5018d4325b6624b118f9410d7372864446f619d2358f594958441afd15c8c5d586d3328e0f87c9446100ab94e18cb2b26fa7f7ea7275828a7251e47a21fa07179c33dc0e314cd9326a2b05efe020f7d591cbb13cc06893328ffe959bfe6dfe584c00a237fe0fd0274976ffe5b6d73346b593014589aa984901fb0ea933a5b828330fee2f127c17944aa442058a8d3abc2f46e8683952b29ae0f8168ba2a8f015349e05204d3bbf252492643718e29453036877f9e0bdd43f32b7b47a65f038243f4244f90fc5a69231b7d8f10063f732d4c13acde23fc50a249761aaf7d949e9204dedc6994948222bfc9b49685baefbb893d420980b1130a2a79e74d168f20803f37c0996094916200299b20931efebe9d8b13914c5e724f1f82493b64f35d03a6c4fb80284ff8072ade70914a53ed910ea797e8aaf11bb0c4a62b013bac394bfb6942f8297b9b8c7c123d542a6499ad7d3d42f094aa4e883529cdc6a8e993d2beb30bf4188380f7086d3cb87f81252dd72356e2a45160c388db8e6905cb7864ee4ce38dd974bcd365e26569c6012dfab17fea901065b632cfb6b31d4f8b87ba0e8edc46ef396c3cd4b0cb233d533a0e419836f8093d1aefb25d3273a328d3277425f5b0185a164d124b686e3d0943bbe4fac181279aef285a9a693a94521c39bb915e1a76e565947c3cd3a6026382377ff30426935a40399c3d66cee149c300c4b470dd5fe789103d18347012d7837ee20809358f4404d7795138541267930a5e60c68ce99f74221d9452c40dbd0b1c9038d9abe471d16967627e831db48a8ecd2d32e88d9b13970a0afdfe9af54db99b09b510160fb77e64223504f9f58ddba05b7a3c8463a8c432162fde2a164507b1305213e140a7bc0d4ccb87e6f359f17cce913074e9bb890e56cdd50d5238b60e94043dbc581a7410588565597d260166c74041dec8ddf932d8b9186855714ed48483a99c3b3eb56a4d09e6eba880b7fe11e0523ccb5adb2e43cd1348c54f158970b6bf9f68cd49b037e3a0d3566933bcd38c9f25ce06b3b48117e3c9c08a31ed2a8e415f570ad9ee0a62bd06ce280e039ba02d9636cb0d36b3312979c3d9f42c0be8cfb5ac7bb25bee272483f160c4730d0cef4b66703a06a2176ebc8842cb85284e81b1f638f2ec292e07f8340913f7d85a9b988c54c9c5ff9855ff7567a6a2cb349a25db5d6dc2db8db0ea959e816ef6e5a9e7004f9905f0e65e34a2780be3aed567c6b4545d06f6c7a5fe53b143919c24a33fb090ddda06e420632dbbfd70ce6ef2b481764646f85b7c3b243da1a983082fb64ee711ab90cf1146b14cb08a3adaf85591a233c1ac5d21c52c9da3d514baf331292bba7e7cb58021e855a6205bb4952465224063521c73f12eaefe2426246144cb43f2572bf4fc5559dd6ecadd0e9856c0b879ae64358d98b169361ad0ae1f8241f3b3c59c17b398372636f6eda0a7cebe1b4e104bdec9246c6877b435c8149fc81df7e8ac71ff9a87b1916c4c6d2ffb34b81ac8c903c5de0cfab98ba74646e387f330445bd2350cf753d27ccca99cbc86f3f2e630d3e3a47b6a19ca3d40d16fa4ca8c54573a442e6f264c05f7730fde67c090b1f175b85fcb61d6308ead1e5f01dab403a7b204c84e01dd5e48998ee3fa002f1294850fe40e7f48219fb56fdb3dd80fdc32efd0c0ca07fe8d4fbf9db72a8dc408e5fa1508b37fd1cbdc33daec64ff827404712f280e158e6dbeee28903d45ec728e8bf54f23d7f32a96138f5c65a7c2869c5dc892a9d567a16a473456ea1cdc67824c83d68fc7d675b1a6348193007fc3c7bb57bf553c62a5f43ba280101fb8f1cc47a3afb8fabd34565e12d72d0ef10821d7a57f8e476649775157c7792d7f2610ce1d6fbabe1635b485c5ddb1a2309acd61c8585d4c843ddec2dbfa7b1d6f5f169b56bddb8f0f35bd02c3f98467331a72042077d414404713eec6b1953ec1ba754d878f0aa9db3b3a8ad9eb745db2827b802712bbe8b098496b6bfdd33d4fe56fe0a8a51210d7586d5ccdfea38eedb24e68f6a03dabce6ad0a67d480d131f6b7f0951f17cb63736c304f077142a32d880aca90b1019a28965bf8cb8e16d44f7766cda2bb1cf0c41f7e1017fad2e277a6a898cd3c6498ed8b3d890b402fa313d22f6ab8b7b2f41d2bc337b51f5b190b2716d72633d1ae1a28cfa4b83df127943d62d4ad7647a52412b5c2c73be4cf23d8dd74c29c1d2ec0fd606f963e5c38794af8584b8c2200b6d33968119776a05defc0a52a80ab72cb2c1812a7e2008e7c7d7d6d8df03372b9aad936ed6fc5b4889ac1e3481f954f245295b58192834955a0901d06d0f22dd5dde67af9f0cf4f44d098e5494dbb1a58d5a2e228df7695f9b8c24b50130a1a7c02214f3edb2848abeda95803de1509561522e659ebbef0b5993c559b367a209d59d9507df050d5acd8c6eaf4756044c9182c519a3f5dd5334d6907486baeab220374a8589a521a6075d6e2c77038b338cfa2f4fdde2a644446b4315cb8a0ea91756062a3d6919c149a4e14d748ccac33cba83e20e6dee5ebf423e7cec421a81f1fb2c00bfcd7869a3057c13d3a230742c00570098867fb7f29a531b9d8e4ef42117bfb5dde133b4759b08bd01a2c709d97fd1f27a516cd16f6918879fadd16a953eaa2d8dc6bf8c2e28d7e255c7518cfc51d9e27380d86dc2c6615fdd665770d538ce11d255be5dba0140e8f208bf58f8487bdb3328949cbe22695622017d894f40cf4096a953b3c12dd3c3ad8d9950cc03e2144e68328f109e955c3ae69e6ac894fa2831f382f1467f1d01621fa81242edb728904057066d69a45a778f682405bcc1e2651b1ff5e91e0a33f212a65145534814d5d4de1c4d64e1e6ace5632626c74b602097659c77a33f7c9c39addca27e2dd2164a56f8c5ed8b0a7fef43a95aed1b44670d9b602d974487ab575847df216aa6e11ad5d1b4b8c15c4d541928829da0df3fc5bce47ef540de488c3c739a8c5b2d168948541e7cfe6992d7e61694e9d160126d7047d85dc94f218fb33e6fa9a2800853a69315cb0feff66ca14310114b8e22e8023e250f3451c00c5ecff908355873d80d47cb51aea1a8ccaa48f831fa5ea4f0c102563685056006e0b56f4af73f50febb8a5336f6e7e7a7e728ac4e3598e15609856cb6628ae94c664a3056898878db73e626995109b4acf89464dab260792bbe40ddb0be92834ae723eec068d196f9e02526d7bbf3d23a87cfb2dc71d61d801d0033c43716c67c81a8909116ca6f0abd6311a07ce7cbc9b95148862d53408a0e08330e18de366c1db0fb109b977e3875b54a805eb3ff3c1eccd441dc19d717d7399af40ea52733bb2267555b22ea66d7982ee582081179304e5395a8856eaa23649c93f3c5342dedd3d3b2f2feb2dec76ff7b2cf654966b5e8c5b0a12c508b505c30e492f6f6bcace43998e21bb14158815cb5d54f06688b29ebb40e726057e84a486a68e801650b8380e1549db8ac32e340138ae4ce791991d672e8bd2fca288598f5501700160ba24234590ac24165b0381e067ae80465c0cb4c14b58f056400a50a047fb7b4a03b9cf8146472a4ec468c997bfefbc517839981a94b265566f0560ecc4d4ae4062ac5eef97bea877323783bee202778f9f6d3a3d6e02a9653f34be150a215ab30884a7e4ca25f1cf6e0b070a4082937ade939303c4ddae854cea6e1e5060c6be32304410a052706e55e449b5b370d12079065d7641758424c168123f53db9e96ec9364007942837b985bd6e649e337e09b922152abcbcf77a5634caef99702a5f87a3d0d809a199e0c64681bb28b3a820c5ce2cd79cf1e93ac39c7831292dfca905d6008103982719028ccc9ce071fc15f16b8e089856a10fe0a5deebf9d3f44ffc734c1c34543046a466da635da16b2b25010406a43dc45ee661fdb88a60d898adb0642223c76e7a1e458dbb4ac9448e1408cf48520ff24977c90e3f48cf4c0b58384e510d3a16d28e0097155c0a7bd69761ea589d308fb9a2bd2e5197c12e91bde5ed4ad6dc2d541cd3b5b6b595993c661137e7de96651b10f0c25a0e84305bf9c01231092ff249cd735111f82ee6883089e4d7a1639a06122351ff5ea58f79286a8739991e989188e2ce4bf58ba72e2d9258edffda399d659b8e408acd14efc3e39e070bbc1406748862251fdd1b48e3ec541e52a10d1332f8162ca4b331b23af20468ce3d32fc4101bd49ad2136c3e23da609951da22826addab4bca2c741006278f21ba23c7d232c1780516a87ae95059777f1b55528a4cbbc9b828d00f1810bde153c42daf3c046897bee67a4a5ec407aa2b9bfc4bf65edc03348ea28d48981d4df7173c5b768d4aebf8d4d61e74c050fbf0112a17d0ebe8568759cf1b75de3f24223f18dc85b43b6c28ab0e176a9838e5520d99bd5c9b6120eac73739937417e7a54299a4775da2c092d70e0020db89dd397f14ad4c88839bfb012621f3dc1ade1ab56ee0ef7c046f2c6e85acf6209e0900de71c389cc008ee6704145932d201b79017cf074c05eb948a362367f46dfc134b2281bfe0e34f87ea53d945a22e2e66b8d5674aa85d258707f9f4a8fb9857bb4a894c3a25091ed05d6cf1279c57b30975f6dd06f37c58fe093045492aaed45428d863ab33eaaeb28f2bc69990dfacbaeb2e56d6a990c85f11085f8d27d8bcdd84f2c1ba9fa26360336256dfbb74a11226ac17353ef3ae498cc41468a254d524b81b62b628752d48ea6b8177a9be1f4b112c1305fa809217f7bd044101b5d12641528842518aea40125dd7b298c15f55cbdfb578537288d661c4ae666d2af3e30c1c86fcfa5dfcd7aac45b8d16131e0728fd555138942e8c7a94754a11e443e2d16b751f8e044f252020933b2905d62e19f525f49be1990a92a373f1ff8f738aa0c1925ea3bd5f4b0a358017bf384837c96c022d6e6982f7d311eb0fe75283b51819ad2121c30142b0a365be7f38684dc45becf894701493ebfe60511ae93524d620bf7eaee9fb9ffe8dd049b46c035fe2161f69b4db34166fd01d34f04370bb55fe583b581aeb51f346202b83eade07d5cc301c4c97c8287cd433beac59e6d95583208886846bffd10a2095881b7f25dc38882631616e0dfc11910c93996f4c0d7ddb64a764b5fb81df62bbdf763a18b8b76a11d362c99af1b3e459da1ea628666c23f7d0b1bafe76f741835e1a7aa22b9b3c6dde95350bae8e7fd954116e95117f61f6af851b4484477a0c36827c4847da79610d3447e2dbe720febb12debc27478688df43793df4c1527d9c444e72f3def9ec489ce26e6dc9aa59379412bf53d368411a73e13566b0e9bb79d577985930185d96b54ba51257cefa9215a7d90b0dd3e4d7be6185bcaf0e027eaef9762146bea2f9a6b24c91882dde6f8234cd61774223fd91a3c50c34ec57dfc4d715bb0c2a0e37567ab72946862829c6ca8aaea5d9d80fe247fd408afc5aee24e0e8c401c863159f781e82504e3b739198e7980eec88d01817a0bf6d876df17d6ef023b0391d981abc6b6317e980b1ba195463fbb109dd6258e9c89f63de5115d21579107f08289bb9e86ed96185dd3832b7d335fb3ab55b0bb6736b9b0c3bded45cb01dbd7868ba51dfaaed8d51a0f8ea1a1756f61ce53c2ed701f1e9efe09f610ca91fb2c65b325d2e9eb0d4d50fb140d6502a2b5da3522d305f8112ec3d84885cf2b6cb835b5e25116197b6d6f446b046d5d6f33caf7e54544be520ebb987db34d87a27f8fcb0b5d2e49f03900975e86f422bb91eab183bcf2a1f3ae28a2ae5798b21101276dd449e662b1475539516c65ee466269c582ffe3f0f204a004f1c92fda96fbdf686a270c884c4f3d2048c8030a3961c2a3d32b3a799304f22b4fb8c59f9ce402b2ca0ee7805ebd27266202be2295bb3f88708614c8a3d4e5f69cffa07e5bb66cf156eabfe01526669528e3e1563e9259baa45cbdbf4325f27c29351275cf67439204922eee404a4a9ed6d73c28451e4c1897d134f951435d45ee102cc1c3b551649f9dc33eae09769b3dfdb549e99817f8687cca5dba4ebad3750245c24e4d4d6731b3634cd4673a809a3064f10af2480489231529ce35ba56bf80cc6688e302f40531b0c189da8eec6bf75e08011e6d40c5a0669866561dc8a470d956715643d604b923e284d8d0439fd0937b7edb45a299aa579677279eaf08e036b953dc8e27bf4773623f1e1ababf162f0636ba7d7922cf51455fe1b654be9b0c3e18dcf62605cd9aec159f8e10cfc90d235b2c8eadfe0c9bbcd8f9051f2ebdc89b2500aee3717949214556c4d18f13f6464399e8b5681ca0550af3c082797930410de309c642a7553110b6ce070c2d4cf3a83acaa249b2f5c1d3a2b64a25ddab3701c9b7e166a408028f4d6af8cac1b278aba6fa65fb64d6a65d738356e2ed4b48dbe434a2287bf2f8a86b295108ae26433bfe3f525dfac0b4d1bb44cd2ef202df0849f0430893f8cd8587d28ecdc583541a3a4ed70999722c9f601c5ccb0cc609e8aa4ffc6e0b41a8fb582a1d05cabeac8e053b8dea3c41704449f41d9baa260a4eba8adeb6f4dcad0605e27406c675f68932da643f1a804c295c43e9ceb27eb47d39246948f58e6750ae473dc9859228b0bd7f7e2118f259b4acc8b5de36239f062179603ae6de939edf7708981ede4672de35a2904dbb8c6b0d98badc943ecda14848b3fbbf8953985b6c333de353a44824d01a15a2f54899263f23db65bdfd77a23eb35f26929844b0a0942d0ded203ec79c4913b0380d6291c9cfafd71e9dbe464bd5159a40b0a11e772473dedbdbb18d76930f5db4e4914a69b58bf48faa6092931301b3ee40578010eee9e925f2be4f2f9b5cccd7cd3684a68c5b34f64ea036b5840cdb69f5c92583228c193d15ec2e88c58f29898355a89e950316f6434b9312b34cf5666f8d8bb1834e880f9b80e63c38658bd689d1a829395ef6861cd503e1e582333e32184bb04b4bd5e057f92993f124460799f661473db96856c2142da1d03402e7a07490245d50e1016a93209232b2e93b5f71322efdf553ef728a93250db066d2ca62c1e04177ac04998848ace744b276d647b8dcc164bc01024b22364cf18af83c5bfe9eae5a6f8f8ace63468b1dc9d84704ac273116aab88612ff84b184221b45e98a94d94fa2ddc1610886984bff2721c3645ff4b6190c317406570e22ada340b10eaf4839eec83d481f55c9b22a1e3ac2e960db50437fb34d3e6a8f2fd5c19998005beaec804463b983e2e3acded1173566f45ae275da004ffd445965b8d26959361056d774aaa92a6d90dffac5f4f116ad1f14c01e404f692973c2570dce02cd566b3e97b59cdce5b37c87a027cda1a6dfb1266fe061cce96207ac2b733ad4b57eea7b51d0230d79ba4a60bf30621c0d23ed1356bdd94bef228339ec74a6008930279e0032c6f586de5012030c049e5dd8138ab353311709659d9f0c7ef4759916c1f506aec2239a0c513dc2b7c55a0f8893c3a2bdf48ec133071706762613837bf3ca59c21d0d8745755a48a4f34476c844e7d7c540a15c29f77193f1c962087946095ae000242017ee22494473c2e301616cfa19ce0d7f79e00df422938e95873059359820d02990442758704adadbb69fb70ec1d435470c682088726c5aa17846bdff6fdcd39c0fd68bf902bb57eb827d694807eee1ae2ad11e56f2cd3213a4aa69670c3001798ef93958b760ee2fe61204628121f0a2564bf5d1bfd3d9b8dc1cd0216730eba3555997e09a35a2a6e2be83b851aa29472fe770a0ed5657a6470c5c4a900552eabb5d1917ef2a34e998ca75f85331e05e572d16eb83791eb52256b1744de52e633c71c31da8461be96811646fc56bf8a242550ce33e1946ad94ea35641ce83ddb4598d847f009042c2f0270f7e6ad9af7fadcc1f9143449a58b238bda0cd90257eed5e24901a8bb887ae286338196c1e8517c10ae480ed6f0d35e8f541c01e2f21bd3871d3755f061d4a9d5a49ae12b60f7e6d2fe98b026f7607d3c4874e6b42ad2d973412b2ee2dcc99c9a7dcdad000c6dbd74494e70561c82503abd47025be7c54e07506dcac333176bda4e9a0d986a8d0eda48290da55d8175085d320131b16385ca6aa3d392f442f69527cc63b961836b151d0827e842d93c48cd15102478b5e04013677f7710ee8161de4474eb2ca7c716d25b428a498e879cb1234125625b413ec08c69f4b1bdf4f724fcd379878e29284ee934d65970d462791a456e3d6180f43f3d9d60a098ab1c86971605ed34107b9a9dd7596ff608276da9649e51da070f4bfc30f6942f9c1e65de14d105ce7230a14ea564d9ebaf443026f6b97cacba108e7dbc01bb95feb0d93489040d8e57c7e76cbad8997114f8e8a304e7a2be8190081f4b3c36fe5f005af2d03c9ca9d3ffca5882c5e5378d9b0546d3b04a904c0667fb89b69ec90c914c028a9444eb5e86804e72398071951b368a50dbcc602babc51010756ac02581d440dedafd294efda189084f79eb4f9b0c953e8bb84ae19c9c605ef0db369ca44861d0a9f8727349f3343baa7276abbb46d4e19ab85b3084556788c5ae8094c813ba6ba426b802df6653ee88c8f471b5c27bbbded3997eaa3990beef6e257af45d7a97a2d747512116f6be675bafaee02b620a463e776e23883827ed6ed1fc88ce205382d9a411e0038e101a5259f891b642391af90aa20a4004ec01198da7a15e914406304d1e88a9fa5e3fbfccb093079ca7922e25c42a1c6d17671b6ba0ef27bff0aae4c327632c1015540737965c142fc6b03fd2a6719adb10cce4ece54f0677d9b8792429b590c6c4a69b98ca6ea11d2f9a0903f9794d84cf4a37cf48f88f2797435608024241adfe63c83863819182c37fc11230e82bf987c7734e8397988beadac905085b0cb217e7997d18c9fc02a902205cca7416ad42b4ce7bb20d260864efc65ae2c937d01c421d49dad9b40d8c174859d84f88687033c705ebdfeea33bb027850c5e886a83135717acf08f6f4b34764b74358a01046cd88dbef49f8280f1b8421c5c988a909758314478709e22cb2452a99ef2386ae68bb6796df75ffd5007dd779375807ad425bf2a442dcafd61c49533bdbe94ded0d2b938b6ba5131d0c316c7e347169fa495ce7593558dd7bb8eab69267318ff338003fb31fdb18cccc0dcef02f194fb085dfd9cd3e78d42e3bbb870d051be33aceacfedc2a18d4a72536802b82f879be9ed6aa7e61b3684968d4305e41ad213c3d5eb29a9097618010a616d8fab3402b7941fb21431f7292f15a3d370a01bed6b3254bcc01252a6246ac2c5120652a54459401ab5003d4688d089c1a0c1cbabb4e256015716968cba24e88e06d928baef64980e8e0441acd99534db2c092dd7194e617292580a2abca2295415c37c2336386dfced6eba6d9cf5cda360b2c5eae03710129c82058d090726802d5cacfc1f5bf92e2842b6507fbb43dc231c9dac9600d986b7dea932744890ddfc1894f8aee9678bf645c8c3ddb93abb5da2631af5df5b441c59e5402e5697bb411824f0280071c4ad23d7b9a3f07b28867d7942bb355f29e175ca775148442cb18f0c995d016f8f1d9311cd1f0af02bca7a6818153976c29d8c45a5e2d0bfd5cf20bf6e9b93ac275dc0c828f0cb1b135f083de7a8323642a220b00dbe53a38654379faf6e784e3804c838fda350e1ef84e79b8119db4e3c7dff26482f134b4db5dc3121cb3d3ba443d7f530d51005c0383a99b3b2c18f310e0a6f3b6a0242d8ca0a6085800c6589c02e46331b04a140b6dfb1a3df8b7701b0c38d65ed1d565c388d3f45ea612bc13ab8df369f8ab0c0a47f371670c29f7abe7a6fe254dbbd83f9f17c6ffa64b26bd96305b43ed51afda2983557fb61e7d68581c20cac1c0f2e2bcb571572fc2df2d92c43c0f7a49718bbb082f4b74eca6564b6fc65bc7f274a4064a6fc1cde7597b7007bfaad1cf445d2db88fd390947eb52b32147562ab606bea115e4ba2dbd7fc480dacca1f0a4638cee9344de1e5ae2abdbf325c4f3852c581a95fa9e05b6b971002e747f47d151919e3101f297f0a99f9c601466ab6be47e66e9093ec9aa9c893c7efd35141901cae018af2749e199b5166f7b0a36290cb4ce7314ec44178f87a4b616a7d072a7281970d23af73a91bf04073eb63cd93d046c5e36482d6a79e6e5c9a60b043b35dbab3e50dbfba56863700e088324d40031937a7b6d3cb64c52e3da8ca3355aa748a641fdfc419011e75508029e482b40d742390b14f2279a325ffffcca76c144dbdb7f9b2f44a0fff76c15cadfbbb43f2b376b7d7f720ca467e6237c1467602917aa2709058d82a434226f3efd71103835d4f7a67976f2a696b6e3151a294693ff3c5621864832d0d9274035ef76d8a99f21a81c0c4f59cf718e8ff9f99372c03f50c2613063f14a0d76054d9f2fff5bc0c653a10f8fb791870bcf9edca29e83d6e6759cf74b676450ade25a2b0e919cefc6b1045566bac1d4516ca416cbf2af7c1199362458958f3492c0fa37b0836607ff96d62da768304e2a63384d58342e810e3ba161a08a96504f5f113438710bde87254f833b04784ee210a266bfd3f6703ded9ece7742bec15a0e515bb449e480bc909bb351aa508a534d03b80946cb65eff558b4cde548b18e1df25858a00d5480efa18487093d70be9cf420b134195f385db858924c088fa681708135bf28115040c473bff394dd3fdef664964ab72ce92dfa2469f593aadabc889aeb0c39bc50dd58efe9994880d9d7beea9d8359e8ec41ebad2453d0df3ce99661d643e8623e54d51126ba21334c60ffe5c3cbd99e89bb800e252ff65c4c31acf407ba45eb3d11e57c19a02514e13b85cc1ef51a661cac058a990878d27d4050d318c93bac2efad14f5aa3767dfdf7ff201beac651529b2f609717642972fb67bad6152464dc7aaf333a417271a9915b5444b663878e6a1b6232304c7e3316f72d39c11ce52391c30653b581812f1b0e6a4881d4c61a9b7e10b07837b7756fa45dadd27b47a1a0996b3f398e2cf383386759c2c8e28c4c372da3a8f557bcfbc2cc9fd9372b9bc880951a86a7ad7f5e037f2251dca919472c60ef4853106da3668fd31100d74f1732759b195f603be314fec2714d1ff1d13a3b5a38afb7b20ebe8eda8719a287b85ff3e15789442a886a2f015851fbb4cf7e66bb6d4dadf014e6db83bd8a5c9160d122c41c22b9076b18eabb9a0ef40922d63c7d85f8c6775e0f1410375a210896e9b80081107bc869ce8d0723f2134277587b890cf13d3b13af61e77fe191af7868823c427ee24cd064cfd81f729071c612f7b19b25fb38ce4b7b72d41502caf0555c8ef3dd025090fec9ecc5e6559aca8e36b7d279d12ef3f0ee278d96909d9ad136fe9c88539115a1f1b1595e944dc327f780aa208c6be2d3cbcdcb2003b5dbebe58d3e236be61ee5e3c9298694055963bb8cca04b263a9cda48c75cd6efda921a0ddff9f17669b8b89c7cb92e41c4289843e5202bc11ef10d49ae388b12eabb9ae9e7e17cc00df63171d5fb67e799457554a3b6b1de9daba42f0b4f749c0e3165227ca6a22f0a4451082b5ac1e381deb98cab9dc7689eeb76c0be371ea7361551edd16a3ac647941607c10f45f189595f92d2b459d9e1e50d6162b3eaab221e0d5cc7e3888487949ff01ce5c549388b7d4820d6588d99deba2dcf08e29a8453c8272f554a42bc94188c8111d7d69e029a3c15ae38a08a60c883bdc12471b1bfbac6dc2c915f4150a3ec076917d3ced68864a57561d467ad6f0ea8d7a0e4b75f4e69a8e77827e2a3fb0f571219d70b86ac85501c6e5793a1a965887ce6dd85ea34b041d2f0154db874b6a044b05c21e8d1ee8af07b89ffae27224c6124fc15e439eb25e10deae081e0d4c7ab39b37d82526cbcd5760507cb34624d69d9599ebe2b0892bf1372631bd9ef287ee465989b438768d37f2eda875553df11006b11c21ec6467a00344778322c222b5876f55d0312d7793b3a5c353e2de827330a30c1c813c0eb6e47872110369914794a86b977cd6b46af44765c5fc3ab44b1b6623332aec1aa5bedea832af01fef0d5e7197d9cac5c14523e24215ed05e9b3aa1312ebc6511c4e15a9e3392f095f23fd223637191082c0d570b1f59e2be15349b21ef67fca2f16b34e8eb1202c3509bf059c94809ae988cd2976ab7cdf4a9e7addeef84d40712d2842477a8db9aac399b98461d63092ef7a2351821479ae1af2bcd6cf27dd1287daa20be87f7e36046af294a1578980a622fd8b36c9dbe2c7614e7787846aabc63eaff119440b6b217ce7dd95073cec9ba45999f6ebfab00d00c1b52cd16aa7064e1c417858088e89c23c0a2d64d5442a36f6c46936b2df942f6842b87b641fbab8bf7ecc2c8381e7a18973dae1d59092c15266e4bd6cf23a769dabd79bea370d7cf47a3e8fb8d018de92a0fe2b1c94cd6180d6c073a45383c5aee3ea4e81e857d9bf11b20fabfec4c829b5fe557a6ef58921545f4c3f9494ec5c4b174688217b55e0fd1bab6d1f16a56b65e8b08f437b9873986ffcd6c536015f3795507d5b447992d1b47087799028f99542eb3aeca61e023c02e39b2aa050afeae118ddb727718cc901e4b85261159b855109ec2d3051cc3d85e55d8e1a0220897345c82eb3997591491d02d9a50f16b014d3256aa563282f467f6bcdccc2ca4711e788cabdc260539b832a91286830f10ca0e205aaa80a0c61d6281e56d50a276dbc9e4e33ba7fc8daa8cc5bb8db8cbeab84e46fb7d07bea60e9ada03492b988416ffeab5741e6388d199d1adb705dde140cd6a94a24e0c3eec6cbb1a13559be866673321ab0d156e300fd67a6bf9ce1f55ea6f1e8c514d029d65d505a09fb4f284d748031731de172ffc096432497a84b403e403e3701bfa96d98e131f014e293d938538448626a976ba45caabae6b64e7022b86511eff76facb710a6c932492fb71befe7f2100423307c43b616a5aa1575d809b86960ce318c51f9f72202852c64b9e48bf8e003b6da4ef6550c5b1120d55740f4bcb91ca092966b3c9e3694d35f004b949fa50e40f087b82d537aa4088a73cf186664630d977337fb13220642d8fe70352ac23ec01368b39ec4d87dba402a6f2815e09bff8c5879b7996955cca2eba327dbdc455f3c9cc6e9dddaeab8649b1237111f8b28f4ce1e2b942c952980df16a89dd03f8224bd5e33b0c07ce1d15860ed2330cbd419adee16901a9c4855059852f53a474ba4828dfc2d6dc6590f1b0e6e0198565b9d3a0fc4e1bb25aa0c8776ba05575dafcd6fef86cbebda4916957ff6c3b0e2d8d1c0684f97a44593424e11c8ff305b30b7cd122837ff623642014b88e08e70b40a77b6d71281563f8a79bf2da53e2c91c930eb91e169f6ca00dcba0d8e2d8175b34688abe8db3b0b72472ac50a77aad7113bdcba688f9b80be2ad61ed01061bf39bd306ab0a2a518ec919be764e36c40b747f45dcf676ae4b3c145bb5034b79fb0ca706693df57f444cf354df50fd2635015aa77278de9179039a1d1259265aaeb5b60ca4fd04563f432838e650e23d1a83c8b8b7b1f58deea9dd6994a3190a3525094069bd2738502402c4a617167106215c8a132be0da413ef2efd7ae39f36a5fa03997998a3cd5367040a790d0843d210b4cfd474fd20ba3a601c8ef5b0924accf8241ca704f0c71054fe85071688346404bc3ea195f99a042d972012c0fc77d339abfa550ec752ea15c9fc5e943d455e04537d32c48df53972b42b06aef4574d44503cb30e45273ede218b3ce52c33004bf66309963c046ee161c989a165e3d7bb344f4cb9a3f8881fa241a98591b327a1a060d7587fc067a9acddefc67d8b69aa75625ac49556aef38a36062023caee527a0d3d1bbe6a8b0c93bb2ff7b847f3a5c42a1061f8be962a6b87076dfbdb53a3c4bc8f7053cbcb55cafb6a9b5aff5197cd50210a2111c13df449d2e35501bf71cdfc58b81b1b3408e9b08e3909ff0ca3fb067729cfbe543ef013ec0c0f2fa5de02c7c8ad7a4f2d51e15f13619b1e6d86ff933527c8b76f6cb774e0d63600dee407ad7192241ea0c6ed26839520aa3f155fd5ee482640e88392d9c17afb470f653fe273c3727f44cd1fa9c7fd28c9fd603168e624dca5bcfd5da04573becd20a5f26e5d4f63d8869d8f29a06b9c4b62a337eabe035a84edb0829f3964236141f67f7988a93c045506744c8f2ce9dd9a9a5065ee309ad1286e96e7126eec1c661f20857922162028ecdef657f22e519b111bd0f5be87782b706179534e88e8cf6e60bdd69ea715ae955e67ecf2b4102c5413d039b6551239dfa7c50bd53ec729b055ec17d595bfd5519739c28dea9dddbf08cfee1d6d8ea2b7b49cd4c55d08332f8b8123806e411521e909a80affb91364fa0532af356e8994642ac20b31c20f87d19ae863fa53856a7191d0ea316d994a6f2077c80d3358c15c960664f3adb27ae346e4b8182b903a909a4eebd868894dad4640647e98ab4b5936aea906833975ca23e14d46802c5c695a0b0ff9ea9181be7f385855c6c46f0e1e8db07783c008adc7d72d08da1dcda4747ef9bf4ae0584ebd18996f8bf24c9138c0e821a7ea6b2c9b9818042e5b0d91cfef4c7643577542d07cb17712961d65fac82eb1244af3b80eaa7c9e80f34704d1d24d49ea296faf3b4c420c257a44f5042258ac797c774ce684d32425cd81d1f1951c9b5c7ff53aef6863588c187159349c216eebb7275f622d995768609cd9b42b37dac47ed4f267f5f848323541ad528dabb95fbc6b9ea0502a9cbd6838b944bf4db8f80febe7b4eda791a0f9776ccefeb994d2ea253e525c478c0ddb61ccd08e2427ce710e0453d7df358b573ff239e50905f6f581c973a6033e33efacf9053884eaf5adb97106a3f879c840e907a35284529a3cf94e62893d8b5e3bcf7644924fbc26064fd2579b39b0a3abe18d0362b463f377dd9897f36d37541414fd95233ad92237259af321a2ed95a05b8cccacd5a48d3b3e85352dd56d453f0c3071823b61cd7f2e42ef1bf9a4f835fec6efaed2a6b83582a9547bb48e43612ba6f026c8312a0d2e110f188784a6d4efe6e81ad8243e149366dd3c3d3796f76cae1c6113e3befd7441d14975fdce0c554b5c28562628fa0882175f549ae66bade3f8bbc08a67e3b2484e911da2d4263c158b7253ce95965bbdd2ba9ea3824145ff3be6a18c90504c24dda431e808bb6904e74bfa782e43520caebd11b014139691f6f0d1c9ffc1a09eb84a7598edfbc7279fb7ac75b76d8a247c701173d0a727e395593a63dbf4d994c05ab8dad61918c9b8ec8d24e68f52073273a923568bb5c41651b5a35cf112c8ab3db2d7be80cddbc1da419c527a3fdb18709f8163feebb4ef955bb8466679eaf1606f3b6754d608b0482e336ec1be292c6a37b373096508478ad0a902d772f746be040e31ddc336a367f78531683d6930c9683d2a11e5f6d10cc35248c4ca7f260fb206451c88fd6be5161f1e495a94e1468861e318bbf27df4c3e0d16fe296f4a45e0031baae035c085a0689e81fa8a5be078d115b059f25b89f8abfcc4193fdc1f2d650ac13b8d506c3f6b628705810cee03b7e3ac9007d7ac3e0adc20b4e360ed6985d222cc18138b019754389046b99419401e7e61702018f3efc0b88373878decfbf0134c81a7d588dc5c0e9b95686494a132b1bf600c821c9a521515166f6e1e754370f5ab519d9c9017ad01f7cfb6eb8b417b8524898295685750e8676bd49debe91f6107e838bb6ee9a14284ac6127ec88f9375d928a9b310aed45afe709fd7190dd6be36534358fc900f66ea4a8b9a1b84354432d9e0bc223401ef7b9900812704ee782a264482461f2e1317f9ed7941d1445a1c65322ae6bf51eb04e39968d1ea9cc6652d9ed4fe19d9fb7999724b2da94a3107b39fc6834c5a32f07aa6c166bb80ab17813c85362b7e19b81e5f57bfbfb4df48b565ad0b68e97a1cf9c0fbfa4539db6e7dbebc4c5b9b30c6420105af2e8f7b9653c8ca1caa3df46223969c83126e8254d9cc221f61af1dc0abc37a660b87d5385b9ebd71928c88cc803c4027cf195af0941bb03149567c50e530ef2219d503cfbd487f5cf7e50400adb0b581cdee236e7faab85d02f1cdd6f2a150a0a2845963abaf5e491d228cb66950265346f237835c6e3112cb2e7b01540d51b1c702313dc72dcdf4717235a294b515b306e5c5ad4443f0609aa26241f83afba5199e6168c099e1e51f6c0a542ad79b55309ea2d13744e12da5fc6b083d9fc5d7aa560eef128f7cc65eeb601a14c51903514f0167a08d1d8e14a64cd70c5a453ec0ef03a6db0b52c0519ef547d2d1853c75a6d5c0d664dd4bd1b1d5c097b4e7d74fa964c297287b3024e08f35d0fea8729083933f6a802783539d79b500ecc8718be2c2fc69bfe3a0118c35857505eea411a4048e88ddf0574cb7aa0d8ab1d24ec512d01824b468d9d9faf6ae76303b43af1238f682c5cf8d598018e238984d292f3622e06e9138d7745a71a00c9dc7b2099ff16d978780d1a5ea1005e9facbd30b2437717f056b052f0120b64f000d16fe2c9c59d7bc32857beb9b5d165b99d34ebec5544e9744e19c5d46718a5b0d86fe79e6e9ccc4d5649eddd91776093be8fde61907ef919200a5e1fc88e706cbf3f69df2642cbe62a43354850eacd58c8e1612841a60ff02cd2a9d0cb17e2330cd21f5bdbde6d45e5ff0835c06ef48a8840d9df40d4d948ea2b69e8e6e8f3e39c552d2c7b539c059e26b9b2a00ed816a1c729abcf1497a89c90e9fa2a8a2c57ce4bcb958bbd2536b87f795070a1a199d968dc093115053a0ce519e7a8f84486820795c71a4762787eb005602a7944d05594213aa771f0c441a3fe4db29bc889914c4d22feccbe9072f3f26bb0d60765c5a4342fdae049ed3e3f8a3510875d0e4c6eafcadd22db6bf56b5870544aeab7ef4e891294a2d20bde91b2224f15c8abd1a03990efd0b4f122778d66e8fb39df3a33fd49114b7e02cdc1c8a52c2a1c14bbc03a83fd6eca1059159cb399a0f7da616681f818733d9339a1c552e762093d1fae0c579b912b1db0d6a75886ae506643cf13a38b328f3a738ea3dc6ab94b45b90a7671830c8bc6a42f9a3ed8c8966a43dbd886c93a1bb30e4474783c1f3bc32ad85eec10b6d7a26a1104767d9e10cac4d9a3822c02d5d59af55b4c660cb63dd01f406e1a919df8e9bb6345316388d9771ebd3490be1915adde5608402293fbb111fa7ddde9f2eb9821711ab50509853edeefb6313a2157f11011751a13ca28ad609785b8e9adc716c4627e3cb793d77c09f94a1c8f072276d6f5326bb37f9532f7de4c701f52e4fe1b54eac2e9cf067675e99c6cb1aeaac1d082510d690e8f1427c185a7fe47572bd23395591b82fc854144a0c651146140c8d869f9a01fa49463bd44fa17b22a00189ccd8f4cb732d35626f9b154ec1942819b3787b56b511ab9a76c1a972ea5860b5749a7a77cb70c290c8e146d9f4de2bc51c1a00d4425b644fd9472b8a0304fa06e92ceb918f95b214125dc2203c11ce5f24d48d65e8d3d39fbc07a3af8a6cbd53f86033d65dde606471b6a1b776e87f1e9cf2920303e8e619d70b3f011428dfb120f3d837e5549b90c609804df503f72413247015996792eb0dfe9d64dde7c0d02f777bce59e80e8cddf21ff75482bb848ebe0e268dab91fad837b326aebbcee6944a33e79f5b6129e1b74fa4761f5c87a686521b9280ab970f11e05bee1bd4be0db3fff990e4e965f07b10c5da107a73e7dc0e9c5dd2244101778e3fdbfaa4b676158219b77a997eff726f7b555c68b5a641d0488d0d40235893e5cf86b5fc45f95666a2095d4e864977c6a897a06a32929dbb64033f3c850ae310c0f525364d9dcfc7f199aadabda2daca97e0a213f8f6dd8288e6b635c20a2908bb61606e936495def70040ed9851730e02922017ae0990f5eca35ca502824a975542185e903c687a8de55d9688a01482f4f14e133eb64763f2b8c49b2ee3eefcf55726a38c6b02b4c82e90c0833c1179aa66fff4faa5978eb8468207ed789b7891dc3da1eec6800b6f22b17a9174981fd6ccb3b48456f67b5423ec79990ed5fe608307e8d3f3ee174d0a0846171fdd3922819bf79b28615959e78192ec4b2992fa1ad6547e10c5c4951fb1b5ca1b1b6c384a4cc935bd0c8a2dded8ad6cbf6fb556d204f9a0fe22b01845eb4fc9b3e6235c0c35aee9cdaedf5aede12544e3ae6fb0774d46f7aab35dc206db78b84dcad5c6aecd438bb1ac5eb75660c2bf3ad3c463c987700d080fd74f23922a501e662ce2643f2ecd4becd5425072a965aa7992f209c48e6ec056787cfd7ffa3b5dece1dad276208d0ce3bd434b4a254dacad952c2eb466b6537d69f81388a89e8ef53b6ccdd78f3d7459505b58a7f7f94e9119c105556f833f6a8c4bca75d9dfecddbe035475590e3a6e8aa373b7066529eefaa065bafadf73207da9cb49843ecfbe6021814ce8946ae791f75a987c90eb5be44f7e085891bc1c976f4faa8550508f9754c5d54ec73771a6ff86d488ad423cc96fbf43e5a7c7d78fcfe1e0e8c05829621f5358cad518619e152d6956b7a5ab905f8608f7adb90e5516c78d60a9e94a63181890ed46c3a89f2c01a8ed9e7c7192157e2d43279ebdc56614148fdbcac9b0c04dae48cbfb793035aa413614c896e384ca8277b59c7af7ab96efed45817ee008e2c668ccbe750d863870c8d2e680248788f518771a73e88178fd7755017d1f8905c3461a08d02e40a14031b8537d301f4cd1b4e88e7dcae92d8dc2595f444b1a7e18e8d108c831d126922c17a58671357cbf41fabe2cc88b6f81a0ef4cb21a505ccffdd5920b5530b39a873af0be93f0f1ae01d74abaaf806a7062d8c078101b30920d6aa6495aabd42ec6b78ba96b3f867dd883ae94ba14c21b00ed697b8d0c0c8595ffe0ad082ba944bc1989fda02bcdea21a4e3cb30c51874dc550d3cbf6c5d9c84a391a46a6d677430f4824508d9899537adaaf9096ee63abc84734b48dada4091e78e19940a7e23236414603920d9183c00f869760147090959d304e590f21bbf737d93267c9b038c181f9666bdb1cba4c21a4b0075a207ae166ab411b2bee1ef8d5460323ae2b355759457cd2c44168c90e9fd8f11b2ce9faa75e707c3fb9f736629f57740e126769afbe03741dd6c016906ce7205873e7ae56cc5332b6142b9f9a62ce34bb47cd72ad9afaf2ec1380a9be0aa46545bbd2008365f299be9f15272c558c6b4391689218ef949cc1b964ac3618df95e0e35b076294c7053fd025f67de0784c09f66fe33c69425bfa505c4504f96cef3013f0fefa8042a4d4419f7f116dd49185906d5b8c6c8b24040ae372148555b38bc459c48ca39401c3bdc95e37f269432a009c49847beffe09dc655c7178bf5b9b53188eab33fd1ec957c4c0b8299a11515074640bdfe02f9c61ee7af7eddbf37400c2202a398eda2974583faf1a966ef7f3edf62aee43a35d4b412bc31dbf4ac421ea550c8daea5773709e086f2281f00e9d349031aafe0ba249343e583dbf00ded43c06c3b07dd6dc1cd1e1c89cb23f23ab7f5f91810342e030ee326095bcab9efa27536380ed2caba5df0bfc64df2d3445344c0836da31f0721da0f82dc4cc3ca35c0edf168ca8e6f6989f0daf4f9f6c20a25bb67a84e751a473f9a93e6580c2335781f9593750c2afcd1fa591a42c7a345870211fd50e08b6deaf434818c547f8f91616b92f6fe2476b4151a6b73167194a746091872b208dc05a331ecab54d1d5d4681acbfc44263b38144ae1114c842f3d0f6b981269d4838874c174252ada1655c5e371c25fd12d247b8c83477f48bae0ec89e1a008c9bbde668f6e73cbbb5241e51fe826fbffed51704a2d8372020c734463b07010385b1256cabe6c8435ed0704331075222fa57da5a84ea9b3e3775b5498e54cece379576b01609cd32a6c12b7f95bb7f31da6a6c4d496c582b4950c5715bd44e8e4ec7817089556e6cf4c5788a3dfc9a63e689393305bdd46a9ca6278704a6843c0108d948a17ca3aee38f29b02708904129161c1044cca906000eaed8aecfdb6d1f23ec1948f42c413b05d54c8d6579f2f4ee6828daf740e0d50b924f617b64eb65dc3ead1030b29d40c198240d0829b6f78a0ac941a2bab8dca99c8a3592c49e6819af4c0130741a0bc643b4e9847a829a0250f9041b6ac182293dc338b70475bba38e302c69a9ab453f245e3a212964975c039adfe303a1282d58bb2e03dea5682ade14ff6253510457ee758374daf2fa200126806afc93641f2f761d48d997ea95ac3fae7ba220c7a6bf9a0286dfb101b2912e6c9c7afa5692a7ec042f368762f88d939955abcffbc2b457f01d4d9a73625ef79083a6d24f6afb68101c59acd6395501fba2f3a32f47d44f8df87846e21acdf90fde660dc5498d94c17f1872e4d2adb10b9dfeafac79da639e1e05858a707d012ce32d3b1c7dba74209d7f8c7d4d01045aa3edefbd50a3f16dd058bc8eb02f648792817062d518c38cd411a1ffb8229f9b246a2c1b835e41dbc5f6bd332a45d2918991ccbf848fa7785a1c2248c9505e69ab694a0f1439a6989453a7d4bd0c847429efdc35ec2c81fe794d0d45c1236c800270fd7f1d317992475d33a7516cd6be926795a644091887ce2601d87f056aad9896bddcef7256f99110a5cde4d05b0f5edde3837b9fea005fd638fce4a43bdaac855f316ed51ee031283ac1a3510f8fe000ac8cf741a5d8957bf6b798313efc2f34f0e0af7fd153d71ff6955c83e213fb5d7b8c156032dd44f2132126e7f1c1bc0c3dc2ea646a1dd1b6c919a5d86c6773504653e5f9c73480d21a116e4e1d6f33165aa98d019f4ef61fb6d32dd4893492e3455b32167b7345285ce96c42dabaec0a0fb001647871b3e8a1af79c870f742ebf9e4241f7015294e6ad01a1350f0e48b00e5cf9b1faf4368bb8609a365f059b98a4b44af38fefcb59c914f8811172db47819044df001cd3e08866c647a89c286e8988f3f1540e9021234e25f0ad34c5bab335c139f50d5c4cddec788c56f90040987a44009e908f7ee762808a72411604ae4ce25d260a44c322d566d112bb7a0b1c5c65b052a24faaa157083c41271059163b45b6416abdd5e5a247a096fc477abbec6ba25d6cc0c24b89a803ef45d914102824d9fde755e1505d9a1b70538a304e1208da80d08e256006207393caf48419f0df7614a4e7cc185d6f11103436a2fec84cba018179a233ed53f76c6b499d3f6b207fa763a22f0677e587a59a4321e2394053d3e3914f71ff8b3751add8c770567ef16e360265c1dca0caf956c13434fc466c56dc22031926156659e7e3979ea463923ef52a69e565a08dc385c32ae75f6c464a6239395dff8c358b98989d1914dacf70ad0c8a850a7df6874dbdf50495c684e0fa54a669f4e82cd6a4a0dcc21690bb71fe60268d8bf8fa35f555325eb4f40c1d86c63894dfc791fa5174d2cae12bb8cd087d8dc9ba3fd983b5dab35ebfb95567ef5bab73e679f56c1a35c8e86fa70d3c06ff2e8e8008985a59bca4a742bc4ffd0247c32e2e1975e24c2fe9718fbb70b90f4957b8c56fc65f222e241fc7e8ce37c5fcda4c72dd83e2317f5afcb1f51d6c5fe49918e3b4ee795559b4b761ae14ee74ce84ad8760f6ed268a143c7555d264545bcfeedb6605958c5872e3616312b53daec0413f3e660d1802b5c0a814e94883cf3b3e293451910e5c42e3e56e2f8a69068133f74ca1a6b7bf38f22dc66de03c579a6b9a5803eb4f63b3280dc27ea629e2cbb89d7dfc75027e2e262ed2a9ea88556fd7ea57e948ef0ec98a7844ca19864c80d12c483b162a76783cc3b81c81061a6fe3c274a1c76733488d1e1e2b0f03a59fc30ec8cbdda230999d8f788e8a3bc081cdde90c5487aa1667b46c65599cfc166b036525b2f8a35ca90f31358ef1f86c114a2ce5375270e455633ff6e83fce0debd0ae1a7668b09714242e4818230b32a2dd5c3961ebc6bea5d45d975efaae4a61b4a2ab2ddd22034f4c80ba584d61e7a0bf54c0f61d86b7df0a16593817f0aa88b619042e4073d31b06ad8ec7b254c369af17b8058161a1f0ebedf85b090d796fea8925b103ead96f8373067e35b7fbb6410a7807bbca54fe0cdda7cbcda5ace1850366be37ec642483f73b49d2b5173c19ede125eb644ce8dc33cab0c835b79728f91c972889c0f027864436f1c87ba27020e39f7c4a733fb443d335e802234110b13d0c23247d591ba08d8831276af7d8e4c788d2f56382bb9bef9e022724cd8868af5615cb0f49732b81f465c341cc279d1457b273f48dcc895358752cd013a8d4612f2006b40babeb4894d0badd5b9530a3aecfa5a3bc1a04541f66698a1b74d440bd5a85cfee7ab33a2861d605c15ce8244c29dd262d8f933dd4a07227ec0bb5cb00a0e7106a43b94c22a9e6e984371f1b51386b0fc5ecf69e7d0b8948393f347952285a9ba8548e928035aa7f837626961f9ba4b353c74bbd94bfed6532cd6552889c35c1084db8a6ef3c4fe4d2fb67088f38b61196636360d6c3d55adcea6f3e568c88dbdc2cef93ce396f32e0d8f68aef62fbe86fcc3e094ad604d43f4ffb32f4dc36e4c014b6f0375c2fcfac5caa837b372c8e5ccd0cb192eed2d0093f8490bfe8a619179a9e0f72db51815505f5b27c9b24e0b40a129f0db3499fc1bf058bbc21ad42172ecb108a2a90110dbcbfcfcf25d6c913bd39909d85d8fe73a5e420905447e2a800ad0f58949e88ae1c61777c35c8e54054d332946c11d03e1270d407e80d4f78194c8344a435806838f4ec85743e4a30afad7e91fedaf7c01e7309bfb6a98f2c45542c310e09438eb5b84ad13567b24846f9a3ea6bb8bf46afd122f796a8c6872202c4261eaead1e67dfdce62d972843e161868c09f313f79f7570a74968a4c1079fdb2822ad9518ef734350f9c5226d5bdad493c0e6e1c1d7f3ce08da50b8cadf49ec87981acadd0aaea61df94606540a487a748d7914bde7a527a4e13c89fab96a97dcebb776dcb017515c4fc2531ef8da9e4477f8156ea938a65f30e32254207961bde293a06434850dff1791030f9d1ecd3e090bdf2741e03760267d189113bd16282fddc49873bc519e836f005bb03bc353fca2c781f185ad5b479e0ed191cc8c41db7ef1ea1034c9ad94a83bb436717b5bb73ab3a3cb49f7c14edfefa09511fe1382a931943d43ba6161d482d6bcdccf46cd3c12ffcf69fa0ab57d967587e6a080b0f7392e5d36c1c6792127d436dc92452e40ba50b8a2e28b6e92f9c0e4a6c13d1bd560a75490b13aae8a0e216d86de238f1c22bcfdf6f84b5a64bf4a2c53e42bba9dcea5981771bdda7c46a451d28cd1f9b7eef7d8303dc4cbc747106c50909ca342b2e9001ac246777ad75b94210fdf2013c063d9825c472be46607a3c9fc87c9b8a315d98a9e7bf6c674fcc73241762431180a7f46f050fc59ede119289ca7ca59bb7485e14159f3ef2a7f019430bc2a66ef7afced00b05a926d82c7b6fe6f908970d42ceeae2d19357f111f0e1571884f4ba3958e93d10aa9def772cfac8ca66ef4388653025aa36a3ea0408dc69a099679c6fb3908ef4c90f6323ff63d60597d8bad446531fdd303e11d7717c9b45d19df2e46236c93089c42c7846305771830a25efc02f96601d93b4f60f077027b279b09fd98323b38d2b162c9ff99e67d2ac73188b07a21a0c4d38f0ed0d0a79714145b168db28b457836bb350fe7cb3a20da64d9741a07a776898806557455e504f201503004d6697155d6891064a25800372182316ea7d1ce62991f5102e303fa2d073d8df5c051a96fd9096908013308f67306e2552466882c4d97848161d9a34be8185d59af10c6dc58ea4c2a9521af205da33649a629dbf4f414ea97327e5c0843f81078724a766582234bb19e50c66b027c88102eb4ed17819ea39dbb7893dd38c6a5f489d949efdfb4fcbc59fddc0749a5813126c287c49c7c5d1bcd9c05a83c2c9a31a45e08b28540a073821098bb00f8d5321302a9043f60337998d82d7a0f6c26904b68ed96cdf93f42d8fd671ae8675a0abdfaa176a3b9a24c338e34838745cd76c74c9293bb68cea43424250c6515695d9cc9e509a07ebe988366ab0d7c29b366bf7564112ee44e0e04e6520b10312799dd0f54a88235193f251f4c6ea8000f48f25b8219d378967ef8ed1d67a0b11031f7e2ce47cb735ac6d3e0ac28a5078870fdb70bd6359783d2400fd1ee36330bf609259cef40ecd706c2e00cc5480a678022e64ba5eb1a1949f8803491c1fd020832c056a1bd93a885f22b9307ca431f1a0fdc0da499400220ac37e05c1fea632ba6ec9d59b26805d2af432a7cf3eda0fb5362cca14aa87680877737510a81bf650a8f24067128cbf7e8499e77839bee4668311a6ec389e8c54197e27987ced4527d64c9b69cfdcdd1b0d78a79321d1e5e1823b60a0571b3f4c67db417f24449c59a07f4fa69dfee1b818427f57e057750095214a9c2249e0662952bbe287c16e548080969dee366cadbe425da181140e89c58fa6fb3d6e65fddf1397220f6ae56f45f15a0be21d5493c8a1b1898c2f8762a37120b459035e76503ed848ab2e085e55ff92293c2ad6c09675c6d68cd93caf558b3bf34e5f258cb4a047a8313a9ac113f1e1545658dc1044a0ef86b72cd4fa3f59743e2968a56f268f7236d700ad3fa06321091a8041625143e5ee23b18c2d6475107dd7fbd86aa3427bc9be317abfb7d3156b12f586cb51e06ac18ac864c3c26e0a7837ac24d2779ca41ec6028de912cdaf437a9c04a36f17094c1f7186c22aea8bf393bf14bf45fb629691228c81c624aa4209bbccfdabb4ff386177e4269255ddf4192c705fed282a5c3ae32f7733c0532a13f93b70d82d24b3b0f20ef9c421268643865b843b8bea8bf003a426639b54fb8bdebbd183a9d395de13ec6304a2ae24897187d264d2bc0d96f65758e1a4403c88b2b1d7e02294bc81c3e50ceea1c70c9ffd601b1571ed5be45bf45532510e1c8728541296658c96e3d9e75eab15e6fa121168e5a718443c77aea8fcfff3c849fab8ee80f05487bf0f01709719bb7e98507e0ebb6106a0a9c5a742563bbc123ace7f0d0ddc0144c64ed8e3c4b5343ba8c34bc957e445c8b99cd19555da339e7a114bd3773fa94dbda7960b3ed28ef9cd83c97dba9853c45a583275d73caaef5ac8ed7e3cacd98ac3ce03dd10ceea026dd1a3d4603dfca45033206f88ef02d4c87dfefb287a7d453cf817f4e5a41910f3b076efad954937bcda46b608ca54acb4a41337fc1b93dc21a84411bf755bcad707b8ea57fe85f658ff0eddce334a209de528893e4668e69e761667c132f3960a15493db28d004fbcf9149782d78e0537e0d368baec42daa6199e27f365fa262c68403199309dce6168efa54837909b842113ca6600ad576b2de28e0ae26a03f78664ba8670240510e1905bfb1cd9f85514e5d3d8ab7e3f4e046714c4a89088e3a031a693309f53e27868589e7091c9ee3c219b040fdd8806b1c3e76fc0941bd5c3b72e76b147942177a4ebf32c4f6516b7a9cd7b5276ce96c01570b92d5d9b20d45ee55405f6e7905fb020a603294278665250c0426655dbe7be5b5e8107988615c010954dd98f0087a8f865c800239fe533c1a3b08f6e81166ae1f6ff382b7e10a6d5bf64612abebe5208a0544cd0caeae7d14c08beecb75c424c03f93f7f605f6398c13e02fe78514ecf11c516976793f767e0eb01c37da082c71088c1585724e1fe457a1d33356d59af26f960fab143d5c14e40bb6a2f10b6b67d4c8ef4a223f81f785b5a39d4950b2c68f1df184155b520ddea089b25bf04e3e828a42c638a98eef8690437ed1888c366cb0fbfe8d66b57ae4589741be0bbc3f52ac6331a407e87b80e267ccf673727e9553c5fd1d301f812b77f6ab78b4df2a507e0791a32c55da468fa3cc7e3f7c1da80040109f7c05914b03c0f9872fcf550c11e906795669049920b3143c1f17891fa79088425bf2babd5996a16b4a7e49586d8546f12a8ca51d71b1d257ee80161a672c1a1f9962bd62a14326b25b9ef7cd8e0350c21a972848b0a9b6f4be2864e7e0f343052b1bbc86dc70abbd44db8893017ddc5e60db5131c6b2e33a409cbd10e606be303c027d7f84079240d9d72dbdb01fd4be43b4fb142f4c5fa1a9d13a0e4e40eafb797703c0500e508a6c7396d78fdadae3726b077a6b27f25dc3b469c5166615b0f4daac00af07fbddc0a3b9f4c7c4074566e4de01842ed92fdc5feaa6c04a4f2d45479d9a5999ba63959ad4edc4ba7bd40d77af13fbb9e7384830b72f37d76e16e18decbaa806b61b216a5e5a9b6e256da5a8b1a0deb46c1f099a1bfc6174abb2094926581e26bdcf30ffb9d7a2106b109c6ef9c6da007c4fcf6a447461e4407e09c2715d63006482821935225800866ee859fc30602e79eb570db25f0e0bf384e832ef097e4df28f725428328b6a05996997cc8f8c595b970f3fcc048c1a3ae7c4f55d77fd7cdadb9d2fcd9406c2c42c9f550e25c5cff7a7f44657c0132a36ff6d0e92bd54025c282cf06e2be5ecb9cfb21e044d4b0dccf207cf63a1d93dcd8e43dcaf1c8a4b5200446a1aaf3b8d41a0a1e58464cada47b0285672b5ee3ea1eb754805d4fc8d2b1bd5b584c2586bfb8e0817dfeb909598625d1be74a59439495d38479228568ceca2eac855448497268a08268fa148dd556983e41153d5993fd82ef8406e8a8d8cc58b4711f4b0d6a4511f73afc909b92e2ccec377b1cfe46d608663512749f9bd01e9ec6ef2673e09e8d465198dec8258ffe7abf4c00c82f77e3ef217dc8922db1c96074fdc9caf41132287cccf4b37d122a2d69f859f6004a03dce1eb4f0195b1162674696962d412dd290394b4f1f4f890d8f047b260b0dd1ab347a19ab4147433f988528ca1ccc2cb8cb5d9e031d870784dc16b39980e0a5aaea0850daaa8fbec72abc1c0c9e883870d34718f6ac2fec90a6d3339ee0cdcfce2348218dc0cf4a8e53a42c63798e2e5003a064b0875f140ede01950ae058300af5ddec1d0e183e1b0e53e88ef6a36cc8ca6754e3c509117f1f4ea2ae974546f687f1b8dc1570c7e7c2e59e772a1c572530c76928c06f24ab70ba51dba68b1211cf475a5340007b7db151cf014290ad8bb8e8729fc9070eadeeed5ee65e670c4b6519e3b6ab5812d0228f6bda39f35233304d3b45dc260772220680cfe75edbb7f33e0312fe3053924b534ffa2f42f24946efe885ba5a67f6d59b2ccc665fd407950df468263c38113dfcafbaeb37065701288a94f775f1beb06a1ac36d438ab53c9a6200a76f90bead44ae7b87060f4ca6769c3c8ba06ae34a69ea9f29d56c6cef87f1ae7f57c1349fb619f54739b6e4abceeda9ef64ffb1797e926623f17cdfbbfcbb6f6f97293248a26db116b8f7c011fb6ecb84c722da5d6f58940f2a046a58135879782e89d68de78de622c65aa05c2f472d351abe8a8376fd64396f952267c80bf39491f404fa53a77e2f32e4cfde08f949af4d90cac48fa31443f493a1cbfd875f42745e0e0ab904a22fae77d4c332f767ba36635cbf19ba87e63057f9f33795679868e2574ed3d96d9c7e9dfd6dccc4757c636d439a7ae49f39cea6ee443632bce7641a41fcebd2404d2101e6e00cf70ef78a7b05b74a5254fa1aeb28d1719b7def81c2d22bb56aaed539a3b1a045ead3f3e59825fcbff52360b6426aa7720bb61f6b93f7be3ff226f42bc98609a19809126fe82fefdadf101b1839b45376234315415c46ef00684093111d1c48e5153c5611c96797b46bfd21cfb1faf0449a3e4024627efdddad89004f530f2d1472489e216720b62ccf7ab9c78d1e642cc514c6edd6c1a71a01918077f1ad4cd71cc1eaf63fdeb1da893c583d364daf3027ab351cbabc2f899dcf0322c6eb24c62ba629f4b9961169fc4de33590e0726f3fd7b0ddee53623306e88b82772962ab50e9994d30fc38d359b3b99afd0856c1be700c2dcbd6bf31fb7cefdbacacc6cb33291a05fb536d69294f627b23b68734449f0f56904281a6ac75481d490e7aa61575c806e0d602072e93eb208b1b5119633479e66840aedcda2b0815d89e317177b1a996395bb007956dfcef7a61239bf20e343e6c6da1993beaac54051a0c88bf8eae095116cb677106303278f3c69748a11842b60d8d99c99862ab7c404c699ed6d169a826e97ff33ad2ed7e7527062ce20972de0d281c2c20389d9c4fc44038272235d0e655ef21cc740d420920b2131fa155ed856966dd9baca787356919ea0c8557c6ee540a3fce6343ab14466bd3916846960dbb91ae4573217d25211d950881c690b6a4a3ae452a5cf285e0f068fe9a704b973bc8db43b4cd7e0214500c5db1cbd65f6483bf3395ff8f975ad9dd8d904d5171933d40ec0aabf85dd0180b5cbe2a5c89043fd7e02a437aa9158e48d157fb96aa96efd91b05acd4a5888be4b5fb75d5158b91e622de5773a68b360e83d1c442ca77b51db20808bcbeb14796647e98e2d6b8ad601cc7c609e783d040210a910769dbea81b4445639a1c46a5c3882f2fd2299e24e565047754fdeb5ba7c1000ebf41855431e267a9fb94128ccfe50f92893f850abc82f423f451a884d64f08c0f692537ee4ef009862504977f47a92ec58a59620d1591a938cbe38775416d4950ed63f695e86808b73a497521d95cebc1f7dbe375e9141f1bda182a69638196f9b276640c0d22654efb28c0f09a7958de2e57c3fc3be49517a34da3f9068f706e62e3415875859afd6bb504ff2df579d7573c4da9dff97efb78a4a3cba60f3d803d06675b8ef711f6a9d9c4367a2ea788622529a246aa720715f2532005f460eb292223eed6a920dd3f215ce10a4494b4e9201a3c420fa4b139fe9e8d49dd40cb904e320acfd659d3e66a5d88da7a852a70de18bccfc80be212781bbacc764cf2d41d25feb02fa8a7e2b6653a4c49e6697662888499a30fe8dcc3554a746fc2906a2b1ca26e733c66264cc230c159f6d3f772c8e39b198b5b4779536cd190ff07e0376832ecbbc87f6514488293ab0e753e1850f512e0e11e153cee75e85d07d950850a8d503dc84b9bfaa8972e94d98688101e01582fdf6890037c387c37716ca1c818aae2250744d09dfd2f81830306c6f1f555ba74b3fe9005048af5d8a6f646dbfc531e322fb2dc7e74ed6952304956c6875a145c676bb78eca9950e9efc89070469102f2ce83aa8d3d1c4e85cb7193c6082a19df278d51663f1f5d774e8ee5f214e47418daf804180c3b59047c7c548ce636e601e40b916bbe27039e49b303e827f030cd5fb027ab9e8d20ec3936178e1ee51362b4a297b18f4ab587e8ebc4a83fa272be9907f8e7396fae90d97d9be9db425e66aa79d85db85880696e62115a1383499fd758de37761e7249a28114cfd02ba004e6057401ad6a403ad4fa17d93ff92b0cd732a85d64ab6f5f9795325f403409602bb1b4cfe8f21dddc4fe2df466dad72c1d0533ee0f6e427d5ec6fc63e8dc642f4c9024217deedef355cf808fb356b25215b6e29934c294929650d06e205ef0574b47fb53ac4896e98931e9cc86f98139bcfce161c686a54f7b127e5e0143e678cfef0174a977f8cad2561871485544af8706bb05315723a8678e102dd6f2e32f4211cb350bcc0db5d6630bb19a870eefa16218b6cacb6c622eb38d5bde34c0ae6a00a33b7c6dc1a876a8e309ececbe1c1cb793a4fd487840be50843e709941c9d195cd1444e0dd57d0d55c6983edd862428f89485f1a4ee4f29d0cb9d3e09035249d0f61120e2c30d7b52e13f869f0ff4a009ec49ab52ddb72ad441d3e9921cf02e33cbc9ccccccf27d4a8ef2637c29d779b2c4d333ef4ad3dd7d3e33c3e66616b8bbcf679e2c962bdd5faacb97ba7bb130a4541c99025905e698c23a9c0305ce8139a6b00e3f61284e74c339acd376e0640bce81a1ba87415699c256acc638791e760f9a2e0bb50f31bd9eadf6ec7ae488c7a1990df03f0f85a8ed980df0f93b03b5bbf64bdde043579913f16eac5a5d8a00507401050ac2ae016cdee95a0694b71be4c31563a5106b0521a710ae0621a535d6a85711bb45306beec966a4ae0d48ecbb5de91b84ef2e843c2c0e0efc06dd5d42676676d80c5340bb5a493ead3edfb1bf311f9fef1c5cfd58385cfc5491c1ec4b21249078811abfb9655979a625e279e62ec796208472a95e810d24bebe52a7eecf40e12f4bc891d46982d491a37e59428ea417528a13dd481d3972226763f4e0035267da4012c58ccc8c8c0bbd7e496a139016b0e75bc5208188dca56169e74ebb1b137a325586664a5ff33e1e22af4764bed3647eecf0a366c73f021320c2ec373175994646c6f56838348ebd5c6c14a74d6ca12bcf4f55150bcb2772854e92fc6ee9e399baa5b54d72e82e9fab9b18e6c85e9bdfe4fa095f5ffa049d373495a9d06beb4efa045da7342b483c99e286860926e6523bbff0758e03b039007719f684ed5dc1d797a680ca39cd34ef9c993372a6c6199802a7a9a19999b9797981cdbb54e4439bc73a40aa7f5fb61be62f67c18ef1d8672ba311eb6ab4b8ab5435168acf44543935e69ea7fdcf5677ac3477b20df83dc98625a413795c31f68dd025f625f4f23f2b4316e50551607033594661aa3e36b98f21422f61666606d400c653f29010c243e22959c0c3c141793a6a00e3297952bc254e74f390a8ed8830830e3c24584775afa397c44032419473f2d4c4eca0c6a3b33a1f32c18f1d7ed4e8dcc44489e246666325b2e0dceeeeba9dba61cc1c41f76bdec23f02a25e120e8d0a9f46815e73520e8d7a815e127f8436f82ea097c443f29238d18d43a332753b551ce1d0d851ddefa026d56b48ece5a272f6e54f958dfcb5180927fa7cfceb861535fe468b55816248a85052f191a4f6124f40a634b3013a83435b95ac0b023587b6e9a51c60d08b97d41c1ea071d4acbd242fa9559d96470a83792ffd155f92aaafb20a2792640ef331d78562fd582129b4bd27568c533d52988f4f11aa3fdc9c19eac76ad96130ef6de0787e863ad398a8603ee6bf67e6e61ed5eb93239da81f8b05c785dedf8892d318cce7f35c7b6c3d9791ca18cce73f9edd9c2a5555ad7953d51e13a68297482aea5f5c85cc71a21b46428513d118670302148e54e95792ac4be2b0a1d68ab5a2f99254d4475139918c9723a59c5182ae176da78dc818b51d485d68bd683b6d4aa3e244376dd476160b4d24a18d1811aa7b4684976385e9ed25d69a5b43b424eaf4dda517d545bcfacf20d0cb9da2f1a4e590a88243c2ddd7412e206a2989c4898a786d9f725d87fa56a76c03244cb49c93e7437b58420f74341a8d46a3991113428608e96154a471701cc9117c7d9b876dd38976003aaaba1f1ad7ba8af4159452d087180f1eaf4a6b0706f33e862668eb56d741148592801e7670222fd273a14c4fe333de6b840cca83e83316cf24b17c7e087f229f055aa7f95c5d44aa24d1e93fd5cb8ebadf323e54f84df29443bf958fffb20b72be70fce6979e2a4a6a012abb5b42c971155e7fe7455cf56f6c15d90abeefaeefca228ed9baf81b87cdffefd6c50147901f7004e9ffe12db65c76305b6a8cc1ac94dab32a954a852f5f56eb423dcd8e6cd3cfd684924bdd1d4ee4bb40801e90101f5578f12cb4bb9274f80d5acb706f622a33bb8d174481c14d8c8b52ddbb28eb2b902fcdd924284952be641579b5c56f7fcdfc5a6befb479310697cf227a7d088793e2021964ec2ef32ef332cc9104d84980bbbc0cbb895d5fa6b3ebeebecc81dc8b130ff15d8d2a554168cbcbca79cac17f45fa4839a5942897a9f3b12e90878845a5752d4b457b0a425fba30c62406ba28ca45b22e87b32720403486ff4e34057940107fc9d34a40190fae40459d53723af41b0f5f3fbf5f414e744973d2e192281bf758f39b5cb9a03471eb877dcf5feff97722b60028e85a3f2c75a1f6fe3b29c0ad77a1e6b1a657940b4d968b44e4c17671a1f620279226e044a05d5e176a6787ba4c1274b1fc1e0a7a7777b799a32026264a1467749983315ae740c0dddd3c41c05c703197daf90327a365cbe692e951ce98223cc597c8ccc8c4c4743717e1ee66df1ecc592de3297877790a6666e6f529b41d078459bbbbae5de54d030c581a54caa894c1d000039846110dc7893c9ad1021a302aed04cb3bdbce18bc0b5384854558e6dedef71451794a57d4e2da9fbec649abe5374f1194efc285cead081cbf279f61c38eae2b87d3c78f9f8f107e2484103e47294910c2e72825c81e2849103e6b6082b2a3241559ca3bc0bb3dbee0eddd66f8c53237779175df91e3f79ae8dddded6666e626686a6866665e3c6c03df2abeacb867ef4e3f90537e35001eaaa455dd0a879512facc9b993b47d2b510949451c6636ae0d08ba656dabeedb6246a646a544782a721b13b22138523cf3d36242d099224dc1187844bc2896e981ab5ffcdeee82a38c2447535da91eabe1da1ee8e387d38acc3bbad41c8ccccddccdccdeccc0c19b6e63b5962cabc929ce259e8c587f5e5eeeede2851a61576da308229bdb71628f3908c3b821d313b4233c45c05716be66f75d9fce79da84995133e57979126953f7e8d9b33d5296f7116f71a2772920e241b54cb4f135db1aa1a16da6fef813d696cc44620d71cb6eacf95942ea524640894e47bf4d9d2dc095d7e8f49efeeee6e373333333369679456cb9c0b9f1c104529899188516dab53412e4efee45239a99bc60a6525353ee809f4a22817a6a245290ce6fafcc5b3faca5538d1ac66b4fc13a5301f5172b43cb39aa1c234a8603e5672b426995319ccb2d4a5408d742b50634e9d55555728f55897056a8c4da2e415120b7985cc61c94a403ea0811594b848964c457d4fb97c7226179bf8fa9b2f393729c608a541206885b8e6c1216cbc76b7bc09cd65aeb2ce41c1dddddd3ca1e01d68a03197da8964170858d16e3748de637a1003ce6d7cdc19f0b745b8a7011e2e08553e1f7e0f494f9e9a1d633033335324749dee80610568cc608743a3ba77687caaf0127cdf9ba92d353f764880137d9efebe10294758a116a8bbbbeb71faa1b41af2f1a164880f2ec5331dfb2c90cdc4b0efdc8ff327608f28911fc6007eec110544d17f09bdcf2e62e874b9f1e334f00fdce142cf854e3979a6e6dc7bcdbd694748b680a035e79c4b6677e9e5298edf83ccccb03f42273584328a11db0b1a23b78c91631092a794dd35aebbbbe59c541166959923f4daea4279d1ed45b70be54577772f19b9a0a9ea9e9a58a0934e97e2caf50a614b5bc02da2eeb3b8cf44545871f554ad4e77810aab583dec45dedd95104228292c4c9fcedf5e2831aadc169b54005a50d46388da22f4288ac108400b900b880aed8871a21b4a342966a70f09be2fc9dfca7f563632ae2ce843315694c8126bcbcfcc7c68bd422d6c3423633a3595bf7d777f6f159f79f8eacf5e92a27b91eec1a58f558c323a94824efa5ce2e9a61c64bba15fb29cc48e913b4629c6e7490857a5971888572536e2261b26a24acfd204216409fe063141969e1b4e13e4660944b2ba5b4e0a82314dfc5e927697da67b4933189cc8c4c0c8dd975a9bdfdc2050958e0b2bb5c6cf334e2267c19948d795f9f1627815968cc15b31f8f3791981d5aacb9080490f939b42007a8d3339f86543e5842aa1870880f4384ecb3119d64d4c0046cd4baa8ee5b1773adf0f5959e97ba9ad6c59c48958dfcf873ca4f015ea05a583c4c7f9993faa942afadfbb1a60c0fc3bf605d3136ac6be6460c385c4632542e158e2a86ea4688311d30c454e664c5ba8c6c51a56fadf2401b73f39a1e4a52e5ef6112880a4c070b8bfcf063e9c955576f0262e28156fa6d620c66c588faf936750840650c463e6b551aa91fabb1579d4dd27422092d09ba4bf7e9d57921a5e4c6dc98f98fa0161eb1bdd4a47086f0644f9ecea2a567c2f9dcdc2c774c38294681afef8c12747fa340083b0adce5859dc382172cc078c1824e3ae5f7c7f35d7d5eba6e540925e0919e4d3948938902c042ef061381e6bc40f58158e8057112a8fcec46852d15cbf4927be9dc86b008fba45a8a2c5a6eb0d3bbf049ef7b78ac901e5af24c47688843264c4ef08203305e70600309a67bbb1afe4f8297d0cb3f359d68b775d619f3dd80ef82eaeeee2eeceeb1056406e58052ba5b80284a1d347767929d5de794707777b34f2593ed0c85a080c21965fe044a7917b6a728a49494be6b107af1ee5dee5ec84a48872ee34b523a497e3373337b6b0e2710e80aba3f3bc854dea1d7d69d2b906991420427c868a1450d7650d941e5062d2d2dafbb97999927fad6799799993d53d4a9992f41c88db931af4bc99925e94be8e5eeeede67c83d7d0989bdb49a574353f3f124c1ff078490bfe028637c938c3bc96982f0da502761d9070861bc01f90f1a9a1f9003ee93c69632c6a6627777cb499d5281ed72b31ace6e43a3bd239471f2fcf6f8c01cf8919ea9b518768883b30369e0811711bc88c0d71787eed7bc58670670829827cdc9b3c3cc4ea71404fa8f0e67067002e83dec3033f78c699a989999f78c6d6666eede3396b9b9b7ab983efd663688ce9ed406b2bb18f029f88d1bbbb7c62e21840b5d4014159acd14de80ce9986570f155e09a8107e571d2bb66835a3436b7cf7ca46fe0e153ea49a7efa6366aa64852433132343512d3120966ae5bd6351e1d3cf3284cdee5ee47537132654cdebeec2746741bb3b376481eff6b6f48fd4cd70b05b6bad9999862a1656b1ccbd70a76750555755a507380b9d7f7d95d28cc74261a85ea86c5095740a54555ad7036eaabfa96e2a1a3a50658b57a5ba7f55561c5ba133dd9799271540160b9919c2ed2ce02e2fc376ca20683ae97c4cea7e17757568667028e335794cd6784c9ae05046139d274e74f398d4264e441d162018e3310940751f006a4eaa9d184d13bf1745efee76333347b1dbcb938f90b0cc9f6eee94037c4e990ff985633af627c9d22a3706b3eb6a7f03222b36b792cf55eba83107d6841a9b41a00e1c21830c1b48a0d81c53d81c53e88565f8fa5215d0e9ef5b772eab6047cc8e5088b9a9b994efac82076000031bb89b9905ef2aa178b09007cbdcdc0b9f2c5b369598becca71293ed0c85a080c2195de634883bad590e5b6bad6d5c29dd1327822fdf41713da497961be1c03da9971bc1260598c2dbcb8ddcc88d1c93da7f711248830b68fb0b62519f7423e78593e244376e5447ef8824a070a398ea3e0636a9efc51d29b4940d1bf6f77b7fdcf5dd8d7df143d8707825a8a18136f047c7e9a1402e4eb4f22cbfffe244f2b78686e6c7aca169ade6879cf14d409ca5a2e8c805443fd3687a2a1f84b458112486d55de76c1607470857fbc5c0de34a79fd3f74fd68ed0149a3cd39c2c214280686bb8e714d0d6a86b09693cde3f21429a1a75f719838951072375df0169f3772b210ce67d4f4e87b6ba530e57fc89c3a67f7eff8ce9d96e76ffd5babfa310e683d5e7437788e6c7270ae6b8a23d5116fa5d5d35e43059570d757ac9013ea8a17ae8cfcac6014e6bbc0250e3d7f03e7efc17e6636582416ffc7b9976c3c4783c0751d68d507c5005c3f4acab066a5d455c0d0810b008b5c8cab7ba539058572cc660e8a7baaaea89d635410fabf37ac06493f42dcdd0ccc8c88436e4948335b801ebb814dfad3946dd29b4315ebf2e3098f7fc046dffa4cc27453e29f049d9172945679545a3d5968613ddb4312abc6963d8ec0f7c70051467af0bf55dad0a75d689c134b978563e88a25c3c1f496a91728820be427f5fea29b5544426a7437db2f1caf2ebf2e9b76f2b2f2da32b7485529667a1d457ac493d9e6f1e1b2241e67be62fa87299269baf9fff0a923fe9204dcfcf9ed3cdd9e6bf4901734a729a13f0f52963c39962d72784b1c2c695766e4806d4b9193743675cc2586186a6c689423bc5983ea76a321d452a0c2ee47eee20b9623003bef7e06376fbaec2a1a4f1686fc5400587091a8ff6ceedbed7186bcc31f66a5417e320dc5d36e549fcef553e341e6e02c2167b5f1f1122cf35238f0b3194c04d714aa4e856d26ecef6f02ff603b37c771dbe2954864c61272084ec5dfeb27d50921056cbbec52bb699d176a8342acc841931faaf2f63d6053f5ad021b4dc4de1eed86d4475f6ec8c3ddc7df8becb465e122060e57fa7b1b10c92245192e40bc7dcff5f11450ef50475e2bdf79e136ee729713b4f0912a61035a99250e8c5850a4d3fa79819900e14eb9a7e4112e5c23fa54a56a1900de835e719201c48ed59d5725c8839c6cb58a3e2428c979955172ff3b61c66e696b1a5328a4213dffd0f10ab8d4d205085fea009d4f8ce209015f402819ce8624578c23ae14517c2a8d2a721f4589dabf8fb21693cdc2341e3e1daef7bbb4040f74ec4d8b9eabd75f62ed4bcb1941dca6508d4d51e84bc50a097e4259995bfbc54f892b7367bfc4b6d6dcad0b027d6357fdf499740f5e525875e1463c29c4e6ff800bdfe7f879d90d824e342eea911c85027b2d8a396606e5e6e667e8f99df6bee0dc15743982b0b0858ddb737820daaa8d2b32e2395855117b629cd88da8e4abdd83b89b59dc6a35943b8a7b4295d2191d8cb4f60d08baaee3750ddef88917122f98eaaefb7c649a61aa36adb2a65830f728ef23345d98801bde63bc02e731f5aa02e085412f4dafa28115017d79ebbd07becbad7b937dadddda700a51f235c6b80c498c8fdee6b4d07a97bb77f7fd8b73c44f5ba4d9c0ba87b5eb98290840bb1ca17c8a70bd1b7eb93ba2accf8f66fdd322ff3ba97865cb9b838e242eda1b5ad39e7a2435851569d6bb09a548d5b66b91894bdf7d605cddaf33763666e759b1624e79c7318680f8486196470c111c30d100c2fd8a05a5856e8c7334d494687cd0cc6311806e35af0bec6396739239a11e79c18d3babc7645296e8b2b6aceba45deee32bf755578ef1969cd88658d690c0b9082ea8272efae0b68d286dd5fc4d5b6c67bef2160d4dae436a80ca01a1e2664436d06a80dc2774c077cf912d43980ffc52fa18c31e25806d3e0cbadb16210be83505c172ec41c1417624fc30ba81b21a1b536fd86abfde55cab3fb4bf8a882159a03e6eef7e68bfff7430fede7722de2ee8afc5818fb40eabb66dbd2ac275e704e455b8524f77ab2fab6eaccc372ab33b6fccd9d370d8341c36aba3862a00aaa3dc85b267ade66d2fc11733735735afbabc8a05ea3ae79cf74bedfa5d5b316050f7deacacb527d0496704d2907fdb0df1193a81b1712a6c414c5301b0993fbac6de4237adc6420b37763fee6f93cd326f1170ba29c28d2d2184bd941992243133336f0f78bb7b97610fb677eece26e8c49760251f4a31521bd5eda14a1e638c717ea2d414d5e234142345498a0babeee92626fa741323e34e1d1944110547d81116a0b2c4cc1fbac20ce10d166a5d94f258d74fd61592666e58a099191862625e08856cfc5320508b6539a9728b0aebbc8cc876c80e218450f23b3374d8d48d7c1c8c8224b9978017ee367b099699e132cf650e7f77e1ce6f3748df59308ffe8695ab12c2392d0897da2b38bfe744efeeeeeef674a29960622ee5532059597eef04bd3193e74397c0cccccc3c4f30d9cea6eddc8a23e925befb81dd493f40d72945cd6502216ce1c2196e217937c71336c7137a9bb4cfa7f2f59dc1198014dbccccccdcbd508a656eee857367eb38bf1782dedddddd9e2168192db4984bf9cec65942279d92e9c35fee8ad29feff97cb8a8120e6acb331fd4159bcb881635bea4dee52f0684ba0f84dde06280ba36d48501fd5543dd4b061b53dd67d6e397f9b0c1a0546a0b944bbbe106e3f1feb9b8e4781cd61533c3c7605d3337ac2bf40fb2aeaf1e8617ac2987553d0d33c8e0832a69515bbebdf4269b36f1c0745895bc31e7b98c54474465f9ae2eae2b5c25eba2947511515bacebf32c95ff4a053f9e97d0cb4760eb049ce88641a991c6d81e29b038a34a509ce0046a524b62705e068b6361613c280ab82f9c64e1e18c704e94a004ae7ed8df6f4f75b15c14a8d2e7232f96ea34062ca175a8c48c9d17a5231204080843170000000c068441c180704c9304b975071400116c8a4a645634148ab220c961184551c818639031c418420c18229ad226ed99331a32ae17c0c36b1221e8bf1fdd99d7da696e7880b1ac74b1784e099d117d97f3ace891af57cc1a65392d57b5e779bdcdd295b09c1159fa043e8cb6f57e1f9d210fa8f19a29ed40434b527b4abe2578000ab7b03e342c767f0063771409110394ffcc2624add055cd94519978587aa877e59be3d476b323d5fc493eac4f8c02bdacce1f5080b8421a8f69fe65d68d5077ff3dfcab9e8f19135cb4b917f8038b4357849c7d41a9d9ec96f534e3d4bd94ccc94f8a235597eb3ebb572eecb34ab35b722605b0b122265c53dfbff1d29475e54348cff61ddaa7bfa1d08f65fbeb17f7c36013bc1dcbe7ec73ce73c0be22a131ef7b7a4227874bd04f167f00c9cbf1b7a402e101dc382f596240f7c236aac167083c681fb5f478730e1a446a153a3d6d2468c13cb553dea86d9eaa9d6124da71325cd1dda4540a214f1cacb7e59089e3c913f35b3c3ea7d384d5664ee414b15df80709e9573e14aec13b5165066292a187c064ee4d70a3884f291584bf85277e75d56ccc41452c6b1543293d58f8057260a22202a0de407d5a39cbdba5af8d8c2dbe7848a397c4f10261cf856a1d11d03f71f13839b463e8679515ea7d276490beec5dd0271b35f4737f1668a8f96fd2a03b6f8d4a7b65e97b371aa050c1e9512321ad3bc6f3d1ddf3618856aac59d418a21e3132e3b43aac51c3f84e341ba7f232e8c47c4ad9a34f37ea0b1c984fb4270a428ea735030e1d1d344647a3f98e6019ea422c24876fa5473b81129171068508b6a2a4c2dc868ba8e7f8d901a35793c1d03b5f4fcadbfd64df33afe75fd458b8a2091e4d5a17680129dde9b648b0a1187f71191d1ba53935dd5b376a7f99e3ad9291ff8277670082bca7d5e69cb123f17f7b5f4b0a3cee6416dc1471155aee87fe6fb4b6cb952cc2e77b0849b2cda2fc18755aab29cf4ed6510b76d918542d1ac890a61ae4907a150a2b8e65bb2beb6cc52bb65bba77dd8326312b6fc1c5e034f86d28c90592ea4fa6ef89914c0d521f55a804b073aacb5f2cef064c633a640fe755c2e19f22cfe72125f654d1195d03b0e54c46a552f7a4143d006e264abd801944719e8404a0fda0c02466daa89bc76f73f3abc65d37a818218d495606f4ace84b0c08042598ac738bda0747c3b52d800c312e4f8084d24071d4c4a453e49e755e882522f295dd679a7e31b8e7eaf20b94f7fe9c10255fd74ff8f486c2c60afc4954128fa50a5b4803012851e1265cc7220262dd215cdd583de7850fa2b5bed88b41db9043197385cb50d0fef93221612c2da0b4cb23c28a749a42ed867165c6839548ca48a56e71b97fe37bd90a1bad09e9cc21a771d2cfe16757bdfe5fb7c4046f56ea4d9f2b1879a51cf12b4f535067c6552e486bd84092ad10be36c99b605842e53a5c71f490a0db86f4838585a8408a645a98fc9770ef2a1ffe07f031dc6ae0f5ad9aa240477a3d4cd4f080bfd21ab62429aeaf03e60d4eaf86102a0849910f336a73907a0621d40c817e0a07d546f82bb5d860937d6e4d0b26cfbf166f2e9b61bcda4f344e22a945b2944dfd05635aa47eebdaca6458d26fe876a57703970b6934f21041f3c8becf8ae95c5935d95e603ee28d70c52101379f853284a0911542674fd7d8016b6b209ad452dc4305d003ac64f9f16f5654f3a41cd50aeadef17f3f19c1eee6d0aeab2f51b59176195bf682a1441bf42e7bffd50138d54a8c6bac285bc80ab29b1bc0f56fa30fc25d5ce92a50da1ba9ffc2efd39c8c7bb12d266def70f6194f3979bc1f83e42bcae550824982f28bc80dd4289942785553a7ae3980b3e9836c81ded248f4204584b93918bb06ed864616f6ad66af55f1cb3b615133c17b4dc4ed27cbc58da175f5cc87e81f82d1ceccd0e67fc18dd0f2e3ed657504b3340cf256467bcd4ccf800603fee1c4c8c042dd7699e4e6c0be34c9b11bed4e29c447bf3f9987adbf6b707885f37b5e2433d2b7816152c55913ab09cdf1cf74bf9143617d5299940ab28d49756ffe3f95c8e40c16c49343bd14ec1caf2c8339dc8d84babf6273a5ca8026a42b2449a708641ed782c0d81f91c7543d6ff09ad99e9e5794d02cf69269fa2491154b8ccdcbbb6f9bdf4b8b5b49d3397c7b7103e4c75cd1daddf617d8161fd8f5835b2ea37c12f444cd7bb6e06f299c965f00a674428c4f047d7b423bc7bcacb56aef4eea955c30c06c020bba8ce09b54a3a671163bd80ed7721a716888ebe4316f06d9e25515cf690a81fc483d5c7fb92eb64bc497e0c10e7981357c7c26b64be35bbd1ae31789ded9514183b71ef8731694631eb301b307166c6ec02203e4aca5dd4ab14d6a54b60281b150e8365e6b147f55dd90d45cc1801269fc124c4c6ca5bc2ec209040d2137f9c73c3bdd6940eedde602e39cdbe3635cab91ead9e619e2fffbf123fda873974efd2fec5b6ce80e1f30c79153a41ea5ddbf37996cc5c7d03cf614c786a120bff990b34162d3f072af3b26216c5fed9f62c2abedcf301c1cbf2596c2903d6acc76b25c170bda2a85267013d11538dac9b79c3a5bdcbde793a1cad2681d0d246ec547c45d42346df7b8afa510de075a7759de73df8e2a9ee656860277b00b1753fd6058214eb00d931f4c28c7b2df7b546bfebb02bf65a6bda3ff35229fad091a03dd853ba4ca088ffcc9e25c0ac0751ed9fd94dc75b76c60492937bb908faa8e2b54341c39df74f93ff0d4c14ee90010a8c36a4a884ca793e1105bba54399b5897e17d8d4f15083c9b54a89a1e70f1ea00303e5d85d17e07aa2242cd2de3e672388876aa45bff75801ab3c2d2a8db75571e80a1c0d6b76bebc6b788bf3ab2e5efa264cb16eba4e1043e117e754f211c0e66566325d637825a61437b2cfdd2ae1c76654a835378caa1f1a91f00545fcdc585ea778f5194a0765f5122cf88196cea774c84f79b6f864b3c9f4ed09a8a16c0c352fd2f34946f3847a3a0852a74f24e17a69e3883b6ac9d585169dc64732140e071a9ce129ef3308d86b698805213b9040a471a6ee2dc24126b5670d2163c2bbf2d6a4ddec9a184f1adcfc7b2291b0f201c94ea12d6df8220a40084a35231c0d3dfd72385405bc1df76a94bb1deafbfced7a27ed699fca66d648070ace5fd4ec7fba885ded733897cd64eeaa57a6f26d86e15ede5eae4ab14fa93ce327b834653af4716715ae24b6cc002fe66d4cf6d2261b463f53ddd346e589c4edfc7fe6e1c446904042af4795115a1afaaf21f5732177cdf1247bcd1285bcc319ff00ec0a3f335582e85c77d7dd10f322c7a5246d95f207ec5509e74780c420af85e2fdd376ce71f19f3367e4bff0a39ba16ef2a737412bc4a2f67dc9b5c3413306415f113188f71205fb402fd03fc223e2e8fcde53fd00d96b8947ed46a74d1bef017614bbf5fd45f043dcddcdf88c3a57a4a666713a764af8fb6fc5f6cb1f1286107990e3241679f88d93a4fd55f778f4fa9c2b6e4b8e7ab2e4a89e2c41a1275e9f14e9098399370a0146a87fcc6f2bb76c101f3adef01fbb68b206dcb77b791c67ccebda72884b3e25497a2d97b2a959745ba67fb3e7f9c9938341756c4b0d81ceda676fb0911ecbedecdbaca68d54c4193f768a1ec36e7781b8404bac101ad6db5e908231f3e858e87ca51a02cb51c7c91ffa7416eb20939cc6defa8adf996cac4ed4e5d872f9aa006d153887c0ade479ae89578a18ff7d4f21e1b869c49808f74d8e3fdfd512661730aa2a49de317fc03c6365e3a8f72567ddd86b5211abc5fa7b1ef13e185fb9bca9753d6f99fb07d178be8ae31dd5cbf0445da704e7d51ec725c6b7d717ef1bbccb85e268555b15ef6651a8f4c2550149ee61d34b30266575688b24e629dcf5a66cb7e519b3ca855b5c0db0231981b1696554fb79fae448c6d6db11e0037eab119821bf94bdf9d9e06135a7eae85c511fd98e9482b95937b8e26eb3edee2042cab8f6ef683bbf86391e631c202d5c7c248dc88d479d7dc2b72ed570c7ea02053f84a67e6a3c99bc98d0e1071ad199982541213f86eef0dfed3ace7edfa6cba025a32b752c692c42aa3d85b6816c9dcdaf1d51dc1cb48640c1c21ac81dddddfa2dddb7d8b774b60ab8a98af271fd1f5a6bd84efc588452423e9da81e8b21fec9182040c19ffc5ded6cde182a05375ca9d12c191359ed88c8ad9df7989618bf9ec87a59bf562ae6d0fc36d391fcbe6e3b5f889e966f77c3d2318afb70588451cffa97633bc4864445166c963d4a74869ea1b5306fb700e37a5931938e79171c217ed90ef2fd950f76f7548ca6e40f998cac1d2dbf2ab2ec660d197bf41972e6ee5e0701ae26debbf0b3c5063dd6c4146e00625d1f796956e827be09a964e94dd2e3b485780fb5b2b798e3761730e62178ae0b97b52f12ea320a8593db11e1de30a5c32a9ff40f349aa2ec5c107a01a1fc10c9d4e11825f2b691982b0f4320c8c4dfc91f1c693cb0fb52dcf426996c3e6e600032a6a072c0b97d7451c910020dfbda94f271e1ca2653045016cf2d319e83e8b107b032021a70ece609c0db45873ca7408216debbf34953c830bf12a707841f2ea01ab155151d70b11940f9b1bfe22814b00d3f21662e76bec8de947c74b991f03b9f4f539546beed6d8753902f25ff4b34910a455442c0a7f82688b94aa9c0f67e6d26557f0d19324206ad3c26db0b84c10a5082e6ffa06d95200a0e19a7c752d70adf3754c88a8d9e0e38c3fe42aa6117d08768a897a9cb3b145091ef510774dbd137cecf43b66312c7c4d9887170c8cbb8cc7473bbc265b4eb1b9ed3e7990cca3bba68b2915b7183e5ee10a9dcdb6104f94e4c5a6f66183c36f041ea4b9f66767bc75fadfcd80523bd6c9d85183233031c364a98e27ac20a2f5c9c361b7c99ebc83a00f91489c3878c93b01bc595768ce62526470c0b056c430cc7d49143fa0bb0f51240feaa4b4a6291037af5a74e536eb354b7cebfd5af4e858cf95e02da5ba14e1c5e6f12918837c5133ede911bd9506f039c20c7c605a6e902b2f6166f493f4b51463a0130d4ec5a4e8e0fb184c389e728909f5cd27448d2e9affd5f4e22534f1266ce2a7726b96b5b1677b39194960373ef4c152f050970697c34076dbb3c154f3679acf271a5262cec49d8888f7b038a2087fc2fce74c270859fd8ef6901a0938ef760df442d1b5adfff082146a1d7d4e2c29031251e88d2482041b571f32cc25bd43796f62fe728025ca8a077be9cbcdf55fe7a3f695cc36ce411c04d589778eae450fa34f4cdd79caf4b9e93247bc19d92d576a39d37ad6be229180946a80a9954cd2007f96f9f1837aa4e3900be48850847fd593a32e6a9dee839d13157febc4b49014392d51e50a15ebc23b7545c0c4d3dc318a8c8c8275c5417b59d072eb9e5d904d329c350bb460f8c27d68f2f4bd009f7344b677a29ddf5d2d6b2f298d8f79cbb23ed7733b51a7273b7008aac2003ab65407df9c630a04fa9d510e733f5f736a5a5d82c3f3550de320cc8e51d1ad52ae324ac1bc16866fa4405368b5d7a812cef150a090018d0ac8da24bb4cc1468804b1497e10fa977152500096a9cf9d01e926648c5e2831a8d544e8b173b6036540d491958475487fb55a6c08e28075d62b318a2b47f49cd1fd75d381ea2c08dddff607a685bf26ecb8ee85f2bed3ae0cb47718fd3bade59df7d741377f6679e375925c008d44e5a97694b41afc30b920491fb99fe1262677bfad4c049d64c4503ec400e9da7f0aa210e221c75b13d36224dbfaf58941e9862116dffcab7218028db942f7836afdfa4dad063b389a8519c28c971f83b30bee140182de3df2ac34622d4f8bd77a779a9b4e80d4bad3595f1e2fa9373e75af78ff5acef6fc027c6f880f613f0231bcc2e7701d67bc327446de357a9e09e54bd7c981040d7b9e89159b7a5dbb72072a7c3912ebff4e0794c9d804d92efd1399febe94670f700651a4e8cd20e148407e7562e6c4cfc969beec72cbe782b23d19b6aa4cf6e74a0c76bc8e7a708566ad710bf62ab7c4c69e0fb6ed2da5d336da1cc466c6a162bf2c61c414229f07394baf800e2a87543a8518cfed9f520e0c23ec991961eac18ecc2a97043b998bc9578b842daa2ce93a95e468f99a30e468d84c1a04d5c934b19422459197d66788ece1f52c1e1b3fc70c5304a0ca4348d83481cb31b3f959055ce2c04e7bf6634b83bb4eb5edc5ff24d3b64ba0912fb796c9ed1a36b44919b1f6411b0635ded17b0362d0290499e12d8cadc9c2532108f77ffe9f8cefd6a3a08a1976af0faccafa964a5402431cd08eea9c920851b899ce1be927cf0ec938379ae112102525fea7f880983115c90ba3d2ec45b3b4e00e61481c898ebf3a1ecdb6393d334b396cd9af3ba5513266631d238fdcc1e8ac7592e08963e3b2c81d44882bbc7b7ecb776fa6169929fe4b03476fd836dfb557ed3dc25452a1f20ad519aa0e2a464207617c8547aab9d4dfd23e8d08956c8fa092e9aacd35393d9912750996270ecec45c4b5a8563268c3296ed07fb35583ebfebcf2960d36e731016e7e0cdb45e6f514634d7a50d8fb3baac0dfe99c11d7075dba05630b8dd2618d2ddace049529d3e678090a449438502ecdb174eae13555b4b44cb9d6fa6c804a6abdb14b16802962577cf34558f547658abd7f5b785bceda48964295ac04b129158aa9c395129135e01fc045d5dbff21e52be6b8b942b6422e54c887bab6ebd11054dd08497dee89e7772a9f837ca56f06e765518361249bdcd27443437cdee6787eaee5790c066f4d06de6431781913aa2fbacb24f70eb5428c63647320b7ae6ce36b7a6ec808211fef221058dcd6480166a3e4b13c1b54d97083add364c56f94e1f8fd72c269efb1128457681946edba721f604d797fff37100cf49a2b23b6ca88a84a690354192a6684716cab4c55695e13607fd13fa447ea529aa1f26134df52aac252dd837e9e03f28532ddd121a76a0edbedc520b37a7edd42e020d4baa9542cfc831b9137b75d2b86344aa81d7130fdfa6838e3c2b130b83ee2fcbcb0f31330e30ba122cfdb2730dedf8709d79ddff2901b90bbee8f740d01e7df9b9f98ba72936be090f0bb3eeaec20950634870a74db8db892addfe49b4b51e475537b1d4442fd4834ec0553cff44af51c142b350baf9a4a132cc27c86d6101c72b9ab0b838ef7e740cf3ddaa70a340d0ce4a236af3d6184625157b36111897fbce74746621fd6c68d0c0c8e4498b643f05a69bf5bd311011ea45632fcef4d1714f7e4f7514928e71e23653f4274b8e90419e5bc248879e5ca28fc11537b3b7db41ef2018ae306261e43c6cb297f817391ab8835f4ca4dc76c3e559a3765b006b5ef52ef0cb208be3f6cf65d1531d7b79e5ce05bf8e17393e06480285932d444a7e1f3adecf1123e78ac0ac1d4f0b940a1b266bf9455e65fcc8de70afc93e575e784f27a0bc74c9492f9e5334830f60e1ecefbc4398fc3eed7f07b911021fec0d2bc44211e6b3a79a2d585b5738916dce064666e7fde2613433eeb22dd4c0e4e5d29a24a2369e53350ca1beb0315bad2c2b65fabf18d27d3ebc5278a7985a04b60da003f961df4e898e96a46fff87f99c67a7d430e6e31fd1a153c18f0f2ff2023b75c15f5672c7aef837435b51307b3996dadab45ba7d954d9ab7358b280d327bb6940f12491fcab820d3cede259a76153f7db692d5cee346807f84664e74967682a913c99ed5980dcc25b7cf3c4d98303189e8a84c7271eac3540754b37f1871b663b279de8817ac04cc450815f8c119854a2ac7cb7335fb7f0482e833c271bf2a4aa1b664e9655e60de1d697ef8f3649c380b78e617dc1929a089814e6c05cb5ca8b679f483cde23dccd90de3a7d038e36916f5aa8a3acfeb63720182c94dc9887306fa840b8aaf1087bc83b6523a947be61057b8480dc686106f18c51391397b9cca74b08cee6676c64198f3d28ced59d4e8500d1bae92fede0aabb12160c4b2cec4c2902a8124cddc658c9d14eb5838e61c42d8fe6dab9535903bd0034f2e6be6fbe93d42073853caa060d88703f702784fc299837f81dec3a9411a202f15a574de2d9c040c48f75c0c18b4b1d2124dfcc2bdb081f00aca89525a6d0b47e1ab13273ae67b0a9f84740718c605aa40a8b9d8c670734a2b13d225e7901aedb31774e6329ec24252d8cc0f24e9545feea565e157881628f8610995d990720bcfad46d9b57225ce9fc88a2b036c773cb135608b493aa6fc218186c16d0016e4df4c20dd6eaf32ac7db90d7caf8845ee96c0e7b05f4d8e91b2394155b0333a951181e57dbebb9e25cb6c363bf0a6b25489a824ae407526dfee0e25434a9e9be0568eab02a9cbcf0679f9e65e5a4e6c3d37d55c15108c13fe30679e479f3e12ac0ca195defbe0f8d6334fe31447da7ec71772a1b9fce312e91c6574cfdbd055ebb6c960b8af7ac901709b20de29705fece97c1204850eaf7658ab36515e120ed7d1c2fef4d6b1663ce7ea30c14c3c7b94605537f4e10e750d5f116d4b2cb080d8b4982716477ed98227efa56571aecf0b0e3e69deded91588feec364788f691c95855ebe570133f4bfa488d48ff3ce9f3470c35845222cf15c05b651aa032cdd800ec8859e0792ddb36c29f304e0a869b21b2d822f790516683509186fbcbb55a450923df6ccf0a519977d490bb66d63febd4c08fc2923997645514a9287ebf8e619ae031f20e3829409898fe7e0a941131e48feaa550ccd6e6d4165d3ba939f46e83a0ced8e4f69f18b909887515ae9597a82291b662c4405689a0e1fc8b6c6da1b77984eceaec4670a85a85663d98d090951652bde487a6cd9281d85b4148501b8b99b6882a548641f32aa4d8b1f58e38646e8417ff401f254e6169047007f1febf624bc79dc247d04a2f82d28b552e7ba737fd5c939b25cc393064296948f76c904544e10900e6559850e336b026fc81abdf99c0937eb79e3c043871e4a3ca2cd76436d07823e28b35ea2148c82fe8a16906c9d6361424f874ecd73f2e90adc339470f79fd8becb128d32ec89b5ea4cc2a8711bb9c192a94d803b1092ac751ed4ed59ae38a187e1509883edd5d4c22cbcd69e98ae4258c1b16ceafc13124b55af6c80ae43315abf962064832ea8eb19390485cd469ea33066e1b7c351f49c3ff0fb92b6c5dcb1e892c19df1c3a41ff5aacd5d4531f0fa2c3656a666badb1bc3ee37039b25eb2b4458059bd77049410dee503d46eebd6bc99807a226b24cc1d799b54814814f6491663e52d57a7ecaf20f20ec265984263a9d51b9dbc3bc4fd950a5cb299b4b4f9dc8a22d94681e2ca70c06eee223c9048223ffffa6c00603b9047c6bb9b42bd1ab535d0ff31271b3c79acb003807597269aa92565f61f66c1e735b4b568bd833dc5773b25a0d19e38ef3089bf3a28ba75615dae1afb942d708c4a25d5ee40a530d606d8f228c69f3813e9cf3e33b6b4050e7c12fb1dd2d78538bbce1dc05f7e994bfdfce2f1144a9d239789cd0931639c8b1e2080422bfc3a9c8015619b07af81fe029616f0fa35d6e0b71aab6867cb889c45568a25a74e8359a19668fbae2bbd997e9b0e0bfaa46f8ee4291e9354b321a9bda02e26b703f75f4eed8cf90c8257316f8dd807a47af60173a99e01a781e5487542d4892821aca072aae2e38ffe98576363208dc75b2f13a2b0d9365d6f00c7a2959e266f607d9a6a7e2fc556f622c88befeda863058d1d85e8102a06c2cd679926cad0e6fd13c6fa95443598e42504468e1a406ff0f493d39dfe5a85fdea733194d7e258dc4be0922697ebf69e00c691004046b5825c508348c67d183dadcd31966ce3092d67d0a64fa2a0e1889cbab0298d990ac48efb8bf87e5fca2db61e2a66ce6dda04461dc63f12a7ed730fe4ebd7b2c08af002b6dc4d232a394a2623727ee3f882acb36d92d433b7ba4f225d1906b8948b52ecd630c2e553791b9cc92a44d55f31eaa3f36cd725ace97e8cffc7587986a43af440550f036f99f76fdb58f04ac35ae2bb5af1783d4a9c509fb99ecdcf4034b8c748d1f0a50e00c85a39ad5df731dd2e003e3fc3142d7a5bc8766d5ebacf843d76daeb00570ea0844df34843d520a8dfd22257635703a173c60409ab1081aa70ba79c8740493546573a2f839f852d0b0b97f8f528da9b824574d4f0d093a4b60af43e98d5a242280668117c99c0d406a3865f8f7f906b2046914e20a4b57a556f7d025e8175382e0b7c40903b860a626a7af698ab29711e81154b9c1a05eb42af16ff2ac4e3d12e3c2829f2a61bb30f1615ee2aad64a906930928d889683fea61d32775a0ecc3895272e902495b1fa8d70ca83baad20f3f36246d03e6f25daca5aa81897e8c60c4c3a55fc44c1d788927abac7226937e20c1a47b77015348124f4a3029a633f2b0b65b1655d53956ae663a61f7269a707a757c80fb81e8b96a95bec5fe3bc1c3b1b481d9608a65b08a0f4f97c991e5335ca23167df913d67929e2ee875bd25d84c678681d463fee269333bc3574ce62a9c0acf0408b7a96ccf2d5bcffb67ff77e36e894be70cbbc139907dfd0e0adcef80ffd8000b1797bba7f0c2e3d971553f716809640949768d4dbcee0f3312210f4cc16cb4aa80649421d890e3f014cbb5e742239d84ab6fce5a5917610485ea1cd29078a701f5220b2177957375f70a1dd17abc852955027dab30b6df160b380e3fb9e71d9a5055245614b6f51fb72d64fb67cf2363fc13cb3f9a11c64ce4c0a58a7293b3f5ce2929485d2a82f5a60ca093b36c15f39318da10ab9bc95bc5f5fd714005c119c56e225da850809edc98a142fe004a9709c81a25b8b3f140f4d3e5309444aa320b2fe925749143978ed954f2f1d21f8d4a91cceb39dd51987a797a663237eea1053765fc10e673406dc4ed28dde3e2499f434414c1bd4d20b78ee61a556da3aa618edf01b5680e29deadb191f8dbf6b5af7dab05bfcb6bf68d87e5233ef256d7c515e6673b1bbf2e9de7da2c9b322f597c398bae1f09a3833f2efde1f4dc0a029186f2c712769a022a2b7a692c9564066254ee3bb6bab0cff9bdddd25fb274ec194ad1ed35950dc747f0edb5a5ac74307d92405cc507c08c5669e8e5110828a1c793199291ccea3449ae3a4d7beab23e0cb3dbb85ad6476c418aea6db0f84d82fed6c1b26f4b9ddfa6beda4d7ff611ee45c540aae363f56cef0e462e7e319c776b380239cd55d72892ec55cfb41da869e04f2ff247dc2e95be9038602bad2fe0ec213a26f3b4f21d0d1804fdf8cc1b30b8daf9d19315efdf014a24d84f62bf6940b2451db0b09d5f8fbe4dbef225dc63b699f976fafb34bf8422600166a40e50c3371d91ed3ee41554abbe542053dcc7414fd06e60d14f4768b762af50179d2e2174e1a5df1e86f546aa8c7448d9ad3cd55e281a72cb3629bdbf7de41fb420bbaec530747caea1e9d6d14911c8fc2af47b19227b5dda2de38ba4305c18f41a04c6784882e48a96a1a8a6914df33a8792886621ec4ff33904783cb016a2a6278540033c0f9e159a8c3d0c5ae6c7929efbe88a1efd03aa372ab2c7fca354ef5e3fcdde5b6f9cdb75bac209be1de9cf079fd3950458641496b9db87c1fe3023bae460d386f88160f86a9e46aaf12c6466383bcfa481618f2f748f8ac5970fb7e2433cb23643fcda63a95bc4d989516f749a7377e28347d10e4732dc40279d5fcff85a86a9071db10215a85013c0e84cdb5178e78f551e808c41edf45c00d594b284916ddb459ddf50fd079d0f1dab8969ef0a23dbd81475f1e37ee67709496c4cf7d64d17c0f105527f944d080e39aa241ed36daf6910e11a6bded64fb7879b7a0518080d7d711bb3a6335fae22c8681e7a763bb1f498bf48f0a0b323d418923d92af5321f854a70be290e55342436d08852546b201425b9122ef97570e841082f27cec6d3cab49a921d59a01820f791bed4e2c7b1c2d7746158a6cf0ac09ac9ba67aabf9179e35c7b2d7fcbdbc0275b5eeaa5646bf48cc7e49e6a43e5e1aeca3aeffdacac8a1bccdef2a6b83714f599f872e4c6e0e8ca7ace4c58288c209cecdfa621313a2a564fdcf674b3b569a54e1a36ebbffe74f4069a4242da29e698656ba654f7544afe99a06203b1cee213906360243bf53f578b1502ddcca6db4654ba54a995874665ed19efc69cacbebdb723b59adc05406440fc238646cc98bfd1ba8223fd4a7936a23d4d442eb83d164e47600a93fe94ef170b681fdc0364dd4ddb269107b5da3f64fd95abacca29643bc92a052af0c7000390713cc25d03d6839f544c3975cbe21742863890e58f42a758b487202f2e7c954bed7e88a1c648742316ca43bff5ab418b8500471629904fac96c3ac84b90d2c4cb5fbf9a3580715d057800cf5c2881065b1af71369549a808540f5e23e850be48a6f00e54e1109627d7a629aa11a29024e5e5e9b9ef642dbee14667ac08ca0b988ff489d825fc31b8698580595501329594cc1cd456cad5c1149b418d4919e8f71f730d986f7ce39f9d92eb64c764ec9f61d4351a0c671fd0be2246db64e5b22835e3243396fa8cb8b843260d3c99e0732794f0f84c837e3b279fc8f27a304011eff486d2d17da033ae9a5c7bfc7373bd490d92b0d59f91f276319162aac9138de1346479271948b6086a51784e7ea40670210b64f0cb3b40e48981b65687ef57fa516864894db36bc9d0572e17c21789c94365554c0506e8ed6829ccf5ae9da91e668bdf94dd4c5bf8a64226476351b5e68b20f583532e5e0866723905a3f1857bf626923311df3f8fdd0ae8973a0f21cc8361122fd735594baf79b8339c53f0c902749a1504b206193a29316b5e1657a5dd271555ad5c022ee3908e50e50b44000bd99c2a18b8d295932c2123dea02266501e45477620e90486b4b45879d841e8e0825b377b58b8d719285882b191861cd7905cb7bab527268e024be4b0ec435cb109c3abd50d81ea76f5893817e49832d530a01e4973d2728469297f0a620e8e167493c9c9ab1acba87805a9e2f88151cda1827ae1872d57eeaed7153fcaea4317c205476609521144f38f4ed36e9692adf340168f88f6917a70d7b0cece2242882b96c8f9c27869aa8efb128960ee2443c33371ea8c3c3f0b4fa892e0528b7a8524ed37028b21d258cfbb0f78d6b4c6d445e7f341871f841c49ba568f0b14ba1d3ce057a4c9cd7cb41ab977f32bda9dc8d0bf2c4a3b9f6696e75ebaf04e797bd6b9f917931fd5c90d1661901d6f758fdae47d167067ca82208b812b5efa74b1fda2c30cc33d404ee3c40d2c11d677a61fa56d318713c2382700931db1cbdc5ce1c99559c65aecc1f54ff5d9dacbf62037c00db586b1e77e2f393be8d7058fa8cf96b42a6ccc1377fe0c341d8ac5517388af5ee7be4c0e94254333ec6cf69104ed901cb2bff4c57fbd3411dcd98f2d984085f010963dcac71248701d52ee99a0df3d6d36a67a25a021c55a3d03afaa73ce53b2dd9194de9d86f7955aa21f2a4e259a3e1f6376814bd4bbb2eac001c28b9da683c47863748636dc464fba4539df719a1231f8056c86047fb684a9190e30c52fab637aa316f28cbc3c597dd94622735b3f1cc93d44578ce14e625d83d763ebb211d3d0da13f1774622ca475c048faec6165567bddf1f387576785c68c28023641ac6c405b69f7556cb3eec9f58442ad93a8e5ca6bb8b2231717a56a5aa3016db7c6c2969f7a89588345611ef99817f2a6a43db2a5bc462bd97eb54fb3da8115404b5eb2939d9e8ca30c4504bf14243d85826fe6d5d4770939d63dd1d1784455670b07ba36543f567afb1a33083e791367d0227afa0dc29304bba497534688ce5e49ec43fa8d6acc181e7b75deb3fedb04b5d2e95fa54717acc89f4ac88577f76166c86696cfb29a829fc584cf89ad148f0a0c3e728492dde5bb4af0019fef54059635b6d1ae2b83877e3760021e014874cccf9f899bb518df4cbaec9fd8fcbc97b1dd24d02b868b04fb5468d31a505ddb944803f57dede6bd319d0b2c772084ae75120b063fa95620b587ee612fc3100f5c8ca0b784ccb898504f481e8ce752b60d8297e9b32e5d2c74bb0792f6112d626937f22899f32f7151fd3a5accdb080a0655370f226ec5eba2854ef5079e790a87b1c04b3ed3a8ab928559df7a179cc3b0aec662e6956139d73f2579e19c191c007a434c04d06e97272f2ca05d2c6f35ec493ad7e15ee9be5cad146558741d2e33b8a049502f283140ca83ea8907474ca7527e8bfc9e6cd8accf982591fadb93d62e557fde1cdaa25a7f890fc2143b40f1ccb677275203e32f864faedf647bd18662f6c0d3623343f2b1ddcd2062796f47e798611aabe3aaaa60e3302cf6b4704ae3679bb3c5d9f27b758baf2ce0567d37405d43de38aed497821b92196df79741a9bd759ac3c612dabdef63ad0c7ca8210be133cbef16fc8c81d36cef25e4bdd9d2f9fb86ea83a96f432edf9fa9d2883af3a069bd8a70d3311cdaa40a978c85e52fc3d1f74b584c6e9a593bc2aaa84fdeff7f9997be24f945c434682e25178294e300ac0febaa64709ca446fb3782139682aa96c93668d892d3ca4a0174d45f5ca09db2aa371cf5d770ca34e4d7507d99db73031f833fd03a6c61665334341032b8bb04903042bc8dafa74e1559d5bbb559b45eed2a789e5f4d1188f2a985fe282c10565c277a70870c711aaa966238013bca1cd78a2f6faecfc05d59062785f7fe9198013c03ac88bf4432b61ab80c7ec0185185825e95254125199a4c9453e5b821524fa74f672983b92a2ec5b45747bd03c39332090e28306235c82b8eca626c4f7cafa54f13937948bb62d413ac283b17f13533f5d9a0f6db75d453ee14d9c6b447195e42e5eafd7c48c2f114caf88b1dac185dc1c69f1f5ccdb52cd105d78550a79cd8907548624e39f11487fed56cbee98fe3eb6818802928e7b19351be2822f293eb997d46d3032de25555e740e6955f96585fb94e4f1d2dc341d48da83c0158cffeee51a20a2179bee27756f3c7ee8587f23ff9ea21a8db12c008634e8da1844d041d6a421f73c21c855ed3e1b9408e3c6aa1112dffd69b6a9404bfb2a3ecb61fa8de6c37695481b9cd413f1a5ebe88d05607e886e117ccf0128c8baca012c0b29993f9d94914306d2b13823f7fa66a49f826e8ae18e84dc0ffcda0f21e413d9217c0fc0f2d799d486deb4749c805a067e0839981dbbf82df334aff361a7c5d681ecdad537a67883dcfef4ad48f3bca0a863ac644a72331c697eaf4bda1ba3e7916f80dd15a04bf399d4ba3a4db37251f048391c3fcded11579cf3c9dca812e2614cc7be908e5e42bfa01153a4cd2f383bdf75011873fa58fb25f0aa19ebc9b5282ca193838a4362bc51ef01730aa85cff9cc24b83539a775a8bb894e8588732ecb36565196d7649c9b36f3a2c04772215fa085bb6904f5138ab6429c49eb4a306df6629870d6b0b9df2865043d43b935d66672529fb5749d806dd7665a50d19674a371b35a04c153c8c438bc3acf69b3229ed163b541466d46485da6c752edf53d401c582ad166654bf5008e3e114fe5459f9fba9a783ec6b912715dbf947aa02f285b451b2adfdf3a41fecd73a3ab5cba9a7bae32907549e25d033cd2a2d124bdb6311bc279db80f302fa0b9087f38903db8052c1d55a417f5abb4ee4832b153b7d38e455fe8be37759836d79e40f56395e4169bb6b989d49fc50266070ded291a1fb31a83c9b2f2b0434e76ce9be2868591cfde30e6fb39f7aaea803731502bce897d7c216004c806f1b6780ff962a89810e73c21ca54275e5a5555208b278670fa45b7c4492591a0fee8454a10e030b5a806a63b5c00a755532a83324b693a7f6b1d36f9d3d0c3284d76009d7ed508e552ed82f5835d9097dd1c79acb0ed971c5ce2415179762839e7b981e393cd5fb1cc999a23ca7dfb8645908d9ee13655088cdeab213afe565c90ef3ab55670a233b1c0110174276a792bbd8f44f8c426a2844214698196d800448825a39f74f0a941678a15486e7d9f99e78aa227a83b5e39d7b206f5379574dac28b5b0f05a25c2604c95b1ff0b98d60669a55cbe12b1922b9db262539269a5943e4d24ca112cefcdf9a4c2d77550303f51316690be0f659555779091a51c8b2afadf1968c23a9694c33b75ec1053c9cdd0911605267f10dbce9020d74fdde203fae86c3a8950e45e28c0ec2334bd7f0ca143cea3b212b8fdceda3560e3316c6f27a5cc8f80ae6c8dfaf6355aafae4285fc30bbe4170abc452675fc1338dea999c8585aeddf28f923c7bac478f985bc1a21419e217a65c1a54c36a4315a27ce71e85786e97bddbcd09395f10a8ab5a1d13acf104ddcd38356e8101e2fe54a5520c889d13de18491f2cc86b0210c4d88e21d207b77546b9aa30a06dcd66aba6cd5e8591a1bf35ce038ad1d60f052f26019861758861967563a16a8dc85777717490f50923fb9de7d1beb69976884f1dd15a960f49ad325006a8c3fca0033db513d6b98324b28bb251629ad6ebc42c516311be39799ec094d15778600c42c847b5bfc10bf2609551d14a4473609a5f982a7e07db78c0f0a22e6e7c8ffb88c5778341ec6cd7151b9c7f316855c5c8a6818555c32aedc5eb24ba605b2671e1b082964b6e6f7e3320a9c46fa29371284dd9748b6098fda6b6b643b8e065206fcbb338100890a28263d7bb8892a95a1a33f34b1d4a69bd72e864c385a301233810818eaeb47c0d1fe48322709706658e8dde8d0944bc2c7797b843598099dd624e16280b56dcc44aba9f24fcfb78cf4d7e351bf7a012627b628f6db2aae76792e5317b143de1e16f2242d9bc7b52efe2d737a99546ae4d4886c5e5b47008d42ef1f41006dd8b469f366ebc8e6e2294c21f3240ed22f7ac0e9c1e9ddb9f2b122daa7cbfa1ddc5e83eeb5715434bb81587f63d8ea4c9efe7198f24b5b48aa0c0c1b3b9fc06794473fcf29c87dcc31b3c9215f43c56157072331b600b72ceb0c2d7f112f0970296ee7527c1babe0e38f870287b52e40fcddfaa89cb6abc210b5e2516bc7cb8ecbaa2d358fff8e45571055177b6dc42d90fecde320d73b494aad8aab61679d93e17afba1211a22fb81c73fee45ce38314c6393c1e30466d7a0b1c578028ff7c50f3dae9b4ea47d8e2bef091e757088d8d4793e632a509505b99064abeeb075d7324014508c949b3c2fbe022ca7d48241de1eee754f20bcf8460f51353f3b626dff4cbaf89426ab95e07efe37dc1eca66418b7359b896ace239e7735cc223e3e448139100d77bb06b1dd6368127599faf0dbcbbc531b3b5f300d97090cf170d0d7180e48925d2a66a363f949766a9904bc00ae25da27dd88138c76e608e9d36b05688a4405aa62154c4982401f9402c273b9c68cf8ed8a9424b6a0c808fb5d88c6428225ad5db76a9d0ef4d0b6d492f0f1bbe4f8c398629521a6acce017c5c34c98e0874ab7422e042f00465c27fa412fa3053fbbfb8bc12521ebab7b8e8422b0e6732f81b7c1d5270dfb0fab81365ef026710f82f3aa5bb3b6a15d1844c3baf67a59b7f7e478eaaefe53c3dfaabec209295e45b47970d0214195e786effdb6058f870691e499b8ce83882a8a6f9029afa4ac86aaeed22eb65f9af2ce9aaeac9dfc64ea71994084a9155b5d7450459ea1b35f4355039a5b5f4904e3aef1648a086caf04400cd6b1cffd9816aaae5e8824d5565a2c616a105ff181713e63c534c22c548062243acd0b77c52fbfafe12a55529e6e60e34ce8201d8fb05ef1f5fed18aa0cab8ff9ec8c5e077966a07b96cb36cd0b08afa39914ad31624e290ed7433740c8b901676d655063c0bce06680c37612297861d8bee557aaa349a79035b9c668ae0f35a984220f6f7d9ce0448d0ba3a182cef1aa647881205ca6fb25a3842eac2389cb231fa8e4e39bfc01de8b2858291010790a0081c01e9bb44fc76e2150316c660fbe7a404225191c9f9e7c725309eee6b6539474fa4a6159919b5c03968047953bcacf5d4fc1136e296d6707e1598a3bcc9f7e5855710044985f68ca8948c52c9d42523e027f47e96e58044e19de9964e9e4bb9d5bb1cae70bf5c57d0921b5cb1ef707c00f171e431399abcbf055fbd43f15653123e9f98efba24460fe214b30f2b89de2676520e43b37043ec0de815a5ae409afa50598fd3983f618a106339c53a0cd9565880eb03e7bd072f5250a0ce861884797d3b0916e1e1e31b4d8425ab542596585ff8208bbf679c4d28101bca562a1da188f14072327b7b853522bdc1bdd0f90e05b7898396a0ed5c8d32509e9b6db05d265c8f00cc6927b533ac31d54a4e4ab0cdee128866081640fc9bae96fb91108c84ec924f63c0d91d278ef6ddc82ee16c865fcf1fff6f361880eb986dba599569752fff7d378cf69122f0dbc628400cf30eeb4eb3c4d8a7efc5c21cf0446a128d34e85222986dc1baa987c762e5238df17f57f067bc5fe1ecbe839efef9a913f828e3029f015822b00f6836c7e7ca31574006ef11ed12048b4e8f30190a6e9a3a8bee220254696a350b0281edd97f42e0108ce8532d83eb7a8640601fb8d84dc6183a4cc32d1058e217c3dc870196ca51133241ac1046d37b1ae1041d301fb6528e270fc4d9ad7243970ca12610d29b3ce3167050bbf4a8d5f103bec052044684ab88791ba84834188d7f36b23fc22135bf600c33811adf97c94b50b1a20fd2c2fdbf4d39a2e6096f8e90c40460267485f604b5a2d93c28c69e47c9d7a558bd9b24eec959382ca782aeac96813714b98570b9d03935472e4e674db5ef4430fbc69958eb19f0e9788b0321436291d3ae140ef8add8346436ff60425e438461d08a25da6293261b6657483e38c0b404f3d79148ba6a5f56a725d43ce7b4865e55d95b8ba4d6f1837d6acca22126dcde3b37251292a1996ae34269a67d28f3ab1364316071935ca169b370e2e29c09ffe20baa5f4668e073b2939a9cb351102a5c5d37a85fe33f9953517448bf2452e917f561c541ee01b9d23e423f0c1709a0c58d56ec1a3da4aabb6a2403712d8fbd9432680219ef1e1bbca68bb4098c07a7fb4900f40196086a32398bb1fc4c5d570738703a8bf1112a2cd36e1b44c5b8834300e7231ef875f0e21ac4e1e8f585a0fd309f16971b5fc47cc0d217c02b84a5d1c629645d6fecac9bc762ce1887143349c6be444f5af90d8901c8fc932158ef45a7a63de4ee6d9b9cdb69368e4e8d999b8ff70b0802729fb2dd2089955877a700964aaa392ae373cb530ec2caec3a2f78c95a54028fd5a0279910f4bd45695c8afd33a1d4b3ca6caafb4b94d7d710899a48893019c13c57ab7014ec634c6cc4c046b303e6aede6c33c20b34204f7aa22a24b3a401892d55f8ae4e917665ce3f3f14613b8197e379b562ee02131881c5ee5ed0c6a0a83a40a6f7937040a9db5e6387b9b08f6d0009615954d46c520ed58ef3d1cd1bd27b692b846d53713fb46804d90de18f7828b410453ab0e4e9494344aa93dc1f38ec955f741580f19d46a232f8c786ec57d0c7f0c7789dd6421adfdc433551766e3c7071469f76f7bfe85d4af56d8e0dec970817146201919d952318284221a5ac90dab61f2ef5e40fcdcefb39eddc31e7948b1f16d2f366bf055748c79f0327ce017aaffac6148f2f1712566bdad2f2d9963f6f8ccea3cdca66fe75f574859d5a7cabfdcfd930ae5fefaed4edc6e617d47134fa124855df09cdea911413a82f0de0a2b04018a635e64372a4ec0507f052a6689840cf2fd35645c7086cee78af0ab744bdfd87d35ac4651bea2f4539f3d8be5a8fc38a0798f1d4e47bda90948bede03995e77ce4f578dd24c6ff761b65e5c70724ad8311aa5b6899ed83b8e3648dd974df1711e6e3156194c57ad961a696c48e3f25d261ac70b7ea15a15df4c0a4d656621fb0ab3b541401941df9ab6f49a749827c0c8d6cb93b8f5adbc1c082984d0ca3e9a1688460621637f00b914b175c452466de76e84d0a5e143d08ae2c0bb292aeed7a16d0f6f31f4ce88024ee23db13ca0a52ca564750471b0251d06707e1658fa4a94713b1e8de4212a0b75e11b88ffd54e3ec1c98733bc8a46a8185535712a0826ddd2fc9920d4124d5a452d2b66f9e8ad9270b40b11d8eefcbffb7725d497e202a471994c23afd069fabd259a0c75e45b687e8c5da751737cb6e0f3278075408b18f53edb001b8c0e5d309d059d676162b9a3efc2c72699502d933602d75fcc25484961d392b53b8d568eb4adf0a98cea9fe966224eba20aa583edc4061d9b801028cd18b0672739fd341e0d99e90af268684caf654ee30fdb036f542557758d813d5c708cbedf3a05255d800506005e877e84eab318b0a8c0261d963e1fd3baf22d927cf9f9eb59914e729b03b1e52787fba9b63e35a7e2cd573389753972fae1d6b7f915ed16082c1dcb29cdbb0419c3be1f9cbcd38bf2517430b54ebb99e1f1f67b52dfea455ce452fd70941b2327ebd7405dfd56192679b0c6ca402bf8ecf74345b8075a58ccf75c7bb811c9cffb7a3b804aaec1e283b18c8c11ff37319e12053e33b9d906c78ef5da9ee64640967b3793d7e4fcb69f2a6127cb97724d7648da3f55e210657106a85e5d66bdf735e961375b25689fe1ac61d467e11109752b144dd9e8ddf6dacd42b949ea36fbafaee30099465243deda3026087113e8e09c856dbbe6ef2917c3c5aa17fa960496a706d171404f66193a037e02d282b6288b69d3312ca1afff872009e47ce6f523d351d0a1ffa66274b766a2d215d9dd34e9bf437322222604f158226ccf3be6b7bca35eb304152efcdf503c3a485cc99182e15f44a7f60cdaf81f75cf8bae81e42aa7e73c7e2c9305732e666102b9faa2cc99378473454a89a4202eb6bab63da083aec4cc5b176ccd0e44d064801dcd729abc85552ec064cd7883d34474fcbd008122d4b85c6e5611bed8e41ef76b6ae2670b03bf36a5ba77515b6c0072911695e31a673db5e4901fee4088cc88c05c32de426ec945213c6d90aa44c96e78c4135bd73e902704e0e9117187ca67926eb9442e9efd71ce2b97249da02409747229663260fe33e1ea3b8028037f4979d071858a75e6e2aff5d4743de600d782da09759a07df8ba7e73cfd91716be2ebd3d52ef5483841fd7c4ba6a983393ca5790df6bdeb72f99495440311548dc3d3ba0bdf524bfcd591134928094c808259c971f3243cb3e0afe726bd0b985fc5b966c951a3381aefd948d6dccc88f896c5a8a7bebc6497de4805ab333b42c3315341f90a8da01dbc46f6329403a871e2c02fc1b954c1216f702cbfa9375d1c5a4753c8256734c6b42ef17a45d7b217156cc2f43f3a98783cd44ee4d125cfaef1f1c708dd2ee7b70cc49f0e7772a064712d0b68aae6a2ebb4fac29240e8b78f8063cf8ac6028bcd9a52c076da6d08bd229a943d97421a6fe5f3aaf008a556795f17aa723735b85f0ef21ad7123ac941f158488d5f2869a67405b444f6e0b71dc5b8da26f0d484ad05177e4cc145a20d6aa5a708bf65754e0783242e5af6dc6ded8a3c26cb06c298787ab67825537ccb94d9d67b6e77ba3f9df0f7cd3ecf94a5373753851a03697277a6972459b67690898e29072268ddd77ebb8e100940e788ec17aa843896a92daac19d30ab81ec7e128a732569ea122afda061d4666394027ff747ea00a41721eb98e63958cc8bbf1f2921397d8e8daa9fa9bf01637ef02a15c837cd1da9e915ff98edf4ebcb8e803761f0c5f8e16a9839b6db6e25071963c4e918e16405c72703b3d028daa6973616941d3bbe6e0fdd1849ca90328cd0995ecea1bbd38c844afdb8a2d98776bc0e04ba0acf483feb24dd9dc95301b864cfcebe95607c0a244d55141776d1ce96c5e8926352d0323f0da040ab40068290a5d86276950f1f27d9afe1fb9e5c01b2f0b0a993281784a25d74c3e36341a7bd52ed833afe09ececf412b46f364ef0633cad43114fa6d94c6d5d95b8f1390a9e5f7350a15d2302ab128160419dc21b065b6b4d8c1653a907d294d277c89413581ae62468e4ed269f3c210bda3e56b0f408ebd32ca4ce09929b61bf1d5b981dfeb9ef517dc1bfe1c538a065b46921f81c39db54e76c05fc14f51f9a6927929900eb1b36ebe89283c0d5a6312eadeb4d12bbdad61a074b375f9e538a759890aed9a7e13df28c633b09de212a22cf0af5bda9636881fa9be7f78046905303cef4f24e550e079901d3de13532e042e176c990b9a21316d9456a33e1ed733cca2d3dafe1c4ab4d0ab569970bb9ea56b5dae432870a7c96ed9952b8dc3954190f5e48555a7274225558f2e0a723eaa97a54de4c43ebf31afaeff6033a27531862ce39da44cf6486232f16409cc664b1402be4bd24d511db5a8ad92230c522d00d2722bd117b516a1fc8f56f471c9ab6aea7444162bfd51186d43d6851f3464115434a595ed1355f77895a724ad55a48f131a379be2502b1076695f4514ea9dde25a730fa62e22a9d9918260387caa5eb3573e5d942b457b1e95ba9da089e28f15cd674ad389b502e9bb94db21cb21f861b4ca4d99b337bae5f681cc7d2f8b04db206928e1709ca5a8af0bf4bc5eaf2eaf2c618c6b54bb0c4ae5d55207ea232063179f329b90abfcc923b87883a57222170973260b21a60978baa4303c1a4621ffd93ee270d0b79abc7d685346c448ef96124e10889df1c22d7938a209c13e135c5b6eb920f908dc32f4a06ecf836bee0ab1ef97104d888d7588f82f6310aac8ae247abeb6e082646e0c5162cad26a3c53b9d7bbef707e2aedc83825d69d6238441e052909428fe6d58564093afc5d55a2ff4108bc1009fcdf1186fbf2a1bfd13aba5857037a3df45e6e80c5464e7a80edca4c51429856b396d86485797766bf7cbdbdedca0e2a2c01c0ba31d2eacd2d9bff9ce16c9d540a790a12e22394b7f9100ce7feeef6bfeb61ea57dc54a6b3b704c57faaf13c7c629d985ff76e0b00249b5267d38490a80c50556d7657cd6f456bbd1aa308be28774b23b925427b7dc0676075bf9f013b62360fdb8ae3ed20eb28a1f00c8a93c94260b60e9f81c05a25960ffa8fb928e5749ce3b6ff65e75c82fdc0bc52ee99a450dc9e14d7c79fd870cff484f3ad6be7b1b54b97554412b2aad8c90d343efc40f1f82b8c3e1446a9373b1c2119a2c0581b155d6f6bf2bbf4a001e4d982517c320da83b44caf5125bd222b876761dc6a20ea2dd9b2b39d6fff7f1e1143eef1d2cb873f2e2b8bd33d7557d34e246203c6da86a6d95bd977de777a43042620e7b2b66c7a32a0dfb661720c58455435c0e72e480e0de1cf74b6a09e54f128f5a7991c223b8fed9476d5d9f54fad18922ae6ec9313b2fc4458584762f761cdde66f1b0f5a4fd8526ced4b4e4ec244d3724003d9f969fa6b13407b9bab02e21dcbc430d0db3751e884e744cba6d5f6f2908f9213cc1b45f933750f002e34c960f8cd7548105ee5b365c1b1214d2ae64090ce65ec097aa0881ed25935ef30f0596e758c8a48f364e8912c300cfe2b2870c4a5206167e34883a28678fa5fe9c3aa0ca77dddcc356a3e0976bc93cb5bf4f840b5e5018e47b9d7f68f46383fc11f08e5099a3393b7a6ba5f4be5ec7b096827a33e8ae15ce085d1dda42aa5411ea8327908830d385b7d132a389505fec121a4d40c69e67665b8d5740ee5d2faf13cbe1d08527994f0ab999ad1fb9be663830a37d0081ac57695b69569cd9bd580f14264257d9382162b2cdbab67666f26559ddaee6ffb615e609c91c9a39cc3eb367f2d290f2224fc268809226a12429b2a8853e5f2330faad0d32ba09418e1c10eae66bcf34a0ffd4d80e5749a6b5d15aa446ea2491b4155477d7b09474ed4a0b6c4ea8d82ea29ae55deba2997d312df848632d09b131f6e12d6e3022acc9ad42c8690ea5833f1f1ca2668950a7b56c569d32ceaaa58e1576e6faa2f60645152e5b086439e0b63a88445fa952a6d856d74374c1f6ad3fdc348143a906f7d81ebdac2dd1198becf22ef628fb903041997feb599604d868b8177d28da42e62214b1730fce6851b5ee3827c21ee504371ddd8bf99615e1e458e43177bdf3ca9d36a6c08df604f4e1f5d1d3515c7d05cf53cf162fbee54c5e5c397e24f9e275d5bbb6d1ea2bcc81b14c75b704d29fa361bdfd0ce4ab603cbbfe5e5449f9985757c8ca4e168f35a4d98c837047f7aece8e3a349f3a401025c23741605652e564472ba5cc88691a98faa5dc731441c9ee53893c3ebcddedd71d5414e4b293e673799edaf0e94d6241222add9eaebf39ccb7961f5844c0dfe21805000ba5b7ae87437250bb9107fd78ec722db16cb6e6abd07497b4e1fc3b59f264c83943d02eedfdd92ad7ec3a5f1e3b9f095ab7ce1ef836ca79a75ce978bad0a79c067d513e6378656d937228b0f9396791fbc29dbf70bf0865ce5f21205be241877917a3060984098f3855a8199415d167f0c1873c48f2afb63cc4785ac1f97cc7bf8f7f605a6b2bfa7fed262ddf940bc1ade0dad8a05d98b655e651e0f056f35c3a456e10a4778f363b9693c5629d39409f0e8f962e161b3acbbb144efe22931189399a7480f4609657e0f427875643720c737dd3a23bad01c59c5815d90f4e2bd6dc70af93f09fb81f2ccda956e188309e1467ab43bec6c9bb3a8a7ea7ec24820baadebc10666065c0b0026aab738f7e04e61165fd35fb86b58ba71000a7e2a4acd4798899b3fe0ad8a0009f4d0903c2623a5861993232ff9ce53021b9f7f7911842ed0ffb91094c80dcbc03c71a18942ed161b54113d1969a24654f3f2a21889ff8b10eef6783a36d10dac08dc9a5f27c536ef250f0d3a6f7e372da7b4e2610878345be162afd9c12c309e8086e3e0be7fe9fd9ae968a64e8b36bde47a733a5ecf7dd55a422d71c387d625e503d9f8a34e91bc4ddb1c745c6efd2ce368f9ecf7a0cd0dbb3a54ea192216ad05642b7798af0cf1c4be66f4ebf2889fdae2c886a4e7553c2f31962ba09fd24b5237e07a8720683560d140eabae1d9864b349af7ab437b84e4978638a111c976acd10ad56f3042e339fcff0f8d4813b2d01424c0ed7573d5c470b58dcc96a987eee13ca0bc6da1db80c3f2c4b6b4e60e66df299145656c0e2ac311ca8ec252c712e7ddaafa21a14bcac29cb23ae2af818c1d5bf9ef9a388daa2d6508e011a08a65a3dbe70bb9f9a791b349c7ecd97c12162ddc892396e80c21ba60643efd47fd6ce046c40a5e1b0d11e71521585de0b47f0da81b84f99751379531a53acb228a908577b2adc6791be2e94c46e4bacc997a84451db5438308f4b8b9326389a8ee754ac37193b48a1221ed65a13e6207c3393bafd830709b0f7118d2cbb58cd9a70434cc516c0e7f42dec2c868ac2bd08529da1862636ef211550c6acaf2c524f40858ccc9050591e4e92d2b808eba488bd9748138977a556f052b74f9f885c18ed8739bd2406115915ee37d41276c2d417bcd75957e3c0419587f2057ccfceac3442b215384329102d4f3fc43e0891d4f043ec4be871a60f45bc975c2b910a6e8b2ae34be4c305538216c50bbdf21c22fa811253fe36def83e4246d9725794ab711310ade70add07d1ce18aa9c15b8be7181ec8f28707a223e6febabdb59e59b71d2b4aea65294f45b59203407ffce5a237af86812374f8a0ceefeb2e4ed418ed29bd20dd0d2201d3e4cc0e465e23d0ea7a9a5cf433a461a8d614a1d0411ab851dea4473292b18b7d17c74532ee5b291859d553fc31776e043aa2f2578135be2807a6f8c6147d714ce6c89024af67d665c3052aaa20e8954bebc89342dbb8e4e94bc1adb4a9544866fb9bc7d21497513bea89415a3ad71b8ad4cab94b646041043801e83dd1d831882204c5956287d42be7e282423a09a6a0ff97e2f0ef3b0adb3e3fb4ff6de7b4b29654a5206d806ea054b06b4db2bb6b57a7777dfeeeedb7dbda548dd9f73662ca58ce048f4b5e8e6571a0a895c58eefbea99bb73771a55de228a9838425767e2dcefb7439dea563dd30f041414343454745f78ec722e4f934bee8eebece4beaffbea9faffbcafd760c77cd39e79c73dac7f1560775aa8b7aa6ff6828cf5f150df5d1eca339e9d8444f42ca038f6009a749c95d9506274ae99c94ce49f129dbff3a0e8bdc8cc99d3827e937a20be2016248c08f976cc717a208e97f75765bf125fb296351869c4189f06b6a4d93fd384d42fa650d4c36f94c7b9844f73ac1949e789d2425a1cf40094b5b84f46de4a905e65a74301196dd922c861540dd9246951d121d1213a7440b2958ca22a460c949487f96b008e9976621054b5784f467c98a907ea90a961ae0ec219762be3c2fd6e8c6931ae09485f4e7a9825c898a907e690a1b60e9c704967c6e802529420a03cef9a73f6571cacc94fdfecbe3293b3a4fcff477cde5e139818bb0ffc301ce8973caf3bf938a77afae876fca7c93524aab3f2d999a1c1b6caf0521757a53c5b45db064493fc21b1d1c3961792a57727f7b7983f75dbb1ad928a4a4a183b3041399aac553192a27c30660b4542da6c085ca8d58f0840a558b2bf8a8825023b8d8410e2a21d8d6231ea112b262591062725309a1434838c1104860a884947882a09628824825a4a1e829b284cabfc5202a46500939618acac7da2c5031c829082a21a522aa201d047b61b3c14d15440845010d8a7086aa8e204501124938a1ea91e34017e910745840a46a314710aaaf035da445408861a46a316647f5799f4a3924b7134120e252b51843039510a70d05e397f97f22ad1f58f4072294089128edd3b0be41ac635dd7b94f400213b00146548bea50ad6410d54a548960745e845e849a6c1817aee1199661275886699886718f1b156c54e8d1a34793202130e88dbec008a22f1a6467d6c7c6ec1436666556768f6ed125ba44b844d7e81ad9680f13dac49c1416a526a9476aabea549dfe6027e8827632d1263ca0e10ac166810611808eaadfc5205487207cd0510511c22541d5e34db3405f488f6681fee77e55ca211946868b845cbf7389ab0fa142baa9941e2518a1c9cd8b1a04cdba67084f071e151c30b9321d2ed73d7942e40406421c310322aa76a2080fb9bf1b07b52240d4523046b679d652f0839bb5594a589a4e261772f7c8fd5566cef47892c9a5a93cd59fa9d11bc739473b4e2b63fd4fa86f52a676a57d5366ce97e1e8e9640bcb52766fe7c2dc99b85c96f0adb67295abb5da047d4d694f4abdee9cabf6bb8adef75a5c39efdaa35e4ece051f39794ce73e979920f0c7fef74b8c7f03d86f00b39ba63b942ecf1a112d03cc8c70c2092c7ec0841133095bb89290b264a808105b703dafc001c908da5028f15d41841e3a39ca1151a43f8462081fb0740af3ac0d9146c679d68630caa50c16df1c4068d321ed428931b2583285680b1e951619c8932bc208228c2754d044d5439cf8c10d8a50c410424b0c419b4480423645115538697284cae6896fd565e1e1802af1c2016a3a28a801d3f708247449c29a670d49113c30422fcf1a92325e30f9c0469681c5d0e410487680a1842b79d6905c812407a452e7822576901c818b108679d6901cb1668436d2e0be084942c048c212beb885e0939df0933d71e489da91d7e76198c93e096be4593b32c45d8525e4593b02c40523bc210422212706de212c45e1861092aaf8c408493d38277439e2f210b6e4590b4205b98b2224e5590b62d5b466848c8fe6593332cb2b79d68c7c91bf3c6b468a904b9bfc21d1e2a10640f82081c4163d64f103308cb88296440e88d230a395454f166108e108b60ac420e85534eb010917d689115e11121b3cd969c9c08685047cb0220c1824010c22c008628a0f4b663d98f204ec8c236048f418a1022852ccfac3966247490d085d10e143042551ae985e30219222c98f129f150c3942c60a9440830998144b26128ec41843c90b70e043cd0a9e212f306307889c16fcfccca00a135491f3a488335cc04a228c9d139a380209a321827428223b81884787181652a298810b363774d26454a080e53365491155493ed199c246840c24f860a9702d8ec0464f5e3abc6007227e80a29ac23b0f299204174170028996132464cf943641b496021fe46e2e422ecf5a0a80722993e96d6bc437697bb5308c1f069b566b812ccf5a0b5639853c6b2d30925fea7fb3e4320e4198f1e8011084193f47bb89028f1ecb2f77f5bfafc75b4930b8641b268ffa6417611996349c38f6874bb6fea007682eefdf3069d97f48f6ca556ee2d8a71946867efcd8391ef43b47071f67cb5cfeaad175855cc915ce9045f83d9dc14948aade7313a7257b1f4e9ccedea4e5a0fade493e3e5be6bee44aaeb0e4b22d11117adf8849307c3f4cc89ef7377be3074670aba56096bb9f015a7c73ce164bffaeb5b67b8b4e9d07363ba839664c9eb4613237f2c035ea944f39280906537f699281c9b351396aed21d0ae3524d9c3c6a6dd4f2693cc5b8ed22c9d8d2a40010ae02c08c2b7f2d1dbde6e6b7f94527a29a5f4524b6fb7e390fba9576b2de6b8aeeb7c74a406ad057b92b704b965b8b99f445a40cd4d7db8fd6f050c6f6501431616d20258eead7685e4c357846e0cbcafba575aabbd9556ebd53a5522a38e83ff507db0ac1ef0cadb217324fb9ff79164b0f941104c6125f8567a2b95e927fb6dfa7bf4bbd0ff42ff01fa69e81455f573fd616393ca0f79fee7a95c2ccc30c335dbdd8e4a4c27c842fa354dcecf3e9618c81683ff751f089aac7577777712a813b23475b049afe125173342fa95da70afb5d65aeb146f54faf232dd5a7777778739793848356c60bacf39e79cb3bfd4392afd7e0a81ce51715ede807f7ddad13cb26edac6c9fa2ace73938af358a18a5342028ec5a9b8ff44b0a9ebb8b351e109f704f2be72fd125148bf5e920449d46334e07dbfe97c45f79c26e7afb0b0b4803b5c5a6c98c09a1ba6971b51421890c7090647188323478e2a7e1dc12a96b4eae0810c58451d6e025853006f44b1d6f69873b2004e9f6e736d8ee65ad61a00d079a0003a0aa08f2a8029928f15c0aac2fc7a8079fe0b6dfa1bbf5f5a7ced0d6eddadcfe6509605520a4c81951bb9da420b2eb830002ac22ffdafb537a284b48d9aacff0d80e463967304abe8b709008332ca983ca8f91ca5747aad292ac25a6badb5be64ffaed65aafb5feacb5d6da95c937e79c130868ced006a89ae6bcd7bae0205c90b301a21e4b3d0967a6ef301d5ee8b085f44b1b1b207b6f0deef358c00fe45cae1c927ccc771db790aea8904270f2983c26159539e7bc3a93874e9e3a6e241b201d110cddc36fce1a9d736eb303900acdb701bad506096ea98cfbcaf35d483ee64faff6dd35794c6b03bc2125a4efde9a3c66adb59211d2971b0df342bf53109abfb2bf0e1f9893ca3883ef5ba975cdbd69f4d6375c31f6a6b8775eaf76bd5eed228ad5eab57aadeeb455abd7eab5ba0d4edb1b86eadede94b6c5b46953da94524a9beb28a5b469534a29a5204822d1499a4f9a740221b281d2a64d9b524a296d5793f38b8a8a8a883aa773887c7c68b4188d16a3468c20c0698bbaa88bb69a36102036d0a64dbba78d0ae907a54d9bd2a6b46953da4e6d541b36bca90d1b749a483fe8ec483378a6e3074690934329f5aed5bb56efae5eab773fcded67643a36adc9f9aa9d26d55a3a1ba389184858fa44088930a24431d5a05a5bb9e8ee2751a6448982658a10b42942e430c55aeb4d2c14fb94de5abdde7aabd73a4505f7de7aa1dca7d4d68a6dc5b7d6293d51a0f84729d2f55c6a6ba5ed16536b2ba6b65a8a1d376dc7d8cedbdd42723ff55a83e4ee5abbeff49e709a94d428ee4e9a40c9e10750ee1d6b0e32e030e630f8791d877f3e18c513e924edcbd8f480c9761c79082927baf0c2cd01a6cf1f2087d04d512a183ea8354a500f6aa5b40660f0e0f6c5142f80ba80b2034ab7e0c226250a945a29b5d54aa98d525a2ba536ef7408abbf064ca7ec92fdfb7472e194bb851694b035d935eab4c9e3c8c828f79539ec7e935cde982a4ae2704eeeef8c7400e578afb6bdfce5c35f0288222cfd95edcdb1355e31aae38bcec88dddd88dddd88ddd9877ad1b732a5868b9ff33994c7f72219eb0c199ba309f2596e9c23c75697d697776678d2aef15f70a7bed51a7ba9d4bf34bf34bf34bf34bbbb4ce7569d5794c463cb44bc48d7199abb5d61a565b93fda7be4b2e0f4f134d3491fbc6dc0b3089ebe834d9eeee5edde5499a6c2bd4641bc9655569719d2c77176bdac59aecefe979e209aee38e3a051ae96297a78b5d9e2e7679bad8e5e9620db6ba985f0cde5a6fc5b5c519f180310e49ff571a0afdbf06e7acb5d63a7abbca18b9692d74756c50cff80f1515d9237bb4caf3ae8894d7489e2d7b6bd25bb3760571ad15634b92c1569fb47a15199024f4562ebd95fb75b2bde9f8227445f14d99f2be4a436149e60e3d75c9d067a0b411cfc439ead475d249d24927fd45eb78fdf526d37db9910edf76774adb9dd276a7ed4ea9a535b973357965ca08a718339e5c762e3006ca601387669227855dff659505e5c72e4fd1a0fe467ac33d62f17588a48c58f68bacdce30d547cfcb16044609e4ae1eff758c15df45a1e0b7f230cf688508f624c3dbc8379302d88c83ff00ef9075a9a7f60bd471ce71f38924deae8f00a3df0cec4a19ee2f1f77b60fc2b604ca98857f7c863795f57b3dd826a255af9fb9506c5109050518c3a47bf336a14e929e81c65a1a0732f2c5aa3607e7459e66bfc4e2703fa5f6e249bfcfefbc66ff2e3748c30f41ee5fbdd084371ce3d8202883a6939693549f1538ca99396139d518ca1c9fbe28b650dca2196648c58da1cd3492c6b2ddf87113d505fc472c66a4c6219da105dc4b2e616b1ec9e7cbfd4c13c50b30a222c4a4e01b36c3a1a0a2f01105749941e8b87b84ac28e35c43264114b6faddc988f1eeb6ae2003917b3054f4651b87fa791bf86bcc85b2e146b1499af7791afcbf2bde592da784863e92ed7c9f76951bfdb264ecd6946260ed1c4c17fbfe6dc6f5ba36e3dd4a9a9f2bea447df9735b9a4b6b28938115f751129069202482a2b214b0d52f7953c1866615609b330111a66954a5e8c1a799ee7799e37e419799ee7795f37e4917ef8479aa13dcff33cf008638c710b077ab0cec8ebe98c3c186d822ec12c4ca4d5a8f2843da317d63d0aea6844ddd091e7e1baca652d6ac2c87d15d20c35f77734a21e58cc47b6728f1a55ceee78ba25dd2b7cf13ccff3588e30c618cb90335a0b4797bc3a55ea99252d2d4cd068345afe4820a953a1efc9680b149828dcbfb307a56745be8f451b268ffb2d4a407c4093171c2bcd7b238d08d3019a43bed555ca996df298b96298a72aabb2f22431e0aa2acb67ee4b09cb4994efcf3cf93434793f014db2061082df52c48169cb1bc04ffbc3ef81df7b089852f2078e377060daf2f7ded32aab09237cec95fdf86d8408cb7eefa97f8b1fbead28581fc85191a361658af073e9c93cd94c0d51628428a4a81591fd604475dfa3cdd48d29cc7822a5074667a4a1baefd9666af2c00c211e5c4910c2054250ddf76e337597c0420a5aebf5040faafb403c7533024fbd303f0cd20014969d2b5f99a73a58cfdcbfb871d7d3c1306e961ab2caf2b535aaec5c2d569957a046516f87c763799ee7799ecbf3bccfc39ee75dd7e7614b9aa13f0fd7cfc31e4be9c9f27dee3d59a768fe7ee76a54d9c18e1a557aac7c69b6b6e3811a0543437d9a6f9d5a9de05535ddcec461752e28f97e8d58c51da24db340df8a35cd027d4fa85344458d9a41486cf9be67f4dda711c51b9abc6fc50bf4ccfd0ed6a8b2caba9e2ed6a8f2845d8d2a6f4acf356b54496db546959575231a6a548961f9be07b3b182f275e5fb6525caf72bad95ef6318ee69540cfb34ca7b77e5b202bd725985f2fd19cb652dfae1b91fb31a554e1908808c20086986cefd1e8c4865d5563552751a453350a36eb3c6042bdff7763c97c7d3a8258d7a356a9e64c826f1cf7c7c74e30cd240a74a339f0b7024182c472a69b2c963e6da124179ccb3b6442cd3f1b274074690cb2199e3a1d15e4d06b9c027b7388392b472499bcd7c9a9cf99b74b6d3700ba718331f779572369b3c662e693b4dce7c63b83322294e9fa9a917d290b1e91125be29435d21fd26b99f1c8902409edc53ee6f760869b24cf6be961384cfc5e00eb00ea89ca7bc911ca7cf7064c88da4a768f019eeb9bfe16888c167b859d8dc4f196edcc0bc79d1f7bde8adbde51dab44d625538390fe1c42a92ff1c92cc1bdf2fcf978fe9d6feb7c6f992542fab3bb7b65ce39e7ecca32d7d7e431bf297ee2e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7a7a3b474c66ab55aad56abd56ab55aad56abd56ab55aad56abd56ab55aad56abd56ab55ab5f89093fb3fda5eedc55ce77d2049652564a95142a9c5c586e9c60bcc290647cecd95535f2798971b261b2e313970b82cede6d2522aa1064b8e3f75cce52d96704585f4220c6d5da28e91c0ef12e57e4f1c5f680bc788bc0ec7723f37eab8915fe8732d1d32a67ccbddeb96fb31e9874bee5e9347bfcc8e8c8dcc8024e19c3c64764c00eb0b00607d4d9c983cbf73f7725a561970e20812885481468d06b552eb8720883042508f11aef08939d05a5bf1d00f496c004404942a6ef6091226320e55557d408718f8200c298a965481b96bab0b363760e9e479d68c00cd26759fd381a0ee5449759fedd0ab7aafb5b7e6d85a6bde97330b2a3e8ef3c2b01b7b24492093474b0fed5f809b16668ae346205210b980f884f43f2c9ec0a44aa2079066a1bfd6d99e8a8f409a084809fed7d67931e6b068b28534c4b9799795978c26e5a6645fb0988c2685c5d2baa123b66ba695e4f654e7609b5ae734ab5badd3ae56e27d94e633fd5c17b298d0b099a91bff9b1b9aa7043067faa1b05571d3426872917d6ce9e1e666f2e8cf37df074e17efbbb9b9e99b6d9623bae50272df92a7d36c9c44456092373ed34d9c4eb45142fa8c9b4c37340ec8b5392f045eaedd9cb97fe3299619017f40a3e624b9291b2730ba7bbbbb3b9d9f8a15625db24be8a9ee67189c0566cafbfee98df435c7c8fd6a520afa22fdf06474c042c589637f5ab1fb32343917a489433f15f0664ea745680f69a031574a3794386c6fbdf154f7e4cc8ba61b218b8d0d3303b3486edac34c23f74423f72c23f777d8deea2d1b3c456f3cb94913a5f4e6fd1c179afe4b7acb60a6630f210d59586a802c356ad4086bacb44a5e4c7bbd3e4c1d7fa8ecc8ba691b27ebabec9b2eb6d3b2b876d03febd6da8bb98e7a331f28d61bcc3927aed7da5be7f439bbf7caf98c53774ae958fa0cb923369fd77116e43c75e7df5a48bfafc5de79df77ffc3f072359c2ad3673277685385f8a64cf9d2caf7bf69c2bdb33b130a0aca17e8daca6bcbf76facacb66ab361246c1a869ecb67eecf37bd0763b12ae89f9011e89f05fd03fda375441dad1b8a79301691964703ca916521a317d68e8b67c9eb250773a0df30077a515193585151d191cb1b6579fc95efbbdebe7cd45027cd1884dba14508f3a363c2840913264c9860d67b8f619ec22e17def1b087ff85a6cda8ca7baf7ab259ed36048381fe1981fed96e08f4af82fee9b82823929c8eae864685a7d961f33b6cbcdfe1bd0aded37834b8c67b2c7a39346267c4c2340c7463b8866ff93e8e7118746fe2ca259e3579e512db7010c61ce898035355356b4d74f2fd8a9f03fd395094f96642b833c2dd913732f99990f79ff7187b1e9e093539b31091072c10adc95b5a198c03481c6e8ecfdc277faaac08e380191ceecc4f550a3308ed574fe6c91a15be67f3541d71a84ff3f5691e07fb355f7ab77cdf050a99a7684698fe1d3fc45335234c8f300cb04ff335d8a7f97e9a3148123dd6507fc718a48e307d9fe683d811a6c7b0c91b66151878324b6494efdb38e2f52b97d4e68193d4a3f8f7696854ebd41fa2a2a119bde53357c81de63357c58afef2992b74b343187a33cf8f8e8a8a9a346af23a25f57b34a2464d276a521cffbe0f89a20f35398a2ed4e45d59f98635aaa53d59cb7bb29eb9dff2b35d7eb6cbcf76f916ebabe56ac1d460bfdad1757ce6fe1015992bcb295e81c7d533f7e90843bb9dcee54e29a5cd6aa71fa6d43fece2a9ab7f2c5700fe7e8f15a84fedd9c1b01e1f2c9bcdf27d0f7320a655e69367c61d07ce0c8aa40f0c54fdab3db536b133039a0135a53d039a05b93c55f3f72b8fa776bc1a65828e594209ff89a3cc63f0cbb16a1f3627e64b2e072b5867325b44d4e4bd2557f8a3cb1cd775339af7813390e4a3ca76085de1cb7f2ae08dff6838c31cffad1835798b8c8e885656806c40b75a1802d9806e351616928f5b100c6d46abc96a0cd520f9a84236be84efbf4f34fd477bb6abc0c8e0b9df738fa508729ffea340241f4060eef16b71015ba0084def526d4b82483eeaede64888e34b2e5badd9809abc60c915c6fc0dd28f2edb9c26efdb08222cabec0506e63423f9a8b2266f8b373961ff0b5e674dde9fb4266fc915e2781ca41f5daeb789232626e6743a9d6062625e6e986cc4b8b4946262624a88a9c112131313138382cae569f27e8d085343cddb9a1fa2da21c2d4b0e3eb8e1fa2aa6390fa34a34d0d346fc720f66946d267eeefb0222c2b59234e9509a2ff0e71aa74881dacc9fb981586a53f72e18b907240e6bffe5e58b49c172228749de8c5609f07f37a60dd5f7ffd75f777b77cbba3ee56eb6c9dd37d1cf99d7892a1bdeca8e96a2f2c4fd9fcfd9aeedfd1fd7d6257d40df54cf99203eb51214555b316854e3e6a14cd899da00300269c0000134492e443c7f84e92f8d70d7d1d5137e47ef4f5583a49f27de9244993f3fbeeefeb24f9e3402b7a34cf466ac05479005041587a2eb1ca7ce67e152bcd67ee7f1ea59345a52c41beb93fcfd5a8214e763a98a73a57e7ea3a5707fb410698faa8d42c990539e810d1880000005000f316400020100a0884426116e5601a66f714000d6b8a4e604036980703811c48411445610c443110438c41061169947166a66c00e0f4965d2b9adf3330eddbd0f0ba7889f6ac95b5dae08806a7500e309ebe49e17f772a5f18037bb666712213ad22edbda7f8a5c3e5f88238a8816e441f4da3074b605a405ce4bc7a9541e8004fb03d1ec3a21d88c52ceb5aa26f39c75b836fbc468e8c6f1cd3c43986341f73a2defe5e4d77bfd496c2c258614eb597cc63e2817c938d0f2d0d3b8b5da4b8611ed301585b9e822b508703d981cbe28a018851adc4403a4647a921187f04f7adb1bc35020b62d99bf0cf637caacb24861a6a8940f3f25ee38beb6466a7a294bed3a36a109d7a7123d54850dba905a8b68850288a4cce1d18bd8fed30e9aa42bef2d0227b11e02f3ac31140242ddb90e802ecb074d0c2bef0293131799d79d19ce97b071860eeef91f996ea660e08e1a93f86030c71ea1f2e90f0f05f784aa38808c7e5113722b7ce6103f8af69e76465a46b1e3f0dca89aafc19f908b50d76b583e7ce2377fb8535624e518343b2ed44517c4d944a1b694fe17f4df23cd2f1a7d44ee86ce506c32a293181f3abb420b3de9a0a069e2e83b0b43d4259a63af649e5b207d68deb1722149fc6aa6e2a8b50c238198caada6d0f344ba2d0b6b241964de9535a689c067c25006ac099963bef22de28cb5f464c8a7e8d90f0af2e73a3d2de5b7d908ac3ef1b018a1f7ee50151bd0e42e05379ef238c2d3da48fc79069e1ce897631b5126e454f47b1e42f60072d1370da92a104b6352cbfc5e1d75eb6e1b8157aeb8dc334b2a1f2db9687fb18956bcd95f1e9e8751f3bd04003ff71bf63ea3475b4f47e4a25a954b1137e47f9160a3b236cd375728d64af5b5f942864f5ce11e7d14a067dac7f80a466967287be5285eed4f9062c664e06fc51783b0dc81474a99d2d5749c4066f2a02ac063753d58dcdd84a48a066212f1ca87922502d1085087a014fd2ad9976b6dfbb13e2e09da8540e46a6dc3ae5ed24b4a75ce020141bad5cee4d2d221845781e8d612358725502e21c5468bf100e9f16c603df023b5280c1665f3997095d411c6956a648c7090a39e09591beaaddb34e1fc73660f4021076091dd750c8688a4a13780f045d6cdb409313ce29871a5db58305740a45e1ebca7341e766555b460c1e94090e714d55832fc1c65c87bbd16cdd4ab7614080ef4275dad23cf0bb26360108614fc4545242be7ba91ecc1da800b1dcc60f97ddabd8846ac312e6f6a93b28a6b9c04aab3935dc1e7294446b6142e79d6994aec6dcbefddbdc1476c0d6dcfeb3df990ebcd96aab7b6970fcb633fd320a82f29b21154aa133b75edbad6041f365dd6fcb4600e40af2bd51cb7ecb5edd83460842541e5c1ce854c668219c3d0633497c060364aeb8317b7728a07a41195f94226106be41f7f0f532149ae4eb1c0438979e0c9644a0976ceb0c16c2082c16c7eafce24d7665813ac231ee2e7d9eb1933ac21d21c5929403931aabe4da683020ae19ba609c072ab8ac70978e9f5dc4f29b58b7861f618e86952b0d237a4051d7cbd59626dfdd80a2df8a5d52daa163411220dedca496a2b486b406349a8be1e0f3615a5ada7f07e503c1dc10ce96858eb653d5f3605de9b3e3147034c318a70a31745004dac1b596e93814ad30a7955e600cd45257fd2aa48886e83abc73348ca263dee9338d28e770ddbcac7056eeb2b4cc767d1e746d71cdf6256930f9ea4ac761fab291a0bc09a581dcb9b28f4ee74d13a193287e038262944fdb6c17d7399274ff0e1b7bdd1515d82a854d138141294cc9b35857f7803541c377372d5e479482f99fe6a2670afe4de992258c3b98118a05e8d400482d93d03f567ccdd74c2d8ecf5e08000c510f335d48335abccce26182df7b417e948aed9a6e827c10b522c98af5f4c830c639b5ef7707a1a09640085e5fe7bebcf8a601a2d780d83d805090cf3474d9bfd844eafa16c05403651befab86e7f54df9a5d34b7bbb9b47e905b7af6060dd9eb2d45122e25bc0d03a0dddd4c97f8e8a6b8311b3697496d8915c58584f8a58d4bba0ae0fe966eb5b8f29092b5ac8dc02d3e1313ba446cdd3d136138df803fc106c22a014d7d9c7c46ad5c1f1375aaf0255a797eb5559307b959e27b834b7634780a032f1151ce6d942839355716ec29e70998ee911a554fb00871aedad5f9aec7ea6d66a754a4f51b724b99284392c4a1968839ab56996d5932466e02017b5be55ed208735f7d7c61bee7f6979407a4d14063461ba986d410e52673300820d8974355b0eddceb89008a19dc2dd0ba142eb3a244638662b47d76a245edda0720f89d6813a79c88a4835148987447e3022bb321f1cff7e64c39e458da1b9b35c4e523ad016fb182e0739f3c3da66d3611ccd897b446ee303f3bc4f10213f4529505c4f927d550d83750d4d1aee9c57e52b31cddc86d56f3ea89d29a900d78cbf0c2410ab58d989528f0f9246f774a7c65f3311e576d4af246488561b3c4bcbca88aa11acf0ed82ac3228c8e67ba7c02d0f6aa69fa9ad95c065679b0e62d5c42564050afe71e151b3153871907d4e75203c4ea9343bf95e086ff3b836eb4a00d63d2206b79a07319bcdee85a8d00d73aab299ea25e3850809d3cb94d38b009c551e761a3d6f4615091a966f745e3b2a977fe283598d5c58d7a6e826cec79c326ab8be1cf336cb9549d2ec582e9d0da212c812698768f8e41a6675e2c4a8e1f51d763b6c09d813559d360713648c20f587e64bf1477bc42f01e7a005087b111834ee96e605558a6b857265324c6f7e903e84f8b6ed6b8cad2231f7a3e40249263bc4a3286b62f26e5bd7fd4e28b1cbc27f5995e863528cf04333cf2c351466c287d560f7de487cb1aa7822b4410d579ba3a9eaae591c1712db07e213531191311be099a1e945314516c0f0109d0f98c1f8e720041b7c1841b95425b6b5e85f62d4326bd16c4de16110a253f783f194aa381e08005f8cc0b7d36c99ff19f7ef0c7e28a58a95f4edd4109d161b60c22c2e011b598eb3db7c10013216746b3cabc63b605efa4c7211af4ac1b8e38f6065431a3f9cbfe9fbd54b59b23fd1d6937b2f2f33bcc0a2860d503e20cd8d9a2012ae388986206bb78ec7b2d58b8a0fe818347078a91a33e81fa228ceee040555c4b5304894a778612e421aebe686bd1eb0a05ec238307866a736563ae40f282dfe6b468abae87f35526bd9dd8059104aa327626ef7e32ffda9652fef0383b24ed82502d489b15f6ee67e4563ed7660531883e3516b3644d13c088dfb0130ab8a27c07093cd13b095ac0fd338b370a7d9cfc60f0d2e294d87fc1799cd455f07c025b0f91c902cb0b51e05151ac96632df5d64afaf95ea143c5cf3371717f70b4fb740a54566804279817c43157610f8cbd4861bffacd4e9c1f125db2c9f7d86ba23b5d13ffbf5482903bfb5a961d3b076f504d37660da04779ed477e37abd9c12de11a8fc21bf7a1ff9636b2ce2067852bd330d9488bd3c99b6cc153f038e7bbc58f59758cd190dcf8d21142dcdeffb45ac2ec845f09dc31789baf24334efbef9cb539c45c37d309e184c4795904c5bd9cfbe14e4ba765dc3bcd8b96003ad4c3ea738616e5e6b7e9301583f8797435482fc7f27b7feb6560a67b5f2ee0b7503bc0944f00295dbe978db6fdc9a58081c0f43cdf91a6d7b2fa5d2cd22a364a88b1ae0d9a80da9309819768deedd96565949aabcd79d2302c5d2231c5cd24994ebad3bc2ba40686a8ec0695b9cf4a3896483b1e58a8360ce032f3425900c3147517d3b4f0141d66bec70523e5234c1e4aeedc4a5d1f908bd30d6a2e7d343dee5201ba9595ddd36912355465ef489c389e2473378d993401e7e07aa6683ec27e64d8bb1c0037c6707b2c6393cea94885c2e6182f2f175a06ca2a6d59ea27336a0691870b366280c610f1de15ba72e12e1a3def224b69f2e1a0d54811e5fa39b5c5e195f127e580f974645d2d5d68dfb7f960fdc2e17082d17062d8bac5b32de0328af1731908968c89e5011c5d7e2b0d0deb3e8e62709bc2f894494e48402afcf91e9384f8cafcbf898f2def95e19bc956768d2b8a62f98d205c05e41c7fca65e8a2c4313166d6aaee510e0507a2f2b45566804495b9322a55022ca60776941df3f8860a469fe9d7679480e9142078b39e3143f6e8ae3f464895c388321d97d570d13fb8f58f50225c3eef61c1a8aba08e8efb492a2a4f5ac7fcab628d00dfe30f3e9d1ca4100b1ace67094191191d1e53aed6d6fa95bee3deba68ba01d8bd6325046bfbe5b59fdf6f2e1eb9d84696be8b57838d45a9bcaf29576258240d7297c4c6795a31310efa245f93a368ff432ce042d55600975311945558e2ba33c12b8060cef7c8fa124de0d46e0a96adf6b080e7167601e540aec7e7ec34d4d39e83465ea81069250f985769a1b9726f1a38de1d514fc1ceb7a0d151a0c5abdff6fb1fad508797e1c10524bed12aff585811988b9a4a81e46c394bd9e1e80268334a7e30f8564a900d8a3f18239691ce5262791605c86eabb86242019d07b7eaf2006798f1b6bd9f99175e18054dec27ad89ac040e40927a6b0f9c08e62dc6483ebb5b168b443327a6c5ed01e4dfa6e96d5d71799d9dc2e57751dde50e5e688fee592548840bd9c9d0f05ccebd3e2532ba2636b79fb0de8c837d2717741a1cb0922b3c87f7ead6052870436c21d77c4a1a282a53bb8c9359b82f5f543ee9bb0c22d32b87ea87288e6b32a8665ff11715c33b97d7546ca55d4c63ab3044d483906d27e2f954223a39e27907e39915611c978a60fd207d0986d322b4bd74bad3d4859c2f7d4e89c1916d2c4c9bba5a21c0cf9be97d77722430af7108d0378c3c20c58e84f64a0c279e1a466c12eee88ca4293cfb601865c299bf1582a440413b9273e50f41c5fede43caf66e9a0745a2d33b3455b14f5f06d0e6ca39e53079bece650a2afb04d644227644e245a6c3251029fa58d455de4b93a18e0c18f1ec0b29887e4a9a1de8d4a037a9685f735cd0532faffa463c5e711800aaa8c8643ebf24762d04b15a816adac25efb9d21cc472abfecc95af36300ffed6b9d48497d3957057eacf4a3d3f23e78a51c6222ad8967396e544e65e38796e5bbba6617f016d8455ab75eb761b660db966e94491cb73c0a3fa3ccb30497a66f29d519a02274cc3b425538993627ba0f0c2a980673c0cadf4802223e88a8de7d66fc1d40672cb03cb875db35a3ebba8c7bc8f9dd1566ed1b7eaad4bc28b8da9817e559f11357bef760b4ebf2894f05f8ec1321f52e5476b7daf60138c4158dafbc7ae3ca918865587604aeb7f6260a1c6d2e9da34c9c85458f3d860be7f338cafe6c353444ff1eefd352cbaf0fc0f8cbd649085b73eecc3205c5858f24f6ea0f363b3dc28696916766d703d50d8b91da1964a80a6d39baa622af1ac3d4e40e9c62bbb3bff11842eadca4d6609e6e8e8d2a18a5bc0e1d0cb2c5a700f3107fc7cad434b2f4d888d20c6ba23b46474db6e6802ca3d4de9f07a7cc146ed9ead6d364ef0cf781a760e9bbd30d0db99e83fa17daccd3b2727566b92d0c9686d50e1a84b016bb4381306e3b9912838fd0cd581b8c32a09c9c35ea7e2549821836420b1320299755337e4b7258282270f554a230503da2d30f5c19c8d4eb6d806ae12ea57e10540c3a07df041ec994c7ce335f7f48d3ee05ca6c629d15be2f392f5858845e48cc1ec0e336672696b80d397067362c1d6fc3482f50faad7bab9bae16789fb08e5f8f00cac153c21f1586d7dbed7b7c600df113cd0e5584ed97971ee23ebc51074f532471bfaaa3358ea022635b01ac4dbdb6281b84d7e58f7cd7a19568514f3a32a591759547cc082721e27be5c88ba5f5b66e5b67cb98d8037c08f3acfa738aebda961350e46d4d84ff3c3101b1069f85b490171a8f86dc81bf9813265d4845f2870b85d102f9ec66cf9c41a1a8b9a85efa438cda4f80bdd13a7c53277a4c936f54bd00f8556986989c00af6e533b82a154eb0c802ea9348349f8f463b74ffc4047c1187491c9b84e2062d808098edb4dc891a3e048d2d2d16ae3768174dfbb8a53900e5f1e3a335b46e922069d7cddd476fef102bf3b4eaecad814bf4e8137b0139dd0cf103d3ed247f226c928feb019cd944697b3211dcefcb21ccb4f6e59f7cb4d66ba84c2dbc0a0cad2f1c46746816fb962df98aead4ad5bc27117e590d8fbd5db68ec25f667240d76c939371f5b67b5bc43d4a30a9c8bd4f3a5de4eed1972dbb8f9019d53ccb4d4cbd25b9f27b1ebed2a9bf6a2b1f9d13c6039581957a83194593a4f56a0b20e2d6540a7d242ddbfff15b0ea4d87c47d585d9d410dcdaec5cc347559d0fa2777713f4ba1cfedf8232612eed7a6165e25d1bb8e74bbb66b9a36815b35763f1c3ef3f0be06135636211a98a0e242a23bfa3d6094df00563c8d6ae63cd5148c68c0241f74fc6404f7af6886c567e1b22f462469d6fdc0636e81ec572cb0c2e791665394f18504b685758c2797bec2cb060e6b156818500b0bf9fffca439fde70860c18a8207fd724ce13a3db961f52e230da87f9fcc82cf3f99ba34d21b888e0d1464edbbeaaa3890b16c53437eac67721eca595f514e0651a9501eaafecf4fc9583771aa80c05ad899e3eb87e28a5b51655fe657a218685a946db31e30ebe616f81e73ef961ceb064d8ee5be082dc0b3deb89a3bd79577d1e627b7307d2ca77e68b9926794bb4aac69da777afd3351636f22bd251d5301e1d3f97c92bd9fa1ac8afcd682b295dec0e4a296e950dc97d1560792ae9d290bca15ff467695db77a6a95eac336cee850ad85aa689ec9f8eede675c0aa6ae56558c9518a7d1324fe879f6adfcabceb73ab844aa41eb6957080420c1acdba574b507dca1677b2192a6dc23a77d675f17eae63b222d9263ef446fe2e33df8cdfd05f420958885378857f14eb5a68e4938db6fe2c17d8adda9a0bac38b4d7ea31318306f2a900d9735c75f0bc323b14336a5f36e84544de024e5e6f2470cad5a7b7f97ed14d294b08bd8e904572ebd5bfb6f8b89b8c2091699acdeaafd2e0a212b0c3da81b8af8e06f5537f71855914583352c92b133b9745fafb92fe3aa3d84fda03bbafe0736354a9e0b63c0a0966be27246696942c331103f3d2f79765f37d94ccc7812c679a14b2dcf4b664ebccfaae4594a2737a7e51aed24c4d2d50e49cee4f618655609867c0cbc12887c924fc888eecd3ea7d6eac7e9e9c521bc615f353b8fe722b22b2eaacf622a6d6a732b0055ece9739a4366372fa8eb006aa11bffe160c470ccbd20b64b44b10ebbf5ff0c6f2f110ae0c742c4b15dbbc414bf570af24b4dde48116881eb708e1cd6cc38881a11f8d240716c0cb25ff514880f6b015fa6e9e1f6ddc07d434f733618b23c059a752092fe2e04f63f33fc2ceb803d4f2edb3fdbd730371080fae5f01ae9658e88f2a3eb60dda48c137333c7843070b563df2b936bb428254b727af668dde5fe768a247142952f4a3655c75d7a9f3dd3a757dc4031f2c50e04030d0be6ca1654b59e9a951a36c94a39cf2c06d2920d0409d8cece3f1c397266aadd4c854c1ea16b842b11ffd23478a2e5a64d147c9bad6bd93aebb77ebfa8c053cc8a0c08360407ff162cb9733e553a744d92c876a4a91db4256a0a31a94a93e1b0713450cb9539750cd5b00afb6e4efd9f13e3ec34e8798944093083790c1061d649bc4e08da4e81bef074e829a44ddb6d2c9bed7f534c2a1ae9636e34f9656da345b8dd8342e005654e22c885ae4b2828fca4fbf5e0f671f2104c736654a4c9d13459b4bd6769dc9a2ac913a38e77721e7c523c63b79da4c23981a2617fa24924410bd91b7d66eb66d2325178c7ff29326090dbec5b9983af7cb1cddf01246e896159d02e3b72dc75fb734389d0c45b34837b7872c54141d64bf6f4e6e3150f3550bff49090c604b8082f0b7b849cb6dde22d0f873a6a27567035762d232fbff843461ed7900fdf717d9b4b4be45f1148ba3e25c237d295b203b22365861f91d27cc89da3564ed26d22735729779422fd4f07a0f854f40c1469c21caf4cb98ba85754c653ae07360957488d8d69215e2a76295957541f8981e1aa6764d4fe1582bbf3822fc268057bdd2cc0c627c51500e2c751f5a9aaf3d251d5d06254ec6b0998bd69963a9f8c474746bdb93a5d0218a77a58ed7f8e626e9b4b83503f079d96b19de8aae97b198cbb77dddebfd9c4e8930a86b746dd8412e89c32159c99766ce1592ba68e63ac95c656814ea08bf3f40d6c31c3ebcb67c0b02c58d6cf7589a491369dfbf4c3cc46e7000988e0295cb23a1473b9011f180e2540453296e2ae888ffef8e6c543a60b5c4a10c24fd40190999fe9a47f7ac1abbadc0012631fc26c8ba36a4a0007de3bd3a417686bf342eaf9db5b810753b6531b7652f1af50d0c56119fe05a6d09569031692be564efda85de413ab8fa8293cc0b7d8bf72fb4704a06a6697631fa275e8c0d32326ab167e0ac9b0fec7b740a4bc7c1d9ed278093cbbeae2ad225a99994a380015d2c30510c8fc5b248ceac066559e94ba7d9ec8f743896992483581f0a4e94fd72be7dc93815eb558c91a00dabc7306bd7ca0aa5e1c8e99b00df0e67f634af629d25842b93c6a3f19ed21817a865d627be57b8fef403d7dc82188f885a1d785cf32f7fc8b95da9f1ba87899c0fb4291876575a73c003d57ef09f93f0a046e5ab626b3cdd000e37096c424f92c7cccbe5177e2e39880109e4052eb55f76fb3c5d51c227f09cbe56d472090e877919742b3de84394da7a0f65959501c18c675b80b2256810b3fbc2761af71a35faac0089b105c434256687100f3765cc9290d0f5aaa7ad327fec07f56c899414c35dcf89e3c253d4a36fc0db4c0552399a7b9e67374cbd9800ace0713382d0485fea53c6b3628493861fda13e0c366ac7cb98a4c0fc9412d318272376eb3a8bef5917a7293b5f0dd2e25b1aced643813192779f7f33ce33b8dd034be56d19a9b4c6cab27fd70194b54819eb2f7b2ff33b605163ae83e61b6a44c0f58379f75f8c0a1a56f3ed9f7e58ff6b3e4343dfdd692022a099b3bdf5b2f4d7613223bc05b0f8a232e592ff4130374c452e8c45f823cd5846a33144727bea08ca0b06813f152dcde75f74f66808b3669811637e3532369b54fcad5e0dcdc81223fb81116afd500034ef431955e747b49a58c83bed9f2a6b897a7f9e464aa94730478442a0395cf3eff15480ede0924b3c5ee46cdb9c2b7294f09e29256a704ff273d962f4aa5915350e76119941a2fede65b79d9111c41a164e9a056925a4e3334b109fe63db0035d21dc5442d67f9554a5fdcfaa688579e384b2de734125e72d83630be868cf3094d405ca1cb0743be192c7679be5c442e283b44f5b612be73aa4a23c4da52622cd002296d5e5baadea767dc89b0d54afe540218a116b27138c8ed69442b29e8d53668b772acbbf380277e2b41822e068a4cfdd5c7993b8b7fb51ca6285c500475244178585af2ff5f9f53e064eae513d6cf3ffa0935f9d02138bbce01047b243e00158cd3d2522ee1fc37e83e1a4685b3b7c824883f15e00cc6357045b7411c8aab2126241fbc81fe04300cd4b7bfce315e174a2b6785efb51337e2090e9d134b6109b6aae476a61e13edb6bcf519737d22e821c1815f7cc40daa003d5660eb39352e24e75c03a70f3075c06c63378678e159a5fa2f6069e8c3bd40ec94d2a8d6a51e7ba28ebbf91836571badeabeaeaf4eab860bccb2a2ee8e7ea181f7fb9af2826c450cc9ef5e9622b9e70968b6c4b3492e5ff16c3505782522cf9a86c63f5379f78da60d69c2a05d4058565c028622f710e9216cd4b13034dfec09e620a60e9c66d0e6301140fd63f6ed83e44d01f200b2ef507d66b069834c19b636aa98c572d87679f2b46011000a81a6d206dd1b72e8a4f47e6818a0844e839e55ecb20a8aaad9612ea539373862c4329f4608959c1e51f3cc9b1e2764114da9a90f654c435dd5d4d71be9fccf808f66e29e0049aa194da6128ad9dbefdec21ff4acf22b3d362a4fc72bf6a6087316123bbb73f9284f7f7bd6e116b5776f4c11fb650c69957fe68d176abe8ed0702383b406840dc5bc21d8094679663eae4615f965fe378c9abeceb791bf0ce93b6d4c4d3a625bf4903d1e0092f65eda5fa376103429c3c0b4186cf2530d2ec5e1cf653c941e43cbd48ccab35a58197491129c2e7e2166b4a4130dd82f9f81c514bc888b43f1e288015d38b2b4789e17d09662fcdc70c250016671d41edb0d452ade3dc02687ede3ebcbbbe417f8c2ee47a47ffd6cc0646eab34500f0a7884a4dddd2d565345f5c8df8850745b9004ae8ee68004230db1f89f45e1e7045cc5a06cdc3e51d1781dbe108ce52b3a249cbe1d861f491ad72be2215cddea25927098c3339828d265144d3345ac9984195e1561a2eda5917b17e2fb5d25503d919521c236aada50cd306d54cd34d2ea9e53e1c035028a9fddf223fca4f0bd29339386b8ca527914b465a344e2b824cac2e4e0e026445640b5a762a2237d06e95b93213a8ef4ad29361a15635da4516b065091535ade7ef77389538e3515872ea3265ffa578db1318333a5346560589a513347bf68202dbb1d4ea03fb2c75027aa15f97083fab8f62cf5ab0a5a61d94c18ee02cba6f4b8369ad99a36f725dcc0b824fba6d5e505d2bf27267ec2e602d95f403eb97e7174ef14001ccff0733f7b564a1f503353c7da9921595ba9cf814a9970dd6f5cedd7ff8c51800fc6880f1fffad9529eea9bd13e3f9067a59f9265bedab261008660a857378b28b26178af13f61e8d546d9bcff05310c78f894519d45a832764967233dd81158f37b2f5cf6aedad9044f7a3e9b9416b734ed8fba776b117469a8798dac61da038ea20fc6790a5d0cc322eaad8e924de7db79b0f1f70f827b04c732ee3ebe46c94d1576193dba793e0ed97f68acaf15178bec5af65adc6700b6ffaa1b3b2a3d90f4f53c858c388b3039b164b960e33daf6091753b645dc06a31875406672b16ae42cb82fbf9fd0716413204be0c199d8e2c8c19b275815469f504c300f8ae25626b2e663450d40a594f963402f23c86e29ff85dfb470209c39e199a5e76b69b628810aaef7bcceb57c271eeecee2d553f8c35381da053d13989c2c8b54ad9aa3f3d9689e0218d804f63c11966d7836c14d362efe52b3b2ed59e0f822af664e54e5168fe5d57005145a73445acdad75ceffb175f1262cd409f935773a43bb48b83a2f44b8f00d420aeb29103a7185e488bb2d1de2fd8216e51f61808c5853972f1491b54458b96fa70338ab926b9daae1f04b2f3444da4cfdd1d226681e3aa9e54902d55183c3a4e5e9805b47784edbae2d864a72f74a15f8da14dac6c1e09863e5c6d097c5c28024e32218e0bbcfc2ce7f1547c8509307dd13d9b1deecc1e88b67aa070d93b0063ae17e9bdc7e2619b4e20d4d6e11bd40cabf8384bbf415840f63f345f55c58875280e512c4881108e130bdb59cb1cadd829faef73a0345c0f53beb1be4d2c170e1e0033fac8781d1438e8c62564ee9f74985f49722307c64d5216bcd277e1732f7ca3d5bfc76c64939928d934a6ed79f5420a8852aebaad532ce2e0ab1d2c270a824fe9e36f4af92e9922b0eba23ea1de023838c6f41c921db5d47a9bc5072cae4edfe2ef5e884a68ec4ae21d25fa250889219ce5c113508763fd7759df848cbfd27be0d43ca8da19edfddaeef89cb45278ef7034d3c77c200801882ebaf608a6a49c18e3dd9ac5e572c7ca6104df08352ee1adc5a904d66ac1e9a0b6f7409aa2533ae9e4b13637fb78cb9c13644be19184b23826678d678d597d4724b9453109c0477334f292a842555ce22863114d68a5945c854abb80a9cc29cadeb4ab907b6a724705fc3627d11bf2e5923950ef967c8a378911aa863bcf7212d5383821bf3bbaa87b763759f28b0ee85a2d308ab430a284dbdf8e7c5315db95f86dbd4819e863536e8ec09f9ffdc2e9e002d2a4b1f18440a06f482f448f81cdcf96ed2331878de80b2a86808ddc021e3a2cae81b96acbf28bacf464ada3a21bd040452aca1925c633017e2d7639fad933d8657b88ff360c86cdd639a011b789938517415ea041016c423bcf9abe4048fdb83923e50dbb27cfe2eea900de193bb0ca856c4c817690076bc87ea26862cc73dac340fa6330f966bc55b3ccc41fcffcd72d1970a2c5ea6bd9a7df4fe94adce00533b60dcad29605b95db3790fdc23090a9f2102489ffe9c190e09ae04bb8e6e09e759bb60b91c045b440849b046a3dc59b3235b021e064048225192700b926005b61f8b8cd674572e033bedaa7d3b77d3a02ffd06eaf3bee6caac9bf129ce26c4b8db7ba004e05d30c0070670e2772f801cfa75e887eb80e5a0f3ac5df45f5a8f5855a0dc88ded34dd3c370ca15e74c119bca2d1c940e4da8e9cea1c517ff968c37ce4265f311d21de1d2c72c2680e6554d6d14c185261380aeec44f04172d92243d1b95d688f8e42e7415685671909ba03fdc20dba4ad6dd46008e7f0a4326880724d4643fea1481e5c9666b3c290c3981149012e66d439eb55d20bb529bc66e491e8a942cf3f8d0a5148bbdb398512164364eac9df222db641788a996a8eecaaacd5d4025ea1691bf6c3936f61181468abaa97e928ec096b560b3ad702041eed8b3d60d71dad66b4be53fca2719995a666f2d16041d7442716aa2a21dd79b3874839b130f9648f31170b1bb189ea397139af8ef3e68699efc6dc4db8ed6fa189e75610414bc642f8de7f43a05dbf2df7ce6f891d55ae8b18a9d86f437f15cafe0893194a58a589935991deaa294ba46be3d025b29b19089f54e9c89e19b0fd392344078be65010c76dad9caace2f9786fc78ff5deba72aff54a1adf2cee6dc9515b49de1f51b475958fa497b88c8c483ad543b131337c666bf12c1eb88478f43270bdc5c426c6088f6205e68d470bcd9c927d7507529a53965a1dc9cdf3b31e212ac5c039a5e31b7bc1d82444258a363e588df86aec81bcf5c6013617f384d6cc59d15c94db197cbd9ae412286d5cd432b42ac7e5ab8a41d36a3655172d915414660ce9dd34c70bb27bfe09bf4e5a004e214df2b0f569860ea3a23569343122e48246e7fedab33671091ed2e34e5d59814eb868a4c58336a13320d40c3dc676dfd835adaee7569141ffc5966af9e63e8869f1280d88a9e76a00f245191964e82c69081b98686e023f8e647d13cc87f3af4303d3389913a1b462efe9244a448033f241678362e16da1a663930765092fc5695facca33e36b89586bb69b1bb41cb7b578ea8831523fde61758a416f5b9cc8ab05c605aa003c6c02a473a918914b943fa1487015be199a6be6157ecc832d0173ddc9d680694d0c36e21a98667ff0873c09fdae1191b8324c13577c5c3ecf740c98148a1915d61626877acaa6c3d6eaecac0ebbd502f13c8c64ee7ccd33640b5ad6698c7a65ad1c9ab42020526cbf4972e7d3273e7bd1ebbd96ba500fa6cfef2ffba06e6c8135a6b8fd87ba4f1fa2bf48f5b20e60b4ebcb6d046550dc2589a505b4953914a34034d6dd1c4d917a5350609f113aa72d65baccdadd8298480094d0026cc22e258ad6bcc12e0ebd52cb55647a029b3bef17c8cba85f972006eed5705df6b1105e5b805a7fec50160c1eb0f1d444de917ffc899e91d3677465c05db19d173f6adc7b4fd92992a31cf76ba8332f601672de1ffda72f5ee37e1251cb4e49a2df9e25753133617629dcb25bc6d32b81648583d65eba32661729d1ea49a378a45d571ce460bd9647bcd31231a6d251ad40475384ff98c32dbb5a466c2c2447c4bc4b7a8490beb3f3d0da984d5ae7c91d84a3d9531146c2ac55f4ce9e22cded490a923a9f9da7035aec4965f716ccefeb0b687a72cd51cf4919b7999ac5a250de352df2a8eec97228064069b58c7553fcfd74d0aae93ec3a1555416c07f5d2207a707713c2bf1d6c78d8521e1ed18c37ce53150238db454b7076cf21d98df89b638e2ad5137ba8976459e191071ea5566782d1b61b8dbe898a52e6ec475a584238e89a876ff451cfc27db346adc773426eab73529b35d76f13fae5af5db9641dd4aaa292335d27847d1a2d19411edad207a7374a2eecb30f930e46dc5d9dae57c920297c9a83352b0ada88e12d0af4baf76eba004c12f500b0a8a687d6571a7e0972b186dc4397ea8f922823d128132f5e4bbcfd7c34d92849caa40a69e77d8475605cd7a8338a4e4a062108ad87349640675ac1414b387b617527ab4d94bdeb802dccbbb3c2ae0d6612ef83633a535c36cb85d147d280fabcf54d24c7ca0f030c72e36aca3ebc7b6d869507bf428740a42259f6a0e8c194c6670e3fc3c6217be5f9f756525033a63f0382af27715e0e97cd4590704a562fd13dfb99a9ef94bfc44abd09f7d60ca2af89bda4677c15ecf6ddc73678134797683ee15a456dabf5121b8d122a7d00e6a65608414e2f508c958cc83b9b0041b659b0a394d2c38e5c6d341a50b01c71f9288cdff40bf28548e93b2a758286dc6167ade63cdd41d1d7ef5f65ca983ba0a87a9f3107ab7b2a982dc652ec3e0062660b9fff67895b066aa302060fdbf2bd690d1397a1d0b1eb844d281d7548fc909d7ff309a510f0b51598f93df5b71882106ef6ea3e68a1e18294539a81d2f6d901b88c8e0f3e7b5e06dcb54f07b7a8c50bd58b239d3a4c91fc10cee5793eee02e6ed9ad21f8a2927651b1c77c28cfe80d95be4e2fccd0ce4a2d16aa1f2f519df0f0acc991e4189273af3df340176b7a3c475de09b9e7c80144cd9e5366e1da8e045468d99b1b4c1b7e8d77018bba1ce769a4474594137568c29042b55c7afda002181ee650690af9f1e76313e6b1fd16998b503161a6f851e4de6ee41eda024b6c24272c710393849aea0fd89f717acecbe49286a9476bcc2b296b2f3dcee587705d7e923c2a2bbb5e0b79efc2c7e904cd950fa88bff2706d102b1762b5b592ffac41752518acd7066d9de74ef2f053ad35ecb09423e88c17616ec5b9313b8b14200c177e669d030bf61813140ae72a7678d5f1796010a126db1d7bdeb73d8552ffd9f3a5400590a3c952b7cbd1fa6f693856ae08b4cbd67e2b7b0f21607af66863582a940b0f58643739eaa14eb6707a52b2d4579d93f7b0470f1f9d121f3359f187a00a834e3e524dcd073cd1675da978b995f501c8437a0f723a845534200b82e563fc242381bd8fdd4213293dfc626d33fcde021fd14e61f8f5b223732cf4c025a219c71822992ebe915c18af76d912f76768ea58f008e3a5e79169ea8236cd64d8f591864796b92330febdc8742f30dd8faec35f3b93d9a83668d0adc79742297f1f4ac35eb4be3c27a7b67bb586a8b3808efd6db3940f61f8e33e839861492135a3881e8d8c7d2ab82e9084891dde5274f60c884a2dad40b0d482e8b210184728cb89132e313ce86c9d70c9af472604966ceafd990da590408824b32d402d45822b522bdba04bf6daa922d0759ed3840ae8c3743b02a1e4f8a3952105d19812f14f5e26266104135dd621f751ff8d2c3846a998771ad98662f7a33409bf0c75e49f59c08b5fc2486ed39b15cdf146a71e42df2c0d4fed004c9f7ce674c3ad24a40fead8d41c29910ab990b0bfdd901a548ba209f154aee6552061ee87ca5233b0f1fd05edc461cdf8810d2d3c556441270a8d530e86465f5ac67a865002c4c9e6049b24c828d87653d85df0ac0c32cf0fe3c2369eec11d08962cdf04be5e2d5c23e726d9935b0e9c8adee38cb73a0b25572c03a442e60055bd4abd81494012842b51ed3e26c33a1709d97cf549f3613d2f5ea5e7a97fc70a1e5c34a8f16304578d947098be408836f2e8424ba2ca9b213adf9ad0120697b953636c550567e500cb529908d4d83b00ed98939cb4278e12aab4296cee3501479b74e9d71e627c9ce71b4793e2ec43f07c7a16949ee45eaff826133a77dd86e608a502dbfb1e9c82ab23814913975c45d1821710d00e9c5a3a44167d0635de02c4c9acaecc97629dc40165d2def5501c3a393134c5539d5733772d23da5e276498705aa6c6371dc4954b1f37ed147a728131c853cdc0d035e7d5456e4337fad0a2a5f68104508387d0a17f75cbeb9d3b987468a5c46c518289cd5cc5cf537b1ea121bd98175d897bd94bb677510f663b0067fb0bccff93f6253972e680c891f054027992d3ec594004e8c08ca8cd95e5d689be4a9a32e69cad19998681ceca0a836f78377254d2d604ec6d4f9a3e28140cdf9150b4693e98d47385c0c0579aebfc7a36fa67af6b8cc2c420b2ce3db6eaeda63f7b8cfed0ce2f59ccf35865ce9ea9ca301814dd4d761809259b21232fb921090ee434b1f96e40dd0397eab7463cdf5f3a3caf61057e40ac39f85d9b14ed5547fc7aa54080dbd5e3f4c63bb80492d801aa4b365f7f93c606614410918814a2b3adad5896d876a2d80a8c5b490e9ec4ec02cf385e67559e3caff7b55636755b9982b25f5bfa069aac34b7c40f929e3e6b2e1b30790c85b18c540f7d19cc324a011fdec539903f2abcac1985c031619b87a8c26864be1742c2ed68d28025b4422030fc218f0f09da5efb9329124a875f65b704da8b7746dbf389b5074f4da084934764e910b55cd299a5f69b4bd4884e82ec4b2610b67c05764d49d5e1bb29ea91086af2c84ce45a70a7c192dc5134c8de604d69ff70a02b90108abdb32e976001863af666fc124bf2cf0377d527b4a1929a4aea22f1aeb4aa5c880e13bdbf525d55a878cc2d4bc1428a93db5d61da67aea8548d8c0cc9bbbc9799179f8b08bf43814adebd5b38b7aed14add719cc09637a9646b9a141033bdd87503df4fa314bde372d1937182d2aec7c718a65e19474a4159c78d00d886324f92f2d31359862abb416c68866b634641b02c3783cd9e1882e644e358d3594f405012817dc2f80dba3fa0820b69da0e24108be20b7d0a9ed22ad9be076f683c339a03babbdb522ee64127f34b9d901643055f20d502082c90ea32e62b9b75573843770c303df362689aea5e59675725f481a3a30fa2a1ad9838092a89fc617f4e9ad342a3e655121fa389c9b61ec83b51e08df0606229e9a3082efe62db7ebf2aa40c01a0f06f4493b9f5412e6ba819b8c814ba226a56c1eb4d0afbda6df811ad668b6315d37a251749106d0b85bf015989ded4e0425518073ba8107cdc0b538c8433002202680b328a463dee2624377243c8665011a4a4bc444dad5d1fca9dfe9120b8929a60e34b605feaee5b09a314ad6bfcabc457415eed4f2d27af000b671d335413c1544bdbac90ccbe1c28779dc19d8f320ee639188687378db17a3dc015bca1a1219328849d931334ec13887def6800ca7943e3a062224e904398e8274e96dae30748fc1f7b0033cd70dfca40c5cc8c31006223ec8ba2592c3514857b2bd2e18b8714b8affb00f58143b327dd67ca1b919a08d5fcb8e26b24d62dad02f0dde0dacecb4cbacc10d746352518d0972e9a0e85629938b5d260653241f374fca576ce8bbfdba04b2d0db2e3674dfc5d3b093c04765579438cc4c0b0c941986e1e7c3f065a3e9da1d172580716adf07d8d2a41079d0fd3334592e6f8a1087f2f818287c757ae4e446cccbb0c8304c6de66933ff5ba917284aa7f2219cd9a04e273da0d97c1a62261a8f2065e430898e5684f1ec7595f01169955c86372c290fd9e0d946a8911cc91d5ceb170ca0be57225aa66070bc5acf2a41e50788e76a79d34f88d4460fc37714da865dd170bfe1cf733dfeb186810343b65f7f0bf5fbcad45e7c34703a4fc8882f054fc7c346ee04299eb43b897df0a0ba4ce84bc779efa5d7e476a18b3b197e86ccf06876c7c33b656ed11c522593219b98841fbef06aaf69572848365fd0d4983307c126d22789fb2b479daf1e5e64fa838e2d73f4d1f36c70c4d7d77eb2685893552f5e82edc36968f2543f80ae12f4db4070f722f09c46577959834162f067f27b26f8abeff824865a7e35d829e229f3922528b5b8a337ceec5121bdec0386db744a101982294e71ecaf183ae9c3cb87882e847947c2ff8acdb63e963c55f70d879761b7d2f3f84a539e9eda1a1e795c5c4cade1704ee065e109fc038c4b79c0c7e134926ffdfb6b5c178c62db3618fdad7e564f90984fa800e73c187a6b393e6b70372d3a8d69606c9246239ff3f0607f1905affb83f68b6573bad596d9a1488701671b69604d3a8fab1c13b576a49a7669a998ee546f7ce12c9005b496ab052eb794296eb190be70fe32680cb1e7390183dc3613c092dd8a74059386c59ef7dcade0c975bec32cf5c8a6d1939b8eac5549fc0a3cf51fb4be5df2b5b24c9609aaa72ac813f135d5019b5d0d3157208566b6a0914029d02d95481d3c1857580b6e6e55094f03b4d4449200beaab9e5d8812b27c617edfbb133cfdd1a964aeda4fa0afde68be1314ff183783342aa20a654ae1a4a3ad13f8802dfecadf4a0dd00e48b5edf82e3d4565a55edf9d7ba247baaf419c7028fd1c279213314e8da10d0d1fcaed8c63db4698ea56720e4071e0d89fc5ffa2bd1d14d9758f28868f096a1589d274099783c067c83f0ba58a0e4a7beb4b9d120457ae2874b7623b1a05e4f999ca45e155f80b04b0490474b0e68796171ce352a064a00fbf004929fa8960f42e1e10fcaf30fd510c91bc54b535484f8045ef98cf5b46dfa8522517c7465831eb34ea11ba1e80ee82d28807dd2ebfdb801b7029d82580fcd7bca01ae0944a2c64a4d1f89d0333f096d0bfc8b5cc1ef5e90b0e59e41d84ffd561dd73754097ef74462d027f8b3b2e47f184d47cff31763394217c6897c1ff1ff17af95147d0db48591fea303856977df91610d9ff514da4edfcd056546619b71fd8755be8aeea8ae0bc083a6456fb39690289fb6e6b90ed1626fa6d449d7ff83b4fb3c41867b166d21b502b234f5831e6fa8745ceed1cdb4e47c383e2ea6fa271eee11c0f8a8738d979b74770dac5772ddd97ed7e2901a9586e0cb20fccbeb708262e51005c9ce3e0b4f8c504d7177deca36287ffef7822f59f9a9be326fa90a5ae91472af9a2f46f31f8be7534d0aba47f079f42f7062689542cf79373a2597a83408afc4c34ff5cf0c85ca83d2480534237af95f15884cbd1d15197b81f1ef21d14cfeaaa80eb658554ad8eaba1eb64a2676aed8f83fb7a85cdcd4aa2672c9993c8e69068538b61d54fd8cfb448298988ff6c7072f5253b117c568b86be1e5ccf1cb49bd7ccbffa2a9c1f5b99db30a72fcff1725bfdbea1277936492e89dfaf508c9df1bd36a2dabf14fe5d202ff2c51ef635056c17c49a4f9c6035bd3206143e845e761dafdd5df8b37671df20e078271638a16e8e204d48bf0d35743ff775e4b2871473cef9e309b3ba585357df508cb735285f8db539eba872e6fa561759129759ce804bb353d199e3123b8a3d18f772e6dc5501cea1faa0a7b65adf3d55f0b619d754bb3fda04c2be6696f2ca3add26848eff703617da354437e1879c2776a908dcac3e893e9d980b916bed4694a400c9b8dd0ab61d3e101ca492f7a380eb46ebc26e295007f0cc4b6edc484a814a41d4bba65b38e0a6421cc4682d81a4522b6c73876f1ad70ed71d358040e831cf4bb1cb65f1e5cc9449fad9794f8501ec61cf899df8a1a11e86580f72ea20de48abfb4a6a148798b947d02035d3b459efd2352dbc8b45990af32162ddbaea1d678d9a6fea7d6109604e79960b2df7c6bbd0d53ba612e768bdb4f3a2cfa4a2f81b376c5feb77b3248d03628b8cee9bf749c879454b1bc44340773eacac194ea823dcf6e24404ed525b502bb07ae8237afd9f1515389c4eb1e98b3fde0099c8d13a46d0c594767e895f8e28a9b8a60bc141f88cf230ecf7cdc423afa4e75f9b6c75c01ad371db7d0d523c9be34e988c81353cc18331e9b3a2ba060c659e18c47c745db9556a4319dd2e2ff856b4d2e3b740c049a096fa657208c59371da9713c49955832ffc430212d9ec74d4095b72059841d7f088d31cce054900c0b1e5121f83ed3c1b73c2fb3d1cb44815730bc5c341eab41d682736baf00804a668df0bda8346b3bbe844368496fb2a59449a6300ad70ae1095fe4482db941e408163c5c3a88b15ab32548c7ce085e35d2aacea492b01941ca1b33385098ba33524aa9d95e4203a1e04fd260cc0c554cbeae50d9a2805592323b04999c9902520f9af40789e559a04e9c3632acf1489302c21c1c61b2b07eb49141953c902a15e49c89d20583a3cde021b525ec8d0b2298d4f0616655034a9b9f283c3ec0582163a4ab7770e10424544ce4d8f111c446ce1b3d6a4fc6eeb48072f6e4bf1650cabc880e9a0ce053322ae63f0ce6bf9c5730183c01d84efe13b3e47eaae5bf067259c99d765636563bec4f7a55e52337138d7224ea45a5fc4d5ffddd760826d51f354b4b0bda11a22608b43b3009024f0f7a90be47b955dd81f2bedf3c018a2d32393a724c09c172013d68336ad861898d1b4027c80942e3898c286517b833e44c0e324cd864310103c0d6b4dc7401b1f3c64706189c345240ae0405c0d5e5c5456d06235f467aa6a040f563cc0b6b4e4d63f7c4cafbfe71e0cb97ae323dbab86c9975d0d0d45912848734e7d8bd3ae4b492b81699bea4a971887e8fcc35eee7f57fbfd9dfbd86211ab1f00c80e00dbc707afa1979916fe085d313c56a51aca51cecdf46a28893780f14e10708feec2fe2fe414de1e025ec090d2f6a72001dcf179b2970ac92988101ef98f102168c7c37d7257c82e0f32937d17772b1e9881bd843ea642d6973fd8981006480ccd024069b156e00fd93fa07f5644e14b53077bab2c0019a60468c1dbaacb87459b9a1240e151b8a2089a109b0ceed25952386e0f3db0b4b747fa21ab0d257a2297cf27c35acb7fcc0cd92c94d7fa22f7c8a63995bc23ef7f988e1cf50557eb0899a3ad315e509d09fa97f502b40118b22c30b35106902f417a17f9d03951458606206498c1f40ff16fd838a91048e993773bc282903fc81c6078d327da38f01ec418d1714267174288307487fd7bf02d8500307b519b0c8ea00e913f5af69909326ca0b4fe8d81103d2eff5afe3dc11230366061d5c2ff8d4c62e4129a5958a621531aeb9d6af5ea5601268ed9f016851bd3550ae2d03cd457d54df8a652dabb5370cafd5dd2faa6f76099beb9bdd47f4c33ebbbbdbeaee20b4cd565233ff9a9614a9a4663fa5bc114116e4fed382eea32b05d32ff2fab463f00364dab975ddb667fd8db5385cc5b9b64df348a9e8f629a594526b713fa61c782902cde0fefda02e41cb07f4d1fd1536e0f3c344b8802355d1defefe084e25dcff0d18f57a1e767ebe367a69c0f49d74223fe0e6fd1c59c20822b9013745a845f72f135c6e857b7855eeee242069bdf8dafae3d4ee8c4c9f916964e22198b7dbb9d95f852bc8462b3ed3d2e40dc1617c6cf182f084f4007c007400d7e784ca621fa161772ff1ceca28c713c213b207e70ec03176efbcc16c7fa4f527fa7c39c58816f049cf6c58fde5dedede8ab7f60e7ccad3a974e659ae742ad1c63beb123e5638a47a80039daa16d9bf814f1b76a9e0f327dbf7ba40fddd7cf567c370ffacd54f97b86f9acfb36598f5f14cfc31e0d181ad4b71b3e0f0d61cc010db4734092907fefd272ef7d333ca81971e46db74895a3a983eb2d6aafe4ab061f5e761b5c8abfe6a54ee4fde87655ba7ac978f28ea30cef178f634f349cf6e6555f2114b707d7f5b42ab05af8f634488e4d173625d5e92beb5d96c3797cbdd9cc572ad72f83914ebdb6cb63f73b93f77b9bf36249bcd76157073589ea59082d7d82e871b060ea4b464c8a882cfdd0e4d2e27e2a427384b4acaca1811ddca89bcdbee7613a7e0b3bd94da58b40b7e5cf0234c8989d7338d7c4c4a1f48f152c24d1891a9a92a376e204162cb59b1026565b89ceededccdcddb3fb1342bdbc46cbbf4bc8f1b79bcdca535dbcaa6f06f694b31a864891291d7c24e4b854c7fa7a5c29138476c529c345b7a72745f3a327ddd978e0b805c00a44b05cacaac6fe0049f188ba2cdb1c118638c71a5584c0d0a56c3f69a27416ed8d11b785082993e0f4ad04a8e5ef317e4e8508320606ccc66931392135265ec5ed5e180cf5dae67aebe08bc6aab5d9dfd5be7d5cb1cbb8ebc5ae45e9e2d6a12cfabf22aaf3cfff6b7177fd3d2a9b851a148caf673f5ab4f18fefb903a1a926efa92c27c30f94362dbdf48a0803d7b7ec849f9640a02b6e68599afc5b9d8c4003f18e007117466f0d9634e35d7b735fbf36c0b115820c05e1177b3a2bde148db0728415c8206e3dc8e032498c7e3f1aa6f860b66d8e00533eed3ef4b6bb631b22d8756dc2115276804b96cae0bf6fa3a910613dc9ff0409ffab85a37d07deb1aa07b5d059125be58bef93e76240f4fa79a6de4697b9c6dfc90a4e4f999f22a510efb4e3cc5acfb33677b12b4a8e438189e6febaa8dec5cf7ecd9b346f32d9ba66c6e2d726a543025444b5190b11ee4d4b0566eace10aa32628a44dafb960054cb0051d615d7968ae45cc7b6a6db561288d358b76f3c1d6dbe15ce778b9c5aabce0f88bb68698902c7417ab0a61370cbd6476600336e4ca8e2b78a8d06043952b1b6376c8acb96af201084a4c1e43d5157f5c55c0f2c4c6e626deb126f68591a7e4434651890783b8e5c69a5b9512d1862a2db7ca862b96bc5e0e400e4ea2deb029c3d1030818b264083346458ed958d50ab72a8bf7662eb75815902aa97cfaf20d8fb5bc0e7fbe7eb2c8a1f7de7befbda1edf0d65af697b1d6b26905175f191f31680c5b15a975399476531c741b418bce12478bbc521d0a9afbc869692dbd4fafb5f4060400122b2cdbdd9d96194948d124a4f09cc2f6acadf65a233769f5394dc0b289fdf41431bef551ee6e5bbb7fb4a16eb71601708a999ea2af9b524bb9c48971dbe24166003bd0dec4890115c507143252757848b16121668a0f5b66b41142064f1814b2987005e5d64247070bd2b89462535f68623bb8c486d0191334c20d1c1e6d6654656101d2c7f50fd3e8e23216e5829819200ddea1c0f6df68c7d297d42deada8855ac63a97b28607d9f8702de449f6731be4ff9c404f74f228bf17ddea77c1a4b28e06d14dd2c8ba3978d95c7388e370f63f4702d057625bb16d94a9f1f29b5d16c7b5b036dba1bf8b4f579f7effd9b6f98fbb01c5ae1affb14fe3a1db691a7b57d88fbf1951c2ae3c2bf91e708397c37a9ce1696be2e63f730498140df417fc5a0d20784495d1a3edb4b2b21d9ac0f0cf4f8b158dadb99288af62646835a6eb12c5ef9446eb12c6199e748e23bd038fe685788fff329c4ff79a87c237d74dfbafa50b9d21d680623578eb46ee2bebcddcad3e9568a1fda926eb9295a2cbc03d5c03e2ea31e88b1f02b554cc9066a59fbbbbdbd9544ba37f8cc20fbe77a73b4d67b6fbdf52917cdc056b16edf3a09d0285483fab732ea8137ac1bf622fab6d21f6c8fc1f4e747044e9d42b5237d4e0ca5e123abeacaa7c823ea85e450fd70a886655492198664140f188a61f84a1e3e0d6f18da6cb606dec2dbb7b4e1e33c7aaeb705d3a75eed0d6d6f77e7ed96a1b5a1cddac2b7211677ba109704e286e8df37b00ec588ebea69e9c5e03be32303110522ca5726b7270cad189bcd66bb4febd36bbb4febd37aafcd766fb56548a90c5ef4ed986b69ad4d6d486b69437ba5ae0dc584f64ad55aebb56168af1406020a0a0ab23f6065214024252525dd14d03fdbbbad1c814df646937d4c5eb0565043244c0f3270ea8f969b14d7dddd382ddc162e6b09c665d55f18e548349f2fee54b671b0f5ea1b952f1ad5ed277397b72f2bd785d06972c5e379a772332007be2fee142eabe2b270596fa832a57fa9aed5cdba5b5b362d0ddea0a982c44e192d39198d1c343f5c81b9191343e4e426ed1e98ce0faffe7eaa5de1f3b73c9f563ce5a6f075afe4d68624a8b949f761083e7f6992ef360d73d3908afe7c4b134c300dbfdd7c5fa549d867e6b07e78bc8a9b57057f3e7dbe7e333576c6ce9b2c58884015c9a342d49b1764f02003a47fc146bbbb8005a2bfb7ec242d8cc5ce38867fd3473fc98ce6217fa8bc23eaed887a6720604243c084c617b4406f64eea180228bf1739f2b9fba840a616885f8b8c7954db7b2eb08f90cdfc9669be8e64d41c1b41d1c4dee1c11d2242bebf7440d15921959d4c401d2b7b547eb1aa5cae45f4b13eafbd737c1bf5d60aa3fdb4301c5f06b40012d1450ac5d8ad8f42575d97efcb1dddd4f4e4da7fffe65eadc7d7bb3ff2da1329458af16d1b0c17c6749a0a2661b8e96a4d44d4ab3bf8a9add2de9236102cccb5e8bb198c0065edc18bbd75525a532f5e053cc3eb2bfd313a541a58022c63cb75f6d29f62da148174d20e6fd03d6f0e75314f10c3ca068014323460c17d07f74d161071c1d7084a801fb88fa1df23f28207d267f16f6fd8949972cfc6bf9e4e5d0d77fb2a56dd39744dfb7467043080f3d5bec947d592ae203902274d0482d11c10f3a62407923466acd89306f6c9ccd39db9364ccd8bd7efa9d8756f8d7af9d7d8ae4723ba21e19b76e735446dcd041c3130c13437d408206862239c0c878cf3f27448685273fc2d0da2c01fa18284d7644793205c915b0c938fef89fa23f69662749643feba3feeaa37ebacbbcec642f5b5d0a01e4db581fb5575bed0d4d37fbc78a4dca6b1ed1ce0a539d8f6ea965c0f587522cf272ffe850dc44a880e98f3f41baa5ff81cfdfd11f856ce115b255484848e884cabc9fece569815c4bebd547fda7b8e4abba146216ed5576f2ec4b5797c24de431ccd97429a8484551eceb23d20c7e6e3477796620dbb03e6aaef366e5f629eb235d0a5b16754bfea28ec92d4ec4d970b8f0e26cc539c535e973a220e3722f8cddf30a4104db37eb8f048823b84f31bbcda7d3cd3f5f432aeadf2ed896a7d8432b3b79ee6e354f6240a2262d0f0bc1089891c910d5c20937ac74d370b3579cc1a7cfe748f74f5f2e5f52cc4ed66c49d1dd732489b03aedebe365f7d196365d69f6b0f112e448c9161940d480e0a103674cd158f5b1fc49b859cbf7a2feb2a172dcf05a83e6030e2d2e00bb0c181b6650dde9729303288032707ee460a685186a00f68d1a6e88a13a92c3149af6ca82cbfcd85292c40a0f90f64004898d1b3dd6ae8e84dfdd5dbbbb938af872d09375e4069e263f5ccc084b01c80b315020936d18b1e54a9838757864b9a1821ff28c59b3844ed79db31f515ece44b92195e30218b090d9610a0d862963630551a0a2c2c4d868230585194f4a30fb41861c1e784899c1953595f6644d8754921c6bb0b2c0e941cc8dd82f2db16fe4bff32b5c28747d25e9d292e6831d50a8a0a015a60405a07b1933f051cb2f62dae028d3b1278c0f20e592c20e3c36869cb1127381345f72188322654c5702e2b8a981048529372e00292d03747e497908653b781812c4ea1206849165480e76e67c453901fa992073b6e860d9f1230ed0e5cc4003830c33bce8d003d0ab7c99be8ffe697ee3fe85686d9a8ca142a4ce8f374b565c39c678a0908706207d1b29d6a25ad47f4993eca7ee615ac4bc5f8a2a290deaade5594ec3affcaa91b2da754c3db4414e8011edb274b29906b3939d9d86948f2af72d3d23d5912085677f15164567f08357e442170d5a69e6380103d260932549b2bc50c64ea3f0b90ad4a918c4dd48347d8ee4a5bf919bbe26375770c1fd2709934475af9e691631940b377cf922b5052bc89d1280045123248516a658d5ac0a04d45fb4d0d0a08c2d19230448d3b0d11344052c40c898b830f60fffd4ae4d0039b6d60d72027235cab574b2b984dc8e888becb0c30ec913444589c324073d70c268d8212c4c8f1e1f4752c8337e58ddf6395b737dc3f0be87b73cd2a64dadcf2d7159e37963a38e0d5f338c2c01338243cd11b31b5f78bcb1f65a7badb5d60960077fa6d426e5841a69c6b89ce1a0b4644c9e246fa0d8c9e38358457fd17d3f98a0f5b0b241450fd0af786981cd9a981972685859372fa5948b7f5b5b2b0063e44e1a599b4392e7e6ce563bd4e5900a126cae6f6bf9c2cc980238e4440982830d9a13ae1f5ac871f603872934a9d1f352bf91d9e452efec652347a2f976f5e93952bd9576d3ead3d63f1702cc180e35bebc6961cf8827518454a9c251a5877b7102244e5a92325db6a4807486155a909385c6992f2b2080bab183570a4972e0d1850638012b4962a8925263861e6e4cc8098233a6a3053a5e8a3401d2321b40a6ce0879c30307909e404386143a44aec2d030812b552a84edc95ac301a41ff8a900cce62a827d5dbe7947c44387a0c90b664f8cdc500307085eead8a0f6c387a82a5cc224a69bb7d2be4f7348b5d65a6bb57fde7b6fadb56b38c51f576bcb128ceff95abf7e41e4b939576b990b7f37b400fb4328e8cd2254b6b91d1196584577021059bba18996143959400f032606302f3a565a186245c21786f68661188629c84d27d79bb4c194a0376e6e70214283eacb7a65515d4963e48e13d712458cfbdff778c1618c0d69c0d6505cb90af3f2418d12196ca054c45463adb691e8d7af621541b4f152830b7aa6d470017a97b524696d8a04f39cf0c332a7cb14b3ab21709a6e04c14a33474bab06d0c827fdc0fd4774f067fa6e1e75616992434a871ed4bace179c203fb0d218a14106948d3a3f9ced71e3f5434edf50a74814151eb8e894f1ff12150868cbe7ee3536c0827969f26839d3a1cddada12a0bfd93f9f284ca49a046f88010be82f76adb5d26ceb57d28a4578e88b00d8ba410995185a59b860806a853361b8b8a0a389d8f8b5f30ced6f1f508176c8011568df27d30c05431c233158d08127099edc438dda0e6068c08cd127a2df23c18318b4dcf8a0648a9d30396c01b3a3678f0a65347891e1412a8f0e35cabc1001346436849901cd921542f18dc81ed94b21be97bd3eea923ecf561a999dcf5ea6d73acd464e3f275a51218b993d5ac03809c1cb0b33c2bcac45b15361404159191f63b6b2082183aaf252454a1a0f5fa258c05a7282546048abc2218f9c17a80ca1b2c584cd3f0f2c08a84be0bff54fac1d14a495b6757625c8111b3990d0cc986a73c44e9c2929a137521842b1a04387a92941eeb8e9e2218814b2315247eaa0814a814c06113641a42489c3644c0b0e326f6858f202124a6f99f6cf7a51bb3fcdb71681bae888726609901934ac94e4b1b3a6234c161a6ca0bff36205098e334e9264ed00e5429c24606c7634b901090994d23255d47288494109d5960c74c6b8de60c5912104c809fe4c5fa48fa7dc44d20630e033b7eb5f8b2923870a0b9c1e5fde00fd89faa7012a3560d932050b9134a07faf7f27c8b3e5052f1c3bde9001fa1bf5efc421c8102a557af8b20144d27377f71f3a46ca7871b101852c200d4ba18e0b71d24e281303a48ffbd76cb4f8b0aa3343151a31203d22250cc8d5933035aad01baa5169d6a42b7cf68c7a66f54a82cd2fcceca598db11b9c9d1dfd127a2df1bc1fdcf1ed246a21fb66e291ceaa7f9f60f041a34508058b1898a92c0172760634570e8f102c2470f31466820c3da42674e9992306d76700206e85ef4935200525267077f6e282a6c9ab87913a545079b2ef3e48e0d387454b12283d1cfeb5763363cc9b1024fc80d64ce7c71792d69621ba9fe10fdfb6ffa9288763e1eeac98f2249ccdcb14284079f14f664b983d5e6872b3599e6f1c7bf5980e1b3c5ac79f3eb78b5871ce0c04ccb9f2a12263ee807a14c6cbc8fcbaabf2111c20fcb270abc0f0554da824f9ced373014b2aaf577bf6e615de233bd5999be0d7576e89b453b1e6ecbaccc7efdfb2cc272c8ed43016b39e4b7bc5f9fc5adf56df954cba1b6ff742f4d5262e2fde52529315518c6f05968123f6cd2894db7efac64079f9857dff6b7dcbaa530cced31f0a07674c992018e8f3563a2488145e138b3248a0f355c18b36386479797ac32634f41286567cee0d8d031fe8c5f7d1c4926b7fa375b18e2c0a7a5831da98ab6b2de6e4db7bf7f7fbc9136b4895fdba9e63b5e4bdf5ca189881cc9dafb50405a59d8bff76d198625149096a76833ee5a806c499b46d2b2002b0a90b16c89bb9d82f9ef37fb7dfd49d62f0a4f4c58944f576c316892942571a3a64a151490206a683220614247c62d853855d23c99ca43a7bfbaec5121aa8b0b9c197a10515f12127c9a3efab652126c76b2b996efa689cbc4913a4d4e9347cf99306bd30f4cf8afbf78bd3002fd597c65ff166780fe174892fd3720d6632bfbbf7032cd647f5ffdd1604255781e213bd93245a7c9344da62566c1a4966d8a34e8a69b6ec284ff07fe20f8b308da5018cb7acf62022ddc2421669ebfed71d946929bb492c0a5028ae09e6924925099c8cd0c9571e48d6c200912263e0081ec2063f7e82d438ce1d344ee1ff30c25376189d58f91c2124b2cad17919043f2b7a4376f97fde70afe7c12f513f51bf59398f2f7eff254e1df0df0efc78008ee6f0cac707f635085fb3bb77f9743ef26cd3d377d8a1819d12741df44ffa0920c9992a14ad819342340fa1ff4afd3743943039a0d395168e824ee2e3e114973cf342291e4d44b26374384e173977f5d73b5694845ed7c2bcf9b8935ec5d1271c1e7e777246b64addfeadf3e45fd9bf5b7e1db3c2c1da9b32db170bff39d4d877f52192504f810a0a4a4d43576ef96810ffcb731a4ee3a3c48cf7d6ae73a887cca7bf67dfeeb7911cdfd01166e51e9481f3f7d115874e107225bb704546d36dba7b06f2ba172f8a48d3cfb71436521d2c9735049a3d00c7a195b372bd5f5078e04022e4baafbf6dc79bfdf82e0267d1ff2c4b9f2b499fc20040e18470ef587dff9460e756e47b2658acedddfd946328170058bb76ddad88648144dccc1a78873d8de5ec9697952ae7c3af90d9f4e2ee2a8999b22eed659bc91d6ea966849b7467ab378bb51f266db65a7a728621fc28a7ae0f8a7cd586399821d90492dc5352df46de94e0a3e31c55f7fc43457dc9b4698ec8c6b7d5c7e88307cdafa39fc97fcd965fc4a2e3ad268420ff6b79fc5f2a426f4601f20fb5454e1f35e8eff435a37f187a41099f3225c9e2f76d9964d1897a7cf8b25d08f9e1377b9752b7c765842d18dc9a617bb107e7ec4e5f922639f5dbbe94376ce91fd62978754fcfc4881bee9c52e07fd8b5dcea918ffa76cc24fff7c5c360595432a3ae74a9d6ed415a04a8e9a899f1331c69fc23eb6d9e775943c9f32c5e40f54a63fb9f7214fcaa554716f69b6385224736eda2ac8976c313d55b9ddac71707d5e957195c60387182cb41a80f5cdfe657087068f285747b0bc80d86f39846f6b5a9169de814f9ce9e34ada17739da56a0c424bb87ce9e2e686ac177ed4e8a024cad7932e2d66c6fb54488fbfc58007ec8fdd6da7139415fdb60fc9a62e875484eefd30eadf5afbc7ab061ed86805cf8ce4e86205458e931f6af860b60748df9764d174a0c89e387bc6cce84883444894372d4ce9614a889b3d1f1e9da8067c7ef679919bf82c98fef9466fbefb7c494a4c364febc086072b2c78a044c9d1821a912a675dd6a8602686d8df48f57ba9bbb48f79357037c07ebf9297e2506ec9fa880099154ef821052d389c00b9c4c4a0f2039a0f5d1bf8e2a48b0c2c347cd8d368be4c491b53048f1414803e1c84f6d4ef1059f0e96bf21da9df3ad5279bea871fbe2d0183221818c1f43b9f3e9f4e45fdd0f663ebecb59d6276aa4d1e82974d5412f13215dfbe58f6c8fede0f0ef87392127d266c97fc2fd964fbb0e969165184973c6d9f4fe257d2f6374b3a794e8afed33769d5e3f4cc8fa8b25fcf12882bc2b7fd259bc27288a9f3ed17d01906cdf7ed876fab97411eba648043e3861e46a04ee07243ca952970785003a4158c1379f6422bb5e5affb0551b69f73b28dfadce59dad3e7bf03f7d53ca0b9a367586e858e187115d82a040060a922028888db71f71e4761e71e40edc67c654e5f06f0e08826f1f7ed52dddc6cf0d896f2bcb8936d2c9919a56092b014ff67ff25fe9482d9627ca7f38180cce41cbee93fd299523b5d89a59f6a755f4ea038e1fe869f9f4f3b816911688c1b9e7b9e9afe45efdc246d44765b0ae7472d3158004e778e5137e4a315989c43279242f8e6cba7d189222d5ad38fbafcde626f27fe184f4c34c1817ca4ce19ac103d266eacc9414d85801fdab8deb03a536594c60032ffc95bcd66ac11e4cbf7fa45f4d93524a29a594524a2ddaae9fc88e10b10d829deed310ba0310e592f4dff64d36d17248853de9d00afbe2dbbe4fa7fa30686ef23eddf9ae7752f833948fb01cbe78447942050cb0cf74f070d3250f15337a2a80e6e56549141e2f6d80fe5e6728f08902fdfbbfd5d6606163b6756506c7131c1dee54b141cc0c12b27147d4bbc108871b471cee2f6e1ccfc491bc3fda7c2589917c37693bd92b4d52087e13b91daef4711cc7711c2f9528ba49437cdb0afe2d56c860b0d3d5a48d0cadc6cd0db3212ca0dd6003a42f42ff2a70c6478c3b5a3aa8d500a42bec5833d5e44a9a171d60999ad145a85fcb270af4120a484911d7a27e9d1d1eafff01e0820f47d890593922030895c44c5899301c33e85162f601084c3d9e1109133d231226b06eafe462ff79a9fdf35614fde2af68ea10c2b28441b3adde32f7b774aaa68bd9b16ee5075ee41f9c3d231226b4b6b2bf93fba0535d5e56baa244f18b8e4e8e44d7be04ff7930979dba844f3640f617ddcab3b27bb681ed57e7c2f6fe6cc11ea46b6e2aa008ae27cdb675282e6801bf99a738ab3f5b49c746fbb88702565b0e39c0f6b86761b3ff14bead64617b12df06052cab5f4b4ae6049f74ac3e1dab3f7a76e663b5333d03a376a6e6418ff2f75901db1ef7e3883c45bbb2ad1e5c03c327edeaa25db44badbae852d9ab59143228acb903839c34602ea8a68685bb8fe8543e3155d1f481a609b4a0833d9f4da7852d2c87ea43015b742db225951aaaa50834a85a148a31b881e327d522c7d91ef74f4c58846ffb27b17c62c242fcb17c125f2c9f4c5cd2d393588b6ad19fe29fe6db4a2660585ab0079ffd85153e8d72f791a9fea85a2df217458ccf1617f840fdf954149da254d40a68cbbad0981a3e9034e1befd9034818909e14bc0564ae0960df43972a57fd74fd4df337d494e46fa27cddebfeb18623e68f170a54a4d126007407fec486d878dd8868cab71a1aa52c5b21a96cfa4eeb01e3392c4db8e9211ac32de9b468254e912bdf0172fecc7ccb2de52403792ed5eaa55ab0fb1ea2a3795a2d6dacf9686df14beed6cb0dcb59fda4a2637fbedbd61795afb155c2f9e79adfd0a44fb3705d46f36c6069af55759886466683e1abe4ef212dbd6b6b6b55845afc67befbdf7ded052addc0d53109602b131bc36fc5b786d78ed69e6b045b6d7165e6b9da440a85b0adcc319b49af52782fd242ae5a334ccb5a7c343736ce622d9af7db85885af825a4969be33b3ecc77861f4ab9f76a5e53b952bd5a241ba9582301ea65a29101b455c3f29c9e733cd7f1e0f63a97c5340074732b519e455ab2058be5c56d54ab4a25db9da5ec9c3e7f16e8b5cbf8b2ef51aa9e8043ed0479d5bf4517f975e22979d8731dc140ad6e5162be28684abc13d142193cff6520a634dde0ee36fccfb225c8078dfc4317723ba892f02ee26f64020328d4824297dc0c462b7735bd97b1444446209b93ea53a1bc35563840a8f1362c858c17950126add269005a66a88598fad351e5042c38f215ebe489ddd336ea06037340c618173698ed2223464f7c92d56244a16ca2d5664852d237d3789dcf49ab3f6de30b48994bc5b4b570b9735e670634ec7db619dcee6442b37bbaaa9faa82979a996ae8f1436dfa99f1c25891abbd927ce2bfb2705c1cedb7510258512b0059f978b92b7eb725d2b5d97ab3d44081ae2fa0ca908b37f04f2dd72b385763b10560408112244ec8482448800c2224488f811e1a313214244017cc4b3b17ffc59aab5d65a2ba54d67ecded9754404752d7ed5acfaf3b4aefae37d077d83f816f17546f591fbeb8e46aa41aa1a558b82958623fd7cef6edfef648ee463f3b36a255efb833155027ff3ea2f9160c452b6273bf50a5eee7214475cb969f34db4d9aecddaab5bba3fe282e07ea5da6198cbe19c88a001c0b07fdb7c9e508ba2ca4863f647318526fba3f081822a18f420d86361643f0a6c312254d9ffc41af5f1f1691cbe5a7cddaf1f11284774492c1a4cc20ff13c92c9031ac8a371820964723f44798208646261e468134694a388c227d4babc4621b28121598180d0966ccf0b47f40c561e4c7940a5224ac594074115412635263a4c694c4c604c614c622a6298552d5628a2504ca1f0a1a58a328d3d39a166c3e14b7300238a66e0efdf226c29cc91c6f747115c12232333334343a33343703c0b018d7c5eae4cff3ca176b7ae969b943e8c28cac165a133a0efb7854cebe0c8fe21cea8847643227821f6e00a2ad02d854fb443c31ed0f02098448507507a108c7a20d0593e3ba08a9a7211e662ac9e500b1b2333134758d9504889102f6e242333330b51c1d6d608ab01e4a696b0942e85cdb6de09b5b17c769045657542ad8360542df20ea6c6c26a915f65696d916527c355a97021a84278824f1c255e175720a846501120f7e565a56bca0755550d575c5a6761636466629aa90f4cf5016a51a7b12007f67595a5b5e5a63f57162b6a20c6caced0e8dc1a2085cfeef215ec528002ecd0f0d963611658500010a48b2f17613f6ab5c8ab8b6b2b4a6aca87f84264d40341e462a8baca8e7fd6fc07e2c57ed41cc9460682442185226ab4b908eb12b727fb294f273ba18676428de24aa52f2c205cda4f9a07410f68f80fe8867867fbb4ec7f3373a66e29fc04c860e6ccd05c58b9e90fe29ee1cefa28fc81284facf9d0992dba4088ccac823c962dc61820049ff70b04297ed5dfcdaa45f4bdcaba32bd5b995e03185d70d446186092f6117d2052887cdf2083136bf4841a99ed431b8ebedc25b1403c108852ac4597c4027a4b962349fe8935ddd209352abc8422aa8ffc0310c42dca1c296c31d682cc91ee875d2237922ab62e0c1f5da286ae294752c12500129c705661a48ffc5510e90cfc85c819740f50e8c7a72d80ff0f7d421541daf407225584a42d0b9161a982ca8360fdd5b0adac2b09a849602d48230a460e2e18518ee4c2051452555a7c68a92057bab0ea1abcc26e976f403f88bc5eb5888a541b0c8d484a3b915682a9395473ace664cdd99ad335c76b4e96124ccd999a6335276bced69cae395e73b28cd0a04c031d863430d3e04c03340dca92d23428cbfe2352ee9258214294e5b3032b1ed9c1540754b5c8459027d46a9177107461951682f4808607c121b86708667f145128a4504c297d29a97509f1fd95c0fcc744e645fe646466666827d44ea8b596281ed398143e3118d360ac8f46a0ba599165996da175d1494b031b812a8d2a2d2b6d2bad2bcd2bed2b0d8c772bfa2aaae17603c0ed45512c0273d38bc28ac48abeae2dc460ace897bb2456d083205d8c912ec2fac87f47baf8215d6471d33f47baf072e143baa8225d5cb9c80afa3aa391ba4df1fd6bd0915c7c6933aafe5c68e5a2b2f258b56a5146b618ab45fe40648bb05ae41f0463aafe5a988da1d599cafe22c210b6c2ebe2ca7f21b0aa2eac5c8c7589f1452d9ce3c295679bb1f259b2f79b2f3360b9cd88f51bb131b2ecdf22cc91c4fc07f4fe6308acea4f09cc8bfcc5de58916d9975a17965f7a2f3e5b51696259f1dd0782396fd45f204107962cd8bfc45e850d84aa5af25f814f379422d4fe9237f1c900c44a290f2227f1e8a06c4c0e709352d51d9bf031a8e24beda89b50e828ed4b3e2a6f7bcb2b8892b7b5d37dceb0a0162b70b11e2fadcca1156a20d57b035c26827246464747d6c258eeaa33c0204d59d2a91e3603c3231e28c4cdc4413b60180d89968da3aa12020fc9323f2a975ac20b0a3cc6d1c6fddddf881943ce8bbbbbb31d93928e81be8835ec9831e28a885844aeb45f41bf3b0153f97d3e930eec6f87d7e307ea0efee0e0aeaeea0a0b2fbc807e8c7d4bdf0f1441177eb6cb39606f968c366b3893bf334e15f3f6caa14dfc0f72bbd65537dffa6faedef58b75b15af04c7b650576b53b8f450f345870a604c5f92130f7b0400d4b03f0eed87a1b5e1df152a50746869cecd03ecc0a7587fbb9dd78ecdf8137ef74e9f7d1b4e6c915480193eadbff51357da30246f61e8f696ab768bd1145597943a6130042be0a227872436cac09cf488c9a06ff126feed29c6f816f4d4f6fd1314141414849f244dace1a013fbaec4403258c744b3d08fad53813fc8cd1f1ea50078faadf3214f9a833cfb7ce3ff19f1223e4408110fe277412fe2bf1d49c4efbeb388f2a439c4037deb5404fd88f22c01140048eba6cff348d14d1f377d44944d432a76eff3d9a73c833e0488b201f8835ec9ab50102e73b95db7e4f32b74bffb14badf3d54c6e469330e22cfa71cf442e449b3d0ef80be7541503908e8e7f1cf37798e70eb7e1d7971fdf74614078b3d82e286b8edfe1d01f294c101248629727a80e1b187aa4e0d5744a27c69db38d02f695b0f985911691343872e29009bc7162f597418b902e30521dbe32407ae267b3090014a9e326a665089c1e1aced39ea88aa8ac330b4ef63b5e3f643bb80be4e37577f17eb0f7bd0f42551b5a75d9ae8f1ee987695ddae9fa8bfd76fe4382cdd70a4ce1633375449c94086ab35395e3d58adb919f8b8ffa62f89832df8fc1b86574c5f52d37ac73fa98cbeb927ed021fa83fdb7fc3b70f01f16f59026b97556f7a01aae426dc17df9226dcdee600fbe14be0be782399b0b82f96436d234db01f96435d367da29e11896bd3acd59b5f5f6902a2bea8442ef55439ea90a18804002080009314002020100c864442c17038a2c7a9b07714800a819a406e4e974be46118c430ca1064802184000200000204004a274d00a4bc4a226319e062fb3e19a8dccac13e525e98384ede3844fc231bed9a08ea29ba0000f1e80e8f1f58cc1bddaf075bf5f1bd70ea9e1ab742f7abbb554989e50e5260b99ba90b86bf1d44d221d51dc4da2c77ef6f105b563e05a52ead3f715aac01732dfea961c1b498549ce412cff5d2cbca8a2b5a1f17960198031e2240103ce640be99e3510322a85e8b53a5fa320fabffee5865d0b09f3057b9efbbe928748ed5f4055af22b1b2cb503b4ca0872ca0061bb8ddba90d36539c2d199a876e04f8663e3747bd4bbe6b740062793b47291ee51a079649484bad8296366e98faded0b98ece79f04f954a8aefd67dc97557404b3db4d1ca7c0086568630f44b867aeb040781bc1e02a8699d2ad40c1511d2b02d0e2cc4f3ad943440906ff11ac838ad79d2e51669337c9f9d37801efcad1614b459530476a40c5cd1d78aa02e1a6e4667d09b08c28cd8d8061bfec83834dbf0b3e1b0702e0879c8861d5f68911fec4c028bf389b6ca017419d929189d0f554d90472d0a5360d4958bc73303da2f53bc63299cec31bb46b7a5577542d4ac0869a63db6db63441910dca9fa31ac6c4ff55c9ae24e12c98302d101bb63640247cd8ae436901426765e5910b04eef32cc0061cd652f07af3d369b99e427c72fdb3edc04f563d9924b1c90bf982cf499ceac513292ea4e16ab4e0791fd6339c245ba1e8dc57d207c99971d0bd6d8e4e288f79b5d7107e29ad131766b2919a145f3ad16a2e1d6a8727cbd02962d7fa20183ad97bc375207ac08e63a63afa5fefeb50b9aaa390ce29857eedd52660ec43b3bf8e3dbe577c414a7565507a0165aa6e2c140cd6e5b41897da2e753ee3f61302392ca4074044beaec49c23e99536952878e204144414091d7a9987bfffbb7fc9218d267a9df42dbada5ed6b351591a6302afe8dc6ac164539c5bdd61e56194e2331c0193c7ab168beeaa16365afc674bf8f10a58c35b376d04b80fb0553f7283e7e97a66b800ef4da369e401cd510b879dac27b5105bac7b345b34990108b94127dcc36c2948140ee06225a687daaf2f4f33558470a22ed5c25794a5c0fe8b585d246d0616a77c900976a290b6171467961f7fe4fa1bad0e4e8f937ce2b214c82c67f2eedf6b8f45b50695ea79f9edef85a4f06ddca4bf2c6a6d252cb3730ee44e3b36ea8a7468bcbba9244a24031c058efa7da20d8694a223d483e062c9ec7094e48bfce194c6d2990181291635783e430beed9f13e8b6cbc65668f069e42587384288e8259c5f8c2e5d0021a49102b8af565522bd320c2759fcbc25b3602862dcf500774c2451677b7e505bb7dbb72ef20844fb8698f45b6809e6dc73f8a4afb15775972800a52f0fa7b9c97bb6b271dcc99f43c2d29c7b002888cb11c918f77a0b5058cf3cb6adb10d50f44f52cfac23cad9c913efe3c3bfa87af0e2a38598db221aa0083e5c4cd94fff086e722867abab2e256dee2350a6384602458af506a2bc79353a7208a184184f66a27a15a6453d0525545bf8beae480ea53dea72e6abc8fdec4ad82f7f0709e08c40592d86ed3608dc04838e8786d7bf6982470ba442ceb71dff0178641050134d7a8f7c9155e97f262b7989f656f42385c4a44ae0546ddd0c6578e6747ab7fcc5b85d85ddb03ff0b4d1f90e70174371cfeade6b4f35d1de5adb0fce2951f26f32c1b67d1821c0267e08a514bbe4275185e337950bdb19274fc4b4a7d85a5fcd3a3512a0cc9c84ce021e9931cb30b3fb2eef9a24b2b6af91466b16e5d3b1e5d55db2886c275bb5b65eb0ce31fc7a3e0c13c18d9ae0517db360b25d8ff40df0077dcaa8516249bc9494ea34e4ad100d5b0a33ee2cba3002861fae584ade1ae23dfe3cd1be4573e4b5c36d8be504d7cedc90aa2f19c9ef60a2c8c0baff06db632bcaa2172035f5c14dfd4c7d8e4e7d263ba1772e6f4eb9de453cfa8f8e52dcd0612e476da2e269e671030e30d87cb83f0dba82a4cb7eb73489ff41f8f549f1d2c67e1b33e31522834530e60532032bd7dc61ac4538feb5f95842e37545ee29ef0ea44ccc01230dbb69d906d840728926219d1e596e21e492afbce11cd9bd07c91fed37d64c22348d9263e62cbf40fd2bd3ceb3753599bdec5fc13a6a1213eb57265f268dff0c4d14e7f789b959b5c18d8174f1d490ebee74af31dc40a9269a737c83d6e6efd5bf8db3be4c9c52dfcbca47ee0d521d42698cabfc2303dd476d60700f674c54e0aee78e1eecfb371a6a26486fd444203dbecd6af328d59d277a60f80d23c9485a365d1797f2596b8b121d05656c440726a9d39de1c7e98e8861d30e84d84011a16306368b30d1c760e5ce6f728ad5399a3efc97842f30b1bab39ac6b00e525b04ea7690128eee067593f20b624eb51843e674adee74ff32e764312fd79c9db6fc7c4e97eb411d018cdef869512f532e48d6b1381102494d3e423abd72d360172a00675ec45102d6059eb8445090c29fb72a2b00f47580ce2987b85e77b8cb7aae80d3560a382b95023b524bb09492710b771bbea064ec574e012e7e7524a003dcae4b524626f5cb570cd97d98a15b5ebbfddd2665fe303cffc50b9857467d8c3618c68125834361cc449b01cc73089681f55a5ddca15b76b4a81fe1c0de44407baa2880f31eda5ac062dd464043c95744c8be6b4079ee8336822ba0d955e36e920cef2904973991810ba63004a5a71a2928c5d0ffff867d6e1e4fe0bfdd1de73eeaae027e9773fcbb2af027557e76c4a61183370f19c1e33a8d541700f6aea495e04c4b957baa26d2a1d73167282a244156c2c1688f5897530392791ed8fad108fb878d7acdfbb3e8e38c01f881f4759826d5006c166b10baed0dbbaf9f0ebdf1a4a25aa5ff74c1fa52af56759c53ed80f9af4477eab15555590085d6379aec61d12d04f1363f97f0bb1460c9ae68c4e844fc1788c6f937d41e8b7df37f622d9c1f6e2d8081df77faf920551f61292bec077895b6c67039c41f65c30453b0ff91b50524877291703b483708b080f03a35f5f6fed0583380ad7f34955224395f92bab7f9c54247386128de1f6d0b472e2ca5e2cfdd66f9a940e720a5ee9605b32497cf7d5efc7d574d334e02b6b87bb482f02e0cee0dad41341029f144a35d22815e937bc4d90528bdf839e198a1ed786e423d402884ab6bf7d0726e4caf60c4c7f1e4140f185177d31d49322252be39e225874a21dfdadb774a2633460cd236194c3080ecf01b0f49efec19f09e7b3d40ee947d219ce21273cf951a5e73ad99ab9c6dd24ebe0787e0c0d51c20502f723aa7a73f2c081a3ea318ae4430be74fe1a7ed4f891346a945ac7b1dd6fcedb3465ab692375dad11ad06cc9a3db7bf4e6b41d3b3d12a264fe8f66c7b39321935f72b4ff045a3c09d703f7afc29b9db992e61c499582cee9666cc33a3a7ac7e43c67fac2b02160a715b9a11a952d54400c3a32badddd940d4b7edaa252c2821cd4a453062654f724a13dce37718c7e484d1ed3b3d426f5490cb1e57eb80f061cfd75c0c7d3ce788f78702f9ef6f2c9bd42da8b1eaa4090120632cf03d52a8c30a11f35350665624540ad07e4211103732644f90180a3587f136d23ecb4482158352c0189dff736ffcae617be69766e925360497a4d5d43a1d2394c8ce39f87094629376b604949fa9a36036f391cd381b57f59ae37407387b5b3ca1a4e6dca712e9b5ac6febe97b0a44a50078aca82bf7b40b5edb3b604a7dac344b6927c117ee0c675cccbd3a7746c69bd1d9bf4d4dcb45160ed8c846dbc8a4cd070390431cd025c94bb1f026ba4386c226d1598e804950299417ebc442fe7566fbd9004a3514672473315176a3ebddc9ebb35b88b448b72d0885efaa91523b3bc8e17b2689519fa817adc474ee9bb569e8c0d78a956a4ff86a15df231c51c8815ca34c3dfd5b9f717c5186bfb1562fc101d49bb24c3d2c0911c43e3a37e39229dec945174750e64b9f7ab5491c5b3bbcaedc77f2a60bce678e5401bf2b2f9845f5f4e47716c452c0a33c18f21598373be95ee7b21c60b87dc84d426eec71c307e0389d84d4773e7bdcf0933680b771eff70377dd644575dbc90c19d9cb15b1412a602a0cac0fc9f19168d3b1b8d93901e8cb57db81b02c7e24a690fcebf86081315c368d6065904736f681e8e1e4b662cd2c3e453f430c1f5140eeb7f0305030361fb82c2ddc18ce77b8782b6a231c9d71dd2389300126d78ab32e44016aa97f878ec0c52eaf531606685800bbc13cd21c266da53a5c8cde248c0217266c75030249008a8ba1b2c8e6e4b11d873f669c9e744be88156edbca1654f5dae6a6d23f48e1da17a067371e0f68d53d1c847536ae082e3ef84d41cd9f5f2186540282ef0dd619e1628c3d78dee8040d26bdad6b03e4ab439a6233af7d215c796e661a4a69b7865df0d4f957501ac892c0d56ce54c2b32431262ffb5228df88786c165700c9190b5747090cbe7784be03324543b9416e4c8ced00d2a9483812b6269f9d3a48d044728ea70babee5f5814e687d225664c9cea2429deedff13a852a75af43bacc3bc596355eee293d041f659a8f68c29691a54d4613686c32f416f8f5b46e86ef9f951e31e7c2fedb925d41a83371b620f1eac7084e3efe85d61b386326ed1a8480cb9c0140ff0c51ae19123c3168d23347d1c1bd6873d955e4768d8156327da19eb449c9a6d83a5f0d59e024fddf70cc8cbc8766ac2e235046adf5c6bcc39940297beee6e05445ccefefa298bf84f169889207981c78f04b8c730430ef84d219fd9604d46844845adb5e4d8fa3f5066faf4f8f24930392f18cb927e0438cbabfb7956f450f19533c47620eadce61e767ee85840932cbf4017cb09e5b63d3ee0044b1e6b2789117509e19146f9d623e887b66107027e3b8a168704538e8f9b96e29df41e66f565766deb92acc451cad5993b706c48691ac8c4326ca4311c2274b371a7bbe657adbc3f015a5765df78e5811fdf6478f507b26c50bcc401e473a09a200264d0ec26f239210c9ab13297098eae83b5117553f70cda94e2f40dd21665d57f6b03faf04135c9db5961f8e1dfe3190d6cdab17306802234ddf386e3dbdb82f7192de81152108c9e552a162ea7b93fa4ea68c562c7cb377133d2be1f5bdcd5e40c2169c2a43546a83c6574fa78bb1fe0e0a0a803063dc82e0cd7b9f825b77aab21710dcd807bb3c27385e60e1f520ae5dca6bebb1822cd828e2d5402041e24523334327ded2c0b596b2a52bb9c069070f624421c3204aa14467af3c0a1bc737df767e3f24cc1772c50457d0d8235389cf20b2320214366f7ca0e94cdd73e860bf1dd98f74cc1eab39324cbc30448ec9d904b301c119007fdce50402cd50c5fee36a506651f5b986e5b2267469c1d45add8c5630ef52b73caaec18c029f38ef59b7a40176b0b13b0f852e5316e4e6c3ed35671a54dc994577edc9ab89310b5418093e54709ccee6e4fad782eacff31f74d59170c8c5c4a70c3ccde983737a663f26ebb9b3825ebb09fb5b8b4570dd1fad3cf88a6ecb232ca4141465358deb8faf7e716027f3a8484bef27dd871604593872d86db3e49355e81744d648c4387d393e81f3ae9288dc9b43dcf97d2816ce8bf3c3505d70f9545eff44fc5967d119eff35ffc9997460cebe8b48f1d95e6eed2f8301d56084bb2d4085862404f4f3ae4a018a816f71350858b3763616b6885e090db6766a820ec3a9ba4308cdfa53b8f6113eab1f3d463e1e58991403fcc1d297325ec3f0bdeeff63e6284bdd3991e892a43bb9a525b7624835e8940e3c854fef2fa21236d0dec000d49da87c912d175d6a67db28bff1b0d9c13aa0c979d2c1476580673ce117966f6e93a01d6b325134d2b05a698bcbe55236a365d81af35001d740c6fbac1b9d78b0cdc7cedcdd6bb2a089f9d8123553382943dae5df205926159d55bb3eec42102ec28d54af46c5cae3606578fbba6251cdeb2212be78227c1bdab7dc33fab1661305912ce668f64f783a9aa26c4c960567c823799aa8a16c92cb0aae8f8dfdef87026ad9152421c7e7ba28463cb0da8bfc198d3ea4936353d388b35bb3670451ccad6fc68a4583f481e79c772ee078365dba90a01747ba1413b2693f45ecd47b0604408b35584d852ac6b5b34f13d549589112fe57be536641ba1ca04df17000da99f2cb6a9e5c926e0a220df2081ed5a2748b892ec8635e17fe225166c55cffa5a6712daddc5dd8c08d364a931d96ef13030afdd0544d0828efc0ce33458840ba8be853015b2c58de50a5d29ab8878a91234255cb2697d1956329f540999436e924e78e84b027a0a108ca116f04041a5c63241fa4594935651bbffc08c49f1f4cce69d5ed21140f188c8825cedf7ccb65a45fd82dfb3f8498ab237f0b0f4dd5a81d8d9f434c495cf6bb6045d06c17fcf246f63f854f4b13a8bee272ed0b30af1902ed2a22dcfbe515f1308ab4cd433c0f6425e62cf90c42505800f87c007096bafcb0344eaa1d5574d7e9606af8dd9fba40257b04509083aff48563ced5db1dcb6722507a34ea811ba75ac16ddbddd6a72d20906590b8a1ac3f23f02fb017f25a81a683babaa4991df4c1da582c8b819cfd26a5ed8d0d8f20cd52572d38ee670c6ae6348622321bd49ce24088b40ef8632c8a04bb09e31e0da4268b98910afe029b263481c6f3399525b1000f4f38b797c41b3083027d37e7154ec1977ed7e4d0682176203ae0c774577ba16522056048b31ffe85f806f0d593c5459543c45b7e84b8a8d4bdc5f6c3831891f292136f01fa18b85753474a3655fd00594469c568c40ed0c2eabff47b3e9bdc8da4b2b083ca7f901a4aa5b120d6caa262b497fb016025ddb194c4aea67c10e10ff94bc7c8986b22a6824a65006befdb6c1cb1113176ce12e653d7f727b1a72010d9d3c4c37c505a3c49bf955825328778c50d604629a4c636fbada40381bb121297eeb7881cf2e9836f29d51a4d8419800626c7ad0af414d19c6a660698bc9de2544663e224d7576fee7fbb38574aaef43c3ed47081bb7e9cb7ed18b040b5c207c528b8fbfe70acdbe4c283029154a89fd781a22ba8ed6b2c85f131850f800fb2e14d7e5dbfc997e1c6a650997ccab6500f24bb5dbfa5d8d3cd5a9a86962468303e2e42e7ebf5b5159774fa177ddd35e58f6478930401752d6592ecdea85aa061fc80ec92d02d624357ff59494e7f7d2d09e4f1c46a4852acbee960ff6cef3ee32be17f69107f833416e6144552d25054e347088da15069003762e5629fff0ca32fa6c6086e0a80477bf79e67f06eab4161ca08cce4482fca3421b5e035a884b7756e50b4c236453a1debbd92173128da68f42050b63870192096680a4c033dd1d8d8ceec4b10d49e80f03431b6063692f812caa81cb872f3a106d360515474ad566a79808a9b7651680fa4ce2a72f290453b0ffbf23eb4097dc9a791e736a0be02d704344c013671394a9857b4ca44af3a65ca35d595015a365a5d64b48c2bcb55b679c275d585cea46f90acccd362aca25d07e8b236600cae8affdc231acfab3ccc0ac03d31e795cc6d346bda5c4b00a4ca7cf74bc4c1497f32101e3c062cb75fd0568b280a7a4bfc746cfafe0e85b736252d834465c1a087b8d99ddc24088f2a37f6e3bf4af35a51df7518fed4f39cd525692872f40af0641bbc5fa932470ac459eca47e8228527cee348e6bff7eb54ed087811842daeff393331ab5aceae1e76d73fc3acbbaec3222d532d1feda00543f528090d442fcb18778d2c4667a3afbd66329cf506175167f83bdc3e03195bed35340b0ca1db1fc9c1febd43301f5963ffc08c90f615b826f40d329fd0a969b082bf89e4233ea773c325e202cc78427e300e8e16e161cd480787d7f0ca801fcf3c60f5fddd962e0cd728af0d9c82ad41684344e290ca197c7025cf023778112540038789a4d56f8b0df031b387a37e7c80d28042b28bc1e2d62fbafc098ed73c7872ab7fcdcf1350544a896b0679a4d52d5745053b57e96f0fe73f8132f8cde04d1b58d5a007c3c546e08ac8e88470df77a539a872166ad7060c54008b18df37e1ecd29ae44843af0430b3835591228ad36f0c40a21d02850a7dc2e3a0bfc560fd2d43e4db307a8b0368805e555696297b7151231d4587816c3c875d6b18981791b0bb6ef4cc2506e73929a1c986f613c3803025d6f8633acbec40bb4024fbb7e4e889fbadd2ff95f2620fbb3a002ab863bee79cd2bf570815ea796054625b52c594f944869ac9d96c72b1f622de34035ab681cb5940a87c562740fe8deb7c0a1be45817ed6933f93c608579f3f30f08053bfa8db591275cbe0637f02754187528367b507e72c6a292a1e09058b2610b52a500d8718accd386beb519bea116de8bf4c5226715bfa5451a17207c7fe8a327a4a3e8d2bfe75447ec0c149a33be6c0afbf511101ddab6e70d7f3961b7f489a73810b966be571b956031a7977e279c14a5c0b3daf8720df5182600da730bfc49918a790960f85f95f89461827fafef4ca95a4b74f78365c86e5a8f22478f0e4d1f57cde2ba852124c7e3e1b87693e13e82adce40a2a07cb691bdac1de02de531512fa2fac87def0a8a62f108eb7abc01556db7250b985f2995b983c2adcb903cd21ccc840f91b3750b79936e5759ef21a606d6584c94b3016a03bed6696c5ae20aed44e7da6b631bd69772a180fdca9a61afcd93e6f6853ea9b0f37e0877476acdf457d38b60de801fbc3892bcfd9509c3f3514ac1d815556b0c1261365a5d7560ac2313e140a12d3f6359e84444079d448ec6a3e6f2e0291c0c99202b249d7fe13cac9347764825598c65cf9f36664268ba3fe96ca08dbb782d0746b6a56249a216fee03a6b326b237c34a842596a6f924f18a11ddcdac02bdd9018651b8ec7bccbfacb3d5f0af9be3b8749aeb0ab846b7c9e50258ea8eb0fb751f41d3be22cec84cd5b396a272dbb5a722022244c78207b2a4849eca8fb607c05aac136a3154f96112963c5eac946fe5f2c6e30f84308423244796c1212eeeb65889b8c95b813d2350b9258ece834af595c019c32e2182e938ae6a521a8744687490afeb8acfa89beb4b109b361e1d4a162220409419fe28bf0a7a43803ca980f6edb9e2303221ac77fa379ba4e3394e5d17c577f8ee4720f9ca19ad56daea0a4e3364e3094b9599b3621d7637fd3e39cb4287e52c2a375dc468b3fb7d1b0f1a5ad03dc9351b2e65396955ab2769fd0ff285e7e8830a868154966abec3e7c2f309889c89c5c5227cb06d2e12736af62eab1e05040799636fe55d85e8992c8702cba9c1766d7cd9be05c9dfac2046ac87b92a21b19197435ba59f2f7e8e4fae4525cbbabe92996cad56b9e077d945cbae7ca1d2cdffc11642bc8b084eeeddd1e909153c1fc64c8b9a0ddbc5dcad99117fa7811f6c17d666aed363169aa722a3d58f8d31176affc92602fcc494e6d20ea5dd5378fc64d3b382fc649c70bda5b29a8dd4eda3f9f34d050c6d593aac9bf97de3dd681d281b010eeb43a3f78f45b1cc1c4dbac04e6522a56281aeeae847c99d51549043be814e6ba9002ed2289f51b9707664d11fa387904a6eaf50cc196055ba1e55d5c26e59d1121f51b4a3ff6bb793de27154fbfe5500f07cf38bf02b7aef5a94096f82414653a9c3afd0ae036d5082605c9147a772bda7a73cf669e00f1c6d8db31241c32074c0d6da0b2acc9791beb904294a6cc3a25bdd5431f3b8852e22dd75031098328f6a8eb85d379a2748833c8b820eab8dab1d1aea60b99a459a23abfe7bc1ebda2e6405a3a477f7c5bd34ef4fdd1a649a8ed746b4ed7b4528dd3f0efef03bda28daa1428c4cc165a63701a84cdc4cb95ae01ec0511ea0fc8602e9d06ba6346021b4c7f13c6fa7bdfc80c5e45fb4efa43ce332d1fed0fcb94a161101845154e7680f643c9386c3f24e15b7cac0fc3a0a3f91a197fe8329530f088ccbcfc08ba82e29d42633b4222a526b6258fdda55c8bd524097d8bb687f2b3ed23735ba219e53894a9a765a9c0264fe9039c77ecd904e0a089b33fc4775940000e5bfd28534fd62d1bf01216b00555910b9b49d8fa18946fea6e46f2505eaac51fd48fe8636ca4236acab98c185d7bc4b805d54a835b9d8c14b631da322c95279497403e2bc6bacd3ad0cd1afad6701ea645af1c2fe3cc7579c74687239258b8c0e2454ed68dd173d7cbf8181e56e578ff64c3417309413bf6bb45b700cc1bfd75baa08f695c1e2ae9e7ced142efe928ffd8f6707da57b63b251795b418f8f97477d910929ae82000b180df613b88ab8b6d21c5ee0ae6da02c2646ae136895576908a39e347cf9772155c65e7eee685d9a10d736ae2ad20555283b6bae9df873c7f6ea6183b7ec605c8688fdbb5701fa9b43c06c7bda065d6d198d8cdc30eff620b9838f012b978f918d23a9f19d2ec948b803ac99c503842fdb69fe5c412a940b6601935f97812e7487d886eaafe503716e7511c172885661c218eea81fe384ee8eafd72f27f9d02b8f6c5ad20964234e98c8edb74bc4ea2df6bf5d2f6b08231d7c4073fd36d650c1db90732a01dbaba328f1fbf6e66f522a924428e4fb5580b910ca65d65879336302d2be1287191f1f3cd2ebdcc61916027d77be5f08982d7b312eeb1b45150703bba043dd8a9351b9af88126e87b58af5c5c12524ba6aaa2a31de52d10fc702d8416c720d7d135fdfdfa9508ae7b352af0f161480129b6d18ac930b31c0da6af19384ead8b00b315956641f8e40d7f874433e2142012bdc8873465a5a062c392bfb413919cd1187e9594cf34ae102b62dd5df32c14d1ecc702f1efed324c51b1286fc7729251288926ac47c4180c16e297de7240dd16009c6addfb06710bb756e8ac65582c182b66d4246b05d40d84d98ce32fb9e18749603c8a7e8e7414ddaf5e17ba3079d008958bc0f15489abec0d06fdcefda6d820a1481452de1695629b599a0ca509c1a17e078dc611bb477df989688dc4c253ba16d354bb53336e50f3be3e40692d6dd933c088b9126b71b76d20542f5e0ff5a7b9a7ce0ff3210b9481ff009cf40ee9f9234f37a0064ea4ec90f44d7f81230a80b9155a7fa6b013d9d8b455c09a9098848207eea68d8c60692fb8c22b5a904ca60a5f48aed23bdb2321791af80564b1441added427c99c12228d5a70065a60beed51084e650778f9fdac580e3440ddd32eabce728ea74f626caf9bbe9f783c60646ffaabff3a61c2a6e473efb314a23ddeeb518c45ee1f755da9a0fc3cd7618378eec32744ed809c1b0dadaf4496f837f125d3bad1403df1bb88381a3d87c89a2e6e30f4eb94a99453684a7447e294dd62c3a71c6cdacd516ad81671e20c5d42954f984d7259c1750b51fed3bf07ae6fa4014145a11b47c5945d1e49f354b7dbb1789ac0ea0225bd9fdf39f8af329875d3fe77694d42b57f3106c06b349ed9e281ac63db6775b901e7883362432572c98de27b9a0c71bc598600308db8a64c03f19b47b84dfeb3b593c88a796508c7c3534a73829816305b19b42e6ded030d42b6e5a2382ae60b02fdcbc3a2dd3020c5f5fe94e72984656cfee5cd4bd10c62a6aa6c233fa6fd22d13a0eca195a6b37bf3f79a17dcf14e4dace7987e5891dec5667a07f46b14d165268cf1e2b8f0591a8ef3d71efdae20e5be684aadb7994b987aff29d614f844ba05d200147509feecdd15f57ec69b5426973474ff123fee1171ddba41c99d76ff28ae4f1fb006c48c34a598fdc143fdc203c2be2b84b7d795250b88c37c36965a9ad900fc3a47966f0a49c4cc62ab7366477e7ff6450aab4af000d28c3c61d58b6ee7b6d7ce51d32ff82e84f24c2f269ee210e0fcd03a5b2fdc9cfd2d94b75e0f4b6794519b486a67a8444ec00cfdbb795fc81142eae78a67b59975bc84a0a8a95668ef32fb20a1457c0e243efb9d91d22be24aa2d14f018f4591c09ca10256335c81004e26b687e59b46f0ed9763fda4ec88afb3348d7b52dba9ad8919623fb8020bbd869b890a15de9d0fc98506204f3d39112ea01ed12e5fb7ef6fec58b625955355e2e533b7b829153ad71f381725b21a713370555a8b4e4485c3526b8e1f2e3e3282204d80f2cc125af90278e1476a84aa4edfefa962d615fae12d7ebb8f1acc5c40112971588f98f4013e09fa65165a428308c32401d97cf1277655bfc5e5a1151e15a88c54c0b15e5775d66c0b41b2f99a24058b42404335509555746ee1091537efeb5c4df24a9734df83cbc15e05685cb89a0f755b983d578ed5d2a1a1ecfefed6e7661f7337fab925345919424d133398c267137198b22e97a9075b5faa2ce7c3f6e0312e12a7962df44e86425050b9222c973ed3b59776d8f211e5e4900a03c0ee3692bd6522e20d029f3b244c30ff92421814d74853739b50318c3163e5fb1544e170babd1b56fd77051e19078d32d8c8315b9fc03a2d96eaa6a9b01e56e1cf882901b8c69c599034b86c97ac9b0b35853f90c875baf3fb9c75c7f64cba2e3a0a11e90664e0b268e57cf205b8ee688ea744229015a21e87880490b51c0989a56fecb4e31ca45dad4c5af6dcda6c525bc4399d2ded06c337ad9ec83225efcc11799859319a729f2cfcdfcd0e906028b705daec8102af98fe03462fb26962b830c51dcbbaf44b7874c89e4b8802c4f1a66dc06c8c85cabafe690c68942a569a8bc2b9fe2c9ad56e4322b5c02927c14016ab56ecd5d7809086c41ac1aa3505b050a4d6716414b8f1a327b8abb43bd50466d702499dd14514a7ea02bda1083a474b307cb860d05e78904d0e4f8225073b4aac666a63b60ecbd39a0a7cb9b3e330802ba273ee50660546630dd4680a241cd3c8a2f6a16b88dd2aafd3a9214b24c739c006b27a0b40b1e04d291818818728228511b2104e7b76d8b006c1cb40ae6e2d5f6478332b4598c6ef06488554ded7acb38c2e5be11d19e48345966915631c0e6cdeacd5a63362c6fead1a97e59b77406713fd0791e2040073b1de37490fdebcb6043a57c3d083ba3ec1201457332395efe12e21bc95e6ae474e09b5fd6b4841d5751aaf0e34a8c9482caf2f4ed5ff14e3423a102da94940c6e523d4c7b7f4262cf8176c9f3c031bce1e38f265e7b6671aa6685160124d65d11852b4ec5b8ab187374cb765b7d034f0de40a6472929ecac8d5d43cbb9e8726b1bf25775f7018b582402eeed3f4b08e921f37caee26158f2e637e4b915977dbce6484b744c63bc92179522b6d1f92bafb23e492f525f665c361d7f600813c7441afc23c20599af3b1b0dcabc290aa98900a0757a2e3e572eb7a3965b8066573897ac62a4ce6b65ec7e6712de8725fbe398cc0898356f793a19d23092e7191a8abe52ade5697813be0646c000eca400b91e4548fe2a57b1a9f8b15d1e2663075723e7f7c354ecba630e0c071282e773929234081bc0af326d7f24af90b45e3542e3286786615d5fce0a4b7516b3f01cb97aa5e714369c0a9a60610c4034ba542b6fa1cf1ba1a60d68fec38b3ddd052fcbb0f3636bf6a97102b15c98d052878edbf9e66fc5f05234932873433e3a01c9b057ca58cc768de1f9ba315f9bd44c8ce091b99616378aa6ef9cc2d7cb1089f070720b7b0d5dfe2b1f8f12950fc4dc0364699654dfc6abbb247002dba26133963150bfb5d4f21fc0b2210d33ab21343ee584593db58243fdfa528b38a556c1ea98fdd1c37ad94e0f6591c297416ef9065c2958e35136e22519fafc5bbf043c8fb1380b360e0ae55ef0e9ac67222beb0423de88aa8b29890d02abf8bcbc2988340988663cabec1bd687a27a2e524176138a8bf01765b75176f2ed70aaf308586e1e486a76d7f344fc1b10c4381ab7535ef535794ed89d6b93e89fdddfbd891367617b8e890f45b40b95e001be5eddafa556128aa4826a6fd7c1a389947c50a3358d4d800f457e99b766259999d0855d5fe5f8d8806b99e0843fa36698677eb9ad7b2df31c800a7e76ecab75ab5fa463dcd69d9bdab498982a28111d074a89eae96269b26d6de9b03c2a600cf554bb5376e853427baf1edd96730a00640a44930b0c20a7959f88afa0e21e80bc552777d1e0b981d85995359fb9d0a4e97ab6f266dc07f2e9877df7108f55a95e36204946cc46246334805e2404aba734ca39b1c56b1d1e931f3b9efa22b5e91fbd3aa7b943c85b4941c5e31e6625944e66229868d305b23b5b0e1e3a489e859703a162cc40f5c8a231e530617b49f4d819dffb61d0966b2605aedb8cd5e94761dc65dbe611244edd4c07d3b350be1daed986d96e01cb07a9bbc62d130520d50011c1e181d4d16fcc245a6907edbd11b5a84ac2bfdf0e337794923a98661b9b98866fa41a2ffad3d5c18258d0ebaec2f1d12e30892a92f50c780011c395a9018ddacd58aab422288f464e4e6357b95ba6607a4150a141c56054f4d2958817148e2c4e994cd3730384052333928b61f22a806947032713fcdb08c4ef24482dc713546e432dc7af01acb8811e98afc6ca97ef182e89b3cc7dac80ca213cc3ee437c6a6529a0645ebbd397b4fdd7b0fdf4bd101a201348da631c5d0017fac4c0da6645cd4b2717440a985a6016f434f014af259eaf548960a3b57846a45a197bd8a986a2610e14967c99238043f17f0c4f03c155c8063a69cc786d747279f42155bec90b2d2caf5ccc723a77de16ed886f015f84451a03c83d021dbefe88d26d9eb63c42953dbaaa05673e1be0a4310c85d328b0324805bb213e304e93fa2faf1a5e861ed9a20b8e262b5d3e337961b1fa77f8aed3e0967e89d3212bb4a02172b5797717850bc165854f45a151c6990988a49b0533dad343092da58ed84b9e11f6117c241774dd28129047210bcacafb77c9b5b557d2aab8fa39581de88225d2f37d71d47dfb6611d1df78a6f741d8b6bf8fd7e1d52a425b5b7988dc6d7d69cd8ecb3999800cc8c51d51fc8601891b937ef38b1a610fa203c9b4042dffe2b10db30e7108d532212d8a448c421c0ee3407fafc9fc9655dae2e86c01979fd4a74a1d67a2405fb75163c7e896029a012e9aae4dc5a6a5b0a01a50f0f897c7c886825a7ec54662ff42da7999854734d3041b70fb18e10d07a8cd943b1da68c920c9831d7ec538744da45112389c37976ea9c267ebbffb26e509e6dd7fe0e23ccc151b9295d7b8bc7384c2e35c2081078e26c9def15bb198029ca90214358ac4d15f86aa1d30cec9da4d481a61509c343c0d48643b9539a6670fa844990ce4c68bf115b5a7d81b5918a0015238688151859ea237dd862e3c7b8fac734351708d8d5bb20413dbed81e9b5927614ccbbae33ba1a9a8b2c71e49d15d610ec1a380aa0cf7780d5cc0071aad393104463c9cb649b74a544166b6595ed57b778acd0620ff521b93e5a6d68fff4e1f3612f47655ea35bc481a52f5a3293259be00d0a009b7d5991e748590a7c7f15c932ef1ad075ba8d2f2fff461afdbf82b33855786df9aea20f157e7a418b0e325486d6b00d65943dcd769869c21b4e3df9f2c946fc1dbd47f9c879b504539e05415237a44b1c5886f37bf260acf3adaf872348f273f05f3f7bfc7b3b7e14db5f0a050b7e9610fde931223e8751bfd5b3ecba002046dca12d1a7605269b77aa7ed39092a3343212c7c12a73977e07a92cc18a47e17841beb2e5d0568d7be78dca53abacae1ce2970b9e51cb4a5c9871ca72e7a62c03292c13f6a1b503ea8fd6399589a6ee8da37dc262f1c603e19fffe91b2cce9ddedcb45870bed1d53c194e1aa2625059719c13e9fd5811b2288294b5db06507c171015a9cf68b501895ce66683b19b7163f641e3c6ea6c68676aad7e28c8431b0b0721eaa460185d6b2ea5b9b3c4504aa368f2a7456af8b7a46eb107733ec871adb850af2039b127073fc41cfbd2f7eb385e7c6b1f15eb6deeb28f383066b507684fe3c11817b699f109ecefc08b1d217a97d96edf7c508f89bff0320f946df82f2d737ad284086e2f852a439eca65c6c91b4ee5a1bd28d5ae0e1aa1c707688f7303d9102b47f189b157c862029b723ae7e24cfedb61ef781deac63088acd64831c7315526e2f2afcf5acb9ab804e2aaaac57dbf4b46d8f27105caedc7f650806f0841963d5a52fcfa049c6913eb9e32d308c99af66fa3ac09f443b71ec7185b04c0bb7752234b7100dd87a552b5c1d166c73330ba50f426757a7c2b9f0e64e2bd68d40e0c24e9fef8e11e76b5252c1897417f75df2b0f2a2a81a8b62747d5f8097d169e48c5011bed84c72784c7e59da35c215097203cac08d2727911e22cef58c450acc10793c814d49ca18608c8b27e512a6e302d6fe94cd0075bc0559fde2245fa6b6c150adcb858d19e0a1273d06f5b7cfcfa4fa0b4b6c32f06bb0dc84dd0ce9fdbdbbd2b286f9fdf65c5a6c34935c01255c30bf41491e932e1f9e70c7eb2fb917d2503fc05197667c2f081106bb536c1074de18f34bf56ebd4ce96592ee2a40aaebd50a2d88f77346d2a6157124115bd4c3443d542988b7f79019237e461cf68fbc29583f542709a00d49c61061bafebcb35245bb253bc3cac83722ab68082b93f5c82a28779b8bd8d864b35877b81bc13a9fa98ef256c1803e6c4c3729c442a4f8652b5ffd26bf8a6f8f3ab956b7e3ec2e21d58a7b2af5725168a78396d7713a7ad7dc17a5352885397fc4e1c1462c5d1fe0bd478435794c706d454131969d2196884024b09c6f09a186715aefe631a9f149cf1f5a4928afe04deec445eadb490cccd43668b5d57dba9bc00c7d82c46b92c130ac44e6aa693cff1d2bbadb3afcfcc341c62527321556ddafccbc484f16624b911c89a15127c5191bb28d50800c3419337359adbe089c2eda74107bea06117ad5001f388d2e52e615c976ae5eca0873ee6fcd61a94b729084b1386596bd5c87b09282a6645548876cd1a8f8c21e43a5d110ed0af2e498300253cc56bbe8dc491fb2898e37f74ae5eaf089ea716177b2b93426c3e1dedc762f5a2d4414f916ed96c1b9799b80c43afefcd392017cda9e680621abbf1183f58adfb14c33c241479a7cda80f4e2d60afca24011420401ea08acd457142a4c3d1fec4dcf0ca7fd7a1a1b8418ff284b03708131abbac51b412723db4d2b08acd527eaa846b95bc44be61d9ca26cb2d4e829d6be57e540b140bd0531a3bfbcd08c9a6aa7e62f0c529b875ca8a91af7e605bde915202683c556e4630d1a12aa767368be9c367fb82416268c4baec5af2046ab593add5c24ad68e640a0c14ea524ca8522b4ae852d352ddc49b6cf526fb3560d9e9da94d7262fe56164162175566234b82cf4f80b8abbd080fa06a2226f3497e958bb2f71f11e7219dc373ec42e66407a6da5551a56d5e5a06cafa2a5b2cf3767f2e97abc6163b90db4a13a964795a25a7490e29d3cf825e3bb4237485c76bc2025bfbc1d6c04254c00e8c0168d829086ce0fa927512fc459b366088b59170e6d75ad17d8d77272425eea1a96df6163d73e9a3335ceb66740c19697bcef159eed055c33d3e227a3968b4b1033166519b86d5c871943e0ee8ccc626e3fbf2bdd85d29a5fd20d90e0d40bbf6561f532c1223d75d7296c402236897d9d4228cbae9410974e8de854788ff6b1bbf5a8d6f02a26799441eeeb0246acfe752a9f03a9675228df27d0ae089025820e1af6f8265bcccb9a19516517fa9160222980b1ca0b6db63e6d9c5427bb2534061ca08bd36901bbbbcb50531d17953aa64c7589267af247554907f8c44439e33be948122d36eb26098badc1e5973d131f154844e3938118a2f1da1f7d0ab415e110a4637a869a8ae622519f27dbb0a38d93e0c31001bfc92f11c9fa0d33b78214031a7563821c429764d73f52b63a73583afed813c81b7171b28c71919b6db9ff65953c63a6d05009e3a8343b28210cfb7896488fd86cf14022cccc34a4fe48c6c1b9928b4e6419f4a61bcb65e1073ec85bbeb69d4917db62e85b46e19e7a2cfc8c56eb36f965ec7b30c1e1daf2cfa91969822547efe1ceac6b8b9050d18022377771758e2ba1ec3ec67e460a90ea50b5e43233b6bb73e4176f10340cce158eba9fbc024fe1670a933dbd1f5c50b59efc638ec653ee564ed220d0db8833ba5f402cc2769f36c0cf0f6b2390add0b6e5baf6c6a985c3608559375c9e7dc71b7b29862ae0b0294609beb09ad5ff1dff05d33109487765d0443ec824549277bfc89fd3fad2ca744b617170493ca4198b9f63a11f0600ac8dc95a843196d82a097a2f850fc266ec09d61ee2086464eb9f9a8f0fd67b0e2fc6b08e336478dfc9b93967df4df1a710340ccd42313647a8a2b95180d187f7bd468302014b75f31957a43c8c9ea845e41051734631971c4b9cd69dcb102384f66efd49085cf5b1a71c1fc881363be9d81c9d3d7cc6ebc023ab665639f31a8c74acb84ea739e6e11893f3e51d81bd16f2ad84f4687231776e01016ed55dc9d55d5d86675f8888cdd54d559407837c279ec9cf33f554725aa60ae38ae413a64d84eae6a6a53ca88ce42141e64d55be257b821c0793ad07843e9ae86ebe3c74c126de2fdac4c713fe6f7c740f0306e4b252066ba446b6d5cf0455165e0bec1195a98890250ef15e1407cea038261efa5355ccfa4c42fc3c4ca22649f87c3ecd3c1cd9a61bacc1ca4f92832dc6b2a5c891e11018b5503614e7e5da03d3e9c0fa7db8e35075537014db45adbdfc3f2178f7535d82363473b07de7711e12e68951e38cb64613c5b67a49a48e125f98fda0598925b3d6f4a777cc91b806cd79086d2e047dd7cd3d16ad851200f2d7c7fd0440eb84c8c39aeca1eaad6d2916b0f5c23fbe04c645653bd1f94eb04ecaccc22626cedf45d91380af6c80efd2ab6d361ba71987ede10546ba561ca6df4b8667f9220611f7be8563af41bf0590a17026ef02a3136884b395f2f25884d0f972750e89f282f311de4e1aeec7e03dcec0cd1dae96175a220271f9ff73ba0784711289d00bbd53850925c3a9a1e18bf6fc3b35dc637fe1c65c1d1a4aceb45684b3f690bbadcb8f715a9a62d27c619650043038e9c6ac7958f0415d6a95ca0dc524df2db946a6412ec94129619587b861f794d2143a17bb6cd12fd7502bab0a229306b08a9eda523d4d953d41d23d35effb545c16d9b2b0ab5950bd7d8ff0e4e7a34eb847bfd7b039d858e31c5b6ac1958af4c6e985eb65191d136295d4bb92d9976e9e38f12be75844f9590b336480d5066d9cb0cfc70b2d4c7a20298423dd7fdd000b2523c299492a5acee91443903b4da8bb176734ce0eee54272844c4bf239d59176a9ac80b4f2bad806e21bdee8daaa393fd5005eae8fc441fe589dad2a4589552af5eb9367312e4b2be7a6cd2a7c0f3d3d201dfc0b07c7e3fc9ea93f433fb4c9335a98010d6984ca99dd810fffcb608de1d1d9463a1b814d454c9af97620ceebb2428dee1808f77e10bd011ce4dfca455e0dfaa866970371177e772f79bbb767f1b49be82d5f551c2d1bc70d3ec741780f98b25b1d34c32c395b2daf80ca0ec4a410660672272ed2eae86efd8a6bc63118dcccac38f26a47e09ae9904e6383c866f74ac67c645418000432cdadd48d17de2b5d17b71a98797466750e4c8380b4d499f434fa6523ebd0c26235e47bce6d95d27cb9e431b6e7c9c675b80b593f8f7061f858fb883c45fb9369bcb0b3ad30e90ba202373e93294df2e3cd6cd989b41ea2c1e2fa4b2f30bf059d888d7ddfc79202c7f7388329db387ee7e846c1c0be8ee481cc10f4c2d1ad7586a0b24955a55e5934b2b5c4968d37ac9b60f308a183c0a0da78576d29bf5f1a3969a18f689e86b8c8a51aa5c6b5db10e20e562fa601c576e1e2df122fa8af54faf98c634519d7185f2a2b07271044f09b7f22efa02200f8bbcd4daeb27ee376a96d2baa4af23fd4a10b6ecac22d825e0db77ea07070db60626555483d4cdb72fcc7d28e1b5e501096e44aaf3862fa279482107bcf2acb021dcff4e508088c81a2242f93dd020aa31eb9d056965a9b247c97883ecf94cd903231de777341a9c839afd25f32238f88a557de6021d304713308e05ee39355ccf2934aa09b78ebf9e3a03fd08cf4facf8ff14555d45c22d0c8cf6254e6491f3aa33ff3030858263ca9d36fe86173c19bbee5ad16ebb21d6855d5da85f1560984ba98fc8c07d3c00b0e75fd27791d52507250abde6ac8d42774d24b67f55255071e17232c97400b58b0cef33a4a7396525f6435a895cf4c69b1c591f22d32f2381752a06dd98ddbef4552d9f818941a33c29eeed5ed6b2b8bf0ecacae15fe3945e234379c9dc96c2f81592c8d1bae8b2de91566ee8d2c429e680d3f8ca20705e625092bdda26e5e1d18ab9092d078c3a68eeefb57a78bdba3f0f2ff375c156f0f0453d3cd2bdca229757c33445d1aadb1cd84ab93a253a07c4481045c76115f7692965de83ab28f88c1ea3775cba09c8291904f48d82368465ca080d33074b94fd6b2fa0b6dfccabf0d038dbae957537f82dee896a3468dd025f8943c46a546d388bcb9d951cb7b4c13cb2128013e6bd04f67ba9ea83d41e12dafa988b547cf24458108ff0c28cfac5422e5ced09c48a7357081fbd59f34191d72eb7946b804173e67d6008d88a8c8bb2e4c4898f4541882332a82eecacdde66c2b62c359b8859bcf6edd3483c38acf88b55e3749520d69ad6279e57de390755d7991f1c2fa86dc46c4d598ef5b1bbf6344735fad57dccd3641cf37e4d9a3e19882f4513b22852f2aa78ff5eb3475fe099760c635233b1e86691e7b3c47fcf280e5f4863813deb98e4986965eb5c569890effb7a817a9e5b57f54d9f45caf9b978777550ea83b77410f9e1a4338291c10cc7b57658a031c8452ead0fdc5b7c071770b3d4e2f9a1fea8b5dd8e126a7e967733ba661bc1d523cdd7b49696fb4cf25262773824368f7c7e72ec637bfd1b8ec4c3b02dbac60839d240700237852e39f2fbfa70ecdf2f13159c1615f2c9ca286d38ac4afa6eff712d5bcbc35905f3d54dec864ed30bcc6c0a33145eb151698c720947e08733490cd86880bbf80b4139f1c6442c4df3c21dd668c4fd00036f2736e2872f72d880e52e47690a323cc05be2efce9e3991b318213df362a251ca364590b7a13422e9aa8491fa1945284efe87c0b48ae055c0c614f38e4310e37748a48e66c99beb804e1e62e40efedfce43cf09cf3b45550bde22f9bcfd1c3e6b69d08a7a3548885a6c53756c2f99f319ca4fb4d1c7503ac753718afc504067c68660ab025d66e26e411c8dc957d281caffd3fe175f76f1173a46cf4b8ebe0a6003bda661f4cf24dcda85c781c0a920a79d5446c0d3b9e82de15cc744a8a92b4426a5faaa350ba7865de632349e87f9297647577f1b956761f92ad7efd4e4a46a711107d5fc687599cddfe8948a8fa5c2e5fd7830896dddc0028314875746b49c0d376a040979e86900cb9fa4509e054707726e56032546f9fcfce847993e547200b10625c8700af4262ec85dc8af817eff98888910937446f7b36875775920dcafed6316a022b28c56d6223fd1a9cb3520883181732037991612f5ce22f130cc14c9c919a90e595471604bc85609b6806313d008f6839f89af159d8724545eab3049892b568ea05c05260a4c8fe7751b5011ac0aee39baf26ac6097e6a58541325016dcb2d27467ded9b38c5de099662085036826eb99b65939af6678c404aa45f517f20b3d32e52099eac44a1077c81f808dfffbec9963574dc55480e4571408a3ec8b2458bbaff9e2ab7b523f49ea927dc5bcacdf3b65836158a5158a16f59e79e7e00a4262a9e89a936087ad8e6e2bf6286ab80cffbdc47ec5d333f065cf11f09e3b10e3b5a832a7d15bbba0cc03e3505da42cc180ba5903b19f94f2aaad4e831a4b5b1b7d4dfb0ad2c19f85c7ba905737b5042cc65cf9c70f5131ebc256cee95970dbe69dfb26982123ab7808424f8c4abc6805339ab5f6fe0a731ea5dc10c277a00d66d4c4f39d787fee734dd2dde66b7c235511aeced56386fb8d141a4abf8e4de24e911aae1d44b156c5fd27883af1bd23ba9412553a4db2503848c7fee9549cf566a3e867aa178de58bd435bd705c2790b20d698fccebe7fedf78584f5de76c674492a9aa2d49126755e5b59ae50db69a62fdd3f431f87f9acce6874633635c9d8a25683f5e498e5c8977b5fdc2ed9f4cff44767de3ca9192a7a3938cddd4f1d6cdd8ceb04271a0679f1e18731a8317cc23a9956d795e4d01c1431d2d06beec7dd81bae34301abbf138ac451e4cc19064f47692097f773c24aa99751997ed79e0b68c1c2b80e5c70dce4879758fa6e272bafb4a3e1f5e0bfa24d04abe03f306822717345d6cf46755f64635732be59f6e30d98619d6c42a39b81a1941a23f4a5f850240757fef98cc142186c798ce828f1c51d1116731b2b238d25b129067f75cf168ff264be5826c21ae2e7ac88192c8b4ac45c6f9856bcdcf4614f3662aa6462a25e8f9fdc39952ee37750116be6c3c3eb3266cfc5c89284d82dee3a27ee5a63f671166ad96bd7ad3fab8c9a9a3a49f33da38c56cf71fe916b301ff7746c6f1e28fbc28e3131e10ef4dac4b591fa6e913afb851e7949b66543978b7ad0052bea57fd310f4173beb1b8e2682c3b120631a1589b02c7cc85237088bebc014208fb9ec35921cdf2e41df2c73847e022ce277b3b72bd1b326b92ee1cc8974f29887da94e01a65a079424453b9b9a0b8a2baacb163103401c0b591f6893610b86e798f15361e5c35c4132f10ad2950b693147a5342f81a200b42ff4b0bb0d2c595e8c9e8c81d8779fcc610a9a9519a08d7fbda9b77f29174185119951abfa336052f880ed7154519d65b04b94845bc1cf975e042c74259266b247efaead48194f3d1cc2cfdb75aaac400398379c3320b70f4e7ca94e015e0bac315e0ba362ab5c05680a3bc4b2a2f9dff8d165634692a239b4fe279c778e32b21d61e5f192b32439f71250934fefc63acad7f8c8a98fc4e8057a253f192c62bdc4f47f4204104d574b84c76da02fbe1ba90b8c68d6b77df49878fb040f257ad16588dcc4106ab314acf9dcbfc3c68f9dd46b544361ee50ae9346909f4313cd4c2bd0eca860e191d4817243c91ce476c5f309ff1a040f0142bc5ad16a1e25aa4467b1aa9b1e8e8ed998a54cad820f9c099ab6f73d3bb4478ce551c9f6479a72ba1ecd395dc197432912451579a7134384025339c2bdb663dfa2defaee2386f591fc9b634d795532d4d430b50e701d3d58c39a04bd734c7cc77ae18c608700b44a62041b2231f159c6188eff64924eb533732aadfc862db28192a4619609c40b0b9ec6db74e1de97972ad53cf9c538ab5c2eb1f5a83ccb09f5221eba8c3620945706c668a8dadf799fedf1b1626460b06b3f6549ee56f807511db87001e60e8e715380a448a62e21c88f85da608dd64d5b9af2515068a035ef6f3fbbb07988fea4d799aa1379b3204047945aececd6f0d54adc5c5ef2ae630700ff033e42fd9cd22a739494193c55cbf54940dd3dfb870c15fab849b8b64521b1af937df6131df840269e4795374a93bfa6beebda3d837cc9abd9c5f53786850d4d37fd6e2e3942715428110cd6ff84668d6fa2945c8e39f0217ef581333bf983b8f83729b4b5d363e1e077044f2c2061f3889ece1549683359919d68427d94c314ff6b15546727ca985b693dfbeedce96fd563b5aae528d1e3b82fa66160a2d608e2375a3d2e580b631a811b21a93a19aa230824e1ca272e4340d20c5583ae042ff2473909d7d1dbef85bdeb2f32194282844008756b3adf70fc137314cc150ad3d1dbb89dc12b93f1521a4b65964fc1023b6facde16d0beb3882aaa427028ac03c7ab5b0634a64bc62dfb1ae5d6e000e208a32914812e1beb5d763e6b65bbe597d24353bcd059ee123de7e29c6e5bc1006814641c7d0cbd594b5111e7566c97cdce1d47b0b948a1b4a2da2e985602379ab87943b4e239d004838314b580e888b1fd306e5af574230bf542868b08bf0b7aba14929a7f595ec27ee3e4a55cb58106ddf7187a296d5ef1b601a7ebc6dec32949edd4688d22553a2b877d38a6d3d2584c30f258547657410ec2f877f41cbd33b36ab35045e8c4f6b19da006dfd170c9dfa1121c5bf9bf51ab7e6f2813958dfcc7bbd9b5453e49696d6aaa22b0fb1584d3a6259cee3a6a0a1774888bde54b80be0bfee432d09056b633bc11d2545503f8506485ff6c89f886e6d540a44d24d9c8cd52098e7f3581d15fc40104faa980cd86d6a6474c3804bac0c6ce3eb72a614dfa901a0527fe56283de9dea670fd155515e2eca4a8787dabe1c9bf88be1b1fdfe99f1cdb0d7b1f71a04948f3835c611e9d599e8aed117020666a6dfc68103f161c5422daa3bfebcc7c09390ef9bc587d580463ef80449653034e4a971f42b58d56e95182c9cdec129536abd938cd744ecf909f2c046e5daaacad9db2690ecab93782eef0eb996bbe68e869374847f15014e7b7c87e03d89a359aa0100f06e0cd1396cb404b39deb95e31ff14dd726fc0457a65bdd408a70577e20ddeaecb68d20060901b1d55463d114ba08b71c513134ddc6c5ce73f83cb49d413fae952a4b36d34a29a4d39e0d141eccee0bc9e18777a1441140fb32c4bd53008865d4a144c56214df0bb7cd6e9502694e7d000fb2b7f2d9c173a2e1aa2e468e31cadc27e5fce2a15ab0c1450a577c1b7ad53cea06d2d8eeb6d7bab28669427eb1d4e6b87d43a847c1e4096b037d6aded4f9b4b60dfb940acca41106bafbfe9647c6954c885faca55195c428919223eeacc92c3f827fb9aaf6c09566b858680a55a15209fe7140e877258117f1fa5421837dbdbd3b13aa688b739689eb752e1d9dba51de3936a862c9d5c38f0e14965848378c4eb2ac99044fa29469e2bf0a582b262416267cc7cd514e655d732d7483bab7c5b5defc24fbc577ccd19312a120c44fafedf1ede8c3465e0927dbd8867feb6690aadb4e3a1e43f5e6c8c68e47dbb61c373518b6909da6fe9e26c331c90ce04459a06a20c4e6f0d67056f44212f6000a8240bc69a6efb12b162d7810c68bb8cf9139a91724b035fa3ba80ff551a4811ed3354368b78fb7d76d9a025e3c289cc6ad61e4ee37600a9575f7b628084e2415ab1919d4d351835cb2143d076a225c197f484eef92486374cf023b707defd6b2e9b030c3aaecc132e53cd411f4d3e7dba8084d73344fa08165c5c560d49b2db17f824b9a7ecf98616bdf2c0c60f773b9fc8cc558bf2a77bff16e359441234e044bc560a6942bc95b5140476d23fda8c941314a889c41a6ae4b29c0cd5985bd6244a485020d8b99d15686003ac39f85e79e42532b2c92013117e28abb5d3c2e983d7ca4f5738fe450fd7a3a5461cc9d5171df45e68200ac0c945a335499bee81a572a01af65b3c51fc14c0feb53fd10224ddab894ccf3d6ba8fd2e8b52d197a11f83f5b917229a8588e0d9856d4f43f50dc38853a3416bd59a087860208d72b7a851e705d0311393455056122cca197878f28790326c29cdc892bd5bbc0eb6416ee4e4401750a9552a53041472416786f065d1b7eb4e23298383fd3355282dba3b441c2655d584de8657091c62b279b25376193f6536af4768e83cbf062f371216c2a1407ac41047a07c93b9acbb3c510b12c6ac1118c2ae6394f36328c7906dd5ea444ad77f6fda94dcffd53362c877487ad11afa4cd9431d3277a08c1d259404b6ce1675e74861fc2ba00fec3ae55f3ca786cbd920f24207f09f91b0661488dc1f0963d1ab9a40de3ee2ea0ce5ff7c83b4ffa38e81ff918795c79657e6d4405ec72e03d8223f83573de906ac77d40e1476476b2af7bdb6312dbc1fcb91d39a26ed0ff88c4c2a819c06a52bdbeb5695bf466e28ad580d69d46b498679572f7a90b6c843587886802291c8cae0f1323f6834caabb68837eddc149ec6c204f55b6087d4c2a33e83b3b99ed108058ac388e256a00d44a16b0e0c3e0781330684dc0b0919ce1a9db4b22d4046fa6e2e52d178129740a0a7059f48e4303b114571baea7252da51d016cdab36747018a716ee2a87814a18722054fd0ae480030e871c382048ec6358363844592479e5285a515c8d4d280fdf7f1b88e238fa2fc341c7799d7202cb522c7f54e15386c52bbac798ea4bb9c0820528f5f090d2c583fdfc0845aa8aaa966b019ea06bf1725c45eaa6067191111050df6e7ced1f46bd9b44d4cfb092f086bc991131627893665a692896df302b7ec602a2d22ac310fdb86d177ad712fe794b2b5a2f31d1236b3160d783d465db094d58adbfb87c3f004929bfd6287af5093d9092beeaf77e9e5e7027fb9e2c81753ac2f9477ee07fe2434a713a4ae079c026fd0e85cfd4919059aa23f3cf43576ebee8bb941ddd1403eeb30873d791accb0ae906c9f9ef23b4661c4436a128b9bf4fc237a81521b854cdee11f46f0b88f3580fef827a8f6c5c41a257ede3ee2e53d14a1e6bf90658934f581386aa9fe34f7ac00bcbaf6f614b1a407afd30356095cbb670c73ef6f1be1ce561f6d44b5d69dba66c47dcf3278401ed7c4d860d588a23e2f93ec51bd7062bdf8c711aaf2c5d6a0addec3d8019fb457fb8bfa28085aa84e1e44879fb820587cac0cddf27410a8807812da983f4016bfa7c101434298c448197091ba9686926a3051f7c53e84520eea2a1db88c3a068cc51d2d818641b6fe66040854c608cd8221101476013666bbe0a683721dca1d17eab037703fc5ac8c33211ee0f4f98f745bf30c2176be6fea3d7bca02b3e966982bc7c6fb8afdb83a82628bc92aecf4a286216bdacf6f698836a6f79212039ec8e76511cf1578179e2cf8b92c48a104260065ef474a2229a2d4860b1a7c23881226022003727983fc0f9017c01c38720bbfe921ff7a6807cfbf2519ee18d64fe79faa2948d1cd1df02a8da1850c5b75be94404ca126199fa418db10c4d49cefdbe4a51333f2d13b621b69b764bbc9013d1d02c2df81dbc5869b99a637e9fa8d09d2b3a04f30cdf0b4c0a36e0a91926a71538ad289dde2b9081f2cb4db2c46b42c4a2a2489e58b4027b8f35e33588e0d8f801605657011a4780d96084f60dedd6385c5a5bee4dc64616346c35d55009106dda7d480c8093e1dac23b2a33227a92bd9c422f2f1838d70121ee1031f50ab1ee73e76866d38d46b881773895e9125fc5bd858ab458287a1117f709a6f3e1f839fac203c06ed83c625f509cf31a265ac8e4fda0d7afabc2c12caf5199e03931aeb1a9f4f4505d27a1f36453c60fd05b22cb22dafccd9f13dc6d305367ca32d3f0961e344aa30185c7b94828d9a5adfd4768a31bd3d87501c79d5289bea12834eaeb1dd2e2c81381a4c1d6a78e45c350818556b9c8f850bd80a5606e0a12825bf57fdd8669a48d532babaa8aff66345fac6e65df96f48076045f9fe86d96b2d893b666a95b7132f249e558ea165835a586f005c301cbace5d94ff0c7ba4583e3d78fe38cb9429da710fd6c3ee8adbc65e77fb34007075b6c832975b7efcd5356c164e11f0c9235dbd83eb145d290faf131d7117f2c6bdcf93d7a2c3e18ef7d4b87d00a8a8555312a71756ec30e8661ea58d1b33b242917decdf482ae7f4601f43114622445d7f312761b9120a07634288ca0faade85e2f6ca3c5fdd9b8574f47379ac28e89fef4a4ec47238e222c85ad1ff2603097d791df8822c85d82fee91079568af5b131f2cd5573f755e5b185c64ff675ef75243428b8df1afb7151f29d464104990dde6379cbbfb96c77e557cb76fe7b46d445f023178c42408a04468c4ea4ede44550c89925ebd8d97885eb3bf42b684c5db0965120a5943a4c6cd68de360917552c2f64b3a83b35114fac53468f5138c962f6524aa53fe1c9af08ed548f26631f0d2c8b355a2a9a27e082aaa8fdf5e9215bc3592ca0fd2b8b167997ab686d2596acd46ad897a12291e069b342cfd0288e166072444c77943d34c687fc47d7f613adeac0744743b2b46468fece676774b535ee38ea9e2d5d131f08adf4931eba05a1afbc24dcc22dc60dc7fd3ae5a1538494a00889776fbdbbcd5574a3679a6d55b8fe4bceac2cd1341718f5a54987892a3a0d625291110971f89d70ddce3c5efbdfbc444c811794e5c203e76a75f97131a4507f344d5dcc33699a1dc8c529fec795ea6b6825db40542054af313a3391d78de49bec9e6594a33b68e7154d1065f96461285609e0767326094a6ccf3c549d08ae32846fccaed29432a325ccbcac1b346de4a3570b4a5a8774901471c1431fe2cafc00977c62f4b3c04c1f554905ea016546c6c1ca0b447d1ff1dca09cd995ebb07c17f6af09528ff5fd8e03e44c41da064ac63cf982b9c8a901ac6159be91160bfc320f3f982914436db31afff749a1d1b88b783993902d3077b3b415efa69b54281e6fa442028d939f083104004e2375c771cce8d1211658542abb51a5291b519f0a5f2893a0d130cfe927621df9216781ee1ad6efc0f1aa1e9b19c3e3780ea76981628973cb4f2370ebe11824e1c8f86369e4f9851205ed45d19cc1b771f8c8321b407dc3f43c227a80271711084f760121621766227cdd310c094c98620953ab002176df4f8c1c940d655c95a073c21403ac48d9973930dff10acf03789bfee600ae95fc766b8873021b08ac8a9408e33be356bc4ffe94b6281b575f227ce16e7759a8349947d4bec1cc32f5e05297b1041a2172a8a27ba42da9e88f545e4b51eb65f4e88468e303cad401b824020bea19c5a2173bf27d8239bf9ec9fbb788bf894cd6398f5dc428ff9bfa53571c2b0803686e52aad5a339a9e455a300cfeaf03dfd4d6073930505017f132a1ef6a92d4c7909d9d389f6947e0d0f1ab271665cb63f3416ed2b7fe7fac24ac926cdd7def6c7a8666c7068af5a037797b1a9e7a57630b36eda90a66c90b589257c7e98ddbc63b520c651971f50656c93bf0e41ae791411a179ccc6a13e74a5c0ed39d318238f01b819dbaa5d59a9c74dc328c8cfa83c26569323f115e551b7d223e526745e1e2f52bb95b1e58496c63b881daa23ce929d77fd0dc2fafae397b6d934093ec959bb78d363828e1c71c8c2d002c20114b7de9e8dc99d44d77c445253a292a27e6c5678d2ff726954bf7509e22e4a961d5151b2e194e0894b5180d4eaa548b4c2bc04a01fc57818b6069e3e29175b101b1247b2c29eaccb06d67897ceac357101adab54341a8ed9f9528730b66419991468eb363c79c7b5d2bbbbc9470effab64a2882399e736bd22676945549a7228357abb5ff7689097b0005dc3d8989fba345509b7eb409ba23c66311b99dfc39f9234893111f660a8aa0ddf2eea7348570510b997a5167fa579566c204bc4856902bdd9766a68b4e18e1524d9d63dd9e254b515aca81edf5c1d63c86e8a131493eb02582a42e82034baec84d88a488545b8512d77928bf4b9644d81c428c4da9ec82fc4035049968a125f61222892a2b174f4867010365399540b53805b847eef97d88624a03ce5880c9ea5580dce2cad08ae02c74135294cc3539ee231c9219fbe605dbc0e7c8931164ff0eec06ec28705bdf3e3d91d81712db24776df6976fa61bc3db2762bffd3f1e7a654577a67262dd7f8a58395034c60074fc5281d779829f6ad6deb42ca162086bb0283dddea057707cf7f21d6fb0870e291c87b4144a2aa16c1f86f80995c830820c35a1ed46eb39c68e78b8c30174cf05587e0805924247cfa6357a6c07c1b60b73211f180a1aa694d1630c7ce6d78fcd272cb76c260adacdc453378884ccd4db6261050b6cecf42495abe90c48629eb559cfd288f9c599d786ddf37cd67a8a04280ad49819b01d032c1916f51f58f4510accee09149627ed7f62711810b57323202c27949892046948b9ec301b297fd0193b24334505d592bbae3cb967f576a9bb25e14ad2ed30daf9ae3f21f15ecfb5ac57bbd69650ff588ca29516f41519fe603b9544e5d56e5bf0858f3ce90926b01d9d469627d25272fc493bea3beba03ffd4db994a98c6880721ae9be78f358608dc68d07e4d09e36c938a36840b79c4f8a0a087958ca16ecc8a87c905155fefe377fcd586e8532ea473df1ea323caca6ead1ebb8039fb174eb8af3bf01fb2616e4452811d406e9a1c560e9b0d59b1e1b6349d72f7afff0c1ff414dd25733849329aea5fd8d5c6c8698dea26de9b60eca6d4290572975d2b98508dbba7e3a18c6b67b7e92d2987b98d2ff97687831b9112dbe1acca2c54a621859d1e902759fcf73f7c3a46e8d6439c567028bad0612f7009103084d0dda1dc8cdc5c5df98a3fa6f3c43b99d0e83d055d5e2421a18a0d34ccd48846d2684c58005315943bf67c648fab8a57c67f701f653de6111494489c12c376d8f9718d01392f4cc86935b61a58a97bb99f07c89abf287254ba96a2c30b6f5f94e29ed00f8f9d48f5d423722b12e689a0bebe557078ad70d24e112cd3ce49e5aaa298212aba2ca2d30663230f0af5d64f701e9c45117aba6e4620fa63714ac2e497c15bf35d18a6403c3d3b550be60cdf841b5cb41542b1ab4972eee12db7749c840d450a627392cb8ba692ee28cb3ec7557ec7993cdab984f1b85ccc61105f0614b84f692d066616fd5dd5f8575f9fe41e5112d99883473aee230e0e7ce3b4876edddee4ab8cdcc08eef6401dd5e3297a984dec5f2cd8144c9f34d6a9ef855d47e5915778c6889e423b7614929171bbe00ef5321e4294cffcbf0d83adbbf1838ec2b10db5482376a4b1945677cc9ddf111c10e6366f2bff6c991ce96529c272492542a6a0a3a5a18c4ce010d34072b25b2934bcc0c90d4ac4b1d51e870b020e134a6ce45f3ec519d83afa5266a71babeb996c5db088b82422c6930411a5be6941206199ebe539a218b8fa21f079e3e0a8a346c931ee6430b46b1546341a4703ed7ba4cc895a3070288b4044a00cb39c8cf33e100f4a742a446b9c90a548757ddf0f2cbedbe1b9186eb5e0d93ee9ef0210133f55c4a8803b561959417e5fb440b6512460b5dad31642a05a2e2969867b1ec14613ca904bd68b8f719510ff0794a802c10304c7c13ca6f407733a62fc0907588cf6b5220bc042d3eba1a32db0fbc2687f3ef327c9505394e3167437d71ce912570c4579947e084baef95a07180bf4fd57e2d7dee530264bd70189527da2ceaeb39ee8751c7090f10771e6e535b481ee6e0a31cd264104d614c223877c03b105b3fed02e3b8c0851c30c3ebcbff9bd85014ead6cff924f0867c9f39d41f723cc9f6d6ee05257646802fa1db24f342f526efbb3136d465d3f181e2ffe01383f6ffa3eecce0553dedc5720d45ff16f40f4ae410abe4d8591a3cbad48926feab989cd1c81701421b8d70545e6ea96f8f095d787e7bb90fea7fbe08dfb2d1d68c7d5af492e420764927b5164ed04612abd3c97a992022ba9c49024ea05e26013c5f05a99327b4625f78a83ac9c880c1da9f0f0a631dbb7de952dc28c16993c260e1abea567a9906a39ef74514656cbee31dbbd27d93962a025ea57fe7bd655fdc63eade2aed21b74d018c496032671d02aeaefa53731cd220c4e67ddfd3a91e2b47c735c02e34e2049bad8417cc113b1329cdf3ab951e4661e6edbe8a55172c01cbd917c026a0cb22d0914bd0943f6874bd81bbe2eb0b23695c9475bdac1d044e2633084b3ce43c11e67bc5042d9e4d625b0fb480048a5c23ac5c30da514d0729a1dd356daf400d9206d2c0e3ddc954bc1d45b96a76c1679fd85b22df9f84f3265312621f001b9236c6c5390e7e09000067e5ca2c14e0e4143649cc58b457f2065b6f54f766e267844450e865db7b77db7b4b29539232da0a960a480af98a1385d2e509a6a0889d698d05b143f95114c71f4321e28c9108cbb7489221aa8c3b66268d618d38f30a2311f251e269048f4c28e2c9b86366d34824f530c4d2b3c9587610a9d1c23ce53f82b5e9a9b034e53274f510c2f40b7f7a455f1e0265ff50d6aa6ec7c358abe8e3eee52b0beb807a456363f702bb570ce7a32f1cc3b1ecdfed743b5dcf09858baea65758484d48ad2604c753be130eb65f7af98aca60fecafe31401d64be618fffc0e85b980375d9f610ba29f1f40aeb9476ca924f69c7ffea14d926cc9b544a375ce966860c7fbd8e48148ae5cb2f499611ac79ca2d8c1c43224f79e8f294dfd09544d62bcc82b16030cccafe1d66611b1258f3d58335a2f0654517b208ee48653bca6004fbcb53ee2f4ea7572523aee52b1aeb947fc9c8d4cafedee9084c6ffc3f70c68e25a3d211ce4907d31a30d6aa496dfa33b5c7c394832dccc29a74329b5680ad0b6dc74ac3d71e021290801ab2a8c10613e0da64dbf0cd1bfce52ffff1970c24c0258db13c2aab58c66965bdfafeedd81696c911d529ef868f079c095dd6863c61cf74217bf44b05a0095c5afa997a7ca61cdc03d4d1657f35c90205ee4f3dcbcf4c7efbf47e4f892c22e9a9e630b6e2cb7023ec0940e8f270f87acc708f28706961b0d80ab4ff02ee5015e09bb198ac0d309e5880ede8b0263da6a3cbf895650e30c3cc0a315274ece041830a021250838c19346c78f1861e34230b38ac28a014829f17830c2e610a0d2e74a8c97e2fcd6e48d4290f89dc8e293624b26191db3bd4aab234b3315f51195b9acd66a521cbddaddecb6d751357c8baa5debf346b5519126db31929f4c29349588858debf2434616636acfd174497c6619f146d340efb94d62bf2fd1e35ab6d52e2a43d227575ca3f2c6a1551ab4a7f657f2fc15af62f2dcc815a5586aefc6a55fff6cafe21ad55a50a2c74f1b4aaf6f8bc5a459570e5d26540ad8a5958aba64c899dec6f67e011580b59614d68e3976cf2be919d7a5d2997c755ab122c233bd6de6b8dec18d931e21a6aa1fb04afd5f6f46bf8bbc27d47df85e4e3070ff4a571f877e28dc6e1cf892e8dc3ff8a361a87ff4bafeed38f9961456552413a74c6747b5399201ddb1e042f250140686e32c7c8f32d6ed25774c7a674116b77d86c6ddb5695b87978807a865e14a8467f6aa88eab0fab3a1d57bde32a4979787af5bdd39d4ce43ede0b7c0f1602996ab814821e950d15f527da5449924337625eb24e767721599ae305b3414890cea67bf0217bbdb2ab762075e24a0d1272ad4a8a7d15ff7b5f383648c87bdd6d6d0b1182f3d4866bf0c69b373c11e4c8e6a806b1b1294d36435033139da9d44b6dd31978d8b6a136b3239fd80dce901ca1d86cc7c5d3f3523175ca9fb27e08e2e5cb0a908d24355a43f6e0e3870f406c3f4d0e35ec90e32566061e8d3275734e6d7c550350d7f01388da589bb7f17a44a9923442b8fc8018553ba6d41f28909959e95729cb298eec33d54bdb527adbdefa957aef4f65b0ec362421dfe3ac6ac0f7a7b309039365f70fc597c6511f146f348efa9fe8d238ea93441b8da3929294c04565fc3d718aa6af53b40a203e7f9c16c4ffb7572e6de8a8a15755c67f869e7cc325a6e328c5b4c7c6488dad95d26aa446c86c99390135f747e9f4958d265f72b4aa5a1b88c076863bc30f655dcab262ad956e0d76513d534eea09dcef259e2ef4061fece2ab15bad2a4ff0d305ca2ca95ecd229a728171b82801b9b28a5b3ab0d46e0f9305ce03aee98b986c7a65fb9f1d2aab6e3c7a3552a2eadfab6efe1054d117dfb7698d6a7a3ac47173cf46002a636ad12e2e3870fadbae38e09e48720adda3ec5fea435adea9253f9576bed4fd0d21b268c380e4617b8fcec5b93b58f9b6ceb92cb1fdfd66d22edb11d67b98dbe8b9487c260a97dce5a2e5f2bd21e7a3fa62977a9bf276056ab45b59452fa35596b12af724e4c81b9f772cb3f7a3290ce5f938dc4f39f2b258d9bdc5f7af9aa2cc132ada5590a70f9a5d90b30e712c3b3d493cbd20c472ecd8ee0f9a5592dcd9cf6f4b08ea5d96c99e5fed26cc24c1a3743f0b7177bcae32eb75daf56f78ebbf349e3adb7de3bd66ac75a6b8f19a040745d83681afd68845a94b686b85a94de7b7ba7552525a2dda23f876a627ce861ab1386524a6314d629da1ae236b79f871e7cfcf0e1de2789e4bdb0940bd49d04cd55e9bdb40c72b97a62b4a059ac1a5adb6cb7eea8d48f4608d766f98afaf8c47412444366e0413d957d15d2cc56c7143aa6d0952948c767a626e153c13b7e900ebd9706e9e8648ff4f598d1166db5688b0ea145286cc268cc572939801c8d0515e9617319d339e1600ad45cf68a0e2969eb33e592b6ba7581fcd2ce69d56c9dde69174ffb98e419113bee577820f7d39c561f1120f7b7d0044c6af9aa59ddad66c5e8e1045c764b88af7ef0140ca6ca0193bc3b1386fa2a7c550f5d84d52a4a81ed8170f97bf0294f7dfaad041d00cd94529bc6e161b6f487fd60f789059866da630a5c768bb232cccd75fb28c8e386fb6df7a9107a335bfa3f918a60c2d0ef8946e41ea90d0d9346f0c356a6a90947ce947bfb2adbee36ab54d6b7e4de7a3fa67d685569ba3c389056ab87b44efbf40ecf508e47b25da47bfa27f7df1d3c92b53a78245bbd1cbd6dddcafd5ce9fb65df40ad2ae950ee1c50077f91b0bf5d25a80933d45f126250b4d138b6ef9e5e81dfdfaffee96f58ac4be215c99755fb367a6855495b3f4ad96cfaf8ae47f269745f07224a23f5fd1cbef74879488f51eea73b2e366ebce4686beff841adfbf9764fec06b5eeddb61bd40a6a05e5f4640acbf427ac87c646fa92f19a05c7f3a83b05bf26a77b63d3572bad0dc855d8c18f971dcc299af0fc3c534ef9e3cb364c3cc0f85dfc7aac5ffba78ff408f7da9f35f48a34fa307bd58dd353ce129a2f2c4c3fc66fbda61cec270fe012e7ed4f3c6a8d12e0f99652a0e6b7f473b00f1da6cccd161b030e8ec108ec3f63c0c1b385069c9900fd2273b3c59f26a074247f4d521f9388081339111151c6b6ef0b90d0c1b12252134574c04d7f154091532d00a4786209577c61841c44b125f1c5111df8bc846061ad8001145fad8d63711aa755140a957f4f28724c77cd51afdea8a81fb5e264fae94f0f110292e9d04f73fa5f62fa79d0f4935dcbdd5da403b13aa700410c644741e009c21278e04004488a44e10343306291a04344caeeddedee3f39c6799830d42df00112045dc1d3f2800efa092d8881ca94bd336d9ce9cba5c97eae925532ee31af257922d9c04e366d600477cb13c906887077dfb8218a8638e26044d1854f90484c78df0d86880138440e92214e501a4208f6f24432441025a63c91d4686182a4068611d3ebc485f2c180010306ca8935e49d3e1d540d0956c07922a9d9408c304f2442d4528428caa626291221acc8a6949494141933849062064a9e488470229ba828c40cb289221162881020c8265114457007e5a6c7c2471d8906886a2c8052ac9482d042d7448d93222e7c39e40a7922d1000752a826bcf051114910566413e5a620c35982c2cbf344124414488270759e488240e2255f93a83c910411cba6277c7e73fd595e204f6fce015831c508bcbce43a962fb9be290777d4a855257579242bae700e8bc50a02c88958af44197f3a03cafe54680b199fb21c2891bdcb3e6538e0c9ee2edad3727f8e735ca385e9fbc0c3f32e8723f6958daf0f62cedf3ea6ad22e4925883c4509ee08c7d4e9cf7556913e68a8717f98bec431ce0e176f42994bdd6da375f7344a822e50a2d9ed0041c7400891b1c4bc46004393160c28b08554091c4500c0a871f0451fb41078ea0841099fee2892866e0021ff018a10899b647b0c20a5d8ee302deb747cba108cef478d2c1e0f8e268a82d965ff63cefedf7dc84e9fefb6fbc25cd3dbcec8dde07f2a0e1d7a5cff1574dbe0be3dbc01b48e36c52e4a13e992a4161a01fd3d435b3ed77932649e1cda191057300158620bb12d85f1d8d467b21af48ad56f62fdd68d25d2c8cd47259937efd7547ff71208f7981679688a608206b6540b126692c3644694ca81dd5be7dadc3429e1e47c0654844d41dada375b4aea3653f91c047ab4877ae5598a50adc5f86ae91c42fee24cfbfb19fefeb5b67ecf80191adbd95e3c099d2ec34025c7aacdcb689d8bc8c0080e03e63d99efc19baba9b45dc442babe12704ceb4e713bae7d3aad70f6abef08bb3b27b3ca4afbc173ec5f21e1233e5ed9a392e557fe9f5e4647fa73117a7023c4393feb269554bf6f784e0b4ca5f0ef3fe90a893c0258d352adb6f32fbdf9e79f9cd79ddd78133dddb3001fa45b600cee3a3fc0a13f02fbec8e39bbc0befbd0ba86c7ad2d76f2a9a4e79f658a2728bdb4f1a6bd2052f7049634d9a44ee135d104da28af84dce6ccac11e2dfbaa26079a266349e0d2a3e5ee6e9ac7cab795031e81b57a7f46fe3298c3ec995aad16ab41566d9055bbbed7813a5a1f9853fdf6ddc2fe2a96b2d7b463e0e27badc86f7bc590a8535f2e41560559321b7b0107b83f4e871d8a9a2469d440462f0b64e6c8830d41b8fc8cb28f26fd33ea950f9efa8e268cedef557eafd7f7fa5ea00b9c81b11208035da0cb4198affc87036174caf0024c1bc705f4e9156e812edc025da00bb7b27fe316ceb1367415e90f3f2441d307993e017278a52f072ef958c935991989901fd33466e272f9ca5f2f170c18fef21f87dd38a261c00067fce53f7ee2d1148c5daf5cab18ba9af42b863c3017f20477c8e005eef7543e957bc590c78aa7119c7480bd932670e9af1e7cd2012e69cc7958529f1a3190d24f7e6a87c5c6934f8e415218403ecbb38c1848e99108cb93ffc293a375c9d87841b4334fc5440b6b1c3e3e3ea71cf074913a64084f17a147751bb2e51c6d436af5b1393a3a3a52335bbced239ffe078a29f6292bd34083c83d86ac263d860e2e2d11f79d70804b1cebaddeadde8e07c77cb5ed146d4525a21e9fcd761cf529ca65a948c7110bf44992ed06db80b6d80567ba6d672b72c466dbe93a9f9f2336476c8ed884e04c0f463df57ae486e33046a1fe3b805d1c87b1c977e2c1e5f6e271cb533d1831babd7c657d361e1c93d9a1a2ec3c5836dbbade16aae5d21265ffba15b5aa43172dcf6d4bb211ad903330a84fb62f6e2c8dd0ac0f0c183be8691a8d560375a02c3f4106d0d7eff88a1cadcb572c16095cfaab56abe01773957a3f7d59ca25589ba5d30d70b9cd98e001929d6c80cb6d26b4d56b5fdb36e4f503dbc18eef2087544a5222ea2476484e9221d6d6922449521412956cc225cc15cb7fd995644bd42996d13e71ca2558ab232b7bc929f76861009861cac46cc1ed3dce83dd67b6f8932b9225051ef58a4c6121614df63fd5009721d1c98567a559a9b4d5bbd5bbd54b23646fb6d76b88f4b6e36c887219fe64ff6a872ce9bbb046ceb4bd698b73a3c4cb08507f6904a88d00758fa511d9cf5febca614f1e7b64010678455a9805b2311a60548d0aaac499323161286db6f4278e1bed45e9ffca6fb48db6d136da4633e5e0d6abc7455d2e57abd572f9ca02b95c356099463434c40dc160306e881be28652a957e955da99bdd3a59d96914f38b8a4b25c52a1fa1e0b57cb69dddcdcdc70b56e1d64b6dfddf8ca7f6e72070018d6c29e84e1c39823e974ca493a4dd27121e938090623c19a9c0109b622dfc69c142dcc533397a1cb8612842e0ea3accb09099e9eee72b5e3faa311c297e4d3249fb044a78c07424cefa421958e72241fd2911e920fa53e47477a9aa4a102db2f8ff41ce9c91efdec6cf7d08ee59157d7b4aa4e18fb74fb9a2be63811c15e44442b729201eeb1a42c1db29f83c167ed2f186643383737b3211717175fb13c2557b49fa43da449da63d94332a53d443d2f5fa5e490a2344fd14f8df4c5225252a4439e8a019cb1b01a7902611a03d150003e162b703ff92c9f928168c8a644ec291b00193e9621dcf3bd1b1fa9969d76e951adc966b52783ffc800cef8cb7f1c86924d39b85d683da8c0ac1b1f8ecf9483514e31c054666a92d2d98af45eba53cde1405191b94f30c0f61bdc4179d041122163aa6fce39753057a9d1b28c3864821c8780305b455ad869c78381b50e00d9dfbda69f005cb8ac0dd65ac5e368c2340c355be8cf2e7b300fe6c13c98b77af986b2ff4cd2ab9a2043adfa61d65ebed92a9278b307f3cd017c393e530eb61fba2a2d80770dc32e31907bf41758944317ad062c6a1565b15c76b4300184934c8d2c640ea637f3b9b604f85ea61cdca5d94f06d27902f48b4c33042e2dec2dac57d4c6533e612cc61d585b4d18fbdbcff6bad9601f395a98e9941312ad68cb533e61ea6f4255dc86668b5f16ea7b0c5d2ebda2479df227471a23ef58e21cb9a4b11c37602f705c6a8c11d19088d2da0af0ab34f3d4cf54512726d9c454d157933e619c883661da572ccf22869eafc21b4f8151984e4c15783449ffb095fdc311ac853a394dface6c59d5d0228d837cba7322824d3ba81903c7a15060cd25db2b7440cbf38a1cfcc890e7153990651ad38167b3ef67bfbe79c2c1df7bb0265f48804b5694a1864b1cabe14e4cd2bf74cf73aafcf5def46cf7ca4ed485fee34043d965defde8dbd8cc5756567644d90acdb23f922280a82b733986e87d8d21187f8cc3d865fb4e38b8046b4ed49fbf4cfc55faabb430fb79620cdae2cc4e441302973f5ec62ffd65adb5f6de996dff8c6d7b92d8bf91fe72443ee35b24917ec6cf3cc348853483449a31e3276867cc0067544451f4dec1186f6196d62aa356b9f0feb6366150bcae3b7bf8a32671e6da5c2ef12d9bd49b61589b4dcd9d6c28cd753e813c66eeeeba90fb98e6509a1ccb1f1f8b4876f72671e6cdd4759c893b893377b5ffc499c4fe6a7a4e2ca9e963fcf42d9a4c7f3a892a919a4c2793e9f4a7d39bc46ee6e4290d881ce3639c889d2dad4fdef45724fd78623abd9fbce914e3557ec6bb7fdbcc102d6cb6f89f5e30b33030fb369b4d187bbbafab05bf1b86e00e32dfd15f27c0f84b1a7381058ec3988a49faa7fc9caad2ec3d5247eac23be2189ecd16ff16f1ca85b759366a55d9df1ffe3419c2c41068b609b56a288aec334584b9da5e9d8221e57e5191fd3d70a6a9cb0623300c17aaa619f5e829767bdf460bd4a45b21adead1caec68674dfacf3c7b4881672e4bb315e912844b32fbabab159af124d29fdef4213863f297c356f8701c61984e504ea81562b060bf12f0591057be44450a8d1a356ad4a8818252a3468d1a1fd32dd4680105a544dc7e2c0157568891a22263068d0757c012193264c89021e34d64989894988c268f228a5f439cd182a8f225628c97219e4e3e854658e24cb357c2c2c7b4c782486b4d3a0e7177833cfca3f5ebfb55eebb9d75e15da82172b3a5df05b1369993aba0c295ef97226eef82b8f235c416de9d8061e2f86d05edd31067f6684d432c3390b7f7ec47a304a256234b63144b20f2f89ed7451486b6d6d2a8b5d2a011d332e846e327385365bc77bf71fceca588dbb390f23436616ef6a72befdfac09d3c2936f478feb3eca91bedebccfeff7550b7eb686dff5d2b78137889d3b7166bbf22bdd8b9dfd167cb2fd958f85b4299cc7795df7a859da4775cf750f8581fb4eb41cd77d8c5390062ea3ba6ecba88f692ba21e45a401a89ec254a580af143a29a51f6745ea73620297fdca372fba042ebb565379d07e9cb8127eb35530bce51c87f17bab46a37592daebe5844e955d9a918c762fce05ad8c7e19246b928eb2ecc1f866af607cc99518c6e827e34a36195db9be67fac08f1ed1231fb43ef825df69d554115744129c01c16f4ca14799b2868e40276a48a01da2940e0d11f5ab57ffdad1e59826eb7b8b95ebdb6044b5530581495ad286cb84f96a9e9a2a1fb6e62b6f79aa7612084c5563511a6b1eddf11415c124b1982a8a33c95adfb3f56e1ed2b10c129a2d336f271fd2a9fa45bc5502bcfdf625bd69790d477a335bea7b2a200f191f9df1358dcfabf8d9f1bb2c58707ccd96fa9c487dbac86ca1ff3dd7af7ef5cbfec0fa45a9b738ce77acb7dc8bf84852ab1d15b1eaab90a0a8b2d2b526f2d1493227a3409dfa6119e592afaff22b64092ec19a03e262300ad49d84837dd6729c0d82c162271f7c3364aada89499a60aafad5649d3024aefb7af2b5279b5c4f393155a8d7fd5a4d2e8907ed6a4924d27d97d972df8af77a23d7f5acbb423deb3a7bedb5f7b632e7ad2144ae243e3598dfb4cadf776a9ca7feacef395ec47bdc39215b8d8d8d0d6d491d47025bbd82f1d56f7235711dd317397117ca9fa09c984c4cbebebffcc761b18661d2b3166a14bde924b55fb9fab36c72ada41f5803d51efce4d2461345b97ce981acce980d35dfa736473567d95056131535ad8d5ad5b72fa9e32eed81cf7dd2578ed47137c887048e299744ea418e0f77ef2d837c7c827ec87bc7f202f95a52f756a439062330fd9949a3098542fd8499283b9ab877935c8271ae433ca7febbd4f72ec883725f779f57efb3df774170dcea87496389ea501e66307bf7bbe297bdedbba29749d95bad225db1cbdb5fec4361d330c1fd02407a3355344d92365c1640e38d937223d96457f165a335b7267bb5b9f4c6da9c5695df8d0efe66a6da59ee5aae0627b71b7ad35fcd4f6b88ce4e09a65f4988eb0a7cb72571a26c582b39c8984b118b0ab1f1c307203f0469c226e7a0030d2bfbf3d0aa1c33f0a8a1d6b68e53416ddbac766bb5b6d6826aac4e2581495698fbf4511e4ed58a04a6ca854982285f69159d64bf47fae69c93a3d48e369adc9eb4e13261e86f32db5770667bf1d257f1674bbe6bb2d5b7e132b690d942dbc6ebd835a43ec9bce995ea0a1fd3963e04ecd3b1247de95fbcfa557066850158816d045e72c92343a09f54f2c8a43f99e52ad4239dd1590c141a836c4dfb28a3fb58f697fe8e2765b34ae30a62fdf1927bfc28addd647d269860c27f6aae8eab0f1ef0aba69938a23f75a8874a43ad4cd8fcfc1cf93902345b4c68e86cdf036791116894626b4620d8dd37ad2a67516679e3d41f40ecd697f67669bde20a19f64a7c6a94795a55362c571a2d647c1a5fbf71be5b2cfcc38a320b3fd2e89c5ed1f86e57aba8589f86f843a76a11a3592d92e951ab4a153ad41ae22d51cb252dcab587ba68b93e7da1a078dd9158d841c27009a098b5ddb63c123b12cbdef67dadaae497a81964ad4d56f264c6586219a4ca58a68c28a40e32d76861f0fd4b1c6385afdfacfadcc95872978e2e2a2659dff473aa601c9971ffa1989c7c4c7b2795baecd713c803f551f08615fc8b613f95fbc9d8be19313e06cab88218c3d2ef4fbc4f4d5fbb3a66b9582edb1bfe98ae342ccebcf5639268adb59662fc139cc11fd3a14833bdf87e245297bd4fbc7f22a23c05bf6f94afa7afdfae0983fafa6de32b1a5f5b060a47e3ebed3fbf76fc6c65e1bbbed27dfad37ba8d38bd36988d353f7a29440dceb7925b4442ca947bf13fba9d83d1486ee3dd1d53df53ccffb18a725fdea9292a7e04cc997449aa9384bbad2ed72e9ebdc3bf54f4a9fb7d2338cb1ec1ae4fa26cd5291158b3b66f63e1477cc4f4cf1c6b93d494cb1e3773bdb75e53636976329ed2202cfa3ef998ee50532ad7408afdfd3e1e2e2f4fbd65bc2e1e5a5bacd2823ac638757bf452f73b3c52be9a03435430cc1717487385be88bb305050570878904ee289924fd9249ceef6e3c621c48a002baeffbbe8f4e2eac1fd3e08e3a72dca4a4f66aefc69142fb3b4840ec0884a556088fb63ff5a694ce2fc2f34e9ac073ca624dde307264e4e888cd111b1a8d56514d5bd5d66e94afa84cad95fa10d59f95f3483d95e27824eb1ea9de7b757a157e2d02ba5268f0d3ec83bfd61a246abd8fef97ee7dfad32b201aab744565ea87a2088a5fab7e2d292b579cfa258993eb973772cda9b4c686d6a15cbee41ae4870f1f80fc5073d0a15755a63ecd2cd71c33548f34bb5dfd7b79306476b7edce66431f5092242579feebe7e7f55a62c8ebf58219013202e4ca94079d43a728f531c55d079e1c28a5ee5e81b4ca559efb6eb52a2ba4a52b4f85e2f820fdf880803fd0e726cc4e087e24920d15426f688ba270a7688e4c575586ca96c0c9f4636ac8a5ca0ef4491bdcd6715bad5d4d36370f686f84a77ebbd7ea3c46788cf874ddd9782339f6e8511d7c96fb5b6802ae4d52fcc2d65be7488fcdf4480fd011271d5c4b31fd5e8b38604fd1c79e9a3f4105e0d0a5191c5080fd6bf5da95d65aeb5409cb0b64ff1d3d38bd0097a87c511c87310af54f9216956fadb37e5f495fa7a76a7d92883d5537af133991e609bcfd08f06655f2bdafd2ab1c3a75699abc285f0169204ddebf01867df80a35a2f2bda826ef7679e8e136cdbd2d7679a3acbb0177eadeeeee5eddadfb75df7c76940ade5c296d2cdb3ae7585e204f4a29a562983dfbcdeab5699d750b6d9126ed97728bd66579b6cfe43770c623e9e8cc599eaf57b648a7ecdbbaf9b685db53b1943da7654bc483a72c0cd3c9cfd962bff40c84c260edce6cb14f80166e15d7fe2abd0ddf7a2eab4035d62a93b7258f4b4aaba3dd69d2fe89077827731cca567b22d62b2669df24d62a26691f8658a99824508d556be3ab5af355c5625a600a20740075c6b2d50bdc04a38cc7d267357ff98fe83007f298cb9ab443f976cc333776cb9a9cb5108b0cd39ab42f24983f34693fa6c918e01fdc29cded0fbeb238385bcbe26c1b67398edab4ea075f5119ae6399e3de7ec75ad6424dd446b6679f773b49d3fa28dbbf3b7cdeb53a7cdead9f773f51455ce148f6bbef58af4e1627dbb7a5cdc9768622847a94b729342b3ccd317e85b75f6d8efd18e24be3e07e05f146e3e01e25ba340eee51441b8d83fba675d7fac8beb35a65ff246ea249c4b12d3ba44405a9b1f6adddc9f6edefd0aafa2f9b190e65d9b73bb68875f5b4ca7db26d02289754275b1d66a8a1b3ddecbbd8b8d1aaefbd6cab8c9db226586f1ff52b24f879f7725bcaf6d9265a412ceeefc6715b19c40a6205d9d858499fbaf82acde6e06d7b187400a4bf97f46109070e1c387098d412d2682bb8c37bf0bd7b7f701cc79994543c857294d528d30fc5b2d2b2fd8df34a548b6836278322578fc05fa5d5ba85cba75062f6bcea7d375775a6fcbd9fde4bdea26e4161b0b7ef6d8ea5f4b2d72d2a51dda2d26825f4bbc2277b93e35eb16e5ae6322b7f9e501419cadef4e6b7813d4ac67b1fe72f6fdd97de3ee7ab9387f1a4ef49cf4d18932775e35bb087121406ef2bb8c37ef85ecf346a349944954711c5e9298f04f2f03e0adee01f18daaf743f5cd2df7f303693edbfed63bc64fbe957f67e0bdfeb1eea05b511a8c0e823d849ad039f8914884c5e6441a3c48b21185ec462602f6c4cbca081589a02acc48b1b1ae1110b77c1450ad885abd485145f146a61173b98e1556107ece20422890a3b5f15ba28b43c2eac50e16a2e12e7048ded868bcb8b11ad5393880a4d6d26e322881aac19345d0cbd58a0e162e788141a2ac438a30dd0a0dd518de3a0e0841329f47074460cba22b08c3c65509009e11326a40005224650b8214d8151b5abc4d012f894a7ec094f6c473c2109cf084f20e2f560549eb22784e0dbc2095148e5293bc10f94f05ef5cb53b802c82fc05061a309454cd18422da11b91f453be2840e382149ee27ca15f52fa80f74c94fe8f2db8208962d92c88dbbbbbbbbbbd545ee53eeaef5d619a73d5e10c4fea87622fb93fe2ece84ec48b2a3b25b4bf61d55d48e179cf15ae910323020c8942b3772e7e872ca724fa199640948b2a841ee47659183dcff595421f7bb30c107b9ff850943c8fd314547e47e1e454ee4d68204b9b5e0c9ad85d14c13e52ebc2612420b512df7db56a52a58f00000b99fc3583021f7a3885eb9bffe0ba650c954d8b64c6132e597dba4b262e386124c20a4042e723f8a74f19716508124090884922c21093fb9bf512ee8223461450a724b91db8a2ef2154033b6030f13a6b358c11256bc8c62af2a56452e18f2810e0c6e5c59cc200a29b9dd63b400cf5cb3cc4d69b23194840632fd180946e4468213b9916024f789101e86a147302a503b5be6fb68040bbad60a7763441019342abf3c8b68422e4228cf228a4c4d76163847645fb8f2bc11c28d4f3655fab34e1aaeafc288729f12b8ce0d982d74d2bfc145664a98512401451b3061beee8904dcefb5ec08243855817fd6a9ea95983324c3b1b1044cb68ab4617f8e40e41e67932edfe4885269b247203c7f2aba34393f85ded0d50c9aff0f7f20abf9f2a72c1955f864cf2b4ff9955976ff181bd99790fd79b8640f55807f871efc7ff803711bad9a0f52e16b55fd70bb7fb5025f6dafed2c434710aaded5bd3d3554858d0a10598554523e5133c68c394846dd48047cfa2a221190c8f7310d7e951b634cadfa216f952b2961474dcebf295ea5f66bfd592748c3894bb19f624dbdc22a2723f866ef7e15745087970fc8271c50804fd98ed58aa12e7283349c72f59a24028f3e9d14491037410841c2f2227709bcf9345754a7e85b31458768b2f57fa4d81a436c071e7a107a65fa3ea470dfdf204d58a8e0e5258607cdf63d3eaac9694b70932fcfd16d24427a6eccf1dfa9ff22fde513213daa5735a4924ea93fbabeaa73ac6705032b660616b4901da1466604a34cdf87874d991188327d37f50aab10217d13e99e24dabc4c37bedc8ffe143bdf31c6646df99229e55e5ecf96d1bde7745cdac4eeee7bad2d5199bab563adb556effa96de596b94ce9f2db4bd56ea6eabdb5a617474b6638ab563674ac7daf57fb634ad4d7825cd18f57d5f46798e9ab3bfbdfa51d19bd5768f9c169e375b75ed1c6d751fdbfd7ecdde53f4dae6da5c47e0cb77fcf1e5f9562c2d8a0377cc2ddffa79ad63dddced57d69e996fc5b2f4ec62f9e572bad75a616413ae5486b9a6d42efb57202e250551bd36ca4471d7ad8ed6bd565b9fd65a7df3addd4fa680e94fafeee2efeea30bd32f6be9d37d2cc5f0add77d73b0decf3bd0ddced85bedb66d4fddddbb7a6db75d7b574774d5fd5afaeeeeeef7a925d97aed07a3848d20d5730bce497a9fbb7b0513e0f9528fe45d521022e07b0ede6bc7d924116048816e92600572fdd95d805a6b29b556bc93bc240b7022adf7bb253ad3a39452216cb48a9b64f7f4ebada6ef27d9fdfc59721c253b8e23f2d5cfebe6d5499bf0da6baff66edf469f86197fae7aef446c5ea692bcd69eeea1158990de73f108d3fa757672e0ccdd38bbbdb596b356a5db40f6ce6edbaddcf5afd7ebbb38810c649feedff57a2d75b9f1d2dd4dced30cd30eac80bddd056c6dd5c6797792d602d9dbfa3bf54030099e8e198e037720a03481191eacd99412c1120201d71bfebeeb23b4812f72bf8a4bcf7c759f49c58b5caebcb6e91ec987f0cd534645924c1a9b8a232775722e22e02d4f1915b0ed868a570e54f4a0b83aad142f9c8c0a0f7cedda9cb042a56181eb6241f29995226c9a9c9b4a2747e3b82d734732c771ddf8b2d3a9e9e27af00b05fb58a766a6d19975aafb4536c5abc4c2394cd1b3f21c8751364fd914467c3258628a2078804f8ab82ca4982191e2074752e4c05b0146c95326458e8b14ad9aa76c3604226fae9425aebe573c6168e6b24baeefe29cb3d250063bc2cc8534c05f6eb9fe567aede0cb9528010c0167759e2f9ca14c134059798ef5a768011a709eef3e4bff6e1c50783e79be2ccf1148e7396dcc37b9b838e9f212e3f5ecd5a4b95c6ebcc4682143bf061e1999ce74949004fa314088c28baea6da78e552a55c19824c8e97cc9cb229942353ce2445e534ba91033024f644762464fc71ac8bec8f1a420bb2ff0fc18aec4f42d193fd5f88d081ec1f4304296426c8fe3ac8aec8fe3c20c101122448b8601501063645a0220a23a238a2d61a1adcf472898a79312240e8bc9ba8028108297015f084608522b6021ac454d00310cfc009138c008b961646d846d40d97574171285911525091450b4543af649718a2356d4b4f6cc89124a60cd480609484113ab02f645c093b483c505d74d8c1619a9a7070840646a4901b552bb542e400a16439ccf475a01ee69856e500fa5caeb409472e5582a6c838b2a02db2111fe46e8e88ed56978b4bdbb4ef55fb346c63313bfbff3f615e4e0417787ec9717400cd2265814df29405c172087a8d79ca4410846cf3940591a00a995a21202102200d80400b25c8cca019a840043d40228228a8905975cc4ff2075c85004488397617b8973349398db20ba13874482ea9ce0f6cb2bf3f7784ec8ffac112b2fff320fb93409042f677810565ff9814647f1e45b23f8d4ff6e7a18aec4f18657f1f7ab2ff0f4bb0098216374268a2d5cafe148896fde94eaeb941dfa1d6033823c124cf0742a70a3a3e3d520cc1a748a69c3409c088f8c1111718c10833902967cd26c9256521c1438b642f694f95f1c1390e6af0c4aa598e655c06bf4e9ac0f4bd1995354963b385beafe6bd9c48130408198f13af1893d2df3d103241be9fe3bee3eead239e2dde32323d9e4202d35f29ef4db67376dfe04f92d4891c6787c2d00e854f241c2dcd0eb5c8c35325259aa088f214bdc9f4e61353ee0321e3b0943bd2d4f4a4b81e02d4bc64a60c12147c1d3cc5fdf74190c8a1bffb7e700cc2c3535c9031c8cbd78d41a6a77a0c4296de43fe94e170d0c132a43bfa68927b1f3cc5713e89b87718f71e9bab1d9ac0841d2c8e2872c51532dc77226589318400a7e4d07d73290a9832351cbdf114f72929340c287df1c5175fc8909e0869a4399ee23e73ef407400adf71e7f71f42673df8936e629ee2d11b8f49eccdd1b4e039e6f341ec47a57b4628ca7fcb707422688bd8f448f2eefa9172064acbf1378c7cc1440cd16f7ac9892c39d9ef2d48ce1084c5f07980e757712afdf6b5164c18f4da64fca53e6c41149555d1346acae0933664f861a2eb92cae64e76e08022e49196ab8df7564b2a0a1a0211fcaf5ab53da93eb739f731cc628548b6605b8a4b392cc74bed7b3ed7df82a07ab439d3446b8ecd9ac3bce769cedb8ce470e2a2b3aecf06d1e69a3de32caf57d67fb3c9a51ed8a68a64ef00415dd2f838a6e50d1bd631964046b3a44a29cedbad6e4ec97b73c4a297d7a22d2cf544cf1c0b0844ba8099d51a126ebfb3449e2e01e45c065db5cdb3361b8af2627959e88742c8154d13e4729fd49e947a915bfff7e825fff3438d3b026ebcc57a8ee59fbcb6130555dfbb89d09435d750a932cd263f29472ddab19a9e0a8e4cc9686392b158d00000004000315000028100a068482c1703c4f0449ef1d14800c84b0506e469949c324885194520819440c18020002020034d2a401e4adbcb4714e654e2ccaccd7029d1c37e3674beb39564aed16e6e39899bd5ad49123327ab6a426c7a4d46f595e1c93e9e5a8a8864fa9db925c1c27b3538b3a7224317f7e0f6808ca197b5bb6961c92ab54817b284d9033aa06a9a30415b0fc27b172f0c4be9f7ba181932c6ca0f3ebef8d58a3e84eea72c8893d16dd24568e5dc4d275906e77347d6069ac4d7d344349d699ffb8d4244410e5ddb3746cc9cb5a2ef61030919c175b1a1b94fc1ea6d8079d0fde3b21fcf715df1af997eb975c2eaf640d61eec4dfeb4db260d9274a355e2364253bd0d2132c7224824c1dcbe289798cd2bdfaeed83b66dce154d524ef4bc84e920d692ed5fd51a3e736f2f8d9992f04540484f7eff82d82a456663059113caeb9c4eaa13cb35dec4ded1866ece363619c67ffe885c7ea268b3331814966819bb03ddf8173a76c7894de14d31f4062cf7e9a68e5648948996860661c26342e7af3780739d41f901e353db218b0609774aaf933b6c21f288e920dba014349a39ddaa2dc648e7edaf09bc6bd9a32b9c03f639d236ae3f538170eaf6edb3f080ee1c89590449d09beb8edfe6d255327fe178f5105c673bc7c67dbb0db336e9a106006b5a4cc3992b0bd82750995edb7ea90189420f2da75753544f03e32bcf489a09fbbacae59d6bc307e9fa849d3be0b26128c371c68b01a3ba0a19a6732bfb64a4c9ed94fa8a236501e09a4a33e6ae6c9e32343331195d2851e4a4463585a39b9a292634e629cc691dccf55b8c0374d6e5aa0e9c8fd1c6ac41a9fb0438b1be85eab7a94111e8124660ebfae5603e3b6d9666def74e36cb96723b40f1c25f6b4ee2af33ff98006776227b505ba6b344d262c738e302d317d9353e3f32d78d3e56144b0b47362640e676a2aea8b078c9991bc3be7b2dfaabdd3043dc48f634cb2e016f05d206a8ab625c549190c5e644475fcf8bee234336997f6647d1a62dc4d9301ca648b10f5faf7ea7f0f2f044019d91fb42ba5299999ea77fc60f85eee442750230a8775de5e30d998fafa459a3bae20f85f5b05b0d41ad97e9d4aa6a94afaa2a9b88a468588394ce521dd581fbfa83e1fa097ed003285bc1edef8695ff4d97d27adf27fbb6ccd8479937334b5cec1efcaa688e626686aa88d563208e4616fbdfebdca4d7998a6447b5e4f35b83eaaf2251663535a6f2c0be7005b0c738cbdaa38f5f160648e2d3da4d8d08dd8ef79fa295cd80c50a497cb288cdc8eb83e8dad282ce0ecb5c4979ee06b7e89062ea49e023b767d60f65aa27f9524239518b3210e40e6d690cc9117a9a0c8adf88302922a129ebd1f76455408600f3bf0c9bf901b31309366e883312d03a99158879f4e630fa4bb32aed20d58b906eea3afb529423f7fdcacb731ccc99f4672b0b78dc3f7de77a2ebdfaf08487c392ceee3ec7a19f21e6417fda4fcad84e09dfe7561895909702c724486d14f34eeb71a0ed4ea396c9f27daa044207fd34f4db095e2d4406a1398bce8649450db023aa7bf820de5ec572dde9140c8be0f6e02d316a08f2b079d110f84352be76fbfca1c4d0116f3e8b829bb89422d0f8e0adb2f2129d4986bd4ad32018be87c5c6e022b76acaf50472e684764df99364a00b53e03e200988c4f64fd7cc4fe73285495fc3191c0a1c14d94f5a52ebd8df307bd68a23fd0ab42ec5acf3caa90e6a7e24563dc195ccf3a0ad29d70ed598a8689868ae72047665e50e63454a01e2c6a97411f8fe663ab2b5cae6b2d660333ee170d44809e0d35f03656c4008cba3ca5153a0cd873b6815d812abb6ddbd364a38001b9da948c464895a717e7c1f4f19482abee1803c07d11f9c5cc42eeb817baf8832a98c436d91110b6d88a1745d5686238dd44c04acf66c4b79fdedaa4e8cfba091da79eeb0e2154a0f490aa4ac6d8fd0226a65cfd8d8dbf6a8abd4f317a7c199390a4c5d1abb835b2a8d23c7032b6698150436a881a5d93bb09b651f56c656cd006ac128df4fd313d11ce164d622a362dc62f38bf951eb89cde664a9db24e7b540bab7a3d9214f768140ad3b487b553d2b1f999c30a3e87293fe36aab2e64e1ef104b987fbf0a6b6aa281523676683db00fa7f6e8d9857124a15650358db42cc2aedacd8152a0f52c8f05ef00359a52cb4dc61451dd84e754090af6aa8985b80189098dbfbf973caab382c167f45552911644d4fd1b58bc043ac83c892aa1a54c0ec7e1b2d4fb8e42d3f9543e2bb810141fa8f5b36c400dac5fa5025b33ddf5bd5414527fe9977eb88460d81a2a414caf75be14dfbec82d0205f0a0097f28a0e4d65cc84f4d16886bd38c890e0b64fbb70d9b8c5b3932c5d75db8ce4ac76e1a4a19d19a8c605c109da40678f0cf13b95d5ee4520e0fec5fadb77af80e6e2d84658cbee560bd6915b66d87d61be0a38e1ed6918d2ceafa18bae4c29d1c6a6cc56a94822b9eed34c34e5f64d79c489d7d1b115c2f4626ae8837f012a74e53a4524a8e64a10e98081746f423eb4e2b618e872d1e591ac39df5a961644937bfcf279d45ad5073496694a66c9504844b62d7ccc36ad80e4f5dd6093fb2c052a342b3cf8e8ed0955581cbb0950655747260c87448249524ea5fe16aa167afb51694e43920b5cc322a00708ca8607be1fc60f513a12ab1aff5e8f7704b4bc17b960ec0e3c72953a49838c912b6963136ead9ca1e46eb41d67269e046cdc8e0183d750d095df70008bf337440a20853e891e6dc553ed2723391fd161ffcb2a32aa4f2d46596f228a44a82afe46026f30ecd05a8895d820cfc94566802ca37b96fa3fc100297e24f06059cf68f43df9fbca3afc42f2f210709742958f9a6f62f2b32fce661f502c56d62631c9860170bb90436a7c64eda07d43eea0066559773f11eba491d791bf2c3d5ffdcc4a89def53a747c832ec81792f98771a84ff083f87369763d5fba6d92e1a6ff5f0f62c6eb7e878c58c31250a3e4b613147f86c0c8d86ad91addac57a4468810063ca81bb78e41a6b79eec1e871cd0038ba8ff6185891a5235464534d804a59860ea3a92fe6bb59d927902e0a8decf2f91d0934124dd549f281437e187ecd8ff6fd1972795a4d4c122274906aba2f4b4cec37f6c945719d4f545ff4e72fcf4bcc2ed1b797e560a7fa46b340b549be1d55ac359919661fc3fb92c9d53e48041ed8934ff81eb110854d4e67606c03da2111a707c47acec17b19edcad67a6e68cd7b857c4faec9902607155db1f49d03fc385890875a9ad88e2bdc65c8c99ac63c6fbf572b80712e88a3c3bab2a3724689fd7b8622624863d264c7928d8b590b2e7d5fd1e8dc94fac152e22fe4630b823275b4b6351f8d1a18889f69bd26f0c49d76fdc9548e6109ce44cc55818bdf962a57840d3b6017efba575ff42b7032705a5352d1b6cab0d6a9a59f629a2d6593a6019ae043167931de1914acac5ce99c3ada2e04ec1dbd2863310a7ee078977117140938b0e0f522ff1e7577bf2ff21b7177d7b756034f5ab4646544955c4b5b0928387f2ccd5802507b4b1ba1f4f389ffe4799d917b572f99edba4f08574f85bdbfa548e12b4f70b4f660da4b8842e21ab370f07af9772cab680c855add94598ec1a0e67c5045a7abf627d49820278509d03adf79531a30726dab45bd60daaf6eee720744c6a69f69619d696e21c45112fc4e2ab4cb027ef2f028e44b257a8e7b3e58eb263fb7ef5444c334f4f55b21f81da4bd0f456cda1cc3ae42824561968e5cf34a6d1c586c590bf87491c9e1057a7fb54c35225816260fd9b8576733b983ac50a6b6234b4b0366b3992e294b564ba9ca70dbd3b4c32671cb566d76136a3f32969918835641c37ac1fa7a0d3a278031eba506ebb0f94e917e0a1f14a5d8e6de063fb4ca56b7bf98a83ec46bd23640907078a1000bc6bdb8f1e3d08bfcc87900e43614595333566178f05598704e4e16a78850cc4cdd93b3862076599cd2ad00753fc4e5a6fe4f138fc5c8034476d6575c7fd87a997be9e3a062a1b2abfa738c3eb30a5dbfc8b9a255e3046bf7383e6fe501aa535f9680204e7d8e77b9e241c5c0c9628caf31df17280f07d1a67755276e7ecb0db977c9197dcac3dd86be9e7eebf64911a37fb19c055068a59bbdf21b56b5fb49b82d3a420e4765e0f10709895c46527a518456c7ec82dbbed54be01b1a4e181340800d15e6aa2a931650034fb25be4a027969d3a970a04e6673d74b0ae344396cd20acee0420d064561a77c0e810524d3494f42b8e7fbbc4e7fcef2a6b9f704a6299b85163c0c6114ef14c727a03a05645131bd57df085f2c5bb07376144db5a035258c987cd626a92a3eaa627fa7f15e6915244c7707b38360e70207fb396b36eb14ea90ebc1e0d482e433db9c4b234d83ab2b0d992176e38308189fa92f7bb99cf832e5b05addfef39d600cdded61d87fe762edf0d5edc4c3bbbc0c41009eb0dc3e1f125d0384a097365a6f7438c90ba689565973bb2cc8ab89bbfbfb4b4f1fb53f04ce2175b153b70c8601f27a818bf5f291d8f71b3c7a5ac07d669308bedade271064626100b693bfc6c75bae93dc571ecbbd046e4cf629269894b5817fc5aa743c07699117ede76c2b9daa5675d0b7bde355f5f9e1d3c12e37169ebde7b2619d96d40c8ef35a537a664b631c881dbb93955043089f4b38dab89686e620db3fc98e0a2cd36de1cf4406ebf07d300aa1ba494001118442e6d410cca03ce40201e0a2e9750adec78e4a697da294a5d82cd780eed0dd5c2a8fe9f1e9402d942aff8accf80815ab9727bab4594939e4d8a6d9122f41c5385a0c1bdaa9b9c86ac0ef52c083f99ac68721fbcf4a47ac959edd5aeb2a1f715486494daec59dd6f7ceba22b6a9cb00ec786fccc5396f69df658067b51dac78cb56483dbe77510db71b0d858e851761936732dbeb2e2a95f9c2bed3e3e3ef100f82a4c18bc1bcfd7dabca106e0bc3f035932e61cad0ff5f22bcad4defcf4920b2cbb24cf0637dbea21c488da3602aef303d4e819182b2ea55c3954e3e5cdf9aea7f7d75d4d77e58931b2bf27c1280406102362cf1446fc18361ef5ec88c597da2a4742f44db1f0c987529147c2703b2440f58a73fd7e6de64eaa46207e75caf40d96d2106b9f8b6ce3a346a76de9bd6714c3665dba4198fa2ac1bd46197e775db23601a550066e74344fe66f32ea950bcb4eb26ca870603fd642268576a852918c35fb64ef050dd28bcfa385e8fbdc0d064785ca8f7f238e57487fff8b1cd4fdcb29854206db578a664d5705ca79d9f51d70d67f608ccbaa05e28c56a9f6012759468b3c74615e1bf9f25c602acb2336e925b8f0b5b70e42b020009d5ed8e695f7ed92d5bc2aa22d74c7bd2edae36b7f7c1eea2e5be239d42ba9a8be5dbad431dec0a2292ee4373879cda6aea67ddcf5134f74250c5ae5cf0fa0b9d2e390a0945cdafea1ea9833d13a0b17a25afa0ff13efa724bb1085383ac66b93f81455faf778559ec9235954ef12aa83bb4d41998f5b8e087aa80c49d9a9e584c89e56ea4a4ac3ec616b989cb6c83500f872b3f362929ff75208c9155071a23ae8634f1d8613f8c05b97191d07a6b4740a06f1206b7cbc708c32c5b2fca758a5a328928647b7e1c19624d72d04aa41b12ade5126e0daded07e2030791111a95723451557f183e2783fa68bc5a348923dfdebf7b40aa64b1207a827d180def282bf451a358482fea6798ef44b6347d0b25d456b4742a709a15fdf7a1867948e97d77e1386fe61c7898a25835314c8b2231d806ae5c52e67c5df42a51bbb4625a65ebba0d79cf5e53328ca75477e98e7ffcda6be665ade8950f424a86798715cdfe54bdc285347d2f91f22facc2a1a7617f6e1037cb5eebbaa358a0551773ea350a5190bf9a5917693f53b4ae321ba16c0383d32d139d6d18ffdddc2e01d8842c25443da1cbdf4894adae4bb5e097fed3b97c4ff5794cdfdd5557154a0b0963225a276abf6f2bf76b154ad31854f58d4aca0496fae024d9fd093ab2ba582562ca87ccd833b84fac9b3559d2a5c44264fc149153cb62a7d878f391b42e54e1232a20445fffdee2e197d28d93bb585a01de73fee9e232c45dbe035e9760531c5fc92f7d2536396748d87d3e402d12da057a9e432ddf9be68351a9a5f11e3d73d81964674a47a21c359d4bd6490d44d37b021e81fdeb221552a9a76ee5c2994d2b2cff50a27b974c7084a0c8a79ce1a81804e3a3bfc96ea9b03297d14ca7a818f4112113fe8845cb3f34eec40f4c57405aab0ffd43c7ff56c43fecfab94ab50ace5511022e866fdbd5f11880bdf538aa37afcc1a5349a22a34aa31f30ebcb3461128c73e262abcfa59647e80e71a66d0918f04b808628d9b44113db7b1748120969eb4fd50f5cce7370c77965b764e70ba4cc1d4f7a820d4e02544ebc2e0de1755af8f841cd18ab6ae7497046823f6a3dd14532b8adf1d25aa9108c7c3370defa81760551c2175d3134f6f3ed1580bd16de6be82b88c379a594bcca9dcc3b3389d5732a13829ca4dd1c96ee5a1be79f29193334d37965e3a021c9d4c839fc674d6da9222b23ee3cb40aaf498f1f6d2cbd303aa145c0fd17c60ed0888057200c7a475daa4045960f988d985c0ab219f83f597a5ba6450dd8c6f76aa603cf88a32dabc342a18158f17be8bacd531050c2914d6f54fb1a537f081c280570a31c6cc0121de7f05b1a7a0c1a05ebb1173f7b29e0b6858379c4238043cde5cc8789fa4976daa680d7663e88a1246107a63f126ec40657dee5777b0af173ac0bc7f4475d60aa3b2eccb304daba18a0f2ba5c7e328148e000d2ca54795d21dbc0cb331b0e7eb5ba77dcd995b0f25e3af4d22abef4e1f5cd743ad23d7c16c6e5e4da62d9012ec7c795e1e0c981672208d43f9958bad852e71a9dad10d66047bbabf99099f8079c152dfced51005c529b60340bbbd015d10689ce2daaf3a05397c9ed29787b90cec0d31b824f984cb8ce187c85875516b58a0223cbb89df44616ad30dda198008422b745228f7d42048c34e55382d3842ea248f16624ebf1aafe8f02c49d69d85fb8a41c21963c6bba847e98a2d2100dffb390932c6d1d3015e4b02cd12461d9d4b32e7e8f7422fa6ac235c2e2a4ccee578dba3bc395a275ba7077994d6399c2adb92b11518bc129161ad838ec092f7398949da59787f44f0b75c38e045e0724b23a693cddaabc805379c9e53ef81c738152cd20e5216a69ed31be85324cae939549db81692fb0730323586f4abf7f67f1ebb2647e763f18d4dd041c8995ae0f9fdbafe4820c1bb9b071da3dd800980ec252821bcb4dcfd594887086fed6d454d6e9695f089bf7ef6b8d46b2b30a71bd65468592605e504599339c0250d6958b1ad561721fb3341b9929c0124909d927290e013e8d9ee2c4c8f6d9026f15e4ca6eba0ba637b6211b1fca9685866dcfb73948f7df821a3b2f7ead1a31d383508ddf180b322b1afd8ab0bca1d0762954eadc5150b96b0fa9dbbd266897eaba4e465e98677198f47a3845df691be865d4ace98e46982f73eff0ad9ab882020b6fb262898e7a62657a827d5d154aa4477a4de5529cadf2043f29d5d37d19c1f1d6fd361c5eb78dbbf846d652369b4a663e01f3fe7e0e60e6f269aea206bca3a614e498885cbfa87bb8a498f704a0cc7bd4e751d1db74879a3bdf99413f678aa587b4a6b2d9cf028186c91b483d4a6b3004d10a5b1dbf1b332873461f90e88d431731a0d17e65ade7bcab728c6bf02790fb49e31d425e61e505ab4abdb9020d22713c9b7a705fcbb32585d7ea5928d44cace7e2fd6365bf3360ab2b555e7a158f92e0cd9c8b6e2a5048ec1978c7cb53ae96a6440fcb49cea110805bcad99d9635cfd53e42d615c07ee65bfdd7925beac43083141c946a9436d14498c4fcecb99d76883d5ca3db979c296d1b24f6f572509c4749bdb197601679a1cfa2735eacbf2456845f05831fbd268d26c83bc7312a1d03c677929594486bb22a01f3156a7e91b2838dae78c98bce849b821fc892c272f4e20d114ef8f11979751f3555a0fdbfcdaebcb0b39c9258af3bd5693b081f8d0cb697b33afa2aa956256dbe86f07e52bad79caedda94dfb77ce4cd02d59b5fc3579e56af955b054358a608f5f240da4f87eed363fbb02a2da309f9b03abb08b7afd4de24d31ebfc9b14d2bfbedac7bf40c3f41be4ccef577a9e8a171410f686891c2162ffe5f48fdafc574d9ec67f84d382ad824e76912b0ca4808e188b33c0c9d9c04f6acf75ea9d9490de4a08114c435cf2d9aafa30a514ff3f4beb92273263b20fbb1e68820a76ed7dd0ce3d1b7cc69d319d6c372f445d3598c8a90e0b3fbc83aa7dc1bee2e9faf7641fac983ad7b2161b24ff9f393d8ccbd7bf6d73aa1bfd9ef6dd94cd2e190c1132a06a242fd43d68dbab2381de8d68d7c99e199c7734f7009ffce2cec7d0443088fb4a372df43047e90dcadcd31244dde79899948ad85ed139b08cb7f1b7de51574f7f0549b49751e0de4a83f16048bea7333b417bca8a708a2670af294bedaf6d51264b8d7b2ea8d2e1330bc6745f5828ea681fb4dd49fa5de2056f28ee353e2fe978c27e25915d058c413d729b559a6aafbd2648d328a0b3939e30925268fddb649d33cdf9fe49315c037b4570d680936a7505eecd4458a063178ca567196b3e2aa42315e25eb311e390b8f8f4148fb6cd8a8547dab1e15db10ba63c97579093471d4542a4a1c009cc423a67e696fb19afda3b43686060095fc8ce6f575073280acdd0875255cc5f38d5df00d957eecda507b4172f3928c35d235593a258f2fbd4e4b1c60f04d5ba7c7c5428ca26d29471a892477d5c3e7d6cc0ca569b2eae1fd03f7359caeca70c51f985e54a0a256f43ddd60659d9db019f09e13a47538ac8ae2779816360d6213bcfdcf6adc2abf34a738cf479e671aabb39a7153146e2cbade8ce8621f3ffdf5877157fe0de51567e6b677428af94498931f632bce2684376c49155d9ddc0c2f08a088332309cbbed3147a9ac8e5aacb2d8d81a6503c1a1d76aafcc0a4642902752d6fc36791d1220b83ce73684b2e5b4d87d40e470170e2250a23709cb819be873a63f896a65334319d2d61840efe8c5940409420cc95824109da82b2265c68a0d07d35085e0f86d629ec7616852db258c216a9ab7f8ba4e50c6db7485a8fb10ad2a61458733c17a9be72ef9565b3dc536ccfbdea7902d0cbe46c028e5339a26dfc2cd48e51fad1eaad193c89979cbacdf020ad9dfe23bc2071e04736617eb86eaeb7ed2dd7edf76f782e4efab0676e15860cb7e1a4cd2ddbcd3a3be22d0675f132c47c0d876cb84038cc22c7b6b3977c00cda827a10314b28e65fdc668d5dbc59906a27f87a96bc82f18239cc475d39596e43f0bf35139d4f59c47f695148d41790432297ce95ca72cbf381b1fb32f1cd2ded4be9b4f97f4a49c7e64d8b18660942b8582160938ad802f7f862ab9611848840100f328ef589ec5319ec489408f6cd11fb29a3c118587e2c2978f610f991321f0efebb8cd7d569fb658a2a63111e590931d0f011b6e199c5e1b1810370055a90d47aa3c526464a685854505c982b0500e0bb869f1fe0f1a6a11be3ba3e9c6611affca232037fc498f8ca2ef108f8430d62a36387ba26ba9abd797d320d89f1463b36739495ae56e212893940bc8da1ad28c19638814ed78166af473f317100a064d2438bf7b20cba284c1c50734d59ee31323a79303712f53847a5a8a364c71d196aec352145499de8baedcd04f0a95fe877c26b1a5403fe629aef4b742cce443d50550727d89c460f662bfafd1388f0ebcebabf1c8b326f1f41ad5b7a5a6dceb4a4482c26de649a783faa13a6fbd35a7e9a3cc424c1518067767ef1d308d244fff7f736a8ae0888c6ce11cec8de2c7943ecdf6111efce04ba0c8baf63fb632a37e2927585747e17417224f06bc6dcf2696a9af7fe11cc71307519f65ade75f849286795b12f7bc3da165b9bbbdaabec599b88c7a63d40633922174a41187ffb98108c04507cff7b57f1bc345bac7c6c5f1837111c148ec972a156e9ff961dd036a60b89743d00c882d182f9bb621e4c4eeb24322693ed792bf3119995894e32dce13746644d23388a93632b1d94849fd07f642b91642338e72aed5dc4aae0fc2ebe1b12fb1db2c0455e5590dae151dbbafef420c746e7e22f0c2a91769f901d3b5cec0238996882fc1a955d8ed9751cd93ba5c45caa9baeff113ea4af8cb15fbdd8dd3eaa2349d86adab73dc15f3b8d3e4be36e40f0f457fffd929bbae6fa1cd0aef3b361693fcc2cda22f073b3b56ac79fef4838c0c3e5e8f0654d2ddc76520271a41b50dc30fb8c014636220320f904358a79e413188755bf05b58f54f2abd4f4cf7066fe0cc220833bd7df44c9c774e2e540ad97546ec3a8f94c3a3018a88a36886c600600fa2aac20ab3fb3c73ff49f37266710693745e0f2fef07fa5c43307985722b8f895e850ac183041c36512e118b9e409cb22326e20111a71365b20b6166ee42c61028aad000dc5ab2bbc581fb5c4fc8461f4c2302fff46aa296a64b850998f9d43fd5a1298a81fc4333e42c7bed1c2218490e84200aadc1f1fcfbcee943a56cde50500f718588f29077a82aa2c463fee940195adcc08200188d87983119e0b5e2d91daca26da92d8649e975355e9ed592b41c7b135fb0f7047dfdf3ab7abdc90216273b26f264dcc1dd9f758b0c3206db380daf31cbf1da84a356006432ac6e0102371a2f97c4acfb769edffd05b3402566a3983dfde024528c1dacaed4ea205eefe9ced8225d46439c064fe9d2c79f5abdec7047a254cf98c749b8c9d446cceb5b086ec1f7bdd089e73c6d85117bdccad194af7f96604cf8298e45d681740e630b4725224d0a561204934f7973c5f3eab8d0cd5dc330c7a96eda18bb9ce22a4612912b20aecfa72391284de5bf51a242ef3d2237c07a69a0c27512df7fd9900cde98962981c6dd096b1f0b8676d55b73e515067409a91fb9d34bbef2baa409873020c5a0a42bec24fe73b0b4c4754e9e63f50ad9dcad9c154a0048f4caa602fbb1aa8d9e54547ae0db7afd8889e36b7b92f59ce8779fc7a1a77ed4bf6426f407d3aff4393650ed275326faa833960b1cdfa8f2788b3ccea57fc22a5e96e9f5666f540462103fedc90c0e22e1fa5f9f0a95def52f2db4ce50677edda7a04ecd7b5173fa54c75a8940171da7af1e63a1f3208ea55d60514edbaf92706193eb774b2a44fc902a844a5dd18d1acca0de1db4b15b6fee5c9245b5c2deaaaff2a0e52674a13a9682765bf603e21c3cd85a2b9c1e2127cfd19a81766b6d89c131d194754bd67b18844b56c8edfe25e5582895264120afc87610d0de1806feb2765c9acbf604406643285aba55bc66eb68d552165d3363a4480df908fced4390132e803adeb5cb28fd2290a82519bcb665faa149cb1de3386a9c1b10eee4b28832bb0414c2e174cf010f18f7d6c8a8061f1265da14518c9795db70b9ce0b3e3df4f4484c67168a32201d64de9552edbef03950db7ae52e6037e8b223d748f395c69ef6890782166ef7f0301e69c2a1bd814b3796131f9938528c5d774623cec27cbff541b099ca72977c39a4b0d57bee81d320165f4a349173de05cdcaf65866ce78d0327287085d91881a2ce41bc08e29d5f874b5ae8aff50b90b9902a1098f7515bc96131bcc57ad8fe0a5b368251b17cafdee55a8d508c1c311e9a547f977aeb56c0050f5c1f9d6af6bed7b5fe4ba94f800af44ded6f1561a65b76d8f492fba6270c64a1617b43ecbf3c48baa7e61f53e74ba3f0ac929de4a466f8cff1e7788311d75eba1c18fd31b9b162985f3c365b26fda88839775748a411a0b25b80af8d94bf57b476101f292ae85487a88f496c7326a401675e969e76345f691a8d0992d27d3e75cfc9944a61fdb2f165f7d4ff5e9788de40fa943622ccb85c11bd3ff1df882ed56f67713915b10cc737a94ce631a4c933a8c06dc6c82eedb2bb0206f64bb7c4cbc63af5fbad2d60286034dc934042b6bbb5911d5167b17f64b6d5fe89614c2768ea1909c55fba807551fa81820efb72bfb1019e48a8a8e572402d2b3940be13b48239acfda88e91b99d92c86884bd45b61debb55640f8af91872371f2f8e6834b515c3f54ec97921fca0ac4f1f0478904ddb7b9288ec2a9f5e5bb6f572e40e141b025a82ab4977295949e2f23b673edcb2660ef3136e4420f4dd3ba6ba3e9fe7a1d6ac645a568ae18140590523e854c88a1c000b4469e138c2cee5194806876b767898a51f3e55ec2161c09b23399f0eb57f038f8b4cc8de49f107c146d88078cb05bad70c808bd29e653acc18abca002a83a8538360c67e9789de99be7fc900b9d340d8c35eb11bec990e19c76bb116658eca190acd6f1b61e9e40043985e2fe968dbe92183967804097d51077ae76a2cb493b5a372d75cf9a0427024886f08997e90e89072545e5f82c98aadce2aa60451de563b7d4579c8b89d4a1317880a8785d14211167023797c256e1f8f98e787b26ed7871743302ddc12e472cd6bd71a0739a8f995e948a0ad199758e47fdb269f03e692f032361d86582760f531e0d34a9662def36058357f0968c5666c4683eacfe2d7942780c272b00ca54b5d39edde105cc0c8f4c412395c99cd209000e8355f9df4893ac7b4fa2ca440eeb4abc7c93505aa90b1b4f9b081bcacdcb9d94ab0ba0cf238e79eb6c4a83e4db11482eccd2085d8133c368a78e44507567c15050b6fe0f1fbbbab7725f3553e4b4ee2ebead6d8c15d8e7e2263bdb4cf3982aea0cd560e0b118aa6a6be5a139f2151dff9053f96330bd887a4990e3cfb4febe6a51ce94371cea45a31f5f2aa999fc04330c96225ac2607c103c837cf56c9d8a7cccf5a8ec8d74265c1165de8731dbd6e8aaa59e5260a81fa49b82d470b6a4a1ef8b8c244795edf3a6cb0f5c20be3a893e623a36bf8e0e69e09eecf15f50a3a184b8245454870296332b127b06125d3187af91fb58c489a8df8d0951b1bb1e56cf9cecc54ec55bec19bfbea04328e2d8a18dae3b325d4c2338d154e5335d84f0c2109da15da875038cfa1dfdf1aa56399a84c62df046d517cc0c87b8489e79e5a24fce3a26cb1136f7e8ba4357d1a953d69386883b8197c3424c49d73b7ecf75d5c386ae55486acaa4b80f267680920660a86f472837c949b0fde0fa3565f74d46ac105c43a93026ad29e254b2bb7be752e3d90c0ace359fde56e358f2ddedd5b161d27accb6b6df67659907fa66d804e6fa136a47e441093c6ccb4477f6a40bd226b02a4d45686272a7b7a60e6e285443b0b4153ee0ba53ba556d9e00300ba29fdc164c3dc728352eb21f2293936f4a63253f432290e7a73adb90e6548b4b18ec4926fad08ef00306c25230c9a3d9a04b51dbfee5892d48a1c8143e8f501530d8f38ebff50ad460b2d2901636c4e427041c4df326bc78a298c3c3dc0a05c03f942dc5a482986c03dd6c4a7b46bf81925b573382c6ff11f426aa07a541f5cd5856d39263902d6250eb7a436e6477b731dc2b0104d2353f25aab46a2e6aed814c21118044598319e323926342d99c7686f8a52f45eb793b4855b0e2a5c24a7520ce813142c9e2bb49991a848d9f210ae96c140b3e8b36081d8f6e6f1162328155b26444cf64aeacf1f1e6653aeae0311a72c85e797c710779a68f0cfda6890960061612d03daf41db03a6b558aae6f1230255d4551cb4c6fa16e787ac98fea6bc22c618ef72fc877a3a05c650faf4bc8d2ede9698dee3a1988a673e719c215a8d733e09b9be91da7474dc54af335aafc18dee00078e2f1256c41d4f64958d44a071c618ea6c25c84512bad8205940f480e80ef60213cc8e305f99e0116337c71f83ef245c7f18a2dc6ca716212ac8ff558c7ceec511baead523534203ab545d1df305c0ebb7b3c06c8e9c27264940c3855d6cc15c0949212930bf34b165731ac14d8b161e290f2402b7b85d70ed2a03284f48443bcb555d43f8e5be13e6850338b08a74b90d777f17330b5c13432ea1a151ae9a07a98d86deac02056e76310553dcd808cf49265502d6407db06e9cef8472d775a70b26660d1275c49b8afd9273c3bda2125de7cb78530ebf71e9413daeb5dace3eeed5c4a83a03fdb145e0e2f810718624304f1f09077b092273437ddc0f04cb4081440bb22fcf740c42944ec7fad0d7019ee622f65fb35d7177521c484905ce5ea6d648980afd919c25ba27015008284d83676786195ecc31a640b04a10db969729b4b69fca2efc5c787760f1e8384187a02881d010909ab710b7c50a1c6dae5fa9fd4494216d6dd09ff3e4ccdfc48e8268b2ba067431d338d2db652c5b745fa3d8838fb7487f296a85246e130353b9cb42fe4b846fe1e0c24a4a75e10a1d9bf5fcb97aeb34d7650af0721827156a7b7af7c2474a1f0f28bf880954929ca95c222a240338c27e192cf35db651a7a160601c67c007b504e294aa78e35e53d08a62b212b7bac3a45ff8e233b3d1856424aea0ec4dfe789b05452ebae3543fbfda14b645853a5053da8b1dfd3a162e42560c4507041ab4982247094552b1f55f0cdeb989a7c2403e5d586aa1429315e0a51962da42a4958fe1ce2d62099a0a1c1d18788b37034ca373222aab6d00c93d6ff32f3eb86db6f8d1d62a1e4c5c00a4eac8b6d1c014cbf0dfaa331285831175e42fe11a7170f3f0a17aa53d44adb35d27fa647e8bccf966866d63cc6a1bc83da50a35a121f6c9836e38e839b5f1181e763c02bcaeb1d144db15356143a5a20e4cba4026b301110753f41de0eb210604e677f6be0af6ff17a06823b47bf2573a68c7183265d3f941468ae568c3510a589bee74138b6f9f31397b22520f9936c4e45102a90d08373433611beb087f1bd2a546ff43207c3bd2a446f11947906f72dabf79d5bbd2f76ae7a4c1c86ac2639c2769f627b4617d746b873d62fdcf9078d8e0314b64d06cd99db2bed0e842636a20d54f5a0a2512773f8bd590db33954daf2c2cbac45e35626e4885059e3d00378947d9c920e030906f9d061587f21d91e94967161748c16feb603f12be38f901f9f45d187d3122ac0e2c000d3b22d0bec49ac054c2957a84dfd85db2ac85fc4e62a5087532ce96107687e187a31ca0f77069836179c9d01a2a01aff3dacdb089001cf4ae31be3b777adf8360c7e31ad512b9aefcea3ace3ee2a6e5e6e51cee0237157b5f5852d7acdb10e8f8ae55073bd981048caccbf5a5971f96f43ab45f095ec419a27d18b9ecbbae40a26cff7ead086619d328b3d449ec0a0a81c05eda450aa8654530774028eed7447f1ddb0686bc231c6e68ad0824c18648fdf5503b3ce2cd4993ff98bd628e9593356052890266f4dec151764ba55b1e8e70082980ff5805f49a75059e9a6f7f947e21feef3779d31230ff21d82dc5c104c598d0c84975f40903e7be4718de5ddc9a8f759e2028d7ad02843bbd4c1bf87051d94343293e13e4bd09b6d094dea200cecadb45768ee6fdd58ba91f822de747bf6c3daf287c6f07e95a62770f1883131ad6c78250edae0f50850d5ae38244a1fed5a4e70f3d05432342c4f397ceb1eed5b3ca9d2fb38a1c0f86d545106607be8cc04a9ec31db9f3d345d7421bd3db4a8024bb8653997bc04a72c33d2c6458b78eb1a638420b4500827b68491aa3aeed254c71e04a95fa4fa05f7046bdf6bfa966748cfc0eeeb639849f6941bd798b9da8dc43656fd8a1e8d856dce099999fd873756988d01ef318beacbb73e1227bbdee52cadd908efcc006c7199398b808fc685ac1b30b4ac7000a2eb9365a53814059fd47abc4f0fcc42647a36b6cfcde46c54326a22512513d118b2150c56cfc02cc38e35a39e8ce25743efac53b316eb8e1584d6cacffd432ec66cd4349ecc5455b468d6f9665ebbd29440c51dafc9aea457feccfbe9e3e7a0cf81761634d6e1700971ae21051fb239d2b02a24cf9706477477da39d4576d02a923765b749f4dc29b958f4ed9f4e08025f975ab3c54dee611bcc0af7240bdee8cc3a020ee9634b93dcdac76ae8cd432efd99b5adc1b14350bcc63f17b754f85e25ecf76a928a3ea02e78e886b294e3c6930232d5285c2887b412f90b2016a37889e3f2f6f355b20169d45d5d4f53e03f92ea5bd4d20b49585cebcd53fcf6bd8245fadea164dac3e91040126485cb9f287d1ab47146f93e3296801c5a758858019da01efe0276aba910c8dc42122988fdfc47ae775ca7cdfaedac6611a19aaa1095a2ef6a4f7ceccc3cce6cca7988711f65523cc62f714330d2f2306e4b0b5bfc093ca1378499a820e54144b738b521c6228cd27cdbd044a861f7ab52dcbceaecf778b3d317b831272a5c921b223a58d313190eb9cbafc4743e48d5129a4c552465495824889a487ed1f9a2d2ea9a86d2c9980eb41a44e45c1c5b301d7afcbfab246784aef12aebf0aaa85e46535d88b4cf24edddd1db4e2c648761c48c41db6c70ca5165f6ff0aedd00938d419d86fb9466f28320e1bb6ec7911c702d7f86d75d2fcd5fc870201a5a99f56ae781eb077c9549325611d37f9c81a5971a6dd2efd4695fbdf4a8392619f5aa2ebb73917b8307bdddf964dedeb8b800002402fa4fec1ad0f0786040fd513905583bf31e14c95fbc2d45fe9008c90e05218e28901d2116231bce10fabac555819cb878c529019b7a66a672cba4a35e1184ac07235a0b2ca152dff6893c3a10e9a917f610c494103132bc2a31d1fbdb8dda0684b418d7b56307a7b55faf071d28c56d245e2dd08907e0ef0442fe4c62067d7587964af04a9d41ebd495520344b58a98aa2239089ceb9f7328bc2cf705616885c9c8dfb38b0088512c90a1079875c260a0d05ea2a5ad02a7b1f8c1805f0ae493bdb5c19414c80fb2143b25c1dd4532f898e385f5f2e6d846a21cb573d23cd539e26f38154a37a24da01274a1e8b80c2f65dc25f273a17d3bd972311ada62a81d39ab3903a6183e7406e61b63a51873b24e61ed19dba2c4467fa2a0c0f2a4d78fec6162d062ad70a55e634fb6bdd6fa52a9d08c31dbb514b624f9e1709ba86c72ebd1482e21b9747b00cd808e1353a991721730f35c00b467915e43e2c4c28704068dc289a1f7a9a890de18b8173ca07c177930c8749e849ea935462652d9e679321776ad96a06e164f7a5c53844a115a712c1b64dc93620a9878dc9d36f238b15e39641640c4bad83326014cf1b81293d916a579aa7684b604b87e77a4015505f8b54a232e5012ef9413addc1c7c14e62029eaa3db908a27dc11350a2921eb3296b8397945fe5748ad11c6aefa4c59b5bb6a89dc53b0e2daaf69296143152068bd5e235fd1ca07c8e9840df948ade94511d54d02fe238e98b1ad0e7e2b90cec9141d0b40606bc6ab3e41459b38e610229b1195a152297b86c8395f91299c91cd1c55a077167641a135b9dd9243b4077ce627556eef99c0fe647691ecc60f3ca79744803b9cb82f09da765c32d0d0a1ac7c93187c14366d045d3869c435403d66b5c2ec5b133358aac1cd1115cf7a36a17aa8360491a5a7905060412a0c3722181e09687aa7cca4bd2708944810502169b40b5a7d0754ae490c3195c18e9c88859b2901937d5869fb9a05e3849f3bc34e9fdd3e438964b9797d6128e2f2969ddeb49c1532566710244bc118c1da1d884c96bdfc852ad9b4108aa7faab240f1049e4b20ec4992079dfcc8f816f00dafcb3e5a4a75745fd646b32a7bc9fa9e21bbbe5c20b32d5566a15f2cc2c5302d1554d2af6b52c09ce22c37505610b2467ae20b6730271bdceb4d8ea25b61ec1d972402351aacdbb69f38cfaf92bba7817fb802e53827d234c3a7dc0154ee53d44b9a1a42dfd297f69fa39aefb2d571c5e9be94ae67e0092b0ab4fbcbf1df660e530963d61b8b2e17df26e3d37dd4ddedcf0bcc9030fe440bec920fc2dec32d40316673045897ed5157a08c1b3eef8ad4a24d13c16a3051697274628a9192d91585b3d7941b349a0b2042004e3ca436c34330991dc0f11a868a5cc17a8b7055d08400911711e5482f71320380a634668fc80bb57d3a465b109d4b81af88915db23c07052cb5d8924a644f4c887e085e76a097ceb56b6d72be142b26e5863c8fcc77630e9f56074d2aa698de272909a884fd4b42beeb67fd27a2255356d2305bc752dafffff2b32193d83bda7f7f284272b1162031fdad70e9c06bf9a7abb8dab44f41edbd1a84823a369526f2f64fe16e730f5a0bd05deef84c149a00f2986388efe73879bb4b39a92a3961fd7db7b94dc78c3025d6e033973733c03037432f81e025a904ce81c5892a1b8c1666700dc9ed3231790fca68d2ea58e2ecd3c2eb19134a3f12e39f74eab97856df43cdb8a85e016af22988f777355c8616ddcb5a3d8224f5c75a759dce1a96f56f4f16ef3ec0a8a48fed4b5cd79b34d9e7120337e16ca5ace0077aff14781c0da13888045f02dfd4b74d95235f0f3ef623cc6ba56be18a076605bce2d86bc9f13e2a3fdf5b4f37ab805d476b4b722b86bd003ec42d0c6fa1e53573687a0797eac429ada44ac66305273a9672b3fd47f5face77b5cb343dee6843573ffe71efad3b8a191a3be0fdde46bffe7aa22fdab188be319081861b2c874f2fecb6135ca2731946a07af9c85a0e8f31d2e0a8ff471ff43bcb7e66a89b6448af628fc985360d3a1d70713ab02644c27144776ab7da76c6f841660bb86fb4e00f2ba07891fabcd2e7da911eb59f81f558b111cd016c45abbcbed9a9dec7f71e826723fdc27025ae6f229f83f1ed34b0700dd09442b848b868dcbdb5469d6a9384e4bdde2a63f1d31be9c8a744d42e9b34dc52620287a95d53c8f4aa9e8c3a5322a743fffc7d7fa67ff8dfb673d17494602ccb052e5701467b14f745217feaccf6f415d0d541bf1466c68f9248186a7fb74f0a4d082c502672e6b423d4a597d34a5d0fd46d867e6176862203ff3ecb784fa859f7382231e214c0e0c57f91e94973d862bd2be53a1bc87650d1e9db68441ddbd765ef3846e4e512d38ccf7f701a7a117f67a1d3496a1f3dd7fb1104d02604ec9110afcd63af70d10eced3fdacdfe02357a8479c91f1e154048c2b3e1adde0158e1ce0c9700ddfc0e822a0a827fdadde6f8922b8dee1db4f94fabf07e23f0a03c5503d96126344eb5d3c75582b3df3bcaa848fabf07ba67bdfa6fb764ff7f44db9dcb3760f43734bb20b1c8e4418baad9edd91572260d81336d4b4cd4fbdb93218226a0b21116da95b14812322a9c40ec5ba10daf1152be3bf91e3d52fcf01b9257c73c065cfd0bb34117e693bb34e0116bd4a4d5f8ed0c5c0d4e100002075a1bd211755228398ede7f0b470d90d71dff89212a309fe0a1585f5c449fccd41cff49f9430242ef94ba38063d77ea95abb295428123fbc5961483af3e402c614a425aa4455ee1299fa7c9ea8282ba89e6edfa3a4ee22a7f8e1d4db33be956d00a18f2e39ccdcdd700faf6c3cd459f98e1d229e37ad10b2cf2ed3b42070e707612198fa0b8af6c4aa4673722848544d745e92fd324e31ac56e33f1733ba2ccab7a4182e37ec0d34b32cc9696bb863b8829d62a03f093df58bfe643b1b70420f4c4e9b35737027f825b985610788c269fccb363dbfe8eed1bece733d9e411683b657064273f848b54d0df4213365417547dc99b8d5505ac8f40d0936b9a391af4d5fd799d2760e790b1aa0f10fc77b087941d9871d1015de4fe22bbbeb115c6acaf1d93f6f7c8a983bfbe0840a196bbda9efff1f5af759613cc81cd8653ed1811dd96a606f54d7703ef3669e601b2f8fe86fff5785a45d1f53e0c4a668578e8d0b266264d2ef1b2b42d3bf39988c642b7bc1e4a4e4551e180d25aedec001730cc756e8d74a230740236b0e58f9e2f1ee73d1b02c16b38ff336357a4ef29fcc88edf84d589e784d17ddd64c7de8f348587d9a7104e4860611ac9e3f2fca28692cfefd2168c8ecff21999c4b5583cd0494acecd6d33c9d8f40bb3d8f40891d6a9f054b20851f9d9b864f4a2ba5d7b3340f4e29caad3dfc323c62ce5ad7e1b531b9a366d73d7089c7a65a7badc6112be2976876eb7087043e881db41121f65f155b6fc66805a95ee8dad894a4a6237630c59dae428560cdf623496509fdc642362c070acefd83133d1c2bb7f106e140312a4c9174bcd2e86e83d32c39a9041c778714b4075282438011c916eb0ac8f90d69efe796f080f9485672fe7780b512293c403073fccfe101fc2d4f3f0dba5b4f3a500b9bd55afe3ff2465a5682f9d98cb38889ee87d475ddde7675588fe68b8aefae6bf87661472d07910ab3f5a545641a3d02e9dac6091fd9ad9784434e308fdef1684bb444a7f1bc7f0ec9084ebdce298bf6adb6b1eab161afd0f33c60a1484071eea9a5024aef515ee2e640657a1774e5368d6a40c5b82356692f8c7e630b7ff93a86d7b58a607eadca9438e828be47a5b6c58c22791a9e56913a2ad42ac872e0cdcbd3b2395f1914e3b5d5917362f0f41fa7892573882d0e100e83ad7ce29125c6c29d409118457ce6af9227244ad3bd969b53a20e593423140613f18049c9f4a03d763cad97b39a100379355b15a3e3f2a8c0c4006d6261672f80b07808abe72b6776dda93b3d3e5e2b03a8ce63d5cd09c2403c75c6f1d660899ad3a803b664ba09f9b7b8d7d488d2fcdf7a8d00d48c31702dda0431349f6106499a873ea04cfb7db730b298c60e12cb8f1810812eb18db183bb35716eaa044bd1a872267e6ca211e7d078d59a598a27f8f3bdefbaf80f1bdb517abff5f462ee33a19ff66d139f5971148cc012c6ecfc0e9b1f4b828b4c022760fde0fdee5baafe9e5d1962fe7ae142c6818e00d54476cdde788ccfe75790edfa840c875444929a1ac1a5fa38bf01c59daea220af20dbedcea39336e79d8f036dbe1d4922af407c0243c09228fe76503b254e53b2270ab0ac60593ff0bde3645a0db0ae6ad4f12d5c546187e2b87ac8c6cb26137bdafe21186c45cb65e41f082f4e2a15f979ce87c8a1970e5e55529cc22c215ebf0de5ca1d7bbffda78dc2c6b6e3d6d7cc634f718f90a5cdbf51c512309748bfcd966fdb4cbb0bed5ad2d21a3b48593b018c40ae66c99d426faae4b0c60d89ea4a5e0c42ff5498adf54989e74cd48800166f86088c73bab28bcceac902cfd39fe62a7ac64162f587963f1d2908dc4d802c39bd9dcde4113b3d369c766f80bb3464b8977d135d4146417de3def9c1e12aac9edd96fd68433f456ecff0d17943a9c01cd147ed8bf82a771c0db2b8e6a39ae90143aff92531d45519493acd2874fd64b17f20efff4848fc433967b4037c735a34521e102174abef2b083cc0fb868121d870cc88c13973088378a100907f96270bda0f4aa9b09c64ea51dd7ce0d1719f214015eb27b53b443d5aa081db28703a8590fa565a53ba6558878fed2fcf5ed488082a9f1e66abb0c51625188559ac36fa582ec66520589f7ddb978023fdcb416f3ab5386cd9a97a47d7353edc44baedf9e3ba9b6ef4f0ad082ecece310b3a5c42c1f820449201bc191c58864373f0038097768ed75fd0a5e98bc2390ed24e11d7727253571540e4a2a41b8b823b8a866be334fd6e725e07f0b0a043761ae94c4b2420fe73b918d88767cdc4042ab573db0ca2c7d8dd64ed0c844828daccfb43757cd7e8d4c598a485e38b8f2536abd259bb08c09455fac90ce9d95da48e5c130c3e2d6d5d5c81177ff70719a5fafc59ba5dc61cf55a80080106880be529e83a932632f22e657b3845fbc29dd08090a27a275162b65686150f70cb87fd620baf1c5344e18f3acfb6a05f6e641e1adbc3f3db40d065207fa28b8868f7f409dbcf0180f264f20c6f4bd5a0f05f3a45b00250eaeb9fc301c28eda698625d2249eb3fa6a1b6c1ed0f16cae1c0329730ed0aa9a3ae2fec700c74bfcf03650b2c3e7d510504fd9094f4a80264a52e533886b564a8387227dbf040bc724841b6ba17a61fac6b0c11d67a95fa75f276490050e07ba10a064e944e0d3c247095b86f548e04a6706a13cf519e35761890e14c29cea32c8ac6a49824d7b3ba121796bc522760de6821a6a1b2dc3411adc5aac28dbdc00ceaeb92c87e25be29e97448f2f960ff88e2ffe59efcbf7bf2f8d8f2e991b97a3510bd52aa84c6befe652b33c69a08e6de83397a3b6223708ca0c87ffb045e66b114d1ed764126781496fc6a9f0423b13389dde14358963f9934e445006fcd24caa83dcce4a0050c144adac0f22f95b47338e902f68ac03a013de78bc16bfaea33ae06caeed6f01aa4df824c887c781b7bcb74e4eac218c71f262aceeffeaed31e94ca4a55e7001fe81b68039d15e69bf403ece1034999cf0196dcf2d010a628d892336f5e1a6498cc8d096858871323079bef2192ac7130393a56656cc61d00801ca0a3c976dd0b8c2ac591d8657bdb3ebf5d1f0f9f63d85c5b6f5c40ec31863174334f56bb7f555f30d3deb858bd8fb3048fef7cc6cb9dd7b2ef14d957bb8a840cb7720938aed871dc0ad947c800338b7c20c30306714b46b2fb847dff15fa231a4c79a04a0f382a133cc0ec34ea4cfb16dc2bdc33cac560eb540f46984737ecc5f56e0d38fb7fa8bec78d81395a5ec3e6cb01cc26fa709b132a5951261f2e2305dd934355ac500406511327eab6eadc8ebeebc7a50a8949386e5644776c8911ac183f3f1b6d3e751777bbdabcafd67f4a42ca7c4a54c24f84afed2df0468f6f2b45e019429f32cc1a38f2d3a17c6abe4635dfbcf9b5efdc070ff092624aee659409fec64cafd6486c1c1671ae8a1543cc1044999164d6e93454a170e496492dc294c63eacdacaf220302b81af2f2e8b300fcc7f13600c2cb4674dde14d5fa31d2f6ccd92d93211abb9b7ba6800b9fcaf0fb268671b19deb5f700840ff3e34388cf4117e017153427c636de42a0a948a85fe7ede79cdf9fa8fc1d043a3faf90b27d1be343ef4ee4616d521baa1f116c6ff458616d843218e4f9d0123820ebef81fae2760325b4af50aee25e9aeb9488857ab4ef6523b0f6394fb54f7e119e1eb7716eb5dbf9d5de4d3098c16e1d9b2e4e7db5c95a448aa2093014ada6f33e0033751df932624d924ae8a1fc20ce6f9ae43c16c9a2ba618c537bf6b7bf131d782c4e18cd31bce8eb1436c6ce63a163d9df2e83e4ab9a64a8608fdce77a732604519b2acea85999c8937cee661577ac12ac3722807c9c666205ed347452cffc51a69a8596172e1c024b325e8e5817fec3dd5f9f20f89e85e6b7b01c8f46d2fafebaee15a0ea607332b1a3b9d65cf749cb1ec1a157d65f0e9fdb02c9dd33725e8551260810b208c9529922cae6c63ad23b2e3f7f995208300487d22fff03ddd881464d046ee11afce25a43f093155d6fa7a5c9ddcb057a3ec88a1466fd1d921b4a477aebd38afa04e7d6c5d29390ea1b75f8b260c44acf2978cdc2972a4783742bdc4d726203bf1d1ed8d0a47df24a028b60a9d6bc29c569013ea1ac688a04d8e97a72cf4ae11b3fde1c4fcb0a44595bd46e64353613a3e64ec042ad560a406d3a34e159c6325ae72bc106481b04bac20f2f481aa0e2038ee2be466f5053d3bf972d0372baae1f24c5da836f2bd3b2ff33d60e6815a4a1765e13e28f7309647bcbfcd3e2eab19816b887b32309f66b2056d96ee40982604eab5c7980ab49b61e2a18a2c643e075a0ea29416a1347b75de61a52cf804e13fd4bf4de49c440dc080bed3c08166ec0d3353889b4b08aa9b22f61057e2f23e70f56034ecd6759aaa48c32a9f6370225fb066bf8dfc967134936dfd9aa29a5a295a60dbfa1b7f5fc88530616417cdb448c6a5c88e82611420f346e1750dc7e617d90a3f5a6d3a902016e75ce46a2c7061e8247cc3b8fcce38c5743ea27394ea6cc2f79394370dc6da5c4591d1a881fab59f09df9cf80d117cad9219db72f7a654b30c7f76589c756aa2683c8c187beaa598a551afdd3168ae88e743e32793140fd07d012c2c7b83fc5f7271679fa3f17e4d52942bd06f5e8e734926687b4fe47c7e30c4fa62c5a5c146b670d0b10a0fb050a47404117490cf78ea93188ae517f1df14e3839dff352b2880b9eac6de97f9b9dec2055de9f15ae7e36d8793fc141587b1be5fec9e3d988486442e62e8c0c1e172a2d4e68c81fa8da3d1857b17009b33de170303e156e2a30f36d1a30083f04b9c8f5a6172aa185d1a1c89e864aa67103078eccdf4b982cae5c56a0711347520ad3407b0d535f0512c8d23d6bfca6f5c3564b420882e259a60ebd761d5892f3b5558819e7de2438bf5a98b76b281fac1124ddb38093ca8af1cc07a80c0cea7d51a3a2d88a08b3c5f85af80d475ab69c2a3438958e91c8ef637d790789a1059f02d735189d7ce6598885d11ed3bca28d74f5c274c7eb7e0c4f529ded5bd7d4cf266b248a72b538c312fc64313386827fb72431e7ca0cd96110c9e32da5c3c16bfe7875f63ac6179a0849439c821b6e953a4ffba96c7883b75617771e18ff71d83aee08bc142584030c72dafe227c3cffd2b837b281153f4fc64c9419be246cf8444c3246891d0e60dcc3eaa22df7ffd00e5f93409510a3521308c8a9680a1ade5a734068b073ee24b5222c7770c3ad2a0b76bc78e2dcf420a0120f8aa9f6bc78344355dd0f4679f20afb150a0a21cc034df914bca2fc013b1b7c5b2e10cbc349a13439b69aa836d6d01e862d68a93adc1359bcfa57d3fc181d694aa50a9066ac107aa4dbc83be2aaec5b4e63d19f9527e1ad077b049d51055953efbbaf3e8436d8300891aa850320e0e8ab2350acd334c28b3197b04dceb781f106aa60129874055223c8bd7021cb735054920a826291c90241fb20ddaf497e392ab497286d3c3dc223904c07ce60ab19ea453aec75053395814b58a54bef7cfceefe8747c061527d11a2d6cc0ee51579618cda1aae0fbe3ed68f872352e5a32413d199a02c62b4af11171f4cf3338be5d374f109992e10a7d5489c59e1c30ce7af5df2165205db3f1b5f27519476ef2380fb9ae8686e887f832a629a650d4f997f95f0defb9bf101cc8a5e3daa366e3a99243f997773610d0b529f473ec219b128f35478a47b2cb194ac7f8cc39195d1f6e1e5cd7f3352e68a1c780a80df970c6dccfb6c76c1757a27d1b471a5cbc82bcc058ac08bd42e36670879f081f9fd0008ad1afbe6216e5d61d77c3c794ceaed94092e73b6626228167a55daf691c2e8d6d0f11385b8dbfb1de7746f0428aa4ae1ba361644b136785c05977961bda9a054b6cfe5559668d1b8db1a37b0395181b976d6a7f310b6dd25ce6b3cda9dbd4903f70728daa8e5bd917425ac659d5869abd7a7ac079541415355a5bfec61f70498e563a497ab94b8f6c6203a264cd6ee584d4d2ab9df04c9a14b4007c713171f0e40144c97b1c03416ac4295dec56bde615330291e7a09bd2f18f31e844f1ba5c314e5d9c1ac0a15aa28dfda501bd6fcef5ab9ebf5a1b2c0df958450c22bd94ba00e9dd9c3f421f9f216f3f566b611852b0a06af79196e19d4e8ca63eb4bae4429dfba020a5100659b836ed6a09690a26f0c304f744f33b4ae7a565443740f06b245a99b43683fe98ff5d0aba40762469ce55421c85fef2825fadaf060b94bc44d95be7ca631e9aa8a7c1c32ddf4db7c924b9e35e2705988d9abb86c31615a85080c1ac109cf419e1e158e7125d10c001a5ea02f8eb49fd6223891f7af5938f395f1a813b1fec8a464ba353fdf95a10cb3ede59b2b2216d5979948681453d563a6367f986dc54e16887d14709ec0701efb02cfee135e7de2f5a296d96d54ba2f98b2a357a6d73083c15d4286afb2658c1c098413ee05668629b646e3d25d5a13c854f532aad07036f6eb8d5b9549029314401480c62eca88d1a098d9a15c8926cee8931f32df4e762360b2804f8b43250f8404d0ad9e6f9f44da11be904e8488200adb96e01048a522f48084084c26fdbc4ec652e0ab1251f8c1d13a40e78e72cfeae8af6fd792f221a7c82fe64d7741aa48182b2b87d29fc817a82c4dc9573802d5571b1b77edf616368168386d2d5958da9c47e767ea94670007c0049bf9e43ea61849af521016eec55829ab32483a61c59609a544324eff4248746c4a3e069acdbe0744a0c9ebb3de059bc3bdea19075090b9bef37bd5278afcc12f42d406ea9fa202df5b880a60f7d3bf3875520b19e4d4cd4e2fd38c2a3f0d596b0ba57744952a7285a054fc2750348c9e9f69469235c7a7eb5865c4687aff9db2c11e9edcb6f61341609831b4001df5fa4b92d1ab95d78084bee5362bb2d20afc0a8ccbf8d6247aea63748cfd45086b595cba783d7f1193469b835e618bf73bf35fa16289332015122bc189563fb3c61ec75603cebd8aad2d7ee93e0456283ec9417c6f54dc9120c31b175294fed6d46675839c92cd2e09033a5797a53634a8ced2dc8c01752691c7d67b70964698ca9ff941e7938bb7fd54ab534be806bd200ee0dcc1fdd315dc9bfdbb0a0eea097fb2421e730c454e3223b035cc6445a9592c71c4c5f18176dd06e15b07bb8a3c8f8bf14c137efa19482921f1a4b0aee2ea5478614ed205db961a96b811ceb62ed413d20404cb1168d3c144f0960126365e7904c8e409b80bcd8be807a532e62e25bad13d87311e5cb620e2318d0be9315bd0cfb882c32214fe9164a619dac138e5337a33b986a51ff0c6a97425fae14c58a5f5670e7d3bdb8ebdb3e75a545d481345fc609027a9affb3ad03017123f19b71a84972d661e5860ebee9afb36a68fc0dd6b4f8f7be5f2c2fa6f768eb19e9a2375cd4421af1081208774a3271ea2483534fb2383524131c065c71cd8491a5be6efc9f46bdca35f0ef1d6458d578b4f0047b78b1867efa39534afdfdbbe6fbb63139dae5a2f35a9dfd1781c43970279cc0661165b9099f54dcffffc48cff429365b5270f25f8090b284b4cb6a7c6c8c2d98679017f0f7f43d92d1d2cd93edaced575eea30f797938cefdced89a2c43ff8e01b9d6473d6e882e62f10f5a1692e95834756b631ee92f6c695938de193a2efbb0961415286e9ca626da54ef8cb2065c916590dfac21bcb5a7c00d2d235a314cd961b5ad0f7e1f846ec40eef1fe843f67119ce68510e5ba117d944020bf57b627c1a727df594deae6f645d7a46a7b9a790fc06b2a0c0da58c004f058bbedc769faa3b0255ce4d4994094c88fa92b8014c9f0c854c7f4908f7e5b588d1a67a1dfa71ff49876f65c09ea9e559d4e94e28e69ee71c22600bd00cf1d53f99fc0689b10835de70decf411e120cffeef93df52b68835e057dfff204ca2e416aac635aec428501779b79cd7ebc4bc283a73a4569dc16d9e7fa9b63d289c61e8c203c147cc9c6b325c2ec4d80b06b44143e5f190ce06023d450872850314bdf67b8f8c6231822b808440eeedb2bdb21126f02fcc1ac703292ee0a859d35a46fc977ed0abd0643f58a321a34ad44495caf326e44d44eef20da2ddfb91257286382bc3b2a14926697ea4d27ae596a41bf227c685781e92d117bcdf595ae85e88de6879bfbd77fe191321d8b639ec67a037aa59ffead15cf4830f78bcbea14a1e6e209a4c89351d086234d1af6c6a380512456e2b2343f4ab372bf55ff7acd547dac5291c42838629b8e63c57344e3614d55f9b7b2f2659e9a077c252a9ff140f3f7bc0808c2057e660400f7a010fdd820268ec0098e27773b0425e99863c274fd7440d006efe0db97a53383deeb56e46f97a77b774ba24cfb6fe37f19e835dc0d0df725f5e86bbac0c728e28aa493be87c1171a935b92b316d29efed560ff2d696c4a9362016ae7a1935f5d925c0ad075dd5807a49aba05e6aa8b82b2af906726225a005d8b58da9504d8e9685860f751502f153c8937797c278f6b3b2836802bc93789bce8ec586b2fcae85e5831d9a16fa32dd440e52642f5174f582438c2a0e8a7f42ca7fbf13e1e3b92cf84fa7f2cfe7ebb1d27a996dbd9c1d29995126596c8f7485006ad974a8902947195bf9e494153fa2fd8c9ac2d6e5a23bcc544032d4efae26ab2653b310e90c855fa456384168dc92b2e239dab9998666021ff6dc55c1c3aeaf6b4e2aa4c6763df3aa7c20b157e302281566bc149526744f6c8d0a9cd0a182f49529d8a407e7e97a5ba4deb059ea275272817743e307b711d5a6e78fd5441f21a1c9c66b0a02492a46729e61755b386520b2d0d403c8807dd2e203370ae6a1f47bed9fabec2950b63876fc68d067d28cfaa7363cc09c18f62640e174de6c5b19a6b836eaa39ebedaa459c48fb78b54c9a560df55bd471ac5169b3760043a4121e9d8e55c8243ecacf428be75f9d908dde482747a1c9f40965c80e80c47ed140e2ae339d68bc727b642bc861c7137de764f0c4480f0b0c3f212f60fe05786ba57014b910b171284db7ae24532ab3652074c40ceb1294620193b157ae368922792ed49f66b407466e707166f19db48b612ffb8d6a9f8c27d064a856710cd8b371d90378967bc37d4c65a28fb123d7d52dac0f68f26b39dc4cbdb923469c74ff917047032dd0bbc2ff48a6d3843b07e1e663409dc4fb1d5ba7d31947520fcd19338fcc51c7d18c1ba80c3fcbddeb3e91424887424f8a8bf3bf05fe8f7ee37e148062e02bd9bceab46a960bfa6bafb148529b11b7a484bf8f4878e21609c0b72f66001a7c597fe199097ebcf61d5209ec6c883d5ca4d056506dda66e27b46ba994400ae5c9097c611a8690dcdc64cbda677cdf1537bf7343b1fe7539203dac50790def9b9244e0276a99eeaa96cd255013fdd556fd51ceabb3ca7e999fc1dd2d25fb97bd3056556d38d8e9f491cd82f78fe5a048884748d7a1688ecd907863c9e21f6451f2bb80d87cfa1d31742645691c6507caf53253129ec9ff169a7676cde253bdb3fd68241bd3542fb587d8e308ad08a50d33d2488b84adb591aac4c76347f94dd94a2320d284b89468b84b580c67186e9f3a107ad995c5f77fb1eafff3d070707d70e1f21f4d9cdb548c6a664a126b5cb1f9bbbae0c092ebc34c7467faf79b3cd7948416c452121b9757cc218b57fd3f3a8bee280aded5b107531bfefa67cd8aef2c5212ebff96c2787d9e66187d77580ab799e8160cc87b07407717ff47057454a32b0652cb6b34f6ab1e57d30e6856c1d00fb9b340df4ba53f856ebd7e4a7e81449c179274047e605f60a5ea5b988e146218c508f75608e8cd40d7fc0497017129e7439c43a4427071a956d8533b4fa1323549a187a64ecebfc78f0bc0119b4c421ada8f0c9db049d03f3ded764b6092f996ad4bbc6fc6a3931eac6ed3ca5dd415d505392c9dab673ac3949b7219de6c50e414176f654decc7cec2cdc820a48bb7c2c89ab3a3796651edf93c773bf4b39a699e4634e97467d1174bf74e7c4e444b3bb7c086c2f882171c52f3255a282c1fa85a1db1d3bb4b6d747a6224cb106eb3bf060934014c488d2ad14a01095924e4770e2ba1210805096b54c86a824fa869b93882d88a20f29821c4a3d0b19c38c534845c1467551b5447ac955cd2a87a59b3f2648cc0680bea69340c54d16e16342d9a74b86ca8c9694b69d962517e18c4daac509fa7a6411934ef4542fe81706fe601713877e0e74954b2d83fd55efa5d46d811e46f444dc2d329bbde819321d01adcd6f92f6d9b4e4996973a7c58d909ae0ee4f7af08cca8089bd2064b8f006138c643e1f0862fc2b47b7822856524337538b32690e401af8c3dd33661a7a5077d83bd50b5be15c3115de6f3f51601314466b90f7900430a6511d71deb3fe922d352ed655a1cbb910869c53b16c47206da45073460934c2e76a20efa82530dba548a84118b9b08539000e17db1a202ae0bcc9561f904d88f070f793e173dabb65cd899af5c0f4aaa556e9ad23ff5f9aee0bdefa01c0714529f0284eed8140ff150872d3a5a92b3957522c67760ec552d53f7fc58418fa2389ce4102595e102da23e811724e2a5da635c2bf081cfbea261a6620258dc02076c0d0c35b0119f77be5a73b26f72bc551fed6fd7a2a3acfeeaf459bdcdb5d1bf6cf0ad25d46dfba34e5429d3e7e3916b7311d54a9a6b644140a1d4d712397ba357e68ffa8abf2464d16768bb9d479005920cd5f1f62765dc594cdefc63d7dac2d72b9781d612da2463493bfcbccd34a61256646911ba58661c5d51cb81da2dc7308f7e068779a3cf5195637234de3d6844b2721d98cc287f9d013729a9fd15c3e0dc9a0811756a8bc6ccd414913d0c5423f0b4d59b12d97f62e34b93b4cd73cfe21741919f47934b333c27ffc2271f1eef232b48762a9d1482382ece48610f418cddd9400dcc532f123cc773bcdf34e93b74f7ee04398ef1617a87e336d160300ade9becb2909717ce74c4bd6e209cabe103dd473225c2518c95533a2c77fb0399687e3ac8e42b9031037a02df3e8e23be0573778e7a83b20368eb0d432e576af857528806c325b0e02a9127b20c6bf1a96c12271d8cff40f780e4f57e2eb008e936f08326824e1d68ff2b2b6d9731d029a1ac1a09c0ad30f228e40870944bb4b5e8d0bc298749a0a80b82d84896a3613110f68473c42db06ed7efe13bd958db99f78835c867f2729806e187e004bc1a78ba2396bbe639661798ed1ea3bc4abcc5e29a49152dbcea884060766eaa42fb3b03caa0b1d7c40006199a0158d6aa569b32faf26e0943f2ffd68d65a3861f74adc09007a9c617093367aae4357bf6e33803d1e624c4159b2ec4a1fa78c432e5380c6348306ee093a4e3f58ba6e44600af11cafe62ab0faa166add62bf50827712aa6009d404d16555f02150f6a234a8c82056ca959c33332fbe6403e10b073d963409994406b6dae3e2e810ac740fe1c91bb70c6aa407bceb9341551a4b30a6827b73c1aa4b8d037697ed437dd71a61c5e0db03f3858de3f656f90aa79928c0299b13c47308ad06bd48b659606d7f409fbee914b0092b6149d868efdf020633bf07ab346538c3f67bd762f610dac8487146c707fa5cbc14eb85e8fd6654fe9365a71ec00027b17788d9b8fbb6fab8a15fad87704838d4b28dcc628de07930f6564cce4e3f3d33c51db07747b2a5df1eeb1e4108d7ebe02add690e12351aa9e448edce83b8fdd50858602000650db369981d5c72ff47fc77fa87a5d0c28dcbd7cd9733db5e358fac3ab1fc5ecb1204d575d12bf832f4aaf4e2685367003b0450f051c6d7890eabb86102575e9bae422de9da6f4472184ab138aa18790994cff9d7d364394096b9b8d6431688952c5c19401d8c2709407b828ea630b3d6338a56c101a24f54920894aaff0cb08df2f9a94b82d88eea9c985937ad4e383c66dac1264a809d199347badfce26264ddaf0558027ab11ac94d3015ced833e54d4d43d0f780721795bc0df55a1a05dc9938d5d2e4537c18c0b5237ca82473ae70d108311f3e2bd21357971fb0a43fe9eb3bac90e74121107ae481779410a03c67af012c3a46bf8f480abee436eba3cb4ca1469929c5efca7ae3c4f3ca1f2c64b8d7106650a710bc43eab4b28aae3442300d66e796f2caa46ec6649ec0247f19b2f7ef92ab8ccd11f0c73d0dfd5662d0ca200fdb36e3b2c4c94e413497df0126ceebd146073882995b7038741d38634348e08b167dd40aa2f6847e95ab628560d669012fe13093f860e021cceeb4c3b81bc87eb6d61373c3d898dba28a4a4798623d794fd8cc417410645f30f2b309cdd42b447f728dba78223e39440065d406e32e265e651347efd16e4f14c9e7b212eaf6c460dd160307ddb1a5c42886885f0bc32b40221c000905381bbc27fd399942c773c5e47d828be9fa03b6932ce5a0f3c26a3af88fcd00732b11be8cf594c0b14030102b4d90beeeec38550e29645aa9c1ed4cd3daa4a1367d8fd9f06fa78da9f97cb089b83a08028738a6485a6ef10124d115ab0fb0e778b63c9a2b419e2ee9fe32faecaf2e50af9fd79e4ae324696faa8bd71229a6dff51debb8caf1c432271d215521dc19eba9de9c3eff48385ac03fc2d5b59fcc65f7f1ff0f856a3f85821cdde424499576de0d161af04a5c9bde966d7dbc618b7ea5457e9c41fabd2a1f2046e0c163546a28f69a3789db981ab67fd1088c8544efcbcc6e0258cc395203349397d63b3bd11e586fd87bbf90508c56623107131957a2d22d01421504221841ad3e74e763ca7d72d66a4348f312e926ba3b93ddc2838b7f697de5f60356d43192fae1113f8f6ae46649da384ca31b5446650a58c0e5483492895e4be05d9348f1c8f7ba9ac12049442acc3c41400707dcb9039cbc84e18071d7fd0e4d1ede03940247a5e8a8341b9a26b4311e6b746e2dffb65146c07d45998f34e6616b33278d8239c5a2cd2b7e37cd37841879a2b47099628f904fd663479c3c2c02d820b2e694e64f5bd238fbbca0d897345fc76d10e0536875ce28f5411a9299cd3bc55fd753157c98412da7198e20a032b727b98a87889dbbdd93f3ac437d10f799fd00dffc006995efd112c05f0499e98a48cd77a0beb89bcceb60e36f647cb7d2878f9976715e729be455343c230ccb6b026145a66f16d33f86e5ba6534584e83e8d469be250bdd8b81071512de0b1683ca87b22cdd6e91cc1bad4c48f56690d99a4dca4bf2f42b4d794e0c0d1d51d3a44f0ca7af8c256c9c1e1837a9d6d964208daaa9a0615ae1fe1107c01a9e6213343edd013667cbea73f55803fa0a70e082be7c7234dea4413dc0318a3ec0f7c16065e329a253197612045a47d283427efe5e314063f71e42ec68d767085727f5147b5741527c865dd1f4e35abf226c29da6458dff38baf0d16a119f78a120db025f4e455699e2235f3e4322cfc85ffd8bb2526ecc9c4629e97e4319a1f739e9b4a7b9e978f909803301098521003f8405699ba30fbf90382d21d072a147a7cd2a4de95d9f108f1c93576e4ce88f12d56bde3963cef50c611b3f52cbcd2b4e1b9fb822928d9a3a9b182ab5f8c960f820e65f78b67cb0a59e04d9765befb9fb5ceeed8022db962ca5151388e17c21a73284c523c74ab853091498e91c4793704f283dfdcf65ea6b9f1c1ff7450fd373da3b43a708c5f604451f54cc2db9a759d31478af3042dfc3357643f57d92acf08b8d6905094fec2195101a3c827f914aac279034ad950bd40a64b48e4474690c35598864418bcfbc51547fc55679f258f907c29efebb5a72d1524d854286a02b489c4f107451d57244269c692cc99944493de4d1d8a82ad4b1eeb507c83ab5087ee7ca3b0175783a8f8a0d97a6c41c73ada3ef76d373999c587e72600f3b8091b351610a7fb8af9b24d299f6770de1c46d6287107170d072df4acfa0b5e102b1fe0ff5d8442c44aa2814623758f69e49cb4cf98a2ea8a6e88f5cfa33fdf8852ced346be904e4443a89d645c053742a9cc96a4ebc93364a0d1c9bc49536974c8a46d76255eb8b4cff4028420cd85ccbdb3bddde8bb7f09912af7c12436131d2bd94a67c0c4e5795068a59e15d0aa1a1d89ff732dbab7f19d2a479a01190aa5e2ccd449472d9451a8bf5f9ad42c5ff5d205c5c68cf36c625924f1b7853bcd384b4301762a50568d3a283fadb30510d87dda0000bea0a81fb3e00c43e6e0e06f5f298ec24efc4ee975a32f28b0c3ea1928ca862820b3aa117191bdb60542088b4e24e978f00bf4d59e7b898858aaad74562fce0c814549b39d1a754e9ac95b49bb8be84e2436abb8058d115101d313b2e698919189a98049046945457564a7613d957e3a0f8b1f8a90d9f93cca781c89a3d21fd45c7f9af7fe704fa0a860dcb565643d5051751a1042719ce866413a078de591228a50ac8dddf557d66f102dd9a1fd808929d68a8f8bcc778bde6742b2529d17435b89160af664ac18ac59a3e101b0641e50d958d3848dd3578138ba9a3ab214556bc3ce229e4493a6818908924cc0f0663981189eeadf3141f4717f87e88d9080797379822fc3340bc3764d6882d7b333ad6147dcff92885a1425bc4d20367c11629f5909aa8a93a8ffdec8f9082d834c52e6dee5555f461db9e16d01052995e8f5e45830672d36d5f1285a3c1e195d855bfa994791841559b20040100a51dac0b4ef89da22158aa304e12e0fca0c65f050671cd2f9b7c4cc27446f243f082aa614875401d148d71c2487bb4f22a8be5a4fb82b5a7957c895a1dbfd517f9b04f9e06e94f1801fb1a0bab214000724dad8dece2658eadd39e01532a9909c50b304715886e48dd422e751e2840e5bbd004f80a8505fc7c8348e201f8b384592374d5d9d8ad2e1341a5de5f593304d4e098bc145b3b547fccd615547b0bb315e80dffe46b4ab78bd0a101542a2870ee72baa605e7e7c3c97ae55761d6668a7c9dd3571739c51881c56fd8fbf57938f216eb79ac72d87790d1aeac8db451ce92e18718546716a7c5201467386d628c5676823ae08589dfe5f2b696fd02f62cdf7f8f11ad41e700ae285cf7eee6f409f562b4a9049f4e924bd2642789ac0e20c6d6486dbb9e179281713ed69ccb74d8aa0e73cff56c2f7665d16243b4b39718e5ad142cc90175e55d14647ba6502fa8153c246e014ebd4f7602acc24e74b285825139e362089daa680497461da6e57fa4efba1c4fdad39b9798f47ddc3288e8f0e9af7ef6bd1603dfa6b0309537cbe82e02835159ed7f20d448a2b8cda3d9ae8371757c15ea2d7c797d5f57fa2ec401f7750037cfa2a59f59b224159bf915cd96060652566f1203813c30a02ee89d69cacc373db76ed04e38e74c784b15921451f6918fd2b8383691c19ecfebc31ec0612e8728098dee64288fef5ab1a188a64426c2735d7005465129f2eac59e259a2176aaa1c99e5b5e8dab53c0f41c7887dc127c99f5b96a7c0d5c42e0303ebebee7fac2f8af2992483e251b531b09104553fe45639854a7f3b389047f4a5f502e4bf6ef935ab8d19e5c0070e9afd2a7b31aa00c4be4723e34dfaa8715511b66f8fe348ba8b2b43c2b210cef5fc8e5d5a8bbbc94444021011f80b5b7a478166be987156acfc4e31b2fec4c4565580d3b2369d967882e86d856405358b496e7a3c4ac9f7db72007bdb69686ed263a16f5f0a9d222bc41007a54a02f619a8ae1426748381bf190a086993aa46ed0eb03d53fad2e3888bbd7eebb1d3019a5472ad3fe620b3176baaea501abe20144fad6a9066d37402e7450a33d5227fb9081d9e8d5bf0baee3c51235896c216500943767fc6c11aa54994adc44f03febe87042268a023e3e406634d6f789f2c36cbe0c0846500026c3ce2a340a0c4925433850b918de616d9bfbdd5980b4dd59f0d5fdac1b86fce8b36c4ae13d45a70fcccf138dd50c6f27baf173e730d79137fa266846e12c0a7bd171985553b92cd3b8c2ddf6b7b115742122bd86bf9ffb070e70ce4fd8c975120502d0b80d8183c636b2e3eaa9fe75f03b912098789eded5373ec2a61fe28c9ce262076ffada884542051f150d376b8b2fcb41e473d3f7c4412d018aacd65d4b5983aa2103950c81a0c5334f06ce1d3b64df1a1f59113b4bfb84ada415e7d534551e76dc31581140fe218a0a8444ab2cf52a8807a2727fbd433d89cad537cc8bb861c3661d2b24d0f61597d74fe6cbd54214f42598e334b0980f0de88f5b57555f39f5d8e0484ebab6e606f46b2d74141a54804982876dab83fbf7f835c8ea6365761139367319a668bd12c869a944f2c74a780e26856f4c3fc1acc5ac7a244b367e1ded0249a3e650632f91561f17175c97b7f25b12abef7828d9dd3d355e7d7d137efe9d10c06d77434706086dedaed248203d23b7182f175bf3c377d30218d599fcd4cd534484b69a406aeb921a431426676a56be8e625fc94f7640cbe5b09f69d801675610b4f5aa177a9cb6e6fdd2c8b3c1f329acfd2535d75021c983427b46e42bb9019bafd984c92810be01d76b2ee72d5f0fb2c528f1cdbf696395fde32bcc53a7ddb6c5743a2eb00bb884943049ae379f917e0a25e5011f6822e6b9caa8df3c60715c88df11cf27ae870ca3c8458226a4ae33a713a97cc9949fa7344032959483f6d2503d9b648ff66d5be3b9170ef252d2d9ef23c9996a84721eed511a1b8e6f9564b2c47635d45e0fa1a8e6b2cf8316e74d441216d2bde0aba39705087de0b34f4e6733d6239c6392354f82f478eec83acd6e31a89ab5eff5a69f70f8fc21066e6942938d49005bee1ffa197ed0288b0af08e0ba8f8535f3287a2ca0039fc8ee5341328021572c4cc03dc332e0162089ddff08c2ae61e8d78d629edcb8d5e34a745a2f51843919991aecd3a7a1e16393e69a0fdf60842a9f38f51c6464b0bc711dc115447f5ffe5e1fa106332afd82be39f05e5572bdfbd47d9f9ba9fbeb9f8703734f7f87e640f590f40e12a3370c96e0fc62c42531f46b44a46a038e17ffa309f32deb3818f7d676e899921440f3ef03b313f7053bb64f061c6603ea5262795c408cc24a073a124f48b6ac8ecec0f564f018f1a9b0e3d484f0f6e943bb70f1b7f8028a15666a8d627a6ae87e22549f551e6432e61763380f62f3beafb806a048719d11877e890b5635bad73ec420ddeb9784ecbdf7967b4b29534a012c0797073807df017d06472277f24fe60ec29148c539634746e2f65318a1908bad83ca8e9ef74cb39a7dd7755e0e72b16584951907687080fd37a86584f550f228b2fc230e2a41423da62cffc84f35cbfc6db6cfc9924a4a3f1f2ea594529e706be60ef030a703a9fdd034a12ffdcceb67608e6f608eefe478f8c3e5e204755a583217140690df3b2e4e16147b23e54f672e74bc333a7776b64213e6ed4207683fb4a7dab3260bc69cdf1a22e484db625d186004fab642200dfcdf99e3f6eddc1b87dcbb396ccf2d232c5ed47aff7cb4260fb9a30f1d5171d18bfcff8fb0d86eb20285fd8280b0637badf79945068e8cb095be1f07ec23a5f61cd7bf95fc07e71d2707e846a01fb9b8c14ddff00fdf829d77f0fd5b0ceb6820a7f1ccae978103c3c67ecdef4862c7a6d254e4ab04c903e5725defc323e6711930fec6c8ce6f7525c897ab04f96258b53be0d8f71f04c7f9e0dff406cc37380bc2707410ec302efa3fd8522e765da3827074d10875c29c70864b4638565738561b231c6d38fe8bb0261cc516e31de3b1c58ede919dcd0a59fbfacbcdc1450ecf77ff6e727ab2a02d0a3adec9da79ce9949da1a375da33bb26c6a1f08d973a1168e3fe60f897d71b848df831ada701128f4f97ef8ddc13d94012e52211df2d862e98f5c75a98ff91db69989828e775e5cb662acd11110ec7b23156664c407d6bdf74629741ad815fa462aecfb5164318c35fdc783be2e19f298b223477d57673421eacebfc1b186248ce0a2c6b78ae0e26c39d9bfa328cef7990f343f687e3627f7ccff401ee6c93112e04e028caf3b351873dc1a0f85b867fe24211cc1451e65acbdfc3b996b4ae477dc525f1ccad13c518fba82920a435555c6cc15b2e86952595d790554971c2a6c77f967174aa1e6171765fd66975aada09ea02a14a5958642e697f9245f5be8509915d41314cda09ee813d4170af57405d45317a82baed0f8a4ea72e5cf2affb1e9a72f1ee562cf2716ec84ea4202fe115db4621d45f0cbc7a188a0024ae262c065aefc8e934fce239fb847be1d63b9dfdea1604e75254f77e8d44d9287863a9c9779947fa162479d0ca4200769eca8e350515fbc8b73f12c2ff627dd05cd083958496772a5d1954bb26361c40c912fcb1dc4a9894a335d51c6bb0aca45399f26d48c9a6126e85018781927018bf29d8a08105cf99e0477f943b70ac14529e5f328f34d8b6ca008aac2f2077561f9b96d20b1fc568ca5afd55efa6cba189b7dfd2e6258c72eff7052114098c940ef1992c03d2dc33e6a1e5b2c33c9c9dde55061673f919f8f5e72913271911ee198b1fe337a4ffce767bc8901c53a1326ac5bf1262917a938650ab2b2a37767ec07ebce18f7d0b763ecf6f5475fd299eaaa8f108c6a5882e4a1effe5b07ada8db0fdb2e7fd1c2a01d72f84e0eb6b0da970dd8d1eb6527cd899d4be164e2228f32946697bfc5e45061e995df517289524a29a594524a29a594524a29a594524a29a5942eb948676cc6e8cf25fa9389fea4e2979fb8439a76b530c8975a455867f2272ed2e711b3a3eb529a43856d20bc43b91174fdbcd34a6d2467ccb9dd953ce62fd09f7814a7e256dcc9674c5ec9f76e6932691f93898b92792eb928e793c9a4bfd326eda7dcfc12a0974321f3c90ca7643f63f295855e54245f5e346791175d37ea19f3c1636273e98917cd58943b634c96fa67142a5666f7550d57be44d379d135fa2e63a55e1526bfb3b894f243107d2450907c97e4ab2ba594b75e29a5fca1dd45f2fd48bec7f875434a0a32363451a6491230f9bec42fa21c64485a828c981494300373d08b5c946ee46283ad199ba2fd94ecdd48e94a2dac99cfa5c984c7152b7f9c31cfc2ba2c2a6c873cb658e9dfe56f863ffaf9e7b452fa737c48fbf457977912520184c91701863054c0a41657576a6175e50ff9d72ba50fd818dbc99d39e6b68f1df7ecdb59b2f3b35a67a5d74321365c945777cab663877ceda8d782273beed8213fe87df8982b5f56be6803647977b8c8c58eff3ba257d967bec767b05cf99effd45c59915ae77792b03a9ee4efb00bf220ac7088102cb84c912b7fd64b90015422b8e822b8e8de735f243b72d49716223a9721a1eb686021a165edf7d6b67e041745084970d1bdcf03cf6381d35ecf6fbf9008b0f626cceb85e390eb80ede57f104afa1dc897abe1d014816a3eb27e70deec19041ef38ae02f7e222147e6c8db7909200382d860250f2476e42e21f4100a1a1272e364479da01d190269cee9308d6d350b8ab3964e5d4e39a564a7de949d7952328b3543d72e27cdb4ba719df7651f8b528f63b526e536595b56ce6a6b64cd0bb9bdf899dea4dbacd3f34e63795e85a2abfec35c6f5e6595566a93a594d241cfa53b0d33ca4eb3a9b9bbbb67ce349cd2ddbd5dfc61cfddddddddead069a0ebb8cdfacf5703019a6ddf04ae53162737abb76d4c67c755ffa15b05e4e59f9eff6cd3bf298b533e8bf3bdaf83f975d062ffe1cee39a4461f96d2e4b7589e25e0aec8ccb525a4821428b249907aeaeac90ba2ac1943036589bcb52574270b9c2c16703755c7532163586079502491f2976356cfbcc649665de19671d6b8643fcd57a12f257ab467905250879e1609f1ebee0f2d36018fc5da62f6e420d69d57be539185c87922ffa45dd30a1bdb841244f182125f04b649eae1a5c7f1e6deccdb1e07aeb76a0d1c8553984a2fa297801e378499f0fc68cc0cdd1f12af01af4d18a92af0f9ca75f4a4cd5edafe1d7059c03bc5eaf0feee9e9afe08fbed14fc10c7cd12f00348f8ef3d8a602f0fc843d809dce36d55827970fd765386b789cd6ca8279ccc80d6adf98ac2b5fd45cd0de4e7ad39bae5616666a6f40f986c671c6a25702577bbee304ae16cef75802495e8245ee5b512e76dd5ac2a3fc6763b12d287a077aff2e97b50c755bd6d063ff91e10a536331b64592c76d75e9b548be58c6b8296136265fd62d934fc911c161dd3bac0b8b5c00c68555f2b4052e1c51ece050e5e862c77a2ff0a2b0008091691285dbb578a59492cbead7d7b21ca1b00b8037e9153f2ac51758ba8a40b2a65a2bec586d78ee3fad9d77d74ed7e3d1a07119c6e58f9f0ec09bfedeeb883b3e368070f0df3072e372f72b8356948c9600fa55254f2b6af2f48f3574dc7e1915255b51f2b5c916d575abebfde2e611408f805fdf5aa247b18aeb21b8feac03c56d31c12fcb3cdd72e28ead1168cd1a6b86957bfae5735786e3d0ad694ac09394cc2cc3b18b2e5b13e69d21b3e4f767ee61024875ad6449090b4a5498729eb963bd5577ac575e11034177c79698538c98f4b08b1a1c49c9ace44316251ba4ec9681590906da021250c98852914cba925276275191f425894c9218cb711cd779494f1a0c9d2bb64d6e244bbccd1ab3c2ddccdd5c440a5f8320e78eeb8fc3f5a20f5053774f8a011c365c2ffa005149098214a2d9073676746e9e969edc71f60041e8032445d5dfbbd1d9b1aeb7faf1b944b80b7faa001a330c9a70e63a48019e52b2ba7c75b76d636e8f95a4eec85da694aa7a282111d5923233cdeb252475ab5b75aa960b77dfb83ab5e03aae8b459955bc1045966599f7754d7c5eadb57eacd86c79e9177a68d996bd8a1d39555d616b6c8dab3a55af869a17352fa45e70e185cd0b9b314c16278dcd8dcdcd95068605256e60dcc0a8545c4ec0880123060b50738a05272917968881130387852837389e8d8d8d0d8e6b8a0526f5dba1bb26193364ccc8a8925e409991332387050c5c7f4fca85a41c9d1c1d0f0b2f89149549122a1927d0a1a14323c9173131b024594a42e5fa7b750a1a15d0a820c911549214fe064c05352aa86185e4eafa55466616f15ce3e9e4c258244f51d77ff490f0a45c68d0a041e3c11835805e8d1a356a80210c2520b88133b4a08ede8ddf406a6e2a33db1402d89d2095494aba63ad97938ca44442d3dc5346b8189132f2a543d0dc2f9e686faf8972e9d2cb9d71592a0d94549aa72a679573032c95268a541aa57be3e2d470e8fadba54b8d03dd5d142b629252ca49af8a8ed2a0201c1b10d227a69c2830211931e9a4484d45dc712231ddd16e4f484cb44c438add715e3377042f23212115f59c53ab525e55cdb2ac6e5347b21ce9726f7ae336ee48d391285cc775636575c1dee49e2331d7e7451273f9288b5b37d671d4759df71d0161993a970ab6dfebf8c1a1a42d97a7929824e1708f284d254571dd5c96ea1263bafeb53d1867acbbfbc85645748e80695fc122385e386206967dd71b78d14bb412a12c5f9feb3f84ad8b45b2af6c4527978069c8d0cb82978f7f2b398deb525d6479cd9cea05f90b89218c205f4657dcaa8421448a5c56f084da054c0b33f0842b6287738495cf32c42163e54ff92ac179fc6b75b762092e7a2b07eb7a7fd17fcad0aa6055c21022fe5d6499b61ce6cb9f129c51830dbf02f507f50b51b911cfe3c2715e4eb6baacf5ec9ae208d43fbb863b29d8710748ca76ca5a0f447e6bf677dfb99781dfb39ae8b2b480e3ceed3e487abde33fa327bd76c9578f2e2ed9c38606aa3b3d3e10b221bac8a3a872402be21cc7d52d76ee7040908bde63a8081117b94cc8131cf2dbd59bb7bf6caaca5415219e9793fdfc796d4ee65fc44527628475497f0ed0d824210e0a6cc7e38a9dec3fc1915de439f93dfe1b7e1d67129bd1447659d675a1572b15f69ebf8decb76d2f145dec2b225b74b9dcc465a93356b7e3e6c1b2d4993077066161eb5f15ecc8fac23e7aef3fb08d7628e5b8dfe78145ba680bebe76b7ddb7c8ef72f9e6135c70b25d0412bea76df412beaf2d73cc3b8eef3bc30029da65584b56df4388076f4f61dc43ddd4aa1abcbe8cfab358f44ee287f485ea23b5ba98fd8bf5fecf7e9078a59e79ee8a64d58e4e6bb0c174652008bf1918115b1097344b0619d09800860319e28c613c1f871b8b038686c911b3047849b9b8751f344301b3047049b223a268015b1f99af00a8cf04a0e5f2218075b58ffb15a0ed2587f1c2dac7f90a4457044a171829da041163fec008bf13660910f06d8093653c0628457e47743b5861f5019d2b1c01e626ccdbf781b1befe1d9fccd0b6d1cf73028fdc93faca79575030a491ec9c3d149bdb004ee99fc14f4fddcc0d15e2ed4ba5656b3170a6184201f8021b4e66fdc7bb4fef41f49a9500840868accef2bfddad29ff207ce70fb0e1cf22da706f906e6d42bf4e2a7229a937da1104608f202ac01adbae873af090c9030409ad2715060471ce390a42fc12021ffe9320e45cec020e95f0794a7ac9f65f4737eb80c308c52863bc30d6acca8a2b625c9236593b477944db2a93ab9286b1617656de29e6d898699d4d11db78cea4a8f49f2c8bfa0093b662d9585f11f3147c8a31b25dbdddddddddbb66d930e1199f7e5554ec5dddddddddbb66d3e9c0aa9d12cb9373b552bb9b7bbb7d2cb28ad351c860c11f11fed67f5dedddddd9999ab36358d02692a233bb299aa2b9fcaefa67291004a7664221e65d55d6fabd632a596b5d6d395814fa29b8954dbb38bd2fd76a27bcc45a7f2e5aa386dc34512e0ccea59f78924ed75aa6d0be5928bbe6d8ec3025ff2c8ff400fecc0af0476c4b9f27166f5ac5cc2b0c9433f0e179b6b708fff57c68e356ab00ebe3868cfd9dd2fb58cb3f0f16f6e7bca3df25d5f1576b4b1611d9c6d3de9730f843e4774b78d9b1ba8d5adb5f48df94132a3d327036040700565bad27fceb0ca617291e37472b847ba182b3be644e9a8dcd3ce83ecbb07927dd73dd1e5c0b12ff7b4126d35483a6582829dbb70acc97e9491b95cd66a9ab6a44aad557a55a6699aa6cd1c322d631b77d4341f56406fd037e93255ad35cbb207e29f699aa680be41352a275993b1d255596c9319d2554a7097b9cb3d9701a8c94d6e0ac9d9cdc969dc73af69f2351bf30b2def089aacc9924cb22cf33ccff3fe725ce57e0be5120d1c9d2aa3742ee9e877cc3a40e61e2eec7e0a4bdecec58215a9949252d6e14fe5d28bf5d25fad97b28790f633e752ad59963dd1a594d259b56cb264d24a5dd35390a8532b92ff28d917eb9dd5659dd2d534cdf33c2fccf9de01ded3ffe8674397ab95038578770b1ba96f4870d6e9f914a2eb426b1b861b4fa2e3b12d66d49f718027d69d6694996195d3a40333cab8534e930b40e530d9904d693d33eb70c56047d7280665a3ce9d9f71b9d973f6f9c89ccbabf5f6e7f7833d9c67f610f21feffdf3112479e6f69372d9c091e86edf779fc8fa3a74bb6765f50af12e17ce28aac4142f6e555d2b584d52790dc71d50dab6f5fd7c6c6e55471dee99c57e4de6698f43cb3cd2d579c7d5efe69c40f86e616fe0a86544d7a5e81b7292602ed5eafaa88c416aed84e87be1b8e352ea72799ee7793f3dcf9b4b3674fcc5cce3acd032cf8ea077fd88a315762cd0c8c3ae787349d33421bedf03e1fb850770629fe8d6da6dcf7534fb9a7d90fcb8f0ced830962f5aa58b529bfdf612ecbab75db66d9bffd6bf312cfc6eb0e3bc9aa669afb134d66b9aa6bdad72a93ec771b2d56a3d10ff56d802c7edabf7fc01d9fefbbcfa1d3806b9f58324d7df2697ea56009b5dc9ef182083ed324218a70c8bdea02f68c67f64e7c03afaddef583de05d7fd1f76700e5f19fef22cf15fa3aea4b81edf7f9416f0002dfe8478249a6c96a6fd04fbf7324f65fcf79a03df740b4e742ee1b63bddc7cae6e35ccfa868c80fcf72e665643a09bbd8fbfd8b32cfbaea78b73cef937b37a966a9a363d2fccf1c0df7b20fe5ecd9e6ecf7520d1cd86fc6e616b09925a462712f327fda458f7bfa93693fddb0369a24be9a6116961067d43f647a59b8097e6d213a423465a5aaa94858e7e47896aad0f447e7da20b8295e592bee155d7670f1d3b51273570fc111c6790cb5f418d3f26ba0cca25a06bdd4e49c624990310c26a8c0d11744a5b6e7fa7b4e5c913294548d929628914a00f5431476e7f1573c4c8484b515196264d5a4a5c893634ef6c1d9830d1c294810cd41d962cc142030d588ca08082160db806eaf40a8060bafd1500c194254a6b85209ee823e98588db2fbd108104490b2d6459a15798d9d346a12543ecf6b7648861e930389a2c1cb1c2ed30c7832bc31c0fe64b76820613faf63b612702f061309c0b48b79f73016987a525182a0cd22b0a7ce6489116283e05657695a92a539e8311c354b9fd62982a5c04904600699830d0c36c8a8959c1cc8ca662794c124577f48c54b106e307cba18bffc8a80891214218106404113e100ada81c347dcd171492b5dd7aea3639b7b802755560cff07342ebf8f1fbd417df6b9bec371b80deb43936d9a596f40b90aa612bbcbdfc32f4b658375d0d7e4569ffe8ece8dc6a3635ec03dfd38fa6a0035473fcdc1ad99e26a2901807ed92b79818ed72cb5a2e8c64bf64a0ea0e8e78883185fc03d354b354c35537e645d35e09c6056beec8ba28fd8300dd0d8d1324c0334767c29bbe70feac13ab6b7fcd50c0472318355700a17d4837b3c6e0aeb2b38c57b0d0cba015dacd02785215e0824794490b0ee4ee9c222168071a1c73698c897d1d1c3b837f2b0ce67f328b8710fc88146461ed685470ffb422b7980bc8d7d3673cff4d7f41b0350a2c7052581e44b1f69bbfdc7bad8ffd6a7b53e2eb1b2c6922defa39e3c7ea0961ffd40d1f301f2a8b7fe3a185c96a027adbbcbdf45c99345e79560ade10420eba7c4e51e1badfe98b54b4fcadfc0f91ae8dd1bf91a68efcca6f4ac5963d57a2938ef04abf801985dabcf396765898199b9408ae27736f2c7560eab1d55d0d0c67635d073b1efcd37fbc652d006f7582af9ead951450eaaeb38de2c29ab862e0bac729cc8086bc35c92c7fa78ed6678d507bcfc39ac723c96403eafddb8fce6456ff6c9d2c2aecbcecece40744e9ecccc34d6d5f97652d001f3793233f7a454cea7ddf3031db38ecfeb983966dedcbf1f1c36f7f05729a5d4dc3366ca3cffd9ba3b333333f3e7751c6b2b4207ab3ff7e4a4ac4c87cc91326cb55a9956592c96f6718f7f5f46b9cef3ae0e3927f774e7f9a7835b1d8bd5753121256c30426a32c20a1170e1c14c9527aa805202f3568188344ba8d1378350b23599538ab9feb37a104a5c1997a79ce89021d5f024567974f1a243951968682243cde80597a76e48badce5a9274877dc1142ab944ecd8b82c6480450a69048c28b56330a060b0ad77579cac9096e1199e6dd789946fdc6e5a91b9aee8bcb534ea8eeb8739168331cd76688b07c4913738283152d6021e28e22a7408a22294d187182ca0936020d71477ee228295ca0d0c30c499820011b394a883b7218264d61a696f8624419d8c856523630c688144cc0d08215b0b18b82b84d9658614c0a5b3cd9021b7b09883b36d325cac2c59233607248120507d8d84dd90f776ca7242831a420aa4a932ab0b1a19eae4b59b2c50f5d98404b116c6c2a1feed8560b909a018a8b2baea07401fb81091896e0c18a121a8092f570c4164b43a890c689282dd4285261882a314ce1a103b08d0b1417a628576a2003238ab281277c0093022b27e001e64f44be886cb88a820b174e84404b0ef255c5383999b1f284881a60425da0442144121a2dba803927f181114489812aca082c30ff0e235f4049b122207cf801e988364375a837564a8602f2819aa28d86f0f2f2af2fa728ab513ab528ac7719cc0d4edcd1765a587a19cc0d4ddc2d6cbd0ce606259e9ace9e92428bebee6e5d5fc165303764b9dd653037d8704731aa4a36b90f06b8cae1c891ab0dd0f0c3e8050183e619d1c31459112d08e14de9dde84c4961e45a7d809a208dfc620031547e8012840e3854f1d5570f22461327624db2a821891f601cf58133389460082b4a34e121298803559e6ca00c1529537a92b618a2092c760841135c82140115822827496c8981480337384dd1813155aab2b411f94a92b042490d5a1cc9824b0cd90e165c69624907644842c5850e5fadcb891ea183cd1443286971060c1754b0083c0104084ae0240c1527186fe111b89cb2851949051f3a34a0f2db10f829e885a5723fef749264ade2bc84d01204d4919113d490e970c31114a0a0d0e0e4c494130fd82364a89062ca1267a8c0fc0434ccf00253129414a2c03227eef294932b734cc73b93ea4a306458074371f9a75ea0ba3cf58299cb5e2e4f2d15dd1bd7947786a3bcf3521a8e33a451c5cadb77ac17cc1324b81470dd21d7ed97de6508144091487849c20473d0270aacf3203e408226690585abce01490a66600e5ef004d64d4988c04c7684960e1c8591b2c44cc750858b2357628c0b54300777b4c03aceeb3acf93a05f912505abcf93201fd1431656300769ac00eb589e04db0a294d3198830ceb5a9e83345e383a7a0207d809990f12e42996986009d6d578122c22a18c999204ec046e0a27ae58f00576824d18980cade79020d7830b5a44c11cf4c902eb9648810347c01c244015cc822f30091669334478810276025b49c1aae7685aa5e485265817c393a0066509aa30b00e27068c1b9b1735734aef8f7166b04622cd4b145338c11c6421aec04ef09e29749d96f383fb8deba07b1e929ee781db96f3837bedb9d7420374618e166a0f026ba1f4c271481e492fb60da0691fe406a05df7dbd72e1c25d0bdf63f3a2d7cfad96fa004fa6ae150dfcc843ec1ef0cbd3a83637135ddddddddddddb9eeddbd76ee7e85e7fce3b43bf81173375d0ec721e931573ac2523f036b05a7a6f1379f660fb218c94049b65617a9473bfb7c48d73e1f52a7827d69a5b582b3a32ce69ece724721deacdbb6d18dd6a969d9cfcf470dbb4966d96b9f11c940e7e26296793e7852b07efd41060b76d4b1e112edcdef18b1139dae2e2ccd323aaf5c30d851883b6d7172afdb79a84c932b956aa546a94cb5864aa552e9ee299964940c7c32904c92c903b1189324aee4493ce6e4c465523ab53849e143296b5916ce39b32166cca9ee5c9a4c666c2e2d612796da4faf713067dd3e7d83df3f1f3283bec14fb5d7340dc4e1a2c6ad3d835d431f272e5ab26879a72c73cae6acbde9c082cf955938f6cddc8c8b9a977151732b17b5a7725113e3a2a669da8ef737f6c6baa86dcecccc559b42fcea4a1972968c06e9f4249f64971e2417e9247b904ff269365591a94ae254eeee554ee5524cea562eb6d5b7e364fb83247bc79883f00cc2554c154082023a085406dfd7fa4a33e80da8a685197c40b4e7bee30c34d70da8f3ec62657df0d939028d3832601faedac26e38b470c833a835cca06fcc3977e86f2b5f6285635fd67fdfdbaf357bff9aa7f4e77bd99c5c93d179adf50204595f960e1cdbaac9f40daebaced8adadb849436a3d1c87b2d1c3265341be5a7f06929956cff20c878e7750f0aaf577f992ae5b0c9216abb8fea2922c578994219ebc88b9a33761fce445eafa5b1d2939ee79a1b13aae0ee7063a5a85197c5ab26b7fe9df43f5c2f8d10d8284c137fa875c17877bbe0e60b0e8528637dcd3ef7ce97541d15d65c937a1f3ef1ce4fe518150561325252526909840424242424a4a4a4a4a8aa2a4a4a4a4a4a4a4c483339194949494949494c40312121212121252525252525252929292929292921252c7ef543266a69966c040b20c03c972f370f4c5b75839927214c39223479aa6699f94bdc216ccbd42d50a57ac40c52dd13115d75f3481435d67f001f6cbdc86f9d40ab1eba28b5446a88c984181a9080d7b73ce2961b2e9ce7792af8d751ce1976c923c532ab953069f81a8948d57453dcad0900800000000e314000018100c888462b160284c4469920f14000e7494426254341609831c88511403310c02510a216288318610a3189a1922006247fe3a9ef7dfb3cd34e3272c0140ee67ffedebec043c419b3461179b957b910ab61f02fb510a34b5f39c4a0f49620fe86dc193397993764600a6058ef7fd00782a5f9c381497302b065f83770d03ff7a180b708b13801cdc009690f4518536c149a72578b00698e05238dc8435c0a8ee0f30c5ec8a03c6ae6503352fdb2fb9fa4c0cf3951d663c7ec24fad7c0948c85fd51c3a78d9b4b776082f92cc2597262e0ccbfc1d2813097086e23f295bb778763a49d93e88d6085cd7f8345d389841762ba79af4e7640aef312bb922b2825e7347fb93e47d283c5302b982b2e5484ebe51507e168af5101e802ac43986f9dae0e406c62f00290a4aa32e97514c60106e7b185a5d1f791c772bfec0f09d0df744b445b4a65aba2888cd15aec166d377e27d1e4c0e6400350f04f5f89f7eec9923c3b32a157fa68342481d82d10fb4a9e169de846bea5157059ee1e95ff322787bfe00bdc917d2e7bc7ab759ed5ff4ec110e97e81f1b1c2b187c7e17667b28027d5130f08d1c34d5647f5caa1fc67d93c459facd6d0343ef6d363db350308552a4187ed62e01e8dab14a7b343d7590debccddd1349473d4e4040df641a5bc94bb16915f4f82b4a1fbdecdca490a5f7248d7e5d7aa13c19ddace000549df7543cc78c478fa567c38f93447158f23540b6555f5e9e255dd3d789849ee82ba6af8b22a2654927dad2c506d62b2d11a62c37dce84760838ca7a422bb64ab484d95a1f541d6ef44efec9aef81a7f7d0f8b22d52b01999cdb61696df63d4a0ffb90c45140e82ef32eb2a73bc047c2cacec90962ecf8c5269be805e005ebcbb66752333fbd0bd8749b7b178210d72b7bb5b0c3d9e0d3406310f7044e2cdf5294223d87aa964401e55ed427705aa308f168dea7ff5ef0db48c6827e924d7cb267805f5a0717c2ece80c0fc3e0e81c71d6867646dbaf4bded4fe0a35702d7a74b2fe0334cb0c1c5d018f37c36716af3ff286ed647851bb533d3fb029c7e213e8ff657753f307d68e8c9a277e00e7603f3a2d734a8d56b5430b9bfdf4ae87f2fa6ebe500478387d70e25953dc1a3dc3c4b2b1aad3e9a2337423dfe8e09a4b6de964f74db3af419e84afdc20cf3cb3aaf65c70faa9475f1fe3ab1b030c282b55b98d1dc1b387dbf48eff7c66c5121c3ec1ec05f41e947b81862b6a49b1e6f0f6a2eaf4688de85d17fe17843c5e2fa40833e8bfe4df3329c3f0f8624c21c3638c8f96a3ed1315ae2fc216b314bbcd7123fcf6c45035bad59980614745d1e303c225790d8a7c777e2d0a74ce575334ded28123d7ae8cbe8260653ed0bb3608fd1d880d7077f7ae61aad34916aae10195fb6371ab8e703de275d5b093a3411294c47a97e9b464bb49fce55323861a1f6056a7776df7ab6150f55c35f6e6e232f2c319d10ddf8242ac1052379a5889281502e14e3d4eb759cb42297fdc063b954e5ff14ea3bf7e848a0e59a4966c86e7a76ee2bfb4de751aea88dad0e3a04b1c4632c0389f03b204cd7dcdd8f486477bedefde966f1f85a4fadfb6af4effd73888a1fb0c7d6cc79d34b71153126579c3e849ba80e118295f35860113ba4437f0a6e082cebe0883f656e8d8df5053aa5ec20ca57e4d1b1b203650501a474dd09f5141a80f6763deb79b357bf9c76a5c3666d02e15bb4e95056f0b1b7331d7aeee4c6295bc4ac1c196848e6bec3597ebe9bbd62bd366b7b47fcde5b9e15352cd5e37b2369e602783158752895944dc0172f807fff3334971ef6f52e99c56c87543c668fd794adafd27d4fcbf8b88c41142d0f0dfa9c19ef2db2580ec5b207024cfb803dba1457b8b326ab0ea5ca83480b403436413c425fa7b4c5661c62599333a4c72f91e308e4b690cc19a92b4adb0e8f1cb8d8512268ae95fa1ab25ff05515d03ff9523c419645cbd8c3f8b70ebf33a35caf3220b19e441c5247c71bc70a090707af3a17ebe1364e51a77314aefd21e6ff38e51befba80fdf8ffa5b6f2b11b20f0007d318f749cba52f01167088737f020049371a18502f7bc170e39dcaf37e49e7b24a54a0b2e9839e4b6b4e2c423db0127095b146a814a405beada50c4867adab59cba76428861f0cde2a2bb88d3fb6105fe359b291db81debc3fb699af9ad09dfe8b4a330813d8879102aa718840240cee520320732a6809c02612dcd782d17d21b37ca64d7cbfc562694a36365e8b57fbdecfabf6b459c7fc5c3d6ed5509c929f963f577e1fee132b417471a92db83869d1b63e2a1554579e121669dc2aaa39e7ca1ecd6737cd11d87a01ef8258035b88c3b73952697af7620316cec546588f3a0564ed37c3207ce77eb2c92e6458e442984922bc6a8e453f51312e0c36a6132384368b0931f4392d9122422fa15c1bdf7fa0f281c67986e1cbada335e65bb3ce4e3c6c0d86719403c33dbb1ab5194a256720b3c7533bd6f70611fe5bcf3338e44430e9181314aa10a0785ec05b96d712432de4423055b2bd55c97e81252b31c3cf4a986d67285708114b2b44bd32889828d2a396d6c12310abf6749a1a5bc2d828beb7bb5d278ab4cb5693e2908ac5714cbca5040c8a413caeb1816c830ff02ec20863ed321f258bd4a443497562336078b8187b0b6bd17b2f51e5312e71c39a7df977a802d3265edb709581355b0a863f23748f54f897ef75219fa2aa53613565ed805f69a61a494996dd07d9bac4ac4086044057c3491b901221a8ae401b22546a03b0010319573bd7c31e89787d0d0fdcbbfc3a9502c9903736db98f9e875a4b8c78228e38bb11589fb2fd4f696da510131d7a1691fc6cbbb3f888d9d8f427982186b2e1da2fabf0196552ec3bf9f858246e863f4c18ba337b3d9c79f6b5012110b1af05facbfdb4398b26e6a2e587e23c360695f6a93119ecaf36952ae5dcfce8545fb457e513f242419b8c4321afa846ac12cdafe5855244bed44f1dc6852a396374224a861e2d02f2cee7db36628b6574b65a31b86ca74902c6c83b9118c93ff685c2026fbec8c48f312a1c15206e82229e2ef72b392521527deeb579be79bf92906b63fa9e2f05563caaccf11c0db6813cbb3cdb9aea9933fc8c6098f2ee18d215d18e883ab41c4d760afdd0d8278e9b449544d6ab40e9ecccfdc83e5c49772d95fff13ab8aa50ee4a982917d05eea9f75e52d6221725eaa0a8d09d4f918dc284c960eb4344132ac2450a19ae40dc2bfd7a5ffabcaa7ba1b4ac86670ea1545133aa1824f05ee15767a32aa322472aa40b068c77e8873f94dd4dcccb7d00585eaa88453cbbd5a470af8ee88747f1e28a8f1e96528248a48ddc8a983df3ec9ec38d29c84027a024d8648cd74ed69d6f6ef6df37690487ce83dda37e95ff02de43663d2c2421c66a78d108f7d2fa4aac57e3758d1d16d31df44ec2df796bfb801420d8e560192187963faf0648d1093b8d26e94ed4e7b4ac15abf60c68a931388bc3bf28226eaa98d8f7ddfa7f9df4484c11dadb62aae4b9f7d91e245680d204aeb1d0294a5b674458d6ff450829e92bbf6e2dd94dbb5662b42275605349a23abd8275a1ad46174f00b90a8a357c598354f5b0457ba9aa17e6c7851e110b5ca8176298a249bcf9a9f8ebadf16698da47fc5c83ed8eaae6655890d2f7ac015b4efc98a2e60a64b542fa2d4bccb2e44b276b468df155c545be446bee3742ed31a5bf286e01f5990e7ed967d658f94f273700ae0c61c219f7734349031d3f5424b24f8419ad456fe8d1068f02a8a207fe7aa9b3041794808707d8631c4e72ed6bef6822dd3027bca872c7aabf4786702f4ec8a59260a9fdef4104fcd29c4a1c0a4634ff00b9053213bf702c272a2092ac7171cd9f92fc73958e01039303797c7303fab0a5ad2db7bdc58bb63545adec207e159739769916a1a5abedb55c7a919a8bd8b94ac8e398367a45cf34752e72650e60bef35bae4e04f3d5eda1d2f3212bfea2e7fdd602b5a0b4fae772ccb0544823e17f39b5f6fcac6240e6544795dffcbf5e5758fc9d507dfbb3e7a5c5f6271ae75436df8a1d977502e5544be9feb22424d4526ea91c3c8bffc9fcbf66318fad1b241fdd1c15156242b7b17fdfa4217eae9dd965c8f58bf085bfc6f06f7f36395c48f580987f718f11b05e6d58a11af705ce9c8862a1d67e45c9d062bf6fb96a07109279c124e15d61d131fb8495a49607ec8f0cfac8872664d7a074963004823649f9f62e4060f9b3b42c03cc5c9f82fae61066147290f82321736d7f41eded7e2a571c86801d20f12b11bf1bc17d2daed8186890f4513fff5d8f97a03539b93b5be48d3020c605299e1ebd7dba8c37bacabeb2d1fefb724207f88e9be20e831b62a841569daa31e9ccab88d4779b28709fa0a91fddb22fbc9149571f80b48d4523f044e3e561437f75a19cadfa30c0e67b4075df505b1d784bd7d7fa739d9651de2d3a28d627090a38dbb0b1fbf565d696f516ec439684667be25902845ff91fa8f50d75c48423b2896ff07d3e4ff00a6cd13d0b78bda3a42ffd833de713c87f248f65a5df5a42055e9c3121c670ea07d7656002233e0464c97722b4ebb7c8740bdd85be10e283ff84368488c5975a5f97023371cb7d29d2b646a2f17676c4c47d936da17aeecf994f6798627ae6214a133659f38c83aa6033bf0eddba766eeaa59e2ac29d24c056ad39cd107265dbc554ad271cf50b84a0288dc9af46c6149ab96c9552a1c8496294d21b3e76749931f3145773451a847cbc66d643816611a14f4604e2e769a9cf27bcc03c01e0b3b4e11cf9f96e2a82349bd33f11d847a2ee97c664f08119b0e44e9fc5306e03a974c6e021e08c4470a6b3268c1a80a9663a05c3969309a92301a14c08766a1520b0ce04950cb5d692775b434d94bed606e760041f44656109a66a2708045ed342ba7fb958e93e10d5ab00358497497aca4b814f489ca053b88d09713a31190de08b55bd96b6de6b7e7ff61886f9f484511ed9a38d5515ec5a1abe8b76cea91dacd15493a9badb468ead1b06d264b6a0e644208c3801b179ea01d1e3946df96a87ca02382c0870afc4e52f483c48350b87065026a88a18fd3a5d86aa15ff4ab8cb17c5c7e49bbb05e1f24c98acc55527ae5d98893676011fae51f4f42aadeea8c977cd76ac45b163a9c4689a4dad9a43e66130ced081d99bfde7325626f2fd63318abd4a8271db33758e1672ceb7d30e1f9c44bd694203423f40008881d7f1e2ab1557ae57a189bd29b0e55b7160fa0c2b8db3f5965e9b9d0170f45b3c7704a4dd92b2201c004f796e2c678d244a6ebf23b98f5a7d861fc586f0752b43f6e48a5e14072c3d99805934cbfdd8c5a67a0fd053c111e957d0d512fbf63a79c0762cec2aedd8ce3c574675ff0a84766d52e13a422202e9a66014c9d319e617240e5a387ff59870940710304e96ea66fac77d56727961be1f5efd6eba271bd08586d17415e6e7505fcca175a37fbfd3c8140599c300051c8147670a7843efa01c84728ff6f18f470c3e79d5ec6df04fa2c89fe7086fea2fa8d685f4ea0d962d2464b1b16c2ca1ca4f5d4af1408abb7a875c25564b2b7df544fe27613a6ac80d67f3b8463ef1ba4b04580ba57a9c6902c6b0e070e4b64b366b708b7bae096f8a6801b7c2796f6571a8204e48c938144e047dd5cecb4c749258c48c5142d506198c581d0f0113240e8819d0d08290ad5863f69d83f48777410bfacfe528a1cf8b9c91121d241f3e344e117ca495b240c6c5772e6fec2281c4534a527cb18ea1a2afa82525459cf3b300580b4a3ee643e340b22fb80f5e38df3dec3e53b5334570709ef3c4ad380998f2bd45ef2ea475f13b9e07f2c360de670a5b1d572e51bfee094405a4d01bad1a98cbf77c46b23ef6c09baef87577a8d3b7aa5c03aa239a30a56fe832e9f99bd9b25e8be1f5fe91aecf04a036b688c257fb04a6ffc83530256d7abd3700e57f20d7b883d81c70186f3897e7865d7b843781324ac77c6c2a57d4cc20f0b2c5047ee6d1968859818da9f59eeb1724ad8497abb0bed601c9c9d95596f1dbcdad090d85f213d75a2af6597c3963aedadda69917c647aa3d8df97a0be23cbd3ff06d66be835258bdeff48ddec7be3663bb9ccfbbadc3492d96809157c7b40efee354c94269ec2390c976633f3baf92f046d5a447fe24c16c07aa45043d54da81af2d7126447698ba01b6b7d2dd5549226d2cbc23b8a8989b65a680c11dd220fa46f635504a5094584e8df2eb6ad13bdd106b7bc818152cb9cfa1bc727ef2568b78b2787a527df3f95ec6b1f5d7dd9f723c91794a8ae280ed1ac6a17e0f989dd3b5588a533d182f806e8313b0609c10b2b0ed52d68876c50c52f0669c3f146da34f4b2ae54c5b45c77995c0aa3f5548c6ec264ef391e747b88f3fe6c2fa8cc4e3005c0bf99a7ff293225f67234d401d6119a258f627e569d2eaf2b1a023455c99f722b95e84d8c47d9f2ac16a4882e117b74d72f3b49aa79811c02202ee18e129ed43778e16db210cfccb3e33209c377cc1784a4c2fdebd909e71f447040a693eedeeaeec9ee0f83bdf1c585e6ba78e300f16240c2f2ee1ca2606a968adaf6a4c6c6b5a45f0e4fb5a18b4c436d41801fc9d4f2ee1a76bc945c63e2c944ecd6dd9d01ac0b5f700cba4a38622e456bd87f491ca5e5e3eb9f545056b048e99607c876b5f8af240a108d577676e968f1541545ac79cbc3dd3a3c0bb5e7a2bf93c1d3eb3d99951f8e86fdbf02df9a66cd418cb1c8df33d074fe1e7de2f174739b3ad2ce7fffece6b490ecc4bcb8f89c7f3dd46a3aa4ad8c7a29a99164c43e90ad5bf3649bf19fe68778db6b459083af98615893f2d25aaeef7870689d222c857436403787aae9b4a00d445910f55b6e9210bb807d0dcc941442d832f5e07d0c679bbf55b7318ff19b49a82dfbdb04b6263930e2f68370252c81bfd8abe9465735822536546e41d864299f7256ce0eec7a8e4ce04349bc69e1a98d1f3d900a7dfbdab37f060bade6800cc8a9f8a65fe1421d03ae3cae38053465a8ef0dcff086f231e73ec830a1c8b3429c9b4e8aa957b2a48408797a145e0dc21789fdac2ae98519ac3b3c4bafc74cd37978e5e7c410ca86ce44e0890b340e68cb032ba45a58d41d9e6671fc5c4613298c3e7f642ca45a9e9e3d694a7402b58e1d805c848a9b9d782268a84494cb1f1defd01cf218ba4b217f6b96933566ad2ea610399ef20c0db303de69e21a4bd9867c917901d16ab4825b4efd9a60d820ee0e93c9f5959c9122e20e37e4a1bd9959b878c908a472b1219ad04f9e6faf4996e2ba481e060a680c4c3277831d1ffc677714ffffa0763910f870a9884da9b100bef9ab479c9cafdaade46e8a58070869cdac083d1b8ce116b503b6dd3f43dcbb2b10ecd430acd33fc56e86a113640f01e4d00b7e408d58f5b007648e0fb48c7a9601d0da855485704bc95658de0da0a10ad207094aadb04fc339a8a676d664d5ff6dc718877d7c351dcd9faabfdb5e61bbf1de2215ac7453d0777c5578f08aacb053843fbbe48e6648cfc16242c8524c77cba41d2e573a6d0cec6debdaf1c391ccec21a28c1e946945d415de8a8cdc50bcbfbd59879352825896df13b7ab2819b2b6a5acffd729b091e8c587ecdf9d70d8015ef71b53b340994a00b8cc5a8df80daba318ae1167365bf7afbde92bc668052cb805c75d5edc62b89ee15f03d9bdc5cb73169b31d72485ded727f9662287f500fbe449296881b1139b58faec0d1c3fcc766ac02e69b22355fdda5ec9e7e8c0fb5069674e6b5cc6b4c423018ed80043eb4a97e3d9e80bcd9064cf1605e1609c3867a8d189e492ebe9eba4530fd8a85ddf3fb5f2cf77b8cf7f26f361504fa131905a906b303b47cc351cc61912a1782e3a5782e3972040bafc1573b9a7223df36aa346ad6aa55caabede126b98689034aaf7280bc18ad35b881312c4859a055e1d37e91241696554dcb97d710a1b4bd54a68cfbdeb581be4a2d86f6b16ad69e42348b4a9540fa92dbdcf0d1aacd0b3fb166b74c883e0cb002938aa8b1f0ad6ac5de107a45f64529b7d15378f56f44bfcc8369d584aff48a8107b8f1c54f72abb542ac6e5ce7de48d7a0d2fd6872ee260ce87b51a48e9a8f57387199a57cd09ccd4b2f333e1f3a475384a7600a13188cfeecfd705220aaad600b900d406f0e18b961b8e84f831d8de69fbb51c27a6c4eb694c2fff978928cf08fca9e3e4a34c91f57875968000a9ea1f0dc0334c010c0b4288d4f019d2182759da7e829f1fc079e106bbf229936ace9a549640b96b82a8233a07058fa1ab2c979cc551feb7144d4d62985eb75938ae289fa6f173c6a69bac14bf9a90d620b65cf9d1d086525278f30e878ea3f097855446b88b6e56c53afe493626cac9a2d746c251481995e348026586f96448b2a91a667cb939d2a02125dcf94e5af07755e440b02e4560d060e243641fd5d402b353f285bca2d788efa75f7ae749ec5fef14daf1681f1fecc8de5076614b5e0e0f0ff681ce13c245345a54f7bf118a8899b29374e42b3ed66b2f756e5eeedb0caccb27f420c4f6d887a30edf68cf60dc1c720b26ec0d2dc6bcb3e0d8e633a477ab1dae84d7a6afde94f0f94bba5fb4b8eca9494560bf03009dc831be52a033e56ec7c6008bc58ea6b3816759ebe543270e3dfb25247f2c765ae945fe90f8be72de55c8a2751a0731b1988b9a23ace8305c3caadaca3be970059f337ef708538d97efec8c42164349554a0228a03f873b27288aead107a320767f407100937ba293669fc0395908db7682c00a0d0c2b001f95cbdddc47e6316cd2e45caa704149c88ea43e76040daee83a64805ffa345191a6ce1ec35bb12a5e3bc02c3673f66f6382191d9df2ba725fad7ffc10507cc59106cf798526f278d97b06abb6c438529fa3f9aeeebfed209ad146e705f13edf2512aa44356152cc1c006a0afcf5427943274adc84dd6d80e80696cf6c9f7f5302e5f8b4dabcc4e5716bac2a55c7aa97edcf593bf86f8be3d17a6314417318cd08a3f06f34ad19dcb3cec4fdb8a231ebf88955d2c2b9e8c6e56096febe156f8654a85812926c2dd2f9dd7f693314afefce99f7e04b4ea66fda2e1a72dae07dd4fe9142d8c56d4e0327f312e25347897872c673814ab1e4c213eb1ecd8cfc89925a193d7a3a20ac6e67926cfd71da8abe408bd52a163dcc064d7ca22fe7b2cb1ad419fa6c807e9676da00c43d5ab36952fe3a59c8403b6b0c5a48e6bb9c90438fa3b3ee103264617879108f9b94cc6e7db95d71ae97fc7cb31b7a9bc5fad5c9752df78007ddf6d61c5f9a62d6892645c07f6cc4459f505eeb760308234325793d48281ec61bc3e29dc4075dc5ca3705782ebd73d1f36aabd44c56696bf0f7554129fd5e5422646b414a21f74f85ceb9d0c26fa483f3c20b94589c542db10b5a129446691a09bdcd820d78885c731d785711538414a74778a0b2106ffb6383911972cc81e25ba53df972d3a1179e0485b5c736825f6fe35d4695219b27222031669e0afb1b32a53de603c605ed475a5944b1f2e9b498e3d917d06675d06ca699da2147807dc844b724a02f91e1e16048226f50e6a2769602aea847ae09b545dc97b88f231c5f590c665d40e643cfd643ad2a3e255a97045eaee1ab283da18fb05db41c528636ee117131d68a64aa0d616f6d08948918ca5796038e874211a55dc495696fe15468010860a5e2f57f0694bcecafffa77253513494a8b8dc0bac29a59b994c2ba524f84f69b758b4f10d6e4b4fa00c4fa15dc4624ff35e1f3447e262050f51096c921fa254cc78eb644fe3bd7d916b0394ecb399ae1721a48a196788df3bd56cd9bb267026a2c6f01170a2698fc5b2acfee12f0db15e70126811647eb4cb3da2cb5c4e372b0fd042e4e7cf33e83c69bdabd8458387b8663ef324ddd501bb4a9b172e32113621995c04541415e896ac608a733b8484c8630a4e02293313c1db3e85074a2fc0c5fdfe826aa70c7fd96aae2c9c1ca9bab81272f26c14c04ba1e61d6f127a27f80403ff0cf3daaa6c0cbcf6008eba3c68d3b53e74be21440b889104fcbcd6e01e1d215692c665835b92f5dd59e5b1a5c122338bb8d9d7c99a4b49ebb4e3d7a4955a82d7c964c5e0a0b2049ccfd81207fbe37aa5a0409b8352c8da0ff84a083323a2c25855a9502700240649e8c21f7dc40a4fa06e39b69942e409bad4bd570d595e0e5c825284f6327011e148957ca9a3cf6b346854990d528f00101eb735af88ce1cc6c0ca80c610c4bfb28ea92ed50b13a6d3a0a2878847086649fb60e14e8316ac732feb3408e06444f157dfd2e2741f199f2bfa17477d09eb63baf79076a66ccb31236de030f723205e7b3d75483f9365a5be6a565c1ad85be116f1c38eb0d275ece79b812a91f0ceec552a8312cd606051f11908ebe47e0208e07a4aa12b9039479556ee02319e9ef9fba1eacd5823314dcb354731b832fb44c8f056d999194bad2ad7679c39b4a3ad45969ec5b305ad03ba96372c6615ce3fa41e31c839c101439433f0ad500b22a9b4a001f3555e1c553a7b50d9b5b3d64593abfaac7c60616464da29f4c2a31b6dd0e7d0387d00c3ac2a97c1b852d2dbbc56fe4a21ac7158f2dc2ce7bfd7f43124e52044c202c6e8ef3e709425f06a84461c32cbbe0e44986d5b90e98d81c2232bc860ded8c4822693c670e6dcd0aa29e1e217fd79fc3ed5b0add2717bc36c2edf53d36d248baa9d1920940f797a3e593da300c3f540a844020dc6dab15d00a5fd0607c947fb1424ab89420c88a87e8dde4daacd2ef739087f0de7cb364c317d20a1b419068fc228536c2e35751eb12e65fac5f2d7de803eef01dfe9ee2b3ea923a35d3ee6388304f5d53910f9b932e56d04720f3f8aa895f74246dba50173696079ba5f47379bc898224b32e4e1e61d096433a4b0ed8398c6b0b263138cf14bb1b721a25d1a07dfdf69a201eb7096f9f42c4a31085054d679619f12de23044430caacc201d25e2bb35dadc9f4985522bb896a32a326048d63ee8f136b3cad3a9eaab5f0828be7f1f04792dc6bb3e40642bc4e4ea8d00adc596fba4dbda11a57bd7ba184142b285d7980b66f02b59e40db5e43ae174e4c9b057cfe2cd8baa6bb70fffab4b7626f939b8ff29f303e59d7787d805c940c54c678ae8b772108e09dba6d68939d76d34671eb3fb3caae0fdeb3e4898784855c12c6c9f28650690202ba79dc791e7adda12095710197f3dcee0b5f8954a90e39ee7d82cb1003c1b6904533b055b5d66a8eb1f33e6fcd1c641a51d788c2fd09791a4fbc5b8ef107d7b356139f47ddd2f1e00f142a7c109efc82d24cb83912b442ee25a50e062920095ac0e71a99dfcd049eda1c849564b5fb60a64072f8e594632441ababa5197a0916fa1d266760ccf21eec763c17000ea9d75672ca4e9f31185d61ec099a24314d03a899784b624512f070087ed6248966ebb30996a5aa22cd3af9aa94630bc1f830227846f8bf4f6fed8563ea23ec2cff53d5d3a349c7f70abd5c6a52024d440b5c7f15f8457ad59cef4c975a0334e1ddeb74c2251682655aae61bacef7d063a336b9760afad5f7e5d15f016670588940c99476a94ca479a78036e0bdf147b842f5af1491f20aa76389ce0295c4edbe00da37e68ce358f1ca1fd08417d18bd82a2548ea81991ea68bde28b6efa7ee22a1a747075d2f38c9bafedf2167533bb0dbaeb7660fb3e3f530e4a1064214f7404b06e04e20cd8ebcecbe85c7e1ef781bf47195cfa00d0eb704d19e71630bb1e1d5d48001697daaf169c562c1d2ac235652fa2dcd3a09158824d1cef394faeaeb5aaeb06a6b2c94d4182147ef931f3f68bc101bb6f2eb3e1010c649a8eaadb736e985b32a5c99d1a6c22f3ad8e98b31000cdd32e552267f611097fbcfaf6397ecef8ab4a4d2f29c7023fe51b80aa54ab7e34e95ac16e413651777aae2eb5cebedcc1b5f28f42fd1c253d59a323fac8541b8628426181f77241fd6fe31c32efdc7836235e1ed718961ff21825bf95605f1345ebfc2087c0fab604a152c3419092664c45450f49306425b89dd2e314a9466c59d45ff031a3981de433642a1ff1f9638a94abf833c8c6053de633953022b408b4b46e9f8f22a05da185dccd314d32a0ec3439ac76a8e72a3c40234a61bd2d6dd8c49d9f54952ff3d7919a6e9ea17abf245d2bf123c237773f76846a79670d71df33f5d50f527ef802d2ab88eb94dfb6dc5db1d23582079ffba3c11c52c75163dbfb647d73362cca5272fea23cae970c827bb50338b0860d898a865b057fb53aa1b672bb1667186415f2f6a2b41e60d5d62d15f02428abc7088410a2e1ee07dd77b0c478d87319c05e785a55f29a6a0841e7f1cf369ced3b719b2b67f5885b00862d8419d74e2e617340952f8029942733ad00f7856956213259a6c27c95393aeff3665788d374778db392e665b2d1e5251c417bb48c26756e1406998480ce898667bd487dbf778281ae9c16f38c8e83f10de9b65dc7fca36b9f07ec0158b35803a4f2163ac3b362417af5ff220a6ab7b11ab5b6c08a78c269005ade3ffc0e2551c376c5db89e2cd81b4ba5e9070b20140203381220cc2f1cad60ee8adbd3bd181e98d56862159b9126cf853052d89b46cb9dd135bdbd7b59f2e9fb5af9ce5d34b4dce29f106acd6b21c6348d6f9ea9d97ccaf199c36d86a4f5a0835a9d8f2d8f8f4e94bc6f2c1a2d61bf7e021167cb2c1d1a6ebd5cde544bb071640331353d3bbb368ab63b97bc45ff0f6b724c6f3e8ad07b58b02acbbd46b830879fc9659179bb000cf8d8d904d4dde20117f785269441a063314ef2985c3b08600aaec88c8d37df0a5796c193044526f888cd67b04987bc8d64f5f886313f6556cbaab311ec832b730f83bbef41ee3894b1b9a2c5d755b3d07b3e7515bdd6f8ec51d9180dcb167c5194b921867da1bd172d902a5cb4123004766a0c3e93c3c8abb451abffe368cd013b548fd6ba6c76eea889ded9d1c2d329458f659c57e893797632993c3d6b26366885c429cf47b74a342b510c3876b098e0cc49659f3c7a6ef2480431aa84f9a2948e9824b8d119d70143f1b59fc17d781e7e980ced1fabaae965572611c1a7116b35a401fd583647b40314ce29fb7ccc2f7aebf463e01f2e6fa0a648a733376540e1a4142e4eb710eab14b51233aca294dc44186712c299202fb7d4763c8ecf552eb47a040922461b43e905eac0f020c04d4563f56f27752b455708a56c3e8fd02c965ee8147c461533d87e24e115268e03c2b37ea494d7159182a746815333983d37603e981092dee990a55a269eb53ba42d12abfa8b46284f726298f888035717f5c982ce7caaa50cd0515d8fad0c7d990e3181c685b5618d10a3b817331c8b89908822d1d6ad2f15415cd59b256f19e11e2171801b91cba451f99ebedb4be51db263318e059634cb1d09b99abe94a74889fc20b017067059b52ca4f0156ae6f404486e73c5a983489465aaa555d42f87d58f6e21e68a8f036d7662e5dbd93436cfaff7d18c2a8afb798b6a8b9fd0e8e351aa0a7485f0d83907dce1a7293b0adf3b5dcb1db84f438db10b8b83c69cde88b88bed72893f268cae350329380641efa07c0f1112ff41f1b8c349a89282ae19a5875daef314c37634887cf3bdf8a9b28641132a7c3e5fc178bcfef8326e4782284f02b4be3159dddc6298160f94c8b73d7988396ed2d01cbe19d4f8a3952453c924094562edfc6a6316c98db83e4cbb4c486c776a21e1a3cf73c143bfd809b5ad97d033441a322300d44f204209f478bbb1e5be1fbf20c0456498482333d80d7c02286ca7b5828e6b67610088a8ff24864671c2028c4b60198b2b6e64dd48310004fcccde421ab9bf0d08b023ae3f1110c16b3d8d6e94375bc0b9da66a13923af2e987357df5fc5b90bf5ae62647d91ab395cd5ce36ef0c9330908dda51502a278e046a9ab12acdc87c82de767feb9054c4207db2a19a1635b0261dfa55f7346763239c4da907d07608001c3342c4973713c885fea549f2efbf305360ca1348e62725aa9247c3ae742cf14411eac8ac3d2a9341ddd23a9a268676c09985dfa08df4cfaf67f6a1ad59197f15e8858eae97666b997c894b1faf6a16fd26331d565fff6ee183694c3dc7916993f0d3b68b219ef853816c16e661a51ae9eaacd42f3a52bd13418ecb740f443f74ae7c03822828044edad5dd12a94e97b1af45e851689a1b639018d8324e08876781b09a13d7de83623d7a361c9691b74445b2e7545e9a473d4dc40fb69778b149b7ae9b0a979cb3b5167d18065ef0c22defed01a1c8c251de7e546183e48ea660ecd838725cabdc77e9d68c67f675a96f2ab4d2c9e2579ec89cd667d975c4d3321a877dc149314d2c56018a2a1e9eadf4ed4958430d5400ddb6125750a327d57c093d98eb633da780e03b57216a1d7496e2b5e55baedcb450282689558405834e8c2b79877513438848325aabc1a0aadbb2b2bd838169e7d158203d972aeb171d80ff5114eadd0809e2122a5723d1fe79bf57fd0547ec25ec3e6f4e82a4579e5975f3ac67e41c679d5ef38980b1ce2c7f0c04aad09fb3eb66cccf12a7d61cb72e385b095bd405a1ad5697f03e76c43888abe11e12403f6a56348df769d6f2fb508ec891d5945d7d14ff344d1519a55e687ec0387db95bbfdfcab7f4fab5124b1b699c0b730006e810e41f637caf5fc3036cae56d68a09be29a563c0424434890f2ef66273cb55367972c9cf8ada9c1c136a4411d2c2dd840305b44bf6cbbc5d2a33df09293d01686b3d5b25c11d768adf17af27674fbbc12b0703311d5267ebf2667f960bd8569641e1483c31d8b285845be6d2685022411c4227b0bc7a10608e5d09b51ecf6bc5fd3fd30b37a8b49bbedb20fa0713ea6440b9224c48144ea91a26f8850dad71280e473d20e28592f971d20f168d470ca081102859165dcd4fc40ceac40e6833fddfea422339f48efa98b09df3e181745d468edde06c43dab2ef60bdfbf78244525f9845332197594388c0be3bc27c41d916b265c01a393dd08fc6489749918996b2e87884047e07063242e6b2fe6d6fa07419d3be9483d4e89960b805555c84920610b406b5e7b6fd2ecd2cf960b332a1279da94865a93d342e8b1946287a6d3c5876161f2265178e5b3aae5d4de97d33737bb703900aa407af0e3487d421d9572475550eebde0de110a9cad4e1b058b4c416f35a9ad565b7d3ae4c304f36881ef6533ba0265f8c4b2870abe477b21dd9cd1c233cba444002d06f25e7cd20382f710845b849ac89aa02abaf2b98c5ec290bd0b2d829b1b9a826c14e59509851a5e0439bee04533f45998cc683c7b0c6ae73389359ae77a4f986294e72043a03e2b1371e878e1a75a48c250c50c8deadde6bdbff46515ebf042d8de00c3d2c72d83ce33d318079b122974b680b64661559746db62d7265b9a78f2526b30ec53682b11556ed63541f7921f727a510d35b7788469275cc0224f6e7ff8a94501c046410f3bd920bd4d7ccbd6b4d7f1620514695c17ddebe9b91c55c0f24b0faf0f932a012ab783ba65862966c576f0ca301d02feef931ef707c64a8c2caa9471a53e38a5c2a150be02120a96ebba6134f97c258b9d7905c8a2f64aa00aef691f3cff7063e5ca41ae1c398cd1071fe37864b686c404eb6fa9b2c7e9a38bd0f9de3b071b5757fb42b712a1e014d31ea9274475eea6181108f5d9985fe17afaa1059a3c18d3531d08ed1a7101842b984bccd26edb0c5b32a733acf566fbc2d72ce29b1f5337ebdb40bf502d695e46998477b6c4b700e104b4f745f4116ce8a3219242d8391c02b77500e22a3bd1d8f270e4494ea223869b89e0b71c50af307c0e0b0cbf4433255fd51926e5c6f028a26e8a087edb644ea86f0cd98305ec85822a8ee28f98ecae90d8756410d82ec6c1b40c5a55e2804f6e171817f14e6cfe3268fbb92e777159376edb09c807dc61051c1e5a536ad982cb564e1aae6920ced583e079d4738d8c7cd4bcd58544d59a869203e062bb44b06a482faa34fc4911906b6815a26c963391655b4434258343b7e84a6d51db7c167ce16f48d3b8f288c12891a6812183e50971e283e330dc846622a43f9944a34e0f42964b084bbabb0e026b6a78e85c4ddb173d0c4a89f7dc94bf37a44392c40a2fa95070c89a68b0c3266efce379fb5fb2c8d9d7ca687451b77bcfc5f37e6d16af88ac17baa8b2aa2f566605f1ee74a8862afbaff903c93b71590cfe495af3cefbbd49f2b4f5edc4262e9dffe130a75f165d4332fc0064cc1217b0e31b34fbc893252ece9b48fc6376f94134030cd7f3091b56e0d68b6b13dd71123865d41690ab39e0fee8f23aaa922dc333025705e557e692f6938b015ae571279fa262bb44517dc16f143994ae9125fc8df2175c278fbd00b6726122b9cb43a06c139f3e4e1cc8095d5642f0e5f4a2d7ac96544642ebc0ca7d8095ec36aad77c62e5c8e10dbcb6c6e9648c90f0a155c1660d5e0c7f8c8583fa7b4b69ffe635bc9d52f94bcd0eecef8d6e5c4027c88cb52d18568640320bb5d891136b899f5072bb61faab9a2ba9168a65282ce2349f1fcab01d9f50f8d8a5d40b09295d04b8c18623afa10a9a5d6be007a3481c635051ef01ef4d41848a10bb394f7a02790406deab2ee4910fb40333def968cb58cdbaccc3e392c70245677b4bda7c9cc96ae61d4f1266f1b1888d938c1785fe3f1a8c4a0d6b67629264164b1739af0fff017bbf16dfcda4034d3aff58b4796c2b0634258b978add7c1ea641db2efc623d88908ee438247fb9415926c3dd6d96f341f690310f21feb6929466ff2c896b749b2e38662bd4b4e546072f46adea71a017edb7f9eae9e23e1869cc42257d41d3a4cf9ad36ce4568716dedb4d60aaead1e13e9bd18b8d1c3c0a3abe938926567d6311808172467000fd26d416a86ad0f4e740061e6b3851c3e128f45174ea53c6a37452db8ca2ad29f719e6629aaf0c994675bac3310a21fd5578520c583de0888314b3698846713323a224844907d9b0e44fb336942d7878cbaee2ba35bc195eaea721f6576fc65d69671ca20be3abcf830afb69b0810b5df9227f2bb088c531f8c553448039badedd9afaefc1abe350d1b7f97e0979fd58bcbd79811e4a278c2d0e11b3c4d4e362af9da4bb1190436462e7f7595cf75a53f146002da7b3316ae47f7093d3a36104eddc71ea4967617f4f68ed9bc45fd151bf8c1a3511499231095fb789176848eb7c5e4509b357b95f2060072c65c0540fe4e05be7289be561d18b4c1c31f39c77fc3ab635c2436651157177b3df9f67bb1401741d6677f6f7b36208358150a52108c0b900eebe3e524d9ee19dcf4bc72cc0c80267e6589f2d088a218ea04fdd87a390b415e4ec38e4ccd26b05557d64dd3d1aac29f3cb37fab3b479de97091ed908e32162214bfa4a0fb5a86c366cfab97573dd5b19c2f916f074f875fd7a447316bbf7141116ac2e9c14079b3d794266f2fcbc9af15c844e7bd9d33d830b5d5c18a1edffae5bc5a5c37038f46d72bbec9425dfe4080f3cf0d00e5de50d1e26f5917a257ef9110ec3b421750c7d8114d012ed1aef2295ff52399312f76462a8d52cdcc4b393ca8c22f9105663c4030c8a97e9d152b4b938cced1d988664fd42c3c96ad020cf8fe9cff2363f57a4a1bca1fc23c89363a0639f9ea6c041830b6adb40aaf701322681bb142058d5b542403d320ed9e72e89484264ecba901fbf422cc216a3798bc82d3cf38ebea8dc3c604d640df97b32d9c00e63303ad8087f7408075e9b3e2730b817c29009ce62fb3e99111d24904c422a912ef0222380ead5d5d1b70e667cfca0b7bda76d4f1f67a8d25291df3d354b1a2aca5f3213098f2209925996c552a8d82fa0358443c1aa4faeedfd08b2934a3612ae1dbbcdfef77c5aaf046253f069d3be42a0232a18d546b871a06b3a0545336ca32422214f43146f5e426b634e91cf7de8974cd0cda9bbbed569b4ca1307e9521ffcfa99bfe7882572f3908e685547c62733f6af3bc46a9bc7e7038aff577c0b0812a92ed5db51bad31096971dee874a0b8eb85ad8f5535f8cf40b8da942f013d93c90f6a2a8584e6fdb7c4a969e921e84c5b3cfc1f0b66fbf6a9c9f810d3d1b7199bd4f2b7d1cdeb3b9e9e0c7bf1d7c8941347ee02c69efe322cb6cbb867cf48fcc97c2d0b2777016b7442296d7ffe7618c3e8633de29bf2f1cd3919a28242747b2e6084e36a9b5d5999c2304c2a3cb333cd33bf012ac876ab18691ed265547568324e0c50b65bec416cb2937d422bd0a6405aec372d3f4830fbd05664a8dd45bfa4680e31b628926f846e7e3eb6d5285a1445182b564d435ad06f5f844fde9cf07b34ad7866e5e1ea5699e8dfd678113fb4bfbb0937319fbf0ef0f1cee8dde3703c7a246097321a06d8de0a14e629a5a42d0346c8666a1df1daa51f05936ca05f6075ad24d3ae9ce4abb5c40a18277f21722d24e96ff337c4c88eaafb1d7a8d3198e85b910d46dbe14dc51c6ee7c3045131afe4f65861bf5ec8b9cb51c6ba5c9b85180ec2b9b4834b861ea0da4a6253ba3fe2b8a34f20a0b652ae02c0e9177a918db15eba609c6bb89aa54b1cdec5ab5799e59c6414487bd57736dc2bbee5092332b48a2e64757a9906aa9a47f91fd8cff67e6e51463fa15f3cb901c474d58fc8f31f2de0903b379121e5ef3a0d4acd13ef023b92096274c77b35c86ad9cb592b9da47122e5a6603514bd00f4bd0f16482e3132fbf7550329e01c441f61ec9a18e85f58d3bcdd58908e182f461219dc6af034440d500a52b706365d6e10b97e600b653a11662333c22c39bd664a178efed96bb83075abc3aea51e0e11e76df7c6e47d7190597fdf88befdcf615694a37e9de116fedaf9299b864292c1ecd79259e0def5aa6d6fbec92305becad91f3afcde21c27508a9030580e7ec0d3f2eed8663f17712fd528026740364cc15c40a4742261b4b08a333496f7ba623f193fe849b426c5c227d92da19727c133132ccff08b9ee943a23ed0c1b0d6fe2d6a4fce239990698872e726960b9d978191f87bdbc2afab3f5607dde14296cf030d8e6d5189e741b7c82bcd5921d4e93c900ac5a5c76a2388eda7fc591d61ebc62d72ba43caba8ba9feafd3b5e590c16344da808baeb39fd5022a0fb345058d9074d0ded1644e9517a35e4d29948fa4c2938baefbd363d3f913d6c6d7b4e71196e0da91d18c89face819507c050c18f3c99762b271ae870962961c63002eed1b63a3e50b8fbadb762ef5a579ead76e559e195a7374426ebb4a8c6f3fce3e443d3501e4d27598f6a396d767ce8d2f54e3090845c84333e49c698174832cca823433376f35c2c4f53108b0c61f79dd97ab4d26dc30c2645cfeee494b201bc6f48f3df5c9bdf5b2a868d3cc75fdde98ef9a11097a0dcdf23458690490d479d207f7d1405ebe4202f3cccc211e3b6a38171fa93789dfea52f6ac4f14e16d9d3e5eb1641e4534b9c4257785c7e7a96e6700ab5a07b5505738f3a1d8f76fd44dfe33b96e81c4bd033e52a0aa229ab1e49a98e378525dff16bc724741aa9fe50088d07a666743f0df281e4e5fd93090b0423dba47b1231fe61b05ef7e05555c63573f7f80fc917aaac3239fc06b6c5822fa00cad96e054ba7f11af7ee1502966de62372e06ae4e54e28b034c9e362afc2313c2c4c8e3424b8600091412db825a628751a6a1628d10fb2b4d0b9d2b5295c320424680c88c84f54cc107640a12c670d0438ded465a5c524cbe8be292fb0a073830259c8b58038d2bf3b7c6c69a56060c7e6c9cc8984fe695ca791bf3f89c6728e1f5ea349dad3ef81823ccabab347032135a31bf8afe9ddbe95fdebde9c9dfb860ab3dfd5c8256b197b05867c4daba41534cffb8d84041bd23d0a1d0f389b13e7cca441fe2e48734c78d78489d58cf8b0aaf6ed4af20e8872658069615157791b99f6bcad38afafe3a8981ac151d40feeada4bea16b2f8b18db89182baad5c38ce56c4bc0b515aede1f46fc752df2ef1e0056b6bb9e84689d09a848b23b791d2b20112152ff0c2fb117f02ca3f29360d70897b3d5210522523cecd5aba736de95f2097ce4d975651877315c623c32c416e4f171d5aed92a16057b8d26c746c1163128fc920c426b07b1e3cbcf20ae7f031d0b5fcf7fe198238d6fa36c82217e9e4c60bc0a695f8efadcc6614fe9c812f54f137358d8ff95c1001c6adda23452e941e3dfcfdd21483a6d73a0f213957b81de7b81b023fba15f0e9d38b932f7e77b56794289c8798a20acd8859f6ea802a8b20ba8b61bed85ce597fbe3d14dd4192faf0d2345b059c6462672b337e0bb4aa4d6d4b8eb32bf40fc2696cebcf4bc0af5ca8c291b1a513e8437dc2fb7813d01564fa826d8320c855e49d9ec2600d14904e4a201d8aca7a571b9cf01c737e1d0ffa71f207223f629bc8c5c65e872423dec70701bcd1fb234df80528af7905085f30f709aa20540294d400a2d3e9dc49aac985ae8775601739c8cc8d3916830244297214a518d7fb5baf2c9fb134cb48c258fd43c928386989f9978d95e2b2651131721966dcd7ec573937372110490fcaa4b7710889bc97e2c97f7b040767ebe03d471e5cd02f9300b641dcd7362cd1b798a2a0116539a670e2a90bea4d1d78c3955e2cb4b9c5c15f88faac0585c5681da4dad6f497014b84f7e0a10e920a54e9ed44e01e4ee67a2a031d7b0d21d359879d5cd3a8e31843f2d7397c66c41df79857ee9dc8c9eee8b5144e2f3c4ae14453e5aa05df4b5b218a972244617f23791561d627c85d19308cfcbef792c9d15ee1bdd20fabe5023ea6a8c07315998ceccecb4c71be784d46aac9064c70260e3095deac7bb0c4007f2595bb302e53b0680677f68650bb888c8b75842208b2713bde6b437cb4a0fee4c54f57f9826b18d19d381f916676dc2fb9a79119203a14edabb662974e2229195cc3b077bfe1ef82f20b41dc3f0e55946d98fa38b6117aecb6838579ce549bda456845be6e40cdb2b148ea3086147df21e07d5f8c42f0fcf5f6bce69d8ea869d087d6d7420dd275151dffc05eaeec3a43210c25ac60adac18d080eb14f92449d71eaa72370bd37c72c4a0912cc2359bf2df4a17b0ed4930ad0d1f984b3665a29735f7873fed1974604a06e97ef594844e9083085b8320a940c21d3d4a4955da7177a241d490416983697b28aa11e52d3036312d6843b05697461a12361ed021ad5bf2e1a14549b78081fd620e19ac5e73f7fe5140238aad9a93c7c40b30dda6986c127a8cd8f66af0c5286c47e26bec91016cec2e8b75b702d05c1ce1597619f940d38c60207b6dd6b8921fbaf427ad10fe290191de7bc9cc87054fc598b7892e5539a360a6ee3043748e7bd6ebae7e22a5bda5aae51683ea7c0dc38b57ccb9201dff16fcf97b46fdd500ac13574315c16e12641402a2125310c7370add548027c2bbed4911de6ca02246a24a041902b8d0a6e9e6023f9b9bcb2821eec0308cf8829be4bf55deb7c1ca28097a0c4970bffb0d8fbf6a8dc4709b11bc2901d13cf66007024a953e35bd2c57fb9fe53f949a13c70a3d02e4681299431c5c90dc7d80e0120422c0b930a8770cb6229d070207a7043e795138de3355511382918d554ce6546f8ebaa59d1ba8c549483277c216ec97faf2bdfb744ac1cc600873a18f299ec702154e0b8584ac0a5e3e5ab84480f6afc9bcc3fcfbee4468e331140f71f6351e210cb87c36ce9785b93faedd65d23704d2b30948dde6a2d4c311972309dd235e576b8cbe827547590398270b007ed32d736e850b4021d9cbd1d232f068eb98d91ba919e2b80ceb8c019e2f55cd8e4731c85e5752a96860bf403c7bbe262c722df036bdcf5a58bd85169d7cedc0518bbdccd1c5860e6c05b71cd72262573017cf9703028184f13e3d1097ab1cdea5d993efb1a02320c70091e51d49aa303439306d711fb807f148935a4185ca9cbd185b0122982f749b7a4c57b937e31696876ac218bd5b9bccad759f0745f2de243d865b1261dbc6f05cfef3d7bd771c0d726d5237dae488fa34ea194f7175980a191ca1b4d501e1b110f201118e41a28e4a49b5c017731e4d9477be04feef08e40cd2afa983aa601e5d8cdb27c547abfd423302544eed86671a526c2199df30244fdfa668b6d158fec632a8b81899d38ca44ab54cbf0ef547bfc8527261b55cee2c00fca7076b9bf2c41b29a6c7ecbe44cf5d91c39b3e374324bb6fa266e6c3780e95c40a549e9f01ca841bb3866fe9e84db2f4f0bbeac3160a739ced78ccbd7d5c7ea234a5cba692b2d6313f07f948354a053881fe75d7203a93b0d131c5ff79f9ba499a352f41d0f4f84606e999cab9202021a89ca5ac81d73dc533a38a78e373b230a53de5138378dcdce924fe334db2bbdee55e8cdbff021c1ff8b4577e2c4084b35a665144fcd27b39165f46e9b4ce43f7254ede64fe177a398408338e743fe34b766f57a11da3e3f063f4ff8c077fd914f9abda6313c7407037346424c4ec741cc05cd848f40271446ab6f1d0a932237d7f5f5dcb4d753b47620d43989f33de47d055b1a5bb13c586f6a2c6400ab6768504ddcf148a8dae898c0af5126308b9861ee94eed1a68dfc9f32b0bf376a81839fb6e1c9e2f8c0c76757922cdf948a4b1215d9d0470ad60bc067ff472955e64b9b0163f5429f58ee8d823fb1b968b24244455c9edf0c4bd15410cc915b615218f6ce30f7d1b663f4a34750d38d3cd43d6e04d49a18b3fe5761532e65e0086c25d8086abc000cc423564ed54dc50e20128bb54844c6565190018bd7107c83c482dd4b261c8dfbdd2627faca8f50566d33aa03e4b1eaa827451406a0754113dc6eb8a2fdca224b19e1f858b7d8dc9b06bdd8d0868b70f8b65c25222cf4e15fa68268b0fa659b792e19f6b1c779895d24830cf246435628bd7823fd421aeb908262cfac210b4ea366f9b3eb1be44477318a5a92c67fbdc0fec0950303556a5a60d261274580cd41c9dad916d5240df736452f88a6a0bf90204d8d192f9e22357256c23143856d9fde6201d52d8302bc258f820f11da99aee00694aaea266f92af4b701db4ff3496d260273a132d8a3f3e1745541bba619676ddedde33c5940f10267c1bf2fd4440ffbee27f811f3db979eaeb780df04ade217cc8dba4c1b57f4ecba767071861c25f7db2501ad84d9153cc06fb76050698c0a422edfbf32f63ca8fa8aa98299e15564a2d2be2d171e7ed79910993d4f162fc471178e8b4b36d66c10c599830fa1ed86bbf60ea1ede3f114aca80059c56d3f36d8d76503758109235cb1c53613cdb466d17a43191918df0286c500287a7d66987dd7edaab2c2858343b1b0722561ae07a998a7188873a6ef7cd4335107011747184b73562897bb325241ca6004bea07b036c492137a2b499de47c96727cd89fc4372b6d49fefa9c0a5309ef0d0101ec4df91ef04700dd3ebdb2026ac4b1c28d68dd0b37e84eebbb76a962dfc192499674ece564b83e667db9ecfe10988f047f5e6df44faff14844d863649833c6a8ccb8f0c20a786a397a74fcfd3a01a60ec4bf3e9aa08991594fb5fe454a9d742b14c5deecf9a519f7c71611033d7ebe410f9226cae1fe6ef3f0cb1db974a1446e874c39597cd799e34f840c94f2306077fdeb887bc8265f95b7f3e731b4fdbe138ca801a7960aa6c3b70fe89e11fe9b484e9c4d9319c3c26ec4e379648ddbf47783beccd7e259ea11da4e01e48121d45e320de5ea5af86f4e16500877c32b01d9677debb4a553bd4bccf52208a8f264515730f816a1eb9b7a99ccedba23e52d6884f1910591a4ded0221c4c75e694f627ee80cc0a486e65debd0fc8602b920840554927fc04102d06b87a83f96d92e1ebc8c12a8c0d0d6f1ed8401ce6fc44f114c22394b54a7eab77a2fe3fd3999892d435d988ee9c0956e0abd8e48912622ba340e6d099d6024a980c5970494208d68bee2bf0e22b5749d2824245e07e2583070b091f85e54722b228608aee7d5e4473ce9031498685ff3fc3accbb48baa6ac9e812f852926a00baf0eae84435c2d4bc384908bad272b878a82e202b2a5c2701ba8219295c4eb8a746f16c47de7c7ca01ef35b4b9af43efa35dced22a00dba18d8562583c197af4c17184252a6c8690934922e1e9f85f31e0394a081df707bc9efbf50ae50e6be86269d0dd62f88a0f0b7aa6fd446ead2d7a9419f07594bfb4641f24eee7a88ec5b87a068e8bd9413b92f973e7140cd5f70c6aaa671d9767aa7d3cdf2f5a6c7797b93d63edfb5153265b4d9f7f6ac895c1a73ee2979659bde37a433c3de51fbaaab9db7490750d167805732c970456599c7f96846c4408550d67981aa1b8d6cf910f2a772a3e3b0f7f1f2214a5350fd575d08a49e55085482111d7d2c79c17a2bea9c5f892281a9cc74a3c5799c76580e09043bd730c699c0dd02462958017e7a0042521abd12cb11f83b59d43a8cdb37ddf7c27a503cfb7376a9f2ed0050d89f21552d87a9aadc63b6ca4589f9432fd2a6f6e44ed1823e821b7fd6582ab5ee86987bd032478b4dd538b55200b573d5dbc1b04ff412b68bcd7a33f25b8ba4a053368a4cff15015f7936f10c0845b7e25a9d26200190a945e1e41356e94ab4931be5f07259da15cf2b0d849e78557a1fb71b38fb5153d63013a78b5ec6aecc48162b2ed923b813382eb1c88ed2acb6d58dc16202745b9401510e0e4d253e0289b012d8010f738f9fe90f1a07749a3ce034d36eb5362d552ec187735d05d14597b3ba4e7d4dbff234dd24b0c032334f2ad7b33bb5df2c796be014c94965f3b6bdba4d3972a3a8b94094c0442f03b017714047e20441f940f614d082018895474d981c9d7a70ad7fa575fd3da911c7d13875c330495def9bb9e687e872266bc10878e39449ebd1d3111763a26a629230af99bfde489014bb1a1150d3c2960c57fc5a91f057ec261e79fc671d1d3b18126fdcecc71ecb3dc8088a483c32c0c47552daca69ddd5553a56ed5f428c742b6d0671bb9aa716c451493365055be7c84fe876f517ab128d61cd79414e458de2b04eac185afc6b0c08b3d7f4ec81648031c960ae6d8b63930d6bd6c592b3dfd6c666b85845cab687e4907dab8e067e05b741eda2acdd7f2467d4310b60ccc2bc1da7153cfc46154c21bdfa4ffbd469f3d6fea9eb75ecec38ae685a755d1976f2a0b286a4d5e17f9d6ee62a01450a2123f5385ccee0e0ce16991045f96f22fc327e34a83bd4222c33cb3ca16d6fe74ea7a44e34c96cd5b30db6865d6fee711b93a8a2c2f80877911293a810e21c0e3c4f664739f239d380a5374b33a3a4c3df7ae20693df4fcdbb5020d281d3a265dc60bbf189f3ef4e4be0ba99d94c433bef83c2dfff4458a7bb8aef330b8f72fda82f1b81cf8cd90b0e7f0f5d9dca30acd20ec2b6d787498489c0cc66220e7f746b34e73d0fcb39d37104620aa3c43b18308a0aba8702c194eeae9d7636fc90deae6a078013b85088d3c46268e29912252f325529b0a3dd7483a483a9d12de8697a333caa8e2ccbf84a5788d51b66508b717829e48b8f5d9a530be0519aba1e6656078e67b2fa67c1dce4742da887cd195eb96214acde3d23c0ef62bf662de2d86d60bca9611499580c5eedb740bee1e14143fb3fa5345c5ba65202961014a0ccc83597c89a92e9f2d9e958f6887f9e68a66137b349e8a347ab5bf9c546f7903f7be59eb3f60cc10ed43aabeaee17d03fe1998d57fe75fccfc0273edf89d5e8589bcc97c51fe07b6677f21f1292270ed5fbbe7589dc82d16e7e2972e8de1533b3438cb6be7b68e8b020e5898fa1c329e9b1f6eea1ee1164655a78a40690be1166789c1386a9030770e5aa4f21ddccc103415b33db3476cbd7fa83380123cb3c84465f3f25ea81aceb50cdbf2ca0473275939aab4de16ed1a4c3c2230ddcf10199c8fed727dad2a6de1c99a2bf041b4fb8ee183a5981b8e3a22d7d2a229b80839da420d804f85dce1dcc9d542a0e0868e636b824d09746ab91f0e0b51163ad8ac2bc77c953ff32974375242471f0000bdfe35f16f7401d359e0556a5d9e9dd3ba704611444f0fbc18341a14e884be0b8be2cf1efc62fd7648b622b44d0eebdf4257e30567ca762fe3eeb5ef45025b8a9db54fb97dacc55db1e85b03d13e8f336dc8733e34950faeb83f6b48626a03b85b02f82cc810252c75603bc7a500db3ea1dda108b4ff5470efab43d88122893c92869555ff4dcca9a512688d144332617c78fd56a9858c0d8dc6f61399e07b46b9a34c4b7815bae51888be5f47e43e287a230565c185e7d98799375097df70f08ad1881d117d9d1378c2d38e3a2226d792e20776b90def2dd3b48559fde59961cd5d9407cb8bbf953825a927a94ba78531c5275c096753a5c120d8aa451e862d20200b35d223555c3e8d7b251c59482b11f13fd1e5568f149f4d4dde09fd6dc8cc84b9c1b50306469ac4de72da299f4a8fe8b5ee1242374c55881d1fd4278a4b2c7f578e1afa7abea0f67aa2d2f8425f1a05607e1b0420602dd9bf4e343d6a0a3e442b3ec96b2a1ad231e584e0ed182105b10ddff3175c05d6a55972548c5a9f1fe7a69c2149f28a58f5d0cb5bc63a7831f27754c936e2c2ac0c06d9ce33701a94ffbe192cea88d1e14a5100d1596a438458b0a645207311c4c86c8fc9e654d6bd27bef9ac1799a310e6d69e8b811ee301d59d439a8c03f3249060c9155048b2116186be602553d5afdd6c4d00aa2f7eb53c2c0f940ed9140b188e5ece269158bc28c87d7121a85d758aaa0f650c9e775110fc17880d6d10cbb46156a0d20ccf1a211a7c14a838070e2282631f814a098964a053d151b4ef3f3293801a1f171034cba10357a30f938ca9b4f7b6779ddecd396903050b302f378dfa0bade7210ffd6cc3bd50f6626564c5b370bdf36545722dbdd997135641d41eadfb462ea54d3d187c48a0d5882d033b0269b40bd67d0a9a5d782f93e3106bcd13cae4c51e2ad8aafca15e91b36c4e1fbe2c49657006e624cbb9e129a432078367bfe257f12cadb66e2cf43e12b6d1c59d617c24a99cb138a2153dde997642a31e42f1f7a8f61755b1d8bdbe764344977ac17137ca15bde78257e643c178e4d08a71478883cc44fd0784533fa063d0fb91299713972c9ddd0d3bd115d47f5aedac3f1e5a6d62b419d7516412d1cbb8096acc0de6b1c1de46f20f5089ce9e60bc7a2853460be20667f3d3c7108a0d281bb18eb422035de216a5bf3a68543c18a8e7104ffc7150b75a079b31b16e49587491d89aeb0c47ea9b8c73825bf53d2dd48901ee7c9c490f4e577de300948b8304750e12ebd1556be233fe353ce4687f2355cae588e2f75cd868b3f255bf6bd7362cd8b0e99bfaefb205988dfa30c1756c2061595dd338b865aed32cadd6c68fc50accd4b589361c8a528d388c0e45b99b30b52f05f7332a5bd2df3aeb1922e8c4b62783a6d1b042dc044d58f9e11f2fc4114e6b7143fd4f5175fb3494671caa7116ffd40080864969934d7b8fcd76c2e7956c775b65ff75660726781445d497a88102de085f48492da094c1e0f47e39e5c1bcd64dacfbf9405f7c720137adea907c9c532336430580fd3f14e3fcf3dda5d0dc9df3a788a82e49903d84d3e1a1fba9f4593a0205e2aa40bb12fb2922f4952f1f1224670b46f5a4b003dde8056dd7927523ac2d2038fe5b05f93cb0eaeec407d996f919c33880885cf59c93749b034d8d8dc539e4fa5a088f3828c6bbb0a9b69da49f72474f43b10c0ed817810ddb072542805d9baea1d97c02b2615bcf0770e342d265f2f27ca503fe236ee2427f7018640a8c844d2dccf67d18cd087042ed51a331f7bd432fee41540231188a21692e2b8bd38c779a841c6c6be0e14628cab1416451dd8ad71bed0040ab74eb24d87f82b2bb3096dbe1a04c746475f244534f355e3f7afc949f4ac9957dbc071894019328cb0040c0d34d864a2f0b02be33169353c2c06c6f0b418cc8736ccc800a4f796daf30d309c1ee15c0c894d306ea532dc0755e3d91507f63813da3d88212554dcd9dc57e14b458e7a70ad745992a3dd2aa2db4b8930e86317d3d4bba1766953e2cf79ce00fb6b9d430859060d75f21321da4b5b90405c21593830a132c49782299e5efc5ddb424d115c6ea1f24cd85f59e13c8049f495d94e003f40e9e980cf4e5ea7737c48a14498fd39010846d410fb1ced0f3e80ba2075ccb035af9ca975c30161aa7037da30e35b95a3bc75b0fa1807451a2d9e95f2f2e77696595825bb64959f3b5456bdcc141b3b0ccb9944ce08de1fcb87450f3aad0f2312f855c6a1aa5307f15c471982288c92563930d75b05ff96defb6b6b7dc322599025e09b2095409eeecceeecc7374677776677766d1e530777667777667766777766777661f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f766777766777661f1f1f1f1f766777766777661f1f1f1f766777766777661f1f1f766777766777661f1f9f11ec9054702cfbe3676f017e3deb97b7c1e897d24accadc466e60189d158e740340fc8369aa391b71c75d403e201217940b86e769db7ec481dc903e20101c25267addeb272a5aee401f18078405cacc4acc46299988931170fc88e28c30332c303229e582c980903e32d614427ae71748da3cbb37098c33ce6318725612561b55aac564b4e280df60fe9057128ec3e5ff375bbc17e1829359cbd956a7436388ee348ddea9f7635506c1cc7711c5d2e97cbe5125fa2288a620f35ac893ad6452397cbe572b944511445f186c96432e54812db6451154f3ccf02bb670c7a0dc1c6711cc791c562b1582c87b95c2e97ab7fdad540e3e6e3388e238bc562b15c2e97cbe57a182935c7094619245f72082659e3388e238bc562b1580e8bc160b0a2169ba759dda3b1582c168be5308739cc610e73d887aad1c5783f626a783f6ad8f07ed8b8d1fd8d6f7e9fb7fc4c20595b4f4bfe481791711cc771648d2c168bc592412f3904231ac7711c47168bc562f964ddb8f175ff9fb5323872cc1c39bc658e12106122f72229ced8285920f87f3ad52a7b644bfe48a0711cc7718e382c0eef070e19ef87cc8f1c3ac00982de1264d16c36753c05cd181110fc3f9d621b518d9db296366374c6b2199b33e6332623d3f9a7238717c49734d83b747841dcb5a30377805dca039281ccd560bb529829a4e02d53c85a0df6f770fbb3168d67da88f3a1ace5aaecb5855badffe0f5ac753b7b85d98b0423502da93a46d0afae993fa9c8490d4c1162b273b9e51523acc8efcfbfbd5daec0b64ac92d81d062478b244530097592e0aa280210f3a8dc4303356857ae14ddf086fb598c432d54f14ea980f9a63bbfc8f6134a95538ccce420edb3075bb575f565cadcd9365583ca7df7f4b5df2ccafd73248f8b5e1114bff73aab2214335b225688a7e624b9e0a929fdf9398ef4f10885c3bdfd5038a41f7dc6ececbc69d4d27467451ccbd0b84aebd50a2dbabbcb1f7df5db98a87cfbb245cdbf799dd537fa686c46a3ed4936e76df5141d599d95ce6ac60d6ae599f99e9acf2f299eac824a942aa85c715f1a3c0227110017126408f9500413fa614888081e211744810625d1895c1465d1bad2be890fc0c383af9a482bbf6f0644515c4180ebaf2c494443a7fc398ca21d243c502821bdeab2d0123d97f4bdc8d0a0572eeae9a541541019766a7792037c515b49b3b04395b2d529ff9f20970f11fd80f9a286f33a8944ba7192f634f0eb6a4fb9d19348224f518bb122a218ac35fe04919ed424d0867e7fd9684ecf4796ddd915b90c2454afe284f3954fdcb0745dce91ec913c3c3946644e7eddb08af95935a7135792b4d1f77d31b8fea36d933d5cff6da47971fd3512e529ae3fe532a9c225cdc9dc913e29c57fa8618bbdd33c304ca87ec379535043f97acd776fda90e5fa37cf904833f0218a218c6c285bdf68b483121861b3a114b70d8c20b4a0c2304da336e491d2222340f0c410ae3fd7a2bb3bcff8f7c08ada3ccdc20f359456ae533076c8628ba2bf5e54e5900c4bd79f852eaa6cd1f0e275e5b32ca1f2955146cffc441396b8428b1f6e00046cd4820f004571820c80e0c38ae56ffa52517f06cdd71c62d50e2752f0022856f004257856f2278c55eea468092fb6206202092bf901a85247762ab1b3a741f9363aa8e16c25b9f22793ae692d993fdce82b3d7fa597774699af066dc8dffdc886fcdcbbf783df2bbd37ba71e5ca955bfa9b2e3d374b2fb36d341a8de6d3d0395cd233e93b961f7de1b62345268a6610338288b600c682b1882019bce6124343fc0bc023685a893bfad066abcf5f979359124b1797855cc07281785968c978c3e9baf255b82cb4e475a7cb5533ca940274e5bce2ca0fe778e58cf2fa7cf0cb1904459597afe4af7e7fa6a0b059338867e4c30455edc3f6c195dfaeedb7ad9e5838257fdb6a655d99c30d67d095250e2af1abc443a5a2cbe2df516c443482718a7f3444220591464ef1935adc0fe7e280389153fc3c1beb32cf20e627f2988b3c9b134d05599e59f59ce267f9966d63efb073f0effefa859dc3e5e72fc91f22ca73e5cf6b21cb954f33bbd94943e7705fe8cbd4a625381eab20c210274f5bbfc4c89ca2d4de3666d9f43b0a1a54b28ae5d974596c0b51a894d04606c129fa233a84c4ad010e441e5c2a852ea55209cfd0bf69280d6e232b0df2ddb29f56493683f6232b953448fdb527d9d0c6d59efe6cae4a03193f90d0e214df1147fa6a14516d5ced43a9a4c69d417b92954a6e5a763f9a397ea471b8241ded376d64438da4b51af4befb1a4554ef6950220dd22f860669d0b8d4b501718a6f585718a2646415f80e51f2c329bedb4683c6f541fa5e20dded89748dd683f4a1f635acd4908762b081e6ce4003e98eec054877fbed6fdcc60db318e8138105410712553effeda15eb186db4500f702449db5c62ead77d366bd99f6a8176c90b9992542b338802bb00bc0af7371d4b6c178e9df0cf1459efe489ea07a75c13c512b5075d2e0e8fd0bbfcaa4411a562677fbcaa46bb6a7a5a72f93c03cfd22ae1252dba1c0e2618650122eac0815210bfa42848ad0a21f831091952a80c073c3d713e666c71e8b0d752ecb8f826a91aec1d18374e9e74811f534fc3b7a976757a1de65545d3eba817e9156d980d1cfa1a8157dc98364cace9416f9d32ab9a2349ebe9cd1f2335e7a3e647c8cd71e480cffb4d3b3376af974eee834e37dc6bb7c61913be36fdcfb181f37f86243e92406e5a3d19b4c2e26538b4b4b8bac225b1cd6d2f2d3f3e1a3d16b1f5f1fb5d850e7b6fc68f4ee2da66ff946af7d757e3b4d788a0e52aee783c56e0d3a7fded74283f4613e173c455f08fdda594ab2e149c8c953f4472c458c5828a26e32b4a8e106642bad806eb57a3f48618ada2f65344126fb4a2ba83c402c2a7f2823df37c07577ba8ab35871056f6c51c3171bb26b5888052eb87efd636a48b769be25f1f237f7e8e7afd3f301031075f4daa3e6b390102ab82cd4a27251d3eae04a2837eba4a77d7f7e5b60715505b870440d5f64bcc4d061e3858524d53ff4b1b791b51b8f971899eef28c3ffd62f08c7ff6c9e099199c0a775ca7b90103a5f29577b3b3416f818afa77be772f31533a7b29d4b93bdcf9be4de16c30b2dded35b05db63618a9b7a50af2eb3bb3d9f34754dbb61f6df447a7971859616cc005b7b1139913975f8e77069e3ce79c3c9999677373424e2c4172c174e95824c98f0847634d27e4848b24190a244c6e4751b7cb424efcdcb0eb5e1ee044cb537c3552bf8c3b2f0b8d54dc50e64a18dc9692a70f9dbbfb08e638345badd61c72d56cc188805c35454f89af298e2757fde9227796f3b8783ad59abd6b3fe510386031c5294e51e680c315180c06632a428c3ed2ecdd06de726f796bcbdeb5f93ee738c2c2154aa22bf88afe26ea8e79177907f58fab989b0736d4af11a85d1bab7bbc5bfdce43dd5bfdc49d4d7043dc89452873c0e10a5311629b549bc0edcc85036dce268c2c70cae9f9cd228cb1011777876f59e6ee4d0322602d33c6e7cbecaf4dc8e0f69f7210b2c1ab0913dcfe11d83d7b8c7802183a4841161e981244454914c0e042042b87424a0caa90b639a7edc0989f313637ec6a2082296eff56032b6ebfe65fdbffe430f8b93e8217453187e6e9f9983225c5eddf86f024c9edcf3a23b440e23ea60d269670fb3d93f2bad0477c31450e266031b183d9c31221dc27581373a51013536ef7f32cd5c0b1f86c208580f20ea5451e8712d435ef50fa3d0a0bdc63bc617ba073e0999e9943b12df2ccb41ea53f7428f71bbce199cba9fe0e55977b705bb5b1c033dd2cdcfecea14db6457fbd404614357cb9b2bf9e3c2335d04064a68136c00a5e109fd60073b26cb7b191a707698aa00c8d98e09931d5f6fc29566d565669cd0ae0ba35000b4c20925772c1334e041354436772996497bd1a7ee85cfa0e6026444024a8eec45d324a95af710f6fc233ac721870ca1fe686cee4d484c9697043ed3a136a33f11e721b9960627e8563999b9b165ad5fde8c16bb36d453c257bb4eff102eeaba46d1b7da0a7b4df3e4d7b9a29b588ab9829d03521913bff74d2886022787eb559239dd2de889196524a296fa6dd34027ea8f3da4850639088edd9c3d9ac0c9dd2fea6a5a5401104fc506f68507b698dd85ced43165050439944890b5d03848510e99a186c5ac52bed6f148023b4c4ced59e6534d91a18d9af10820a4e89e465a6953b0df2c4f03835917d02a2541a785cff530c0d0d667f6aa2ca9d56d1cf5e22c9f12fa7c1cc48a7b297c155d9d699041acc62805142652125629cfdf6d2353299072165f7955f84834942e5e7ba9de79c25d40b9974f7124a16e172d529a88ebd6db59e4eff6051f672e3ca9528642f5f0df24e7b8119b2cf461f63437edd98a75fe30be5adf1b2c5c6cbafdab06c29129b11710ffbfd5995ae91b1aea14abe0f4fff61bda61b1f6ed764e3c3be2ea69777798e76bc5349a9eb04891a7a9117f1f43c69b03d0c71a76b90744dbb9540d24a27dc0d0db60c38a8db23a0499549242ba4815d4a2965a8237180f905f835ed0c31fffe4f801a6c1d18302aed695009a1cbbf713049a8eeb384f2306c364a6b6992286a48a1140d058d5dd336068eb738ec5bab04cb8744e908af49279dfffbff1b365e70fb691455c773f2757c3240cb0deef81d3abe18cf3b2c37a8e375580ae4b24b3a74fc4dd324dc43c7efc872d8cf862719fb36ac38ec8d196fc3867d5f66fc8b0e9b3de199fe2b4575d19eae09db491217dc7eaaa46b80bac6c6f7cf275d73e3fbe7e845ae92311c1f9e643eacf794e3c3ed9e58e08eff74fcc37cd84e6ebcf47cd878f6bc28459334d8544983fd294b59e8a2d6a0f14de3c1a6f13b6c5875d8f0749b85427d0ecb42bd8c453d0e1b9eae0ceab736dcb6cf865506bdf5a2a0d387ff0f8234347ee3e30653f8b8e567c37283368cf9518d8f6fcc37515f287343ffc279618a421b64f6249ca1cccb6783ec6e4893d8205bbe709abeb0936929b79ddc7eef0b3d098f5c3be96e67dfc8561af875dd6ebd03cb1d7ed22a2e728314859460c223601f38082125a45c1b1b9b7eb9b24208b11b9e6e832dc383d25015301e10292172cd245ade496c910591c8d160277b2270aabdf1683c35ffc794eada37c1a1394d5030c8e7c791cf38f2359b23edbb5cf16afacb1fd2cfb0fe4147ca16eef37b11d5ce309f746760bbf5b08186c4d386384c0ea2c21427ae5c66ae42e8e71a9157b317e02c2eb533d0c052b0eeb41760295861cecd6c48ba9c94827599741dc9cd564f2c707c248a15525c3950a992840a24810222215c4e34218c153fdf7c01448c57132a29fcf0000612ad2f80186d41024a11d183842f966c4ea0977300c6162f62931e76b4400555c0d882669773f00593adc5840b1d2c30c20b212478be6092c5c0228a9d2040e9c1044658c927b1aa013f50e288252950c1141f9a2065fc068b1a6edbdb70863bb79ae3f64b207cb5a7bc1d5129db308866b9a7654d53f1a0860fca5cd9d1af2251676884deece746e2a090060ebaf349df504e4e131c12c9e690be67f26a7efd74a57d35e45cbfa3796bf0eb7f43843a7ad2bf7c06eb257da36f3e27471fafd873db630e5b2c815263064ebc93a8b2058f0c3ae20a6fa025411c837163b99c03307690371897f070838b2634006307968e2df0831fb0c8810849cb8b30a6fc400453088109487c31a7972aff9f5f391842073268c213442c11c3eb8ba02080f18227452bf9fda530467902174c6cc1048a005c918226bed0610a1e94ace44f9f7f3af54005ac267070022a8ce01b68118612583b50a68ce03322dc67e619d57c1b91a4bc60b0170cf692edd33baf544d2d525e525e30d80b067bb9742e49583192b064cce87cb2e66cb55850c639a18c73ce71ced76bb4129bd34a6cce199b738a538c2d69cdb9a435a7cb35676b4e97ab45bb1dd124838613977fda94f24306f11f32887324188c345fa294dae5c0352306fb65183456c02a9d455f71e5b714917bbc5e30a25891e83cae968fac2c9ac562b15855362b350c8a444e5bb5ccb6775e691cc7716461b1582c160e93c9a56b69717189f122a3244386b794d1ae0da88ea720b0c556abd56ab53c36c2c6711cc726ea5817b9e83c2d2ead56abd57a89318ee32873ea66ccd8992c1818914687a23159ac98524c8cb78cc95c27b82df2b07a44511445b1d56ab55a2d8fb93c168b35508f1dd4af1e3ac1b45aad568b86c73ce6318f792c474c0d1b374af2e5aacce51a72c15c44ae98288ae27cb55a6cb55aad160faba75b35ac8d1bad56abd5ead7f1591c3964749474e8f0963a3ed9fa71018da2288aa2385faff97abd4eaf2a876044b1222b8aa228e298aff99aaff97aedc89143878e1d3bc05237bf225b154f3ccf7265620b04ff4f2771dc7eaaeb04f4ae2d73e910b7ad8a9938531de8fd00bd20eec495f27ea4bc203ea6303f85e90240c7633e00e638ce946666bce54c0f2e4fb92a834d1e371e451e56e6dab64ab2613d9da8cba6be1b5765db56ebe9f49fc15280fd002083f14c7f06cb60198c7b30cb88113e60b90f52e41efefdf2cf451170feddbafc1acda6bf40f502271ca72aa2be64b73ae6e3942c867daa22fad5a011eeecceeeeccecceeecceeeeccecceeecceeeeccecceeecceeeecceecce011b13176bda3fd7903c1f24994efb26f73cfaad6b64eee89f6bb6d734ad7d6832a3d73ebf527a423c8f795f46e429eaa240f44983b4c8ad34b8c13ae67d1646a7e853cf66449ea2bff19091695856d4207d108beaadfe695703f5d841b158518bcdd3acee1965907cc921099344417650c399115dcaaed2913f73555fc43b8760aed259511e67cc5545ae9a2bfa99c83de4c6ba8c0307928ed6b648cad11d8d46a3d168c4711c17842eac541bf4837ec4ed1f715342f0c4366efd7373421b42410eb6fa04edfeadf69ffabf1feccf7e40450e15cafc410f94d0e1a0df77b8fd73cb4173ee3ffa3c08483841ed3ff53f482325cde5388ee348b6ab11c4959bd52cb5e129b3d34a1eae03016bb97d6282c361823ae258c69534387fc99c19f5cedea9f73438fb732a3c33df3f1f8254614e166bf6ccd6fc99ae09e42e07f2d183fce543dc43f6ab5f3d04238a1575ab5bfdd3ae06ea51e24041edf78f5ef61cc633387ea8fe956762303156d462f3cc51848d41af2118916449568f6cf98f0b88880c456e90a2e40969686c6e5c101243901dd4f9bcd5d33bc83d449dd57c67b9f7ccd51c493b3811b9825bcb3017f8a655de126bd00222acf85de01ef2f994d110f1d40bbc825c2255e8e71d5c1eb51e50a084cae55700abe40774e099962bc81dc943af60a5863c2e91b08242a872c98dabe40ea7fa9128e9211d2413f92375b8fd2cc0a0f20de592ebda248581bf8dab56198a47a3913dd20487be36fa23ccab8dbf6f30cbb2520d6a68236447b3369e10faf2de34d712460a9bdbabec39ef7c4e8be304f5a667c07172858f41ae20ade48900f7682b43c033f4e9732c4550790851985cae3b16d490838478df7da3879abde7aa9205bfd6966d33d55a4fa70b5ecf4a181ed494fc1534f01687096af6b01a4a9e2ba3740dd7352429d55340aef27edb6a3d9d9e3ee7db735bf77dfd76cf9e0f1b464f92778be125a50c5d214776caf214fd7aaa3c272e9d1ebc9452c9e329ea7d44588852290f7dd9435fb65620f5ea45ac3da2f285942f603a88f084e965a1212cb9fd2cd2e5b2d0107ab892bb2c4445ca95dc63c200c41076b8b28710152b57720fcf010c060d80e842093a5079a28b15738a7a300051bdcb4254b0b8f2392dd35ad334d6a66bb22b492ebef8c295052c0a952d8060ad9a2b2a5a0c11692ddf3dffc6fd9096eff8391d9c7e2ea749677372748a8c4288c4f87533c2ace9b99f1627c725e4186afed7cffd9052e9ed9190c656a6a7a91c0ecb9b6c4ef594e3d467b1396ff9bbef5a7a5e717608f79dcb777fc4f4dc0fe95c6822509f053551d3765f8ce7be9797f13a2b295d9ab8d91cd962b95aa29511e345ca0f256b468b3b3d8dd759c13caf5e3e942ed9bda973b1394d705c5e86cd913093cd6982637a179b235f393972e446eed549970f654c96bee5fb4365160543bff743e4b78cbedfdb50302030b1b2849628ae4afff24d705ade7bcfe634f15a38debfd89c166db758de872da2b2d759b55c84c560311a1fcc77fa667cec29cac1bae755f7a18b32bebfe5739ae0c478ef73785858bde0945e86cd91f1a56fb1394d64d86e79e5740ccb835cbdd8d1f4bc327dd82e934565940e8d2ecf2b178bcaac901df6141da2449e72ff1f53bc972bef5dbee59be098be8482a1f42e8f537a1757a964dde5297f93edbed9f2943ff7711f3a8bb3475a473acbd99c262821dc3b80579c654f0da1453f1c218820824471e5393cbdea1e07ee592c6ac22044e5d5eb35fa1311202185145988e28a579d3d820367c5175028210e4309f19e08cf4e916bc18a8a809df1f20e6e385bdccb15e73187b15814ce53228f5d7f187ea8bc420d91abeee5aa7bf6947fc9a270baf7be7bcfa2a6154287601a8bb2b41eade5affdf8771fd220d4b43388be86ae4fd774796adc3427ad78e5c59a54b10413ace9d25c9771e0f0a2337b462c7645cc0a88458fc33051e7cf35d2b782c0b72ccbb64db3dd2f84fbb7addf4b37bd7d66b39f65fc0a55772f197da7f41976d30de0860cb83403b8fdf41bc00553dfa50230b1aa524a693eab2f3d6bb3d0f8a1865d4df8eeee733e3d006bd49f73ffa1ddcccac033f2598b6b8301ae11cada90cb2b3cd3c4e5bfc145f7871c4628b1b8fcbcd9ca22033778830faafcf6ee1678866f5051a545c2cea04a0b832a9f7f22b16d769b42d4705e1ba238d27f979db8210ab57d5f7be50d515a88a22fefe886a8f9326e8ffbc9263e1904cff08fbe9caf85ef001f0d4802284432b8eafabbffe08667fca334c8577c3c3285503c6990a1b8bbbbcbef863c6e9bb374f77eaa6d0460d5c953fc32218f3b3fab13ca75296112b9da6f35633ae794da6724bb72663493ff4970359bb6ca06b397ef3379e5cafd24e45c593b2a61e07d9addeefc999dde6d9b05dcd63592b99ea89d520454a31fe87efafe2da3dddda72bb73b67dbd03cc36f44bb40f8fa746ff7ce54c0cd2ceb39a74e2625103eb9e25896a0b2151e08ba94fb78b5d5f934f4cfec0cfef55249bff320d93bfd7a69f6d99cda94ddc7dbf6a4ed85ad5e128bd7ab7dad45b26cbef767af8d7e7b2db39cfdc8ce90fdbc9b36c3f9ec0579e16af4a99de13aad824bd108a001df08e69bc0ede7d484f96f02da69bed4be69c2c0ed37dd6621b55ce0f64b4ecd670d68b706a197da1af80a0eee594f21b891833c66b807dfeef9e31ff2ca1ae4959bd58f5df24ce3a081bed3a3aeead59ceeee3e59fad4349a4580f49bc50135e4c69515e9e58aa75b919e67ae76b6e7615b491600fd11ce5c912c0f3ab0acb6efd5c8320b806628e05806084c10d0b164a7498002bc820005104c4a88b0f21772e576d783100592eb4f815314d7ff7db2d4ae61212bbab82c5cd7b9d2ce6089e8ef4f420c49ac878b6005d0bbbbcf6d6a9af6528e5e720cd7689492b28feb1e6923a594cd8300360798733402c257b328fa3368300051519ae50635da5d69e44eeed973e7462f49a7292adf90074b395fda90061e77feac21459d35629d0d4ad5f6d2312e5d4ee949393b395dba949bd4a8b675541b4992a7913a2da31cf38ec031cff4702c210e56aef6a8d18fe4eb5c23538ae0d28f86ee665686e00b7d7e95a57de045165e14cd188279f1c48b979ce24242142f766208fd48192fe768292e2965dfee96dca37db08284960b154bba70d28514d22b56054a1836a47852a54a8f8dc2e408488ef0248b0289771246c8c208453041507430d4d1d041900ab820aaa23d610501f5a542c1a77bd85d76a2ca8b8f8d4a65278866c0e2c9cbc23df8869b14a3d93f41748809af04b12533462fb05adbc6444ff742098260325fbb6d0b43773eef749f9f60990e4c97ff8ee4b4393fa6d4c9f24d704acf712c3687ed578eabde779fd32424c2fb211209484421ae8ee0e0d18838b0fc919b26d997de2bc1f083a70de9dee3fe4837843be2d94a22591cee06a559ced2b7443cc5ab22ae92ac268d246b08aab5d534cde39a7e6dd4a0e046ffc1f04cc6e3b2ab504fa5f521fedcfb73b67a8a9f394e7e6773b89716a703713ce7c6571dfda671fa396e6da8c5f13ce78ddff38fc6539e3af14cf6347250e787a7cd5319df649f6da42c3bb98a53d9a9deed74334dcaa905c771de49543ff73a2bd2876a8b8281f4a39c266d735a7653dabdf5d4be9f52ffeecee6cca694aff5f481639950136fcb97d30447c6b7d89c9697f1392e3fe35f4e50e973594e131c1a343e67c6a39e437d3a2b1ad9f30d2710504bff84d23f83ba66b65cf5f2fdd9ce2c0aa36951e7b8fda13ece583c3e6c7cdfd8b6f73144edd3c37c3f8f2690ab626a7c936e581b16f5f1aa86654fc5d8eaa909f3a7ff78c5cd8f6fa9a7c4b93f1096f7e9b9e9d9cbbc4fe766a612915bea274e1aa8ebbcaefb2cf3ba2adc1c024caa20a5952eeee5973dc711498e9b5fd6cdf87825e37273e8e5db6912d2a2dbecf9d06c4f4fd1895a701679aa878ac88aa84ee34965b50d73ca8c89ccc4aef9e99aa256710ec66c87a7553356fd19ab3f4b9229c996b4aa5b5a1075cf223b8b1aec099b57cca2dbf6e79056bb04044e7b1e7773d59126db1fe977f923f25b9e4df45125cd54d2a88aa5b0a17f00fa2dd07781be109c1828707a2d822efd184932fa978737d955fef371fce77cb7eca99717cb9ef238e698a872b4d348d3f3463c1a644954db64323d90ec4df52bd54fe76a374db2608323140cfd2e8fd3ef6271e4b75c8e759d398143bd60519c44fd14d010a0d6d3839c4d83fd04983a70ff57008e0428d0a7993dcbeba71a844783b2c665cf07180465e3b224a1007f1c7f09f853c0e9a3826cafbd6667b8a515d4bf0ac0910005dca6c129c59e12a7a61916c38c953f05fc656855f52fe2fe37d8dc1461e8b67700e9050912e5c615d235934643c2f2ba33a66d1ca06be43d9d7e3e48334f348ee3cef932208f9ebd00ff17fc794810c59244fd7b9afff3c1f934de04470389ead2d36e806399ae08cfccb7615e9dd568ce9756e6cba2f9328cf92dceedceaf3d77cecf6955afe617996f64f6cc1c773ee7dde8ebbe1b3c35793c359f8384c4e063885ae4065789539cedd915e75db7437aeebb55469d34385d72fc648b7dbe9c1f935fb00af4d47cd904d36c10dc09ba0126d5404a69f694b6d860d694079c264f8d62f11ce0d5f043de1b7676e87e076ff42ef3ddfbd15736c133b2a5f53162b99c7de923509f4548f62807f0ea73b4621024aeea9b2c6ff5b31f524d9f59d41cd2f2f55b2cca9f572d5f6df5ef64fa4e9af6f5b32935513f219ed23efb50d3baa005692f7fb4972e4d08b53bd0ef7e87ecbd1254d273a58f572c1fafba63f988784a7b1a4f6ae9593e942d98b74cdccfd07faeb7b4974cb4972eed2590f6f289f6128af632487b1945d35e0eb54aaeb4f0f5845bd26018d7867943ffb99a6cb1485133260d6acf69cfc214d53fcc96942c6a7e89c5a266e987745fb2479ae064effd11fadd67da4b517beee4840a3e49a6c199844783f3ab070310f5e5fb6f9db9b2e682aa947143e9878ed780f95bbf4dffacfd360db8e11feca7e9b76927d067157db92eafa622d4d0a65d2653bb5c255d9d72b52b0529ea74f1c03c459fc2b6ad56bee914a2a8a18b977ed8b077d14b20ca86f5179461520657a136b959140cdd7bbf6db6bef739a60fb53d68fa509bb501a7bee93d45df0607f0aa0607f0aa7b93cdc9f10fc14bfde43daf260d0f54e9e219fa36cc4f67553f9d15d7c214953edf50ba5c4e1aa86b1826840a2efd7ed235a8a290835c800561e546b9f4850c5dba834b5f3e81ad40bcf4c25aaf4b735ceaf2147dd3b723e5e8a3558358bee46388ea12a84b4276baf7def4cdafdf46630dd216593e09a31b6dd7a5f40856c9e029aa840b8a4b5f06df00dd487464b7ed3b8f6bb4df5a94c153f2bbcfc655fed45bb4594220dda50d4feedfc977e7c9999b32962729a5644ffa902bb8f23243e132af3045dc89422c9b3b2e7f1743fed20332afb41eca9f4f03869fea36037efdf96eefa1acf3bd01f3cee0bff96f2fdb498b91b9383e7bb9acdbbeeffee5b46efb6e5c1b971b75db57e372a46efb622ec775db87ba5cd76d1f8dcb79ddf6c15caed46ddfe9722cddf6cdb85cedb64fc6e54cddf6c5b85c4bb77d2f9773e9b6afe5722fddf6992e17a3dbbe7a3919ddf6b15c6e46b77da5cb9dbaedf32e07d36d5f77391addf671974375db47ba5c4cb77da3cbd5e8b66fbb9c8d6efbb4cbdde8b68f5eeebbedcb2ef775db372f67bbedf3cbe1e8b6af2f27d36d9fbc5c0efbfd0d1b32a6ca52ca91e3e5861cb8f2bb46ab0188cbcd71a7ddc095dfd44a7ba0c68044f5482b187e904189ecd9be18d4506221b1e01e3056554ff51385128bfab18a57d432781b0c1a2819c112bee83caef19f2d2251675cb10b1a48d497aeab5dc7334eaa945778a63bb06db59e4e3428a8e1e9c64f9c4cd7b4f734d89a265313825f73aeebc0c5c8bc67fdc9cf6a90a717df58b70a273f979373e87acc9390015dfa1950366641d92b1bca60194fd6d3353c99128f653c194fc693f1dc60cd1f94108ffe74cd1e70cd1c8241a0d155ecafb964fe5cfa28eddf5334a7beceea695cfee51dc0ab179be312569a6cc5ab9717e2296a038ee78267596058526d930b6c8f2259213b2c5f1252b2397265fa9631e471e587c2f1bec479deb3bc575faeea7b2f43e3881a7aecee502494878a59180dd24d7bfefacd1ff08c155205fa9cd67d981171a4700e751ce98bf5a59f11b5ea4666252ba222dda148286b8a0eb04b9fb6e6d084f5eb52fa9ae7e393ab7e750d57e1e403977e4be99a1b973ea775dea7b3a29e0f118553fa2172c5f272c5f2a5e7b4aef4e9acd8dbc4eda25ed03e7bcdc6ae91f6be2d2341e5e690ab50da7b5f7a193f24c67bf68877a4098ef73164fc9118b01b647c522cba1951a9063586adee65442f6146b4f362519acb4feb755637cd953eef63a1b477a13d97be67519a7dcdd2cfc98aa695308a8862551a34b25dedf9b9cef3319134483f09ab41fa738a3393329b3c0dd2df6990f62b236a2a3223781fafdcf32164c60deaa8c55a169bf9e8a307f98b572b87b96a528b030575bef6d19b79738867e8e3f8a1663fb29579cc0fe790bbfb4fd704a2c1a8244df685410c55cd080000012001b315002028140c88430271409285a9b2da0e14000b81aa40664698ca835998c3280c4346198408218418040644064004330025b20034c0eb84571269dc9300538f262db5bd33a96126167a6e009d2a3037a01d39a18e9b97b7856754b6380d1a8d20a708afe7ebd9dafbe8f721b3b1efdc3c59dd9fd5a0371efc4798189fd507c015de63850ec72618891885809c5d9ab6e660791dbe78dd4fbfb035b1e70d75bc3f39feb5886e6e5547f7b40bfe1083ca156656c01dd45fafcbf4d8aa7e783fcda305e66b01141f07ae11f3e2c0d641f0852f0041e4b5a16b6e70f9b0dcbcc1c263a432d6e41bd3fc4594e5ff82ef876df0072a77953230ff8c7c46daf10511dcefffdff1b3cb832cd2aec9c67a475e362588dbf3829397e8a883b7f7c9a2997f65ca58bc0e828606e485c79cc6b47ce67ce3bc0e37041f488734711b34c1404ed2dcb7555efa8a98c1a0eb2e01fb9470dd3fad25034ae8fbeb77ea331d3997b1b48408c20212d68cebaed82bf0fe056f48b16b5433d6c505ab6c4f8025776f0a7542ecfce36d2d7df31d313268316f49c798aaf5eea1b67435e2c71d21a1e71684c6526777cf1effa9aec4c85a936897d16c94320a2d9693958bbaed22a0fc35b1626bd83c206be88cb017cf9b6ff01d23cbccc8e03288fbaed925a965b44e1eb5f5cf4cf3d6da444d0ed29d58acf375ec0eca38f45205bf622d870d2d53b3682ef0f6aadd2fe9f9918c8f4f814dc7ce3ad6b7be563ad08d90e1b0aa3bc050985988439032b0befb27e476a4bb2b3d7879b2991b7dd3f951b2caddb27e8eada07318e7bee6bc015c460b89dff672bc8d1d94d6b97998971a8dcb02cde5a7bbe776aaea1286d2563103bfef4acb137be8b9f2fa22a10a06647463f313184aebf6a0791cfc338a8cf9453dbf4ebb6a15e92c2906bd4352bfc9b00950246b82c93c24ca504cd4d03a8ffb71ba150c7c7a248e4d0ed7fd9830d3311b228be69314ec93d830bea83721d541402b0224ff09499ef4133be68c97a876631145c448c70958b8dbb10cd0104b8087d1f6f691bb471f4624a25a9e59f5e5283f589cf2a1d46b3c0e2c60fdf75ae19f0e0d51631360e174a63b4836be5a21ab26a7aec74e2b26c45cb2c2f8a0a85c346e0c04dc5a7eef29da8f570a6c6d27986c718de6714e1d81a27cb35591c9458584d1eed62c035c29ac51cfd6e990429fe8ae65bc8c55461b8ffca204df5508ae4ff6e39066ddd6db23e182a7a50169770efe8b1a9a399ac5fbc53f057c662a6ee69f977bd5d48a62d5c57d1eac9de2ae3d6671e584b1a10684ee3ffba6e92957298933a63819467df7064866a4f7d937a3b0a193f3d57fdc55c9fe82ad5d0c2c4901353d694b91126db12fdae333419c634d3aaa7dd21fa458c3b04fbad77684a32410701f3b37035f1d03c573ba23ec3a4637a1543fb32525ac5fd0554f3a42a70f066344273d7b2dc8397f4543331b510e148501a53064e153cbccc77f80220eed0e30c419e8c3d327864082995e1535a62904b70cd06ee72297d9506e64a1c50eb27b706e42244fbb9920a1d787de4d823711b7a2ff2ae18197eb83ac4e61a2d463feb8473584c07005c8952088b820b622d628ddc2168f04b795022c027aec7091bf497186f9dc542155b73a50affd93a8e31f0a6ba536813c958b652c12adf09844bdcc8a78606e946b34f3d6b5108c42a8f24c6a9220e4f3dfd0fb43e62c0f374a100fc0f4bc2df6f0f1ac1bb98733638d1ca4bad744b2630688118dffc8c93f6704c2277b6604429971aa24db55f49dc37c6be84ab8ce78638fd8bf66e07e6a247fec8843ea674c47989f6e86a14db5c075bc267ad707cc1de1f64aba2697626493a1a2c61c6ba2180ce05ba0463794e8c06696c566c95c557d5f898c86c1818b15f43d69cb30a29a88d79c8de8e4034acf4736eb971c96c45f2eda0d1759132bf686d389a347c11c1726e37e4d266b32b17cc663059256dd142c243e955c1349b7ad629b60a2166d464acf2a37f77bfbe79ca00b7b636c9cebfa4f06d2a356179fc18dffcec20c2ef77826153a53f30c3ad9a24953371a37b36f4947501ec66a6be05eaf119112a38a1655529a98d51a43ec11f1f933282e0ed8d7c3ab23e5d416b0aaa4313cc6711a18241e8af1143cb3c70804d099219390c359d3d8862f54c28e947fe2dd3d1c3791b0c812315f6e4f56c7f43c24fe26a4a1abff9de899accee575a21c8c77394c850cdda918b4a9da2fa98bfc9fdaca150736ebc1673e17fad3cbb9539adb5f86a1fec1b92ee87b16257814c67718461ad98e5a5271c9aaf8c44008ea8859d45b763480f624c403040047486fd7327a485ec4f19dd05ed94663392950bd06a50edc885afcfc1f49a070fd25d26e5cebd6b509496693d65db34397ab19ecc68631795fe252df9767e44e7e0b1ce3e74c2d091cf9b4c3fd6ca5342712e2f96199416c0f28b8ac46a3876cf3dea0877eadaf91885770b1f2c98261de8e3ebb06ee1282375f7ba9ce6c7a894fc3b284cfde22265a2a83819f3f4a2fb50bb7db3f83764f30130dd9da3e29f1017a407459f0bf5fdb348895da2a6c7b468e13503d0287b06d3d5376e360641b7e8f60c76f2cd0ea64fa394fca1890f1cb732da5be09979ed8ce16c750439d710d3f7147a786f683d424b22c85c93fded610ab845f2eaf858f1c1c2ca32d386bc6806c350f6c32134caca9d51c0fc2586cf812a6ae807a6c1f44a1019ed4638bb8643146e3fe19f95604e14170aa43122fc97effb10c19e11c6587232e930acbddb76c678baf0c0a687e75a8a5b8a163d511b64f8bf44cc17583c361beea4511cf11ec80a98509dcb61e57ad114357676ff52e65994dd6e088cd7b7ecf627f01f4de07035afe43b2bb8aa6f7612e8036f778a7093b6de1d09dbd4816b64e5ca526827ab36928c7cd785ae343ea785fabb9d13f320a6addf19b9113305a392e922dcacde3e4b8223bccb1d3427388b230d99ba3d4f1e517cf6007a24e583606bad91ebea4395b3446a76663b5acee0fb4eb5fac5d30b4d9ba668231e93d547f9854436e3d3553b7b9b7ca4f9560929c926f357a84c159224900d796d77a93ea861d0af6c2190ec20eed2cb9f822831b3ba76f963be01a74bb16e416cf86c87e8dc13d103d14e35663d19dc12acdef6b266fd4fba7d05a489fa156abaed0c7621e820e050ddd2dbcc8b62b15fc53e499eee9a7354189a5101fe4dff2466bd6d88d3e855e6b7642437b492ceb8f59f356e05a166f69a32e8f145fcefb53acdf19bf62ffd6df5914579b5f6ca13986ea91d690c437b01e6e646aeebbcb022a2ba4b9a6043493cbf5ada819bac5630acb47b02fdfdfe1da382164eb83454ad2d364efdd4254ca16e017bb3ed45b4a6cd5e999d92df961c5291dc859529f5870b927f4e6ef437d078b15e5e71c6edd9c413b73e63074013b6aaaecf9cbc5148d41c7e86df72ba96523d9d008e076f9a573ed72ebf63859646bf9cceac42dcd2daba96d6e5ba2b0c55fe642035419da50c14df78d462cb923c9889615879646593fb6397637190343f786487a52aa3f9e5413829291a43aef77d931927b4f6c375bfa6e562dbb5e842d483fe2413f1042ae5ed433c2625dc7da5e79e684b679bbb53422738df617e29eb2f53962f680222dfd71c672ad463051b584cda0ff88f0a6258689b495c31822fcec2539c625d24c41c42de981f8d774905aff49a5961491e48edd9733c85c77bf848fbcf7f5231b9a8ba0a6c6be831b1eb21e93bb661e4d97daaa46084fbb65124ad56b5419b78496be93bf47b994e83c5d6ad1e7243ba3eeb81e7341c0d49076cbbd6d626487bcf03edb6f41d6e8ec63380ab080b84d524256e6026b8f0c1083feb9af965cc15a75d302e9874a6d79f6d58903b592d6cd413ff1d8f1ae781e0ba0687ef378da50ea28ce2b1d619349df11435fe8afc19e7093992ae6b3da96a1fcbb45fe23c62ec92ca5a0f1eac2fe748d11d4d7c68dcf18c565b106c507e533309e1733b6fb2d6e8263f8dc3ed040423a3b1d922b01c1a116281494be9d3e260cb41d1f98cdfd555b33f343c3a122384ac6c827bcf3e1763b344bf2090e16b39b75c40c6429f9ea046fb950c912d6256f0c2800191e3b85d57bcd05a0f896e21fabb6e9163134ae53d25f732e773fb538a20f5305853349458a7935623df4453284db3ce8a67ed3c321585620a63f63b5c1c721f0da0b4e9f6bde2bb02246c299c0a96659ebd469d7b8c8d3a4fb2c55c45531e282a273b1fc5031e3cae8c10938a0c4d88b6c47f6016308682eb50f0d0ddcd0a30544a13960f7e989f3ef7d50f1bb221ac4418331a9d71637f23a54eb416993f36b4e927eea56da65cf86a0d0e87dde7c25fe737afc04ce893c7c61fdb2a909b905e62978579c3eaa93f56b12771446a6528a0093d4f01404f41bd13b505079d6bea327020e972bb5f37dea05ea1b681980cc1f7ce53ad1dcd844ea7cf766c734a5c4281883fd5e075435b364b6f23ed36b1f6ec64536f52cf3387b6135055f3b382312283cd110c478cc671ab8147719739bd4c4a327f906d5cf9e517fbee37edf2dd0df1f5857c71cbe411d026504285e140015e671383caec856525f6014811f9d221f00fc12a1194aa88ab6d7ac2840f62024cb51e421439214135b054dfe56f261c660b8e0c0674c1605f51e57b4a6fe0c67f1d88b2f5c2211c08c9207ac4ecb032b5757b3a6dfa824e27d49be8fd4de4b2c5863e66c95b879f1c879d838e26df0cc20b12671ea3197e3dabd9577ad6653c466271568b99195d450a2486c54d904cbc60a5469ae164908cffbc7460afb4233c4d242ceac8eb76a689e237645a803bf21ad2a9ce96c3fb1e2110185767b88623e286911db7cbdcd9389a36078df5c38d3e442024e5fa354be5bce3cca8f021d4f85a5f2234dcfa3a00cf762099fc25ec88fd74ea36c770372a781828e1c0adac50aeb2e34e80ea38aa678d7e5b575a7a10e0515fdddfef2a3bc1def5e64c63e1a4bc21657c9a015d3160d99590971bb22385ff2e0b9f3f049e141eec2b7bac13014b926925ad37986126ae79bcda0087acdeba008d6816c1964a2adbff0abf5efff0184aebdfeaaa242227fc2ce66a19bf38c18722b89069b6aff377bd09cedde286dd3816f30fb74ee3c5cb146d35dc6158483c70c485fb8bf604b022b917f6afb3b303f8ffad93e53845eef87d96bd5117046e8eb6c0ae08bb4d3d5d4e5356890d28b310483887411ba47af508fce33e900fb2cb7a4d14d5e0114df8a84d27c129d756380cc1136e981b028fcdb26d8bca92054a03cd1b0d3011de54824f463661c50ebae182fbc38a081b92d1841b3b8241fab72c38e4077535d0aac1c8be8096625e080506dab55877340e47613aecc1314e6845515a4ad88463c293541d28e2943d473f19aa7ea364f35c57da0a8a8a0c8ce42c2516d1438836662d2e675e3b9ac353c938d55863fc8541888d5162704f495a572914f3aa59a948f26244ccb6a997b82739ba4c5cf011c898c701b109ae2f3a25a088cb471a34db02203c1570fd38b5ac4fb5fe8c99cd5d62c288de2736be758d60146195957d8b67de62b3ba1cb24e16bc24de03477ae31ed25e5216e3424a2931e73a935cc0db01fe4c159d58224b2a7a9fbed7d581b1182645e9693db198cbcf50b151fc002e524d85cc11c1ba00f2f3c7ee6b0ee5cd337cac77b1b60de6b763b28702ea3d6f4349e71f7e59c9ebfdcdfae10b16714a543e720ec18cb124562c62c8e38980bd2cdf6251aec88b9fdfba8838a266dd21c14c875da3cc3be3f02f9fe3170ab85496898d55d9f18591a7bfa43571d0a68d0672aea0ae46153db2050fb836e154a2c674632088e488a7f80cafaf78db2f247c3aafc849895e5f4da365800a82b936e3c75a453a62720d1ee719c46481df767370d29ceda7d47e17ad79e2872b360ec5103d752965740c61160ffe25764ab1f0bd37fae32838772194872105586ef8815f07155a8afcfb1ff4b8d91151c7326d210bcf55cb332f179706b16c6b455879265f49cf9d0d41c49f9f16d8eb62ffd54251d6de5544eda34ef58621a145975ed78aa4084b6612e7c42be68d016b27686a96d556a6d29d1358d29b54d12bf59ae010e6e1c76b900b149d738ca68a2f7f35fcf07c2848c62158875b6287831b4cfa1c1b60c88f218c7f9d60d4800d1e4188ed612c55fec17bc3e3a9aa2267791e011757dd5417ca3b6ffc1aa4106da4090566eb841e173cd3b6bf4a1f911cb043ba8f2df8a34d173347df7f836ca0562ba6cb6d6d0b9af3422c5834395ec0e69b8a4e9318d533a218a75b46647f3cdd05d805229f66902e7072adf6b0fab53ff26085704c9a010bc79e4e401091468b92bca5bf9807847b47e1ba969ad8984a34e2aa980a8f67da3cfd69d79ed5a46df0bdd1d20473daaa30b338749acf01915ede89a0cf14d6f050c4b2f3370a357c1767a459d8d9780cfd80e7f81b42a1516faabb8067bb396013110cd06850761f945403612d3f17195ab06407668ac8683cc62f7891bc1930354bb4962e800f100a1643bd74fd7c47a4181532b6b682e2445e070e848f51310a85b468ce85430c578b904a60f9c905dde596555e9258cbf516240e74c6005fda7d0dca0b446d4f3f31797d8c5311e78849ba671652b79ac178d59faa072975e8c03652ebb4d814937f1673581bc720181a1ce56021fb278c09647437498629bbf5ebf52e0eccf8d4a82041dfb0b767cc7df17bfe31c165c136b19e3bb8d98cf1066ba7de3e139fddb7eb2be717fb1b21ea02dc60c8bca6447de5e41c3fd0546f72016abf5cbdbb78be02409db554408645d103268bbe15df3d0d859cc053a96f23da263bba6caf4cc2357b47be467032824b8aefced5a3ef9d1d14b8d32f87559386c43abed1148563f5ef12b849e1fb6d180a58e120496566b9c47a8299f4e0be30b8a2ac865178da60d1f7819d5ffad0423e7735eb24ca31b73f4d05a7373ca0361303bddaab9a6299d9d2b0e0316da893cade0a65293d0ce530666addd2ceb2361775f399906b57a910c8f15a8005032d24c2b6fabe99e1c0bed933bc9d287abe24b5f99736d66b297c152e484a0e42a88cbd8dca77480e3cc40c1905f771deb4467cb2dd902f7058efba058b527c7be3e85316a0ce3118ba88db5b524b8ca86da4ade4ff1587bf121cbc4113385eb95b7eebf2df15d6bc2e1b69b44256c6edf933d2363ae40428eb3d4dfb0c9db1ee1f8ea68b9c5027fd63d8ec8b2be426fc4f612b7e6b5676076c988e71e0d1377988adca4cdbb0e05bfcf55032983eb6c8ab668e34838cbda036b930f2c76dc2cf0cc6878d2204ac0060aceeb6d590280e6248724f1edb4f566fd58a93c667b96ca4e68d0aed49a0caf74d34a285c64ac24a002166922ddd54a30e6330b5a4c82f90979c586046b96ccd98d2ec8e67d9c9de65e082107ba509e931d75b1f06297833fdb7e90c513e2594cf4dbc4ca732fe7c1cee35892fe98cbfc821020e158314cfdefaa41819fe882759ef44e01c7610419a20ba0aedee917b072d9999b0237bc3f28d705a4dd921fb5e79585fdff548f8779cc874b1b23c7fa5d30d3254a59e597df2649821a58f1b06fa2e76e446ef5276119612ed04c24c07ab93129220842e13d3e4f874c828ffc64317657d3d53ca627bf8db4154c1d1a4ceb4ba105cb0d78f3d249cec44c2168480f499523376195b1c502a581b20e810824576e8e0a6e3c28494837c94c8977e02bff466c0bb7895ba40b8e752ce860d421cf882c65086b7d5100d6ded43886231d45866c1589c20c158f4348991318d921e69cf075bf0a4f6e843d5a0f0e15fe4a41088c72f2d75fdcced54d5c5bc6f2624e9ec89f76e6dd5b2aefe1ed13fa5612b21f45991783ed3e10bbefc7e3e75507abc3f854a8743b1d54edcfa6fa9b263f0e0504f8c416d29db1abbaf956d649c1f3f929bc1664cc8e99fcf6b2090d4e25802d6cf4541adec2eacccc5505bef40e57c59a630783ad826d8f6e03c83b712b155681705cfd7c48f85c674f00d5c81f2502b7bd70e956c083a6e63d66ee14425bbb1e38768c10f970504612220ebdd8e1a5eba9d86905b3ea39274b2f81d5b9b8a9d87e5ac56052312e947ab50d9bbe4f7dafc3c21d7daa05c3f4dd40e6d41a15b42d2d1e143d0942036b85da4d5b0a6230939bbf0f4f41e92877decb27c44c71b96b1d4a915940ab23700bb14983643864ff141a063f3aab720b56588caa7c4bebceb35595ded9e196312536b15585d7ce3d58bf4282402b3477614b43d7e433d84c23fee4e6963125ad07f6239a54c59da71ff6b41c48018cf04407757bc6e70e242e545d4224b64f6a2d245855671c61d370bfe856e58ca706700a25b55caceef1bb993fb2602ece812f8d3dd286ec068431c3d667057560b795b276e02f5103805611c8b5f1e2ddad71ac6365979fa6365c1a250a24ef0f3d22e15316ca891bd6fd3ba177c8f19c14025143daba4c3d814d10ccbfbc9e5945159681b252853e0801b447707edafc280a67b28a1098dd430acd4603b8e574949beb7e3fa39273e74d9e803b9b567869f3ad3e9d8c100153276d580590740943fa24334f70a034a906aad9b85ae722299598889f428d895f002c08f7358095266114fa46dde71688262bb0dc36fcd023e7c3c8a365d15c2dc53466948ac1507343a11e3957361c70b29d4cfa7a288d4aa29c51e5cd9f59229da09f0bcfa396c7cf170ffa850a00b2a8575a0d0444f1d9e1f732434080f7e7d1cbefb4b1ac13b529d715910b2a3dff971071ef48301ac28bad3e5b706921efec4e76f8f85f42a85401a1e18c0bb0acbd439388b0b6e8485c0e70011af145e57ae8747a653626de307459b12593a603a957d416ad672999d991e4280445ece59d3afa0612bbe9ea2e4bf272ab760c3dda3d4ff44cb360d43e63d7ad5398de7b8da9cca563387b1d1a28af705dba2a992a4d6a81bcaf1f55da6a1b391c9dc6e7e7e86ff8e9ddd417cf3f3eaf6eff34de3e060c3841b6c28230e2156409d40ce539704a5ceb13f5c731738a0e4c2f62cb7c8e014982d7559b31179885c682b19d7ec263d56651ecbfbc40da6c25c2a885803c1b8456b45066b3f761d65f2635c32c307c2c92c39551679e9a72eee5c3f2f95ed4b7eead55d63030849c443f70cac084b966657d404d09f2dcf0a77d203bbe7060c525082ad26ca7ae97d0b2eccd9673f8b86befd9e1ba1bb79aeadc10fbca507798d05403a6185a2be89a33b020831a1f73a732d694a5588c01f475977096e7f928820c4631fab231801e349310f9f9844049a009bdbef533ab2da43f154bf6d8ab424fefbe58b210dfa5032652aa2445beb8551b2f9b805215eb7fc61552ac2d8b422a55db15f85835f44700bd55cc24408fbe7be3fb32824551a0db2e7e93c76c90701dc5fe67ac1fc5e5e918fa71ae218890985dbcaf21761717855677b87f50d195982c60bc62ff6d08e0c0cf618ed2ce74b6c2dcfd891e8e557964152e590b734905fd5431daf1260c8497260b64fabf0cd037f58a2f08a3d0ac205d344aa47e551db62d3b27fb7cebf0bbb27eb89a404501c8d222e19c5b8ad7996d7fffb58ee862be7615633ac16cbaadc79f692ff73d402565a23f71ba1645f8f0380466a30df7e95edcdf71b8d602d22ea4ea6553a21df41ca858e7f1a3ef8852a10c3e96ea05938f624e3098e3816784c0a48d67a4000c48d8fd18ac650a043087d7f457ad6634a5271fffbfda73adb4808ec67685a06487b4ddd69a9ab40cc41d60c3c21847bbec91ff43f3f22331be157b9561dc7a82be71fca4a858736e93be935038dc77d2dc5f689bfb6f5e0bd819e57bd44601deb691461aafc8a48cc0848a7e256fd0d0ee40524890c707731bc3065fd54e7749c64b356afa7a3ee737ffe6e34402bd06ecd71b43a6e0d550358c9768279530a18d2db8a9a923b1e2c06215d440a11ff31d2468fda5b4f72a60ea459761ffd4684f56ec6d88151b7452ebf4444137550bf8905c7ae0e5c5d896ae6c248600046760380d970539a4c45d0546060405253c1390f3932134c02abf03c7e68e62699f1a47d8d00fd1fd91bb817e4ff5de0caf851e5f025606ca5ddcf748db6e70c78da74afdf960e4133a038d35e5b3836dcb4db190996868ed8312d770ec539bb179a6f65127d9811073253c4498676a87c1f8643f8d1a7d7bd3cbd5ac3f7b518881430eb71b86e2eb19bdd973316603a362c9ed9f80456f52285b8b33cf99fa107a74d59f3b1236274bbe3bd5801251f7c0486abc0a68dade49f3103f7300aa991836959ce5eb33f6207029393bcfa057ec1854610296f33bec04d54f74508a9c05d312c7be37052a79ddd8baf9e9be1bfebf0c247763722d357edc3a366d9a2dd7309ee5742339c53308b773ea4a572c9ba077d5d8a295d7ea725c10ebb2694a6abc1a7ff7472ad1e39fc3e74024738922032883ca7bc69fd5c437c57e4c1326282be0d67060a37e70a5cbb0e5a5e7c43eeb4b726e49bc8fd8b468c866e8c739f74b96598f91e5efe694069929fe26a73040fc90a8e4670a98010ce131818528a1916a2c5b80490bd8da58d3be14ab4333a8691c66419756e2a835060afbed8bd5d20239260dc944fffccaaf7be0f09398846eaa3d65ac9aa5bda4633087a1157f6396a6ad4fa02ef37d9110029292be0fbdb813d1ac30f98335b3ff169c6489cbfbe51f27a140ac359aeaca51010f56f88e2c9fe2a04a9b4db4988ae896e2eff743d9b0d7cb4aac886677a8b5419dc9e63737131da57ae3ca2bda00768e244b3baba0668956583b430382634a77633a5f8f82d580d8f18c4883f12e4f8915f82a4cfa4d39039986f8ec76bc038c2f021947129e517d35d9290ee41e99c1c9502d4dbff3a11b13f271f1eea91c18290d74a8e2ca0ce58106efe283b70d2485234a348ceac1cb677cbf9a20b6cb0657b602f37b1637fffa07c37052abef6267639eb59f5c7332d67ea31da5bb94e09c42e9f818a9799649c0b237d765e56c558151a96ca76c17c43c2ca2ca5b61a9f65b9c235e88505f37067d38fca781335023e84ebc8465de0bd048c31346101f67e483bbb20358246f510704d7c99a98b9dd5b7debc1eacfdf526d47f716a5e6ab70c4c6c72238eb92a1fe528a06d30d7daa05696bd395fa4973b3d9677a899359d3a77e525f085f6ad4c0be5dad95955a7a499d5e407a9c05cef67c16ddc6c4bf0e427f43103941bcb09228a7b8fcce46753134a488e77142d63880a517a93ef0fb93cf1a4981048da695245886de2025737a0f184bc84bb57f643382de4a5a09807b45ecb3276883d20d5af66925c52b78d96c54c6cc037c6fa935b62b7934f17db98b00986823c52c6d86b470472ca974bc01492cb3cd2ba138926a81f1da1a32f7922044af5b45a9292ac2c8c759106a6c3034dd5d05995e2632fbeda0c974def20eeed33570b56d9497d830800b9213eaa7e315fa94e00a053f11a8c100557493250338b8710b23435a1782ed54f6d3cdc9c59718d1e4e38a2a41d46ccd63e9fb494310a990faea162e7987ffcf05d183fc478e9c611b664103ea038670fabca89a4f01b5e7eb6bc06dd06f0394a2233e6a8b8f410e3d881a61eb96319c6832c632d51e4c86e99ec9c120cc24e11309dd09e1f2d0c8270af9ef63da62cf6c0ccc3de80c25e56744f11a86843935e871069da1215bfebe399231ec288c8582c8222e6da400ae01f8b272d23cbdb217d33949e0ac468366a3f8141c0390a7e0e8c2fdc6a6f42326d8080027662dd7a051cc49d89899cfb0aa9ab87be5e77ad6c4b931c14613c6523465bbd259e1569ab0515f88a2d678b378e8c0b0d11e64a39cf17db09964b61fad520bf3c7fdc1720e2120209111634a0af80578af9ae52006c69fd695dd7877404083265ce3e9b59a5663e034a4da2b1dd8c33616986b019351fd5713767d1b715f68da1dad6c89cbeda94480d090b7cc8f227e2282ce33de155da17583e6f344a6a7198be645fbc1e27cdb34c6ba712c6532dd377cdd98f9e0efc147e1cdccbda8adfbed43ac9fc9b7eb4a4c3d6c3b9f1c309fbcf9aaeee61cf4a018ae8c4bcb233b317a5fa568edfcb0d81a4c6ae81be560f7fbd33be992aaa860e58bcf1f1ab3d8f38e0682a3b32caba7753b2f8c88bea903d50ecedb7476206af7b85a2d691bdb61d984523496bba610a5032909c0063f4ba976f9d2cb88edf4571959d37592421a07cbdbc80e1b9034a128045f61aed2aad8d975b9739ed9457713bb9ce66d5b04de92b4959c26a59dd581e7b802ef1261ffdd3bffc78d0c59b55de444632ad39b8523cc5799b2767814be3e6934c04814b8e9599d353cfa8933450addec66b4fa7e7317ec04f57e4022f2509682dd496b7ec1dbd755eea49277782874fc075f8c167bdf7ca01a9036eec4096b75a71b8ac3bdc8b5afd4fcebc25e172fa94fb017188cccb18bf33e86380e9190523d4ea89efdb400ccc172738bf9095a409cbb8812f07eb10c87d58b09a8c8dbf756f61f295a06e27e4ce35a19565ba937f7c0521c825e649f2818d9afb2d7072179267e27b3b0a58e7b1bc4bf1754792c247b8dc44b7c12eba1a57a386fa7eabd0ba23f18a3d05e64fda1d8c37fa6eda15bcb342bab43498730f0285c3bc7803f1104513dc407aa9c87ee187ab9c0751302264197676b475e5945cfd67486aff6150352e08ea4b866d62d34458c251823999409f121c09f8b766976065e10a194dfa682bc40c1a9b83cbaa1a1d865b2671fc0e96258bfacf0cd5e6b7fcc6acf926f238456824bf699d97707dd484fbd7db1e8bfb95c1563aac4a82b8b34b44bdb867bbe86eeacd122b3c2165bdc3b69e024faee095836104fbb9546d0473cd31e4c84a416f5eb3670901b7af6ca1dcfff87991229dbbef417b45278949d2a178a26713e66c849ac266a8620bc6701e85c3848f468f18cc79ca263da00b884d6be40c56b2b77b866bb6708da97fb0652818a51dcb6714f3ba0c0ea4c81d9038c4961c86ca99073ed818f337b6ccaecbf2079281cbfa24b632efd2af190721972fb65bb088890432504b3495a78053241859c396051e0bfe6161490f372acb8dde88998a9f7a39f0e496a7d919ee8162277cc213d91c799a95a982fa4080dd8074d974e86e8916d5a210822cf1c5d6754e8c35e1773d2fd5bb9df123624348ff6f9f5b2e838691100635a9523b2a10f056e4d230b37451e8c34e518d6be691612a53ca3e3e30b3b8b3037e7915f5bc1b997d1dcfc54b17108e01e0437c2fdd91e2917800c2c46c5feb5341837344f7c8007b2b10beb6954800a632f5670f97dd721bf7477482a90054f5b82ead78e30cc322e1e5ccff6d3035541ca72f2251253bd458ae65ced64452d0552b3ab287648d5b4a8cc5168da3eeadf64561a2c557473e4d8c8099840a8d3b4e1b746700e1545b886051af6452e7fe4ad97e2ac5151fcf6c823c4c593f46efb2479f8319f3c5e027ff590a665deb3010bf312bdd6f2d494dcc516b204760740de8532802c5a02997e6d5681898eac17de8c51b69db2aff4bd084a08500230d7ea616b0e3df64730354a31f2690bef268ece1924fdf992ac9013a641d2ab01811ba0f062996ad3d7d2ce908e183470c0689b212efc2b8c697660d572488eac296617a479c2a6967418aba50fc374d49981fb097f49e92d60eb733a1b4e1aa7174ce940f6349338af5ead7a8547323c4ea57896f5e340bc13f76e8be2327b5f60053f206f25ab9234ae7d3b092dcf9e909c33013164f8e1f8cbb4794a1e4cc7494ec13a72be058f6bd2530dcc79f2eb19d9ac84812f91c9d7824ce7be5cfb1880e2a31965068d6f8acd0bfb515e55e9644b3362e0355aca1da2b8bfad6db9588d14914820717a7ea102ab033b6d28ad9d4002948890a65f99bf286c88c2a9fde23ee08610ac6d485e274482ed1549f72ea7b38cddb4047922a947846aed3357b850d9982898d8205dd4ecff3bc90b7857214929bd30897c5b9b3df8478ee6c1f1403defdc686c97f2c3d2ad478428dfb075fdb3f2e6708f3cc206a3ce56c7b2c6f9e6ea4fc61d97c941fd91516c81203b2f8fe91c7a71dcfc100f3e43af585f6baf97a1b4dd1661ca813db75e10a00cd877eb2857e3847eeb01614ab0d85d1e3db7c691367a42c694015d0052726926b5d0880fed62d95389847114c0d35052398acd64ad8b170ae8fd5f6790d4828b65061780a2b8b90b941eb709ab4fc83f9fe5c40aa23fb1cf55b9d47eec83620b9ee3d644f6e155d5deebdf6097948274aab6a251d25b31e00198c34b5e44499599e570c455317ba922e1ca9393c4a2dae2a52a3d9b38c608b297d2e0d9a798170c1edbb168a4da27b46aa0d60323da820c3ba99fbafad8513d9a886d63f2d2a6a976112d66f13f896c46a616f9c1343f934a9690d9a4e9734447412a8753d57514becc938a1360a67c41c12054d7af01350187d14125c0cbc0579330869c3325d076799134927d59fcacc82a995655bda09c665f8bb079de9fff97a94385b45239119e9e50f49731c9a3e0125ea95bce3980f6bbd239b0d17965e22ed25e8e9c075a243eb3f5f2f73facdc8da0cea7c995288065e9a21c8614d1595d943616aa7acc3e63c753735aa48cb233e492940c0b50823be5513a6620b7eb35cdd609e7c8722d76d1d6eb9f77d852b0797e84218b5fd84cd1f61158581537b50fbdb85fb45ee4749ec3adfcb3e1eb969cc49bdf31acd0ff48f37f59ba3a346dc758b270684a6594cd1da4a87e2e7cdfc8914ed6d105867db745027bee21bda1cea9c4ba7821c6a74c6189758284808ef6432e6314c47ebd0920f7c2124138b30d40a7aff0536fde375cb134f2bbabe093bd959bd55a40a2a2de7d0ce302463df82575ee0cd684d3d32bec2a57090a47e49970784fb8b1417e11c2bbd524ab5074eddd94aa6134b27433e2b82d083065a9fcabcc1868c40a7d76e530e8310186cb5e8e48e1ba7979b76cca95f7d719e5cd1118c8788ab898024e2f37e50f293725de249e1ad196c50549f2f5d5e37e1aac5ffefa8257e5bc09b8f57e0cb6c0f4243f84446116670aeb30088c608e62036c194741ec79326b66e0d1f0109c3a5a61a55ee2428304f8fb5884b840a601ab245f7a04de3892d48611018db49e8660a7250db15662b5d2ec9791ee6056403faab075217191b8cb8544ab7e76c67d5644626b11a36fb7486405d1d60b496e97c75d970b8ca57c0be09e25020e6d35bdc4cb6e88ea4604cc32bc180275c4070ea2a28eb07409233bb4382298585770825177302daf6952e9012ca58ea66037f73bd14a90412433693b657433071c8997345d66d2244e5c11b7b1d436bdf2334535a3139fa57abcbb7e709b02b7ce50304ec086f5599a80694c5578ee7478a79880e95eabb030c551317bdddd5ecac68d91c5914981bb54ac07f0f4981a52d12975e4233a9106ddc5cc3f16763dbac4548100d7129fb39c99f79fcbcb904a46c6a4b7ceeb961471c9c1c565c12f20dd44598b6d518533f5e16a856a1b10a36af545c50e23acbc8d411dd5e4b76968ac15401d322d9163b4c921e6787ec36d7534726952768d75fce8ecdc34c3177fa28654056dbef2b6c87904649e8e9936f47a0802c698397051cafdf13ec9f76f0ef2e17844434a3a8580e7ba8ce6cd969f8452e6e0e0e4293e892befba401775aa9e9fe7464a96d3b448bbd7645296c21c70caae735eea4dd35f7c3f149a92c813ec012e52841b5a1082c7c924d6100aaedfab9804214de6e1815f935233628158d20df8d88817f2b0d39159f54d46b0e93db183266fc04d0a3db61603c9e8cc2955843a81b322904fdad5f477b9fa69c412c4b7d58f4eb24d67f73afd5eb3a11f40b6a6484189aba30eaaeca0f7f51c02272fe1d6d710d3734d8510edbd32124d16f60b6013655e40d2879864836190720c22bf69cc41e341b8dd4c648564b95b2b4123d19c96914daa1b61126253c382f4c0fd742c61110a39de5869f093f9e695d0355bd97279dcc2f08fc5fc6ef7081619a48f5b2a8c09d8f4b829896d70e0d645c8bcf5dea26841c1cc49c19395702b4c3414b1d0ace5d5c7cd6348fedcf1c610b4289a7739f08eaf801c79611f4056857ba8dde2cead200480466da418f664b4d9fc34d84b9ba30dff2ed0d7732d3610a8b6e910cb1dd28696579ea57f374ac47443db320baf18597a3ae13b89be5bdd5209303fc4dc73782dcb0a7113269151e4f80179f69e46fbfb6172f04ff61eaac223a1e9a3422b321fda39dbc28314308443db228571befcba414a0ced8c5e6dabab4a39516bc354c3a1a7d0185a858a76686f0fd16a77f40c3c87b68357cef9d432893d14f861734143fdb2a5b5bb538870a8101a970ae1bb2a04c27c76905a0b6b9ccc6cd7330bd0232f87e338181be70112cbd716340d0a3fd5244555248e3bffaa71ba5b54fef2a5dd27f3133a016c924d725c4007254151caced0b4195d00aebde1c4a0e95d487c10feeaae9b2314e49275946ab9b0558a185374f3e518c067e9fb6d85286fbdb8f4c454e43f76c99446408467a0fa6aca7f9821c445f5c5dca2897b433c1c857ff7af3cc8c42ca03aae7e97596e3ed1051a4cbf49dc1f068252ddce46ea0020612612acbfc8579d201705e5fefac1ef9184007bdb6e12b8426c0405cc4ad35d1e1c78b1eab8cca8ce1a59703ad501c2a290f3a8a1695dad78c9ba326bb2cd7484d84bd48ca8504cb657bac1ef90c77524013e33bae4365c45fb5790b9411980f2ce541804d60d28efdecae25d123244d2263091e7e8d3c0a402c411517851ed5e05d50b2a00cb4549222c4a1f96232ef06fd819ddc1b5c61da3dcc76ba6da0d7521dd04b51b03f4788b27d748268c734cf9539127201cc66698a838f2f0fc01b10c7daaccd01a091fcd29bf5209a2a6cf36c9d7ea59c122527463521d7357c3db4b53865e6aaaf876d7de653eed0401aaa7397c83433d0e6d87d9c5a3f652e05a5c7c359883f214a2817d96ef9739a42498d1001274caa9fe3a145a782f09334b00ba79fc20e06e61ace6d33a567f5d884d6d01ff9e68b490eff6784fb09c4038ec381059f45896383d10f2a7a39c317666c98f3eb3ec124a95c7f4afb75d069d0f3ad8ff6d09ade0ef827f841d4c3628fd3f5407ae70d1ae7b28f7005c7aa5d80e50d87bf010046b790a5ac2e2778753ed5d82dab801a39616c525b877a7398a0eb3ed4aa680100cad79d2620d3c1aea46f39d38caf380a9ea38c2150587c04e7f85f580cd1c0ee7e404b943cdb999cbc20ed76a4338958dd89cf26591b748cbeb11916fe6bc61aa9de315cc815a05e6a4256b2e507213d685ae3fedf2c5b3b82d1bd0045bea7a1a0c22b74affcb1390088af28f6cfa673834eec0afc1562e6efa68e49c87702289d223dea2c770949edda11c33800ff7aa6d237f7c1ac607b8f529b88552289e70d768f75c47ad13ec862121ae92e5a1b3486ae745477b83140006bb560150b403b0e073b0ce4d7b4f678250186d9be01929062b58bd7239ca471d50d8b40e41f150343e1c046b2079b384972a2da6a575d6f00c2a4faa470c2d2e2f068474e312e9a21298e4f8c27583455cd0acd9db2aa568c07a7b9c0e1e6842b0fa410b69c266bfa5d02f4a032a18e62a1831333b8f9c77c2a11f4ef0570d4e0f0cb821009d858fc2e7b35019c802b0816f93b02cfc9f3bc0557fe336aff9b7f103cefe8432197b0e36cd6a8aa75405830240b2cdb2d685038f9568834ba7afa3e3c166bd7adc9bb78919f160419ae1cdd563d14344357156655583757ba82fa8cd54c93180ccf8d9347719127e896afb485689455222911989fa106cba559a03b6dc326db48c65ff590c3e12d2cf1983c6a394362983e45ed3e72e7f67b06cca284eb847c570757e4bc0dd163cd3190cb5f7b025120f37becdfe95214dd8592e9ed07a92e00e8670215bedaf8ac4612b4ce594e412a02f7fd52458e0132975c7be074ef2bf2fad999d504239be9e81bb7b3a2a9238a23904c0702d89acafb6da71ccc80afd9fa8eea648d56c1503c6180644ed663abde38c64497d2762fb01deb5b99a6ab8f87e62f3642da85480fc455b093205a988273fa1043dc9a8ba9c2ea8cb8b156f71c7ec040897c4a090ed54df30cfdd148312f6af368006f7f16b14dc4214b827826012e3d660f861aa4e3633b33f2ffd243bd9fa2786294e5fca13c51598795f3a72b689e879696c069812aeb41f91cdb2b10253302efeb22939e68bc1e748e404189fdcb59672d34eabd37658514fd40a3ce7ba98ef650476f1137c8d354a001afa20b063f5c586a681928f345d7c7c2a752f9a87be22c9f87fed0df6b631a387b43ed2a2f530a0b8276d829431c7e10a697bd4a0cbb9a666c37372a2f8b28782b161c41ce5972cd6e24fd37b09fe5d53999c7f466db0c8d4310fdbe736fcea9887a3ec3414cabafc69b0b44e4f8b197bf9e01f090a50c6a65d5876fae9074ea5005168c8ca7ec8bdd84ab5f793f7381d3eb365d8bf45368ae4a5597e03a9cd559a9002c870c5a18906d40a05db2a05c3309100357be8ce4cbec124786d75111ddbd765ba2db5d542dc4917890d1032a563633c1bf6fee257f873d0397bfdbd59a4cce189bf62530786d8363b45914a2b4f2ff3b9d5b0940647358ea350a43573a5ba50261031c777eaf0937012dbe4d8905933e3263851cb231aa242620b65170017b9909dda36e243f30258b750fdceb726652c8fbc42d9ead0fd3e75528898015afb917cc608af6d20d731eb0c9c5cd3ac037413d131e159ff8e6614ea66d37fc8b3149aa73307ad1f8466a9a13f5d289a6da5e5aa7a22aa396d2d0d09931e8b545c525562afb6fd2eb7093cfe715ca0fff15b0469dc35357833aa056e8404a7f047b82cafe0270011b1d5bc9380b5e705cc85375b8862b0a7af491ce32c9785eedcf0becee30ce137b62a018478451768500c08c235ea2bc4a30aa651edafe266338d7c96a708a573b503d23951953252a18cc0280f243e5956a4a1b20d72315da776b8077b37b6ae6c55ef08b1bffcbbdee7b84b126e7ee091504f947a3896526ad6601b3950832b45bfa82631444ec720f7d70542eebb7d46c22f3f2fee580f951f13fac5117f3cebdc58430f8ca76dd08cde16863bb5a2b7cdfe0ca7e5f52d7b78654dd646852bb4fff0bfee8d890baaf794d790173b07c2b2038329ca10b2dbc1e6cfdda006571df1aa0ef1dcf8b2a355d7356b19d08871d9668acbbfb96200e3d5d73cc133f6bae44cb19c1180139a6d143f57098d5ec6f4898e0cafa90723743beff75537235850337cc70712c58c5531b1c6712fb4adb0cfd9150af41f593d065f6a5d4163d83d9ff939e19bcb5fb7ae89e60ae2522a79bf7ff5c4dae46b0a98634395e362ae5e73f890f4875de3331cde80fa98965a82aba70ed1af98cd075c3e3958c5a2021ba40f63bafee2c19e2653aed335b31f62976bca45f7a21c479792fba94a7bc47d34ed007e154442963b052a6cbf3b2ab7c443e6edec46feb76bc59b09e094775ff655604a0ab0303666c600a02a1d018032538322e1d44c41e2e13c9c371f1a65530280e6f8c7b45e5025df77debf8bb4f14d6154941009d09fa49f45100947b5363b1dc6b6078c6f0a12929819e73404db4bc2aa42f1148b2da0bc9803d626a742e4ee744e8b749623481c1d61c750be80c020d3a7c17da9f598583065d3d967c5310a4e279616b7630cb9fbebc4272c2488854c02eeb2c67b08b1b4dd68b5a29c05835d32ecb8891d932608ffbe7ab570825118e9d2261e49a430be96a2abdc383ca0b1bc633d28c2a0922b0622287c602861afd53db0c8b7d581b6aece0dec752987585ddfdfbdd2e884732b69e58b775bcb6f07ebc43f950b6e680f892f7ed9489fc5902f121d180230b54dc0803e8682c052969ac9af74628cd4511aeb0af442406494cce4d6fe3059cd60297e4f56a6372ff2581e3e19716cf95b45fadea04b89859f2838c9408faeea0fd0da2af42cf22a1ef29a5821af58ae06a2f42576a616ab2cf406789b328d2ba178b9b6604dbfc141db1873b1585817318f3d4d30b7ccbc25800d488de06b4e387bdae30699b501a861d45bf8877e269b21ede196ccd801606d2930a8d3f77a67c47707637a5a4097a74db362798dac1b033a71813b27fd02b054b058cc6ea75df78433a52d6e94993d80d8940291ba02ecbb74aad0d6821f747cbec0a9262ab7648e0d206b0e83413d01ed989f3c93e8c2589316e8e4b4d5acb8fd7d66f40ed88c0456a2578b1ba85e4fd42f7bbc4e9e5656802fc119a5885c1a7d80100442d9be317171f208b3049970da063d8f008591f7c2ccc9fa59098f94604e22d912be86676047d445d3342b76e73d43061b16a127818d0c712edffebb4ed9d0e05d587b4fadf49b3790355229f913d04d710ad3084411612727c4d3bd80e363815f447840ded0736e2f9b8eb464276f04de40a5d82f0c130d2bf8751450c421743c0f9135e0f8708159519c86a26f48079b02a1e8136d6c9cec9c6889f286b2b174f1238a62d66df158a14de015a41c6756a0ca05a518d5439c74876d20fc33104ab558aa3dae8a461894e6b0a625811d0d9b7300483116f7c50267fed61ba02bd719568ae40cf6c2ef3c644bc9788efc607bf80c7a094431f2803a30e5d525058471d1abf8036b14f5472b41063d6f03d4c907a4fdc27e5ac2c0a06ae4c794413cbcbda537c2e9b115b68231088ec48902e22b65f7cf59ac0819e6e52a054a53cb5f3cdc9d119305bed1d53a4a01d952063e53e04c53bd0dfc22502bbd82a4f7955c07a38fc1ab2410181951d3d673b36814128195878d9f0693d34b8ae18972ba60a96fae0446ae681cbd8eb2dc39122e814b5dfa42ae0ddb7e8cd4a55faf15a66802d4aa6a51e034f82b2e7718164271dccfb026c25178c01f529c8150a2c752d966380e4719b29f8b991c833118bfcf7de273855f4e3376b5714eec391f69bd028da251222ec2267bad22c5816a6a11bc30993463c4fb801ab6e4592dfaa6d152fe224a0e4599899796c9c674ad5e7cadabe3410ab0fadf3bcc694147af5c5cf24462e5013cdea774ccf0510854f8a1745c3293582b90cff0e81620569aab7ed9240be7fbfa58af8ffc223c2292f5739f6976d5c65969e46207c0f7a85f93d61053f310e0bf03e054e5cf73cd84d9ce1680121c8cf23695c2bb1cb35db9cfc4032809f8fcf0ad6c184d3f02064caf97108d67654473faf6d4850989df90630df2ed2f495d3d504c2f6e16bcce5baf0cb43bc8246a836399324e035fd0010da0fddf6ad8cbdb91bc20ce088e001823386205d80f15c587a395a72740f6a2fca3f8e6d2d59f70b6cfb8b6b573fb19ffe92d7c6d263e6be7b4e923d19a20f2e4247680e356ebd5e317c634a3c23849527ee4b32c9632d5844f11b61907141f0cdb954695e4412ad438a0024fd37bf7c341587408577e7a80c337eaf9a9547d1ed02b07db4dc9abf58b189a28ac3c60ac34986c476f951a04afdfbf460e76dfd353f7bb219872b8951fc8472e7be064e8ea8aab47e8bb5f608c153f0ef8c2f1478dc797d0910d311333835f3b732d7864fa21c73e5a822e35ac5f8269687fac30a6425799450ee6be30323b1302fb4adf41fb17ccc076f3a5740f7d1a8e343efa711a684035682f29b9cbfc443b6cc3b71006568ae281a6b329dc81c4ecec1be0a3d60da42307d78ae781b30edfd4c19e4aeae0d7eac765e1b38817905142919e614aa28829e9a1322c7f9a762d26d34cb0c97a1f256c3cdd6793ba4bb5f84fc76159b310e35308a3e624b842c61fdc7e1a4f2c2de6f84edc4a4fb7a736d54bef3f373e13ff896f89f0361143b12d82015459badd644db42876ed0acc064af52953dccb91aac8cb630992eacade3359bef0341f7cbd43661724e36962ed45f5994c6ad483e903db7f96545b45749f50bc0ef7dae0ac97bed19665516243e2899eb2ad84c295812341d7ebbe8ab48169b6ddb64f17d2287e230733e2a7641ed56c8a4c2eb312f89a5c43a7a929f78bd2565e0a68617808e96109362063714edcf82ded1da1f097d5edb78e296c8a804b454675eb248d6f648a83ae2b89aa1f6f26e51b7cc4bae5ee4e3e4fae0361ed4ce54e3ba2a3a29f5038cdccbe8017884fcf66b1d091becfedfc1af6bdc0a404e0ab3fd16af19b4a223e3e739e0008a14231f0a0becb5d147b1ca9388336781e5c2003ae6f1ec152a79d11502a1c1f7bfa2ce2f3df5280f410303ab0018dc233f8f9087d0349169253519923d03168d7ea9cb210643cda1e231b9f768f771be854934149789d9129ff3e0b97d27b311891b51ceeae965b48bdee103356016e53d6baf914c018b8b4afbbcc24d9f9f0c31824e646970e9c37a3a12c4846f6588ac5f369c1a38874f6d2360e48055cbc3378459bacd95020afff0e6ec7fd5247231a58656fc62767c655f4cbfbbf29dd8e75e4c87d4704081534a56c32aa7a28c8183ceb83f915eeaee374a0a98748dd28029b89fb77c9b7ec1c258c467c14200c9ef1c1fc0877e9741a106a40a0669440cc0419fbe88f0a46390ae70eca1609102e1fc4bfe4ae2e4e01411d62d44699404cdc36510036233fea64260f8df815a73d9a0d1510be3ec83b0848ea75744aa193940d1113cf262e3c67e8975ea6d930f25370f620365000e1f930a61810d4d1718a2227522182495e60f3648e0f47fc5ae71fda460a243c1fcc3a1828f5ea3855d179a91067120794218af0440d6f41a16bc3b54056929da8f08902ae0540d7826bc1f1ffe8678a8d46b80ae72eca360913a63e441867d867bd8533f96064ed5288b078ce073f84c785fecdd52496dcaa492f39b7496c7997ef5a69aa77e66a2a56b6d2542ff2e471452f7331153b5b69aa97827e2437c257387751366990b0fae020f9722b4c7ae55c4c6277fca2b291be92b313b3998009cf0791d383a137e73289cdb89c9ab391dc08dda118e0f1980f32d3375b35d54b7549500aa86034e9520cf178a8ef971e58bd0f7c98f871903910a5b8d5825ddea38059fa604cb17b88e25c1964bac7870f0a3fddf18d3281c7fe2c5abffe90b903aa1c3c076b1a673122e089a7b81d7bcc417824079375c7d406bf2165be5351f4a395fa48cb14b9e0f928138e443c3764346dc4b80d0b8f386e246da828f1822d7336f2e8f465510d9945a2b32ff5e39bed5d81e54a20c01502f737ff22fe51ad1f3521f3863fb2075816e9535816f4787ce9e12120bb5c293062f34f817d3a1d6317116ddb15a7e55f0016c38244eb83ca3a80b32330acf7ff1f36b2c55c5e16f2312b9d558e78aa3e6ecdf31a6d609eac94fe009aefb9f9253f09790c8db4a6c61aa1950440f85a680b71c699bf1770eb71710786f6e00fabc63393055061f1f9bf9108fdba10e929dcf5b62707970d5f6e8c7169815e9e365911cb74f0b1fd834d42330a23467b02e4ff9093045dc6e3b5063ddbb4d3931335ac1eb1f780df040b42dd141c44910d67fc9450fcaeddefcdab491cb003514a49e06e0c4566d7821b31561009be3b309737d2443a5d6b914e60712dba32c99815f06dc8f533953701a108e10f073c28cec05ff45fde0bc4600d65f6507c8371f347fa3e63fa5048352b104e7538fbdb7480f73106ede67606ebf64b1095f2702a1bde589f0386eb0e1722d90338f853e647d4e069573edd5682913a6d6a8bb7ede4369d11a59c5f3d2809f348057ec26f2294bb6953dd29d31f629ad2d675078d0e70c038693161c7b1793c65fc7b3f0279395903ed99c67cc12c7eff1e0ecf0b04a07fdacafc6735edce1166095e55f041b966c6c31e18d57eca6926be60e88891367b3e68385502b94406b0ab561e4d51004065497884024ea891da8f861341a8e63a46e1e58e87cb9d7ad2b4b03e1917dfa8ba56e634373eb3cde89a01f7d0d2c5810e192b0da61eae7692618cf3d7cd5d7670a416975a52814278cac43d30f6344cb0e3f21b0f50ee0b35f5965ecb78c00ae4613e7b6435991143aa940cb284b142035f122e7f802896188cd717721fcb7516a24f83b6a964719b44695aff90c31c0fe0ce05f06c4670cbcd46a4fdfe4051fced3c1a52163c1b40636fb117685e914c7c3f06180d31bcf54b6c4d74e8df89c605c6020734810ed034a0708a21a6fc7e94566c9d4985b9afad2b512967e871631781095bb0e21dbc6b001db6eb866a5cfd52cba7214d169dffdd5ace37489ba09b11d6b50149090fb1139f5812fbe49ab3ec51192898b413ea6b81ae59a8ba92b5777222a1ccfa255a331abaf93e163472e0c1c67e1a6d602e82388f0ad02e6c5b897949f184474796bb4db8176f39ffa23aca9e3fd9c97660517e539431d711a49b9b7ad59e8644e52b8c524099429cb640682fe1f21eee5c0728bef41ff86ebfbda2e8f8a80641914decac2a0c86c5178ba0e2e0488e4a4bcfd1f315aa861ac21de07938afccd6bde2a1ccc0317e6fcd6307ef0a92d360642990065b3ad8a163d278f637a59b5800fefe781dc4d8bdcc5a5c38ab5628ac65bb071ddcf525d627cdee2d6f031fe54bb019603b4e885fd334d4ba0d9ed005c1f59ae4ee1d8d93d4eb69ca777db2b8c9ab93d7840866cbc44ec3ba48e5f6ee2e80ce81b00b20654522390c9dce61e087cd2ab988db1357f8773ae0b74c0c678397fddd1b211089fad560705be6849295a9347cc873677bdc3d99bfc7ebb3c97fc07f560e8c1fa8f7008e43062d4707a2176ea9e5f8cb765fac45186ea0de20dd9c507ac7dad79a8a5e5a66fffa824d0173d4ee7c30fc8db6b0f29c9896b47595bfd8632f5bc7fa170a64e5300236c2b1352b0f7f8c3903ded7011c2ae1c89d4a8e88189550fda8442c6445d41b2f3b0172b2ea369dc90d95f5d25d463ac5e19724eb4a11a413e5f60a680ca54773bec8c76fe4506c1d86f56875d59fc8a475efaa1d896afc828b326a49e7a98953486583b09093189e75fa9e652fbb4992ad6a131a06371f19386d9f564e3ace46c37f1a91458cd65f0dd4424aea76a8d641d547c776cc08a0ad2ba6266d01f96cea1921ccf83ca48e0198e62fad35631901afd3f343260775f3b193c3fe55d79942eafefe1f1781ba93ce3950b5ca8198bf759aba99448511fa1bda4b1eb9c1c0d5569f5beb4dbaa3afcc96422febf3e825e70fe5e47f1e80fbb977104d4cc1a68a0f31d522f2906aea2ed4a11da6b25a786b21d856b1ad022bcab08bb097480aa6982304b5db323af19da6ac96062d9acc259753bcf762daacf93481712bfd42ba733b7693312f45e383d0980ddb59a1de0adb59f329e3154d0ced78045ad2e9360b4ae319ece5c3be0550f783827f134e095ab11edd3be44fffb6f58dcdeed7d2b6431fbb9e9a4a5313ec49355ffcb31bf1db3d6e635441a82bb365221e08177a5762ee7522c2360c4b6aaae56cf215b3bf8a74b6ddba8cb4c7e8c79786dac3fd81cd23472cc75765fe95d08809d7d0b7f6603b754cc0f98a45a45191caf805ed50ab0ba90b6417f08f65d5f672a148b066c3cb2f3d954282932c9d98561b6042b57c1a9def5c20559ed6ca4497e8fd1d470008f0800484278e9262528d105db09662b94b55e564018748d5720f4a87686b4d70968574381bfc1a47d7c9db1ad9b96ddd6f5a356867b303dc28221adcd608464d6be83ddfaa415c9326c8a27fac8611cfdd0991116e5dd88c19ad01d05a261ab7927061af24ab80b0f2dcca35c746326ce8c56c23c197bc27c2ff768f197a7d834b0e73c844647c618e02efd7e7006436fbb2ad11fbe395b70ab8e2ab1222fe43fdf26b72f46fe477365b0f1dbd7965f6855dd264a73227a60830b21a9f2ebed9a1ae16206f1adc33b7ab55e6d96b88af10ac6cd7d0de331b778a4d7ca6d2da2d6a9bf98f0656d1a243f14a70945517082b263393a0c41430a5e5fe702b8297cc09db8841149d3a31e4b108498324ae0380d44361eb63830bb799a8c12ac4080489cc7b86b95038a1a0529d26d4b3de66ed3d1062535c724be1c05debbe04c916e6f58f6778770cfae81af9af80f61cff867f1e152655eb349e76dcb5df5401ec0b554b12806cb3065cf69304786e77a3b31893fd8385a412b3bac514ae60b5139dacde72fd0d5c71414d365b02e67c58e69b97427e90aee872df2ff511629fdbffa6d89c8d73d3032104586591fcd14b9a224f76b57470f57c1d74e26b3e1ea039811749106c0778816fd72d11f756acc1c50a43f5159d0405506ab89328c15bc9c3896546febdbd9dd6063f43853afe7bc7f40cb4f1666c5a719f8929b575fbdbfb94ff8fd202719d06b90caf1c8e76d720c261102fa5c9e238639e1a64a0a64d60cc0ffef0fa7109d0b57ecfb853a3e32679fb990151bae270376d35593a00ca2c82c2371830b47092ba94252bfaa368039c8a1b48ccf91ed5129fd2c8728f4b1a9e0b11ab4b92a83f5d2e61d4d4b566b178c577e6c323a90ae7b83bd35a09cc19ee720d856e8c485d9940627af5ea768618404ea5001103b7244e98ce2e77fda309deb0372210205e34d62eefd5a371ed8fc9ca3471ccf139c33ec7670fc4301c138f148286d666f35fcbb01fec0669600bbedeb49928e645c610cc4817c5fe9ef9096f4c3464a0b787e34b5edce88c92ef4bbee1b07308fc5ed9299f624f1602d8996681af2b35c625bc0999f4a4333908f97cbbe9934fb1653e5068fa21bdbcba8e8454fd778e0b5b9faea0139b67310f29e9a0da368f28d4dbd7ed77e6a48248395b45e00b3e35666a889bed9d5124e0d384f4aa7b28c537f96ec2d7843e89adec8d3ad330752aa567897ba12b88a60413551736bb6211ab20c346cd0a8a946a3abedc23809465bcde8cb022f730b208dc4e26f2eb52ee049c572e882e632e88d97dd1ac1505fbaaac70e07e76ca0a8a00689d4066797d842ddcdbb3b3abd5821c7bb7fe615a904fefb63f9d14def55d1bedd7e71d35f3974bc79c4cbf2cc536f9bdcd8e7574b39cefc08c0dfe9cc00fca2bf55ec276c38f6d762db7ef919cc3fff0c829df7b62bf93d9e949bab64660ea5d5f12108350366fce2fdd1272a1505a6c37274edb59c6d16cd759466e5f94a1febe4ea012faa6edbc66ad859ac528cbea86b7492690c2a915f55bddb59baf8ea9029da7dedba1292c7b1959368b07b53aa55020aa494d5097a094088d63aa948f0fa79b028b5c8c1d486d096a1077667c183d053c096d00764e7f76bbcf693e0b47f296f38698706a51ac1339f0a68fb7702669c2a6c3c3bf9a956af14ad157b0eee8f6c57a8d7144bacab9a8261e6a40c07d714da4876051c6a2eb261ba198e4c6c50254ff9d2c487acc12324d6d9a623442154723b81b6904c9a6abb7d00d94b5fbfc027385cb0a93e969ab57cb4bfa8bd93e346805fecf1f1086e1637ae451ed81d9a71e8886abe18cdeaf78268130f393ec6f9c8b897afb035efc0dd18eaac8adf8e1ea0bed9169d9677b2a2c2ecbd3658270fb156805821ea8dbfb0fbfeb820c935b6d7f89a22f268cf0a3de3d044d872fcfc07a08b12d27e26d912a828447fc03bd87e8e3b52b77792eaa360463c7ad70300ea2fc830445a939e63c9c6acfb3f0177e79c80ffb1c7d8d82a671ae780352007485a3698f818997c1bf39780316553bbe2a24c7446f28bfdd3617d5133846ccadaa8e4a627c238ad53b307ce1bbaf2e9e9fc6b3ba316abc08eca7ff18422c3144ccca0be262344c2a7c921fc6f080d66374721e1e31a7db15d13d66b2330c6655bab9eb716c60813de4a328e061f8aadc579d33e9ea859aa9a2bc546a134d683a510ceb229222901540c6428c5dfa4f0822e16199d00cb1f3645bf222c3cda4b198e8db259b545e5a167dd46edd8191c69779f8af1a3142c9e9aa54b1667d3326a16c1138875305f56b278973f1424f17376d0caa08afc65cd8c85f5097095f7a61e2248f8c21f8c080bc648b2f13c92dfdefe92d935bdc3b1d4279dc3b0e9960f7ed75f3c237aaf23d69696176c47ccfa4540a35f67222ab1ca360e93654186871161247626c9ab5dda475b61621e8d6838d0828aa2b36e6a9ef6c00d2057fbc86b63e67a45a15a20583887b403b824e31f52b5a9819e80c860f32e3f1f0d7e5969215eaebfa61619395c3e9fffe06b57a4b782f455254cb241ba162550263f48bf57a482c7f1e6106a287791db744f9f2448e3d16c85c364704e209a8650b20b248590aeb69573f6d1a680eca702f0815aefc66e0fffb8a10a5acfc02003df15fa779491657f53e391461fd8c0728f2b7995ac4fa4cf4de1ce2cfa05f48393d926a4a56b02f44731b182a0d37f04173acf26d0189b946ec0b0da277239db2a1a53101924a4f057be648c972752c95d4f6a09b593259f8de70370c85527ae8130bb5156a1287af9744bb626ef49da56f619fb1dfefca2ba413bbd30f551ff45225f06451e214bba2181da31cef51d7b1f68f1fd150ff85f76817022dfde8c3e82bd9281f978792edbd8a3330190e98393f560254d60fec877e03dd77f88dfb483d2c52b066d252adb554dfbe34f8e3973aae323f539ab6351ca3f90be98cdc908b6ccdb96ba2a02f9d29834c3f635149ce5c4b0e923ce1b789106509cd6c84e5282b72c22f6de9854e20862d260cd9856fc470497c5af5c43b885fdb5d019e50bcb404120870f3440857f3fc2e1c147683f8bafc9141434475c3c340e6d744ad21a59288c93516b739d9e91809af3284cb00bfe67c010f308e0208420405794d85d9d619d3fa687d0660567c88d97456963bb82ddf95f779325cbc870fc9b4fb714191e19b66ed9ef0f8196bd0ac0235ec226f94d179aaf43e5ba7ed00eee2ad300717b17e1aedd55c2c5883f4c223ae9b6066038519ea07d3999c95795ba01b829792947162b7d9e2428b0a264fddd1ff78f9c72b7bb4d555fe91c2f8af6784b05c72b4e82715c9e5db23ff1098d660058509561f34a7769df7900c65b41ca83ecf31c4577d279b421d6d1aa249e374f635883fb0aadc985b1261e1951b4565deea1a983a17fbb9d70a3f55dc0235d2025f8b1425ce2f5c7286cece47c313bcfe1cec25dc52d2c04a11176b91e58995b26def069deec552e0f2665d54d1a4e456f26949c3cac44e6e048d88b12d8b02f3e931526902022a71edee1953eec858b66756f39b6be26676672c9b115d38a579fa0a2c02f49cf95cc74a0a2d2812052774d8db03c9c3e8056e0ed8c023672d088c22a561998b5d1f30e505c1e904103ae48013362e242e9fdff2978ed6f22de5036d614fc55ee5b385656e5af19da86a835a51411da10cae2aea4b2865f4582b02e5b03d831b0940eb6f33d2617293cf098552063f29270c3fedb76c5009986d1617a84a81e8602cc5c48bcbb18286bae6184fd80d559835ba6e34695c2faf78a370063c48bb2adcb5167686364e3f62d6318618c961b39fadd9926e2eec2d73b7046b452a7a31b7b497a1a6f8f5bd4ced758668c2301ec450df0c99f91ef36e596e1fcb99d117768f417364281cf1ae8aff98449793cb897abe27e94c5cccaa526f48ecdaba035b6dafb73714a0f76abdb687736ed47febab3558798ee3f7b2f34418c69cc55a460906874984e5865f990d33d638e6a6e3213daf2c56f5026e9e63354cbdead7caaa552375df498dc29d078a56750034a25e942eee00377de29fef3a4a55f04f74a0139bb3116b8f44938e81de73df17f316466cb8e3a1533debe606ebdd3b90acb3808b23a5d644616684f3cd745aeb564d3e77b84dede6701d0d61884cccd0ab0cbd1a732908e2933e394bc792f0b26277a692a484877681c578f7be22a58a608ede30e8af16a8bb8b9a9e3bac7804d26897e7ec3c7f9278b02e7c829adf26d5aa9340c7008f3d78354154a1146f12c1545f63ebb9c3b24c481ccc105520e6da73b3a332f15c6d1614ea634ebb18898f9609a67133016b9dad8cd1b4e9443b80dfabe1f469c4436a18b9d72285b4790112ae6417384353afbd72e232a49c034a8256835b308eba9a0e25f268d602200e86ca09f89d1592008e6d006ca750cad18a5df08e0b63cfe2375c361efa6b4bc6d2f9fe619d82e43ede10eb500509fd8e8f291cd172ee592193051fb17e1f42b3de1d09090935b2bb6db9a5942949194908fe072f08dbd77f00f7f68150a096205c38855a08c91602d1f7a7ddb487fa9b284ad3cca069144483825a28ca349ae195fa13a81fcfa0a4a41a0205094569d1c70c9836712b0042a9b5167b785b9cdb16c2fa810c2152c4c16fd13e9021448a5490eee42993720dcb060577e00402e74f8b57e0d1d2ba06b7a32327f0686ba2cfeda845dfba6c482dfa98e2283bad45df681bad75e6c76ad5c8d22ccdd2689af018cbeed30569e3dfe4d2907d4a761eb2ffe63f88d96bad8618a87974a3e9468e84c4f1a7e1823a0d8916ddb7242ea0e0dadd6b9f7b21f6b9edb9eb48a4dbd070598186081c80aa1203cf2c93a8451f65e0715a714f01f9c946e051143df05aeb7b92077d422d00b8d103c52ca1c02b5079896af49b05ba6ddba7244dfdd8582920dc3740ceb817b263088826d698a180fca04223a9155aa44fd3052e9a48de53d4538ebe05c79ad88f35372d524aff82dc0d47bc8536ac771479a64c15ce228e47a6281ea967f2bea42e2422e26000f4d63946486b3c57f44ffffca89cc0fedfe2a4a9823b86fa63ffe4fece861358a67894f8f874102dd7efbc023444602f8fb4e2216e53395405721db9fe0a9247e7fa1a3052ab0369b1764615b9b8be07ea56edfb7b9f64b6fdbb0ce621ea3beebbf0a9f7fdd4c9c80f11bee0df719bfaab3fa285fb140e8fa452e19115ea3b72c38bfab897b3d5af4098a74098873013ba551822c1afbab06dc44377f3158ab40c56d3407d23f5a74ffd1943fd1914a50e351eaa4856ef7d0a44825f6542eabb7fc0ea3d2d41565eb80288245544e2d4f7df42584f8bf54908614e1f0fe1a1fa98a83e2eaa8f8d28d83e4568b43b2e5bcda775fc658f2cbf816e906cf934d66628b8dba46c59b6a6d61937a16dcb0666cbb2196d486c471bd296b479d998b6309bd036b449d9a46c59542fc0db96ada809fb8f5b96dc3f7ad07c2389d330af47ad337a50f64a930da056896a96baa51a552482845cf6a3c55ad1469207386937d508aa51244ed72029e814b851e1f8b329ebc22ae436fd3d7aa01e0beeabe262f9c4167290470fb2214df2b859b611116e9a0f28f0dc6aa827f63b17143cf6c856caca24ab57481b1a15e0b1327527bd282261a7ca549b6a98d6b1402ea3d20665bb1df1190661fd2afcdc26ac4c2cb03639484467431ad626b7b15b57a7da54c1b458af9038f6a5dbf41178fe00e25f53344d78ec24d8b4cf7a21ab6f85ddb4fad6b7d3fd16fe2433d6df30482b74a16c7fd54f383ce24161d75aef3e2e630271eea4d5e30fb27afcf3717844cb0c83e05ac3a1fbac1ca832491c4bc344f73ff3b5b632b98d7d97c90a86aa32a52a93178edf9cf3fe9cd8654465aa4cf6ab93fd5ab3cf8124f40a943ce6bb903150f328912a0fd2c6fe0f77086c828f4b8522db1f2263a066af4c13ac60248e7d1a2ebaebd110817764d9d245a099a72b13b89201d7a6ea6309ee1f2bd32b6825658a212549619eb48e8722126e1d1d3e92476d9f16e5d3964db48914c14db8c9652c201650009cc0465ca6da82e54cce68d396a1880c203292f216ce9f1feeefff748f721f70064d2057198165c6938b6944e2ccc700cd4dbb898f1865c6386a248c26d21c12810040e091059459402c265286692c2879b246960e793ea6a2621ac5b40e47cce4b43098c4a0e292d6e430f82885f14354849b9c8cf2f6f3710d8c32790b9da6806c8f9b8cb8cd91138c9d421ca6451f5d302eaad47da66cc7d0cf0462721265fea43287a695225cc4e4840a366201b1805c46e4e2c902ca9388c469c2236e7a6ac24db80937b50f61f00435891183c74d3e7d7c70817113182c533f7cc0008fb829cfc74dad53a79df4a534f2d4089379a73bd83eaca21c577061018ccf3be2e5a5400a98876936ec2041195384176b7c71ba801951b200d32569a98bad428912a89440da6927c227470aa8602f05595230842d428904b658e208308210e3052a66cd821e8050a28c115f96666da9d0e162c94dab528061932823757bc476ac84f14513a76572b1d530abd82b4a4e53949ca4aca1e4f46443dd1f6138870b7f417c7fce4e0f21f096a5d21769e488a1ba1b28de7c2e9c03e3ef7164a9f445157914932e1431704d3089a1abc1b352e3c29ef47ac4769a6857964a5f0c715b474a29650b9dac116f7af018691dd6cb3f32d7b8f1a3acb590c787c1a7455114ddbdfc9c9dd649bdfc10240f4c5d369d24921d65d3bd2d4cd9249a80fc6ec03310c1905b82e1fa518a49e3c7c9c21369d36f231cef2b1caf2b1cf14c38e256387e1fed27d3a983a44dbfd01df2b09f489cfe108627b97f12c949840394d2c647123e904a1bfb3740eb5221d397a2a59d05fdbbc8761881108753e2d4e7e90e01ad9d55e0cc2bd055558af5bd8e03674655eb9472a1b43dde1d100023461410d4a457ab64c03339dbec8c7acfa0ce2584a7bbbf0cb0043ca5f483a44fc9c67a42072a38568d92614901e2b8cf07ee0b1d2e093a069a1a5889261d3418b42d2928c210010e9e0f06415c095a7294c4112fa0c0114b8ac408caa1062f4934253a5a970e3e9e244984e10232343821a30b14ccfa68083580383a811415ccda4e41dbc17b5879144994d9a2a0b9b04167a94147d325a4b082cb0287255fd4a882090ca4180287187e38411a2f8011c24a3165e806cf773d302ab751e44645810225526430f182982523f0220b29b3244ec49059238c299ed84243ec737c57d2422081a7e77b7195a5d21733244989e57cd164db3c30bef0c9a37741b1c685bd4f3604cee911dbe1b254f2a2f653e475a897b359b9478548fab9bfe1fdd40b41217924dedfae136f62393b2b4c220d14516112b98d11276e1bc5222f5d26c67c47e4e67dd4bc45def4cb6c4a329bf5b7ee2f76b96d7fdf7a78a4fffe1187d94f32c34010ee5194faa3c223476ed89e3f6a9e4004852273876732359d3ba6d01c2a227aba2f7b1a7772bf0f2152245deb860e0ddb76dec273e576da934b3723d2234f5a597ea274fbe1de0181ec3f290541b53ec3d81a871e8f55965f53729602a59cef5335c39b8dd52f4290b70bcd8bfcc0000268d1e41982a043f26c73fab66ddbffb66d5556597bcae92a4a690ab2890797752acf69b5224facc765ab97257428a5d83d398ee3b8ed6edbb66ddbb66db5d65a6bad951ea11eca14d8b3d94a95f2da3b0436c96dfbd48993499769101275bbbb6b7da77e74df35222deb99465ce67af94186b44eebe59f6045966f82fc80c8eca0bfcb51071f840044f2c0d27bd13ff1e6bbf1d9b5583d4456b2cbaac95b601116a8020a617a88ac9892564d76c3aba94ac542e872ecd15644858b429858083b471ccaebbe9b1c37f5bb11ffc61651614321cc7723fecde55c33ce6ad55277abac2779ac9081cc206f329a003209b3837eab4a792fff7358b00029034282e4b17af91daddd9e036499dc1b903652367f7ee64ff7b4ae42aa4aed743dda55296a7748e8aaf5bacfa9c9f1cf89893934c8900a44267d4e4cccb19b2761611f52bd60e78bf843f7fffaa2b8ffd9c17defef7ff8c59b9a9afb1ffeae2fac6e37ed0ec1f69f17a0f3e8e7557e109b1df49528ee73e5a82f07777ae4e46497e198fdaeef55b585b40ac3a495ce289dac19e7a499ed38e497e57f196490fb472e832fe2b22d0cc17762dcbd475b78944300c0183f785a1b767b6d1ecc053c5fc25ac0f3612c488983c5ca9c04c02c3d4c1305760fe693527955e5d1acb1f268624003033cbf4ccba35163c6a37981cba34983e689c605373c1a343e8fdb42e93654607f9a33601e0d8c86368a4c97922b0f9ce0f90b98af34c5289b81c78f660c1eaf0851b01958fe1dc33d5082bd874eb68e7b9629c8330779c2a44913343057c82041c367298b185c28438655ba4054f4c8737a4b404278d3ca922ef2d674af4d6d9fada555a9e6506faeb822bbe45182c9f5895c9fd6c75072fdcf052f727d5149ae1ffbd922d7df513244aecf1343ae4b2f0c91ebd21225b97e4dfda83c5074822de890fdfd6e73138119ab7b674ce6644105b99ff6bdf87e78ee5c1b29244a650e9f1f23967c4cb0c48250ee7f7d7777961672c34073d648fa412f136b1c7123f7b72e972762808589189491fb59497c797a686801032b723fc6b432606872ff2af5a32fab89cf475719a1a032443ffa5bc387296888b9c7258f2e3562c8f4b11a4a2f1022d34f7d3c4ca9011580a41700a5d1e940c5c91d401569c0f06494296ea21e727f08402d2d2b53a5a72b2e8822631e9664a8514ab16b87599658e410cdfa31131a41e446c38adc1f738196338ab0ecb6a245ee268e7b560d7c42dc54e90c2699d22c3a241109bdcbd360969ee0c10c19cc00834c1263c2c8fd72facc2f4a51bedf4d9ae44ceea5c5ebd6275fa76025e3b5566bb5f6f2a4b6b92a28f0e8b57c9f4ea4dafca0591872598f9628df1791b08f8e7ccbb4cef6281b6485f27d5517bcd118816b34261061999465563d816d50eb44691d2aad235da6fafbf5c965a9bf6f7da4d7929c0bc77b1d27d5d09324ce7d9ec65be0f10544be3fd69a27b5786b6df4a47c9fc608d3d0916aad3e75aad65abc4f730496f97ead499cfb3444601bddd665dacb0a4c41ef4281bb4efd70e1d71478c447cd8217248f99ef7b139247d144aacda77cb7bf9d6fd3f2bd22effb0c7389fc601eb993a983fafb0ec3d4a9ff25818d70203291e73089fc86236792efb718299b40f4ef371952c78b79ff7e2f7163009486d38d022be5afb5e0f9c1335582fd9714d882f2bb0e03925aadeea7c255f8722686301b0a5185b02e957a2121ac7b39c3bf737f556bf7ebd37deb73df02ddb7209014786b2ddf9f44f6c85a22fb7e942fbd2d7ad2a6fe7dd981c491baf5e7ac1c785bbc975e1c737e675fcaf92a9aa161ca312e00c488db4cfb1b18194ea632a61749c305ffa046a8cf917116ddeeeafea3594d8dd0f08afd198a18cf8924530d98404898018ff229cf292ffe6693cd220333f7cbf602ff9c049898be0cc7affbbd543bf5310516138026b07c9ecbc36342fb13a0a564c9a6a315ab13b1c841b65ecc6d7e88a8f0489259f70fe022c9c86776ad18933c70769ad8a2a3422447b48c62467d03e40cf53514c28da0caa2c4f1c75b60391b6f5672b3e4502850cec4d5182b27115661c6c061b2bf8f2fd8fd7aadb5d6bb920263f1ae6a9b115d07faa3c0ee50dfdd0e75294d3243b5603b3b3c8e84c290131cc9bb500f050ee9402245ba9fdcc75b32f9d01022452eea3b9a16f010ee2715212220e943d9875c07296b26b7a158b21f916933351874c4b66b995afb72f6d4221d3269e04a0aec3e5da6c529fac9932e94a51890c9f281b284256047387a204b893302ebd524bd9f9a4c8b21e884c471a4a923fbd7a4eaa52bd3ea93cceaa7548fff88f7ac4f321bdb293379affad191688c70bfc471820072fca8c8fe0db32ad57b1f44f5deccab5c5de47debfde5eb8578df0abbc86d5a29b0936a1353f69f8199a0fad40751d15f854760f653340cb27a2f3cd20a619615b653f6f7908278386c2f6cdaea9bc8fd7bc86555e2707903a52355a42bdc4e8a0a2d76a48a54932a536d02a70f75a4afffb544e2f88b4a7d25b5cef802b2b55f565e5d5e545a36801791ff2b8bff6b8bffcbc8ff45f37f1dbd90bcbc805e41af25d9df7ac9fe5a227974f6f9a2d2a2bfacbc869a70fff8a2926ba021026f59ce2812c7df539d6c495d7502066a1ebfec8ed445e2f813998af46ae23ab546276b7ed6cd2cb987b4786f9fab6feb7bbd8547447ba4ab16369f7b39ab206c6e2fa4fe166e211254074da3ecb365b096c13a4b6f69a346a2a7515b10098704f53733deea86f761cf453dfcc572826440cdfe11f2a527655825b8e0d45ecb24cd73e5a8b156b619f02a4b252c51c0c0f243940607592a6501830ad16dc35337e98f14a34e36c931a4b8900f90eb539aaa54668312d9658d96692dd7e958acb2d429787aae2766638edcb2993a4b1f8db28b1719e6cb6c94630449c9bdc4ac83c0e486b22537941996723f4f0bb9bf87062c72ff9025b997a264917ba9862172bf91d6914b36c0e093dd89a52019b25c7a5226c33c1461a2322bcb26c69823d0f791061e63d98e3739ad33d6ecb4cee8f5d0196f08ad338aad33fe4debd812c4d699214c660bc81a2dd3586c87a7c7dab7d63f8aa3fe82a89e5c39ee853cca7e67f1ec3ae936e3903cc79eacc24eb63f41d8fcfb728602613334610afe2b6db6c78effa2c06d76e572427a761f3637d80c3d995753501f45c4a809c6389911c37cc193189ec630b11403931259ea08c1df40830c72c068707c376cbc5c332d165ea9525e87e2ee662bf55e6a6294654a84ad4647abc60fe80841578d20c8bf810654351ed120831c309aaa1a91d0e0f86ed87859d518824d3526b92affeeaa5298efde3fde6caf706a32a405c691e55293255709fc1ab311e11a29504bf0064038c15f964b3048b15be057964b30b480b2825d2df098c05d171e0bbe6c4c38f504e7843d1450c11c1151602e4bf703be563c2e381c619be5121329f705bc65b9c424e83201e2c01cdfa5525ebc04e494c76fcbc557bc9883315b7835ed83cf8e3156743aac20d58c395a85453ac61cd181442085637e507d1145e0182aab0d8e28fa314c6634c062b4819832a90cb40469101323a6cbe1dd8b8318cae08ac9c2068ce3e1298718a4199a239a60627cd0004796261a3150707c40e0a899a1c18d2b415f2d8bcf861148376a47375e3e24d9e81a0e007005c1f41a538b92c7d81aaf96d1932b8c17ab8868e60a16ce22d48242b5120288c5e5aa8830125b8a88da2a56c69597e7dd8b81a8a9a674579852b1329ca450debdf887a61f9c3c7c95ca68c1e37262b11d0610d1c55c766349355f31f9debb65680bd196a22d465b6862136b63000990b82958d6e75e2554352716db19016d04486d2333fe6e01110edac396db0312580833c0889a520b5e6831c08846a6a5c548890c278f015a9cb010a0db394c28e73817b006592a5529e37da9128647a50a1757086f90a552155aa7a48a16941255708001d364a954c505540b623c24aceac26301b7a84085c1ae13dc208cb5785de04ae4f950a966e000e592c15e964a3828412d81b9325df025c37dc1332af074c0368bfb83594f6c24c036b66c43d892c0a777c89c9739ee86d7a76d24d00dc242dfd01389310640d9a1794f60a11aa6592a51893294e3bb54ca8b95acbcf07149744fb596cc445cd6f327cdd377e7ad3e302148198f5f1e933e8fcb429036f3bb2079914c20489c39f3bb4c87004403c43ed80959f8dacd5b4c7d1f8a8bc5fe31de5615e37f1aedfbc498dbccc7a2188badfc5f5cb52859f3552de85893aebabbbbbbbb6b54dddddd29cf3b4775731b80c125ccd97b6bdbf5fb8b45dadddd8fbf98b777b777b7e8ddddddddddddbf4177b7543ae46ca7d56eacede2cbad2887aa69e9d4237b244e958bea529ea461d7f2bc548724653ddde2500f4da93cc75f95ad9507f6b88d4c9229c8924796054075328b2c4190b21e69d3dfa16eb87d38d217a173cf0d78ca7aac672b4dc9d92a0f3bccdaacd7f3483db4d5b28ed4d3435b47ce7c9f3f86775c2f9af2562fe69d58ac0789223952a73cea367aa6f76097c919bd21ffd29e1ea41e2424a4aea5ea9138fd12a907d5ef4337ce9cbbd94e9b4e49db9be0ab769db2ba37c1eae5aedae4cfddf52638330c888829ca9b200835efc839aa47451e0fa73c9537410cdcac819ae90940766e5cd7081e4202d89dd3a2c4913fba3b76303708e66e52588740ea0a6e23332c01f393b8eecddd0ca595c280e409a6c001cf57fe88a4cd3c40df03f55f17b4f99582c91048c534bc60cd9d7cb9665aafd7cb46083a8977a786ce7c4951dde5ead35a7d0eb1de26ab8a0489233f47c4b4ca13dc29107f81f447a7748752bf9138f2c75aeb08667a9da394524b6dc801cf576015e76ef3509d9752ad54d2b34f3c4ea95ae114ab35c2ee8e1957bf582f6ae30678030489134a1cd0660e3eef4b8d30b3cba323cf083361cec4dc42656e93367734b6e5cd80a3cdfedd4c2b058e5b764a431baf1b378c4c1c1efd683c4abfd27894d615a6065e9d6ec03dcdc041f79888c7303beddc81de6c85e0d52144aeb1c64c8727efcd61c69c9f94b3c60695af2a5dd6bb74667377a7eeee2109f0a49435e7fc71668a512b2f26aa3c994a792a2fd35620481cf93a428993693d250e0adeca732d79fcb9b0b7e45220cc13ebf2e8ef4929a5748ac2d2b9962753b5524a29ad2c6f25dd5c7707001978d2dcd6050032f07c49f9d4c68de902c2f376383cea32a6058d6a4c92750461b76ddb38784058254e7d9beb563b77b99e065cd688b422c56b0489ddee46bfcf6d1c50ef4b2ed70ed0da4c5e6565ca7439eafded3a1005facfeaf5dddde906e6cdb7eabf83a67edcae2d4861bb5d0ed5516fa562515a290a3539704ab182a0de70abf571a5b5dde5ac673315381bd5158d8e4a1cef00c743c8a7d4efa66bb17a88acbaf89524bbe1552c849c23bb5157a5ae3de250df4d8e9bfadd887f638ba8b0a110e6bb11ffe672ae19ffd284571d7d4dbf4229a5b4a32fea57e6e7d4e4f8e7c4c41c7a252726e6d80dafbea89a885fe97d6abd97785373a5e6fe879f1aa1d3a70adc66519dddb8dba1404affd2ef3efafdb19ae395c2cbb9bb5da1f5fbab57255f9ef89c62cc29460dee516898c1b258594a39fda79d33a491024f280e0b823d813981c9008b01d60406038c090c08b624094fd80b6504f32d134a597ed8814a16dfa5525e1c00157c4274c6fcc6e7f786a76acca79c72ca4937bfffb1d8dd2c87aa47405956d0e30bdc5a7c586511e341de1ee3bb39d10df2e8dd2c5c727df98318b3043a90e1e433a3d8e3f243153f3cc1618cc0218b1722a869dc1b9bc2512b5864b001604176efee1e4193dcddddfe840f53b2dff6efef072272dfdcbd441e3d2c2c647fea5896b29f8147fa354b445fc4b633c8902123e4c4087e564db1eed7197886b004d4db6292dcd70610f817d05f9ffec0ae2a626c8727c72a0afe3c8aa27fcc7fc79fc786ee5323d07717573d53e864cd286bcaf73ba19a32add3bde3670790cbec6339d6d4be1d41f93ecf1218552346dadc97b024b0852581ab679991dbdc9ff92b8487f2b8830883c1aef07bb7b9335ff968786ccd04b56ab7556bd55a355814789481c9f7479951bea3ac21d33af765605a87f5f765462e93096123a3d4cb845c36f377854354d80ac78b314a2694ef8badd3628b8e0abd66c7504dad7570f2fd9aa7d6e97c7f878fcb6cfcfd1d412e7bf9dd41e43b8a7618e5bb4328dfe739c233fffa51a736822aa3c29a9ac4b98fb5c0ae108916fc485c3ff3fae9fa990fe20a61aa991086fa9997331c06b111c254616c2784a14221dbcfd847e24232c3d33c42609d9a2ce8aec211639d5abe3f03f6b8cd7d1708dba1db66fe01dbcf84b1540844ba8d3b4f5f138870cb27cb3cca56e7e379b0243a1f2de056adfb9a9adbdce7e90177ef600d1989739f4b7908cb01d7a7cffd58535353737f4f35a084d47b0aac79026bc8b4781f158e1ea6529f0a534085a8a75f6b6af984214c5d075ac055021582963d4c01e585094085ada716affcd1baef200a2dde6fbacf812d322db66a515a350a2b92555055a9a9d5d4eed73cdddfe1737f07d04d023b0746e07e59130b065d5bead71df767afded45d4a5bbd7b764bb912a2cb9b5bbad14a7d8ab1777937a7f2b76abd5a9732795f7e36df2d96f187e21a7cecbedddf38ca7949b6be07ecb435fcdc66ce89ddc79edd3db317e994524ae994f4bf5a6bed3bb3d75aad0c312df0ac312c6258e0e95d6b2da5d6523ae79cb55a77f77929b771f70bada25641a7a51bf5ea9456bb4da1ee5eabb714ebdbe91e8294df34e4f4798456f73adfddd6f91ddd1ec7e9fba3b82b3247a7beafe6a998d57228e74067bbd523f65eea3594db056f746ec073d2f768cb0e2ccdd47e20a712604b487974b3d52de7020d3de8b0430f367831e056964b3dfc6c61302acb252b2f288195319c123895e592151680b1f225666384c6e5ae870309b06d1f9cee0e5e2dda701042512c40168725fed436f25241834554a3c2021616262a5e583e1019796a7c1e8e2965c141c555a912d44164b92177556479a2a4c5888605a594f2a0c5b3e2430f8944633e3e3e3f6ea50895d06c9c434b568e6626cdcb0433ce2e79e6bcbd4dfdd86a2cad48ccea631ecec8f5250f47e45a5db2891dbca0423465fb8478696b88be7b12169c74b9410556ac008b3066948a1952b0c4164c4664c060bf4029da945cd6335b451379740d9d91fb69eb1045ee1d72c831c023fd1a513534a5cbd017d8f3221d96ba4e2abc7c41c1ac4a0e556a992ee57094a90a327d17ad4ce1c475e4c60105b99b7aada12ecc682a2391a81cc51a20673fdc5fefc9f4dee7c08d7b21a8bf1d0a84d547551c8e44b2446d3394a4f5a5adb66d73a0dd9e03e5ec6e3069c19b619276bba8fc11c78ae83adfd649410557f6d002ae3c7f7a7670044114b43c85a0e519a6e01fd228f87b51c97bc865f6bd89686a54be1cd8e579e92f87ec99e44d0b0289fdfbf791d4dffee27bdf6dfc97a808c9b25c9ad2349366d209f044721b1fa788849f5a076707fa4c3ff54966ee79dda7bc4f32f3623bae3a010e7bace0faf66145d86639a44524b00fb98de73044047d40fded01e10a33236ea3c3d37cf26f1fff06f2ef202fc27d050854e980dbc7df4794272e49b7f783a57845a977bb66626934499928bbf76e208fc5a28bae5b9bb6cbe42cc543e3913c646e0a6303303cf4f760079d9ef7fb4f7a235b1c41662ae54781e7bf53fb74c76d24cd556be8ca3e935370249fa353eaeeeefe9e47163c2e60b0d64effb9fd5737bf7265b3b5d6ea364ca1d4d65aadff74fad37fda5a6b7514cc56a2448912254e640fa46c1afdc83ecf952364328d3607b8f2fdef95c20be5f5a03a2f48cbbe9ed818324cdfffbeafcb116f9072f4742790d0b269745393a33df93d1ee6808d5cf66de1676442cfc2165e60dd01019b82a72425f3a45c41ae557a5033ac3e2a2e5a6c592a8571e2ca02cb1d7a7032e58a9a20bcbaddcc757917dfebb92e167a9aa9edb339511c7cec05e3794e2cb633c5a98429b58abbe04ea217093cb91b90ae9095cfbb54842eae79ecdd7bf1f71d171d9723ce092c28e0bcc022041316a229b0f000802c95b43cf1d249190ef39c3da758913b7798274f4e30664bad8c2cb316a10524e8210926a47461c3ac9772ff4d8e0699fe28166123bbb7e8d220531ababcd1d320cff9e1ce6c4167c61716680a50a64fe95f4f0dd11b986244948b0759044d32a57fb1642a823132bda1874c9fd2222632a54fc28c3a9e35c941cf30a3c80ca46f4928ca074df08873cf9a18f50fbae091e6dec930ffc7de2e1dbba6c03d5aec771f4550af45d0d1df448fc6dcbddd5ba6aaa039b577fbd875a4ffdfeabff8adf3ef4f9d7e1f75b7757acae9d4bda9d396f45ef91b5097d685cedd5b7ae0204c7b00297a3082ffe6d46953b74eabd36e77333af7d5dc3e0fa4487f070120bc050f20450f46e0c01d921e4001d9eb43a05b39ede92740f5202506798c598155592e49a94971a25602a339a8f40cd925bd64442300000af315000020100c07440271501467921eaa0f14000e67a63c765c38958793288761144419450c31841002003186003344c51900ac150173da3e77f2807f60208dacb80bd2ca80fc7a789fabc4601e1f39f99e7636771fca501d088a9fefa2e56484ce0ece9bde41b23b47c5f1aa256f60f0a28d6c43f380bf13d1e7468e6119b4068e242e366996d9bd8438d249ea993ba87aec666aa49060589989cba75ba4c9537bd33a53fc368f99489fdcdfffef4b75298da42cc881da6023a538e9ed2bba2c0ccf94f238172242e48a1102eabcb620c871c5adde02c124a8fee6cec319bfc1b577c0fae57baba8ae600844281188be1504f1e4feb3cd3510075ef0424001e677f94cb8cf91c3a19347d4c4bfe72cf83eb56bae0103ffd2264a48d3e41c2f723f96a75261b11d430146ebf1014cd71660f60c66332f5f01b67fbfb8f9f40bea18f8a3ae8b1a2c60adea6216672dcf9c5104b397a500d63f8ff0603c1f94bf205ab0db28595e6dd4808e28776f94917dfa56b2bc24de43469da962eee841c08df446ab8e72589166fed4a8b538027ae108f67b1a75d70666f7b5a3d795a2a625fb5e635c5cedc52f221a762a33826558819e11c905b221391c3141827e33d322a43121bcae39ef4cdb0dd3f0ea6497f1e201cfbc9570e3b60f0f2868bc57ee43ec5dd36c8771fa860ea61d86f420a319306e6c35e76cc6095fe37da65d90bebdf82f40e3d07870bf4e5ca6b4bff3deadd8e15a308b4af9f2cb78b1b7e9de99a16cfc1719eb807bbe684be6dcac653903209f09ff66f2f0cc9ed83c24342cc34788a85b7b0880085b24f448c8082592caf08a1c5d2ab50f53919d2087a74c405a9890dcb72c050db210e037e728e393d1063fc63c6b02452dd93e41c37f604a183def363b19b3d281750b85efdb6b27dbd7c559403cdb900ae01fd7e50d804f4b13cac1df1b6a8f0458812d6c493a21e02d9681c232ec5c0241b62897319360cfde9dcf8e0b5f7b08e9d33fd7a9d3ef7f232c258805a0b8c66a65b64250182d3dca1ae7b2c292593194b447d9e3d8778dd5df7c646102289a4c7473840121427a80f6aea591294d98a2495f34cb6ce839308e016fa3673efefeeb51109ab9477ed219e5b25c03bce3221f70dc7e79ecca3f11bf9d9343ee9711ab1f48ea17c92f83513ef8ba05c0f9a06c3b897bafed756cb9f01e1265cb2393b65a630ca0c49499c936759aaaf6f4d8536b5ac7101d0309ae11edd3bd52f03c666023b288a96116f4a30f1b1552481a6d08f713ee7530c65d754c6b12759df556de6b8b170dd1e619b4bafaaddfb023b15ef92f1bd8202bb1f5ae5682dce2a9c8a6f682d458d64304384e6fb60baf45760432f66d0653111157b5c912eb5523b58993072b63dafdfc5bca7b80808671846263bea4f6d7f42e8fabdbe828f540e9b5ca07bea62528574f7e38ce85be882610166998071d011ec1fa4d5caee5623fa2ff3329da3f0b778bad68a02169f819e9a8ec5a503eedc4a498f0f0445b142f68ded4c7d8b72665aad12dbdb7827dc318ad12c1de5ee9f693afe29d6bc14955c508880b380e1a7e41019334545bdb0380a0c40f4a7a3bd5db49c99ed678485f0c0a7b30adbdb024c2abfeacee6a9ce96196cb6f5e6cbc139bc0af711fc9ff75abbff50a32d6d463809e79d859321a1dc9433f4046475ad4b2c00b2ddc51312f62c11a04b04a4d33788038252b80b83c867b335a8ab2191c6fce9de67fc50c605e0b6f2bec505b80ab1665368a4940f4886552a9bf221efc79d56d978c23b66441c829c6b5e0f6ddd6186830a1bb7bdb68ad358f7645e722860620761451330f2549d4ce044e960814a1cda3a776624114be7b2d2226896d488abacd37af1898a515a77662b971420d27b7e41cf6b4b7f5772a156737c5d7cd86e41ea8deec4109592eb8e64e1926bdda1273cbd8c8d8de0cb20e29a5d109cef89e808db1f2b1a8be8a3f191d46d698375b4bf53de992595159556302a3203fa74238a33268348a8e3fc1ac9cc214a8ebb0b533ef913fc86fabb058eb078f7de538562909e1263064881d6071f86d1eca9193a2f58125c49dd836727e3f844ad961fe374d580acb07283e39de2a3959e766282b971c95dac59d190cd3f11d5845a2c9fe55afcc934c41337dc2706e42022fc272b67e4316fdcc5dd5b62da356d015f77b0bd6e57811da5b7a4f1ce699805bb41aa6e1ea511fc746f4ad9de3da019b7549135b6ac94862e451a22c2db4206525bfc5138a28916aa91939955ff57158355e418bc001ff63554219c1ced9d54e7ae0b73e7eb1b2282dece0fbd81b8e261ace38057b8c934fa8be0fae57cf42d23c0b3d4e18301f8904b973ce237cac4662c29fbf97ff932403947934693d19b859e91756b5bf0a1735559e7955db43855c8dc79d386d57290c7895e6fb8ec59bd94050a573c077a790ab3e45150b5540eb344ec473db0688d8440235115821a2cce80ca5a8eb05076532f4618833b1f49ad8ab017e51f9ab5e34c697282b3285bbe98b51bd2c1e4a2aa5cabe482c14854d912c5d5346e4715d1f984bc1cb5a0747d8f18adfb785190b60441b2344835ba9f3b030466367fd0bc73de893e67492615b300cd6694549700710cd9d29930de5f48623a182f79025c6c3365357667a7c0ee80e974a6041153c9f3ad28d6f97e847cfbe8d935f98a0f07280d8974db7a7e649048cd4af36a335f12da8dc48b85ef901ce7b235ec4a5039cdffa61e62f5a233dc53c70b0d21664fecd73e107e307c2a4ba116fbfc241d8761b4c3e994b83020d02fe9aa499ad5a536cc6a5288f6990ce6b4cdc6c8b8997ffc564105df9d4d102c77a252eb93f96a5f5c349c11d9154b2b1fc398678cfd05849abd064287ea33110effdbaf3f9520179067c06355057ca6dbb2f3d8accae2161f0293fa1073d2e81fb81f2915b9cc01f0049668dd87b32bc95e7318222fea84b4d4498fbc015ff21b083ea64b5866110a6dadc3edc3aa07ad5dbc66b4aa92447d44411cf7e33af631cb209277e629edfe66915ab7c414408f07c59d0d9e122ad447a5559581a2cc8c4c3f417d6f04b7592cbffa3780c81d8661ff0e72258ffce7db022f7801ee2f5d6c48e293a0ba82c296296e1f74f7ecf4cb61275f9c51e66bd1b69940ce85d9cf7419e8a84d4e970d1e5ce7c3bcc4a6ef68e45db8c8b0f49cefce5208597bf71f30382e009352834320e5c8158c34d6e548d2211c2a11e089e66bebcc18d8568c4df7ca973ed424e8e3c3b0a8602cd4728ea2405da59f4093f8c51d2635dfad7fbc343879e210da34601a4636f1b3146d03cb225b3f6eeb502396e959325fffbee2a6198e0be6f51ea0e9637a00daa6a08554ac07a9aae4680a230e4aa0f80d4bcb8d45e55a80fd143aa6467e8d7879bd5f9386c1a94ccc2d99b61dd4c006c24d4d7568bc691b846e704951c08e5c7505a9d14ce03669fbdd7e604edd94adcd601e868096f0810ab47751b09e90975c47fb2dbc20e12c840e7a50505e09faa8fdee9173578bb91c54b7296ce9325cde34872a45b80b2e1d24dc69f1b9c50cf62add3a9c7a4127eee6bd42ee519063f7b8b0133891fc2685a92e4476dfa4871992d00c9077362f18d7ceac4fa61d737228d454724067b6ed1c89461c6ae236971f5559fac9b0261a3500ee617ff674dd2338bb4f4b3d3e77da4d9b619bb9a7ffb3539e2bb63bc2b46653dc3a82d06368df85ef817e5b2d6cdbd530e70c7fcbfeaa0880c43453ccc4705a5d2614917e27c052478446c8ee59124563c1ff95015d9eb00a79d66a182bc549faa562da32c8476be5849abc4404e81e05ca959d149db07ad3f771eea2adb04a2ed43ef2df2099a0cee96d6293db956a31709c8122fb59fa3be8635265967556c51f134ec23eb6f0a9e57126ff239cc454938a191529bd32497fc4c1ff482e244a2301cb57fd29834bda35deb99684c4a3fc3958a8bc5c272114cca8b9623e87abce964db95f43aa377185994023837cd1f5712b8468a2ec64c1b6ab290bdde1b34c0cf074b04bb143cccee83dc6dc1724f2088491419e725958a2af776b6f6f726e81a4230400e810a03698b6b714522cc4daafba83ae7524cfe32b561d14c91b8dc24cec3cd34a27b16eaf13a0f4ddf27a29dbf837cce211a5d13dcc6580456c2903a50bd8c36a77121573c5d341b2fcce1a0a15234c248a17aea5190f217d880cc36619d5965c7450328fa828247a8ccc2bbefb92d0d73fd38856883c6f0251a2c8d21e25773cabe990e4f99f79702836c31c49da3b1b1f6e35a97d2c0a0681a4ad90122ed3679e0132b1e7185260815d295b287d8733f4b68f57f56c6dd2bd1efa93533817f82ce770502aa54dd403d2c718ed8ec3732de2497999d636edcff1608a5913c1d53c190db69ffc5fcf802db43ea9915427226ca82915c1ba45b4aac071c17ac4a36a3ddf586aff7406349a5b9c0b8d5f142d5c17917fa7c0dc6538e027a71c5e55abd1cc11cefb0a1d1a7e6f3ba5476f0fab97da982055b0c6b800de1380401da834c06f2164b62f668832ec26165ddec536032e5f844615ad6e8acb202c09029eaf4721bf0afac222eaeae018a3726f3898bfba2d4c8e4791624adb943af2501070754e9e50bcdf7b75f9949a2ca98f75f9221e2cf509e0a92fe596a5b2c369e269e78bcf800384f79fbf1b45a668ff0cbf8fca6ec6973573e5ace051c812a43df83512b391e0fddb5d5c3044b9721cdee543c2f3a52cc54463d5e5fa2a76b5b88881ef199a8857977a60cd68d3d5cd1c82eb2922fe302d7bae4e8075f7d77410b837ea8a7c5258b8a2cc45a6b2e9c9e71e9b4f15aafadf18e015ac545933a94173a995eaa34595e2ab4f4160d38d0eb0a890366296b310fd2f69222c4b3032a010021f366668f36df59c7af2052188c3bc64646e17302f18f8930060b598ee0f7fe10221a780d568f579ad2c568764696013119357c727b6e666015431637dc6f5bb4a7ef2c01aeb0025b307fc8c4cbfda3e7b0deef4f78dee2f007d650362ccd4520ac67afa190881eb2dd451873d64ac767f623018d78347aaf7cc4cd4d60c8cbb2bcc606cb036e15ecafa8d4d45180f7e59c893376995f8c68f00e021b6a497a3eec52e625a65bae45a96ba56ba289d5d6cf60cdf4dc871b4f132a8cca86b0773a9f627d128caacabbcc279fed921f6d37a290a25ee258123e2036b43a07262824812b4f144926bbc5204165d63301433942e6fac261d095dcd147c8586987e3c5209749fd6b91c5546d4eacaccbdd6a0d1c7395419b1fa2c5ee31dca49d6449cdc5088378982485261220126d68e97a507021ca5e2104746c23b52b5131e46154f8b6a6e22cc8f54e9612a0b9d7107f576a857acfe5e380c6e74774762b84f77514214bc9c6cbb72254e8bc46704762448d97325e3a3c0820b1816764d94085124fe5ca48716850c30856a7583071654949545420e0da603f23c41d55cd5efb04485031a9a6c6364676ae1304931abd64091e6f4770a7497cf993192a717ed2916570c5be78d9cb143cc93896942b66cc74ce7893cb8343fd4ee65be5b3d8e312d8418d5260616827267bb54e8c2fee898f2db647d758dca89ad354f8d9a2a0828591e77991126956c2bfc2e5c5d07a9c78366b0984a074fc478f0fe917035208a877856ebd215da5602c2f430fb5f819f7412a99c39d3f66d80c360b3b8f346991f3641b9f0e438c1dc393e754104a96a6308ed821ea4e1f92b9b52e9a11ac32bc542f93d1a4689f77320e6552b37651854e06c91ea5bf120f5f9e5b6afd91de7ebc78dde2b67087e9e020eb294e4f2e8a0161b8aee2645ed282169c2dd5884bc9efb201bc4fad8f40558b861f3be0f28ff18191fe7e573282e505af87b5e36a5fcacaa5c7bc2e707009a74ebe9347b7c60e6741804698d53417b7bdec963a1cfb8ef41227e049088aea02bd98f1c78b52926339afb0f34733b072de402ff279f7cf0abae5e21c8f82452c5e80f2570d699ce0599cf2ca621b0e88fc2b9c0c0eb24e1443e9e8fa885e32ec85fcd10d84ee041a24d79f59b36c90d64351dd3c6b625f9c018a75d5c27b28f64b7d0fa83dcac222335c9bb7c4fbe58be76f792950d71aaf84cf5ecf93286f9ace53d4cbdba6ed849ac7c0b1b53d7cc7abadc8393d215e294873f186d90a41b03b40e03072fb59e9b743071e1c5d8e4bbfca16ee5372f115eb4e52060fc2289dc1229720275d6ff2e4c9e1183c8f60be6b54c240faa80bbc26f923dfd7a068d3366f8e23e47c0a8bf96673b1c2793cd66d928b6efde0ae60fa1a4db2687974d5437ed0ee2a41d5abceef16ab949f0de9d801fa7464b872fb4b1f6308dec628ed9a75a3fc5ae6d3d92ac87552fa9b7598de3fcbb2ecc50187e7764af145dd0094a2241e8d71fb59cf07e30f0cf1b15d673fe97d791ffde6e14bb64951279946a45d6384e7d1dc9d2f59346b6e641a4174fe5d928a81339bc1b3e891571a4cc39dadaf268576e8c7aae0f2fb5967e0c53fac61da39f91fe6cca10cbe28042ce1fa44bef5f84ef5d5043cf34968faaba099ff11f10b6dca01ff4e7287e87e55f96a2487f775090b22c56f5030b7f5e37ecee32a7dc16e11e9587a3e433572de16dcd1ccfbbd432cc8e02c17cda87abacb2463f9cf29b3362503a40c3889587fe308eb288bb32b782084554d47e449332c2a42cfb2e22da57195ee682ff484476414e9c7da6e94e335560713eaffe55f6d1f505727eb322984ad6b596834e7e3c25e421d61d77eff2399afdb23f75032c22e27718832d7ce164b39c79e656924885da5b97823a1ca3691056b764319678405bf619612a82dd3b95b8243e51e04432dbd607b15770f0e35f0ef7d1af824391362311623b3a99f0296bd246dea27beefc1f7bb2c579040b79ae527c725d0b7b2a94533fb286c8e12d0d7f4b752a824aa3f97a089a91b828a5247db6c2b69ec247e7347bc92cb070b04a480b61d2a2f128b93833d0119c4b4d9afdd5eafc15b5b455325ed40f8a57e3d0912824d88105a020a981496fb2246bb29375b1009f17e036cb1c13ae69b81a7e9a1e58ef9b1c7755bd383326c9cd0a2e70179023b8a16de266aa75c84923001b4005395a65fffc1caa0d4430af6dd0a3c2079e7b4ac860b322e620b51d7fe6e36125c870f015ba7f53034cc24943c510c28ed98bdcdbf5bbfd976c4e4b1e50fc2814d4dbff4866802196edad802ab27d6e788650334eba0ee76a9792090cfd8f5dd8b253f5502d5b9aa92d9d372249436fd8c91c58ed56643ffcaa03f2b0c1c629358a80495a88a9491d0e3710bc8a838c933a71881051ffbe3143502b8455d2064a4085d646347bb8b72e73b851734f551d9f7253eaf83084c977ae5807420f1932fb1aa4926306e8ab4117cd1644d48e9c40391be62613cf340da761fd1b09e83cd48c97996cd201dc020c2fac54e2c952df6a216a6f4797007dd51608755d8b46ac1a65adc7ec4558c184d9a216c6b7422db066037d4aef12305aa6023d62bb27587f006c7196f9637203027490126ffe697f7461a0cfba3fce7250f34e1647b5eed48605116c9fb18919f0aa5d98fcf03141fba06ccbd979c6561819cca24b8507458d8e01f647e78f27555a02e7e4bf081b22a0a883dc2d0608d5b9547368b55aa72d682d3e6f243bddf521d4ec618f054629a6b585cd79e8f6a4693c43f050a5441c8cc7a9682e22276410a2b337c1e47be9e1410b43e2dcdc6a7fa334a1460504cda5385312858f61a242efcbcba962c26105a1115731c1b1cc366ac4b369a7f5ed49a5228930adb7094c2a7100377db4649c2d91c890bdc7c1409ce9771d55d3517e16d8afa55b1d831bb5c3cf48f7b26188bb1ea14013b5ad0c5a44976d4c22a3fb710b34054a886da1024b360298ec6b42888a534ba381c1101a403f9e24e7aff0f1708227ee6773b7650322c3b5d37c39009110d566a4c5af04a5e3dbdd92110045ab3fe1ce26a95e009611496dd8c0a7d33fb89f48b77d33adfce3f30d7d39869c903c05c3712a066f536a50acbae2c8da8bf34859fb8cdec8a5f7ca0f27c9ae141a4bdc30c62ced7f4e058f4d46c645d4c6c2e279a2d28045a725d605eaee58d565938411166f574c5002f72cffc751accd9643e68e8e0c95b180ddb9a0a5272918ea4c0981dc1046d09c3ed50207d069b70a3140415f9ce84f043ddfa2b3c1a6e69e77164d7829675e359ac82fc47dc68c8f70a0a997942bbe900a6a0444ee663616dbc33db69431544c3143572a34615ba5954889c3e5f0e3570a587b4622b6ae38f152d5197db4d4bd980a456f5004f72bb05502db65b5cf564266bb68dba6aa8f813257f22883bb41e5aabf2353bc74e425fbe7534c9190a8c48f8e6cfc1c3bcc6ba1f955627af3a557e60e9dda2550b671e07f1dbc5fa76c5200302fd457d5ef904d8c815252068bad11f583be7b71cd6886ade4cec32af5680e7359ca61c26e06f1ba9842b7800909109d566a50b364ac57ef077d20625bcb97148ba021328c195dff37a14124cc2aa1cb01d2b83bb09b76a799abacb41c375f48f93eab3bba08483cdffc924206468b22eed62a446c32ef0761197977cce0452c3f6830116b632e81ab2998291cd842bd94c93c9660ae5024cb57a7e224b75cc648591d32d96447858a14cb31191fc3b1393dcd3fc5304e440186a04b21f658d5ecf4aad21fca605e96798144c7a18b299e3d308286f998149d3a09037f56246bc27d6271ecc692797d113c84349ee601bb2523c30bc3b59494b996df532a35b360fda99c1cc855e7da1fdd87ed4614cd4c1c0cead39b054ff2778230348075c2193be3d5e6e8513455fa57610034a81f568ebd3846de36977ce0b2f7059cbed263d9603b8e730774b42bf8617c7dc3fd7b30222478844706fa2ac4193d2b1bc2681a2153e8f1e9d835fc17753c087b986e645b2782b814c4ee8e9d9e1fa5713ecf67cfb549bd3e275bd3ccc49ce8a2878292cd94256ce61014131df520805fed6902b72588052ce6d114219bf25c48a3caca094e75a25d0011da44c5db5c2dc4f6d7f6435fb0acf28e75c98f3cff206d527ecbbe963df74f4bdffa0b7c926b156e43fdc7686fe42f88219942b6a532bdb2562a1f3fd27229f5e811d602248e5574b27f869732949de52ddc230b6a0e7ed3108ce36aedaece07e67d09f1bbe285fef6bbf63e9adf7614fe4a8d86ce6255952f4bebde963727cac3113e9619b8091841eef57a18979ff1e3437bd44ee88e8d2280b3bd2b02bd89892edd29b53591b9e0fc20cb83c40e4fb96621757b110450e473eae3f1d79182965ae7a1e4fda99ab9ce795528ceaa6f94b93ab1a69df52f4e62a18862b0977d7fd9e4802f8e9cbafb51983ab70d7e530ff74159447611780c1ce46a0a258d2ae93a5394b60a768becd1ab70f2f5d695fe9e5aa4eda57dabdab92ac257dcf2a7b7d72fa16b5c1f7a3a7a0c888057f4791fab65cdc23a1f86802d8d99eaf2a905ded7ce80eb12bc687aea8dd38e9f5f9a5d6c15514754522da44df26433c3e396b2f3b3902a4a3728544d48bce4eb3f8307ce982aa1a31463e42ed2a2231ffac6ecc2930ee1878d4ae76244670e820d5b9d3c07f01f0cb396b2e23c7ed10584a8cff7f9398b5683055c5b5535da4167920001a3c48a8b89e3841f46d32c403d8ccf614c9abc2ee89a4ef97f642f71b3a8228e7fb8c09a3ff49ac55f887ff86bbfa075c3f1456b2b8ee83427b79c804a48daa889dc891f0f63feb8f7bd5e8cdbfc4e58f5fea4658f221f930a7b3278487527ad647b6bf4b3bfa2bd84f8c4d9aab41fc38cba55010414c2056e3543ce926226ddb525e797bea1a1dfbe241be970aad90cb5422f4fd870b46c650f7cd0c17b34ed16fe1c19dea2e7d518198b73030260a37b016effff9a94087e9d19e0deb4ccd096628514efde95272aa573ad3f4635defc796290a7a94ede7109cbd8f9362349dc88ea055343118e25108c03d8bb5a3ff853062dcb095c20e3f4d3b473ec5acb678a204edc5d68fadc10ece225977cf7b134e2b800de8c3e1c1e8b39701ef6b06411ffb47d9f9b15078f8c1c535274f31862ea5531b553d60fefcbc51fd115ccc6f6323b989e9a95667cac9ab890573e01a8b2f6939c17370e845ff321b160c931ca5b8c55750694cdfc37bad694298f16c84ea44018e9b7b6dad501b6c4361e9c4fa089dda752595b727a02cf9ad065efc7a9d61543d56434ac97f5347c4dbfaab44940c29b17ff837552b0699eb2840b1163bade083acba0fdd3b9a0d9112fc068a6eedaf7f7d2756653d5f0999f709529831607574febc18f77330b85e6317487ff01496b979ead15a4d754423e5ca889509eb734ec415a4c4015c38755b7574b8c7770b45e0810592d46fd4033af7f31320badadd9f8a738ed0dc05645746dd58be73d4ffd4bf4da5072a2deb4d0b24a738044d5d9d0105a0d10f8372250aad690303980ad8f2a7d1b50e36f3e590d2b08ed619a6802efec2966285d9458a5d24fbea88d9a6b6a5970611b914cfd44235cc1d4dc14970b1e4d6dec95e27d27248b18e3b0e1ebb3a8faa18b5fdec7f56339b2401a4a85a211dee34398148110efa0343cf5d68e769355bda6f72fd92a3c0571f1f51ae8c6d274720b8713582ec3cea8bce40ea50b7b9e80ac22be2884d586a3ae4d8c06aa94a20c048be0520d84fb91d676891b4a106f3a793c3492265ee8a6ffeb98d7b5fd1c54629d6fdd8b6a64153b8b13c8a4b4654f9d58103364d99124670dcc5961d38b065e5eb3b6576c5c0ad44dc31ad1e43afd2d13fa1c2418b5863d2348026414d5c3fccad646ae18e124096a763c912a529e53b2262558ef258ece2d2240b5ad36a402beef876a90c0e4981c2987b7e34bbad16c6c39f67e78ece7a466288950f4785c2d81b78d018ae23b6b8ace631f6a5ee6db05b8396deb6ddbe49ad60d933da56e5fe2a20d0d82a140e8283e3dd227199a5bcee91f0931382a3c0a63a0f4a7ca4ab295a968eb373e92c6fb436f01756219020276fc31bf32e62b5980ac68dd5e2012d9566a2048a93a2d4f239c998eddfcb444bfcd9a29195614814563b66581489631d1e76c4a580ac2ca6ef6666fea7d63491da9a54dfd74d79ce9608e3fc97dd47192d4b0852a436d855f9a41e060d6c938c9fe3a3d9ecd955c4f392cd9e86a97cdacfc2bd6462fd8168066115339cd33ef82b4d8de27ed938ccf64ba8a94cac550d93f63de76065e261eb56c206da557e8d45f785f3db33768d4cc46bdd2e5c9c022dfa5616c4976cb1fd818b0bfb3872d9cae9cf28bf2116291528723f88b3d935ab3e2eb2d62e216437de8da59f55302d945e957168758f940c80051ac66cce88763887477b7aef80c5199f8bc1d2a69a7af440b0a4dbc978f5eeeea05ddf54849a1450acef5384737ba83bd005a973e32af9253f2a2bf39549b15284683e38f9bddcfbca74af74ecffb1a88de7c0edf564c516c467b8fb8d752c7f2cb7869c48abe318f060355911d103b48e86e490593eff777504efa718c02c44fe09465f8563db041e749856c181abc3f00c4e114053ea92bfd04afe473a6c47f1b3ef190be3d53633668b7981f883047221af9c17325e6a103c3e47e83c92c420d58c9fcd6130e47200ac4d7a1349c828e24a714902e95bf38547863dd831718b9a0ea9ea8c6c4f106f680f9c8c5a840902d488ddd1c88a3da2334e79578b0edf5bf66401c0cafef1d5449ea12bdeebc6db48167daf6542a12edc28da6ae2dffda4742cf993851acd6c236c00c05173147919397ae33929ff56bbede2b1992b5f376818d84cb8bbc00ab65641b4903906fe68a44837857a2bd5da2a7d1e6b3e0b1d585aa3973c61a594423af4843325943aa37656df2cb80e41311bca066bfc73c72ad4317d01f1359ca57456ce1cd73584d24a3ba5c85f91aeb0e16b0516dd5c2f68dc97aa51ee89ab18a465f8cff8c0ba0f49017e974e796171d2fc9b40b9919a6fceb9be4a0d5e2e3e92ce6ee1bd401b04ec177e60d84b17a4b52dbe3a2901da650b2ec7e558203d1f2075289922640e02c22744f721327d33e283f3ec9dc40123e206c603f9faeb955083b6a177fb1029ece289e01dca0e36674dbc3500e5e778cadd8a80bf6cc95e2919dddf43b68cd817ad3791d2f36a57c0f19b1017718284675809885542982478fb982ea87ebfd15b82fa4276c7d8135db57263976697da39d636fb8ab291da556ea41823e60b45b93df6b218296d7ca29c12f27586fc7ec9225e3fae7aebc166476a7aef88bf5752047a5a13e0291ff09101b3d887a72c8d8db2ae2a02ce0eea5dc125045c49252eb574525a382e09369143d0d7ba1eb8bcf39b90b52809e1de5a87b03324dadda5bc7c831aba024f07049340855a21228dee567896eaf29366a90a0aead003bd74e809e0e02b0ffaf4d254262e02d4b69c8bfad70af223045019287babdcb3c2284cc113498c497c2ac80d1a0124d5d2c24932de4c90da686befe803a36a40e9a805d721f3efd47a3fa2f1f5b561838551dd11e26cebb6ac5842c375fa145056177d4c8f482c54aaa62880d50f1f10b0d5350f649070a306ee86d548c5a1425a0b8efe611cd646432b8097a9541780b3dad9e6aa38cd297b1c384ddd81aea0aaff19f78b1c5469e27e15a660ce4911b4a16a06d2fe476e49244d0ca445e7ab0c3e6a4712557063571f98bf7740672e1b4e5b9411b21707016288698c3105f9da50f414d42238cf90239527510f6c85b16216422bf6aa70047ff6775c678094a022a62da8892d4f190ef4aab1d6fd79f016e83ca27c0360a16b2722d2253b0d4f25a7406781a8e95847f674916c1b10e886093d2e9094095877a54cc4baeed510f172c4b039ca0f4f24dc5a64fa253c042113a9dbb974d9e9f7f8ae9ed017e0c8f77c34d91d2b0e5640577be600c7dd3b214077858159e857dff99f3750884564b66be1bb8a207b1af1ab0e3b6c0ebab500184fb1fac7c1f9e042ecc3c581c7d3f8eaf57fa022d61fccbfc074b77ed4e942456f70ce192b01bbc81fccd070c5980865d8fa0c5b68541a00a369d88102538e8191a59dbf37d385cbf14529f38b5908979ee9fa49606235ca767837315c81bc91f8ba0f644fb5c59c9ae63afd64d0d5c006e86073e3eeb59f308e3b5c12dc28f20af334f445fe0ad64670c05809c24bda89a124ba3b048a810a2190dbb7fe0277f6483a019d61bbbb031e0e6902e66f743aa6debddfab20124efabbcf0f63a08b8cb20e6e8b929c8b52ae02ac77faa458ebbe1399ad32c4cb9a6a5a47a01798f6a8cc35209ade084ac4347ff2c73c1bc400cbb575428543153c268230a053f384a0bfee312e1d15600b649e729fd7aae181feec6f9c9ab28fbd663546abff2679f7345267e65179a0029605568973b868c9f36e036b59999ab7a4795a7239fc29327174a1bebc24d03a861a9ec71f09409cd6d20ff7c4ff6d93ff781e1d154c3209997654c5d1ae30082ea0541e553094dae39b662a43eed423142d5e5b63f653971665666c6aed647f78f00cd0e4cf9f64a026ba7abd6bf404d26d253b4510bd5ee78531ab400a7d812eba61001ea0d935b0c67aef41d0a00466279bec11fc7a24af0db8898b5ede9083a86850d4abb61a0a5fdef0eb1982330d41414ac29a83bc710bc84f80a191da0e1ffe2c6256459f13c12ddf8955fac4569ad8a44d5811686a7c4d6cba6f235a08bb6091feaf01588813aaab4982d1826c92892881eaf545bb2ab5bc371601484f451bcef76b680ed8056d7be68baef93e4c9629fa63cd2fd95cdb223c0c91a2cb8f395f5e8ea5f22a9a79915dab28d27990420a119c0e1d6d4edfd14e9a5197c49a018766edee884f386a15a07878c6289502d3d6746a8beb96001697c64cc72528263eeba244c135dd37a57e2c0dfbdb4650eb5bf32862e5d459ff306d3c4c47a3d76f7ff8732688fda75c826f51dab6d43fb6047b0842cc9b89ca57e3f22ae4938f8b9b938355cc9e179f5f82b568f1469dc37e343a1124faefa67bd105a19d105adee82c48fbb2cd8207cf64f0aa8bc3a0ffe8a3100b93d3aa119065ef507c0efd59750fd6cd086c12e1df101d8d4f67a172e4f9345648a5052aa510d2897cb13723c1e59c07bdf9dd259c7b214745331067412a9ab6491e66c7844bfc6864e7490b43bf01751b863ee722e8da0ceb6ce1a1bb9d667d54c35202e04c874ed4f6f323473cd7ab6fbf9dfc849b9c7753393e9dd93438a54e87a8139682226734483253e698778873e6d4599423d4ebeed00c6f86a8ea797299a1511c8dd6fe4d884a93538a785ab5c4f9ffa5fc24704d256236a88422814278be7d5ef890e10130f87da195b7438c04a02d9586d1dcbdf8fe3b7108fc019ad289d5a8bcfef203ba39398d408422c6b9fef51c22bf60ff32442a4787bf730ac135eaceeddd35147f675a8c0e122884eb3bed7da0413372164277f29dc69c8f4ab8b33b9930c7b58c888b151d7f855378b3fbe48fe60af05e75391bf24bfacae8cd36138291346e8a1b5a5a9a2991e3517cb8876b229ac13e4eaebc415e313a3f3e3955fbe8b9ad6e74bbc2deb7c82237d21437d2936c20de0bef85ea4856642d3d9e9b258241ed2c9855c5693becd301ec23372af9550eca7483f0da82869024b04ea6f8eb86ab7e51b74f08f41c77142823de3d00f60e6fbe6d0765b19d8e449aa88429c9ca9f73b64819e4c1c8dc8a4a7eabcfba8533de3136986eb14f20ecd3ffcf0dfae51be444816ddfb015d135aa642b6dd5298390df6909f19a50f704acab1d85934633609bec9f625dcc02296ed389fe2328d01242fe45a3011b1272d49826e83c8a6753b1af31836e67c6b75a118fc400c6fde11486266ac67b6d528046a18f15e2e387e2ae04306252b153ed1e8b6d099d8770f04b090cf22f9727349a4f307a1c37182cc609111dae3f2d472577c0572ae5fac1dc2518bb128e09494c5c191056b90a1458004c4dfd2b51818d03b41e647f84e3136949a6646c71a6bca74d2cf8d81e28ece23de181f8b4752fa0d32b2d6b31c483172abdf4a24cca95d8dfed8b9c035300af1b00d1feed3e8e6f1338816cd05fc6b23c0cca4a6fc5c0658d095817f6b0ca3988ca911a562dc229ab4a4e7f1aacc2f116218ad16aa595231365bb56248fb4fd9d97da29e236862cf1251948e309c5abec1ad0fd9238caf56f6ffb2342c9e290678b369a401ec6f80eb2dd1e15a5aa0938d99170bded87e989c2b492b39d32c899d6cc715f09f96f23f4902ac30d4d053ea8462d7a127869506779b52157b8e531b0259a8097cf6873126a88c04a71ce7a0ce41b842f7130bf12cd1fbc222459b52924898ba53d18278e577f902867306c09b512ac9349135fab10f4686377a8fce103998aa1bb05d033f21cce7a4e7ffc5e39c3cb1a97b89b9d5569f0e70a58d28b74a0f724b6690cbc39d1c3744a4da3d70d89a6ecd3893f1ef5d22e79c84a1f845d4e941056f7854fc9a8cf42d6aa92be384ad50249fdb9e428e8dee01e4b669d06a39e8916bc923b90df56baabf38b2ce1965d426c7eb1ba98cd7c095348ed5e126cf400164db9ce1c147f8cd16d63a36044a18b30dea2635d40788157a39020041303ab71fa45fc5246232bb9adf125c8c0ceda40d35263b28200016fae796c647ce22e9c62ec25133c611c7b2334fd2c5b2ed84402072ca2f82ec19c373e6ac8b407a5c1636ebf7ebc11914555003577c795440a121cc2465ca1d436a1e77fce7e42429c6361640d39a93520ec38f5a0903a1e066d2a27b555c22bc1b8c03e0ba6b97c0ec1f787a9ac85206530a63b04b1639a2ab675065801b156a72431c9a6c3420cbef9d50d9c1605125275f8409675b0ad508552c2544d2f191ac2d9b74a49bad99a12e6bf3f6dab4b694ce762b6939b9d521d3ea5cc0e0f03e40c8d60ef8a13f6ec08e549a93cf1dd617187fd77f3a03f87524b28548e06c3ec1cea8e5e4c620ee88f6063e20ed01deea76c7fc1562afe96710ef02bbe556678d3ca62b8175405f3dcd45e4049e4bcc11f026add17479dc1c5ecddd8d0818350bb26da75c00046d951e07282ec1011bfee29bc49899c1557fbc8e5aed12d3abfe218981ca1ba51960bc58f6aa8dc159dad3a10d44ad831fe294279aa25a2f848ac918b3180c787ac3c8fb8e987762364d5a483bf46f3d0ea2d01316f2df21f2ad30c2d26f503695053a99c016395060c5c066624976db0876639034bb24130e4c8993064aaad40a9020d607eada4a7a0ab844a058d9e22db14885a8ad6a7249a67dc0ef8b48adf3a3a034bfba0db1806638210d271343d9c21ef0432b80a45d61ca02cb24e62514d4ce1f6ccedd5153142d0e858d5750f43fbd06cb2053706584f41816a2ecff1b2f6e34b228d8b3bb6b2be364f6b81795aabd7f1cf687df590d265004c54f88cec6e500f9ddacd9f7fc45d302aa1e0d61e44a88ac50c6d93f803880028d2678ceb71673cdbfc013be4e8db31c923f526ca80c9388b3a258094c7489224d30d8a3a5aa0da2deb8749ba62b71c4370aab83065daff17fe87dbaf248b1461206308e551af3c35c230c8b99bf18615fc4eae23d8901eb8a8bc8d230d452554160dd29ada433ed7ceb59109bcfc2098e1eb0f315c367c7f51f0aa7db050eb993baf54b68664eb86279ab3881d2351eb24a29b92c5962078af2f81ff719c7f1d2c0346f39dae2f25d3f19f10336fafa7aa6700948c78db128938094b5990c7badee2713bf30d754096aceec99a127866e0eb77e38135455b2658b0e0927ca11143f4db6629b5b316d34f6fdeb64a038664628c569694c0824b0239eb1b463df77130412f9ab2aaf5ba58f1ad06fc0a77eb4229d59f69cab482be70a39f5b3e8b7413e1e7ed63f97301111a47e20801af0d01fd9c8151011572ce58e10e2c40c77206a59ff63de24a87c1ffbc7f2995880c621e56c6e2bf67152e70317f23be4a86bb09094e4b28b175879b1513b6c857831073fc730807108ad28dc7f48953f72dac954a0ed36c210adf42429db8f61b04edcf9481daed1855b562768a3e6f8145c5241242384c82a7a09534ce86a0e11961904d4f2e98a103a69212a51ea03589536771bb148ce9fd3ab111a9ca6e82e0740e5cf781490ee8a51b6495f62472d0308428f4a08bf158c2c078e890faa928e24ea0396bacd944a8f8251363c9512e22662a88041c365518df6cc0080e2f0ace57cc41d5290501f8a2cf0c29d24b0ae100bea41782e1bc4bd8a13639f53e0be8beeead80b2ba2733a64a1b779ea739245209b483beb587f998716e9442cf6148320f38f92724d8789837a6a6ebbf802c262bcc41f753907132b5e29cd837460b0f294a2ab5566e0692717f7ea43da06d85f70f20388ed5d02a642d83ba1027230ad3915787a37342b6e53d423dd6c99780398c80801d22c78cf2b342fd26fd9cc9618baf222b7a811c805efcb75627733add47abb9c4f3c8e400fbdc205daea7101f2871016e80d617c88836767b0aa4f47a4c5a6cbd0d322ace226061e996eee93e0ec8e715a55a5e0f06bd7041eef139c960eb83967ef8196e1ad26fb53bf6aa29040ea6075b262b32d75771d6b1d79941a90c676f8b55bc060a909a1636811309ef9e52659a71c793d903a3a5fee4190f0b652e089c6d9e8b6706fee202bc9993e5c38d014a551a1b8b9db6c5bbf37eab9ed4e62e2d78a1d01a316203ef3894a8c89108c884d7ba8390003258759fd773582ad15ae89e1995c504071f7f3e884699820cafb7d3e14edbcc8d0516e60064e2f51a0f5661e381ae8bd68886a82919461904db8ff16a4845749a2811b208c603319a1bcca65440a7c540d5efaa4eeae94a279bd9d941f640616c78627ce861ee3ccef88b3ef878ad6230c434cabf31ab9ac9fccc40a0a31ad3b9b3833ecdc8803bf168b5cfabd5441958cf8585d18862773c899a25ea71a5b7c52d94170779ee31e77737d7c960248fb7256868d4465f0ceea4fc765096cf848e2d890259932c183494e04160849a3459b7c9c9d6950c3d6d664254a6f26a755d0451820a2427db2751942ec6f55b882301a9725092bad550985bcadfc280dbf7d1778a74ff99c0f0e2fb40a17c1c9528b6b9a58f9419a644fabe989bb5dc355c15d647f7bb15ba2d93d0418ee66feb85863a50e70dfeaa8fd388f5151ac409f0410239e0f8496568b96d3ae8190383c2de1d4789dc2070bc2e0ccea4f579654b444e7f1d158537a2332be32011a3d9ebc3c7c0af30b9e80127c510a671dd099de2285550a28e30c9791ced97d570b9f08ad55f7340254b4111ef70c5eb735aa343e50921af1edf1ffd46653934aa857eb1ff4fe006d18e9e89582f29eae301bf45dd02d8c074e66e22b99df136088c859fa63bfcc49be62bb7d2e13463f3a0dd1035de9c96ed67fa377a3293770ba67c99b68a7589f12935d555749f7c9750b00079f65603209a100d0ab32287c682cc80e977423454a241f2fe584a9121198da693a77396f274aa5c1294080704e0639b69cfd5060f886f5e81edcca85b3de5294d753b450e53f8f47067e0f0f90974f61ba553ebe0a3b339a05fa453138efbe8d4e8227262ab481340f4c5dc990bd55b2575d77887e85b1e4049c3af418f092e6bf42ad5d8df6a1fd9ecfa5bfa131c88078d1360613f542655198d60f3758da8116ad7f8b553789e0999ae7197fd2cc6c4f69edf6657165a5567565f29e23f347e0b6083bf0f07d20ae821a36136dbb13021c1a0cc8d76404d3e2047db0caa2c6f7838aa6a1cd194a96c9372e5c8e33f712b3f0ba05c7f9427432b059419e08956652287fb54a59ca9ed8b255002841c6d3e6ca7ebf73f6921877176408ad0236bc944f176078182fbfac512956fb5717f4752d77f4235f50617f5717d884ade9f582fd2d722234d53f5d66bd38d2fc1046e8e1e8f918f8502c867659cdb71cb3df66f092cc9efe2e2c772febfbf5696c37e39b18dad03c00db3e730e8e30ac08565ac33e32d1b6c1c2682f0d11a794bc7b322af720769553e16eac71fa76afc8da4fb735cd9aeaac5847cf06e5785dd0585c72c709589314e10daa2501e3813948655c0f7eeb8120d63e7aa18b8fe989ca524c171a993f158be8cbf66e6b255aeeb3d387124108e4640e72b75a5d31b51562aa5b27adff248cd8e85e78d5a4190f6e45637a0a0e895c733f2e8fe206c4d9402b0a224b3104259162d55aab0491e323064890a6f2058ec58f3d427519e02364edc40314473a9d72ab9af55c66a46afcf7a639ae3d4fed001cc10c67564ae217f88eaa200bfc4aa9ad9a088648014425ac42ae2eaf147390fe71ea85a5c95a72bc29c45abbd9d21f8c6c58793c4b962af287eb3fae2d90a5f603b22490a1d25e6829e85efe572e419c3a22350c86e55356948ff10116c1d31c3cc8025a3125f2ad1f1278c1954d6c1a8753584e9606763b2e8df82f928eba0917b26969333f4db8a0e5cc25e65afdc005cd9709239039e8795c870e09a12d3ec64f919da3d0cee766b8a79cd3ea3f4f075c83724ca855af0787f3423792aafa0da9cd1b7169e1452cda025249d7664c01e5038b54cd5273f9631f765597bc82f718a43feeb4f586281c05912ec7782c4827aafdbf082f66fe1ab95d5938fa22c818bab86f89894a5cb7e22b189e44c63f4919676b65f072452c8eb2eeca7db994076dfb4af2752b8a1054857bf086e8a44a7647fe923a9ce2072bb20826bcd1ca04cee74d6c70cd5ecdab409238a0fd977f0cd06f664026c753ab55bba4f877793a1657629d1bf260b4563d7fe83656a2fdf6eb13c5931b47dc95b42fe3f57578ca421b2c56c840375413f0c545533c5a06574ca7318104f3549798692b124e53d6f2163c9889eda6ff07af3eefc3e02e74942a5dd318fed553c1353d193ba3b018e6c813f2a782c2024533a186f080e149ef731b1d5801fa7a465137a961b515479131d6d5f1319781fb803c3bb130193770f518e3bfc1b2a8b4a7441d201f0f6abc604b969513aca4df1afc44290dbd0ec8f1ea4196634ee3de694b27d3e3b9afe5374c703d3662cd06c4048af0026ff41b200930a0b6746982bd478c6c2de57170f48deb6094064f98f1592816868afc1e94b132c6f50178f2193147cea44598bb1c7c7f957389c2464b1d4a5983003713cf8cd5a788c4d22235650570f8cb4fb8238d2ea715413a61a27fea5f1464c18cc1f9fa0ee10963c6bba20f9a26121e71632ee3f92fd97001d8a3c188ec91fc15ba0cb5829c43bbc97c9b5e1cae34a237bffc519e6be01ff5b45db03b035c22a21a512a781241f8fc4696909291ba22162fccb05c81383a9302cd11fd5b93ea5f4d4428136bb264489886fe2ec907537edb69ef2da4354766a04ba7cef3d85d4a3755981600256a6b321efa0592e835b5c89a28c65f13728581e290d8a2c24884d66735aa827486f9c1b43c560f17f009e7f4237b6d585170e15b299d6f0f827edd36763093741d3792f91247bda1ed6248094b77e8e7b2dcaad708989eb40364110f57edb5bd0ca77a742ffabded4c5edabff525008ab368fe7ef641e2acba98a0ad4c8db144134cccb9eca02f6706b64c4fd8cf6f590a839ad28641389b3f460468ea0720386f82b96ce4d763172efec9dc543b5de1a2a82fd83c331a78335035a085483cc3047c29d2b2780d108e741d7cfff286309f61e53ec48b48e0973201bdf4d51846245d20ba4c8d633bc88376dea4d1b66c0311990fc36fcda74c64ebaf8e70082220f2ac615286410484bc030385e73d0566c8b2dc0e99f939bc2b1ada538f67006ca6a0af5e052893ec03f03eede79701cd553d325c3604ad243c9770eb122fedf422a692e5f4958c929c15981aae87cce37e12d7f1ad016260847bd9161ed444f8f7beff8af89072be16ee94c46f58cdfb99f7e0d24c1cceaa647bf2735b9c3c38591a33268cb95c9e761a240a15f094fce197ef4c838778a4532004fc5187ad3d388006cd8fbfccc59df2cf83098f516603010958223e4fabfde191bfb2fa6baea95e7734418debe0de2538065950fde24272bde5b3a385197c35f7a6ba3ddb5bb586a980d9c3d7c428cfdf3c6c7cd3f6492f07c34291434c0f8714b51e1b750d66f6ba4b521acda7c2450d2d24bd81edbef6c73fa44e6fbcc24a6c512cd192ee4db43d73d390125a2d41c24bb8e9fbabe288f0a5be3c277e6561e62f045ddd626b9e5eb63dfd60e52d70ee86d83074cc385835b53e8f19dc91bdd58482edcd4d3c0e9f81de10a8725be9b780264c48bccd5c447ebc71047b6b7e1d1cb25278fee986b1ed21b4234031562742dacb97cb00b3b4be24da763894f00aca402cfde39ce5de5d257e207d9c0e6524df6bdd97c4f1e460890e23612078eb100fc95e596c107b60830d2f998fdd82a5c980821fed8bfc1911bcd123dd00a63f2674d20afedced7de72ef1fca0e3da6fe6de943136e033afe250da2ac3f0f66df848df3d9c5066a27ebcd44cb3b00cee3bc388149dc6fd69cef3aec038dafb2b72e5cb40675baaf441032565471fb038ba4c305f95e6f3e6990d46c5bf6162ae11cd3e5e43a2d2f94396bd96fefe67a2e5b064d69224ffb3cbe37982e4e098dfac6deccd10dfcdc726e0bd540fa07098193084678ebc6d79c5932d1051cc5acf46c46dc498d9108312e07dd0d227e1faea838394ab12e33c6505a9dc71b28c1a01824d2dec6875030329a5c91440b2203f486434d2aad94c44eb04638db3c449fe43869d7b68d94b11718d6c83c24873ce8f8ebb4eae5dea871485e9759c133f1b30afd9a32864d1543e9d7da251f00ae22c06c04fe52f4d49e8aa259c02226be119dcd75de21d8eed47ae15298111c9b1b0f65bd17105b05a9652302c7b8c435012212a4b5f7cc14c58b5a11a7546521772eae206a203e2e0145eadb7e000de289cff52d8b8edf80cc0397e7d0683a0dbb8df0233916c35310aec52b461c3e60047383cfc400bf91e0d5970978d225d3b9b633dac61e6c81e48a36ad6d9f63877eb35a50633d3d0b23a64667652b08c43ccacef8e47b8532cedc03db2ed51d9add298d2f5b0fbe10e808f42cd476039651d32dd25f1e488759258ac1779ad07e75ba85472bcb89e5deb016b4b6189ba2d1f4aa0bead99fb16065bbfc8da4f16738cbf1108ddaa2637587beadfa6039d60330727f97f5f7993be95dedd6bcbb9301d36f073a542ce12fd540f7f426cad885db4b07759f6507bb6dcaa3e39ebcf9eea54b1dff89b1bfa07b17b45fe0878443c184575dc1892ab1dd3f3b61d22c9ad31883c1d09e14a16ff339aab7999f877ed4c46c13676fd5f13f89814f9f2d7426d982e31e5b88587cab55ae9daf84a5828f7a3420cf28f0bfc98e20db8005729bbeee2374b68b9c5ac835c9ac84d10d185b871288e7ad4d77242f1b077b25052628ecb81c092be566d23916fa23d86064fb1640fa95acc83ab0f616f4c6f31666e23a6d885419003b5e35728c7ced2d8245dd34661082f0a949d32ed8499809f72e38037a110226382f6b48f94110aaef7c2337a54a015406e4d163c6cd5c2c0fa2882164fe667cec4056cab616deec371131840ed14e0851c2f4381b2bcb9b36673581c1d2dbbe70594119305dc15cb37851bcad9cf75ae3747adced209f705afcfebe6e9facc98764d151ba5bd744c14766e889422256a88caa7b5b9e50231ea5ed9e0b055af5abc723ab773f06ce5c67e749308eec779374999977e1bdfc27c8137b88b37daa679e1cff9fcfc32a71daabdf35668d11960f7c2c954398769ce71a62734598347abe7f4777ce7383b464138d9de611227cd7ad4e1c3250ae02c51e18953cd1f7ce7132e0fc43dd6de7d4e2316d8cf32672b4ab887ce8ebd4097c693e224b965f72381c8d285b2776ca3d20b94e608183433e7dc2d300b8fbe6325839af88ccb2375dab6e7ae98c4036ded0f8ed349685ffea880147036792ebd956490b8b5b4f26834560746b0a1c2309f9271f59740ea191369264829110cf0c1cd76c1ee3b3a34ef2f5c29321639d072474eec88d2978264cbe7c1176fad913a0e43d5a9e607903842c7815b3ecc3b349dc04aafab399cfa01388e0717ba51734be770b13b53d125d6afa308a66c04acb67f398629f7f0c01e402035f702e066f13696e906685723cc5b52be50d6bc28f07db869b24b182cbe46ef9804810e3cc744e1a38009a8644100d4a7169b9c31e06f0c9621fa2109c0df6187e92c6f98bf8a52d064203798c3c50862c5a4a7d0a1f39521bec33eef09069d99365173946d141b29677e5e32833cc04e554712f6534f89955d0cb7373ed3109c9584dff8a91d17049a47e467857e0c1417aa86466ddee0721387608dee4257a5cbe11b85c94399f1c7964c80ab7f7e461179325330048804552c4a6561a40e92e302a4d5609a5b2107e196483a272cf18913bada0f6f731103b912f25f61df0f01553197fcca32cca0c12388e91997393d73627758a451a5f529f8e8fc0cad5b1946230285344f250997a7ab1795bd201df9a0efd030310486a0111696465e431cbf80114714602df31241145e7240cde9686ccb31e5bfa3795f55d2821cebcf1e928bec495bc9a639a52fd3843ac25878e0c680a312b6645b940c72b485407efad49ed863d327829dcc8b529726eec9161e971bf7b9e23fc4bf804415e20e8f0506fba47b6254cc08455254f4f2db31ef679d5613900eae6ea7597a47c71d083632151e816aa18940f3dda7ffbfd2afd898d517d6d8c3501be52e413499a2a5931cba1d2d5f6f5730f6c58f7081442d54f593ec8eeb1b62e7399489ad64c66997813d09f13ad8df6a5038155eea22d0d763f6d675c74178a7013c25db49d9ea777424e49049c508ad84a9c82506e07b4b40dae43686d1097f466edab8d9430e755fe1c11e4fc957f535fccefefec129ed9e59a400575b5ef0a8a953b7d189d02630060367e00721f3fdfb1831f5d025e0ab58ffcc811c06208311a6c2891d186ce97a9f072031e1d9b56c21af2de0cd84388b596597166de5e50577fad70458b1324309fd9c1aee998793fa93dbe22221812cb206646c3e63b25d946e6df70bbdbe81bec9c6dc5cc05c70cf5ec254227fab4483d875a1f40ea9901bf09ee4343262b29aa3aa32c02cd26a43ff03ce7eb0f7c6de97ed8453aed5187c84a0f883007c2ec0a2345dd28167787dc5474f39bc2cfaf2684c4948e0195bd22efe60ea25def232bcf90d7807de1b65a9ba725b81dd9766fe3ea117630fb905d76800f6ce15839cc73964d6d4e0cc0690da90a685fa440783b146ccfdeac5decb8bbc412b6fc5f0ba8793cf4b9b600fe9233e33c80fc0f8d0b02ba85de81710fa8d6a2c0ed081cfa8e75c08db9a7e33dc3d7b94472a16101561f9087f7c3a0642b92a60a89e171a4dfdaf00f8ef1f5034576ebbe69af7de74939f4d2970ae3bded546c84eebca7b3428add6e897e9aca6e3c00200e9376a1fd6cec1ca10ce054282a5c1c22563be2ea975cf0bb626e7ea0f1e36176ff1aa557b9d2d95b221428edc87c43746ee0121f95c9b7f80ef19fc64714c28e50eedc2647067f8d5681bb41bcd036f4fd7d8400aa348810f1736273283de28a455442a398bb3be54e9864029bde6d5e6499e113095cf0f9012c0ce46d885f038ddbdc6c5c89085ede96bdf339573719f5e487e51608efe9ad4e4d9b8c1b44f0ba2239486240b1073b302bb1966da55b5b5625f7c2c8a635448cbb0908c47bc3337133c1102074e37172eb5dbca9e36cab7906c3e31ca96abecfa8a2bcd1e177077743addc5b21832e453e8423427dcc2f4a7ae41ed3813afef8cc48bf318a86ed9c03477503029f45b325ea4886ea5d460b2e0aaf8eddba1adad9ffb284baca6e19a8fef23d0be0412de2a72f72c6570cc61810582435e06929506320555c483a483fc5e476249ded070607eedfbe1a0817e295995bbfa51165271d3d52d3205de9808ff8e963e13f4627997740562465ee1c5915ff81b7a1751d89c1e975c15ff81e0b932457aa01f341d62126a091787f5a31a54f67d8e811ef8689b4a2b460a9f156a70d6dd468c9e48e8836584c7805cfea66b138cca713051b8949def2024195ba1774ea31cdf81e61394c4027c73d64eabeea5fa461343213d6e65da7fbb2b123b7fb76b60ba67ac927701a6398e624f9245d8460e227cce48a16f13efb07deee605e9e7ff3e8b909a3dfed5eb61ba1be81338dce00df1acf1a1106c4a11a342ae894be8d443631b3f5143e62b3bc66febef4b8e22a95af383b7f508020d92635583cbaaad52c6266ff00aaf5368c551d2b6a218eec743d4a8e509cd140d6bca126610b47d85c0047c73397cf75360233ab39795f43ea79420704501d24e9b3a132581fa3cd5e021f3563f45b2cfe55d057e96f2a06bb5c0f6a43b117a00d4093e39b593fa5b9c0dacd3d10c1dc4ae43c4ec1af2a6ca109faa0296aaf43ed83adaf1fc91802fa0e7864ff012de7be75dc56214a2c3093262e9c6c2753b85467e4944aca417ce4f3bff4149343fa5d9997bcd7df81cbacdd51e40af65caa476363385cf3ea8175f46153f2ad523f5dc455406ed61e88f9048e83e8dd9d2d3901ec483396ea3fff49c6085b075601280c6a78347206bfc0b28a595bdc528d2f4ed960d02dbe67367898318e1e4984d16a3785b33793db877ca18ba68b7a4ba5bb3a31e6e240bc4db5009811301f8cc3f9676b22bde1f0c3c1b73c729eb24518c9708e8860b30e0711820a7ceb64576db42d828bd640dcdab9c7d02f6521025acee8f02a022d274e4e47feed89ff7f3de05a3f41ab2d2bc082a4263f1a9dc294408cdda6ac99cd45eb2c8e2c2acc5068b0979a13329a0b2257811c193f87f860224d60038488ac0e51f07cebaf256d12e5b756f2ab6272ecb63480530c52516e2c91602a53b6f2316a53886c1b58823988d725f5221cc02df9577be2422d521cb5f88097ba8905bc323d6c3432f024ad598d3e26233aa8673551f3ae11cbaa88247bac48c0a3f1c2ad7f4bce9f2f7c9eb2b4253658ba6cf41f3adad1276054148c1fb1d198a3073a719f56dd1700062e89e00a1abd90bf4f99c574d0f30933953981d07eb26b3ea48b7719057ac7bf017605ad7bb2c2a8f12e2af6fb8194766ca66f787838218fcede412f3d981a6f37e8ffc9752127332326111c75079cb4983cac3f168499673ef649a32096a21244c95a1cfc8ace9065f0fa11d0151a517060573a734c88f6acd40864bfed13788f3c0f0577e73c88105586035af28ea1d56e015a0a7c92111e403506ac3490feb5a5a3d21ff4b817fd673177dc6a92723e6a4efb7d9c16894b6d0b5108765bbfa686086fe685c86f042e57d1e40f2af8bcd27893ebb3519acebb85cc7e26e2e027494e10e9c158fde19102eb782b570241c8052a01044278b78827969efe572a8938bcb77278993a9739ec490eafef61ebd65818e450db1e64040cef90833c8e83d72b41fa006f62c1b3991d38c7584e9e7025eee1b324b4d515c9a4a9c9dba1dda43c3b0de2e9b5e63eb1a1805a4b1e35c45f377fc036e8f30272a13145537ac09517d28641033f194857d8adb055123a92ec5eca6ca545563b53da92b46d600cef119c5945908a2937af664433e3d40d6ef171bc0145ce1530ffc439ec688a0179e0a5598f5a9cc10cceee2b82e6964b38f8a84a388fc531665443f589691a995aeb937b60abaa6cc76a86429c1fe10129a84dac30ed8e1a15bac83d0568eebce3988b48d74d9c8587ca84b772e3e374230c9d2d57fdf3b001c2e38a80546fd38ac35a36f8a75345d6517bb601dbee3fa27d00736c0b31aa2724de8bc8646bbf3888d6a5871c33689cf6edcebe6e6800a309062fdfa176b3681ea2b181069ccb906d6e58ed690e09ecd13ef10c11a62dfff31ea10d2433fa205d442f989565eb7e60176139d0d3f5facd48afdf91fdec6c0ae60c4934caccd6763cc59ef561602ddc66bcf4c4b88d74a851dcc6751bdb47ecfa8598747d8cbcac8fb601a762417802129c34c011357efa80d6a95d3a90783c5d2e64fb35a5429f1a40c201efe1b5de6158000fa8fd277ceaa5c52a41d7b1a3516ba7e4ac0331dec27b6cc49268ebe0ec7d1fa894513c4fd932f8bfb487df106b09626457c2bc586e30efe0737540687b3b2a6bb49c0b4036a08d9206253c1b6511a8683561c42a5a3f23ff10f0b563fa44932e1ae30f8fd7d708f4f010662bd439368cadecfd04804a4a7b9dd6f313099ee1b5aca9f454dc3005c885e83020d2409f07704efd90ff06ea653ecc45f2b9fc90f72a82c632f45c2e94d0cd8025a10ff184bfaf4016c244e92335721a9762724a8c2efeeaf5b93a9b97508eef745b5462e7cde31f0e1018a92add029755419614798faec6522375ea9b67702ffc166562551723d1b4dabfa7e49199be3cbc4837d31af99807dd081862f6dd7f104aff7b37370ba626f3cff1f8f85e2196ea8be769206710e3669141bb0199f60c2464f4664f1e369546be56975b4588777b0ceba204852acdac380eff2fdf846bf4a362bd593f3962b180809ea932bf7372a6ca4936ef8562870af23b2fe74c6e7619d94b2e6e3a22bfeb2955cf0a366528e4a6d53654ff90e76d5387664af9b7171cb721c844e7848610e476644b974593c141d8c13feb46de381a86659e4a451a66a04d189396d39e76f8952e599017ed3f6e43b72ec892aaaab691dcd93cb15120202230f5402d850d7e5544e344e5a4feb8521f35e1110f0fff4ddd3593c86272422aca1a6f44d5dee9d244007859698aee9a2bb298361522705d9d0691ee7b1bf5401f674457917bdf2ee59adbd3e6466e11536d3363e1e12d105aab2b8c1889f4de23a1a9106c322291c55aa624e92a9d4721a25c219976e50a9b7092b4941129d62d59356ecccc8a8a68fb261622e80b46067ba9c7a7187b7570a3b5284b48f12c9546e0c11befc1a5aa388d84b38f0adfa98fcc68f29931c505793092347e777c10e3a72d7dd84267019a4e7006a58217966bbc22c85fde6f1dd584614afef65df2834942010ae0ac2f137c81d1627c764dd5552ad74284a69b2d5095c454c2998dbf57cbdf2c03e4e72e90fad6af68f34470012dcaa42bcfe517f9ead4b5dffc4774fe5c381a2840c7b7a3f59f17e52e23fca045914b8ac3a078e38801f4c710d65168d218023538699f6971191abb7b1b90cec0d77a87863904ae547c815c7e2ccfd07a1b293c2e94fbefe6d2fad7d18240dd55d66d54f29199b8c3271e8b7b7c0b214b2848096bb0da39145cd8a0acaa5e8158e246414476c9f1d7c2ad4aeb2c77426ddb84607906810836dc1751f6538ad2a4bc7bc4a7921f2d977b8f185303de169477b36218738bf94ba157ec7da0f4e4e6d16200942407fa160428746fd57f6ade415d5d17e8770b5485d0798d142fe9c9020f909626a2a37817a973cd27d0eba37435718540ec665c8364cd2d76b82ecfc8e4995cf6f1fe81e4fb0487fc2b3555bde9d9cc4db9160c36c03e71c13cdf7d18813f0e6eff2296b741ed43df45c07ab1bccb52f0cb1ddfe502987788be753508ae7e5a9adfb27a943bdf7a559f13fb98a44b595d92ad0691c68a4b574264f4ed6babb20d8bf149efe60fa95cd3a4f761c549f6a615119aadf109fd29c4401532a11b787f9baaa64b84be71581a0a2bbd117117102c226d2a14e0f6d9a23312a8598422b4bd6484f2cc899b07461ec4916bd3d427729d9e04c1111283a49f55e681f693466905100861dbec780217e2830a12ce47f43e1e58d386464e951bac574dc2d85435323cf9948337175d37a7d8e90852455a313aea7605a4c6774c611775113d9b11aa641bc1ce53515d7464c06f0a67748f979971f08ea6326e10b8901863b9ead2caad82ca9ca81172b798b600809f35d2121e75fedef3781d4dfa03f21215e80a0ffb889c93ae75d2095165bf78c39bbf523491b5d59e033aad4a0fcec7610f50c953e3b0fef53170f4bd513249fb92f91002ee6dcb0d4af8b726978a5b19d858f41686e120e684f61f26ebc01bd5b20ef45b44d49ddf197b493e778a651dca749d1ef6567516e6c3dd614880134cab9a048da44a1ae23bdb0e969dd7a228c8172d542868b8a6899375983925922c16f4403a2253bddba83c81edf9f32544c315e54dbd4402ee8fac83cd1bcd64b836479d24ba594d81f3ca474e2a863e860b023c7bf357035e4de4e9efd17a9a36e1c076b739d46ee1c57f3b6629fe32e5d5daa7041e5ee0e2514dd2427f183566e930940ecf38736a0b1e4450051f124f7685dc4653386de7285c8c1ae7c40037ef95d98ef888a9be68cec6095b4434c3f788ee39104c12c52a208fb33863757d51ff8e45c9623e586ebbb864a078c02ff1c665ee47f510180d69b44f6d8bc50973f5102f6499a67a1380c6c376eab930ca911312e2e41c60ff89a0f589ac2fa1193956e7c2a207bc5e3f37b16b90bdcf63f0e20b27360f7275a12bf53c1b66509d44bbe200682879f687f996df3984f29d4bb6ec35b7877b278705d517fd52b5065dc730f630e2902b5d328f6671089bd38f9047be218b707efa9f8114ddf7b136d5ca3e723d1e98f6fe9c1227d37e04c459ef95b7b662ad01069ddd6460da2dca9b8b04e735392c6f07f31ed4bcb99d57d9e79d101dc32f980f78e79dc50a87799b7d6539719666f65a2ade3432b4765100e2f819626830792744406eff00fa80c9996ed1451c500f8ed77e1a4d35e43b8e886ca5e99b8d68463b03ea196fb8837cb4536dbf92fc092c2b03aaa64a885930181635633e367b7bf6ff146245cdd4ada0f741752a30bfa98ad53f65ca6c67ffab49b6d1024ea866ce8fd1287f30f80160188080e8d8974ffb632224f3f0ea536f8822b831a90211edb7d64d4484846c29b2bb77372152ca0d09360801080f0075102b0a28d686827989513ea82a8f99c24490de289f982ac71c899687989d981d4ac2373431e3088d57c3c9f53c5475948f8ed939f930692a940f161725e50b23ee46793e316667a6662a7077ccce8703265568627626cc03a2b881ae3c2927e1cc084890a2f57c7c7cf43cca0725050584a212a3249c36b8a03750b9f2b1dbd133e6585cb040034f68bc7738a70615345f26caf1defdc339df41175ca4004f9cf8004d770f17894b70e247091aef202ef24129128a80c6cb334c1ae669877beaadbc03a0e4c699b226a761fa42b34b2e0028b871a6b8ae72a70140c1adb4530c44e6530f97964f35d7a5d57155d669e432f799ea546fbd3e744b53896778a19976ca5d660d735b9e7b1667eae27ee16d69eec9dd910a27e70bd6c163a676c03153f33f497874d433a4a68b8bed11ab166ef34e81eee029f0dd3b0f4174077310dfbd2c9f50fae19376f0df3b7cd2f2c907efdd0fe0bf7bef4e3d7cd2407cd2c0a9819e87230d48b5aa75dd23cd77812a504d552df51dae91c6c3f209cdbdbd62d59292b3aab625de8723cdb43f4c1aed169fe4e9a3aef8245f8f693beffd62a6e6ef944be51ee17ea1277693f4e86a4871a5922c9538f71c32b8d939192d5f61a97d9a35aad54b660600f103c342b88471b78c5ee26e99216e82f0200900a24832615cf484a980dcc42a507495a587234d87234db7c3cdce07a47f02552df3233ca97460665e9e0134e176a92897c78401f5f629f54e71efba7b61de3a3abc94b72c4f3e85812090ae64252b594929e52f299222791e33148a5262d80fa9c3faf7992ac4dd25beb736131d654b2a7b1ed1f3bb3cf5be0f075ac04077ffba5359bd2edf230290c1dd2f02d0731e879c613ee5228068c30ed1f14974bdc818515d96e4392bdced19efea34bf4099ff3133115287ae7d709f55f554626c0c3d535537720c7d9d5e3cba7a0d826050c50554422c00ba02ca16512a1f54604819e34b4849415758a864f62b47d7fa99696122aa4cd653752ccbe0539567e094dcebf91ff31c15aee8f4c22c4cf3e0f6c83251dcfd82e3249f4ff2f7889e325f9e999a9c113cf33f381ce82c490118414882892da800890594000a3280a2f0830fb080264ace84d92f3d264c8c893e3e8262b698e8337f4345cf07c101d2f365087a8213e68445e131df631e88f91f538a2b3f339180b3e484071fd0f18707475874066507414fc87042830e7cb4b0a38524397230250b4fb23025072d9a644149169a6c8145d0132c3cc1821364ac7812442508c74f0dc8a8e614548276acf8a1419227578072852f607e9e20f133c511ae003f3208ba02922b3029420c983cb18213a0962876aae063851dd0c99121442f338f62e8d0c53fc49650756312742809ad80984200f7d3020ed36c61f9e0096dc910afd0b181b62eb318644880b62e6356ca62b0d1329175e92c0b5d56546cc92a4b743d7228212cbeb1257bc5c76496618f59902b5b495cf929317d6d414915e57535255c8d8ccce75e66645749881e814a95a0243fe48e925bba48c71f2846a0770a0772a74669e602c160d213a3938449144338410d8e3481128316a860c2811e23aa6062a1522fd90c1446f4fc0f283a70e9f8f384195b0009e00a2238a1042210630459a0b19982c40a31c6d0020b1208e10b9e2ebec8400d31a658218414f480718311d04cf98007b0e0440a5e80821588a420815601674a51a042069e54c00c1ed8e00b110ea6b400088a1f38b1c4e280175a173f188216c5045088b22bdb293d5f7caaea3340a5a7341d7f9e2043ef174d0b9d25e49cd75a86e3acaa52ac6e5555b7a655e5ea5a4b4428331881c445abea31d3f1e78926d4e0ba74fc75e53873ad6f49a305db9af2d60f4f308930c42794c4968a6531775616b85ee735007d7dee4c9e398fc42b5eb134c3c5ddf7ba3e4ac19d21106e2824b1105baec71dd9c199bab0091a71b70c92415464194e983b55aa4c987afbebd2ae8cc2bdbb0feedd43efbaee39d6f5ebc5cd3228c270dd2054df32e8ca74ece27e3a9eba5839c1afeed7651429e5bac4421662cc8c2da1dbb0dd061b6490e1c68d9c43df2b3ac6d0b7a7b70cdada5669221186ebf67ac5f388eb1d964155cb756e475fd741892b25d785b43b2a2d83aab8d9b70c3ad9e04e1c4270b56f19a4a4d230ce4c21e066a6ae67f9142daa87c066eaba0cba3e77aecf23d72792ab8babfdc0fd07203e33b577e7eea3cb9e635dbb9e651fdcb9cca36ab97e27186dc836a02110d21008e90ccb32220c970c925066eafaccdcc8b832ca4c6511a4afe7d0c19d571717d3d1ba02228df51f240d54f004259c4153bd73423389b2b0595da61a60d62d4b14b2aaaaaa2e6bdecb593256557531206765655917f3d9f232aebc75d1755d9888c3321ce70bf74d5a58167aa6699a46699d9abc44a54b645521ab0a5995768d665a07a8943b4c2832a8aaaaac6a5900d0281dca3a84b1d0f10a2db50f8faa65071b3a6ba95f66ca255585aa50957b88501766654da675cbca2f2ea9505555555589ea3ee9a874fca966ea98e3153a5aa1e30ed58e22ab0a85b418630034006c5839b37c78ec80ab3d59afb61ac27bea90b5d50a0aea46415a966559956545cbb22ccb9a9665599665692b6459f5058cca7a01a38461dbb22c5315581419b3305171e52d192b17994a4a89ca361e2049a2b39808852c1e2fbcf04208495455125595442889904864211142123c5e78e1851092c89e2067658544179669f1665238e93009453e994faa10e77da21c4b2484258fdcd939421e994b24922692c9078670825489d684b909e3a87ac2801f4017559954779830d515529760fa2c99110208522ca15232110a14e9b3a514f924b64cf9242b712b56edb5a80f524b5e611c3026c8b02bab54b478e2037abf84f1c4057c9ed8a9c2e574fce99142e8a787ca94302ad0ed74fce9d9c135829f9e2ccce8994195e2c618a126d8353101c38e660e9494a278610f9e90a6e8c02c824657baa07e38501232318197032820930c78dd164a6cb1c477b3c05d1d3cf1a050391c44e9968871b72849ee0fa8e501138e032ba87507483620940006940b27b68a91a645508d8266580451262cb6a37d00bcb480928181044cc4850fb664a70b655b003521052e4ad0954d08a194f520d4840d4e730752ac2b9b60c224b38882613f4d20d175b18361a8df8add1823d3600b4d86502508a21f74c1c5b5b8c0b8c0a249932aa86812031d494041935cd1afcfabf5db1e72dbf66badb576fb774da375ab35a52bc51b084d27576ba57903a1698aa66a4a5f7f49b9c8683a993d699439d1daa3e8ac8a50645e529e96699996691ab55f7893cabe54a9f453205237291967ea7a2af524482533091220a08850b60e3841822bfad6dd2eacf69ef7efebbcfcddfb4ce5e1f0b3d97d7cbdb4ce4ae9e9cb41685a97f7768964c65834dbe591edf2880923f5769964d3b9218d3ebc2712fd9de24d812a9a0a29a2b3df2fd37fa467dcb17b5dd675f259d679cff29647be6bfbf4651fd4eb3a5c4ff10d22562dd8e67d238fe89a1f208ff85879e9d94f427cac64d3b3ecc39463d542956029b99e5ca0489013524937b123d088f2b0d05846f09d463a6ba55d628dd65aed3ffb90b3f6b7d66ddbecbf5a6b78bbc163bf9a0ef1f61ecf6122a4d6b4e8e59bd210ba4e8e524dd3e84ff6728f5fde60be29c5975852d3da689794ea64f5a447cbc328efa9eb5f7426a488aef7684649df301145a226e10d3efc081321f5a77d188876f9f0a6a4b592cebe2ca3da6fddbe73af37a5ecbabf6ede3725cde507943490f8ecd9f6ec76abb7b9a66ee1260249262f34610d81c50b3d018d3658d34b4ccf22822bfa752bfc06fffdf8a08a96b796e3b6772edcb6effb36efd8431aed67a656e9b040ece5a395d7f026a2b559b359ca5dcbdc76c3db8da35b78fb13976da8cd7bbbfd29e4ec4f5bb6a114df5340df471dbfbc3ddb43f51f1f00e98de9ebf281147dbd962c02e4e9760d677813d119f8adfd7b8637102de354d87f685b46497b26446aafb4dd1d3b8789c8d1e133bcc17f8fb607fa99a91151e91008bdfc877d50e282f2d926a2b57f1cb69d6a99cbf119f82cef87a75c58fab185dc1d82cb7b3bfd29e47210ad65f4a72dd7d813d1daa70d78eae1db14d0dfa38ecf3e7caf612fefee14471db23d54d6c63ece5408bf3e4e189b63fd55f149480df7ecdb4f426ab86cdf2de16a592ea2d2f22f70e08a2e35113d995cd1b196b72210e30869c97cb27c54792a432719443d3dc9acddd6fce347d562049df12492d64f3b647e7999a98a5a3e6a7e7ed57246a95459361b99158f1dd7e5cb8bb6aeac439ea135ed926af8b4a3baaedb1ba9d9d67c06a6010184be346a64cb462a0f5d9df2d0d77578dcc8dcc8dcc814b17442f3f2f1820a2d6f9d56f96cbae818638c51661fe1c1785d9946b32c87071f7a6555ab5ad5aa359f42b9cadb87a69779fbd0d96ba6e07579977765a7213e7791b591199b29ee56f6baaafbccacaaea3ba2aeaea325deb7b0efd15ade7142facb15082401bc8bf09e40dafb4c65c91adacf4c9a99cadeb850bcab6b55be71c9f2be71d926c5409422b811086120d194a32b3e2871813c7eca8b728dcc4182c48ba685d1eb968de8f2da2ff9eba21cad1c7ded1cad89be717e659ca9b19fae63f974e51aeb222008a8966c5057e06ca95e3d4a7c9d62d772bd222ce3545660badec29aa503bbc510401f8b90ba66d19a292d975862c6a9b4f512b80364d181e568e50ace980805ab0e828a2533f1dc5d69c90677571d5da2941717ccfa81ac31c6f085124864e9a91799e923a5b4422f49cc8082e2527aea652a1923091254fc2d7d8c972a710412092420c011883f63ece8380612fdf203e4841fa0327e8092b004d59103224021483ae0f24cd195a4210214aae8798b86f81f54870ea8ec9ce2abbef429fe8861031d7fc4d8428303a04be8b8832a4623a21829f81103093134f02346052ccbb232ed08960c914824d268949f30a4601816869330a0d48b823042a0c199fa09c3025cb5d65aee3a4154c6cf94313438533f5380d0759df4aaaf56f2670a949f293e1b3d82b2ec8ca1446feb678c2caa9d9f31aaf819c3890663d0cf109e5c6130d11b93a2e3cf1092fc0ce107438802043194d802932d1c01d58325a6d872e40c40a0e4089a2292054fa8c0010df70de7dcc8004d9111121a2ef7488945c778c0e600f4d4a71dd4db6bbf66668a5e3054f2c823581e31533f329b430757ab70a492a371e60dede0c1fccbbcccfccc3c1d3db9d142a0babcdc86a5522f32331c509d970762949470a4b9b418a30334249c43abf040171ba84243baf43ccf1b8197997a9e27c59be2cd308ca1e713c66541e9a65ff872dcb66db757adb0c56a85adadb5d67acaddcefbc05a61ed34c4341d519248d352485393a5e94aad70889eaa756991a6b38a704824ba4439846fd5708146c5725a31cd12691482728b362ed426fa0b7e0aa545798608838c5566e5d143bcbd2a7afee22dd2a17378d3a1570def1b192d3f3acc140cf305869162c5dd31305fe8f9182413663ee68809b3e5ab231346eec4f08052804e402440246454f9c2e793e273f221f121995fccd4b42c0b7c02d258a7d521ca2e534ccc4ed5324b313b550c0c90f52b8faec31ca10a77c3004d98ebf330479830e1e72887e147a5838fe1abaa3aad6288c38f2c6959d23af9607ae940984a19885bb5c8d1e968341a5d213ef9b072d37f00b329e7e4fc50ca39a63869d8f1a70c2a7404467acf94b4f597aae5ba2c26a8e8f8c38413bd6374fc61028a8ed9998fe199309996359db19adb87b5770b6fb6bb85edbd85ebb95b989e8aae6b13dd869ea924c6fee12d019dddc33595de13d0d93bacc3d2445c679c71714d4873b846a4b7496723ede9ec146f7be9acf45d325d1e1f67af7ab67ce9539a7009cb2c0a14299c305102220122018f803b640051a9a2e73d9fca933261e2173e51a048e184c98784920f899edbf39134db23e3db79de1e909eafe2041818a099e2a18777a7dc9daa2506c36276e48e9edf918d793e55cb94bb61806080aa981eb3651ea802d2f337d74dee8e1786957a7c2662dd8ea28ff2892df3189637cae7d232efab515d90de282938d27441a58cf2a95a26103e7c7c260c0c7a1e25053505053461640eb7a6db9bec5984b0a7bced8ba8a14f2bf9c4c2027e08bddd74933de5d3e940566efa69e5a6af98729ca952de9826e56d696d74ee1b476fde88bba9f595cbeedd541d6f6b7da539cb9e065080138391f490c460891b4811050cdcc06bc1159d050637fca87a5dd71decee75d5d455202613884d784b6d9ad68477bd493bd5bc03ccbb87063f4f7768d90a35ed54cba79aeef53bbad7eb6869c36ba3ee5d096375a6aefa8d6975b320f6f2bea608440f1f3f349dcc543299de01e928d19a8c9022daf4ab655aa6655aa675a029fce825101c85f9e64557efa5a65ea88613c00311529ba809d768275d5a1d5a06cf236af045d4d0209dd5846b4c375dc35277585af054547be8ee261c7509df10efaa33d3350a1f2bf026ec3253db4bb83453d74978004e5cad47f60b0b539977fbeea5eaed72c7f7b7bc6f5eb4cd0f7811a23d3e08caf431418f16844ba888827211862a4618a20d118608431376a870e2051e70a2440650508147064facc0063db5d66d135204bc014190a66896d94c037506de803a9b19bdda0d086af782e0d649e1081b2cd144132a2068420a175c2277c3e8b9700bb98a08876de1c66d21b7855b0ed58dbbe572fc962dad988c13487181162ce105239858e184fd280cefbbfb8521087661187e1abd3548a514ab948e4219d2281544105aad5dde9c46b9f01e290c7f685abafb6298f730b41f9d34b2b466c3300808861910f0f72078fb0fef19fd5dc33bbcf612cacc9048a3548fd1286f1cab94e7314d22693b880ef3fe7eeda3adf1f2c6b1b267d5b2385ec3747ce94558d8ad624a19ab5ab252e64941102b38289894c0abc1922bdabebf83de0772f6b57ef6167cb68121249c04aa4c8e524dbbf47a48492849488909c3e4d2b919859a920800697a1342e2d54c47cfecf61dfcb681599677084976eda7ba3d6f0954d1d4d21092fbd0434834971f104272447b46402836aa1c9140951a642198a209ef7bf4b85a2b68ebf7651c8b0b6271e0ad9c7d39bdad1c67693ae00f21d1bed3eeb1831f29fce8fb421c4b5aeb8137f39ee51da180a732dbb6812f335afbcc4010dca6b5f90456ed73dbf2c6b16a2c7deac1f31eb587b9df8c63cd9455ab8862950f049962eb02abde13d65e627b162646ff40b07bc59b3b187adef77d5e68bb5b690b84d22c47df0cb4bcd3f0376f36ac23cfcbdb0b2ba5e1c19fbc6c43a9a779de09cc3636bb6c0f668cb2dbdbece22f6f2ee3cc6a2fde96be39778fbeefbf57bc81dc8c33f5fde6ddbc2d7d0fbe628a77104dcba85bd0f7dc3df76dd10b56bc47ffc2f0b3b5d68b599bd0026f3d30d778bff9127997b509bbc7d77fafd9e2ed1d04f306bd9b771051b5a3873f81f61b2764b1d0236281355e06bf732a1bf0eba1bb77afabcf6e6d4d9099a20f3253f5d1d664d93b729d6af50525729eb8920bba628999eae8e34c593335535ab871c6154d3416dc8f6aada103a919a7d2f5d816d65aeb0e1d7ba8556af126722757b5532ddb6c1cc5bb9e964695e5c7255d1b9dfe44ca3631c25047d9468b307ce7382fef50c6a9eec6a934cde64df7fda61fd1ee58de6aa59486f7a370a4ddcf6e1603d96ebfe5fd10ef1f3abc561a55961f973402eb67dea36b3f916afd3c8d724d96f7f6fb4d44d73cc3ac267b666f88087986a6e768b6220cd9b30c85904c08883469028315441bac0883136e9801832a54c03ddedb85b6d6effbbefaeed5bb95bbf7de692fdedfefcd704297c3094199d1b424f3a209c971c61966e8efdca94635aa6d38a1e3847ef3fea1efc55cde5bc6091511c26aacb1c65ab3ec8c0b88053faaa8519801555275b4efa1dd6af53cafabdafd70d435fbb20cd459c5d382df330cbb37c3c00a965852b5d60a048a05bcdfa0d6b28c564a414d41addd8034a3d80d08520cc32e085e0cc33c237c8e3072330327b4b461176ee7c2a551c2777b57c2250c045f7e73d1f835f0f6a16b4c9b638c83a851a30482a0c771a8d2ab12c7a1b82de7ee1c064b2c2c33f35a0dec42de34308e9a65625dbac4a5b3a4e07adfdbbb1999d22d0fa5d3918e0dcf85794f1dfe1be1adc3448fbef80e4896f48d435bd2f70c24214574f8d3b78bb6a3d168341add867be5d83f4c4411cde1bdbdfbc54448ed3d5a1d2520a5cb775bbe71d1251a58fee2eda22f0d177ef376d1f725bc472f3d4e7bbfafadbd2dfd34ca3e50b77196bc7d6896ae3bc65b47e34fcb03fee6755ed77da6aaf1ab06c71d04c1cc65ae3b8871b666eaf7f0aefa9eca8aba8de33853d5f4686d5ca0f1f8ab9d059ff25ec937e1128e7abb46b7a7a22aad0f1b479da2e4b6fd5ed4f5baaddbfe6df76cd8696d46f60b6d9048a4ef889a741d3dc2fb7af40f6f4b7f0ff1963a248d9e85187cb4d67b8875b405bfcd9ec321cbc3365322ac3a86dd5b2a4d9af78d8bd6b297812bfa4e51acbed0011f4b58e6ca095e80822c4a38ee0c2e9f902228215028941028140a45a9a6692894d65028ada18440a18440a13614cab340068478c196e4c909aee8dbd21c376f10bdd59963cdbbdde24c9ac39c70de201367d22de7cca9cd1b44db8a09a9c20f675ad9173ecb3427cc1b67de20736e3967ce6931c162a940ce931aa4c4084c40822892c8a284e3cee08242098142a18440a150a8284fb228e19841672e28144a67282150282150a839e73c0af529209165a84088288ec822632941975de2ec7a0fade77dfbbeeffbbc77e13d1c35dd32cf66f5f2f1560b84fd5ebf6c001d9dd94ecb2e4fa98ef67d794f0d535ab5aa55ad6af5fbfd4e6118a5bfd634d2bfeccbb2ac4b694dcb3b95bd881afad3344da3d94f3ca2feb296d2ec2bbe290dc76706d0d1dbb76ddbb6fc80d42bbda63dbee6276c208b8fb7b03ab3c301b21d8d871ea947d8c7edf1328b09b3b9c7fbd83de658343b1e1f039e4d662a3e1479601bd781797a720f98a787a506f3f4ac2400f3f4940e80797a463ee0ef3698a7c7a3c13c3d2e3aae314f8f0c35649e9e1dc37ee128ed829241eb1b31e42dc35df290fb42de2efa05d48d963ce42a808e02d860a3865c432e400d33d42063a8e1d69063b80a20c363d02e7f210fc1740c53cf90b7cc5bbe003a1bd1e7e99121ef25353c061b5c6af80b3664233aced333f35ea23fa5befc0d9a1b2d47d1d878ce433094457383261ba15962c3513c6cd8f0cc231be1719e1e2bef2534b72a9a579fc13c3d2f3504780e98a767003760324fcf6ed936ce92038ae5460e39e496bc6f1c95875c1b79a372b0c192711e72c150f382cc09660566e505181798ac05e6c2acb45cd90b37de9203ea36f2102c8716ec590e2e796779677f21876c2487f3f4dcc87b09cc5b645030b72183e5bd248763590ecf5ef33c93f159664e5fc943b01916d1ccf53c938dcc2c91394b0f2799aff420ca7bc9cc45d7ccaff7f01c98a7277500011c07ccd313804c43e6e9d9789f5ec281a59471c06105e79dcf9287dc53de2c389c4a2ba63ce402c0016cc4906818d130b241038a068b69b8348cf0656de4631c587eca43301c70bdc50195b7cddbde060ed9080ee7e9c9792fa1e1388685869f626ade4b7078b538dcfe005fc9b1627a2907e9a33c04cb51d272d0afe4c846722c89792901a4988f12a0e5bd24c7359ae3f409f80e98a7e73635ae03e6e97161e586ccd3b34d0ff3106c934ae08a0ea3f03c3da6bc575eca432e29ef920e2430cc432e1a36271c99a76787ff6ed8dfbd1bbcd30d2c3774a61bee0d9ee9ea4ee7e931e9503a290fc1787a4ca4f3f4743ab0e4dde5ddfda44336a2c3797a56f25e72c34d384a379c84231be1e9b9792fd1e1b7d3e1dd6d3eca432ebd84340a31bd6487ef5e1e82f1f480deb79376e03eca43aace4676384f4f98f7121c077df870dccb43ae5e72e4343e64233c3d5bde4b76f8f60b9ca687cb7bc991d3ec70ee3e7ca6f201f7c83915cd8edb601e9e008c809c336976fc009887f7800d907324cd8ed7601ece03efc89349d512af03f310bf03ce711d300ea7c139ae310e9fc139f23c52b5c4e78071c81349d5128f03c7fc064cc36dc031af01d370191c936792aa251e06d390a792aa25bebbdc662bd532ec1285b0a62d2cda80155590a02b5c95a00251a0a027beb8380246145a6291102ab005193acf9d2234746698780a1b519e3521c8d122676ac1016a55418872c847f588534d1d2120759571a408bee0d1f294b3a2b61efa8c9b88def12c58dcada33d9002cc0a7bd12b9128086b1f0ae5d02b0dd3f02612443dad6a767dd0579c8a8886e58d535d2c56554b1055d552f9b0a70ffd24c487cdb10a651f57164232576881b25851c554bf7444a229c2fb06a1d8162267bc5ee178e14d448b668553854441884422cc47754b5f785f5108ab5aae2273564c380f05d7c258244487e506577455a20c0849b47c08c875d9d8cc63a15028e32c744d8b74da68c7aa19adf6eb3ba7d65491154536f2a12b87522f626a20f1212135da4335b906cb8f1d13ae4b14e258b2b8f23893171628cb0deebc901c348ed40d8080d4f291a3229dd0abbc71a6961a4664ded2db8ceca12ae61021025284940f496b134397686a11de988e3598ac9a70b27ddb25dece5205e8799402b1140cc3aeb3c2cdfbccb444549ee76539da7aa055b279ab9e0fa552ad23108782f77e1a7d13d17e02f3c907d3490f22881f55cbf66ca33d98f16ddfacb7596b2d175a7b6a7fedefb514dc88a834087e5b8eb6a3d78d64f3251a6df7c2d1bd9fb652298828044fa3ed3e4aff8113da728f9902b79f3c22d62934dd0729bcc9bb8f52fe51b584ff915385b9c74cd1cf1e763bf9503ae93e4af6a46affa36aa98fb6a6478f99c200124eae3bbd1cb880a3e28a7ebfbb93b66dbba3d1283cf6cb6d1c47eab26fc3b8db930e8ebb9b46ea6e2f672f676d777a1b2ed3e86de86db88cc3d1da90e8e928ef90e3344deb48d7c02c0bb550db188e3acbd1f724ee5e1237c2321bdd6b5c96efe8f11a89c3bb3bb75d961f5b77ef6be86fde43e8ec33efeddc4f5df71afa2ec799d2be83e8ecf3a72d9f74d06fafa1df6aec37119d9146dfbe8db411fe9ee1b0d242271df4da6de8351bfb222a2f5f8f271df6dc6bba6fbfa73fe9b0cf5e636bba6c7ff34907f7ec355c0dc5c20b1a700137450d2c008506250c93a1b7be8c24a06841831984d5daeffbbeefd3348f5e8e0879e39df5de5bca9466f4e5cae0e0c1dd7bafcccbe7751fd87520ed7abc68b487be2ff5e6856295c52a8b5516ab2c56d91aad20021a441fee8b27497a3896294adc25e66c46ff46af76347ac9f33ccff3bcd1bffa118e9a54e246dac15b1de12590f0f2a0966f6474c8437b330b432edcb169943b9667d030c2a291686c1a978532387870978f249dcdfb8a69f40def58456f27e1ad8344935ea8845bb885dbf6ed4686b49136d246da481be9db0aa9c4ad6013c75dfe93d1dc86b78cdeb62d6f19bd9dc3bb748e442255a49426914ee27e2a651df20cede5cd437b3fd5944efa6947299336d22929dc48a46d236d3a7aa7f47623b35d66c3f11c8e1a012f33a585b6ed74a371232c3fd1089d46f6c1929f5fb568a771439b0ba7711f2c3fb990691861c9a7aca3afebba642ef0a22f2678f480331c410cac0c4c5f3151fa712b9472277576e34c5fb19bbca9eacdc31b477bd6ce6c4422597b52d5b20d6ffbed64b30174b44dd96d5bf9e9275336808edeb69b3616bb6da76f3fadb0b08076fbe9940da0a34d36cbbebcbbadc492b2979b4e25bd44ca7b6ad247af78c37b0850d7229af4eebbd6d24938ea6d149270d425bc4d5f59c13e28714df9a66a5bb7cd54ed88443a850742faf690f4eda46de4e58da33d53de37b56220a37b1fe5fda247e71ee2dd438745d4d096b4e5bdf2226a68d34f3c4a2fb9a47a9456f23ead984c019e1da8d42b9a487394324523000000a0007316000020181289c44239100582d6737b14801276924a68489b49835190e3300682186394218400408c4106804244462200206b2ebfc7dde5264c1b9fe10442f4412712e80fe8e6efa7e14a81086abb8bdc3ef3898126403aab1e75a693eea680818321ea8c0380bbb47ceeeafc36065eb18c7c2019a0fa54ed60260b4439fb9cace04274a97263525a5c8a76efa4146a5c0e09b56e117ed417d12f524881b277ec97816ba441249d61b27dab2b12b5c5ef682136b24219109c683e3b13e4d238718aac707456adf8afed65506401cdba1a14e8d76504a7d57808c0502b0db4ba5dd0214b45ea553b9f61f411918cc1395da607e5fc1b8f7a6757a5575277afd41b550e364f042ef6524a9d63ab31ddb808a9fbad72ce40a20181f431f72181cb3a7c6b0b52a0b4f16911418a99bdb3bc1c6e9506816b86c976acaeb0a82d3fd70b31cb0a6c4030a0f9dd94906be7c629b0c4715925a22fb6d761900552d691a0c05f2f223864f218b060a69b58192e6bd95e8ad8be6e28593fa2dbe95d2d0f3c918ba95d1b29c9cebeb86f285058bb76215a2ea907c98e1a550092d15967acfeb7ce149980a8e8b20e5fd68214287d3c5544906266ef2c2f875ba541e09a61b21dab2b2c6acbcff542ccb2021b100c687e3725e4dab9710a2c715c5689e88bed7518648194752428f0d78b080e993c062c98e9265686cb5ab69722b6af1b4ad68fe8767a57cb034fe4626ad7464ab2b32f6e49030ac3d62044c8a5ff20d351f30b40263aab98abded6772013903a3ad6b1cb5aa802a5fba75874ecaefd811d9cfcab0b848a7dd22ab40f7ef18100ba3c45c44c7c6c00183fc100f8152ecbc8358812ea897ffd51aad6efafeae52b9c80aeab6108e467a387e326e81825b1fcbf09ff300feaedcb31e54aa9f82dda824170d10df4f1fbc65dde73ce422f8ea42fb8fc2c307517c92b7244e28af0b04d3e37234f5c18ff3ee3d35f5e013fdcb5eb89a8940e9ffde0def67a1c54c27badd22d8703c6baf1270c5f6b612118fa6410016ab087697790270cdaa27a028ffb75a23176e50f829852781265b06961f6eda0c57272b9784b19f4b272653bea407b9bfaa7e7c468b170efd391eb520703072df005d34225f8bce5c9f5b3278b80acba1c21eb2e997a54a0ae8fafe635bab30342a6c377f14763bae8f1b8d0459a58876fd8e6987fe6a59feca2b664be2a58b32157124ff2889ccda31a00ff73110e56e02ef4f52ec95d115abb194af1085dc898f174cd1fea5899c5a906e73aacaa84eca7339c363a1a0cceca40e0524d7c60d16305e1e10c1b233b97572273e5da0f2d4d56f806fca72030912e061fb253b5f0cba389535d24e2f85630b22c2aa945cb7465859613df81876e356e067cab0db945aaaf53b53c4bfa4ad4f969b9cc291ac1e1bebeb397836aa03521c1f8b43531f0822b61f32cf2b368cab043b8aad97c0fe3f6e9f2bb6a40b7085b0b79af004fa8f66e70aad91094b9eb7aa156a8dd9f30e6fc1cbccc0f509bc6456219fcab297b2ce671c38561b0b08fcd9b35a92a2d51134b94a024906b19d496ceb8a5b147eb21fa720616df5c361d3504ec5123bfde816c6765a3361d7b437afb84c48444d080a22125a50a6a29171a7a17839a050200e190b95ac24d73c0fe3e291ab4eb4c8635106864b241c1514b2ac1dbb91e327832373e5da0328e6529d86c232c6701f76a059299cfd322a667d2240cfd911090e02e030736e33186dae71a7e882cc7f261a81729365fe5175aaf800938cd7c824e87b03ded1d6af23d2d9d320fc4f7dfa94aae6be82bf91507e815a3011f46acbe5dcf3e5c3d3cfb434c2b43799df609156bcc83a2193368a5891a0ad3e9749dc9be83a562fb851a9a830f896e84843c5f3f8fac5a456ad973b39b7631c41c208fa636790805681f40817cf4f0c6d15beed5bb6322bb86bc9025705202f368bd2750992a8a8cddfd99e6dfbf2348ec863deee4da4496b6ec2eb5e80158153ab93fc1b34b7d2e7ca422d3300c6b6a8da47073922f7d0fef80c16f638840ebfbc6f1d3285e05c4a20da9d84a359791857ae4584fee66b06176f6c02e9b8f8752694e85f085fae945081ccbb9433c5ad6404fdd524fccdff69010ad96b4d90bc2438e36af4a1cfa9b8519cdec3670310848cdc899ac7826f3b8c6cff58c703aa206294a50c2bfc552f16032ccb7e6e74669c69c8f1aa033132644c5dc6cddde02a09586a3fd69ac2b56bcaa3955a5004fc7bba176900840043e2c0b80f7e3ca911c68d015ab9c165680fdb1bdd664928ea7f642be00093f76cfc3f1fed977b2c35bd3153e9060a3f98f9ff952d2c0f8aab1be32431409283215008ce36a754dfac08c4fa61d771eec8a0366003b8531f7de9aaebbb8c17817ebfc3224b5471106bed0c8288453558c04982ba778adb26e785aaa02ac57aa728b39944f5357309029a37b8f54d5fe3434ac16a94e61382b8d5d332a9067bbc3f7f1edbf5f808a8b43486ab9d0b356a6852a956f256d797e51a5ea04cb975230424013f3276a44957a7fa85a07754fb06b0a07e35aa861181fa6b00555aa59fe8d91d07dd32516d4f50f13a6863cabb4983a080698739f8cf37a822a8c6776952a853b4041084d32cd743c1d32826e4b608a8a8242d40c1bc171d792eac9340bc8104e2cda6ab5b31e004525a9960cfce14a03d5fec880526a3ccb04c8cee6ecc25b681fd5c7637b311cdbcd0e78fa89a384d6d97513009ba1ae227b3119cb387d4e8a283b785c19867488126a711765d7d17029daaff7fa5dd45954cf21a613ddfc09c6a0bd116cd74cd4cdab61b658a2303754ca948e7fb8f7b1e73737398567e8777d6d448a885f14ac74170bed79cd60ca89fa667aa9231dcfafa25b03aca94d70e11d4db194e69286650ca7dafdfa64cd8a5ec641f260cddd392f229c5eb74eacec188a812819236a22db0d0081a805c40a29fb8126b9427290fd67959247642719a00f249cbc6df39899c3ee01890c24f23411503520d6bfaa605740a12006b3db63dd994d569880c1934c31f02e807adf82b91bb8dd16402ad29fc660e316c88b2f18dbf858c39864c0080d1019cd28d5d9b8feed5ec94672f135352d667a5b4487ca2332e40c3d9c092660e6fdbb02496c828e25d5f1a586c78c2adfed02d08e65ba2b15c9b30bc4e47e0579c24398dc0a34403d5d267120a3587e682b98d67b7b555b6c9fd53057b2dbd83068c70a0134c17305e0bf11231c041d3170f034b8de3b855a02116c8173960269739efbd53a0d186297837bcbd7872db99b6b2c2145b714d2a515f4030c34003bf4dc50816054b7dd022e7d2bb7b3ddffbcedfeaf870872edf97062331ef5a7e39189a79d37be69d87d05e8525a18f4c74891fee521e3d9e100409aa643374f1d0064fe57131f76688ff390ffe17c52df6c0a3f786a2e1c7913bd7e1206b848f5a2b607ea218113830f2a8a0857db3432ba5220842e623fd675f204e1544279083c9a03dc1cf1bb5950f10d3b52dfd30a15745f0fd055b2933187fa60af152a3dae6154303a656a9b3a838b08363108e0ca4ecf54bea4f56008b41c94225172a2e116f50d5ff84bec5e81b17be5a7333c0ce213c2f646e7d46ba59205d0e34d3913aeba3e9780e3cefbae9370e0247a1cf22c40ecc3590ca549f1136f4322ded13335896b798f516f569299f3410878c7c956e0c8c0ba74182b22aee00943a61672762ac35929c4c36371a2f288b7118cb19c08fb0ff4165d87a8a968d064a84c089bc0389a982bd45423a95639116c14845af1ccb4c2042316587f8693888d70f1e0525a50d54b9e488fcefdd9c3467842e7c5d81dbc45b10be2d8e491ea5a9a4218db0122e8fbdc1ac775d8f2738b63566591b51f8ded2e9477ded70a2e6184f56d7a82992ca1449d5c30b97cc55672f6239976516977fda05688f0e99ccf6f4c7d58198defa265be3dca232f20139c129c54d6944b3e98593a36edc956d25dd7295a92ba29ec66dd2437009aab8a6015945c22be6acdba44fc82891cd60f49528de9a853ba8c547bbf0e09a32c45a0e12e8d2f9baeb4fa288a980dafdc445be02e5f30c034b522956b2bff3442f7be4dff77e802d2bcaaaeeeed68cd4c177c4a7c20e90ab5152a4bd702ccbe8769c8a9eab223516fe2941e4c43ac6c3f55164e38bdf3db2dbd0384299848fc4d03c8a00835ff2a7a9bace66dc541135e4f4e3dd7c6a3e669bbb509b76d418e1d18e7a414c020957e11f6225003a9760bf677dca077f694df539e7d2a9e3df35ccc831f4f04d5f601b12361496827702addabb2701c06060589101fc15fd0e7f38e33a66879d064a7e677e9997c0beade7fe4641c7120fec4b3c4f6ff926b151a2e446a9f092872968244e0e2edfde3456f94c47c1aac0127b9bfd1c47c0563d13e7fbc4d403f19ad828409f23531440120fbaf0440ee4b73b7331ec6f32b4861e6a2e7b7c121063becaf7d5b1be08f1a7a93d2f67bfb0536083e92cd9676d20249d96dc4656791aa53f8f5f9cff227364ea909cfb5c589fd6a68e124a9e3ac83fff2a9d594068fc22c5adf36646f5504ccd3be8697deff029219d952570fe4e629d5e949037a231cc7f16e1fb3a6d42700604ea7d4d3092d77165dc91378dd761d68d5ca2c91c1cd2e74f2c8c135f4b1043478a4892c1ec1ef99a56424832ca05ca29db15f26840c3cb704002c20eb988de5193c6ac56e0640a900cce48c5aac6d32fa00b31f03d862580d9300da2020350ea5a6b01fa01300b58f01bb9e80a613aace103eee190048e032c106c079a703cc0044fd9f07ec6601ca154ac860f6058084c7a2fe40b177c78e4c50e7774cae9b8f1a2cea2c23b68f9c6686446a206407b4c90cfbdb0350f2038982c8a8fb991594d9859735876f9970609867045d0c25525337ca5c657f3bb1a87b46007f52efc5086841bb89e481209097f16d938b79c68eaf100cb7384688bb8887bddd391ffd9c2253134d026bc9b6585b8dd2da0fcfa44210eebc9e3e88a834c3497901b66aaaf967c076f105178d0e1fbb7aee6dc458570017d8585b8d1f7b4e40da253cca6ea5ce38d8e487d58dcef2659cd41d48555f372dd2cd607fd665f26e044a1c2cf67e63af886a9b63acb6459fbb0b2786f248a1ead3ca6f011d5efa4e058806b759538102a8975fd8578494a2803779e0299ea97cf5f1d980ca971ef29ba0aab01c74df75df3f9fea1b759007309fcdcd071b89d759a4e72b6051e758ef06ccbc7a64b545c894381eca7068a81b22722e2d42b0060448bb416466b2a44adc2660b72138241bd3036385cc8b01c77cbd741441b06619ab1fd051ddae01426081d66694c03e10a358ad3169ed0617edf556b6e1659164256847a1cf22eb48e581b20744e2c817f0ae82a2be6f2676abcb74840bc2c3303384538c0572cf51881d809e0845f7883c4062252490b2729a440235148be674096e70a28f650cd1bf4e3f87b40fbaff0c6551f852926c0e1c1b1e74505f6c13af03ad232a63cd78b7a8a7ff3ef4b8445634a4f13963877798a9e65ea8655a848e1dd1948ccd3ec8d46cb3d17caf6378c00b8602fb07720d02972b758d45b1be7d5034c8178018baacd463812cdbd302cf7b9d843b477b9e6168112e512bfd1720c6d2e45aa2807d09c153be888ea27d39ff57d0f7cd30271daf83f6100b3f8d0a01f5af909a06bee4e5eb253833ed5509d98422172d9ca39d5231846eea1d1b453614e21c8103875e747623cd1c5210116406271207f51fc2965002599f45ddc84870ab4a87d3a28d0d97e940d6cceacafdce55fe0c9683d72c2c42b570e1043f5956952333a0121b4019920c417393c3a79e09340984ceb517d94dcbd995cae024aa934c82f3c0d0b209858222864da039155abcf1a78334bd41ea555e33970d6240684a40087f900bda5d1c034ff90494ce97aff432a131253209bd35d5c1221532698612ee7ef406b707de623c5372ad74d8390bad7379ab48739067e077e2c93db3b11ba97865d75ab5049e0585521a336545f495471ce2466518d5494c65e0b3bfa95d287c8697e46feb122d4a9cc41493611411ad24945407f944790d286c42533793a531acebe72c6a49c91a6c79bff60e1887349b8893c92720871b649e8ffa0c9b854bee88addb7c3b406343fea5352b15d4792837b3f6098a0587f445ca8413bbe3cf1b5492ddd77164bdd2a60d49fb9806ad0ad3d23aa90030c6f3e38fe12c76e053117ad324e47fbb445cf38cfe0b04a7e4945250c7f64a23ef384726c0cf1e0caa572222f9737de45fc71f2f2ab1996abd746b636612974b9cec0e1d7fa4558b7eb2483fede923b4bcce0092066356df9a952dcd5da8899dc96b17f8c3372149428f2aa09f4ac7eb40b1e6217f6b6e7e6c445dd3c7f4e2f77a80c953c62db1ee381cb36e16af607e76d80ef87da051809441e38a63a6aadf37f65a4199be86df290d72d7c904fd45686732c18cb6aa425932b9029473b3d4634a1ad52f5bb57e882692e14b5dcc1e85defe5f45c6229d7674e3e842265aca72e7becb804c3b489908e639aada4540f337294b1f232a0e63db0644604200ca50b859e4554de118f0020530823229b42f8405a06709052d6f0c237f81b7e1be04ff47c11fae71e2971d49e62b6b19b11cb30d172f0cbefe2e688802b51c0277f97a6d50667badd784a271de291190a9a0478ea2bf21c75f26502ba8c6b0f2c568f69f2ffe0e63706ebab8ef8af012879a1eb4a7913327cc66b7137a4c13243ff4ece9473e2571a192784cdad3bba6218742251d02ca1487d9b3b696bd65a5d9cb9e418910d0fd10db616bc775a3f9aef86ca4a29b7cff0ab2401d234e4af94bbf7c2be88787c6de232c5d0a4c447d1fc3a590685e6227742960253a4aec95eacb5a4193182c84a2f36844e7d83b38749460441e5693bdf35429ddc3e3073453e62edc3d96481c38fb4b8866a0b63dd426c866573c4d3f98520e69ffcd53ab4500b747f945d0098797c718fdf97fdf9af3d8791105e8d7031cacd124d2efde23b00566b2a6b01c59692a834207b8a8b94d08d828761e7610973ea3372a695c375c8c7d1d9a1fb54a6438a2f185fcf185c067e62fb1e03fe65b8f116efab58e3c92f794caa77cf0d9432780203160be0e825e64dcf3c9f80027e0b1ab0eb05dd68ced944eb92b3287fe38a2e94ab1e4305a6ebb97f675c9d33e8fdb2cace7bd94015a6835c036b257bbfdb1f5523d4937bb27065b7d62490084ed17b519b3ca142b7b0718e947ad7f058ff1314761a94824183d215ff42bddfc665f151f7f3d13dacae41a8f8f638cb1252db97beb1e65fbf8f8758777d12ca481905331bac950c5c7f14929e370bbfb5b3de551306e9f05af53727fd368817a13869ba2fc6a2b4b33dcab0685f26b8231c611da2ede855c6b120b4c87a2da5265a2ed530bd7de8d8219fbb82a932d584b0f39cdac3dd56c1e9713ca7a087823f58e9f601d7cb9cd7ed4cb207db3a4fd67f6a32f83607bf32d80498ec985fe1c877726bce7c9ae8ed31d20eea93ac03ac7dfbb90d3dca963b8bb14deee2f6c159f8c60b409273280229a96e33e83f8a5b1c448ce9efc005206ce18ba1e256ea79b571a99f3eb94687eb1b1426cc4a3ad6256ec0e25946cc7f36ebb1122d83992bd55c624a205fc505a7b68378d7c2127280f2b298f064575f0b4448664fbe1eca1b891e4390fb7e3461fe29b5e11b332341db555edf34596ca9fcc4dcb2de62a0bd55138e726d7f913fb313d6e30613fb6285c9da44ebd1868fd845e4d7cc0304f941d8594bbbe49076d4a03038d3963c76af110026ec098c5e0fd449849ed2d07b171df08fe096e197967402f0ba6aceab8623002b02f10edf78daacb6bd7ddec3d41d3f802059950a406772278e9d95acbfc04e3f3dbc12b7847d51663d7f5b5f727844181bededb889bc64f3bb633020bc695c93c47fb791cf57179e96a8a5f7a0280f10a99199071a24acef3e5a159146f201c1a4961bf408e8a6954ea556b9b2123f8806fc30c23b8663b8cf81f7ed71b793e1218c6d979c8e71e4ecc6cd63af145229bf995f170aeba5677729acc70f665530e5799057b9e5454e02b382960e5e93a604da5279c6d6b23f9566df0fddc97b039aed14f9b77d7e2a3f364173261b79ba5f4ddf61a4d962449e4fdc1bda32db11c3453f20d9d995ddb28e6fb1459fdeaed6bbfe5b6125795f77ca95c6e386fb3e1955d524af49fab7bf96f685808b3c4460b47ab4fe89e1ed577d4e61f95b812060e02c0672e534c3899a3f6a172df6acf1ac9afdb5262f679a85627b1cf2e985bc1b0c143b5017092c1f0b6d95036b787dea7e4f3e343fc7b397b3417b9dcfd78254eea2d7a77b1315a6363d9096ea1273162df2fc4ce82fbc5724849580a0e93277e4e647a4a35a883c997278ad87e066c71d05c36db9792977c8c1ea83868ffc17875ba4231cce2109a7054d1c29ba00d475c6ebfc7a6356ed80ff900fb4368502b601bd45f03e82c4912eaf235d8e7ec691d3a7f7b1d6ad88ea87f52851a5607ba1a02002770f3a7c933b8dd31cb81f444c4e770309c87dfc39d901b05faa06bbf7720225bb94d3bceb7f3ad1067c7c09d11adfc36f43d0f3e4443c8653b87f4762c70986414ae372b74fdfb8e15f33552756226f1c5db7f564bee02c5907b5dcb3824f769de1bcc411eb26a59cb825cd154c4e138634691c4d9a97ea462cdcf705d79da16a88550ecd436e086473e1caa458ff4730e28d493e82b1dede8fcc690b8ee777f438fe5ed66d41f896472c36125e86dad24919248839e17a83f63ef2c3c068cd01d8fb3e7de8e16ca41d6d0fbdafd0634e79913bebfddd86f039cc2707e46ff34f55de1fced908c8e56bd20a34f2b1db911e0a6f8ab38eb404338c13ddda879a158298fff14aaf1ad4e10e0693cf16070687e86f2cffa957326ad09c1220583b9620ca168d6d262f5ac673bd6623ec28f60d03d6eab3aec7d3dc3ec29331317d5906ab6f3771627904df96997a59ba34a54cb7788ede9a606da55f044f5a27382fe91020ff131f7c922b6e6f057b3cc9cf40597e72d28fc25bb9a5647a0eb13f64a4a7d20742159053f46afbd446b43e3d7aa60d5d68f15fdb7c9a802c7656a6fc4e4880641c6296e74d9ca112c171c737c67a23282ce1e2b2ca2e4485a7d07d5e7431a9f551f58340546bc952a82cd334e15a4f1cc1a184f76b83815a05309d69df5436090eb255013d81b80411378976cfeb28e10df63e11a093554b18f74453f81b39ceebadc0e30798081e453f9b9abc0927c5e30020e14a180a24764c244a3d5e32414864b687207aff81326f3a88436567f085312d17e02b5098f36d59aa1be9321b015dbae1163fa6d4e27fa0287bf486432f4f61012bf7b3dcb9339a1691227a73ccfe36c68c2ad5cf065e8e3aec261e4abfaf7190b1197a8774ca29c48ee0b48d491015d7fb07d407ad1ad100ce84409bc42ec14b30c66e092a0b71da2e3f28592bad0eac7d548cb64b7c45cddfdfb8f4423e2e7c4d92aff8c7a32c3545f9830966cf277afa388d544b34d05b91730d2f091d2d3c45109d795171446813dcf1e2ea5a767590da723d4013dc10cd2f7c2f6a4120585de3e8f3a80aac95e7cc97694674be1916ced9692121a27ca41bc123e4cc19e506b9dc244a10b420b89d1c9a09a08ffed4cde0d1984114aa30ab199f347a5a45a80c5117e37820fe79ae3be982830c79d0a33c86195b32891627fa531279d742b91cc92c51cc181c5d51cee02fa6a4c21e5ad4073cd112091c81430bbb93da3dc361f173557458a9e6a7f440082c8deae6ce1f1ad6b886efe3c720ffac60a37a80069870ecfdf9939f63b543d99ad63f0cf0d1d468eab34bf3c220767ebf45ef5abb7f13671ad7434889d0428f8cdf8026a4100370434be613e2ba0e8d6e006217d6ac477af4fa0228eb17bd16d56fc2317097b55e49f7dba565da61e29d8ad32ceffd9dabf717716e3d046c60184d2af977fb22e421a72be3b81713ba9fbb37c9ca6615ba426845b83ed1f4cbf0c4b914741276e219f8a6b3925f6695246c868911076d9651da9c3e7c249dca5b6f726269dce6a168c29e2aecdf5ed72dc2509f5d7513f79f75b9c9f70851aaf22685f056a426faee61b4835cada649d9ccc21de61bcbe288c5d7f9579b0290e47cf214c53c5049cbaaf2110be6309b5ada0f5625d2ce9819512dd0c4c1b4103849f15ef175e191e652e5556af04fe4224759a0b070ece6a759a70245f02675b37d13e028769515f7cd1059f50376f9ce4d7f3fc3d1c99cded2445bc98f640891617eccdded862d201e0dbf1074aa28ef17f7c26d5e4fbd1b62aa1d71ae04274ff191dbc92fd2db1f12982bb08812820ba444510632674b908820a8c73bc2769a2d1e832991703f3dc83b721a93e915aaf842fe4c48b099f61e9edb5318d69e6509b028b91c6125722edb29f1bf64603269d45337c8797cac5eef9b9a69f4bbf8df61ecefac1bf021f2d07b0fc1c8d7802086315004b74048ca45e82a164722b60321d2aacb74616fc3a1d8c94fe74f7c1863a9cb7e55763a85438050a792920178c0d3975a80c5a0b3cb3df8bf142074c8604e72f90c2e563dc4a3a42e332b0a84398f6e078fdde4ca689d5a4cd10b43a68287653655513eba7181058ac54079290bb1ed7f2208fa2791d2b46c7f398889de479de322031c207378bae760869ce02cabf5ac45c92aa03dc54f25c2d2f3829a2b31ce53f7202a9cbdd15b981d0712ea9c9e35e07bfe4980f6f3a97c423304e7615e79244db927d22fa1f7cc39bcbb0e7d23719160c9a416fd368c597c7063517f90125beabc2dd892c46df666745292d7479a2991285684dbf2e2baa466174976b36c6dcdcd0d88d9bb2b6af3a5be14e3b804aa5e8bc90c3f5262fab80bdcfe10b70d365ab340b79e92973f1d1c592c7ae505e923e584a251c626065dd0c40f2321c8152aa0e995c5c3acd7d00e8cf6f5c58786f6a1ec6990e5032d12bcccb5339255f8a365723865545bff9721fc67c29a2e727c235e1497a5b4c25c1e54abfe006c72c0e1a57a0c2ca8b0cbcd3da9bfb25e7ce4ad5b3169c0f0adaac5430e6254d71b9cc14f4fc945de000e289d033a3385ab374c3668ba94d378bdd54d8c50e372f998be300dd9710f009ad1cc3c5eb3e235333970ed276e87c992dc1b35fa4d97c8c5b254fe6dd6089a28b1db8c3988bc78b648340fa628a8d933b37abca3ed013e01dd36471a2fa4b0400ee7bb1364e5c130779128f502fc6b2837838d2e24783aab9b522f86cf34eb3044a7c1a9317ebbd8ec4ce2062bf06fb3bb357678353271839fa526c60e49e35ecfb63878f5fb27f6a6bca6a0c72abb958c68a2c3ba07ae39bd17085aab6968d7ffc2f6dd0e9fc0791fa599c9eb0d68cb63836695ff29e35ca399506e606a28f61034afbcb1ae6b369d46ae0308cf4183c4e119da1baa493ab801498ecf51c835a34075f58ac6dc30ad3f871a11932048a63f7f0c04f83985e61c140643118944e550e7c85b1e10df418a55f492da9bc7f0a7d42b6fc45391b235173bc190ef825a71c36da7814d828cf4b0bb32109acc6dd02c8c437afffcb1d7d0cab302f78ba9bf14cd589461e876a527d440b66c6faa595ab0818dcf7a3b8838d3c208546e335272eb56a25c75a4ca409bc8ce8f770fb6e864e9c400b38f7a51e1a61dff00b65ac66010b6f0481c22802e67b18e517560a196fb196426386c428e662af5db982e6193e23f73ac6c3d5944050f5d9469166142814b5d607a75f4f01c1deab2b3ba90a4bc4d9c4f62158505c3fd8a8fbdab0eb5247224e62900aec0258bb69ef2f70165ca369330e43f0570427c306a96803fe1c1c7ed2229ca2e51e111e8147fae198a8f1c6189487710a11c48dd9efa202a0e61436d8f76044159f2eba21c5064da24d1418a64acfa8e0439e4f297293a325acf26a7b9a8dd06234b15555f2accd8e0c47829c8ba095b2111060ff3fbd52468365a4fa5b6162a033aae905a4c1953178d18725c7c67c8b0af9adb49a7e9c9829997a477f1c0e06fb7c9fb7733c5935156e3e0d4fd53e5a6b191509dafca7d46499fe820c85c8ff296b36509feb7e086ab22bc978eea95f28b2f67c1023323bd27f48a6cc5ad340cbe33e1fa695d93e5699cfc12069c840fefff05dc8e9f091e101a96b8e85bcff8b6457367b2ec3547bde130cbf38c0d0bef0647cb6b412d9eae06c8f264686d78546ac6841760165e00d009997e4a34d5b9669fcff1a1d9e7bdb0a41cbb39108c2b4d347f3b083a7e6b22061d5b33c41d3909fe339ff36255c07aeaa605c0a2323ad1071af977fecf387ac499ea6535b54255cd536c914405b4bc7e91aaccd3ad5d15600a48e23e37506c18f431674e022c59b6e8190ad318b2cce3027282c8cf9c1b4184db1b607d5eab73fc6b94d784722a938680d201ebccff1298c42e5abc1ec33d1c62f84b728286bdde3d4d2d18ceb943e8943ce22f3af0d2f94b28805f401381f62a66251320e7276ca60aa4e6422237a1394d9129d88820ee71c20a1befc07cbe753629a451428c3ec9b5a1c4443329f39695eaa5511ff7612fea86350b0f463aa2925719d93980bff6bdead323ddb65be05d2409ba318a778c90e2b920f150d9b67ff5339836cf2279dc32cc8a7a0e3f05a283c3078d635cd76990a7360276431cd3057314aa24912e235fdb623f65646c754448266cee4676bfc5c5b985698a15fd33e358d1d46bb815472231956700e00d9bdd6edfa180b789984f037f12dbc010f2480cfa4810c8584cec3d0ab5b519757141a199e7b4657e6ed69ab74798ce8e517cd5e30c4f9556d12b23fda8493422d932f95d58b0b0b0461aef7995e5d38e15afb49b5587579eb04976aa815bd312e72f8c1c6e50f52a18945c2a71cbcfc37b0135fd46a0d4f50042a8477d669102c55dfd864efe848e022bad161cb1bc135df390c1a0896dc7fcfdd259858d11b73a7a5bb6c182b9b18116686c9eadcddd9f6ae336e2345b6515dc48eba5cb80d67948aebd831f1dc4263703b85e06ac3d135944d6dfc8ebca90a2b438cdbf08e17c17eddc7a4c6800b4fa506a065f3fcc013e00e58b7997ed0a4eb963421e2e7747695f981aa06e559d7c01e799059a4fb1a5e7178c255e522d9fc2c0a2288f86c1ceb7894f5b7e584c355f75473bdef552f3bc6be198b7d2691f2ab1269b1dde303e1035fd63b4c2795dd2e505f93659468a1d3ec78cf1193d1e2f38fdfae0d1358e53de95414349ddd8eb9430dd05f5f21369649a6443a0858fd9b30e239afaec961dea295f7f3591dea306229bc7a9fe2a8a056c45f79156663d3ef5b622256a4ad51c1f06c4e2ce408ce22bb0d57e1d9499f77d019412fcfd82cee020d010a442ebb89de38ccc7f30b681beb44e7ff614e6f6e345c8461eb63df33f4324858e4a6bb2c779db53c1ab8546b989087d1560a4eb34ae85ce16f50c25fd110c846400d14d0feef322997ff9d566538c93a6fd8d77dbc4a79591b4d1d1663d771d8f19819e796bac3b5c9985961ce739d0aaee315340c2ca035b15bf781b31b41e83956ef4ca693651f605a2903d40566b853dd155192e7b8b5970a6de2c6f2646bfaf1511247436d7ce70776e98eb8027c2f5dfd8174dfcef391a5da530e4199e733c3c36efbc8068df908c90ad0ac80de5c6072f061f71aeeb820148e975a40a78dd06c009404cd415a490fcd59fd4fcd28a6eb33313c9e91420b5c829b1bf37d07325f8f240bcc95778b48e02cac477d366cf7326799b97fa47fb96cf11256e22e2a7fc1aca93b5f50183fd943a7062d6548255f3f321c6c3291e9a8d9217e8dc484271cfae92dcfd82fcfce6393d3c0cf46656f9ed329ab2cd23206dbbc981e0a4e2e3c3d22311e0c2ecf0b76c6901531e241ad51f062545b91024a7ff3293e6f0f4d2f5bc52efa0e53cc8bb814ae389bbbbbb0f1f84cc3c90133e80ae2b07914ae86d7c313dbd3a51407d9b292f79b150fb0e2e413057233aac4f32446a2fa38620edc6713ac0e49a234c7f1ed829a9b1d6b9eeea8d29e6a2d8dd9688457bbed6f63e6d51871d4f2ccad388df7ed4aac5a43026fa4aabd2cbb130878b383abd65472c5328b78bd77750b17db64af49b8476ddb9cd141849af2ac70b7586a48ac424604d8d34f05e16ad09cdd1838c1a1ff5a7e93c84a836151f637893d78262fece3b9b49920f8ffe6b346e417037404faf50cd2a0f9c7660beb70dca55275dd11b8feb379b63aeeb5506294b032cc0fc5e4fb75b83c4cd3a31c414b2668aebad4ad734696f4aeeaa908b5f0ec324430ace9cb2f2d494a3b870d038f8c131b48861fc290ca261e1c0b5a95433840a526b22c2be8fc431b14f682ff695cd8cc4cc2b71930553c1580d4e2664755182665389e9a856df1d3474b755d6f7fa578f01e4aaceeb0dab6deb196d6cb039b7a8c2ca75b5e54ea16affb81cc5bc5d6f669f6466647009054b35811a03da2cb5b883ff99d85dcb90d78fb69fc51aea9d24960db4bef2c0de9fe7dc0c353f9d38f8e091a70c2c9b27aba2b8b57581f700437bbbcdf0ee2a1c16c4a7c664a5d6f6dd90add3af0ae2d7453cbf34e32414e481dbb110ae084e735cae9883944486d2f8132391d4b45fc537cd05055dba0f7e898e769daf73c767480ef3d6f672edb50e875eba808ee610ced6c60f814e24f606c67432ebcc51441ca552ce8e7e59ec3cf71920c1be55db6cd7c6f8ae06e22f8e400373f2b059b213b189e02ea4b9f3a50c428a85430836410a6b8e4468d648be76d3736468ae04ccb923df271be801c7e7414e64b1124d8a1cd70119834bf6da86a514f54c66b84f8009d5ea19722d84210e9d02b9d3101109f2982555d57e2d4b7cc48e014c1cd3807dddba638bd48d4084aae0c7cc9c3a57b8792064008f85b6b422eaf8c6e2e70830e23c5f3515848451022e2545a112d964e64db053ad90887a9595336b04688a3be404f152ad147d25e42fd7d75c6b261978aa93e4e51a8e0543794ed749f0847bce17d93cda1e2d2d940807fa7014504cdd0b5bf6568ec96ae7842fa56600e1fa7620633d516e9dd63a71cf215e10d8921383202523083f290c6977a0ff83070cea3d805e5238df152a0f7cd757a08623f1ec92b26581b4a2a3f24488f77360d19a3813a501ada672fcc7bdba6e8f60d494ec7ea94e4b180e86980503ce400f3f24e6486e303e5de8476cbb35d4591d3660ece83e92e4f8e8942240ac2a3991bc252f33e2478191488cf0fc98a563953bc8c3197b58daf2fb91bdea40793fbfa64d008f3f36e16b9af2f2c49361d52d47023ae21bba8c4cf0466c07b3a09301fd18b8a2d790d8030115b50d541f57ad86e603a5de5c06f5e54d4cfe8581602f818ce26bcabda14ff7546f51e73f5c4b03cddaf1a3751710b1a2ac2f6715365520da04469a98a83ceeb6cdccf001722bd82a95fadb885ed207e5cc0ccc76f91a403e24a547a1e3647d4461a624711b670ce71981ac5f837f1e6269e88750b31fad525a8f4c4848b43df93749465669d752de72c3786a08a013c2d8cfb3840b80de85ee8609bd669f4f1564691cd7d5ca2ef4bfbccdcaf9f23066d0622e61129247a6c5ab43b748be89bd47766d27e8c3372c38096db2097ed7639c739d48fd371110961e075c72d02b2dcad8da26c45f155927867631a9ee01a2e3362870c44c26d6d514a721b50bd2e69349f4945469344c8d64b42079bd1312042e2da1ce3193482a81cec0f51bb39061fe55dd37318df5a45e0a1047501fef96dff483fcf35dfccb049ca7d85385b56ea6c30bbfcae485ba32f88e748720487de81652d275a8497d3810a66d2b2ee4c2157021affa362f451c15dbd10900ea388910a5e591c37211e19f9f8cd57f945a016cc72b97b103a519a9aa8b5020a60df3799bfdfb13af6eb8443023fbba5e7eb126f973401ad38c1a9910defdc42c9876c00de1225d3eb8ae454321ac46db3e2df642285481daa218663f81f8c39118310cf144a3f468a9d4ccb289998b93daef6a3e191076c245f670b3bfb7af15f08c54837baa1e325810b801126456aad57387323d0f0dc4c68d5be49218b7b3001f7d7dea06c78cfd0efd758ba30a26aeca1399cc0c6ddf47d92c60fe211ca53f54f89d7382e49c00b2a40a0954d7574ee52361bda4c502ce9b1aca9e1db68199277f8fe44af66623d38c3bfe576f0adac10a7db21a5a2c7003be8f1842dc47baa1a6eb5a92f7ff49defc855e36694f6eed3207a89165aaed18bf4fe9a49805a89bf5959e57c376963d147610cb5f05ebe7aa181547704114054f98da907808cbe31760e92b9c7ab4b2a42c9d6458a70b051b4b62e7e9c155f4884b4e2af95713d8ed000f2b710f9e573e5d895dfd2af5d790f92d3a17e8e0590c9a0b5f3600542d0fa6a652e12b0955a85e32230157cd02caea3e83a930d437ad9e42ed9385ccb3f7b256bbb75da2058287029c0af9e7c46a8009598c21ee8aac9226799d890f6f5c8bac1e63c4b4db4074cafb2fe1cf381151d487b324a6c84f38c5db010943dad258bca28877098c05f119784ad141e9a678675faa2afbac85f4ae51615e1a14b5cbf61e03fe04daefab67413d32a1eac1087cefb4b47ccb8df32425d07b0c1f5ac0441929e03c7ccd43bc477eddb77031983e4358b879de93620329709544f35b120ec3edcf42be85df8850b5745052407c6daac49183ed460c44aa404ebea3592207cdfa671d101d1879e2f00a230f676541c0037395d26d2041568cd1bdf543b9f79424863013f9e4c8da59b2c052f62657796ea71cc8159e15ae47acb2f7e7eb67d92889d59d52aeb6feb6e9f0df3986cd6b41862623281e75f8cf8e21730b24ab1e64adf1b40efbab6dc091a7bbb7559edf92811bf510996c662ac29a2d6978738f8664e44f8d0a11e7cacb5da3496c8ca903e4de58d0192ad6401af89d4228fd8a319ad390ff11d14a86cc6056ae604409d281a600bb27a4ddf0cbc6d2c0c5742b3624f75abe849bf28dd2b2b0a6422ccb348a6bf664a76105c229011ca23c6fffcd8948dd56bf1dae13f120b68c3268c0967c8eb51f8115301f5d9cddfc099957c843f76902478505873284cad609cdb0fbfe03e6ae86bd6e2c2c0772e451c312377c29ac08f2aacb0c7ba4bb55528f6a2c2dbc91dad8ef6baa7e0417f684eb66eb9d9e2c8277707e81feae72d1af9744164b6bb678e679b233a0081c96fd90ec312015914eb7c96d02c8ee44d4d7b287fe1713ccc1fe9eec6cf4394becda2d27c8d81e9906e3678f043296113433436368b98f45b34f9938c5d79a0acf7c9c45785064b0893dfd2f8f372ffd5d2b3082d72c634ede540fe9a2772746c84b978747289b2b5b54840858f4ca2177e0f17e0e25f2e3938b39bf42a04da3b9ac0c2d564edf602e8654728edd24d28dc16e16afb1baa13cf4b69bde06a6c26b8d68966bec98432dfd443ca4963e981e38a61fb7f01191c444284503a8c5584869cf96d618d940890091ac9173ec9fdc6bc58d9d16b60fba6c824164f999102e2bf8ef39eba0c4f2defbe35d1d3a97e751d0cb88f40fa8e91784b207b9ddd9b498413590c9f849c44dfae8d10f08d3e15e93741f589a4f55a838c91e8734cd3f6a91438a56160fb930e16cac8d0372cd33c49b72ed0531b41ce0d0d158ad243a6ea9103f547a5923b0a27e234bd3d8227b94d86d7458e44075f05b1842ab21f486d97f79efa14075fff5aa94bab909520f98c320c4d2cd164c52e27c5561ed808f7dcaa2ba54ca9650beb41cf82251959546a9312618835ca0e8c312f8cd414b67c3ff3393977efbe259416a93c38dca1e2a02407f4865cbf3518210719688a7df8a4e7807e9b8738c127462042173ef80a068d3002e6df40506740f01446e16a5dccec2cd4c1a22b1117fd6fd18e4bbf9e1acc0fc3152aea92ecc6c527e948e93f2a95eaadb7423587eaa4d6cb963d3a225e47ccd1918d5b451b0b0fc1e4859ecd46471ec0366822a07a68aee8b03a364db74c1bed2be6437940d95ea85c526f4b4f1c137011ca36853b1a07f666aeb2c59be4544d39d2337f7254a71456466fe54497f67d2ba06b81785e44e06175af9f01ab4dc94f5c094292125aaca160d6f1812c710030caad790c41cb94030a002592f1860deac7739a243ecdd7d870f106c8305a4401f0591320669a4a56e0d5d2405509d5a1bd6e14999f00e1bba7d2b24ecd396dbcc845d97a076db0e04eb0a5278f115474d1b556867a347bba908a09145a8bc3081b05242876311d34e735983218b6e8261e6812cfcd465897a587b1cc270e875f748c6128d34f50dd1ab369c019f96f5b7401d28ecec666e7c658f8ec9cac268bd0f1f314518b116e570adacc09a8a356a9c5a146f2c162b1606ce2329bfbf48afe69bcac80d0880fe45ac5a0d953f1f9a7247d565a179b39d4908f6081e47b6def36271eabb5e1d4d490e8967bf6c5bcadc514b5e4c6d087a14a95d6c63edb2b752d206c9a654a54d13d185877da8016d022ff7c7576867b17141ebfcce9c55cb4ef38027cb8821570845fa3d9e732143c6bc6a5486801022364b0c8bcf49c63ac2f8adb9a2f4c28e950366ebb21ab425a8d39a30c08798aff7076084dd70767bdd7aa4d5f4434f018d23066755b86be688fea2590f8ed61bb72a010e80ebb750b288a99c3a680b00c7b7d2bdfa570d0a0ee6d198897dfb21d86eacaa4059e7d31943e6a1e6c98bbb2063d0fdf78276b6e11b79a830c39d0f946814c2cfbaec1882bd9ec630e8869770c283365a5c875b58e516b459746fab15f69dc208109f561d4a3481108f425e013e909d807eafe59ce394c2c1731c86a596bdf8a41de20231170fed04d6a6f30b38d99e11f214abe0adc4d8e2f7db4bb0bcd9e03b2fc7f3f6265f0da03e5488f922bc52fc72a6857e5944d104857ff61a0098c9a84703438e6a8190810785e9a02df1296595931dbeb24832a220b533bec9e22182f0c80e73524acf04249e1689c5779467cdbf2600d04f6ce4f7ed90c96cb9fef3f9db7fb241a40443a9bc44940c515b83688b96c870ddc2985828169038033f0b6546810003bb4ad6a3a5900f419866c669bc16586d608c279330b8b2303b5ac046f9ae0d16b7a1d5b898af0fc5e5d9279b2b51256715663779c4829d89fbeae14e950828e515f4ca66ca7c07fce67f606ce9c1eaac223e789876bacb7528e07ca8bca4bd8282d56f8047a2ddf187500354cc8ece825db4a6ea5eeb72d32e3a0b512c54fa5f0be3d357b22a60397827a475bd0921cbb6020ac639af3f2b88c6918150b7c4953b1289dbdc11e2668664b05aee630aa938146af59ee3fb1661a5543b853bcb3f7ade32a915820832d3e19e8321c9110d951642d6947b6d139e7643d642d669d1685cdc905874b34088465539e746dca2cf2367a7ff540efe3ad0502db208b316e1b6374036350c41ad0fd0607d1b53d0805ebaa2334beff9f952275370224889f105609f087937d42c87924d115b22d3b9a6a56ae0e88da003014ec5204558a00425cad6a5ad3321a18e525bc09d402203cd4bd23221e44cb7345fd2634f521d911bc94022c5e71fcf1492663b12b846f491c73b63a684cd77dc42c876e1bafdbcbd9d1288371d717e07b6d8c98b8f4ff46f874f78ce9f274df58c861bf8d175c8d91c2f5b4dbf56aecf62b1988d3e5a2d754b1a389690ebe249867d368c330eef90d0d7f10cc983373f5cf9d66354807bb3cea2775ecd70c0decda7f53f346d2161640fe198dc35948d7e8e102c11908cc6d39828d44abae33fb903027bcce36a64c4b360e38414f53c430fabdbcb3d277e6791ee74f5a8a5f2479f0eba9b784769460769e236e9a902bde32c9238d0cc1833e6e07519ca60b62b78307edbd99ffc9675a49f7099a2c57b2e7866793c4236d926ab684a1297737c9ebc83ee17377dce8251bd5907e7e2311ab3d62b160d91dce44cd9e82d190f691580530c7a91988337fde83bf89287511882c904e06e2339a8c7044dbe8791def96ddc4e39df64ccf210691b08e92add6488156cd89b059092b89dbcdbb12683d771e435e6c52a12e17bef2ac8d99be5f3a22987d6baa4d4a4459048fd20bd4aea7b12f84a8d543ac869bc253d0b171ffea1d09207169553f81c746280c8a0c33147e95554a22eff003e204440e3f50f8c7183fc410c0241e29bf664c4e4936fa673813ef92ad520632916ac13884e5db1c24216735d9af8122af0a6e93a5d003d0eadf2923649427de3f68740bae993951542008d22d38145d45076964414b65a30a4e8b6b6011aab7829e8381bf14ba31c1dbea979239e5ba5648cb77a5096a9a95fbaa16a8c59fde616d314252dce4a18a27af6ec2940d7bb689379652a8110213b48565b6f5dc0e4802ba65e64a54226882816813b3097e0b73163a9258223bbef81fc9482d232045a766a0d9a2cad8f0421db13ac53ec1b51093794211fe30e1a5126984bfc93a90b2b13c3635204c4fb83871484442b72826b7626a0b80469a34549111e8841ce110f8a9c2da51b14a9346f4c7fef6815a2c4dd56d1c9c68779ee03950e0800291b11ecc215a558dbd1a40c0d107e3830b8e91f28086426875bf39b46f637db1e75a04ddd8dcd85d95f307dfdc5894c8dbad7bdb4f8f1e8646762829e561244bc075bd7e955b0f51f647b1f2d3c8f445cee038c884ac9c5e3ab00a337f4270aed139b95324a4544b2325f248dbbf12f9460f6c5058aeca424f1b3d391e6512b2fe1cd7831aa62fcf4847031a723dc3bce47956f50b938b6f5a987797e115167558af0a2b3bd64aff53016728080740616dc332d70d81a46b9177f5dae490603dc1159b39d252615446cc4053498bfdc622e4a0bb8f0aad26da1e0726eb3ba4562b07c7c6e55f023ae3cc538bb1dd6e931d770e2b0cecd790643d06e595c61b61e36da29c85ad0f8d691b693653f186594937568ba350e994e96027342d1989c9541cead4aa6c0f66d21509a906c19aa4ba8d5ae3e14a7353c6854663dec9b177e46ff3020a22115ea237b026b34fc9daa1995143bcb486a91824a074613ef2977fd85a32b7e4e8fdfc5e02ef168ee3148b92eb9d443a010dc32181431f8453eb10d0e5bcc6d90be189107f76a71ca81ef2ecb74bb7f33bab5c78caaab6eec88bc3eb5bb4f5fe1bd29604d8b0a4e0d622c54aed8a9176ba85e07e9c2c2be444e7c172c424e1e86d240bb98112a929bbdc8f0583ada75bd0d66bf66c770a0341d0837b59e5fa14f5aa53f43a60af1ab1f1771526781859a54d1306b448205fa689b259957e37eeab1d7ea5aa9e3e30dc7b23f151a731d27ea8c9d58a806724cfd0d53673ad44e0ac1ecc323ce7fb7b889ecf4b9003c9f0acd7c7ba24e47cfd1b648675dbae9941994516d8b6412cbc70ea078a5053fe50cb6fb75b8d0eedfd5887024c617d91ea172e746eecadff9277443900bf38e27055677604f1fa214d8f114632341a467e8ff8daa332d2591ef6312ff73ba1ae06f649a6d1c0e8d417dc33abce9da4dd4a44295eabde4d4d56d4bb5333b6a25176f21a403150e069070d920fd1de1a473ada5c65564f7ad1498ff4b9e9faecdea83623b6be78341f4a451134b7cab36843ccc61b2d22b36353c0869a7feaf15b9cffe82b0fe54237680fd8ef6b938785035a9327e83d00a0f4f7d3c2740b643e40bab72eaba20ef39699555fa9848f0a6b284587467234590447966fb6628098079d215696db3adeb6625548196c3b487a8bcd0bdaeac8107e5fb29f377be536fd5b4c0a8d5aec9dcbe04809df1c2749fbf8950abad959345b19dcd2533093b5363048fbcd37dc4163696691ebfd046487a562b447b0bcf0b5a4a01864494a9611aef8dc0cc2e8c58f9edc41a7ab2f21cc3677860a3ced92766f63bb80bbc0d1e1ccada9831e0f24c2abaa5e281bcf3256cb462cba9e444d0232eb25cb90e899312fa6c54bc600856d11f47d57ef08f140f39044eda0efe77fcd686a335ebe9913fdbd88c7087ab8a1e82a68990d9f25e94a732011785ba43f37a6d35078a42fbd4890fdaf88aca8500c5238f7c84707fb016a6064f7341c22b01b0fef3ff56f6a5eee3d4ac3fc719afbae51b540da30e8cdd3b9b19f24ee89ddd9f78afb47aec199fd90dbd76c9813f15b9d33caa05d713c8da280c63db28092b2196cd36250ac3779c26de0ab5167f9d363f27799de4ee157cc7572a4b563bd9a90f1718ab7522a2c576e1d7d1ed6d602cbdf545c64f4fdf8b18aaf54fb1bed62ceb29d3ca5346d132b786d6d84ede135027de13c8cc912694c6320c6d7ad6debeaa802d290f756ec36bd456546528e874b109ebc359884c127651a6de2b911eb4307602834875847a02b3dbf97a48b7fcab10190c014a0e4323684d03dc767b3b1af85aedd638918de25c8c6ec91112504ab3c135c8c4191b3cf32da635bfbf125cbe3d8e396460434ca986f86bfe48ecd176140900caa10f7fd5a1cec442c2af27b208b6b615803b69caa8bc74ac8a3709eefdb3fe75ea36e23db6fec49309d189efb0c0dd14476bd0b362d4af7d959f9747d1480cdfd0dc9a8dfdf4d7e1e84a2a66e64492724f2e1e750d09652d10b0cd42f996281455372590b4eb63363caa9fc8b3f7011e329fe4126cda60d5fee998d1953253445a428a8db1e8967248de828f1d1871d8f43759357622dbe2ffcb8f0ae6fba6242b047e5478c06a5a1b4a86f7c4dcc1292553775a296a8ce08510378377e7575a4fb57a7bb066c9e16ba052a3d4ef8d5f94c3a594c46e1986fed4fd3d7c4b4c553e83e805beec95d60aa1fa2cb13f9292fe032ce473aae1c8b37a18b113f44475bdb649971adec95fb61f1310415f35ead007cc1c69f198c99010c1ab14efad6a06962727597c731ba22f0de52750562925d16c2cb3ec0f0e1f1767da209f622263bb34bd7695d01528d3fca719424b245ef9b4dda0750188d6bcb41704e4d62b78c8c042770a78a0f5fcad06082dc02d51b5671060b32a7e2d1008f9af7fa62011368d68c6b7f70836a0226a45a7a09e39b28c0153a323e31a4b9cfdcacc265a94546d4567d20a6ab91eced494c3dfcbde12024841cfa4cb4381056f7a26b39c17c410542ab008fa9323f392fff943651829d7a99036288ff7e041ff845311a7206b1deae4a2e84cd2bc4903c56da0ebc719516fb4b6fca095ce1021de19213a4834fc306ea3c80af36ad40f44b2683e142840aa714fe1d90dba81162a8da3b136fca0bda481c5cd9bc1996a890737ef95f7845d56a8069daa46a040e8a670d1f5d259a190477cf1b753a17da53b0f996457a1947aa534228da4eeff46d448a04999d5d1cd652b522bd4c19965a1d427a1ebade3180f65d495c68c4863314d67c6d875a4c95fcbbacd32d7a154323d17dacfb6a8907742612aaf4329348cf7c309d16057ce52a2acd42e7c04166c37c2760c51d40fb25fb3f3cb6adcb3b928cfb28ac6994067e801cfaafe38b38e8ce9b160e3b2c7ae87d13d0249738e7c0d897350fc86766d9a9f9151009c16c805c19abcf3393c865abafad76f4d6537cd4a07725e00bd3adf6efabaff2f6108aab91eea53298418cea3a171b467351e43033106d56368263f835e2d8de934dea911860e7a393259ad23602de3fce97d60650c5edb625aff47976d92ac2b6802f7f7504132bd00b8a8b7b05f501255c51b858a18768e82e0b88620961bdecb2d57f4b44aca10188ca6a59c85d1078243b023a84283974bdbebb1de77bf0f81dd58ae68af15771a5afce0740e4032cadf07f3722c3b3efa711a2373a8497400c3c9f80d5501b9aa0a011a03605bd5f82f0760c0496b4f56c434b2cbc0753119d349923e208ddcd3f4b62244c6f2894924092b0feb93b476dd5a50661aa5d5f4a42a66601bc1e2cbf183447ba3ee218fccf4e586271186af2a3d7da1402b31c7fe5e4928333496a63798199001c8c9240065ac414c9eea504c384078f87f33f1b841a9b77a3a2544bbf5f141fdcc1e6393820902965e3120a9808b24115058495f2f8928c94bdc81613175630ef2c40179c1e1a27e06a149fac3f3ef5b18c4099980590b6a3a80b3d28489b5e37d1b609cb53c01b38cca6915a5b253ca5a1d1e99a2bac3513ff90ba7d74848431885ba6c64d8f615292d35597a8fff095167aaf9ac6078f7107778db22a073ad7cab35751367c4d89004c0154ec025a92528b56204ad2930eb2563fe9dd2622e2acadb7cfbdf5c5135eab9bd7bc35d03fd0bc4aaf11dec63a2e1708d694621013032f4a51da6ddbb6baa5ade434b7acb27fec4cae9720916e852e07b400a1b5b6e526646f29a54c52062008d4096608366c9753cd4aef4adec426137d076c18e797976bd3e9d54ee7dd6bb9aaa55ebe05cfa4b48ab285b4524a29ad94524a2975b63de56c3ffe43b11eb833d29f5514073837dd2184191881204d0643e614274dcb524bcb8a53d3b2c8a465d1909605c39e1c6c1b36992a11601553a1d833609d60a83fad6edbec993966ad9975313a9d2d6bbbdf0433bd7856d593d5f32c2cb6fa05b77d900b58c11819d932f07a5daf298682b9f1b3f6450bcc1c83b265d49f56b7f40d259b60a83fad6e352d33c7d833d49f56b7168f3d63679c9b9c2857661c1e52b6ec86512f60bedc308a862606bc4aa698fbd79639394d30f55edcd85d5a2ae3e1242595afb02df32ad284062feb60763b342b266982c9036a60cb843c62409d8e622f388c7ea149c16153cc54a35c3add1a5897782cfd05736f7cafd7bbbab40c171778055e8157dfaea9c91daa8c4eb53360138f9c2dab616e050b921a26e6aa5a33ea4fdd2b0fb22c976b1af34382183863c4d04926e6ca338f3cc3e878e828ad6e7924d932eb683548d712471353eb955bb32b3cc1580f638d92ca8e6cc0688281e20135c1507fea5ef1adeeb5bea566f8d2ead6fed53c761bdb323a9d524af1db2fc14ded1cbbf6edb664910573fb5fd1244ad2304e1e1921610cd9068e61e1489bdfeb5c2aedd50aa542419b6895cb8c05385c67ded83264b0d03794ec0a8f78df3ac97c9a88d921b36d6d3c34d20fb62f3c340fa81350ca904095ed88ce82c0b22bdbd7da1eddf8beff356366afecd507f67abdabef472c8c0b633f62352909cf1a952078ce3839e57deda5d96caee1727061cd5cabba7dafebae124ae6ca9daba4366d6b9bcaa6da54ab94eb13f3a6cea6ef954d5b9a18d89c09bd8dcd9906bcedccc58d6d6b71639b3eb5f44c0ec6923321723c96f6b594c752d9bdf1979671f75aed98419df55dbda257be377dbb295984e3c3f934ce3d9d342b2fb8adaeb26fe9d37bf5576c6dccedfbd23d26e504052585737f6164c361d80a0ec361d88ad1fe84f48c380c87b1d52360423a7f6210931e2ced8fdc31ad2669bfeffbbeeffb703de8d61e2ce1c2b8adb2d4c565a06d3409dad6a6a478f6477ff87efe23c3f60f499994184bef79cf87caa16dd5862630631cc90347967eef9503eef08ae2bd3df6a029fcabc30f415d3681e038ea741b04a7a8f48c20eedaa67d9fe2707abc934da497ce52d26eb784730f92c4c3bd074938a776c62c9df8d2496aec849e6370ee659a764b4b4d37f7201e24dd2ebd97827f7138b02909fed5f6deefdeef7ef7de09aa54287bc7f5206983248f0a65d7314ea1dd61de616e87463b2c977688d34946b9ec74b170ee4c94ec107cefa0d6bd7ee083997e48e91c6f37f06a3281e0673fea1a0ba4d584dd2725ed2cd6cda99def7e1b7fe083e0dbff3e103ff853de03abb7f15b1a62b2bc016832d2de06ff625067df9113851df6710876d39cc23e087e1fd983029b5a90c7d2ae17f73da57469534a698f194b7bca71547bb0b4bf8c270062cc4fa09a9c9c3c80c2583777264646b762dd9cb6096752197ef13c986a7bc705710fee90daff2c8ee431d53e0d82df4bb119bfefb107b8b1a7bd39a3288e2c6fb7fc258dfafef654b46ada1fc9c4c458ce351cf8597f40378e9c1a93d983a9b62d49865f5549389d771f83df6751f7337eb90392da4e96dfe307d2ae246a27cbefeb7f7a8680f78e4ada113eac9bbb95908c63716051a4840cb662b47100870c6c60b1e2080b221978dd2f653474d0318585178a27e3fcf9d901cc9f419452ba666dcdda985d43c1dd1d7f6b5dd6da0f645beb618c31787383b6666fb81b2e6cbb9b339bc7465c880bdd786d2fc7356ebe40396bdc1459d3668d1b12f2e4300cb388e6567e7bf6ecc9e333363158a7b561944e7ffb05a05f494b7ef8de7befbdf7de7b31503180fb04d8a75534a86fdfdf86704e5d84c3567777777777f71df4fdc7f5fa5854ae8b30591400a7a48f2a95f4f158197ff8de7befbdf7de7b7d54d1a0feed6d5100fc71efa30aa67f237dd4a78fe63884f567d22cb2d556f7a722aa99f6836dfbef9a9ca0a468cc4aa2e5f9c0305fddcf8d3d469872d14ef129dd148b34fbe06eee1aca522d6aa324bd6b72d25253f5f17d12c6326f1f9bdeb09bfaa3e1ae3662de26ccddabb5734d9b2a1e27a494ce40d7b091b2860d0b6bd830616324085dc34313dff7d5ca43dbed76ab95873839a42931290f3f14ddc0dd371fda06c149c37ce7b9159424a0c36cf5b3e12373de44db54fbceedfbff7eba35cdec92d2b09dfc71327ad70c1d464bfad6f49c57652356f2c8a0ef2898933635b259c4b66bd028090481f8c1faeeca8a5446fa76b7f349c3aa6694fa53fe738c9c0eeed1ddd5846e43fa3dfe1edfa0f786f1f7f46fe4b03f7d37290665fdab5a6fef6ff5c4537f403725af6808e5081b74b2a4f8c3efa7cfaf3f6f96f4097e48c51b3cc23d9f7a0e1e3b22e08fb4278eb1b7c1a73f451cfed341fc1fbdaa1bfffdbe92d677209011bf3ffed0f5d5163f09bfe94fe1ad8fab8f031f03076fe48d125a7da9d72831501fb4645964651fb42406968277ba12bed3face9294f43514e3a4b9b4de2e8db6ff1aa38c6246d1ed3fe666d44c72df796f49060f2a67022849510f80bab2e08b7ebe0ffd9362c1e0877efa13fda4a437c1e33c1d1ff4d3ab1ec5cf1f977e7eaec5cfd7b1f8f946307efe47ed9c574691f1f47ed2cf08de819f4efe7c29dfcd57faf93a9a7ebe062f7efe015cfcfc0530fdfc0e9c5746817a2fa3f09efe8c62c11bfd7c1152fc7ceae5bcf2fbddcfa74920f859da5ff1b3fe033f9f7e39af8cf2f4feb38c12e3e9cf28185031a19fe537ff7f62d2bb7e5ad28f9e57d6f92a7e3e5d735e1945aa8c32c153d2bf7c377f9651747cee274846a99a3651c65208adb7f10ba109a99951f481f041ad9b512159626ddd64dae59b46e21aa79a903cbb14a2b3f15326f6e461e37e745ef820083e15ab40aa75bec3b7bfdd3ebc7d8e8621595a60e3c0ff6ee4480ab119c0396093c34d35bef37c94c458366da14d3f57d16a55c2a8ab6ada3b5ad5c3f67a48f6d57dba5dc431b4ef64b26412fd6aba68bef3232446fa65ee1a2dcd28dadbbec3b1d529a1901846b0fc9001251b00628a0f59201318a4b153041b3a30ac31994c7029a345036cbee0d113c34d4f531e303d2dfce0410523b04a58abe20290262fa0e560cf687d42a4d6b4c12367ce12375a4b88998042114b00a182e5d2ca64b24014d0cc1047ce132e577880a2e5c912316938509142846de1870c2f9e38493362c70812480441278d4c123a5a8470c90a2304103cacc9330458132c15325084852627584983668bd61743d5fa0166a008205a5796702266062e527ef8b06bb287080c3740e9b2c48a1b315c70f02206cd2eb94dbc29db6385081c1b8a00a23686c209445c71e2854e35fb91d1c63d59b73a643f6e62308838e18a19293a4839621ad1840959ecb8c0439a0f5d706dac0e570fddbac98192449a115b68c8410c8e32619efcb0b3a488306e968597506f422b87ed68814a105850c0320509ebc58a9e2e6b5c90ec90c3973447c86c9172c24702db1c900d095d0b3867ead4d08299234aa818900685053b70f2ece142e55f9013be8e0cd3cc99b33a453e0d68e5a02198dc5c00f34246cb9d2386ccd98012498cf4d698288363b7fc00a124294286276acc58b0618c025ce881cd0959c83c89635df882fca480820c30845922872c0dcdaccb0e0b5f75be1cd1c22b8c31b105648b4d1b1d5a307a4108942542b0a851d2037632831a3c408025c185050b6c0e0f60c4f2f4d048a93cfcf8c6303167cf113d6b556400c2cc0c534e1862abc91b2316c98f2f55418ea051635373420b757a6424d469820a0d358ad627e78a9e1cbcc0b133458534752beb8607852c6bbe9ae8b1e1c8185bf6233461a4416e9e1a548021872c75dac0a8281101c4052b64b8ec80a49669856a32f0c105375a4a48a28c8a25422b1c620072b4a450431165a614f124b4b293698406960849d3e5cb5a0c56899b1059cc4421a3c20217239e00f13565ec4a912333d809e2477ee1479436798800822b06304084bc392376c206dca871b11f99896dfbe078952848e2285962ce9619326419e3244c88b639550c44f31f2b15add06cce1e25c424d983c391b5307860a023e4881bd664a938fc004da032ab03a748097a6878f3d4950489131fc692d800aecdbef9da5c2045cbcd11322f63a4d029010c0d24bc90c706239468815cb82d585660224406b2d060152993258cd89c373d3630b2b01029d2ce7c099204096bc89c11a2cb9c302075b2e8c1591eb8a036054d104294a19d0183c061582690a19919d2258d5a9c0e8ef081072d4c80d9c253d792e812eb9524ceda9e8813946a823253474cc2d6250348f8a0039d2d227cfdc83a93f3a48915ea95dc9e6966c8366ecf34337a8660264e2c2c99924306f204c9e14bed8e97af19be8c80e97091a83008a1954918bd8cd61a6e080592c89a0276831225d87228d1f2254b173d75e85021595fd911418841c2c40999284b9010a28b862390e80223c526c945a61253b6a89d4027ca102226182b55d8e0e470c76b4bedf223082c2645cab89064804e0f56a87c8e9620a604a1662dab3651b16490f2230c4f0d6cba9c91600491302d0841868a0f40f6fc775e12928a460b6e0233e7ca48f6a508db054cc8148db32250c0c1499dd2810e860d11125ce85610ad6867788e08cf861002dc01c4099c3342d684f1e83871838606234fa45c306543f7bb312071bc083b6c5c604042a74809966ccbfcb147c48c9a1e9e21d4de8c4963062b4b11286b60d47a68c16babeb9a613569818d972d27290441c3c586ac3677c0b26c711d41b5228a992445cc29610d9cef4751f6826797e3cdc908b467da980ffb231b7ff64c1b53e3b367da58991eccda928891b285ca99569eb22d2498fd68c28d1995bb0d6c808c28c20b4b1d16ba1ce9f530813d59f458b183658f1054fe69cde9f2399bc3446767b88d1931b911e343d8183573a65c3065e367cfb42e595f133799a2c952139215b1013a66dc33ed0e1312f21acb047e1201192f5b46b43489c2264f913b2918d18491206f6a1b2d3d6a77ca5c41035ba245f565ed363021bcbc6016a61504066a1093868505ae17827c3dac2149d880a1000397267928c6808620433091820d485881000e6b6561bce800a686ca9d8c1cb3333939e03d29e0ce8cd080d00d4cc061fb718789142154d3ac8617e8cc39e18b0f5f4e524d504fb4679a17af2e19c69a28a185491799357adc6fd8febafac400332c48a46459339684aa698b9ef1db33ed0e182c65c4ed99766786db98e6456cd47d9a9db62dee9976c7855deed06e481b0b63c33d230dfb366404f74c1b836197394a5a9731695dbcf66dcfb431b05d26dd1e86b446bb671a970f5c6e2c8ec6055336d2b8dae040a6c31a1d2f6d90a0326d18758ff74ce352dbe50eed47f55a6208991bb21ed6a85ccf316ea8661999981a555873d5946b8712e2508536574db5c67000a30a6faeda879bd963c70ad508778b6af41874ce25cc5620a3726da4856a04a79485b612b8a2cc2834d7df64aa6f449dd65a6badb5d65aab0b6052cdb519d6d4bae430cdfaf44da6fbd381be2fc2f6757cd8265de03c7f72b15b72829aa261e3be060e6e5529bf7def0bfbcea8286b57968cbfc92628fa53f3c983326c42c6e4a9410e112afa36e6930760cadc599382452b8b8a7e549dd1c89f7a6e4e5289702695d76b3bdd37a01c7e7934d227112a026614eea9833e64098e22598e353bdb6c4333a3aa8b61be0f82f4be956f5cc6e17ede711fde239d6e1c277d72b6a76866d4ed295b7daa20388e6c653ddaa5b329a94f9608aae46fe7cb2e0156b5b65fae2ca555327623ed106d8e47899734cda6ef66f489a6a13ba481b303119b7ee970686f53f7ed14cd64a2e004c27d94797bc77d58c7da70a4fdaa64641de3bb1f5d55f2aa0494c9ec3bf06f538e801955b75512029d30966e36c48cf2b219857b7f37ab0fa619778073b4aba3d9f64bda16e2103099e8dfac92f2b6cbaa4b4bc4f6b774877dbd44f749c256c357b56a6a0ce17cca9593433f45e96b9e27fee69c735e97b3cbdc2e7d0d0f9bafb91cdfd1384a4dc6f9a5d7b5fa664e3fb3d683f807824040204a1814c1ddfc937daf6e6b961488102142a4d61f328452144398681bbababacec6a09a72fd6f96ed19b6ffc4e1bf3bfb53c900db7f264d26fbbee99e0ad8fe73013fe7a4f36c048b057a0d1bff2f49c92b4fc17c998fb1757575f913d70e9c05a168feb569ce81a27d0951b22382f72a5b9b53b65d7acfdbaa12d5509071be8f0576fda934bd57d9bce6f272d19f7207ccc6f9d43fec72d99f4925ce6bcf5ddab01955ff926a5593fb46c3a65fd23922dd9090fe071c20831ec7c13d0922687ae18209b37d4b2d58283dd7d7d7f6a99dd02584378d037f703f3a1c5318cb9c9a4ea143a1557c0afdafe2e8f50a07925e2bfd0a0d83e9a7d8a3cac55bd1fd42021de343183fc52aa79f72196463191443cb78de4ff92882f927df7c1f25318e390c3fac0aff7b25bb04c3ff807ecc2790ad2a7d392f7c90c8c6482698f4850a1bff0f9bf3748fff078ff35c3cfe9fb6fac480c73f7a390fe8f18f499c9780c73f2a715e8ac73f3671de038f7ffc721e021eff08c579438f7f0473de8bc73f52711e8ec73f8639afe8f18f589cd7f4f84731e75df0f8472ece137afce398f322789cc1e31fc99ca7e2f18f67ce93e0f18f68cecbf1f84735ce237afca39af3623cfe918df304f0f8c7b5f18731ce28c779fff84736e7f11eff88c7790578fc639bf30cf0f8c73c334ac6e31f9b98132ce0f18f7b264f018f7fecd5270e7e832f47ae8dff878d3fddbcaad2cf97f3a01eff0f14e71de0f1fffc50711e8bc7ff13e6bcfdf87fb038cf81c7ff23e63ca5c7ffc3c579538fff67cc793f8fff678cf35a3cfe1f32e705e0f1ff9c392fe9f1d2e3ff51e33c1d8fff47cd7916bc9c8dcb9f1f6e3e611bbf8f129f26ce637afc3e5fced3e0f1fb40715eeef1fb80396fc5e3f7a1e23c081ea7246ce317c19c373e7e918af308f0f8335b7d0a7b5509abd5a7504c8ef306f0f8731ce73d7dd3d74ec97be9b846b1d76b135bdbf873cf795f7d0ac9f298f3f4e3cf639cb77bfc99cc79548f3f9f390fe9f16734e71d3dfeac263765b15dd3ef744fa691ba46faba1955529aa958c3e9a7fcc51427688afa290fa570dff77d38a99d86f156be3f1619006f15c10c097eca977e28f8893145a99ff2704e12f756be471004513ca8cbdc36fa20fc0fa638c5133f3f3cf1248762eeef76c3e9bc85f31deaf2cf4fdd21510ec3bbc31439d4b90f85b2926ef1612ecbd0137c388639f1f64eb93c84221709a519ca42baac82e8498a4c549445a3fc2a9e1c6528a4acd3d9c587643ea141a0dbe9410d0205816e1a8fd320d07de2a5340874d7780a340874dbf80a34087453f03334087457f000d020d00d3e0c0d02dde1bff8a60fd31cbd8b55481f8260f84733a4c636f83eb0be363871584da4405d522cfb68c6eea758a5df81671181043fc52a151f869e97dec5aaa4b76a31e5319cb28b5510bc8b3daa56bc15dd391afa997eca43231964e34fb1ea3fbcc9f03948adeaab5e8dce483a9f51e9bcd3798cce637182e204c5098a83414eed068642c9c61ff642b1fa140482e3a8d3fdef76b9af9e9ad8c61f92d5a7a0384163205b7d120aab4af89b9a76bb7f9d2e4e4836debc4070647bcaa054050088d2734fa0a7939e3bb40fbc15ab52bc939e54ac11de1ae2159c34951b3fc520b2e73cf1f1e72de7193dfecce53c142f7e61986b7c2866704fb5aead3da79c024db793531505e44fb102d249d31cb48293a6406255940e3e449143ba2bd07453a0e9b6a1e9aea1e93ea1e9a6a1e90ed2d449d33dc528b286508ed273c3d0730360ee0af4dc14e8b9a5f4dc73837a8509c81a42e153be69bdc288f7542372b6a78c1559865e800274de0aab8f75ba2f47170a6b001924849606ca8b8c9ff2f0819c007dfb140f20c0a9b80c35224856e403e8dba7189322ea2603d44f7908413680befd0d4d779438e65e883212ade8bef1e12ef3f4ed0b70f41aed48aa0bec95b291be3d8a1735d85370f74c43ab43411e5b6402e8db5b3dc9a4416e0504415fa2201b77182b1055182bc84f4b7900faf6b92f101c479dee7f17f465d34d6799f1b3a75a57d7d3528ea16f2f8024227d25696a09a2a9fce322b7d0b70f40d2928e1f32f7b6b4d84653fb61ca37ad6db0a1e9de10883de8b6f1e18b2c81be7d0e25151a8b12004eeca946c48e8aa61c81be7d062d8434971634d486a809d1c85982cc42df7eebccd5e5a5f34d6ba92aa22a7fdaf7090cfe04997b18e8bc5566a546e4877dc2ca61e40e34a5e2406fa0678d21e69e59d50bd18aee281d7ce8949bf4ed2f88a0e84c0436cc7029fa290f63e417faf638600c91b9b755064678834b78233f650bf4cd45d0188dc7208da0b18d7feaa63cb420dfb47e32da3dd586b8d927f4dcba9ff290976f9a3c1bc1afa1e9b640bc91484346d086d883ee1a1fcea01340391f213493093f543e21a4c677186d32998d99eb79a295efdcb3f21ac19cef82662d1a1222927143cffda47ddbd073d7d07377a0279595aed26556dbf869e4de93f60da57dcbd0be81b4efd75afb26fa5121a41bd25a7f5570c632482c482c884b4ea8821712ab667c183e903f7de26f3afc207dfb4fad3e018105c57125fc4d4dbbddbf4e0704f6a90181a905c5d9f881d67afb0466db38e84bd0ab3ee5beae587d424196fbda38ced497e0fe72a47ab18ddf49672dfa02ff067aab830ff2541b3c077a8beba936f8204fc5c1879e650401804441569f32171559ea749b2cc79a516834332aa0e0c4fe29a752134c01da21d54df72947d851a498a12c63dce1d4d1597d646828b2ca93ce5cba1ce36787948817e386a038ce737afc41729c07e3f107b1392f73f98e28c3f0d9214de104a30571896d9722d75a66f31dfe0874c6e33bfc4d3abfd0d9851699b4186797996b63fc4b2d74489195328b9f7220b0fa94b9aa127e0c14a61b5fb7fbdcdb65b18d81c0367e22d1aa6e164a32ec8af28a7087d4088215303c90e40089d33fe5459accbd1942a3fcb73d73d66432cadfd33520a9c82ac01dd2a323153118e9cc7594537c3ba448d37dca22720b91ce3a9d877416d2390912de13c54f7915ad5090b9a7f3160d3935e79d78fc3936736d97e0cea96dfc48a295ef136199bd1de8cce531f073a0a7c7d840e72e57c25ab34064ccb63bd439d479cb77b8679675817efc39833f1f9db94432f7703a6f95016f0cd0f92be7beea53de7225fcb80b6ce3241b7f990bdbf8c9ac249366702129de48f26c045f08cd7716ab72d664c22f8ab93799f0ebd8567befbdf6de6ac5eefdf938fa1f346d4af6f8d9f44b5b74837ea56dff0f9ab69321d83a55e91fe519fd4bab4bdb63b2f57afbeac4c65feb55de380705b67fd063c615dee0eb0fc0bfc23838d8de03a9c78c4d2713fd1e74cff60bb096287871e97f55a984f369247aba73ce23224bba89debf247aa30f8de826aa41f425dd453fa48d86debf29020960bcd3cf21de4fdd36d2fd242a42faf9fae7d31f9c47fe7420e9819f2b20f8f9f4cc79bb5762d1e2e78b70e53ca19f4f01e7a1f8f9548c8badff82c9c55291a6787c479fa7473da59df45725fa3024884037691b17380f47c39c87251774e2e7d324ce031a7f3e6de2bc1f1f9148675fdaedc421d2a847d264f29f93696888ee21dd634ea6a21f4a7144a5e28b86f4173dd1b855fc912ec1ad822cd23a1048c5171d7da9d345567413fd57c2febaf61455e88fc82eb202ff1bb23f2153fe71ed2912bd56a13f28faabbaab8ac81edfde51844111b963e8c19de2c1223d4464644412191191658db97b7c5bc58750b70ab21c227b7c5bf729c810ead691b4d7425332dfd167a1a7a56714cd77f457e80734554bd2d4014d494d7fd0f43595a3299bf6e13b5a4412e972dc443f67d4d14fe7a9f8d236fd9c51463f4496442ff4a1de43efb949577bb30a3df446e49c4c434ff4297eaa1669149f02dc53141a427165b7100a5204df512efa2734f5d23489a64a346de23bfa3e9a7ef98ebe0866e3024a8586f98efea729162a36e6bb175a4755a2ef4233e95995967488c5c2b396903e501b123748d2a421f962afbd6948bcd2902019da33ed881247783802dec0db110ddc7037dc91237322ed9966c21d8b0b71619a093e18ed99668299308759b7679a09564c30c166318b5e6dbb0477136cfbd56a95da33cdab0928fa883e5e5e4449f8fcf8fc9c00e2c8cccf08fe8c624e33e225ee996644cb2e41235f3bf7b307a868cfb4222752ec9956c42cc8a7e846d0aeefb32b596200286bce39ff7723e8f503c9dce71fc6183fc6187fc962c48e31765c2b57f841383ff8f615b8ef0c800ae3f7456944beec995642903dd628c21f99ab1b93d7fe848d6386612cffe704b7f9c2be7d723e8553c9be2ddaf64b09b6b55fb2b8a0139a518a84f29dfd194bc6f9a5d3b646c6caa4a1219136248c101d733d6c5cabfd7ab1509db607d02d98c1eb85a2ea84ecb456b3897d3fb4b6deb1e2249fd202fb92158d03c1d37aa5a1fd9c9dd6ce29814f69011f7d88b1d22a1773e927bd3739dd291abeabf86dedc079e0d77f8004eefd70cb77755f4d7b74cb956a02f287a48f2adf6712ac4a958a02985434005030a8e9f651e5fb117054e16d7f64a963cf1a8a398036feefd3374e94355a8418c4209e37f7c124e5b2a3cfc559ac7546f7f15bdc87e3e5ddaf3f8a56beaf7c57ff6a2baf717eee84d19f865f3fd4225c05cd1c9dc07b283ea170d70f87f2d54842c6f95643467ffa330ab7ab9e5b27deaf22ed4da6fa14cb8813c177b5da4dc5aa4b1ee91929d3be7fe5bc71d717e112d9b8609201f1ddffbe3bb86f48ced09ba11450525040101d416487e87ef611abeeeef6f8ad6835e5e440b20807feef71726e6f7164598b44ab1b3e22e7fb82b7e630fb941becefc3894517a958c5ab7d4aac0dec8fb48f33f50282a1377f741eb5957e2e47f65dad57cfe8ee73deb7da9f8a1878fdb7d5a93bc9e57c47ed3b5290117f4e7f6449afd57dfb531563ec2005b3c571f3d0527f2a62005e13c2a33de0e73eb1c69cb7c49f779039df5525205db4e01030a9421203b89f54538ec3a1de55a5faa08c5d6df1485b23ee6be0bf8fd33eec8f80a3c2611c57001a5c8cfb1b19172059ead8378bd3a58e0d7e1d73beabf8ef7fa0e860fdbe0471205256988ff68c734faa1f29bd5a57c39c71bac81fab8a561308ab49c6c5c66f31fe0fd768b2d756502b44ca42ea8df6eb839882f85ec0331209237e1d48bdf1b3115e71daef6f8ffbfb7d2005ff5604820dfbdf5b3041a800d2fec81d20d665f83c7038be1a338818969c5d30838861c9990d7e487e5f0edc0649d0439f4e1ffcf0b53284609551e4cfe4ab795a0760b12df94816c0fff05bebb3adb5f8d227e07f6f5b94f34d19d8beaa3b8763d9f63ffd04ebcdd91d2045907dd1f8dec54f6c008def5d868dc91df841c0640590b6d5527f265d1f8ee55e9b88d35ee7891f7e18eaecbb1b3ef8d977f7bfa21b2192d6b82344ea8d3bbe29962159d2ad7dfca07ba8aa883f028eaa7eae0c1fe3b802587200a2b32062587216440c4aa82a52d6187e46ea8de15be5f0ed87367f3a7cdcf621c952c7cee1df7680ff7df61d39fe47e67c97746d9217eb98bba368affd69bd467d7a69bd38c01cfbbb5556dffa56b75d1f313152f106ee6fd3febe4ac9b11a717fbce2b4f4f1df7086361fe519ed5b4bab98e323c7fb4779c65c5af70f690ddfd4ceea531260e3fb991ee5b9645d0bcb3a7754d2c7c45ae7b49b6df7f8760827c49fbac510f0fe80aeed10f28cfa80f6768f199bbeedf536bd31f636fd7ce386a32646fadf04627ff0e2b4b54ebf8f6ffda96ac51cf7ed1fe519bfc771db3af68773dc07ff73b1cb0f0f0f245d90d91f10fbb38fc99ce39223991b8708e78fb692250593bca53daf517057d560ecf57abd3095dad0babb14b6ea1a67da9026986ae03d2a9cb5d59071f2b0c4d72e91b6cbb85115ac2de608d407c5aad57b089b2861f3dd9463d7eebdf75e8f637ff0dd7c87d2c477534d0d5a3d1b33764636c6a58a552c542eb0f75afcf75ef77bdd2ff6bf54031dbe9b5358c2c07c37a1543cbe9b98621ac299540ab1811a49c84875735a3c9f523f01f4633e5db1aa8401e00403ea2906ef55b86257ecaa8d71c02c35c18c0a2810713ee30f50510aa323154810acd86dc0c18d132503459841a8842b974c8b96634ca2190000000000d315000020100c88c4a2e1588ee2a0a4ab1d14000a7b96545c42198983a1208771100431108430106300300028028c32c65049eea670ea22b99effa2f9d5f7aac2b2d81718ca27929f813cb87f270195a420f1ef95ee78d947f21a1d7f4f80287f85f8018048818324396a4999fc2ca13dda08435e2140bcd495bdfbaa0ad8895ac5a70853796ec769b65c18ab4c695e95e91de2aa129dd76d305964d29fc64242b1b51b6b78eba8e2091f1008383d9c5459657ee7eb5208bd9b08085dfdb8017da3242b3d6080d508ac083902b9b1b3c702ce3f871842100f445adc5912a24eea616f1c1a1256ec7460fa053fd5a7c062dc338cd5975f4c181865c9e23116961130958a74a7fbc220077c187a3934c757ee27b745b317f5f097e3ee86edd4b78fdd765aef9ebeef5df0bf2366ab60eaf735788729e8eed72674ff3274b6ecfd6ddf4b02cd7e47273fd32ee29636d97ced52ec8f7637b3f8cd219a63b17345b940a0301f0ac851a86f368942559876e942d9290c76868d2a2224b4629b5eead7ae19fff2927ea6e78d5a8d13449bd6e4b9cf0d73e81ba022fa3750f4d3abf19549f4e943d51db1650f5478e4cd4e7d54d4dcf114626fd1d35049a7fb1d34bd4bb201246f425b6bf2d11b8290228d8d9ec7399b4218f72250d2dfc7b4413660df6599605432a2ab13d99f16f54319daabce8a2533fdf69dbc761d195ffed24efb819088449b841cf3a51c80f173e7ee4260f412d276a03676edb7378ac9c7506aa52f984018d507cfae507d888098fd5fea1a381993d9871c90be0f127579c0ec7a34eccedf72f61cc06149a6ce911e576d3e2022b0de231365fde1dae6b73ed090040e3d7e8ff71470675a3140d6d68fefe90dd1b124136197ec02de4b2a92abb2fd6c2875667cb918351378f443cb64f071467a3bb8626d878128a57c4549d64c2afa8947e1b3e943a573fc5b2200f6a3449f4275cbb96128095a4c21da6de0221ce788656d7208bf61aec0d60694ca333d4f38790a9d897fc79ad0bb4c1817cee07568f97f1a90e03c14689a286d07a0b254bcfb89b029aa04998e695cb8af614b9198d591dac8662ae5ea92e4ec35c86d475ab0050bd1487938166eaa846061b4940079f12141187cbca3c4814d2ed365ad058be5daa97b07e5154862d057fcd8e8d98e636374958838644324460aa14434cb1658ee8911f37993cbe8105b70e9c9df1db65b2c4625a16a72dbd810243bb13499a17da73db2f9ead6637ed432c9b053e93d44b11f0893b0960d5b29e55dc37a973ce6f8db084b99e8060b46471ce5085b1321ba0f862c7360cb11f56a35f393b2c4528bf091f1d775dba5b9ddcea0ac84bef98afcd7379b298f9aef02c366107ebb002ec9427f6f8c9b4dc63e615e3bb433f443cfd08458c1e517dfb9832d4accef2fa5955473dd1e082cbb6f25770fc46495ab491ade308c11ed259d4528ee2e7b0be50a9469f70a8cffd1d78969bb46e64e3775982cffad0957e3d0d9378f7466db64b521b12916b9b60fbd6bd1afbf2ba82e3b7a0bfbb1ea6a9271471179a071c5148e7247e2248102c3f2c62a8075dee5d0f2f8b18417283d53d5d41a1db93c6f44dc1e6605a34e109dcbbaca679435aac468431bfa0f83764a670181fa49c7bcf34166c74ceb10e46ac6241e56483c6bc8bd6e831638043db705c8f4adaa200958d448031476bee2c61707d0538c995f2678567601838f83fb2feb5f978f910ef89e394faa9c82a72b12a40bd70ea277944995a2ea218363c6316b48cc0952eeb0bb92be4d4ed3ec0fd5e68109997f6fa0dee6e353ff58bfca695fe1ec5f3d69a4f78af0d3940c6030896d8b216b836f4b48e6d6c078af940cf3f02e4d6bda83b2f1108a751768fbe9eb6f0a185018a8eb405377f9675b66b0e566333ba1d7e75034b61d64f073b8c11e02699ace564d430a9e6c94d9089f6baeb46d6db2e2b3d36211ec9134d773d60c26fcccd84dad408ca592e9db01ff9dcb76380784618bc144747b95d4ea2d2d44d76a177cfdbda8e8db67e314188725a012c317089c0d97e14fd796f080b502e9b6782b94bb12707390f6332532a41bbcfcda670db42c674b5c6c20c1f7384773a4f614708b654581740a2ba42647f9f23ba3bb4dd3f138c25514be345d83357adb9af51a0169b018e1c766240489315f4573a7ccdec15c7f5111d780db517853773eb32a0266db8f264a6fdaff971193de0d9d206f9e7695ba28554623b289866b12940b12efaa12021b58c9a35064229d4ae1ce27735e63e9028426bc725987b21ff0180f623419b3cadaa253a833964aa5c33b566006a50b81c923e67d655d3620b614293379fb87b1f62fcb70b17beabcedf711e449c6be3714487239b3caf81aa9842b556fc5613ff0c91035d5d91b96f9954d78381a64189d49930fddd9dea1627d003775570610267e655b08026de923b7635df4ebf89343344e740639b2d71275719941193fa866ded1fa0ba24b771a740549abee9e071706d8acac27d76d9f0ff42b52154e20c6942b505ef21ec7d7c86059f63986b7feebb5456a7d278c435e611b00fec1d8cdccea3ccd17a7b706083909c4781acfad8d317801afb66d56f0222824ff8dd48ecd75da6480ffabe96ac003884cdb5dd0d4de89527603a0d9038589fb01f0241b5ff26113cd288228429d7373f056ced59d14b3dbb38c1f94c56fb0f49d21eeaa9598c2f3174448b9ea53822f977d63baaae819351bf4ffa365e432f8aa5d084964fa5a55eb638e2a7f29feb04889f5a5e6732022564526b2859838c04707416f5e1e19b6b48e610ae1bff6da3d90f585527220c30f08dd6f107fec22cff1db24eb1e49641ef9f60fa8f261bdd0a43c4f17ddf3862d985a0188e5d38480a747a2e5a00cac17959d362e0cce54a0113d7326ed73e03482f73186a150b8312aec3df3f2a75191e37426e67bf39b36455a88d93c0f432fd23a944113941d5233bc58b51a513ad3785e138ca84cac21b57448121ec4bedc457709710e26c7108b988e72b71143496fad7c194e93ac311d8d3384c9666fcc1a78840049078b6e219c88e5009d054b92946cc2485c1dc89cbef8663fb3b80ef32a376b154dda22cfa20251b01471d1ab2726126177b1bd24433c1c884eaac00919e063ea24ef2a81d0888d6839c775b3efcb25786cd1ac42b206fd6ff185523146dc3ab7375b19a819b38b7a5f6b432a719850478a3670757b099b2a76f184c4bde2c110455d789a2e25ba6c10f6c82839bc28f6d98f8a929af83bcdf76ff9eda442d2e924c6cb09a90d773236d7d0db5b3e01eac2f2cbc6f9f19a231647da1f56803d3841cdcfe98a11e7ada091911a9d40299c4accccd3ff5ffc96bd6e2c4404991017c1c61726030c1e08eedfeef97dbbeb316e94eec2e7a8010a5223b35aa3de5934f4101b60729aa652a8fb91c98e8b0092b5e84129850abc99c2d242063e46bf55eff5028c7b5b8462a3dad691eff25a18e05c6dc46fcdcd61b08cf894921d5af363a8ba69d585fecfa90e80e5eea2720d9eae0e5faeeb86d956df88cdeb8a758d54e893c0bf6167b143c95f1e68b3378b7b754988b40bbf3b42f0a690bfd11c855f9caf03812d9b171c6b1e0fe15524e341d3ab4bc17c79c133410af51e58252eebac86e1f8ef39a34ac527061954c5584a9f302589642da8992209da97ab09405c6ea4bf1a9d55521daa72abdbac5e1e4582c018a3e80b1ba38e20ecc0e01d29f48c0e843ea74858894cb5ff35279f72e96eb8ad7cf0c88f5d75ec36abdf6c01a70d9bfd75b93d31935fc65b74dbbaea722155a03d41ab43e7771f42cf558cfc4dacdea42794be6ff824ca3b264cebdbdf31d2bcc9433a83afe6ac1dd927ec2945f7731e88186d358f6ff058c9f8502dffdc132a0d59add5a81c7bba6795c1dfb7031b2909a6f61b74851c20773177eb2b96331cb10ac926882f22705904c16f14229e7b1cd8a80ac2e7c641dad15861fc5267e2e8b3de1e4ebaa88569073dbd548d818778251c47cbda94231cc56c3c6c096674e22d1a729546c80cda7a60e81ca4353c4091cc8518a88be9d01b07f68dd2d95b67d042e4409a0913b417f4d8ef71bd5116c68096a5f6705dd2acfd9ce821c3a3083629a0d3e9f280037f5e45de11ced8359acc7a87dafa43d85024ac9e9c26edd1cfc7927c6e54b321471fe8afb9f7782063890625ba58ff75737f5a028d970e6da6877a370048c09e287f3c20949c301f2250f4c7f1b4108d24d5547be18cd29e0088394465f8e05e52db0fd4ab7d0db673e909a784f44118b1ff7b04282cf2562ad57f0296033da3bc823080539dd59ca178276d55e72e37e6119154ad5daa7249e5baa2f292fa0660727df9992834a6a19bd5626377ad61e249d22eb8a071227758c2dd6c2ed7d0f44b6c930e19cec0be6bd316b4c5a6ec9ca2cfaebcda814f846dc533003630ea28b52cdab15e3db8050a2496ef47506436bbed2a1e42fc4ea2b37dcf506061dfd82fa483250e6b60418bb6c017b8f3163380f6453c1869c742357cd367dfd958832b1d1033c972fa0a2796c7776e680641469edfe40c6f1d0c21e5dec2a4ea3a0ad467af8fc4c30462ebf0ad58889c367623d27fcc8fbbff808d04c3007efc2a54043c9623df86f7053a884cb86e1a8bae941e0fc3765768ad79af3c08267e29d348061c3c743d9b43b54621c9fd40310362c8b01e47851ee19da1f7043373164c18075da3526cb9e98a91299fd4f4aaf09b3b690e15ff482c713b65b6804f71e19ad432b3441237d5c3761b3c300a7c11f301f4c39af67401a2b9992b0ac12c1801e48a70d06aff3fdcc27c94b62182c3fdd587291304a925c2c5a87dd0efdd1d8021552a8c56580b3cbad11e8be1045d3a70466ba5f97f40a4f9d806c8288d3f7e6f7d74889c15060fa1c3d6d9add127a636ec7949783804a5a0734a8907760a87c2c3f4e840a33d25129b9ecc3153be4c0eee6f66a17d1104d1d2c03692be43819ce63812be4187f3d7b35a05406c22dd9db0367376aa926e38297d2844d8281a9394f5b4b49d47928f6f1b0ae1dd6d8c46ffe61024294d1085f6f5705d761c8771fc2b8b1e2b789091a70126372c89fff59325f9fc4e2431b8c62f0a7fc34210118e97e92a7fb6e3eac61347416095b880459694b086b72c3d921c5dfc567e5767351fa342a628c4e4e27165ff0393071c19e694de62f3721054d977f1fae51b482bf1812d87a048b26c7f888c6076397bfde1667198f337955198edae7a17715e234047a4670fd2c629d717566821e0236b983580acc1187ce0d26f41817ff4c26b09f9c98529ee8daaecc961d4f45f45157b81472b149d01837fcb538729c4593d1487f4af5daff32f71eab190f9f76a3385c2c974f30c575b3d15be3dcc5700589fc34bb1c785da8ee894afd47089cfad9afa22a1e46019eb5de11cecce9b8120fa64d2e2901519e2e7609c628684be1d5f38055f29584b6114670629723e8ddbd153f118652cefb7202dc8e354151d1370ab1d7c1a9e27669b134e57d20eb35c2652a817aeeb217b2c3d34601be0c73b92fdc6535c8e179a81ca3fdf3d46d56a7ceab40a7dc9ad84999f215bd813097e5b646be1a9401ecaf6ce04cff4da956baa85ed2f190a44012a38571649238e473af2c790f0768f738eb479d0f4f36c02960dc066257d101a2019a36055cfaf93cf830299ed85de654b74273b00d8c87cf186479c9d2cbb97fc6206f6a13ef696e08f99e1afdd5d0ce711cb8d4d62f5d6f487f1a2509112a420cb900dfd0bb2090c7f9aafa363ac953beec4ae941db34c812fc95e313f2bf30cdc1ac536903a35bd8239ed17f4b41f24003c2e0bbd6ff7dac13ad79c846de55640376fabbb0098aa9b05e8a7c518800c47ad080653856ed59c0fad34be983e6afc40f7bf85d13c2fe09948d5c748a908bb4d2bae8e996bfb008ac978d8ef6b68c1ff344c3514696d2305a0cc2b5197aaf68991d422daf808ea98bc8df94f82712aec35def5a3513d48dfc2ee388857203f200eb8f26df7f7900620b3eef8037dcaf1f3ffceff80ad6e31df2f378478ad8d0d52ffce8079efaa3ed96ccb930c1cd8f9e22d6a77cb608a44df5335eae251b4d15fa367d647565e805a3a1b724839226bc9bbc8a6c87a74560e71a4fd202841a1e3cffa4fe8fb02baa14a5053a2091bdf072dbd0d7dd4b4c9d5df69ac5ea5c55aca76789c8e3fc62e0b20b85358bec0621250606639730f50bbde19f84f8343435b184896e4766a29ecdabb39e98ad52e185e25991448873041b80f6e68f635509c5afe1ef32cb8a702f3c84c78e79ead1ccca12605d96cb9edb825fc0eb8dd53555f848a5d3ca267cb4c1b412a88c7c6aab2ea4a50732454343c93886a50700d7f3f5eab97237095fc668d4a270e51ba806a6fd8363447618f4db2f078316c417455309c2a030d28e894edc98e207d60ee73ce413f91c16e67a44a67ef89bee0318150d017e58003b4a6f78f04fcb8fd137589a8b4e36f66c3b28cefb3df0d68277a4e65d35384ba1c585f33ab017385a2af7b7568f7b56c6fee79a5efe73b7d711b6b631ccba1e6483f9e4ba4db003d83c0027b3abd1a3fe6a646fe8024bd2efd10c0b809773ca6f1cc91fed8fb9ee54c2a49e4fdbe10f0e6408f5152e6710b5cc003146760648d4d631bfe1341c896d8e71c084aec990cb36c0db2a7b02ba60a3e5d0d96cdf0406fa1f7e3abd210b204080926bd1d77559a5bc417452c690713640055060ae64f612f932602d010201b24494f012269ee2e5ff2e0a35bbeb003f111457a6a8122c587c89fb62140a308157c8a9d64633368b7529b67c151621e67189b44741bbb98d1f84d076d4dd898e9cce78958a8f60607962b3e2b1d0bee4b08fee34f9b060c4a618928a443f4a66d7e304611b09ad0fd32d5354d14d9f1cbd42ab9e06d6e38864abf7e2e172dfc2e9cde2b6e3896b27cf7b2c5063fc7448fdbf228ecc1e31606c70478f39ac304830df433ae112a079df1385cc5e9efde9e2e2a75b217fae7d205c389a03424c90aeadd9083ec053df71dc04497f33bac946533726eafd041f5c1d31a058095fc907afc944480d55d7c391a3061c0be2299c85b951d764ad262f20cf36c6acf5839e4478bd00fbb6f8b9ee769ac43d59492def12bbb4b727da61a36d5abe0ff94d348a6640582574f42fd7c908e278b8967cd2903607b869a61ea07c0d73715f1a5dac40ee69cd58d2c208152dc1050bd41654097af3e1c3cb8f4da59c04205c2c69a710aff8d8c5a296d6352584eb40f75a111b85490406cbbfdb4ecf76699a82cc3dd81c601061e4f98ef2c0aacaf9d1c461c28b2d34cbfba8f933c807148a851dc7c102a25229e6871ef32db32c37f8766d98550946c0f8817ab3e88bbe8c17247402339d71cf74e0e39e340dcf20b4147eab21633b29dc76985eed65ea8d8dacd43e5e323d1c03f496eb8248ffc24f399fa2fb3c99ba5676c194c57494115ccc190d4dd962ca193b3230cdbb697376ed8b7bba5b2f82cd1dbf0e90d3248035e64afc268742cf217c1ff1e0eaf24d704d7b5e78e6487ef8f55034ba9c9df7711bd3b418e7184610b0b7e16441aadbe3062bf1f8709407c61a91ce9f0e7916bb05e719a46b20fd1c37cbb0f306cab9b08fd2cd4d81d9b38be482db0520342543319c37d24477bb2d150c94c41d9da9b99d4ff952ffe390464792a66e7827b7208e1078fd821b61d5430619be196cacedd61450a5b5e852ec0a72508e4e7f90b0c7ca7180272b6a7e7bb8e3f7031f25942ba4a7cebb72543fb1750d56b4f7fd320945beaec5d38a7df0d95587fceb4096d08231cf1f915647a3ce88846a6128925a0811959a433c46526a5953c5145ebefbbe5a4a95dee2b721f4b07e04b92393a99e50f27864900365a4648735802db10766e4ef15d1dbdc655b0e1010ddef19752f3ebd0078dbd0c5c3a4de67e871b86161bd8be1e9c28855503118fde233ee1bebfc42e434af00f984af5236dbdd4a75061ba3dd3fd692081ac82464fa53a5bce7f5a72fd6eea3ca214ed482c22bb2a94e2534949fcf59442d6eb747149f718ede93646f7aedeb4ea76e366d4e38a72ff4eba84aeaa4aff6b1892edb509212ff6a0280081a331114731740e2eca354d14fae500b6113daa27e66f702b62bf061d26788511c1309578a551a47836df149824440e72ffb795e2115642b536c278bd1e664ede207f361ddd9a9481de8719af6b860ab90a1ae5dbbc862ca2180407d461ed0779615ec4dc9c59df0a7c5b43ed5eeb692d80f359ab881f73bff8d896ba5cf8be99a8e28171e8f07cfa168e2e7d927a85a04fd442b8859c59eefad89ed4dd69c4ba6e261f24f0eccf259830d631a3a5295e26586016acb2e7207d81bf0ad28a7156ed2e8491386df381d95fda36a57d4e25e39e66734c04244d73827e8e6033f14f9728a1740bb44c876fb001b81b92b5c2f6bd2e7b7c3bc398410b709e70bc2e672ba54c001efccf0dfd95fc9d255920ebf9633d3b670bb48c2fde2555c8c1bd1efe4c0f7a7fa2669be30e968e2444a6bf3dd5f620926fb1601564f5093106c0b199c4d26c992b3f4a48b537d032b46ae9a2d08ce12a33a966017d09df6a3d74652a0fc2e8192471de47e801b76643121fed13c1d290508b5130bc1754a562405bbd652ebdf60b95458e9230d3fece2b7db17dc5a26c28a08263a9d6acd7aa2e4f5469a8199d6d2abd504007d234acf41e590809b2d145e7be1008ded0879f624fce8515dbb9e09a27c666ab68a5547f098114f5351430da22a0b729cfcd0aae93a5e530f9ac39851fb8756b2cad28c71c272ebaf49bd104c7216929a3e6321208e5dfce4255ae52a69e50117b7980053d402fcee26b853e692c7db9b4574aebdc605efd83df459229198b9645d229c2aa6237650ccd4737809b488c96d798eac73f047ddac663368447b06446d2bd30b3f637e6396fb90d211a3bfd6cfc7a375b299931c45e5a805e5b0ada373b6b9a8eaf130b25d473d7e7143471471cef7b575237da5ad55ba5075e8a051895dccec1212ae636d11cd7230e79b0f116871db673b496ea85553dcfa89fb586ecb047e99b53113afee353e86fd136ee117307e7257dad82b78d7b410c42188dfa10076026d79bef0244bb3bd6db11f32c2c46e3fae205ccfdd4e1fb2286dceea6f2de671c30e54287bdc550c54d238c906ef1714b731b083d281718a27ffeb30bee557b580f9c050c1913006a00c050dd28adf70d0714ddc94a2aee02931ec4e5bd0c92bfe51cb153015a8343e2dfd73eeb8b622cbe9e428feb556e88e072ed100b29e3b7cdf5409cde482d447f217df3da2859ffc760fbbdc71137517197feb10c09fc37dd51b345c571df36a9d55618d8598e3879ba896e0c88d7491949160343c805e72530b648a63e1f6b4a21048d79e69cb2e888003eddd0d417dc39e104f43828e4af681ad52fce11d6d60881159e2a6eeae0906b34f263b7558efe27235cebc53a2ae98e0947482a85b3b5c7f58343104ecd823bd4a9d868ee45bc1f28845d8ce85c8d6b37d213a30f3f5c3171aaaa5e812157f7dbeaa62e85080358d6f4b7ba00917b8db2fb937aceed00f44b0ad2f3838858ec8553712f08d3ef90bfa475a83eb7608caff8ea0b849cd8be994cbfbefbc0427b085a34d39f30ad25fd2bfcc1ab543361f3bc60a88e8b23204adca0cc04a817a58f30e34bc51102e96bacd05b2d606f296ae61ee0046af60e1355f47b20139dfca846afe071ef45ea30775fb46e1ae9837840685a1c55cc6e09d3874e0ec49642f82c440655b10a829b59de42301455de45e2a3422e72e078e29ee809cbcc00f54bff80c45419fac934d12f5eef5fe1df00d36a7553c96dc1e8799f09cfb198a618e4a6d2d793f81bcd110555b7cd81ba6f957c9baa639e70416e899b1dde7214b362e065579bbd6b605ec2d09feecf8b7e6f8d4be4cab1b29554add58e55062dea1d7287837fdd94352e5d23b635187f70d1d7c7150722f3a1880aad8171b1814a294ed5ec2b3844a7d4d3f32a946cd35c1fe20a14f237d82d4faac65a01067abf64a0fe222b1f0dc752e1db3c30842a1e7239698fd0e71684e3fb57844af48c0788d80dabc028edd1a77e80cb943e76f42b6f8f465bc7725d3e2b8a7fc094c8d283251e55fba3458e28184e01240430b47012be8e11f7bf265a7f6db61ce2c5f12a40f2cca09fe3305391c1554ef88a637df416ee9aead246d5f9472d4e5bfb9a5e955b195ba0b39572ce818a2f30d39d28f2a93eda6d901295b080dd425273391ff057cf536516d20506ebb9099b3d0f29018dad337441a4b5932d090cd07478ca28f2881f3032379d301ff0d97cd59aa2e2831cf1d6c1f848f4d4d08131334741e4a77e59f9e327fc1c582a14a266d277d3c0d84459c21ea0dcf1418e5f485dbe13cda51efab33267715925c541efac8cc7da2ce53e786f1cbfb1b96d4506aa80c7abcd4dbc7cc6d815391f772b55930ffbf41bded624a31d6d53103f20fe3983a4bb3c2bc8b61acba500ad3223d0108d33b488ba3840f3bb94122df8446b2d4e5756b1895e7f83aa61b95ac48692e90e790d71fc9a0d3fcf21e36d1c8083d4fd3c3467ba2facefb15111723e6b0adcd945fb18fa035f2491eb128d2bcecebdb17023f1c1503f17a6cb4f97536e2304fbab088bf122af8d74685ef4d8ef308d1d394b9455d0d6cf5d2076236bd4398e69b63b04317a474b073fcd5f7ef706549c28037909d6fb400a2594fd42d93476a75f3cf174e7c420fa455391ed2bea50d5b88ac39be7c66a75ebf50605079d38e7e129434906c81d81db03e3a4bedb332ff50d8aeb3694510fef0d0aff65c84c91d48624f02b7240b9328d661edf6109ce5d14fd4de0d5199ae94cee942e8967fc385e10b768ce1e15381b961fc2f0479d15a59b893b47ee130288c01be4b2205cb5b573a15ef6370512023d99dca43d41cc492ad930b02fcab97b2ec16d7ddd07a00ff8401e613ad18f1a66986593b308ccdae6296be9a957ba1758896a5017bac64fcaddabfb6e77e5738cf1e4e062f5494b90eaa7ddf9f69385ad2ad0c5021b37b301dab65d8a06bab332cdf64a8291387038fdf41353956ae2788c019ba6c75eb69d10b51a600146578436ee6b3437a79a523b48bb0d1aab1b07be7d3f78c0d76c684f9e2c1b1796d32051b9056fccc79425d76069b38022b416c982de6de00a1e4831ea730a7ae7841aa73575316c21f78a8efc921fd422fde00fd257a34200025ef72645689d911cdc4ba39a94f456b8431b6f5bf3d2f00be813c3e80f167855b796524ff44925ed399229d7837151e3eee2a6ae9a86b9b00d526ee137a455e0c9c393116757619babd8d0a5ea9aab1c38960e639683ac54da86ff86c856a45ebe4b752638704a195bad74c371d6c9a12cb39a8ee56042c2333d6c38bc6053076562acc4b1c10ea060067affd688c945d04d49a70e0afd1433989d4dca319b5b2377253019f79e9409c170e46d1dae724a332f9a3b78ab73836df04016fce9b6566ea537b04fe6fdea882de16112a592899bb4fa7d0d90d37a0f9b969eaa9f98804b61299c544bf7e6ab89aac31294b639fa7012ff10ff944e8ec4bbe690090f23126f6aed66ea568f955f4dd619d117123e5054c8e3c09e3514d2340ec8409007c59aac66fe0851714c40e9f326c071bd5efcc057182aaf4b7b77456cd1766f03116b1eb2bd16b6ba603b3348c3e0dced20d86569f547611360fa2edb76293df21b1c1bab8ae0b29013d7048e6e1ab4dd96b5397e33a4605a5ec83529cd9a997447e6f9adfd75a1389c781c22d6005aa9cfc9d5995ac1bc355bd5bcf593593226127c17b025a17058af58a57d69871f3e0a5753d5a1d6a1ca93df4022f9ddcc4b2955ffbf979c1e204ca33ce7e8560ecc54b19952137d96a6a0b9a73fbd9f8b4b540a712345c9ed93c7f0e6a24e5ddaadbaa88435fb7c948980b3dfbcd0a029a07139e61affa625f20acd5b3584f2cc76d9270858069bf106ccc31abbf41047131d7ac33c42fd3b5614c455f4c129bbed29aaf8780360b36c7636d1aa0298cd7b7b1007f858005311b8a44e8131a9a7e052d1c3cdc74103acc5b6ddbfe1f0d30bd65b4e548e231f4b60a2f5fc9e80abca7e01529f31836866a5663dd838fa6be1b9ca5f88414897e3f76c247f137f3051430f687f25e52e3c2019d04d3a0e251a18a7e42dccfa66e8d4ffc3bbddfb2f07e54c432cadf11c9745f200e1ced5f7ef5c5f00134440fe8b970e37d7aef7ac59ccce687a480c86d3f9d019d348fb7002a2d0ac64880bd3266ac2a3160dc841316670014a629dd16e0a9400c741090da9d85c46993ad52dc1faa32f607e3168d921379b1d869586171bdbd7bbd0664318045739d2e44a908ff24618f31b8722216c3a0a469406434ba135aaa082107fbc64826dccf33fdf845ef9b386ba9a47ff249794b3825db8e11412a239c0405b1483491e8133e7e26aa564dff12c3d2cca6cfb9e01838e2fe51c12448621cbd4185a7a0965d04e806e886d3458508e28a3f3c6f91860b000733263144c845ce3dd023978a12791509400b6d09f021b0dee5785f9f0f7cbf950a13fd6e6720d4a26a0ce1ca4e6b1bb17cea0ca2de1368fb28abf69854dbab7ca0115e4cb9914505b52933a1bb28d119011b4d3da4301f977401233f968a8a32d31b25bb7127b2fe24669948375ad5c348ab1472c4b4a5236e364160ef91992efe04db1bc15b688a1744a0472cd233972a218ce9248ae1c62849a0f31eb36b694c05da4a0614218912d1a99806109eb9b9ae3631176aa45161b6e1f50630a9f7f99da07c1bfc8a7838849d206b5e3733b7521865d8510c81488e33df9da8173d218a0e017892377b7f150379991542129b7aed96261a674a5c972bea9d39fb873391ac55970c54e67f7e2e56f8202a47d40687f5a6713d8fb3d65686f551aea800547949995297685bec6417accc3c37709235ae72d18f3ae875d046b1198c938d508fad77d424f28a49b3240d766d25093a92b19df404d9e30cd0cbc3d9dd6479066c4800e4748fe907e077b87cf6f0b166d61f886fe22a9b4f30dd15e0fc25cee7863b5450f02620413738bc061b071f64ed9e001028ad7a1e208816fe3e0d355f5887ba86273a5847b36208de8248e5f2dc8d63d980226b88983d84345b236454fe0593e0fc902353b3f4a0f4e4364f3ad59ad2e16e79de974f016b6cd8ddd77afe049a5930b0c753d968336807ac81baabecd32a1c5789a661e86b3e34e7caefc2ed395bee1d21e09d0dcad7eeae1de25c1cd09e95c5985223ccba262796595d2a3d26ad8a46c5af8caf09983c8a2524e08d579f1e24f1d9a93eaa2055cf65b383dedf9e487bed5c5c2d1239a42a0e6e09937f1acd5dce70334b7a0c26e9c05dc04d13d0720b55bc8bc88984b67260a6881adf5044956621d91ee2618e1ba6c4596511809a8ca56db19111c36b101ff9330992c593e8784b5c54819705c945b7ad25fc6c742dfd323cdfff8754d19235331647edbe16381d834406d6246baae5cffb84ca6f74403944594dea1d1f422c0b73eb8e6f1d1fdcc108549483b6a63a276fae7810d109973f9e1d936e190cfec6a106fd1628380eaaecfefb2ec8abef0524e0044f3624c05ef94991fc6acca247d26762c0bbe2a4f5089f81a5c810d1aae48a06973fdce9bf57f1c5f1dfcf9ad9914423e2ff81f6a0200a015054525e79f0d3809cfd46071c0ced9166e2f95cda89a0a7000640771b0ab53322b607d02775713fb00728621a43584413c88fba9099dde47b4bd435e94a3a7f461f81cd84a219378afd85ada848f7ff72c2f5a00835c6a0e831c0270661bc988e7c51a7f8ae999bf8c39587f5a4a7560220181d7cbe4744fed5a1a13261efe87b5d9020eea2472c53e34d62b0f324a397651e1b5c5ef1e2dd7f7c34197b5c4e4908317a92f3c266e2d0c4bc4dd7c0b97f1b871365b750d013b4fc16f2c25a6c4c347b20a45feb6108189e6c89872d4a8d5a5149bacf7ab0f06ece768d9fe66c442e12701610b6559c69c0a5d4f74045a6983f9e6c3ea3f239ea29a64fd8f87635945ab08ebcfdbcdae1a64e8c57f90c6ce17db0194d382f5d7d6c51a5c2b980cbca50928f9c52ac0254c5efe6061b9c69bb0bd8d7d4296b82c29b94a9d6eab28b6e0f664f3229d474215bcc90055884e22e5941a5b629678ca5cbde20b5ebd65b3f2856799a97bf48a4ed5c3f7b701c5f5d8ed196e24384c29608a3761f31cc2197052d2ebf696464a796c25821e04d1227cec6080ddd45d47b17af1d85aca6b73114743e2f3350f22732cfbc4fac6c82da160d85b466155aed8b9c8ad00cd4b1314785a5e103dd9f5f0b263695530129b80cd693a1c47c1c752f41364b78559a21e469830164a5c7046ec7f6b6926439eb3d16d1d0a5a97fdedb0bba42cb8da5d54f2e73b0ca88602f08defc9287d8b34326bec1a03e76cfb4d366c0d89d38befac02cc6002fb7e7b4fe38b044fc37a3701c522187647e9b3387feba62a1dd7a8d0f70f22a761637a59c191fac32d0c5103d0967322eac9fb1d4f88caa1acb3013ab5bc7378c111596315b02c3e479b5df1d6d1c8b056fcfed2b2cd49b405b0796caceaf283b0bcb017407c6c827f13c6b6b1141e2e9b707da0b6c3677e05e9e41f5e41286c93823442a3bd4ff8133f4d066d14075f455c11261463d93b162181ac6c003c37dae0cb7530b5c79454f8cef396a02557014ac444e2de762fb89cf37ed9b24d26b5172ede28565458e9cc54098ab31fdd7906e609d0af4ba47d4f98ec623a5876daa2072004196b81d3194a41dce785713c86fab8a355fdd1aab0fd558bfab29a5f4738fc6b027bb5a8ccb6c5e752684de6d124d2a54089ee91fd06fa5a210b5678ada445e2907ef7a4bbfbbe89b04084fc8ad21bbcec45e681261c47107e7890a152d95a23f646c561cef44505e44f62eb2fe68bf4971ba51ec8e570b9efc3842e8b7280d0b1f6a85b184f47d9176c4f822a62ca6504d1f91fd1a7f5898b4ee544ecc6ef48edd8133ff5ab62bec8e7f199e24ef616128ee1325624c28b05d9637bb354a2302a3ba23c14acf8d643c4456c286820563691ddbc73d514d98455b85c23f5e76366860842459092af87806206c0e57556c7f78ace61dfd48accd8bb912aaf319372db1fa92cf28bb2abeafb30784a49895d26f2d8a971a249852012e3611f9ef40ba78c03a8bfb04682266cc3f2ea8e3806d51a65202a4bf6d9f47a30a57ffc67342ead35f6ef589e9a338ee8ac14c164c9f174d222201fb7bec426c7e0b23f1c59ccedc249ffd1f34680f07ca523256d0ea33876a65fb5d93a6e7b1eb7ebbc2360db22e6bf6de4620173f0ea09273257cc1444bb59f7924482b25b2ea5fd6023d3b0079149f6cef3e7afaaf47fc6a4a5a2e47bef6a9289fcd2ec1e3845f8e52496cfacd8079232b292104a8c4fa3c55cead90d491e7b5afc07b08c37fbefbc3566f5ecd23e38f2c0bd400ffd1260c671f85f72c4ecf4d0f5e160bd2266ecfffa48c3f80a76225d567ba6b45622c9328c32fb0f772033f1427f5324dec20f6484d19d28c9de7925f9dd841f232bf72f2c16dd6788c76a000616a5ad9823e547438264fc0e57201359789edfe2f1df05b36fa0301e8b885dc250b631efbeab3f8948ed139398589c5fe2062dc55c51021bcde981e71ac66851192a4c0297eb5b13e487b550ee45474749fc761947019a0ffd79e68fc1bfd69e58220a2621fb6768af624f17720492009868c394090f0b749a769797a9dfad634cca3171b4ff0ca6cd1eb211980e5a5b609b7dda41368e1990e24b0757d013f6ed0b6699e62da7be0ea78ef2f50bac8df1d6dd3df19b4a6436ebef30de0c7bcb08f7f9f3ac16dcfd449cac08901969028e9bf4471811e02948e66fb6c5e3e9b565b286fef7432682de805b5608e87ec22db8cc951a1778a007a3fcf0a839e8ed76d8084107adf399ecd5e10d097a09808b238361312575db847eb4a30628260b31c654ed50c28b352ee53b5bd81a2056965ca777a6141cc17492be09a3999005be5ae01e723eb9ffdce97ebdbcfa253fd818e42ef2cd935b59551041c71c87247857e4cccad33f3e846f154b9258bef0648e0b2c13c0e9d48b41b8277bc84551706f0b14293c9ca246727704e72dbf05741445b4e6011a142dd10ee05a4027bf7ac5b21f9473aebe806ad45e6cf2591014772d400b11c7a8f667d88cec0cd919262051cccd6a05939625a48fcf1b93c8c88ab574493f5abc423c607bb4e2969e949f0f75a120e4cefbe9dc1445ba6347aaaaa4879cfb3ce8530fd56ca2c2c5db9b105af0dabf0b4292897e0221dfe25f1c4ada750c22be6c9cd917c1d9e298f041efdfab50440a8599cfc17736d8eedf145f0e93511755f86bc47435d4f49944bd11b7c94e436b9e12828c495a8488c550fe0c93ac34244d63ab3d9b87ec68ad98c303c242cbb11e4d62581b1f51104c44c8b8b9154ebfc2d314789e320f3007569024485f2404a74a8ebcc3b01020a88b9dfb537930924dd1f1fe1eedc861a4a788fae38feb489e53691f098223b57e7d5a9bd78a1a08d26edd666bca75c023d9befea531857bc680e3111f0dffafe53d9ff32787a381e5bf0ca6c140f85920d10a70fa67ff1667d332649adaa34ed4e28ada912ce64c7aabd550f9457d1147fc4c86403e9c4469b4f909cacb4401a148a80c9518571ff920519785699d36b2c37ac3fd817e9b84e9883647867a60b5b0c4b0c800bdbaebd935ac73d388bc6168d84f9cd0cf887bfca80946ef1c7cf8e78048dc580ab59690596c2bd082bb9ae12d24521619685de69abb1c7c3c2281408b10752e780bc7dfd4b27ef39b84790eb7d04df5dd08bad795ca2c066c7804def87b51a02e10a971d64109ce955f3e037fcbe19bca25ffecae25bac2ac23ddf3070eed450aceb03cea68e8329e09ad68d49af55bf9ddf6bc0728f06307551e56d6cd119686040510f56284489296b60c7f3c00948731befd29441ed8a9bd5b5dcc38c44bcc0f4725e0957d7537dfefe388bd0f731ce30c4a9b85770b5755810b910fab4aefef080421320771578c8bf23ab8ab562c4e74b964e84de27991784b2cc58c62e37e30d98d20b0a183388a4b1ca7a918472527714652190a555e2252e29658d67e4599cab6d49d96415899c373a4c5a072da748a32840a60006260d69ed086cdeac49b736bf5d8847ec4dd5202cbcce5491fa1cb6ac42f3019765498d7fc29ca248ed7eeae70bc48c79cc96afd20fc7bf146b90e9819d30ff5f7ad1598b6820105c274d8c10651e3794cb1838a90094fc8fe0523dea1288ad09f4c72a1d024a2135ccc02bf51079a90d6a6cef8aebae143f77c16874ad54b80075c9243e939242da167c3cd8e30ca9c9673ec923a73932934a935787d5c8c44e4e58adb1d6d8851288e3f31617465c139e7a5708af1601aff918af0d89ca20168cd1083bfb5830fe93765d8c1e9793f9fe3032fe40c9dc820f7fe40f09c031b14e7a2c28d77ca3d0f259f6c84a62c57847607ddd27f81160620e70d6ae2728f573c4c76b66b4d49c4dbb2cb52632639b116544d7678b4334aed8b38b2635c6691c09f5fb787d395c5ea742296fb1e960be9efcd15cc4f4a9ae47ccd667c94a277b37ee20cc5be598bdc29924f0ea80677995f57de95f8d329f0b833666dafb1d0dc88508a1ce73af1e9ef6a116c62eecd7db1e4b47ede2b45d4ad800665e6922ddd23481157354fdfc49b065f7600a98d95ce37718de57ea54a0d1f8927e706204b16a7dfcccc725dd6ee1552cb99e936196a348d13e80ab0242ce66f1aa34cb9c0805997ae6e4bbe7112b54e50a936910cc9071cdf9af70e343393deed712d687ac1768c3bf62187023ff9ed7fab54977c5f599a25e8783f2e98720ec7164b51a27ddb7234a8e8bab3dd6bbfe02b70a70a02317715c7c3b424be78c6c248d63bde63764f00cea1230e94297e2b374e0a52f3bae3b75c84eb43ab8a36a2d0aa917d37c4a7fd0196d9ab5a129dced754afcc02e0ee5f50911fa4b1dcfd5f7bd9423110034c899301433c518e518285bc9b2fb9d3f47dd7f029220a878da4e2706842912e8ee851036600a7bbdd6011d7002d2d94f7721b704b03af3adc7c94a6ec5d74cef3280617026e19a803179c019298c943d9a826c66879870abd4edffbd15003720f7243a694ee8ad74bf286d03cd106f41709c606f7c78b5c8c55694ac78f48aedc3098bb35f8e65061f46237c7089e155494cac84975d9ceb0eb7ef6c88da0d134ea1f6038ff290b4a60cec8ebaf49a16e2091808404b9419a7087dddbd93abc38aac18107419fba34c089c2a8cbbc7cb71af92815e65b1013c62a50416156461a8b010841401f86076ede39aee0929fef104e80ca8b580eeb37d69b1d3d833e49aaa3a097248e1e3634132b90f41b29f1fa67d85550cddcb5ca57093c672149d0c2fb02512f5fed9bb4224b276964bd734112817f3b983c8d7a73396f9ebe614089e0673689fd65c1f74ee5fea3206b33ac8c7e7d3dba927072380da79a8fc5914bc2d717d94b4ce07311be3572e1306e653bb9ac8419bc93f8c0cea63b2e411ddd06dec8767036a8f1bd0fe15bd1412e79a77eddf45630ace561558a4bf961c9ee8df267e94351ca5af18de0c75008e346372238a160c3e67088a3e321d885162abc07700c34b4ea9f5eaa493fd9ef4aa4635a2617015b6c78a534cb0b63cd59ee3fc612150593ff5adfa92d7e4af5d36b4c270838703837ac061618d51a4285edacccf87430366b4586f718435ba24d473af8bbd1aee66930dda58b02bdd91da216033f08198d79434667fc6160cbcd95f82f0256543d9974258bfeba12ad82d44c396381180042e65112dabe03dbbe3fbc5870df7c624078b02e645a11fa4a2b2cb50b4c504950788c584dae73e8353b620fd9708022e8f284509236e6d642878d0a94821528515c5d8a524bb7058e10decf403365b6ac737469737cd3df8c3923f3b868b47af068b5ac48ab25426de26b42dbd4dbfbb218dea59bd0944e50a9b0a3649bac710523530023225ad69b756091c52ec836dd167984228d23866b11dc3c01a05b6c7e478009e41128a02b2db8e88712f0e4ec7d9085eb19ff989a193e484353aa4b8a131231b5000ef2c2728f8c59766ed8a9c2649d09ccb3e6c55719d0654c433d6898073015bb16586e906f4a656084d5821ddb04643d805d680d0137b60ed83ccc41e7b781d80f6fdf235e1edcd1a3f7e1ccdcc299731b780b97850800ddc01cfe7f11c83f01184dc2e5bd904ebfe8f5a839181b11024c505b68729f09835840e35a0c81b394175cd68fb44bee45074482d4904848b683d5d0521b088d74dbe435c1368956f24c29a825789cada49236bbb8bb5ecf903363c247dbc801616cb3770b1b36f70a17d9e45b4c09586245a76db1611d72fc9334084849d7ec295b1b57586789b55200ba426eb87292767dd3f386b2afeee4e3335a5ca2538d29b1c48a1686816d3a06c111946c71332551d1d6ea6bbbe04848943d47e235266fb9b4b41dedcfa6a759be92f7d45e79f884fbc09ce2284a97b0f25dd4dfce912a3db78a790c2e1e7bb142cadd63bb9173f8f7ef2ee16c3eca7b5387b7455ffbea6bca5e86332cb2db4842f2536acd243cc205d54c604b685748108057b2782f3ffe9ddd037d390425539389f278ae092466ceb19f083eb3e8e2708ab5683d0c34f73e1f5ca0cc9095a1d7eb18cf72c76be6eb35257d0ccfd6528c11dbf579b785eedf1954588685771497a791d86aadc87b7496afa4f42bb269a3bb12e004549b0d9341b22a052da346ad23d72f4047dd15caae80679fed78e72bf2a6fdfa39b3ff132ad0af39f997b08de2ed1f9ea8cd52ebb0323d44a81853f1e7d829266174e28fa3aa9e18b8f83b00ae0752b5fdcf19522a9841b2ced4039cd0cbb5f86e5b8fb42c3e84febe3b0819ee4980d9abc859b0e81a6ac0b33a8347c691f016dabc41d2241d60b6dcab504ecd774cb206cb471bba8f8554935592c0ed8a2e24a143016ac1702d407a5500caeb85525e0e9c792b124974a900b8520d53e73f6d8f59914871b1c0e39236645421e6d63d794fd20f40b231724f5550bc6f6ee330858633ce75aa4864b189c8f60432ba6b5950c953d453b1bc01510daddb6646c74e34e1ee91502d45580f67a2d0820ab560a41cf0580814967da9e055291ad3bb79bd99aeebbdbc4aa49343eeabd8fd61a84029d86db8d2c7b6fc4b92a22d6d4709265ab942ba44a226c836f192c9adb6666786e8809bcbc699905b83f0d9ed85a3f2210e2de8234678e74bd2d5260c6b158512b27d1d34fb99bbd746979e53ac540ab01dd6f3c9d234493bcc7c9265e934bae96d1820e304ee0d60a2eecaf9f867a878d577ae855607c268993001d6e950569299e06a906a209f67224ac00383222053140293601ba2f59c300b361927b01ae5fa065d4625ad5f8e3140bda428bf9139c8a5c9c6ad3a200964f3b5b666873a66126ac93ecf768412d38c642cfc9b5800289d030223ba88fe318311acde90cdd67ae223549d8c88178ab787a0f671431d63c87815df7a727f0f394409dff927c168f0bb17241176fab2bb19ca3aac07fb8907e663953186a75a67dc8292186b9b03baeb78a5f7fca4144d915846c057cb24a86939612100ef211bdca5c7907ed4b399f23df862ba89f3697cf2cf51d8990ef3f906dd023603230adea4360fe89730d9a9ac6aa4c135538bd550fd0e3b8c92e8ea015e79d10c50857a8624fbb3aa1972030ea680f1301782444b8353c82bddb824b803ee1341136904710fa15a6663c77deb73773842c95ab141b81f5343eaf8a6588bf43f70f965ce3c373d8a6f8d893f197331d6e86125977ab5430e37c054d7109e05cac1ba4a3536a20acfaba520b0e690c4314a67e05f890863a1b267072def3d829cf05f686351da63f0c078f6c310ea51daaca7057ea710718bec8091d21b425e241020863129a3d101120da1007f782a641c1ca2d4153c0d9da5496bfc2f7bef41c7b268eb23b7febfdef6b58b6d832e1080fb6c180b447703da87fa8458204cda4a075bf8751e1ae3d47e83962e38898c7e455c24bc4d44ad5b93dc3a599d23155a7bb0d56f33535ecefa17ecce143feec2bd80e30388275b87aa09ea3b892b23add8a1b0a58085d0457f7f42f6265b4a29654a5206d40877074308b655b3d01b2a1d5dda1cbdb3ce39e79c73ce39eb9c524a5b2f8c10464b99a5d65a65f367cab9bdd800be007c34fa388b11606928dee070480d78a9d65aad2dd55aabb55afb809324ad69ec4d93b4a54ea21c8d5c74c559f56ec6483f71c615f5bc331c9c12108e6a392a872ca594524a29a514fc69e9907dea40b17be35a185fc39f307e7a27eb03401f12a20462521313b173eca67bef0525116f28deb0f2c786ee6fec618c0f343bdcac78a982841c260bd020850d85ab304b686062159ebd889130f8c60016c3a1220e40c014c634df6a62600a239b0e4133e948f5a154239f48c1d24a7428d3a869c3144a36df6f98483b451f4a3d47b8c9373ff990a5600919871dfe0b99cc731a56f3cd6cbeb3587defc0d4fe35f9f6989626beddc37cfbd11639dfae6443996f5f6ae1db7b34f1ed24dc90f5ed2580e0db9d706843ab218a0b15523f4c2df1a5cb08c47821536b52f5a57683825525872b6855a2c098404a873251a04ced40470b0f69c4d0a89a7cbb2d8c9c6ff7d2b095d5c7445eede310716e1fb6c37816f36adf3cbc33efa3c1d8f7bdfc18c94bf35e9a5f62eecd13e9916986214c004316169e1d4d4ca886295b0d629e3d0ee1d4441db362c72c2d92bf88a9497de9a41889a41809f4bede4d73f5706aa21f1662d62320dea0de9e0099f4513551fb75f33df14df51d4510f9ccf493e6a3ea24f984246a9f535585d53716dfcdb428bec3cf8e948a464d4119271af58f9a1f2a9e79f09386bad0450fa28ce03d73d7ec01d6952900f082133c344489362c53be8a35520a4def2aca24cf634b2679200e46baa09214804cfaf1cfc3968f872d5e1e821f3dbce023784312b57fadcfa745ec0582a192240a2ff85049496ad06e83e1eaa32dca970fe31e5b945a069a9c3000e253b24589f2ed433146f2ef6fcf801323294901e05832000821f49880e43167f8b0498af6d7ab8c2392e62f98af351fbc6499220203111588242152e4ef102a865819318488216586ec300487d88743a24c7d45e2898c95efc3a718863e7c8a9af2f50437265499a0c584a95aeb4099235fb3aa08f3f7cb5f293b5f69766e1507b0fcbd23e4ccdfaa6fb5f95a83902942a070591a6842034cfe5a7df7c3858f2c16e001c69b12c254c007a00f5020cc04b0cc78f335024c906a39d8e4a8fafb618e343972a8e0430340f157ca870670f321d30dc6874cb42b0b3efcdb8b2140d5772090b8674fd65709c0874f5bfac05f344b3f7850f5ad251b5c7cb87465c9c9d29225dadf377fcfaca985f97ac607a8334da0ced0ead0be729ed61d3a82dbdf326dca200155660d996f95195385f51788db2d88188230e26b1a1cc6200135a685bf76bea6c9fa2a04167fa370f89610b76ffd00e5ef920fa17a98baa189959eaf6d3e84b242fbdb545829dca192e4a6078a2a2e6dbe4ec9f237ce9baf505394fc6de243a8198e787d0825850a2829b4d9875032dc32f8104a062f7f69b5da875031d4788d94215f9cfc3d22eb6b9b37dfb261f97088169a930f9f9cd0984cc1449a0f9f98b499f3e113932534122889e3faf049499b272554776a4acad0f9f049c90f3cc5874f515c6a1f3e21f982f4e1d3112a9e8e483d19c1fa3b8f68f5c0e65b55fe4ad133e7ab11a9bf493e7c32b2a4c89e3c4ebeb6b04e10431139323e7c2a72e60472be3e1589c1e8c3a7222a4cf9fa44bb99792071cf9e3b5d9e6835f49edb134d8627da0b2760edb9e0c313b04c7002961156ba7c5d828713da08316ff8e12b1c2b7f3f747a23c4dfd0c98a46c4874e361bb64cf9ca441b9bf7a1539b24da0411d17ce8d4668c09ae1573843e7452e209258450a2a64418361f3a29d105c8ca4c1258923832e703487c4142aaea0ed0874e556dfe3a559101c0874e556008f0a1d3992adab782f2b0132ddb0edf6a1dbcfcf5e874850a0c7f3d74baf2e48d9d6f814062e87425c915da15569cf81b3a5961e26fe8644589ee43a729b41a585e350394bf4e52687f9d64c0fa1b3ac950b372aabe824062e81425f540ee972834b1af60d881267fbb247fbd6b17901645a28b47f7150c2f60bb91f5d7bbe9b5eb036e23c55fefa8d3907400c492225df5ac4b871581d45fb72e1dd64b10f7de6bafb5b701afd0e9ca1beb658bf5a2e4afd7e9728497a82e3c7471218fed6284e5c284e582e6afdb3084dd32e6afd7ec162b60c4cc2d66b6fc60b96061bd009103c8b52e1e3f5fc1f08426a2e0388ee3b826c12b7c3a72646e29d377cc70ae57f8a44404301a92e9e2d1e22b183e31c1faeb77a4b0115872aab816d35e21d4148ddb5c759e3c1f443856e88870a8fc753775947803670a9b2645cc81f2c1a604137fb9cb7197bbf75e0e02af106a8c9ebf3e849620d6748941286979f00aa1ca9c20061195c64844a365077fb814448be35aad56abc5712d22af10ea4c9deaca01e4c53755975fc3cfd275ad56ab23c02bdc818507648028725d1fc8f4fc75cea5c36b6871ad16d7e2c02b8c40990f683499a1830e211d82dc00d562544260623c8141a503d6c4df0f5c38f1d773cd57e8630d0c4e8c081a40fc9d2e115c7c05c320b5bf1f5c1ffe7a17e92be40097bf5ed7755ee7c95ea15392ce03d325828caf6048e476009be5a20924247f0f109dd8f3d7c1201dd785dcaf1ebf8272c6c8f9260ea3d4208c72b87cf92649c4c6c0c4450315fcd14b9080a9e1afffe84009e058e1c35fbf0e44eef9ca23ee71e988695add728eb3de549fe3209c37d527e16feb3a67edb5d23dda470a3630d37534644d317592d78c414263ea7ad23a584c5d8d6aac9ec062ea2ee74d998d289488d2e252e5c6d475de94dd88e1035a6a34a69645a6cef3a62c8240cc148dc91625ea859ee7ebf5eae69794afb8c12b6887061f1279e94760040118166e4c2df3ae98380a570f9f95191e0033821e5cd25b26b0a2ed60454b33c78a272fa46c4c96c46c48aa9eb02db1638322659d58f184ebf8591f69bcd17928637b1d52bf3ceb707e10a469fe6c79bb78ec6881618f6f8141fcb9106a8b2cf345db93abafd2250285a2f2ad976010ff16c86eddba46a81eca6776162283a64b57d07476aa63290a4bd4207e8c1a488f1ff2cb11f87916f167669e4c3dc8d15350c87c069dda6abdd65aadadb49b93d2c948344932cd30733658eb0c032af8bca8ab03385e375b482cd737058fb37b2f93f0129cc5eea0894f7a4c72309020418ec5ee95524af764137dd944bd95c8a04283a419394334924fd1488206884612471874c47d18340b9a1ee305e0a45bd65aa5e440efda4a5b36140e76f0da9b37d6514a37a04314a4b2105040c1c61d0638083c93dd75b7d2d1b5f68216f41e3c9b48ba6fc2be2f089b73cec9ccb3880b5290fd77bdc927bd465525664acb9728f77e5f2c369b1d1d292929d1b26e575856f7c66235aa2a3151248d3a45222b970f35a0a0918e8ea1a206e75f97714477d33aab2091181307b38fae1e3574b0f8c1bc583462245abbebadb51deac3099b58bc986a59731119a7eb6c4a29c531d5bcf4ca01773795f607a249ebbc44dfb5697b15487068c6f78b6fd7b7d398c439283b50b6c029a7137ddf088a3ff80005886f8f44961b2b82215494b006974fc6785bd2bb16d792add6bcf74eaf9b498fa3268e5ebac843bd696c524a83cc0f7f1c05b9ff83abfe5a21a5941e7a3ea4520d9fb5d65a7bf460133f052b8c329ddc3014b5d42751986eae9b7b7b523aa7ac3aa594faa4d39b5d24d8924a2be79c60e83d4f66ee492b6d7a4ac59c32ccba63f6bb31c97a053f9f49e70c1afa06b35c90c88c09ea873eba7ad827babbbb25656f7a0c365f4e1dfced41edf55b2f5f0c7373337373337b5e9db77a8b222fe537a7129679e79c93d2d97f462c55f59f697924ce5ee39e97c4177a3592f8a4062bb40c16abf5f24c06d5707e2c86a60cfc286102b32f187a7f7bceeeeeee7bc31fde4fbf4a57c641d1cc857866db5aeb9167ed71cee98069adb5383e3eb5d6a51521ce26fe193d2c35aa68912b39e9ee596bed9eddddddb4525af983d55a69e83d8df3e67b43b9a900595be6a3f5d1453fbaa2eb32651074b7fab5497c3e78edcd0b3631156f2a14fbbc8671f5bc6f7a1e6cc2bcaf1ba452c423381f2b1dc1f998effdbe586c7a57a7f4ae0dbbebee2a109a48fed45969057b704a4dd4dcf50e700e80aea0af4f19050df6e08e2e386b22195d397a58903a6182645e4bebefe4f4dee144a3d18a2009809c26fa302d3132b3eba5178da233c718bd46ed281f9d4e75d4652cce6ada958d35a538632c766f7b30a37794d22aab1b55fd22a6a62512c51cdccd513316bbb75b5e3d5349d5ad85679127fdb882142c6102d215c0b3e83d8c7e364f66e6193758c4930466666607f02c76734efadddddddddd714e8fdd3de4d9e387449ec1a027452c78dea4b4a885af35c5a4833152d8dd3de73ce12fccfbe8c72a386833a765a2737260fba44717022c13056313f191761cd148fa4f952f9c0558e1e3c0933f2fd237d5289147b3a96229e7dc31a38cd53015b562363c8b5ec3864f7ac74a8582aa2ff4d82905a5ec96de947a9f2c08fd1f340a08d139cfcb039e37af437dd7b67a076cf5b66005a3fc1a05a2233c6fde2038bec126fa4b4a547ca4f45a9d694ef5f1f426649a33a52cfcd1585e7a0dda31dd823ea44bd047d00eea12bc12663d86f47f34966f4ea16b7ae92dabe1e5f3247867dd4350be0ff6c160d4bdaf1bfce1fdfde94267810a2cbbf63c97ae1c33483e796ea74ebb858e9af871fcf01e0405fce8232fa772e8c2ee6e180c9fa4dc0e06658972a6ea61fd2c152432c47439005e3492320ba7524a2927577ba93fa5d27e93b2e7859452ca2cd4b429f52614b489ee0de7d3a189547d7633eda8ccebf9dc209dedf1cc7befa7f7d1d5deb34f99f73109c64412e9a3ed339e488872bdc1a5942e7d4818a54d29db6666af31ca6de7cf0752dfca3e9e514ac13b61e8d2d9ae5dbbc61b63e4273a19a5acc1c3177f28fd508aa28b4973ce3941e997676a24a894e50be74fe7dad383e80483cc6fea963d31bdf3794afde3198cb6edeecffa6765b0eaed4d7ba74cbe75a80f270561b58ea51c3973f385f3999f5dc61b371a4dd9eecd96e18fc8331aa4ff47ac6279056d7ab49fe0537dd2ab3d79d6140ca7c716b49f2d68df61ba397bf6942e0ec19abe7a94d5f032e3598c48d66b1dc201e5fbf8b33bc2f9d5fb0afef09e8277a871e028a5d2d1ec524a7df28cb6ec19faad95bb94de98dccd7476ad5ca44031e6a0b3c6f7c833d741bb5babbbb7d5dd5bbb1677bbbbbb7ba9ca4a297de9e26f71dd995a6dad167c807f8bbb3666e9a56da33a29a564578e96b34b077dcb48cd9793208ddfacceea92d69fb2392bbae142cb6f715706e435563bb179c33b39b06af92286a7e88dba521f2fc8b4a9a47474349bb9c762cd0d4ed9e53c781f9ce47c72dc1556d6ad39aa2aab1a73ddde4dfbe81cc77191d96fecbb9b6b57fa7880b1c4297973f995c47271e4e8799ecb5a27a964556c4ad248d022c54449c59855bb390a4b71146319f2e6e5918f3c1de202434904cb9b2344f4443952e24cf394ccb7cba1a70eb0edd22d159b0fb40f8f3a22be9b7584a546081b5b729d37e365e9d3bb716856d4ea22866aa86613132587560bdf8b8fb62455435c92a0619284cc02c448f5a026de2ff6f3a3ad07aa0f63b51074f3ce7923a56038e7a4ded2ca0f287823f53a299dd4edfba0de6cad9516ecaad788b5c42259c6beeaced6bf58ac326fa2ebdc1c65109d0d127c92a50d127cd2a3dcc127844fcfe050348a52ca3db6725cb5adfbe2dbc78b2965164a299db7aba5f416c1e819ae20ec4df72768ba55f241d36d93b7297cd0f41b3443210d02b14e2fa4f96a3ecbee4b195f39118ea58b43a1fcf2dcf4296e58515e4bafa524a0c55a9a289e950d0535df7572ca5a689ebd8b2dc0507e0be7bcab3878c67977819af90c700009cf79096a9ef32610b8179ef31eb0e7dce90723455b103b3ce71960a47e2e723f611106e019e7135c922f7fac736ee9e4f839ffc149b1049c3b493de74f9c1483897379e4ea399751574c1c1055cfb978ce6514abe7382e309c7bce19c0484e7c218ee7aa73fe23de88cfc562dff77ab974c56804c363787863731e93c590c1904df771ea1ae1f309fae4d98f539708d32fcf7e1cc648d2f5417b8b4e08cc5fb80b108885c980d80f670b0c85c86ff974f9f416b52de29d4124e72eebd33d1910fbb66be76e8142faa975f9c5c5de101706570dcd1c5be244193c4892c88123858f2d556475f192254c15943b5b7eeefc50c3852be870575c3104634c0a6470503246490f228073e5c41d2cc02889836685679ff7e3326890788963684a5c4183870377050b54d25ad4b8e285570de949b1a16b259ec5eff3891c1c158172ce9a414929a5924621298c348b33ebb12854c0b74b5ae7512c12598f3306bc6bc70b84c5998d9570ad0bfce2ccc27e7832cf7ed56bfa767a9d265f99fce97dc13893502ea63f7070646fd8dd5dc433d96cbab8e293945eb72e6d7f34091a6fe462a497a3dd9863c78edda007f732d758cb173153b1d8bd51525168f116a996a66e884cd8348cd4b567aec55a6b22f6abe5fb52e35a27d5ca952b57ae5cb972edd927ad93e8ed36a36e53ea76eb245aab5dd5b06a746a8a6aaa6acaea9946a37da1d13a69ce5a2cca2715f55455d3aad66aadd66aadd65a695e6995662b2dd638309c1d29d1dbad56abd5e8d4d454ad95564af348e7ad93ea6ddeeaaddeeaad65f5566ff5c64871ca274bd7c5a1e8b00ff6c5cbb5aec7a7960ff7bd3cbe5cee7ab9cb7d5ee0e4990b8cadcf9368f8381a5a5c0b8c3ce31c9c3ce3c0489bd160b3747128e46e515fc76f18e9665d82948ad668ede1502a496b4b3ee9978d17d25ac8575c13ac279c25858685c381af385a121a576b2276abe539b45fac9867a7b54ee2eefdbe58cc7d363b3a52a2b44ebab79b8dba59a99b8d72eba45bab5dd5b06a59b54eba53535453555356cf5ea73ae95e2ddf974b13f3ecb656699d646fd6ca5659aa5894e75abda737e75ccd036b1d586b817c64881e4e49e9e8683673e7681c8da3c99172bbdd6e120b9137b55aad268f10d173a7eed49dba53518e944beb58ecd2c24b8b69a0c8f8736e6f6d6ff6666f435fbd7d3a4016e30c9cdccd07cebd94d2ca5d97525abf1788fccbb34e570ece3960a4f9b968bddccb8b7e3cfad1e7d1e7f301c3a777b9f497cbeb99e5e747d693b37266c49ba160a526e55a4dedb08f73b9ba932f8f31c628ebdc930121f29e94c57f79fcf2eebc16e7a22c87917cfccbb387459f34adace61bd9bcbd3a2801ef30e9c8e66dbe9972e615cfb078668767593cd343693ce3234cc4ce4d9e755821c1f2e17c6355638b95a559274ce7aab9fbf301c5644e34dba083efdb3ebdbbf786f54a29c1a0f8fc4b5dc366397c83e2931e9dccd9c49cb3dbddc8841580854ffaadaad6a790aeded16db57edf5259a4c3573c8bee230311cd8750677efa047f44345cd00e19b463d268aef7bef5ed2c87d6a2eadcdf1ae3fe567abfcbfdbdb24a1f48acfdb5bfe93c43ea1db5d6e95cea2b0bafd3d07a589df329ebac8c8bae1d92032fcf28bd609585bce5db99062ddf6e43aee1bb465525864e39593de76439734e9fb19f4e7336f8eab2410a2ef07c2ea38c3c9ba0d7214ddece4ff7229f74cab006c3cbc3fe048300717a1fd4a72c14d2cf8161cb39af8ee3852f482be83e0585f44ff771edb84f3d68c79d4ffb094e3b299585cc85c90d2877dacc4e4629a3944a1ef8a42fb564570eae15c1f0e5f3fdfcfcfc80311abd3e2997b8369df55aae6b79648f1b34e95a92b3e2937ebb8271ce27e793fec97a85e453ba59d19278a167f7e9c0c817a514db1232318b8f039b9e0fe4a1e8a3c7668835f27ce1509e8f2df4b1032371625162f2f1f4a464e68f19f418bc3336cb39ed8b5d7611acdb3353c3041feb98f285b1183b7f4a6faba1c0e6c3e2c0a6c4077eb49de1a1e8cc0cb33f73240ff7d166a68a233e334c08bde41b44980902c6515831a6631ec10a2d2c0c40b60e68adb0c5cc00d9b9c25901866b96c28e10314040a64e77af1d1c80baae33b325e693457719294e193be6f5a4aea302c9715d87fcdaea59ddebbc73c9b96634eafc84e7665dd7e2b86bc16fe2632c869a673bcf62d8bc0589aca285a02e811eee42008b3a21f04014236021090657d684c11286042fcc6126aac072a1c60a2330ae248913e7cc0b6d42d0a2083d4d96a09045921698f8491717685ad816aa08818f9a2a9e78c1a113022f33e0f98096242db851b385093b577ed803d3d32a23449396cc759288cd7121633f42c0504705180c50883b4dec04d1e54d1190882aaeb44471a504374c1ee848f1a283c775af058a44f1012b2d54a172c53645883377c63ce104964ea2ce959f3a3bb4a800c2ab712f1546b87851e74827ef48cb421d33302ae2bc00628a286086b8e1083b6bb27ac0010f1e2a9ea810c212089e181a2e0f31a70d4ccd9c392d98c5704b31191617282a5c39f186ca06cedc4962cb0c2bfc70b5c21129704a7eea64e1cd3577de7bb162a031a1b8d282a64e0e501839c3044586ca0a0e1eabac3c65a4dec86961a1f138082c25b8cd87472e39b7c5b3d2aef57edcba727cfe53639ff7e3b4c5d7258e9ec7a6d33c2cce5e78f4f8222ce15db8b43121466224978f472ffaf1e84a244c80916278f4127e301210cca3e38830d907fb0124f3be0cc464d76b7a17f385d3bb8871f602e6f1050c0c9fde854b172d6445b3fadd08367c2af8867ec01632170eabf175471a3066c4108a050101c98805c5108231e3050d580d17de42e603be2818727d372cc9adc0aba0b380b3716796a85e40319845ddddb1db8833901a74cba378d4fd1d2dc11d4be9dcb205692485af270f34035a8daa2db21783d97376f08467a3cad95de9a495d25a29a5bd43ef40255502caa381b79c5316e962ed38baf8a1a824d26d70eff7c5be6677f249ee2307f3d10c6835aab6c85e0c36b8c045b916d14fcf3ef6f10d1dbe8e7a935f52f6aae0e533e4f351f0fd803f2d642d5cb80b580dd80b1af484f902c60c1831bcc848424feb0f06be18b1a018900c2019403282624142318466c09841e3058d1ab01aeec2652d64e00f48c147c190cf50052fef56e04546dae0ba6412f41c2cb0e1d9987533a216d105dc05185c0c8a6c915135ca8066a0c1d4e0a88f36f062b74177b48106191815617001d1cc8605150c517074041ec9fca8068d1942413280624731601c1d1d2901dde900852f7afd6843e28accd31c137b7c3eafc71a2a0f361b827d1e7b30a1213c5e982b362657ca9cb9c265852b4f3c20ae18b14d3e0be0e860050d95c20a964eca8a132ecfe7e2a3ad4a1e22aa88008b2a447059dfd0475b952b754d95153c3a9f051f6d535378454c0571c37cb28fb6292b533e1b1f6d54f2b4a1f2a6ab42e5cc172a3474457c313edaa838a16ca65cd17ae19b7db44d59d34d3105cc9a292e7820f880f474589f8c276e974f68889a03186ecd47e3a36d8627dded837db4cd40eb9248a9d3c367f4d126050827be78284899d20af3057db44931d27af2c5a6e0a88c58220398cecc37e3a34d0617681c198c54db0783041685ef8343440c6abc117c401f6d31e8e04d7d421f6d31bc40e97c353eda60c802c047db95295a60a4d2e7c2e10e1426f66639a7d1cfb63191841b2cda5aa8194e70850a2ab89192841418b0a20b0a7496c8a2868285a1863b2fd9a6492cf2e0430ea82c516409dbdb961041b4b91963f5c42bc550415a7d01c0f3f4ea9508aa8abcc1e28723acb8481c4105d61014c62cc21834405538bc10814cd4fd6233ac78cd1ec1c3105cd40ed5ced7e2a32dca0a56140b2d1dbed7475bd49124aee0a6be0f8a1956ee74979162ec8e714eafd15f8ce39c55f6ecca4de924f7a4d5b6bd4cb95b9993c5ea6234dfc744e7e4a210f51c9c314646723a45d7c550b66cd91e6ba2783469b5d78b31af5b5d7beec5e82c79527b5b2fcff5faf87f5c3b628dabd2c5ee9e73ce3929a531465aade46e8c31e4a693ebc9f5543a8a7920a594725bdab1f9caa2ce18638c74ce3927ed667ae486cacb48618cf13b82138b5609cd62b3b45a7a6db5557b67ad76ce6ed65aad9db55a3b5f3e7dabadb55a5babb5b5da59ebb4f6564ba7686b6b77cbd9536846b5353cb7b4adb5d6765b5bbbadad94da9e93523aedbd1cc7d56a69e7985eb5d4d66ae784bd780103068c190302922143c6b4de09cdb87446a54183c6bd76d22096523a2995b39947ada5d5820b2297aed95c0ec1ebe4a54e5d1ff0b7dbcbd3eb7c3e7a8cbaa27bdd12978220052042d480bd75a4f4234423f606a7b597ce6ede3befb5f772f6fa749df7de7be7bc97ce79a9fc6931efbdf7de4befa5f64646a2950dec8d107b5894140213b10efa36e87cd23b79af9440f3de7be9f54beda542336a0dcf6d9d73de396fad4340af3dd973524aa9f4cede4b6fe538ceabf7e6a0d4bbcea3d4453b98d702f6e2050cef050c183060310f864b7a1703b25702c9f080aa093b64587b654cc893e1bade0979b5fa8c0a06e1e80c1ade0cd70833ceaa571a345c23d0f02ac75d210bbc2197f5ce021bb7dae8669e0daea10933d70efad467ae11665e5f6b812b07f5ee025ba995b901b21de1428c0f718c40ea33c20af04baa60ca0bd567440b2f278aa31e5c9e97240477c262b129c5cdcf49699a21c9e52d780dc4c83551153015f9426f6856a406cb17fdf45bf5d3f98375e141eaf35ccd110f3685676c9643495b3ef94733191ef8f8c3f9b1c1593462f3cae2936fa415156ce48d6f90518ce451469944783e29457dba07603eea19e4f08557d27a7412fb57bbb25155f100bd6e170ff6eaece261c2cba7dedd71caf6219d773093ea71286807a550d4a1de6b09fd5c69afb4ad7badfbb09ff5a69cf50b7a3cfbe87c1f16fc2e52bc11db2978bf962cba2ab82388c7a4d1fea7e88db1daaad48ea3dd00ed20b4f0f648a3f5d8e9877704f6f084afbec44de7b432cacf0e8535a7ba2ec648413bd89be9b7c3a09ec1503e6c05766ba3fad2dee7a33a835f100f867a9e3cd8ad4b170f139ecee759c17046ea2376b9882e366d9f213012875562922e60181343d1f21c0513db8cdc6c545a7ec94fa5b3d279e366e4d98bdc3821e5d99596a29ed90d98aae71ce4bc1b279ebcccb563d28a7c8b004623397d3478598426bae9f2291bfadb49371251f9ba5cab7b59a75a6553325d79329f38b32e2ef0d4e5cb07c8bba2917dbd0df2b403bd68645d1a68c96e9c3571b13add58e5fc96f17bdc36ffc0d455c72c3c6c5c5451c6f4bd26b895a96304892366d404b9b2460f19168690a10d13db2875be3d323258d0385cd654c7e1f0cca171b8109640e0aecec87062c49e1e5200628a1196ca4811716e5146e8d022c0d364e291b201c49c74f6d04d3c43bce60d59383c51f3c8856277288425102e116f2611b798cf8848f346cecb9674980d57f18cbd860d5fc8556cc5489191988d9c57535500385c55d5495c632bbec9aa1b675dd13a8a8aa5aaae9e398accc2ea2469c544d2bfb0162c9eba62292d1c55c534aa90abae42aeb2e29994629848ba8cc244529de4c444b2af6a32aaa9b4604d5d495955c990abb02a9cf8d37b290322f70469fa09fa0022f7481702c4fe0485dc9f40b820d223f5188d3a8fd1c8e5311abd5eb2b00326fc744f169ef0f4439e085410e94cfd72b28f674084668c0a01623f4623205f34f202a208a884ac59cb6ae8d090000040016316002020140e07040291248bc32c8cd60e140010608e42785a3e16099320886114c5408c3186186280318020459c21b2ad00f6dddbdfd8bb3fdddbbeb3bfbef17d0a2c9933219c2d299862a7f8f719f38ce82db81849d7355fe5b6db94a88f370dd7f54499c6bdb925dcb80a36bf389b3b7036b7b8364e701657e02c4e702d9ce02c8ec05d9ce02e9cc1599c38eeb8308e1f5cd8fd087f5e779df358a07b8e9ba63595de093bba5f96ff0322acc121920b3e7bdb377bd727f6d677f6976ff6ad6fecadefec2d9ff0be534f69689b00c14b324864ae52042e6e40d55f7b357cdc46eae62259bcb7c5565cb3752c8f984a58e3f8d1c70629fdde252a084a5c56214a72187ab2550efe019470020f7ca6150413f3720d73afd1fc2bee5671437a55d54a7215de46a531b3f2f58bf2f8e84d224167a28329779409c1362a419ae2069c5c5b7bbf940d4a8d0c019fe9ddb0fad20a68ab8b8a21878b9f5119fc4da8252ff917f11070cba68731bf3bcea3985c38d1790af8b28c3752d8744f06d66c547c47142739df23b980938780f32a24a8cf2d87215b9d7a6790d0b112182f01e324304642c6c104de8ed11a6f2d0c2a9c30d2fe9d050ce8b277e7d8ff1ed0187959777a409a47a4c38fa29c0c4c604c228c4b643c898c49843189182781f112312601633c0134074664c092588ea170528c6f0141c1be062c8c4f702c898e4dac71898c27817109302611e324301e4ce84d6612f087ba55720cb3a9db5cc3ed0a022e9d859063711dd7df6126a2f31c68c6a2a08333ddeff470aea53d35b0505fa6dbef85773fd701e63260ee75ba0fccb14ebb632185c3bcc6f046cd0e8a53f4c3b229db70ba58af1eede1a072c22f92243bea3ebb1692594ec89cfa772aaa51194621cb66469fcf815b4c50895043708d89ba0875eac90986232428f8982c6f4b271b9806b7e4ebb809a6af624072058bc529289790b9ed650692696d4e5080897b1e345c7eaa20380da88c81e6803e706b0c5b205b560296a78de2a7b66e55b03b49237186cec71f75bb5c83834fc24889cf385df8debe8fa217d8162c0bee6922c360aee2cc8bd7f96d92815497f25f5fda5e38995ec6e8a175002c3ac4b8bdde4690c090bacb1faf18b2273c8cf124572f343544cd8453b7fac08b71b189634f703e3155771d3a0834c547e9b58050e0da7a56085bb530b97260b1f160b170e0b070e0d8f0e058711846b5d53ed55ebe404ac732c920bb58c2cb5a1da27a405aba2b759b0a455bc1684005464c950a2d8d1a1c851a1c8d0a0c850a1c851a16850a1e8d1a0e8d0a1e850a1e8da959d8d405846088b9d389a8a1ef0376c38818df02844dc0688c31c23eecce12fa96f87375029b70108b7202417300437202417300417000437102417102437000a27be7434e3cbc6c03020effe8e7bc7a704a0f576f6c71267ee6d02694fcfc3991cdb183f49c31de5b3f87d027287a43e7e823d5e362f45448e401042be68fcb04a541581da03926b28930fd884a11a34f7dd018e78351499c16a68c92d3c85d5e02b4fa01486e93be2bb67ee3ead08107fe73fc70eec40041085069620f17ce5afcc0783cdc8447d719355df98efda1c8b3c2ebc374abd348fbc382bcded112a3d1cbd8be8194f2b578819d9ec9332b2345847ae1cd9b38f722e64f9274277f18f3185388b3050ba13744b5b80ebea88c694b8752eb555984dd1110ff98f844b2f2f116984a5e6a44e74b98598937a74bc5ee89aeb3c5b94049a5d8204d133f75d285cf424e881f44875a9371e830105250261006c012829d74a662f4d2a3e131ffa55715940d61bdbeeb9f5a5443c26cb35204e50846a7f94f822ea68958ab070827fd4c42126aa7dbdf621c02c27b31361d208e731a8d0a44e434d9137a20359ea8f5e233bd1c5c42aeaebd683104ba709c236062f66ebfed98326342e0bcad9603888dc0cda635e1d60366dab9f3a1459ae711d90d62028e808353f986c614ba1e235209bce848fa8a39d17e8abb6a471af00fa8d3a4b45c03ebffd6e26228a19776fdc90423ac14d980ed56d1041d647ea47030c2863fcffc32e9bdf1e02510b4c72543930a484f96cd5553afb6e04e41218370821b01d8f3ec3c3731f31fe149ad54ecaa8782e8346a36e3e636105e7887ad91e2d8d65f75b5b8487a88fc20c913a98b5ffa17bb0807475f9251652202b48197f441da59873078887d0d0da424aa86ece01166da7bc77df7bbf7f8020db3b2690f49c13ae1d6408968ac8e57f3110cc03f0e24a0eaf873e8cfd129d4a6cf07a1631b1c8c7a3746d08323b55b74fbc6bbb0bd51f2bb28643045351d31be2d5db7f622013f859519563a008f5f4b1fddeb91d047ef63b80899ca563b93d8e81f03863e96e96b2d07bd715d7d498585c8737ec12a7d71cc77f4dcb9143b79973ca06227e42b30ddfabcba8891e61b9faa1a2f60d9d26811dd97b73cba70cac9e3f24000ba8c445318c72ac04492fc6d8680c9379e19d07d6a3468afbe97f05157d73bd1477424ff2b1c5bbf12b0f721727f4e22145bf7e8f4e38e9dceef3da2a943bfcaaddab431421407143050a6c825d87601d49a1ebe573403076dff3ee462c8be3c20acbe4ad19b153adde7b41523936fc73e03369e98bfb68a2a36c89744d03bce13e439466338d9038a0167fe31f3457dc0144e6ad942b18d8354220e417537de578a732fd01ccda5f1e73b8251a5fd4d6904f3001cea041708d580bed7ce5e334b5a13b8dbc9c689ccba917fd8688b8d54f1b01fc8cebf95580514fb83c883f86607b2d8e49d25bf92872809018938b7de0b7b92e7d998aca0470b54658d0877899e19e891d370c030dac5648d117550935628686055898e39840999bec2a1c5eb81f476f2121d8f8e5941f5046b596d75e5f1ebfe18b9c2913d98dba0938efd30192ec180cf1055d6d61d161687b9fb1fec515bd75cc8c641a5d928c6903f4295c8a3cc8798b8c3f5a78b32b696c78ccbef8bcc49567444e3ba711413d3a683d8867567d34d63d7abb7d5da6e2678de19afbaa8356042f76da2b8b0f726289805d8b2ba165fd409d88b23dd59794bf5e5774465b5d894dd8372c4103afe181eff09b514b954a7ba366299236add29c47a42ab5b40cc13fde090b0e708d396c05396892ef0360a98008f4c3d0cada290a0a952e62f24e729300d3cc305dc6dfcd2f15ed7c11e3300bd879d5347172ee1280f9479628f0f75fd9e5303c258c6839d861b6505545702a85f36037c1d29e872c133b7e8ddd5e8140280ebca9c87465365f23515da824fcd594b6cd42516c4c58932a3fc0b9eaf129bc1e1a6620fe42b2f1888e216a4dea9109804c91d19d3ad537a506896dcffaf3e36fd5776d8b77412f875d84baaed511d7658ef7b750bb0d841495d47df2346d82a0ad31dac89b9463ed678ad9c5468a1d8df8f1f790c1164f08d1081f122f8cac2ef894e0100a0c0b2a6f30ac2bfcc823cd8f171305a19defef7b399db60eb7efdd9273f695d628c8e9ec7b0344219d89de4240c1f503c19a624f3dd7fe0832c4481ace63261c1dacc493f942a0b6f5ff2405fb07f693f066c3a92582439e4672b983f73293f3d19d9aac330102c47897176b370cb0b186be0c25036700b4f75248b31f37a73e5336b72eb21e85356b994cd39def5cea271a7722e0b49396ea2570812dce32e2b3568e8e8b69a47125f5f59f72bf7ad8e8ceff09393833c7d7e2bf952efc604c41609c71fd69066da867afa8830ff605d5aa3f0b62c183e59d6344a5cf5e4bb2cb86912e166aa5faabae48bc2281630bc51cccbedebb77884cfb66e59a865d48f861137ecf5cdb09c0998bcbfa87d09be2eeb43f48fcc6561816d118f798d80c9fbcddfa8e01f58691b774158eb0db1c6fe66a796529c581f4c99740b146ec9ba0fe130f5ab7b3e8a2f43e39c2c6e45ca7205e2b99ad47023c680f1eec188e46c3c9a5d1137d31299aafbb83678bff893e07e9a101aecfc1c4e864d9755119216348940b773129be862753b6bc12f4890f5ad307894839f94d854f76b3ac17c8a5de2551a6e4dc41d99d65257b22ddc3be89466795bf82fd1a71f6815250dc0a0ee2c1f590a210ce5c321d935a0418d7baa930a4c51852f1f83fdcac89ba5a15694da4aa678eb9050b515830347d8c0ad7c059f8091349cedba7f66f60412b3686097a1cab2e410e6636249925ba53991bf988858a21d6acb4e20a8433894d9994460102bc7f4d794ed9f9f9f999315face98e51339ce432675a967523afcf317a94d9780df87903363b2a57450f0314c55d76e5237360ea0630c4845f7021bb23071225c0d39a4d1d7f4828cb5372228c0056907c81c8a438425d8c0c9d238dac9a768cb8e8218c427487f516ce93309390c271494c1eb8d68bf496206dbd2dbf2851d445e5f8ef133dd459a9a9cf41e096ad66b28fbd784578a86f811bd7bc39dde2223104cfa56d7b7df0fdcc3a46f0bd1f49696c9bd399ee68d7bddb5ce26f7768ac5ce63ae42428d208635d29ea0080a6f272e02a83671406d2ce8f16a4d206d4954c35b2aed0cdfba05dcddf1af4dab4455cf9c944c5bdd190d46317510d29e2a111735726744cc2355f1ff564e55ca9ac34bbae6f93bc0a405835902762d05e316ceed866837780ecbb93b658ddca4eaf687efa892407241aad45ed084af624248ad7046ec1efa9f52fa798082be58f842d263a18f8f17177cdc19e7cfd1bdade4bf3222f9ee1947eaf4d226badd83e1b170fca3590769c536baec799c636a75f5fa059a6ce615064ec45868651d93362ca7ac1c2d283b7e5983e9b45068e7009a5df7054e31c6db45624e5172d1fedd31bee015364d0babe98249e528f30c8728450d7d37241603565cd29fa03a6af2784a73d87bfac11a5bb0f1cef554ccf8340680750229d38c0a7a7ae1ac32ca23aed39a3d05662b0c6a72dcccb52488171172fdacd14c8c68920a3a217d1a9471a0cf909b208c5842ac59c988850c498b71d6f71d4218657431a94e79be62cb10eac996f2315fa4cc3915662e9860ab5bb40d7265aa542242076928cfba4a61405490eb1e21dfd8d6d01b719cd8e30432a61d4177a7565cce99d5e674c408c591122c6b3e470dd9e414c0bdc2090123c8fa45601035b094c8633c3d18f912ef33999afaa32eb7b9efc5e8fc3a70d5aa4eb8fbdd013643339f8c655eb25fe6807e92d54925d97f5dd947ca687397396796276b34c5303f3338f9fad46041a634c042517fef1478d1123552ffb0ef3b2cfa2f383c59300b0affabfe358addc2fcfeefc49237c585794156f27c2b2617f80e37439590dc261faed854ea1bbf7df3bcc4b6e6601fd7bcc3af1904c75c61092f7c2f5b9e04b783a75a991cb23b36cc52a3b45a73c9996900a48d7b5f6c89b043b83c05ce207fa1c294951a89d1a0ccd9168dd3b78d4aa0b6416428bd222860ee39234d7803cc9ee370e7b1bb70cd5803437de6d02a28ed3785f70108c322a936fce5d0402caa428c04ce10d5d5223c5f05a1d9aaf4a83ec6d71f14526933ca030d26e32072b09b355eb923a6e975490a78ff7d65410c35a04665fd3ad31b91cc6a04988a4686871750da7a4f71ef51ad1a7dd2058a4c60844710ad3514b547dfdd36b12e393201390366e15f47dc054720b4e747d8763f8bf8501fae1d7824f055d1aa4e991e16419c6561dcd5d0e28610c5d7c382b70511769cac1f2f37d7301e38d533611b7fdda21503c03e5a5406569aa8db8739c0b3b39acb02819e5f0f429d4fa32045d3068f0d4dde1cbe524e96455d9627b5263143f5518d2a2a2b54fa505a82cdbf37804dca55164d02e89f2951b4af267f46abaeffa90101bd0788ed9374455ac740560cd898f848e7cc32dd44d6606eed192e06003e29ebbfa697891a8eedbb475e0e54565e81c8d80366005c6c530896096eac9bce956f6abc3a6cb495c71058f9fe6c39c957d46b24d005c4149a4ff84ecf3404ecd07efd3123e6dcde186cde3fc9c6c34a984032b76c81607e9a597b155a0866e6bb04f664766383158b47eb87503b1f7485b948c4bd2904d6ef4c98bc9b5780ca1c42a51cb9a84a67d06294a4c132ec6088936e9e129573722efe680362a81a34970d3a246e83e19522aa5e4db185c2b8ac30f9db871eff952820456986e3e918179c6c0168a3aa2a1cd695ae86e015a40f9472bbb8606300f5e90a0229ee4e9e4f2e28b3a3902ade3f113444cb32f227084ac9bb9142f57c9203ef4877051256c3d36bc4bce09f2a444580b1107ee519b114ec64f4fca4be593d8b030b250f581ccc255132cf03b37dd89b91fc7017c809dfd0107e28f1b5775ab1865bd7fff0008434519e147451f4d4738c1184017a4314892d9919c22861cddf7d6eece056060585c7488ede0adb6bb4a3529ba16c31ae65932aae8d10e702841016823531a13eec7212382633c35dd1cccbb082f723402a44748d7d6c442798d5be4a45c0efd8e10d5d509be90e0fbcc07c2c763582b5626283bcec45ce62711b95228281674709560d15287c4c7a893c54265737b0f029f751a4ee7b3c82570abb4f905c4d22edd82b1d33b7de9d5f0445a43e450039c054bce0bdf9a7410198695fe6ba20c2b2f6de03c32969530f2b9fa1d8a7f68b58f2a0de465eb0b41095f6fc8203f12f19601bdab9ee6ba399b83065ae6cb6bf0e5581da9b2470d7c77c25bb18ffcf6efc68939c360a810038eaf374489bcfdf21915b2cab78846559bf6abd8b005e7594f70a87513a600d4bd3288439a5a62715da687a374b70105af697b865267ea52baeaac1872992e53beae9d4b58860bfc3e89fe71e9430889a8a0d3af92e7a8c26a921a03a217d5a207358d7f4dbd2533942a64c71a4f0f96aa2a49c63e6dbef90f2bb3205e6471adb36a59c13b0095f3f17286735de2e99ec78d310cf3e4b657d6ffc259a5f596c6abc91f8f1b1ba3481365ec3d69e32e8736283474137603d26d39c0d55d3bdca3a22e8818706f49fc90677b0d823503e3db9794f425aca2e81e0b25b50be0f799a91e3c3ee71d3ff063fc0e72aac4b7adbd56fe1715ce2a565c301746eaed70d31c7f26f606de4bf3343a5211daecc345b1d0ea5471f20bc6a7e1661649caa3d88873aa76374c692cabb5fd2672d0d46006e39d6a9157cdf60ac71b23109d66535267d14b934f710f00215f02f41b0ad7684b25b6379f9f94433afa380f30ce2a7de41b856c09c962e05f8bf59d5a9894418c8190c6b1fc666616672ac9e5240bead2a37458e229294a10919e53949e3f86b079a71d2880d012e27a3310c1519771e77d2628f3ab20e4760f0a8696bf394200fdc4ad04bcc57d0c16484a74a0eb99073482b2ddc32ba3e8fbce4831e90b123efb5ea786afd6424ace20a11db3fd953c65b11b3c5085a5bc4a7579554ac2eec93994e7aeab8f256c5078c1c324af34d6836b4a4689705b4569d774114d7a5aa0295f893f94ca15411437b72c88e9b4da78c357012cc7ef333cf7100c225c3aac3c75e6775b7a8bba62a6b49b02939e523f8a7d015f05b5235416b1d9d2faf385ac38e29dd63acce6e8d84b7c8431d39b233464d801914d5efd8928d97119230c8a262c3629c2d50beed86f67afa00243f538f82bdc8ff60c9b99baf211875616168145ed839ccc2491e8634b70fd5134965f90ac78a7af28e3a62ceaba8e19373d9a8be85a1d0236bd5af2b5de5420975de59a44cbff4fbb5436804dd0ee337ff618a16d7242dcb4c48c67457b8c61c176cda422386740541338a867d622b2e326fb981e8415a242978ae31542c78130c58883e617f6afc8724028e380cbf4d8b699508dec471b16b03188cde30fd94ec0b44ba0d53b833d8832cf02b37c1811621c4777819232bed87840857d28b65d0de44406c177db9bc07613fbf49ec863726269274075128003acd9342c326ecdf1e10a3807c40fc4bce32e8b849b38db9f6a09fc64d58b4fcfe4622353db464fa9d480a63a75fa343fe973bd263b3c2db8757cd42675fc69f0878f926a50693579d816ea6dcb673f2bed442340d6d71a1c0ffa3da9b7df1240ecd5d54d935d73793e67ef2ae1f7eeaefed0ea1fa45108a5922f1164e41172e9917ea91a83afb54267d16273e368c531b195eecbdfbf5994fe81fb4cb552d023cd2d49cf7bfd5679b01ea8cd96a935bcf66235c8a5c635300c3b07b498bfe41a0df37919628e7c02cfdcdf0c767c8f7fd5c7c1b65e4cef67feff747d14375679e7d59d72f297ec79fc785ab35f6281aa34680ee88fb44fb9290c1851e8c3b64542ef0c32a8dddbd8152135e48fcf0b3f9fe8f52d928188449993669c5ff357cc9c627dfbe218c8487d8510004ec3c3d79822d224567bf9c52b40739a43d334708ad73f6e682b8d03a5ace18b1d551383fdd2f82e448e4a09c0b33a6e584a6e8eade7ba28b314530faa66e5a2951b466b8d5f459302c9971b9211220a5c916d2a2177a3a696541f456b08f84e843f3cbbe076a4365f51dc3db78e6b8ec806e7d2ba40cdc033d7ac7def3a51c0cb0f97c4713bb1ab5b8ef385f3400591a800d677ea0e5caa5a0989b9d635935cc3b473fa69f8b939d1f04a6276a240d08f88ed7c464e7d1a00a9bca3b8ce664fd423b547cd0234b8d13768663c2d0958d86f7caf1f2697b5d44e13124118d6a27e2d5b0b48c7b05295a3e13149fa710fb08b7f67bc3efe01f5f9cb4a461f3bb80d3cc0c0f647a5692108168b9f045e2ece75398e9679e948af1ff04cc1c8ffe9b1fe8ca208806a0c72458978a60247efde9e568408046d9c73f38db76274e6ddcc91bc5092241b1800cff3d6035fed1c600945d2eb9b7506d229e59b02fcaac1e7c81cdb1114faaec8187760034651162db1c6e2c5070f30e03a6acc5cd4ac82a3a18bb2969e5757fa0857a1e3ed9f93adfd06120b2d8e355b9ff52d843ac1142de9a059bbce5a5950d8ff58e9f0be2a94343586a8243572ffb4a4237430e78b13c09ffb018f196b20e8be6181eaf4a1bd7c550522c85308e0c1ce673295b92c0ee9c80ee67277e35e199aa1cedc00f701f06bd50e40f083ace49428c21f09e96b3cd8e82e606fab16f4426f8baee04de392bec92231285476117077df9316694b7d33afdf18d1a0fae4a58e5835606697d767d67023e08e278817de5f2801ce2d69be8c51898c2570048e833755bc9a17fe2bd8a6c05a5dc468dc11887cbf74508996179e71b8d3bbdb34f5439c31aaa42d07b1ef66b2949c9a3223d90432d6911fc215d24aa69c58efbdc6fe813bb1b3c4f5ca3dfc05f7f4d0f4e0481175f2d6b956bb582ba8dd5087fa4d1afa0222cfbef914fab5b7bfc4fdd25614c5f313264616a5502e269a24aac0b3acbd4aff1109443d72ac2d9d52ace012477f65f2e30f9dc95aaaaa82a3fc4a99627a0e404f31177e248d3522f8b90e3ca317fc3c15c606d5be6306fabd63ce625d4531950d4e431eeb3ccb93875f7e7cd013274977432e9040726ce365c335e57f3c598f6c4fab98fdf7cf063e6511aee3b6f1d88d00247dec3dbad55c37c4af92ac7ea35e9c653bd3561be04d03f0471dd17de105754188d36b8d2a630e9d05c5a5e19c8a174b9413b373e2bc7928a3a77fd6644d26a0bc7b3332ff83bee107f2e6d83e7a0b8519d8b678d27e7942c573ca47e11e9a9ec81093b87e6846317f3c7262c2af640f16ee132cf2f1162757f1d5367025f4766c4d339eaf4e53bcf78e2b965dbd13f83dedbf0d46d53c583561c8d2e0513e28656426322242f652bafd350a02c042f2df6f0dd0ea738ca3e8d88ece24a14066808ce08002028c25295160d86d007f21d47a1420e352851618e3dd055e7b2686172d12f1db18885a8e22a0fb80b4469ff37139415920d8c9ac080b77d7164e7295dbfa42634015e9d5284cbbe7c9d212f8eccafac9dd0bfed5595651fb94e6552aa72eba6f4565c1550e1c9cffdf862d53757ea9ecaa55838b99ac0c62317810328c8826b226d7520d12d4d382f35a2c7234cb545a175fad7142e6f1fcfbaf76bb42efb6f5483481159224dd523f26d2e8833c717d8905bc949691406d95a7fb0a7715db880dd2eab067ef08a0aa2a6e2f73d844620edb51db35699c3062c58474ad8a0cdfb825e4891dd80e310e53bf0d6de10b76ed443b045ba231d0aaa398ec0ec5c5175bb8b8ca089fe187c6e5a1c35c318bbd3832ee2a3bbf1885420748b4c1eb2f08a3b8f51884b043b202627f55976fc247ef3a0d205605a2de8d6dc1608a4a6b599a0923b02990ed91db8d680823d10d683a12d901b8050088f27c8c78d93ba8ef477a515d277f6ab32e326e148dd3f642b56cb65cd3a9a4986af030db7ac46842c0f51970f5b2c5dd0e32508eea4fde06459284af1a65ffe650795fad142d2c6ec679317d3a16fb0dce54bd3e363e593bb75bf56ee9dd67463fb3a7f87f1d744811b5b1098bb97d32b44a01201869acdcde219628f63705a60ee3412af942149ab04200001a2ebc48e8f25019ae984d0509ddd326b603534d58171173b062131a0a76302d338b450d3a2e6662b2a48136854ddeca9edf9adc09e6442cdce5d3dc8f18c4b0e94bdece4a18f005fcd00d291bfaca21c511d266c5c72bd012416d893ef7d00d5c40a92b2024ed8af141d65256283457620d5506fda011c40a2e9c7ee4668126d685c801fa00261aa90d10bc74215a16b01d4c7f0a28359fca13360293493b6aaa6229127f18cac834ea1065ea0dff82986363ec2b19ec7e499c14001ec7670c9ae8a8cc4470fe5156d220a5297a3548ffde3d405399c84424a447fa46003c2bdaa7639cb702d5b3af2fe9c73f59cde1d7fcf5704e74e94c26093f4de7de199fc916fc7e4796c1b12dcf3fd5780604294040ad253f5205dac6cf1307375438152243e4f60a72d0e5070025d6a572b82e51d208dc0e664b14998795e96029c6b1907aa0d01be1c6434b79c8c81e68386d0132e4da63198976e3c2ac87215c45222316a4f90e96d8f4b30005f545af980229b0fa62104e06d7af315f9be1a8fc7651c64d661877d0a45e9acd504e3a7a1702d85a93b64b65f43dd15e34f4c219084243388db990ae2774726d252b71a671b8eccf171b2a5ed5488c945b6f9e0ebe1c0f3e908e1a00f164658a8a593662fdf2aaa756cf9109642c293d7ecc6817047126f4a0f23c42ce900e4dd336795d5d7d28ea26436710a544591aff959b14c9fceed8df163db9d2bfda55aeb4638f9deaa034165c466d5d130dfdcb1a1b72a00ad0c30bf8cd3eeee5c10639750048a144d9a7087386f5d5bec5b976a623831f49fd43fd17575cff79a04ed5a796bf7ba962d95282171d628b82c9a97852953572bb120ca03c253c2f19ae78827fb3f540f02106a9d03c83cac00e1d3365f2ebb9f516ae8ba88579424017d301b1185e728f6cfbf59833129df84f73738c779db74a9aff684d9f8c45276ebeee731481af7063327551614cf4a8f9fe0dc94a576e5f708442b1d2680801d7efa977eefa6b40eba69c964aec7951e949cc292795f5b28f78f0626858f9e227da73faa6b7b9c291d54e293149267e792a00529b83a4f9f791d1564b6448eb1fa944007a22d43193320921dc981ce506f801ec8236e08dddd42d624d7dd79596211dfd94955824db2dff1d55c36a639ccc75f2c562b6f31726c286473ac39c6fa317a8b0ac0d4308905509498724ddc5a29e3254d7d218fdde97c02580334839e5a63c55f150c0ab3d196548444d157c923408de4bd1cb90c579788f12534acac0317261d413f690c96dd2534206e77b26540fb5af5bf4274d7f087aed7f50e51db14eab9ed3935ed58176d0549dd2410258b92730d098bdce4429cb7a3d10bfbbcca45ff84c4352d4f1d385c69f4a677de71f954388c3a5a06f5f5d5291968e0a80f1ed638a97c6fe1c6242e036c28d685c0646064f52075478b57f158e4d1ccfa6c2f12b52eff411306040ea3f954b72a025165846509d319fe605b8972f82a5aed717bc24a0a839ef4da2bd0238a053b8c95c17c4828e57e552357b64fcb104533174cfb6267f9d99d560516cfc06c61bf225c92989a5cd90e9700b7b49579b01574fb722e9d2dcd7d39eb1c82bd11fa2bb6b64b8147ff1ef4d2120600e1fdc80fa1aab1dd35c8a98d99e01df8fd1b346fac7de317db4d622ce63a53bc583af5413c5aaa73ee9f7b03d3ecadfe8a7ad94ab0a15f57c738d19afe35860c7dce47cb71dc353bbc2f3bc0314ea4589802cb1659b8dde8e0ec74e9f714d7ce57d251a0092c20b69c29adb3d3c0524213dbfb2063d7b3837c9e1dcb6d5abd5debcae4d27f99a5f14ba272177e8c37a86aae045ab3d3c92a20d29396d48d716c19ef459a520de9dd7793c94e006bbe7f8af04a6b5dcdc7c7fdfc3d4455562e020d1f24e6318a07a7049a3a19c5cab2a28865f991a43b90841f3de8c566d116048425af8850c8aa0715dc1d547b1ec144fd0eb0346b6862c002b0c8c20c66bccc700c80ea9494c506f9246461359a8f57b69dd49cf3f21bddb92d582a6c20c342fb338a82f33e0a4960ed3ca02873ef1d802a5ef9e55545ea84956c6440a34e86585954c51d84213cd2b4b1d691027bd0beed2fcb0bc7600fb25227957552c3260cb2ad06340e3d05e7f006781080094c64c1b03b1721bc549adbb983000a3243b8b6b524e9ea39cb8d10167ea8b90cb342ac0b60f12acf8695ef5d82308cae2779dd070a46844cf0a383bd2a3059d2eaa296a21dab504237fa22d207093cd2a644988d7ab5dc4b6cd58d50693c4bf191da0ed29704206fb0114a2d8ca4ab9c9202a74a71d70873e867e435d4b0b6b783ba088e518607e08465f0c4e57dfd8ca85235abbe875df64a55ee0ad2764cc83d48d445ec841ff68e4622704969432cebafe114c5d4bdb88eec74490408d6f2bd37f506fc0d790978716b3a0868fbbc9576d2b54b89956dff70cebd1b2fabb4728823fb82643f50fca4d51ac136218f63e63a06c5b527c703eec2608887fd1ae93035645be2c72fc3372ad4e5aacc2aefb9c15516a87e921f5dbf6ccb5d22cbf0b61a3d7ff3fb24e958c98939b5962fffd43a3767964690bea6826f937663bc9936d30ecce8bd269ba91d404230ba7103b1b34f75fcb6559cdabc2a4b4d8f067ae1a38df3bbde8f424d859acd2f9dc65a42b1931208c57180fd4ca96b11f81b75dd106116ce60a5b3feb25cca7e4eff280fa3a998ba197aaebe5c481b10746c506b631868dcac9f6efeed69a12700f40c2af9a34041af4aff81af5e0f39cc488b560d45b0731c34064e7a450303a6171b118ca0e517744c6eb17674fea98629f48f965a41080029d0c4fab73e606f4c0d91820c5b5208260ea1092e6022d11da63991cae14d0f5e92467ad1b3c94f57b5fd544d679f0f3e8ae5194bc2700a1c63e7ea450d1400bdce6744b49dd9846540db90069549680405387066b2ba56f30e47eb65291ccbadd15ea8274f508446a9218f999b080433a118756dd29359e0383999a981471cba279484a45717e992f7031e2cef3de3e3fee8d6abaa8dc5970045a92ce80680b03c35aa5b9002b8f2604630b650e6014e6f3466ca8c12356e63800de2bcb9191209260c94c81ddb938304dd197c44ea263b4a2f4d052b897dba86edd369c990f492c87b91e5fe3eb1084b5ae5916ffe264eaf04f5febe24f6916257e954dbee16e024d27cfc46b1e4e8f73340f47e43ca30a599e68939f5909f2f46e42094d1db3f9591c5265ea334039d50fd3800c108173fcabbc0f74029a44dea8f0529b593ded3f7bf4ef3859e8ffc3fd3a9e528a670fdf587e1aed91fb0add50c5ad6276685e04874e5841a1ceb9b04f9d24e6abdd3dfe370150d30b67da28ce953268fce54547d69e88e2b30b9be0e10b91eb58bbc6587554b019153a57131a1771ad1014ed3c42ee94fbd9a5e9a7ad71ab8d2260ed4bedbdf1c4f560b27ff84f9a2649a6d7195a959b278810c261b362caa1c8e7f5d561aa217910533e6d5f9487a044bbc5d9cde8028174577964162400046c8356643f895fcc9428b17c39f98a287172eec1b4ce4e9c90b43ab201410a1287ed36499a07135bc0b799eeb3b826139789f2866dfd9dd82f9c50e41cc6dbdd4aa54a0534ba87b34d0c9a7c7b6ab965d0cc639b1f8047c202c69aacb80b3c69b5eb880239d1fe93c3f5cef85d1895e71b09c38b78b77f10b2292ac62031ce0354725e114a6995745370c56d9feead3be3e6af6f59279a2b2867dcdeeb252573f1f6bf083d1f4ea13a28028c4b824513cb42f3567715ded974c71b2721bab4db2072afe183ea3ba6b2336a6ff45a55d0272c2065589800f6da09abec0952a9865215923385020f8379c9ffd247cdb4f7d08ced67c804e5186cda75e89d80b3df66e71a679ca8daed03f75d4d499ba357657addc91c7df210ebbc9915f96b09880079b27a2cae8888567457170c8b404082550b29de2aaa94956e1c8372edae774b87ff08057142b4fa98e95394f47f03408f6019bcb983763d80e4d9805d7fc162b2e268b5083f3b317e4069527e7dfb71002ceadab2563796b384f33899c23c20ce92ccd45aea6a609f626bbd00607e0e010ddbad073e186f619e40869eb83bb9569251296297e0a66176413cd374120ad12731242749ccb889fb1f95b039bc329ed5a8b5e1b08a99fc3554d161decdc30c951a1a5e884ee74281733dc41b1423b681b899200a0c151e226543edc00fc783a5ec3cd277f52013a9344fb40b6b4b5a633264e240381199587de174007fa8a7cbb856b86f178747c79840e0ba18676ae510c423595d675d09f6ea121f69a9500ea192aca07fb8ab9d162804593fbca13043067d81c47546379e43aeb4b944fa49e560a612a532eed940fc5af6074f0427d8d4870acd4cfc5028dc049e5304e8ad625d8ecaed0c9a03a7e738119c17a3d5c0bcb02f7f8f29da311e073fb5a6ec204fbd24e27c899ad0502ce09c1a0148c93a12fce0e667cc47a76b62bf794e95a878cae5e8fde9f5b355ecfbaa22042ffaa2e9a1e806e1a99546838c6168aca72a1e73927165f5e33501eabd67e5b62d49bf2310b79d6476c7a963c440805fda1da12b9794eedbd54279e2f9184376b42acb8737bd094bb8ec343406d4bda47dcb9f4b2a83d38901bb5199be40ad0b925d4a9ab621a64b9869de07736d1dee53a84f6e5f4e2c1ad1f8b2b51677aed67c01aaa18243c525f02e77ce4565681d945cd794bff93205925c09f4a87f73441ecc45ee41125397df3a4080c5e3260aaa9d1b91366443154a3ee0303bfe38dcfbd54bf23de8ee6418adf318cc6dc2d35483829624aefa8ca12508f9e66a0ae7512c55d6f3ea9c411e779074ac6e005909f9917bd11e8e50f02793bff017f0f3d851ee71583f18154316535931ac10cdfac55bbb42843788329d421925e97643df51f88a5ca1ff208e595614ee72c80826910c69ad6683c03264d21477c6b14f33271e18c4cc9af49d9a47737dabffe477a7ad16a8d99165a7003fccfd82ab4aac23fc2188b18d4c8384a1371ff0afcc45e74d32466a056345f10cdff78dc0fa52648d19bf22326825921dcb8c5ef0a720775ba3cb4b1c0992f59fe48a3d9cba051cbd76f6d143459b4ec8507dd76f4fe6f44b62cfee7b154e7d86fac42eaa48bea3d8980d16b081639cc805a5d2c48b581ff675e9d4fba45f92df07203de1dac77412ca48469ff69fe265b947c463547dd59c5b1cf9a4ba22142787d984d42aa39ed5fa9e69f8a941f9703cc887f3c2470e2c1545222a0440dbb4903ce06b0660d6d8cda22ad0337d4aaeabff3e32049f5e0f50487eecb958f6b530db6ccc64e0f6553d87e0e1d38fabfcc53c73d8d1c22c23b3ffeb19031c570e44c6033f4e13a169cb0f71a96cd1931b0438818015f727db4f27d552792aa32d4590449bdadb747b8131631e6a62163ca5b50a0a0fc7be4c654ba5ce4cfbd5d41b243004a0745e263e4f6aa4860f69eb0d1673fdd66f00f00b8b63d014bba3c007ee8533a73b2fd92a60efd12a0a71b807fab61b75775bdcb1ab776845b583c248d23bb62df5d7d651b66453751b803177b2088cfeca37606a0fae6360dd611062d81590ea71033e5303d96d0d66883cd8c1c63929f0a030c0ccf740241439816d9f507fd771f226d0e45ad729b090548f3d6fc50616f78d9364cd5815eb23f4e1128cf8a505dfc44004a7ac8489d79202486cddfc15440a237d5901c330d08dd844fd083590bec9748a64302ac6b69c4712dc82374c0234b20976bd8e9b26dd10ca7c77dcc18fc1e42f4cdf8bb3b5074af15daf868a837b0e7aa5fbd8c85487fb2a2bf6e057a5203e308200be7dab2d06591cfb02797cd6ae31d0781e3600e2e4adcf059eb971a3085e857c70468280fecfc8baab5a8474b294fb131dc89016f25d09c066f2ef2a80797c5d27e350e0f3821e7205dd19619b723b08ee64657b2ee9344056ea76e9385620917f00289de5f49702b6638675e1622f8592d638757dba5eb1acf94ac04e9fabc92ab590e054a106be6d186d2a822d53abb95776dbe57e0da4ce159339593f6ed25dadfbe1422be8952bc0fee97b4e3e419b82f469253494ab8e81a7567c5dd5f804ad09a1cb78e8c5ba506dec9de8bc68a291ceb5997cb0bb4d796ec5dbb2747aa9f20b79273db3241342caeb4349c5f63ab3c81930fcabe5cc835aecbdb588b8580a136141af2d21e01c27d6e7dd56781bf227aea3df26edce0c02b9232e92389925a822882de3da55a7342b747cad7a3d9e9544c4ca7c4cb7940e5f4ed34930ad74dd3ec5cd1c12d8d912c808a3385c18cf08948d1f32275a84ddb8e4c1625185d866d8044a18a3a6b6946858b947c641053cc0af6f9058284af9d37d72f44006cb5777428fb32c86c5152db106c2133e2f84960c63440923e3a78b2f158210804d1117b028759fd56b65a5a1d82f80393f6bad061476228db53b845b6ca2f4f5e755dda9546430bb26a4ec4fcd2cb1b108d4c4a6424b6371da96321513b81afd89ba535c54c9657c289d8ac92359ebe3fc4401020e2d8c1e432885bf126c9a49d2e582f8e1989b70e6114411f2afdbc2aa9e518f2061e556a2bece6ed7bc42d990381e56187b88c6d9e6237037aaba34b22927d31c75c4396f21a3205f6c4c95d351643c695e30d2fcd954c643f70addbdbf9da26c388054e8c1b7bfcfd2957bb0d167a3d4a7819874bdfff329f4f70cbf2e6bbf6f39f442d97d58052d2e8d9b509618721d2d3890f064504eeb3b9f762867e9d166d8470ea7233fef9aa2b6cb3d9a05d7985991084d9059c46e79840eba5dd950fe03e22633c60144d1bc692dd04be8f03c106ad8ca3b821bef906bb2c145e239c363e7c643f199eba7e68f1ac1c35f811392a004e019240396355d4a25054d200042dcb0dac8be10c58f5af335b937f1291a8e3dd7cd8261c4f63ddabcc49558ae3b65227a7034aaa51d74f424c3105dfc64766ea10c328b23fbb42e805b812d7a52171a76210bdf45f230220f388b9321fecb33c4076f70e603bff0618167df13f28445902bf532175937ae0e425cc29c31f45ebb31d7ebd2d113ce6a1b192cae66144c69d231001b03b7a05279a08ac548c17e65de67f652ba309f31bdcdbbb09ac2e30d6556f78cd58a0aa56342862df5e2290fd2beae72b07f3e72fde0c571164e0a0fcdfef925bb0867c35263ceefc55e559c5febb997253cd041758da6790cdea5a46a0182f5ec1c7c8220a1afec500ce409961cf585a494e075afd872c3d465a4c1a20e63375a680ed64b0e19bb1dbba89f160f4448236f09b9d9cec4e29e798797fc6d0610edae3901b8f598d73b860f38969abddf0e52374d8a89f31788aaf382da62bd990369ddb59912e05f852231c37770a028173c2fcc3bf9f34f805b35df20ea4d9f750486ce4296d9d51c50970304f3d89e52c01f8f1a7809c370142764680d7744036152a2cfea5bf064c0bab6ee4605280a2f8b7d10e478cfe3bdb7e583397831546fe9bd7f7d9dbb7f90d8e1f208216ced36a41a529aae45fb80a3553dea5f39cc1792ce2a9aeac9437a4bd1b235aaa764fe77f3900278b48a4bc44ae37f21231c20c1f79a5b5243b2f7ef24a74b3b465be4035069cead5d29b224010a3ce847a5a05ec0a99edc6554419db7f83bf2e51a0a463698303696d298a0b309e7768e26040a02b96d1f19d3b554c6371a2b0ff74afb4fadf2bd731426bf05c3e0997c300f2b36c44b84563ead33a25d7ae25e0aa576605bc0914e8382680b329b82e0d0b2a3c47c2624639ef85f2ad7f310cd1b120f0f39ff2e2db6648dfc31a7966f1f703fe6a699310b893ae32df4712c9c71402b86cc578cc68cc7cf98646dd11ee312a91092d19e65a8771bc8edae3a0b1c73c0d9f22c4626287a0447a3e91318eb7fd0930052a071512d81c3b271a6993fdfa485e8529e8ac751121f61f65271c1d5d2b94b51d6966b342a7e5ef1fb2f4808c3d39b39d0127a39747650836a8f73fb0f7b8fbbe5aab4b12e004aafe855abafb53a5bbcc5925f66d8d970ce1bc77ab79326d22a7c72c009e0174ef77dd787304bb89f8612883377757f363ba588cfb676f846893a90f581a4f616bc0244371317540786fdc5d0fed48d7a88f3e65939a291950def77b7942e44fe26f83f4c8878469cc67181d6aef25fa5583005c9f40882237f51a891d4f1d841013a3d70d6e755372f3e6edbaba9aeb7eab086b59c2ad500d78fb5caf1f216207d1786ff7821af60f3b59e863588e801cf1307347c7e9f6a3268bdaf46b577a4a6b1a727f07424b0d215d29c8492fb580e21401fc414928218c2292fedec38a7dd37f545cd90d6635ae25d30c404c7e51a8430b080e20425477c4c4b847e4b25324049f4f8191e7880ad187f8547ca82de6fe31ebd45b997469c84c9af96f8cb8ab87d45d9bb31d195b3a8c9a04ab5c25a6496b92167b792f6067e6de81d4d5ae2461f43b90eec144577f0637065a9b6c661b57e8566528fb9be52219efe12cf5b07a789bc955d5b6edf6d8da164a7c4de391802a1d5edf80a2846edb8362b7cc6a37bf09e61a9085b6485a4fea39b4b38dc8e5359cc42eed406fc628ad57ccc3107c02049b0bb2e41f16685b71d40107c6832b072194fde5f2abb2e0604f7964c60f0e7413aff4b6e4d1aabdbecb19def8a99f68d517895b22091d234c6bdea1ed4d6aef9cbcf98be1c9e13d9af5c921348bb20e583df08c49ddc398c9028bbd9e2981aff6a99685ad32e34de25c9f570afb07b1355b2c7812329d73b08da0f045f82d8badb89068d50f29e173257eb220c809b29d69cb6514d735c7c790e8a0290cbee874325d2579ad8fb9c1b4fa5be9acf98aa8db18b3ed29e734200ceb07b2c9778662122e2faff0aea676daa3ab6ba9c1d1e239975c15db49cf16019257a82ee79dc09e79e870ea8799ec1341cef489f930038cac9060c0d8ed5177c314f294407e42731c7219905b071afb6bb0bb562e09f3ad9bd26dafb5542e34d034d92a45159cee1a841fb3023f526963ea0b33656ca5adb22637fc0b4ce7205644e32aab81d8e0b27343b7324869682c9fc27d2da28421dc92ee60c8adb1d3f82d592661dfc22d4f5baa468c12c36cdd2140603263d0c56b29ff0425b387a7d92e34ab133d192cc48ec2e9be543976c73d95c0a71bc1362ce1081eab010d148e9329f4d2835a648ad834d2b632529fa59fd4a9d254b14da343db1e5f7b5e0d7aeace278601810f0bc8cd9b5dc17346bb45bc0707c9944677d660e7ba84b923fb4793106d6f0edf466ac7274af80844dfe4f9c96b8ed24bdd52416c1842720c8ef5a266c03d2ac67c1729b3887b74d1a2304d8ab1574050f07d71081a214a7419380c75d70ff47caeda5fecad96e86268eb4b1523cc18f6411b784cd488e653824cf232d710589d5661d339b993d7aa6a40b74d62820884a97f0b82e1f97bdec2ba604300e250c4d1e59a927bf7877b8cf689c85a8060109a429549357c13e7ae25fe05631bbab538525aa95fb2313894f735c99879e52e9ad9854a51a986b733440507016578742ac111cc050028a1982790e303ac00df99b12a4cdfbbe93666be1e4844ff179f0fd1fdd3299542039dab2e39cbd89788a138b042ff8e3c51263cb9703eacace241d3dd1477d9101db2c6e9d94432e46e44076a4939ab40dce165c4b15081dc629641188abc921a5cca8a934ba504f57dab0920c86e2849180bcf5d1583e9a08a74e0730808ba9583ff717cf9a4385e22dcf9e29e9f7f18c2ad1fedba613bca27e30d14c195dc546db616300b6284661e7fb9cce0248605f1965350ea64f3a6795d42d00f5f11dc612e588658792752746f15af42ef5b7e24a85154cc32ddcd5b049673debc5f75250355be0e0542a859eac6fa5d71d13110087dd9d388e07a1254e91f11f89fe964d5d85844518c10ec7661f503ce13822780ac4b714765b2fe1fb28f0961d9a8a48909aa311758c400d43b82091b30b15b9813f08d0d7b3531b0bcfea72133abd045236b24aa5f0a2dcf0bca57117c00fa04b4df2700f296294207e595f44b237564092db657ca2d0557e8782473e35808543bb355a8323a7451bcc21a9eaf8791dc4de17880a06265566bdffde9d42f35d971aad1e1bdeafa022ecf26370d22691bc4b6fbe8f5e1d9097a4d76291d4174c27195fafe25a58a09a7c2a88c2f41acc3c47d1c6c9c06daf8f85049d52812c72711e9172ec0fca155d1260f07ecbaa1139068fca3751df070fc46c2f313591223c152552b74ab505ba9a78cbb937f30e9198cc661a828c6ac4e3f17c322dfaf0f9a52e3aa2b0a573b496f0480f8d0f9323309e257b2300b7f3aedb431f9c410683488ce1245252c829992263e9cb58df97965856a7c597985e6ff87df234cb40c22193e0544072b29038781e2a56df333c22890143247627cf4ddd6268562304ce77d9aa24f33ee040f1616bc4305b178c6544b13208297875a730af8173b4ad24b0237fef7b4665b438a39e98b43d2d3dbc086d269925d968000dc59221c6c3dcc34255a3e26e801cbb1c89423ba6e133c5b0578d0146fc9ed2820f107fad10192e3326a7d0881ef3a02499514923c06a4b974ddfc6d59fe9678b03949f9f84f74db61e34f2044b7e6aa50925f81b477efc411b76136bb9732b3828e5094b04fd955d0ddc0f21277047d2a528280140b67e10917e80606004e703f5586645e8d4b342363cf2d41e72184d8c71c38ad112fe83cbc66e0a9c9d558e37d41246fcf9022b03b8ae5be435248bbc5417ee359b286d84a5d4a2a835db8432ef664c720ca2b477ca8be3d26291f9dd56245a5c14c153f9abe0c4ae1a55e7488088d53a0a868528a60593e57668b80bedcf6accf1bde23891ab4192e0889c1382130d97fb4238fd4142527dcd5a64183eb7c2ea2970412d49d0b404ef1fa44fe9d95c1a1005b30ea3466d118ae3e8eba473cc820cbf4686971539d6ae85cefb76ce3a9f1feafba98312988573a2c05568cabebd1f6b816036419a03f7f11225aa91a6fce6931b45e8f374c562ed41790ff406a79820f0a7960709851bdeabded8c93c5ea8208335d7142c3c03ce95f046491cf4ac4fc6411336511e0594eb8f9bd23e874fa98c8d94795f496316b2b7301cf16a24914005e0438349e7b790295e3f2b55d6b5b74e2c196f88fed4c50001a9d8f88dec4bd66d797c77dff45a0db1f8a6158e49689b2e4977358d2cb4c70b8e0fc022f35119dba903c6ca191fd82c7cda890437fca12b59180da94137e4d7181482c63ca67dd4f55c2763e04a608bcd7050554a416ea699ed5389634da909c9c53b8401f382e72d2831879dea141f2b9f33cc36745d7b9988d0ea724f26318a7695c7e5ff14ddd23080ca03b42ae1b6070815bf778c736a29a8de6560178ae7e5084cc799f957750fb392bbf985aaab395e9bea8dc238bf58b7bc9ce5d418a0e7f732d6afb24d30b59331680fed0b243654b6d25ec78e9f02441fd4768b687554c2472ac0845830d9faed968f3de6480e2d3d0cd22e844691fbd8b90a1877768f12234ece7a05d598ef0506666794b83ae06e9fac74f71ed38045bd75c6b9024c1850f7b8a7d18fc2b3a49870b25cdfcaf807f7f11fa5237125c4772bcf78aff1fc5e661234abcdf9be07c1cbf52b30335d2e721b7c3a5e39b9d65f49be04dcd0a4ef83b52de62ead3c8d0f7133a50c9bd6906552b49b8109cae23d178e21d05318f99bac66638fc2949e2a20d09052ee8c85037a369f002e8e13fc63e69c99920c3f60823394c80437cec8e24570228c6d5350e8978cf016098002a5757056eb3c100247f05c9947c2e89e1cf44e53947a9e3450074f9a085a69a1f6c3b0d00c1a55b4e7c66233e963b15c1f6ff93585f4b6cee2b3e6b6eb652f7549913f52f32c79ad41ee45585966825b9168ef4b9252713dd7cabed7026a103e1ad19628aba67aa6e9398c7d8d710bb817fef27a9c9eae653afa06ac595fdec4808de124a815e1ff2bf9806c72e761b05bc2d53428a607d6fd046ef714053e6d7e92dd86ecb7e71babdda6d573f9b6e71be41d7200739fe2a0653ca7d9ba36e4b9be3364226c6534b5dcdf445c3898199017f606981ea585a5cd103805000244c920e30a8416750813d38711677d057c4b6e730fa17d041377290848641a287a03e7fcfe3432b03c116eeedd784e0d4afd9104b8db15fb1242468ca95920b7b89380ce84eaf4dcac971507ce3be6d08eab97c464049d51701ead83d7c949f2acaa74d079580864d0c242fcbf042eac8e753df71d22c454dfb1ce338b4462024a7182b8bcbd2910d7f352b25682a292fbd28c654545aa6fe6d9affe96ef066541fe781b850e1778d064369418a17f5fbed22cc2d4a3cd281f210cb0d476a7dc915837fe455175908002d388dff52baa5368b50d804418e2e5c1649a04b102386018e0ca00468bc6c06faad1e844592e76073e36365e37fa30652030383af9ddfd242e5dbc1e351a99021f82297a7ff80343626e8426c2e91d2b19423fefabf76c9734e662ccf22772c9e7fec75d91ad65bb0d30c6f04f78d3227e419bafd26f24083e03c8f60dc7c028278abfcfa307f8ed1dce4fd1afe6e66babd2429f6d189b9564b1188b6bc50c604c296334e3657de81e4a06b98c881b545ec4e18344260ddfec8aec72c47191603b3b21152f75a746f110e535668c587261803c73113dc557400f2b87229af96c09a7a0c0971e683e7e468abfd5893879940013b3bc35104bb58ae0639e9e4eeb3d358c01c5c9364f68ed39952c4d435b2227e3a54009c00d2690d9bdd20140f880c79bf3c961d8b0efa64e8d6077f8bbb6c1018390a839e1d657d07a4e60f67c84b132554ef18c10240159ec3893e06ceb9d2c0818daaa971e05ba80d6777c432fd440102a829166ec5667a3dffb9863f1dbe37fa2e9c95f6f61e525e7b001c80013f8da00ff5a6b3455db6a8152533062caeb5a23de01a586a00b7202d103598dc5ba7291d10594f1623ba3f7c41c854a3b08a3d822bfda76df662311501aef7b08fa8777fa81e451cd1a90da16a18effe40b32170b0a5f88ec646163e2ff3bcca15e9e343fb87a092e2a87abed317f394876df986ac7ec79ed54da18fba891d2e88e59488a92f05f389bde94d74b7f5eabf021a9c23035c0aae82d9a2465fb91b2b1127bb4dda3d9dd86751569053c5b768ed18949e45d31b25dee356b9adf443cdf7951c64f48463d85422e60a1b86bcac8a2ae8bcf4c4ca52c3d6b86eb89184622d2f1f9e590e4c00a13765a2ca06a60a2038f88382a19a95ba92d7d46c58e34ed0d1bc2d5f90cd8fc8737410b707bfb89bf2ab12077c881e158980655047cd8c539eaaf851c77cd6f9472177aefb472a8327114c70c41966e92b6c1bbb37ce91b27ef4511826cd6c0703b20ffd4a15033ea77a1213c21954e5ce55a844808df70076bbf33173e493935c4e0ca56ca23fe17888ec4dc284649ae9be0a4cfdfb0d6337229ee06c44b614661e53709860e5fefee04564d1085e57f08b12c4c6054ac9aa82788c2252ca6d95e8c1c69b96a36734416c980420b463cdddfe226c1ec3ba980ab076584056d8ee49d43aee60f809a99b9360f9569804d0333bff96bd728630b9a7dd148994e759d3380ed44875e74e79caf47c6b904a2ef12c40aca657b963a8671e0ffa2e03b8e125ac842aa53bd233d334a1daa5572b2462e5bc41b69206044a447bc3143efec93497bde8e30966488096effa2bd7a1483cc4ec92018ccb8e04680c84980a1e403da0f120b61ae42d49344971e3311487a6410f061a28c952cf7508307e751ea05a73dbda86edd028c4bc55edc163297e2c10d8292c4433b4a08e8fd0a0917cf9c59fbab5f23e7eb9156a7623791424201b05fe4b364af5c8f8c13e3a8afc92ecb80c7a97e2fbc04a16b8df4ee050548ca22bb6f9d8b1b38d80563dc116ba11096b85dca78cf38bebd086d071d93ec1420e6152718fa6735503c5b19b0cf2a4ecb1deb4a580011980bb0ef4b2b84e903e410f444b9bed2d3ecc15b8dfd5129301ccf18c4f658cf416a7c09760bd4e99f97f971ef4bc6c5ed67f61bb40caf570883c36c9e04b8cbc693006625caacc6bd7e168809db1ebae634e0773268c7af85447268336180cbbe36fc4ff9806f3a9d35255ccd24ef9e35030ca9297aaef59aa784e3bef5464a0b02a3bd3ab97616c893ecfa102cfd3734f9172c30df75b7444d4fc999c3bcfb0a98c7c9d2c926b36f8e24037400a1cd57ad74bf9212da4bd419d6c4f8b896a2abd4fcf61347b3399fdcd372e29ffd7dc28177a8dd5d85a550d0e45fc708317204110aa4d89485ef477dec715804529dbd743ee29b4c78f6f645e5e1f5c599a071044599d12fddacb81a9941a2f10edb1a10bfba667601e36aa081eb7ab9296c8f208efcc08ccc8e4afd26e583751945dc2698ca05e395174ad64edb416b3b44922d4c5e6bbd311979356886ca21080c7909e35741596e360f5bea7e8afc8e471001937c90a29a6a3180f58b432c3443e2ba45aa01592b0252fa576536f68653a6ad2998b689cb0ac93f7b8093e01058a4ee92c4f3c37b9d3a13d6ab970db7117a5b65491da9467ed13acfc866f7a1c8f5d3ce650bb8a9e5efda15822f0e37ca13b311493bf51e798d0ffe036aec66ac0f5a8b0a9d67228bc038213a641573865be9e0d62562268179bf88d3229bd98142db54bc70ed79885741d28849b8379cab6808bf133937ad8f679d77a29afd4ffbdd867406703ab53f85eb24bf1dfe0094dab9984ccaa7ca1a6ceea7ada7ec3beba95444b32ceb846a3a7aefcd74165b6c65d33c1d8807f8943fe0b2fa78fa42028945b26b8544f4973e5a1c1eb16437a59b828aa14bfbf245ec925df9f726e71f5f96cd3b00941a23be1671f14f2d63fff6fa1f1fb594e8e13477d7a30e335d7cf674fbe78e47b64bf2ce569477af5e00ce54dadff1ca5c4d444810c5819e20fa4535167674fb332e5d2c3f5d169613a1874063cc97a4529d0559c3eb090cfd00cf51d18ba47290d7c0cbd4af3e842e90b060669b0bfd52c11a5905393018a4b474371e6bef4278ad5ea74f1b60167c6495cf0cd65cd562fc8877c22aed757f02d79a49a1c57be0ee91f1c3b4b3cdf8306f4e6cc50e8b1bdc856063c7c911c660818cdd53b2020927f0069d3cf12b3ba3bfde781d12a94bac7475c7472cb7bae58baada8f99f0b6c8161fdb818eeb9eabf43c871d312942ae2c1fb50d8704a32008caf7ac30cedd97ce58937a6949671554a3d629cf276ee3f9b9725899b2afd6a9489f24c8250247873faa1016e78817d144e78a7c7d08c7438c1a7d749d47a8caff3b63760300123f4824b0507cffbdc3844d7c612fd28cf97911f71b6276f8e43e245c6c1d903bb1502ed52a8c2f2c91c1d52d89e46e6377eba971b93d73df01c1ffd870ebdcf63214daf9c12bf610bf48f5b0ed4c7125c7d0dbf33c8c050c0eab279dd4843f76cc6a6b93be2016b1109133ae2072cab3294a8c2ac6851ce3614309bb8c379ce680847addfd8e020ad23332e21d40d588133968010dd052a411518198a15c19f95bd2008dfa045881f711e15af6c4ce618feafc70d740f21a7a4e94d38062f34654c6bcdd64ed9727a149a0fd7164cea8b4ef17b6d0ce0a2641e4c8eb3aa25381e453594f39cc750d90e1af150629de0ac04f7fa6fea98c36650e2ec6f1b724b1fc572540ac58d8b87c5d94f04137d87dfd1d472bd5b62968c5f1a8b1c9492c720b71542d349019e4d689223839f8c12fccca2feb6fe4c5b2dc7a739c1161c79f4fe7e4afce47f20ca3bb6d019cb80d02a3ffe7c0e70a5e8c325caee424580c4f174bb6584461360a0cc4b9d158ec0b0e0cefee94512d8a965cc33283322d8c89b8424ff22a2f7bfc06e67981e7b7a70d1cacfa3c0263388b88b149685d291f0925378a0e1f124e864e5f1549cbfbb3a8f2efcc12a2975da380f1ce9c52d0eb7880c660af0f923b413b33c4eb8104acbb06332f2586284efafe455ac1ba3ee8e1199bcc3be39ce45f2a8ce8c2e49f49e9060b1d807ec6b59166d51d31b84deb4fca71a4d34a29ad4762cd923c6b8be456ec1c5b0fdd426aad17f1090783c7a6dcc3dfd3f6fa7ce047c96f951b62da412d5add6cfac88d1b7b520fa4901081f9631dc322330e2e1f01378be9d2090400766d4b7f86646d0b8229be34e3ec7f1d852b14d77fb8d5e92185f8aba38a57b458609d16b60ef4d9e5ec1f8e882636cee80ce9c58d95019e1d1c299354727a26f1b25a1f64a6a7c538676e1901195ca5202b6c9fd615b07fa482c6a6cb6f3edfd8202ceff441d91e166a5bc946708001ba5a35a76d898358329d726545360af5367b39f13b6c03f3c9e744a67961ff9ea72529ba01f56994c05dc72d7e3891c267128ad8cca8898af4bf6ae053b99096b87223af80007e1b3f667e02ff994938759548eebb6f3378a4dfe41854951c4c0f200a540dd8f35d243636e444068f5e4f518c7d3bf2d8cd4a8bbab2aef81a5d44447ffd8a454be07a6d4959efee55d149ae4fe5a6072ec51c8abd87ed9266e255c3e232d67ee2586284cfa7416ff1f70aeac8cebd8652503ee038608b7e70d7c43e5ea82c0d9dadb1f8a84b92798e2712541b5506dda7dd3662368c1e6a13fd452c4c41a620f6eafc90ef98cf98771535abc667541cfae73ecf7fdace3c47d295f18f94af8698c1d2dffa0a8fe06517f6cdb7fdc1be43a428534f5585b9efb09a25d7b5f2014ed73236c37baed09493030fee2dc9acb0f0a829c1a5977f91f5cdca10b77b03fc76c3c7b19af8b448a8419c32abd2154981a1976291a25ba7f1c530d7ae6e3aa336ef8436a037aeb57813b45de68dcacfc47f4e99bc9c5b7b9d342ba5d95ede08ebfbf863666e907713389da5405c47af288a9234f9e12e42009346de85380c38c282aff781e56ca97582e2e7fa0ed8ab096973a66a13c4a496be5e502cc28166fdba8ada5ea0f56850ed7b2ae6228acea4161e4d5fe5b7f945e7bd36dfa146f9052dfc9ba1c5f66eae5a69cce3819c7b3a1f9b92f6ece86e9e777b0d4eca152008d09a07db4144d7a4564ae684bbf3c63340edaae033ea78470cf345cb5083310eaec666be1d3447750f4f389b59bdc158da65fd83aad5e1086d0a0e96f478656fc4de58f92a8f5121f5306661e03e092041d509a7e2c2a1277ecd18d4acfb154b4a16d18a6f84016f34e192b7bc48ba7c07404048b1ec4e035f5f79f9b963f772f25646f85575d62a0d1244006bd120676c31d79d9a052602fa43296e6f1642182d09c37caae8d7cd917973b8fc0ca0433357647e87d60c7ab4e044acf4ed0fbf6b5d54cac7cbccbd5d8aa08cd28bc49c2777100be1efb06a6a5c0cffe2ab4ead6a3c5fb5ee6c4c03aca11c4a83a8a3fa80da429035011caad7df8f9dbabbf2af2be3149d41116a2d193100448019a22ed385a601895490775ff3abddc10db0658cb663f7746f1eae0cd6799c2de4d798d6abed529a4b218209bb2f9cfdc2d421ec9e21ddef83b6df1f934ebaae978eecce91170fcada81dc5c8a4e41ea19dfc823ed98e9bc8bde59644a624656f0378037f033bccb56b5ad5407885bd8835e44227a067f7f9fe79f65adf7b85ff4285ef42851fe251753e4a7d7f52f94ff04b2a14e12afcad3ea00fa9f2b54aaaa3a73544c706589fd55785122481f5587d3d90f9956a433ba0eb095334d475f5ada66d990b25ed6f3e7032b06644c3beedc0b54ccf744ddbd490e0122904f1ec288a937614c900109e1e3c3eba6904ff01751866a76688a7c543c40066a1803d59c0f97b629fceb628e7d9537ab2d0fa947f3d59d879e8146501365cf4ae9ee0ae65022f0f61f5878267a9fd79c7ee77c5fc359af19e6db9ac0ce8f3db2b8d7ef19e467fb4b76d0bdcc216a06db95e5a18d0e56565b475697e3e056e646544873ee3b58d3ee8eeee67afcbfc5177c78bf9e2c8ccddd21f777e3924b9cc1f59aed9a347eeeeee765a849aa2973c38755946268eda04df3e73d4e0481b4ebd22d4c87cbbdca1e1104991f962be9899616ceee6eebe387277777777777773641477777777b74b1f563d1dd98adcdddddddd3da365022f28985d5aae677bd95baebf1c7e94e1d40dc6c19d0381b3d1d2e8bf2c9ce1ae474dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb3bc6eed83176777777778f04f1801f3f3c39a78e3b89fce04483027ee0f040c00fbed183100f043a00c7f0b0d8f0c326c68f0ab47c7858fce0e95690a9f35cb201ee4a9b564d9b2297103be0ee9c7fe38e7eb9f130e605c646cc43b7516483e8a1bd906546fe2eb3a047bf9ca55de64bcb3d0a060c4181cdca0588c00a010e7eecc043568319e8d8f9a10920085ab1d318e814210777c738a238b863db3760582820b8e754dac81f4edd581365c043849f148c35ad82b929c1b3a3a0a3200f4e3d56411e64582cd60570a8f0ec32875526d8e50eab9c5df6d07a76c9c3a99267974038f57a7e7c648b5983c10fbba655f1464dc9c71b2c73e379cbc18b085e70831d4ec08419e8a04701410c01033c00e187130461c57e22e183bb277ae2540f9d9e894ed2c607ce67cdb4993cd8670efbd0cf883620e0ae8d98bf2ef367ab588657d89b77e0fcafb4797669c32e79b0cb1c76a933754a3c947d004f80cacf3d9d91bb47b1995d72149b193eec5f18c21f946e4fe7de7bf9b98caefa6cbdbcd3d21f5f9417c59e7d48975a6424aeb79f312e954648126cb7c79d0c3230c604ff80ea5f8a07d03344018c649001b852cc183209a87a5ce2bf07804bca4b7647140e4f9060d04c847812e6c607a726771cd4421d846695c55dc9def8a52da38e69986798d3913f0d87cc967cb38fbbd2fb52bd31a506dc8d3620e922eea411889ee4d0352739cca1ddc4c2128b32d91a2627b926d3c83ecd85e623676994123fa928d7d54197d3eb6a21eea48f380b673d424fe9bbbce4582d6d9c6fdcc65d96611e82d5127663d45c5c25268e55cd23cbbb8807a2c8e24ee65052e22f2bac6a4e49eacde643431bf5878315a683d326f9d4aad45c5c8e89d81cda4d1c150305c55f562c5d027da4b68febc24f9b873b096bbcac48fc3d4e655c7ddc6d09c8ac8e185f9970a08ee930591b372939e0464ee2d8cbbb4020f3ccea20b9a1d476137551644908493f27f5ad688d8fd5f724f5ad747838f5687cd632cc599862f6beacf00077dbe7a5f4f6e1d46d1fdfe214f7d3a41e2a6d1f6f8571cec2eda355cde215e9b2dbc724b568698089476fc0c97b8508a4df66491c597d8f510ca31886398679c9b31a011e7a1998977ce8e38bd2d04f24e0bc8a7f3d47207a0a499cdd3c7297f9ac344413b8cc5fe69b9d2e7f75207d9671231cc76d1b29846a9e79734eb110cc4918adecd3a417219554af43d2e61bf54903eec69796c442409f39ff48cf38cf4e64d9d0b78a7f78e5722029f4976ff6facb7be2a573957df8f252bd3af0d0334964c580e8241615c3c4e426feb27a5a0eed271615e35483c44fd6069cb142076656379abfac589885a949bda11ee22492d30de336cf387b4bce7956a21cf5f9d4d268a2a7e26d74ab97621ca239c9e1ea699a53148c388201353bb923d5c81d634dc4039024158572e8811b3e6e645635268e0b72d8ac6c98c440e1c7aac449fc65e517e06e13bdf412067a6c95d5e958bd9ca4be9569c6a813c229a0409f0a85a3518f463d1a8d4623209ce90077e10c1ce1b765cbc89ee1d46315d451d3345dc32a13bd83555ce3744ef7186a1ff047764433a28e66625a05676654b417247c642fb37e24a394231c231aee18c74cb433256e8ff012f55d97f9ed231ccef008470b9553c8665242621af127c4a952104e5d9c3ffe1daec7439c7f0e77e4e0689ec31b354efca150fc11019d7e38203e9ddf938a0122fcf9f4175c0891e2cf67a08105cb888a921e7dbe0a3dd5e8635223500caad154e3488d433512c522ae8e60b86347d50853630c773335e670c73d78853dd2b003993dcc9d8973dac1e5c0f1ec226ae3a83dc31dbbad4d539b476d1c176ae784a8dd23a5b64e073656c8e36f6c814f03da4ba3bf05127ddb1ba5bf96eb695cce5ebaba44e2eef47a6e108337d5a0012dc4fc9b3875c39331b2d6e5b9470bace7cf4290671f0f74fc6084c72028f2e1ddeb299279699a11be75696fe89c2209ac9f536b69e1027e663de5e7f4371a6111ab11783c2f63e49a63588c913b085f77d6dd4f68714045f3f2f4d07cd402c55dc03729a9f063a89086bbe9264f6b6977016144c52ad4f80f383f1db6de4a853aa50e1fdaccd9f01f8aecbed011129c314d28d38a028f1ab89ac1298e194ead74071dc5a9378470e58a704b290e7c914e5c7bfbc9c9db9a42f8c05d8eb327eee62a06dc7519fdc9a5dfee670f139f283e4f7cfa631a52fca6e8aebf606a5375ba49a1c5fad931387c01c8e0939b02eb07a14b061b4e7b317a18979f9c420d879397d070eae4d35ba05015dfb417a3a7b5b44031e1289c9e70ead98a676e020637e199a3a82c60c0cd0080a370eaf184bd00b027509c38e1fe2766b45cbf622f0c76c58475e95fb12818fe2beebf82e234e586eb2780e26d9dbbe92d2ee053ef6c0d1ee02e15fc55f39b534771e81d4b38e7251f11f1125c898a82317f7312e74a94c29f4e794767fad3a26d813d1e8ac9dd6c89ce61986715e270373d5698f3504c7f5ae69dd5598ade2ec255dc844695185b445499d1dd6ead0c113edf8eb030e6a38850f109a18aa622c2b65c8fe236bbb026cb69bd2041a6c31ed3a10eab60980e7b60d5e3990e814cd4cfd703b4f3d36110ab7835adcf00f84ce1a377612d8d7e1457407bb577b6bbbddc0bf69e5cb0d743d8dba5d89b02f56a3c55127726f6dd11c94b5037643320ccac0cce542fc4f9e923f5d599829f01052f800a93e2042f4385b9b9902600152685bd11a928ceb6a5d1bf41ad05e6a34af290faae0e8f27fae9e4407093463fe514769a90a40419904087c703a73f95696530abe3ee0af4a9dca8f3f2555486c91831463b89a9d6387974925ac3c4db318a6114c3b06d0507b8db3344396638455363d33934bc80bb4d24332ca8b543b16c85e57012e3b6d51b1fc3b25849bcaba994038a9b2c2a46bbc94d7d12a3bfacb6a1a12192fa5658c939e76ea35816b26d35c4af3aa21d12828578ac6fa575889f540b9cbc1da55ac0c4a3d39052893ba449adb520000f605837449c6aa22ceee0d46d1f9ab138a57a40f0488f302d2cbcf418c32a1856d2a34cd14b8f385855b4921e6938f57a5aad97a8971e7370eaf51c21e8a5471eed43f3010cddba3b1d912864989292921253524ad40b9f84b3cb11feb4172ef8d5d9cb5998442de15925e12c5da2c22751df8fa82d9de2ac41cf80b893598b3b99fd00e14ef2bcd74432e86a327324c8d0481d71ea8f3ab5cedd95c2dde5a6aafd7027832e1a4edd260ac2a9a7822d08228724d1c5ba60ae1b97cc858353afe709392ffd9ae1540dab7a5543ab56b8f418d3aa7729f454907c20f93c143f38192485e0e673c291c7dd88539f59e1d31f0a84533d48a73bac72da83290ed31d19106a53723a9d4e4e6338c55910a7a04ec66a15273d93c966a463415a854241414139f1c727278e7212243db2a4c718e9b08e38ca4907dcc55a58ab555a8e8abdd34484bd9c6d557b4feff69e442a854de9032615715a5f1eb212600c22ced2a6c79dc959f8b68e4962ad11701723f9dc26ead6e91de9f392e4c32b92e6907c48add6a1222f78c9654ec9542fe94d5e2a955e1e66222ee2a67a557a873bd93adc49af1a6b07ee72112011275586d4377f417d8b97fb9167822f0f457cba90aa8623c52fd7645821ec8d9a3f2d8586140f7b009199e1b8118e7308af0dc8cda799b6adc59c9b9be60c3199a6c9b65c1f1242c2b9a942df6a0847d2dced1ec5deacde4ce8a59feaa5375eba49bdf34beacd7e5e7a0d1586c559f88a0a630057e15f610ae039fe692d725e3a0b16bc01eacdd5582f5d455dc117a0dedc167af94a76d6f7a66d9ab629b302c5b9c9331c9cba3288c4995430052d4c0823c28a58c56530590ca7445ecf1272bcf44c668655bd922e835aa5c2650d2e5d12b58a8533cb201f709c5f4de6a55f19f4d334c3aa0adc4d81016141586bd5036efac55a513a102a008d8cc0b89e3432e273ce6b83ebf1be396dd2859b9b7cd6cd4d15e2c018666b2db639dd5481df26e5e6b67126f823ced5e9a64a452a898fd01ae22a6a0d41007915cea2c2dc08e15754989bd7e3049957a1d99617ef317b00eea493d817ef218b8c3643e9a474524aa9d308f010e6d3a793a0066d809b43684d1eb99b269bc203ee62addfb8202d4ebde730218ef352a9b4b9c95f6c6eb2b35ef8d3542f74ce454666a9b27087b538755960405810a71e675970276d80d035d276b956effcfb2ecfea6371004ebd9721242f3330fc2108fa546e647be35331c3a5e5caeca540ffc8b12e3e1f1fa3238053d3a3dba0e255748f378c52dee42ede138d6eb9a203f17876d016e82d17116eb0f3dbf317a3255df4aa14be8a21a8242b97ab633d0c959a9991040073140020280c068703a2b1382408c663daee03140009a7a4545e3e13c8931c8921c41862100000000200210000001098291101b3032d1367370c7f21690c22840dfca51f5e333770f2ea7156d7c5a74784fd4592872e9b229e4fece3c48ad2d711cd9004e4a0842c36bc290b9d99a0fe0ed6decad09d3d864a49c7406ffd42f33691bc66e9c097d71a6a6e131548f2f226a2560f0cbdb9f463a9c3730b158a7ac860d35ced69f62822d6dbf84b44f01731a17f799d13864a685cd19e2e4bfd6b4d3030a907506e2c344427360caedc712dd24cf3f9f2c20b3c1317825816e3966272aa5f6b24381182f3ef1d4fe0d5752df202c9de5cc45dfaa7e2d5ee2a3ca9cf3580750c1b3ca23f46ad69b76fa00d62156db3d8124f8157df5329dbafb69f3455cdbd3af89770c4d80e133043f670d9c4188ef21172f9c8d848bc67e941abf2bc60e683c3c47b5f786e2bfa46a2bd6c7cef6784444b2d9c395cc2e34c21360996c5c4699aa848bf02a0259dc96f434cc0cb329ccec596f4c71fa4bdf0abed960f5357af0049045df7b3fc22ea628cd4a532759e20469a444c450aa5db4a921446127ea268c77c9536fc6229d5a7be7e590d4e1a81eddd27c873ab6df572a5740338bad43870ce1fac17c388b1d14057b3f2c30a2e95773d2b070286bacd28c23a6f03396a2ee1c4555051f3bde4df03ba18507f2dd852749cdfd5adcc7ff03397dac8b6e7c761fc9876d7e33f2f1ce5e9035cbac420d537ccf017a9b7e0de6872eef9eb6d09baab66cf674d7fe614a8d3f767491715a8b530787d8740b9dd5863af60bf14e615ecd2981947e851b00c6d4d1049d505c606068cd7b09009fd88184364d22b2c271833e002bb6bdbbd57cd88565e979268c91eb518115b3d3bfb1c8cc1c5795ff207479f2714b4f4be7e0d514b996f6733ffdb707d972d2b0dfdcca26fd1b034134101d9af9c67436c14e40c0b5a91e537b2fc206abf74f45110e1d663f3b53777cd1f21743f9039972fa3431b715e8bc3c3570ddcb421747e992ed37693b6444195baa9f7929b69baa49c3d130e1bd86e7cf983789c1ef3ad0c1592c97c013092670e37d4960db07876a1871839ff4c173781ca799b26abaf764cb5f149dba0a4e363cef0efc90000632a216016e71ff21605a265a38746e3cf5b06f618c3549858f945952ef085458d9c78cc69e1d7b4acae28ea78e042e07f4216cf58df4ddf41e4b4fc58335487135e96c8a2f5ea2da6d4e8da6a32ac02e5eb510909b7cccb2ffec1b352ff98c7db97349b6035b5194b7186ae1c2c748c697b590d9a01c2144b231658695cb0dae1f2148951b75b88166e1f42a26e10bda39f76160e09176c17119d84da14de96f0c196d3167c0d89de0bf0d36bf5118f30b91d1ab38c392bf1293aa4c1d429036903a07209ff700918922eea78fb56045c5ee5764cb410f17d1570aae89a56a086fe1a12f1c959f6aae000a9dfc490fdd4c28092c5c2d6c385b785fd3e46d534cd3a9500d553d90c651e91833e97d234477f9ac57ad3056c15e6a5e253cc03bbb81683ac7bc3725307ac366cdf3224186ffb6843a362694beec9b8cf5c0d48d98a3fd50904981abb80f47f4c8252edbf227983fa73e38c20bf39a42e702a5a5f63df2f226acb8e3426e0612a5e0b8cae2e3acf4af3931a87769343730d2bc93b97dbbe9b6057ab141bec2472c85251b3a2b727492e0e5d1f88ff1fd1ec9a27101b1e49146b01939943878c2b9a4d94e7a0e5b37342d4d57720620e4a0beff6837000556e43006f2643b7b8156c419540225ee13c183965907a58c48ba4c4eb9e78984f8455f2b71712f46043d99e76eea3e4524ae75d88ad4688acbecf6a20a9de0a8223ba9929b02bc49299a448678676a9552620d6998589cc92e865da3cf1f8b4fbe04a1383ac20905c1f61bdf520bf14dec7665aaea81ec1e60417fe3f74bf0b34f2468e7cb379c81e24999cf0b729f9cd13b8486b578e01279a5704a392c9dd4d93c5f4daa45ed821bdc1658860ef7dc0314c16f48a639395bc8bba253bbd90a857c6218a32b08f352cde8a7ffe79b72c1e9447d7662874f147e4799a6f6f4d8456d7fde8227bafdb8b08d980040aa2128c0ceaab0d1ef5373aec28eb838120daef95dde1226441769b3883139c70326a47498d8d3a6190a888125cc5eb1811d958ce299d1728b931be3fbab2ddfdcca76a8d0c7225085cce85ed4b5242bc0a710f094d446d558ad0ef2346d8d1b01d34fb018d84dbd1a9e08434c690ca97a26348c85a272c7987d0cac9e5b55d29df40f7e0b6e6c2e7fd96b9fd34cd3e545745c3b7cea1865d28e6ae2730ba688d7b6eabbb50321b0cdda66c04b5763f0bdc29ad59768f2f42db3fe28b313cd0918dc7c9dea9c1c21e2f7ff7d269cdff026ce72ac977d598d962ee3370d7aae111d1a28bd044f5a788157c870af3324fb78375ecf1969b21cf41075f79a349808a78123b83c0da51749027cc62b4cdf7b30e894d35b05b0d1e3f5dc7a08bf3a1f63a5e25fb167e88cd2680dffca085bb7fe35f2d880308953ca7cf64f0141d47650db6d06be1818b7ee53d3da2ce8a691e7d53f1f16d01a5b32e4d3fb8d259d6edf3af574ae8e017f2235d9d8640171a859f0921736d8a725c25aeb698277984b97a8f4fb8560ac952e401ece2f0c88ad985023ba39184d04c30c4d47a8d67bd4784f27b8d79b770d963f3add38762c1678c73208c9168ac8fc8fa7e8943e8a5045a791726b9d33c81b408e273cf3297b4f77e5515dbf7b388e38ebd647b70221fd5e992b953c5266cafdbbbd6bec5ac9a0894f0408afd415fcbffdba0d61017a15d5dbd2fdc14dd2acc88618eea896e26bbb1417f56277202300757294ea0dfb4fbf6d92969e714f27bc386ed4128192290e325f76fb6d34ac4c026ef2783b9dccd6147236df493949d0475a93dc4adfb286c3a1ea4ca4db30c384a4c00e4fbe305ebeda6bf148df7b4ed1ea457a0603609c268511f7b5321a3a9237c5e11b84c93db84c91aa2b447e2bb5e7794c7f96425d9e3b5ede79d84c72cdd3c3e4bdbb6b6113154367ea8aa7e3cf90264a0bdb27d02fb4270934cdb19dfb1fa5f5d9f44dd289f72577f243aedeeea8563da207dd4354f008239819cf2aecbd9095e049b11d2cd3e423aa7929064482524ddfc0b5a4f76ea820267816f9462684b01d22ba0573d048fa65b671cc4b9d13ce409b68fcd8030694f79162ce955f68fe3dba7e5823cde3e9d5da41a2c6bdb7d4c15ce6a6fed239d71d04b10a0ea7f7e5bb53c42e6e8ce386fb349298fabaf3adc040dd0c8e2ddc1647ba35022ea56d9789253814f6996d7d0c2c10dffad374bf6cda5c49860801d0dd90267d99f4ac3b5d82d7ffadb00682a1f908a3ea9ca60ca9484fd97f8c7d0e7e5a7315022e1962bf84bc48af7c2dc7c42ef6b13264a125a26169f35ca75d31bc2cefea6e7ab6c14d82154c4bd974cae672a458282bda917175ee7f9b5320b946af2e0581fd2731298b36d72ea7650b0cc8f4878469f9284f0598c71a4bfb7c5ec113e880017b96806cce5b39aec2985af1994a52caf31de0c494ba5dff509a95749b2c38418d7f4643dc886361584474b21b23374067c83abdb712ecabba27ba4687e2ef7768eabac0e4849efade74282e48713f3832e93a0cc87a2538828dd3757cdbe348c1532f66dee8567ce659af7e86561f2506cb76dc302ff508a62d4b7ede1120a33c2594d978d698d2f0a4602f88c168496076eb5a1825b141d30a79c0db9899c47d06ee30da9a551e93f95933c30bb47611ba2da17f047237a1a5a79e79a085a7e84f9b3130822c88a71220934f030d81b0cb2a6b4f172f155acebb500c503a755de0a33f1505892ceb99b653f953cdc2fea141b30ae1e6bf427e085df1fa1a5ca66baa181d186a852543b1ff8599add18b9863e52a8cbaed5ca292b8f0093c3352071667ae7f5725b9cc47b2b31186647d2117fbfa2be33abd4f34e57fcb00953b67f6495d9facd1b86ba9b8c8cf66d2404ff92291c064c2bfa8fe0727b0c3c0e967aed2b8a43f18e973e41c7cfd080db4b328ad4b244333e73ff0e9de2706987eee8a22276ab22108c5c9a1b2559ee01dd5e2aef21bb9d4012046e631dd13bd0e129599ed1aabce58a1e583cb58a190707f582dc6337087ac39632f5f95dd3cbd9c276748b99b40785cc91af83dac62931847926f89f5e89d5c8b0ec3070b54e96549e5d08dd4c7d78cedba1ef2c2233294864e1e2c77c29250d4c0f0ba17573bb4d3a2f31045d5d64e7cda1664d8ad6706d7f0eaa36dfda93d4d4b812fbe5c63d1a1fd5d34ae6779ee078bf45f06e830724fa5c7b9ce30043429fcf15349349c3602f18f47a612d16f90a0343a93be4d05f7e2be8a5f7a1aaa19115666773373fe78c0caf3f1a9cfc7a860ac639dcf09a7604f4a40a67ecbcea07b7952aaf977c45416eb83567a4535d63b27c6705e2119beeb0ff3c12642852fae139b4110bd621e649ffe4098d14f3a0c2058f7f577c161ff40aca4f259c11b5a6bf2adf137b1ccf1ad0b051c5686b17bc75ef43f124ad9c2c3090bf38d699c14b85487dbc0ca5815ca51b5385c64e4a4774fa149410e9cbb31d548904b122b7fcce630fe39b60d6684ac19abcf1590c882f6d25c479fd9640fd98a62ad875feb582a476d58a9263aa61452b38994b037bf9e2c03e90c7c0c5145c338da37821b94acec811b3642c7958f4d662e14ee65054720736bfc3560ed05702592a7c2f0e812a4465f28ff605d2cbeb7d45f4946b3f37af7aebdf0081dd81c6c7f7f677c9b88447070103725883b60c16fb84d0b8381209ac7e0e323abbf16265854e7043bd9febf659f14f58e3daccc2c6dc9107cf07538fff6b436c227a2e10c90380d738f76226421c1ea8a052838c7f8e467c30bcc0503fea562d361ec72e1b9e8958f28f4afd047ae857ce6910d87af4555689c496b1c9b315f48d8d6db79f1662a234457fe742760ee172eb4d7b13ef78a6747c7d2cfe4505008b1498d978e3dec66d9d887ba18527a28f3d6a430db8fc4dfa8a8a1ea39e05e46f0e3420bdfc064cfc55376e133995607363747dc650d4f55df19020720a1f7be8e26ed521c8f109513f258d5501b7387c003e1dab30d5cb1cf663373e885ee5c9cc4c0ba25a0b930142c0f76f726e0f16db43efe7b05f2968f1c39cd6f41144b9e31abbd3a0200a902a724336b6643ccc24828294661d0b4d3091e7c7100968f9ce68a1f3423dbec5c3eca9bc1cb855ca1b5aa52fa0b52149b12cd9d2431413c15b85594b8dc7a4f8abd5d1fe1a930274303b0579e100a1a483acccbee2528bb2613744743cb33ef2689b80afcb3bf15e4d14a8dadedbd99278697040b2f8297962cd0a71d4e579a07f0ef21e887cd6ac52b00978021f9c501e276033ed8a349f4e940771d2891bb940371a291c15b1832e45b2a6498c098c74fd214fd6ffb1983fb206f504d88e80ef4f6709473a13498f3c347c061b68073dbc89d40f5266d7c9cc94b003704dabea444d185f13850da0c5f89f6f504c9e9c860ac5dd2fd5768bd1a591990a57c1f367611e61e68e4639b4b642f58d2ec40576f0615b42f51dba338627f76b271c9b236a21f8f9ec681f0585e26f0e064ebff9e51ce4b480078374afc182aa6aa547a5ab543689b23aa8dc644a6f60ae20e7c80ca713572daacea9535b041cc29abf3891341a14714a17cac520ec644bc7fb5554b412dc28908c0cf48397676ed09f42ceeb628d40385280b189ddf62a97e71a49db6b9ae3293c9bfe1d306beb8d449490329b1008fc2716edd3e46d994d8dced0d54ea4401eb6f253a380fc8cf678aa309b92d345cf7a74d9f045e068d33d096653ad2ab90f02feaebea200cdbbc4aa500ae8bcfbff014f1745a1ae31b108a0191989e7e8a9c502d61a81061d780c3a9f6cc4ab1e3339ce3d06ac37c876f2d9c3d3f24568ad358d29409fefe1946fb796ab69ee1c26800b66d4769d3a5ff5888082b4c13cb8a6fcdea2496bcd391aaead7c0a325f97ecb70ed2884a1f281f7548854690f46493c4f01d4f08cdbfa1e4e5f4f6a659b4d02fdcc707f2443193a69a3e200b07764529a557a1495a26884dedae406b03703892922193772e3cfb755733792730fd6fbc5791d762db446ec509dc806d33d6b9e8a8b8cf21b307c2d69730088f8e64680a06c2db87c27ba9009fec27a14500b4041e57dd3f70f3a38bb9cded2eb15427976e64da5c338bf82d949ff3ea210cfc6192a662da505aec916f9435aff6346fc2cc5162e1fffea911b4d7810d274fdb1a0ed079a0ae5cbc8b0d344a597171ede5f4e8d8a7b3b1db4663a72763170cc6e63017db3c163b9c53b1c3bcc72b6401f47413b12dcbc5ae9d1537d6925dd5bacd5179b9598465f4395ca79cc369a32e971adb82adea6aaab7941030f039a27d334d6dd9f1f96a77294565c1197b35724c422365a44c4c234a00e0f1fbbf22488f1970c5b5801c59b0e95e2c5c2d99abf2288f333f9f3032e09fccaf7d9f11ec14b4aff8c5a22fd542edc54e8a63d0046050e946477f0f73b3e71954fddb5e162b8ee90c5a43c17e264eac8d551846359eecc4cea3d4832bb51a2befc8c34d3e62aa7bf8a05734443829d77f300ca50a266e112c40dea8ca08b14e46674aeaef454b13ed33dff7b8b05ae6b89c6f85e473a7bddbf9a8a18b3ccdc270fe15e883b890b590a684494961b7a9ee8d9614a2b88113dab4050d4657a692cf49d0f913951427b611940d0186adee41c8701249b8d73affd05ef49cee354bef4129b0ac6396d93bac107cbd6bdeb5b1505af1bda41af84f2246621c557e381fe457731ae00f7e21e7fb320694ead09a5829bd85b494a0054f7440550fc2c83c5f9502e1bb647ffa2fae018f6728b4d7d3ccbab54ae2b4e72fad2334591bf4a0909c3452f34c8f6cf512063353b1591d4863663c0792ccc5b9eff8f76bb560b3688bac16755843ff290cffcf044dbc0ed7d1a9072e25490e8ae9e0e954f9fd498e98ce400f00402f23d22a9352ba9e69cbc429c7fc074321ba3e3cbe691735e12f656feee466cc3dd0f0ab5c92cb1ab9039e911cab9b110432084a117f4875fa6aa6e6420ec53b525a7e700539ee37c3dbcef0d619dc76c6ba1ac2f04bd6e4ba7047f08b2beac33a3968cdb0d607de1564c05e02d1fbfe42f8fd9c62fc17de0219c8b86dcbc822fdea39931cbb1fa2801762fe9556d7c3fa34b383163e24bb25a7ec43630c2aab33c0a76a7b1962bc264638276888020406da95128aee7ba914dab61e0d759be425ff23554a6b74f252009c67b340d470606f6017857961c9641eeffb6fb88dbe4d9d860c1648ca4d651d2c64154683fcdf68108958ef7e9e49a5e5d6a8d6851eac48b01cca3c78a447fa129a12ae8c558c36b2f599ab08a452681c193c54ee532e68430a79ce0d0f03a9e8cf45af76ac472f9f68489e05aee6f63c815d73b9a6ae83b2e3f396184196e6fdd6f110b586dadc71efb7aafb68b94989b6a53258201c120d810d968fc7a396150674204247514adeefa56cf1ddcf4fef77c6bd63c257273736c291d1693a159bded7a34d31770a5aa9a729312eb27e9b2aacd0fb5d45c8a408adbddf99aef274c5c5c7017b03ac672483cc959b6b3af6f58a6b2c34b35eccb0f14c2d2f814b890e72444e0ef353ecec3d6c81cca26743ee78ef4ea99fb6dd1dafc08ab92a41d65fc431814192cfe840b0c3083eb7471e8e2ddc5d02345879bb01fb12b21766988bb6c624eab005478f432897a2fab9b267ef290841bf8198873c4082ef96de95b45ff5ec4d62b74bf71ef107229cbdf3425bbaffe5f4b9ded7ded9c9ca3a17e2aa697d3438a653cbd33c8872d2e69fd93efc14451914064576b9c64717343ff1bab9d2f7dcf7ac6e6c890277df62708de2f733d5766725bcf89c68bf10e5e9a1d1a226311aecdea46ca907a81c189b04b05b50e3a505d72ebc1c0cc33936377f259ebdaa9e3b8969b8403d275b98ef8acbb604f06d55579f23618182da9a2e98304c8cadf1e647f6b2c80967488785113b087ee4761ad7346c20a78f7988f153199303f2ad04c422b98ca60ce35c53a64cea1cbcaefa5392d651a05dd07b2b62f916db59792ec135ea1ea0d32cff24be975eeedb32a40f9a31c197fcafd07f175f7ae7bb16e44a83825cd040641cfacda0869e807d25c7639ca1345e7dcd308df401fb1a39629df1f49d518de805ec1b72623763d2b719a611fd807c90b398cda046da1dfafe26d763350351d10bb805721ca535f0812e26a88f88498e855d12507f21470d11b7c66bf5f92647c552c66d44f54e500764b70f7e8009371e0d7d332747570556635b892b444410c0114bb5c25c69fd868256618eb8a9141a6fd8122a39c924f334e92668a774029480da45b8aa4e9c909499de4c2e2597411e185e6314acfb1dc69f02ce8021f45cc66dcfcf9f024a0b72483e25a49d9e3b1010d617f90ae35cb23ec6d47109476184a06ab4530841fed292e3cbd71a1ca87cccc1a136840b5ecc28cf0d1b499ea85e0e7858277d8cdcead925f3e5a8c37b400fe609d64fb36aa5663a71680807adfec2ee9fc64e0b663dcc21c983ad9f724eaecf2df61c1c05287515cc1234b4a9ac2cfe9c2c3e2af1dd98ca20220401ee9dfc7299336c237f401c12a6fc4cf8fd458df997b18b8294f09fa3f165e0f7127fb0e7962118c62addf8e78ca3373207f6ae0776673bb0f330696eef70e6a55c0f0b2f1e4ced86aaa347ad1a4e5907e4be2a88a5dd8c2bdcd443360f183241a4f92ae131f061b63cf4a881e327e0a4ade3472787c03e1af68375ce8cf7ac0260b7454e28c02bd9161265937cf48f4e9e8d50d9cebe11a661ef60cddcb734f05badcbf81004e49bd96443c76ad4189e1c03ae675c846f6fd4a436a362aeb34aa1e44b909f96278ac1fd1436f20d0b645bfd23f4ffd2d4ff00f5c126664beb969d589aa24fcdaeb9759534b720839e82bb5c9af318e4c1cbe13078f9daf9b2b44a7171bb00ba105e1345b58f6670d7029fc1bb7e164a97de4266f05ec6ca969de049c10dde8b52650b32a81215a7bb6e73bf60479484ae7de4fbaaba0270be5624e8c9434c32509dfb8cb7c6e19bde0fa823e63b95d31ee3161d3068c0e95338e7236f9cfbbab0afb382bbe7e06a508d1a4404044382f963d8bb92ba18c247d510c92ed19ef8f80909b9a210eebe87c4b8660ab2bb0e4af2b7ffd6834d78c3c816e206907953d8a691d78a388fda434551180d7c9bbbb1bf86b70c12eafbf8a049810914cfafc8cd041f8209cebcf631486f28106491c15ab71ba953c436baab4f3d13ca2b0cd7806feffafd830bf1959a4e0ec4e506f7bf6fe7e463a5444f9c6019f7631721e8382789dab27683d83af866c5f5402e9b4cc4d8c7613decaf62b113d5db2550b05844fd6e0b1c2c77e2fa3dd4e369f12a7af08e8d476f85119ebb1fd2493cfbf1dd10185a0cc5cd3f061429091b1a908acf66faa1a49df5a8829323a7daaeeea649a15299381a7e3be2f69d450e1bea71dfccd080cee4c592c7a7a2a21df1ae903af20e4b4fc53e3b8f0889635b30ff0eab9db8de2c819b95f9e81812bc11040a003f9a5720161ea50d6db3708d5aecc70a359bc7da988a3a6f63d4fddfeebcd7a497a561d4f2ef5c6d083a339c05731f8dfe093799037d9240dd128394f0b508fd80228d42a874fe201b5e9336acbfb56e929a90dd24b2bb7bd30e89093d098809510516095934610613123091e4091210810a4178020b2b7c6065c10ee8510fd4ae305d3022e684760417581847a040bbda734ec8b23b9ceb0acd1d9a0087c70dee55a990c2051a8e14b04c210a532c71598aa108478c008a2ca69084133421a9891b5fe7f94c21779a0d90701cb79d242fc06cc7716577c0e4f7d87e5cbc48825c441d1ea236bff6c841eedcc99edfbda38e9362fee09b9cb06e9d9d32860a1e50b121ce86d09dc0ee25ed0aa5d0f12448f37dca7ca732dfad10cdf7a2f98e65be6751daf37d4b0f3b7b02b1ad604faa65d4914f44676db4799f2e72f7c2ec29e4ee85d9b383bf2140fef5a6a863d2b936ad86a33c7f3e4ed4913f1d69c9ce97dd7fad5f4463b288bfdc8af847ea2c21f2c8860f71a291298a204c8104a7a04d5fab428eff8ea20dc56edd5a4c44822512ac72ce19ebb2ea30a4edfb668fb2365b6b512ad5dbadda5837a054d6daf7ac42a9502a144ab5e5c78fb5d6495e908eb62cd1a0350dfaaf679bbf759d1852d2f296f6e9f7e7d0335fa3b5f72932adbef357fdcd74ea553890c8a9c737d3be6952f634cbb0dda9b73b957abca53623beb3cfb2f75fe9f76e50f48b30a4b4e48593fdb87411b465d88f4b1742fb4282391e437e5c9a70b4ed03f9cef96bddba3b096a42d1e91f0d7a86d73010197e7b16f40a7fd2dbd3a059f81ced5b5365aa977996109b9f799b9f79e8055b92af2d08d5e96f108122fff0b6d8dd058e746f8bfdc3db62fb43249c83bfdda017c89dbe277a0096e4eb55bf571f84b5a9b7da8845dd0b0926c19cd47679b9bc80c9ee784b6d4b29eda9bf29ddd94f7d10a9147efb0fe780b722a90da8e21c2a507e23be1ffe894b3007b575beed26447c37f00bea4f0fb1107fcbbac17efebc15416d4075db4d07188b70fcea692744dc8e5a698bf1008eecf774d457649dbab5f6dd4eebeed9ba746bad751b69de699cc6a575b8df5ec76cea7d4fdcf2d4dbfca95f69df1885df3fa52fd641005de0c84ea5b491fcbe5176eb706cff846c77ccd6c12421a6f7a7b8e56ffa895b260e9e1e7e813935fef4f0743a9d621e0692d95ad7fff88eb93ee66b7c7edf3a5be99411ae3694ee4c1f83bac0911df32b5d64f56f9bde54e3f35faf5aad56ab550fbcf64a03ad502bd3a362de64ba54269509b5c5303246c72529322632bdcc5e95bdbf6fac1bfc57bfda8ac43046227d2cb4f3379efe750ce41f876320f0653e46cb3cd638fe86ee7cdf781cf30e9481983762bf77833b23978ea85f3d10d4affec856a956994ad3d06c31f88ed467ba93172a25a367dea4650b47cceb0effea6fcc9bb4f637f4dbd903d59d6dddccc76c4075abb66e6729f34df55af6abcdff42b2e19154b1e142a27f7911927d11ff0b49629911a82f1c5464332f44dc333068a608e6cc24800957a0cddb09600216c8bd1d9b1431818ab7f059966533ba85ec57affdad98bb3f31a4b4e417c356baf3cb4b26276ef9b7a0e59658cbb216be07667762997e5b6b61a57a95a65f501b3d75c9bf5fe840ee2ea44d83bbdbf1456c3c109418daabfd80a08493fdb0101b176ef9cdafb48eb758071bef42cf5e7d9641fcc2af3400de63f80bcbd1ef428a3a433c9bd3e93bdbe5787a18fe9ec028015d5fde0dbd928032ecde5fe9cbcb85645fb59d7e85bbb2ab555693ac3e882ccb1e95a132edd9662b44dcabadf30da8ee1a8fda8488bb06a7a98ea6606812e4b2d54adb4c63dbea986badbb6fd717c8517f9badb20a95d2c0dec0f647e98e031d11bb0823b65b1d845dadfe7aa00bccbba1ef52821cb5380f7425bd1beae5da6474109975f7b72c77dfba6c8bd9e4ceb4dd56bf4d934e4f1d7e81dce9e31798633af16041bf3da373bca66b3e47bf3d8306721eba9332e8ee4f9bfe8757bad65c6baef669d0a0418346a51183fe6109b1f12e7c67237b1874a7edee42cafb6e9ddc38babb8cb0bbe817746784eeec6f361dba0800362374b384b8f036de85ad48b6156109b16f679bb5f146e8b6b1f9a853368f94dd235a79b8c5da30a4cc7e171392c9cb35829c8d869b2ad125a2dc5d483df142327981396f5b304b57982b18e3a21abc50a2493e65641b486419ad401b6a23043449f516e674abcf6fb3971a471379f5990eab2f9229e9f865b54530325af2a549597e39f697f2bdf7a250574722c8d12498d3452b9b66d10ae4e847a508e6faceac2d52010866751d418e5e5b20472fa32bcb85a5d62021c8d1aae45739cc12e4322ccb3e6b19cb18fd12236ee1bf30f88204cbbefb714922da72c8e8085b64bc018abc16730c24b5527d04e339f6a312157217bf7c89602047c16cad073926652460813f068005142224117285b02c8688708485a24e0e4f1f37893a3840893a3f82b095973db6e122c74446b90672bf634bee7c3b0eba426808596250d409f2f47192a8d3ea681276e4834aa6ff7687893051a4cf378c0572f80ae4681193ec3b7f8789f01798d36147d971114ed2f11614612c380b36c25ba0ce2bc25d3012f6f265d3c74a50c77d0650f1cfcadace1ff52add15a164fbf60304b3531ec150d3677f4d7a3b366d3fc0a5ed5db440d999f5cc3ab482f42c231011e0e9b4b8851f4ba55058578492fdc3cadaa52ccb79b5c5a52d54df452bdb371825a983eb926312875acaac67d6a9402a42184c047352dfa3e7e9532e495392986c6871cb9776c4f3e325ba2a5587ed7c3add2b250a67d633eb2b30ca29203f3d3ee5c30bcc51d14769293eb6ec3ddb08a055b073d048aa74d8caa66fc3e3a09108e06df81b341201fc00ae22211a49950edb32c50ea29154b9b6ae226dfafb7b34929eb7e181fc14c1c966a28b5e367d9e6f69243eefc3c7ca4aee62d1d636681f5d25cb795a608efd6c03f2e21698f3dcb2fcdfce9e7eb4f2c3870844703aa55028140a4b6995ea5ed445dd7b5117e5f75317751f159492201453cff329946ee1ede63af53574e7bbc6a3748d9798754d93a8c8f4698542df861fe4d4e66fc55ec958342dbf65fbdbe8824365fb5bb157b663d92e45cc7412339928d9fe3113894c1819305fb6bfcc3fe88f630b0ed90587171c9f692ddbb1d05ca1b142f30ffad34871433ab9219928d9fe3724122d4c9ef907fd67be27a26cea5bd040f18c33ce3863b30051fa6d150ab55a5daa5f5df551ef444e6dd885ee1862882dc6397755a8a74ed9f46fe8ae66e96ad2b649367d19ddd92936cbb649bfb71f90d3cec83696e42e1655f1f137f539ff2aaf32e4b257a9aeea4a0a0672942ad12f907322771712b67225bdafb2ccea55b601d5bdeab9bcc09c7f9de7b3f9784d552acf32c86548b04b96fdabc99811f9ab9c57f6efafb4fba99b659beab14a420e5b8ced6a7a9948abd9656e9946d9d641301987dfea22fed662bccaec2ab33005412c2578813d5aee4c3627b439f801fff69fc9b4d94aa7138e691d5cd60645dcda344864c77ec37f1b620d723351c8920689fc567405258c62687162a99694524aab94b5fe65aa52ce29e59cf2af9a8b5aaae45ce0204f295970fd7f96c810c2875b409dcc86395d96e1f11bbe8fac55b9fedca5902ee59c12aefce977ab3d310f68d9dd6a43fc6363d7772ca9be8107e5777444963d7fa5b3641ffb1d1d81b4eff32df23b3a8268cf871bdbd1c1cf067e779aefa2f171fef83d1b7f7f07b2da53db20d7e0436bc186df0375dce71d1d71b465381d3890d30139580339dfbec792cce3870f98c3e1f0781e96a00e00e176118cc3112d367c3aa2d2d07e5808dc73f33179ec78911fe4bcc79b81c736a2e23e874be2c4adeb62fd407bb130ba1ae2fbf7b2cffa85305e3242e064d7bfc808c1927dfdd566cc1a2932d71466773b4c23c024960c05ac6eb13aa59432f745895b9546897e32e74ecb0c5c373d45ae5a4bae5f6998c855eb28faedb97de8f93ca6de11cab5bed501b919a2639165bf3d5b5907e4e00c3cde0dd4b1e1773cf68652d6245a76c7434adf534628a506f9b296892b91c0f797524a293fc2779a252f2461a5adb2f678ead61d79f4a594d2ce2aa517d74599ca35bad7fbfb1c2e915ff3d65a6ba3c81f3fcc78f205955d9f5c939b7078588855ac6aec1db730ad83abb875373d45b6aafd8eca60b2ef5ffc85161103f16dfad57e4765488114d8417a7eec40ae6756cf1ee66dad25ef68bb67c787e952c2c9ee1e189709b450c7d280c9555274955c32acb0b23132ac90b26f91966cad95f28a9c52662bb608938fc0453e0217400eb045123e754470c105132e98c17b612bf67cc9d5d7a5724eea18ab97075e9a6cecb35cb8757aabf5138c62a727d95bf830fc4c5bbc979db47844a2c898f3c0cb074c1bd8f66b5ed3f224636bb0e6f04fcdb605864dd76a0133274f9ea6780cb3d95a22ebc57d30ee6c8b5da79aa55ab9b524e79cf3d5f9317db37cd3a3dcf69abb726f8a72310c6357a31e9f4e996665ffb6d52cfc6fdf1386b19042434a8c49dff70c3ba99090557d1f9e70868332b6d5f08483a16d6586421961288ba1b48e9cc24196f734b4fba4540f73a84ae3ef85c568f759699c68435fb3a9887f7c4b89f9fbe88cd01f3db5de0d7d1b04723fdecd948cf31807f74943ace1a6a19f4fd6ddcea60fb7b87743ffbfc6626f4a692435625e15f349bc0f8d5f6924a9d7349224ef93fa24de4795793d45b8b1d40139fa85141b6e0cc33415363568c44c1c38039d21a579409ba1fc83e296cdbba10f31f7b0fc08723a61f7caee1e188ec1540caeb436674d7b31f0174612018b24820fba40fa514017643ceeedf7388945092a56a694565cd764af7b59eb505a8a5bd7e3875bf6df45a3e4baf19aae5b6770f15fba5e89efdf7bc5c0c2cac6ea7e6260c1827dfdad1babf5d2f64df7bad70cec124e4c3f78c194325bd1c3fd1a0801c899eef6a24dbd6fb2da83f1d41d40eaeb5dfb6eb11480df84bddd76c06fc2db4e103b981edb88e0b6023c1f1c6be2b63f1fd32573f86da5f597da5e7f5f35c1936f3f400ef600b9f9f74919bf27be9930d93eb49847ecf76297eee1079cdd03986cc4960f817be2610147e05f0ccb520ed961eb7ccaed888c728553078bcc9f6ea12904370e657b59fb846a16c3b4fd7b5d7fddfbd6ca68f27a58e2d675f1804facd651c27062b37025dbe78163a1195f737df776a361225f1fb17dabaf4d42985dff9ef63b4a0212f67d7bda75dbc1d13caeefb07d6d1ce4ccd06157adac257379c3f06ee8e3709b3ea7c36452a2cbee04705dae7d5b7ae10062d05f0b9e08ec73b8449b7e9a4c9033995aa6375d13b74c344a306d7a6b35444186fbf9604a938dfffea53555eb27a7c758d8bf7db16ab1fdb85c11634793bd3a4abefb71b9a264bf1e9c81837dbf45c4075394ecfbf77a0e4f1d0636de38c8d16b82fb4a6ad235575391714b7f356137cb7edb6aa8e1be57e06502623af89c312a18c6b08fc1f5f13ebf2e18a35ff47da9d7cf9f7f677cdfd06ac9f30945ecaa83fceb8b784ad8f6efbb10ebe6af1cdf50c312b1ebd64559447e944111d354e40739bfaca57fb55731f92ac4402e87926689cdab8cfdbd35628ba7e3eb9f7e722386afebe25b6346c5347e0c6f5d64fbddd7aaf19b34f6d434b1ea58e27a691464dfef28090991288a10e66dd3c6d568908bd8104141ad7f37549b114ddafed51ce428972b48f6dba68a3906f23590a3bf759135c8bd1bfa9a2683dd244a76b7635a89e158c7aa10e316fbf13d5f56cf733e49e96ad7f7ef81f57be0d420fd6bedd66560d76d9271f5940c1f3ee4a69662855fc8e9e060cf8fa2386407391b0001c8f91522bd3eb9afb7ca10cba826f3e0d7c8f8627c2f8613c636806450d008b691eb7d3f7c838d7d6d5d06b68461dec377e9ba1f9725be6c6e3f2e498ab02f86c1771c1ef7d2713b845b0f84fb5addd9af4f6b9d0206f2c8d87762f6afc5e4f583e8d7e55e63bf275efbb8bfb6bcbdfdbe838ec1bff47513861b8d07f2fb5b1fdce425246e45e08f08f2fc15cc49f5f0c385f1e484d397531927150f0b38aaf8e70d01f5045413502d180407c879b45fedabf0cfb5b16e90d7c31e78412de1eee0d6f90ac60a65adf4fafb2e6addad755fe1d465605f9bdd3af8b088fcb77b620f5cd13091dfc7785902b3e465690afc5703b50e072757d9312e21d9311b71230e952de3c323295f4a29afe4c02de56361dcf7afa6cb3f4be44ec29cf7f0bdf70fd690df77f2e8ba8692358702920d7ff5800b61ebbe3d1326df3b278dd1a4f3cd47859c72b34f7f9cf1cd18638c6f461a63a42fbe17a5fcb92f18d43a64571c203ca9bd9d41fc80b3e9b67aefbdf7f2bda75fcce209990b808b3a02bd86eb6f431359eb50c4371f2ec8be4991bf00c8c10fb2695a4d57b36b6a8278c943b6174090e13f1b7fcc3e1908e10d2e05b2ffe3d2a48985391df422ee18be6f68217477420a4e3690fdb7c7bac2444914c2705fa4406566cba177f39a7471b79083ee51a0a23d4ae1ca8d6da3a0e5da5cc2b01284304f205d0103a428aaa0b11f17a31104a10a52d841bc27818c00d50ddff7631fdd0277b26eb87ede29e593ef4dfbf5dfbab5d5ba56750ca2d60da8566affbd9b7493d19df601e8bd9b7b4d3f7dfb30bbfa71ea083b1fdebbf12935c8f900b4aad584f90094df0dfc5ae47aafd6ce1a84b5f6ed5664befd4b57206ed60dfef6edd61da9f3a730468632d109f7d5685a64ee6bf8227732be8cc68adb4fdcb21cc0df81fee5bd29319813a7fc1a9863e259e271f79a2e184a419b1a4181b2b3d1a63f47f0474d04d1644c98390901c7bbefb56f1b37322525252515a0e0ff4dd168df3434ccc8c8c8282569feaa66b46f558dd3d0d0d0908acefc5de1d0be734c8a0a51212a4485561603f9c6f13706c32b94929292528c0903f996f98b612ced5bd721a3a87d97e976fdc9c66020dfacbf75ca1a8277433fc5446832c9d50a8a4a1daa54e6d0ebb7691e152a73680fc11c2b571d821c8d503caf5f85aad092902f5125abd484cea14ca790d051ade2552b96a28e548a36f4f1d8a7ef475ace4a4b9bfa911f1da900d2885955a12a54856a93a84aa1a81255a24a7449e6ec343434443431764da129348566135aabbc1df4abae55bc6ac5bba956b4689a1295a56d0314592641aee256adf26ea8c8a44a65d39749f24bb64a5cd95dad32700714dfbcc7f5ef6b7cbcc7fda7b70dfa78e6fbbf242f49925c374faa70052fc7e10a1e078fa20d8444d1660a95c7e3f028096a5ace902809bcd9f0b1d89dd4e29a5c27010ec1cb6a21b92881b1a10d1c5ef17660f1b4208a101249224824750a9e2482ad078786608e95798593ddcd33287df20a22494483b02d423d261e500763dff9c83838734a9ca83364cab77dea77e90a643106f5109a081392a11e7e90555ea1a4d65a5fbeb46f64d64a2d5d6d412017c493c23b3a02a98bdcbd2c3824edce41905719080825bc85b516dad7657734dbadb551af3285393fd6be7cfb28b4f6d58f6fadb58ff644ecb51419eec7c58ba33d5fbec330fe53a340510331760522f78c5feb474d240a2fb46cf953e2b892b5462816cbabfc3c6f851bf8dd0d1ec72163c3133242d37bd07fdfc26b3d9eebb31e322801e0e90c01a2d61f12352317125232390e0ffc51fa4ec5ad1af899e6a68f904defa64f9a26d764a816ef73b54ed3acbae7c7fcfbfee5aaa797c5c68de59fbe6cfcabf833e7099f74b83f4db3fe9cf53ea6efdf7b31ecd26e042364d335a7c537d8d813d3e17e7d25bc4b3129f1d6d5c7b06b326d9e648abd8ee03bbe40ce8df06e5c0926d13cc9b36cf857921192242939982cccf62446c09e94c4e13fe73a97c2869f82b7a1277591236a064abb832048e555f62f9083bf2d66044ff224210c6348705d575a6ccaf931092df4f26b084e30e2c89722a82d43d6ebf23704238e18b1e75f3fff7a4b840ef3af5fc11cf9628cd1b35377a404dbbe9cd7bcae8d03d38a40831c66572dc8dcc74d8339495cc9d6da8a23ab531d949c373ff657939192fea5a84fbde325297d3dbdf4bc6afd3761aee7a334922af9517f6bbdf2e9c33f16dfa7d88f6bca1f3d7a8a3cff4a8c6afde44e4cbf8d612028fd7cb29f734e9d25afb0df5190124e18d5194a27f13e48b84f15fc4f26111ebdfa61fa59079112a374d28d86893cdf6660fc1f171b2081bd08eba9cbc0896a1d655e98481419db770b72fa31bfc3b61d09ebd43f523a89f7d90f064d84207006f8a69e1d930e02396a032bdb67a2f4f3710ca4e7c71c42ded93bf07dac4eb835a7b46fffa2ec53d9dd0fff2127fd7ac9f76da5e99adbca6e3890839c0ead25e3ec9e7703bf08534192dd3d30f00f29774f5106b5295c9a252e6e790ff9ef4d9e33ad8ea986eb3b1e4e63bf7f3ec3bd3fb94eae9a66498ed7750a880872249792bda3e50c87a206de0ef85373e071f077a2ce91f784110894d8d08627320ee434f06ee0e33c1e8f718aa5ddf993aa418bc57f646c22a6ff9db2529fae8121de0dfcb70485099c18b872147ca8f8ffb3edfa166a3213b3f49a30101b3df0c237d8a042e47470385df809ce08aa4213fb4efb419c61b41f973384f60bfb713903cafe0020f9eb9a7603aa5b621de0eb848875031a62d34d4a121c3e97946bd352ae8781640b1fee8152e378372e23f36efcc9cce379333892085140a282dd592e5d04ed17051444814913eeccc1fb2d052bd8203f0da020bbbfd73f4b408d02b9d336ece48638b98a0d7f870b25baac563bc70625ae3ceeed2e5b79366fdba0049567f3f6db3adfb0d57e401e8c4198a0fdb848e1cb06c07e5ca41066cbd41aeccfd7016b48f23e767b38277d99a25c376d25b3e79c34e420e70d87883e39ffb6a83b1046a24d7ade452324f98e7fa8c5b0abb42591fca7c452fc23af442325205760ac6e41796e344cd43a279730a8ecec4fa76c934590839248cb2b92081ec5dacd2279459544ef063e3c8247b04b95b56a0991e69449054ea27925291aed5937497405725b50969cbc421229298139c93abbec4e1261d02b1dda2fc791939f92c07c9061d007849ec5ec8b314aaff1815a32c61a1f081f27d82ad8f4f510538914ec3be9430c04082363504cbb0fd643449b21d83bae4010577b41b12b6ec9bfaefa17be195675101c86003144d4c10fe7e72451f278963c9e0f3c9eeb62394de4baf9783ed3878f9e9e1f656420e002e2c6c31090ab1b103cc8dd4bda4320dc7702b104971088c0e3819f02236124f0785c6eba0ab907c8c177031f03d1c30f41a24ed4b4a8590e7250092abbd39ed42297f3788c80474c10e5c5ad5b285b47d9674a690224a82c610c29a55cd5a883435ea68be153fe99a9ebbbd5344bbce29e1f45704b9f6f67cb7e0fb46644f957466902adf6c9754df2624cdac052641ed61eaef1308def810fc77c0fc4fac9c3aaef81fa89d430e29c44890d4f72ba2719ed3e33da71e8176d50ffb037c9328c9d7af8414bca357b9023a9e141285486614376a06194aaa98cdd0640200649755528cc340411aba5555da5b00b08232aa5981b83a59c481ad8a4715718e56101a9a31aa8fa180e824326bfd23091f18f8681f8aef12b4c248a5cffdac03f90481419ab7f5953d7bf3229252cf31a261245c641e36d602251e4fa734602f1adfd0d4c248a5cffd6aff52f0d36b58ef22c4c248a5cdf54ffca548734cac8c83c1919191999f9a7ae882dbff3262ef4360dfd526fca862ff36e20a498d433ebfa331a49958cf538589fc4fbdc305d5264be072200fac86c505c0a6803ff8653d9f07515f65431ddf7597ff124b7cd9d7c31af76b58c2665eb6b5ec6aa2fce9d347121c841c7c199d5c868bf2d35d43b3e2007b596ec423b0e05f626cec4246bd55a76e74d3488e3055bfc81b9afa6f3a2975739bef9207cefd07b548c691a25268d599be99b8a28e2ddbca27bc9b81f972b46a6cb071dc8b2f19be27e3ee800176fe3cd91408e120139ea4161681161a2bd1886fdc32f62d7d59db629cd122dea3420da50aa61467890696b40d47124d086ba93ad6977ebb2dd3c8888a4dcf3c21441c4bba1dff5fc9832ccee5c0b2fba014e7e3c9e310cebf4c6decd0e6410c6309c32b23002c2162c44aa2c920863547ffed53053d4f28a55df6e344af2fb8a02eee74fcdb1a9dfcd9cafedf99acce3b95adae3316dda125fe6bfebaaf5e959a90d612c217a0d3a30e9cf3a71cb7570fdaf6bd60f64c587fb7ddc97f5d382f189398fbe20e2be9a78c9f7207c1a9874763a6d78b23283b61c7a3cfed2052ed87123e224cba199ed9b1c7a37f06382b2cf1fda51d3ec206c7391c5e3c25f0d6cb49206af06324a195d8e715fd4f1794dc2a0c38eefd208875e468cb0c6e85f6684ef304238455aab51aa518d6ab6d26a7bc0d72867834a7f721fccc117d8f19dcac9c92c53ee7b3cfbbd39a77e9974afe2374a99833652da00fb1ecfe6ec646b354dd36cad56ebf11ec7fd8d329ac6c897c9e446d7c21cd694dac6d6760d2176531a3b66574d9f4dfc5317045da9f6ad98cdfb9a30a9b37dda156f6cdf7d334c6ad3be76d5cfe7a230a9edbe294c85494df75d6152cf7d63301a580d4cc358374e729bef267edcc0f6c7c579c3c21c96082ed7d92d7330208794d0464937dfa28c104a29eed19226fbbd674466daf2ed23d233705fd481da7d3898a3e9fb7ccfdfbd46df67a416d873fecd5edc7c8e4423227428fcc330df1e0cb2ffe3b6cdbe113a3c3d6db39f0cee942953a670706807043c1a35bec2f0970907ba928c4993d43fd5bf55cce7684332386668fee99a15586881b37101003ab61b3825dad0dff12f1ce013f08ff5ee10222dd9fe6efae67720f20f03b5a410f91faf3b3e763665e17c0f64fdc3ad8ab1582c568b851f4e893ad1da9c35ed9fe3a6b01eb3348d92ec0fbf676ff40b7fa3bc98be4f71cf0f4caf8d72d2f72d0e82430efa36c71525d3f72f3c648718ae184c988705c86092e14641e9fb173700023c78605152fa3e867bf861066c061c45a5ef630c84911c9c738aa2ef9ff01044e89c74b2fb19f620243bd94e8e4243dfa741fbce980639d380ba98a6efa3b02751c2431fc593c2301bfa7e0abb10931ef4533d54354d307643df57616fe2c487cac74a75258688769f03ecb02212138506c6d26f0fd1ee93008d000d65c7481942238a8cbe4f033b1429024023003550180e7dbf06f629546aa05fa3062d0714296c46dfd7b00f59118026001b38aea8301a7ddf0676a22b3d367a60d0f7bf288ad6f759d88bb06cfaaccdd26fc7602070fb10800a168e2d54f0c1c1aad1f77160cfa2c5061c36cc445941df9fc16eb4e507fd991f345158d0f769b01f75691d6dfa34ad8fd282beffd891bcfc206dfaffa36f04818571fabec69ef4058806b2c96036fafe865d094c10fa5b901c515cd0f773605ff230427208a98902007dbf06c320240318c00a34980e7d7f050c9328b981fe0a37b01045df6701438883a5cf020e178e964dae232eca1858ae281b76a3ef73183671e25bd720dbe772d8a1e1ce81bda0efc7a3686dceac23d6b3bee358bf25bb5004175830fcbdc12a0f9ad838efd7b74ccfd2beef1845d8b78549abbd4c17c3a72ca352aa550c8d1a9a8d1b2c191c3334afb71c352bb0d0428e93e4810cd8d504f8d8c4da9c35ed3f36c13eeff36feff81bc708633f9cc31858364bbf31aac0e186130a0630c61242721482dc0802900cc60f0f6ad09a36fb71e1c18f960dcfd231493bebc1962b3d39f6e3b2050a01b0aa50831801a001c61031ae48212246131f3b38a307cf0e904083b61f971054b1c332d2d95a90b3032666a8e1041e314090218c2c9bc5d26fe26077cbbba1cf42165936c191429289148a4639e8b771d06fdfa0df1e807e5b887e3ffaed967efb878f867bebb77b86e8e7e343bfdd8306fdf6cedb6ff38841bf9de36d22faf9d44e36d97487863b1ad97ba3733c0c52883c8e9692e47d88f0f8cecaf05d8ee13b0d86ef1ee73b0e69d34f8046528565804780013e89f729c01f4023a96287fc0e433e89f7d1e166db3bbe07c6a3a823338fadb39a0c5b973f86add33818b6ee71b68edb32cba6f168c7f68216c3eff31bbd05112d9b409bdf0f5fdf03b9d0cce8c001001917583637381b2d682cd458e10b1a355fc4eceb18de72ac605bedfb307ff1b469fdaa7d3d7bf0d46991a241cd641c99cc89c53240015e5781a510f91e68896c5228da0cd1d209b4a1af837e7006d6d64929367d5d0576e3da3069b209e42e1aff681636a6ae327ff1843729a4da24932f66caa63466256a9571cc5ad632da29ab79ecfba42304970b94fd36c6924906710b935b422085de0d955b36a59ea596b8b23b198409a1404e0a08654ba4fd7218711d1102838860a80eb5a6ec5a80870417f4a04a125138e1c5c8e73d1b2bc597b8515f79409002c9ee766cdffe321ee90f88e004886a536cfeea514a379c29d8190825a184c8fb32f4831c4061045b206de1f39e8d9d411015d73121ec9673ce39df9c73cef9554f1a25663c5142e7b4f3c9932d98518256b0a5963aaa0d90f46db50d907c38004e64b93d336a9418b1bb7edd6cde0dfc6102093fc3a74a7d38abd6d17aa5fc2d1beebfa672390369770290d2b111c01c9a255eb4510789fd0bc97dd3bfaae5f391719a247e93f824dec7c6bb81ff708619e047ac65c84d229fa9658716b3b2564a2105c1fb12f7dbc11659f6fc9f026cf102e95a6cf9b55efbed608b186c59698d73ce29e9a92302ee4ac9d8c144124e7868f1401789df0d04f233747c9065b095b6ca5476b78ad66dcce2062089771434c54e51f9eed387b7e371165062c307850dbfe3cef801723df8d0439226d3a3f9d043cf8f29a6ecce41f0830f3d24d5305c69071e7e3c2d35e4bc30e327ed7d73ead27b5c877ec4e401e6380f42e45d5f019e531f3e0fde633e7c93762d6e04394fb2e34960120d6ad9b7d312d06ec1baec49bf4802c585e40dde0ef855fb178f83601421084b5c945c8b67698067f11b78960640801aedce9750b50c1902736e90258b1236642fd363f73b1f1ccecebb12177226d74910ed7d0fe422bc72cf124bbc1d4d3c0e0452909ef42459e2ddc0d7f3630648bbf32a2c665dc912493cc9d06546962c59aabbbb57afd16a5ff3928375fa68fdf0b1a18f9e3983a2dd3d30685ee5209083ff5a3fb05430be42bd9b3cb394617d0e88dcda14c0867fb3ed25afebb241c8dd7141c826305279d1f58f92fcb83041a5c2031cf1a97fa5944251ca93ccd1466ed64277c7d981fda3a3254071e484c72361cef5294f478b36f4ed1091a3e0f5b011e5e568521e4f8da7b3136da8107def1d783d68fc7b47e229f17856474b4f8787684391f25190a73344b4a113783ca87fef80d743f5eff7eb91ffbd0d2f27fbf7401ecfe99fe835d1af076e81a7461d3f8a36d4976093a3a3a3a5255f6a029b0c41295c5a5a824bf1c6921bfaed08c5cbab6cadb55622c9236924b3404e1641213421b410da4e3d4a0ba1edd35f5a086da35e8b3ad5a86a55935b3c59f4786e3cfd9da813a1c81bbc1c2ccbe3d1be072f27f5b46888a81391a20dfd1a4f5f1e3d9e982f3a2a7a475a5edaf465192f07f5540649a4c7b3228a3a124a0cf22641de24c8899c4842b136ca956fdfe9fb52b86f8dfb5a268cf6dcb746b937cac5a25c1ce566d88c50a20e358a367428dad0a84385a20d7d232846508ca00c150d150d094524214a95a20d94a8338daa9152905250a5aaa814edd784390a19a21100008000f314000020100e098422b17848a60771b03e14800d7fa04e724c1849e328c86114841042c018628831404060846464b80973c07c98402ca7d12f6df5af04879e793eec1c503f2d2940f6f503fd350a74212d161669a880d7978e8e8f48c061f246602482412325d474e5130c39bc8ef6de9243e99f5c6a735c1c24cc135659b7b1043a8a7d6f07f17546c1daafd11cc4721bcaab294603aff09f0168c2278ae5ab33cc8409b6c1677a5abdf372a7ce23a3312db0e639ba61aa0fa10c9e0079cb79d5ed0be1bc9b61a8ef0ce3453fc3a01bd736072695b11d94cb7e020be8313e37e328494e0c9ced38e08835d7882cb2c6e8a99032e346bcfcfb68a6401b4dd36163973d007c471c2f849a8a044b0e7c533ec8c573824e0fafa9453648248bb32068d0d8794e00cdacd15afb0c56868698ed97116810d1118ef24852e01f4d2b2577a9b58978e0a45da80377c732f1578f07288e12e7b6c62acdfc2d9148786651454db172c8890d4135f4c6b1461fd6af1614c75258128198a256f69fb979b3413f03ab84239bb273ca947f6704c6d6a4d8fc51b1fb2127a2582cd319436644621c99e2a8c647087aae84823e610db8e5cd57de18c2837cea0316a6d7f70b7b338a344f077c7b2c15dbbb6cc141c087f47889bb0cb0d656d79b86a5c3eb93a87c4277be4a4fb744e492400f69e3e2b58244494abb08b1a8f8858f5a345ffe835697c4acc334b96f71d63c9e9270a485d3887ac4bb461302f504355a53f0a00c6fb67fb728963ac783a867c2c3af3374c5bcba3a41003c46202a40eec2aedff145378deec990542d14549f82c50ebbd83cb1e216a2b5666d23668518738b4ca83e4cfe261355b52121426a68b0471a3abf73cec3948a55b4ca1de23bfbf5d4a953fd25d9b37fde935905bd48f468f6aa222a707252e00ddf62f5c7743dadbf2a10b3b78500636dd18a9b508b9806b2be54121d7825fe1635c72ee8a44a1391d2424fed64da0407c18e855bc7c6f5c815e383be1c50b0887530b6d59f6bb00362a1e91d4fbe606f980ac195ea2c3a2dbc0776b477898d9afab4b6487a26ea813413ed93f0a6af68164dcbfcf7d18fd884a8d2074f29774fad8295444828f53fbc3fde7f971b76b4d6e039dd472591c0da8ec9b8929557fa3f02901595fc6bfe7fba5369e60552c71afe1c0947965c75e5432da51e4b60d44676eadc863f0a7dbe19a345ac5fd42dfb7219e4ae7ac75ad649fcd94532b647c8dccf26a0328d5af4a1b5bfcd9dcb4d2dbd745103eb2121c1184284e2b31506a899c300094b576b7677b762df13592876010083f09bbc1e131f0403359b4f8e33daa9cd6391ca39b7317a6376cd39f26c8ce013b6192fcc78e90d69c5ed21e181828ee2c6ffb0aab3278e86350d51a2761433bcd09843e44518543f37ecdf6f392a75a523f76cad4122449b653f2862da44f76501da6fa4a28a677cfa3b62db7b5617deb7089bd3813da0ecf10ed4bd4d55e577387925c629f290682f2807af08b15ae68739147e440b72c367ebdbec1869c6b2d4a1614196eb0db0bbe35a6055db68d1bd95fc55a6f108288a1238b0716a3b766b0fb69d7783144bdcfbc1218cdccaee7ffd5de5aa2450dad7526a981928fbb7c1048c3e778eac52478a258c840d07cb45d624312d2c7caced850f3f5b122bda959a78d7f471f948b9ecd6e56d96c0e5455efb6a3b91f3514fa45794cfea0ddeb11ad2a97ecd6dc8bb85dbbf504a9ca294ac731a739403cec5a0e8b3ce2b16861e9cb6c36221aa599b8e0060f5d19d94ed7c6b13ff0fb2f17feff150b259734f1e3a236c9b9202ab501b56a61db05f83414cb5066864f95f28ab1315a0a496258c6431c546b600cb5ff92e0b4fcd46855b613e4ca244588046c7c647382442408a147ad463f6f306dd84e30b1302f911eedd387a3a696b3c9db546a6183de80b4b299fd02206c7cb18d0bc85655d19908a420173f684d628f0a8c4d3ee8438e09eb664256f09de7e4bc8ec0336f0c7ed95213786284058939bd9526f716c885630251ba76813396f0b545e36ec0bc09dbfdf8865fe63ea3a8790be191626911047ba051c17193a1c7e9e0ff812cd81eaa4a769d3feb0d236058a1a2f37aede8a5f204e9c85043e32cc8c0dc1e8d99419bd6d3e8fdfd9f213df268dcf0df4e4bc62e5bdd60b8802d721c4f97c097bea2d89a5ae3baf7670569a50f39177a6b93f372e376f0f51f7a7c3feb30d56b3bf48049b7e9b95098406250635d023fcde9151bb628e47da16284e702d64bb144b0330d913e585b10926d9caf8e3ed63a3d1c3b8396ee138ed8a4f032b4bd4370da1b73989cf912d1bb283e5ba40e830be76a68f148b4e27ac37ce0bfd904c255f966a5e0753ba37426c0d5e4d9d15360ec5efdf03092c93380e851855cf78e2e719ad6ff1bd6e3b17707394eedc9367f869f4c48bb0c498e6f8dae8d63f248bad75af3db4a84706b186c4c66368d0f67e7dee50f0ccb6dc98820326f6198ac420cc700c219b2b058b4f60cc1f1408d74449eadc042bc15181ed66402b0c83f5323922e08d09bd4b8eab8b8a4bc67819fea4abba99646bca3f3600c55168257132e06fab1935710c489d40e1a36f8eaac5a11988a88fe2a8adf983404ffd7cb5be6992104fab5856b0915975f48f591b6ccfd7c950586681bfd6892cbf95b14fd66ef101301da3b239258724c7210d895f9177cfe451c00c0166c99772b7afc1c4dd09dcf344436120f472177b96202fcbe2548039438ba21fc890d9ebbaccc6ace6024efa992a7811a65587abca98998c7978ee4414c032e8bcf17fc65cb5e12590e82477a78be00fda2ce2d35b2ce4519a5c44b78cf573dfb017eee29a8d6034c1efa771778a70d8221fcd0d52bac3690f79193cbfcc2b5407b64a1589ed1ffe04ed7e1c2c399dd2a2608c0e2d96fac4e1da1df2a4b3862af1cdad2acd228769ed96be1cb571c2ab012d580859b2485f31ae05938d4e054f33497ab1b8a6c5c291d911ba38c1c372226d80fa7fa3d7378fc6c9584ae66e1a5b27b272610f805975c55a7e79009e535e4643089a0b34addc8a543172d11b476c7fa9db6cffe2324bed54dd81e334e4e1958a7aaa9aefc360723605c8bdf6e53fc192ed445506cd986021249a2951821d4abaf72304ec0150d355308b174ad167d38cf10f3173bd4047e4fe662fd3eacaa7edc67ef1fcf14fa2ae0188f6611bf72c9b3b61feaee58711015496247d215bfa4ba0c156400400c77771ce090aa1fb7f18081403ebb970271a14f3f08f35ce848c87631b3a1d2d5fb7f094b096d78b462c14f5060f513d9791388553be2bc907a0fe03e2b78a29b5001a93edde72de35a9a549e9695db8f8a4240edb490d440dd8248165d7b722b5ed409df347bc138f770502c0ef716e32889f0ce24d0225703b5fceb02dac73d32f548a9b327497d5d824634a679e49359b31adfe06ce18360294065cfcb57d9ac7aed3bf638881d1e8bc5c5e95df15e69194b9e6a5df0de018e84409af7a108cf08e6c2e23eb4edef54787add41b60959c18c4250a0e8ebbb62ec0037996528afe49c1a47d6008af6e66802c061f7d85543f9dedc5dcaacbc4dc2e234599422505e146e381d38b7ba252823429e843dd287237b268193d90c5456c9fa22504376e6265e66158a7d89bb6f4935b653726943f0b05a8535c83d906641ffb835820154e7d152c0dd8fe2c997d1276778daff92383754f81bc7fd72bd952edc82e52bfe8d4ef95d8310a4168ec24cca54022451f83b6fad5cc7ffb0eaa3270cb5d8b4794884d41dd8c35fa3f14e1a5770b62e479c731ca0f05114241153310bc47d30e1d69a303f7c92227248ae6b9067d877080058b2d543470c360122eea1d9ab4f10916e7113a286788b56762ed2b717b4ba4bd8968bf44daeb7230f59deab783e0a733b71598ff6a448c017a10d63fcc098109ff5b32e3faaf43d634a8869121d8cedc0ced435cc487ef356e0e76e0e51d0cd6602fef1f0e8b2f31b8518668bd2900b8424ad647f3931d966fb7680f222116f1895d2c917c715b68a8408a9ae124c311db0ec2b9d4f2b70e6bb4a104208b6d3f22257210312091a6d8777abc81e5c3f5401ab5403a1cfd21f60399957abee6feaf03f1a74d10d5d31ceac358322aa0960f5b6627f33ce9cd86043e6e8b380d6814d0e05efe8fab4cc9d1681cbfba01e0ae611a6d25ffeb03e501ae52a01cdc8ab729ba06bbd5cc8369dc84bd857f20211387bbfeaf93bc10cd18c2d0e1f4b125f07205b3585ca2161824933e2631d62c5e2644476c6860315af13a3c99856cd0a97820b17affa511a7d3a73e355c4f27d48ac96dbd8fdee38eb0cbb03342cd1bd6db67dd4f330f30543da90933b516a1d283b90422cf2b9d0b7197c4488e9fe1e3c32d09fbfc71f1eca86ea19f3a6d0f31570399434ed132a0fd76716494d763b6a7f39d7b8d949c25e57e1190cfb345a51366ec5c8c856c046f6f5662e7e6971d0be5e26f69006f176b48be54f16db079d6028b67c534f10513c533d955d7d2ae660b0ee0dfdae3f41a957644776690977effe3839d3de159780f0d325fb8daea8b282c673f3965b17f5461d0df19c53a6d3c6d76f123a0240e8f1145bbe53c5f8c9ec63aea1a2fa4c72dbdf1fc29a877655ba996bf7c80b80b83e7e53363141144018004ca452ac9fc6ed8440c9024c58403a2544311fdf7e4368bfd819d59d925a03af23e5b3261831a6d05dbcf7f6c801a41d2b988c4265c6520e0248942f9c7d414b79b75e23dd2f0988f9dcb17fe603914131c58b672de56938b6c688f41d7246bc71d5157322bdef4ab78e2f7c1cb5f52785b87e97dc5ed6d12091747459e42f2a2b48948379c8ba6ce78a9c0cf7bc0fe8ffb53beca3b26419849c39002a5e44bfaec5877e62409125e6ac5b066c03a0904eb6acbd40d5257d1a2d747b5325db0ee61a026ad16b88f5cef8e6cb01a10577da16b4a728028548d89a94d0d359262596c4f2c713d236c21bc174820137418136115357a77de1df5060d253737c01e6a4a257ff6f838389720d6af08f21c302e91d572a11ac1e9a0b4ec9c7e6e17bd948ec4f2835fe47aef1396fa3104c27088055aeea6c4083868eaa0e5e3e7cb1359c0470b31edecf1c3f395ed3408e96ee3ce5d693973d4c11f54f1a40c16d663b77b99bffbf4ac21fc92bdeaba26783bc46109052bab076ce238a1de13adc677259848c515ce1b48014764c4a252f4295a8f9fe215a6466fd610e62461d29c908e79105e2d45740243179e3aaa3b16cf287f11d241ae2cc5698217d5d37998664567652480e5f8d45321a433ecfe5c5fa993f212edc29cbca3771c46d1963403502adaa996dd99f494faebf5b554dd612d0037ab4a119c5e2fb6745b386f867c8544679ba46df0bf3735811c3a5ba6f0230bf941be64f8488374123696c502135f4a9975328b64745cde6b4f4ea47e8d4c601a3370dae3c2bfd9906d2485bc24c3f3fde694b8a40a161fbd52f9522f06c6f2748daafe2c24e0a1053c8f46ceff7276176aefe7a65692ff9113732701b8ab77d943d327b9a5ee314a0bc5f331da4309d7d4b81ca672624c58179a4660e196c511cce815bba2a975db7aa3a7d0a78ffd07d4860c8937ba6def9094f904668292489d456367b31acec1726024ed67726cf159e426ac4319af27d9794b31deffa8fc9f32a91d47904ab64380f7fabdcbd3328c9176c4fa4ee3e870085a70ab9772662a58f9ecd3560e83749fc2e76af4649ad16c4c411beb96b7aa6c1e14c90dae83bc57adf0db4781b1e6ba6e39fbae7add804197a6b0e354f510e21a6284640c195d890eb10d6c73868359ecf6e761a055e301de2fbbc22745b41e128546e30e4e2446cfb29228f6d2d44891abb9fdc907b8a01aab9017db1f7adeb4bf3c5c3867a8984cad52072c81f9526113a5d08318a49cdc62f9f14f2c2b0c5968f015d5f9f03032ea59a12c4d8aff536507b06c88bb193102fb90817a8024df13b2e5c4e87f76fd5a55a1900c4a448b33cddd0dc80a14e6506aed69751cabb00e6545d60608cb7586a9feb4425e6b6998895d89d93becb5ffbc3f209dbd463771608f07f0bedf6938e72c8725fa06630d4012b1462961ff85a174f76498de52610aeb116cd861719cdce54569c6d9a1397e946e2712d7f96654c67d1dc05ea54bf659912ac9e250a606e16272a75c969094ac5460b6f1ddb2f0faf519f0dbea1d7e12e2da0809c835e679aafc6d3428546553c3faa1680c80a88ccfd3179efb383ada3b10c956ff82e520e62c26778f1503466f2aad89172e9641cbea5dabf4bfec7f2166b55d7025f3c9604d2c2cbde2478bb0e160b379afc383bc31ef3cf4bb006ccbe9c127aad02b2757a1fe67cbb269c441b0bca1de51e3f545f12716da3295c7dd10ea56b633d702c5baf250d3e1ea436b1b84bf941c020366ef4a22daea046b4dafdcd494991a24c309b16f973ea9c88193ae2b48d3505a5182eb1a81028abf08fcd3f7695612f4fc492f841e1a36c12c045cfc52492efa07a6bf73dd79e246e6e26f755ad5ab5f91ede1ff75850234da1cd6eced839b3e540c90dbd31e5dcf67ed29555419cc9868620bbda866d4b160709f20ead9cb483ed011fcc032e9e59a4dc6a65dbe5121cdbfae7faf380a4e788958de0db0b56318ce017573c9ec055d3cb420f87b86873a40e41c6c48ff035fdbfc9e0300032dc076ab57f9986546a519adefcf5434843dee564023071da7ab41b2cf1a5c22589a6856af0efcc6095d47a52813c927f5e8d49010ef44201e13489dced378022c37e67d3310c0d717cd3c97dbd5f034680b7772f67692e1201d22250d58fbbf7bc37316b6d6aeb4a0e2e374553eb7c581891d4b43215a74fd0f5238295a6223bc65d3282120175d124a23cd761ca6c2245aca1fe96549629f4eff565b826c4b8be7fb2439d8ec10e4ce18def2ff56127c31e8d984f811d8f0ca212b471aca09643c3655dcdc814947fb2e324a5483808fb7e35d83eb58c18db55d6c4a4b866db656d69e4f33181fc2d44440a8a718ed044d11603e90c212de2a80537400b95eb7a3c5b157b29afac61177c51b4320dbddb5300c09ee8f5516474a3ead3f7f73483d7f76e5e4773cd623f399d2b0e81badf21696f3e16bd132718bb73dbfac1d7c0719b6be5e988b3f5f7c89ca44cab9504836775a01de5b600d78199c470c0ca08565cd8f074f99dc1237dbb1791067614e92c38f262563c53c6d9315df220eb54a6e3e62684ecc4cb4af60daa7d8d42ce3a7160e884d02173fa746a7a28f98bf48b0c190e0ad40b519671a0ea9b2acf6a426b3ffe942e7bf8daffa8c76b6169c656fee58cd3f80cf0a49f778585880ef510e0c48b74b14fe2e82331400657edb4a9e4a957313fa0ae709a1061d82b1ee9b26711f2b21696e80c963895faf15c009d63e6b4b966ab19a676285986134f1112511c348023169e240b5d13df3138bc7c9c41856461912490cc1f90be8e74db4ce7ba1d5ee4e9c25b61df63ca8d6a29979e240142588515ea4638f06f31d1f40f90eb2cc6d61fb6a8a7ecc77a55eb65e3cc5fac8251e145bb82287cfe987b3d59ca7ab7ed172056c8245b59f96ba2101b29a658a35afd4b56b475734d11878dcf08f5f0c6f5784bf086af254c3ed83eb00a8a578b422f9f3369223182fd811bc9b24060c0858d8cc6bd987d748ffe62bcd3d99ea07e1aa5e9430218ebc5195f5856fd6a5b3ac0b076b26c906595e58b1082f1501b4849906b39c115f99a787c6124c2b01d61ccf8e634fb022b3359686c0b033e4d5c1d2429582b896ee5e6184f9ed1d728896c30e183c39ff6fa3f86d9d1dda74296f11540bef4a5af67420c2798c01e0b4431021d8ee246622638fcae95c08c0f1cb919305c78d8376b7a6d37a84e43b13b906ab4315756cb66ac2cad8e6b7dbe31e9854163be311c963a556276b9d712db658100d1e2869d8c7fe8744bebdc1c2dd728fc24798707f89f3bef5830b67cbad4a1ff5a4fe64034beb9f6a5d32d70552f7eb22de220c6a6a2c6867b083d34329a277a297736e92a4c298538c52b818be0840e1f5e7b449b1fd29936e857e3c3e5dda2352ff882e6f89dd44c5e4ac3f65687bfa0d9c0773e012894f0eb297591d380748a5b9a4bbe9985e4c9448cd144f5c2bc12a1eee4f31b5117c1661a027fdfc806b6e1c2698c21e428f99f2216d711d7a91aa7499627d79c8622b0f11b370fe57aed8cbe9e315de12e585901ef6b4c2f10ed4f7985e85a4ce355e5556f7af145729a69fe83bec005e62186ab80a712dd827cf96939de6f24fdca0deb3bd931e1380eb8fe0b0d5d26a1ef0ce063dd089b469d8ad3821c6b81bf012b1b940f8e8474f0a8ead16f4f8d777bf42ae689766a9ec4262ca437ccb7d0dfd78416e26e0f2e8ca389328c86111c8f7744151479cedb8ee51be9e1e347588b38e773166cea9c951e4e338b78154cf16f474e4596e80620444ae284e90f387f561d51deebe83d4d42bf514a3a792a676dbaacb6749856b95485f101633e4614fa68c68b66277ea1107a285f7d4945664624bc4e789bea25bc3f447849382dcc5bcd47ff1be7f49f2d3aeca3e7afb6512b1f53096592e8ea1829bceea3ddb9c5b814cffde222773b341c21b7f174af6d48f2a6f8aef13fc89da42edd0c971820a22ec1a1c8c2a3cc393699f6e6e7eda548211b360da1860e800eb2885597a3bf19f882ac69a02e9e574fd2ddf78a09aecbdb23e42326d0edc5da6817d5b9c8fe16187f2b2e12d7ac63ce7248eb59a8716d170f35666b0e8808b1fc7b8297cf825cc60d82a737aecfe1b5fd370223d545f922c5c30fe49cc50fd4a090e8bf735d33d191e20aae96f662c4afb04b11c413ad07a003a26f332382cb0ad16125e6d57863fd0bb2ddcd6f89e2eef292d6d026c3e0807a7bf01853a1bca481781e2661103087640476fd8e94de18e74b97bd58e01bc448c2e49d73d02d9047d4cd3591d2be0933068a1f919041fb1325622f433433af131d511e801271caf0e167c7c6a49320418d00c78df3210d3c27efb74911ff6249f5a662953db5f3b7cad1e8209949b6122690b1c05755dbc0e17074b6372f8c4ee2084f322bd28954d0d83c89df6d59a9a57e4002341545524225d5fd563701977e95bd325068573f05b810c52914bd2fda64d3cf2967800ed351ed00e1b18a4b16b7666a1e0bf4ec08e7a12a07ea8ec325b7c1e00428867852038160134f659481035ec7dbd236aa2c99d99a890cb8919408c3a00ec3cc39eeaa22a0c5c46ce2889d2ff6636d7ecbee7980a21e71cbfc98b17ef20a5c96c51100d8764d716485541a4ac1298fbc452be9cab54761e88c4cee6fa0f7c04504756ef60e3d14e13d248fb1dc6e678d7018a7413a12163b56096230a9a894fe2871b864df4135e63750fee4928b7e286305f77b1b78f2d0e414181f187c001fa1dd130f6730fa2914f2770d012f92b35760ba12c143a41f4398233ae3183e708f284749ad1f7b706bb3213fcbc523c42e3a6826e47f799a09965f460817380b4610e5223bb2f4985553653d521d5f86a59678874247856f354b58a84c09f0bfd88b614e4f361df823c2db1d6d7a32091203275fb779181c6b85d8da5b5cde53ea3e85c2689523fd0db4c8cf371b7782efc79f0a9f187bf7cc362fb78fb478daddca8a9cad0a384562841ea31cd576dafb8420786c6768c2baa21689858ecf5d89f9c219111a2077e59b51f2feddb71ace2b461a21f2c25e5d77b187f133fc62b0166d8d07f200a380cd8c7394ab6ea179973659fa4e473c0aaf5ed7c9b685ff8effadb53dcfcd9ea10b2606f82898c502d2b47659fa5fbc0851f665f4196570c021a11cee07fdc6795dd83d1749dcf1cc7f711f9c4b08e724c6257688e68b8fee20439dba1f482d209715cf59b994b651e55d04c53e3ec7d2ba88da31244d835fe5aabc86a25b6e23a0088b0b5c940612160143319785343556a1df79cebfeb57f4d446ef4178e4080d5822bec20ad4e7f4c9754c975b0b056034114ce975e8cc69e30588eedd59e661847ab1dcfba2f3649311d6a8e59810608174c38a1bbcfe7a450b568c5d140fc7c516db48746965cc22aa6421908adf3d0070193edc74663ff24a228e03ca7cc3f1382ef2e33f3c36bea9f1c17da10a6d81090a3b314dba60001ab45b3330571d78250e82c90768cd04b2318ed1b5b882233858e05248ecaad99b1312283b101b03518d4967d71ea24a920916b1d46ebcf563bf1bdd7b3de2d0e1d3709dd282e4916daa51d0bde6cf4bbe5082dd0384b52a47a0b0d0f74adbedb2f3615b6d7f1ecd6b228d12216e64e8c1c9254f8f4d5fb6182a3a2748743a404f15d8f88cc3efaae26e84911a0c982361a03eedc7f1b0a85151ae3431c99b9ed93537f458cdcf0f41d84b9ba54b2647f26fb3009c4883b17b3e6073213f80f47e54a0f5ffd13aa62f31edf31d21d88dd69a9a848ce6000be57268bd4504f144b74a596ff7a3b29337756f8862e253efe4b25654d408c54d308c60e794d2247524a40142061c18a3c1998882fbd9380730df2624c9796c79e7d58868f3d571ecd53ff9f703fb007137b7a28a01118746f3222a48995a9b3510e93876748017cd25e957f55488c4be29c2de9ccd0f611b31a5de1c735ab421674ebcd0f8c9753299a6766e392dac51b34184c70115deb3dbe38fb693475712c837412f9881e96868b45e1cb35ef9969926fa664a3ec887fb01bd8a8b955ca0e4bc5336cc995b976ac6d82ff527c790609197cedb7a09e80edc2d60a3b938ce918064a3bf22319517b6055a08707399d1864efa7a4b44c89120e5390654a5b5b4c4928f7ee271883a92a449ebdae1c7ea04ae9bf3eda4ecf94b253c70ff914aad3a19028e9e702dfcf4cfab75aa2ccab01540c690c9a17b5d94693ba4c2a9db69837a355602e5a39b374617f52892c5de8000be13d1085f8d17757f8c6d38519637d5e919ca0f6892619a763190a92e2ff17a0b6589d1e8cc7dd129d30d6295cecbc72090065f50c2ad660c2a617646e09aafd1dd86bf60dc4c1d88cc3cfebeb6847c46ba5b68e225c77d280af4e9336072b69a0ae1a9ca55398ce46e1b7a9a614c84c7713927609a360c59e4573d95313127b72334dcfc4b8f74c6c3db0b3157e54914a3351ac7f0744b757e1fc481648adc8f711a116a3e3805ec870acfc80358b3362751576cc8f9e0cf9c58a8a00d2e2c20129304c2029dd29814d88fa7d6508dccfc7660056d5709608a29a24b4a738490d7076d9cabefb819b2343ef6fa96b02b0ad44ff00a11c3736ed5964990a9b6ec6c4f413d69d44b0214b468f67fdc993ead179261fa24515cb2d63ecb21da06832c51ed650d15d5ec0b0b06e62094d3669138b5cfff33e135f51980deed2d82bc136831b0654c5319aed745b6e966511e2071b7d8acafcc0007e83dc5e289751a8ddf54040ee232ba615888eea374256e2ef863a3f74f376a4311bf821cb1d175048e541ce78cdb275c25fa990b97d1ef4b19da7723590e403138ad20c0925da364691c735fe9e07b35e8b4ae09381e3e7540683b00af7518c98920abd52fb533a2b4cfec50919aa21d8fa26917143cc8f9d74167a68f97dfc86bb0fe2231797ad233f313a2499a1220c8f03823e560cccb1c8665a191a740c41457925e0e86af8d54fd096c1b40ca3f4ea6ec97b945563070f5ae9545ce37ab9d4444abe95fbe6753aaa3743c616bd83bddb2d63f11f570ee48a945e82df0ca1e09228eba1b2b3b373da82a25976f4bf61c2aa6a0e1e7d354eaf9d9ed48dc60851516fe526acf3e7a1ca094cc744c15fad0da31f4f4d652292f3c3840bcf357a3ab8649e791c272aa4d4e2e7ae1a715624b5c2c56372e660b5700999140c18946db4004ff8974f04a70992c9b02bdbf4121f8fab0672258b52de22708d09d36714b872047db9b89984a671cf699fc2b03287f19cf0788fb0daf3c4b58d51cd41613f65aceb741609ce47fbaaf7c47d8a2939ae8557752c1cf7c3f091ea3c2b5d7fa4285b327e23759b3b88fe4685015bc4ebcdc32e32ba5250cfaf9f8ec1868a2b8fc93229082970a4806605b1b77c584a66b4b7a4d560678fce2752011bedf051dd19d44286e2f5c8f13f8ced69c4d561c31d0931b7b32d22404d1f07c052a1a8ea896bebfb549192dbc0f070a0d6251bed5f906b9ba5bfcb544608da07f588a0d53f7b6c24c533531a7e3a9fca45189318838577a009edb703569f510401505148778328d6191c56e1e705729cbbca78280565dfaf722a8839b90a6418a459ee1bb0091f30a523b9175035f1f5bb53233dd9b08bb3bc83e21ace3ad4138efb06bfcc68787fa83d6f9b2d737824e8476be43a0469dfb6c48f066acb52edd91144e8fa3a022e6d2245e8c13ed30bcc6a13f057fe68c4207f2093b040aadcbf98f4a68ecda911cb010fb68246c2f102035348400108be6ed1648610673097df56b80c76d2ca9f0b81d8a3e1385200d3a0bf8f8876459df5d2085e6b560d2bb4fca5d35be33db1a05c840d0c2cc26cd20008fde5d04833f41bcf7b37691654c5a1a8eb5907b74c91c64696bba583eb1a5bfef200cfe0133ef5c55435425796d7265c35bc1b6c00c2e482424fc184abbfea2e01212b796ab95aa051b54439284c0c4d16602b3122ff3b7cdae47dbd210f63999290c879c920b3975a39351597ece3b91b58c9ffd8a2ee5b1788f5f076b50a4f1da61107fc93bf86b858ee9a5a58bb847abfc26609e2d42496a1be0b07baf6467cd515c9f2c855bd53b4e83db45139aa741f6dbb1d89d722e89865dd122b1c1bafc080ac57a34c40315327d7d20f167f316b15e22087bebb606cdf0dc6bff08e9379ab7c80fa99854fdbbcc055e3ab50334f87bba0be8558121b43e156bfae0a9a635582630f07e09caf465998af0ed78680d8ef63ef98db5e21548c1cb477d89ba254e76bd85005810b38bddce615caeb9b03f65f12b5731d26914636415a30fec450b49ca56a3bbce3cd4bee4144950e759396d0e82644af3865dcf8b832d306227153b903379d9235765026c3dd06d355d7e6c7cd1500b63b8b94160d50da43840c78db1e8a621bddb7d5297d53148c450ed633178e1a62aecc2ede88c8575ba9846be16077db363af1161effa36c898d27f87206e13768ec0cf8081b9661911d05fcddc7bf3e36d23d30dca011eb41c3b7ca19b4c15b4147cc59f88c40883f3f1ff5ee3e138be46e02ca370188e00184c38c3117360bfed35af7444c72c328f4488663cc541d5e3b34155c4f807f139ef03031ae32899bc1ab5c4593d5703699583928396cc2a483f7c93b56fe71ddb6beb32b25b6b4841bd92a6bfc84c2820bd72d652057ee7a8e6aba44844ace17aa426f86e92ef56b9ba8d1d9ef593b4bb72cc01639d899dccb152421894bcf00bbadf6ac71014a98f239229d3e4d25cc3de121bf17c0b4d5e3f91191c044aa97da5e029c0d9f630262857d2c4f14f558d853073b27c0e6e234319d05f68b820151b87ee5a255e5050e1065fc0b245d5b38964c5daa7dbc5dbc3df8c405ea164e9aea3288298da8961fc6d52103f76c221e53a153c72768eaca6c58361b7e149ad33fbb0035d8401fe2ece501a3af5fb282a6700e695b13f5b4b4a2ea7e811b3d588c758f3d279046b895bb02b6f573299d742d0dfaff61a5f79e6ad5bccf0a1d624389c902c39530b41dcdfda49ecd0ec135ed5ae9e43c4255bfc32fda57f46b67c364c5639e3c435b0819d49eef7bda1050967416a4f3cf64b28d2c070d969b0624f59438b071b81a03dbaeb27555394c840de439b6297671e67029302384b2aac35d54e8f0ebcdb0a5119836f586a02883e222303f731c3dba5cf7243f6cb04b43af902c51c197b0c3c7958805b7e53b0d96390b405bc6ece4934b3c4d206ab61b69c4c450fa6e8b39194eebe3f0a0987e9cf0c45227f127b8b5f3ebb1f69dc5d2e1a244aff2346ddc8f30e865e741cc229a6f620ecf4876000dcee885d3371f13b33b3cb903e07095265625646c1e7cc01eaef47cf9ae27a6a60e25d2c495d0bf22fe8e8ca15c9657b576677570443a6318e4ef40005390daecfa35443499266c7b620a2d2f41a2d0f6e3d58af247174506fb6b9a5998e855e1f839a3a9a633fb57b2f9414ca3c3a66183aee0525d088a39c443f7aace59fce467089b105cfb3ceb2d49af80ae1d66d8268ca85b63a573d7b7d9f6da29cadd22c36e1ce63f86422315089f67d5b07b38d79ca441f7d01fd4f6767fb7e495ef11ccd50bb777678fd4c7983fd70c006597fb631e6c531b59770904c8870605e0fb07fb2d80a5fa2cc5ee6dd2b429b18cfb6cf8632092e89de837f78aa8fb7be03d6d481c76439af445a85cd661c219c45d923a64922c97e07475071dc14c1693c70e0f2d182ef5ade9aed991b576ccdb5f3b6df0018d48ed8545d23809e1838939d892f2dce0bc2257c97f3c4bcca05320dd44ceffe2f75ba6661e0f426575f9b50b2331b9154ede6f85cb37e7224642147a0228b29121061b90581e149c709e2c41aa4000f248f6c02524e05a2fdeb94827adb24692bad8e298de22f0554ea7e4797707bab63b0b51c0a21169c73b02637fb53d7a9b7045dac362cd803437739f11a5589b51b0a6e1108ed85693ca906232541b765ec60e0a992c00c1f9476115cd3ca21feeb8a00ac09d9cd0dc81c0a25314e275cbd39dbce099f3c193d83a0ddac786cc706a3fb28236250555995e1a5b3fb1442a257e220bc6d10312306e2c29f1660d6d9c149534d2c303a1de644c209bbaf374611457302f4bd9e7232ca20ce42c8594f429ef37c5f9df3bf3f5f71f1cf42bf78e63b405c4ac5f73a2d53e1450c7e8f69c3273c2410c8c86815a029997fa7752acfc75f5deeb94ff834682647f86d2d4fccb8771f23759dcaabade523450c571a0f9e4e53dad53dd2c03a095300a1d58e37d378d0475d2526d9076ca22392382e27de5c2ee942a6b8abca37e429e29a60214ddf067103df07c1f2d519c0bb4499f81e8fcc15c6455532f196b358290c7702ad386703dd398fbc884d233b88c307bab88ab71a917210e4b195f0ee594366405aeebaadb69afaeffaa40290014f8764d7df75ec1cd6aa6f0ddd3b3849d364e8287c1a41a8e1f54d7a998f17889a0f1e1345af8b75c2e753469d1dc31eeb11d400e1705944dc32da4df28223674eb1250870b6919d828d687f54092ef68be619947abc8add25eb2ffc842c51e32ad9e00bc274381d90850439c1358329b4a2fc14f5daf04e9c9b6e1faa137b1b51be988772a5b16a3feafaec54c647d7ebe3d19876b0c02527fc6ab3608cd13b401adbb2b1bea089e59525701272ceb3f93f6a4e6582d7c56ca7e77fcd6b3b596d6d60a69efbb8e869dc9916ba18bffbd97ff8d6ac6947885cb970cf4e3de446b978941fd65e87b601d82d4b822c84701987a275436c202b003c82e7c020978b22639908f82cb62e55e56608f8675194cfff8f0409e1792d5a3a59932558110243761bd3863b616e699650643feccaa588ba5af154ebe804bf5cf04a7b6371b7a19b67b04d715ac503aa46d0e587045fa989347c5e38138a1e0ac758a12a676883cb3722eb627065003260acd508682fa90ea416777a0a4df2c8f9bbfabbc392ee603107ab04acf1236330d8d54fa0bd0970b2d796b93882245c102932db82bbe79a8e3ac813f77449f1b30e9f79ff160cabe37ae76275abea4ef862f165f63d70f710c1f18130a393fda948eb9c4a91f354e36989d378070fbc24c7d29ab6643636fff19a3b1a725482a9fc3438194cb807a4cfe6044ca18ab5636ddaa8df8833d8e620743814c461b5fe972658f361b1c8cf6e904c0421052f593aa9db18942466414202f3eceecee3aac04d8637614cf36aee0662829f01d90e712d81290010074f35003d4b5498195f0a44485a650958d6a77049c91723b49e0496d32a81ab8555a89e8f4781055a80a2181d455804511090ca821618f3888ef7869124f00e7def5ec2de9fe9909e602b8141e95885dd8f67ccca2addda9925694efac90d5c7e51cd5871fa0db9244a5c9c036bc2d454766a6697c83aae39f12c426703d60d4ebe0a550ba529964f3a86574e48d81d3df3102f2a52d657e1466e896c6bd6a9c1884820b05ceb1262e07f08eb535657bd78f4d069b36e42cc1329824612dd541dedefdcbe041dee7e99122af951acd20655aff05fc4153232b6cfec22c395f82d335cd87f935e166b2e3e891ca9c8d08e338f22f8689efcb58260a3ceabe70f88d4a5af6fc90d7588ae12949d6a11ae9afc0e92dc8bfcbaf8eadec32053664365d935d40438281da547f52fe6ebbdedbf864c886c100340c6e7c17e3700cf514f797dd5defd909b9e567955ea4952deb04cf840700016a738a6ce0a7e3aa00174ebc8cfb1bfc708890df082400809df1befebd2a9124b68d74f625f3e14545c368ed07005b588f097605d6f67bab1450b07ce9818b921ce35af31e03e498041c899f0bb536c3e13bfd904ed61f8e9e837ff29baf0a38ef9abd9ae73cd232e7b98bdc993f5a18d57f6fb120cbed664c6e3bce4b3fbeaeceb09754d12796539eecb208726ce60292001ef916609480682ed32a2d358b60152101734f807d02a351d5806ab40cc0aa4fd75f213fb9d62088b947a6160eac69c1bca08fa1b00a4311cd48cca5649ead02aa5fadb73828924af748d366356491f593b064ffc29ebb2c5e05c3e1f7ebe2fcf18c68300b51f233ad70633de4f49b0a714b741cf5358940efa26d97cd0015d8a7aa50ba53499b0bc1bc879baaee62963b916b0d54f2b4b9dce5b63249c2125849ce82ef9993faf4e05e2d693d48054a6f801bd9add51c858fc31075181ddd152348c487f02cf18295225f2c31c465ef9284fe6ab74ba36e7b1a331d2382b18092cc07b27bbfd751e113414a57a891f71c990c4f2742b7a334b42065782f4656259987a956971a74011b5a7eb037827e0d4d95cc24f86bbcbd73b2f3c76b2c4004be0d05786c343eac3892ac6fe85695747443c0ff0bd02ff88bb103defa2d06f696995ebbeeadf44914112d069e1a2b6f11bd98b902c76c245a506fb1024b24167ddeb70ec62957ab3022e939c3994f33c196633cb5ab39e5ba96d9968ab9fa874a435d6be3980edf2ee57c5f2b8446ea61c9d8aaedd570372b2a6bc0c470e8ed28202d509077789f9ad87cfa9fbf09e6a6494389ce8c94cf1fc140a13d5b955c1e26ed13897071cf36fd7b9a579bec24d2000f8f8e49b3bcb333633d6a53bb924825554c6e6606c442df68e7f3d45cf4fbc6144791634d5e28ca49c4af572221c87214de2ebc519565e2dd7c95b1e430c9cdc0ec804cde00b9ac597376467c98c5656d5be5712d125da3fd9b53bd101d2af17f379f1537bac6de014e029451bff36be510231fc70587b590885b695fd83d03923940bb98ddf6f1d59753385345c8c38f64f59fe3e1ed48b0ce7dc26c736ee25482c7a008a008eca9aab2d3fb938e329f6121d160ce538665434587659b91cd6692f6c30b434c7909370ba70ac24588d40bd356ea0e16344e327c9c3b8bfe81168725b7b6df82a3bd779f6ab652dc2aa1dfc57b4e89790b6311b5a963554a21a27ef6079b12809ea7e0302518eb29c6ff865e99129217da38f95bfca016861a3f9dba549e0351ad20e56f5572317fbe3e490e0c0bb6ea9fd3068996c142ad285e5fdae78ea65ffb7c265e73d68a13104d18f70cca61763ca46e625542cba88769787ea2e9cef152a38be27e8c1a765c888622b54b164a8bf1007ea41806b98a206053371c806ecdbce28cb6679cf6977a865063d66d640d072a59e3f4fb8552874f11ca11c7a90cc13ec8ac593dc039b417c85ec0ad4f820917f751793afef14f04a083fec781f755c88cbc71ff5f19a2646916602f91ad35a2cb18b98566e20b754de6a15c23fd5d393d5601d1afcf17289f7b8ebf2e38bc4de6cfd2d5b4c43e73dd4617cc99476f48cb2ca1ae14019598e98e6696e113b26e9db0690a105d3184315a540a2770b18b931967adc335335189b8f906164535d0c4cdd7601c9d8b1b664620707985997700ae794b3e0920b021fd271608a9d0058a37d5378d1615856f99abace15d86acf4c1482fda11f1e98224760a324c92ffac4817a6cf7ecf6026c64de7a6f7ea59610ea273f138a7a41a3df8268ba2486eb8d78722be8c489854d54fa44f4f6f03910c159a84c0fffd818ab00898ad6442c679316a312b562e0e29ad28a803263b23240dcd7fc1889627f95700b39b16396040a0016554d05a0b772b7d31128bf53c491a710685e9ad708eab42dd209915ab66817a05f27d039d24ed3394db024c779456d78549cbbb45756d8808133c9c06fcd496d9d006034d30b146e9a69a63d8668a525ffee5b98fbe757f4ff321c4d656b1f546745208f1c03ba278064748bf127dc795de12a708aae464b06a2a62f6c2250a168d3faaea6b8edeff298bed6a51fe334262932a8e771f19883a05f88ffe46fb049c9882b9d2698bb893c52177c3118ba27d8aaf429af0197c1cf61748157d8f8a59de9a2f1a26e41afb6e42685d0e67baf00b258aca624a3f8ea12419a142f5808a7ec2f813b8c232a308c9d22cd40bcf98d1963dc3e44a51d9ddcf79d0e3e8f7875c5669f1c881b71c59544b25b73241203b2c82138e1783fe416ec0edeab606aead1081d9570cb31a504dc9b4e9c0af217f8ddf14bddeba4d9e6c355528641aba87c8c4eb6d09f7a2357dc90a7d0dc926aee82a32a8e784c021a304dc13af1863de1301a587f4fa17b542acaf9618005e9a1ba96474701a57cf7140a03cf6727b8b2f4fe753981e7e0a1e0f4a9c5befebe9420b850689c3a11dd5c9608ae442cf0da518636088d911df70b6117bb86774d01419252cbcc1b1b943e27da2888c79996e72decd7ecc3026e464b977db832ff439577b171695ff887a3655d56ccc130a387b360280b3616b8522d0904101e2235af57619c3d872136fb6d0163ea7d80a444c8142b4959fc31681f1de62e098e44280b5dadc27fd2c2e6a3e4f32bdf0230ba10680a9e97eede4b3026b8df278a49034c18430de265a910689b211180f1fa5a1ccbd105d404322b70725e77f4e919eae0244508fd85032200b24d3cffafc7d1d85e2dac4781fd8048e7dd3e0f2f0d988e72086b91edfdb48e6aa9f50adc22f3a1eeeaba6c88bd211a217b91dc2b0760dcf8d522ab36c380fb7614750e6d3b213211d2f40a3e035d7764701cfd36fcdf24e561becba419920500cba142954c54000c88849d65ec954e97fd5df750a4882e7cd1386c1383ccdf3890630fc097d4b80c9cad21a52f0a2add58040cb27d1eb4af819dc7e5681052948b2d7f3d5f1bfc2647ea5487f49c0802242213f32c41cc631f0cf84832bbe4c922e3f33c4648eee4d041b242c3414b5c6c7d0ae9ace01470f370896f7f71c5948190568c94b1cc1feb4221a968a8b3ec7247ac37205861679addd8f4439dc89f3784d5fadf96403fecf81bb6964abd668c3adde4a0d6213ffc3d1459d31511ef00f20678fdca30cd320eed61cb21d26669d78f1abdde7a4efaa63d8030e4407e15c7a8cd065175754f35b2bc47b1773b8933c41b057ccc2febf252b15129c52f9f4a426f89d02c53618a07e2bf6082307b2368b3df1bac22e1a4c6d15a5462ac48295683974de0200dc2825f03ed400a54967e2e578c2e34095227509962252116c15909c421e71760e06949e4245fdf1fa2c85c852da7f7526841481eca92afce288b7ec5f9e89632a4c62031a500bb1606a967079b0c1458debddab20a02731772fba85aef6fcd44ff3239b08c838809f2b86ebe65abb20e5b1d43277c3fd447fef6e75d00b7a6b60c9a0210c8d11c8e101ebfb71a05e8fd3fb70036cb614d2d1da0f661042123fe126f39adbc86c30d995baaff52d50dc2e7e81714373cfc15db0bfe847e87f49da484e91dd70cdfdcbfeb590b1c0de4d363d667a2a5e6f20bf90b5f97c441eec3142210229a2b08e195bb2f4158420f328bc054bf8157bd97fad0e815df25a9be0fbce8f052f4551dbb519ffc8e947c4288641285040b198cc17348ff7ed3e2362ebbf454acd51ca67fa25c9c9c34dafbca58f872459d3722dde48ae06e0a5abe9574780c404239e5542d4078a3e9f75647d5b02c345839a47b024ea23e77b98cc35781eb1295985c55ce9ab39e560890e97445607c11343448cdb86ae4863ab761796d18c3a48303f32a4009faa32f4b1ba2309593568de11963b338d22bf6e94679bc045165165ab36921629b30952d8d4dee2641865b47fe24686082e62539359cc8a729d4ea763f9ea1891b4c04cde51ae34991cea9ca89b54914d60739146b301166b042417145a867d0d524c4fb73173a66bfd898ce38276eb8892cc910a01d961154c9accd292c050e3880156a13f03145d5ad4009a126ae81b961b7055f1f4a6aaf0f3271162a1081f8f945f8cafe89862d90b926a6261862864059f0ee8153fe1859e13619fe64da1c88f9a6114c10ccc2531a4bbdaf02752da856624ad77be7b1115fa3234df75f92e31c798d2537dc41c8f130ce08d87c002c34bf2a39621bfa8182fb91e9fc1ae714194c92e38e1032fa7b5addf141294dc4879c58b5857ef656f24c7f23fd2b8edba52765b4fa28ea2111d72e3068d23819fa29079f7f1a0e7d3c20143965d681fac611c161f5dd37fed18b227acbac509ab2df811d809ef625bd5712b60edf355bfe07dba0728d32b706105153650f8eb5dd25a1a9cc454a91f831498d843ea0022af4cf202716a48b4da9f79e5571ca173e3bc209dc3403d6332e056b19c824c8aa94d9efa8150dd3c7d5b31f2fdab495f01c472a033c7c561ca84a6d09f52002b1fb786d65ad5e169842731017359ee66386dc027f3f967faa3211e4a27ea5eec82a088641a44d121703ca8d00d43627bcabffeb4cd2ba5c49b07af733507637aef7b6012b25cb683e1f62fb553b499bb355d2a072d208dfbb6c71ecac8cc14746567f7a1379ee19c25df3c50370e37de52df0c59d363c23d6ab4f01d431a30ae70c113eb85a108047cf55fff13b6d7c18c24b93b56f26c2d1e2f0ef5189c91b4c3a69e14ab178a97556cbb5b4366016fb630a373e1a9bf3ba275aad1bc536e9c56e150934909f93608e062751e7bda05707c007d6ecf404cc83db483bb22172d862b048fe9a3c5647eedb776a037fe188a3ce72e3d03f59a59f43c5c582f023adac46268b9a4c869c23b35fe85ac208a891a378dc6c05aaaa88d1e15c7e2a581d8c93eb786901e30dc15dcc3deae663dbe80df5806a8c5a280cccb6c885af993c87569680c17fe32832b587ddf670bac95d1a82a2421c819977949df2edd177184c613e65fcef0be5dc540279d8f9d08260c52a57cdba9c786f4dd9b249db1fb9319a69a2d328d5dbaede540dda7e7c263e8e72c4a9bde58bbbf5878d28bb098d012445c2882a25b81c18772dabcae44d6df0d77e4c8536e912088be57e519d56758ef6bb833786ac26858a576cddaa39d350a18d17cea903df387d843bb66c6945318732208616a8b06703f3c5d626317480e3fdb319642333c2c52c6ad8466f02bc933c522065f5713191976ddc40f792cccecbe13fdd4c392fef6c56cca8f06e82deb4ae7876ee496533dd842d3edf8d39cc800a19a6e120ae744e47423036723f165c8dff4fb7937c952a2ff03b6d63abfceed6130681a3b034b804abac106ab5a021501755fbbb1dd93ffb9c30a68eda67e38702264f7b42540b2b18019a60319489bac8f22ade58724e66d6de9184f86246fd1b2a7163da18bce2693638b60468309214e39ac0c04c4f2ba42c5704235084df67e5fea0c5b7a70e76c99e6bb662388145500c0227868832ec1a2493532a91f8f57cb03764fb1b3cfff3fe6c7bc74206532d5206772724d772d7d9945fc2ef8352950d2b9840dad7598e252b1eb860062521733d194940db338fb7d80f7c8e2fb81e6f08428768d5493c04461ef84e01874e0a86b91911f1964936029e020ae16ff4ebe83f15b0030c02108c6c5d0deb0a8c7919a00ce67f67b3b0031d1cb54c71ac54c69571f12ac1619727666a9f384721f34f96ef1ae7a5b43b8dc1aca62caedab06af7d18005453efcad99076d705773146c58bd0b8828b1a89b89746d4fc1cc77b75e6662651251ea54a6cc7eb7df044bc0edcc36393e3c72c89eb3af717542038874ce010ed1bbaa7c30a5ca43656b4f4cc9e63fc612a7f80964638981a44668afcb266561f384bad6903e5865150d1376b72026e25b0a340454e05a964e85075f629bb00a9edb3339bdcba91b73b34fad5c284e1910c9bf787e62aaf1caeb9d1440686455944291bb58d9f5310438e30a387f1048d36f625184b9a103d2720b879e0a310c09e968900b83a6539388e9789b63512b202be196835215220b6abb1bbe8519a3ef9bca7943458576b057788170d703e7b710943766877e40d0d1f2293e49305246ddbeb1dc2e43cac837feac35120e764430f12cb073e5303f1c88aa3dd0a046f8b5057f83529e78d8a5e4172a7e5d36f24de8a73835f99a3a003277ad4ab2d3e25091c6a90c9f74c30a6785a02db2a9a721bae0f25ead34c78c41493a06361a0072d2312b5e1ca3bff716ba813e675df7e4654c202293ac6f7a0a9d7843af01690a0da5601bd103175310d5262c3bf85400c72d5eb7bf39ff2210c412f77b25f229a8345317761002706e2bac8c2ca46ddea74228ee2a3fe311906112425ea2d14ae64ce94a241a7bf44499843025caf94875a4ed98e6aed7ced2b5aeaa89c27177953c67c609ae36fbbae4a55d22f7c6b625a4ceb32adbb117253472a9a9b8597be1ea8a45ba3a31a1d317c725d53b7f05e705b01c7a6c12ae4cf63634ed4c59e63e1de27f311e8bed8146e50fd9ccd0a9b9c1553a48961c8adad9bdba7ced7f62d552d3c545d7dbc583d620aec0d19046566c636f4b94b0ba04604e755685fc6a22200423291fab5b0a65fa2f5313ed295f4658ca4b7bd02129ce8a8f854a997a488830d4034c671d9655c3cf61b23aee9ef1768389fd40797970d15847fa6fd5007df33a436cee3d0da6d60234098397075a674ffc20ad1fb662deb03433be2496a1185ede139ccfcc6f90902faec302fcdd1797ace5647b2fda4701269a490842301b8a10b182a89e786f818840d22cb34daba295aeaf6e1480e07658c750634b3d3c781a38c39578e1e9a6cad27d3a860c4cfd11e528db642ffab2958444a85e738c917ca04b633c5637b686fb523ead4811c1ccdc498e377543e05d50fe8e37415b722bcfbc3d6b62ed9e19e9fa47e5db8417472793b2995cc133a1d462edc9582c3a0fc9bd6a7b64ba8f12af6def54c047dee9ba33a7b152f84d9e80d73a70d999eb142f9fa2056097c4901439f1bcb607fd52621408a390a016f1502a4dfe9e2faf19e27b432e14f69492c9033dd81ebc2c29f20ec428bea9aba9f0aabf2889009a5886e1df391562f642cb4c079c5853b92b5104717d3c7f7af108232e38c02828377c0cd030b110cc14289be2acbbedbeafc0aa99cb49972889bb32cb4a588dc91d5b45f7b85b843dc2492cc57a854b1062b1465731ab1f2f14cee462b9871b182818320aa00ae680d124a4b4fd2063895dd80be9a0c76e1c46aefdb8c729a84557f636d104e247d6993851d40a9dd42d017afc4aec39eda2d94c9b2a1933d14f7d277e6c913757ebcb9fde2941df6d159fbaa662314b70320dd8d64ad950de3781a5b4f9723218f3da129a1153f5b676151638b8371664883fafce2a30ed3d020b2ff7f901cea61cb0a3080cf0a962126c5548b1c1bb87504215163921755855d8a0bb0f407f31c925d0ae1749818f2e17f9a8281727be4107a751c3ffcc5e8033668d13391308e2d6082f082b510ae2a4e894e9999559e8132d3a43f79b39ded9db594b5ccb7f3f80ff68351c30c296037ccb3ee44eaf000bb1a1c98100e13a43bc5734c36587f34400b80a768fadfb4a2c46f2190ae5a5db97680fc6c2d47f2b77ddecd6a5a2fd8b8bdf540a95c7ca58a88fae18648da72d4a4bcb366a84954bfb083a2a5fbb67e0a3389cb8cc1d781eb8ddf5cbc97d2d04a0fd9eed49e771ba7516f2826ba70362512c46ff24419a5522ddb5d2756f7604383a713776b6abffc18f1008032c763aecec329318cc56fafea11da1be2e57cddc3ee0f1405504bb14b0bfe84b6257e9a2a81566a268943086629484f33d5ecd5f3797ff6f25908f8f59371608c4a1af6d5c31cc7a758c601915ab7bd06b563e784ecc04f5e7c6aa4ab3080b2362526be039deedf8249dc5930c0e586d25af4ae0a4740d56663e134f7fd04032fa689037e475232f52ef0845006a30281ef854d185166aab56747548f780e830e6430bba253da8905a03e6f291b7d6844422602fe13487f21bbeae9316b22abd243db9e22a91bca443e6b311ce2b3cec42a65c36308386a349dd0a5325724e10b132849f302f053ff4822b0ffa18998088b84338a2a341e16ac9e02300b0391815beed3d11f7103ed447b15f37f230a619b0884afae2ce36f85672a9f8eb7d2673a396f696d73e9060d871707754a27ef9560960f4440fccaa0a321a4fbc7d00d87a7a6e3194fe99ce593432daf2355674acadbecf6f129e76a89ea533be5750196f7fee0f9c081a1fc9501ce2dd1e497f11dec0f5751dc2857f4d53aa03f30a09f5b6aa6110d1408ed2b81ee5ba1cdc5cd43e49ad3d4f15736b9f8bdd794735e49782395b9f86939024cc2ed954a640855aff8d6544f99205177c54bcd1d7e71e2b464315d60e80811d9aff8e45c32a4754c7ec03b267a5be9afeb336446d66dbba6825045a698a85ac50a26c447e20c12b5fcfd2803a57b0bb5c6782ca239a079ed142dfaf57d80dcada4ea033969d37c2cc8c51c26b688311dac706d72a256c294ffa65ec5574286ddff44f3ad042ad6eb4eaa5016c26142c8f5ce1a5d4c2caabfef9adcca33c103eb86bb85f0b73958437f98fb5ea842687c6a4e3d08576f4bd8308a796eda7689b78be05ec875b47ec8d19705e384f82076b911ff4062351ce542d67ac11e5460fe7c4049f3b490e03a2838bea836a1287a044bfbf9fb21f331724b0e29983efaea49c9e535c02ce8af254131a2e89d7b02d00c7339f478c6c42540d7108afb0183ad25f0fd91690938449d374bf874af8c3a1e4229b1a0c6276a937b678abb3c263cc7213830acdff4b3fd12f6ce7ba062c4e63fd51402c54b0d4ab0d67884d00f0c72007e6e273e38303126f8ac7033d9ac93ee1e9716b3c80eac2387e89f146b029c4fbaabeaa05a6c0f108a888f96604e695088507529c6c2aafbeda08067facbd827c2c6d5177a8421edcf7e39e8ecc26f9eb842b4eb4934f7420808b003a853a50564fe33f84e18f226a5d52ffb0c1630646c1288e6d68e0a3cad083a6ec2335d3fbefac4623552f4b44941d27e18a51b35f44cf31fc12d45bf70545a7ace9adb60b3fa69e8450d640c6e00ca00378ea7e288ce82e0545c1056e8936883e034846d0c9def06a9140a280a3b2842ca7b142ab01a0acf2c38671b787002145b16749d6541802a182274c23ea37fdeb6bd97f4effb0802ea026acf894b4e364f9b7186bfcae7ec095ea13918d0bd0e4ecac0c8801890b796664bf82f38ec99e3872ccd1e7b33d4033343ed7845800625fa0832cf12e3a973a5397271e24c94d6afbf1800fef1a41981682c5fe9a5a14eb7af3f43bb0e21d5ec646377c9544fabd03b7614543e957b8ea2325d41823e1e36e307b2594db5086afb296e760e2ed6ded6a116c74d00d682a2e883b6a1997154eef8292502b2967733e6ae75a1dd1b5531d81a2198f15f55052dc1379ebcebc27db688596f6af6612729690d04cf168fd2a254896323bf1557826a7eaaf196e10608b15cf30bb5252c5aebcd4c5cfc0dc035204498e0d440d5816fba0d436eae0c566602636eb3531f48363dd2cb1bbe426de9f9c0707b99be4d8c062ba14c916e1a8ea4d7e9233b305e0373eda51438f7d0c860b459d3b8f231ad0a9ac6f4ab2b52cd48109b2fd138a4f3efe94e88f822c107632003bebc51262b7360e217b8d1fec7f6500100f9319b4d0b7f2b1dc19a4dcf354a3e8f3c970b41fe3a0265eed7b0c13400c4582eaa719314f75000ff535c450642daad1aba299fbe076d004a8199609d05db22e85857fc7dcef547ed4e185108723a318fe4059a9089e4ac4157777997d1ed4d9c1ca7feb90df569d0c70adfe5bc0341e3fb1ffc8a7b32dc194ffa8da8442aefb2d7a91732203c041512369588d01551cc00bff9b3aaf4067b20a944494cf3bc373e7b9a6db602093c89214bb5d3a228e744e95d0bbc06fa3b6a0dd73fab0fdc2cc9d5f208b0ba02ea7f65ca96568a35a2a0e3f1f10ffdfe7fb10b80dfbc1595eb64d98e060e2d19fbd09e5d58ac1085bfb644c8a5cd02e3052218c4b25a3e896eeae62874d56046cd03e422328165e9ef95bb49d0160bc45a533a50d115f67d707838328c134523985c52d3f04bc5c35786fbabf4255a29c78b3429c12c11520b5a7f8140851473f1e7ef515f00a60043fd6cfb6da85fa2347c3b5b5123e4376b78b3b2f384a882833047d0d11d4336221134947676c03904d77a00a9c63323e69a986144b1eb3fc27d8e351e7e72519c4643258d9303c462481b6d70baec69d3ce6f5a096e812ecfc5fa50ba27460b1f5d3d36dab373dc042820b52329c1ef6d076e51d62f86da883b09260c58125c8284bfde348f06f9c6a87ef246d07fc312c5a47f00a5259e68992a0b0cca893600343d6f91d66d1079a2152a512b01265a623dda29cb7ef900715eaf5b3165e5456dbd0be80f5f2a00b301b617ac622c907ec15cd79ebca0fb7a526a779f95f0da5decf990c261de757549e3aea8cf3a045ab83ac581822837a05058d7da21ce67d120b127b9d845f92f0aeb99860b902709653f4fa1d3cf7c2e6882f8cb9a68b9de63a97fce631d84b35cdf3873bd4679b162bcb1118e757675330716c748af6a4a203badd0f8fca3a14a3af2c1c2b75f1ed1aa392d24a0d6df77127965c28e2d1c6f445efb74d3682cf4ce2ea17bad536813a6bd95685521032ce91938c428795fbc89f9a9d74c81771554e1b950b18e5c9d2cc01a217c3100f61da704b1ccae3a46a12ce6bfdf8051ce74b75f0849b2e6827655ff1dd08895f86643a86140200501ff7b6bfb5b0debed7063177b840cfa43b171c8a7c47eb9415e66930fa2cefa0c508beabd288612fc267b80639333a957e262769936d871fa787c6f5d90991604109a0c550582322641e5913ea09c707b296885cc029874cd1150db2d61ba3d70521e768e1bcccb7422acfe1d11748ba972a809b3211990b25d2896d6317b7b758b2272c9cc00bd75a37ab6c5008fb20bd57094a0f9c649a77232d1e1dc378b66fb80d28d0c656e8194036e9b87903474ce729ff6ee0f40284447a198c84d2de69f878837d1a0d3fd86cad5dc27749649fd3fae2fbb0f9d2806d4b5b33691f348e563346c6a987af7ccb4a5aef7cbb698a3708d3a51bb3c6c1aebe8013d3b32ffe296e3bcb4cdbbed257671809a836dab675b9ebba5bd8621ba8099354f516deb1bf4a7914634291b94b6898998cfdb942071e494f7dd3d06f434daec24f058ca22ef1fd91d52f9e519d62d9ba374e74cc2cd73f6f842e2790f26114b2a4e0d913130cfe8166f2f074aee1e0565e94c23e4d346e1ed6a88b2134d59fb410d628fed2179a5b74bc802bc2ce7a482c8b892fa6b57378395911cc76792f69b67be77385c913f39b3f487d6de517ed9a0a252d954ef2c47632eb6c9223d055d146e817706dc560a580f39d6529ecad989ba553ecf1947762a97df60a5007f25c8bd3246342e58dce448c90f61025a091e46a2830d897e713f8438fbfc4497a4ac644356bd214028a442aec4a6983fd4bd62c61d8d69c134c579df348207169604f6441c08b5b7ad06611294b0adb3315f5981153d194947374c69189b8462099bcb537993314c94e7091541c34e3468af17d6a29bece31a36dc92f117581eed82a6c4bd372fdba82597ff07cb255cd1c96ccf45f511975d4175f4bcadf5526f3553894b57cd27e074e3dfda3e1f8d00ea77e55e66909edd9fb9a7add0b2d556e201d238f1c15e1293b52655882b750bc62f97c426468fd5992b947a44679aecc168667d0df812ab14c3f3d148d53beca189c9618adc9df76c13e73c684a063090cb5166416f39e37e5a6e364368439868b105455be2ac44af4a034764ec8ed0b288bf21ebcacc59e95d09752ac4f1e0de07493740255233094f17cd8563a5b9575ce1e9097190984732e19d241c41458e2cc52ab1f6842b49d5fcc45a122256c38a4027da95ce44b5a188f164bdba5b7838e0db80c4fcfdd9da98714e812a18e9ece66e400d7452715a32002ce62314dcd2a488cdcd0cf307c277308c9a17c9e9507db10abd18625219d6496321ed1989c42d2ec953c2aae3917db4eb7154dbb22d785628e90660f776e74d5584df020f3c9f98c80cf89a5c5ead34de4cb6b41aa94ec8263f0bafaf01e6cfd0f8f41f8a92132a331c574f76a4ad726cbecb914d24e7ed50eecd338fd4a61c33d759295a5790ceae639e5b74abbdabd17e29c68944acc68f5f34be5405f07d876c2d1582e9a25a75f9f13bc03f288dcd1f63f9bdc8e6692920a69dc4afbe18177cd722360023895a57f56c90a5ae9453257ed3d21424f20e77645a8749ae2b33470fcfd63bfe73a3febb4792a87bfe542a9ba39174d7669195976981ea53b67f711f864af3af263afb1f58dc56abd3236d456c37d5d5527102d5096876c971d711b643534f7a5fd12cde42e29b510596aa37e9f2f153783c824dd74afc46509dfc3c1ab4b032ba92763768445d9cf69064cae450bd8b7be7c85cc9adcaea90ea42f39493adc9e7cd7189a43a49d02fa09b237d84fcb0385d5480a1abf6067a0329a1354bddc2b2d2919173cc4a81afc43199562e67441d9d8bfe6a94b4f36e30a042a3bfb84dc881f41e7fda6ec9d795c31fbf91512203509b124560264a97c050dced397af7eeb8c13490dc8f9450a4e1e8c2ce5d0de8824ac6b4396e1fae549275ecd2538e96b158eb1de5134341253263de68bf73a36265820319032a4603daea6a038c58efedbb90c6044f7a42b7cee067bffa56be65ea0113d1e2c4027f3bbfc673657cf116bd47d333d099498b914d3dffbbaa1d2e0ae1101f0147fc2caf94fe0ba17382e89efaf1ea9ee5021dcbb10ceced44ef49e55dda206d706b728a9c3084eb6e5088134f534df84ea6d71fad166347925d9b8ec3e24713ef5d9ef292c43d63178b5c864663dc4b88bee1ede03325ae44e3d5d8195cc0e49476c9c076bb097256ee5bd1ad1ff4319727910fbaa94528b4742d1f489758c31ec31d87d04dab586826250f5b7f6bc36c0c7ab4ae18ab893b0c296121fc28574beecdfa3994545867a45e939c2facc7981dd0ff16cbef07ca83d0676b053e8351d40c23d049aa504afce37a01af3a83cbac7b9e5f60c6c25613b2b6d0ed5a5b7d2b9d0b0cbfe0416e8fff7aa6b92f0928ae81c6b0c14aec9642bce17f5d600d16a6eba687225e119fbf4e76b8d486ff2bea1685c7cb240351360292bfe354931bca98e4f8d9035f914bd7a9fd6fb5fd7c159c485270ec0fb1dfa4e44d690d26410d1b48506581a8702ea14188c7245e6292c8db81e0d5fea1ed95a899004a4f1c292f15276c4b20da5424a0ab3715b12ad50f60cec279386b053164d0cd0e2f5552ce711045a2409a6039a0467490884ca0ac1fe2e008c214272fb7db0f9b6ac96c95130518627d31392677b35df2de0e379c6dbcc66a4dbdac858e75f8a4ff8dc13a049334e5dd6a1cf04aeb2ce8f2859b16b62cf5855d85e97bbb62abd3a6cdd4abb7811f2c08b2693a79c779e11a964b0dbaaa1e7663747ff7b2feb8a16900298e9e5447857c3b2f47eed95b4d48324af70d32a1548ee50f8664ccde8c821749a88a6ba073b0bfdfc9b7697237697e89f00f72da6dfb91f16d9a7025698424c0db34f769ab1fb3940037f92d66b778483f1af4df6c9b26c9bec467e376efa71a1a8c0e510ddc81626edb75292d5452c4f81af6347f020bc1b993581e7852fe37961bd51c766968da2908b9a84c851b8036fd71295604b5a27152bcd7a25764dc1dbebdd861511ae5a8d6979ab7155eef452ac3a97a1084be61414e6b8c07136399e5d153945a5b12f303aecaa8e8cd0dda175428bc3aae8cc93ada51c1f17687c12cc1823f7414018043fb7c67e5aaee9203b046dc8771cb40cd4b277d68db4196a7c8ee2ebbe1fa779d6f75d645ec5a0890238352010cde44ebf03938e5b738d06c8748c18b028d70403153579b342d463a7492a4ad9c332b8f5204287f27e969e97ca3af62891c1eab1097d29966eede94ee682fbe39543ad26f3fcd0958e390e02554ff35895052a153f176719011c42a312b4f283c25236a1750fab2fb54440aa9f0f1ed3c361c18a82c50e84a9e9621d1b3a1e6471a637ca41fae47bcddb43c78be1fac876023402c848b301df5b5cf5a236f909ac83157bedc893228b2674fbde4d45279c8d3ee6a2613da1401bc6ace488f933d1b225e59f164b2b267e3fc10f5e05d80f772d819614fc4e665b4a2a90ba2a8369a03b3c10b6dd266834c4d49a753893813902126daf1323f44b57d90de0a0b6c1262abfb625953cac702129836c6322d6c03adf105eb3d7d694623b15f76c3c425f1a94242a904c6054e00e8883e2c1d9a5e26caadb928231120de64f4a5d820fe1a9737f108cb5e450e3f3a594811162896e24e8779a8544a0a3714d740d3f2a349a2c5a2af703152accaac0aef8b263198f7db5a21099648790146e3c79c2d2886f47bea54daedb0946ffb3889c477bcfae5489c0e48cf4307713fd602eb3f182b037e18a1b0ef7d18e7f422aef500b230bcbfc3a36caafc298056e577a0fcf68d24e2cfda4ac5ec029b442117ec29be2049c004057bcfe8a3a25c57d208e205f15cf819497c1747090d41a1666140a1db67875a9ff42964a4dbd75b82df92feaadca60e19fd2d0a4399cac14fc056c651df98a3cc3f1010f49d61bf1b1fdff910960304ae1b59e6336d0f087ea686781e864f86a0539e00726c2679df40e18b9fe754c821c070d5877bd2383a9881335050c5a1f29f84e433a6c5fdddd0870d7c312817ab7d76fc36a5a86fb78a9dc5f1480915c90883d5d1d6eb6639a7e00d8c7829e3b58a73eca058edff9cc80fb5f390eff723e8bf418adf4d4bda0ebcb445836dd004ac581c3f99f0027112f781fdd839a8ab7a9e2612b5e607b75d155a918b0e9d57af645793d78e1e555ee0b02d06c392ebf00b353a9a33ab5aaa3df51c55a362ac1d66aca7c72a8de8fdc20292e706c2962e4034b763acbe9ce07517357a79bbfc0fe90425e774316fbd0b28aa538d1e34b482c433cf1abb16fe14fc1227d718396dbc69131a347370dee461abe917daac1b19cc6596998f6008cc3412967204d2282accc1a0efbf0e401adc117115e8cde48039390d90947c3d5a04e9415f0b880be67238cde9f4f01e0f829b75417b3ff3c50bba5d22b6234016970f885ebd149ba927f11988e3c6e6e23437bf09675cd1ef548941f1a79f3804db69aa7632a38551fd0394edffc9a2980d68021f113ed6e489d715b827e18d1035b3833be22e1a7b594b93608dadca50f289fd57f03bba53cdb0c83fdb98cf0d7bc807ac1ade136a30aafda96f8ebb915a888fc8040ee8f723ab40940ecc7fc48cd9d3ea3dfc0cdf9a31f49b2edd8c8e2b76895030eefe70561fb751181447af0edad0b00b375a09905a614d216dd20a40d48aa12d957ec940ebac7ecd172e720df6556c18fedb2807692621ebf15c6da4f1493b62a6a9d0f10d910eb46d4051cc911de5b83af4694627df2c3e28501399d60c2227c6785693979a1412f2edb03e82fd83ee5f29e8fa5d3f8aedcf524dbd7bdd51d2652671b8d54424fe656c681163cc1c6c919a1a9b0a9391d494969d0f70cad91bd799256dcb402bc6420f263356dd74e8b972abbb06cab18a34e37d0899ff4a0d5bd3218fd5c8e092941312c3f641585200563a4194415ea5549d424a728158052bba4ba03b1ba5e4d670f2bbd12c16b17fcdd83065e89703a1bece8f521d4d55e94820233d6c4e4abc638504ef41a0de5c0b3b4e1d48e2c1749a2287493c75a5c61d54e493d8137aa206114ba2f369f9902f179bc90085a30afad3ebcf7d6908698f1cee6d2694332e8057af67cc5704837c76cc553c9d7dc08efc42368f9c1aad209c22e539ac10c6bb7661aed17ada47e6a79d2aa958998f4f1a40308eb3eae935f1fef8b5dffffd3a7693fdb00fe39b5df0657073b55d52965ce6f1db9d244ab7ce326161713f0b728c1b77d558f699a3cc560131c56a2eb4f55007fbf12163482d3f73e030671aa8fa098b46215ec57f4c21d3c9a23f39f045433a9400c995aab52a107677a24161fdd7613d0bf21ad05d68bb2557d9109186b534dad803473ac64043772a02cac1ddeaf18ced787e3f100c322e198b0697a8c2adff37be9733677c32c7092b026860fc1e9e3893c65364d7ed4d5366088f08f8a05cf42a0587631dc2aa71638308f6aa02cc586cdf303f5c3299cc6616149979e240e4f87cb86d1a894e1b82d953c3486442c101135e153e7a5a5d8ed38ab9b7f5718ce1f998f97eac481af96b04f3b51d986dfdeb1a2a580c9127ccc202c5a1cb5248c8a53b32f2659527cb138963fa955363772746f32ee81a3c35a5b92888ed359f87d15ade5fa7937a247bfa7114389ccf92f25ed793caa5628965b593b72750fd888563a74d272d3d6d75fe5681a4801e4aab6a64a88f8030a383fe89c2deb7e64fa9c52953834efeefdcbe6a9801ac98025acec1635d30ca51b639a5327ff3053e55fb02c00af3887992974c4b7b4b1565f83d83875a04d9fb1cf75c3d990221d707412592382805844a0010a8620530567f2f3af92ea05a6a5539f428f60f7673fdb407c2c4b80b838cd192d1922da5945206de0527067906b3a51cd3024bb13767337e011697c638cefc66a2518f333f077d827a9cf933b4b4c63767a2687eecc799aa94d5d35400da491269050c661e40b4fd062151dbc3d1474449c2c00681b010f5e24b38059f89c513ce248a61f8e4487e382a2df592708a0199905cc2e936470b669d7c310c45347c92bc4a4b5578124e31504a6a41469de9aadde12b768574e1861fb48404ac8a045814e0c913333f6787bb687a6153e8bc0411c8ae69416d8e2672c4c8ffd9a069cd038c3d3de4f8a688e29e9e1fa1c1edb01e2bba70416e521c12d3413559c6b276625d39e5d8e34142903b652cf648b8c70a550f4fd46744cf8f5ebf1eeef09ef3146def19c5277b1d9b5627de76b1d2d5ad696522480556b27af83e4fea2015c46a8c5e697a08c123e1988851c40835234694cc312bc0bd67369ee568e5d7c39e13e8c5c94a8418219e7852a734815e5c04e8ce0933f1648892a3e3c3ca1db485d2276cb2f3e8c54980fea036d3ce176142608eb17f92a70c818eef83de2e336f47326eb2b8dde75df4943aa803988a9ef071b4a2d331d191c76431f29828472b357a58a2a309b366a2c764713b044f9ea508747c12e8ed6f8ea3256317b041e0871be014d481c29b706adbb0c09d09bbb0ab124e7770ef41713f815a9c09d4e27c500b01fae58eeed6f69496469e27f9489233a55f1f9f9fb02749320c49320cc987915c83db613ce18f78927c19faa425e24bcc3e02f4496bfc47ffa11e67e225409f2290fd8feca11e57e284751ed4c58819134ed19e998bb1a347447c888a2766a8c513a05b17db9b6356e8f3841d9d31651ad864e2d12db093d7dc993171d4859508d0263c01f825508b271867aa3dd3c197a12f306d5f2dc3013608cc9d344b8ebac029930d02bfe8c96dc229eea2f9d7ac80c905179781d3b2e4b885ab984c064ec177800d029fa94d07656c20e23cd3551b47c4cdf56009d6709bc292630983c160b01c1b0683c160b02751d88728f943f6edb90cd204490f4bd12af663ec49b114adcc305f5c0c4d334d8399864e924db4726876fb450b197ccd98ead453307713b5382da22874d4cc07829f386d6226c36048ba4a81288ada76913e48fb439ef875dec7a63ad6e8c4fcf3c3c4b024aadd6ee1d6e42ec3f7b146179ca052af84a1563ab190cc00f6e0c3803df83172f93cf61758a30c6c123682f14ad91623d340fbd50bd12015e44e9228ff6c56c0c71fdd9a2c6e54ecedcddd2729dc17e7d7cd27b998b31b8553f1e69a4ad402baf3c8ddfe9a5e94e1eba03a4f74a76ad8e8f2b0e9956291fb38bb3af4e6665e58871c4b582985c7c02948e3c69041c66e4875f506397724e6408433400967f0a2f5c68b569a100ad4191b48f2de7befbd9fa7efbcd36c2c36aada3cc1597366cd539c1cca0097e8c05559cdc74f2cc527245db533fcbcec27f54a63f58f869b83d3551b075329409f400deafacf934b607f6c8afd3a53c07af5fc24dbbc674be80d5c95a9267a38532d97504aef4c576d96979dffd3f7cb56ae9ee7cbce349cfde09407aef29ff3394f4f4c1798ae52b06726682035da7681bc1a58d4701efe0428fd01da9f52e1eacf0f50fa73abd1c05559ed0748f6f7865f600fe7bd35aa7ace7b7f3637faf3836bb534fdcf610ebf8412aeca647bf6b2da02304e7c6b6270d97095a76319cfb9755883d41a65f1c4ad7900db085c363300576f379167bbb89506958effe731f09332d535c8e97a965154cdcfa3d112583cedb67f4ac686141b1d074b973271726802c77e11fc7d477c339a8484d3fce80efc86530bb340e30ab1ccba86d39cd55a0fc3500cf7a8ff8268478289793c3fef2d3e81e977bdeab68761074131eb3108ae45710cc11dde709a77ce7f3bb2296ecfb0bdf72e719acdbdc5f0f7d6f7965a76c6362805a8b7c6188736cabacbb562173fdffe9b98623feb6e6b904029f0fb5a4c05f96b5eca302a05ce6e3fd7bc609b738622532ffcbe15451bb405abc0175f1417053976d2e27bedb5604ccda05b11b73be17bc16f9b738841bcf105438aa8c1efdb9dbb19cf64b0f6d6a075b63df4295a6b31b63754659c71c6e0d6f7f17f9ebd0dc238675c256b0501d7e01dc08242345cfc211cc3c91dd470938cb8028f6d01b73869c5ca56178c035b2680386c11d9e2b1f303ebe23c41884278a9465462039886f3c400bec0020f5e3a11e170923776808fddae49ac92f408e1237690c4c658c541201cd6edaae586671b12d742031bb1c27621256d7192cc085a5ab4aa983c2417ad14846869ed2fcebb5db54658b5a06046b8e943f801dfb1a1082fbdd0c0c92c549048e12b1226248c279c9d5b0b9222e013dfe976450202488693f081a4e2a21a580ece130686869bbded9b2282c07bba5db3b4c81d5c44b76b16550d591f883af3a4f5ea4ccfe976c542d3c96ed7ac1c2fa29638889bd35dfde9b8c796efc60c2c78900567d725573b3a88c2e48a994c6354ad976a7b2074d596e94e51436e007225c30c3a94c1a9b68c1492335336c4a471830ba1abf68d9627222cae1a33f048e187ad086008a14d931e6b171e99c78a05e78355cb54179e76bbc600a687e8768da105282ff2b3d6b9bebee43ec60790d50794f5078e8efff99b233b1d5178731c50cf6bc411ba5306a687475af92cd9bf339f0b32b0f259ca8913274e1cdcfe3bf3c96f9dfafefbe9fddafddbfd8c9eb24f6b370e1821e17b65d21f23db42dc0443669156cc5abc1537cac3b1c67a63adb5d65adf279dd6482bf0ac850549e79b6e56a62618315220a62618316a452b53138c18bbd1059b826683b05606d9da6be2be7a945e9d5750e028a9c51253d30b18325213ea9b782303649a0dc2f968d5cdd18a164bfae868450bfc4b9a046d84c5d59f9e946d1bd080f8501727befea66c1367332e4e2b03f0f3cd31fda436057efd346b446453fdb7231ba49fa8868d0a60d35b5e8d6777878a0eb86abdf4ddd102ff0e9b02d6f5dd6183b4cf9eb1b1fe0d9296f433e96fd2ff423f05f4c7c04665d72fc386717747d7b5aef5df1d3685e5f205070374fd4738d504b041371b04010feea3df67bfedf84d373c49bf927e26fd4dfa37ca31cac3c98cfa9c5d8653ad9394989aae2ee49d3ca5143652cfad33ee7a2fa424223752cf365883d1ef0bfba3f5ef94021b84ed6aaf54b64d37ea057e18f863e097817f06fe9bbb4f4914748c5f29db9eb428b02976c748d8c8ae3d72f411b07e510daeb541f88d8658affe4cd96637a081f0a12e2e7c7c734b5a3e16e4d7b23ec309173ecf34d30dffaeda95097fd3092b2b391cacd0d0a251a24c182935227c198982c377fce05e9cf50643718491e59ba125e2c155fb467bf13cd779f5cc79358df1ccf02cc4cc669d997af2d9e7cc70ae99b314e8e734f31d2213cb4372f42642c3431674f2bd893e99c4280ae154b8f8db37fbc97bebeaad8b3731833320f44390454076b439740236ca9a27e7f8b0b3952274869e88ecca9ed2665e92f6cddd618071e5ece6ec9ba110b87a7b519a7f3b79a6dd113c424acedd4344e422c9fab7ce2889b296e60dece9646de6e37b23c90699b31bbe8285ac0a0b2c0a9345acdf6c107e21285cb5b75af9f64d579497aee39e8d2d99b8f263e56c0607b81e0cd3d870fce006b7043b7c35b736e87eadbeac29be2c2e5f56125f56115f56942f8bea8c0f0bce161f56191f96141f16131f96111f96ce87b5f31df1c177a40dfe10ebe48cad04bbfb2b9296ee8bf7ded0a6b07fbfdb9f8f7bedeb6defbdf75adba66b9d2d50c7ef939b74be3fb9dbd10a6c64571d5d1d7f92d21213c67f86663a16337e55ccfaea20175f1fdc764d95e917ad00cf40bfb67fad53b76f91b0cdbe0ff8e853948813a3445cf816553958c2399cf8230a75c3854f5047b8f0a3344efc3c53c3b77d89e3c4b736858f05b0be35c8e956e2ab4edd7eae8b36a330f8fddb69cf7b9ee9157c25ac5082af84ac27be1238e02b01ea4d1a9f12323e253e9f922c3e25567c4a9cf894f07c4aaa7c4a7004b1c30c3e2d386b121a5a56f0f14ef0f1ac7c3c117c5b579e58f9b63ae0dbfac08765c397a4075f921c7c4960f025699204c9007c4988a4396c7c54e0f85690ea762603d7480db8b6d6778217df09574474ebdb0ae3db5ae3e3f1d87b83a1ef48191f2fca7702949e9968cbc510dc21b823f8595d9cfdd1980669437087e02ed165a5df5c806ddff66e7bf51fadb0d9f64818dfdb068c132d2ef43060800b552ccd766b69a2131c525f57eb30dbcc57798f89a2288ab19c877a9c2972fe518f33512f3e806ec7d860a68b389f0798cf7f0c77dd4ded7f5c7484b1eeaad06f69f7a988587888bee8e2a2b8d6da2962a6bea8f6a58ac055a1956264db846d19a61d03a3f0a3c246f8727e9eff695a139bae8afc99968469f78f30ed3e95ddd245f186f3af30c6277d8cfc5f4354b87ad7fce12adedd6ebdbb953fb9e16c1de187b3ab0e49bfddc702dd672f42c440eeed26c582afb2ee14f905efd0dac35bc24c8423537d51bdee8ce23971fd99f9b2a598765fe3ae2a3c85b1543f7d48ec211d5cc5576db82e17171757fae3e2ba5c976bc45cd8c9156e82aff0151a0ea3fcf1bac265856be4fac1557c757515c5a5eba2f202b34e150d9ab2b051c697a80957d314c7e3c0ffdb8dcc20c8856315bc2af2eb4f790d5f14f7493de4b5897ee0c979ce39ebac73cef7290bc5c05591a729db4e4cbbffcb5f79637db3052f8afb3a1d180890a657fb1609510310009be2c12c6425dce5d099324dd354694dd3f4a6820069985ee1aa7db3c19b92b4fb0b1b337605af6ba5c39048a7c10d6efd8389c13ca1ff387847e4cbb604a3cd197ca60c1830b03bb445e6a21ba5cc4459a2dce51008e5ff832973c60c85cce0f2091ba9f848c7af62ac8e394f817555e837dab5224cbb7f47a89f4d91cbab42bf002e0a3247494b1706245216373da09333a442d6216a442ff43a6fc3e72ea4ae8c6f17cd06c1c8b65a170cf34a40b1c2433932910f9a688dc1e6a74113a6e9260ff8cb7e8078f9727581454fa1100cb223d5fe7e30d00f06eaaafdfd7c7890f6e2ac770e1896a10dc12dc670ef26f998ec170724c57a92900c5cb566cc983143b34251f2d00eaedeb50c7e82d3e6ccba6a4ed47b2ce7a5c29f2cd96d334550f84fd8e0ba68074ff20a8f6e2ddc6e37316fa074a8067e8275d80808a7b766948eb23367d92d0a729e270c53e9743aac33a33b798903e7c2466211597a85493092b22dc68d3af3de596bbc2405831feb6c90501aae5a1dd6611dd6755cdbb051677cc510b4644c75eab86be684d4e0088f146d0a7bf50dc02fa9c51253d30b1832d25a9843c718e3acbed86fbeba977723da6e19a10eb918801f09b8a807d79a0805aee21cc6828df2ff9f27e7a278d7fb95676adaf9c9bbbce711fdc055fbcbfd9fe71545204cbb4758ae90742d4d758a73f84acf702ecd36fce7990ee9b87a79b9cce3f178403bbfeeea8cfbb887716c09def14cd8095915578945816d7787697727c485abf7976d9f73ee76defb8bfa5d1130982a81b3b4a68a4539b87a774db97677bff3fcbb4bbb8c3bd5f1c5f862112643196e7c54bb7dc9230b92a39355bafad305e29ca5542304036e6c94a9728211245e02c0c68bd6982651234c691d3b8c079668515383944fea862da5043537d0bc71e1869c049ce2c307e6870f4f5c9ec0f180033422c499da4166f794cd5c50c392ab235e46bea0f101028a9b2c5ebc74f021778185e90088b746cc2f8814d40d375ed8c147464c14ab1cb0d810d3c1130c87d35508357875c9b193e2a2bb42c3151f309c00030dfd02947d212bec1ac7bc906323030b3b8ce0b0c5c250420e21717e377e3668ddbd0144be51be90756d40ed352954a1814707531d48e34216203670f8c00390311c7893a570156e8838c81e768803a457830e3d687810421126714a48e187d64e0896418416b8a2b6be3ce940e147195e903334683637c035e207f845e1410b62d6fc82c8b113036f090b35aaf8b8a23bb031c200b5bff0dcedfa430ac8e647d7d80229690d9c145678414c142e271d6e3ca8c1fb42f5858a56576f3fa0e0e0c1085da0bc01c2e5b764aa062d5a5770208382aef14385f507d78ebac2e5e48194a82c39f02892068a0d4dcc084933430c41ec74103b781019c6435da084e0e40b170d2004406582962155d260e172210bab27ab8b47cb89a9e595048888ac2d4f625d95384e2460f8911e20d0dac2793fcc2c8a3b686762258f488c4c824304296a2b5b3fe4f47838625b614a60613991c6e7481812794b484f288a3dec8448b87e320f12b9cc6752143235aadcd02181c25936553ae858d32548150bb8b7c584a7b775250496ee247b596d7c48ac1d66a268c24f4ed2654446f283888c85424fee69950991739832f39a0685d58d56d7e97675532500124e5999772ecf0f98901ed376e15bbb6579721160f5638809256855a982a38c39d3bbd63155baacdb95cc0e1fc22671b23079d22575c326039b4185ae72f2060f8c5538ee763de2e4088fbc0ad3cb6ed72344ba9af6a8d092d000c4d60e4e10ac1007db068ed71b284fb6e8b82abdc00167c84f4d7a23aefd1d6b43baa0a87506c31b7a8486f7436cc293e205bccba5b3508fab7f9e49b6677f5acf5ad8205108acdb2a6dbae8aea93624a678d0d0a60b8cd6868b0b87517bc2062160561c46ef170eb8096408a3c361d4a7088ecc25467f0993177a74c1716062b484175c46675c1f543c44e13808b3e0443c01466d981270199d917356555e380e76a670229e00a31697d11903f081cb1b1c0761174ec41360d47ef9002ea333f017afa71f8e831d2b31e36bc7b1bfd85527cb42af86191c468f6ac0395d0e30c63d7a760ae79be7ae6e8eff49f4853361222034085cbd3cfdbb97cbbbdf2228e401aede5ccea21aaede5cadc654b3666af7f632368120879ec8f295d26b3ecf761652fcf304cf5bd3ed2ca2e2ead57179893dbe9eba111749c1740fa24ec41893601109a5b8c4845189bf5fcf1ebf5cd926e25397ea62bb213a21bad264311483d6b1335cbda9a2f8ba5b856d485e48d625e2ec8a6605b17e89aab87a6bbae5bcda5ebe56e39e0fc29b05b71b8d94d7324d4cba5970c3b4de8d6fb9bababaaadd720760db0532cce57214fa3249a12030d5d7064fd8a6d474ab7e38f62738ca4dae0257efd50dfc0ca24dd90654de6ee0ed5ef5eed54d6f2c5cbd5d612bde6e7b246163bdc2b25e99b05e1959af4258adcaac573a56ab36ab950babd5d66aa55b8df0b01ab16135c2c26a84c96a4484d5488db5480d6b112c2b91df5a04c94ae46b25b26525e26425726425f2c13a64cb3ae40365d62154d62147d6213baeadc2c38ef217c20f23744bc6ac247cad427a48c3c30ed1a9c7da44cc152e2d37ac121039e24119264ed47cbdec24cb0c587d5580b96e9f6b0e96e9ff99c5a4b4f36cf1f045ce4f2ea76cdbb8fcf77ef51ca29f1881df8fc3733fb3ede6302dbf28727e9e9f94a3842be5a740063e8ab9305d91020f2f11dd81285032f4fcf76a4acab440e945b4c54dc269ce0af9b179810560134e6fee465ddda50a2f10fb9e6970e3ccee6ffc818d6fdc8550a62784a71f1b5f38011f556476e0f2c1142e2ca274000395aa2253743ef8a2f07c51ba74c8dd56f9fab2935b132207660501ccba5bd3642014b220992c48eeba5da23040286441b22cfb71b5e662ffd7bc6e1a04425aa0ccf5fc17e3ae6e31c736f0779fe7fe79ffefffdc0732cae9f78b52e0f5fb48d8be17e6f5fbfb625eb6817f4da6fdd66c0038db1560ae7e5fb5bf7eb90db257c43d36a4fd5151e62ebe78fcca7f947f45fea49cb5c917cfa7687ab6f6d10df2ae673eb63bf50cd4f3e7072a3acabf22cde57234be70572ed76f8c5a5348e8d627054eb753aa3aefd63745aa5f0890b8ef07f165c2b6d92e881736f21171badff632fd337d3335c1d81fc3073f8899b00ded7ab11f06b60100b73fc67e19d8667bfb67ec9cbeff3e3df5ad7b1db2ad29d3f6efb7f9e4eb99669bc5d56e7defcd94693bdd5fdb7fdb8fb4df9a15ec9e2b6e6260714fe18fe16c03e2873fa2e352f8e2872fcef838b3e10ee3b00a4471cf515997a5f0aa5f3f092b2f50582ef4f8726577a032840328c09162d30387dfce4efce0f6f19a6da2c8f979aa7815b14ba1cc057b8eeaf8758eca99c2460098ea362dd5f1e71d36ba261352a6ed5ba6ed176b99c6847be9295ab301f87d9660337803d24cdb0df84cdb4aa4d0d045819fc4b7ea5661db0e116cb406c9010020525c6b707805f2818e733ab6ab132add66bbb6a0b62f8d0f73c2e50b9bcd80fd3813cda5f1c5d90cf1c799cd34f555fee435956aa4cfd2f8e28bb319afd69c7030549cf9d84c5341271c19a2f74d07519cfbdd5d07d17b15f5d6ab83a8edf58d8ee2d6c171223f3fad55e5aa4c2423c94beee719b741f6d55afec58658b1ebd558eb7cdeb8405eedabe7d5d58584340295288a37aa09c6eff7e3e2eaa5ba5d40fbf3a5d2f7b9c6422d6c5d6483abf677a97e96767fa4d2519dc8ac8bb3dea038c2d2019cb4f3cc210aec0ab1409227edcca7d75903aa59dafd9bd8e555d67a6dd788a0d4ce136b33ac121b85542053a00911200a4f0770d24ef3fc72d6b43a226a8456c229985ab609c0d2ee0fa5909253842304d2945aafd5e270d5f63698a16a25ddebf5f0d668ede824d1020b2212f21d2333519628cb27aed6986ab55a2def361113ae5a33327eea947a12618057bb1db8ab31dd5db6ddb2ae11d5bcecbebb73d72bc7e46e8d2f1a316240e16a97e8a8042d98953174686c04000000b3150000200c08068562b1489286a298740714000d608c3670543c978883911846621404510c85000200200418420032c848e6d40054486002f16ad492b3b4b25d8e0015382914e8e33f7b86732bd364598297f2db44473a7ad4cdf77374445ea7f8b23f68e2f3110ec1dbbb612f93ebf6dfb92833187c79c55f2b82b060fc21d6b591cf61febca67a293126947bec4c44c4d2cec4f85f9ec2dbe7da949da269417effe7f8ab84ebc73eb545707a9a2f95392dba3f4fd9119d7444ed59a3030368b7f6001c2539f661ed2b73dae787dd0835742161f8ae376b36cfc7cfcd7ca0ec5bf0ed126c51ca5ff1aa7423c846dac5e185acd786a433d6f518be9eb9c940cbbe9f079c79192f0040c7f27814ee5716c3c7b6e226168f0621b83eb18ef23ff61b88ec1199e5661f27933ed76c962acce47811e5aee712a9654e604dbd65548588371c8abf840f7e5eebe6ceeab74dc6a7d7f72ce016d1c652389d4bfaf0e2c08eb254a0ae1f11f804a75555f18c2784a8996ccb545ada53a3f74388bf4b75d3af570fc6c5195940807718b5a905a54922c0785001bc1e8f41329e31316a207000600fd1231d7591c582d9d518b5bfef0cedb2e868f72e76fcaa572f73b94ef86dba5c666584f773a0f15f48b55c5076b205f2168f7a95e24796ca2b891016d3f02385559caeab2e79602f64fba8919adfc9338fa1f226e0665ea63742ecd76fbe11b605fb76c28cf083f66195d9e939593f6b16c513126614c4de47ecc6504bc1387ed6d97f777be4d4f0fa28aa018878b2daf264639e2c581391c41641efee3dcb3e0300e9b89224f9a6bd16788a03c04a67e2934836d2f1560bbb301a1a838e5565294ed03b880e6cb649135b62407cab374f30712858353ecb09c3077101ac049ed3639078c10891d8bc2575591cec2d0825d21e6411f6d32b29591630228e9b513704bff67ecc3d814cbe523160c8f3ac81a1ce410d8806b83d6274235a20b5d9afa3da3d5841d80a7e6a4d844cc0ed13c7067d2833212becfb80fc3fb8cf81b66dd3a185278339408cf0ddf5a3ab928466229053ad94bbfb9d79613c9494ffb4e4e823ba8abb318daab444747a58853d0bd2078d445301a031db1962e25027a48ca6deab2427f7d226ed3ede997392dac9b3d412bdd4162b0c1ab5c1949886c71f7f4fb8deb4ef2a622ce4636f52b1e20e31be244bce6bb0ffac23162ae7e768627c2e91683ac8f6948dab2b21efad9f0151e13070df0a2439bc6735f32f7f26ec9809599c5b142fea0916a2bc95368b0fcd7e9a64c264ea07b1da65e78ed8f599ccc118f1efa6404e58f8e3d2ee4bafb102b98a2d82775c8c07c807e139f5d9dce31ae8b2531fe656f8cdd6cfcf88a48afc74d8f877a10541641c961bfe88755dd30761f33cab81b15ace8a025e02b6ccceb270307c065dd05e31c4e79528400a8cdec2b0109d76a7426a044d90a0acdbf22e928406afb17d08d8a00e12845c61c604b6b95719066479ea0cd56e74f79a5d6ee095b515cb74b68d7bd1e5bfb6a337990d0ef58d6b87c5cd3b8d77667579a42801393ef228da8f4b5d55c35fe1856eec2c71122e1728ecdb87a41315056182506abfd41110ceabf092da6874c7e4fd2417dab2ed1c4e16fff36fcfa0df9e234c34f248eb839cb42720173f9c4a85e2040259512c00718b39746199544e898f06c82ef70b5445cfc2d6feded7678ea679599d081a052ad68bc2700d9a53718fae343da53d6316b5e75fa71ef8ba1934a813d9aaed3f2e2dbc06748fc12f5873870b61b11742b188053748265740c200ce110aaacb734e86a91786c0ffbb3ffbae783bbc6a50fea9d7f34eefdb949b0b2ae25a13f92169b88398a9484c9c3d0a450562e21952105420786224d62b3817899fa018eb6ac613c75020279e2105410582274662bd827331057f0495a987ed746774137e2bbec557a1d22bf9c211ac53f70dfc4c07af992649c036d37c72492558ef2f88aaabae5e112a911d32511b3f0ebd98084ceca87ca2a38f2793cfd605b946d4235dd1ed6e2887db6ddff7e8e887e92fe5dad1bbf06b73067a3c192d089407fec6fa62679364c53c729a2186ae1d4135ee5c446842fd58f07c59c19b469f0f123639e6891fc0d04567a4417d3399829ed403b24e57508a4b4dbceacf5902b2373f17ff6955741864020690315ad64c2c54ae9300f4186b007915f26d4a074ab8efc58a8aaf8cbda822f20d02ae6633cdabcc2b17bbac566d38a460bb61896195ead3e069c6362425be6a43e273af70e89a4254ea272393746962eed161d3a2171ebd8ec0a3d05b08f10b832e8acd9a9d7c8dc2b82733377a6552fd67c7b1b49f7bbd1a2f578e496ea8d4bfa4f1b369e6cf37635e23c4d02baaa30c80ccd0bc355d747b77b31de2919980dbd954081c5013e853f7751bcd76d30729b6a2e971db326e66079329c76a05f70b091efce0f500c2e02009b8263af20100c035b92dd12bdb50a09a05ca85dfd26c3227cd837c8548f84b08ac182ad777be0293910fd045b9f4b090a3d6a16155c126cbdc52f15196cacb68e17266553f4c825dd3f15dadcd34b6522a18256f3ae86c8d03ce1e49d28ba46af1ba5d51fa84e01d8ba23a39aa502432c476e8e626774b702d1e63707eaf88f63da2b7c95b7a86ea732732b29e46e3f62e4f3551cec005a07025e618aecff46bf8306dbcab75807fb6aba510462cf3c4ba5f34b2969c3d4436c19cb402e5c6456f752152eced038fb68f395c65e03a0164f488b819ee63e1599fc2510dd791a8e692f01926b15181cab879f775c40f2fb370c16afb07b686eb613fc1d1dfefef0b5db0126998dcefd341b7a58bac08e2262e3fe371610c0ec3d9ddc8268dd445212fae93f979dc98be29c658f6b9f4f929ee05f660895809cd634276b5e4abbe6a6fa5c7d85baca529b5560e8424d186f9f9363bf3833844a8b62af2ca4a4c4398674532c1e88c691636baefa90e1560fc76378748535a6acbadd97c17caf248a6658fc52192fd7cac1fb0f96ee379680d4dc8c000dd1b651ab2166d0a35ed66893cabbf4efa02b7be3778db1c93b6da511fca4e221b5ab63905dfc2b3a6e04da8a7bb02c8519948c5b2b9575912cc5387f27406f6e2830cc2721f0a85ea097da484228c22a46659fe22fe306aeffa5e2733365f52127424bcb1246f6b669641bd8c73253887b2c62c41e9667d692335d6484da6617cae983e8a5fb48736679749d8b46abeca2cc6efb62c05b219fa2ecb7e2e05c8f967e71e496078179c3fbafa645dc587c5b14dbf13ea0ff2dd7a6914517fc011cb15865daea3503334a0b721f073a8bd43ca8ba66c4dbecb352c1092fde5fa8c428cb9ae24e60a2cfa18d30d72b1db64d1142f502911cba6f2ec2e154e171fec4d8f946f61ee72cdc36f50341b93141778be7e9e6b0b977df795f56a9f9c0abf2f75deae838a824cd52accd47bf3eeed32e43be24227fc54456be170a0334b491bea17ef3cd0497586647d4bb44c275ad8bcca4d5ad0e6bb8ec4250bd5f715105414bab384eba241b9ff9d7d6f4cedc7dc1094d057acca9271ec0c09288d279459f2b6d1b388c44823b5654e52546aa3a82b5e4c37e34dfd5baadcf3457b341c671168ec792cc95e11b343a0b745f6e62a185134eae220fd402f32e6203dc944e032fbeb890273b5a10f19e23f342c806093dcc1c390dedc0b2de45640ad50dd4d56b1a6c39bab98493dd6e6d5d89ca70cd8735b14a2b3ea316a79a74de3a215779623052e610e671a0e00c6288847303a86148ea8a428e558bb5d6d41cf1701e1e9527f3b59cc12df1508aa16818004821208471f7fa462106008ac82a1aaa6d3acdc8967a572d5cc70e0f53398d701f0fa4c6400aa833ca3bc084ec19299e6820f89f460db663b3de96f831dbfd7e603d0866fe48b9d8fe9bea1688f515883a863923dbef7b9bd86675ed6eaaf894f65921af397edddbc40dff016615837cc04df0fa4b4ca16bed67a241bd5d8e3d3c5041d5aa1a9c99e33c47f344d9a94c719580558aa5c0ef956013d5f4e6b3134adeb2ead5d403e12bd571c572a9755b074d4f6f919b9de893d2689e87d76252a7763240acc73d9c0dec4e7ebfd615e76251aa1ec4ad15c6532473053f7951a82911d7eeae1263f13a3d2a659663deb3b7fbd3b963908c68f4b6b5dfe811ce6befbabc3b0291d29fdb42472865e687032dbac984ab3b603f52212624904cb1508e9acee3bc03696237337ff3747420e94d0b59b64ae18121e65675b90e988c872732ebb9d0dbbc02d42463515145358d9f5bb37d003e77f99dfc54fafda018f7a5ab054c3124a82421518b3091a03bc4cf7c23aa82e429d5c58cfa09805ed47ed425fc55a1507254747054b88eca3f7334508b6d9814f3b07eaa17cf94656f6a051e4b2455920235332d9f3a4c9bff35797cb9a8765c03331c1d16026cda834932bb13ac8ca77825165a1b5ec0414c11f8ed309f4c3465f6207893313893905c0c32bf3b1a698c3a914fe67f9e931b97dc6f87c4cbb97b1c7e056c9ccc8e2f310a4e86dfdc7ff7b631e3ffcc1233f9683efe781276c81922059e8d006afba13cae6c0e85cf2edd557e0e0cbe521cb52182bc880b593f1ab6ba0f0e7df118ea2a32537d1212ad47e5ac8560759559e733344f05699efdff4f4d31fa4c0728bb93a6aa37a0e389b4f1ef41f640b3077aacabdc61d9f0ddedc9c612080ad0c7db59ad4dea6edba57acd8db261bff9e16d60a47bcfac563a86c73d36c0b3b1d6d046b0c392470a627599fa2c7e25247c34b9699c3162809be96d810d5ee66ad6695adf181819b3473f3ac6467b67a5803f71a72793afbfd9fd80fe239765d85de14a5d45ae54c2f84a059d8681c8365bbc465d30b97039851a4fccbbe42e8d8f71f2f0ca15fbb7514a7ffb2a92e0a9d7f9da7d315c526cff2bc9c908f62e1c9a00b06ad2fc74686b90960792a389dd476d72dc68ab59204ce3637cf954bc6d27653755510f72d3b830e6af5b4b9780d5a6b13ee12b42742ec28d54c5188e6443a9d16fdbc4611acd403a5ff48400e73a3e527bc86742ce438da50b1510061b949bc9c1604abb133c552934e0eaed8834aabb2db40233b07c3a9a6ebea208ac12882656df13b032681853579189f942c5ac85dc5a8efaa037855b1f0885b4deb10544714db6ffeda27da59f9ca6a4faba7dba0922bdb924d96fbf01bf844e049f11119a89de1581843327c3e1310c83d3003d79b01927323af9a364be254e019a1b8c292f853a6aa6a64960dde2a9ae72d22f79c1dadee98bb356c6061dbfbeaac4dabb4ed7c01284ff83c03849e3e6a055f8fbdb96c65eb8ff25d93aef327661e3dac9bf9bab43100fa82a8ceb430f890c20aa94e82b49dadfa3f0c9a8cc4a985b7da1d28ab0a150929b1de6ccc4393d98af92f481b6145972577462915924d6964db4e2bf6146ef25c6a8a4c155545a34faf6459f9b2935574ee8793be3e7bd3649eea7dda6f09121f3c67b1bebcceae531963ec3e1f09abf73418e15a7b0c7ae06a2c87c90efe8649a2de2226b63596a4eae8885c3b7059eb8e6620f841c6ce58dacc463139ff87ccfa41281d84df26872bec0534ca622047ef29c4c69cb8ee5b6cee491bea63819a71cd21485421f86853eb0b18168ff52c53cb4b88ada55a03fcb988279cabf54f1710b954585ba3e3f3aafa5f306cf10924bd0a9fed7ff968101123e4f5a0a6e89a2d90f6ec687814183b8525537e09ab1f78247cfed5bc132d3d9e46ef8a45864c040e70c9ca0eb07e10097b793991be77d53745a327d50b807dfa00cee024fa5f4cb1bfc017f8d219c56e3c5f3fbf99b07b0200958dbf9a2fa9ff90c29d7da0a553f174f297c7ac45134fdfb427d464c0467df3b8905d7a7ef2e8c96b9eef3f597434f81b7b46a5bec3d052616a1ce70cf0b845b4c57135b78282253bbf25bed734570d94b1256fc13d618f9c11f91447e42322c74ffa9908b80f4af73d1416f2aea076e9982cce96da5db43af7052fd0649517b46bad1be760d4663676e303dc312d34e4172e91e3fc73203e323febdea293e16bca0640f045f5c610705235734ebd187be766621c1481fdc21cfc0037fafd53f7ac7159d1dd422ff4de42fb28760e7499cd14fc0c0a77e817bb134792f3f288e46af8e172ef24cd3fe9f2eda6ef9166cda5df78f74132b72538b3451a93d077e324fff902e15fefa0deb7d74945576b114c6ad1378f8f10eb38f5174401bec78ae3a8f99ede9b8a39ac8c58cdd18ac66812712f996619c45aa71284665457ea2057f60251e406bb9082006ab3c6f2b870a18ac5fa8e9604ec9c97b368a1efce014f2c5af0c2733425f51ee7aca8ef19f43957b9c0334045838f65eb2e8a421b13de75789872b18762b505a05be7a1e2b2d7e1235745e08d166836e8b0fa30ac112407df03bbb51c116e74880cc55b4ecf1159d9b3939cf2334501d07432eaa829f596cbe45c1c79ba88c2a344caebe42cd7d594c89cedad4468e5c797fcf1eac1e3a0b97c0900b61649b26d9ba6c1d2fd0791034b97a59a1bc5e270fe729e8c1db8346a7b32eb895c0ea145e469fe3a0009ba6459915148bf69dedd741d283eb0631e0784f5025da897ba381cfb2be1dc285a5269ecafc6a0bba707fe6f6ab0eb90d64b0bdeb328334d2a7d61b314ec8519ef95bcf257463d5710b185a7effa467416793c329693c7324f1c5444420591eb3de62f8be687dee1486acc9db19cab4e60a282a7b811fdac1668a29aecd71a88248398876c6a16dbf440163e224b03f054b749bfc5896084c3212f5f3ba18bb333548968ef61067250b55c918f404f1a04a7c9219ce6224e03b1106a7a6d0ab8f95203cca5e4f92ca8eb0834b680fc338cbf1a8b15703be0d7a0a5168231f9a7f914f91f84088d64d0f2c4dd030127da50ff125f119c23c4e1cf981d3090c0067c021bb38b544d8df9e8b3c2d058d5632474a6ea21e52ee6375ec9dc5b71d3bf003ca3e2b669fb68660e05a925eef52032dac74fe1e2eb68660a1866f77d816e4507c6ebc12fa8f41342f02b85043fb4959271e198fb4e469d29a4a3fe2e64e1c3a8646d57481387d35edb458be6e55535778ef1e7992a445f2ade3c1fffbef80243da36920fa38e83d288ba86653134da3be2f789275425a3b1546495967895b6c1e70301c11a16602360198f8c483c61533b0f21497b409ccac55c5988fb84ca3247d3bdee953dafaa3ec0847bb9249da51fc1c2734ea4adc63037e36c3863404ef73bf9df27d11ad67f2d445d3b4d596af670a4985bd8ecfebb0732147781fd19448c68a023f7a341c7f6558956df2287e01b07d521b798ab70dd14b9e33649043682dae4ce5eefb2d1ea28e96363e41876827dd3fa121b321036ebed0a8e4f1c78bb5693bb28796fd58923e9b511e73c909d04b77c7da198f5a6daac3b208f82c830530d406b028564810ee613f9893bda8a379ffaa3a38f4b2cd11023d2ac8b69116432b84d45388c03620484093624314d634d531a48314e6b81a31a094f9aa5be45581e5c524b9b719137655c0d1933869c1b5587f1fc6d880f250dcb8ce334572819bd23e35cc400414efb7d75377de8364ed21228e840b71f1f1603a2a0316d0f892938bc7acec9897bb9e7b354dfdee336eae7be2a083af2bfcce9ce3e755d6e5b34a164d2e44c464725803d5cb26c3ed35fbfbb12c1a5c65fea9f677ac2ec28bd14a340e1deae498f95723ae55b73051f5ca7cf1ca73cedd05143dbfe81dac2b394f1a547ef8a52b4087e8ee4ca525ea282a49cb4fad9cfee6ccdae9a05f225a378fad6286d9ce9eedf24ba478ab2b3a71343fc80e8ee2b46563f50ea99497310bd6810cd146b1e1e3fbd41a5a8cf7e8e44d4658dbad547ddc6f86f7d55c07c054a55dbb30f32bea5938bd9a7be91439c946a6bee15479c6cd2d7ec122c06d6b5cd57939b058e42aad6664dbf41f96b44758d6936c32d4f4308cce25da24de7aec380839c9c62999b6b65776524ca107322457132c3aab6da4147add0b9d23c8831b139b04ab1bc54ee437486e4f8373abf5bc86377b170c544f82d63a52b741d6759832c7030761e674873ceed8186bf4d8dd40929c58175504e069259c70bc665ca0e80729c967c3b44db63c2fd397adfcaab27046147948885926de06e4e281eb57d38941fa51679e0d12c4c975730f01e6b28a394be9af95f34a64e63a7b4bdae04c415c17efa3489854cf3acfb81077021c605ff9e3ce853fcea4b2cc7bf19905ad8b5d95362273d6e9c1c295638811d52352f60f70ef6874b80d2ad8eb9c9f8b3afdacdb8d1a065ec4c0023dda854e8b90bc488a18a989511af65c921bab295810150bec3abbf8e6d84aef258bf980b5848aa39b83144514a3bd1443f486a776620d39c74f16f1c4c1bd563c2e47c8e51f6edc17c1296faf1c1d47200177c79132e444e0442e1307189feba9dc0cf162e9c64fa603a4acbe13f119a7085685432888e166f9f1022b416b20035367ac2c51ebc04546a624e2e559c9cc87d682cba6a81c2d097ea5dd3cf3b8de405a587d94063c7cdeaadff9a3828314e325829d67b52ab4bd543cee88da8481a890422cae9fd1693d3a2f6a741dc3935548d01ad5f4aa66a6a48e987bb3849bbaf5cd2f0ae265639850c4ae1b29941f789abd4b52fb2a3ae5b0d70b0acc8d8ff2d82ee90d16877654cf96de94c368fd604ec84e9ba207b3c0045bc4d76061b1c118a5f7b9e8e8398ff994e01d338fcdf83969d58bdc92aa828465a2d6c3fc0d34200382ba7b4ecdd5685b53ef216b4d8120226fd3cfb4268a03d3f546d9448d278cbe6d671edaf832c8590869a2425c30c880564b0eb6d4c484b5a28ded858fb9c1532d49d3feb049014f6c103ae44dbb160cfa0e97d6798ee4c978cae61eeee62ddd9d38bd0ec79018fca4cb21295a3b02da84093ea58ee94203d83e6acecf0d461569b6886d391188899e59a0484920f8128491444c9b99058c074ac5d23091403e24c062265b94656bde028cb0097bca31741a68cff51b699a6cacab59ff16dbc97b0d75d708a06262904948637d69dc5ccc57f612ee4a98ddaf80c578810568ca88e698420123713028c22d2e6ee9ea4727fa7443d26c8e12dd6a24e587879a52f79c5669e2df6500f95bf41d31fd7742be90d41ba482011606c69684593984ead90c93f31d2ca0bc1197cc53cfbeeda776af88e6b647d7a0616f10c9623b878b00edccba5c37538df6d2b9c025c0f9954987381840ffb2ca5c1866b8389e508e6e3fbab3e0c6ed35e8eba013d2c59d60d7c70673784e9e18926e917313ce2f8399099cfa84cd2d754f6ba00952c519c0a164983514a583613d79d6c206e1850bcd3b1d02e80371ffcec19b3e29f53a2d402f42cc5456c10ad693098214f398b62ed9a8c6c2a3419b1018513abf8c8d800426e238697c60d3ca0a36402e5af9998d0b60137e43809cf5945d208a43fdd91a4604944016ecba057d1109286199ab8fb7cf082fb3043b875cdc19ffb60832590b6e2ca89c471f43abf8168af4424deafadd210120933645388be07765cf612f285d7ffc83c7f67564ad95dc21ce073fde4a26225e4a1ee025ec399bd3e9e8ed801bb3c9e0696771329c4013ed7ef29c2aa847fe826ff01250cdfeb3d5beb56254a8f8625a0e260928bd48f4c22684524e7ce7dc23548c03f9f8fc2d01a3a86a410071b480acd4d0d305aa3affa941539abe8bc86cfec0d7f8d4cfa72e166e4a925b2448e2f3c81d17aca9ab37511bf858a113e3ffbd798382056a0dbb3f2b0127f028e837413c0f1ab5866f079eb2b049316d07b4c1af1154dde6294115da930c8d5ad3899068e0ad097a26874ccdd7c710945c8188b98a37e446ea1c90aec0d7289f4f14aec403f5a800c28b99244492b53e72123a832cf012c8693bb78fdeb2264dded5682a1111c6461a619e3fae3bf6bf1f8739df9a3c0800d2aa38f703ba068ab9770bdcacd3d146c4b455d25ea1cc7d4d7a0f8f0563707f08f08e23a6a4f3c4cd9c1c7f41fbeedc6ea83d6fa7eaab42c6869f49fe7a87e901ba051aa7ff46d113e7c7f3c11015c5a78ee3c2a23744ab95b1e2c49281f9b087a999d7f20dd703bc8fe4b77d60fb587ab3d7b296e86a577fd12c48e748ccfedbe48918073de0fa6e2e9cbfdff958427da28bfe88c1e39ea01615a3ebbf85762791ca5941564358d61a758b0d4271219a4a38fe9be66f4d7aee8c4bc07f59996719387348b7ec374024b5f9d134df7fd9a35d5f6954987f1f01ee601bf5b1945ba7df407397a5e9d672f662d58f8e34947b4111f0d653d8882797e57fc3faea58159d7c3481a92f52c09418f87288584123153c598e73ce9888c4650497fde1f9a2c78c946a64f3acdf11b0f013b98bbc3b7b89001c9d52d948ab2faae911cc1080495d5eb41181e6a9210af431ccbb417fe6d4934578fa4447febfa8ecb2b613e286af6ae9ff8b4b5d83f98287d1e7225d6fe6fb29d7c2f1237422684ace700e06341b4b2486408b4ba5ec08722eeffd5d71bb2ef75e2059ad1d78f02f421dc94b8d917400ccb7c97d0837df56228dee36291a378e260e72dbdc5a954fee79c2646aeafde65f37ded6e8518ac45f8c21ede2a2522a18ce6479021a11f02e50ce3368be6d361c29f02960660113acab673878886d44a02109c2ba3fa950792deb14c557696fd703d452cfb1f5382a4e1c0407c5ae0c765f8a7d35896efdea3cc9b6fe62d25c1a333ba3986799bc77a4849bf639c75f8bf023aa774615b68c4ae5ae4babf0ef809d38fa71fa36771f4bf1e903e25fdf369d95b4966b6e00221013833eaf92720af3ed39096c93b931b6a7e22c25283a384b12f8f516fb71d7977dd46eb54683dd2238ebc6a64106401400984043e1ab0691016bc28eb14928242740643081a93e9f957b63b6a82ed8528f62550cea6e413db6ff4398f338ecf58d9bcd64053d16dd69052b38c8f0712cad5dbc267a5172e55b70e4a87a2f573d9f36f8a1ef58f302de573fcd934b09c94dfa63019c6c9fa78a4fd0ad3b5ae8beda1cfc65ca4a306818293bb72800e71a71270cabc13c4706f77093156d95558bceb12847f6a23338f0e0a0458ee13efb33c5a4b2df2a7576a89b582ac43efa5277ab68e867ee17784f8af2d0acd04d45982bdd19c9943d353079df4b118873ab814c377b46b234339cdd1b4e4f70f7e7588c63bbb5caa3b63ed14cc159dd44883999880b389de055d7c2a02a0b9151b9d3f0f3c07f08f077e431140c90aab9340d0d75babf1d7e962107422a52c8ba868d077eaf4d45642252a20adfa10c1923ae535d6971c1c1f06dab4fa973003672c256fe28833928c02de4c507fc72f19b2b9adfc35c81b0a084b81fb7c6c45352d3cd8901880a713ede4b4c4e4f17d657f82885719958b67cb11103066e098580ed3c07349527d8e510e7b32f67638f628136693484ca046a4db63ababba8bca21a7d9876f4cadcb90c86cd1347c5b4fbca349a2d0e4871c980e59aa72482f5e565cf760d71aaa81c151140f20a91182a202e65063e34480f164aa280eccdfd75d5d2a1aea5061608b79adf740fffc70d105f2ae74c5a8ba461f16261697c766aba558f0b4ca93acacca05772741055233f8292c262668a407bc908474f1768a1c61988d151d80c33991f46977d584d6651b8ac76e19dc4fada148f5925a274aa815b6bbf3e881da85c817fb09f2f98bc3f13511c8bf2c6d334011e94fdafe267aad028e81c348eaef711d8452cd87b883032c3a6b89f81019e711c340083e459217b6e9021c0086c8e3e9f30b802792e091936a7de402fa01bcfee1ba2d5c2456d8ed60febfd74e77099bcd2aa6f2c38b90f0f0bf6ee931c03aa7f03af7ff7dca284cd114788a8b28725aaec785dc19fa32cde941321781a7538a430eecaeaa2d810ec213e0773d00a3b5b9724c48218a87197af9a0bf9850401b31346e74fcff371f80fde9c1d80d9044b6f5aaa47012524d5caf027b4a085c92bbdaeb6ecbd2d0ad072e8e3be11cf1e03605cdabe37277a897b72657ed0b439935c9985dafd4f4e91b71ece30ac362e55bc8795c54eb83f5a3825a6ba5c446b7886c03cbea73563e2cb2acb93f12d08b42ca08d29f71e6e00052ba3df99202e7782a54f06854f1ca82017c55e62cb84a67e3a996e0002cfb1a748628ceebc804c9242522a22edf819b730a55f82de4430e1c6d510f40810ff55f8aa0a5a4b9bfe4d42f241bb1218edae150d423766e57ef2d4788449a52056e15f0146e79b97e573ce1b441829c155382c6a591befda9b229661c2e9241dd02a48bd80128299f1b1c3cb0c15202f12363817ae62c2466250196959e717a00b27d2a124df2c7d6d0be6c95165ead059132c81b45e4a763c71eedd221529bc258080cb256cf45d96cd1cc4f1c7c1e8bb5b80d11642beb8677048517ef9ca4b42a49f5723a84d71bd2d6604712933f53e7d988073d46f320140e10a1201e228199a2c5b27ff918038aff987876374d0b544f07103dc6163ba31a578a09141b1747883efec160ef8228bbaa636cbec67bf25be83f4a795035156f057766254c816f9b4becc848248f9aea81a453440f255514502d603d35ba7701a8afb5d5246aaaa196341c9142394f22323ad36c077ec1620e18b1a69417aee30310a2eaa3625254774934736106106b24f80ea06ad048ca7f42bca74a03622367b8a7ba72f9f4f606f8623c6e4fb5c8bcc85620ea39caba8cbbc80d674575e17bdc3fb15171a38ba8b7e531d8981c7385d643dbc05d04fb882eba23504c152931d6940119f8bfd20a2206c0c3bc3b8accdb8fd5b5e373eef4e95a4dd2b8ac97380716b498290e5f8130503f26af61d472b8c49b20d463520c7fae5449f05d74a0e0de71f31d86de9f3799ba5123829b24c171968555c5be1c33e3bed71fac14a949914a1ae9a4904a0a93b6e4373a93f2be76fcdf194766aa750bc8c507d815415b0f29d885a9267a09e00cc970c4cace3df4b01098219e3480d061f33f406e82256ef98d490f977080450e3b3f20cb47301a2315653bcb22d292cb31452a9d58f74b7ce542685d870923f621c162a6ef123f7dea2fd9b35b49eb768b968d00c7cc759b53b382206ac354583aa8f93b068f025e2382a732254087f0e739fe0b71d2928e0c2a5853701845e9ab4ce9b9f6ae8f575a29cff207ea11bbe662a1d78cc3f8473d97636bad79f81998a84a9f2858a81a4e97fa7b48034ce0ea7f4a51a51a00d500d9ba79e8911131ebda6213e6667a9a3540a755854287f347133026711d5f2e99298ac480902dd8becb30eadbab85fe00585e59f0db8bf7b8b4c9b81454e8c07e285db747c694fa3a3c2f49e769a2173869d86aaffbe0070dde8d7e247450744f52a84e8090365983cb2c6c508f6214e554f2ec8dcecd848c57924d459823ae9e28cfa57e7ce57f5d6c88a827d8a7f3ef1f6d445ca7ffec81c01b8164605bb9f7f0988abce582ffbd6ce66dd2811f86aee940359b821b0672938f4fe5ea9ef1617a2ccccd382c68c4aa02b8c19d2c086a0ceab01e02078038de56dccfce25ce5d73b86cdf8155feac01441e17684603508484aa7e45288f736a4180494eae3bd672191901d0633e818e1e698cbe100ba2a9aa323676dbd27d7133f4425f5a096bf6c3989c757cf7836d8c2f7281be2f206e1efd40912f030b636757ef1846cc2dcc3a342b85264a68bf83ba05f77ab40781f6b3b9e051a3bdbae7b53da018992b94d1dd4ea24888e88132f0f94bfdb712d047325bda965154fba2f4414faccc95e3effa553243bd73c969aa0c7d51db716de217b76bc39d18e7a9ed7a8a3c14cd0158067a207b039dda7803fb7cd6181b3ee14703281f37d2b70285da7a21dd4b9f6110562b415e5cdac1787341fb1415633e5f1b300719318bdf9b73b1c9ca9c9a438c71d2ce82e4c36f833d121b689650ec0b38d940ea4e913d7990cf3ec12b0876e28172668ae24f34c61cbe22507de515bcae6bcc7e6f83ae5608db6594c0302c198a6f0ffd6400ba2cea00426f4b2c404aa6d0b5deda14ef9918772a832bf8f224cf87d1c1e0bd93b708a7f216f73205ef6fe3c0de4c14a5757523bc52ebe55ccf6d8bcab93c6f0dd66b0a521ea386f927c62782bd3a85f2d03afacbce3c376151723f5e629eb000f6e97e5c86a45e85e9e3cbfca64d83039413ee6b162ccae7b25641ee61921622da3a7778b6ebfb4914d2c32a9b37435362223b2447227214a9497278f494a4c126a989f6294901ebcea25d0f4122fece223f97e75cfe445d8d42aacbdc464bf579bf499f8691548161b1b5ea579509f5ed8a3879fbc366f23428ccbcdd1b8495ed74532b6e7409ed574a16e4e088beeafcb4527ed13589733fe8da4cabd1f4f9879063b0e53968dde7275f76034c7a0113e263377f6f702e2b4fdbc9212e672001631bc8711a8989434e547ae8f300ff9f6bb44840de3ba77eabb2f7b1946df6d504e7785ed7455e631a09217f56b134b11137e6c5c8af0462437cfa25a74554185e98ada186cf5f6e6ec419107fb383d09b187c0e9364837b24e4f41521e7d173356c6bd7a2b15937e786d8849b6ab336a7c1438a75c2a028110345b1344af0c5ecf5ac8c28b665d3eb7aa7ef9095291c45c77d1bf7d750b74747f1644be2651bf4d1d1f85c5b5e986dccf9d0147a425c48087993478372250cdafe5012acaffd99648008141013237fb0a2f74776b702231477f83d7e5989b341734d6e1607bb93ce7360ad406c5b4d5b4b3b1b61d84df2afdf0167404ca593126ec047ed51bb7b4ab16f716b821f366aab37a9c806b657b262e006e4a33b84fe7d6e818745e3e0c2dcf905719430913200df185cc694d053b2001af624dd61770f62256bc1c47f40728f3d6f8d71b4d58ddb0bcb25f9ffaf1e1d3bebab7c9c03d900383653c630f2284aa241482fae53d18b350492b11a0e93a05d1db21a0b88d5363b3d5723dc8d1a42b1e80db5fcc5383e114e86544bac571a2327b54cbb036ccf0b47288c1ae2a0aa44b0a6d40585ffc4e7d25287c577b3b5109781432933964a97dcbc094f5f07a26b30b407dc065937720648fe7f3ca868075e982ce4516be4992552fbe42803a6ebd2716821ddd42550be678685fb5484f8a610fea08afa2f89c78e2c9f2bc5308f946dc6246d9f49c51e57d3504e583c654361d247e812b5d87312a419ead31b2f266065ba84821ee64e2f4dd7c3dac7ef801770eb3cf6876d06d2ea7330cb0a41b6b4c19336fb12278a1d1a542e325136b0c4d263d96733ccd12206209f92a64e3f5a294e5a9b9c5317c3e1a4c873d29a4661ce27dc866900331cde656e1b8c002c654a70723c9634f3f25e1764cad8222f0f93021f72d36b820243a6365eeb05a3168eac2bb5ceb4119cfb9c906a7a92059a9d215aaa9311f75e8cdd4696122e77295081cba588cdf9f4dfc8d7d7f1e22b50251da2e9df4905d1cbefc3dcce5a70b55a26206285016cd8552620287fc653a151c3e0460ebf08cc2f7a0fcc33215cc8773ba52d00fb2463b476d294c936d2e8e22dd9ef2a6d1774d134ab2f190d23fb933fc82c4eb190d603b9559c8ef5196680d8e19afea063cc367f2df292b137975e7c16b8fffd0db4d6dd4e2138e6592ccb1bc9c57fc6af885722ebeec7405181243deaf6596cf711ad68c76d4f73119f8d050a9538867716e281507f71093e140a1b4c00658f8b33da82450123176ca13b14b89e683aa228b326c51892b46ad05152d9093e0d7da6009023d34bc527aa3157b96f3839bc4998965ab3dd323be7266577a6fb3d34188448cbc62aa3e28b9feb58406b4523425b058f40945988d014e54b873138a2507624a0ca68b45443ebf6593da269aa69def3a25349410a6a9431bfee4fe41e6aa557c2abd1cf753ec7a03b3554c0b54f721152b6930d60828925838272a4288c2ae98e4cd32522ef403b7a1301434b237411a70a08ea681ca753adbce72904ba714db352bedc031a159d5d29f8f5523c2cf87ae9c36c32542bb793e0b6347d2c6e2e18cff7c34d8dc2efdd9b8fe0d3eaea38a461b1bfcf854323c7ee82df317a35109d637d1151451170eb91d8608e32288f44937a40e128a04696443de81ff28a08798eea66ebe3375864057b413ca80302087e119e3fb25073959d8b46af45c8c2e9fe256eb2360648075a3b3256f7955551034f4849d6d12975cd8a104c08c2e8e74153b7e5bfdd2528f0cd4c50bfa3bb902c19f57306ccf22e284822977dd985783660519fa2d6b1be645f902b74927d1d54ecf3b6dabc5f84c12824fe2bd3823bcccfd1149227adc9191910912d2ee6aa48a972fce49fc1f1eb892c8bb2a23d0e1c8398a61328a0990e3291b263bf867ed1ea122c46baaaa633040765a598a36d793dcf6790f6f80f0371ede2ec57143f073dcccd9bf0e84d05e11883232bbd3671637c7e6bc16ac89d5aa149b6299c2bcf3fb44cfa589be345c9e64446914a6f89a31a19a218e1252cfabb2e339524e4bcc000e1eb477b2872e4f22a6b595977ca6b2783dd23ed7ca3cf90438f7955e48ae6b966eda1666419bea1d54047e975dec0d683b66656d807e39933ba1505b232b6a0f6931c4f9ea1e3537780dbbee2f408b633078511985f71bd9950a009faa0cb6230b275fd8df4aa092f2a82b8471dd122d1c4c5251bb5e380e44626daefe751e3f946f2b44c4786672222b8e00fc99dbaed31ac1e181cc07dc56c36bb17500a6684d8c0d3376e794503f17fd7dd1f6347f6d9b855787a6caa0795b4a7985aa00ac7b608d6694848e6f67aeb39bfa267ccad4599fa8eb91c1bc18dd3ee2370cb24115d4d6bcc248b5170cc6d799e74177016c141cfe4eac061c20824f9490c8c724b52f84fa424686610686ac26d03b16e3e1831ae09470974ce3ff4cdd62e380de54ba5a438c291c8d80effb067d27676e6362bbccccb2594fbca8d13c78f3411b53f2bbe5ee1c44797c698521a0582c53053b24049967670ae5deeb9aea7a001ab0f966a7ecc538207d7d3574d5d9ce4b1ae06bef17e1568b58b6d83771ad8294217d05ec5a3e704c72607f318a0bea54076d8efd293291df442227404f8824aa5769eb02e79b98f97984662279604f943950c2bf74e321d6a15ac3e68357b1e67496afeee846f4d4b2c2c9f1c7cfba2b39af320842489b3fd6b3b52b9253dc136a506476773dd822ec035c58a084e4cd835119b429d5813e37e1bb51c3ca62e9634ab4fd22b82123dc257a70bcf7205032622ffbe67540432e8c890efac57392cb1dc9e861855e8943c2953a6849a3662d3e001a0b417d68755bef3057d59ead29c8d32e68ca552f198e7d657d55c167eb6023cec50bd9d8a2e7e78e18803e97ffb1978e10c75bfd510de02c4ba039c3e8530c3d8013ead9db7eef5cdb9b8d95e8dd75221c4dafff49160761e1603881b3fd83395441ef39022bf434c006b9ebc816c99cc24fc9ab362a99c633aa12780a9008a83759675189e113561dac85edb6a13290fa4b6ffda28e0618f42c8c704fba3bda72847290d2f1f5025da1ba7ac8a43dee4db598510d69365a35c4cddc7d44867349b9d4a2d2bc976762b176f950ab92a19f70ea41f3830146bf1792f2f02ba99a32d2dbd3b1bbe09337a372945705b7684e1271fe121249d371f599ac052f3947c389395b1bf7f175a14ece0906ee09c5c25e301a7f6e4629f44a80c1b6b98ebd4afd102e6d16bcdfcc2d8d5fea31475a33cf4099b276a25b45bf9bcc2b27dd7f6320e7c29b947fd7e1ea07eff88b03d40ea1d090403171aba6f1dc3a90912658f35c6eb99f3cce7f0ebb665c8430690d120dad4015c129202671379d8ac69b8d74b62628a8b816883c14b5ce2f00868a237f31639bd4f6a9561040482e51c450732ac376d57e5b2413880cd3ce352de8910cb33dce9943b008ec1c5deaeea391bbdfe4cd3361c7ba744617d19d5342422a0e9a23d0e79d0d203f4274d30597b1f3d5aa176b7f3ba58e1b2e97dc496f72e2da0b8512cc9eb41b47716532bf33178ca3ed8508d3e262fd007474ef469cc337ad57907b733ab0ae3417ee76ba52e6e6f9fbf1f1571798af1837f93d2d2e2c288140165172eff723715ac1a2e7b909b1ad21d2e2726fa8ac827fab9b8e3f8ab3173e40ea8e1610dc33ea5a0fac0bd99537e18d3db0bc199819c776f37518dcb78cb8b902b3f540a903dcf283b1ee878557abe50cc86a4a04f4f1ea5e686fc0bfe4493f7c08b9755008d0d754d2243308df491a8c971150cb96e57742e47e70b60970764fe9378c7efd7e331e624e7e5ac9a45c139ccf22352aa7c44cb4d625cd634e4346abb27c5f6d7e1a2509b586312285b33f91af627efd444868bc973013ac6b47a5f90be014d16ea9ff1837e49d2df2b4119a634ab19e771855ad4feb05e61ab562868551495c891d1f0db9a3a2423393135529d84f82e2ae0c2022f30808f6c7fc81136e7da474a859e6335be962808581b3a0de41ac1d74c8c8b6c03744a1cf9bf4dbf08fb6050b43f56853df30c3bc7882f68a9b7293a6295b1dfab71a4da24b5b962c89169f15a8b03f8825e0b69a5cbc5f6819d9afd357f9f8954b18722c17d6093ed894e4b1834e14bc7752e1db7d0e22704ea649131545061d8f4c32848913d8b8de6824e4896ccf8983b69b88e9886aba0b2ba29157ffdc47582b018c67bcbb8529ef5cfdb8df852dd341d39781c7e02ec3a1e15d592c5d65940d9f7775953b02488dbdef98f58ba70bbbfb61e623e61feaee8d3d87abc1d1f9ea53f1cc33e79c111ae79100521a46862f83dbc5c00d15d27ab50680eda78c051a76ae2b5dc9a96af397aa6e39fa9b1126429d6f180fb2e90a93682f863de950fc6bb7520a167c360a7719974bd062dda78bd521b6600a422c8f5ea837a622c9097c7a05e94ddca6d3a5ab0655e463d1d96e22dc149b04c3877499982dc1acf15b66a281ba4aee0275d7fa00df2367bf39f7a12498f9eb4f2eb45860b07efe9d0b0b7cbc9b34b7fd856007127400741c8dbf6bb2446cf5dedfc3b58bfb0c3abe660d53536e2d33d86237860accbb95407d0bc23bdd2d03834b300f314833f268a61f0118729e182d01ae5fb60a86a0c95f59c631aa5ea0a56c145cf628d206f464e485f6a8b928fe37c88b7791627d2e3aae382fc2389394ef13865e2d87c5610bef98649c3197be5b177003179f4569a333e1abd74af95813a4881082a532d820f0ac55a7115a00b51d5ee89e826549596d98f258af7cb45758218e0aa62dda2a23003c8f5de5aa47aeffc2aaf49ee0903c6fef6df3c583fb9cccc796ae688c1355095ce350b36dc0c10289b01bfe6fd2b621612f7c27382de9dcb90b717a3cfd07b647d4dc8e3c33cb38aacb25583be8a7899d5d4bebe0cd50c404c03e41edb8b6359d4834f2fee8f0eb6a7f2628a9d5dfd6219d7fb9e83eded3dfd14cdfbd2aea9fc6a19c5b58c216c38963e80356f2624826a32be116786fbf70bc3b2e7211ee36f79cbfbad7897f8f9a6d5f84c4ffc13d7b5d9e47aa772e81c7f5eb5a93b2d9efacc739a95799fb0cf78d99efd88ee35b487d05c7669b973bb087b5c524d48efb02fad4cf67e9a45b494ae377121bec39e747f2314cf2ef2bf841d38ac68f71a06ba0914e452fbd3ce8e6aef2d1b50b7e2e925678bd83689612d36e77bc4e8d792d7cb93067407c51213b80525e7a11c46caa856d954b95389c85a529d3aa14961992348c0b9aaf611ecbc04c0d5be3f3c9211c9069c4d4ef05b39c00c8f9efe5e142150f5634c34acbfb3a2cb95b6a0c4c8c39c9c077bd9d74c93f32ce06ea153b8b60ad38042dc4ee08d8821194d2864c0b0e27120e2423ded719c30805f2ac5197ffd618a6ec4cde11ca777a24daa637dcfd206ffebe47ff7741f337cab20ab91d78e6c5472a4abee9b43655f1e3b702c846f9364ed182d2638897538e660d96f9aece418c0eda28a23885c01e04e41101422c64de01877d35c998bb7ec50133810780fa55dee1ff451a90bf49c1ebe3549dfc0720a598a611915277c302834f4be42a4e897a9812a360bf23af8896cd23b4d39f183f59a766fb7e463e4dde3be6b49520a9ddb08f1a3c2c596668a7a63184b2d9b4bcb589e9b28b0bfeda26469b7dd1ea5c5dfb546b8138eb4888143f1989c0e0d54422ba6220218c021bba69c7e15c5996227a46d6f7a4a9336c897c2c52afaf583c04e06c768705be0078abc8d1cf549f0bc0678b21715377da82b2ac0ff1edf403367300f3c7dbb8007d802b6c7e4bde786334632a935b7bca9fb4911a65cbd02ec2793c898f57199c51f54e1f8396a820e65aa499f2656a5cf7096ffb81e07fc23c0728b66c019f0cf32c4bfef7a78a8a648318a2dd0a37e601ca723381282d8d98b8a9be279a852b9cadc278efe620da8e9fed4b97d5518bf57e31b63e25dd5764da77f88d0eb7f3a5457952dfd6827cc963dadc517a7c3d5f43f4886b2b95575057f1e48ff113b260301b6b019a831841b6d5c0ce8c9328c802245e01d3ddd12337a9202454b911b5d8e232469035efa3a560afe86e38c30551ebb2af730cacea82f4694bdb7052033b9120dd514ad9c31ead4974669b499080d23a2180fc3de447690691a630c02b9fb25a07a625b191a2966826c97e8bf602301a4afe4212a0eacad718e0c7386126f35ea28a3bee67a283007a35cb6c40628242a3d8836fcea6a2dc969e8bdd2a8147c4f734b3da9b2ee59f9d6da489101df8a39033bd6637fae93498a24669168acf070666a2953cb9ae84c50384d1e81c81cd102e22b4e1c5035f58f406ccac0cfa90c733fb36fe69ffc54f390059e776183d98b106c9d8dd04b25807ff0b3426da92c4b0f6477a2004741ad5032c8b43804cf8538185e1ab5c7d46b14eef4370ca204c40902ea465d415c40d4e1a60386e098dd997236f82f6de0e83d7e211dd6d4fa83ca05542652d8b090c55087f354e6a6ca1b906a67ccabc780ce7b0ed09eedfdfe31001ffb4119bd4714bdf75690ad78cf43421b511e01f01fb8d6dade7b6f29534a49a63204de03e603325dd71e3786207460e9a4c333f5d0358d30c8d4f638feb03ecd004d2676e183eed579f41018a49a4ca6bdd9eaa92953968aa5616dcf142f451411c31a301445845e139a2a39e2e76ccde2e01a4ab39bc2df9033f3c33416aba2a065419c5002c2c656da2595462056b9baa2eeee90883ee9beef1fc5b08c08ba48bb8f05f5a0d4f09ad070d1c2846e196e41bb2e403d96ee0c1919bb31488051828b7663c02041060d62807a2cdd17373234554ce0fe091761ba4869ede84774b1825cfd153d29d16d35b92045d1a2060d16b446477777bd8bf146deddfd9d4ee8050d9f438a628babb66629f782061bdcee8db69b61a0b796dfdd5d6e2686fc6d8c328529375ed0f0bbbbfba9ad7177af89889484698b7777378e1ace81c324c3936ef039babb5b10c206829c08a636ad91627d6910bb5b8a2ed2e6c0eeeeae12e3afad594aa3fae101fddfdddddded13d3625890b83ca94b5f8016b0ddbbbbbb5b42a7d50a34f5eeeeee8ed199c0d1a81ec0289c4957c65319eff9c0995ece0e36f5e714677a8e08677a4e8733ab7760528c8e78146954403ed533cb1e9362696483e31350f8669e95fda46e6c1a575aa54a30c068b818ea3a6729e3e2050541a7b27ed79e55765d4d5e0d1715403ebedaf1c72bacc0da9ad5a1830516689850a3869f463b760480e3c1a3050db448447491bad66ac1058e46b5d405109067f58cb7edb3357b63268514180727801c384c0358410500b000eab194051d36242e3b381c508f0070bbe386eb7408c0bd18d24512972e52f053b105ce79b8e002175f0ca12f86f830c0ffffd8dd1776f77b7005701f9caf0fce9746f58383e1851f07105150f7ff77b3cd777fc7f030801a019e80040001b229408617f8abea94e47a31a48b14fcaa7bcfd24d01a01edbbbbd217e768106dbb60579d2b4268aed89ac8196d6aa4d4944682d660fecc04b4ed145667666c738264a452815c146121b499c38198225840d36d860810d16a84005318812c40c335861450d35fcb082817ba472e40818a45445177f249dee04813baa2ac01d15dba8a0540aee3c21a25b2e3b4cea820c00ee30f13acc861de45482c09d56e96cdd9a823b3a15dc6122a56c1f813be00e1470e789aa823b4bd826d60aeee8b04d90ba95413be0ce8e0e7f5b5ba6b20ce153b7c8ed0cd1c11716926e7baa3ce9a9a253378ce32668d220d5fb28027134744cc10c3011fb5d10073d952011f79d07faf46422db04d965b1f13d7f2ccbeb039818a174e08cbd611926b9a00367709565c8d89be5aef25519f45d810c50a55ec06babb874fc620f5be714aff04ca4bdaaf2a5c495249c42a6701c4c7ee46466c8a8dbd383086a181e2aaa05b3bbfbc9a8034525a74aea8ace0a483000bc207b1fb42984ecdbf9543a5a487152820103e64a07846d987e541a06c6612b48d1810b0673f5ebb81256f9f93a4ce4e00b12acc04307c656abd56afd387594878c847909331386d2314a076e688130d479c2015f18fa45d425d2ced99b4923e517db389518d6752211a5299922c21fe778e7f49cbf854f32d5c3362e5b445872c82acc932faaef2275de09974b579f321d9e61ea994eaa4f5b179e61ba7dd1d9c2a886c8158744b2b825b2f5ee6d3f3d990e7f6fff4b476274290eb28a2bcb74fad4399d9375ce4ba72ee554590fbbbb94d6f8757777c7b0d9ee3671bfa5cea625d6ddfdff4d4beceedee0d8c466779399ea99eaa612a8b269b7f4409572d22c3462338b94d29b28e1bfcda0ca7cb29e1d974fe96587506db29f9db5c9a2c8bc482c52893d6943b49436a40795290fe18f6900c27491f6f4493e21bdf4d498a63ef287b3eee7b13e2dcecb332f7b92d910a8a847e49e8caf39c264b73d5da4f2154a0103a64ff285318d2f173f743af8932fd38b09942852322a55ae8051c9977cc997a6d242a031494b0726897c49978d34623fd9fa4692899d619ac927aaece1cf88b5913dd88f99d889439da99d47f624bf4c94fc924365caf28bfc52d9d5a7e964677a6050d9b5313158ca69ec913d95ff85e6644f9fd8ff05e7640fdbf07e4e5906097ac1eb64624fd9ca2726c8099d21e9b36aa3ce09e62eff9b089fbad533acbde99f283e507a98bc96546e17920ec33ecd54aad5a7ac8bebcb2b0bd3a30da94cc1f6a91a911833d55e3653da091af5726d57be5419181b0a2dd852dcc5f86bd6e97847928ee9b6fc5dc06b739f64ba65f86b203ab054691888cd47d7a74cc1af23e5de138f140a8512f26489d3d6c3971a238dc14a8d1408dbc0a8912e604b8dd401121075618d94c6e9a546130d7fb1dbc49f8ea8d32d4d92ce89a4d213c54ae241573b9aefebe6f85b235835035c45166642a109c1b1bdbb7bb9774049065f5d1a9db7bb3d285da4fc1bbbbb9b726d8cc84633849392e85d19207491f2eeee3233b33333333333330c2c5da48cda1ae609d4ee21e2a84bb9d826d6a1bd98a3a6aee92362a2a9ebe00c191353908fafb65763aacb3637ea528ec3300cfb9448b6c951976e7265129e29644afaffffff510939873cc582ed0cb1cbd1b237fb483c05bbe85d641a955f6c33aff089b76c71c2892e15ecf84b17a676757aecc383f551ea8aedd3e2eeee8fda9aa5180defeeae51d96b2a78667c1a3fcbb20ca32fe94ff94224f63f319a79938b96aad18faa2c9cba47a32eb698cffc11add9144e75d6e27e8f0c02f00395d654fb4b9f733695f207db624f2ef079edd605300a47c35cc81146a78ceeeac6bded798bd7a47cccb1dea6112463a9a45bb79cd3db9e61800070a4b7b7ceb3878d99872c3b22cbd0bdbf62c6410783a73d7a0e5b243dc1be479096e84cfc6d8481a59fac9fa03218fe9632cf0f1576f8b4b4696b76dcc0034da2d2f1c8d6dd08401206cbe397c41c1cb3ead3ab788669ccaaf2ab628a882922b3a2fd50f9551bea05e59f3c935f12797c0a7e05bfc3aba078554ccb7770818a515217a28211147a61437e495dfa48d8c675b21a1ca94bdfc8f2c8a4c41cdca0295aafcaa0b066ca29b32a992ba32225f2c8a66c0ece8cd81aa6605683caed6524285a2e5045367f9dba7dc2dcb5373207355b6c331f1af585101a7541efaeca4064a659024df134e9d2d20c9f9abcc7295efcda1bf974a35490ebc95e3c9351c9a88484482f847a655532177f54b257e5ecd5a78c4a46257b6554a854a6a15712dfcdb53ee553a6d44ec80799f299086d8bf2fb1ed2a9837ac8fff8ed26ee288b3ec5d0a5bffa28cf621b296cd3ea53882e7dd5de70d44a5deaafbdd9e8d6c42a6e5ee6c36991598cb039127531a35ff5cc4bf9169577817ce4a8ed3d8b3fa6a517ac2a53d0e8a31bbfce166370febe23be822e651a01378e22393952d4fcce9d3b77e5d2384b22985c29a76443a9865208b61b1b585ca5215c88544529862b994c1d4d9784b068c12d385a3acab2ccfb1a151c553669189679dacfbb66eabff8f3725ab8a05124272703b3351e0e2e644c9079c12df5f2a2842ac124c230d2155d2c210647b242c68c17513ab02b5299764566908ed0454a0ad3458e64842e525211461c89085da424305da4a421946c704e542a2d45aac286e984b7a18223ed2706f8ae9fca1998134842f87cad90be749192a848812305a18b9434450d470a71e4c86132994cda4f9f30ef5d3cc3d4f5e3227951815bbaa96032c54dc95059ed0d8daa8025dda3fa51415a0bbbbbbb6fff8f7dcebf0c7f835fdfcc8a6d5bb669666781bccbfc9c6f5ff90dd3b27fcc8a94ee1cc771ced3a5e466fc1157cccafb00f58874dbb6a8cd392704e86b42324c4efa2fbffb48a625263a6b6f32baf47386a84b636ccfb5cf8cf17fdbb68da5949b8cef9bc41b591ffa9af6d988467d9ff7791f120442538c645ea8a5a57a3ec538eef490bfa3b4948fcfc7a4b29dc8ed9894a21f9b3fb11e6c3eeb5dffaaac75f259cf9ab3e73d7e162ad24e34038bb537fb2c166b56999d618d6559324c733d2b46cd15698cd13d7a7477777777770ccbd25ecf39a7a4ed4e7b0ac188f099516b69ac0fe257fcf5fc134d85ca14f42c75234ad6886948681a96ca9a8bbf20d646dbd94f63f5e991782c9535564cccb7e6ca32cdf58db9fe5b73b10d6b48ec49a34c352c542492a1e9456cd2cd47346a4449ba12b51255e52802b51b0a1558ec5ef6c37aea3377c0ccdceedef2ea45a3aeb60633d9b65d0a3665acce5f9f575c714514b5e932f32e7b6c213fea9c7777779a646f62fd7f76776cdddbe3d737e9eeee6e8c36e5d76311c3ba9faaba7c93cf22a7fcceb216220b62db12c8055db7a7055c7260da325bfe4bdfdddd5d8c77b3ae62276cc66eadbbb79b194b32059bbb4d690d1f6dcd52e9eeef32322e76b4bb9bb66ca5203a6cb1c568105da44bfb5f0b77c5b639bb733c2908a26046418d821b05998218e75c650814f2963f2ee3b819d5376d8b95d9b1c56863de007abfea7473f7e71a2e5d7c77777f19fe3aaeee81a274c919b5998dfa0c4aabd2aab4bae106f9467cce507ef71199c3ca3f02c187159489659a94a8ade948a3461c1f7986d3476ecc7c4e1489988c2c14c6f3ff3f53bd01b331f77f776fe90941428c2ea5f3cc395ddcff73feb7f4186d90c44bf7dc657b2efd89bc4b1ed6ea49188661d80a5b612b6c85adb0d56ac14577174262fe999c8e691c0804da361068db380e04da421c078ad4836c96650c829a6d1be09a5d20c479e5b62ceef795db32ae729b47b5cc73cc3b3971fefae5bfb3fcfefe22726698931974d0e1081e1e1e11cb5fe2489e6f1c2778043f3c3c3ca8982b58743f4a94fc5461a97e94a07e7a043c3c3c28f7c164925e77af147f299d3c8ff37433c72e53b2262aaba2e408a98465c0c57421d0a635b18a9a97f9ace2d6641996691936796278422012121ccf1f51d2822e524ad9dec313272c68c264052a9873ce144c0c9b58966153c7886a4e9e120fa51de68c9155d2a1b4a4944309052525259d120ea524a8d209624ca284a474a464829291526ace184b45628c73c6582af2324540893fb10b15a51ba09488847c328d6e4dcc1bbb858c34513986523e2f69549c4d0bf94c6e2537663e17afce50885155cec2ca98c7a8b0d05b59e83ff017120cc68c3d69af2dbd9ed5bfea57f5e9eb993e6530ec87447bf509487b2f201a1395a9c6c4be3aecfbbeaf01d928eecc53e640561ddb99a71f0c3fc01dd35b292a9f9e57057e5060003b76fc882eec470528d04342ddb20ec3c9300c685e6cad115a616cf167c4a806118e0f3aacf0b2301f878a44a2300cc3d0023ce0108b441b5a612b6c85adb015b65adf0c1d8960742c2cb01cd8530c230f95230e95b356d80a5b612b6c85ad56a80a59ab2761188661d8a7d86a85adb015b6c256d86a758c3d9e6e2d4888d15eb866e6a0d893da6c214dd3a4d43429433172cb1d5703c91a10884a8d4ad068035c4374739087402010951a951a0804a252a3520bd10d3365dcf243de6e0d08c4699ef3e71fa794ceb31b43c128c3e4532dc39e15853f3e3559b50dbb7e8373f1bb61eb2444dd75e4784464aa24d4df6e4f26524f666572e4304555f7ac3ebd74f569be10159cd970a648b438eff33e3fe8b88814795b49d55f6d0d14da942d35e5d326a66cdeea212c3ae9315809783c9198a38b588c341b6950f87bc29fc6e4537dd29830894c8e30a94c97603a4888441e6fe44809522b2baddada9b990ac5acb41f369488c912d50e39d4a5af24952ba854ed1a8b2d443300400073160000180c0a08c401a15098876926d80e14000f5c76426c563c1ec8229128c7611446610cc32084100208400411669852ac6c0300c20a27b616ffb41463eef1f5bd2073025faa2bfce26e59862f58e8e154205d3dd663bc3b98cf91adde4346d9e315bd6db3b3f3e412601881b4462fdd0dd9ef528688c444a06d75326d8f0d6f0f09718a6208d96499ce8fd9027717a20a81b3d35a928e5242a40ebcd55bfa5df2ff38ed92470e95d2c0cbcb2d7bbad3f148dfc691910d6fefdc2cff7ccda20573c2b802908e09cccefddc8f42f0020563052086ce690e2b0c0a7f7320ace351fb13b66dc1a36bfde45153fae5151458c6ec7670865ab0171b1023e80c2e945f03697558a47200e5a5e5a0ebde787e5ce02041f7bd7924ddd662622cc8f3d480a800ebbb64bc92c1adc9b19b5946f14b781c7a5d7845e3b5714c6acc7241fef22eae9895ce15040e1903167497a218d4f4e7e298d0d77b9e6dd8a3503db8f89e07c7cf85f8cdac42349e512a53f4d555966ed009fb56f9d2a958c07854c1186af139850a10a683172bf5001e7755cb12a084089d5ea6e3911727b27fe0112f306611b1442898e4aa85c4608213ee580bf9960a073b886775df8cfd2ea8c4c11154bc345ac58f1016701a2db88d388147c91d4c571a6222ac6f3c7cda500d3aa085ad644e01cda8d2a85f2be97602e9ea5a022448b8453546f6ee10b2065de27a9de841030bb558fbfcf5c0623faa207230e2ae3e1c9d1a1bbc96add3dbea88a7b5c76ba442d8976630f2132bc4c88acdf076ca441feb7096e6fb2f42a80797802a5b173990269815cce1e7d6fa1b7eb0da9bbfe794be4c0a8cddb42df088d2de0091c16fb668ed7e449d2d37099fde0046d645014b0984541090dfd4ca319712296ab6ed9c2d0d43c242a09eccff0b776f15717df72cc092deef8011e831d534b5fea8b93763bab9609fb157e6c1f15fa6a16ae7cbbd7c84fcc21693360044967c0ca747a4041857922d06258a61a1028a26968f3023f400e9b21259e2407b84a8502bd6d23f9946ea474dfb4b33fb27d17608ed459fa9d1f03c0918ab66df96f91fd2774417dc4b35c4a218ca14f5510d14eeaa61569b677610d5f882391e12cd751b664a6c24e65539e282263be22e7b9e03ae82b7fdd838fd63f0b0f7f177eb933de0fe55e3063779eed46970a3c1df2d29c45c9c44b3c6037ff43c680dd6c7adc0c57d74c51bcea4d788ff5307693fbb09304eb4e3586b38456a08e6474bf25e597a088a92ca4cac3bf0c2d2cfe8f48da8c3d265fd19e67aadc1e61e3029e079c63899d39427c2ad93330a5c0372904f9b8518fca5b8a6ca81272c77c870a35b01cf2d6c36b381d76b2ca642bc20e01a67dbfc689acaf135e3cebd842550cc20e39320e9c42148b3797ff15a73bbc8a336effc01d790b984f35fa1bf60b63483373d6587f150ce5305d74ced6051eeaae01a932272a1de5233cdc7273699d014f24f1b916eb8506c7ceea5182275010e354b08c49925d75c948db2e9265d1dc7c306289e674c94b394138f9e4a9c77cd02d6d7a30e291c01d50a9926452e22e3a5ae17a789b5f123a3b1858d4fa7a9a4c1dde63e9a33da3b21dad2800ccf7c8ddf0769f4293c9b7b262d852240ce0bf08c4ca4da63d0bd15fee4da88222469096c8e7ad462f609b2d5e8c4aa46f1633134e777e429ce423607a8b947e0a87ecf9e68f7674e696cad59f5ec8a36ee1d5f5c60ffe8953085cb1520251983f1413e1268ebc392179f18629941d89cc78b31c3de2e5086d5961284f19e828d76ffb0c198153a37c7436c80d09b9e0692d35e39b18dc5ef2388608e1a972baf071aeff68b4c94b23410283e87d058bfb8df637e5a3f6c1bb1d70ca370b0decced1ad8123a29aa8d04829458ef548c4dd0a87c70bf0a944fab7b9ee3d1fe496f99a4ebce44a4f8ded4fb2593918dd398ced415d19e71015bdf342c19cb860aa75d04fad08dfe699ef344182931868c3c68b36955f67f3a09bb2eea33d24592be860b8b5122cf508c6eb60eee87180eb421018d6465104c2b7c3036962626d503bad5b9bb61cfdd2ae7e0fcb5d9fd41e7898355dccda16dcef97ac391a4656bbdb11a776ee33b15dc26086c0a4c67301aff303ae6cb67381f88986f435251135dd512aa6f4379a79ffe186e5678eab47a5a614124e9f669174d768d4dad4490daced24bc85dfa3ec014efcd342f6885ba4023f1b8bfdff4e3dafb2175c4c090bfbeadc10847371130fa189740023121ddb197a6a0ecf415ebe678a014df0adb4b271539883b48e7ef76d3d2abad951d9d682b281d8c56fd06534a4bc6cada12189278c3b861b6273e286283370384f5898e7ad16f19720601c27600e02faf04f0c6993370186d56b7ffdebb85cc04bc484908475e40305ab5b8c29495952efefaeed0a96e3b92e76d323402184f888fe2b5f3eb7fa40eab361aed2a9741ff8ee6488e59c427ff391ab296649edc74333b67a2ee650c3371efc621191307a4163085e365ce96a40b6034905443c23fbdc9136ec3755ad04e7b0936d24d77698cc1c767c4e3ce40c28f7ae48d13618e5b7ae5cdb125723fe967d5e2d41bf5b9ae10b4e16a7ada5efcee14fd400480d90d8caa114111bdfb9ab374f18cd4ecdf32c1cfe84d6a10746b0570d88b3b5e9e48925094e19dd2909bf7273b77a78eee3096d36e43e1052cbeea243a3d99351aa3864dae3a13e0c556778c82f4041e752d972c32b29dd66fbf28879112618271089ffbb256dab6cb5587d48f5abdfd1238b8d8a71422deeddb27c18d12e906cd1035003f910aca3e9c609ed622f7c9b8b584f7d3f7d318617bdf54bc4984a187fe2ef3ce39b80987374f65991643338c9033321b1ccf4ae6795bfb0e23f947ba594e1052c02423bffcbfcb5c504c5cc3db2afd6a4a09d5bf6236daf5ae751d029df59926c6ce01ca080129f8a7257d2951743ec879f72467c0bab13dd3a95f7abaa56c6924b39cca00e06b78d81d20703f856e19a54549cea5e2f49da16e3826d5b44bab8a97b6c10825b8f6eaf55599ce9c0f63e6bdb21d7e98fc3db7e0c06973278f3582dbea66e42aa5916d4adffcdfeca9774c9af2c66bfe00b8173e4b23279a28bb9ec676c3c025549d3f486c59f63f0a00026fa07184303982ab186d19afc60bdc9ea912c87fbe4b34916499c70bf9d1d718818e291ba9c3b1b38c17a4e7f1bf6182b0521265e124905d8a0b1bee7c959e25dd100076c5f5dbf78644b7c117495da7a63544cd57dbafa54149932a64d65f98b54afc9bae3b552e22128ea6e1cedf6b0065b5ca2975bac33d7fa4955cff178932978734781af6ad3da08adc0c3b30a840045df1b823bbd4359a6e2244c5536578bbdd493be26f0224fabf4c2890980f7a9dd82ee6dd13ba0627c68b2498cc7b257e5e655bcbec7b1832e39db62bc26654fc764e510097fe0ac65af7e642e7b928ba84766054e4098424c378778a540140674be18a279da6043ad3a941debd7d3d1a7d7d24123e6b4a8434303b75f874c3ccffee48736750da4b5d2e23bf74b5626f4e50cb2234819db807f712e361477fdd0f7a56e3fbc546a51c7a843b836e062e03f0c7a19e4103064ac3cbfabcf66ed0fcf7024165ad43e10e8fd912fb5bbcc9bf4aabbc39a6886902b5e64d35678f87ecfe5772fc02f94d16449c1ad90698dc314f69198522532a32303b2405ef7465402948e023cd4829060cb46fd57dc373ef3f16943cb55e341f033cc2ed59ed84e33385a877207ca3a345e75af86a1def10f82b724a1decb2a5fc08298cbad7d7afce93374f806f44bd921592a285d62863dbb22c8ab123f5db08bac7619343b82c3cca2788a228949ece22a153ae08fbdbf77e0c1009153fed93b652a95d46ad511a91b1c3c4d1691948ffb06f893b77672b2934c9bd9f6d27e9091e6a7c44d1dae430effd2657c88cc50e2d56d774a2dd0f4e1d6332e8f3dbb1ed6469a571e3a90fecb9f6fd808a039d0fda0c40980aa3f3e43f9975f29dd48a137d30788588099cfb2d6c3b4aaa54bbbbccd1cfe29b9e285194509468cea4922dc64ef2ae1b9586e702a89864f88643002f260800ac0ac742bfdeee22d5710f9e9eb767574a1dd4ee95f6276ff3b9f70446752ad87c03ad1b782dc0da5a80f1ee41dded123f6807c268146377b3085255912911dc7c6de1f5e14b63d28babf32f70657b4d6e9f9d0e421917cde70df4b46eff60030d8008b582ce0ac87b0010328deb1f44b11b23ffb237c1bab59fd3bda384e86a29e19db8a7f84f4ce0490cb1ca6b16c8c6b862ae460033192cb8b4963c512cd16a81f47edac0cd754e7b62d49ce3056fa6c30e670f0269956984a897dd2fc47f00aab9679e4f118ca9038dc276a31a20892124d6df25560bf6ec801022c5a3ac5dd304f0ce07d5ee65895de4c6acfc5976e2e135586669b93b41895905c14a7a91f104d9a53fba8e70bbb08f5cedeb4b0a4787b5d0ff8b38f225461ca47ff2ceb760b20598b594560bffc5d7213598ec10778dcdc4d41140a3d1aa829984301906d0536f057e97b8232fd4a0249e8a88683612e11cb17125e6379a35e199804f498d4e7fc353d10667397ac7226bf789a31e6822b3888ee89bc206c238e40f34ffbab6119a943cbffa790e97cf2603a2b3fb5a50622c355eec290a68aa4413fba7e558907b97de0af9ee041f84fce4c42be52b5bf4e89561c7bfa563d64821ebbf81d1164017cfa23307eca5171600e751d9f3e118a3021c5647ec905cba56fc58974ac8c3b6620dd75734ccf576d8661460d4b6aa19d49b3b4550d50040e380c11a71c94b5544b25ad6953384d312840e903a46acc8fa4c37d925f9128ee000a27abfbbce0ce8008943239b68aab4f7780d6b4bb0092ec774b26bc5f31369dd42ad433c530bc9bb8f4e0d1868ac261a1aa4c9e7919601c0388689c7f672a6877b2f2928ca2c9d30719b886a9ccdbb3a5112305d3acee88d1f3691640485bd7bda9ccb9904933c9841bd4da37b6f14beb5a5f02c51a3f676efbe343ef699f0f6ccf1587f539255450d93a311d073e5f95208242e819eede6560c1644c953f5846aa56a5b8fceb01e68224d4d4109b2d9a98e75be1b901447634a8560483fccd7c4e5a89856df4d532b29df5ac765194a24d707c385801c8de241b167b3944a380f6fb0fa64080543e45b36a4e50c60b081028603ee56cc94f3089a18ee4093c9894105c9d206fa47d41914fc9d2b4b17bb42e92b5a9bd5efdafd5739b52411272fd823dd69b5820741680bbedc8cadb50f3c5bb370be5d813252c8433e1f3eeedc01e6c7a00454f02d78423fd5e9138a29406e6d0a6e1f929bd9ab9dd4972f76f96e1a48cabbf28daddc0a3500fc4712369f2294f271aa6c9222b6cbc612039cad15d42aadac4787be00a23f0957a8618ace385358d44391859de9da0f1c7fa6c00fcc82a1c316acef8267823268d04ebda1eaf43371d3b1c761b68375bfbf84f84ec5c1b59ebaa5b670db488d33a031f5f056bb547995e92c1581774d53ce8fdfea2d63eb955f5fb0722024012c5066ade6a48024d9e64788275430454f82717cc8db6ad44d2dec574e69289c084edab36e2fbf6afa10dd50b4095aca4c991debaa16ffc51b81f11128a8374e7a3e02b8f38580135790bca16c4e90777a51fa757677c5432b2cca8b0e42b948d29ea966bc7f5d07c4f64c889481f4f79ce108a4991dfd1ef5517c3e2c1b1874fbd749c6bb9ab1df4403d1de2a5761588c0af52ad9c9d1cf2527d750e78d6bf5e9aa28a34af0fe6db151b61f1645a979dd557564760ff84888069b90ce87c38ecc40a69d2a72a84aaab76479c6053b086a2fab6f8380edf0053ce2d930368d87413c79dd81ce42b6a9c2746ed9cb5d021c3e3adebae9436d70e53d99f2c7ec24d626a11b2c38b25a24f6ac378432cf1fb8a168b480ff65168f8212c51e3a25d6b6ef59abe1948c5372b9e79fcb2d9fa120833beedb8acb9abf6c118d19ad07053499743ac942746752b5c625c6ba2598f08be90a5278b948944c4be9f241a7cedb79a8e6c3a3c28a9e06214aa7411179d2b21a4f0c8a7b08f24cb6ccc27a1181a8ac739d8a3e6f84f0997145d7eb9c4623e17b31621a380daedce5a4587879fbeab9d6ba668b4a4d41780cd03e442834e4cca93ba890d1545b707dee5ad28c247305d09fd517813a36e8b82fe35a18892ae206984961e8c4460085736524a598baae1d060d9c7815f35f756bb7e2a3db2d28310102cd4a7757e8b17e34ebddb574df3d52c394e9bea2d7f4847b65164bf4dc2a4a5d613bd5785815ce8286fcf85dbe11dc02e7a4d50275067ba19fd9c109d5fb4b6bc05bcc16d331cc963a89a2af353cc08f70d41cc1d0caeb2562bc2b4eeb95b80396c9af6106b90c8aa89f45b0c92a50312978703a5276aef0a3885c8de3582004096b5d6b13c2fda449c41162ad0233b9de5b4e243433113b0319048c022158e06084d748b73f09fd70af2b5de8c5841d079b963365d846f4bddc1662095b90906f95d39d101efa15cb76db63dd025ebabd93f4f95ca2c134e30a869e7af3f8ad2d5bae427b59c1860849fa798d969cb9422c18984aa319e8dc136081d3cda8d410e017760e773197d0d9a8e998e1f977a732a0062178848d18e132856392d75c4ccad87b86ff146a18c38ea6a4ee3280c4aba2862ce8c318edeeeed20979c2d23ceca9ad6e840666bc98f78c246fbe9bf5f6f105bfb61dd2c2d17c3e752d6b5e606d19a5a8f8ed7f92ba85efd7bba64f33af0ad0e7c020c37a20571fa0777d3e54b4cba8d0805b15e54ce7c1add74d6680b94af6ae4ea7984536bf462cdf06d87ce1d675b3432c8f770a8ff2c21298b493bdd859fc60329696086cbe1e3de64c491d8733d64428c2eebfc132f8762ee1e486d763cbb628e475a1aa1aa8d8f0099d6f4df8f9deeb66a4d32b2c6dd27d76fe14460120de85edae0301cdde27d3dea88dcca5ae0b8e3104c9a950389a24a71c8bccd7862c57bbdeb67a29ebff2d04bc1100f6cb31acf69832588db998fb2c1716ac9ca079e4b0165e18ee8937cdfca8c21788d068bb574f6e6d66936fae3b386f866ee3606a3d208ca66643f9686e5fd473812d144f3dbbd84f5e931fb291c7a7d0747d9b6509c47f304c57f55e8481500d298fb5aa53310ff0db5c9d723e635905e430222e6fe542ae0b7cccbdfce97c25105a5ba65b27ec4c5cf9220d9af7acf47c1f1c0160651405f6c0bbc14a95f6c7a2600d56132858e56e57619b9eefca12303026a0c462324a624b30233a027776c89889aedcdfe87b13535d794823eacc09868ea82ecee1e941b53dad7cbe1e8ea41ac8e85034a3fe77551709dea7ca0cd5c178eaa6ac66c3dd7d81ae6da361f16f7839c563e2812c985279cf83bd35147781a8b71ffbfb780a45782f57e4e9914f631057bcc55f1457f67786e5fc93b6c1cb243e1606b39e6cc8a158d3defb6778c72c30ca3905af0cf14400534c70c0013494e8e28014a779ba59d682a0fee21d5d2849800c2b61b288d1bd0b6adccab0e9130ef828d464783e83dfd2c773a24b22b9d842b842ed15dd497786d10e89e64d0b503cb3adfb0d1c9a1d9f304e97ea7debe4814ddffb56076ea9c4221d12a2bef1cda0a65248c4691d0bb259057c0280a28a3bf140e1aaccb092e251e2b01afd40125f42041ec4a8a80f6b940643eab12e57c84d51f86aa403026be81246862b9421b07f716e34fd63a128689736b50bf3cf708890e08f19db6ee806197b62d0414999ace72540d740c406db9d00ed548f5d15eb6bfb63c7414fb10830fa40ae55f89d0d6f0697f846629e7604a2f27cbb49fb2f3a69586f3b6ccc43cb833f811a8f488624355070e2aed0e077a7fea721b876f42f4a09fb3542ad5783ba0cb580d2211ef7ecd375c8f6b35ae5b04ff3b2f276ffe96fabfdd7e206c41385facf834947534b7e56d8c3c118ffecfa8ce35b8ed855c44629a8afb548690203871b5cc4fc0dddade60b2b0ee60945f6a2f1059c378f8e97c6cd5b04da39ee4012f1d346b63c518f829eb12bd926a13b3572e99313337becd4805f9980e607497ba8ee61ad9c1f70b124120520940f2739e57b24b1c2a9f4804adb34a5c719c9d3fd9a1f2c564629f3baed5a0eac240195ed7dc18f760cdef3f0033e64f92e94a7554e2c95834e3e6538389a08cc35e436dd003f3a56250e19be9100880e522bc10f07fbe2c96c3ca070d05a92cb4bbd875c3f439c340adaf49565969cec71137409d963841ce547c931536259c6dd7db6f7b548ddb801cdc3c1d3f2df863a1c9076b8897d1b23b02b2c3617c31c3314677c852f88759957dadd55b80ed62a66649585806cfb8c5f006b7e6d1b525ab4082fad463686e16f2e6ae5e43083b6da6c41336b964530562eed0532611c4331e3f3f247b5b194674c98ef53be5c790848e3634fe663245a6d97f09c473a2bc73cc37253a3d2f6c0c89c1fedb723fa08ca9a7294fbcfc6698ff42e758ba899fdd396504103bf39beecda047a4a4db444b7561aba78841426ef967b12aa4fa47b1ea188d503da07784c4051aa78136d882df7c1986c363430d3875fe6b541f315a9c1258eaa1ce20de0ed618d978efad4d7ef0bdfe04aa5e5b279beea40e474703acdcc516264843055f51203d923098044d8ef4271d28403977841a41883f842d5123991ec299360ce1f9263b380b08fccb243702d7a408d2b98e222d78a0567f8ca76b4bd2ee2c29da8c7e86a11404d5bfe9bf97ec577affcb290f159ea4a43be3563c518f850985f1f52290b6a24824c67c9248104b0e24d359b852d31fa5bd694ae0aa49257a34a18587543b49544da4724f67196d71a540f6ff2fecd952482059158ae642d734ac26b9a0188e8f34096e85cd144882452750e3f1dc60a424779cc814e0a2bca5cafa3908052c8e190b9f34fa08621ab472cb4abdbf3f7d71868cb7ab0f13d1b4361cc4a7f3bf87d266a2add47056f122f65f5f73633be35b335bab3660ac778186e63983d1a3003be070120078f80446e5ee30ed22d40bc5e02e6898e546494d872d3ac916b2108b6f8974928d95c5ea99e36a24501b93b9fd1e2ce7960d25712d61e1e94180fd681da182aaa4cb20cc3706f05bd264809cc885e8d712697ee0af092681b49283f7911d939498c9f63f7156dd4cb8c31d5566cbf0448c07a3d676ce9e8c145a2c3910a45423c9caf705928c7c3a1f61c595ee6471ff4b5208ad02cb4782f4ef47ecd3290d6ea9e589b467fc97d4a9506851042ab42bb7468882bb6f3cbcafd66e9db40fcef3f1e6bd4ac0f6df3f48193cc1bfeb2edec47a6e75264a7e458f9bdef85f001b83a1fdb3796fe3f4d8845d85d3217d821eaa4b56ca2d82d261085ec636af87b94922b7e0be40f485abbe5f02dfadb55535d74f8fc34bf390fe809556f8f5ef740476598bd9a99d98150525cceaeca0f27eb83d6984ca68ccd3eb6aa3c1a03a9808ab96bbd71aab72a2021a82a8ffc8bc3191602b7dc4bf954a179b44b97ff2ec3098289c4f68107cd3c758129d490fc352c8b9410fda20cb00f9f966b1c8b91a2c845e19f833a5cfd3a220b079d8da3bef4e20bae5eb9b1f056d2a3e05e686a520bd896b47e97e616dbdc68692b89d823b964486a3535ffa35e265b13fc451ed44b6bf5dabe69ea4c3c5a92e69e5dbbad8699013b7aca4bf2b4462a165ba522da11a0f36e4c09053ad3624ff423634e312d935a94d6e73923cbef6831bf9ff0716ae9d8db42d71fce302621fd3acc88a1b4d4993fdd0350724c1025610ea35c3182c29891f378ccaca00841db94404d10016aad8ba6543e0c4400b6fb27a4bf71af3dccbb280eba373418d2ec1b605e2e9a148f77a7b7cf7aaca356de52052fc8324ddd5323be61ed5618b793bbaa1306dfc153cdcd1556c998c1b09f051d90bc8131a64eec71d8b5e584b6ab0e63deed5055976ea9fcc2397048f07507e513b68e6d35ce5a6374103b769fe66e283229b5c9b0f1e34c1565c90cbf63d813bbc7993a58df46776371ef1e9dc34459d2eb4948eaafc87ded0618e04b0c7bdf7814cbc4501ad7223a189a300335b5397cee29988164212717cfcd22626959c40cc3ea4b7180c0cb8f84021354473609bd4090b8c5ae8a034597452686e8381cd727355f4a86b4be427b18c82b804b3747244ef63f017856e4d0faec3eebbbf217cc43a056c8140f1d352caeada7533c0ae5f50c81691584f919e8c2a4f27ae2346c88f92b258f771e248ca1dc7129cbba9b3ba9a8f21960e22f9730e0ec73ce059079a2b91120255388f0c9f328b188dec651b0755f304fbf426bb63cae4d8f819c5c71c37eda885b5a5c7224a3d1f772bc00c03dd5bd1fe3aff458246ff03dd1fe20209f2530beb452758b511ca71dbd1172a353bbdd36fd209796946a78b8e6a9b4b52e06ff7d7a3fb5c3315e00a2d3774b06b86384ab8572b6b975810ca8da9d5996ae62b1a0154b2d157675511651011ca0a63eb6770df5c15f6c7c5563cf58d4d6a95bd94578a30136f6ef4cfc8dba5dfe413932f864298f7b0d1a1e3a5a003acccd9c8c7868c00c4d40cda930aa76004e58fe3ce0e389ba6674b33a50d47906b569b6728fb05a61846c25bbe0b36c04d2240ec96108b17a1857a5b97a5811bbcc161d4b2ca9f53e834a691281d5afd195950b6631d1aef4098d4d6a44f70ce36f9594dfbec0da9103b5297c0455a9400a89b993af55191909987801d58154c3542974cd3e45806b81e9b37eb52a717a7ee2c0eb450500f00ff86bb68dd849159149d3ec1726173c78212f905c66bc2735595eb8421fa7c033f4f7c078ab9b1704339848d501feec8781a4c2d8e83a8cc855b3559d1fa82998e45f0f53088989b026ec593af2a8335f240b084c747246a91d2a5bab6e9dc3092b5faebfd74b5cd8418c501a1a93fc4f8b42fc0bfed0ee39fdbc4cb9c2906711f3b6eb65424cfae126219f989e5b04e564b0252e802ab4dbeb8d480965a0724022500876ecd2979d342738ed9184ea5c5580b7ee07a20fafc0161b083f7206c466dc4641c986d857ca7fa41721c8e48cbb84dc18e33745e91fe4453cf5c14469930aa6b4a3a31fec05f19c0b8d919256b4027f51aea99f655483dc2a8834da10da6326e00d838b53533ce7cbe194b38c1113749373189a57b0d9927edc09fec2ce33860b102c2d585b915c618ce8a5266a32e95f47fbdbb45a23267a7df709a8a140d7d1a82b4dfc9fe1a7d753a2ff31397017b7cd455677f6541dabcd1d5679fef66cc8b6f1e0818765fd09c83975fe24329ced755fca9cf9705a35dc5217d89fae1b3e12f2f12c308b2eb17b4758911001c151bfee859a9be95625444dd0574a10a13ff91e3ac31742a8a4cf4b4fe90ffac944c5a4f345583d3612746efbc12bab7b263e0fe864e16f81fe5d920cdf2ed443e411817bebb95b7fd71fa3264c26ccdddfd5781a975061b6425536a9aaacec8fd977b36df571ac6a9af2bcc21d07bf8415198e48855d5a145ba496602610ef29203ef734bb9e15bd00fdc70a6c04f030a9a4ab7fbd844d922bc448431f8a43aca139dedca7587fd8e6e4a27f778598b0dc2ff6fbd6168036ee7d977cdcad7f76ef1546654aa07b9926b8e423d3ac3785d17b1b170cc1a177d0e58eff01b10a7a981bee48d0035023802ed2024a2a6bdde09737c794e397dc49b9b32d71ecd63fcb5c1da0c459467b39129a0c55cb5cb0733b7ba9a75298b3a52c2ba0479df90a564550269746f988b334434321d65f77ce563525b721058fab1d645ce13913d4f17a296dd4681d7bdb9b9d48d1441129a415dc1857d4c1f054b49e644b0daad7e677b9eae82d5ce86f41f62b7591276a6d85110ed65cfd357673dc4137738914456b018ea4f887668d67b816e75bb6eb8e7504f0cdd876d4c765771a2fe8664d4842ab86ba5341d99497d063cc5a9cc1ac293aa584a0332779ea7ce8a8b559473f97b8ee3f89bec7fa70518f89e622a151161cf7b34dfdabd728e30c4a352226aa8955454c5d727ff9b34f44cb3778f7ec53a869cd34ac16c7f0881c1df43447b2075338d3e6e90dab31fad58e0d16262b349d777249387b8155274be3473b999d270f41fd2f4baf5b33cadbf749f9bc64330b907fe800c7bfd2d1e19d3b9f9efb913c151cb736a252a4ae9f258510ac3185e4611ec74d5cb30d1e241cb924087eb861baf99704b1c734f591a4539d7d04c0f2a82b054d53a812e3b3170101a52cfb48ceace07b59c01b780fdcc96eab7fcdb6e3d74afa9a793be05d8c12d86c76a90b5de1be2c9cb4a1c1048d88079d0db5d1cc0a6712531da96c0e2d2dfe785bc2018b23b4a5cd419b59c96d8e5414a3dfb43d209e11c2792d4affb37224f6299b94290e98a935daee7bb36f5f225b30fd33cbaedf0ed80c91418e0e814cf66796f5aef42c87407b9425bb089b6535e0fb330873b7863710abf71de6b2f592becf26857da218a463d6cd5f6dd466012fa11c65f704aba9be37781953984c545af7629712d7e0e45b9077da281c80fc945da8adb95a48d90fbd9b9caea3fcc108cba6cca68661fe587488e1d5ab3a144ef3fe1583ae862a2003f8901d0da763218f6d95d1d1aacfac21d470c1b564c11bce1937c176abfcbd1c0dc54b35ef29d9888314914c2d5e1d2842cc68c4a18800c4cf4313aa2def0d816386fee551f852038d34de15dc584ca6675ba18a6c44d46f0598b3cea65b763169ed3e72767545e9ca89af2138e5b964cb1b7d45139b1bfbdc3823a1300c326b69ee2318a0aa9a54441e9f3334864563555127d069099e6e1510d4b30315e5e68290da4c6e2dd403ecdbff6f55ad044085515d00abe102f74255583b3068048d871a46ecea345345f3f00aca86d66866495fbe0233c3865483c71a34d24cfa4318bb517ef8868993879337123d935337550ccdc1650a37612f19ee015b78fdfcd174cb392cc934c7c4f48ada97f3a56aefb5d8ba3c0b951be7ac45c2b9141ec77104a59df83c6c53d8e51b0c8f9dd31f02d9c9ae18fa381224bff1375b03785a4216f85b5eb89185575e257719e943964edc1e0462ba53ce353c6ff46b05c2d4be62d73f994dd10e7f1c337c43d9dba1e02b5ef67938d3b9468bf5645dcde60dc22e2e92e7db7b440a1e2ec0992ec5b902fa896b17270ff4e367e4be62a5895470d5d8f83aad6aaab6a44b94933bb3eaa2a43e0f64f220dd6a17ce3adfa0da3b8aed9081903c62e9c93bb5b37ad1322024be08ae6a0cd48a5e061e282b10b8777db9ee0d22c72b72afbdca3ad166e0962f012b3de40c68cc007c3e1e1691158e88008f8dfd22c0d87e9fea77500cca2e23c14af062cf67661b320db87fcaf41d53fc8bf3d47c10d5b8ad077ec86840bdec5e165012c54512f18460f1c41e4035714bd8978826191df548abd954e452480e212dae92a26e99de2d1066f866e53151e0c51b4262f5d13dcd7d643bfef57b2684cced4f140cca4609d50c05b2ffcdfbc00b5a0a303921a35ce5ae0645ae5bae7271b7e1c8ffee113010067334302fda3add6028bce17d10d494c645dcf294723853ba72cb47af985c2a80c019ab51524895ff04caa63bbcfb0da7a42afce66acbcd7357749f00023d5d70d09fc84ed9546d6473f0fb872d995a3f966057ef45d04d9f6e42dda32d933ee2c3f51de0384b3baa89a98f9408ddc6f9c039f74d32be4b10e42a317c97f7df1100c97f9d1008e0142d274beb270fee51d67f5c3d662812082c10bdd2a5e76bfdf0026f8ea96ce2a986f32600b0d9cfe3bfda2c3ab794e7463db6216e2b446579435128471be339ad86b7da8759633edf1c972121d9e838a1cad46c38044515811665ad4203d1c7e9c80fcc1bf7c77b13de264efc8a4fd2aa2672b737a4e2210c6b2d9e3908a185656cadd7ec7b966f8eaeafe742eef0c819c041fd485cd044748ed4c5c6a234fa6a734a055969bb3ae41191627c2484c206df512661678f0b38891c78c837074117312fbc73c54beb83abc099efabbb95f56ee4fbc37ea9e6360b3f595f324038ba2f5602ce5b95841b4db30c34b34ccb3450632f2efe25ce410b332fc20aab80cd240036f832df58de129929379b6d16b04e2aea4e8b38cace5a82f536efe9efe002db04048c2473a13d439f93968eca572d23315069a71d2e976896ba3e02b90ae997d87cea8c3671b00fe1426b296a5056ce6dea80349dfe558a5dc9ceb5f93ccf38da666318f7f3b995399d47f6327c2b4531099da231e8e55015246f0e126e1ba3ad47c6c4428610d7b415a6e56303dda898c2d2ec704ddde6619d836205158ca41ed8649ddf0d1b1d3cb28e6b9d783b8d1b05f6d6eee584283f832d106a364988baebb31636682fb1797b00e5c495fc34de92ab5043d91ab5a5c94ea8875a17cfdac181a6e4067298ae8517a7af695a77a0957e7582cf1098d887b4ef7c56fec63c94a9abacbd59b782e0f3fbfb690cf804697f0a4eb21f6bbd6335f120df0186b1d01b3bcf9025c0663fc8a09580667d4460f67d4d4cb8e7f276f9d28cfc0a02e78b0632beb1c74055d7f2518e5140ec46ba670f644204ee01da5fc3b9b3766085735487d82107da404a61531ef45d3458bd6e142e33ab2dd72fff0cedf608e68606edbbe8c3c78d0b9af1b41084c5f39f222d3450deb8d36be650f041d9c844eb6733dbf19b4dc12934da72eb5a3ce5a9cad39fa8a9eb4735a4629ce13a1925cf1658f3edc4572d9a74ce09667c3ac3a1d8f8faba84517a7270fff89e910a01c85eeee22d930a2e5a87f18c41c9ebbbbdba83a74f2eb812c5c3ad1c02bdf345e5e8cefd3cb408225a685d742d9b399d53de285bed351e88a5a948dbfa2c1b0a92b8ba4fcc3374238b40e2544744d69ab1211a78faa30ebf73f717ee05d6afebe968922202de76477814394695cb29876f8e2ec34b86b178ec50627eb415cca9f80666ec5b31f77535b4f8fb64e193e0d24fb8d5d04bc29cebbf6b838b295f0d48f30c1fdf529287a6b0c322ed3e3959c958413b2f6f62281480e2a96f2a2191557672616f0dfec6a5df94f1f934675795e68be21062756292c195e3c34a24fec1a7571c8c0e3a7c4a5d06e387be1083106c6d4623fe7458d332d18088f1b9d9a54b5dd7885d44d35426d2055f6575d98ce6b1b4606a51d95496c5cce922519d2e1dad20531f7aa2bb87d1f299f300c0fd8417158a23effb04af869e84afd1668a3506ce0ab8d0185dc32bfaf43841178b2b84911e430783140c21d350735473352d02a72090e1533814a0bd2e29797deffb33a1390f5714ec511d7d658bc00d38b1fcd642704c30873e330f663684cd9a4a3ab21cbdd39607c4ebc56bc7db4b1f174c1f85188163c15b51f8be2ce1b0986ba0415a1cc71d990efe4386c2da59015f5e51f6b49e2eb3dd13ce09e4e967e229161fce3626d28a02164d206086c5f31d6edebbe73f57de616ce45f25d707e8eea76be99ba41d425c6fb94f58df91eeb4cbe5746a96a28498cca794d8c7d1e502664779dbc234ae63330322351b9862c61a4f12040344e68730192dd88f5fcf2fd45ab30b028b881103f675b9987e31ba2ea302bb09e5e3a346a31e6298761aa95096359ef9f81c8fffb55a4dfa361db4de9b3dd443ad94a14a57d4cba6a046a4d07411546766124e9e6b337fb62240d2bd83da9a3a21bd27c8f86a9505aa82766a3b832b65dca0dbdaeb35701d47f46b49c1dd853ea9b7447682469b24fe13e79c20142a9594b7375a7e44c02861aa9a1e2f220120b3ea43a67dd152159a3ed868453c76e695566b496ebb8709e84f57b1f2d1978ca4db0937057e5dfb9a27c1441f0e23f5eae44922d1a4b0a1835cdda6c342431cb75113014c7f5870f86c39e785f5a9f1d3eaf5adf697ffa3d16ba625a22d5416f36688971f8f57c6a0de9b95c2b107929b11f442ab70f4188374650ceaada9140e7a90dd18a107b08a3a881cf40773904b37a0c7d92d1c7a90dd8eb0075a0f7cb006ed9af55310ffdb511a4e1252f915686f7291a254ba7bef874d48650df6bb6ce470230e84015bbf861c22fd4095a06d4634c778e1133be34f8d43bf23ca0b4557cedef082d595898722e864d9b9e3b45eaa4f9302128853a3c0a517a99a33eba9bf7b521e4a5e614a4bdf034d0dade5506f8ebda74c21cf9300838986b6f30df7922651b10e1c533870e0547cf6c0149796eb42eb30ee6e9ec539500231f32da66cb6e7e9c0ad6169e3932db4e03eda6d566f922cfc17a08d2b104ab96095de8e92ebd397cc6e608fde774e6e0f8b2d79095a47ccd8fb6d9c2027a2c6de868513093459ffb8e9bea3803cca86d8a47f077f8d27774334788100c3b69f5b148f3de29a9849fae2be9881efbfc56f30e64375458d37e848389e04df1574798a68d5654251ebb1535e64acf833e78d36b5d9e6e6bc0ba8bbaf0148069ad0d196eefc58249cb534c4c09aa61590fc679f242b593be0d5f57761b905a11676e2025e3bcde8533ad5e92510ceb6bbb23908f4cb6a34d8eb8c6d08d1e75e4178055fe5e849b47d9e961e300546c2cb29428647bc59b9de228078b6e14f0c65f63cb5285f25abc6e21d2543da1defce5679b7ecb49ccd0329ddd55021902c0f0d96f2731aab07b8c259d66acaebab90604c4fabe9fd4c3961d84dfb6b2bb5a6a12e4b9e4e827643a9822ac986dc919373aac25f0eb922d7bba1f108a53cf86211f86aab9996855f13f38692b2fa4d8e7ea0e15dbc51402d6763dc01b250e4c023febc00b577d8b6c3c616b86298587ba59ebf7e0689db2cb65025c89c412725b0c4f1b86d5b015545c31de3cd52d72e9a256460a61021ba74a08d80acea5ab91b20532edee4027250992582ea877f6ae990b5b42d8cafa32775dd80feaaf4b91beff54b92e3cd0861c4ac6eb0c176a1aab59aa1b4109582930fcd4bc1eca905b89fb9263580aebdb52717df26de2c0c294df4d228ed614853ee166d674c7f8b2574def69bb0204f64db2925d58eb90a6a299a3095f269678c64354342cebb372e9ca35515bccfba2a5a16fe639c20dd431b74b82d313c238a70ad44a3e4caf20e567cf55b4380925db781ee00fd508a7d10a6cf71b714c8983e39e4b604808cc2dc113856d6bdd7d0b895e1e0ab0050be9adf7f7d54f7358657fdd4fc08aa420e675fb56a2e86126afa83505c5ca9335a53086f0739fcd7f9cf11e11cb853e4f545c376ddb86bd7c685418a74426b176bf61b72443a4ff285360cf3bd929f37bf947a19a2a0bff38f939f3692f2a791a787ff3e781952a31900b9b08ae8433b84f99d11fedb0778252c6d948e0756564807486707225b49779413b3454dbe55e7e5930c31610b01689c34ade94bcd09fb92f6b0d5f2d028c1b7f0ac3cd57bc6ef115d7357bf2d6dda8362137aa248d366de600bc7acfdf707bce3c55d3e4080d9a4c7f39ac70730b470b5b9f40b58da56ca4205131bd4551e1586e4b5eca6ce45f738b9d896353e7fa6e56922940ed83187c0778316d236bd1e3b9e15852ba2d7ccad1ff71894c906858fed04266908c1038c8c283b99f9c4a62534b5cda3ab032ce402da0efe715f30d0b1ea1c9a6566133df32f9386c54d3fdf785b74b87a69cfde10b94592a2b3725a0ddfbc2e7e3c8cddd3d5df2d4210a8415aba001b6a08c25ce1328c21adccfd43218cb773ec28dd343e9ccfefa364529e8726d5aedafffb7f7ff79649caf406f10618074ffe93ff34d0effbc9ff959f699a92a2a2b2a2a2721e908302cb0b10706ed4146d41b5f8f704edea8e7333cb4959a88bcba965925a65abd5225b23ffddd22a29b805158a1ae17472aebc5a7fab5dddb5bbf2bf3b1fc9feffffbf7fdd24a979405f3dc41c899911334376be7a78f5f084e95df4408feaaaa2a6fa2d8cee5d00cdf7f9b6cd9adf0681c296a0bfbbc9f372ddbbdfd36f944ef79eece7363970be6930a0b016b2208fb35ab7e9bcdb1ce937385ae886d4cbee623eb5de9172ece7a3cf5ec15575fe9837cfe3bee900aa02e161763227638e31a71882c2baef388e6310e6b6f71e03630eab1541f75ec14924496b82c23b164236da2b78e9808ff7fcbdf7bd3f9a5d43520285f75cc33ccf334e5c9e80606fbd5978180b375078fb76904826fa846c93ef1ca0a4f1750f43f16b141fc68b32a0b02ef258d0edc81729c048c106089f616f5816732590c0f9c8776d089f2df4434ff44152ae582c9276312eb6322e5cad1d81c2bbc8f3791bacbef03e22158b45952ccbb709d8972a21fbc00a629c0ba4185c96c0f1b5053e23063d3e9c0b274736414984da092372f870bfb278301a1d01ea70bfde14813b91275fbf0344c118f72b4c0cdccb0d4fb84088fbb52504771a7f6b522905bff01234831d31eed7971b41271cddf513b5e002038e06c7915d6b17b68c0d6cb9033d649029d7165cd83566c0916c8f96b31570d93a38eac10d1cb96a5c8e198e082470149cdab6dd016a9ae64aed05283c0a8542a1505814923addc70ffc38c76fcf8b7371ee46060a8fe3981b7363eefbd8e337d94d6efc8d416e13643cb590b41a2c52ed032ea59a6cb64eb5225e46d44d08b8397bd8ee38280cdfbddcc77f03fb3b541f0b81c2fcc77fbdab2a8afede877199f3f984c6e3b492abd96c4b8ebee02e388ce5293631e3ca0f464e63df2a80c40798e032ec2d6304ef86e10445e8db8e86ed1b4cc376e7019f314413fa4812ef6b1a1861230480270a2ab221a39a2c9385c5bc8109141482f5ccc2dfca1be96fa56e3af57fe1420518e67af330167f72b16e7e665a371f684d53ab685f24e7303b40e18f61939ca1686edbf89e1a7c9e073b3bb5e35a03c2c702bc73bb9d8b77ee849ddbb99d1be23edeee27580ced071ebb67059e77f7ec6e2e1eb68d8a5ea2f84443924fe8628ecf723b978bcdd8f4d0cada1a0c8a72393397e33917bb0714a4b9e9e168f7d95656030a7f0c2c4f35e4c74f02b2c3ffd3e6622059fd301cba06454e0814fe3807048ae3386e394cb3903cfe0918623181e36b0b9af8830c22ce05cd840638f453ecdf41893ce37eb5d9817b81bf446a28f2e17e3d650c9444d3e944a55428ca2a4d5159d13e14267d3e9f6f481265725ee15b057b2e496609e46f2c1eb6bbd0104c0e91f33cfb7abd5eaf4803028547599665591e6592a589cfd8e3dcc77f40b2078b541b82c2236fe48dbc91370647e1383cb99464c04f2df279bddfbd0dbbdeeb38fdaee6fb5daf17e421f41d01f2361bac753001bd82f7ef283c03f48af156ba99fa0995ea4fa229d4b9b66bc71181c376cdeee64a020276cdee25e90565930214e6f2d1d833da18799ac8304684435aeb53aff1d6dddbbeda0fdc34515508bbe39e8e063e8346418d907a6d864061b258f220157bc5f61dfb0d869027b16b1a93d28ac88c2a2528aead36b5a94d97ba0485b98f0be1447ce88b42efe3be991622fce552a3a17da1056915b05e9b4133b2363f8c31995a906cc60628fc442291a8e33bce7bb9dbda0cf90905dfa5ae47164b1876afac4143168950f861fcd0fb39a12f3ed0bf105246248b25aff4d12a46b2d4ed19ad079b9d4ea7238af98d449bd57a9c2ca2718d4416c927f4ad2cf74fbbeceee9d00ba26b68bd10a030597cdb979d2c92c51d6afafc4d2d797c09e44b216f09e4ebed1e592c796471f7f8adcc75ae8e64d1b74ffc1607597cd8ee732fd7231255c0f3c264f1fd5ee6de069744250f59249bc0bc6c550a75ea9e629d008323f51712db820bb8922d89e337a008228967c34ec76ed70469dbf030b94d8f1b14bd01064b24ad689af6ae0312e0e66956eb36bdd44dd0cf1bf4e43edee3bc923c531719d9a9f603857152b8c12189428640843c823e286924a284e0f4e338feaa918c9bff9b7c8f5a8f391917c8b8409332acb5d65a6bad352fc9913f1f7b498ee33896b47e24781327ad55989e8fe3f76d2a99e5c84f23499e5eb7e389d2294d38cfcdf968da7a1c5f6bd369e4ffe3063ada4b931cb9eebd3d4fa7940e01e7e33ecde73e5deb9135d5adf99b6af7d37489b2ac01598311b5810dfee45d48698e7c3491a5adcff33ccff33c4fa5928b9aaa2e693b23e52549f61cba0cc9244f636aeb7deed2c44f55799e2895a94ca552a9928b9aaa2e699b23357b90d1e311df048e048f843390ecf0c3071608810f4d70a840e80746044992a46e1c00630822861f37962082b4648620546c5a1004052be881911f217ab3cc2bceb2d17c34d758ac165e71968de6a3b9a5059563e3cde8f9b0e0f828612d9dd4d25d561e97b57718a05570e6c68c2ea641b7df6f272aba677846e8da1149748aef29ab3bbb4728722874aa0bebca43a01590c9159cb9314343fc365a0c57f0c4152c83a4a0c9ba82aea02b38c37bbfafc83c59c86b99df677574a511a964a393a5c46bf231c62fecca28259616cb3c59c863ada8c9b29ab95cce876b31d71f964e6219beb08df7fe100abbb22bcbfc56f3e3b0efc31776e5f97df9fd5eb2ac2687f9f06699579c65a3f9681e12631fde2cf38ab36c341fcdb10f6f9679c559369a8f661fde2cf38ab36c341fcd2a1f1b8f35cbbce22c1bcd47f34d0a75de9c4c373125b3e5a62495246fe51bb0c21c8f36e9f3b6144cd79df4ad74dd5dd68eea240ebd18639149bc649744971b8be8db58e4b0df41c35ef791077d23898c425eddc720da460685673fed4af8f59688bbe651fa4bebb47fcc21d521513632e288b324bdaca921877d6bd5755cab545432e160ea997e261d564cc014d1df5a3d35941abe6dabadd5d6b3552157878442c152d15e410b22522a2ac9261c4c3d930ea69f4a494e29c969495e956494925c96e41576b326606a486553432659b2b69e87190982164318c443901d3a4aa81cf21c5dc69125bfc8daade96c25d39fa4d94f565a916c341fd18a1c56cbd57888eb0f4fef344c1c8c8ae3e1a131c3b11d060911457a312c4cef010ad3f4f8ba722087f9687a2831475023f9db67c929cf5f7edfae56699a92d2817a70bdb1ead678a561e5b97c1da803f5e07a63d5ad34ac710ff6600ff6600ff6600fae3c97cfe54bd3342545456545b422a63f292ff5a53fd29f2ab4225a11ad88e94fca4b7fa4be1571455c1157c41571455c11d39f2aa40a8d27efa7d55350396a4f41b5185f950a2a87ec00e801dd283f2e2f3dd4ced343d569983819a4279e7802d7e3022ba02fa9afac862cacda8d9a4e15aa40dc666d2f96b61dd1c358c3945bc28c1611bf5d0d5986efc73a56ed464da702a10a555829ac94b562a1b06456c922ad107dcb1aa658f855bb84231554ced855f60a2a87a552852c22d6504d15b152b20a07554ff553e9d0c2a29292ae5054c0d5d02e87b69e877d47d70bec7e8115d4116276437e630d39ec4f86a9a2bd82668416c4fb9d952aa2c5b494cc6fb4195438ecde9e4a071ed5ef6db418ba6d49c92c29592525a7641f2979474ad691925515f01d1265a3d5d05ee11a71c4fb1d5e9da66992e3f08551b064d788ae0942bbba9c5b3c9ae52222d11ef6fa0a2ae7a4afa05a8c2faaafb02c6bb86bbe3f6b382cd2dbe9722c4c92644d67d3695715ea842f8c227ebff715c50e85cb8a22c7614dbe2d7efb1dc6357265b7c825ba44c3bdc2351204ebc8fb1d851a817c51ac3bd4eef712944001c05385a6b9d2ce95b6d3eeeb885f1a0e4daba15b9a8d57f813c4e3e1fd62101f3bfacbea12e7a324dc258678bfeb93f9b69c8684dfc628ac0adfef29314750f5e5056675871cd6356a849a57655da2093c50587d4f302e2b0c8bb26e54fdd6452686b5edbe6db548eb4fabc59a2d17d4c5855576962db6f5b4e0fc4a9a97970eb3f2c0c8741a335c4c675d40545c3fee7a42c35c450e9bd17d3b03434a876f281dee333b1a9fbde5176e5fd81dcaac2e0e74ed7bccea0aa16dbeb3ab6b44a7f8aeae2e7165758b5c99c3beafab3b73d8f7beba2ca803903818d61d6a9bef251ca12e202aac0b88ebe77ac2559c81614637ca292c7c7b61d72f75fd56ae1f8aebe7fab97eaedfcc8ec667b3343eef7795f7ca9e76777f59510edbbd2feb98cbe148eb8f4b3f5969422b4d481ba20d532b8d8816d4eef7d2a58f477b052d8846e41d8f6c8aabcdac5d5a8d1d74ee7d1b261a4644db1c05df66b344b7401c82f47cf076c43a7633e85e1cc5dd0b9b2fec0edd61697589b4fbbd44dc2b5c1cb842fc0b97882fafc9d274dafddd6177f8f2ee75f4bda77ddadc21f9f2aa28000c5058b5ed78acdddd5b2e2b2a3bb927b98e669aae5421bfa1c3f7fb6a8552d39da028aab2f5a0726cbb1c96015c80c2ee70f77e77e5b7c12cf9fd21914b748bde06a7c07def66c95a85aea1ce53cd54aac5981de6a5e5426aa99125898e3ce5b776497176c5aee52170829f657984d16a18fcd6d59a0f74d7d5337501000f412e57974237a2ab131eef0814de3f1d83165a0527cddc4fbb9b7394f71607c6ee423d4459d02eef9a8997730de81a0ee3611c867679afcd8072de39e79c7356e6dda7d1d13721d57428bc7fb920a7015178ff8a5e85dd3028a72ee5d6fc552c7801bd86bc86cc86a06afa027a0d592999a472652595629d80c29d7aca055c8a42e598694af52a5585ea4d807f9fc58089f2df285aa69e00fb1d5329540bd2a768fa9ef6c9c9c9c989d6a494f9a670fe3fefe4ff09aa4569be29a068540e90d1fb3359e9628ee37e77b3700a25d3ff93e43f49b2a53e7e3b8e662ff5073af3abd398e1d60ed3c7262b39a5218d531b529e69a2e82b050e8d845003278609f4c0babe6ebc6ae814df5d32bc6f7dbeedb57e3cd5f7c8be7449a03bc59da35267865f3a994e5663b892573a486fa434a4716a43ea5c0d57437e9319d2ac6b5f5fa9a2ea06ddaa7aaffaa15b95ef553b6898eac755c15711d1ed77d34c575431e24e56e37d33f85a5f38740ae08fc37c1cf6e2f1ea7dfb5dc6b5bee2f5b57bd5d0edf7f50582578ef75f1e78ddd06ef9d29590c49c2aca742f151696c54861e1181375c5164fb6a8ba41f543b5832aa822d2aa7631cfa7f7f37e873153f2fbea89d29cebda49590c9d626c222329c203e2414810df0e1f1de836a97d4575801c1823ad31241af61d86c9129e0448381402898c0c1509f2a0613e13f45dccf3e9c12f9d598018a02e8a9ab30695b313cb806e14316b6aa8eb38b67494522a9a6e30f54c3f4c3ed30ea69f2968229242ad5293901db2ebced19f9d646376661cba18b674542aa6948ed25271552aa24ac554a9582a9a6e30fd30edc06fb11d26223ea6e0db623a501319fbfdf4ae33c7cc406b90c1a6771b544ed9519ce47a81156431231a26bbe18496e58e60f2fe1220a230c88289a13756440bbdb1200d7cc717bc44a06bbec7b0eb6bc761710d3c12c47ef3cc6f3b3187bd0ff3ce11ed8c9981ee9b33c529630425bbcdb4bebcfa94e25cd7dec7267b0569a3c9fb9d45900513da460e61517c5b8e8cdcdbc8e0b737f48dbc81d6e5c46f23899f4383b69144e8f6bb69a26a7fbdb0060abea4fc02de4bf7eaf93626cbbe3bccfa22d31f3542cd9b625f26dc80921d7ee96431748aefe32acbad329d6cc6fb1d46c68118bac698e85850bbb12662411a167b82b4a163f3eb85c95d2cc90ec90ed823870001df16e341b731216f2c886e6fa07deff78fedd0309f97f8b6980edd7ed7bd74af1b2f0fe89aef28eb4bf7b2a1ddef33eb6bb74d648eccf19bce95def1db1eb3aa9dc3daf7a55a51ed6e55bb2c3ac5ee2fabd63630ccbb3bccaa750d6ed9dcdbb9b58adfdadd5babd8311a136cfc6023b6354d2c16a3697b7a603d3d345bc368686860afddaedded605bb73018ac9d395daebe6383ecda071b5bbfdab62d532a743dd16dcabbc7f5a7e3e05caccec47516d5eebec10bc782bcdf5fbc97eeb57bd5cea059379e2e974bc6e572b95c31ec29a51a4f1b5db3bb6a4555974c6a9d697777d47a83c34560f1ed3e09402604f653f4f3f56ed7b7325a858c764538d755e362502d4a2ff9f29e06f0b2c0e5b04638798bf335a3b3b243020174502d7666cec99de2b7bf73841354c2c9b2fd4473b21758017ddfdd51ba66f79855c67e0217d34f319aad63b158991ad7926e7767d7b5c7c89adaddbdafb1253ac57718ad6b702c89f73b8d194e6b1b38b6c4fb5d8768af8819110ba261b1238272c08319d42be243cc8dfcde187187982fd65b63714c870820c4b7c57ce85647098f577e5b6c876e759688c55a3f622ddfdb6238743bea5e9ad84f04e84e8edf6638391156125c56170630e174806fd91595b393f321b7935375667e7379d896099a3b2a676746e5e804cd3a3bb1f6e1040428e04c00aac5de093815c0ee2c606701a89c9d79c7003ba0f04be7c3fc7e7fc56f83b50ff14bf7b2f1dabd7076e29584be4255b102009b99492a49d8c8d9df7af603ea8596df42649e12a82a85724949592fad3306af7432c5dd2c5b58f69fc84e3a73d4e1d06c5953440e7b1616a3d59c830f3804e5a424a529db142cfa1b4bff9e22be4da57f67596d3e2aea502e19958c5e9da9349b7230f94c434c4094d27c529acbd24c2acda539a5346fd614247f586c3e4994ec76f066e8c14134d22bc28b77b96e62f164e1cc9b639b8f69788a79289e8a77d24257dad1b7b4e2b7b426b55c8da7a6e3b0daaed6339beb0f4fcba59368cc7030dd650912b1761f49afc3b8b45857feb15e7eab6f638ea047f3ac024cd3941495942ed4856b8e75b7f2561bd65e17ea425db8e65877ab0d2baf0bbbb00bbbb00bbbb00bd79e2c1389c394141595159555d14a4e71487be92fd52105ae8a56452b39c521eda53aa4bf95bc9257f24a5ec92b7925a740592612872a2c5d059593d255522b2be50fab65e549a51da5c2aa91a016ab433588dbaceda68d67f430f98845ecc53512d462350875b842399959336b6699ac1465f46d8a756579e55c59518b54540e8b484ca94356118ba8a68cd4d4acca41e55301554356545628272549159c6d3eaa15d457d51f3582cc93f98d45641151d968afa02551f21ad17abb99df683b72e0bd3ed5909ef7fbd370e876655649cd4552736a3e9953b38fd48caa82af4c8b4ba512cf4da26b946837dee9787247b391cc937dc49eaa76f534d71f984e829989c4f7bb8ca4a7cbc1c83c5918f3e261dc7b9fc74a57143650e8be45158f8c887b859b44c91027ebca3cd937e4b594569a4fbb3c12cb474fc70c35107f8c14095259ab2bb7aceebcba455a2cb362a2e130e508aac2bcbc2e249614d69de59615ed2e2c0ccbfb96a56545396cb32e365e33f0e53f8ee33892ca93699e60104ca8116a3a38996709dae5fa8797730ec2c3b816e13508dae5fdc46736304059781b3c73c16f5cc3781f3bef377f337b4c67ad84a797f3c0bbb9fe96c13e7a19d18b781f07dc2c92d46fc7114580b28fdbc573fec20baf09540de9742c626cc4d860813cc265888ce3388ee32843a41c4b942d4bdfb72f8ce3388e9c9323e7bc6b32881852c22036b8be1328b1240613021c50129402151021f980901e1eb08110248c7608fa01c92cc9bc52579aeed835276a30f5519665d905080ff45a6836b123a72171226d98906a39d0a14a38403f75ca81c25adef1a20e55c381c7c984b622f4a1cc2b75a5aa740885b50c639465194726b1dd05dbba945411f8208726b25b010d343a3680840f729026267829e3b802b4c5e5019ad86a624b6ad92b4810da87db079221a96bcab7121b3f021dc7fd006231c759cd9337f16521d0e0d30da03356164292139c405178f12def21e080c2e3cb3bef267f63a0b01e7a793fe16d28b4fcc6fb8c97f0367e9ef4de5bafb2d9b77c87fedb9ba0bb6bedfea8892b08e279e1f636069bbc38c320a1570f837a5e3d0cf2795b7e4bd3f4dbddd31f9ab63824c8dea6df2e028b1711a0f0f800b8a7de54bbbbe38428971902e5f0f8aafcd715c891d538801478f102091225f70cb5e4364028bc753dbf75698aaef9f1a6674439575f74185ac990022f5e1481c2eafb24a8bc9d714e92b8b1ff08ccf13c9a0a864465d9065520c1850d28bce7d8a7b9e69a6bce39cebb237d0d89a10e9242da6f37a9c68153c926582493c061df55b5f7b69df1ae1a8d3867f144d381c2db57aa419f0efa7228bbde902e2acd88aa6a917a49d0ee8d0c41f3e65bce4d257397e4c8f74ebbbbb7c880a88588f68dae74a2750c149ebdb371369b01110224f40ecd64a4135d06e344f271ce5ecc7066b399102aebf57a3d19caf4435551f8db0ca7e8814647a70d12190aa4de5515454db3871786a5a082eaa74390dec352b418a0f0ecc5cbdeecb256a6a7a0834a780087b938e185492a4bc49516b0e7ee5acbca93f65ba15028f4ad7e376e6b5868e35b3d73215f0bcc4d5be26322b920b9a8c5406173660a492ecc99e982df6847403c5628491a12126c936a424a3727509d6c9c4051e6cd0c664a3a51d9c8603cd9c00ae9c37697d96d960ee4f40e11f8ae8d2005155660c1eca959aea8aa390821c8022093d19490a5bc6ce2748a99b171725ccf30b713272d03eb1fcc24afee259948c6fce69249a15e5a2e5d7772062d00981e005d170108ba190ea6c324099cc80102bd626ca2938940c21189beb1087298aa8f44ad826463c1846e898c681b8be2b732743b64cbc97d9b7323479743434e7c32954cdd4c860abdcb50ad19405fb2c3af77d5750c8b72d2673ad9753fad6b67778e1eb6aefd349225e98c99913b72c494f26e1e1a33dc4b972951ab3445a5ec2a29e90a55a6ce5e8f470ab54da01f8b1fbf8d27d00f1542109067c20f6808413190a752616485afa70745859115be9e9e9314496cc0dd2e4d91c4065cd73e63f27eb71112776c305992c49c31b111aaeaba76998c882c280342269409211bca649912dd7e5fa5292ab279cb6215992c96c5b25316fb64448664c1b7c58ac880109209df160b920901940df92d1644a604884c7e5bcc4797cdbb4476b3c3af9fbecfd46a3afda93371bdebcc7b458aaed92b3e60ad2c8d192e87c76f2f2130f803be7e2a381803d4c02291142177a6deb65039653fd7b5b33c3d561d65fd793921d71f5d8b7b61510edb45592ed6448cc9bc0498040f4bc848b811629161908f170b0902c4474f470d33cc9c5af37c99ad6b5722b77eb47c3bb91d19ba4da1a8b1ab3e0547e0dd8951280b77b58cfdb4ebdb518d4080bcedb7240912df5011a1206010203efa6ee9f3baf2acbdb33c345a5c8fb2d330713d4ed344513536c78a1c26cb71984c27b3f1ed7739896ebf9f504e5619edee3eb3b6da667797ae91915979d6b6d398e15e5d86f551617b6c10ec90258225b247b0325b6499d0ed77d34c89c9c5824e5ffb92d9f5c4bcdea951072071ab4dc9fab03dd687edb13db6c7f6d81e1b043b64896089ec11accc32c116d198dcfbfd6499828471d97655c86f331ce1ccccccebd5be5a425ac01612adb9c544abf8c28197dccbee258697b825a4056c0969015bc016b0056c015b48b4e61613ade20b075e722f31bcec5ee2172a67f717aac5f88e2d4f8bcad9c9e55a3e9e9c2aa4aa4216192c39161858742c3958762c3c161b5250969e699a28aaaabdb737d85c758e7ed5539da09d1c87bd2aa4e63adc55151646df9ec2b2c860c9b1c0c0a263c9c1b263b18185c7d27bbfa7abfde3ea1b86655b3e23bb1f66c037c6a4a32c1c5ba2962cdbc7968fb77c6c6f5139a9dec25039274e0ed570fb96649bea3c3db64a4fd121da897588d021ea28d191759668f95a3f74fb5d6569e17998d5d5776e097a9664c7b103410e1d44f4beba2a0cfe54d6170cebab86aef99edaf816f54ae2a51b4fedee23680c9553ee4dce5ee7e8db9c41a834acd8f151e9cc8c0000000073160000200c060404c3f16820247128760714800e56724a5e504c38124883a1280752184531c6180308000010030030ca30553a08c5c8f681dabd59a69e6b5b89cc937ac9a46fab6b4bc03f9a540f9a2af32618ddbabd1da54ba8e6edbb7ac00c2ebc25f5f55b1d6f5b58888aaaf48681f9c20e1b2684aa3b8a2e92d38ce7487a1152240d1f6946612bd7aaff166a7a81924cad107d8960c736e11ccd34920417dea36738fe77f6d24a8cf036af7248c2fd5128371b955522ab7f4734ca36507689e8fe5c1ed7ca3b10a1a73480fa8d42d7265fc81cb6ba9296d2294739929b1ea99ba66f13897c5df003cd4a07d28e8cfac352e90db22c3227e93153810bb80a8ed0e65ac0b29dca06c4f83f63e54338136e83ac34f50b527438f67c2c6473a4587e2b09adafbb47134743ae94889c834407574d3fdffa136201feab2f34e921d05b661f6885e567ec4a3edd20aeb6d17b7485101cdcd645feac34afc1ec2be0fcfe620ec2f7c4ccf1aeba914a356e37deeb4874fa1be07609dc5eaf035294f0bd2f60e7ecb45659c149e20b4a26c2e6be79b787b40bf07f5fc8eae18067d7d7af5375f3fe43b8d6f39b199d6e4b4e0b6730d9ee0d7a7661bc348f0d819abb939d04ca20167ba7fdec06ed67a789b938fcd7d39cf5b4d3dd10f94802b02f3b5dcf423fbd6bf15db691f66d95d0b9cec5892964712f168eab24729a0420777db6c3f641573af494dce854644a3b852c39902f991deca8cc2bda208dc699390ee9c565a193078c819aac2bf00b4e9bfbcaf635683f31af2c01eb7478e09fa6a686a6d8b4d413a6f411b46963e4499e25c96eb8b50772fcf40ab9aa729d4bab60a5f5369f998589b827fb6989ef8fd04842c98f615ccf7bced3868d9dee26b525cdb526568a4aa6ce5f350186b49b60604457636f8fc7038f7145aad60313dc0a66af943ebddf126f63145887d8463951f19254a05a2c829e22b9d81652a0c6190a565b660bdd1042aca490af0a0b6b4450d858be39c7c9fc49ea096366fc5b48947e45a544b0bd09534fdaff953285aa034aaa2934f07a39fb81500e9f40c471a9b809fd137ae4216b909902a9acd10e3a0b848f99ca52498ca6f6257ca0ebe688332260260823f82c151392613fb752e13a6d4a1eff433f7a11e467d38ad7c126cf67b8cd32b7add5e7e986fdbdf96a21ff8090db72badcd3f0b5c5dc84a0c9706e631a1eda900173a243fc2d48491373e929cf9fca42e424ea0796208e7dae2e26f0b0494bef82cb96643684b65e45af5c257785d6c1029549eb11a7ccef4217a6544fd08ae55a6729c73469c9aa96b448187eb72352de532a28e851e5848d1c6dc5c6bda320eae1ed0ff11863f42fe623f45b1547727b8c29860a6dd13c129bbd75ec50a453d25edc1313725aff7aee4c404a29c960e87b70d4fd29fff99adc958292e530b07f4078deac446c3347bcca80623912ffde244255ff7b714d067816faec108a2f6f699b4105b5e58bc8274908cb8adc8567331e2f295f5a0c2d116b52d4dce44c92b737e517359452e02f570ddc22c938760be5ac09db9a8e886da26b9bb66605f6592e8835c6994c5b218efec0428ad323092171b6b60bf2aac179fe042efa9a883585a2f5a92f129f3835f7ef3678470d1a83d11e64e4b671748476a473cc08aa518ce2510ea3aaef9404f6923f7516225e2a4bcbdd85002f567389ac2a0e898d974d66efd6ce66a8ae68f0b116bda8a34c740556e7c4d2e045222146b796bb908dd4cb855fc5a1b9a2d7548756e2a2574e8768c09f5702baf6f4f95b82b907ab848e1e952f284e07f450eb9dbf355a4fd76a9a67a5593b50801cfdd8b67c3857fb806ed031965cb0fc246f92eaabeccf9a9aae6dec92cc7a9d81a8b21e7b1eb9bb5e3fd4c962ea38afc2ed83a499dcb912be9b2d2f7ff50dae3873043965d0591b8710b8758decdf7df8351ce8fc114547595da8a85d4f4480192c849488483821df26a1e2d14aab98de1546d8dec5969e348c51a68278c6b8c2fbe317a1d0dca7accbc1966e7e3da009661807067c86877c77a007cc019c594a514edda6d670f90d81d177f6088c363aca8cba141338a352174f08e17c495b856c690217ae44ca000c61858f473449c6333d7ae385baf5aa55c1597b35c408ba3a4b14747d17ed9131f16722664b8f3f9a7022a11915c5b19e1912799bf65734a7652c73543adee7e74bb2f25a8011dc6e79681260143a9895b4c3e1a001869551a93dca81387b766ff7c95d4fa49c7893d82781b2a6806429c3f3b8af505e31b435937980d9ce5b22c30af1a2f547ca919510d92a4e58a41f8e30c38ca5c88acdef8d25fa51f8bd27a0433e087c23c66097f7be607eeccc6f1ac6ac63141f69457921bbd0a5a0323e5200231b6994d54d8c4090bd7a8f1dc926bc7326a00c6b0d00f1c9340070741f9a90597f2cf4ca2605adf8a047dce7a36346adb8c5bbce8d0432e8fcb5f865d186669075a016b3e4a64cd5d2446a0d4717a0c90d73291a9655fafd66ea8e54e34746698ba31a7248368f625413364a0cf86a1aae28957a3f32c5bc82abf771aa026a0a54d11bb2c497b262a82b6ffc7fcd545bf17bef5b62a2c7e31ce108705999fd2ed6a3a4c9a53632a2da45393df15a705c20667a04f5e8ab9e6ee4eba49d2fe4e4f218abff3cc1fae21e989c3bc74ee65c6166a7cd469cc56632e44060fb7be6fc2ff15836d2ef2f2918b9333edeb405f60a3c43baa8fbbc628c48402eb047edbf3b50232b8c75e4b84b976c85953a2ce4ea7147328ba50729eee8d6670d88dfc357c7a197ba52c0fbcbeddc224b19217ab04fb366aba945709f243f092d766dcd79a72936d80d194e02b314bcbb4dc3cea50ebbc7c1a2c0165301051d67f41a1a199263a2487554813ed0d4228113e07ad136d1176d96d8aa63d502f09e2b3a20052459d17bddc570e54423cd622f28a5e43b387d36aea6df551a43c148f40d5d83bc5f433f44bc0d8b9272c78c060859b8bb45544699f01d44051b731b2f78d204318e2e6e38203e1c3924751570d42ed08560a7c7e81e7cecfa96c9030b9f723b6b36a2999b889acc3202b611037b000573156e1d539e58cfb250ff59e66aa0656b5be39a11e6f60e787c816c52013194ee5462b3828c9c0cd98f60f11bd943b6176442d955e3ae6cf3edc802909d1ed1397f817a1219c1379b23695860fe852997d170709ad37f218606026f5d58d5d5b9356c426e39898fbf6b6142225e8e52a211b727af796c0fca51e0110a846c6e0ec0182d820413d472342c7d9a4d8bbf34778f2d76b153237108c77a99dcf496088ea0202c7887a052b1096084fdbf1484fdb6dea24de913ec9bd864e346b2a631e70426c48ecb93187bf47a5224d94385cecffa6488daee06f91deaed117c928e909332d8e1ec5309ac4c09fb49f9825bfaefd7c1a021f5df9e7b0ef6d79181a0fbc229dfd0414f1b153f2a4a5ce8dffae1fe9d8b0cb801cba8fb0942b0bd1ad9cd0742f02b9adaf0bee72e04bf254aa6a1995afc4280c44367b42de7d02cb95555e60e190f8f83754743d65e6179db80cbff2e68a7c92d436d50a6918a3f422aac69a1ce22ef3f27ffaf764f0dbbac076577fde0bcecf55927fd1d358e73702fdcfb977f3d1cb506a150df542fe2771618ce00b1957cf5b84924f3b74fbc6edd564bdcbdf73c4190bb61d2d53e9e12c6f133465f5ca0f883cf7ae96328e2c5e6d0e621d031ec475e428b0d7f66774f48e9794455e2572a458db08b1387690587f1f79e8192ae6ef4637424483e489d2f1079a16c1bce15afad798fba017ffd282d95c446247e9403c73ae3cc85a63c058a1b2868837b80408fa2ec5505baa49a6b496f8a361e95a94b6521747346147393b2e98d3cb2ce0fdd059e55773da759cacd47502470918f7e91080b12e5a337e143a5f96811f2a4edca6f453503be0d477491f4f3902203134f502ab2e0db6406b1fb2fd5075b1f3d1ce09b521605743fa44a4c63b70769d5c5cd5394fbef448974c00d72c2bf472350713f6c04f694e02d0f506845df9fe814d04047341a2140f672da6549ce848f90324b5c466ce7bcf0a9202acc76eec6741f91ed0c362779abee90f011113655e3041b85eeb2886d20473244606d031e2efb761bd0073f8ac09eddf72b7b8ee47cf6082a00555241370fc43b90679f16405061481bd49eafdc6024b8a43ef63b84beb3d3f30abcf38fbf15fffb7a8b286fea3130cda72520b84406e8b0a88995da5d4cfeb2ed7eaac29daf9e954bb3a6516509e92b460ede41580b25f94d7c43f67fecbffb6006dae64505721838dfa1193501b61af0de8501b4e3f8ea79d83e9637395c76ef3bcab881457b37120e45f07ae5c8097df32cf2234879246c4dcc035b4d41211e3c92fd7868d76bcf2e2df3cda99c246f1944b6dd89012ea855043cd36c97f44519c816564b0036195715c9be1ede357e0937410806076ecfc8bbd52ca743701243ee0d4286b8a91741f24e4bb7ef75d16b187fc447d7cfb0ff78d724f3e5e351796bb3c621cf87c0008ce018687b3960b412c021b8fb864115d81b589a3960c5ca23b815c3a9688c752f200ed06907076fd50bf99099f2887ac11842162857643bd1057e6871f742b250a6846f286e6409e5483e091b24d22a663756173814dfc76738f2d307c59f124983df7e24e4432e29b665819204efb09932a16097c09a99369c4cc2f7852d6d5242c915ccb4aebabc4e0d497f56e74560868afd4ca56a3807c549729637d04c3a40611e8310ce1c73e6184dc030ae74908990c6ca6d8b512d57619a2a009fabe02b7ff5c1412cf51fa428089696f90bfdfd8f4cde0c32f2e73cee2b58c312d323e3357476abd09aab59c107d69ab3711a8d4aeb9b27c621c68d5472c7439d1a95d4374f8c19294bbc710049072b3283ecfec2ff16ca8be1cb33f23d4d87234bb440c80e1c25251767ac47fc7df9ce5938b74c7e01e2f123ed07d3d137aa08c692c631e4b81430ae08d80c76b0c3325eb64e0e842b66464a7725e278e69826499bddfffcfdd6f8be109c0dad2e7e1115d6d6ff2040487316c7e0581dca29314da201123bac26890c589514319b5e51ca5397be5933649981dd866b8312f646025a9ad48b980f46a538144890d3e3ed97777843b801078fb808271b561893455d236cc4c50c75ff9f7f63286bd240fec59d2536486f4bdff533c928bdf38dc09cb7efef4d80ef9f0af8bb8415b88600cb9cf22db66dda4f70e1f7abce522662abd7e045482789f800d7e5e39060831aa6be467eb7bea3da4e1b138f2c3f95d556679c030e445938f042d24ecc98b17a4072c6135774e8177809f4541d9a6685d36462222163a835b2971ce8b10153754000a7ca19595631f2117ce111413d806290fbd46cb3a1c4870f1b9cded52a48f179793e1ba202fa0258d142b4a2fdedbfb4054da629c7d87fa0ad126fa428572c3ab90a25be8886a36c00283d7eff62bc337a86213ff19827188ac822cbf8b1b34e70c6bc3628e738154868c923067fc20dec86c0bbf91b8b123d88a35856b9fc671108f3c2ba2c6c3f3949604e54719a1e39d679c7b87dfed831350caba28c7759bdea5c2e7fced307a7132ede153d851c9642278f3a15388bfd630828d50018e9456ce2c5500eee7b84a5560780e20539dbf156bb8088ef33ed6325b319c47fa2a8feda7615230804c91b12dbfa32edabe82a3a358f234fc807e5549cef2a46fb0ea2042118a676da5d196b7f68752c1478764b16f7c47d2cf6a192222089282b5963421cb0c3414f97503c1b4611a863664b32f48db60f9f94263e9d708a473183f43d6c03648e62e0d1b4b0439f120d8544c6bb9e88ee1a2cdae377a9982357870ae1744b990d40ca4ceaf961b9a55a3feac919d5b5f52e8a9298ac4c8157b23ba3042c3033375197e3145b26dc3901b996f6f327cf7670bed73930255252d0013180d0826b464c0dfcd2d3865ea2345d597ccc590b98765b287be95e47529300117695210b2737db6ab30a02828ca8fca09a14440c4999a6443558c99e7eee04e460ba98044220e94418d3faf1a49bc9e740040ed72fb0abf07082846a5e3306805c519d091f86b509e07cb69f14751379ef9729184281d6824476c5f961aeaf6b1b1a4c22a51f1f9a03e19a122c01a63253ea68161091b45301e85a512180a1dca542383b13f243716b4d3d9322baf40726a7b2f47fb5a29c2a5bb79b58592e045ea5dac9f6a7126e4854c86840204b80cfcf20b19968ca35ad53f839f8ce623d6f503753b653aaaa1f7eb04676d1a09a34430f77d2ddf1174e39b585407fe6f02d25dccb3b6276b5a2c380c48bd09fa8156bd33aa88ae1608bb7c48951ab6cad50571c0c9effe9c6f34d183f155eb40c6789c20ef46423bd0832f105b249122e1ad5f86dec0c39bc053b00a3d1ab1a48d95898e28a7af0a14b7771a61455cb2a6c371cfcd3cfaad6e0d3e4ca781344b43286b28d1ed94c462f028f957d6f8534cd3d1ec3609c69a59c8ce88555740fbfe8b0efbec86e86978950c1aeb2b0a3bd0313de801604f0ad951007bc458b93dd534af5e7b663bd5cfac51c6b92a5abfb96e4446e91270258e9d3e4d316a98fb664209822c47538685e620fb78f774cde8026bf3864d9d0b22d706c9060b466f9c85fc43f6caba118080c162e251708e20aa3478b13863c3617d1b861dd6b63bfe170028d36408ac871b6e671cf06eae9a8d6af31d863c2b4b2b4bc3d0c19839e475ad7c6ab6c272cdc6e560e61eb580144610bbb546d2d61445965a4eab198025c54d8885884264ddfb19f2145007e9d09bc85220d8c100433d5796210439c27d31a40887452b34ebfa31719894967a885f712182ef2b266b7c8b61bb7dac12d729b168ab7aa02d4befbaa2f7b8e849826cc210075a3685fa2b73472fafd34d5aa18740bedd6df4fdd35db88fbee45f4d8e6942ebe33f373aba38691a988d5bdcc89dbbbecce22964dc7abfdae64f90fe13ec70075a2595c750ce6b631070815ea8f72038748a7dd65e233d282dda0f5f86914c100e743432a9a670dce54f71d2a2861b8537ba76dc06150b6b5c284852c5e8862d335318720347c1f932ba3f3d65757a8cd8ca91d4932db39954e9652b09a7f9d501346c20dc00a12091083243e5e2b41c2a35f1e5d965854e79d16b1a63c3bab0c85aaf4abf74cf34a53438628593a98f4ecb0a50b79048413694e94ae35e60e1171dae4f1dab39daeb31ab099cf8bffc6ca3af5f4179b1d1c65f0240cbde5e0d98920e285b689bd90b6c85018a4930e450a4b30580ad245e180a8281aa34906f6671e787da261e3fbd90ce7278bb414e07045e4b6a931a32ed73f480d1851704970804094cfd31001c5348d7bf74d243dfdda285c966ee5238f6f117b9223d1a835590b0928ca5942199a15cf6e6a5f15ef81d6ae5e4cbdc28c28300d5172eb12506cb850b2e13b33cdad0539769eecad6842248862a1123d9eab8460867765da687cbb63e71e3f0ede7ecafcaa07081c2c0cea35bb50a66819e831cb02239e97da53e9f7e3d8d96f0e9da9fb8876762a39da90c9864e474df248cc713f561c464bf09579f1638d8b9eba78ef4b19b632eb0e94fe04c36bd14177ac2b928b80bc4cd2fc8ec16a4542af8ce53d5b34956c90e607aaea137d70526c5baddcc97ebc1378b7fe24372643eb62c9a84dceba5b6b254f663ac3b6d5fd6f3cc1d28649ce1b6fd5b85da7d04d4b49503e00e46a274f2d10aee6a9927b0cf5bb205f10e1f97eb9a79ae8ad01419011a210f231a04242c90cca314f4ff6e7bb2748fe86ca942f905d04869817eca90fb7154817fc521aa31c905ff1f3a94452dd995d2102ba8468747965e3366411591f931f62778a2448f0314d714f4755f73b3b9826a32a01b3053ecf47e780728ad2e097eb99200ab6a373e845eb6e4b40315eff920ca6de108722b82244685d48a99bf8c7b601cc56dca1f1782ca09081aa811dccb5ad04731ebcf2c89e3d7084abbcf4e6048b20ec3d9d1a3e8b42537f16d013247cf33efcaebccb88c31507703af5fc618a3a98904138e0d9c03d9d8040672a28e50cd1c1f457dff2e92bdc02cc4f3d0add1683e42e011dadb052bb6ae60e507604e91cb83b24af5bd6ad173c7f215013859142102f29a39702e8ebb8985f38a5978678eb4bca8187e123851c485c6d97e2378d604f621cdfe97ec48cbd5c3848169075210a304e77cce20dcbb885e667d0afb4391888629c30e3a2603a49e2c01ad7c2458c420f0ac4aa06d463797e8b2fd43d747821c2d6646ba8ac2675fe694788929f5ae6383c37d07703cd52b9eb41b11db691c09a106c5c7fc00de58fd62ceb23aec170e1f1f9da7fb1025c48a81a14982bdca37b7f0ed44114bfb8f17a298eb0c054ff5ba72538c47e4de5dde0b5d2feabae6ac2bacca665781fcda8c8a07114e128c23c5f0b7a7339fabc42f5462fc6ebd36b5ab7eeb0c5c04f80fbc7b52a866303b812004158093c096a69f12a719e8558e65c0eaeb97a448598a3658fb8ab28cc47b3cd430deafc9daace1c1bf7256bb322dcd0316a8df0cac39c174cf383c198479cd9783beac5be2061655d86b4aec33ae26e9e480b865d74ef596ab2e32a09bd5fb4f6f76eb3649ebd6e8e1a45a273f67d7c3a83414db8f7d5ad25062a8544ee30eaf8d42f12479a7dbd878159277bb1aa1e7f1fac839241f3170b15a7b4bafc9719f2701295674c90050c16c05060b6468cc5275e59bb9277473f9c0c9583e16529d1a7e24eeccec225193925f166a08271a35e8047d552aa898216fa8cf35ad0ffe0d89a1e7e1a597213826ecffb8065b1ffa06a566b4e1ff129b74268f152b5d20767d72899f60d1770dd088a681bd7d977abb4125e3adb3a3fb809a8c6d313178ebfdc5e78de9985678888693fe9577836b384c88833cdf54a90b7c90720c527326df6cc45df2189adc15f2dddba0aac3ad6f2bf9cbdee09bae008bb32c81400916b4a04efa209a5486bda8e40eb1be34a5dfa3fcc42d1c34dc468d3ab279f6ed90a8d05a74cfa82fdb2136e6e41ace9fbb9e7de442e47cecf05306b53d03293faba6a65f673794bf8e1f96e8f5b30c1e9f6c37038dec850735f312eed5296fc71b781744739f66df9221136376a686442b9f800cb9b0f0ffa18c22d3ca31786256754ae583a45fd59bf74cee1e1c52f156595ced1037ef83f6ca2291e914aee22eefbc18a7cbb0ccefef810b3f78f646ab2c0d3fbef93cb3fdd4291ecd3bdcc2018bbb18492a40a6c1b24c613cad734a4adfceba2cbc24778df7246692807bfd72170b29f0f6ab243f60bffba2f56859d9a6187940102c568bda1e5c60802d13acdf94a7b53e581444a26ee57c8232aac85ca9e4661f33eb0dee15e08988eb4b9214839927497a38c4962c6092345b03964f7c688af317d8367808e8c3e119f2afe907a491d9e2bcb2c4248c9a299d7ff3da097011d26be14654dc3ae0e69817a8804c5d7ad6a2385969a7d416973884a8b0e53d0a963c0d37cf91c32f30a335685ad98527c022690b8b129902aaf99e10f17777509a304f9d943afd5ca4528e3b3a5055fa15ca44638e5de54ffa3ab46e0d07983c5965bc3e4d455ad38051a71e834e81efbd2b95590799b68d10d86b779b826152c053a4126ab736e4fc4304c3d5aed6d83ef7da09488adc6d98591beaecb1bf41b48d4002c9b40bc7d4faf7130ebb7d45c2eece8098250451e31d38f259766996a21c5b36174715b10ee6d0eb53075b63f1db8971142f88647badc3e77c7700509bbb84f4b4e4cdc41ca278ea8658ea59e115a0707817352a8c3eb6b5848c0932c404d90f6bd7dfc464549888948d14c593bf5c57d9bf0fb10f8cc73d64312e0661d59d99637e68cd6a9798e6f397cfa5541e1d1a780333d507e567c4304dabe8ac8742792f1fa17824d37a80ffdf2c4c106d32dd0dabc56fc8360586f6a8e15d92b7dba48a0d585196d9863c0fc4711e4815a1d48bd0cd6e41d2b2243f1efe982b66875ee97fd9d25f437ca5da12d3da960e2cafda305320f1efcadcecb003ac393a3f0ee7e6d0607863711eb3b1ec34e5edd8612f33353dbda1549414fa38336abc5ed08770d94c470bcc29d95edf322dfd83d6b170ebdb510a8dd5082b2bb626f6b59b8d37de0594998b765095662fd978650a0b5a022e01ea19b501cb3f6911f40a65855b0bfb1eab1708348c0111985db2b400a850ce821a67de668c87299728c05e60c0b8382e508e89ba2f14a677c031ec5548f850d56108b9b614225fb09e5a7125f83f4c6094f40760da29b929caee09ae41639813146c5d0252fa992c80b7cd9d496f06fec52126b8a13a34e4b8a81afafe81a3f1a8620cd22439b9efb051f13c59d1c4f44c140161335cb57fb63db89542cca2dd1f329b929a65b870368cee6980d9e6753d67e1ced1289513d61789c5c64c4e41e1f93d179be8e5e44bc92ab3b54b7aa4edc31cfc558b9586b84cbe13905d61a433c5dd342f40918fd1a83ee4c11fc81c779a66ca25f5eafeba5a505ab0bfcc833585e814586451625ded586089f2f38d2cbed0d753734fea18aed5af777fe663e1952fa2f16d32f645569b37c1fc881e65951c0aaafa9ce394fd5bb9584815ac79f653bf707c1ef75fa61338be93a378576e361aa2fee4f159cf2135cfde3f110fff1471c1c89fba3554fde7529798c9e6d8f7d48523a8fa7866449587a12e6479aeca887650c81dfb10c3e18db864095c742204cd1a5d1645a7b55edad38da47d7fdd6936f16665d1d1a027d385603915c2f701af8cba9a06091e1ab22371402e7c081dde338fc98c7d67ee8b25ecbf299ec9c2262046b916af6e58726f33599f5b39552b0b5199974adabea962747822a04ff3bf082680c1d78aa04dfb635735188da13f68a369f27d559797c0a7a1329e8b91849d9ea131204f103e08a8255b6e183ec0608297805e91d59a5bb8c19895df5b9fe600f9fbc62caa78582ebf2b7f6c188b05bce5ff6ac82a2d201c223c007f9c34bdd082b1acb550d749d32a96721665c67ad504a19d02dc8930a082fd981eac87fc23584fd60e88a16c271578ade204f2d4abd008d24ddbd65df5fdf0b85cd8b2844639002d676b3cdd2429bb671157989a06c36fb412d9f84bd426568f0367e145ab8c69f8351e72dd09cbc8952c73f8fad461860ea035a78ac1d41d0192c940bc6d0762ebd40a0eb70d871c4a018aa7f09048f4ba119fba6d8f8221ade7547da3603226fdb3f7a0bb2c019036a190e7732006e3ddbb946c3f07315d673fe94c3f0fd49611701c0e839845c306af8232068bbddf38bb2a14eefa9e7eb902aec30a338fe350aa5d1f05844418cc26c780622b5d190db513845340c26a3108c87eb6fdf22d458e95b28dcb66371171af57f4b590135668c20ce6f3bcda74154ce33f67b8e65cdab5c0500c370b620e08fdd0aa47e0735faaa7270eb71d1df2a3058394c12209c529a54f29fcd45c29fea9d981f5ca7a0f44e62d7c3c5c407a470caaeb9d37bc6b8893dc2efe5af13d115685bfc57b8b017feb86fe8dbd6033ac48ece2ba7585e645a3a98e210cc551ff218837c8cc3ce79ae38099158015894028e54602004734ea17918d0a38102b361627a08a2e05033a511f31f52ad709132705252980ce51d2d513631fec9e0bded6b8514b5a65d85bc679423dd1e5b3f0408eac580fca8d06076c7e2a9ade09d90e458997b5f7d71d7ef3eb3e9374c6163b9fc6b0e7b26a30399cebd30f683231affecee84af72aac531ef17189f522e93ef92056e620c60c0131262b8e32e45cfab375a00fb6202482be8ae92a48ffb4e418fad23fad60e32030e89396e606bb96a960b8a01321251ba87d8499924f077deb5113b82770ec1baf7aad3eacd044aeef703e2bfce5bb9221346bf9c10a86bfcf2254481abdad4c17ffa4f7198fe0f787a62d5c7ef91f11768971f7d41d8f2347c0ccb6501ff3ac1af1ba9c8696c32d80daf7aa5def7ee3f3ca9a810d5f2d3ed4201ec724b6f0b367404ed7ba728979c1912f981238350a3ac9c8691fbe943da53b78418d1a51fb49cc2b42939089d1f0041420ceb943f99f48ffbd3c6fde166962b8af16507c05b9b77266274244613adf361e2548983e0ab4c5c48cbee79d862817b5d52298299f1985e46322ae260270b2bca484932449069c3684111eef06f6a70f663f7d9b09fc5a5be5ff8911d892fb73d9854a30425a6781a08a56705ea06921bcb818914a183d9d2095a4c0b69543e10853bb65683029854899ee520158e91bec4bbb6a728554a67993b95c5238d5f0075d0a32703f6d27d18039bdb3a6cc6f3b387b6f15600ccc3f893d51a40167cf1ca22b1ab72f7eda26650204b54b9ef3d12bb1b771b0cd2c74c4d8b7104157d150f4a23dc57c897ba3428211eb6fff2b4b07518130a7d7b70b162857a60b50580bb9b466b23c041b6c9742d01af81fee539720da73bd2c98abbd005d9475cab47268aa6f086dfb2b6aec8292686050b3c96b0f2572002509866585c533a95c0f2662ac5d2c7b3ab4809079bfb3fd28a26f1c6efba860604b32c4604947d24b1c2d749054823f530ae45ca95617163abc7c263a00b4dd14881b924480b42881c4288c1ae147c1442810c4616819004a2470a5612da3ba7bf858486d1f28660f702cc6c87b159e7e0dbff2c31bd9f8e2a2055a3030d50a1f60f396902e9c6a2470bdce1c1d8fde85b7bd4f8aa93b1bc0d788d7e010130eb7e116e9fbac74434dc57a24252782b31c419c229a036a324df705caf1437ad98bd4cd73dd7ae549e91670cfc34d81e231b5f06ec8286fc1c9507dadb63bc50b3a278f7c58b1dc1825aab6b340966ca657dda2e1ce5be41cfef0f44d773227f954642c5b68fc9c59f6ffaa83754f04c41fbe59429aeb52fcd91d22eb8a1dffbd3631ab36efcd360a3740fed098d16b084d77a66ea987dc12555bea1a8c5b57a1a380ed4776f4f044408730a159e2583b858d2d35e0b9a2b4051262eaa94eb83d67108733c3ccdb6a2205d4f62633429346e23897bfb34ec303b1baecaddb696926496ed1b25bfa535c22839db6a0b4529d94a30a1a476220125b1164f0c46321c4d7b7b095b023094f856131c609f0049eacd2c346b2e33f7e18bd64134ce79a7a405c3b90083d72f380daca3d3539eca0f26aa1de579140d47874137aea819e850491077bd13db5c4288b164fc3d672d914f6d09cd2d4f05993480160f7ab526efa34aeb585054314b557162adfb203b30781c30d17db419ba55448b6a535f24d7134ca0b1b758efa82b2a544b308666c9b2a86db109a83f39d804fe35a2d5264f5963fdf313fe84315dbe75136eaad5eca104dacc68c2a0ebe9a8348015329a6d5d07513fd5ee9027cdeab99e6adffaa1b47a3d40147752eaf17046c7e12419757495da2043a8bb878c36fae833c849480946e4c9aafe0fb2366430972be2122d51620eec4824767b583d99d57eecf4f886cf8b4db7a01f509d33f73e4a7f13d3c9bc3a1ad754d4b6e2b5fc83eb6017031c27891c8af19ed81c8928afd9ea580da9c7d0edbd1a452ba05cf415d724958d97654853e4cf33210d926c2d50541023a5590511d659e03bd8c8d5eb6e64b771c8b93a841835253e931a6882330682686560dfcf41ff158ff0705b1db6ccc76239d062a84b11c049937474562984ee95816e9ae6e2227c270b1c2607e2e61f8d0e524a948c5feee6d3ce174a23f7bbc9fa036c028fec5e8336ed2699018adf6f11a0d82fea2806cd813684f9214202312015d6fa721c4095023a40036301c6bbc1cbc0756df4981b4e7d9e363bd12dfd0e55492cef6e821e0c45f4831fa1ef06422756ba007660064e386e5e085c482630128935ac05e084505a2201bb0af1e70fb3d949a04bc39e5d12742a50972249d020f4208b44cf05ae9b8504da2c29bc9f8033fbe87f40758181922f1b47f97795636917b180e3e477b24ed51d9c51693a3b96bc2b1fc52bd286408def2a9c06fdf33466967b14106f0a2e96c81e688ecbb124cacb9a2e46458605ef4cd145d2b165c18913579a6905084b0289a739009a82e58f22d7d66b5e29fd6495daf72ab59f640a50700ff4bb8538f55616bd4acd4c4252927983ec3294e35cd37a09c6f35644f7846871bb3b4b3c2edc68a7a9ff684b4496d172e984cb992cc12c1ec17321e83235b31f2568179aadc0361838fc8f51a43dce2c4792f80a31b9a3e7c3c165fdc90195e964d90412c83b3bc7424f3b9642ff096f1de69781159e331d3ad35f4932bf08ad715cebae75428b6f70a4dc04dae76df638a426c064bff724f9d1a2e0f04030538bf4029dfcbb099dc48827bb9b256231985dae2979ff397036a64807f90744ebef259c040648f4e8c6ad41ce96072822545ad1e8eee5b446a85e9ac51e2cb87a3e7d1fa73683764239b3a382bca829960c979f254227bdb420a9d26277c879b512393208d16f252f11db1357c535469f808b9997abbbc01801147bea8ab77a681af12da1d894816f7c641d85cc7d8ed9998b4e54d3d577027780e4e0c9b4c892f213a5572dd8e040d6a5b1f4bf6951ce82eba3e569c260b60092a168aff7b77def61b7aaa0fe2f420a9b1440d861edc0907422d8a5ff267c4e163e19fdf55f330e5519c0c3a58f04d74e91459ccbe1e4ad402d9eded23cf93ee1d3c94ef2b91357cc15e37e883076cac025a115cb82c7f2eed1517e12dff4cb27a50ba774baa2d49cbbb235da2aae3cad825b7dcfacaab28b01d41209e30a6cc573b452f5cb50ebefc04ccffbb938c2e083f525bc6b806c4ce4711aa25909abb4a7b2bc11b7e0ecfd50071f6b7421aa82a31917bc9f1f6f5bb5e21c1cf45ea82642884f05146e8c6b24dd458c1229305bb5879d47c711d29d73f81c704bfa6d9ed2e415915ed43ef56af3660f6fe19b723772cc1c59d54c9845c664da1274cda2021a7e3c7020c1579b309b26b4b01a9785ae66d3d5adcf49215a5feed8a2bbcde480666854328da2f20edc06ae29bb6d6306568d9cadfc531940b8b10ba1035d8e6f988b08bdb1d9d8dceeb948019620f55f2a939fe5c3ecf287c4a7e57b59ca134c55aa0e232676706829189889cac6e3b0b46b498ccb8e192a7bcc06b2919c2695f6c84b11d2057972b8dc5a4679f1b218cd9aef3ebc7a6c0f0601514ae951a33f1065b3b119231365cafdedcef573e7a76bc2cf2a637e97be4e878fc7e38524e84f1b2178c9fa81385bb213f1f9ead8149a30b83a493084c3d15751eabb78c722f08c87b5fe9bb5b8c5a816f1e7e8a1deb2c7d64b0f0a582e72b70414f69af733e9163f21e566f4ec68e08c7b23dd7a15fcebcafb40bbbb27f639d924d5a6b25d8107968c726a50e8b0276f2e05fbc8cc2b5440853d5bd48bc7db42b28e19d7827dce73cad04fae49390c122b49bc6e53071d930827b54060a05922a32007fd09b44117ca05a8077d64d94cb222f7916f520c034ea14dc34bb8db68c4e7994c001d93a63638d7f44ec053ae998c0893aea4fb8dc57038c78aa29150948dac64bb69df8a5cf19ac227364d70b200b7d98bdc95af4eca93fb3b41b89f099e88a10970d524e57d9f8ddbea9259dd85ed8b3d992dd99664d51cbe290fed710d814df7a208a866750fdbdedad2f37cb9f928a0256c3a1c77f5980b4c9007b067865c97ff0a567be23bf5b5fe21a26562da88a19690664646e086a0239ee5bad04a81f9b9d60d37eef161d670c6690244e37486fac8a73c5280f623c22affb63bc7557f32dac5164a3a2569b3d5b8ff2da9082dabed3dd8cf5b602a04584d4481f0c3fefadb83bde84ea89c0c978ba2b6ed3b676ae792ed73f738d161819578359872f699bf024040730015282434656071e8b9f2dd955c53018954f9ce682c529f525740468e9c386899462451bf2f8c5db5a747feef637476a68a9f2d7fbc44f74a0e651ddd9784c714a3e6cebb70a443dd0d3d1488e9567f654a6fc8a3c17bd2eb57bf9a328421a4e27b6444f2270a2e45d3ef5b58d9c22b9309a8e3de209ce189f20cd687a97200084d3667599447b4dfd73f1412f432e78a77618b93e7e423d04447b3d801d5fec5730b05ed914c40efa50a3005f0f9645bb3163166723f0f2b8d4c1979d7c0abce2a4c2239dfdb4416426d01757139b81a565e2f7c89be9cf8b907197ae583b652fa68b4acab9da580c0dabf6cd9266624361bf162439af911154b09bcf3984c753ba1805d110d2dc5ca3a95a82140cac4e69e10e17c328e9b56c5cc46e34c27c7793f86edae7e76ce9ab4a38638ed337797cc650bd5db9f63504f2c81a6d4cdb750812be4c4394c38f3cc7854b76b7f3b5f29fdc12be402e60b06fe4100a34d37517eec6e626f5450645a66cc4c1d4e4c8106a66312ab616b3d8e40ab1a09b6a263cad78ab99019a6bf90d1eeb4e78fef87f65a180db1955d1b141bb17d1997257938d351032df7d774e0f4d774d3bbc7c5f7e80e34f86aeb4af5967f8db69a59cd7476410b3523ccc624a2b45391b95e2db2866336ce24f156c1ec1681cc5040c558bfed5ae2c3cee7f7161325759550fdda8ee91b4c3279280bc4e530f27cdebbdfa44dc9a5c706eac1b6f186114dee53545e15cff27c70a1c1ae09e14d524e02b4e28ca0a07eed9314386df3b7dd1f57e10e8b07e87e68b293239166e5f806650ab6c2fd75777781ad8c1095d7b8978ee35740c9458c932968c5be3eb60b5863b92b6ae2e55477a59a766b62206fd35bce8ac0488763e24ea0615f8a6bada894b5bcbbb304bb3680655d9da90a32b206b9588c590b95eb49d993cbd2ec794567d77fb6ca8124f20ac1c73050f797ece19e5da1b75aeb315ee7b27ecc7f2c92e854ba8eb6e36e3e6cecc28cf5aaeaf4bacd0a692c32269f28c0559b17d753fc4dd82806bf92ef27a295d735ee17c29c48dc2bb57d7662a44a5601f915ca5212e8d5f78c6059e29b88f876d0b0ef3b5f444b21287328992269eca7d5b128c9140f20cff857dbecc74d3f7760aa54dbe299014ab634007eb38cb014357b3a0017d99df0c2f1278c4648826ba4303a6312cf6d197998c5da9ce970adf409347cf4e67bbfe0edd11d9142774a8ef79a18612012a044bdd757458957d9eb81f734326b95ab6b13ad3a9e0345d997cb7324b3ac60d23a3bdc932c3c04eefcbeac18002478f31e5985a271be36a898ff25cb91186671ae10a917ca82ed5012fd34280bd90284eb2615ac9166fb5dd58c0670aa0f5e449ef31690a834dd3884b62a30cc1aa2c1d64cc75cbf3011333f066c29f43eae2da9953fad9d11672f48eb5ac949759e780a58bd5f5294bd1cb38696940726450b63b94ebdb7ae73b834c258f8fbfbeff77b43bb455f91772d3fdcc47d6c13186e624f9ab6706f3d9fbd87eeb1fea52eeb6dc99c78cdf504da07ffcc8fa2467ed3524981faa525716d8739fa280f517b39525957392980472c4598529090ba6ab9cd8895697ff0b0e3c578fa3a799ab884094e906500a151597c861181f4d81d1e8b3dd3e2fbbd473667c934852837ae7d6e67f107f1bc952f971b6f225632135ea51dcc12a729ad00efd01a761745adabb57f646dbf6cf09a9043f123aa1cde8e635caf0facc7daaff2e6dc1f6a31a6460d12dfc5af5e816c73857eba0906d0d4e6d4302fd6e4b0bb395501172aa52022b9bc70fa49bbc5be1c144c9879a71dccc0fdfb8494202e9ec3f427917781c3a9941e059430dacdcb984826a3a0eaaa6986398529f01ae615af16d0e05f2fdc4f1ffde5eede4df1dbe9fe0c0c850a5d34594d400da149e53d648fbd69dd9453de4a1dbec51f1c3d87544ac2870ee8670124526ccd89bcc1330942f23efc6858578f06264f6b799385cc915908b9ef92f097820e70c5657b4bcebfe4702e5c3dc0764357a0daef2466d03b1b3108ff8f415a72dabf7270821cec04025cc6ab64e74a2ab5dc0dc3a2aaed0e55ecef19b76e662963a24776894b65906fe2821992aed43e485a7c45c5ecd69d923f0305849a9de1130c9a55588b6bc351a1e748e20b81bb894c128e01ea4a9921f173e070db100a0726596962d9f8743e264f62696f993eb048cb24752fbd424ea103ae8f9c095306dd22c1562c4f93f7f546e0054fa83e69ea8e4f682a300b0a4fe4df6e1ff292cf3391a4796e46680addb0abb8fb7a3698f173cd57e320531974d3b5fcdf9a200f748f6d042ac070a48a752c198c31a768f20f4fddf15dafa684f9b46cebba13a1504a313d877002fb36b42347fd0550d56ac6b524cd2ac2a1b83ef29b324d099a4e837939ba9d39e29ea838ed3e0e9a970a95fc405afd07d62b794a0ed4e84a874afbdac5415406e64186cf9ce83793c78d09e0913a002e05227df0cdff5a71848bf8a82095445ecf920eb31b0a39634491c0cd21bd53b779a1a20e2131161e3f1799beec6e89c67f49dc8f5ddfe08024862118d6c95e4d7294b284d5a0b795ab6e8ffadda99210f551bb624d29c79064765dc1ab1058c4a4f21f0890aaf1b80403104dac2c63a93e4ed6e6117e627af946c22301d208979edbba6601678bfc7252e69dedac86f92791fbe9cf6599c13c6c80b01e7b506413d51d4ed4b93430b616e3ad08c9b31545a05e0924958fc9ccdbe5f62a166753f32692645ef3764f03528aae39e51847a9db2b7373a29dd8a05b13fa3903766df1b1a9ad7c04adc72bc822f31caf2e9b9333513323d0a21342deba777b65e5c6eb3f5c4d496fcc89d3e3da79aa0dde7e4edee839d8d7f80010fd7136fb571e88ce74c6465daf3dc3b9697f8285484ed347c69e735a5a0ecdb818e8d4ba1fda6a4b73919cbde81ee1225251b4d00bcb482c9ea48768d40ebe2958c20d405a42ba116c72873d1ada0de5f3d91d0f1b9b12de6fa4d768e5059815de143f679193c4f207af1f8b4262e4214752521078979e0e528ba3079668ce03c1d9212ce1e90903a5d39948fdff1d071f8088f28246a7711f129488223c1caba18968911ccbd33a515a94e4ae1de147d306f2b2f5db16a607f38f80e880161e6bd4a99ab30804f7dd1fe170f2465511b8f7257fbcb3b44a0a810e2d859442ae9a39185991ca76f9f1f532c1a7b745695c51b302803beff7a7a2e13144f7647c40e619fb9c45796ef61f9df39e3316b1f0a752a3cf2c18d5d9bfd7e04d3d2f433a699d893356fed7ec0d459395b0a9e82b92352b55d8696f80918eeb12cf0359e80f7c8356740a89d225eee3b1211766fb37c01f153465f8d947595162d57c20b77076cdec0f5d3bcae81bf2b566107e62c2698d611397e672e44960bc2de9b7bfa17f10c489d546d13445f8c406a4dfcd4715e39e14e29d4c866c431502d1d99656092c5f495a2fc7960725ff4a04ba092d3956007413953696fa4b7da001cf960e46934fd3e3a16b56f3d549be59ffa657c8627f9768438c8c97db7674a8ab475b486a1dfe2ff0fa932f76679bde65592e38bf005a94d1eac016337b7bcc184fc39f53ae1c733dc796089caa8d674f8023478ecc9162e72c10d085574d5cc3459cdd937f340581113332230ddc1d5558de173e6047a28909b01680b94ab70d684140e09c8f6ca4b37aa3b2233cffb1e933653028648dfb1112d5de039c590e595433cdb506de1d9c2ca7dea1c507793b1816205a2156d282ed5b780c4f1439c05ed81a68182eedd6d496af83e0383ddb78fd38a1baba3d2ea3b1e66313ea60f9958424647084a92703c8055aebba27c1896fb32a7851bf760438c271f61cc4e2adbfa9939627648f303053fd573460bd152e5c2b426860052d1317c92b66a1ca076ffa6b778c46a600545fb44d4183620c205315939e9d027503a4436de6f9a4fa470ad0f2d2d547a93c8899cfdea340e48a37a43f96fe4c5f9ac12ed0edd260707a9d29335745976e5850bfb5e4b85d89708aa223fb17f44900cae0a48a1842317d9d0462c63fa2c57058ff901dedfc3042395199ea3c4c78a39af31bd1708498055bb7b6a845c5435ac197d91d2b4bd8f03203e6727ff590cd95294321c75a5279b72a0efffaa6330cb98069d87c57233862f5027f75d785906d0d0f3de8c2c814b5234e4490e38ad8154d0c980b410489315783d6dff842beab27526a8065c65ab5280b851d5ce9dd480eabd1016703cbe2aca1a08407c714333cbb082b234c2a37b3ed31c54a41484b49810c8716a3827f3d5dc9a3c4b22576c3ac117e67993bb36e1853788c9fa71ad88cca81d29b81e857912c6841a5dfdee2b99c31d0637b12e124746b720f2ad92586321a26f45205dfc4adca6e2b506cf42607e38a7eaccfee61e24fd23ae879ee300535d991a32510db64bc42e63f31f23d5d9aac0a0b2bbde3ec7725ff489e5712624d347f78f2e500422675c95196615518084952fcc841022c015eec66561c7cdd16072a928a1c3b203a3483d8cc87dce767b719c678f51c03d9d92a34174669a34499ae60bc4949e84626ee67581764a2d8ffeee8656ef36d2fdaf2e3d50dd7936b3642fd95bc33a1d0405e32483d8309d0aec02732ab75f93321278ed0a24d44ead0532eb62d56982c8f5656c48565039ce29fddc16e2d8a67b0a25c0ecaedf2fce3c0452b0f1b850226b30e77892861676154ed9422742be5b6ddf529b8cbb77f1192791518a4413c78339d148702391cd44c56a458b26be458ec2e739cba873b1bcacb8db5740d85d8247eae6a181e31eb923279df41cfbe4ac218b7c9f0489dac48d338299c8b6fc6071c47657ba092627febeb98f796f90b6a915b14aec931c2cdb68f1b1195354734546631947e11be09202f7cc31c32abe8c7652b74cb70f7fab43e3b25c7a6e4630a2b0fd0948f0196f8b3f8d7962f404b277a16a67fa657deed1f8c24e5531100c92c273936326f4917d4eb57a00579d9b805b0bdd1b78f0b690c6b379c0d18fd03efe7200cacfda14c2f85439d09061f5ec089aea908d8833ecb30cfbaa052ae1926324f814830a51340a35a69e8048b021fb2c6075e9a88de1533d24912ecc56c1ff2660a35424f68ce08bdfe4a295a3042f777b7c44d7a399b61a5a9f8a5ba4e2eb753a04b7b3c86d52d1738f213626b92f466911a06946624f2f48182d65db4338c7c816886fa1266d4654333b601bc5936156ed4010c627192b7a5542c2e8db782be68fc9954a14c1b120090ddac3573777302880a31da6abaa326795eee12b5b4075039d749a912f85536cb1737f3a6e21b2274ae4a2815fa3eb155a9e31503298a2f7c6580e9d6376f03231aa60b00949f4b6925e256913c4336e131d37c208a6599467dc5b56b6be24ba2a8dcc689444dcf0533db1a59d0e22817b03714cb616f48f771e562bdde9ec198be268cb56580c245ea59783df25363eca752ce00f4f26e1d3af2a831f4a09bb07b1e70ed211a96586a233c0a799e90823a6251ed5673e7baa5cbe09bd5e49e9c22b4006ffc4847118df95c29ba3938840a507b70c965661b9995c76059526f13c8c2fac10c67d79405d80f0cfee1a009161c85f03d53d00cb6517a1177216bb0c191af6325d8675a1577ce7d36c5a8073f507cdc289410ca05847bd54eeb67d6c00f4e24e96f65cafeee7ea70a28517c13933aa58c9b86949e9dabdcb7ea700381d5e48995c5fb2785333c504ae22713659b4758698802468dca39735e035c11d0c8fd4a89d64f39134392de8df8705608285855d1d37bab056b6568e9a0cf2af37bef67def2c33da3a33fc7c9e3f14efae6fc11413f0967e30f0aa84db2c1476b2c1c343caeef5da854d5a6e1c65eb0edae607d24b94d44497d252aed6bc938a998de0fd7f834619c39f5eeeb6f891e6de13a9eb26919f780a634e8e8d1875d6454ca272e812e7724acea1fa9dfa38151511508a85295802e837c603a78a412e88239e009d93540ffc140cbd527883b1ab755fc5d36b624ae5edd0000ff00cd5edc863b0bc9c8a531324a17a84d6284e360793f46202cbac036f9a3412bc8a02d5da92f290f050ac15ed8750678906a01488fd78105f022464c17027388f44b6a9c7043af716b2db8ce8a59aea63d87bf7c53c6341fc577a8d704d00747f5e3061820c8e99b3b2d962f5e359b256bb8844b5826049fac6ad1f2abe68b93ca829adc1097e6586830ea6cabb127e77c4edd1a604fb107b84aea0ac1548334ad39d9e50ba8c7fc3702c2bb94cc0f35cf82fa90ecbeb50bc95599edf16084ce4918e4038d6073b9de784c52ff03cac4f6ff115c7f040350964b83d6144ba94bca4713b80053aab011302ea0c93aa02f3cfd38a3efcb95be0fee0cc8b186382da8b2cfbb0834c1d85f0b070a04acf3291814fe889a4fc38573e2f23e6604cc377d20aeb7cb0c63e72be817d023e748a058f37de27e062a921b48a7c7a667833a1c30cd4f151c954ff8cbddcef122220da81e79c74152545554a82a108153f8226383e9e11f77db8de16501b9b317c076810342b32598fbb1b7b98dcaeeb9734d30078892e4c6a844caa51f44df8faabed8ef618f4bc67f91548d3dbdb7ae219930224d2861370758ddafe51e563ba1f5ce0aac9226a4a6f7b23228dff9a5063839d9339c4e233ddd9a1582950f0a3b459e306001d914d00cf8843cef0edd9c87f0bcc9b28b6b46d225876d0f1340f5bfce8e567de81c25c23da050ee667af6b73007281c71b4426a61ee1698edfcc1fcd4f30556d9cd2ef9bb945c8f268c375bb841b07a9f0507e1326161acfbaf5212022082e799501a00813c40f7f319147f704223c46a40fde13820e5558bfdd76626962194bac03e8041d2801906d8121fa4656c40f2e11a7b18e086d99d402034834742949be091ce4cec5913b10178c0dbd682916fe6b062b2fce7c7661d37062bbe03e12635f1c5fc0160649f57d3b1d7208bc7c4fc72a56b93f40598d00ffff3a2ea2d410aad9d1561fa51171fd77094a8fd5d06e25ee4ab777c93f8a0b70d6a77e2a693719c21a4a684599f312197f0fa68b34b08c500d74090f7718e781de389a94db9c6e323889f965665b7c7ab7e76eb9592d5e990dc3202ea8d8d525c30d4595107091d1b74aab1cd94fe90fddadf606938c8f706994622103b782a398d1104dcb1dc886d15cf73b3391550f00be03306001c3fa18b86935deed335ab9045fed07e724dcedeed37f16c7e3d2243fbc9de2564cb2d654a490610055b05e104ddddddddddddd529f56e4a3d8f767b7b03d9a0d9a08d3bec60c3cab1724758462ca31a28d25829254287ca030f342c2416d28f1b51125112d18e6847a444b423da11ed889288928892889488aa1029112d112911ed88a81025112511211151214a92e2eedff7fadce5e3b7ad1ff384b1e4198dbbdc839c55d4301995e31aa72a59b7e9098773a927430c61046605302bc00134da5aabb5d6fef0ad78b45bf3fb7c18ebcbb8abd5e1e9c43ff4bb07f68183aaf5bdd58bf7f3bacde5a78cfe74f12c2f438b77799617e91be1bdb89a2eabe92e56d35d9464f1a7f118aafea9006378e9ddddef823584b1c3b8f255ac71e996dbaf6de715adf8a777b146fcefeb2a080c48684d18eafd71340cacb093f85ea52fb67d713587ae689b86322bef2b5f498fe5b3e595c8a8f82e44917c89a1c5bb789b16ef824c6284f8495888a48d8b6f2193b4f8054b0cd0dbea9693364b663c6bd81ce259f834fccf9f025dfab64e6a5810d807ef585081e5fd7fb40a382f73797f9956c1e5fd8388ef6fa393123ff5bd2a95945cbb25fd54ea596ccf235f5e626079172f83cbb778225376b384e55d90d397b87c0b72bacbf35625fd91574a2e5d4d7ac7d4d37828a64856c3c2f72f5de6056db8b20a499755cbcae51b9ccd92fa5246f45a29d1a339d2a2c442ac86cc7f481345d7dfa68a6cea9c00ba356053d7c4edfadfe0af2bd2dd142e1563f888b0f88339b744a5c41a30f52f323c913904055a132590f084262c91b1904a6e8a7c9181c80b133d4429a28a13404f90b1bc924b57e5e8adc455f95dfa2cabe92e1a2ab921d93db00ed45b1415c9d9ad13197e62d8302f9c3d715366ce39e7c44d9939e72c657252ed2206373743400002248cc438a52c51e516e04e294a3871cb272c9446cb2551135153255f5ce07a73532bed7b7243d444d444d444bb99d1706aa5e5d06e6633a226a22622a6195193b55688264d68801102468823241448280419bb689c545ccfa3e48b0b1c854b9fa3702959d627b527354a9f804cc9f289cf939a75ebdeedd45aafdbbda60ed65aeb8702cadded077025ddeed4a97b7733d7eacd9c802830b562a2dcfd73f79f3da42ac71d4318cb49a59f7f7e7c7c7878764eb71a6aa815cdd7fd5653a652cd1cfeed0ee3f30fec967d558ce59732deddbde9eaaf8cd609c7d7fa4abf5d7eeba107233035981ace774295ad5b2323133233156be60a0b0b162d628d4b8b16321f1861968ce08b10078c09a3f5c2f1eaa152b98c2eaa10060c97d14515c650c5106b5c54f4a35f385f582f62cd7f33cc92b18e33e60c4fbdb8e0d7dfafcb7071329c7134fad3b0b1af64a860968cfc6038bad4186b8835e118c22c19572290d3959142c2c0b06466a33f8dd30f66c968430472ba2a1b376edcb8710386ea858b1b2d5c5a6edcb8c1e206cb78c3c68d1b376e3879012449dde2f73e062b09e3b4a2a8e7be18622c3f26f100a85b4b25ad4b5765d1cf05c0655108ea5612257e453f453f27b1a6d6a2b2e8e796453f3eb72cf2699817f914dd8a80ba356f5974eb5611aee8f653646b18df229f229fa29e6ecdb2c836c9b2a85f00298dde339e1161a585792b2d95842175e9d67c0cf4ade1d3ea79934eef39e79c5347876666e509132f8cc12ac2487f5a2164bb3a78c67eae2995fce7d1ff1aa6e452965a3dfa41541db35163f9b75efe3d7ef8d3f8b3e03f64ecc175245c7fcf7b9ecb62cd27746b58a9e49642374facf19ecb5228a85bb314ba954237a11fa11fa11fa120219c5090d09050d00bdd3aa6120212fa11b2a98480847eba35afd5a9d2adef03b825b3992c454e9ef137ce9c99973f069e71cae80f8c98c9a6cc08eff947a431f52b5ff20c8762d54d35119fa6874432891259f8349dd42da415ebbac5b9cb3c7e64c93826b9e62e256a60872e0027ab741be7f8c8c1ca39ca396bbde9f78935f49949ce41197b1ae6a4fb788ff3748bd90423ebda9f9b8633bfd9a9269e0c2cf3c8241e9071ce79dcc77b72ce4396cc3e3de5b6da3482481ad67f438d622c65aed3cc991bee9c53ca6d1dada1f1f22d406aa62f942672e03f9a8cf52df9a35b3207e0eb9148ba75c3ccd1327b773a7c30a5f47c0267f488b8cc92322b4b50c695a615a615704bb73f860d2546fe711603d6c749bac538cdd38706a6cf190ecc1cfdff49bad5ef6a243f6339739eeb5ce7720178a1e55a6226a675ba608b2d50260d20611f78071c6ecdab3575a7381cf57d6092198ad8c410215a6266be1a5064cef8abaea8c2072d00270b754af27dd3633ed21484468fbd5eaa188e4d26c230925f3be60c7d15d1ed99dbfcba32abd711e35c4d18b77f4e25b2d36acabe95129967bd5a2babb29704f52adfd94dbdbb93748b6713fb345d64fcb8e78c3f8a6331afeff5bdbed7f781311c9b61eacad7d495afa92b5f5357be76d8bc9c8cfeab24336c407584d18afbfda0015da4fc4edfaa79760a72db8278758059328e2a15b39a630160173f0ac582c58d11e332794927a33f7757daddbc828163935f6018c9adf9ac5a622666aeea11233ff3e4c97352efa947ce39e7bcf33f2455002d61849b264a1084121d887638e2063530421554c8e64f1a70ced80c7242049b108a40410b96c8704d0042103e3e5c41029929271042881ae4e46e62ac298ea0831f7010825010b2f973052b50b52a13c47c633402a31c231f8c48a0332a41e822030077ea9cd85d963b754e44197279415b509717b405a5314450158d2182aa54545081a4073d6052a9bb53970226043021a8d94096f1d122408bc75112959e2337b04f0d46ec2a94f1d12240abb65a2dd8f11c41429d3a758a0a72428284896d23b7d3eabdaabfb6068e1c011a69f9a0f518a5aff26801eef4e2f13bdefe11fe08ee441bcbb9bbfdf3fd870ccec116d26c1461a388202770425940600181051188000618226088b8e1879c424e2932821118790fe8d402c548dfabd5235f5c60cfabeeb96aacd5f3aa6aecf17be5bc1b041144adb552ea554a69a551a040d1f13eb005dde1448c71c258be54afd70b87ca63a73ead3eff645e32af54cfd0d0112698c821a3404661084b0a961438a69862ec9f7526058b257fa2c3edb47af63ba1c0504cad8c2c2c5a5c5ab878a18211e345c60c1a357e45c2b06cdc68b90290028e1c3a7e84f191ca58726dc85bad56ab2553e31d3fafea3a2b367386b6660ede517b0c116369c0e3c4234a0f100803107738015be9b1137376afc672040c0c7d322d3c8008d022268a3933f322c6890f183e3f5ea428c00c1e4b2ad4d8116585558f1c68607840716dc4a8400680182403b86b8ad7b21e0b35387ae40011000d5a78eda01224a68a0b3d7650f1022c268703c8f0f8000c33315384fcd831050254d8918304d0c4383144c6a30831b0105323e2407a0011f35c0141626a60f3c20edb0260e0d103191080040386ec002a4284879306d8c4f830830c3c807040911e351a668839e2011e6de99831fb1dbbfdbc62dbcc6149ae79240d3c423096ad212004c2169c3a75771890184baebd64703e941bba656b0723c1c1c60f367e38d20204cee5056d415d5ed01694d2218ca54aa552a954af7a950ad7033859e08a2f5fd4eaf4f64fabfa548710a38e21467eead56aebbfd8ead94a29a594524a29a594da5aade7595b6ba5d4a3b4d23abf221f46afd447ef8695c44a32a2830e2cb09e603d71a4db89183f77399dd46ba5d59d7ea9aa30d0eadd014cd7c3d12dfb5eaf4616b7ffd23bdeac24c3b634c4b53364f6fb089f6bbf6fac90d96f5ac3a60ec804d77ee7344cbc76eaa2d8b9f6db7e539cd07772c625e8a89470edd39a4dc2b56fff3d56dfbeb56f6912cf9400ceeeeed4a5b5fb96dddded3de70cc370d2b3fb02b408492d2d2d515c4af1066111a4a3dc769222415377724b0ba573c6282565bcb854860c19635d4985140612b5e5a33347cf9979e90f74507ac2177e6c45a0d44217194b200e55dcf2c592628a9ba31da0747044046514efd41dd9c09b81ee08a8c8914d86eaa3737ea38b3b7525a072e92d55770782dda3bbe604e89fee146da8f38a4e19e96acaf8b5920bf2cc5def5ef282b3d9bdef24e994915eb0863670ee865780b33653296a1323bf53a752b87bb30ef6a4a8ee010182386a23777f2d29237f696f97abdbcf94ba8d5e31f23be7bc4969d0f63b7951d428ac9f50b5ea8002436aa3b1cf7af5b35e0512a5b2c0d06bd521b4503c4a5dac558794573d6f94104c29ebd2f7421b4ef6c13ebc3b3febf9eaabf1ef54fda3f4f4df979f2d55e5cc6327f2d5aefeeffbbcd76c86a2515816fb601f7ee783961e794e27fbe0d6a167ecca81631ec96a187fd93ce430b28f5973b4419b78a7d0154802c8610229e6a4094eb80249e44755eb011ccb3290c519bef7c824ad07eb0cff343d6d3c19cb516503338d0d9b80ffa472452193ca75f27318a8330a0a183c71bbfd3d76b2fe1f0d9b3a2878c0db4ffcdc8eb1ac7fec22dcfea429b341bd2593d84791a3f7a8148846aef599be451bd47b649277973fea5b2432652a77f9db7832f6d3979d6c6026fa7602f5a90b553699274baadcc07d71e175e97b974ed964b9772b718a8158bb25e1f543051362706ad91961074108fac152122e182a62698a24664300011f8136274502d0c9804911ae38faf8c32afa7954fdc72b2bdd4230eab4be37edf775adec9fa5b57eee30bc4ef7137b49e4e63855237d8dfc2feef17af97de5460efdbe5e2f9989a337eeff668bfe9cde89fc8f7c4b961ff518003f5d1d43913405a62d2068a54e7d7498b8e5d80309388862640317145400c5105396927090b578e8c10521f891a29404bbe43818dd46d5ff9d3aa39d6befd419fdc0034e169d8c6271a7a71888f92ca864d932e23a59be68709dea042087916bbcd3ad159a8c74fe60b45f0df53e04d634b86a998cf7e7adf836cb3eaf321e2be22effef1b475d0c9cb16f49513f1db5e29d76b9b3cecce19f82c178227fba0b053612af0fdab03f0419e72eff13bbbbfb7be351b77c441a75dd72ff15706339998eae3f12ffef1b63d85082de9ecd70b8954bd5885a02eb68e4075fdcf92da68f39e33e503f4b50851b238cc880ea82e4b38e7e14f9621dfde488ba60cf1c325ae68b09b33fff65641fe1cafbf293817af144ca601fa717491a3f9145f851322a49812981d9ea67c0a4e2b605d8d50f0176f5cf267ce1d7d51077d1b0ab8bb08efe292ffa353c8b2d1c11814460e6b022101b9e8a2d7ccdf4fbbef97d8e4a7d19f8ee471a898133f2bdc18623eca30253870226ac92461830611e59030d367030ce5bf680d558f82d268071b85e481a691aa418cb894483911ae8d32923a3fa0b0224e2b2f027ab6c9a28748cd430232bcf22ad0faeaca68c93dcffed7baf55cb54fc5d3af9bd3a7b1a366337703e36a05b100f71514f4ed7383746f0b74e95cbfc9497522f2e5d7eaed2b0a98b52a494e29f3c6130a648f19380470137ecb4835fbace751d0b694e0509fb38d3ec0627c7861a8afca887d64039a49b9d1fdb90120eaddde03c6ec2a9f9e0d41b86bc76b735acfcc1ef75f3f4d46c3934263a3ba7f7d3f309441df96a48a576ee5e1aed764a33c76315fc564de8b3cc65be6a52dfab0f521cd7728cfe7c971507b56e8adc751a10508afbe64029daa5e530114310750257c2214823f8a83f358dd64040375c912dbbcaede6dad27768cf10956bedcf249f6b8b70b58679dc3eb588754c8595b8a9fa700eebf04eed4362d9f3203b3d1fafa761e58f6b9999b9999a58ad6f05a45dfba89c136d65c5088967bba7982c8da880b51e7eeacf22da54b2e7fa100fd4aeff18d655d7dcd5e32e5b8204b008596c81873b5d04d2a5b7f4fdba75025da60b33c340bd7751e405664cbe547fb025f4be29037bc54c38c76bf7dabf2428483b39bbda0ee774adc76394861c005d5bc5b5ffa3617602fcfef6837c4cca54fb2a184b19ddb5ae43227bcc997e0bb2188445048841e6ed9081dc75edb8588b5ad010e71869eaa6b05d4b5de73b576ab56c394cd17451774a79010a6ef95d294654b99304525e40fbace779b2c93a262691a929a7c3248a8cc44961fdb101dd703b3a359e9e9b190e2dc7a62812cd515d92ae5dbe54bbcdba8989cf8f5734943bd2fdd8806e389f1d9d1a4f0f939b190e2d07770b1a2ad2d121e9e87474746a9fb5b85bef7a372347ebdd8c19b71b2e48873a7d4b96c62ee8d62ea5da8c5249da5551f28a867247bafa6303bae1e88e4e8da7c79b468376cbd172b41c2dc7848827e31e77591b52c623eeb26fc45df66d6a0d9b3a2552702d05e2da17c5dc4c1443dda9f6d9d40e13aa0b72a41c9010cfab5147f2a0e6dc2cc54c588799a452b9596e969be570c210146be6c8339666ccd8d1a9f1f4803b9d6bc3f574ae913ac952215497e4405cd7425a77c440680de3166b68182dd1a0b1b464b464d43473cc5be678a65893020fc61720a7fb4924e370e4a2f8b4b33dc22b1a56456cba659f69b66b8770ed832a67ea5bdf547d6bdcae6f2a55139d7d3add0b5188e74204525b8842a88b08c45b4421cd02863379d39c7126c6e159dfecb5df414c663a3a3cb61e5f625aad777a98fc78b8da2ddb07e8da67210af158442075acfdd8806eb815a6ede8d4787a52be7433c3a1e588381d6ea55e6aa67007836f763c83012389a5dd6e77411ae110a411c7633e6b977d3ba3c1de33fb346830d31d8ec758f6bdfdde759556fa747d5b71a6944e148178280a69d0bb064ec7c2b7dfb39bcda94c3a56dfbe0ca1cfb73bd5b839c374bbd67e8a8aab570fe0fbbac2d103f89ef634b5fd346c523981eedaa74014d73196d90f57bc6aa55dbbecfbac6125ef6e1ae65dfb8e03be65dad9b79dbbf64bb7d92f3da9a771d77e8eea6e66394caeb5afbbd63e2b31b91e0f15f1dc929b7e6ed93841b76c2647b7ecdab53fa9dcb27dae7df099897dcb6f6d3f402851c82c894ad2ae8a52c31c88eb744543b9239dfd8f1efdd8806e3818eb7449d0aefd4ef21dd7f19af3f4aad52db046d82d14d9bb6bff44be7057b9f66b882dd45b437703259d0d8e8c90badb086948d238ad3042ba60b5464a33078fc75c669f8738e731ba029b7af5546944452c733c1eeb40fdf099be48c9d6b9cbbe487e36f54392ebaa73eeaab523684939b81cf77812e338a8731ed379ac0749c3a6ce062cb8f693344cc7b56f538406231ec3005dbdbbecd795ca5df67d15ba2eaf2eb3cc98f8fce39ce1cb2faec2555df97c6469030794eda8b44c594c6ac8108d000000040063160000200c0a060302a158960579a2cb3d148009718c4e5e4a3299c6e27018c5611404910cc03008c0200040103004216494c29c0775df169f1068e918ebbe6d7c5295056d8e77175b11f47cd606a825edd0db4bc9e57cf3ca075a5f4a52521491966838b9d850595f68e370c80b0e05b9352989fdccd2a705ff6dc487a99f4e36796b610b6b4202d950532d68ce294a5d27799309131028247402cc885c0786e985037b16c08da4fa5c992e217b1cd2f50dbda5513c9b4887e8b543d6f52304c9ff1ec051b860c7290cc95c004727ed8e30dc72b93508899ca1d00007b41a67d35b57ae778b656e6d8d09759fb3de2d10e98ec3089822a449f2a3607538f063dadda81ae27920afa836adbdb917f637fbf158a03a3cb62b937bdd00f23c61ac602223ac84d0ca4b668ae2b1b4e5b0957ab5572270e3602f55f9bee3d6d69190b4682a0b2b40e8e83c5dee2157633817f0197182a00840c7a008fb60dfaef538d327aedd62fc3172e2f79a390da03af03b4c248697dc6efd44912a30e13d496fc61d9bad3688bfd78fc7ce27613bd08ac79a741e9d8c24728f07ef903cb2d518eb71a11a82d80be783b08f612af47eb113c08a0d04cc9076adccf4861b46d511662ab1db3554b940ac6993e26a8292f38fd7032ff71fc23954626e953ca6f8ef8081e40929e23496d050c42f23f40855bf43b5cf0744a40235f6280a273079b47e3e8965f52ba76945ec1673a7c004ab7b4342d3f88350ace4c8744ad35a3779d2df37d0287472775dc39a8d490c6e4047643412fd6831bf6794f05692837898c3872e85eca60327b92abd7c4c4ea02a2f0fbfec432461607aa3b23a087e9ca8c71589778f79cb9a6325bda57835b60393fa25e3e56f26e9a799c507cfce79a688bf4fccc5f16b5cf99b0fff55b24e806c1ce277325c7f071ba230b4778320cc06bf097414f1d2cd1574094be4a2897f6d697585e1f1045925e1c752f948636bc323515758cf6d433e65841d7ecac441fc27d118b31ad691aacd589ee082751c11f39554d55f545d7d6551d0b2d95d4a1ed4e252743503133d79b69cd0f1af5dd5df37477d0ad19c6875e4aec78419e3fc3c1fa2cfb785c53661f4120b1e35db79ac26592cfac8db6b729076e9a693e2f2db46eb9a7ee215c5ed0617aa236d9dfb1458c926700ff5f20e5d1b07da8d407b4db0fcf31517e50f543f28e5bd9397263b8b939db6500a6cae20b152c46abea3dba04b5d5c1a7caf0c95d8df11a9722f7828126a0ff8cea199106aa1c37ab54f602b2c9850a013b63eb3187ddf38afcc9a4e54e7f37f78c76a7d973cec30f90375bc2c414efe7611bf23f5f1d4b7d543a1bc1d058217b78a689333715875ad760630616ca0cc885bd98ea01271c381d804120424c2a40667107e96b70003cce610ff58a24f3c38456d7a045ae5a15f5cf00a54170de0a053f0d196caff2921415013318b350c881bdbe5cd8d48e470ced108e6e2f7bf870bc4285089dad5f7da04eb8a528883f890e36c05dfe1b2c20554e3e75840e5fd7c9c2b3cf755fb1da2691da3ad3fae18c5f8b3cfb11048e10034da540a4c6b06f86939d76da0e146138cd111e8dec71e6034e311267bbe4a572c04f308c6ebc21179bec857c6736085691cc800466512da78c5d7aafd38d092f84649948142390bc6339a57bdccbc2533a3920cb7041375a4b5a534608fe35f4f195b92fe7b82d87d1580f4e223b63e38e5d3241385235bf0994c200f19635b59680c24d2036469863c540be17533a13710ef011e380c68097d72a0c8087beaab8a6bcd80c9e04a8042a4198ded5bde33eec0a5a522c6254d0c7858cd2302c904e64d193d672aa0c8d09f07e114fd0cac9ac0453650ad2211802d8e1a6ced73dd31cf5d707e74bed4fa195147768b30372a1c6af1653ad3b91aea7ca8877e9c85d5e7c585fed5d1d8cee8f565988fa95f58aea1d81fec97864049deaefa9f736bee73f1afa837ce3d5ef0074a038e1ed20efe24ee0c7884ef9d68d6d238d2e59f9154d35449b8ba2c8db5443db404f19433e6f90aba34829780977b54ff15d49ae508b6759850a23c8de3900837005ff510a65a9cfe210147a2f8e0680813221b54a4d7ef4f254becfffe6e69d03f55df082c8f891bf3c4758b26241291b10a3728bd3e5c420504290ce5247c8e5d5143872332c56d3c2f2060ee1d1adc06b05f9581584921bb60dad012cddeb0b2ed8696e3dc4db42c3c1b99402580f710ab58204f07b921106a359bb417ffe95f7611748e5882ee4b876a961c7dfc6b881a53767014e55f293f8ae0598d971fe3462c490c4517e097a199f98dc0f5504eeb2ad21a309b2bd4e5877c4306b2bd01adaf2a8c468a10133154592f10e5f1e36a9405dc2f20a3a0a0ff2012620a852ec201500d61e103d60f50e1c710204a38981870aada1dc8c0801176b575c307358696a123af9e782894fa85ef4ea6446c1b3ce7a92b7fb6373e808dc474f2649912631e95d953a1c32061621b0fb84c496670d1aa14fa82a77a7ab38d0964aa65278ca7d2dfc492f83d5202ad8aa1f754c6d82304ee87a9f15271110bc9377c15d6544363211abb0e0773ad05529cb03b0661c8d474287cacea15dcdebb1f04e4f84cc60dea1a8646a768ce66644a9ca8378fbcf094773b69b3ea49f4e0abb6a7f775b19168f8505003f1dbf7ebd2c8132e681a32efceaa57bcdc2ecd9ac351bb96b1f15ba520b2b0834fcb0e8e888fba0d3eedda1ecb2a08d0e865599042a6718a7773d183223a945fb0dc45685877f1ce3ce232a3f091e481641363bc39f97fdea0a598fcd74300cd00cec18c2cff15d858633c69abfc78e76d0941fff1d6b4eac7e316dd8f77b62d41d35c1c3feac6387911ae5889e64d4789152fc8f8e59e2e1cf2b5cb97944060869ec7c2739c9d8c179d663e52987be080378812166f513488c4105e0f057e2a51aa111929928da2a150a3f93e939048c866de130fce909f009127c41e969c918bc94781724037962294104f85b5fb404a91f46860a1ce470b7bcc67ea6c3f1f620e8c6f604e9022ee68cacb659b4e14c44228b28dccd9ad2346c81962933363e00efd50fe0f618c27219ef958cb1433caf3ab19cfdf7fddc1ffa8630580ffc5ca7069b01950800cbfff0587864dcf729de43a3c0a2950c10e137887fdc8ffd5a9145fdaf0489ded215316484301c997a66238d0f4ffd5d6aaffeb3821d153bbfffbaab2f3b6b6e856cbc499cb719b86a4df9bfcd030a1b89aff4ea4cc663841f81027610fd1cceb5933c571dcf294bdbcad012aebb0b6e8d209d28b3af2c57f147a27653d39d09200f2f7cfe8998a31d2728eec857f4333f1dfcd481274b92aa1450479e0a799ed9b86f7791944621ea4bed37d950703f4ee2e4ac60fcb57016c661f6b399264f0683fcef06e34ab31048850c7e8e316d087f78d51795391bdcfb7146f3590f2e32736a4cc7c8d0a3ab28c884ee91f0542f09264b6879e648fe483287a29c20729a6f36c63beb2bfcdd795f8a1c329dbd156576ba7607658872960482684f934e24a1e719ac5bc575efacbba7c4135194bb044bc12b9d23d4f6dff22ccde83c88362c09d2351c96f8852e27ebc282cfee51d3eb81a0269c82e9e614a8885b31eba8b1a4b349d3d28a1a8d4abcd4494184918a5247e644e9bd0d2868965f70c9ffc61632efc2ac19a1b82854aeb42788abc172c1891919e05431528a250731dd9168b24ed27f9276c0925bab6d567ffa04c85c0283e8fbdcc2ed172f8b14fa766a2e523a5fc0da37be4fdd9e35dc263c91d4ab4f7708703d108c4cb8054498ddf461fe31cdd78ec3ac47a80beb18b8804d215e5c5d164ff39451625f1b9329c2706eb64f0b6cdf21bae466904fc36d46d478d0e61c64e84b98e2168ed745f01a390d88c78f90cb9eea4f5aa063cef3e3e8dc7a8337aff5fa46712a65ae8023724fb19bd5fe465007959d078fa1c5e1bcce3c2393c9f01e08907f3067af9cfdd576af87249afb8b00066d04c10240a7e7da4936e52cd694f84995a31ed7a87371f2147f0731076e660167d34e5a4664e03fbf7cc13e47d3b6f483494d5dc0554cc4c07230c922bdc7f51ea9f61f591929741dc6da6bd07647f6b1eda0ff8bd80def37cc53dba82ddef2f91c629564687ca869c2233f510818f709f192f78c43299b1572b83d154a5d79589c5458a08df993ba017dfcc38e2dab36ddd84b6a87363dd05e4697b06683d6a50e26321c0423fea4d96ca8fa109e2d8480d7e5ea38777169a5157ffb179c420c4aeae95012930cc02621a688e47144c6cbeb63e12f310030ea280a2aa27941c6c33e1b4e5958772ecb9444446cc17a243b606d5bb1360dd3452650f4f5c4a6bd6b057cbd3ce2f1dccf1e0ee243ae35d8999fbc3264ae0441673570e601a2243d6de97638839ef03fd90b9be851c33043f9708b75c5164ac564adf80144768b71a68f1efcca09bedd81975ee85338723c9af16343bf5cd7e48add5f6afa688ca4a0f3be61b9c0e8129b459c657f2ae90955ecbe4e23c3752299de95db24236ce41a797ae26d9c917f2e945f7cf48c463564be8012739f321e8a9ad131a6464c938d916ddb6409153a0457fbd8f27d2bbcd8e11fd5292d2c98497b0c16ac12be3866d5af4ba458c62236165adbdca4fdd99ae76d71473a1e940a96315342c058f42124b650d8823ba7a43cd6ef288d6884569a8f6f1c26e17b71eee1971f7ba24dcc4fa418a18db707d9923ff8575e3f5917f00a1450b51cee0aef9fce169fce44dd94df4121fa2ea592cf440490ddddafb56ecc8a4a9f8e2ad52742f527170639b065b38c055e92372cd8dec59fa09793cf11d9cfdc61609df6a6d1e589b4f4d84b0dfc4a34e173755535c2f301f47ac2e2e5667cc0693ff3c821403bca415277ad9587bc00ad3385e1d69dbfcb6131eea47e22fab49d759e27b243d1bb9d772bd2c03f9f120b41ed3e9be02752a659e6b69ea6eafc957bf1298147fc7f659ed0ef6e20e457f45f3f8f2caaf0723aecded176ae9172bf80a460bd621ea4e3dc1bcec507fc01cf15345652c490c7d0bdfa3b04ab48ab2ca3e21aa8719c6b1dfcc997d231ced2c7b22a1677eea6fd117fc931d0d17d14854e47786486413bfb49c62678a556f34fa2a4a747da4079d96148c7caf0e53a0d3c27d8d0d556876397805269113182569dc335972ed53606b16b9a6f3bac6ce32996f34012dca7ae7a4fb7cb10558a86d63c2670c48ca3ed73c77aaba6934cfb790c88c22b285208e0ce72bc126859b4fb6b158457d22d6d23464713ee48795a88d9beac644c9431f20044235653b57fb1c7602f3ada869d31f684bba23a91c7d1333f25c286ebe8c7de6dce782bfab61c4b7007600885301638217e7154ed6dae51e4b239cccdb41e9c122045dcc431e3fe96639a3ae78f9430e00d19a5245015b0858a4332682bf2009a36929718524a9f63b02e493644f16ffa1b5cda53bdd5be2ee8c619fb3e3becca7a3be922fd124697625fb92512833ad4e92dc7c5c47cbe539b8b64f275ce5f7531311b58ee83d26d0db8c2baeed5a1d517e9bb25ac4f42d2677cdb4265502bca506c833a9d89b21bc1f343eeabbd6e62b8396c9aec6e671480bb003450d52eddbc82d99dc4015c6ad3607fdea88ddf1d41417b2013ec769593e303a9ca3aedee05813a9a3fee46d5edc6d60411cae9ec9d2c85ceb8c87b7ea603098b4e46ac2dcc90e3a213435df358ab99ad7b25ca7362d69e0d364be81a47551314a47b7437ffa37d9a2e1566de53ecf41f64e95f9a2657473369402b0f5c83b4ee4fe470493228e562512cd771fd5c7ed8fda3b0bb19d552f934beb81e1f7d552cd6fd035e70247d17272dd8b4a3460448ff8ab232b23fed86beef51a71f949771bd1651fe0292bec57994b37ab795ff37e4791cf1fa8df804e3aafe03989e50dc36fe318f40f9ccac0ca5274c93f57cb390d89c41b784dac0f41b7d79f4284a08fa64eaf2f266ae941c0beae25e631d2c6b7b7dd4ee61c9d07727106f3468572d262140d640060698e6aaa0c7aa6325ed8a8132fd5b6900b699516c818838a2beb989eb9c4552fbe788f748a7676a8bf2119e8cb196eb75bc2734ac37c50207d51fafc4ce36a67c27f5e4bd9135a20df71d248163e920e20058f762afe5a72581e8b932acc05cf8c877b2415525eddc5a83a923617f4dcb8cfeadb0469ca85e3d15ea275f51580dd3a1a46b03eafd566f1dc6542e0bfdaa9d94bead698557c196b974ae976f3cc46e42f6a2bc3fc422efc1839f1e580c37ac38727317202d43afe5037129cecb1c56394ef039bf68be07fe83fe08bc066a0a64f1baf2ed11e6b9afd56e4075b774ebce516a6751682aab430474754063e4afc0ec0412738f1f3a68fd853b541a541177eb51b0b55c802a80881614be7f68661a2dda5823ea4c3684be6c4be89fa402ea652f8f3a3da25e8f3162b9e59929dc05d817449f3cd27e470937c81c5071538de8a637b7241c2829d8b1be6505fece08732ec4c516aa82f312990810009a837dc68dc25d70c33dc20828cd039636020c6f935a7dc07873b399ed5b81d7dc125943e263980ca5bbb5d1acaa810242a462fbadc6ac4cf658442a99ef5be243bf7f496593ab69529c62cf1ef813d99ed1e2e9f9cea9b6ae10d551819662427ceadadf8841363c2c2ad7248713196784fc6123934dd0019c28a04ad08e9b2db0eed25bf3d392e4fa8150397f10439266f571baa26b5b1e4b70d069aeb6aafc528b142f067e50ff8eb898ad81b1de60838ee786998cf7f4798f5c5fb1384e557d73cce866823366abc54af11f96a437cf44f5aef207151e95c43f4f38a0e2f433e23a3e4eb99ba4f8a0a34a90b325664523f9200c95e55896eb5359245f5b253011055f9457b9cb6e6c65a3ae0ce0f836376b08e5cc25060c3d1a3528a832b88ed69dfb1ee527c299360ec52edc9800cc34e81a6fa80b46c128b24b72d52690a7174c1fa97d338de1e36d4e90b3b85d26cefb93f764601218c2a4e929d7d096c58bcfcf7be619a7f5f81278f0848751d2641aaa868c69b9f4ee47d3cf102a9e006fd999cf98fa8827475d2e580f672ec4b799ed348e893027aaa5aad6d8f5aec9d2aa90acbe4b91e62b53d662545757f446e409a11421b09dd646d552bd0ef8ee2e52e0183f3de1163ebdb0f229e279b9cb69600be7bbc2b6354dc01299c0f05931ef9fee2f62fc2aacaf384cfc7bf5aeb25de745d808162415f6f652753758922e5b02a712f6c2ab2c3b2bd37b75889633a2d9188e964743197f103d4da38070e132d27346be4529d00350b640caf264fa6891a7d69cd31b056b72444fe96eb7319d277de60f88711132dbbce726e79d3cafb4e1bd1a9db8f4568ff4e59ac44bee3c1bfc6dc88c7399f19908b4d3bfd4ba4be29f6346754754a94ea2f1586e93827515261796688b3963695c319af49083cffc3a802fcd0feb9a99fa61525bf02b98f1336e381f6f5718c31bd85b42648dc0893e6acfd13771438960a70b9f0915e8a3946223896b7c0012bfe8c6ec4821035b6685e7f5b411b29946c8c0497b184a6e554c8854e5387556e8ccf0a0c53f1fe5ca83ef1c91d9796e12234552d9f12156ddfd28a41852a7d8ec3122f0bee64cf45d9560a62e1a25e5019cb1e784e9818567f4c31f1bd864abbc79a3f32bb56c7a5e07ec5a44d660c7a06fb8c52604840afa495ef28e2eb7fcd357bb54428874a7dd4733d6221fd06502479897e0c2104821bcf59a1f6315b0abb45c3f65bf2fbb7e4878ebd9d2bc3e7de95527114205e151fdc8041f9d02f61cfba5d2e9e17fb2961720ced9ee8eeba4aa35dd311ba29aaa6c74082dc05a39cb93307cd35000044a513b3e6d63a81d391079d6bcaaaa22981dc17a94e8fbed2c7f2c93a8c81a9635a6d9e14e631689f06c465e0a3ff6afe5da81c261d80a77bc15f3c5df6346f4c61d84ce014d68dc06b1c0a6a23f1f55f2d503d79680fe9c7dbf0208fe2b2d8938f20b4a7a45035df8903c12d1f8566614312c6691b2ea664f46d4927a2823d0228be47190e23da2fc18f10c6181488ca2b6a60bf82856847c1e1b0b3affd138ac154e1a9e40ee3505442eea06c1be956da9530e988c6bef3840853c76e620aa76fc97e4d97ae507460642b2c59639b7abb98303050d6c75a51efc009b4bc3b05236acae705e9850fd18aae2ac029ea6cdda9949839904e6513f4b97a26edb7161b80842f7bd03e31a6250e3a68b74a74e304ec5008f7e817c9e2eedfccece24a3d31bb8d19a38929eb1e0138ea7cb35cb7c5099798d8eb1b5e0c41a2f0fe5fdcb65ca7a684bc44fdffdb46459a512f48e071d85cbd069575b68292ec91a318f1d0dd9f86d140b7c01c59ec3904d303ab0c00f5d2ddfba90c91e73adb11d7d9a79d99e63657879469bc56678b0f1549424283d7c7c6cc75d5561abcaa8c7c66f42731ce07d1faef675af086dec6ee4780817320231506049ac9a20bcf2d3ee2990ce5c8e5e1e7da023125f0226508f9a6503f80d63ec512dae3776f43448ab05e3c5c8a527491b3fce5ae6b2921d78e5264d66ef5303e5d3ff871d7c44b095194d459979153a005be10ac7828949974f534b7727926881864bc1141488284b5a63914d02c08c9c2a041d0b5da56137bf78ed1ca745e0cef2a4106186d4589b06285e3bf97e5c2e2a7269e14155b579cc0d573e19992c30365122771805f845f45b18f1dacd02c91e56a1ddf43740fa982004f4ec43dce576edb72c67e1c886bf13a0d5f82da00a2f4cb61f02508dc11d5a71ec85a6c57edd32ad63296abd684e828c0829d9038f9a52cde659efde22b573d61e04567b86e4c6e364bfce58f91ed85075fc01016b266e3c15642cadab0be9da3bd51d132a81c297dbbc9f92018ed4ba955f696adb7e73059ef4b0573ac86ed559bfc0c6483375a92bad25096728feafddaa791dc1c424fd1f55505d34aef79a6c28a4d8d6f04c894c5869795a23ef439613e32b894983773cb8ce2a2269f84cf054f53a1eac7587ad66d44553de6205ca6638f2fb609d410a4d98df681e0c71c304f81023430a0e8b0a6a331ea2eb4a7e77d7ccfb94c13f8dd73fe4868ba0c2fef616bc21183361c4c71aa8b0ce254bc3e9cc8aa43a257ead00d43da8f92a6e9bd294579ee6a7b6681ff0666ca6d6370c4e4f43928b4ac3ddc1f6a7d8b77c011557d20e315f577bb678357f48a7d6fc73d54aea5d19a9331440d5a3ad5e0d7390b308e0bb219bfa34cf58fe8b14ad38e550ce427581c50911e1b10f45e2d67c29789b3a18ed6cccdbb0a2209f153266fd5109e4458d25b59a9a73683cba11e030799a794df3feaf682595febc497be2c7a11c7d6d47885fe1e30330972d029ec2918b94aa06bb8fb42570e4ea324da4df1661aa10e07c33a4bae102b8fa68e319bb5e185d7b5af26a96a385a6d270e29c9d545ba2915bacfed008f0000561ca2395505e8ed7e74a4918297be59bad51c0fc25c0c7f00322862942ab95dec1a50d4877318ffa60d935b7ef04c3f7610233fefc2741fc7b0ee48630867c6189c2fc59a1623b3d90eedac55b86370e92095fe31001c3744ab2f06fc7abf532f201504bb54c4e231d4f65b9f927179a525a33cf9940b2187a41f913c5d41a311b1c3a7170cfa72bedf473a3ed47f610e48d54a6725ac5e3ccf8df649e76613ae3d6b844b54fb6fa282d53cdcb57874c0c7d584d56f0f9cc9872a2c83abe81df22fb128b70d8ac66d9db3dac85aa10a88e78246d3a8942f01ea0111574bf0eb0c952e1c4be443043fffbffb38fd094b8b20e0c951da704c4887b87870ccbe8fd2bb4a8e92f44ca3ac02e661b7109e3a3d5e1fefb1fb2b18d55d9f4a2b56b313386a7ea82ae68232d72f3f8daa71230005e2508b4b21088c7f1b5cf24594dbc7555235885e294c22bd7ae7e1e3e7fa561ca9dde0906c1c28f97abd6ef0752d2471b4af4f10cd0ffdef3f01a4b999e82c9b08aa37e1bd222c7a051076150dad6c293ab053ec86dec94f030c3a6738b00b08f23d75f122e0f2c0528cd85895ce931df375007a3dbd7599b536238111f44c3a51f01d3f9e3590183c7c3e06efcb094e286e87402dac29fc32a882963c0b78295d8882c109d4a293ffc5ed15fad2311854a9117eaebe01b27c7fbc8df098c4774cd0704cfa372615694ca019134c9c93663191740a494f0cd9754a55755895eb7e20ae424641162fd5f235486c4a96efa5aea480c3ad88d57c505404b16b72a1b8bea250e35ccbb7728dc2d89158650b26b6b23f08117c23e1d9ab0c5eec7afa1173f5404babe0d4f0f1a1f524268971a64c5c1b8ff9e6ead28387a02f89a119c33451e8f6006da5dd8a5b3f3eafb2d6fd62e054f7840ff52ebd26dda65a8347ffde4bd6ab3f66768cb874c25db3c9dd6098d7e85562baa827c0b2b880fc2ff164123be0368da2f3d17f8ae7873dd8545a37659ea8844561be6b73b6ea224d8d901a2aa2afba87e82b424d22e67f584db2fe83b6cb3d0b1afacfb394de18a3636b10c80d1c66df67748b371ba7542b0eec7e3377874f761ab89ba6b4a07ee015a45810a807026580ace6e62c16a6fb64f870311c8411ece515edd3418b69204667115116b933f70846a07f24576eabbc21416aff1e12cb6e2d2dd46f8053dacdb7b141336f20ce124b3464c50c2c419c7bc2353b6eba039a45f0b9604c1d2756052b5d3eb9169914d36ee89e63d9f34f7acc788c44422492167c4ca9a0239a32b3eaac6ca0f11b7787430dcf02b9a774ba24bb5704e83454e4ae7a48e7632999b50872047547390cc3d4bc9862a2ec7f5746f51413b8134642e9448edd9053ee89067f5f2b40ac0d8be84f544b8e6a625e79d4ec816bcd971aba63591aa51c00bf158c98430b7243d3ed61ef82d624e8c02cfd57c406a5283ef4ff7ad844f78f9d22f7c63840692cc065f611cb6d68e7eb5babc956fcd6f5faaf4a07084b22ec753f52fe8362c02681c4a0f77862e78a25a6ca9d3d812d115522f235e21177bedd2cdc574f7e2e62a8d5e3aa0ff1510c05b16ddb83b562303814dfb46b23dd4e67a73692a51721d6862cd9a7e3f484ff9de69a387b80a216038d2dd790a9b24817c3a88095e8041e93a8d367105c3eef74474faf58b5b6e6756a2adb1e9df98ee72b0d3974fcf3c37d93f59c614ebb8daca9f6078c78a8926fe7495235b0a79318a94753ef99a233b8717440199f938b8e0c50314f6302add634d822cb2526cd7c51befa752aa9d730ae23261678e0896f7a8ed108dae73a786d71be03231abfa3eb08b494b721c3208d5c5af1e0c6e5678cd3415988d5adcd7e7c3b99409df38a41e724e77728141125a06d3a2ba285de54ea1b4f367ab327677b3295eea7a36614c0ae48446a86d27346c8d40c175058b5765aa3d1a9726281a8f038da6aaf5400f847fa06b5128f8ab5acad494cacc37c9885fe347b4c18b2ab8392524eb4ce1ec3f27d27c0654dbdbb897aaae14d5c1d97fabc5f9b653a3d91da5a1a8ddd1f9f6a3efea197c3fca07b88e5d1a1e9de1a9cbb41801ca525b1b727bcbd51cbd9bf503305a151b0553515afcdddb9965041de0e7c31c7a71163009caaccc422b17e1c7596b657494c2e667306e4a97e7e8dd1591096344d2094071aca935d02f082e13798fe59f02861bc19bd3943ce6739182b14f97e5572168453a4d3e4b59ab928487d4ea8e395100c843ef92c780c04689764c12654d344a96b02da158470fd3240be5ff65f695b8f5c0803e73c18e81eb98bc1bf9c6852f994abec1373484f106a64de8bbbd3eae4544bcc8eb4b6b96fcd9c4152c2baa195d71b76ddce22a269456ca07050566dbeaeaf273da2952aad89c0c7cdb3f268cbead91a5c6284eb592a7fc0cdcbee5750e7eba75a5223b456e5689f2bef2a7558e540937f6b24f78a299f3406fe8b30a1d463fe45ec0216bff368ed682f80eb4f6f80d986cc99bdf28644a03008f3e398bc3dc74bf72e6e60913f276d350ab1abe03c263c3b8444610fc41b0343e5df0a937e5040c50a23b490e9cc314d1bfd0891a134628e6f64e5c6376b98881e181c1d9a7d1adf3a2e747f5bd3dcd0233c1b295eb142b50bc01d86daf80df2d3fb376a2811213e9ca1344236cec8f047124262f8718140a8ef3148693426ebaec4c022b6170a2a6af4682851a14141830a0d0d1a1434a8d050a042438306050d1a1414e8d0d0a0424383060da256a2beb083d6571bb7e8c6c59d8b5d735e1ac499aef44d6015c495d0b18eac025529e56ee449e95361ddfaea7555410f0108288a8b95b915a13e260bb3a4c7d232c771fe0018086cf8e4f5b5ffca005a44f761b2ca9f896cc11d79d78af885139e2ca817a232f6a731e489ea0f25287ca12356295b1e84af218c06216dc9e21bffa3d400af2cbe234df6c556ca061cd96e2aa0ed0fad924bed61165cf60f39fc4bfac3e15d5e1e0c362ede4305082ea0eaad4a2f8198e4035d41bea12016f854048875c180586a41a21925cf8a6ba452054d2ac231cda73d81d202be41db092eec9eda44d194cbfa2e38d2f0a0513eb48be47de2f5e38990e6cce98b24e5c7aa8f97f41861bcdf8f2caacb7f504070310f943a2fe901525cdd1b708fbf162ff3b1f012dc96301fd5c66311b334b45516901db6fae431f28986cbb0e990d28b6c9b28e7868e184e065dc23cbe77cb401a37ba3cd882a658c723a4b51bfff8a2d53dd8e64345e1857950c32fd20332f505f7f0ac70311faa092ecc8332e745f280acbee03c7c152fe6873ae185fda00c0e77a7a4c7e8ea37ae319b4966a5f1ff61248e25ae8f1cf99bf548e1794b1e23ab6fbc478fe5323f2810b89807eace97f40041edc23ff828b8cc07550417fb40353e6f471240b8462ecfd13a72f97d200120ae4f96683047dfcaa94d0b0642dfda838f697a986f631296cd778ef5ad08047d332a7c0cbd65214e2538ebd4840809042da4f6179cb9e85734b6bb618e736fbff210b2c7fb864bfc4a3bbdff6a1fbda4e2130640af1762cbfb6b249f14101415e9d908edeff162a00a79b4fddd7c18b8a6935b97f7e3ec7973e19c9144d830dfdf77282264d97e15a59b7b2ac38a8e8a75893b33ac026a67cc575dfa0f66b463ec199cd9247324a6d78987d86bb8cd67ef45e5ae81cec629bac160007502e28df66c2e78dcf36848637e6e2a3f18db812640485a087a2ec4d08de5967afe4eda6b767639663f9107f08ca335a563d6b50ad5492eac66732f38805f4f9b8040620625d41284ff9ca5d8dce0158a5db35698bd7af4071669311b363f94839ac968c077572713f936ea7d555dd6cb16c83a201df03f7b8a859c35ead5c3a3ae9428b7dd733278d03f57970708e27f82e66337cebe8a8db4add8f4894499cc012b47931157e99777013c8701f9991857103778e9eaa23645b1916fdb9d24c2c5464a5146d41fc807b80f0d05c7a91f052ed0bfc60dbbf6613f3a63c6697900763294ba46fb7c14ba8484c5eb639005c15a2387b6eec84f8bba7d48f051db1c1c499fea817e0aaa3d7b51bdc32165e9fd4b1d8b35f58e63c83fddf7d6a2f816e51f8bf59a5cc14680e825df99d91c8a3d47cb9d2cda326682b2f9bee20b2e346512248687bcf41bf7503a1eaa29ded4567c89c713e016a28fe1f433635ccfa2bb6257a473940d998fc18f01ca9ac9817749932a18d83bb6063114ebaef879ba6138e181a4aa69b60a1a7913adf283d49f04b7e24eacf8ea1383e343db77e48a546af0be86dfd12fa623a7b69fc657c78ada5b23fa1ca48993bb5035c18412313413890970709d00c2665d6827426c2d239f234b963f1a370f61bd7d12e0334c1c9d84746a63138befd610194d27a6919be392fece1ffdb58674e8fc233d09061966a83757c7b9e26b4d67d5b219062c50deb23f5a1d1e70196c581deff75df32b00b71b0b13af6d317b4c60864c6037a97613dbd8127b51a25e9eb0fbb7b08bb74bc5b118d12bdbc588224af6ead4c7f66cdee1ce0bc955383685dc3dce0df7e6467811ce2c9b479349251c4c2638464cd5d0631ce3ff0fe46efb7d748ab273a1cda991f05672b69ab02f1b5a5dcd4dacb0387fa80bb6c62689821c11fa1ab074f64969d4b61cc962b945436dc6d4fee319bb4d3092aa53e3d52bdcf6c091854273909eaca0d927fac4e0552b4473cf06abc6a11ef18f86fc05da9ba6915484c10e2583511513118f6f8d9c0998e6ddb565a1c8d26cf81baf0451aeb40970c24c7b790695d2646c7d0300ad1a408ed6886e7cff78a9bd217f5a400a22745265e878a8f693088ea1697f28e43878c3c66c99a600e034287a07d1440cc978f17e11d59c7346459d88161cd6b8b8f9264c4652f03e888897cd773a70af3ccc2afe5d07c3908e02ed3f3f7cc06ae532503a7c4edf1a9e639f597d9d5806ea599ef8ef7a225811f08354ba26082a0f95908f0c4c36825cc5621435872265487de2b99bc7a157d6e3d213f1e1ee9b7d2871010ffcbe725039f283c2e794228b9119a589f5d621885702b7c74f14846f884364a75c0b339a1d081a34981b67fdd8c76e8ba7522f27e59a769c187ba5d52767d5af16ccad3a71b08a931196db075a0dfb773700609c0f432106212577ce435d6c80ec88f49fc79a34769f704f3b7438ddb4ff9ca5d33375d44250f3f587bd4c3deb0b1b7198b50515a1f6432461ea8cbbfcf6cbeb740397d16e487a78f96049f5263eec26477e089192896a683839998e65e1b598c8f4473040586c6201f31699f8e13bf50705386fcb0451e55d64d112b9d7ee51c0e35589c0f6dbec3d2fd847cace02e58f27ddcc23f0ce0944a187fd4a8d4fcbc07bf697ad2b1844c9ae75b8b2b428bdc102ce8c4d7e36cf446468553a648b43d50bcacd8dcdaf70f9d830ae5156d374dd0846036e497542f611807b141f7289f59dd758a467ae209ced8b517b07eb479a57824cee8278f61d0295358c1f1b8458c3ca2e69061935337442f6e5d0e1b2373cd82940e8fd0b3bb1f7856c4ed1159d2682075f89d4eebe59c3a96d5e6c33aeb15e93dd036d93e7c6e6b35cce3ba0be493ed84005e3eaae9b23dc2f400e55bead66adaa89d58cc5140d9861d0deb6002a129eb96367ba7520597cd9bc12df0e049d05123440791013e9b48f81e747cf59e0b384e06cc8d4a226ca5815d9fd30a7ef1132f9864728368e2886888933e467c10eaec36a9b7be7bd87b7ba7711b98c08c27542fba1831b75a8c857ffcbd25bab5120507910fb160b91cb9b6123c47e091f87c56e29bdc4bd4c8dc8a8c59619cffd2da9a5b8054985fd8aa946cb19d62398f534e11b04aca2f9b527f76f2e782afc76cbc3964f22938f723822100f80e2e83d527e7490c7a6b888d067f31c741623643194b77c8efadff346cf3ddb633e696db3db20f201dc24ff9566a77c8074a51306088a850b4d38389d860758a4822535d79122cf60a9e8a88dab39a78a856bb8bf6e939f5504946f431e1520a174a28edf48a51eefd6bc23a927f635a587c12a5e1745446646304c0e985f920f0842fff4776d4ca2da6972d64f87695d9a3c86e8da37f573644c1e90ddea869b7e7774156431185ceef620f2ebb08cefc665f4b37909ec2b41766c8e21f344d2a39db0ac983606ae689946c9c071d40bc5e4e8cf394bf8bb475eebbe1ad1fbf8d463cfdab76f23732cae7b6dad4559ac2ffb14de94bd93b289462662183aa1188c585317c58b9059095663c702a4138d5d7b25197114b331e8ac39db05537245b9fced4c3062491a1f242e214407afa40923782e33702ffb3e9370c19092c1cdcd9fce10249406a955942818308aef89042ae97a153018c15e83b21b77538abb960119c4062b2b59c988d87bd69e83741fc4cc2407143048222f2b140c9c1b37a1c5b21d12627a42dedf2a9f3a463730a88afa4a8da225bfdff9ce5f83416a371800f2ef66b21aa3ac58db07844110ae97fc1ee578493bd137211f55dca75c759fc79c0c62f89a63c69f2631a525c81ba89d8c03f5d212f057fe1ff6de9b241f8c40f4e28c184a0666e208b072f57409655c936d1ff9c1a7b517ab45a302d4eea03acc04d8bbe886ab9e55d8cc2b9072d06909e805c0af35217c330afe730fc4d0dc3e01a7ee5d56c4b722f859f7fa9db522e0d41b378f3351b24cca19a015b0e3793baafbe86451962b86423c5a32f8b18c96d22afab683f27010f07e12a1ecba553b13621233a7aa4d88011bcb006011a9aa35ec161566a930cf841e835a30cfa824e79369e1aa873208ca1ed84113f99c3b290deb499c9370fade988106f33f6a869aafc5f28867cfc40a556d1bdb49816a7480b8aee0d025a0a2d1962a0379eda81479451ab1aa423867c1358ad50701c745674d9dbe1a2ca66c075813968e530268cd2fa0dc63cdfdb8e8f45b6ed8d79608c53ad81bd9d6c0e3eba2b81eb0bccf2a95ccc9c5cbb024c4a9f39e9314d269358c358030d7d45cc7a807c0764a13a0dc47b3a2c1836cd7a4ddd8e5f16477dfdab5224d76ffc55d67d8695260cf879267f1a51183ad76788d9958bcbba88bc128e1f3cb273da3b0b9fa00b744fc655eba84bc9bfe5287553544173ade6e80c603244b19ae5d554ba162fced1ae66cc3c4248f63cda8035f2aa6304cc8f4d723618fe37948323e4f479c2e301e15843eafb1555b10fc094956193a23a7cf0817a722fe1f66c089a78cb8ee15bf78f539c4b8dffb4b41669945e3aebbf757ef2c04903bf5e07d79cd02c2a4512fdf877908fc1a5b5f8297989747702505c224655e5f860f4c882bfe418dca93346d999fa453f97131f9a7ea236f98a8ff081567d5288440b04a54d38ccadc49c8129f5021eb0e35041e6cd05950208d1b301a2fc5a3eb2402e5e77a7b9bddf98390514b67d28429f31d43ccb7764db139a1e5a12f459624e92defd9637c9ffd7c6a7de6ac5807b45bb1604344b8f9bff4c7438e093bdd757ccb966a6abdda395a7e3b4d8ea5992429bfcbdc75332f6751a6de45a912901f7605f41c8452ed2519afa7d14c6add585f0f04b2436951464c73190e0ca6075702b4c520d2f56d76628a3af3a5b8b62f826ec36b142f22aac18749b51da8335696221b112a83e96060e9589acacaf01b57356db5d76bb796de90b74b12bf33b92b39e4498bdbde1b6c00f0a38d7898296549188e7f12fce1effe073470152d12880c530ac445fe5010a92c28f0dd3748c2d39f4a3445de5b57dcc35859b01a9eb8e12db03506084f1a72fd4b843485fa44980cee73e586e4e950c17d2e4c8af95ddb9f51786183bfc63598c9c4bc703fa718daf6244fb81cce6f4a4cbccf9ee1535fda47ec4e31fe14e8794d364704ee8c7a5a2cc410b481914c7b5a4764f2d46b7c9f972ae354f82fac0ca7c882384a86d33b4a130ff5ec6a2a1a7dce338b4a6b6d7eb3ae40e12bd84718d0e1473cffcc28cd1314b2258c2184581bb9573a588c9000cb1362bf766549781e019571703eb0c0d93b48adcd201f94e7f9a0d0cda27e95632e58f5d9bc18ec7d37b18bf5a7a13ff3f60640a8fdb33caf6f2946af68438423c18ebcd6d48fad835805ec56e3d7a281304daef23dfaecd452bc5083aaf92a2f0c3d3703bbc95d5a4e2ba050f83acf2cd0a6dcc110ce01e84aae91d670de00f5281e6bd10632683a55961194dc447d881e1545ce1e6895d7ec53595811a616d4d2893dd0d2e55151327b3f0ae680ca210fe9d98e6083a5e926497b6f8a9dc220b47e60833fd2102742cafa2e8e6ef476139dba248c8d5894fbbe0b76eff87e32cc0953406ebe17877cba0dc74d63b5afc5db9a37b3ee0b7ba8b2a8aaf69e5ddf01f49408c942c2d6b236b676aa8e7890edb9fb59618d9d57a189a34f03acee03aac2fe8f5c304ec29a0eb68e36fd96ef7f1e69ee5e5ca16b47e32255bc0a2d52415fe5959b77650e6fe1ed33ac4d071fd2ca961dc07133c7257c46211884d2abd561cd4c064ecf418a86e5d5312732fbb209a5caada25023bbdb967b4b29539201de08ea08f808936738af7832c75550234a773225155506eaa906c6497a538b4b7e3a05654ce8cf264c5c9628a594522494de96d4a29424e407c9ca915111d110a5421ce4840cee49ebc6d94ee57dacd6bd7901c31543c68c178d1a301c1b19780df7950f07ee2b117c6c3810fe1aee69f0756fe0f26e9ced54deb762ddbc80e18a41eb0c0c327030d42067039c1be26c52c3a50d971c00c0a54b0f80bc2f177578ac288aa2b3b3680374bd6a8437478a365cda3082033a78640310c791e480af0c42d0007461902404af0d2520f8e12c71d0c2986460c36be0d86882810da7816303271c9d7c0d678781dfabc68c15907e1aa1b5414a71c68c19cefe025f336480ae1d388420c5a29f485c658c7e1e9162751850473f8d48b1fa8b272b38c01f19ab1e0050caea37ab0f680d0900208f8c558f8152c6ee120c50476bf5c1e5f97901eab07408b90171ac74865c50fc7014f999e355ea1e8eca91fcf40e2704977d25f9793997926fbb4b6cad4c7e3ae5492507fd22c89339e278a57cb9f2190264bdf988db28eb6c943160aa7df5244b74aaf5ea72decea737a0f3198e80a548fbf4116ce75d3842fb0c672330acf3e9b6ba053d50e1aa425811ef1f1bab4a3356ab0b611e453c3d9527e833561db6f111b7d1ea3c2db3f1a3fa4fcb60b3ea43aa17a97ea47a5fa180be7a92252da3b3ea7c54bd6b05c2c2de61755e62177cad4e1c95cdb54509cf96ea1ce7d5757447d6d242dd331bc88582bb799226d6b7322d6e9b92de914e7a47d2a83f71c86060d5db9fcca6b71799dea1132cd59db4cf50ce181716e97cfa0c9d4cefc22bb78dc174ade1c84fbfb9f40d042836ba8576c6766cbfb91124e1e61ea870db4719b50363809c015986c1864c67809ccdb001d3afcccd9d300f6e4ab264d23051c638cde48c6d48224b0952487236b213b86d4b92b40c4789c9e64d689b33d0e62cb4fde65c93c2e837e7b96dce948bdf9ca1b616fc56bd7d1bea58b82aa6144c920d4f4d98511732848696cec96ce857a5caee8e2175d9aded707c6d5667b2eaaa421eef69d6894223ea8eb6863b2a713d0d61d479aad7104643203acf8abafea3b5f7e55296830443903065cd142ed4cc68bc6489d1d1e1e9f9a96d5647532fdde9e5f4a2199b455336691c63b7cc93c6cc213b8d73ea2dede98e7322318f4d696e41db0952b62dcdd80d32c7f451b549d944306e3240f1a337373232c7a6c43cb67083e20e6e903b38dcc804f1a3f72a20ecd28c4ddfc82cbd65daa282f85105c4cff15b9a32d50b32367d869f4eb7252cbf35fdcce1e7b6f42a2e9b133fbd0323f413ccddc8c81d5d1332c7f4e91b14f3e8c07007d3a773a832923966d21ded12989f4b4b8f8294f1d3a4310f4e4276c051a407e40e752a5e5c66859f4b4cf6ea93c56a7a709239c070cf564736086fdb4466a016835a1462a616bfb43869ec1dc4de43ec5dc45728f1682817a92255a44a0357241d34dcf1c6903c32609fbd9d86e48183c1f7eb5d7207b3ecc07bf61183af2d65a72d763f1520e68e1549852473b4cfe953895950ec93bda5a4423b357156b8ae88e7d6ad3f9951e9b3dadb8701e1e039685667ded19115a424a5a7da9313d47d2559727464052949e9e94846312da8aaa09f867edbbc6b417c934c2d59c3474833b63900bedccd5de26fce454dbff99026459e60facd85f40ef311940d396a1a79aeb518c3842b677216b4b9dd86e40ef9b3a779a2dc7639651cc8d3d337950a55cadd1d8571fae99c0bef90298335801bc1be669b7310cf6f3ec46daf19a30db83346ad7ba1e4284fcf4b67dbbeeec7ebb66ae4ec67481fc0fae61ed48c45cdd866c1db04d85cae86706dc636f87247fbdbc6853fdb168029ee669f49f60ddd1cc62db4f9c650bd536bd946db9ccb88a1e237e7a89689b3cd792a0cd46fce6ab4986db2268689df5cbfc91a144ebf7907f5d06bca80b06c3f2d6e1ad470479641ed5b1f71bf6801d4e55ed6c2cc90a3c5ed5ed66a5f3815c21c8529aad5aeb8c1ba3e7b55a3758d9dbd511bd743207563b88d0828cbc4578334713a5f3a1a6488355b173b831041abab0e220414e5a08ec9b7d6726d86fbd9205e96ec5581397e3f6bed7dcde0c2bb66d1b0b540ca12527c78418a0d5b0e52aa785ba4b030838b1cc97d670bf25a69c3ba4dcab399d239374b29b7554aa9ac4f4829a5ac2f65a5e3fc9edd0d0d9e93ab0f7382a17382110027cf39e79ca126b9ccd0395b32c7b9b65ac37ac53a21913be427c6692908286a62f0327bd2830f59a4808860024d10336ecd13145469ba222a8a2b463fccda75a66c0325ba100204505a8892c44c05520a17d67cfb0f4a7926c920e2a841c9d11981275b393752263baf1caf54b3fef6dc4fd96bbccd1db0737b1ffdbecdb23ed5c75a2d403ee7f7e6e6c6abdfb762795febb6be1b8ef36ebe17ab1ff9d45fbce85856e419b2ccc109d17172e4bead8cb5c780e18ee27777336825730c20ae14254cf7b8896b7dcee6bcd9200552e668af1174a78fecf931a1f8c9d3882bd77acfcf8f1659365cfecf57de6ad36a23773893045ff7a6fbd17f5ef13cef40274d7e648ee92b300938f5c1742e1c67fc9c9269522fec713187c67961f61e7207bf9890d288209ab8a33759c2a467ca2c8f8b2fe799b5af1713ea0d361145f75e222b37334ba6a1f0a3a7c5ee694a8f18b1ec5ee780b9ec446b1c7a333df113d7c04bbc744e42f2e0245890b002b2c5cde54fa7e9c44a4de324e6c16cfab9496969c65a3efd389fc059eb09663ab1611e338925da635397bd6e4b5336671dd8b3b912f244b67997dd81a6d449ad1c07bece39e9b68527a9d273ee794e454a5a908e8e8a684734e98822d1808286b424f597285a5111ada3be749da7524ab239505c2730b55e426aa1a516fac26d5fd05153f337d4097ddf9cb37b5aead7ce18f76a0890908798a8452f89ccc151f15f8bae963912d0bcf209d242e2bf0d8e9a881a02ca735c84136dea28a8b31489061434446b7234452b3a0a6a22522aa2759da772d2c4c88ad79ea7c6f38688549de58eb66f6aab5de651b39a4fcdf7a951a3868d0b2f42079e9db33c8733e421a2efadcc21573df3189c463d7bea0c39ad319255fa19f9e9e9d12257134286e7a09e4b9ab5299b5fe697d5fce214f565b59ab53967546dca786695b434d9888e021ef7a4f5b39dedbedaa9b84dcaafd6975e57ac5a59ac56ab649dcb268fb1886395e30101828060ecab7fd52708aff25adf05a954c9ca01efcaae4bc383e64a67bdac9db1c2054c1471a6cc8f3a69ce3c7125dcef65ed8c93ea056784b8f77a9fe1a25af502b05843eb98fcd15e1ba46a24f0d01419a9ac70b2a276cfa8b0eaa494bc33b4969daaa9a62eb7802aa2a454b0429272624a6a88eb24b5e55b80d41a291cec1924a92a370bb8628d140bab059c71f2fb59194204a96667821d56e0726374d189608b67d769eea19b252cb82a8fa871f90e7a0f5caf8c0b97429d596aa2ca5253d312934ae7658d8b165b0edd2f87f867b7728a3bd435a9282fac50e23df8ea536f6db5940c96efe774bb068897321b29cc4074746909cf686ca8de59882413d0a4af2a4cf07312d1677fe1c8279ca81db8a0a289f7190b2f9ca8231a552add5863075ad0c9b0350c8b4bd14c8751ef877d309d732e7cf2bdf2e10aba60585c96cdd5cbae4fb678ffe5e2c78527734657fd772386cb0e3bbab4e5e5baeed01dad147ea633b4d5863c21987095b4d8deeee389cb56e470630c4979f1aa6f3eed92e9640afd04fac92b1ffeea14a7a83361524ed9d5319d677acff41fd385c4f8e945a6f8f2d391dce9af392512347ac75c19be782f1225f4f57a3915c20d839623eae8e8d1f3c30c98a73ee45249694f9e94ddeff9bb3c937ebb7437e79c67caf85e4a2da51e65c3134927f0c1cecf03a23bf2bc072be0e8017360dcdccd82faf133a4c811242198517aea4b44d7c979ea39b48a296aa9f812470e1d1d395c3106001f7c8700a88b561475c423cd467aa765339474f0f4fc1032a408eda92391535b159ef45af2e5a420a0b923133df52453264e227287a745ea9b53fff1d33b438c4c59e7544eedf09022a51e24449d9798b9b2516779501779289d322ced52762f99dab939dbad7e560be8cfa3df8ad5ba5bdf67fa35e87aae1fc37886710cc238db7daaafc117cfb5baeb37d573f506379664b17ef8481cd42bf82364f5dca3837ceb56ee78299bc918a5d4471ad4c79ba74eed4ba794f987c29a496dfe69190d21d487b46c83197523d48f500f817a92de89f1d4954c81f4d49b502a3f1c3ce9b5d8ab4c9b4d66ac3ad3dbdfe2b345caaddb3a975b4f8bd565e579f69d218f8913060aaa0eca5abdbbdf796deb12971699aa4fb00608682e77812277922ce91deb34b92368ca3eaf75e421f6fc590b9729fb7ce32f5e058c541a658cdea35db43095117a5e2560fb2dfc9a99c5dc62becc37cc2f986130bb986da8c367deb31f83ae0ff35ef77d7918463bc0a677f03bdf206cbaac5101f3b26614e5bdafc885f7561f835f1108de637d0cbe60f35eebebda9428d8e6ae675015c57b375f73eec9d527592c263247750c481cd5378ec1d537286b539278b9f259d26295eff9e7230f4f012acfd441c375bde40e119c86945940c6aa571a4fe349f8ea351c25175f5f4b648eea574e4dca895fc4a49bb458dd824e5aacbe55ef40060239a897b458fdc6945b3d20baa39c5a79b0c2ad2e1f87ce922632c7e6b56e3c96db9af48edc9cb0e0651bccaa73d0d45767211590f91a43d6c8d4be3a1ff50e52cbe6ac3a4f95faea3d530684c5f3ea3fd5bdb056bfbde3ea9d1743939945689773f69c73ce23181d5ba9d202d0ba4befb07753cb5c33f6765a41d2b337183333f62eb3c5b33754efdc67ef155879e667efa96ea54e7ab640cfb2bb19bd70b12f8a33a6dcb18f989b921aa9778e36999416e80a3d133d3713e93c4f4d5a0b098f6778604edb6e39e94f6607b8798cd3252a73664c1933427a7eeecbcb886161024b44d1d245161294bc7840abc1091480d0620a25666da3a0f04d79b12605da66440a26540b8a39aefbc9570f1d9e5a1921cae47084277378666dbfaecf106b9903e56c936cc4a4b5d8ddcdc6851c852b7b729c735c386e9447c6a43fd9b8b770c266023df51b4313888f8c6a1431a554ae98a8d65a43c9c64a263226b91619b284490d16947c3f3f7af030e95792240424463ca322d46ce142120f26b8208527493d389d59e204a1234b821997155c7060a1c8e04925b1b244192105a805325a9eb4b04587334f26805981891e3a3c9f0be77b591b73e6c71c25a478b89bdd6a0f1d9ecf8533a605586411658514103e44a17005102da640618d143848b1626932c838410643e8405313c58921333e458401c20a9419c478806b6345151856e450e3c574aab5a6b06c6a4c222fa0e104556411948229b818a28b3639c8c02425a50b186eb2c4acb431538687da992a9c661dc50f245841aa042788620af7022ab0f8a870018d9e970e515e644449b1ad80c697a82e607ca142ca6ad5c267051233588ac76c8121c318289c1ee7e5182870788fbf1b28dc2d03f32590ed45e036dfa43c1e481d321c2f334e5371e99cd4279d73baeb656dcc959f73ce39270c2ea6f4b2a6041658dd478ce03b22cbc7b139620b77c40fdc6c88e8072c9252182ac10f0b25404921020b1349f687909e9f31b688978b35a82a5ef5b20605f5a3cebfc044e79cf567a8c48a57373a6967393b6373baee37e7ac33ec397d56b7d7676cbaab37b955b7a1530e1ce71652df5c5bfd0d946f3f25e27b3c27955c5934ecbc325e6ddb1c757171c7af7e38ae2dbcd2fb076959d26dab9babeae6750beded22a8154002f0b4870e084097fdc907a087b18d9e49bff7b5e3ec26d82f66f736f6062987777ed26788bdd2cfa19cb10e7077cdb331292273c6712dfa23b5b5f4d4e793f72a6881ed95fc689181cc3ae406943bef84c279f3e5c2faf519276b7eebf6d9ed0d020d2b30a7e72c71b967b6983bd27ba9fd66d0b7fb1619b3e1b6f3515153d963ae194fb6c31da9cc8bf4fa230e0b3099ef4a3e233c1716299f69a51fcf601f744f957cffca9194867cb568b1536f669c5710222e5f28ccc655c31de9963b52feda3b15480b0603c275d8cf3f9fbe7daf2765ee6ed9dd9745654ed3e06950c46c0574098fa02e39f464386e90e68e5fa59452ff98d82c60082dd65a9b1b1cbbfbc7326dd108777777adb5566e032597cb5ebb3d89b5b586e3f40c1ab444340df7f24869f8d2c0e98ef7bfcad5042d30b94110407059015d2ebbc753f2923765d5b94ad1a84a11540985fa0ce9ace2519739ceccc10b5e2e57cbaf6336b8a64bfae86aa61f3c84408a15fc2095011ad31391105b4a9002ca85d10e2e32382b9fc92e1ca410fcf0edaf15a884c0856fb7b1f26967669e6a05154fbfa7b56eb4d258f9505a63e533590a13df417cdba414dc1994522b33ea77484a104f5d0c3314c4537fad7ca8cefcf994524a299819b4d0182b1faa019859fb45f3ed32563e4d42d7c5d0c4d26cc4a1a34797145448818aa7fe0241d053771044f1d445157678ea3c3daea65916950a0549738c66a38ea73d64170f7e945fd23c754add22f1d45f278879eafe81133c7551e8a9eba040c553ef29e16918a1289e3a8c950f75fa3541455c9951bf2f5ed65ef1c1759f0003058ea73a34f8b18709289860c6033c044d791a2608a904a8a77eb3f2a1572815e2659aa748cc807c28c185a7de5af950b7737bba758f2e4850430415545050f4e485a6293e40eb218a1a1b1b548308befd47af563e4dc5d02770b429f394baa5f5f0d46fd1d33050a6781a86841f9e8689f2c25367e9cc6298df535717444a9879eab7cdd253ff5ecf022abbe3f7d485f302133cad3ded22ca537ff9509fcd3083784ad9a479cdb0b8a05bf95066ea2f209eba485d873a49b10252ad35832eec82255e6cfb6a2ebb0bac7c074f2da5d58a1f54f40333b9e3471c31df6eb980e2a20a2e4c786766d9931b3ce0650a0e27f0c186138464c182242aa6a0810453d48eb0b8798a01ed4a1e16d23bd7d216ecf06dc4f350caf35dea2fda423c1d93b002892c60966ec061465d67caa4162e54695a818d0e4fcc30a3d6034fa918f1d47fb067c0e57e1e143fe2605993c49aa73556721ce1d15c2f5aac55fd364f353babe2bc8fae62d45ae4203a607c304371fe40e2fb534cacc51a71ab207cb40a628b568cb4528054104b4b0a229998826a0e3b7d92ba4e5c136e16b55b020f992b1510e686266a5382b831c40de9415c299584f4d70ed22f0d52fa6d237d95464a676de972251057ba0d2929a51ced8d1f644e93943e5c29c328a48ff606931cedcbd10221ba724a395a4be6060add4e77b46aa608714756a3068a1277946c9e9d3d861451cfce4ae2b503fbd3b3d77859cb4205f6db669526e6e5cbb337a5294ae27679762e686a5842c302d4541b301786949667cf69527a76f625ae95670fa3307af61c1ed8678c80e8d9d9dbe5e7dada78dcb372d6bb99f1355806354872cadb7809bef4a906ca33cd42cd4a8a67f7b895cf749a45121824c0e76abaf7ad7c54789e4e635e68163b3cc3a89120ca332c0b1a9ebd96a6cdd34d7aac71499a34315ecad8f2ec320d96ef98062f6b68bcc078e95c4b7342a7297ac60204cf734584cab5f1b28646ead93d3aa9a41d83358af03d034d0dcf6e03f6b236456bbd7446c3c2b3e3d4a6b23cbbd72242654aaacdb36bb0f22142e58a35edb236d5f4ec61cecb1a163ca85e3a8e8d15112a53549e1d831a16513c3b2542e5ce7859c36204cfeeb1e88a592c164bc5b22cee4656af371b2cd6c7624d1aac91c9b7d746d0c5b3cf76951916f30e9d5ec72be7f971b252e44e783194db027b3f261448c2755ce7711dd7d170ded8e1b2b7df803932c6f9059fd321e437678eb7cb7a5147c2711c7b9d8f40a080db763ff4406d08ca1cd52d38dfc791b8aaed0c34cb2969a1526ad371a1129eef0ef23caee3382b8b80e15bc1ebc20c09228802892035596cd94282515215557000b22694e0668b8d34b3e3b82f6b8ea6878492d4c6711dc79980e3ae74ce7917f6bc708eb05082072f5c5820818321d46c11840b546c08435ba859246c8082c1715c57ebec9823a728133525d75c01457785992bce7cd35e2e5a267ed4b947785cbf37af25cfc9aa9cc459ee055720f1e365c11542d4aef0a15a55ed0aa2bf2f6b5700fd283ad51180f92927009e493bff0c52bf43daf272872ebb5cf264cec83770b8ed4545d35bb6ec662e2d4e3efae9cc043b9a734e66ea9d69efe5f9bc1201f41e89dcc14512903216818c4d174510a441e3b94842310db9a93ffbc46d1fa904a8f83991c81c3160807a8e09c9dc83a745c99227009866906d306b5f723bcc0b41df36bec3c060f4ddb6849feed2110015dcd11a3962e58e8f3bf3737e073f9dde0e8c30c23ce8b71f413259a9290f2e9dfd5578da1d6fc47043862b7dfc8878b23b0133c60b77948276f0e58e7603292ea7c03542232a507d3a083584b15797ff5e0381499a3859c1c6e58e2f578b68eee8fa9634615a12254b5aeca8ed278b253373cffa49788912170c8bcb3d0d9bfea345d8f49ea7206c862ddaf5ff691fd26ea41d090564ac1d4d0bbea188f151e58eaea67946a6ece234120e8f2c7119c479b2d66b5ef3daf79014dc11c7fe8d1b2e4b29a56423488e38ce9d47b096197292951673479dde99493e7cd4e24c9a3fdba8895aa881d8e85879d2a2a6c992252e43788c2049328f66d11ca2f9972ebdd4e2d4e1e9f981d145962b63d3adbd733675f132b8e1f2e868d147502f2db18f77dbb60d6c2e8dc5ede77a89c19697e974fa54a1d0d1d9a3c54e47c73aa7208e8e75b0a3cbb9950ec0ac3a0c1f39a95d72f9ce6f28dd918b4691e59db3111fb11546e2a4cd3bef1173ab23e99c87a677d6de84e37dee3aef3edd11b014992ec347a01ec347982ec3d9a35cd4b1cea573e7178a3b02961b1f2186531f41864fe7158c480ca75e2486d310c6b9132c4566380d7f39f59bb0880c9f218c0bafb4d3089dccf01e0bdcb80830bca7bd1708be66ac731cbdb3f2ce75f48ef5ce797ac7f3ce7bf48eca3befe9b01499e12f7f854eb07c3e23c4f242a777be202dff9c03ebcb559017ae72ee83ee55be7aef822dd462e71bd8442d76fe02ec16d8565aecdc05fa74508b9dc3007dfa06f469feed05c84c34dadfd86f5da7ebd4f9ad757ea13abf519db3c015485bdc54a0f538976f5b5eacf89df8bd8c01ca990c19202fcd58e731c0cebdc94d3247e72ad0fba2ceadbd2fef8cc81c9dcf57759dabba3bf5b5d7a60525bb1e3cbfc79beb6813ccb61ebfdd2ebfbd36e7366bfd73ceba4bd9747badf5e03910c76bbb505c1ac2ec0c6136bcd22ec28e6e03e19efe66713c71ab8fe2b7a05ee0d1b9cdad5b94ee50bad570d382d2496bd38d4a2aa5945272b7e30b20db69d9aaefb8bbfd2423e9b42c299d73b6949b94924a492b9d74ce399ba33d33269b6aad15e735e76cdd3079ce49a933d7393bcb7557ae5006658c3a074a19fb3c00e1e79c1c77e50a9d5d7726f64ab992c2c02082a516830f2f2249b52f2a861972642f6b5e9e869e56945e9123c600f494faf3dbef32df1963eae50522d24419f3c5a88b2739ec300504112dcc30668a159231614214386089414b0c418ca1523483191390e182c2135540e119f070477f761c72477f09dfd36160802a3375193675e7643a9983a917ca0ce151818b1d1c41792abd3125995ea0f13435326332aef0f4a8c1249dbafd124992254c78b67758ae70f99b6db9f6e1b8183c4a77e8746db2f9c51d504a67f3903e4eaf9372074ce9fc3375ab9c96cae950b9492bf54aa1a653ca3c2a6771a66b87095c93dbc0cf4a2ba59479c866ca1a9ffc136beef7328c91981f75a25cd7cb30461746c50146cb0045adb7d10b3298a74a13912a4e1d933fda6b44d4c980c445d151a1c3d0992eb82c3948e57859db61042dc6e6e81845f91e7b3c146a6cd8624d0942cc301bc01929464099da72256946a9b40cc98c5121f3d56512cf1fdd56f572f7324da2fb5aa50c891c028967e9c4b323e18d997d05393c710509a4a020cdd46ce929f56a676f497037ed016be9b325e70c31333373ed9999998d1c6129254b29d901cc03f6c19c6dda3cf3e8974070b495168f90b8e9ee0e9a576e3c71272f3df90eeaee3e226a9102d1d54b2faaa1f58480d8509a149769d97da27eed8c3a73a194ba9139843a17e9bca8f7fc50774a29d5f234c9cad30e6a9152bf69a27ee344fda606c3e27e2f6b50ab76bb8d3a2848e6a0fea2374c374c375051bc0bf04bef5bbb2f97d1bd32c7730f19f2b00c7488d224f7d01450d010515ba1a284a4446954059903c6a9c52699a327df8c447ca14b505acf5a4a59803681e1dbedcfe4e1616629a7e8108da2358cae53301f7f99e0e82b2013cc6bc864271b2cf8020601429791acd4aa7f758f8598b82b6fb9c7b4de11817bceed90106520a6d1d0c98d304b66acfd3a472486b71e852b20d39b85e032a1cc994dd39a4ad050bba4518f367147e974639d54a193942f402963d33fbfe0840247c906c933a9d49b734e01195446fae47f20bfe4a3166d05d2a2165972ad6772ad77e81aef89d29091265be1a3219e8c1f82b8238e6f973185cf363ffea983c3e1c9e04136fd08915dda2ef95203e394e58b1377e45a4dc571e1175619322ab382123ea860a62fe8e638ffdc732977f8704fcee646e590b93cdc2fae05c565a8909f5af411242d8b6b2d2f97a1427ee2f9ff916b4c1a47cb24938eae3154144f0d697e724a4346621f20b814a945f656e330e1e473271dc032ddf3954b95ebd49081827bf4811dc0d2b92757d5bf436ad9472da1eb2fea9860cd0b5ba28e30c3c213b3f609cad8e28e39d3818030eb9f3f29e2f9173ab1d20b61fd64266726f0ccf39633273cf3421950dc5154817226b6f3d3e97325820f756fb3214f19b5682549eca3a3466aef2526db1b0b5e758f054322985a0325022dbdfaa06f88a99ec4d65aeb9107c81dd4bf106444ddf13362a5c5e99c94be39c7d56a74ab10a1f263a580945d89a6d6ea528e3a5fdd47167a93704b7c54b9511336590b2526b270569d6932afce4295f5615ce0b2faa07fa5000e6a194aa50e8cd3d39a91dea114c7edd23b52c6dfed72bfdca6dbe58d885e55aae9475aa49fcfd0c8947d218e8e51a7a1bd5d385e4bb7f046ed8e1c04db5cd217ceeb9371e6b22340e81ac9a0868b243cd26290108c73f99b7fb21e99209216690d8db482a0414345475bdd7c08e16891835aa4d42b751f4d5c9649e9c443d4887abd4e3d38fd4cc0e7e4ba13967fee814e5aeee456e93a57f1caa7c3f132a064010e6d9a662d50ce865cddf410a74597d83435dd5f2f0baec01b4e5cf6d92d670d52ff4039e35e4ee5ace5647b838183e131dc053a91e14ea4d41653d4662e9fa02783ca6d79e1bcd58480a7eb2d266796afbce5c90003650a116d364497e7fca6a945aef5f49cbff01b6f3df5ced6fad222e72fc096538b5c8be9396f75e99d2d8405e9b670f4fc8573de627a71c323a98ba0590c50ce7ad0dcb1d5e430f92c182ee797f317e7ce79aba97736ce4e9984e2fcb6c2d1b2c2d5ebf513860732528b9b0a6c7ace3b7064672925df53b7202c087ff50a543983415b505fd72e9ecce19c6c4818510225a6392ec497fd360e1d42776453511271e8e069ef617dfbcfd4b70b29623ff0edb35301d1d28c86b0eab261b839ee3e96b6d019c326cf7e59a7a0c448d439a96521755ea2ce4c94f5d4b9a9e9a9f397de01d3329e51311c9861a268c63740bdc0692683873b329050b78f17eec8434643447fc21d59e8819e83604e5d3246719ee63c7d4ad9888dd80a27b11619542ebf2077e6076c80c109014f77d4d1a35f3eea78aa034617ed49ca56d84796bb3d0980936a4b5a939675901303c9c2e94c349d8d8a7eb27e86291afade6132f993d2abc8a3a158b7764d9329806f50cc299a2e737084628ba197b9d1c415a7e77022c04f03e4c81c730b7d5429c3ab20edb5090b86cdc70a33672a219b30adc5397d307521781a9a2c43e81df92c431259386b67d2dea465d7e9c3ef30539ada9ef0edb275820fa13beae834534be6683f12828f2c17874ed67adade976c3b8ed6da1a022aadf49167ce0cd45ce6ec7dc9b9cd4a25addf9c73d6e63e6be90e9d1fcf39ed279139a45f1aad564a67084954dec7711ce7a3d855b470438ad51dc9164a1500bed6ea004ed28d6edbb6f1bc3279b5e249375a699d9357ab5a69e7f5e07127913b3cea9b0658c51fd04aeb87a477accfb0917852ca97945dc56f3e5b787a835fb71b01104a05cce71b0ee8f03708fcd7d7eb5e697fe35e4ab96d496c57b7ad5bf94cbfbd23370ada3a29e7a9bce925f9b6247287b7f967b4e6d6a660f3dddddcd63d69ddb6ae4dedac76d2597bebeeeee6561fd0af40bbec6eebcde071733db717bbbbbbadd4eb3637aedb522bade536cb72b63fd896f558655bf6bb6c83f7f5146bcd8dd7b4d2212343f5597b833a269d5e1c2dbd8884006a0a48444a981668335818aa4246ad456485a31591169a9e5844888290581199c244840526a618341db4347d66b05cd112826d870b63815782fb62051d163828a1058713909121051c5078592a75a0c254e43a2fdae4e43a2f7f5967c934a494bace12452fa8fccb0b2b4463c2b080250c110a4ab0421618504a812c6a02a45aa8642d578541ead09000000020002315000020140c0704228140241ed6e348f70114800b79a44a70561bcbd320c75114848c41c41842000000004208205445a3015a7cf84dd267c767a4d1f72fa5b88fd4f990cb42945d0aaa2196f2f3d56b95a10273d2e7e14850d4bf64a61836b478402e57dbcc0ec8be999f28f0b3002c90c2e8624bb2e00688ba476ade465bfae1ff1c8a93f2e41047637d24a1b47e513cbddb93f14c8a8b1f7f160856a3971b3895fe0b9144c13b13eb0cbb30dedd594b74e7c228fd717ff5378efd2a13f3d24d2f18f56e2267062555d4d1f52fda9be1c74bcc0b5da1cd45495a51a49eb4f895ae4350e56c76b7b819a19bcb42fd8a32984d4623b789b325b536ef00ed3a5185ea0f7c61da14f471ee5cb33de7dd2c2cec0099a6df61e76623272faa3bf3238e9cf7937e37720d8d0a838ef809416fa2a94f6b23a4cd7f5fd51b7da7337ba926d4674689432daac885b2eb9a2cfa67a937b3b2bb418ead696ef5fb25ee08194b0d3b90cf9ef962f8c0418062d8e16e81a7879acc68a8c22b5185c5471506922a9c130529c6de908a18b5791b1b1068decf40b753829f134fb0b760d928abc86fb794a2c41d4419b554a2353a5ee65bc3f92dc7ee87d0dc8ceb4a91dca52c4fa6020fb0646b32c1dfc4325d4d89a04c9ddde903e5b54efe42620a19965ed5b666506960e81661299f33e1e463d06204c4c8f97a27a8a544f7de2dcb06adf2c5da2aa9205ed528ab72341860a715cb9e784b789dea9d25099636e5a0a38c370b40d870c6f59fa97c61118e242515f2c546a6ced4a4b2755c897f82504c202293491c9684655deeb54024a462278393e3b82337268bb448fba8fb6879a379f9ec160d4a4dcc1572222262e417121ea75e79dd53891ecdf6ac51cd2e7fdbfd22b3bbd1d900aab9f23c6854f198d87af703bc58ada9ec9fe4eb161c9bcd68a582798a501cc5f357a02171ef4894ba300b60f9bc0c5f52b4bc1ba7608b052fc38178c712743e6b4fe927c4616d72136c5479f3b6ee2a2f86f22d96d354aadd722c75f92f0f43c1b2691e0c36846021feb1f8386e57d41da6c52cec34bab8665e5112f4fdac70bb0b0129fd40fd2327d7ff0d646cd5de8e7788eb6b072aeb283aa3c292b2f443c3ddc043c189c9b36baca4a1cd232dea91e64f3aaddac959d3a5a80630dcc391887ae2dbde16b15f66c8793c5f1fe6f7692f3399379aa59a46bfba658da3e787ea87438a9c2aab40bd21617b0c9799bbc546bcbd9666757ecff393d5efed8dcbe9b114696ebeafb064a0160e99b43fa28731ba344e13a5d242c0727b2dbfdb4dcbabba4058abdda43ce030345fd391febfd83f6d38bb800e35c8e3d07b3a0f54a96e2f03561a8bbdc62b5d01697aeb793cdfdc515f8d6d1e40e1c6e62bc54105127f94aee4baf19f3285c8af8732b952332a901c07c18d725ce7b92fd68797c85695023b31da33e173af43a096c034c8d74f09fef561329379c13ff62babd1e64f3ab588802520f5faa9ab45e0b60e2eca241a45abf01caf9059a3d51adc1b98b5dd6004e731e6f2e28a90ac2d4de9a4aa04526e8ee6a8551d11f7412f1102b1603da383822894db15dba436d4fd973b164314fdbc1e6251f36238e9c0ad9664354994cd1853891b3392b6d44cd7a76050499bf58c162f4d7a7a54722cd6cfcfc8f0216c738d80e6d6e10ac37faff83f233de759c73fa384f3db581376399f058d7e329926cd5969674353d023ff9e139e51ab7dc5f80863d5eaa85bbaed4aff718a96edf895fa3861d63b2267028ef92ef0d0b59d3658594360998d322a38bca609bfcdd659b379322a60655f11adf2459beb0078e3d5021934463b4869588451512842bb678704ebc5a8606067013fc169b8ff650cfeba9c0c1c58a2d52577a5c59cf6dc054c80be01a9364f7ccb1c1e0252530b95e537f41d94f385df10180ccbe45695c231caf958ef98eb5c99f7f06d52ced74ec43522f6a6ee3cab79c16c53326e105474cec72d1ba93e5b201b76b4e5eae8046f57891c5a8afad3c0bf292cc426ab290e162735a12005a5424935be4908651428e4f16388f185938fab6caeb18643fb08a3d24c1411d4376f7a4ce5c78d93644d697c584ebc8f2e99cb61e03157933d9a505b362e7696c44788b347a8cbb4e80bbd9b501595ed77cd2b9f43c812d3ba302a93092524e75b896e11c3441a92dd6e7b80741309f5dd3669886a155aef638f635977c3b42e27c8a2283370de723f8dd4a07ad90bc8c039234d698064f2fe876dec8c1f6f904c8bf816b566087061cc30b90a942ed11cb7add9a350df1fc3f39724b61ea07d4d4fda3fdd7b27612a5a7621fa099ec30cb39a63b21791c15e9824f52bac0fd39dd12ab50d681fbf227208d65a6612f38c5e6c7d93fddfdfe62ff560b4403a163d5d14380df729d1c4fd999b36ff1f3d9b516455e82afda91d771a3cba0699496accc61204f2a4b684e5ebc07f942572ff0f406329e75932de991011dac24a876103f567253a29081b5e4c4fb018e4e2b239a3d4a852a3db25116ffeaa6397410e5ce1686be63bc8c7827a6731f3ef273a31e505f444dbf6a8f0a291d7458d021fcc9142b9fb22904095979925ec90186c83334aa4e48c5fc2e9bbe9ec047dce6ba179aa42b875850f868d67986a044200b1f2758ca320b428d10519b4f05298a9d4aa640d5119bb2946ca483e930c5fc445d8d1876285db590de6acacd628eaaf08844783b3d6f74cc5629191ed8ceaf6e1d66386246d0b7c6765797be80711da7f94d53b696d6cb6292d279c5599e59180c4d6fd77ad205ae03924f558ecac20cfde3021aa03fb392ffa83f35c0bfffc15a2317829bdfe5b431854fe374a2f7f10ca226484b360e9e493b1c90353f24fbbe3d8126972b614ad3aca584cd6157d55dd2e4a8e1d6c04ce95d2998316f324f851938ed89346a0a433bcc478ee39a81c194bca37646724e3c8a983cdd75a145f8c599fe37d86b30527954bc0c1e8596ca52ccb9cd706c89fb1d1f66ca1bcdfbca9f84af200a0b67c8ceee584c099b635814b894a24d7a45d9e79e0c4f94d4b9643a926b430d8e162a38f46fa8991f350e37f7e566a27d67c740a35f0e74b024ea84918b2fb563292caeeea517a3374ef1fc477bfadf57b3183dc1726b0cf242a362cf77962e435162e17f3e95b27bb50f9903813bece01ab778e894a454f0015e740644c04d6d07674b21febb721b68f54ef9a028003d81773003deff994a57a962b1e974674be75b0c4d148e18bc0ee2a649707241c2e86f06cedeb9286b8f9c464e466e7133c4ee3486a656a49e68aa92d1bc95477af1e255d795fbe06ebc144cafaafbde904c2ed659e08fac772de379474cd80a8f9efc866c203a5d6318c01460622d11e5fe049fa05161313246337c216b8fa8d1742f88ff7dcc319df990f426f38ca8e34a1af4158f9fc177a718b755382b0ef5ed96ec03e10562c2b8268f57ce40c790b68ddc5b495b4265692ac1538cb8f83a135752e856043a9fd5dc3205bfb219d5e33dba93061958799915d3d303cf8959e3837fbdda965251eed4aa26abd4b53616320481f043f6da0e9d2de07d769f961cd9733d85c867089960a15bfb1aa6deaaa142233bcfcc2303f9adde23be0af6e3467ca3b90daa91f937a65b6360ae4b9f01e30ca8e920935da24a46cc3d1d7e020b3ec0581d09f8147479bd339d74cb88f334ef324618049b2db8a4ba650d59993356ee110a9d900fad601f81a40ec0ca85edc0f55228a7731d31333226f3e0d931636b207d81f2aac19809d4602db404ff38c1e244469060961b2f987ae1809775646fcbb78768490760395835f0b029433ad5be5e3407602bb93d0983dbcfb962b59d57b85f843ab81845f0df66640ec516c069e94bf87390035ad9d4abc314ab4c4b330f2ab72f22b7a7c307c93e6e2aa02b79a20d4ffcba2e29af66fbc1d7e2e3e95ca94d816c37bce97154b7151d0c8b4166ab6a0c41b38feb3fde7ebe02758ef4b7d57794edadd19cd6aca6f086d792f7edab259aed6fb88f410bc0acd5f21bb0f4bdcf531d5db562dc16baa6138a80239f987117d2604d289f537674e47e3d20e46ca6562f161933e87b0b399a9793cd7da4566c3ddf90552a747190f9a7c6b6da4a20437faac436f8c6b481875f3750c03f243bbfa9f44951b458fafd84554a62d7a900293f668dcef90027455530b5970291eca98088810d2be22c49b36b0fd087ed271975304cd93db869b34cbad79c8ef348a5d706ad0ff1f24704e3537c2b55cd09a445fe4a267559d5220cf67387383ee132bf0c159cccd6cc485ffe691aa8543a329d3e5470efc6a6b33adb0fa26997ca35aa437092f8a37c9a30208204b32248fcbbb408a3383b9bb26e0b1c4cc771765ec01066805cfa34956490327e9799b20ee46bdac64d50a4657e04f1c96c61b79408940fce7fe18e70a3717b2501bba8d095f6e2317b6bf3403940e5329f7d29dca268d957ee98bdbcfc1a362c507c3b475ed2180718de8f756827d225d32632278823bd7ed07c632a819b3f1acffc20b3cc336ad2a2f4fbdb16408e095c3963ee7337b26f84a2b7459d4d2e3692089fdd76858e3e277cca85e311acb9454c10f4fd774c7df8066efaa4eee30910cdb05c808e535b44e093ba938eef4f8e07672692c1742c9c811e6872437a34f40ec231b6994fe837222e0a812ee9ed1670ed0b0a8afcb336db0e6cc02bbe0621e4ebf839738f8ab6df05ec20b1fd5808e7599b6b755c3305aa06802c0ffb81d19bd46a84e94575ab6ff20bb7f5319a7c0f920b439dd15a50ac6637aee355633c9ab9ddc4ec8246864151cb74c3ed3a7c3560047bc7b61abcd476f09fa9d979b6e3cb1233918ad1be3c449a947ae82a0b402b25d10f0663a6b50f710a798d72a07429e80c8fb0a626c9e11194daf517423829deb03368995ca9c1653c20da2fa2af2a587ad684df9f1f0ed069052162c3f763caab82ec72a61727e09425531a8382b65c14fb4034e080bc058465ec4904605dc8e514b52c91275d61740789dc008c87b7efe9f2af125e7d71f9cd3b89019e1f90e7a97f68d6e2a198e774a51b258b99660a11072686c004c252d6d35c8c8a6337e73761d3e36c9865a4b21d19d3d7e8d739c53e5f64549eeebb6de09d75c0206610d14c72f397561fbd1d207008f3584bcc3d3301f5e1b45b8383d6b05d6c8ab8d9ad3bced361cf3be254bec4ddc8654f080cb529c9244df1842116eb11bb6a11c93bf8a7172ab7758d0ce75cc01c22c15bc44f16914c48737fb01d9607035e8f52fead8ffcd459dbbcb67edff26aafaa171053e5d0c9b41116d571037989611c2c8460653ac85120f3670cc20650b78260710583de5dd2d48c02b1bb36a7167da7550025af93663d24591f10b8ae6ef348c4bc867653cb9b7d4adad8bc0d822cad0233f6a5875a49c0834e26cb9c8f97a7c3a49607d3af368006479bc5bb12a3a87b3fe06c22e73f2b7837cc7419ec559cc327551c1bd1a41c82905b903989cb4251f9e411d0f19d59cbc444cd2080cbba661883492638c248d13ab184917491d7f7e3091bdae3a728a300475cbd02b4913f344d3680241d7ee5e228d8cee86a4dcdce08502e989396496e23638cd4b21324238a5add84f75275c9386de2c0f207a886109d80ba1cdd54b53d92984c84842ccc9aa130219b6983cf6d6133d6122d9e5c6785410f02f02e2d71f990b355adaf1ac9e74f86f5214cc33628382e20391f33f75db81b5e4168e7be09303a123b619beb2b49e0e89ff29794ed71276fb096f1e0da88f50fd433496f8728b7c6b31d9d798a481ed53ad3dcfc21b67036bd9de0a5a9054948a491f95bce0d29bf699b9fc32d9549cddbbba4dcb3b83fe9204bca5343e6f2871811a94d57c9f391563a7ea185a3615ac20792720676c42ff3766cad63519ad3fa39021350b29065ac47eeae407a96764fce8e898fb810ee29f996e413d004902c3bb8ff85b4096c7052eee9ab310fdcd6fc1d58c0039a553c82bcd55573c813b67522ea5ac1472bde0f2d8d7f0e4868d7adf8bd5d7db8d6c430f1ab2f170d18a06873ccb9a8472bdb5f7c0db078034b976f5c8dd2aa0864e3a0c58d1258c30c18f59af8ddaf6b2c3709838176fc66fad2adfb6198aee21ecb0eb8c88904b21e2f4902713764eff3a2d55e9a7f9cc8a3c98f7e4179af43ed821f13dd8d128a5a843e886410f4b1bf4280f5b7aaad68f78151905d18c346c265ca42eea123d3fee9dc8d64c4038ba49518222f0001898b0990bfa5fe073cababc54cb987b8fbb6703fb1447f115d3375aa3584e0342224127860d782d9078cf73dc13cf24f1bc57f427f2ad903b5fc9e90ed4d11491561de5b2fa38653c9598cf02eb305a76f08d1df329b239c4b51cf9d2e6150d68e1fab38b90358e9f41336db55e6f1106bee544ab9a0fe3e9e9fbb84c8e2aa69e020e4a66e763fb0c6d95437d4b8bd3be79a07bb42f3d4697e97b7885df91cedd313e0696ecc0461a7d76fd9d67f9ad40d743b7acba8b70ca5b8e1d2d04dc9fe42d9d826b2a4ff7b30fcd9296062e71f49359091af81bf01d7de9cb2c78b5dcb58adc23b63ec53f0830caf821c268d42ad28d3239a5ed598cb87587e4afc7dc62e479a6f4e2201abab19ef607a61201268c60d3f139b71fcd8f6d378536f788f4e86b0491e13bd1b38e23d9d9091e2b24e81a9f18df4d5cae1b9764ad61083039efac46d15534170a53f7919b10501103d1215f02e4634bc8ec83c334d3779c7c01dd67e458f72126aa18e8811a7e0901c1908bc5fb09c30e02c3443cb89e5420d96cba371be0e555d9f93929718d78e0aab88d1e2e28b3d2664e291e9b493f3ed733376d2598cd83fc8be3b209d5e7921d2658940d048814cbb41e871c202450d802bac3f6198fe01d26d5648866023ac36444f60e6abd89e93f31d99ad8f7c96de239f354681ab35ab4fed648738d070ab3c46b63d487dbe91e6a4aa9005f378e441d2e64beaa97994bb8f1dd22b74f1c9ce83ce2e3f40254f0757e55991f1710c0cf0eb2120d874082c649518a9c233bac1d1c5216b901b476000bb8efa2821dc08584aba4200bdb12fc42fd6cc8ed034811c1202db52e221d7f97aca944389361695bd2403e938308bd25e9268e760a40e6558bdceb4f957361001091619e69ddc414471d1befdd62b3067d58c05cccd730d774cc215c2724cf7d29c222df4fd8db02815c920c375e770ea4bf6ff036147992213bab1a3ee8365e98a45d14960a62221f466204d16fd69d72d36b1390b1f08520ccaab238cb4066791d0c9f26ae7bec410005723885064ff6043e34b21ec9147e37a9739485a90911d43948d9181f7ffd3bd926977501fbd2a9902124b1db7cb8399253644cbe57061924cafa585663c3a1650b5c2d260cf4a09418892187f58c54058ee19e62b913e44fc6f9c0e69e5807195b37175abfd5bb9350b2e589362a03dad92d984a71920af57877e8d3e2e0afa793980b409758c71cc27c4678a6b9c8d0fd121404ddeb69e5204539213c18ce5d0f1a459b7b80f9bb105f0c9b6b2b3ccd69687a4636b6cc389c086de227ab0b077e2b88c2b53984c03c8405cd7a76befb0ccc486ec5d30b79d6d49e48440c0f3f2b9e3d493d28e0bae0027993a0f2b4f161d0888643056b4320d422598d6c2dd37dfd3e932e7dc04b040a743837266164eb23ee754c13e5ccb0aeac176f6e542040214bf57e2424bf01ad715bcc29f81b402dcea9634a821a0940683a30be361edb62cc34f4a16d11853bd6dfa9abede576338da0eca4bea8522ae5b88466ceb9286f17262d2b0e23289f0a43a4ea19670075978fb4734b4a5a38743dd7ec2744212076a700c6fc978b75c0f33aef8658cd6e2046061595b6e4176af1672335892bf66bd805af2c2bc2aa6ef0c2e5b6d7e5068be8b891558fe58cb98d740eaf18f80e158859c453b23bc4616e220befd79c63fab939e31bcbe9da99f9c0431817c53e1d489942afc7d15e57d2319774cd5b9cd14eaadc3c61f1df3cf32563083b186483f5323ae260f550b7969ca028b482656538a99032b5cbaff08121f041eba782a3d9a8765411cd049a52ce3de3ce530ed65f115359094278e8acc4a861f8e821a8b9260457b1182f58318eab5e7ad8ef0362f54ea21b6340593350ec527b41cc76dfce3a56adedf5b349d2cc451e93a0ff57aaf6649805d365d6c2bdbc986d55682b846a21c429ed5c41c954bac11e9ad8c23113e425225f41a52d7402a7857b80341f195b606bccdf204b42dc204062321cd2f4bdc0f3ffd5122d2cb21f9b2a7ee4643f183ef411701b4ea9faec0b206637c9ae0fc824f76fb57827490d7d240778fd247f78fb9daca109dc3e23935d3d46737655b32a3eda56aa1f487067fc15649848bff037b26c26d3effc73e9bad995c748befd6303181f619a8aa63957aa03ce8f25f5ab8ffdd371dd4040c96f6c9fe9dac6fe6cf665040f7cc5c2f57b6011dac8773c957ed89ab4dea2f248af8a4fa67277485a9d10ce24256326afb118b0cc9421d1d993c8f428203aa4c520e42e066ec55d79357c9be0542ef242ec228c0102e834387a69ea6e66983e84d173aed84dcc50ebde2a5e1c8e41bb5711617037a2a028b049cda0a6cae32d9c7bbd69f6697cd106e4123a700f1bf09d70332bc198af7ab3bb0523875406841c7cfbca9e71677cfbb85d0957788cf398f0f9c91553c74cb6181d1467eb70610c193be1a39cb88ac4afc9449384ad28bb8eb51e8e549629ad519f347a25d3822b2b6a9c497210cf7fd27df64c8ee4d970e32491397d80356893ceb339df03f2884daea27b1b0d36179f47cf913c28799d78bb026ce08d9819766b8aaecffae1490e6c3fb1d876cbc8d97a5f0274af40da5f7aef961ff1d63a054ced1f633ac4e9d59f289e5748d2e0664967c9e2232e085d8d187efdb9f0522cc5cbf4a36a908e34fd8da2613adc02e74a951b3adcf4bcaf446a6211fe66a0c07b112d26198c0fe95be211c68bfb014b0a30bfeda2101bf264abb8ab96c88801989a2643d870666ed6ebebe460b1890bc099ebd0cdedf9471733c9a87ddfeda1344e577d003141568d1aa5dacd8b6c37a59294c375b3881cc086e8306cfd53eb2290e717cbc133f060c6ce025272c2bfa8f9192aa5a6e641a1b9a36adabf6748120c46e232b01867baee617877da41eef5bf6296c963cf193c39d96db711b188a506bb4b7a1faba9f6fae69d0f5b5061156d928af301b60361cb9243fa2319210424c4b82e1a52f4c64463012def8ee24633de31b6a956a48c1a5452ff57bc434beb415d32c1fe6319dcd5029d5407aa4fd945b24853b022fc85e368ee375ae093b71148f76f8f58aec48b1fb82cee34f7a2f31beb70145f4c2bf8cf2222d2afb20cefa0279db5366837c5c6debe8172f8cd2c23073ad0447a1f22adba20f4cf2715054da4e1845434d13e5362503210368359802df8f20df1a9f830ca2f7adba9ac7ea1173b3e8f336927123f8dd7dfb6617028f26f08bc71522c3069b89ed27e1c62e08c0e2e701f800da1060202f0e8c1e49e4d4a997c7dd5c5674ba48919977ea4e6c275d20012d36e9a8ed298fd40ad53b8712391c9d9d3a448c0f52771fc2f86cabf0c69c6de858bf6e33f48567f3945008addc08427d943a88e3e66b6502110dc8baf21e7aeb3be198c5699994cd003f0ddf837389628e6bd6a9a3be8fdcfea268eaf9bd638762fc2d984490d4d1cd507ef54a9b7df33a68bf6994a42a315c912747c4a21297599167bcdfa1a2c5388075403ebbf394e7a3e91bd085314bbb37b4e6af3738823c6c09a8fc843f93730d9c09c9955e8d9269eb8b594009e3ab01b01f0e71ca87b23d89e6710421f68b4e473edf830a9e7f2845d2d647499d17951ccb412a40bda11a8ed220e4fa6eee3c5019179f29709cf6ed53ed0a09e13fa0742940c52a7c5009dda1c4b8429db882035c89cb8010f7e4ed8ae9dd5eb0132f50b3bfd09f7cdb52c01ae9fc231dbe8a819c7d4c53467c3887d7eb9dbdfd520d04df7260d1884d4ca52339ff4ecde45f2c31f35055bbc961a86859efa73d50ec34845c021b3632d7f77308c6143292f2bdda779eb7f19bd78eb193da256e595bdeb043a0f06a507ecb3dc0a815044fa87c154c5e3cfc2086b2bc458cfd3b4e1973bbb8a9d1a03d6963afedad66fb52deacff371e955279cd3b26510fe073327e4886c1d03e027767507d8441beff136890382a77ccae61894e7330dd7a7d98e4391c28148a105e0a0345821142f2b980a9697386969f3cf347aa4089c4df1da8a905542440de2b2709811cf890136ccd666cf0d5e939576b4682c5ffa063d6347caca10c2809c207cf13a7205953a79286c4009134adf7428c865bdb1bbe6a2d1f418814a9d11617ff59a771cc986a3199e12a2d120d3c35385fb3aa6f708bc53eee126703f48fc7c78be647769ca89ccdcc2a0f22d2c20e34a6dbdad6732709bc334324211ee11c7f3689b8adec12c3689eb193c50d21eb5b915e38181568a1585ed0f5d095ca05e6366266e020b7ef92b0ffe03d354f4b72b4b738e5fa9b7cf9db85a2137a606f5e9144c960de62aebee94b8f5cbe17f3389b1a5a64511127de6253eb7ab9da39f767d1951b6a0cc8237a258a59f917bd21a7b9b0ffbdff66fe957d18d285b11138549d3cd5b42d407dde504ddb6c2ae3e758dd1b6718b8ffa02e5228ac67412e3a4eae211945ff6c343a87e7839ebae92940620a83e671857fc1f35c164c5e05d72878bf07be96097f88dc4012b9b6e38087e650db64cca6f72348e6b2fe37c275665c845fccc1070252d283a81accf20d8899cea266389fa1446913e01fd5ee451fed3b345d3950d16fb8d89b0a3f92d2f4a61d8927d62469c93c72cc9584f28d6a17f4d1481b990ce970a652b8ec88b2449ca608108ebc404ee9a0982a1ddb7da318f2c2403a434c423ae4f808b72b15ae01247f04d622493fa2eb95a9097b14fe67d10d4358a0561ae78767c5adfa1acef1e7736cc1c9a660c5f6cefdb016f6d16781130eebcd0899bf2f8cd3e81c52c28a8ec3f76e2e88cff8a7dbf26dfda0714b9f9b04dde45458cc1789edc1e4cfd4ac94b5cefaf172fa6d5a0f7654687b87bb88da06fc62291803f695d736e489d936f61abd8a85beced1e36e99291d3ec58f0004982d545b65077a6467ddad0f5af9949e8e6f23962b769cf19c1729976cf3b9f6ee55725c16a9272b6e916970605d25614473ee794bd8a8d884e4da690b2e470dc4c919c7433ca54b5d3ecf2c9c7bb8f864e6068b5be93013c51d55ba373695b60c6a1446df5c8d51dc5218b6041d740bc54cf901fe2108e19ee84ad799ec4ff0107fcdd05acd8cd91ba54a6c6a123dfb265cd99c7964e2bb60d674270255f94843c48cc89034e6047748f21b3d3bf04b840f24981e53f4c820aef58dc1e85b0313538402998b8e95c942c1bbaed528951018521968f23e7a7188c9c174abe84225ea90ca442f7cda448fe0e86cca68a6d5006047f954f934c4a0642c34aa2a22cb02ab0054914e310404074a06365d2cc05dd2b2af885d98fc90bb4805d70cf61d7f534ea4b72129add27c6c223ab8a4cc3b94b566d9f7f608ff9e0d379c8b0f83220aaa7b33f0d0c81a3bf2376bff45a344147007e14818bfc1280d81c3e58353029eaa25f7e3a52b2d2bf696876578ce8c770ca187a2361adf6e29398f439c31dd8eb254122c2fd9a9d56755af2a91e96001205c55867cc9f430baa077eb83a8e518046f97ecf4a6c9c77682a9b3b7583fddf4b2a5a1aa2c03fbf8fafe34287c520458652ddaacb4b067fa5f7dd8f589d97ddfcf72beaff9f6bbe5185a45d47da0661ae4c10adfc945960c2689366112455901e4117047d0a6a4476f4b2e5cc9f2e2bab1dcda18142ec7613edd956255651f1fc7b160c6d03ce5de8e661acb20bf65a07857714567fff3f15b6a8ffa3d6486732c94b5d05dab35a4b800b8301598104f9b4ac544e3c28fbe0618e6a732bcb8500365ad57f651583ad0378ef872898a09d74d6af9d81c6e53cdb3d3a9e11abd15f6f1d223789f44ba140ad02aaafa0f70accaf078d87998315ddd50558735cdce9ccf797b08b873ce19a72f30a4f6e4d863f3d898e4421a21ebd356e004c98c207a125cff17f1ce66c3a64a35bce21ef493cfc8ff15887ec7ca4d5aa352a3003980a341190457d04f39b64fac7e651bddb116fa1432e5035cf99c1f635a1dc4493c36e14cf5952375e4ba89d1f745c2a077c469c287fb505f90ed83e79ae77e7f1600ae4c83b06d5915d68d9c68b0e6732a5843af96663ddbb1c2459a8371427ee4ac2fbb94ce579355b6a6ccab8ba38e7a39dd288c62e21d23902e1d887368499a8cd55b260200c8e915d90eb53eb6b66bee712f209044a4b953f03d2fb73d1da1ac8d4c68bf4a0bbf08c583378e180ee2339cd43df3a00c5b425af25ef5872c03eabb25af9c5d3de95ae4e5c3752e569196517f414b0421e0b02e1975cb46dc214951518f8bc59329a48cf52de2c4cc867fb09133629c17fa7ac814cc0b477072c96a699a3c2feb6b2995943f38a9f251f4d9b94756c322041331b0a7b11f9809a63b52597cb37a6c7b9a2239482ad0a331f9583a603ce8a500af5022525d4105cfbf2b5ab1f8225dcdada4a56738657deb81c2ab271998a50917a6c94ff3fabdaf8be9814821166d486128d38c4a2a4b6cbd868d5bc2839ac28cd69b31f1ee62ee0350b5d72baa86cc38801412a5360d896f361817f41aa05d004f58385ea9684be52f271ab145eea97239fa0deff8dee8878d0d39259f44248ad64046ac3dd4e18114e0c1f756fffd9622f1d89fac478c3468eb50d92f03b3a33fc0318322eaf0cecc2a926b1a61e6a08b41384d98e0b2f2f8f0db96e417ae8229cdb4ee002a34e9b5a55211a63c13249fbd6d9f2497e42909dc9d1adc0e69d5aebb9e83f668d40d067b7d7b57278d2c3a1c2884f31c65d42c04348bdb4bc3301333b098135910a1c47953a1c6d05c8d9ea0eab926f57b1aa04675cd31820ab4b3fda99b2b39824396309ad47dd9f7ac4bb75dc42d05340e4a48796609e31f7e0a9448382d83055846f65ae58561ce6d3a7e1363c3e14ee1efcca1f05c183a034a00b453406b49f366c0bdf8cb70f89383151b12b16beeaa31dc0963298fa1ed70fed2cf0981e66cfe61486d8aec43f49c078a11ab52f6b6b415298e452717231cf9b621654c16d46a16a99c61d558e00220879b5ad8820c2ab32e357b9cef1297111880de08ea811ee1d975ab53c474eb1d75f947c626407be288ff424a6bc4f91bfc4116e25a0a92e10aec00fb725f4b8256a0ee805169e6fc625d586d5dfe197b8eda2be76823a084aec9ccc1a2d87884248f6c1741300636555652ba79009ea952f7ed665e741de70dfc149ab19ec0f1aaa6c95a5dbbbc45ba0502ddae4ca43dfc9001770a3fc3faac1d18b940172dfce448ea9f3afd16a0725359cdfc438d6b4bb9e04d14204d12f60c5b5d0e6e41de674b40bce794037f43f740acce7824ff476e44377dd424cd3ee4493185625959e99a6a902e79ca39a0ad2e3411309b0a82f33ae800d6a527439ffdd84095cd9f66a4cbf8bba85745b4dd00bcde5104164b51e0f9201b5d0b491845e24f3fcdd2962943024e980ea9705717ecda717f575051de08ef01bd7f634a3b42526c93d2cccf51cef015dcd8d4c0d2e8e0072bcf5619d5588b8801f7c1dca56346108d069ba8493c6c4f4e405ef9e9064dc3ed272dc1b97f3058c5bc0e1412e1c4d56890982414ca4d192bead753197988c582cd73e03abf6edd8822232da1f6c01e516d8ac26539fc64fe1e1b5ac03b534d31d3dd3b21a8bad97fd3fca68b9cd42f8ea7b6087a4a6824e0596c38e0b584afca959dcd6a2dc13a8167abe9af6abd756a66bfd5e340d00e13f6fac47e8954c44e8b49bff8d5abf8e784495231a046eadef5c8c3e00219d4880e225cc660c39fea7560a3f75e60889f84ac7c3da0713273e0a6ebb169923209b403a000997f46af6998fdc8d41c58a91709fb387a7cf6a3201d926ebcb4573ec6336624b5547136e0d11183c4feaa93491e0f6c35a434a053a2f529ad43ba0db859ec73fb45ec37856573e1daaeb55dd2cc6f6a99be027801132837c2f9768026f33a4881ce4d6856e199a9eb70c391a771eefcab5860e32ca8b57aea31f9d8e3a454e6884cc254acbfbe2be1e8183aab6b949f2cb9fa59e55043055f8f4a2611f9db9c99a249f49f4d8b1491ded14f1f4dabb5001bae06f147aea35f2ced63d05e335d0d598ac49b30342c8daa55aaad8a5452afc33e3ea9f87053c5653768dcd06945a6fe2b11a682110cd9459ad1e5a079c53c563fc5709abf3a3df4fbcaa4a021b902087692a8200d1059aaa10657f41f605aea3ef26f782f43ace236e08c42d1a90fde4871b46c1c3b2a64ad454d72d6ba000ab6348e6a1bfba2da59eb18b183c8ecd4d86ec75eb3d70f3aca8a392b1a3c112554dd8aa9c82915a51a4099bd152292215b07d2db6171cd703dd145edea0012513c6cee057e02a2e97b5f65a2295fd5eefd73e5b6b15229e6f5c84e28334f216f6a1799b379863bd15eeecd323fe04d596ecf7c66d1651ed84277a1a72c3d70246e6d18e6690d690ed266c140d48bd08727be017ec5602abf4733d6137190be4978efa55e622f9fba85468c51417cf0b7fa401674798f15d3e869fae9dedd74143314c7a2ca30e0c4411dc4fa805cf7c23ec8349d708d72f7820beb8665f798fb8095b84cd1132beed83d51fb591d61cf159806c47ca0ab7e260972497ee424bcf02f6929b1503150c66b4783fa6c85194c27f32bbb275d064fd4645da4a2f05bbdd77ea253d7df0198728d7dc5f90caee8aae8c27dcbb31b15e0c953eb1a7b0d697ef696fd91e67dca70fc89f866162b646015c01e20ce63443fcaf3128223b81882c168b43432a78920e77995aa847871b74b0d5a1b92c6b4b679d2596652dc9a5e462a1b068d9ebef9a7bbaea43de8693d4d11bf3d392be2316b933443f656676646d8047912dc279babff339e9fd4f3ca3cf9500480c571a41ecdbb3d5892e06746d5254bbb8d147056a2f467b301295c4325222a638cfa935c1b64cb98065d2a0a90d555d86c952af8e5b4a295528d949443d6b3c09bf089a9099d5ea2d91cb1c17da5425925be478edfb07a792c53f6edf3c431b6b5a5fb86f8f3114ddcd80adedf071d181b80509a5a9f09d5c9bd1b62feb8d9d6f90e46ee2285068b960f26843115e7e3a20a1e76ed8268e043639fe0989c7c50ff02237009fa2f3c7818c290ac5e4fc0f994ac6c7b255a03ae9a94f57de07e79be2d75d47bddc59b350e80786e93c6b3854482fba67ec001a9213756efa0db9cbaada8ca20e6996f6783ac3e0db58f48348942b18f4919a0c9de024ca431c29eb4a11fd3def653c6af53b3fb2be9f7e871480c58e45e8244ca2564f55006e12c550ebfed96928aed7af2140b249cdcdd65a6b24a4394777371688ad55247b6bad9c505a3465428a25af6cb7b6c34085ee42ed0e71fa9d62eb3be46e56555cfb5457ed95d5b5624618d668ed011c5a259bf93175d8020458aba09e889e49a4f45c73670e257e563a522725129e343f570f52c379ad76595a5ded522197441f2dfef64667ca3f88e86d19e8e1f787aa1a777b51444d7fa1bb1e74d144f2d057926786ab76c5ce45bc86dbe9db09a915882576bc31252d4d4e211a07c696e098355c35858fa68dced61000babe4aabe15ddae36afc3fc967dd4224fd5415f245a44e66739553fac798ac299e8bf313a0a79e07e6955bc5955500fe225371493c9d61624683a8b8d432e83b3502e4ac47b74974cccb4180c11356efcf34d345871486bb84088af998dd9fd021fc94e7e7e9133caaa00f4c11f9727e31f0e8d043fad6d8dcb7b2a38e5521052b95e507a2cacdbf72e1258d4cb650a86ee1689b461621341e447de966b3a70feb8015ef13a4a39f2a25465a823a6499236fc2f854962547818c0f44580dfbfdb8c6e5495ea6cef7641a4d941c89dceb809366018e8e6031728f56f4a9b6a7def7f208bd0581144a256ea35f2e8efb3bf7ee46f8adf87401da77c5360b07f6020d95c7fa015f4d1aabd95040b1dc1c369347b29479d13e9903d2cb1a44c38a1a872cc2eca2064879eab6a177d8c14155d7a69248c6b5fe019fc3f01f987af7a4080819f7ce897706295650276d174c3f02a414d7d278bce227161133cb83ca30948549657c4fe9334d8b7acd11676a80ebeb10aff4d6d76c030183d475790147aa0d7956d8f0cfb0641dcbe96eb713caf501cb0b55a8ce65177c761da2415027938e63bc273b0147080de397f12b20c8584958939a2118d04280e27c999a74287d5920a50e91ba16d58bd80a5fcdb6f35af449830e2c50c68d9d43a6ee33246860ed7db16006f5750a691aeed6fb50fd309c2770c131c50ad5c6144982f63570c52eca433e95d6d8c92a5d9aacf4344698d172f274feafd071e267db1c9831a9134957a312cd4aa96fc71f6fa4579abe45ef492936d96cf67842dfce1301a511b3b1acdf2df81101e60eedbeea7e15acb740aa5065eb24c284c95236af8cf46c34ca4ce9a3805f56dad28ac57429089073245686a2499972fc078474284f4206894935b16ffb4106de73890442f7d73e1d5122f6d74eeb5f01978575e4b764b426dc8ca923fc4f595ba9e8de33995da0a871cd48372f7b2555dd2eeda011ad078e7b21c2a5351a2094078cd581b65c2c0d3289ec0c65e0e62b25d7b89533686e8c78f27d83d8ea1ce116e47f5599e341c436a9382382163b9ec960850f1ad4da9dcdba42db33c802cc7736aaf864c9aec2051ce3ebaca0941b8916c125d85d99344762401a652f37ff4ca0c48e1758a05b8e948f043d3035aa2386295d5d0cf435b06e00be1589809de22ce1e2a5aaf455da8faf42536026239dd0c225c8ae98a4614d6a63283af083a4ff47ad4bc27b0c72edc12e04fb1c08ec64338ddc5fd3e25fee591546ce6bcd7ca2e2088e96353aaa5851514fc35524d14860432e46e05a6f5b9c1ba56efd094a0726e22e5e4528bdded59520ac46a371e672b1e5d90428de3173dd0de559a999913218f58d3c2c836d32ae7cd8be8dd05d0d5a621e17606cde05e0cc71db15d8a9c92f63443bfc8357e2a6bc43343dcb769dce42ff640016c852da6dd77eb1b1f03531e3390daefec3649c0bd4c71eccb604cbf7fd4086eda9467799f7d9245fbb566649f21ab8e05d917840143bfab3e100b555647ac6a5675d865dbaab1cc8f5c595f226e20ae100bd0591caa31aaaf671287ac552c0d9a4cf5caee9c48f96cd7104e36eaed1f8589f37894c7b489d80ad3b0500b116540806ba640a78e53b590bde4731f7522ec2f9575dde60a9f1c0a68804457a850578b0ce54f1f7ee067312d3bfd5788cbcea05f9f658939c8070f7f9b2221b6d4867eecaf321b52c7519a4ff8e396982d41e4c8aa21cf58d299b009fc8ffd2cfb8c8ad0dde868e3f3ef254817a55de9575a593ffb007e7ddefc1c932f8e06c4e3e38e52c929be56ec42698d21e75d721f29b87b44cf1ec0f6895d318720ab93c360292dc1e3131e2700dd92652efdd083498b1c9f96aa54660fad1bd4147b5e760acbf8bf7f9ac559de0c1701009ab3a147320c2fdde8fc40aa7c53daab6fb2d7c585afcc9f45c8e747af63a2e4e1361f4419e8c47399cae9972f54599e982c5922f2677eb4049da5e2327e7c446f8657f042a2cc0c9f29e79d4180ed8eb98cac2aa187d2e38528932727462f88e747f595ced6a30567a4c61bd9035ca726d309847b10b6ba18903d5e8647e6c1d50325c32948c7ceaa3246aa20f80b870a6818b646a220970dae866fdfd24ac85f8c94870273b125a52d4ca4983cb2c3c3860b490d3ce8b2dd0f3e050b5525b455361b996a33a569c35b44e98df90ea774e05ebbc770663f9db0c6aa903dd963bbbee38d861e584cc0b7853f139dcc8617aaee131787b5f7f805915895f2df180d86aa8c0a499b85e327c00782d38c6451d6696a42fae319d2f64447213f2b8688b670219127b2436841fb7b0145d14a4c93b80124729654b7df45efe293c2b38074101b0bb98d7fbeacdb1ea3e19cf616fb3a773458cb890e6217bb98dd0cdcea0086a827b34cfb16f2360f971189e29f1b0f898a41b5265a4c97e49ae0ad9911a8134a023da6b8c1e72482463bae691da482be8bb340a7ef241de9c147f00e55fd5be7ac3decd0f05c12b169a16d84faf3387729eeded9b66091de328e2af05e4ba11af02568a4d4a76b9f1a5c79c6ec1ebe968883d16b41e79603ae7771ac98e6ed32007a2a8c41e1869349b564089c7e8ab5c2beaa797401fdde60091a8b5c8c9203be396786f3a371e289c1c8af5e058119e7895200ac3c43ec892132f7b7526a368cdd5812345937292a8a915b3472ce6cc46b39a0443e33ccefb688da2e2c6398be2388dd2a192c0e95122beac80a593e8630387b86ba2f31f71c401e5401358712bc7bb9d353b1f18ad808e2ceca13bad45d5d390e44835981a8d87b75a34ee7a2999848785e6040d40d71f87f7fc97f762311c46f15503a56a4b51fba35aa81e5f01bb2bf5157d3fe8a3641df57db0cfe2945515d33e8f2480d820d73c5e6f67ff87cdcc0da006ddcd3b1ed8bfa180f6c70f6e7435094d21533b179da4a28e3d72a68a6a84f8ab02011b85f382288c882368f604eb38d199ed51db5f0d9aa5183be3b50278f70efb0d85a9ed6805b5863f750606ff757482cda4c4925c78cd8da28e68c3e88c2991db01801225a3dbffacb699113e088ad5fa72d1767aabeee7c6151afbfffc9cb69ffbe4d7db58e28bdd5efb2d7ff4a9fa76c1261e4db4ff4160ffcfec4d70ad9ef03f52799afb718004fb31c5a16cc89ea332aeffe2141d55210962157f9179070528ba6a6745e4cecde66296618f2a00fd243e5a66b6ac7b51bee0326de5814bab17347976eb50f0d21a3bb0a555584ac9d1e163c67c199366d048408ec1eb80e7ee08e47d35c325bcab1ee0815c1c4f008d12bde3664f9b5a77af59b81d822a8bd0a1b5d511f5d77167103b02bdc18d2783ce64d7fad0d4e466d1b935abb1426ea8f2a597304ff76ce01c6ca18507479d45f8f132ba1d8eef109cce89aba1a52a92a9a429895525bf27a2d7700535966d61950473d32b6c5c3a00221330fa9b896486de9f84455a888f33b5ed373f018ec23a6fdb5edcb6829e773cb7fdfc609272846d7252afa991dc6c18944bd52e775ed89b9473963b7052d13e92e5386ab67e05e3dd3d17e03ea80747355b113e65ed208b09755a4e234a53365d9b2eb37e676832380c3568bfc115049efc518580167d7eee85c289fb92eb1375d9f49e95a8587db6314d77b1a1309e89e51429160924d054fcb8a251fe0950d4f77289a72404a9844b7f81d5188a2f334afe9e0dfd898edcce4ac0bfa4cb52f5edf103b66034249089014e83fc5412121359b00b5a1899f6c8758d56d8333e831de8fa1b22e76c113887927024bb53f36b00985d0d28255dd2b03d61727e0319a1e83cb2288a9682a3fe7c2fdc9ff22e8ae93c0d204f25b8da13b23e6f73c01adc2f0f1a2780a5ef871c6c822877c0b0f269dd660bba910bb43d2e81d040471a8f361479171ad0048955a1446d99f285d0e8487618dd36de9a9b61ab8dc1eb888e773d4ba6e391849bd4999a1f919d5e7f1bfe8563f246f329c27d19dcd8fff4ed01864e5f0e7784f9204e3527e6a85369a3f3ce9378f64ae0c35f239e8ba71f4d8ddf63f4a1b8293861c1cefd484c03bd7bbc0e0f5cb25f1fe3c70a6f24d656956d37af60ec204f4d6e43a55654370dd24c942a832d5226c70f7773d6191d4164446459aac247629cafafe06aef16e30674f8a6230c641a962ea7753a240302dd3dd5cef01734c114cec7ae30414686d961e44bb25dc7820cc7f6ab37604262070a54617f4d437d1ae52c5b729d5e7d45f493c8f931a13eeb45e18281798e301fae38cddb4c89b69f680662a1cc5ae2a35feaa42cacdbbe575a7b92bdf5255d77ad1fba3c1365236e8ff9eca466d0ac6a97aec26c8fb34d5c2a20d9473c1f37eafed5629a1367cbd2517b37e8d532d91e929e656083afd76604c99465dc42273b8dc9a5e4a396d8d9488d481dd790f0db786607ab87d409fcbb1a9817eefde5c54cfd9cab87dc7a205067d9fbaf061ef9508c63379f5b6509699d5f61e55dc17e2eec611439cd0889bd600fb6bb10b4fbc63d7fba6bb7d5829ed01bd6ea9b18caa011dfc65d81eecf564ad7e563f04665ccc13c8473b3365e0e1d84040165cc5249cad7e9d81ba3aa8a520511bb9bac0d0f265833aa1512e05c61950643482156c436f33c03d269b6421a353a65d0872ab7677506f254035a62644c34922b349c17e13e4f060bcb1ae5b2cfa73cbeeab15dd543894f8cc1c7e60941d4f8fe3833fcabbe46c0505375d00eb1ee03e82ecbe1ca61408dc015dbc9a9fbef9c6dd1e39741df7a0db9f9ae161a8b8178a4d20465c1f15331f80c4286c0f050cae2e76eb4c18013c1f5c03da936eb355087cf425d2d06f3fcfc58811679e48dfbb5d17793f6542830fa9cfc9d1297f538ab93546ffe280fb6182a418b4a91e32b3a7102707067ce74540f2f7e1c78159c8bd73c92522dc1589b8b33f71c2c7008c8b34803e544db825f627d83021f6cff3da2be913afce6d92edca96834210e1c762991eb43eae93ebafd6a40b8e729d6e9b312be4fa82a168f44dbc78506d173acabd47db08bb23beaf4c17d92d73490cc3c5cb7f7881688778769804b5a84bc1b52e571e5c1716438644a1f20a1a6ad6f1f05fa983f473e6ac30e725062141c0646e303eda4dec7bcfd881cf5953c3b1d021262ae2d6f8134f730d385b2151c2bc88aec6637b51d8c60c3da7fb42c2b32a0df613bb6d77cb23806c07597f9002da09bf8e1e43282a6a920d31b0f44503f55c868b442d47e992f8e4ced63416c592bed7abff6f7599c41295130bd1ef74565fd12d0ba64bcae8af0dbe0d8e243f3eeb130131fe64452cd24d340d7f844ea7e1df726542f512230a566bc8c523562d60db975ca133a08de090645bddc7bf0082486bdaa4b0bc0f560c5bce1b41b89624fa25d1f460e92cd0d067b9cd255480c1862bc07fcbdbe64680f316b6695dd8a614da47ce1f1bef156264cc9a1cbcd1851d2f370c51067f22229c644de6f214cb3a41be8822f5c63bcdd57bdd9f6693f8dcc601e763ba4d80ccdc1a6cf93967bae802cdd62430b1624abaf7af2444964784a4d6bdb4d0fe053c1a4ba317201f0a437cebf89a65a4f7f0c67cd1baeca752a1d797a7c02defc3acbd9749be62e990dd946c14b2ff7fb205575c971c4e9c04225cb4b8e77dd8f0f52adf3f4e8df4d296f1c323094d84889fd961b8b40ab01b67cf00918f2b6e7bcc9cc412b60b8714ac2dd705b87f7844e72f450f486a3e677c8fb656bc7ddbbfe0f2adc5163ac18f96aafece492b20aafb2f0a700314fe739bd57bac4022052cb3fa0c0550264d4d880c49ff882ecd3b154c5476c5edd4d9e8aba658e52bd1eafc8fce246fc3d06092036c37b3c93b4e4bb6f2cdccacda01fb468f0926f0269216e5e886d1d401dde0d09c0c27289839ec5b22e91244d7c2b5c0a9e03acb7090e5cdaefeddc5f8a93965e7848059ac1dbc86eb15e868e54a60aa7cfd506b7c35f6730ac221cdc5985cd52debebb29b8844c91646d7c960f87bc36507384eba8bb99a3b443c7d15a60803f98322b8014c98a17389c5bc0d102302289d66f8750d82db670898c5fb991e65fc1a3f0fd57751f11c7d3c9cb011f0ff98ea0beed49d1af39c9dac474e9df496fdd925e6c55734f2b877f874ac6c4f0274e72751880a906cd45d904899952a2f2d687edb3449245accaa7b7f3c6a1e58855b5f9337c50c0b6e345f50a74ee0f5a840c6de1381230b1021faa87f90b71ef9bb055e8d451b8ea17447542148c5ab0d1bd3011c9c2d475e1d6e932a24c01b507f3bd9043f2108f1e06964a1df8995262c5a625491ee57ad17bc2ec7ef5962d55d35f4b83ffcbb12507d95022edcb2ffc722ff29f3c06aeb73e1e40ddea3a8a1da79193c42b5b01a02e96c67bb087d99622bebb0b49db606b932126fa21f8667157ef62ab75f959fd4cb112c0212c680a1e867a48988fe89fc23e9c1deb7cfc030b248efd5002d37ceeb65fdb482da89d73bccb25402bf1328fbdc063501c8f3413d9da1ac1604f3f095d0148d3b7eaaf52a1669e33ed2704d90c802bf708baf14117b7a734621ca20d863b8f7e95ae59f4f32a83d8a2bd178d71722c539585290a30fbbc21b99978809acac5d72afaca12837a98b851d37fca032d347df6ed259bb8d259c59881250c94ef1beb47a12c85e1177ce46e09931ca1d8ded13944983e1babc9b669e1e78ae1e2c37e6add3cb6cc71b7c6bf368e2386db71dbd13eeed6ed29aa75fd488564a51ad3b5f4ef1603e964a4c8908157b052c40cb0d8c7d4288230781798a2df170b081ab6a319c0dbffa870b5595f6aefed67a2e17a1506225c3feb9e51b56e22e53101caaec874d1a8012988cdfb92ee3c4c9d0aae1e30dc9645337d0aa5fae92c168289205b094ce9f9fbcb73e4550a585fa52f0180147034235a31ea482113006ad68771fb3c312bfc40fdeb021826d1052096e20170fa2cc49d416c175c5c960b42ae5b77a7b98811423f7cac4ee1d0cb1c5570c786ee191faee630bc986ffe4459e0011a27eb31260d10ac60309bc0e77b68287d00165b2d7cc9ab5bd1922b8c30ab959ff6c14f833b5a1ac2c5fd1982cdc9b071375a06229d484542758a8b68b864cf4328c00001cff9f21df1cf1312970657b81b43c26edbdc9a1489a7a47c454ae1563ec82998c06ed4912ac0f01bc163e500e62595ce922aaa03e5d889073a5c163a3a6edb871b2d79cf86185632ab112de3f28715b597808b98e05da450c0aa656ddddc787fb709bb834638795b5bb5ca2f7e197958d70416c4344ab0d152a4a6a7c612a49486f510a4a477838da81f88346171407915756b9ea9bcedfc938537e7a35dfda1347858b804b5ac396da5248d3dfc42b716c63108ef6483f281e503c1e6fa6096c1426667682132240f7d78637db98dd8445f6079b8753ce0562b72733338fdbf3671bbd97d54823d64881287524a20e709b84cfa2dd904da3dfbe38e1f6716f85915a13fc91f86b3ff2cf1f5a32c9cd84c03e3dc1c4013455e6aee6679267009c74d4140d7877e59b1ee78fa8c88d8f0d076644d301247224e6b34c9d3ad6583e1f7c23178813b245d55b1113b6e37ed34a3958c1eb6dc40b03e4207c131379a9569e31d1eacd70bfea6260a84c834a00e8c2b5472ce05d1ad6bc8923894cf166b7a95eaae693d83368a31085c406ca104c9adc9a1ddc31ae32868aff0b846aed06c3de11904593a294109aedf435013f0cae2cc8b133aaf7d8e7f432ab7e2963524b5168806a1e4cd2ba5a8126d48c4169f5e88ec1b858dbe1358e5c29017ab37708f3c661a0a1ae22b3d850e0fe7185213aee023b056a9cd39dd6c8798dfb9682f67e90483b60d8805665cf98f91a0f233830d5f1a563a5a1417c87cbe43b421a108e698bc326c23ce06a23edb91b9a6d032f77f030dc9df757425613dbb5c2074561ade9073dda37e2a2a36620d5d6079a7f1ec7ec8f1b8ec1246060cfebf1d1445334ff0bea65fe39cbec076504ced48c6ae314b85e68d1c2723acae6b13ffa4528f0a3d438953dac3a9fab5153a84225817f5d010a1917f2785a76d133dc1184f76f9ee8a2d1c984f4e51e023498661bae43a1ae8686933d5fb6d88613d23b628ec781398430257a4251626a408f3cc863350e3f42b30ced317701ce794f2768fcfa15eb30c795445d8887c21dcf36d3d7dc597759c8f25702bce5a919912f2cc0f670c560fbc9800d6f6a26bc3f6b584b3843ee8debdf478ab55f7ad11062cd68237b506092c125d92cd7b8ad6a8aaea3ddeea702465858773576510f7090ee37f27d0d65099818a906911176654893c5a53cf14a86823665fb0fe1e5fd0b2b71b7bdca1396a82382bf10169e3fb154b683b7ee635b81028f202336e11048f6c7d4825cfd09c55732d364f7c43cd306a80648071d30ffa6cad4ece021c93325c942c16f6d58bad58875d09c590ac87185527e2e326137a2d11950c98e49754f8ab8b8d634a0157f53236acd2ac089c3a361bb61d00ae45b5e0da5d7c1b0095582b37e204dda92b9e46debfa70234daca3d65e07342de17232364023dbf77b338b8b17dfaad7d77d720558f7218f4cebd532c79df614db5cf7b2d1e9f16a6af59b2ee6514d6f7bba1c10b3a3037d7972efae82585a0f9277b8d535988dc749c0b31e0eba3b9aeeeeef33d5ab2e02b6efcd9a54b7f26747193e00448d73024eac95df98c3c3507dc152a0a37726952eb473287937d183002a3ad66881fbecb60bac64df41153abf24316397fc05eb6014af555941bb726935f87ab7182fe1b0acf576fd58a35c2ad839a84fd85df748e2ccfbf12de72c14a6bb24f681335b94cf484e24965c72909e5e971a7cd844ed409a062851ac4f5b075ed328e890e247d854dde70d343a4669f8f7d008664182dfee24aca6f3d09ba391127e3ff1ba4745b2fb7ae1bfb19c33ac961962bfc6a8a2820917ee747b506ac4d17a2eccd11d86fb427ca2754c949fe933838599365424f94496da27c72896778e21c6067837c23f53319d89704f2f1a42bcdf185409fbfa9ed6ed691b40dedbf3b156462c5f54b514bb84e459be5dc945292f9ea851cef536d9984c072574a6109f44f89a57696688869c9ba563e84788899952509c275e05ff903701e737cf0b08951fa800223b2e60546e6589917129c1345b92e4c18a22ea1f93fa0f96d65ff11c54d53842b6142926a0096fd20d4f5f89440e1ad05e1e79cea93d54aeb6a4d72d2d3871095459293cca3ea533f4c6fce6acc99e4f44c21203ca61071afeaabf1658184f73faac18095e5c3916e14c909ce556378172f8111a52ad7338c03db99411a6059c688a0b1338da47fdd4ed8b0c93c1ce620755b7cf05666303dc4cc58e02703fbb3e432b8fbb2e64d45818ad863f826a02f5deda5d7ec9e9548a3ea8317d50dfda6939f5ba176f8214da542523617d096278d26f826866ccf470694f9dbb57218372df1206adc03f686c46d91044efe7a4351fdf6ef729b41d12bc58fe76786a8559eb2781442b37094de07034be1619f7a2dd673c79d8ac1c328a402239171385284274cf0f0704d80227fc0df7df877b29024bcf2f0fb3305adcc87876bfe28bc3738df624f280758cd3e6f2b38ef1d41a3e836657e766f611b80141b1d80ceac1dd6c61edd4ea4aa7caaa696d7ab777efcc188c4d7353f1031a7b5d76b085ca0c7638436270732fef6fae6bbac6780ad408726ae7454d1b76d57887ab9094592ec8a885669e444bc3a6dc3d8c512c8674c5a7760c01da058a490c68843ea67555d2d2bb48e9a03e0141700fc1e1ce1e9f68047c4333bdd3d9646ab41daf2d625ff330ce03fb97c57ec09314018faae4e889017b04751beb79439b2648f4d0bba5432ee8c5bac1b729de01108bdb394406e39d831a6f943b5ed3a312c3d511da2ebec2d60a44823c1a50acab6d0969ba4a0ec52bebe295f9ef2a70e39d9026b22b42e2fdf2a6a5685028e0483c65d21b1f88970304676a6c881694222d5a4d4ef423aad1d44974222f0688a496447e1a3d2d1c678d7929bd42e96b2ff7a3d41515d52fff6edd77a69225096ac8456dfe9a74a552a521b12898e0bb9e27ab6905eabf2df851133ebdb1a3b2b993dd9e4472d6691c0549d055a5c3d4c224021d43188c58d5c4c41aa72022e2712df706c86f252c32f8248084e9ed495f6fd1bd6b61cf496e6080815eaf7daaf38f375df6bde5f8633082218a78016cf90268bbafd759066704f075ed182e9fea35332a8a82eb4fddd2583b0a607c54c48a3c171d64b9d75481d474e78c1acb9d8823618e614c57db87327e2db118e180ffdeb9ff9198300776c8cf7d5a173b436f3080a4fb44ef158c8b02446dcf2ddd8a5e51337097771386af36d5fec1312356141eeadb92f7db58086ec678b84162e60ea257d13bbf65d44bdbd78dc9e2c1f87cca69e98b9f80d599dd990b9d69021b65529a92356bc53a6ad013d345bba85168d0890ea4726a030bcb9226a58951eb0fc20699dde01535caa2e4aacafd822711eba7d08e4dedcec1e132c26e7722df2efd73c29bbc262a702bb2121f253c3bf7b5ce0e2d3eaf94891b024d553956bbb7f0cf8f4560230e4edb3b9d00b1728d0558e38e5c0030b1119a571074feafdfa1f56f52803ae32098cab573043cb65c0a357261eb88bb91ee657230c8568a15b9d5963dbc53386ab943bad86ac87fff477f98428b4996de17329cf5c6382beabcd921747b460f3fd28bc8cb5d28e4835b554450ebedb11316297f65cf34e52faa818e27012903ee572b727570d05d0d2f76e49b8706aedc9836f244463b13ac2ba14f2494022643bbb6c53139a51fe5ce44a2965f9007bbc7c50d7cba26b412da5c4d2a242d71b22bb2d5417792b34b7eca023fde94f7a858e23422e0936a1ccf8408627eb2f047e7e1311c091961f5d1dd8768204004c392cf49724c6ce2ae243fe75209e03a5bfc2c1f3ddd02030750697bed7dbe861de86829715364538630af061036f3e97ba033c36abdf2ec53a1c24ea217aa7348bfa30bf2a396b5351c30a1b1361c7f5431585b9dc5b35bc1794131fb5ea107370ba5ffe2e9c71f710209b3b2d6e607533af71c67c953d152b07a2dc4a43779acd4bd34f6c1727d6145b93609872544e527876a7150e8ec53aeb8dcd63f5d46046fb11a6454f610b373036ac041c1bcbbd0c057b8e90f8e832db249cb94bbc6a51bce582f0b029b84ef1743ce06cadea3a5d7676f3ceb4761fe9ae17ca442d3956ffaf4d68b037556a840358e24f58440b1cf862ed85c3b20a75aea7cadaedcdcf5a7bec177eea23bfdfae1c81560ef6d023cb89c0395d8bbb33a8cf93387269d9fe2ce20604d909306c246ddd25214b9482fbab56de9a8db302ea6f6459cd01f0e7d0ed6352b573e08583180ca01bb36b6e3b56c060931e86d6162047072201c0e071fb436b290f9df1eee28bac46a09c71f66a09113aa1b2482d7a0acf43f35d955ab16426af2ae8204ebd566616ef5ee54235bf46c8a82a71ba77c3b9ee2851246454cde00b16074a8f891fd74f1d1ea8c3ff05dbf0e58657d5b47395208ac9090be43261b8a384619330ac9beeb61691b61b2cbfadc3ad85f1c134beea693a47b4c62049ac338006611e7bddeb181b656869966087e2deb68546ee656110ed95c52acfc8586589adc88fac98286bc4db1c33e4f8abc5c812c42ed46ee83ec1240d5305eb222a45e932c1e065ec47910582af315052aeaa023afe4cd47a1a21a3af09aae4288fa32583f060ac86288b48041b015082610917dbf12791338683570ed385c3ad47aca2a20df318801e5fbebbda19f9ca58d83030c54a7c1018842ea1d6d47557206261ef290254298297378a4c326d20ea14b0a983f7603fc8babb5ad01e2db7f8879f05db7cfb639504fb0dccd72c13b43ce589f243b203520a4509b2793ccfa703583d4ace665907cc62a52ee22e8f5463ee0292a04990a5f09ed60ca2055aa5a5b018c90e7d3c6c710ba38e202212b5fdf8f013059bbbcab92cdc2ccea78ec75ba21c4fcb021d08c65074bb477381b85cc3783b5a868182e38b6024804b035a42f5d10d6b98f95c6d2f2bd25dd3182dfc740383ca6b3a0f04966c1aea452abdceb5613f4e17c3c2e6a706191a9dfea4afd352f5567c4cac3c06ce9d57f03a9e814a41e476d04b07cc00a936e9475221758d86dc03216110b1f7a85f578b656675f312c5f5a8bec16709a7ea49622c6e5f387287cec6b1ddfde749aeeaa5ae02ec0a8d13c4ec198eac668d136a9ddade98087a9db9aeae535b576e0abdc6a93ada7b002d20d9763250d576a1ea67812d0cfbe3ccc49c3a101beddb53492ec7cb55ee40cce4301fc386fbb81706a0fda5ab15399ac2efd309a4e94ad84ccd3ae68aa4c4d112ae2feb4d3d20a5c1c7b42c0a3d6840840f3a99d857193cb24c0f92971f410eda5bd61b4f18546ce982ff7f8cf2e3c98b0265c6219b47e9803cf040d97b101ef7f9426800d608ed8fd31046e3b74e32a7e906c633ed9bcc403c8fa6f75c62590e0d0de626217621bcf08e6abe37b992316f98d1b454408db16061649db071b77da1965ed0e93edeaea1bcf89cfd78d3d918d4338f1424de568a618dbbe69ca6222cf21ea60116570cea9420a35c1ae37e1f59c1a086de8b7edc828f83fe3f24f98a3b72b38e06edff106eb8452b75598b54cf85194972196742a7eb68328b9f3895c0267c1cf03eb138437bf4c3abf3056f22a73ff368984056fb7527a66530435d7b34cf6f089264d52e5b6935d2c12da363d122d719df54bc0c960133bd6a87ce8136de1edb1d9ed8a4f12d6a386381114d8a797580b0f9f262150b7fd7d785e48a97625d22c8edc91729e7a7d1aea68c45672b763e630b19867a54f8c9662bc873af77eaf9969ad1fc800d605ca72ec2c0966649a35859aea0a071f40af8e75a2f63ed6663d7222262efe05880348710ef990772d146eb7e6459ab9f5dabcde13bc3616bd64d3c2c2d24dc5f711ee8b8444b20c7468ba940c7e44c3baee6f001100a997e924e3c484a2a100f0ce7480e8151634722ad7ab18ad9cedf480d835a44d41a981a78064b5df8ea35839b76be926042c9a7fc8d8c771c084179acdad7d1e381a5f667c408a3825602f7c127662f15bf7aebe35820ba4f158d70d0a3f38f840366c8a781db638df7d56fd7f63a0969b60bd388383a236045850f1150a264a2d788d9bce252c5816d131c21a9a83d8292f9d2932fb13387808d15ca3db6195906a59d728391f87674931ada3b5951bc92a1d5e8d21e95e148875d32f417852a5e39565d0f874add2ad498315ed7f01c16d3d431f355f09b3d13d93facac001dcba4ac722871351f810ca7c345f5e0b922c305a71314550f5d876b480b1486192517fb159089cb95f8cc5565725cb1c0a019073dccac58672bf89daf1ea05a70050b2c94d69c129b9c94d71053e5d295aa447e3f960c6f15e19dbf558bdf8dd995bf52240138e6e71b254e38fae48e7be891e1a1b357a74f02bb2dc52ad658c72602d4a3ca88a5d8a1d829ab869509cd372d7e8b58351fd70bdbe7c75a5781aceb2a5b6ee7aba285cc185a93d0dc4ada09a117294cb6ae8a60880f75c822e8d5ff02b0e251dc8c3cd98cb6655349ac235bc77ca43bba143e3275e776e04d59a53a2fa654845c8fdccac2a1110cc945e1e393d6759997aa039dfc8d6abedd8c9c2a852d44677452c410d08a316c2b8bbfb8018a5bb99dee25933f24ee68c0f3791767760d9481276318518d7c6b246c198612738163a2fc0a9055f4a02d152f74ece7a2839c42f513c3bb02b313be0ceaf22879eb7207d20fcbafb67d50434e6a53a69b4c23426665b0cb6e208b1f1b25e2d6a17452be8e8b26509c0abef07bec5a1547a377fb146d21b9cd915c2f2e955605fde21c1f4aa4f3c27894f950df86201b2923fe29f24878bea190adbb01e95e72bbb55205dc596a7c6305cb20f6455a5ac22ce22651d5179dcc64eee1e4cc046eb9d824fc28b77082de02ad19475888d545c798341c58853fe5668ccde1d109711c352e378c99d8c871bc34cffc6ca0019f8e223a36658018ef10782c0d2791ca468f5441a517e58a959093f880f5f1a801f41366e00e396550207544016e8b262d7b6c5289172e82c08fc833bc8fdc2044a528d6519e059738a4e831622481f684745f140586029f1235897ad06fc4208fbd9abcb7be31bece3e01bdaa20d798e6927a8ac48da2f938424bfae88ef1716a030d4d7774f4c9da61777d8931d76d28a790ad6177583e7afd55c8d31248afb9c4945b8ad922e035288eab2d211e207e06aaaafd66bfd22c651b69f84455fe8ae73a583814c1e5cdd112210cf9e35c49110c24430fe28305a0c9ed16858907d7899f45811c40e27a9c31f3e6f2612e4df9a759c3134b01d6258d95a11fd98bb038fd25baf6da10e3b41b7de32f3baa6bc9641dfb38ad47617ecc9f28f77b0697747b0e33ea4f1471b8388e6224fbf218d4aacffeb9fd9ce734e7bf08f67ed1c058de825f05afa7716c69d1097fe309ec13b2f1223e54ccad85ce25d8bf0ed4d645651f80f22e3dc0974349fd81f251dbda296d66227a288c37141d91be12b2aa6952c0d37a8d301da80dc734ea079f36244fde77d1068019e4499e26d190205623f30769fab240e1211caed376b283804ef367e746010b35cd91e07799e23e3b2585b680bab1bf2ed486f30bb6047e32d2df990c4d06d10f50ddd90411f9e209970ff0f57cee21536c7ab6c9e064259dd1f44a9d96965252a52cc38e95146975d74b24b5349af61f4c74e21e61c005a32907c8b2513981b89e0b10c0f074d48cfece667ca35e330b84d796432b330dacb029c3bd8183c86fa78d10e782f0f73c63bb3703bb5c299f83def2ea5d023d0fb6ca65213bed389fcca580f9f16c62fad319ce1bf61cfbcb308fc994e6040cbaac4ac62f115a2f9e14a19f2382d5329dc2736372048a398233c969e457fec39c63a33e8cb3d8d6bb986b728a7ee5bd78b90c31f51292f61023825dc75f7a68692c3348eae45294201f82c5e781d721620189e48abb27ca366c3254410b162d1459549454ee585ccaaafc314f3972627ab0d89a56dee7af4d6a825afdaa0592a1a4ef137d98866c92544670a09bdcac0d154d44ced3c3a4c1fdaa21926d88c08fca1dec65ba0123df64d0395d3ae0551db3479cfa1e4e1dd977b4f12662c83a2ff3996106eb466c522a4704d0ee1287a7deb488549063a4c3abda16e7d6ea6d17ba4b9385a9020f7e8597a5c1502fca7ee5189da317419f430e09844724d757b1330a5404a7653fa895d1210e3d3073ce1d87fcbc857383b70bcf73d542145572553e6bc4970805005e91fd66cf60b312df00f58a223aca4b49a114f119373601e3164c35b00ea46c5fb41279e4c29d24b71b5b4a8e2efc69bd8fd6c4f0d1073bd6171425759f7537e928103b202238bfdd8d85182bc866be4091ef89414de014b9027e263fd457801e3521b7f84480fc7701d2f90e0012ff7f6a0ca6e206bdb6d1af0a6f3b07ffa065522c31654c9d2db2ec7774d2fa9f58e3b62634d6f010d1f430852982317927afa283da4be7826df5c6e33c924f18b39ec37f383b4cf6d604e4ebc38edc58de6ebdd37934d3549bad6174ecb009ded83275a84e8bab04ff3396ac9070746f4aef91438dc97b68035342a6218181fb6a5743abaf8a62e94b12fa4751c9f0abbeef630f12e8115e3f002a0a7026869d0a870a52351c9a279529d45f27860db4a84f94c3ca4e30f88bf818c9e387259b4cf2a740552b0b906f7f01deceda9204fa3f23047f074c52b3fb8bcf7b0da68357a0c083609707174f652154a174d475c34a96f22b174981d19230b8d1b3cf30fffb6bd532c4d18725b0f1a716cbc4c93ed8750b48dd8984a424e2a129fe343ae7ab73277d213861ef6ce9a9501344622d4d1a808f6d51e6eff9e97893a0335e626a0bc49b6c55ef699acbbbbd50ed053ea45b007ef88093ffdf2b9b00463d109440722a74b38e40efb0f0644777fce57c1ebdf8b5edcb359036931c9014a30165d20d857035bca2cd9f4bfee82e1009bff32900ecff08b2ce0b483a7401217b1b3e9caac76f4a542a80ec1f02c222bef1b0f141406bfd8006845cf68f14484569e8a0088499eac1607a1408fced094880cf6b0403a4c2d605b5fc5ce805f6435e5dc26138ec55f71ac9622579ae902eec015619ef411b03a7e1190a3d1327c762e808acf0ddb9622cf4ff954c4815597acda461aff6347d261e454500104b11c23c36143aff2019700b70cd6a40fd3f929273c359784e1b0b5c05a960472ed4677c2f04d43838863215d7f52373051d0bcb004c1bac91241dae557ee22c8582252b7b60c29e0c2f85555612eb004ccdbe7c128b33b3824b774e525da6797bb66350dfc6ef09ce53a7a129ff35fcd9d46160b8c914eb557bc4d9c68ea15146e0d8de173157db64b28db7cb587739ba50146b918ea5c8346aef99de898a5ba4b78718d9ef31c1f0cab3cda849d1fd4ed294abf30e29868ccf21c01ae3fdccf855f5aabadfbeaa610cf466029ad901675c304c59371d153812382df8222db453daab6d155c971bd06b66168ad891e5f5283b2fe8d0e2baf479e60f7e0d04c1590b3675e0b0a9a8a103e170cae4acc221287731e9e0cd6bc20ba6b2ad5d2e84dc174a3242b2db9adc5b4a29a50c1c064b06a7064b7a1d6fa76edfec180954c76fea1d0013050a142802a0224a85d941071d74a062c50a53850a152a5674ae1b4e40533922e934792f8754c16e8754244a8d77f6efdfee7983586d9a600d9b7065a4264ffa0def6e0e2059dd7a0da9d6aeea21959262c7dd0e937c51f56e9af23eaed9dac54527ebbd17e761902b08a6c3a2c3b203a7ee36e82bd28173771bf441f58b7716acc83a3b1c0b82d5202641d1345ce24060decede1a8b9b509773870106d2ff68c79f5f3f8e15b278c77756a2e1b244731ed85e3e51c73a9a2eeb4a1d3669793f4d47d4b30e049beb544c34fbcd3fb998d121bcc320c01eaacefc5ac701bccb68d5897fe876185e6716060114c6e97ebecb3f41f84f8c31c618e313e701cb59d451787a09a76a832bae0270ba5b3abfab9643d5a9da200ee8d6f30a4c923955f28e116f8cde0cbdf4058a29468229c739a3aa0674ce39e7acb34ee5e923393af93e984609fb746febcc84812c4ff76bc236af143fae22ebf871105f6120cb3556ecf8311616f66c8c526c58a13bb43ef8738867ae01b5e75f4349507bfe3e0f3cce3bb440da080e1a4f76c4d30ae18e1f9f607926fe819fca5771918ebf86ff0233cf442f1810c8657d9caecf67815638d50f81a398a3b97c9d7abc9cea77fcbffb09228e78b6c686c130d1665ce4a0377ca2d1f163b2d58811e6d9608d3114f830d0c5442dbd8eb558a10c7673f78952da630074fc38772d4d870be23b5eee388df636356f0ba323fe259ad34f94967f347b1a9ad33bd7a2fc5cae018fc9720fce8b20f760b3a47d0982890e6120f7e0afa164435c4304c0a2bd6ac1f8dbb42c891e40fbf2f3d768682e9ba88bdbd33e2aa32e72be4487cccff9a1dadf4a5d2ed374b98ce614707bda3720e74b3404f3739e868610e5c2fc9c0fa1666b3905944ffb07941c9ef60fb8f90e4f94b630aaa143512dccafa5e6db5aae45cf45519a91720fc664bdf6381fe5c2f6e69be85054465d988f830e5d24f43af9cc572f92e973bab6219b7b9054a4385f4375d0219dafd5d0211df462a15c401937c541b16aaf5e600dcb7c9b9a03b8a2f3d8977bf0d76a3f14e5c2c39b6f738f0e3a746d367408e3a043976ce882a1486f530faf5eb01b1a42940b9cb77d0839f26b4ffbdcf8e6d3dea63baf62a4b7a90734979f2825cb4143c0416b688ea4bd0b9c2f1f07cd91680b230f8f7ba254e7cbb7a1269aa37d03cc2fdf44713ee789d2db976fd31d3497d1164644a98a7d4e3d18a7e3a1965fc54e1de7e8301826b3bdd941874f1d26dba89ad78eb39718a535ada118987bb08ac13056eec103a03a6d1aa51f6305e19db53fd3595bfbe0830c3c9a81f304ded9b7d988466c2b1b9bee78e454b1af33612035848afb25ec84f1e85b1a1f2be11ad8480cdf31e3cd1ac72daf0960a0bd22ef08905b80f0338ee3388ee318d4c771fcddf83f4121ac50d6bd28566b7d7138ce555cbffabcb1a3cd36e86d7f87dbe49839ce17671b5ae77dded84c4509c6401d7232d0f1df9c35c6578af6c469cad43a71ba1d3a359d38e68d8e893bcd9b364f9c797bec8404e262285250aacc20379ce693a079dbf1dc4ed3346f20788e6cb1d343b7c32060c8a253a7db61102b24bae55a92b5c2134e4672f666dcba9aa25f6d84a5f03106a4203d3ae9d3c9f3ea93e4a36a72337daf50d5f73e775d6b0d7afeb19388bcdb0bc775cdcd6ce90b92402933648d111b27a2a41c40ac8ca0d2c84863a3298c3cf5893590291562fece60c53aa1f2e3863117c4ae70216a5ae10611620d60647495d0a4f481c7a99e414d24dc7c6f966e00d32548d89792d562b30a59e1091813aaa49c84ad22404ae838d5f3773f677adfcad0796c4e559fb73ce2071b9e0257c77faa40a4e3b7da9cedb8b50eb0d097848ef3beed445db5ff0122dbf5d871ad00bcdbdf3adeb17e16f9f768ff6ee944306484c4f10ce5cd5deb02f1c794126b7efc26f8e1d4b30dfe308a109c18f4582013dca6b7df997722c841f807031c2e9f2d727e102680010ed821d355b743a6187a7e1074e8389d28254a55ae2380f5b9680ae089ffa2b70f6ef0debd34923b8b1cc94dfede7b6b0880e082eadc79ab85f5c19f1e396fced2bbc6c599ffcd2327c727751d78419209d09da37ab44328483a7316e3fce7045394ce8e72227fcecb8403a767438a23d39a93873829604823ca77d4a9f1ced427a0294b87c87f71c3721ca551f989d2b2b4b52dccb92089d2519773318e4f945e5d0e677d7e479ddaa65b975fa756e35d65ea87f3dbdf8a82943b4b4e8c31c6388b31c6afdab73ef6518c426979547b2dc63ca887c88fbaeb2aae972808b9077fe62adf75950705adc83df877500f91f3e61467cc2128c80a598df30c7787eae47073635a1ff3cc054ebe6d2f2093f3cd090eb771ce2fe8828cbf47f4ac0dc0346fd9fae4c701a965cf9a67bfe6da5a7436f39db41a8ba01ca7fed2e67d71e6a0bee8f8f3682589b0bc175f5c958533b0496a0bf3b1cc018cdcb2f9702ca9902df49b541539a3e9d96c3693fa65291eb45d826b2fd88d2a810765b7d6e7c609be1c4676b1e74d96792b36c248482bde20671e105277d3abd79e7326cb3d59e7e8542f9b9e33bedf83f27e517dd9e0151bed228fedbbf71e9d7b09ef32363af19779979562ec1edee557b752cf5f8ae8e21a687d76efb79530efe60af7e4cf37594b1b090389e83a67c48bde04f12ebf0821a7ba9b823dd3f6afeb3a0730eb2382caa9ee261ab0e7df4ddb694361a0fbd986d2f2a8b3fbf7de9d91eea34e5af36c9d645917ad4fe6ca3d3901baebd169a39c987b72d7a966a59e7d790903ddd9af4c79df5afcd6627befbd37068751eecc38ed5b5244d769b1f00437b1efbc9fe3bc7f89f2bd412e1e7bb6414527de711618ff8a8c517c31cfd689034a4139312d29f5f0ce22190d8980031ab0c0044070610002ac4871e267c703026733b00421c356a9f52ef2d97e6bad4583ecedc0faa4b03e18a4f03d70dd5792a006057d4b5dd5293aa00539c1d3b909820703995dd550625dc58168527f7a2eb3aaaa427aca923a53904921860a8b5cba357ba3b2a28af41bde611e671023e93a2542faedde14f80eae348e25e89488d06f78a7a4a8df74c0b27ebbf702cb745503bb58ab0366a1d168b4d2dc2a7d5079c937dc1257832c25afbcf66d57ed5d9174aa3feb5c9ca9fe9cb3c659b8b8a8827ccc190476d8844d576fb766b7c3608daeefbd37e7dba498f3256afca57f73e56c51a135a1c352a6a8e1e23cc319abc9bd376bab9cb3de41e04cf3df524e8c58b03ef90ace7aeb2dc5e1eade6ba17c504e66ce398f246963efda2639d44a923592f399c90298c98296033a9ff52853947140d659730171e8adf7141930a9ab1aacab2710e94e798de4481ea9eaaad6753b25032deb0e19c791cfec546f8ae9ce68335ab1e3a91a532bada4952ae7b324c47eb36669ceac0fd63d0954b7c32459c324299c407e30c04018b08f1fb733a1e3ffa48edfc43c9c065b68eaf81ed96194b543246b5771dd76e87688a4470121ce7a8f7bcc4d983cbef7e69cf3de7bf3194992e48c369bcd66b4b21c499a5889001ad7de6192dec51777b801679cd50c91a4415226cc1049972192af14636a9c091815aea1b417e75dcb7a4fdd7bf7c844fe72ce79249b20f9f6de598aa949110b92f4e0767bf39394d4d40f9990f51bdecd720c9d4c5559273f9c2891791d21ea787224c8a52338026b734a04c4b8f8488d7b2fce46d8582361289b1f1593c6334aab1bc179df0ca1745abc83928401337d042aece2acf748f219ad346b1c6eccab8b519e66075b071b55376db57baf0d07e707e396b3ceaf671edc7eabe5a03649151135391e723c30195296f1a0e3416774aa71d1c1e9e054e0b085dbc1ed8c3dca17763eec7c608283498f48f043ee434e0791fc88e24a72a57624679aa669e6403059f9ed1249bab9b9b99980027e6b4341080a4258154dab193888a8195146b70ff1c0aa2812340dfdf6260e0e0eceeba0a4f4cd8aceccc9c9c9d1a12c1487b8809a3a3a3a3aa8081f379788307776767644f0e8f297cbe5723c15e859900accabbb8db060044eb7432b2b438e4698214284083162c7773dbb1eabac345c5164fa0def44881001800b4a2e15545041051760a06f4a70a3f890f021c164f5035ad5b05a8aa222518244899188b076038f8a2af153e2e7c7c48f092e6099281926323091c1d3551599982e9665a041061ae8e0e9a34183131a9ce055c491480faaabdf4a942851e2c40655425ec5840913263600aa0a7220f39653bc205ed06cc8940d481007411c70a930eb765835447320c48190998259b5a46f788742080513ac2a1fce43b7c32565966c79e9f84dfb989b419102458a25575d35b99cc074f06f59527490a20325c22548c66e874b886861bf05a083002cf12d71faa82a2452e79235a5c562cecc048305da44bcd36fb3907aab6cb0ace36aac8f7eabe364b784e66bec4ebfbe55ba4afeb6979e99c0741ad645715f3f4d8a15b28fd5d5d99a77581ffd57977db7840e0afaf9d9a9bb1cc43dfa696866d226cfe5c979b5b7a4d0f26ae86ccd3dfa35ba2b51f4399870a590bfae9f0599d306b544e8ea15664eb6e92cc69cdff199aeb2a0e19cad33a6cc7b1cee3c773f3f41daf62cd47283812624c34acba392ebbdba5eacd07e7bd9747bc974fb7706cbc3b705cbb3764a0cddeaf4fbeaf50a76956b39d54dfcfdcb3c9b02bbd6fa3752d6c41ab807987936dd4e4cdbd7b58ec00f0af7581d815f13eeb13a02bf25dc13819f12eeb15dfde1400dbc188ce55ddb03668546d45a9f19968785b9475ba1fd385c870eeaeca7e7a4ae7fabeb572f5695f5d1dacaf6e8d73aabebc7a88ab574dd42d79f51fd78a7b10031ce390b61db3f2860e9049eaa06deaf53dd44144e1b1cd23731f36c0ad6f526eb7a13917a5dfbba7e0c36ebb6ab6b47cfe4ca4fd08fd52faaee7eededa87af5f31385f3bb30db2bcca8f00aafbe0b9974fdd9c7d94388a4ebc739888c9070434a9127214a535224f0234bcc094ea8be38119b6ca91143e3c81796b2477018830d30505ea8522107169213225670a43d1a5c495464d40065096b496d4a59599996273c82dc8591c8881029448a14e992b223c54fd01db6314222780515a6246b090dd1139a284d615cb06ee4e051baa0589937105d507a745ab75d506e6c11fe4311224d5233d85813259540d8b04b904c4baa488a5be8f8714a748ca1f5ce59b743ad2e5db5419e75e66e875ac4ae9e59e7ee76a8858586c2506b7806b1a9ee64743568ca89fba11694165317c650666728319a0db3a0081c47ccb30cf5755325ea8af72f66845656f8cdc04174c4c4080c47699886b4b9ba969b3717680c19490e25cc151c6688871d131151a254342266e82388075b525062c5844ab8428aa174fc2fc4cabc8110d16d97901d9d77db25c484aef28c5a5e63e984cbac8918cd39c76ac2a53931eb2b2c21d750eb2ad8f1afb8ea9828d5cd6ebb9c9c380ba5e5b105a964e14c2993a558a573b1eb498b065d4e5fc88ac11ba23007ae8a14976215d3ab88255339737361cb57f16b97441480ecf878d2a5d86526d48b0144981f0dc531a64e2f8c0f1b1828af22d94c44d2183245b6b11b3c47b805004e32cef098d560a689334181b1200516ca40ed1fa919ca8acc70bf11a400d180e106aa0f69b6f81aaf1a89358d91cf98096166c0d4c8195f4c209919333376d37302570d47ba46fc2a9365574391cc8c8ce4e447842c346135ca339b1355e842024b0ac533614b1c68f834f8327386cd9389f6b488e08384161941d28421a9dd10cf68b920ac4c31ec4999266c4a8d888f0b860c2986759d1e82578e5e86253061614e5bb14d2e8a6f86303565938c10608e6eb828cdac0b42bc3078ca1a3bd3e3c398a99a8e304a91ce14962d67aef8c954a5874ed6932d59dcfc85ddbec096bebec26c6ded2189c354d56545c99833c4db1a6563840a3bc69cf932fa10e2239e2133c35d5ca038e8dae205ebcc58072048703b9eb89c6933a3794139bd57130c6194bc7cd49071ae587c4cbac0a272e8ae2574f81b23e6c3365b7378e8fa6202f14792c580a3283645924c58968e502c3c768861421b7f5c749a146dc1e264d1051f054b847c1113923b4a495daed02c284a41b1c66c25496df5825b6c38a616c2e8a8d92276866f6115113cbc008628b686b4ad569a945949e2bbb252550583c39a45040786aa2c2368ae24321b1c84b06bcc175c170d3f2e5d6190bac034e99801a9fc83432a5afa7d0c862d6cf5fb415fc3ac13863048f5fb0670719fdfdb2f11033294baea2658e5cb76298e2992d98af80dcca3c90cd4b566a8ae17986b664c1fe519650dbb75e0da92359f6e0d892d9f98b5295df60c73cb6ea384a9e1374776a6743ff4b0b5297d7579d6de1a92c4f1cb8c8c25c76e9b5306cf616d3ef6cf925334269763dd9042da156bdb72f919b1353318568f70b90d8d4647575fedf6dfbee5a8b539dd5e295aea17554f344c9dc7a219b0c113494a9b79439984b2df987468e8056682e429988effe2a2b0638b98ee1f1a1a7aa1ff85bdc2668a2c1d7fe8c5044f564ee97efd43432f4e262541d2f15f58b1a00c67d2fd2f2cb1eb4b9a54ff90e6b1241d7a71696ca5231a957fe88545a3956e340aff0b7c0523d568d47dfb2ff2bdbda1103d1b7ae98b8b05c70b62d2fc5837447ea52f6e2ca419bd63432b3b050d5198625dce4b3a747f3b6e404a5fe004494dbcc1fdf25ac5a0a697625dae78c2d941c747dd99cbd61c5d333604c17a07d98f6b3228230cc3e847cec578c2a94b300d362e2f382c0471b670aad37665822b6d2e0e0c3932b079d136b29bedcbb6f523a5c7718c7a60371c33e710c785d3c60584debae426716409e258e5d306d6a3ea79827b7993bd9cfbecfb2f6f5c8b7eab937979b4b5a8b8025712d2fcb7cb3bd718c5956cc591e60771812ed2fa0348af6bcfafd1e04c99fd7adad6e627e771c4603842ac97a451e712b0aa7c0ce448ee189acc3730d9bb384eaecdba10d43ec02189914bb0569b587ff9921cc7f1b3fe9cf7d6a7d6b636677e5cfb40af596f6d777bef5a0274b617e7dcb3b2f7deb873db3dee71ebad513ee6c9bcf726d1539b78a7cf6cb7dd766b3cd6a505067497a65c61deedd2e2c25a86555a86525b31b27a90033190dd8a71d5eff32a8e55ebf5fbe99ad39a1fa4fc5d06cbdd41c5820a009ab384d769bfc395d37eb99095a6cd0d38882de0d6d3de281ca09c2abfb922a381c6c8529418443e8c441955c1b2e306abf47ee981c6a972259c4bab97584eca2c8677f7c9116a48b1aadb6fceb8cf62654cdd09873b83b9e73e9999b0539999326f0371cffdce946f84270ff22abc532175aab948a2dcdea085052531884011d2c062f61e9024f92b72900b580af3acc4eaf747809d38dd766991750ebc7ded2aaf1a01e654cb600de9a2c87fbf46432d83394c0623b3421b687d7c56a8ccf2b612db733b74d840bef5ab3ac1f2b855d6d53ffa05e62bc44c279a1a988ff37e9925f73875b75bca863df372b3b7a9f9f73359e6e5c8bb3b896090714a5ab3e6c705580112ca84d19ae1171492de2775ff17f01286c70d2e6384c8d88095ab35539e6c68010c30f3b812db73df49f0857e5fabdf0ff67b81393fed39746dbef7c6b23c0ace008b46805104869af4fe165a9e0d1343e48790224f5ea2a4f77770a4e976d50e0edc1cc8831ccbf2cc12ac201cf3c3a8c6577a9f0b2d6f02195c863dbc846103a3c642639d339a2b00f9b4cf24993126d1fbc3bbfb35fe25f93312cd15203fedc9199afb203fed67f969e41e9feb6e27777057e1ddd53abb81787783e7ef7c39550eccf7311aa4fc9f7203ed7d9d9628bfe93abfab25b0df2f83255629b43c222b3328143d95a006889af47ec955ebe5c67038dccd6b54d55a57e9154214d7751d2145f0a64808a6755d4d4051c584c2b4ae6b4fa88825a329c14e6f5d571a1c7c6d345976d6755d6b047599a101630ad7754de28d31d1283d75fc40b312ccdfbaae343628b2f94ca6755d79dce0634766481af0982de9adeb3a2383267e8564026a6715d7753dfa29321bd3e225a83e107bebba2e91d8e2636cf8baaeab928f57af8801989a0ac4755d6f5c6066ec2689705d571d0038d25382ebbadae89991bd4ad8d528d384e9adeb9a63848ebd92ebbaae3d0b966abde2baae4a153c994dc4755d4fe04152b312aeebaa24e249a9155cd735099d52e3e2d37591a91993923afe0f73968db07bebbafa8e3afe10616aca3215f6baaeeb0d0a8e6eca92e8e2baae3ad655858e7f02a5b229207a7c28cbd2949baa15e90f576a7200e9f877b23810e2baae36705b5b4ab8ae6b0d9d6190c903914ace97d12baf373233355c8aebbaf670c6483561c4755d71e07a6b51c76f9b898085ebbaf63ac83875e0e0baaebe33c71a22f877e3c3c644b8aeeb0e0e3fae5f6d8aa4e19660325923a67bebba9a5062c9e8d8064d48e228617685a64212df6293d2ebbaae3bce755da1e327cfb0a16285eb1aa4e31f493659368c99988edfec55d0f1eb11349b351dbf3942b6c16574a6755d6de031e7ac1b1fc7888effa2a306707da3264f3a6fb76d80f48c6233b5c00623708010fc08cbd0a2c50a011020f36a1f64778b161be0ffc9381255713f9da320783a4d1dcf16b7c838dc79e69fc0eb1c276c74f182c5a6e8040349db309a313332a19615a38c1b15716e431419b1aaa217c4c2a41ce878d2d4c4499319473ccbca8f0fad0071ba1d5ae96143e7bdb9d6398bbe57779d19b5454ade4c45cf256c4f7e53b7b03ef977633b59ced9cd8d15fab13ef977766c1c4a740e3b594eded1123756a75aa2e76f01c2047807a8622486b00a9b2469d22254891ff7c71eb8d69aa6f5b93fc2cc69eec81630368309962f1b495538d6922f5341616a8d6f470d4096b6ee8a51d439743bb452a4a358125f23a76ade4c9e1deec1ba0b46179aaef28c385bb9f57dde70f4cd59ebbcf7de7bef6dadb53af5fbd6e398b5ce1b3f8de398f54e879c75ce40eceee568ee7107b97b779d819c9ef14e074d9276dbdd770a019651a8f48bd98c520bd114010000020023170000201008084402390e84592268b90714000b53924066482e190b44a1381804310cc3200cc50214854008824010c72164207496002112077e17edae8d4aefbe2ef8dd1bd3bdd1b7e6fb7acdd76ffde015edd4151db00cc7bf076eec470771ba0667bfcb6998e15ba39fa207afe530083d7a35e75e15cced735a2c78074112aad7eef819b7c062907101bdede66ba5efd58d9f3e770503b2cec124d0f3d26fa06faef2fad4b7bfaebef0eb706eeb82b841affedcf26b9b6277479e5d5b2cfef28110cd7d78df758f7c44cff509d570edcf4ee90a7b91b1c6452240ec6bca77b9e93ad05535c416c0fbaf887cb51f792696872634b0740a3ca2b74ed02740bbc198ba5609116d52fc981d33f4093379fe3d0e9043c4949a9db58df56912833a233f9b55c452be5f54b22b5c0ecaeb76fabd03b8208d5ea837898bb8143ac977d0524c066219ae02d084e49d551bd0222e40eda258471ecb2b91fa9bd8683772df2fc7cbde3f2b1971b824318fe9553c91d55139ea3a94406147bbb28f9ba2afeca2b4f380c664842d1ea772af75e2e71599f07f520cf21eb58483e02f292a25f30f520f074db3d2c18b26ad826fbe79887be0cf8c4de018ef42e2ad7fe5af62709698b0854ea51105ee430449c899998ca800a7aae046c7dba2fabc53e8d212e76e51ccf908866b475f4c4512280427e644481668bc187ab089a6551dece28906394c4ed014fe0610a16485e4eb64d1d639b175cd521c0e62540ed9aa07777a0ac95e2091b33d65c289135126c797dd6c38f3ff1c8356d8903031811d7d61a0c5905924108a3bf93fdd4e82e5a57dbd667b07e0d8ae9b909caae169901ed73b59d95bc3b77a362ace5f80a1ed3fa681a9f23680bbdb08978bbf8c175ca7a436628bb86fea6f177101e69a39d1d3ec76b058679c336ab1a8b2c77fa8d4c9ba38ca46385707c0dac55edcae0eef31073c52732236a2f5cf02806953b2c2f70574a5664b41c469605ef97069834f805c3d5b19204131316a24feba1ecbef6f68f4d907014fc41e88d8d859710e4d9a855bb72c16b18b1acf70d7a3f3142b56cce535d043047e8f4e88691900b173d3bc28451e385d72d14ec2960e022e212687a7d99d17f354ec822d8e6f22de4668ed02c9ed79c20a251feea2fd1bf65a6702b62a89c7bb48bad8d62604a54e4ec1800602e77cfdc772dc4ed78b4903b636ee35263ea72fac5f2d55e2392b1a60c58e6611277b314d6c992dfb44422b07ce218d4968edd8def522743caea50e7d854d3ffd63ce607f7d62e56043bd83b130e4dc75c6cdacb119dd3cf65b2e28e026b9a77ccd3e2c10fcf9dffcdc7a9c0e7fd238f3fe005f51175275c08f27f934753e7ec27ee6124b1b98aa1540657ddf5a1281b65b3ca073347cbc6156c7d717a472faf23f46437d3520774e527a654cc76b91ca1804048d05a65a23cfaa8df4e2e257f71c1fdc2515e8dded66e2e58d437d9d84798aba3ca1a92e0a4fe8742e786ed5ceb80a1fca8f00b6206119936db149cbada84bdde59aeead9ee62792093ec7f442791bd7cea47d1f849e96bc4cb9a8d1f68d6c5541e9f7713a462f4e5c7eefd0e7552af9ea5b6c1fa67d4cceb57d9d068f9092b093ce96971f46ab4b7be349a9e7bc84313f227673f36cb729322efba00ead999a04668588c529529beec0dddda7412f1fc2a9d2ab9b9e139c740cd3673d3fa1625d7a5e2fef2554bb653991d687c76e0692e298c0254fe3a137ac50b9f6c135bfedef6be0aefb5fdd44c3e5e00a40f2da96dfd06b6bcb7eef354bde0da4f549ca2f892016295830698678add0ea1b925010f3f1e516e6f7ab6059c98d6c497729939bf04aa6be2d00ae98d0d6d89711dbfd28f62983905b3b44a7109c53fac535514cb9dc625f5d3aa1aececd639be6171e3c66ce8d2d31c45604f16605cae2f3731d57dbe8ed58bdb6d2e7418357e3f66a1a2ad5c20dffa567a65f2175b350cdc78a0eb2dc2adfffe9573cab67b69a9f272c9e7c4cafc73f892ddb87885298e101273900d057140e193da73a3e4c0aa2c8d1300ea1fa1fdc619401f21474e79e895f079173b80030717112a117820e51f6852c00b0a1ac2b81a7a60cd1e9c5262dc8ff265d4e8b166cc10d8e0c6db8cb7ba2acb88abf7819ede939afe9a94e206e421396283da8eff4e53aea2c0de04edc2c8360a2d38971f41e4e3798152cfcfee89bb0cfc4fa2bca02efbd8d9319a56dd89e4005ab0889635178da53458e95a593c2b6bbcaef9a8832cd47ef28e28b9bef7af793eed40d9a9ab2d920863488671700ffbe9e282bd8442e05fa037f4d7aa37b42dcaa92b5c1a353b5e29ee3b6875c38ffb7028771f410d6e03815430e45fab5b92a17639c699ca8e54d63ec0c6f53ccc5e74e9f2763ecba3a2c57a388c7183e44f7f57ace494306707f589979d284fdbeb60bc508931cb599a09bac36c3dc596d86f2c0ae0386f1e13fc8c1701ef87b3243f78061f6fb5b67a70f18a7ad7e8736184c081db80c4841d0db21c3fa568d3f671047039c3158daad1c7c5bf81e58060a8cabdff1830fe37960e871f54e1fc6f19787d727e37820092f333455131110635cc83fa7c45095fd83801823217fdc2586aae8cf39f5cdb80cbc1e87be1628e274864f9066b9dcf93e301768f50b6836839a9852275e33f055c4a8f8213257cd98870ce42a3173ae6040b330c538c81cb24a86390b56030b2668f1f2938461dc208fe4309c07ce110ee377487977f1ce98fb842d9cf0139391f77dd9d1bc6bedb725698618766d1b66e837d762d08265a52fea1d9d730e8992d865d35f8c8b711c1c85d70c5933f160b33b8677c03cc0c9f00d78b8317c170af0bf1360e01edee2b918643ccea6230475a7eeb3c502234a07827d6786443b37a31257ca8a68f9c4b867fc0ed499b056183e7ff8b6c8853a26a8300f2cc9db998b8edea9b97495028171640f3a454df8475a6318e6bf1c2ba3138f8cd16e6fe7bcc4b589cabd12da9e4e8da6497a4c65017f73d2ce1c38050bc8f4d8e265f6038957ce8506cc63a90ac05a18158eb8b5f8740922fd4b914a8438baa669810cca270041a42bb7ff3177475b50dffa8b64f781330ea270ccdd91f004fb1d212736dda465f6cd8a05ec367496a3a9ed0ea9cdb6bc52db149797872b28a526989776c257d2a7b649ef73cea33e6cd875ce4d9693cdadefa64f9e504222bb8334470b10a1679511e6e49a6765218bb68291222e9b616302374891dfcd04e5238430ab26b08c581b5c5f79e2ba15536e910f2ff8e0e33162d6c96bbd119c5a24be0535617d542b858bc5b545e0db7a32a947aad4abffeb28dbf473a5d3796d77975b90e75936403975e10c148b9295e475586de4b8d3e8948626723c41a35fd41be175e719be3997f889aa87dc359ed2c5a34cc62ff6817d7ad727af472ecc6d4cc47b6152736c2a8ca4dc86dd7c2451203a603fdcf156ff6e075ae3a5923733a96ad599d2988af6c645c52a7f934b77dcb2abdba7c18905db09c2a7d669be234c281ecc71ee1a0274019d3f6d62d6e00557a2c394b83a46dbc0288de55b5900cea0e22dd6a30bf15175df2d189ab9b530e3c0549ee77a00aab2ca2c8156737d283bf567db4c1ffb7de80e2fab175651067a551d2135ab17455b8345ba4385256c89a715c43bbcc8f37b908e9c3e1880ed0e01fae3a62dca2639cb6f43208649a6f9aad107541f625b850b124a9d45c07d15055eeb877c207a20f5cd3909ff3dc427eba2e8c409f9c940253b18debdbc7f082bcc4084dd0fd0a40e32cce195cd3af401d1d0133826e3a37ad599fd2a24c4f5cd4a250b72ca1a8b178a340a58dd08e1a075d86fe2c5ebc58825cecfa2294e0b90742ba4abc6086f41bb6f50bed4dede788f6c40708596567b2c0c393f146e130b65370f570a0e11822c145b6c58c3e5b3a9f6a5c184497a6985fd46dd6c7730eb0ee48d6ffa8d3f331c54814b4009fe9a18689019d1685f9f656b071fd92e2858a05bcb0818666cc839fd851f18874a03e188b5c315856900aa44ef4ba40b0533c78ad5d701d31d055fe7169391f8be278e436af63add35b15237a7ad0795810050319dbeb876575605ed6f8f5665517b5d60d20829582dc29a5ab2d9a263b448892918c47217f13213127b4b0298b2716a8162b1f29af83305fbac3a32905c7f54d511697033f30d4540810d2d81271707932e7974692101c0a806b93a8760d6af18a2c60e1a1bc0c2c8b8cd13d5cde01a45b2a37d488dcc672c79af85a1e780c96ce24ab7c7a086e39ffbb3c60f1f3648af0b8553b26c939f7bc0de5a42c6eba4f4817122abc3016cb765b059b3125816e68da3a649f4fecff6b2bb60887b181adb7d59ed6d105c33a11f495b601854074f9c5de4bfba0f0b14ad16ea72c2e125ae2a480e5263d71316fd43a265227e0922830c4699472cd0a4da27aef2365c13d15ca515be477eca78278881d42090577218dd50c66754d94e9632b98c5148ab7e4af392a2fc10f5a3bbd9e1952ce84121605c58b80690a66eb6f3f09dddaf1b77a0f723a79b6aae45e8484ea5bf1abd69cb78e907f769ccf2aec03817d1ec4790d79dada487ba14cb1c05f0c3d2f5d12487d9260445f0c176aee261452607c5614e3ee63144da651e8d7000f67d229cf97a34c018c10114f028ba129a784567768ef44610c6798d716fc7a9ed58d0d0af4c178f0f3d1532842f23e4eacb2cfcdf2fe1dabf259ad44d7ced6a4cde96e738721e7b81828675e0ca2daf69cac9604a40246a7b47fc92bfa1faf5e1e2a883faaa286058e40a850ea5b73d1c76259689a8052ed7f08ce1bc612a8cc507fafd254f64d17813fde6bb4b066e056a2d322c566881ae89dcfa62aa937517a0fb339f7789f327372c58f78cc2b54b86abfabf5b0cedd15a902d4297fc408867be9c6159abb9b2fba4274e16afe2649f1f3c7831b39d4c53e60816cbb042be1c407f0b23d1373c779128885ba2ca81717aec60cfe72ee15672f0a807ef2a8ac24df112aad5970a67cc18bf557ee1c0321e1a84fa06049fe0acf7a6ea5511e9b3bda9ea52048554885472144877c3aeb6bf985e78340e3ba9792a39386e51403312902aa452075330f8848191ee4a568b8fa08eeae03a4a2aba67024ab00c77f927963e0b1085e283e66202edfcbae8922f37ae049151e5cb33495ad0569d289b3a67ede04849a59f4adb86a2ca948fd8ef07d1f52615b1faab2c36fdac84fe806b8c86b71bda458a66fa4d1f8c21e816a57c84a2dcc1fbc68040690e0ddafcc3a70828fadaa80f233036ffb9fcc05fbd964b19d190205c216a32c4a51c687ef256c6755fd4c0eb55ee0029cac22f03471de3f1465ce28a9d679c2a546a36c391f53af6f9637d6fa30e154dc0fe507047665bc346c2ad6aeebe8fecc76f4e81b8edf141c27d6c9e2b1ed8610da9f35268a13b3282451e706f98fe1924c2c65378af0bf0ce349131c98c04e7693de015982efb85b02780534f571f703488daca60a2f1ff41955982c25335966374e0bb062e5493c868374253aa6c72bb78fec828da31268a3170c724d777f76e9bb5cc719cd36b3016a656c46576b281eee43e1d88cbbbf6074a0d399666250f57b4b9252837ae87480f51f26d1d999494f560c24b40e3f8d600e266468cabc42bd5f18e03eb237c617bdf7e5186bb49d28d65be65f6f2bf3837037ad45cd267a83f28bbc53f7f693b54461d8f5c5a693abecc7a03430e7f07296ded124b9d322acd85646edf9fd3a39ec73beb4b3eceef3da13f38138edeb66cd7bbff9faae3cba9b7ad4a63b6fb6d246d7a0796c77a883bfdd8134cfdcd69362a24eeb62a8406dfe90e111db3171847ef0ae329c236d596aa493fb60a7811257bc7f16351d05048f5d7742defae6a55263e62a7eae4da5b4c88911b270c6284b78eb701f61ea6b58c06ea35b5972bc0f0686cb525f6eaf8a69b553ac01e90a421bc096727e54b0df2830ac24a65fadd58f4d9b4932d1a26683a1c9a32f2b1345a785e896414ff5a06f646ec084c42c23848e81cbf000c35018624d0176c04017b495e04ff356d24853030e6b05b78602e659066366fad45d5f47a2e4fc884ee50122eca5380a5e203c00bdb1f6b82aee77b097723b28ab71f003419502c0cd36d0e405b0858298af6b86ae08587caa1d0d23aa3f99300c4d2fa2b33635385e441439755228ebc0daa6a695414ed9be54528db9927849a8da9848a9dbc3f06ea76c31ac6dff79bb3938ea5b915195ec079e91330880796240b5dc2053be819cacc23de59b58894675f4f49abc8c4983857c1582834ee8be7c52d7292df3c94ebbe2bab84b694012c70f986bde2732ac87fd802b266cd9da53ea96c767b3bab8fc307578a2bbe0804f93cb2af41940079c9e2aff86fcb605e9bc5b74630fb878f15d89e36ccecdf43eee3b7b59cd38e587bf52da2c529e25eaab57babca9b90ca6928f90f9db3c6ef2193e6b47752c6957101a050058de43c03408085280dc00b97e28f11bc47d3c1fbe6681029d6388fd7c0d92b132e0cf270cd985bb0f01eae99f91f9749507ee557959a80dace963417acba5af66448344a6db91604a1abb8c0928e458fccb8f1443050ebef79b18cd4832b20c4eb84ec161c91a778f7915a881eaf2e21514a9dbcc7d94d2bd47a2c85f4ecd7a9021a39ce6aa6bb7dd5aa8c8f092d95aa37427a153e1acc3c06fe8cac9b46321e8d3335e5fea68193e8ca80eec9a328e0dc964c84b3a4db7673251eae209587c4123adaeda592e898d62989869653fd2ee4a83cc95b95042e76e13bd32e1233dd4b9af989c7c5fa549e19eae90d499c448302654f435fe1f3e3fe39456f60b19be16c611a908bb265169dac345259b41671c10cb02dd52f3749b9629bb0f2feacd89b777cebf1f4818ebce734de93d7b1a475eff110b8ed984b27117068f18263ef2319e75618be38150f08ac6bfb0966cafd928f94925a814fae90252bbc3ebcd7f14c93fa12805024da401c049060011706ff18ecb791305152e2a5491943a779c69bafaf086a43ae44ce6aa7e0efc07784414c987e49a667e5bd78bf52299315268bbf12bf98ee770dee858d40b8f14450f40475b927372b702473727d28687ad0bf45d11785976488d2c959114d0623a31ccd526414fde9fec1eb84c4ff052c40efdd9dc7e18df3e64021841cec9bc334538a3972cc13800e0f7b0c59aae3495a6e891d3811f19128cbda05d6f1d1e739a360894d6c935e33af9b0926f3f2146207283108c628dc7714e6826a434235c6745bf102974a535e289a30e35abbd71c6afd46dc96df085b22614bbc2e5489f9be2e22b140141511ba2b90d79b0b5f9434a70676a301d0b8eb700b22370a7bbff0d9f41b39bb2619c322150da4ba31a136b0565800698a46b2cb620d89af139ed6851100bdf64b2456e94b27c935aba6d04b57924b31861d2b290fd69501384def425b3b49c224915a08130f72f64ccc9ea62b9d2457f0af5ded032139f124679fa0954e72576592aeee24488304d7621e2656d23d84cad04acd00445f5a89c77e3d67022f6996ec520cc36375c253b860d452d55f51d73c830381dd7c96b4e071bce346eed9a84a15da00b510ff25c32f789004cd139cd1b9541de8300737a7563d00d82355c46e2e7d91f67f214c143225219e597269f37716daf095460d7dfbea8bf5f9e1170de6659fda445c47095143543bdc9a3ede3d954fa66c384afe7f4231a705fb89596901fcedd5e396cf5a6ad4e5dcd53d662acb913f9251b1eb6b9c20a9fab30ccd1d4952186b828b023905eadd02c1ba0bc5982cb459ad191b1253a0c8d765f28553722e6b922ec3b7cba6ead07fcf647f9b6cefb2b2a5e62625976e7aa26d1e523254f75cea7547e4dd2d3c0aabe33ea7355e3cb021210bf313982baca5bf4ac1197f15d01dd90bf152520dfeff982b58000ac6047e63e475bcbd5fa6ad5a6dddd1fb00dac85ea3b3eaafaa7fcd59344002d19ab37ae6ab40988091f1141b9784eca1853e87cb9687aefc91b3b534c6a3c9f8f890df2dac39f595cd54ea57401ebab4ee156c00b0d94c83fe1f8f5ecdd8af2a68bf34b38672fd87c8347a4b74acaa3c1ed0e20adfacc92284b0146a8ba48248dc682fa94c2c72f1a4564fd4dd51bac9bc2a531035b7838fb3fe9431fe9183000d4536a72e1d3c87e413beb5468149280ce0bf918ce6737334eae263dd3a26a2430827a8161c1e7d8da7a13537841bac969689b574b478ee66bd09c5887ad087739085194ba94820903390eea3a691464171a5464aa374200f51387dc5ad6f21921ece7f6f6e5d7ee7085e17dc7f4e2b0b1f3544f5d0729de468fe4478e74e18ee09faeb1c1a9fea8be72e1f83ab94f87a8dd92d3399ff109081b747a95de0cfbaafa780c583644e8215807903c4841888157c509b456721873e78c96b532b5510d7df15fbaece8f5008419b5e8c48808ea50017a7f1e3649488417f9736936e9ad7afc6e0a9239a210a9ff720e13a317478ec5da644cc258a54202ed9cbddb1c4c6131a3c2d40f9c098ef803bd3e0ee2ad1dd3f4864bc3cfd1b9efb911b6b59fb39062441c9138d4f1cf2a380e99b4ec149ebbd3c08f51b59f67732d931e8636ef19bc48ac5e6aebae770fb3b0169a83db85f4b2049c2c3590ae75ef6d18b2377b9d09c46c27cb740871e76efa7dafaad7959f04fa41a82963e4cfbe5d6be5f3c75c5b126082648c6a7514a1014ced9b92e9a5f92689d598521088490d5f24ec7f95dae7e970a05e1fc42c37045ac5f1ed58b95a7dd70ffdd33a26e1ff7e1db91dbd8bd6e545fc1d4d34ef046e0faee82c38ab7ac10eb45bf0b1cd264ef96fdb92b395776221fe7478c49e22308171f2204e41cd6fecea5fcdfaf40898fbab91ed29dc87494a805c6c7ac22191883b1c08bcef550b9fd796398a0d6237db37e10c58d682f0685aefd3776119ae92d1846bf6db1f90867d54b6962e338f4c980437d478ef5f3f2c1083436b859fdec0502045de9330b9784f7c0ee811d2aa8cfb6850a07fa3d4c1a69c7bb11d057f52f9183faa5917e13594886a402bf57ce0c75a1c02ce05e8d771d9b0aa788ba9fee483452c4788bea545517ac611a98e93b25138668e4962795cd0bbe482613913bca3b974ec0cad2330e78c20bf44c363bb62cbe9079091dfe7981debd6f43e487f8c180e03ec029009810e3b45d9e3ddb5cdc663444a96d051498a268654484d7ff05e24ba2e999eccfbe383a7f1634a0943867d1c0683cd0bd553c8e453d155ae958e360504e9b91be396ebb147f57475a1c7589333a4dbae7b814080f05720d70c83051d39b00b77d2504ccb2f58ebdf7d4524579248842078e4985a0c9a108d629277b3182ab7267946ef64bcfcde6e1f8d9eba8988f739c780513216074d7b21cc12e8978e3c960bad2b223dec81998c154685e292f32ae961a15e6b1ef64d7c1ca4cd5e75542f0ca7b01757e7882766d1c0a5b785a8b9ba8b2d66846d7e3b8d41e6417e24365137592f35e6ffb71f96000723a9553b014ba09026c2bcca9a2c14e1795f6b60020e1e7737cea2a6d73f4a91bac3a83c5e0f031bb1e6d46487044f0a65afbc4d084088191a5a6f229c69febbba2cbedf0c3380dd716d5e1f44f13aac093056d9c770d91de854455073355c690e879d8474cae281e4d01d21fc5bf024a1067af46c7586675967aa1f68eb39e271c56972bd35c406d5e61365d0323979f6543ab3aec1e2725f6e260faa965214199363918e6b81c436878c306f9bb5e55a402a9d03906cb2e87c1ff2c03a696c6fd915f493e6ce2873aae6cc41db11122c102041adda908678f9878005650c4dcffb1c157599e9b12a62e2d869f4e7361c0d3b3993005f50adb32ae9ef0816fca0a001b93d1dfe57c0efef05a53110c62d642de5266516e41ce62662961716659c2cd36578eb41d47e7cff90b12cc3c028cf527a5afe63b58f2a8d98dad9759b53b4bfd5474827d6dadea7e3eb9b807dbc23d9de8b1f022252120ba4813d4cd53b277d0ee16a0d249edeadc59788e86a3edcba900ec5d6784baba537195e5df6daa6aab016d0a83205cc96fba901a83ab1be2e88fd24b45c67ae4eb225e72096a8aba38c02de0059ffb51dfc757e74934d7f9ce652bb612790c313dc76470a7ad486bd0e12f76fdf26dee60deadcca38602a0fdc7e440304f614d6aad1308b9f88d456f215ad736be47a08ccd3ec23e88fb4cb58ba3eefb936bf5a781737ff49440676e8c5c68ec036423dc0f835ff127603faaf494e683107c943e0841c041d00f98b546126e138f749efd060d2f3a72435536a72711cbab44f9eff5d6d1ca68cbfdec836a7bdf200e91d89b2c63a77674a29ad718f94e5641b1e883b5df742e8e738c440c36ba99aad06a1afb0c857f0ca5b9412e246fc31531638bf0cff2504c50c987c3672c46da871f976d698e7baf2888d64c9149142168ba019bc81dbce3ad3e2ebcb39c5a4c720c450d8cdfad03be09fdf55e42035b71bedb96c64ad64a882a04700eb7d398f3cd42baa7fc5d3201122416d669f98c24de2971b940baa132272df5226e36dd8440be4aab8053f913c244a1948daaf67e4025e7e540f02caa612e1f38383b62cc2ff1ae47c0d1af714b149d5dfb3a76c651773ad0fc393d3f4e0adcbd174dccef539d2cff830084bbc407406942d8540c936b699f1cbf580ba15501100b19be1a01e2da8d65495f638c542d40eb200c98eb547fc115d0ff49be8e773ba3a20f4474a2f758b54a8e13287a8edf8ac04608a1d70a982a7bd8ad1ed4ececa023feaab4951f480db301cc4a2d907e500ff6e10097afa4c1176d15d7cbb78897cc8b011d66e43c80adb998d833867052c1cb367e1b86df40d286d10321445d363551387f6da3fafcef02202c7ddbc0f3a5898bc0a59c2aedf95c50cbc7b36036d54877356b67e6d6822f00d0da770f95be7f6588530af60ade45d3eee1495166e992f4561a000b99f6a8b784505ab97ae5911eb0db2d618ffc30d33dd709ab1172307b2b370f46ff5cbd40f2c768bf9a177b43ca17cc094fceed0027080a396559ab64537c5ee89d8a7568e9ae9684859940f01d77395c8147c47c157c634744eb753e480a77d3e710b174a4faae41b1c002c99e2e9135c182d7ca24da997c2cefa401e8ea56b3e1448dce41f092586dae705dc1321f6587241547b3719402b4cf622d7abadb3fdbeeebe67d4a41f5c40730dc2492621835042692595f98012ef1f814d022408d69f101c570ee7aaaab65edd36374b0dbfbe41c15e320602d97821ff873eee9863b62b7298ac2e0debf60278eca732354d450a1ddd79020adabee08f83d65164896775b07d567662185a7effd6c5b39382be335e459db04990930712ae03debc783345d5faf07b5e8e91d39f5bedb9f4086af7fc19ebd0b9c1ba4d0699a79f2c466822cbefe828d3a38523831ad5f877329463a7a1db7b1596ecf18b5a75d237386d8cd19820890da978fa0fe03e110c44397193691e31ee39ec25bec365aca979ec35fcd2d0b1a55af9c354f50ea105e43ec8f3e4cb045087b223c99873579b52f242f63666376280e6e238593779c53daab77fac873194f53e0bb4f34fbb973765a2dc60cb4aa976014764d0db7df777147b2660123eaa9b9e3122c4ddeab76326bf0cb70838d60f35148845853414315a21d1a5f369102ee9e8d9d2652c2c179b184ba38048567382a2fec9e2afb922ff0756e2e85cbb5bcf8233f428cc17a4d35c9781aa206c1e63204440aac5ed21bf989bb42e9ee63fa73a584dfb7e6cd0c6fc52c55e361bfc644865bc3e0729b7982fc74e16d4d99bdd711eb2252144e9a7f4538f1091cce8aeb89759510f2e10cb331974f47b81305f0812d324eb6f303144c07b7b3f23577c39d61741b0b0b9fbb42f0f9bbaf82976a2f72e4c3a0563b78b3e151350ea4df4231b7cb53c51f375dde58df0d5759f0741ce8b18e176274340d950aa29de64a268c2fc607e8ccff2515b202469d883d3c9aebdb36b41204cb5402235c24627db127af164da4d1c93414d5ad43c3d8310138a29a6dc58a8936e81d6745256bc58ff8d578d86e99ec12a7846b43fdbc4d674928430ca53e7cb00a23086e804e64b3a52de3f41e93beee699e9bc9cd834638324a5bd4d777a989af58cec106eb97f89da37ffa6ef1d391683e0e5d3fca9390ae0237bcb1decf288da2f6c77a743368df59509e4179066de18b120ad0f086367d27ba6b8755c249918b8074187d450ced9273877946302095ee18508a853318ccd92c2f29e8bbad9e65c3523a565b2d8b3d190f3e22011f64d9df2be34fa6f82b0f2b50000b639132a1081dd0f112352cd50e44a38940a8b4576db94e8dfee0938979489b2dbdb8361529f7c5933d041024a64a4141563a299d730a053e7a90ce6486a875719b890a70a96a7c1492a14e5904f043ccad0728dc5ba06d9b9cebfbc4c889e0c9a5007ebc3330d61db57bdd9ae4c68cd85ddc5a54c59856e0fb8c650549b5efd6eb34ddb21f974531420614d37a0bd82e088c482e90b905f93345dfe0a262cc686f7ed1c1a3e435288f7ca83e11a54f1bef177a61cb6e3b209d035803f55dc12b72c2ec845fa68fe8c1ede41f929eaf05cc10ab87bb5ea417807d3d619e92ce189057e2a3d0f9ab7d6e2c559ed96d0669b7f5c618c2cd4c894613cdb52ba9bc920855dd7eb6c36a5d19df5fd4674093402aa0cc933786cf00f65530d04131f3370ddd41ce85b2c8d391df8edc41e76705091f6208d3e2e272e69fc650852d858444981e632414538d7bfa2d2583d43b18f65597c4e048a72e6f7244da34511b046350a2148f75901edb030ed101c5554464936e360b36cb5fac82e96dd79c7153645c999ddd838c29d18194a859c19b6dd23fda4b85746855ee2cf7e851b0dc3a334fc5a5ed8c2ed7b2553a210815438029966dc962ebfc3c5597b6dba30164e7743e4bdb46de2bb4320582d630c4988220baa6b75dd2fc1d0fe73723c17ec9907a3a9d4488b19f51b68e4989abbcc4355228e3e7f009414462b77c463f922c9b441c80da0ff6fd1bee7ee7735380bf98bcd5305e88fc36ab30b95bbdaf26bf1c26e0f8cc1316f1a5c5643662a0411b890c0dd27b262180f761aef31baec31250b4064043a969f34b8d0fe1ab393b0cd8b2dc8a98053fde5a7ec543c86e647668293f74a673c33b62fb24f3f70a1eca9a49a80fac956a53871284dc7a0279b87844c216015cb9ecf2d2f5b3c019524cff8fa14e06ab0127713a047b71c124d49627a4fc08a9979c73acac82a09b797d700a0b2609400bd3c9ea860360ffbaa0b69186b03dc31dcb336ddc10c69e1c0ade9f9eb65687c06ba6506a63082dd3e8aab31db9d2cb38568719513c15cbffeec579aeed0c17aa62892860358bba14e9b21d639289fa7d586086bc0a6068d5874c26d54ea84f1b02b07ffd623c3e24f01e78894fa1b9acbde3428405edc7c07dc8a4a234d71280a00e1cb631902dd51bf0913bfbe02d05fc674c5a4ec9050c952fa9f66edfb373464f6c553b6e0949be3b7a86a570d883d5713e118a92273f8804d4fcc4c8148e061448feff2d638e20d69949ebf9a4d40692f2e25b9820afd7cd069fdf0c44347e4065507f3fb02452ca8885bed60814fbdf45d2b47a76eeae266390cbd842fb21b88e2f0a4f63371dc8d6aecc15978f3c3e911310f2612ec3b173d265f8a127e29567918d89594845ced710c21b20aca48cd416df207922de1316ee397b863b42b636fde54be289cc4d5ee299a06c3157c3ea224007b2b4ca55eed70972ed6c91dc414c64bff195d3f5c02be749713d12595b2208fc71c502e16b7db1d1c0af47ceb5c43875b674382aff312e766ea4d983473558edc6a4fc8f3a646d7a81a64c03c04d7420587de9179613ea23b315e1b9117b9a3d81db1a92e6947268ed09da3cc0356be351404b72948f644766ccac2b3513f2863487a2dbfb61968bc7f5393d2e53c8cb1aaceb20cd3bfe9c6d3c4e1a07223eca38f1a7e0b0a2d7f540614d4b44d48ec77477b6499024a7237bc333679d53aa81c98328b262a83f50219cab58d97434e1a77bf9e53f95cc6a7ecc160881ed4eed5ae44794b667f668265bef0ea6bba2d008a0f02f16d7efcd474411ab3e7414f29975ffc2b1e1f24b7b01d54a16c41784b2984ebb0866d8d7109eb26b4f2a9f55b53f421401894e5fa4274aefe2d40bab4560026f41e070b75004c88c860b05ee1fa1e0ad0dbf8578960d5e10573b4e0b438222bad45b9a301c045fe8ff3db6e3e1533f49c75a4f1d504bddd897962902808de2f2620fae882748203f3a037f03d073602721993e74f3b536d9e130b0b3b477cb1e4f74b6914846ecfb4b570ffcb0c0ef9b5a85f966e35159179db91653db94239684e7119e867e0e029d6a00326eaf248a4c860c86905d0aef9bef211758261bcd92f01e48717a98a306a697f2db55016672383b0f31916f9abbece092effc310023b5fb2464736d2ea669801a0d1b42e8463dfc42a60fb98aa02831363cd275ad32428598e2602634a71ccc99d7038a4c4981e8d42653111ca4c814f7219b803149af0a1c6e66efb55b1ff73f445f3ff21f989a89e994e1865b0db701b4e142f830b5015e9e6fe17bd46d2b4f8484627752e5056e4da83dfdd68918f0900e51c628d2a94a74e91b68713c8cde826bbfc505d237e7bd327dc9c4ee778b2f3911281cb152e3155c528f904109a861de4e02ef91823f0662632e015ee1df2292dbbea042c9e9e7cea5ffd753aad0bedda57bc2842fcac4877ef17db83a8aabbc01f8b05a9976bfdd45da9b3ddb4abb668739afc75ebf80a419c46257d35cae0eb8c7803a50a9d4c9c5146d2bcbce95791b0df8dc11c0d855ea42021a4d6f7c3fb537aa3d2723e433667fc570c931c6f8baa69c0d8ad6d3e5706c9c0d02bbcad3ca53b4fc0e4bacd41f42978ec186d0f39c5a2be0da14abba48bbc4acd30ca2467616da203ea5a47a1be40d81d125bade274ae87a8b93fab264be4f5d020f6f51444e021fdcec770fdebdb659256657f89b2f625978b7b5975a5ab2724fadee8c30fd058aefd8bb2fe3e483da2d077336f3de635a43edb63834e30cef5323d8ac4bc806038f7e95965b6440b08d1dce65221890ab893178942c48f9c252efbc6c90ac5df050f8d1fa9a65168f47eda231b0968dd3c4de7f08dda2d512bc276e6eabf5bbcb27dfdd7b1ca8dec5c394b912c67a694b169d9f97bba40f7aeb62a304e562b6ea344590b32174f8ef505a7e467fd0efe282c8cb484e093ff490b715a0ea6a35d47ae852a2a23c7455fb71a636ff431ea824f21072b3993868d48c95e48168c877a999ab670de4a7af45996e6deeb08713bb3c96d66eab6826eba1bce3ca183e703a5f566a27b5836182e95ac935b58ce11153e96408301b178b57ef4cf6837c74b447e6a93c980d7ce804ae8b35c36b2788dc9ffcc8157406532cca8c88b9420bf69798c8d0ca3a5bec1f786b9624335d66fd24e8a11b9361c293f70b612b89015a0cd6149c5d0ca8addf4c1c6fb1d8795bf634032e602723a0ac80021b99caca84b9d5f29c9dc0a4c8b5c9d04ebd32c5919969de651108b4d1058f08ca325b1aaf432871de5a94e61d830a7d7eaddb8bc499699255e9fadbc788142bd5675bd52d2a38093e04ff7d9df7e98bb12d40b8737a8ebb8dc90ea27a8d70860b3daa368ff5d43f1fb363b312e7c2f3f81d66a452e57967ec0db06d69675aa40c0dad6d69f4a59b6d451e0b3e76149a6a6838ae452a822b5cf31d158fd4d1d576a61841c9060149bf507e9b292f1c9378ad1cc3edfb0e9fa1c638e28d52b6c3ab04374f7cc7b8fa026fa5f2cb8ab26efb1cd160c1b011d1ba145453d0054b6af657a7d7f89e34baccb5caeb925b1a0dc893987ad268cedb840582affe6778447564672919ee0e3f7775f09a94b7d4057af63ea5f6a9a905a961c5325b8471ef3837714c3d806ced7b0f2a1cbb3456ae3555fa4cdc6613d1b92f6813ccdbd74ebacb700f28d47adfba169c966bd38ff16bb0a474d8fc3aa0db9362ceb644306e02e1a454517608f32ddd2562870f41db6a0f3c653f7229796d7fee65fe3344b21557ab4bc8f97d67a3a7007edd35e521afd7bff6b0ca9f6c1bd9915062906f4363a667d7f8c7c1d816c28e95dd5bfe4711b3e23e18eb8e01c49f8a945be027b746a41540219f3990c93fd93565730e1bb24820bf35e69102dc1c3e6bb64bfa2c6d38e033b8c2f00cf91cc952fb51fcb9a4f5f8fef480c95250bf73f7d9e86e5ecc2fd1cceaa742fcc0291ee2463efb7c430bd2e20639c9d10317468a4e39c371dc9584fec40d4b8b7732a676eb082e842a4edc806822037f7f9702f1730a22b4ce7471c3688f3086cc604c862d94e382ac730f71a30a179e1d0b17eae779a5e12987936322e537b3e18b1f639077b3604957a0ff683d171037cea8d9c2b3318944152e0cbe951bfec1be4f7513fb3ea817da79ccb0342056d20c71496788e4da76ab8901161aadb65d104e5baa872191c71b01f0a77ca82a3008816f1e8bce41b79ec9548140ab09b8a1dd01fd3910471068d29f20e925836d7c7669de16c5e71137ac344f2dfc0650484a073f0ffd07edeaa4cff6abc93ea1027722cd0966706890066b6933260a2509a01a0a333e5a87de1f9da78b5eff132dd9f985cde183907efe518766e6295048cd8f1ba42cd6e14ff665cd7736da7c8bb21fd4c62eb85d26d2a637c50bde7a0f40a905542e59de7635c4f18e0ee1985050b1f151846eb0d771ae5562e0b9552ba4277c52cf0190a5d2d2d9e7987221807e4214dee882275c2a9322c851d124d1263b1191c305d0803a09db7198723c959144767deb6a3794f1fe8619f1db508fa1bed520c4e09e96d369e8a4eacfd8f75ccd8fb311366a64f44bb655a6bdcaccd38a7a2fa3e73f0a19462e2fe526e129c1bb7f3c9a39b170796284b53ebacab11780ce846899c6255d3b71cbb10ef41d469ea26d058e6d551897c65fb8d5f6e77a2a0007872b94d9619c73937bda25c942bbb27eeb6bd3deaeae13225293ac314032529b14cb50e832216ab2b7ab72a1382695b0303c0326ec4a40c2835d99d66463eeed6a71ed2d00ba242fc947448ebbd752986f05420db086f511952e6aee9ff5cd57a7d4e5aedc391ee91b52d94885d88504dfb1c54694d065eb5717db20ff7593570729158854984681f1cf7a55f17770a7782c79b44aa82a9a3084d0b7a062018d1d4ca807d03adda3f5a82de575d20f09a3036e13209031d97ea2dbfb0af02a18e1b054f84ca3d3b32c1803b652bdd8a73141ca57734571545304e85025e0ed98eb5874727cb70d7c1315f9011eeb8551f82bba4705ebc5c61f4bf1e2513fb9563d6481765f3e1c30fd1a79b4c00c3010014cd320321e656eee3cb71f46bc111be719e0ed69f3004c120df5cbf475a5e6ea8b5f800e53bf808b1252734d52ba064f806b94cde3bfedab5ecbdb608d0802a5b5c747d7d88269d69e0e39b0c3c0af1028ddaca0ca4a0e3ebd613e5b64ebc1b42e9469afe0d277353269854de1acf9bd904b192e32714f23a89aa1735dfe4796250752d34cbd4e451939b8d4e12954ad079a83453792d281a4afe803084e5f2202ed1c2a758996ddf1e4f48274509a6fbea6522910f1521e8db28b1b1eccc18e0e03b61ca602ad564da8ed95048e0f9c41b2208bc0a75766005c0cd6842cc79c55c076d6d83cd9dc26475dbd092ae1909ffd2549f15c53745c87be6094ecb14db53c426087c7c7275b67f1a6c08a75b290de7a563b5530e6d3cbc3af2496797553af4430dac1fb68562a5cc979fb92bd7a7e842c80919d125468caca12e8bd735a36b01a92b0e873276431546247a7aeb3ee5ea286dbc150dc0e72ecaa5c6ff7688528a37e636e51bffa5a972b7b73cfe53f51b2ee3cd5bbdc0956f8ede4f5e62a67a522b44055a65ba05e318a93a47717be62a2512b6d83aaac5552bd0420dcc8c770197309f8fe431e90d438358f78e4f2dcfafa65ff9e008a677949dbcf365bf625268c359184bbe972ced0aac8ff6c6dc56ed3db55b5942d6b68cd8606e414228aad6ba6736186e1d5fa7a6849f950b38533395cb80d38566073ea60d83dee7874f99a3a12beee969f13478c78e4c1e67309496bac431c17bc728350cd54480db792eeb2bcefd78c64535cf1820e8bd559499c6b51338e5b44ceb0859d8587fbb3ce43cf46527afa0ba9bacdea0cdaac6cf3cfe9b9c8f198e2dbcb520318d65e479a0d65dbd6513e68ff31610fc7af27c2d5e1d9d86264dd1f315ce573d47961a7fb4708640996d6a5412662c6119e09312f9a3ce9a9f2c6db73a75f7212dd34b41a046a5747ae5d3050b29a749a54b3e2355a96d80a7b8385689984d322de44c6228299c07fc3b3685ff37e0d7f524d273f6c44257601ebaae103c1b904796b41d2f36826c5d75325e1e9852a3c0fd53a8a30886864b5305be7d75a4208219b10b2b7dc3b520b580a580a3f2d1e498694d8706af140226401369a5a890d256e1a3ce01b792ab111c41536623002bfe4a9c446cd026b3c4d0942690d2086b0168d3032a5bfb4a66ef9c1e5e96e5bb0b03e4a6be420524a94292dca941ad12892771a4daa428f4ea353b664c99ef76b5bf75ed1b3b56bcbdc7d22b1a3bb5c12a16c3755de60793b0d47de94480389bc1dab51cb9b1a4ae4eddf92021a6ac40ae034b3a12a3320d75fa65cd1e0e16987dcfa66d7a33705665011832a6230431329505451c4124c58b850059325620081356040c28b286ae0a288690318522084173ca4114510959f29058868062fa0e20534cc40c55443092e9ac258c2218a18c860c40f6910b1c146cd48104433fca471a436450d3308409e4b4c2411833058a0b1d83da547f614e9f7de7b8d8cecbdf6b64850e48c2bbc0062630723b346218d2b62204da1250d2a663d456e2228728bb95b363ac4fae28e8e3191418e22061c9071e53ec9f6ad328eb2fd9764fb98195964fb9a20b2bdcd1968646b73907282187a73c918bac115b92f838ba0428c2c9818410391920c5c7cd124c90554d83802898c9e23f5926e40658c2d180a929fcd25eea84dc070b060a6050663201903295b2de20e1bab44b9811023f796bb616861b62a180e2bc45092c588418c2db2fd9d8e08a38858112bbc408a922c6c60e4949384091cb268814395a02a440f4962984696aec41d953a319bb026c0c0018c2db22ce53eeb288862f4840a68a0008a174346a66461c10b286ad070a5186ac385f78bb8a35218186589e10b2a70164cbbd4832f94647b710f5b90f878d81a651a6c87d964c01299e641b6b4698fbbc8f62d2f76c8f6f7628b6c5f638316b2bd8d0d9ac8f6385fac90ed67d351b677c1e18914aa8928f7fb296b2d0f53ac92aeb6e70cc51dfdda5443ae17c51dd58600061afce460c50c78709ad91f6a8862c9152b9aceb05d083109baa933a98bee5a947bc805b92d15fa72f7c5f51e2be1804ce380e681124c64da9ca2851a40ccec31961eb2fdb144c9f6312c6564fb9a2d5690ed6db678e2c2055cb091edbd208ac0940b0cd361694a195b60a0818c99050d901c1d8951030b55ba0ca21f176e6dc5719750d2c207e31813a735a434b1c4c9961a7298c1a48614358a78e2e246b1831430a41dc43aa02a55077dc58bdc743ee97045b687400bb60c5757a8e098174c4f826ab5dae8a4f38c8c72ac6440031f1841adca8034fd3801cda7a0da0f505006688dfefcf8d44670efdd7bad6440031f18c16bac6440031f1881d0d61d144439add33ac6edf537cfff681de356ce7fa7d64c1905aa34b36985499e47792a613145666292a718792a5979926db8536539f4839a812069910312255a92aeb0a2ca0782d48842851943ecb00408f4a832303d4881aa6c03f4f443142828534abf044481681015a2a743414b8080b8df92676cbdbcb42b79e88c7bab67c69563aca6d250fa1d2143688d125da679ec64d4b925612b752ccf37b3ef997577ff47db9267fc6c6bd9eefe8feeee4a8330f0e77d880ad976c0e8037cf8b024326ea7331e3a9bcd87e4361fd4b179649efacca0393437cb7d1acd20a03a9f439eef21cf0b91a750eea13c83b64f8e1c6bf9c190cf8c5ac2efa0169aefa1f98d6c208eeca0940d98d640b381f27c035519f89c579a1e7476f18c5677ba6dd6ce3ef8cd7b64ff549a793a746710555602d31aa881b620aa5ceb6c8a20c4504df89906cd53a1793a344f89e6a738829dd1a04a331f9baf99b799c769a2ae4333d4c092671a796691465306537d1fde6cf461896cb7e5383f67f5f35bc943c511c6c6f43fe83bf61f93acb131c2e191f363c688c0b5862ca2e4f9449e4a4c5f643065d42c4c1d14a9635b9579dfdeb5da3f54cc180bc9e69594a9ca6ed9464df3868a7e62c6b66f65aa064f9c889a92a82187155cd0612505201be4708616201f4ca345dbefb6f511aa8c2e9a533cc9928588241facb0418b2ed6a8418617d05005ca6c8b6d64748c75c3f66ec1d4b1bd8b0a60035c24bbdf6874cbb66ddb899894399566eb72493765d2b4493f69d24f585a60d60f5e7981576760990a300a37e74b49561a18dca932aa65d26cdfd0702a92b7370b79fb469d78e8ec1eb5840f4483a6acdb90820a2ba0d062ca9629fb2089264846656cc1c3123d7a66b7045269b6afb4604a46eb78da9e2fc8529ab9eb713fcec61cef5ec943673d339cde0ea4ca6e59fb66a38f3be2d92d477bdc634417407c01c68f134aba984b2b40038a16941c215465b6dd9217cff8f68eeca0a6631ba7d3b11ca71905137885a8c494d4435bcd94cd27bce8e249ad090717a2986da74f53d62344c41841b071a40c2c6dccb6776dca884c59a24254248b2c636ccfd9be49e9aaedaabd220b2709d8d7d3a6141b0f3ab61d6cd28976138e367d7a0bb58e766a198b680b1349f4cf93bcbd9168996d4b4da0a0cbdb5c92c2246fefa19ded69eb10b82439e42e716eaee07e23ad5c006d6ec053a94a53a67de63365ca41cbe66cbebb1ce7ecc66a6cca5a019c66f34c8038b6f53063dd67f7397fe75dc81602426d52c27756a869ba30876fa3182c300d8644c7ba87654be9180d6725dc75f70d680bea5a4cef70f72eb2b3ee7d346f9092e8681923c2dd719aeb1feff72d34f422aad56a459ee040d432d7acbe8b9ee4fa46a265af4a5560c8f57dd43ac41a34c9f58dd4498dadb8432c439216e6f01b490b333ecd6614eaa892b6fd3b26514fa58e0fa6487a9cc2a98bb2e207dbc1e35491f4be91337f60d86090d0e28eb5aaba9ca3b522b1595b6db5d5565b6db5d5566ba72c00086cbf59fb6aabadb6da6aabadb6da6aeb5dacadb6da4a2d053aa3988027d02a1257cb931cc3779e195c2204858ef5f789a20b12fc96d2b226a3699a568d50590f4169fadf77e3c6eb559604200002109069b566936bad89a801fad6f22467163204054abf6f098bd3f785e1c66de1b7fdcb613b15c0094cab35244d742b92d661bfef94ce497fe79c737e9fd7fd23b753ef7a5ef720619e3f1d9bdfe62dd94b98b81f5858e2cad350875df660827b50542c02f6c91811e6deead8fcd1b1e467862deeb0242d449d66c3b0a4d57b473dbc281e755024fb28b1516297f6381524efebf73ed8a4cd54f4c890c7146156e143153ee41b24ccf7364ff1aa7a30c1fd93b7d3d4b7b20713dcb56a85985a468d264dcba8d0c6a4653c346903a2481b103dda8068d1063464e3a342b201d9290b0042283bb52c4756639fb42c9c34fda62626a6a4a4a323231b1b958a06cb342b44b3425dab344d4d4e4e3f19a7b91aaaaf13b53969630f3aeb3e9d32ce961ca1ceba322b812bf881f58105234b640e04729b39a86ad656c0d54f1c35f935b5849d2778ce5845f0aa0d4caba101c2f42def1e470621737b27b9149c92c87dbbbe9f248dccb3d63a7fee7d5a0621739fe68534c058c10c288e52c0c18739058716b6c8010b0b53c05053657336b93083c9912d5b38b970829e247ef00122cb132c54a860464ff382082d8a40c50970498e3090295b59b142040d425dfcfccce877a68c8429829892948216d69062462f644897f40e594b254a9e3326031b9c866062056a3859401a2918818187264b3398d11b60ded09e17648921ca103218f9a101ae41152c96ec9044193acce8594930ed3640055a646a254bd3cc0fac90b15ac3d68b9bd0618a212a3ec8d04213336b81c033d36e154a577ef254aa028b943c95b2909295ae48c92aa52b48e44efdacacd01645e09208653a6f7ffb81fd462b0f115c53b85841a63548acc55b5336e0f7557d581f87fd11ca55d646b587aa8c9bb68963ba401de4d3b15a9b5dad634e55d6445d94ab53b661aab2ae4c3e9986b32d1ba98daaaca934a0064ceb6ab991c2b0c5bd722aebe2656b4fa7ac55714c13d666d2d45f3c5b360688013795d651a930f922d777a5a9effe5c6847489c4952aeef6a177fc0016d7b909994db3b6e99772f85d99c9dd055e20a2d4e793ef468ffd8579266243fd4a76757605a375095d12da5cf094d450af5042f4e62565089e2c6d26de49c5d72ec419e751f325fb50e7372e631e4bbc37cc41c00251199c7dc923e602fdf640fd8cb92081422e4618fbd04906b99abdd19bbb8f10348ad1c705039c8d56eae99a3d6ee9f39ea8aa4519a7ad618b95e080af5435a0633aba7b52c66f514493d05aaa74b846a799cfe4a728746f9eeecd8908e5516eb2b56b9f38033f0b4f7f69620dc7765cecc4798b39972eccefa8ccc5727429663f799c3fe974464660ebbce4c39761fbdcfc0ae23f398cb9463579e608208347727ecb8cf91f9e895e3ea3e589f298940599d751fabcf7c66f598af3e6720e8c95c8e8fcff8d67d5e87b132e44e1492c69030127c21e76cce46d2e52f125f4582779137de22538721516791e25764f8314714672f1872ce5874b6e2545548a5357c83a442b5ee549a6a8df0abe7f64b0dc089e356998f771f15ee8c5e053c133f5f3313af029ea19688d892e715792e1181822a9391392d9663601a06fbf87910274b95cddc1e88902ac3b7a7b52a6bbddc5a1afd61ddfe0253f0931376d0a18ed9e7a0dee40873e62373d867c839937948c24ec51d638f9e99f8117a6622ece265ae438215a4a2223311f61992ce9ac878d4532411283ae3512712f3d7d8dd87eaaffb588db7f5b16e647b10670cbcd5ad9e800a0f0bbb306fe6b833873dce0cb8df9f59270042411cd566b06fc7690bcc1c562449a034f6a8491340436505d0e6956cbdd2f3680d698908156096645186cb521424d99efe0059d1fb1473668ed3df0ce9915f4db663e076027b933b1dbb33d851e40f9ea12e923e2ad4fce019aca4f60f3803f74fa8f74ca8f74a1066e6feca40b8dfe32d7364646007414fde4cc8f171bdf5b1fb0fd55fffb13aea206ce63d3319f1b0eb8887bd1e56f240992979c68797798f37de6bbf632fc41e059ed631adf0b1a26604a84686e481a2331e7699b187f899eb889f2979a0dccb943c31e558affaebe26fa9131e56f28ce558cbb12b7ba8febaceeaa8af8e7af8397b91739642bdc8d45da4cb5b243e8b04ff42def8147bd0bc91638e28868721e7ece522e7ac45ce1947672cb2a736037fc3e53875948ff8909cf5859c3390045269ec512426698d02a5481293739612c9390b7b6a3f2a8dbd126cd341c71e3005d3d36a88babe51c40b401347d334dd41678ead77d018300d4706000c340c80dcb701c0bc99590a4cc3644dc7ca0e3ad6b7e9584dee9a571a6e1bc771560ab0bd703bf8aedcc0edb7275fd23b47ce8b64f84af6b98724f638aee4c06deb683584ce54fc6ead09f2bd477ee7485a4e77ef5d3986407fbf5dec5969b8ed21392b798e3b47d27632cd3e482b5fee7bd75f9246248479cf2b3ff2d64ade202d3045f39daf1e35e020adcc01eedd7df7203153e0ee387d5f696e49c3f97e7af74e6bb14c8ebbf74b72802bc7f1bb4ebd789d7e78ee349ac7af0ceffdde1fa917cb598ff4c3f2bb258dbb0868beb71d10f78277f3ecb59dddaa052db6b972ade376b7d2d0aa22b3adadd6bd96cc1cb041c8bccd8ab2e728ed2064deca9e59b7e07c5c22ddef491eef448cdc7ba577ef73c673efdd4bf6401933c7711cd706d8dd7799347d4a3d286d4eebe0abd14c2d10b896344cf2702762643b578e3eba73e74a22dcbb12ca38e34a5c69b6f2b61e3352e2ec665944015892f2444b4755646e559a9610add95334d29051aedb2767635530a5d95c7b6ed861876b73c7dc64ea26ee40364ad4f5a4add56a23f5134776066d6898d529d32121b00b3dfb3aa9c55d80ab24f3b729cf773528cf73f39bad497a9504d3cf393b2d4070da22dad435a8f6917ddae8d0fc4a09ed66eb79285ab7b0d5da5aabad486c79a3546bad30d45aab9230c6b0b6d6da84adad961cabb5b55630b0b5d59673e6b036098b54294dca9444028195e7ca056ccb1b1aa8606bb5d6da5acac81004d46d40416200d92cd60b6b5b5f4c7a8500dbcb20b502d37be54d12a6f77267fa642b757a5ad2479bcd6fa34c691fc9dc808380ba0d28c809a83655a6cb55a6daa4a532d9224be47596c816d9c012752ddf0c7e6125c7be976f066bb9fe476c7581ebb75abe1bd7791e8ade1780b57bce39292d4fe6eeeed4f682cd75006fb53e80dcef6a699ef3a666be9c3736a736589fb36db41b65cbaabad356598f49d3b765ce44da38da8dca41655bb7a61655cb1c9ac31d01d2288e8e4d4a43dac769b2d5b16e2d40109cacdc076958e6aecd2a1ba79a4b51ab65c91d0018f6b6680c281217769db8c3bec3d13aa8e53aba6defb66dabdbb67995eb3eeb64db3630dc388eebacb5db693dadd65a5b4bc012b336666336e67de007ceb738f183cf48c8068a49403045bb6e3bc22667be1ffdbe6f6edda5a5dd9566a714bc1d08894fc7b61acf109e9addc2e6c41df48702ddd0deeed35ad9d27a4b865baa2967bda299a3cb900069605cc341ac26b66ddb56eb563e0ddc52a98169aee026401af393005ae02e376a8079570d07199cf325138eb070e6b5e9371afdcc4d863344ba43b0f9d21cce1cdd22c890e18cf841e7f0667002a0014001b0a1683d345770c7aa701012000d02a01181285bb61ead07c74c7a7725f769d368fb1541e8ecbdb7ee23c519e30ef2681d2e40a6748981b2235bca47f69135e2689d4b0c949c57d2db753966ae6236b66db12db66db12db6c50c306190fbdd4c4c5909581a8a12b0c462b1d8056f189302d74fd00b71e8e4deb75ab5e9f584cc9bef0427c0f335cfa5224ca85145372b077e558d162c1509e2e3b164e83b037f792e15d9010c036f792e151122a14850ebda392f5eaadd20d35a9bd24b98a25e1388c3189242150935260f471aad97300513b670a8aa216e85b8a62ed58a3e8bc350a50489a69952782899d23433d3f08e5bc39d1097899a0f9916825ce0559e4b3519b27705db3c976a2f645a18aa623854380ca39862c40909db430b2950b20d271bea3093aad2b19ad4b1fad813e680e0308169a9a65453ebb059702a6531c1487906895c3f8344a760265d41830a28ce3083a88589c4e4872733521002882266f5a9a454951453eba0a59ac60f6aae877dbe7bc2fdae9b9cb94b15e53e2dd57451665cd60c92a8383205183fb4f15a010b6c3882490b47c430ab35d594eb534d29a7d413aed5cf184d01d6d035033c853405668e16326524605a5a620591141baaccba8789144714e1e4c5143f3dcc1a3f19a366840b9c985031eba9c61843187183114450ba98dd582c46274dd392023347ef8069348f21605a8e21d431843e3ded2175cea64d76a694492cd707516dd936071da375563aeb4beeb1b4c600d25a6edbc69134eebd9d66df75d7d4cbf560eaa5d6b6e28e79929bb30f90c4a939ca21dddc04aed6a290b96ddbb6addf598e0c12be1e40093e80124cbfddbb71752bad9d5f0de03c29a3d1a64aef290e4a9750da39e1d8b65a6be598549f8efdcc5a7301cfd3ea36e9d3d3d3369dec1795e328ddb6d37aba595b4f376b6b6f1cdd38bb6ddb9cb5d6bacd6ddbe6acb5d66d6ed65a6badedb81813783bdd408e136578ad957b8785324dd9ad347d3ae7e704a27190fbdb019060fa4f9ad88fe638ee40b27d259afdd3b25b7731056aaee58d970e64fb4d9a1b1ec8f695db4490edaba55bb7d949a9ad96d2396bdd388ee3388e231be887e3388ed63faf8e2981ebbc28a63070153658b411839bbae0cb5585177337545d8c691b2c50d54682d48610eba98de4e74c24c7ee708a3a6b6d7d77b024c5b3c8f02fd437720418b2751609e3b5605c249da9c8913beb73f6225f57dd87eb2cd755ae1399f9eb73d6913e582759afa40fd5affa59273273d5cb76d55a6badb5d65a6badb5d6daaeda96b759fb97bdcadacfb6ddc6cd5a6bed2912a025414276fb762a8dfd467eae373944a5fa4be5e42a77769a3a1066ae20cc71fbebaacb90e376d7599fe2e895392d98e374479a70cbb13b09afab4e82ebac6fe4d8953d5e575dc775d6e7cc1543ba1c46e2af60280c8b9c2a72b3d65a6b838676acc542ad9eae6f4021b22d8a218d5975ebad3164bd882e1815a5f6da6bafbd3012f5d28a7948b65a171fd382c5b4a818de8d6ed75e2a86d68edff85927ae53d7c3f062e8baf776654e4ceb0033070e02c29a9b5c51311fffa3759977392ff2c788e353725caf1619431281e2edd071bd35def55beab40e2b795e6f1da7c5b75a9fe20e9d51bc57eadc9a2d79f3cbac0122a406a4eab97de30891f751efa3290a44475a8e3dbe7bd7f9ee9dde2b79a0d052c7bbe79de7c6bf72a43d9f479f725436f92c0f1453ffc2a17b1a2d626a0ba457a7cd24282e679173a6ba47ba7c9fcbbfab3e97b35e542ec7e9559360e6a825a034f5376ecca79af648309facddb6ba7d8a39ab772b72c84652295d4d950d994fd3dacf3bcd836e8240f309f6db552e9fe2c89539dfe7bd943ee1c1ab481e282ff329a8366fba211d38d35af8fa8861099401fd936b8fefaaeb7c57bd943c373e9792077bbfdfbd5bd003490a54a91025ba4517a77ab6c631dccfe57ad154cba26250e36b9582b960eebddef5ae77bd97bf588f919191794a061503fb9842b95edea7e77931dff5eea13ed7eb5ecfabf9fc00d5fc6862d341524dcc17f3d7ebae57ccbd328f713d86c4e9eff36e8dcc636ceec5b7753df05de8eaba4ff18221d895b763dd71fabbd77391a3375dd7f35ea48b8c89f9ebf58a296764fe7a8cab1cbf72ec1173d77dc8bc1e8371aaf779f7f3e6ec75cbd0f5c27f912f30aa540a05a3fa7c61953ea9a356287c4395727911bf5e25d1350a25368cca63cdb45caf98c356dd6ddbb66d8b7a8b147f12df457a24cc5b24ebce5ce4d8275dff7db43e53129979eb2f8940d19979eb447ed7e70c6c94c87d8a965e7a61dc69b0eeb873b75162d7799e1703c67860d7914ede47bdfcf1a34beabaaeecdeddd2849caf1c7bfcaeffb8eb3f66cad66f95f140d199b9cc6fc923f399df83540c7ff23a3f59f240f1ce13f397f75ea933731e99cf94778a73e6882133a822e76c84168cbcb122431789512891ce582a20426a1488d5e3b50b0bf5d6596b6c6aaca63e565b15b7eaed8bc38edd0b6c584af8712b4dfd1664e72a81d4aaa9698118532220a91d31551291797814918b6107fd3207fb0829e63c563019f2b5c5520d15d1a4bc04d32c96a92d906e82c5ccb4388248c68c177fe4f5f064cc4ccd0110606fe612a55250478213869850336fac8cd6501314e4057942414d8688a2206124e508a97ed4db2921c89e36996aaa8c0605d504d504d920db759dbd3d41e6ef5c0f2aaa75567a7485e6cdcdb57594d0b12adba934d58323782ba13e4b778eb9cc7fc03ef316737e0f49d08c0c4a09a64b3a06d49d4691e4f88c7fcd99e376acc5b0cc89f9087316531281a2f37a7822e3612591d7c323b88e174fc248c22bb5b9c8d45b24ea8504af5aad483a7d7c5cee93ba781f7c1f540d88109111d250d15152d04e0941930923dd7eb10138715c974bc4f9f5d2aebb9e8654d918a258ab8b439ea66c4876cbb1475bac6b05e9ebae8faf87a4cb75f12fd7c7eee5c2c12a65ac9d4db6e6f303b484895013a21d21483955e681071e783073d46a573387aa739160e6a82eb204e2133532e4e97bfa7c7e809630116a3244341ea7bd215290c237497fc28be25d22ad85e590214ff6d7febe5e2e98b7eec33aea606cdea07215ef22c3bf8ee09a7bc03efe07ac9c95662c47fbf173f663569aaebc76bc0ff16349048a8eebe189bcc4fb08fffaab24e20a3f672fe46cb99cb5cac9a9010911fd040d150df9a1f38474db8507312c6daa581e1cc239053b35da911152656387ef87e1654a1ed8c3f03c3117cbb13fc5900eb566725e6460abd710c6351e25350d113de9d8d096b63bfd24c33a6b35f3909439157788a2ccc5cf88325f4d71ec66643e67f6a67bfdcd1295a3431c66dab80e80d0d805121526a6a69d2aa34b96d422355aabd92c60ca680f93a67ec86668e81bfa8886a214194999824425892987756f8745d2a18fa464784d36554687e8d0d010c76ddc419879bb4deb08d2b12a132225cfa61364727c7c5c87392843fe31e4ea3092f519f227878e38a279d30dd122ae145f5e477c59f240e14e963cab8be74a9df02f79580fc5cb90e161569ced18c85a953ef8a85bba43898c6ea45cc02121413ad6e4d4eab9adcae2f35eaf71865da999f4034895a56023ae31f5555bf5abf549f8d587600c79e330d5474bca907346c511a8383393faccf14cea969c5926e6b0afd6f0d3d6d777686badb5d65a6badb55658781a2c578ff4668e3b030e1f9626701f53c7690b5872e7459230265df9ca1f615208e447093b4250e0a9f9fc50a0b0e647bdf79d56f3914e646ec91d4fe6e3f8d7c82453fef8f195b3facc6c339799217d62feba0ce903fbf8ef1f0868e63edaf2f52efc573373199b7fb10f7fad2f246928d8ecfd82c75f6942cd1e69c2f47e4b9c164f1882d3e18b1cc3f90a4b1a4f0e6bd97e245f64938cd338ca94a3f77fe66389f472a61cbdcfbccad12bc71e327fddc74c792b8dfd7899f2759c6ac26ca38d36b6e4d092e2470a54131e209263f8ef377b3fc6b0fca0e6233bb80106f2802cf0ecd8bdbd2ded0d72ce5c625c3e92aabfc897b7569f620f9cc63875570c3967b435437d75d55f0e53fae0a76c2581bcaca60a3567b5d6971eb0594ac07cc29439b56210c7c8a03ec5fb8039aa241273988b2511283a314464e6c5971ea566983ef6d830d7611de67d9892074a973a30174b9e99c3c09c873cab1cbb67c68221634dfe08e502d4617e443cab8630a91a16a6659589af2d27d8516fea1f4aa774ecc832b150ec3139dacf3ce62972b4272f53eb208ee5809f369f401a9e8432c29cf9c09cf5929c33988b240b86f5b2c79c4d71cc818161bd67dceb7b7c04faba942bbef27d34975af7054088094b1627325c6a2eb5ca6894285168941d5f0ee4099d6954882ba990d0762e67dedcd7f79832fac4f46e498fe8113da2c284258b13194f5dfb711a3c498f1aa4357ad434f508891ed1a3ef3b083377c76922e259972189fc3327c9f182cf691df407a8be8e609b4fb099fbe7bacfebad9f84a2c3baf8199208cc519721a1e888673d8624823acc3dd207cc51bf640f98a36e491fac8ba7479322cd9b4a8f68adcc7aadb4aecd2815c3c3c8978fe48dbf4897bb48dcf9dc38be8fcb53e7c8310786558e39289478b0e7e5ab1b77c14fa12e5e552952a5a94fd5bb90d4a962b2fe0659e78c1ed11fea438f5c80607abc6669c142b9ae56ac23bcd33a70ae17326f70ae1f526532af15a7ca46fbf3a8b2d196630fd867ee23e68f817dce60e4ada81cf033ca0538c787bccccc0cb93a6d1ebddc5f8645bf5365b0d7985798d7d7abeb753eb54ea33fe3ab90201dabb6916091631f009fb31539f6cb7327ecc8d9a934dcd8c7418a8f21435893a67e76dc56bd3ae7ec72e580e5b83a67b5db4e9eafa40c8ad68ef9596d576fd36fce194eec05edfacde97999a3d489134a81a0f4260aa54e2875626da59452ea24b401a4b341d07660a6d9ae9f25bdbc71b7bedef06eb6bbdc8d11d7db16b0e47d16ace0ad323a6942d076295538bd1035678eed356093af3ec12e792edda0c411f8e6b974430bb833b098e7d20d4fb6b841877c030de00a6a1b163895e7d20d3f9b1818e7b964c3930d4e2a2b1c0b2d8cc11b626ac351783b08a2af08978ee8c96332724449f702851b8f1f8c6a6c2892b2de1077c378a95e104f35758a182850a0d856112ffae4c99328b8976a184a1d083280d8d23433d32e26a1062195159ca47302b7f25482c11338b6c0cf5309063d14090acdc02e792ac160852c30b8c50887792a39e1b445c9892dc02618264f2527a2f8c1374f25279ce0c45072a2c8730173792a393184372f5659691919715a9f564fff4ad36a923697b03ca921c52047edacdd6de9ec5054546b2de56a9d73ce7900b26f6db55b674a29adb5ce39e746133badf5ae99a3ce1c934e5a6bad352ca3eb3aeea6be4673db0d48a5e97b340758409e273f37ce729de7e23aa53f19ecae177ab549539832208fd1cc1b4bc331e47621b7042450138be1d8d848600a2a4b608a373bd7bcb1277cd0d9e6b1ac654785a30276284a6bb51d40dac1ccb16ddb6bc2ccd9db31ee2157ded05edbd9d08616db73b0ddd336d072a58d95349b398efbe5def7348ee34eb32deef6d2c2eeafeea7c02d5b1cc795db2a6f659030dbf29d0d485907471bc9775a03f592dcefa032724f5a6ba91dada0658d272db06246eb212799d6445272f7944a840743144151832464a4f004a8070556ae8011431445d080c3b5329368b34a9d4c4264c8ddddddddbd45ee274276f8020a19c80006a72cb39e16383dd5a085316a4e2a98d168d1c522d3a8516edc0dd49449496e8a4587132e9a60b20227472bcc34b004163274b1c39116296634ea4444a6d1a7364209a8518328565ab0a208114b6a58c1054e809eb822872b8ac0d31a89ce5184b04cc391c34f1972e8c32c3ca6e105397c2b490e839472d899e26b91f2fdc430c68099c15f7107d86d5465ad961118f9cbdf3d71c74753c3d3092b5932ad35830ab277ef9db8c3930d808b2a8266f773ca7067b4a37b2d7396007993c185ed4e1d6d549b611b4191ebeb3b006b6c4a3052ee90864a803c6a0336c0047cd102f7050bf4964a9c60c11245616451ab7271480087c7d29314649ce7d2132535d4d85b98766fd775b17befb76d6b711c4733586bb59e77eb95b3d2285d8a2f92cdbd42dce461022a4c8c4882e509135fcc9a0564380103ca194aa0208b2a3d00e132f3c51214e4fa3ae586245e48220d239a80e288262b249da1c44513203625a1284ae6ab5423d78f17881904e13054ddb85ec40043ae77e11daec8405954c0f0825c0f3379c86006166950c90207202c25584105307648baf203921a10c57063268b176cb0fa3e1ef5adfad7c7aa0c0346806cc0c28514041131abafa932bb820a68a4f1831a4ad098d5ed865c8b00b76a6f7a072a53b46046e3a0a9c8734a1222723f91fb978ddc6f295141ee5fc9192738ca7d1ba0224056e47ec10721185af0a13ab04db242ae775175b91e080f3a9db480428b920e3bd850c6ac2eddc0022f5a088252a568569772e5e148ae1587a18a4795b55a995e20e9470b656110058a071871e189dc4b2eac911bc951ee259b56cf0c32e0e1080e546818828898951488c8618b13509454b085136109b752903d8079a10523b0dc0f7d3843051faae3b34bb020eea85d68c957967ea0d0a10b4edc6191d4c8f51dad94878f3182b0a208275c600206b3be3112450c548c71840c5a30eba4dc4eaac86d6d6c0d4c6bb528a5462b28e55abf519f266800d14a4394553f38c9ddf68db7ad54595b805c5730926b65826921d5b1a4c2d14da802800f4b2a14e5b974644ba681792ea98004641aed769bc72e5bf37bca578561797e4799e64cd9f7343998b2efa8d2d0cf9a3b342583421dbb431da3eff2360102d332d046ae3792eb53a6bfc182c7ee93f6d9ada809bfa8fe3baab29b430f1f92105f520b3ea6efe843fa923e26a19963a903400c81650538c8e0480b1290c20c289e6628e3e788d9a542f4201894e9c70a0ae5daa050eb086a1965029b0c81446094964d237a1089d691caf4a094d631978e2cc9f4e01188d4b2d0a77f881a49d10b46301cc590e93fa42599fe26b51499fe63b25b32fd6dda8ac8943a7558acc8f4f40907153e8382804c7f71c0f89e77858e3a2cada36bea9cbaa6aea96bea9a3aa7eee9d6baa60b448528d156440d4e8d1137c4116d4545764beba06d405b6dfbd96a5bad56a33f9906655adb86a470f2953d66c0734633b1cce6ec7ebfe59873efe57ce5d84db376da94605a23e54bde25ad83de2121217a9132a54155366742434445b98db2106a8b10fd86148310149c6098377d0fb491086d340ee17961ded47b20c8c42202751a69cd6762c94d4e2cb986e407c9cf0fd012a09e223e70b1821647ce28e2821b436db0c004861224236674a4414c84aed01da2bf44e04c1614e7968c2bbb832e67c7c6cce523b28d94d4d8f4716ad7cc9bcefd58ecc6e6ce73c907874c6303d0826931a65e039c38584686b40e5a8e9346fb1dd2225396831a15511992410eb99ba801bf90a33b9852688680ec5d996c1d1ad232ba06530cb9432c967c7c5264e4eeeeef54a141eed77e802e00d21675992ef38666cab9cc1c54e7f2a0f550eea653c925bd7a71a541a1e65931d115020453f334969bec20b708423d9a397293aadcca4de2c83669e6985d6db51bd7c56018c76818ab82a9885ac012b8a6b0eaa6c40fbc0cc3e28e05c0c045dca16ac15aaa8ebdbcd097addfb94b5a056255300ddf98aa3cc1179c4289e18bad2f2f2f2f4d27ab954da06d7449cb40b64633c77c4dbe134b46a1679776c72682d020d08ce34106815e7aef9d1bea5203d05c8992e76355306d1bcaf35dfe1579dcef7eddf771dff6d9af7e4dbf49a26824c8630834b9ffe52e6928844f14533a69473d99e6671aaea99935565e28a2a626cff398f3353638f33c90ea129356d71578a4ef1d277cef7103def274e20a2672ac56abcd52781267037e9e9a1ed47bd301a8d7df9aed47d20cd22936cd1e8afcb933d43f328406a8004b060fc2deb1fac13a26be8ae53b56bfef23f4dc4054e406333801a50a2bb339694491a47d1f7c5f8c0c12660eeecd1030eff527ed8c79436ef6beffbe1e56bea21e9b38644e308edcc24dc0ee9a04a169034f55cb5aabca564b3d8f128a4ea0820e41a04145861e1a84d0e1045178d1421849cceae7ec9e64071dab75b506a68f9551cfa3bec6068747b894c212d9832498565353f021d777506b5846707de789a35a325454a512f16a15be5c5030e0136b8fd0d9cb4152bc0b197ef513ba63bc3ac62b9054dd855cbdc999c73b5ba936bb52bd5ee29bdc11574c62f9e34752ad55f599332a07dcc06691e061c81b2f54144316eee93ab5e4d256ebd5add68dd70b7c51b9c2150b86e3380ef51752547dfd225f61d80a5f2f5debd57a35679bb3dd14a7f53a47bbd5dd7b476fbc5e0d0e0d5baf10070727a7d57a7d8adcac6195abd247551ebc71839cb31a20426a4096a8eb94d00927a07051c0b91fb60c7c58ab3f752513fff20261522e210b7fdd532ceea396b5560749d75f249da5c81a9c4a6343a25aabbbfe2227eb30ab72d612c390afb38ea07381a679ba3d668e1cb04b400d50cf711c8c57020c1764070b48f234f569115c11e06ccb21f77e35c5712b73c210c495a6aa7e2a4d47e6f8f8d4549afa579afaeb93c25ce02042faf52ea86f654df784536badb5d63e0c8a29971085bf960abbf4748d6ac27eaf97ca5a6b67acb5f5adcf99eb30f7c17a0bc6558e75ce5c248bbcd6da99566b46dc606042ebba65ddaa6e61a57dd918bbb2d6dada48d4b11fa518a8548c982983162a54330000000000c315003020140c07c401c1589a856936a80f14800e73924c6e4e1c4ca45194c4280821840c22c0000000c0ccc8cc0c6903f18dfd360f9a0b946d85a01183d7081ca560b0bbcaa5ac21a1d082a1ef2c8738ec6ca5e15524d3d5a45701033b53be27a7706eda6f730bbf797b41ab17f3bac39bac11f86a91feb6127c4125ea11aa67dc32311af123237dd2cc30636a103273783cdec58be9f3ee408f6a6202105295bf06f39aa834a4031d44671819103be74642ecf41037b68cf15d0cc3b02167a78a72bab706aa0ce44db3539070d62bf476bd1b8aef27dba91ab9ef170f31010e93f722c32a4828ccc78395bee053f8e83f6c7e068ad00b70aa0fe9d986dbc6b0e53341cc57c416300ecd5714063088b557a44ad5af4017e17b0e46f14b9d089ac4db67dcb0bfec4128d114d3f9ec657c9d069a7908156293e6a385ab8a8e8d44a80873bd680749ab4a57599b2091a16e9c114cd0bd9b95a9f504b41c54be740d234df83e691ff21b5d8611ea5ac8c07573970e47315211927404b675bc2284aa74e0481db62107f1d67e16ed4b8fd3b35b064e7b64b01e8b22ee16dd94d4d0f67b4694113af99e6d30d22c0ec18822eb49b5f4f4de9f1318fe8d109cd5fa87490e55a30127e669988dc79ac572fa0ca777d78d7e5099f70b79dfbf9e53acf190bba1c851214b1e41e093e93f6b6a6d69f0993d8f089445caf435ff8863dc62c5d8b45148c3f1ca4354b2edf8c20299a6412a58fa390bd6d5b56f185aae2abb9a621edc1fab9f96c419fbf9949e6767c52003d88f565fe3d25f963f259311c544e95a49cdab5422fe855485a333d6c0b709ead1e891c84052853bf455f7a2c0400f6139ed866cb0c2d6ddc1c098ae865eae35f3a2a64279750fafa2eb6af98b03c39d5c0a3833f3f96e219dec0492b060c14c05a1b0efaffe1671427a4253717949d6e1a2e1aeaea5c27c9bc7e5b75197894d74758e650bdc99f881b106e57154feb1811c6246d5e25af5d937ebdc64fffa90c3577dbf85437e0ae267b81d6d077e71eee04ca30177a6d06f3bfcfd33e6f7f164ecc559c9f384574c9b1ce237fc031798c8fdeb4a4d78aa1cbfa917d0a0c201597daf1d07e8ca4c73e697b5e39cc1a9688a28d1e6b412cfdcfb7d102a856f960fc8bf85683370e6feb2071e7080d75495557cd75e8a4710c65f912580f11f8148d439a3b2dd4568e1f4c7780342199ff91e9122294cf34d2c71fda3aded192d89a220ac8edbe9dac6823c9587bb843aa71975d4f0dc6a4e577f5763102f61310b8677228d7ba297fe99588fa5c172ee8e8b45718b4530316883cfa66a80739c8c3766baf6dcdf60113948d49b8a376f00e506991ea7a6947d1917fd16f598b44a08faa31dba544a0fb69065a3111e59a1d36b04502d7e4a202192a390a21008506be17d350a2310b8838d8209cbccad2b696a6e121d0ac92b620cf761c9b656a60a4b0048d550aa2276a0c4a10706a09882dd5a1908ae9c31eee168341585fac7e6833ab96fd8f480bda3eaeb557b438a510f5cb97a00a3e848124a7ea3ab9ea3a79a89b9f5a7350b72ba10190f8d63ee2442a1fca290b03fb19b6a6ccda9a743ca10ec3750ac5c11544aee2a6821b24cc84791ad8f625df5fee94656b1f96a09c4922ff1d4c3092b9e1b7fca42c34de14854a35d9cb806d1af2b3e73df25104808feacbe983bdd9c52f001fb5907c98ca132670d894242bd119dcc53959169185f1e7c705c01b9f0e5b344a28f0fc32021003013e14e1c3627abe185bc2c5bf7dd2043a1c84529d392e8ce52fa66bd05c5a7da7cec9f4432e7f10360b0c2e422e41a8d84510dad89d972c8a0db55e13ca6c56b46bcd7ac7aefab29ed7d7eaae05c90fa078040cd061200477d69a9a621171d7ebe00cb87bfebda631f3cf6fbf9baf43002b2364a1abfa57e3b1b746f7f50532c46f82672c6fd0581813022af82191be156033d2079b3f1f38845cc71e957a369166c716a06d0fa2713d6c08988430466901b24de29e50511cfa0cf02606370fd523b46d388ab31dcbb1bd577b9ead768c8b17ede5ca813f73b71b27afb09204fca942d1e47b2687d17254d8cd064c500ca8ec0317dc18999450932798fa1756773c56a020f631f4075d2c71521d89fdab9e1bec82f1c5ff0b414fa4e1af520e41764ab5948b625098ae766489089708df46d89464c42ddcf15195f5ddb65d60fcc1b654bc36706ab5ef4a7785af974a38be846dd1121d0270a2f582aa466b58c1e2fa13514336f93acef8a5163aec33ae3525bd2fd14d1353ea184a6b6599f197cf1227d2e2396ba6406333010b2b676ed3a67997c96faed1bf3aeaf2001275497399d689a6d63c7992e98c40a83b43d5dac534a8e2e346e25a77ff7db09456fb0f23d08c111da5df4ebd644340a80e25578b316e069b0a9a70a62f6b80292467a976089b8b5b31052267cec43970b504d8b15eb887c28a57e38c722ca655127e38c4a533f15c94d88ae0ecd7e18984c65ea39eca82e83a78d0a5b6abe96f1837ffab9e227be097d827cb795fef491c49fbee1bfedc8d43adf58d7e69c40ce0219154f5f9284cc5f03b14a432ddaad761ce3f07687e49a156f3e39a6a2b1b6fb31e6b0be51f7bf9ffe3f1d47b05dfb0781bd35b7317a928637b118aa15fdb2cfc585e9a2f71abed17dbdb2e2541cbf738db7029e86b4eda5eda276621d06fc562e70d0a214d9678814e8276523d52ad6859258be14199dbefec62f3c3cbe77c40e932aa3ba6f566cf7f3b1d86196750d5cc371e4f3143a9ff31c23b50ea6b18d0b562a0a5b101b11be376d24b8e6001126b6318d17668d4019aad1247743c39659e21752ec1ab8192ce75986d5e404eda5e91947ab41c4dd046133c8540ba9374034fd1a06b76906b6b6bbe50482e09dec17709b55bd8a7f3aa9e30af53a9b4924bc42da8e81533d5a175ec8c106adfca90f39cada5ef8ec26c4871c3dc96c206cbd6dedf41e1fdaab22afd72c35cb8a368d13c52a9c071abcc68a2599e068d1c66ce09249223e1ac63cfad18591876a91004be7cb0d9b513f3d8e40027b152596d1c7518ae6f0ae0173a9185eca13f35c2e5b5d47ba8fa3b792ffabe6428ba53edecd67063b973b8087a5251b1865198058c2c690b575f03f7f60c093d809c1a3d0cd10ffac36fa30e380b408da2f24040830de2da40f0584bd767514317709677a2bc9364f84603556bca30a397ccbc2f045323604959587ce6cdb09a821f9797499a5a55d34c2e16f4c4fe5a0e1420dc3eaaec17acd101dfad00c7b919d851dc713a2b9bc807430f3149b65080ea576c1ebbde05678aec88ab5812606beb83452db4d7b170bc9f44d9b3f34126036ee1e373b5ef240b5cc80f3c445103fdda646b272f82baf7d06dde3d98c5e476a61ecc32cef2511aa51b02f8edf94cbda66aca6069a4c203d35b6ca13256870408ec418c6a98892b5aaf8e46a419d3924e90b3775f1f822835ffa87112b97730ebad9675e8dc9fc71541bbe9e00b496bc5db8ae724580ba29dfb60f99138a74ac1cfadab2424d09d045d9a24607c624cc12e098ba3fc896324c21b69471aef336677d1a4a496c89b11c3a936d8d1a920e24dcc30c758178dce408b089071aac9ac69a7e9b67bcc8999cc690e97b6f1b7e010ca62d2170581ae5e9cdf918c3c7f9c8383b3bd08d033ef6f434fe41f518760f023afffaff8db8d6c318d1d2a6fcaf5b92966a0d28796196ea1d28ae0aff650328376667a9ae1e29ec71333af0fb83523525e95caaad9224e6a261266ff87280bd31b2764f251abb5f668e385f475f64bb85d6517192412e4d3f75eb41cf725022696d342f133cf89d81e5ef9f8f1313001981088a6b6916d0fe2055c2e1d74238dcef53fb480b28393860206565f7aea692cec8490518246132b20e0eb138f3745b003400256406c4ea2fad8437a3409415fb948e99297322c350e7b116dba88dc4b57abfef8057684301280bea7fd24593f46e675dfa1941b6c0744e975f7a4f2c645a43fa27e0596a132ddb72dcb979f1b3d14c7ea0ccdcbc9ac98456038c8c65e562d18b1d4db4bac5e241739865caba6b11d54aaf2bbaba851ce8748db2f773f6bcf3125d8c8448fc1bc43655fe805175b5643f0d6cca0961596b589ed972a26c96a40898e60197382bb93fb2f3d868e189f2fa604ea4b7c4481b345121703675494dc8f6bf96e9dd27f71d0e107b1df41b9944fc1327c2147e013b4473102ca3892f9c7eaa73159a8f8f20ab1ba52506adc43f4342970a3b1a9470d355119ab6f9e972b7c6637174984409876a1a7a9df44a4c72a7f5cb4005d0c1136475599a6285375e4da00abaf268e87d1d896e4a0b6edf1f47bb53be24d66203e97144922a68a0d966e9fc344b51ee6e1f7c8df4f755684e8c6ee0e3fa32c386d3b2d0e7e67d64e12e2c28f7487f0f72568f9dd00f8446062d6a1caafc0b7fe82de06686fe95af216affbba9e3db8d3e6298c16cb886176342c105b4dfb897eb3cbeb817a5f4ff8a404fb5248d8f254bfbef0f0a15b340e2dd59849766f1d2d7c0a41b15d700d33f137d015ee003827469e7967f61302cea935707ef929f550663e08dad8fead24806c1d916e24bbbce223651f091b8b81f1495d6cff9a52ff09c3e7dc123a390c0e5dc01d56f5df4eb430bed9fa0f5e070970ec027412ae58ac85dabf66f8a7fb2be2bc4afaf0764515a8625cb2a568cf981f35df2b5e03774b943c651f015fba4769a8d05922036bdd31119cce85c442dde6708883daed1d751b1bf46bce56132435efa0a249009132424d900135e5494218a71314f6b582c9345441dfcae36af3336087254ea553d04b14feea718ab09abe050640b101d078f4b0933f74ae12aa4a5caebea151323321c49a7f2b8a7acbfc38447fe301166ae8f4d880dee95dd6c8c57b7c4e7e62285b6f2887d9e92e918844c9bdf6ae83b81b24b96950331c72c63bc33cee8e978388bb5be93cc24dd41871ba00786cb265d2661d30bcccc5f53cf3d58bcf630f38f981937eea145cbbf335c133336ffced4d52e95665714492d5f8a8d13fbea289182bebbd0e215147626423d4be6efa15d81efcfcea31d87441472573fa31314509429eeb44293b17b57d33d01abab8b0dda9943d487f4d05720256a1efa840f4a26f38d927ea3b6066fbe3d82ced05e50d616f5dbd277356acf363d0768a4f3cca5143a0e68b6d45d7c8df036ad423d52d0c3a97bb729248348fa7fcaea48013d787c44d21dc0bfcd7389555656c9aed08d6ec46e0b11a64f4ab06222c79f2392716b479868fda25da95172248bcf7217675ef819fe21675791e995da8f1da4180d53e5cd543b36bf8c9ebf774b2d69e6b2f275820946f0915d10fe355b10450c686273f13de9149a8339b2893277e6f241ccfb30e572351581ad99bf678a0c7c0653886a64ca31e00e55dc9e2ffed64ebb0f5c0efdfde1518017e9c9f4ce36e356c2eb11e4a210503d9c50fed27f9a219e5e4828b4264e0b4d30beafa68511d31ed5915c3c13e4aa020259ab9448c8ea6bcc3dc2b1dec60c0d400a244ed059a6ed70ebb885af3f1b7587af3928ac24a04a5e13b5de804b4ba44b84351b13ebb9c9fd87af549a9dc57011cdf6f83bc2b7447c3bf2730e9580d1c90ac4c5611010a092651238c6ce94c85d5a8187cd6c2fc28e6f032b49f73c703c3e3f11b4e0f8afba85e62e3d49ecd31d5476ea38f4e55e6a8164da19244eba27e708bd6ff35d3ae3dba259146302a2f48a285519078c01330283cea526a71962cdf4cd598b820bf6f02bc254e48cacae9dd69d97c2c3a97b6d540040fe553816165e135fea81da3697cabd9e3e413759a948c559ca4d29f2a95773784c585e60f52d2d14aa567a26b49e2235c811b23116ea63b62c8f16b92d718aee915cc6f1b8f6c966c8c038427a9a25c1ef4545132e22fed34da73517edc9580b56e372ff0b9b629d4ed4cd413fa7a867cefd5c7b46e1f7ad00a1e897296038e9fd07800dd53267f343153c2e1d1d8c588c92331ca48bd17a162cfaf14a94ef2a52f682df52aaa2f23637c8ac40e27c7a2560cdbdb303aafdd443233292e0028be3e7c537252c0b8d123c5e34cc24b0161a2efaf0311dbc30249bd377c90cdc2c3853c0f965d2a3b0566cfc33f483636c26473ce108ef8b30c9a664a9e0cb263455fe223c0947471ad96ecf6c29dc3ddf7db4f2a24889c19ad7b15083d5bb36c10ebe387d9ab866bfe64dcc925a6223de28954b747fa40547e9647d8ee4fb6f6bd254e9a0882c139172d8bcbfb7aad625d3f4ad00904ab5170735f5332ef75ad3a072c2e7aaf7365b7fa06b5748827909835b172c4b5e8e198b2affb1260a1f9bb0c1736be0246127c055cb1f00409eb2bd78889fdaf9c1977c4a3ddb2230c0da049a702b8f37c5be33ad88a7d051188375f6cc53d4d91becbc4dbcbd7013b5f9b82f4d8ec3a56a094f42e03d09863dadbab18e177c76bc8676254f25d8239c097e00d494a0cffbf6654458b799d445e64081ca207ec9d1e1403b632a2eb99fce1bb4997320b58ecf1de7dd2f8c9c7e381ddec09b6547bdf8bae9e43bdc9f8973129b31b357544090aa7420cec04315c7cb7386e001ade8be8d7b71aca9b6dc7b536e3d961eaa0073aa566f0dd0b64f85ba62a0155afa3e53302953ce3eccef5bfd30d1723f0418059f1c96e70aec316056746e95d38f75e508510ef2f2ddaaeee68aee35fb34637b5f61a7af1052bea6799ca2e52e82de0fb21aedb4782e0524be2593e19e3c87ee42c6641d4a957a0b473db7562aa33896e2a9941a0fdf6114af14ed4cea2629a579393c0ed460074bedd1d3c3bd356d11f8152ead7ee36ca1d70b9e19c8469c4c1def54ec0707dd1ea0b6be420efc21b03f3d626ef22085de815338844bcac069dfce59b6b0508994816b0b612d7104763cad0d2ca8d44eba96d20460b3cb85ddef21487aa737b9b7940cad07df798319fad4cc286efc0c0924f248a58f193090affd51bc22ecb345d49fd69c174d5f16fd74d891e4aa9fa55ad60bb7fa65502dba395a759b5a3083a19d587dc4edd4afe8bc7e95f3d2015d937dbf7a4e27a91d6a756107b22976a07f6407229acd70167dc1b8126fd0d340813485e0d4ba5eddd5dc5d8ee55e0fb6aae28f6836675536e035163a62ae0f0ae75a7c167bd53bc0035edc0da457a5f140758d05b75cded6df66a7de7f7db40269043710d1298c80ffc76b53c37f5744ba95c749059b1adbff3efaced07c6a020559cab4f1ac3d9f103fcf41666570af7c3d8c5726637a2d321d9e0322f246801f91317bc6c925f43786bbc6c5674fb71f246376afbf13ff2ebe1464ec377a2f3c174c0a2484522350a840e097c2db9ff0b556210fb0ef9ce91312ad8d7df3f733c81d8bd760208e6e0354ea9443b7ef8a505891c3c776716aec2af8bbd172329dbf2dbe25073c64e8629f1b3b3e36708a7c3c6e9239118b421fbc6943081ac0c0fbef1bebc74f939605a1be0b7703a713ff8df1b4efdf5fc0f2781a446a3901ed1d7df72c3c4a24697e20f5df400b5d2a848bd468e9036dcbb409fca086fb4c93e63e121aa5000dbc9bc869197d24b8dda80526ca7b52b3cbaff03f1496e0c5252914a26e8b026a2217e954b098c06e179f1234d668d1c10fe1aaa805241102554bad2662cd19a91aa982256753655ef40e5faaa1b4522a11f0e2f9ec7899cb6639389e37e0ea1269ed4973d24b7fdd20e67bdea1a1b4facd7a1c25e96053436570f79ba4ea47e01727a68c2f3de260e3e0ba035fa7578a29e3eb735f986da0a22fc0550722432a9ffc4f82aa9e53c738e64e5c210cfe350d2e74d33c8faaa21265fbf889d00400ec5380ad22a530a94ee911b6c1e0c291188e051053c0eaa612713d206e88c9cc61445e16aa814fd2caf44e51ed2230d1c834426ff1a8d24cb2624698049d19b81d15438e0748c08267526ac56ed7bab6150d573757a0c391dd0a7bafd13e6f5845966ec010d57b97889f12225f8d99be93f51bf2675bf2421f48459ee5a0ff222b3a8cf9dc442856d6ab094f3f49975a77d682ea8b553525f9b44637c0a05a4af897a0fb379100e06ed71ca7e96dc9a5f5d501020bf728cb4010e6709f471130f9ac08368ba9940bef03d51c1fb38d34bce22d834b432dfc8909db9a131f6369a215b489ab7887935c52133c021af73c0691a90dea279240ce72854a42e795d136caa16dbebd059ac621d07c016475885e1dfa36a62a6487f865ad347ccfceea2b542b2af353a4fdf2878881be6c7c2a4959603c931c1df4a3a84c3b01ecb4414d2ad0f9f03f459a1dbc072a7f9fd2ace083bf6d48d584bbe1e1c07c9679e1053561fc36f6be4f944f0a8362584b7845dba965adc5a24db1c708b00142a79b3a0d819af9699e0f76c68da3cb7ed3362f2261dc29a0cb75892892b5eeb8244eab2fe4258cccfe09c76c438830f96918c151b288b4026ff4b9312195013e2bc056d4763c9a747766bd92307e6d84f88c7c43680032e520a54f876a3525e700bda69a280793dc76f01a3a97aa6c0125f24cdcd9c1ffbe25cc966636ed7925580eda867f4db78594a88b476717e7c5b8ddc7d456f0d7cc41d0b23cd300c0e2227320cb61fb351423c0daeda16d0be4ba795189c47e9ce9a776c23b52b15c62f8b9f896e06e9a8f0564f88ef6beee09dc8cb3e140153c96c37d1793945b574b8157623806b24c1529801801b41ae176eeeb2344b2dd3f3ecc4a68b18a6067f97c7bdd4fa6bd2f2ebd03dc027087f2a003901d7ae2a4f950064df678c95ed72e687d34791bc39938f8917b948d3c62eae810570186361279ac7f9954b51ad8b5d6cedf7044f6c3c813662947d3099b7a3b2eb72643503c3b958e3dde7f3585387abf0b20ffd4787e2cf104653c0382a7b5f3f00d3dffdc95c9a66f73b2223029fcae9206d84774b42e89e1457d36ae2d583384269cc6c030b269e718ab39d03b92411d8c08a6f7b9886537fb87ae17afe28d54e30747599fb74260962f1d8ca5b97ac3558b162b8a7f51a241ca90b1902a797d547c9a98694b8dcc64feb4b190bd197a12b9c6bbc4a58a253b3db71ec28cab743641698260d063c0dfe5510bcaabbf70c106366a36c78d26a757768ea4e430887a94d1fc81ca7581efbfe96d601a6f07e9b351272ace31c05df6e35b3d7f14da1c10332043dad604dbdee233c989d7b1ec5741e4f43273fa8bc748c045e3577eed078250e3104af649c612a74366d5f053702cdbe570da1f4eb211bf003c8c0d640c9adc877c0d608be5e82f14f04f07b4494f4774b7f57552ddb83b048f031b4950a378d226f19bc101a944be93755d4edf079ddddc3d05ba5a1fe164a16301a049c771592503ffcea2ddb514b39a3232963663123ce55a9b2d1164ea24e1b6ff00ba81133131ed975328e8ae85d86330e4c0179d4972a84d9665c216aef295e1a1ea242927a4953a31a37b2b5ff96821f080d500e61cc22de41804cf32e7593fc98ea0048c9a62ba9831a1976f2544287d3abfef34836803f8a9de0a208382ca41f7cdb0bacefefdb1f88bd879d6255869685da681fd5249ce803e68490060f254609876d73018515276250d00994c6ead7f29e8079e01faae6b3af7ff11abaa36e0656ee741a92498db933197768c23351491f726b250ff3b962bd2f6b7c552c37c86f88f15bd87dcbe572c52007322edac1e1826b71522135921c4803fdcdf86ec6715deae273e2523dbd34d7c924ef956008a53a090512442f35e9d5afb662966b01797d7f1787f08c3f23af8a6e218ae1628ce221b3312ee8deb207213955c9edb184836b6daa4d67b8cbb4e669de8bbc6cac68652ae878cb93bd58915daafe1a57369edc6a49b63a507a902334862811fe42e21c217a92afc4bdbc382ec24981730dc6ab236071eeaf975cc5f5e1840656ba64376214b9ca2938559b2637bba7afc047ea5ef4ab1f780afa89dcd2b23481e11f7752c1933254ea832edd4827ba820c48732b903aefa328bc4cfaf8f20734dda3ef0e3aeaa8e97a555f11dfc7e26fafbad8a2e667fd77903b466c7a46b8020fb6d8ccd3e979907098e6ee268926741900b8e79cb3453b95a3e1110245f8d3687bd6488c4546e08cc69c7d3adbd69f097a6710a779eff959982204f6a84c5b086a0ae532308720224c298452dcd0cb067f0148948032639758d78b430192228462722a90a04a667faa1691b10d3750d6058bf88480f02308165e36a0c4b60149088349501d58948bbf30c9837cc349166dd68a45a92abc8aea2d3f6efa75354ca5efbe88d547cf20c17a5c3d87da550c08f14f688845f516230758fd2b24808ad3ef846dbac5d94a2fce726718397ea611d5d53f8f48b5273f012f293c1f185f47d880ffc3d3f2b1723daf34e2fcaa11fa58733441b51cba2e4f6815b91fb19e9e0c3a5d131e92e11105db56cfcb3b687a24d26bc554103ecd374bb1b74e88cf41fd5e179da434070f50c953305883c778bbf94c217a6c7caa75b78bf23004da04b26384874f253214f6ff0229dd121033a858e9700f2e53b7ad3190733765cc574166be34491c32c8ce7b74765c88f98ee1add4c79bd8745f6a9a5a483f7c24864845c0793ca3ac5b6cad7ce651e8a14b57777d61c7b3a8faf752a457beca9786636252704e0d92718073ffd8064dd88202e5a8a2b38f4859f93a44dc1730afd351d250060d036a5016eab4781bbeb440e580d56fa0e31a805953e0d2e1b73fa91d3a9f552fa4a3c25030200b40a94d3a7c015ab8d9a0ba0626bab866ed5098c914355ad2f61466c6f35fa100050b6919e1b495778892a3f920731d85af22e8a832998a1abe3827c8435380126161427fef792afa85329afeea6156d928b3184670d8a7560e48c7038df2f0a663d8c4ea069cdad593d897acef9c9e7bc14f4e51736a214004718b1ca00ca1dc098796e44f8d06ed742002dec5d4a866ccb5b39a413972a9c1b21c7cb4ff435ce8e0ef6ef4b294da70fda3513c9a371ae7629a58346d0042d57d9b3831b96d258e8f8d6223de06a9c5bfd032031a29c823837dee760dea0695769fcac0006ab15a1e63fb2ffc754a63b49e9b88aaa3f090089e4ab0f006b6fa488608876a80472a1783fb21981a329efa9512818765b47f4ac7d35c684cb0c76692607b9d4203fff1433b37cac669dea6cf375f954a68211f6f2383bcd235f7b82640d682ac7f1a33045a1c9e58a718e98b0436993612026a06b5a94484c6353df9c22ce5d97748c5c9480f2f9437d90936abd682eb018aa2a60f251da7736ac0b52ef53e996f41c70e3aea4fba3a8698d1c9c56656062fd25ce2236596c5ee598fd490a320064cb243470d83dd69197d8ae5fe935de3c9fa94b2332253e6591539b50350d0f574dbdc5777fb2bf0faf1690f6f2993b5bdccbc0a90133ac967638422a51c646c605f3579ec54858b39763ebe14e8ab754201b2c5da9d0747a387447520b8f2aa71b4b1fc102e0550ba1e956c6f7c02769e5b05edc52af3e3a626f3cd625c49e5e08517209ebc4cd6c82ead66d513e7e9aa4dce35b7cb11d748acab319dea1ec161f9c8e113e74f34e993a81e594adaf9f178d62c1402bc0c6299ea6af7b570225b145d1e02fc160eb81c1ca7f62f37960ef1618c9efcd85b196e228ac1041cd4e1240fb244d21a42f25058bcaa5e78cd3309608e6fdff93319f1db9762971028991a880f2b645c44b2610e126cd6f5b280e41925937f551cdd90cf18073180f10f404429c3af7838a511d938b099dbd8d549ef514183de30f150fd3096a7379bebb56020dff95b0f759454ba93d1aa8d0c361440d948b8a53004c95d4c65f03258e142b9c880f1aa1e193e0035e01e60f0b6a4fc3697e9081941051cf5834e9c922062fb64fd5cda5dddc422e965b087af7116b9b8ebf6702499a810d12bf9ccdb2b4265813a9c8a0920fe473b3d8c59d716e529fd7f103a52117d9bede46ec6a26ab05b71786b99bb763697caca99c76962545e47101e82e10d730f54dec0427c061bc8c06810583882d003978436d82aa56782be557f744b1ee406573808ba74b9b994d8a654327d829d3b16896c22aa5c36ab3058235fa5098832c4a67090d32887e6e9d1f94a3bf6dc14da7ee7c800a392f2e0b9f486c8b8d2d8ce07bbda6391855a568a310d2dc0071afc0f7a34a54af6917d77a21efe58b65cb6422cac53effccebc490464d160c8404e8a93b2454fb965a59fbc728b84f16ed6a4a5a8255ffc45b4da96a9802ea0a40978a1d13e01a9115f071ea29d3fa33422c3582f7106ad2c8b9a5f5ece153863b24be434f28492d31fb1b6bb617c65d174699722d8b03c51c984fd5629d2dbb276755b5791235c83d8af968fb1d242d458b358e0e3f5343f22af36713e6c1e43d1da4b4000dc6d247ffb1252abc4bb3ae65b57b40ab7a4312f4608c8c910846fb662aa940240e77349a3ae86944a3c93d29eda8860dfadbe4cc4ce8eac5e1f6848155b2ecf62e8ad09e6f98b049dda0b5999cdc0dbe3d125129cda6a713a60d487ed74979a31e815ae01296ef4701d5be3348b9a758135498f0ebbcadea0f6697171ee8e9c66d07d272dd634d419a6c83717a03823831628378a110b94f82d45a94068ea305f875d872eb4b29595339988ec78bcb693d9e9e46264edb3359e3acf6ff3bd88fd5665ae953623bda6ff43a54ada6eb4da7d341edfe0fa4cfafb24c7267823894b519d5e0b63689cc0d97716020cc554b1ce1ac314a9a6a1ee049c981d922640b9a6610b82d668d754c109755fedacea9f5f2d5bddf886a029e867a0d671e5db4292c86541bd5181e825fea816f277ce11bb6c3c0bad098d6550011e2364e43900e84d510c4bec6edeba42bf3a3a1881d628f3946cd2d5763df2088a44ddb24c3c84d516dac661faa631d89a629672b26018d3470153ab696159b3d8388f82fed4f92329a31826bdb0a95c29359abb63ccb42d7f8869c9ee315b946e3e6f02ec95df9dffeb1fdf520964d22d1b5db298474955497448875aa3515bb6f8ad241103c91f73ababf6e35bee9aaf738d88d5d38a4ff49cb1c98c677df40fccd098c0fa2407368cd411a13d0352f01a7e4d46c46279a9fd992e0ae0d2530d46c6ea213d5bfb5818d1c8d130338d76309bea26e02ba5040a506e4c935b511588b20d52ea6623306124668967e94fb4ead4ebf8535f13dda5ac1961e9407da5b0dc8efb9317ebb36b4efda642eb8d9e9af8cabc4d4fc957f040939fa73413ac0305561238ca4bdba097c5fcd133e552139a90df48cce4b9130d70699aa259ce83767621e4092b7c1749a47bb1d6be71607a0992928634f3a9f7e2af150af91a889e2956ba1c3eacc2a0d26bc418b05ee6100d6bf1f69f099d93fd25f1778c556f9d99699f383a2a12993a1b869e931ecd8e99cf278f24e4dc1e0cbb601de228168e0456a65c8bbfa76c336be6f5a4f3e7ef61eb8bd807c89d96d8fb977ac1db587bc97a6080f6dd400541b7e405d2dccbbd33a913f87926f35cd2728f9e96076c8f4d6bb5fabc956242f3721fe974f75bb8919051c4a5fb179bdc9c9df3135c09996409e95e09d029736af73b6976e38a1622a058a5236baeb42eaa29186d65a2fdce24cf69c4d2128cc329acaf2387752316b476959ff6b13089eb46b4383b28f9b1ffb6b8a94b97489156d5707def5e7cfa94a5e8d2b0b6f1259d98fa2ecd80d984d3f68851a46f58dad10ab9d4c814621ce024611757b05657604a5aec1d3f24979087660cd0de8edfae7baa8beac487b54a4f308aba07864a94fa431023916c1c77cf528aacb21e8cb66c3c26e3882950114608bdd525af4911663cbf9db6cf5cb5e731c8ddfb42812604eebdd69ccb38adfb8bd2e590c2605867e25e9ec7896696038051e15c218f50fc9a7faa4fa62e7c91554873515cf509f54654f6da3a5160df4f96340402a9b1088ad552d75d8e38c2e0a0eee96b7661e51aa3552dfa81ace8f0a56571a7fa03d49808edc334a33fed42402405411a33f8afd545e6881e450779157c62a6568a06d0c888c36229d07571f12aa0751d6c5368a0e1d7bce2353bf7f124fc1cd21e879d0aace860bcdc65bc15ae2abd1588f669246d7390f969fbe0552afdf780ed8eac14f72afb8f07e5f45925246dbd134ae1bdcc139c0707f0cef4118af297d62f0f05d513d71c0758bdf3c826cc7f34804de882e57b77a531876b4836179fb3708a90187b789d7a11415575fc036b616a3379f8c65f082bd6f0d287df6219c849d99152f30cce852901669f82493a8c3f2ccfe668201c98d4d5926bd3060917b735630490ebe155b8947eb1fc20a4f49bd174d0c6d6d767eb96ff9f1bd5bc8b19523a9e532cceed4fe28a5fc24952237f84d2d515a86b845d6fdf892e92e27f0b06c37c47200c076ebf0c73955e6894ad47b1863793e1cab56ba313f4b6ae4a27167f387e849feff068952c9f2dc93a10343dcedb302d0bc19bd77fc8bf8438a1a39f7020aafd1fc90d3d628d99cf21facca7456b0f3e8f70f9640e82a530afca83f6ffbb5cc79e8c19618f610a03d764fd885fb2c734f4055804aa6b33e6197f709b778886e3174bda1605cb226183cc6949e23c3ce227a0e625d300b031d588d8da824dbce8d0b98c753e2773295c7c3b9ba444344389ec7365ad82ef68290041822afc2a249dff0284bb11374fa9d89a3c6d9807b0369de1dc90e0f1ab6a9541487da6eb40ec7c33f73db4feed1a78fbbae53f92c82f3481d75d23d4fbb40ca0101cee1f0f03adb980d168792f37bab78465300f35dd30b5088fb4c9b67dff822c3d5f3b1e1e445718d8cda484fd492d6e6449bab71c7ffe742eba08e029aaf0de2a291490a1ab79ac4131e79ca0d2fb99b1e82a51fdac0c80cabb54f201327d2c9aa14e5b9f4a650bd19cd9d9f8461cffe9d355354af502cdb7b23727a4a28578d5e294f8f3701cd73e4e67f012e5bd1f76044f720118d98a9df1ad0cbc37c5113bbcbd35e7d521b57ab61d0743a2a07be76a7231603f6619067a218dfdc15cb59349e724ecae23763fafd906453e2217c7856afdbf4136b844c20fcbe0073e0491c221ebef14d5e5e77b6aad41d3d999e00015f79ea76f348fd9acc3837b46b450c5413ad26a68e4f81a31519281736a3b18c969c64a07f3fb2afc514b600102e99a81d1a30cb359822b9fe90c7fa22eedcefaa41e465ed614462315d24948938829272492339bc8989f955ada35fb947e692be69f846bd82a0247dfd90774c7aa4bb14fec38acafa66bc3b77a2c912bc63a8f46ad278c60aa98452e9418179cc210cd294b3a5d1348d6015e00fa24a040abce39c5b54aa36e30f757713f925f0b4dde91415fb5d806247467adce19886d211e6099971931312aedb73b6e4971a4bba989c52ab5af63078b4d60e2c587da0861b3b42570638c2b41c4dde0a50230547af71d3a7143e0058976d46bf9a918937a39f941a089711dc3e5163019a4d0a1ef9d2808f7789b5b32bbb6c94f6e4a36eebec0ce67d91fac6e9867aadd62472c25d9ea4bc410d650bab557f18a843d85b11122f6e7f06692a25291750742c9109aa59123ae4694356b3b91e1d5a6c6d3a51107766e6cbf3b603e4a90be9dfffb239c6617692397473eafdfd0aa1941244811e84590d1b8e83bc338fc5dc0c50412105929caeee23270a5b282a7eb48fa511691bc63e2a501b2a46a53db63732912b7767168d14db3f8a07cac8c5fef6c721e92f82b0bee35faca1067064490f1ff7feffc8c2f8965ecd6b47609dcd0934d906ec32c83178c9a50f191840b2e24a06ef427b65c34d0d4e204f7294000d435f0bd079adf95e3d867f3d6e89405ad1cfb1967228f0714ee513a7f4cdd4d74221b0c97d6b8df0c52f095cb26b9f04cb7983dce504627ce2634b27ec36629bb7ae267f5a1f52e6026bac267a921899fc7a6323761646de935a707b1a565e13d871c2d874fe1fda1d1139afea764d9940c4b1ecb9326fc141514cf11d51ed288c674633ad26332136a0e31025d8d72970e596133b39fce1c3d7e0e1961b4d73d369d5b7a61a3eb367a2a445ce28f6ce2b21523ecfeb8be7b97cf4134cd7c7bde5a4d452f4b2ce56f7e3b184674836d69557f055b7544fd37238fa71af6a3f3a8916c5b91ae8af2867c60fc3141be0483bfbb7fef59dfed0458ce86b2e629059ea4cad3e6f1f2679d58a01c98bd646585f94eb95da34dc3a4e941bbaab245bc2691b0bf4a1a35150e7ae8f70784e1f1c994543838f1378ce6ef7ace95f358bc79ad562f0dbe0ca67dd6f6641b44404c8fe61bf0ac99f17d4c2b3f1ef7c1493a45deec8443ae27ac1d824eb9b9433c5cee1fde326e188caca8fc837891e536ca90623f3b94adcbdc30d47376c9eb8ff7b25c3b1580af26465924d7f99d2576a5e48151f6d992f7616cbb5d194baf8146ce7bf9a945a92f3eca822db137129d60919efc9ac70f2097363bafdb4709955139ea4eeaf0fcc3e47296068dc04c9a7c5738642f072cf1b01b71eb7c9ccc026f9efb1c1b85b22a57a55373e71920d45461d2078413d9f38e72f7d5d87d07c343866d7e9a0dc0267ce4b478e541900e5be3a437fa8af73c7399b467ced1bfe725a471fd4fc78a673750670ca4324f06860fd05363a19083d9f595328f609d0ae3653d977192eb2d8483f0b91af4be0d2604a83e77b08acb0950f765c50928f790089b057597107d6ba9f96bc44bc56455b2e3a5b055ef17e4c8e9b01d45d978582a298d821bf9361f9899f21e28d8014ee492a11f81e684e9b9a19850d097ac383d6efc4337133659c99cb7d630d522ac11a2cbe4da18313141ab2d700529d9991e8ab348b13b413111770127876241c828cadbe666d0a8fe1cbc6f80691c5eedf0c3b8cf2a3651a66d01d7299411f13f7060fb6d1b39d87990552adfd286300fb515df1a073e5fc6d1ad2119591b23ab2e0dd80192b554bd45e1fbcdcedda0c326d033632278c8b9f6dbd064a358631519880bb7440be17841ceca802a40c6749c86dc817eb6a7f8857c3ce35071f933e73fd26536126d2bf45d64198e4ce0e913545d0e40ef587da3b65c14071c79fd90447679fcdd4458245f475b910c92a7431ea044c7d9458a42c3874ced99344e001682687f21d28980018de21dd1aa6ed03ae6ddbfedf9d2ed804cafcfd4155e557488012689759e95bae3138f5f149f83544d37b6093d69948ef3db43cd2036aa5b8ed08bd7e9172694557151c193708e7f611ce0e098def550eeb40240fd2ebd7c8333b1b3b5a9e81928f2130c7a68f82156f031d0d8e97849cb36fc956f9d09f9f84c73cf091a8da0a9c6ac4dcb44806c189bed052cb553abb5635c015368e9755332cfdc84a65bd86c93e659128c763629d8bd93a7456d2c81a58060cb027af8b4cf194a5ea8d64d44b227435f2539de63d43dbf33a6babef2b0a45cb52f6f836458d1609f78e084bc4b8b7c538f4ddcb57e736103b5345b9897af4dc297471a2898caf95504e05bab06767bc9690b51bee7717fa68813875e21c29e0054f4fb5b052cd18b0937b7415275f56eacf0d2ff69334fd53ff34ba8cd4e45bab3f83645c4e4a001a31242ae8aa695109bee331fa2fde1b69346d4a140133453f750260e524e4d8419b36b513dd0793f41f49a2fd22c44059d3e42f568d699c7706f7cea358ca2d81cbabb01bda6463fdfcf517059e96e61217adb5797ad912ac5bf4b1c89b20ae3c6a73797ab9b711279aed6b47d29d1e3d5a6b1dae15c9ff185306917b95bb9962743189868662877f0a945083a708a5e8ea2220c4f62176180b07612462fb8071771e6d005a3a96b63801f7f162ab3c92a4583dfe404b76bc83de8259924585f5f1714f4b3e3f05bc3d011b3dab6b5f85974bc8c8f9903291b81b2b5cfe9f0380e1e8452afb99345980c99112d10244f090c37af50ca3801f96b371920951c5a4ddeb45cea0d98550278c9fcabc6341d217a1ae9e9edded7495902a77d330b9a82af25ed240ba8b9ab9df674504a146e2fd82b694470ce82aa9a91b4e275626fdb809bb97490ecd995b6f08bf8a9e908a656cbb266162c45b6acdb167f03f176e69e89afc34f0f3d114d433ab7772091e95b4d9c110ddb91bde2899b287f6f4c1ccc0e6c79275998e0ae6dee1e6445d31d45117a1963a2e647d59fae2bbb719c8c4fdacaf8135c4abe3a084ce0906b0b149b227bf4662dfd7681d0d33c97c73aef07714fdff4eb57864d12efc7e410a40b962b4f69322055bfd0d18f052f017cb43671ea90d97ef6cf3d6526e32bf2befa37221b13be45c6659e917adb9476ec6863908bfdd3f9077026139e74d88ff75b35a8a7792bdf7644498ca2d164779f934cf7aed08444eceddf08a9d17023299b8d84a7060f56965fa7aac4124e945be1c766c2903fd099cbd53953644aaf51154afeb623aa8c402630db14b8f04ba340e634d096101cc07d1a78640b9cfb11bdffe1f6258dacbae2db72657aeeab6b40be4144b925307dd64f22592af97c25a8fdc6def7e61faa0666875a3ae668248fd46f574e0c89da46c299f404068939a4d39e6ebcc9cc9d2ca75dc501a9d10f5023c3e37c3f3f6e2e06f56aa1462e2c0c2218f903dc6916cb345633bb78f064ab2b3b26d4f1f183d561eb290bde770cad2163fd316bf98e127620e192ed3fbc66107a851130fb8ef18ad5a62f2c7fd0263ac0fbe7bb4cb0b358350f247300d62c7e63d8a6dae5b20c2527b4a237f52efcbfbb13fc265d514aec2514faa3fe054c043f58ef13f18f23fa30755582a9659017846411ceac22ec546e14305986f2494073aa6ee8682fafcc684a07308011c7ddfac741b4a49f14af89cc083df9df376cd37dc54c03a10440947f7707f45e358248b5f05e916ec8f6c90afebe16c0980b7ad85876d1fab10bc946f50b975710c94a026b38effb6b54f3348391fc2207481f493ee3aa55bbb77001eff9bbade78bd2be0515ee46d82d1f9cde482da177a90b0bc278bbe4bfbf03f25d24c4f716817dbb894aa84107919fba8d0f3f7f164a2c846a687b8629575109fb585176659b0013a821cd7ba2e5c16f12d71df39eb909fda783258b8cbd803af75e0b9b8d5992cfcc565657f2eca960a1a5450f5f679f658237cf821da03cdfea56ddc765a7c3744c710bf12d8ce887d0a1dd43175cc10ce3970f31f00710cf96ced35e2179ab693ccc31eee321cbcaf135f0dfc50edf8e446b0e1474607dee91ea0a66c3c72fc7021005f553d797675d03bba3d15b54158cf830d561ac5f5c55baeaf2923152a61551c9c71c0d6e48fd88ee9d4098b084a6a24ed3724107ebaf5335feb5d6e275d5e7d2a47fc927207c41a80a064512c3f1e5406c90e98d10239fbc53ddfd5f5705f9ccfa959935f9677cd645371207d3e3bdfac34d7ecb05a16b2103d5fdc592be4fc1c6a857c07e0d319649f4d1fc60bf7b419ddd87fb39a6f5fb9cb55fa5206eb89b6ec7b25afc26edc824aa7097b1f6780ab7bb0f05f63f680e61933f0fc401b7f58ce90dd785b46c7d11bf6c74f722afcf507e0b59c3affb03cd33190487de2fb29f466e6024a0731688d636a691e8e438f5c0c6fcf5213494b584fb6fd8212b106c19da6b460c767b569e434ebfeb36ea893e1cafa7d9fee1ea60f07a98e812d9ba332ccf222184bcf0bcb403d565c2998c02e7b70fbe09d441332336f2c32397aac6bff34f86e4615161dc730210ad66a748ff36e17921d102cb6e2e7f2fb0916d77101d5520a1aa7d3885c4a15764f5c13257eb672e2f3692e8234e6934607638b7707dc76a688ea7d750ad38a8f1d0b6abb1924d6e42469aee60d7e53ba68aa7c35db5a6c99c0c58a91f7ae3a001ef9da54bc0f8915b7d0e3cf0e3f0fbbf071a41035593b1d28e6ba2ad601343eee9c5c51af8e3be2324cfc141fce2637b9ea00e0f25cfa6c7ea7a7a2af7b57b2e9017db777cd1f7230b9b49d257e43aaa554d483aba8a58df3a4f57f31808d361395b52faca063630f685e0bfc3e12e15289959892571fe2a4620beb8ba70d478d57a6577ec44d637185c96c1cf2510ebe6ac9e50def40700b80c6e18bfa47e347b16160f74b4380318907c0a7497c4116c6fa32de6d6d80ab991bad552ba88404676aac8cddfe0a987b5929f579ed502143f2b6acd3b7490cdda29378afa72a3d7a59dd65b80ae1b837b0afeedb418b2aa48a782bcd5632106729ee774821dcba887902b6c1f4277284e9ca4d76832414f8378a20e324cf96af7dfa93d78aa9cc28cc718fee53b2a9e1e5a57e97919432738e2cf18f0cbb2d1209aeb0e0411a6a8d57fc64a3a486a04173ec7046496010a73628a81cb1f3bfdec6d6bca4ab98e689789407ed7e4f78c757a0e237596e651450c64de0bf996c31d8827bfbc36c62079ea57a2f97da04b37033af2112b5c88eb09345c1b193dacd6583a7513898d73da0ecc30153f598f534e8016b838b1241ce61a3e7daec5df94949f28aa56771305f3a8b9e4956e21742eeadb4d37d23b74597d9095feb29731efa2c7639c6a203ee615896ed62d203bbce485c084befcc63612d1f69e43e6206d40c2740578911fb1f3da6f68d6b4b727effcc3e01a1ed03f63109c786174237c3ae18e6d21747d4fefade3a43a243cac491476f013146f5533f6c36e7ce93706680f1747c9e8662171955dd10ef8526505466b6fcb59ad50611dbf94c1a63a2c4e8b19955491f0fa42c4e1a13b05da26bd5c8a34e6c0d49ffd63945d1a34645f63128383ac30dc5118d1ccc566b6515b57ad3dc6cf59dee040246051a4b04da5d5b8529f8cc9deee2f9ec0bc2d4e9f27a3db5caa30aece8400a94ea0c31127f32010bc5e7021c29050553870da0a8f3196d8ea2ac38e33fc5a2cced79e8be9fc6f9d47161c2b9cdee330b2da7064e911c783092003b2242cca8d8daa7081cdbe1c0bb4a5e02776de0121de5be8096317a5d16316b61363b073a99414f79feb744f629193f96d7db05b8ca085bd8c5377b51ed129c4e88512ab54e87cd11e56cb864c31e75479de12e17a8b30d886d0e142c58a8bf9c6ff2b78e929c206ea47d97e3283c531a32994bf0dc382de599979f9cc03349dc5bf5bb20c27c736a0b9a231e04826f9635ad3f14690a329fd94bbb03de8cf9d1e1546aacdc40d51c263315b8f6236154a4ac1a481eb72ce4ae5b1291bfa6373af5178eb729452c5195be12f31f2077f6bb21c2e0416cfdad9cb4a0390aa9e732ed494ec002df2befa46f96bb61ad06c014ed93635344005e53c9395a977488a0cb5885487bb83ec7a58d6720b1d4e6d8cdaf7c4d050051d0f8cf7e65fcdbd80dbc64401b19937c549d667d428411246929eb4cdd38ef71cdd59467dc1afb58b844a57eb34f26c386d342b6c42f28109f75a812726d58a883c13f8f5660290957993fc6af0df8bebf6527dcc62252589a8091b820a8ca1ddba161362f24e0b05527cd43dfdb1d1c21dfe38d8fa92cdee26a95fdc2f25bb943b4bea9a0651cc09beb7ad87d6a1bb50042c5924a80fdb6846096f0c361a72e29bfb3d194c6ae96f9b3d26dc43f7437b0659d83638a4a2ab7c4b5d16bbe0c6642ff784b52815a9780c2d74ad1d7dad0f3695012791949a61a7cd523fc6954ddc49ae23bbb543aeb4019052fd9bd7e42e045dad8bd2061eb9bec7bca9c842fac9a6f5d793b448459855d7c0e6a128be40f8a8cf08047d218dc0b0e9f72c55283010e7622cbb3e41461637c5bc2049a2047f95c5c7f40550ea66b34510ae9a4c36041950b3a806997219e74ef6113a6bb731b126062cb2df5831266728196003399be15b6a217b9236fe16ff7dc9622caab615569624c6ee8bac55681ee13a9b68f830683fa2a41a0c57b703034b3d126b958c76113a9107da3fc73c94186d5cfa82f20b858edcf11f8b588bf7f0c4adb5a0fbc5f2bcdf7a3667e25bfc087a938ff1d92b6167dacf97609da24fa6418103b78088627b2ce8bcf1808b3c5e1cee3ecb9d65b5c2416032adaf0cf1ad733c76d935a34ef31b30eafa01267ff7bec4cc4ab40ea0153e41d013a0b4a75d7fcd99d3f2b5887b5b031a1c86652b7bff8eb87a017a5f499040c2d14fab2ebad0e6c35d6d2c5ec60346f95c60d95685eccbccaedf1aedf22c0e4d9ea64956ef7cc0c106cf8fcb5661b3f1abba46790462e7ecf359bdb67ca6aafcc1b851e53be7f2c23d9ba61e9b42ce631bd1f5cb9cd84426df61cb4a87440ea7385ef1184830a8df23ba34a7df08d675ce5db83ba78c8c005f8096092576c098ed6118d2e2b32dbb2b84463fbaf8515001dc86d3ebb05ab6fda6d33784ec885af6fc31af20ad2850c40d02b11ecfcb89bc662570f021b9f81caffade9b990378865fb5b5eba03c5f6d44d0e0d122c5b9f5bce0ff684b60447f422f2f034bf82558f739a1028e40749b1659fccece532b1bd55911dd2193428e27f8ca7aa09539fcfbb55acc260763debc01ac05bb664b854dd0cce064db2144244b78f39ac586359b9ed4e9aa36f8fc864e4381a9e23be3e12c11b915c7723bac5c14f1c6abdcb029659e1a7c6abd3563648a9cc701a3822486baa155b0003968986efbe5ece0e596946edd66d69276add2430547627803ae1607f7163b76efddfff8288971e443fadac52ee619b939097b8f90510e9d7db8a0ea9d512cce8b75b98f5db38e84e09bc085be3c0cf7e01d0df0e41cc2b0f2a2b59ee2ca368fa1805449c526322a1e68769afadd12fe8ce590fc4e7175a463377976f74109da1ea041f0eed6dd30b0690d34f39512a0512483944243931292b03a353ea497d46ea1754831bb46cab8eebb20ae055094b40d4115c4a58296f4e52a44304c71f877d2cff0667c574f7a85ab22d13f7c2a855bb1f941b90c7d047d7a48ce20855997e82254be061ff2ab320bdb745c3417688f4a9c1a664a10ee0d87163c215258799ad320b0a891e42c9d07278d03aaa1f2ea4f35e4de6f025f0645a464df37d87303f6949d58680d64361e002a122fbae6512237519049555002bc102749ca42280336e4a30d1c2c5eae0c626c17354609a1c2ddec5d4f664a01d6c1582b507ccbbad8e08a836798ad907c58f9027f550f026677f07731c18414bfc208d95bc8d564a3841a49ee2378e97a9e5c3615b3ea772c3ee982f170d3c53b979cf725c0f000a12c80ee1c709525b8cb2ac033bce8e033a060f5c431cc79b4c9b6943c80e20bd01502b6d9021d6a23b23af478078fc1efb0593d18e2db6f81a244ff54159d81108b3ae4d8077d6ccec2898215b7c56580d5e3f4a434ce920b2168e07aa11c9cdb0b646f893ac05da7e50d4a7385de7b0c6335f301e201fccfe1cffd3616c28f09fe2b75fcd193b03ddb45b6dac2d43cec10a11e347be5f29a47943bf8add7539ceedf678ca15733df4274e4daf7ba94c44ba6349947bcca744d112121e0a2be15525087a631769ec65c606587cae0c5f5b7f4c7a59396254f44821742443408bfc729741c4653d19bbb3f2e34bb508c1e26958003db844095f3ff118be1327cc8cc152d2c18d7270588c079bf2beb934a528bfaa999cd81965e78c8b3241a41aca66bc369bcd4390d0e6712bf4dc925fba4518e7b473d554d0666df1cdd2669a526e8fb1e9f07a0eeaa05f86c7acb8358bbae54c5a121dd5406350236ef916a6ab067b3a6197d83500587458adaf23748db91a5ec4ba266e8cf2c6fd32324ac38d22baba71f4896960279634e619ac9759aad82a994be10a8f385ae66e1021e1ba5797f95d34d3081897c89a795dd2299dd95a1929df39726e2524030e69071729bdde902c8f7e11a23a4ce94244da36e8438e0e7e4a1ccb6fdf2736711a72517be86a6cd5fe16720560d405ef9379e79e70446573ddbc1feb10639c30c3e75ee195bf1c06e9b4406afb84b7cabdb28b9ac8cf9c1fad220c2ea2da59726480e9800e3a80bd5bef5b56372b7bf03912660df8d8bd208baa48aa82ecfea5f4b742a6633951fbc1b9366cb4586ba56803daae6006999517ccde82d4fbe1b51d656bb88ecd9303822db0f78132e037e186752400ad9308f0615b987b08e4cea6b6493eb93ea0c8435132f11351ac0f1de270d9664aee32fa0de7550978a61a58466380f3c22f93de7d735806758de6ef353ff0d53dd73105dbe0639163ad5a4da8a8f998dbae32f15c5b70ab45db62d8b3d127fd83caab52d685d2c085f422b8837c9c35df6d43b3253b85996d1b1268b8a082334c464f3408072d4930ea414ad6116654bc7448208ff58fd0372451cd83c130e34ccca6fa3ea620cb4c25c6dcb339fd44040dc34c9e59fa9cf00569a1483ba265fd34fd1c1ef1df50212898f4b73d4936bcc9f10e480cb61e577c2e165cd1f77700371d72bc49af8a92951c7e6240a099a74cf108b63e5da9cbc8c6fccc3d74555194c686ee45b406b0e0031a52ba8099cebe1554b3d9d5cac89f6a640e59f98fdd9516388afc9882e7ed5cb47e69dd70636e247b87da3f9639d4153064ca039ac25a274be044e9ff4876083c51dd1e3ff3678c01c189014089218f207c97f4731389adbd6e98ddff13cd21dccc681fc54facc597790b0eff2771dd2da55df63f690bea6ed42a6344a040ffd3f327e25a638fdc07135886da547ebc53c29857d2195635aff7a4065e2f528244794208b9ff1c2d7b471324b4630b3122a12645a3510312eabca53d161d50335046192d0f41e851e8864f14264f1ad8107a09bfe8b97c2b6b5104a554760f09c4fd099edc10d89173e9ef89e64ecc90615c7678a31958c999ac48417804212146105fbaa6754ed711273ebb4e3ee048c461517072e44f464ed45ac0240504c64e26e24fdfa8c281e3c0550ec52e2756d60f90623942943e7957bd8658b521f699f397a6b0e772d5a665e6621df4b0bfd900b065515acedf48ee76ad68ec689b46740f2f75070992e24eecbfd3e73fbd6e7ddabeeb99a1286a6f9bfac023865e0a9bfae616cf89884fc5fa6589dd10c63696d3c3672cb1f659e3e77ba5a644f67af3996fd5520294a9672c15c34c3315386b68742708dc12bde29c727df275e3b995b86c39e83b62cf0a1c5c7df6ed766b18ad2447044aa1d1e52496bf8418dcb096fae33ddafdaf7762ac8b2748204a75acc36be50a39ed7027429b85725fd8039ac6909b6c7cd0298186599f8c696eaf06dd894c729a3f8adebd69dd6522cd08e7aa35407490aa08a2b94521bc04edfdc5472dabd58e79619946381042654f9681655a67e7200834c9b580d087d9a820511dfbaac4cd1c5bedb7d1a5cec1256b76bb1b2fe16ec551f50d32ebfeccf95cbd55e47d4eefa48870480e8441fdabd1498315de3434c9ddd81e211b7529870022f07a869a6684aeb0c76e83b0eb4cc9dd19a4a05bfc127faf9589f520c865fe64e405038177f0f464f7935c6513229a2dd6f89f4765399a1538c8d99204be65891964b019332342c29dbd0299ab9a1b878dd869dc289a9c7a63dd139b4a11cc5d72bab4c50c4356e89206a30b110624cf6094c5460bcc11445cd75fd207cd8eecbb3ee10326849b8abc3ef85dd0d3b79ad3e4543d78b4169f5e27d8e3a3744b5667421a3851d7e9435e50d098056a177ad8f6585f7cf137a1257ecf97079707b1c7aec6fb6a54da3754e4a2ace74f13ee6c0c941150d5810a7a532177d22285cfcb92e975e592505c4c7391488b59f09b448c5b1fa720b74d14c21b3be0dc06b50cff2512abac84a65de62677df3b27dbef711661ab8183e1d416c93e0dc1ed87915dcb9fab5a0327a59a1845a541d501bbb4b54d44848d01263a585ab2868ef3c342000dbc0822c3df8d54d046d81c32c37ef302450fa6e756f14ddf399ec2e6830cf9b4f7b3addbbfd91f7c1b8796ddf00e009e22dcd8268ffff2f4e05a2a339a0223bf9f17ac3aec4b98f1ad6fc1cb8cb4c9934ae58b679efeb1becdbf3238d84de987ec91333f8dc846126666f2e61507566a42ff469e6f86a37c6eac3121028e5fc38ba4187c13406a8fb4783579f06d62cfa0f6a4cb4e67718ddcf042aee682a2dfb625f05ca0b775c4bbd18e520d7a3fcc1c41e7be8469a8814fb920f7e2a6050ec533b70f457239892600073a810c73267f9d351d3902d3ed5d6f8ffb7ceebd1dfd04741d6a6d1a4a31eb354958ae27053eadc623b453a8e65b1b0b453a53d09b8a65f61c133462b97e08a81c952b44065f42f8645b736ac2f8460cceeee05347b572efef405bc3fd904df829865d29687833c2720175c8e43105bd522953b4e5cff826fa639e07deb741057cec83c6f8715df6c08fff86b4de78bdf5324618573b6d71993759dab878fad42ea83f720e03e67f5bb5fb2c88cdb010c664090218da42a49a80f9826eb4d780c7154546abd43a03bf684e2fe7da1cbca1761620cb9164b01cfe0221f40e1b80e6b42118bf13d618a587b1e9ba49bc5aa09e583f3909f36a6ec84be09713fff39baa057ee5e67e18c0adf5d33d415d29927b8815c7ec8a7f35c972e3747f5a790192510d7bdc37903e635c4d70e8037a8037ba038b1fb46ddd841fb45d530161a1d4d2e2ea6bc5bb08b9ef7ffb238e924ba6393315c540baf0d23857b2dd20dee2f1bb1a40c3da548aaf0c2d2b94b768ab0fe21767ebae0884a4cee352f7a27130654368ba84c6d57ad3b10d424e0f90b7265bf63438a5ae7eaa483f20ae084779434ff58c353487d454ddeb563d5889939116cb29a3790ade5590cb97e497738839b2fe5a380404e605fdf33a21db2714e8ca11ad34df0a41ba3627a0926f99e6ad3763d1fd09b40568565b6c704640294d952f2eb2e338fb889d4c47084db3d6ed72a843efd53d44422e561243595fea33b8621a7ca1b1e2078df8dda5d4351a1d8076670e1ef82c6670a58994fb1305a525eaaa4f7de62416a21628454b2d6d1ff3c68dd425118b49b945051c5adc3708fa3cc92d9531ddc3c15cddd7504695e50645cc17dfe30c470b37648b1c3b324fb9fbe6b5c1555b22874f42db91f1c420b01e8610ea72023077631f030e5fba54b42dd611f252a306f4910e831018c8fd542f618f51c9777bf12e1cc7569db43a54e564f35b03e0ff285788b4a3d4c2f926b1d83300ef54fd66f093ceb391cfa0b12cc73b14e55e8cd6bca336756a58a3d9dced9d0093a0002be37b46cf5855ee53de91b064739fcfdd11cd2f0c0fb070e1576a554b62556e3da91ec0e19e375b81352e931a6ec79d81cb3dd8a3d3438cb517b049c85d7ed0cdd52493578b92c6b4c2c4162f6177984b492aef0cc0db537a9c115493f9d9ac57b8694a5f03c8839e12b17dfb3f2881e2172795885ca2a7bd4da3f9bc8f54e555a3d306b1e9dae613e80e5a1fbafbe1af2d5800a036d159b0935c6453095d183bcafaabb55c28cafaa57fb277138f4353c0f35742ca2a0ba7bdba513eab86bc0e811c5dc67bd05c523934a548e54d3d22d85e4e762f6c049d9c7869a83df92582f94c845cefb2730e84435c02190a53820064587eda89010fc7f888cbf8a4c4f7ce56c88b31e472c2200e3b25931286314b7340bc3f6dc026b55b99140b8fd2fa9ebfe27f992cfe7ec4427416bfd2ac049c43209dd6761ac6c788dfbf604dda78ebc3f513eb50666f6a9fa401732a2db6db7dbf73cb1620ffa5020b13dd891ebdfffd100632424af3dd0b01cb15070808f248441255823ac359a598aea42e40f04dc697bc9a4c1fba4a05d9c9135313407b2c08456155daf78ba4a9bcfd76ff39d723bc26269aa35f4e55039b41d0b359801dd04497df28a2a55d7e529feafd02a8b7d36e01d147011e2a1e6ce12665335128c49e99f133e2c12d200b298734ae0885e206f28e1dd8a060440db7ef795277fb22925b35591cd844787364b76e71ef3d6b04d860d5c0de9606f6a92fb1bce89f5ed23a8d90dcaf3e27040f00e976e6d10f3ef373f8077cecb878a0e6d0090db961e83698c22dd82d8482392ec0a7467366bf365ed55dfca4b6c0f4c63f710d00ef3db410298dd421474d3af0dbafd390f77aa41bc7112f1849e3a74e3017503939f17c04b82312aa5824ddb29547f6df63f3ea9d6343669de472215d18812ab2c4b0b575088d5f12963621e7c441902d8d7e18022f6a407ebcb12dc8f03b1cda4ea0cdb8e1608fc3004810029f3ae3f3be7d06f7e3fd2a5172eb58078013b22392ece919df05a7fa47144fbc84b2dad36876dfdadf7bd8a8d961627ccba3be841df437c5afcbc6a481bf34bfd734c252793b01fd19484e450dcf8b29b3d4db9cd4818466184ce15bf5dd99401036eb1e849a659af16edfa9a24f4634922755638a0ebfda9c20670201b0e5bc8517e44198b284af3550ebd8e55dfce3960e275e43197563d8c185eb23717ffa28d44225af0f61e38b7892845c99ab731b7168df6e8acbda0e90e09936b92c7644b5e19ab93b608e90333a16822737d1f6b9eeecff35f22beb149569f38d19aa7f9b0e337b108ed5f4df9469256003d44c54a075ce2b1c646eb23ada867fe1efda9045ad8d16c23fd44b804feeca47e4edeb4c7479119e68f93764a7b82bd1eeb7bace1b8d2d7b3e5bc6dee35b04096e4520c823044dbbf000539e3b9c3f0d6f7651836fa56279dd6bed42ba5663ea012f079521d254bd43749309660c927bd900dd86db3ec97ae80698d1873120374413eb4958acc80a4b097349cc9355fde1a299b23bb88b3f75cb9188d8c7e3397611861fad94644c12255479d18324651df61e9c4e4721f09942e54d9ba515b2feee8583dd79759fa34d501720798ff828a2dc4557812d057980d0f1c1ab5c33014e3cd1bf16742264b86e80f210fbab8e700a4ca56f3adcf911359753a311417eda83f7594b8497eb06dd2ecc33413d0f96683e51843d10fe5c9bdccd28550c4ef19837fb349f1301db5c37807ed10191097b11f25dbc477ab6c2fb58b4c3fdf9c1aa3752a461bebe69b1f4316f2d5b7dc09b9c262bebdae0dc98b0aa3bd25f6a6e1b22d56baca637375bf9727c974068e222f8256239b37ccb4c02d36ca7c7c4846b5ab89fe52d5b98618e9bc69f834e94239210f4edc0fb4e369fad9e5586c41cee7ab9366c6a22a3f10026d93a3e9abb2e8870242e886ccc9ecd9006118108b7b728a8c74b55e7aad85660c6ae5b04149481114fa700bb6cc9d1fd6dbcce899eeb1800ee78032d22d54d97d359641d275885909cc047de063abfdf6dfa448e54119f867d2ac85daeaf95656244b38526a585513b827ce0ceb5cdc50ded954e67535d309fc828f77b3572f019dc98a02ba4de723b28efc24d04473bc32dea6f6fc4bfd19980062e66092ec0877b7561885914cd9d4eb51a466c7242d72f2baf4114073fd7178ca8a8def230a8121be2f9ba81831d5a2adb7bd5eb9d9c73a3879fa012b4078d0a35b3151e434a88c4b054bd6f99d2226a20e86521f7860bd38d5123bc2a9a4cb891a405055b885a570426577454fef6faad5ec88a66a7e4c64877d58cdb3ba5e754fed634a26cbffc8bfc065562ff280eb71e52e08577f5ee881fcdaeb4f76da4dc44813bae488437f934a88e085ee5c4e68f27323abed22c835131a0a08be3e346b0040099d3a0c19bd682902f929ab9940c4854fd932a141b00e36e9a299dee79deb48c83f039e3f9506f6b4eb5dbb1af060b4e7c83fd46053a70c6a07dfbada248118b6343551e60bb4a28107711baa7bf97598107767a97aadd71ee979fa04522502d0da8df7c057aa2ba508068b2d6419df7e9ff58fe4dc2a43712ef624ef11d7cc4f2c4e98e9481506efd9f741ed01183e63ae20fb8c72a0107a78e1246a10454275819dbdfac8269aec5560900e4be1a2bdf8bb0321bc62569fbaaa6a2c3ebf98741b3029e34a44ba36b27bbc3c6d625433a03d361d83268ee4766bff87767bc52bb2236cab603b336e0e9aec31ed0af46a00f999db491420a23df6d92e8013e67ee6dde8914f23a298e01800304ded75dacd85de6f0772c575808aed4195b7b1f6aab9ff66958e6f209a25e42d22572d050de9d642c9a7cfff9b3468388651407fc0d76b2fced56f7d84b4ccd1e41fdcbcf2a51d05746a10eba339a216e7a4613900d69147de20cbd6cc47905ba79c580aaa32a44b0f3eca0ecb8478d4e3697bb9785533052dd928e3b150b1ded2c5951960967f61eda5260c6678df1dd9fa13682df132acf41e5d75d0de3fd895565c6b0f7a09e9f39c791c451106738b4a9241808891468bedb77adfad7981a8400453d2e458dcee156a55168747b9bcc11905190d0f5ac1ef08779446e5446475771b6e2bcc6ce56667cfaf9703b5c774b7e20afdb594db04fa3314b2f23c7634c5b213ac72a4b9b63e89572b0b96fbe39df029db40a35a2a99c088e69371e70b0bedd30c49a5ca6c1088798e3d2ca6c343dc6072641a2c6233f07791aeb5a771c5b17a91e5356dae550c1701b3bfe194c33ced24a27e9c0c41c0b19428519ee8b3ee333a44efcb32a2cfaf5e4c67ec5fa0fd9720145716913ac46b0d218bd5fa5eb77fcfd91b9ab9e304f03e1057ed4d14edabce63d47bbb6bffd0e804c2db8bc2bd31138e91e90c556bfb667f9b20b53b38139cb5d124378d30d17c1c19d535d2561980aa7153358bc8d059c7ad27b526937f67cdab2289c6f0f01f409c9f63dc96342dea352a000b8d3ff755218c103427cbf0b01ccb51b9898b1098d32c51a6952daef7130db4a89016cce17ad52e289d63acdd2b46668f1c08e73e4ae3681e8f4889dcdc6fbce18fc4e272723ed1134c3ad25a726a6c8ccc69d9ae045b63404725a912b51637ad8b0f80e3f85a494294ef398d632d38ca6c3054a0131228f3fe6f93f868387d8b3922110ebc555e04b33ede94a8e6d618df10081f54de1ce3bf9d28187eea914b45792618353aa425ea36868e70bb1df495fa280d224c9e01a4b47bd44829ece523a553bc3848a13fb8a5f6c20bdbce8f5a25e9e1cb19dcd54c60987342c23f87798afb6f98c8257c8d265c335638035e7a522bdf5e212224f86dadc1e5d53cb454f5a88ee9253bf57efc577cee1f9136b56af1e6c07b679c11edf1604c5721af600f04974db08c0edd86aceef611d25e97be6d93cd4317bc57542609d8a632de1220b668f0ff3f30d0405cf395537a372e794f57c1044aab0c01af325fb64d026d6a417239e60a53c87c97463acfba66bdeaba236ef4d28df22d12f0b2fd9a125e1c30d73cc9317389f814007d9b929c55f65e13c76e934689101c6ebd234265a9fb4e99fe8cfdbac0ca99e5d952129ca77d0de36421c75e1d577428e335c733a478202fa928f948f410d5204b30610405eba57c1bdcba4808990ebcdce9cf9964408e06d1a3e3de8fde38166539e431a668897faafcaa1f42456822c20895fcf9998a14b72b278ee03496cea0001071845f8db1e30b143e1e4a143ecec79baf5e0d9735d6ccf76748d38eddce0c87556d106fac729d031294242191aeba2b1b907d007876c2d151b1831901d9cd131bed53d4ec215013bf670a7fcf7f807d31814e6e9371880dbf723069172073701736dfdef89a04745d4222167d2dbdfb42e4a1362b140b640ea55c00cc03290cd5e7f15ac4afc35fe3628099fa49b994e30f8d153b097f43c2007347703aaa9ea895a308c4a4e075513c57c3d8d8bfc8749f03002e5873b8a9bbb461c25df80ba032323f0ebb036a8c5c5f1cfbd20ecae60cc271d0ed1ec5235c46cc92482e40e2dda1bad71d0700dadcfda877e6ebed831c146f6de5b6e29654a32053d084b08c6088c6250e7c6d7611f4682384cf379b19398ce7f4aff6ef988ad8379dabb050fd22dfe95fb9cadfaf259bd5cad6a751ca2ec16bb17bff66edd96d2adf80ea6a0ba4ae6eda00824bf184125f246a10659445280731b5422af95c938a7743176bb4b39bd25771aa5d4e7a4db74f749a594528221a594ce393b89f2183527a594d239e5c388b0f1dddd3df270a5bbbbbb0082acf41d1b67788c9a93524ae9a42a2f220e4939e6ca8f330f28a594ce8f530041963f86ce8b6ddbb630e61750bae5c5b66ddb76a594d21f7664a317dbb66dbc6a959c2ceb77adb525378f716987c128b8f4637733c3b9f4c3f9dd943934aa5d2a3dbff373ab5dda45af3ff9ac7d21ed8e6ea7b79c53d368fde93ace9b3f9eb53a3b343c154ac87cfa85b388cf99d359e0d12ff4eb2eabb1b543a7558e8eb9540ca5dc570ab205eec7ecaa9f06d625b73ed534ad6a4f7d5cb1024a971cb4dea856a99c546edc36a94635aa514a29ad1bad1aa594ceae73e5503bcdd33c7766669f74d2495d5568aa75ec131daa4dbb13c4934e3a5b9b4facd662b62e277feb75b9632f6e9581c75ceeab96427920f340e052c9aefa5c4f55722973abd24a29a5a822daadd1560fdebc68119d53746a18aa23f7917eec3e7a31fe929fee913f3f46478139640c927472ece8d64cdee473a0a7afe334d32d638837d7e96ba6afdf74ab9bf8c366bafd5ecf2022d0d4a846374aebd4b449279d95d66dd69f736e736eb35219e7869e178186c42017156dd6adca8d6376779752fe2cf98940ae1bacfc881222a5e4baf3ba2827d562e4d726c71863e4a869524a3939a2f0817075b578f935db2da9699a46bfd804c8061b3b4fbed4004a18961f4a1336ac1bad35260c5a962e30906292684dbac0c13419216628cb08c2ccc2d8da23636b6f069bc1e535669030b2382eaf31a345a3625997d79889c19301698e1cab73790d92d38b8abde0f21aa427c220890903056550918ab20990598c4b59a0d4b821c7798a4031282886f14a45a39dd134d40d775ced0a13576322a6bdc542e56a589aaeb6431057db614e95af578ed894dfb2832b365c49ab40f1e5872e90b69802c70a10861cbe10c34416330c618252104638f1460b172316f08406cc08787872224ea9d502e17725d8efefdfbb7f774fe9a6ae5e54b806554eb04309c01023078b984f2c72304286165458c14acc5b8beb5aa05c87f2f248002b52ac78310236ab8b0577638eeb3aaeefe871fd390472bd0cec868ca60ad3ad5caeff2a0726aeffe770fd5b4470aeff4b8731d7df2786eb1fc2087670af82e576bbbb6f2173dddddd7a9eaa5e5025e8f6778c2b8f87266f969c3c31038298b7b93e013188ba4449411518588839685d527a1887371c187a63ed67d46cbd7c54ffad974f7f993ce7649e72ca29a764666666779f12944e3ad61146a157b71a88131b7ab77b98d1843e1e8d740fc35c479c6cacdf84fe13ac88f52749dd5e02a374fb7fbac77d7a0479ddee21245c5dd5e56e05f1f885f2d53d135475ab757f54b12192efda6e453a86d2679edfcf39e9e49fdf4dcadf9d4ec37ca706e39b1f1362dd87b1c9488ed82459ffc6498bede4579b6a9313905dcd1f6a00c309cb12134650f8082b3dc029d3840dd2972620708cb4306cc6174a21e8214e9a2a3ec460cce4a406213653ba9061c630590b4d5620220e0e57a028416c7e23318c0261a8cc9034a7a88c1762f35b8b4bc8b213eca7635e51f76831420929c1bd6f94044f28c104185a4c56cae53be7c7a758467f1c6587fddddf3557fbbbf523501287753f1a385bf37bce0efc89310f6475773fdf15a5e9687e749a1f9f4e10e188945208a1690078844d08ddc322f272d77c9fa6a3d843b1a9610c45529ca23bbdf9dda461767e4399df380cddd9b1d964cbac8deea43010f9b0b1fd6dbb7033dcf254bb91bbdcdaef88911ba58c7eae6897b71c0425ddba51d8d08daeb8fe7ee430167dfb3befef57740f8b7e7feafdddc8670ef32077f94f9d0f5f3774a31364d00d4e403912dd28fa51f7308c004e4040402a7c99350c47ccdf91dc5c7f57d33dbc44e5ccf577a5ee495d7f9fc299bcc905c52639acee7c8afb30cee25134f22087f98b4bfc21dfdf915a070cdf4116058744cd83aebf1b754ffced434ee299cf17378c63c6c4e9961719adfeeec899c36293bb5488436bd6b469a385166080c172804237b25f92a42e115681e87a39273d924fab954ad5b8618d1bbad1f5971f059c8fb89ed89e4ea8468de9584718671f05bafeb1b6ef4ba55b3b2fd8ed63c8aabfba31c836ab8243e2eddf71239548a5610c90408471d1159fe366ccc08103040730800254a5c8237e05bafef11d001b1bc2066a6c18b5f08c5c386e437d28bb0e0cb7a78ffabaf7bccf1fe539caf36ee3bef99bf6fe9d534d9baf490a381562863356dcc865709c585f37cee8191dc92b6a75743c4f7a9ef464d489434996fc748f7defde5337de57ddb3bdebbc4371ee1d9c9107d44f227621541bf91b8f4cdea3be3eea3b14aa56ee83340a49eb72604be9967ca72f3eb94bbef7b5d008542cf73aef711ec771cfd7eba06ed22d1e72b05165518be8875cd63a9472fba9542ae5f569f75589b43fddd74fde0e8c40dd92422690a384d42ff46ee5e6debebb7bed5695a821dca7e8735f4ade88b25f8a22f12ea5aa314544234e0469bb47b3a0c6d7789dcf41feca613b1ffe8cd7557de87365113a5f94328402c355d296346b4c949019a1d01a356a8051c8836bc167e35be22a30fc19e0d30ec87df50b6d282faa5e14ea39fe483d0a0cebd3ed51dbb66da0d72dee9907f7a8af768bfb881a52bfd37efb94dcf9c9cb282112e80669f79a39ca54f881db2eb3a06d70e9f884abbd0cbf70d54a2e872a24abcbf4b69c94cea79452f985f2bde98793bab7a49d17dd6bbbcd6d7a1e95284f7a294f468f0bd3456e32658d39feaa4f1bd288a4d8501bd28a3423221b6a45da9136c36243ed4843d22c18b2a1867495986ab0a1a634936a30c52143d32a026a10c10b2c7819228b29b218d6cca0c39821b8904184d6e4949ac1865a13b7719b7c9202a2a1c417364f64fd2ac832527feb5e16d33e0d6419d1bc97c5fcbdaf6a1954b1a1f674fdb9af0ad52077f9efc8c28635e8dbdc4839e2c08c16497588631a8a3fe4d72176f9d7ca310d4d30b45c149187d7a159d1744fc8314d5989ae748f7f2d6a988a4bc35ece6bd0d870fdebac7b6a5cff5aa67b780d1468aefbf5af491c93d2f5e79ab828aeff15d79f53f2e7a6e81e7ab928e20ffa71841bacbdf3438ea80e75cbb932d79f2bc3a1990f02df116eb0f3d2e79a3eb0e2e6726fb82bbae51c534a69e8ba7f1daa44b5886132209668a209284964b1414eccbf1a316c490d366031254a0f4510c5fc5b63d80ee872061fe821931d01285c4a29bd832864ad9659c5aef8ccd2c5d8660e5eb0ad383b2ebf073ed8226655cf27fecde1e31ddad6cbe70bee1f0afec86f461d3112635b77f133bf64c9f1e3581ff58cbf91f853552cfff3df36621f76c5ff498e45c7d18b7d66ba0dc236b3cca127ffb03e39187fe8d46a94ba2d39369c43470eabb56a6fea1a86d527171f694a4fccd30f65167f54a7c8e3c9612d875d4730acdd7085c33c5d8fc256da9cdc7ea24143a9c2611f4ef147335930230a5771a85b2bd84934a97c7c0434b1acd89ef5af47f18783ad548d601f11ec25e6e99f43936816f54f23ffb9c512dd3e8aabb0558f1cd6d55aa57e0ec01b1b6e51946e0fa53024c7f51f22afbb8e276cfcd0db8460e8f8b28eda4d29a5923d241b5615185624b77370cf7c59c11089ea6abf2a22840d552a0dccc1304b351a9d791c89eab62a877b19232a4652344d8bdd9aa67d6b2127fdc0f483d294a299495db6a2cc0d9751422618beae66af0f15cb4b3f10dd30060571b97116a5b4d114378c414241466aa00c6da0f6852a940481bb55f9f2676f2751200c4181509fb9d5f1945cbdfc7937a24060e6a9cf81cc3cf48b54612b186aa1f6d3db8bbaa7c158149b748f83ab6e91613578b2fdae996d1048b7627f8c31762810e277ae1258ade3d43ac909a2293a4b3e7c6913145b2808a43b44c618bb263019441946ae3296d98c51e6caa233360525f6c627cc133fbac03ca4f7f3a4736310f3c4771d61fbf3d7e697a45ba8393d684988a41bb5342cc6e29210576250182f7ded73dcfa0cb288f0b8f5ebad6018f6d1d5e612255e90c3a20eec8a1f6311374622e68942e00e1c2e32d2888b56871a566cfc6719a93fd55d71fb5846b6c8a91d1609dcc622c16352dfebe657063595f49d1998440ec022f2c1edff20486740fb0659449a821ce89b01f9ac21f2e5336a8d13b3ebdf0737c9072c12525fbf824cbc4f9150eb11d46f20cbc8d6fd56c13e3ae2795f414e164b816de4aef8abefdd157fe3be97bb627cef0b82fa421061c5b15419f6578dd449ada4c9b49e2188315e186ce8718c31c6183bc6d89fa4412431768cdd31c618638c31c61863c7183b62b1d13f7e2bfe2bbe4ffc20427369b502db05916373dcee09f9cd127751793ac0191bf2536cc2e257e20fb2f893348bc1210c22b9d164bfbb881ac24f01e78661c0d4c3278802182082911296b0142ca8b911a83f5a279ef4b8adc3827d31b8038b0debab6e4f15ba14b8eff8f2d797d1df9e1934b27d057f98d4d77e0359cc648b91fada33d91ef51464b12c05867bc93dfdd84343128731d94e8831d962647bef99d497bf812cfef9de73208b41d608f4e51ba1b2f33ef931d96244fbfa4c50ac11b647bd04ea6b20d81ef520a8af752d241be4dc739f847d6897fb250ed3be0ad9210ed4bae89d90f2c1c6cbea589df6246caf81f599c8dfdef99be87cea5196c861aceeab2d7218ab03592368daf61564527febbae798f61cf3e93e11bac53dfd8eb88be3b84d04ed19254404d46b1fc788bac59de02eee77be24eee2de72afc37d8afb5408ac2dea16f71d68af748be31e01682c7f68892e277f7b12fceba33e8e6959b4e7c00c58a36eed0b35967f66bbcb4b5bdc80d9b2a663620b9a4d3b62932dccea51e7449c000931877aa8444090b4b485a823d202507358b89c69e294b04b1b0b565e5e73268a356798a863d87979cd19336bd238a975b57a3aa57bcf7649633b9552da59795a69f7fe6f4d29dd659473f5ff58ba19d6004366061be4a6a293ddddddddeeddfdb25b9299b976cbeeee8ed304b2dbb895f6e29e2ffbc74f5bbd6a8efa9aab576d7d7d51adb66addb83a65b7552979eb3855dd3a8e559ad45494559aad9a4aebb80d0bd528d5c04aa526a567a6734e7afc970b7023fb88b095bbfa1579f8d83cc696d3d54bcba1bde6eaa5b55e7b51aaad5e5aebb557dd36cd27f5a72810fa6a55255955b98d5554d6086b80b25b406a057bb48adea0aa8df38e9382b2ce59a7b7a58bcdcc8d041352346aa018838a402080488a5fc45e0ee3fafc1e4514eff38ae20b21481447dcd5ad8ebda2b0912976cce2259fa600f2609e18a36a260fe6e9180f1eec8399aa0d6f653d55f4ec4a7b2d48b2b5202cbdbca485ccd512e6723ce2d9940e13c26edbe5252d43e8707b73a8e4f3ea86f676f4a77b421f8d4e119684d03069048c0b62f24b78baf24d6898958fa47b78a98736577e12254d577e0492f565ad6eae7ca6808f7c59eb11d8181bbe5e3dba6747b764ab5b52878ef9f125141d57cbbfd211325392087c44fe7c12e233c8843ffe04996c31c21f99448ebd5eab972ba6f8c4b362fd71889f3e09f323c80464b2c548fc09b29cc97c0659feb1faadbfec24429309b2bb221844489694119c94c4daeeee76394550f1228b0e60e038c5fc8ad54ae7ffea24398ce5fd3a4af3e51b992f9f823ffc12fc893fe7cb62ab0bc6623127a5ce953980427cba4adc839c78e146a78ec5cf8ab12febe87498277e3aee3b3ea55639af33038029dbf6ee6daf75dbbb5639768a03b7aac52977bc49a5a441a3f9e5a40cc40c8952d3de4eb5ca75de6a47a843c5b3ebd13a22b955ebad4bb41f258f895f20dd436d4ae7f943883fe4f3b74f0ff5fc4114a0f3d9ca318939ee2998c4757fbbef505fbcda76ebd64d8e9d42815c077adc56add74a63e9cff07476c41fd2af4fadd53ddcf3190a02008a8ddf6d935bb5d2c8adfab5d6af20472521540de5217dcef06854afa76312cba4211b8174d289bcf69edc85ac102de20456c897bca8906a22978c40e2c74abeac3403456cbe755a2ae286551c5282485a1d6668c21d5110710411571c5d3972ead2c5cb4ad1373a8581a6b2b75a451fb44013450c1b3449b113c880428b2c2ac0c28526595cf92d1d50d0640311572c21aba18d13312841468a2e5760a1c295af80eed9aec4208c0d573ddd0529003274ac83afb5ab6f451d9a6b5dadfae5bc17a0b1b16fc822f3e9f7978109b2e68791b5009e1f38c20d56c9bc1c88b7ff7e5ca1631da18da45bbf739edcc717a9fbf09158be0eb77ee8ba5c04ab36b0ab6e2821295ec2252893a58a8b84be69e3e9a0c386590cee82b1b86018e6e372cb102b28ec1225e8b8eaaefa496ad8877ffd5ae9d7af50f00f0ed4eb5fdf3fac52dcfa2e3536ac0d5a3656037fb618d19e3e3b057fe69b1e5a18028ad58f1f879420028a718c059f135a0fa946ac831b621464f9db784dc85df565b11a1fcb488d1f9683dadb00b52077d5905370c4031617096553d4456c8b7d59ac73af95c62a75abfe6c093fa061851b2e12b9450577fb0f7455c4b6d80e6ed880b62638306c16b1ab62d9726b1de2d64fe2cbad5f99ecadf569ca3aab4835e956a51e780a71ebf472eb3ce2d6df20081bd6a11deb2e548798a7befce6753d61697ce8483b60910accc29af1f43550037257c5816115484d4dea1eef0170eb572aecc36b94aa05cbad5f8d1cc65c9f945ce8d62da83addda74996e8d956748b77ee79f36c43cf52b90c3341bb4289a0eb7ce00e993bbea4f176ca87109e9d3ad3f89b0a15605975b5fab827d3031ccc75df577c0b03639ddeaf374ab9dc2fa10ad3416853aa27d257212e8d72dae745da995c68675e8013b8f82cf9933e3b90397f4e856fdfe500081efab5bf589ec80f25d4ed8f812f42434afab035629ddf24029f47597bb48f58b747cb05d23ddfa1bb8508f549d9ff1a5507f8992bbead71d30ac56070cad07721d5272d82c6a57fd5aad5d5da55bdf821e38b574df2c3281f7f5d9070a469fb5b4ab4e2eedaa3d304ffd30831f9307e651df7e7cd935df635235cdfade779ed775de17e5929d0fc2e7539ffb70d5d5bf4dd8597474eb4f2ddd83faaaf3f52797f8a3bfbe4e7dd4378dba553ff54d2dddaa287016314f4db245b77e1df2aeae5655def07138b1739b1f57389cb0db484a35064474cc8165365268b9f2a96c586425534a349689d06f1c4e6c6cd49008867fe36bbf7de1dfada39f7619551d106fe5e8e5be86713ee51b95cc2ba5f42994524a6910ba5acd5923fdcab0fa140ca7ac54a333ca2f3e5ef43aae3d1d3abc797c0cb9ee3325951efcb813880234ef8304d4d750455cf3dc8779e67b00c2f58fed1342c77df37975829df3ca9c528b4e906e7032bdab4874f9c149d580c4d0440e154c70b1b425d653b2f410e4a40b376b62ad2688cd4b06ab6e31419b0a4a9ba669ce260639438d5a3716e3c9ee205dacacbed545caad9797ba40b9e16b63eae2478e4b4c444b4c4657d5ad8f5c74ac23acd63bc929f2902fbf9d601f0d361ce6b1808cf50fa7511a3b0368ce98676eb10d8611c8ba94f6b693573157ce6934753c61fb5b716c388d6e3b758f93f4a6d1349a47733691649d49341deb083b20be7c6b58b121c7c4c43e5a03c107400e1cabafa19a61530f7aaf812c235c7361c52cc67d85711f0617b06ed8b080c68e4ea7714443d56a006419fc568fc5c65b8b88dce51fc7bea189830deb50eb65c6f2872d9f950a963ff409418414587e1cdf9112e4d813928c619744a0152c7f7800306c588782043085e521a2343616f1a8c21ecdc4b08c94a482e5d61096fba25264a2c2722b8eedaf0183f552cfbd2cd67da75de99e0facb8f1b01239356940850d6313d7c43181b19263e24103cf0a6cf7745ee77533d0d058b3c4176cbe489d993b19e069a6e363ca185f4c1145046bca5c29b4ac80a5852a517a8879693ca6551a2e56a4f1bcd84019d860c3f8c46ddca6398591449bc97a59ec8297c5307859ec7b592c8397c502f0b298062f8bb95e1623c0cb623c2f8bf178598c8397c50cf0b258072f8bc15e16f320c7cb62007859ec5f16035f16d3f1b298005e166bbd2c368097c576bc2cb6c1cb62af97c50af0b2588f97c57a5e16f37959cc87bf8faf3df89a8329366c9faf615ff38c61c3eef9ba83af772c61c3eef1b501beb6608a0dbb005f73f0b58e2c6cd8afaf797c7de30a1bf6065ff37c7dc38d0d7bc7d704f81ca88d0dfbe9fa0fe073d7e742676cebf3210d3e27ba46d8d087aebf003e2f0ac0e746013063432fbafe3a3e3fcae0f3590096b0a11f5d7ff073a4eff324271b3ad2f5ffcf9530f89c69080b80cf9bdce57fc1e74e3bf8e7f8fc49027961437fba32480a5d2e369441724812b9cb5fc715369443571649a30dcad85016c92339bb5d6c288f24924cba42d850224925c974802f6c2895649374a26243d9249f803828b2a17ce21ab3d762690525ab0117a6c8a08224c6606a424815316aa812a70a282488cd2964830d67d01d22ba31850de750d134c2a0061bcea27934673cd8701e5d9f4918d860c389349526536ac8865389dbb82d5e29db12e160030d99366b88788dd2951b069acac60b2c45f060450c4d7154d0a405124d88a1020425369ba6d3018eb0e16c9a4f14e8061bcea71b249492c186346888e8861536a44345461c0cd99016b5074b6dae40d2d8891ed090115a722243125f0401c516472368c2881d629472b0830d29a51c64b121a594070536a433aac8252ae09b2a33349d97c5765e16a3f1b29805b2d88d97c5ea57532f8b59594cf5b2d5cb62383a8023c6981c42404510443cdb22ca9b1e92b4a84046ace9c6479d4c6043da443fed861236a44f5ad0a7f13cd9500bba0156a0e8171eadb55b8c2432249aa439920616e4d49eb50280b26c210210701953020ce830c64c054d7481a5071a6ee83323d3c5dd99c229c9929f0804a57bb4e79ec1f81c9bb0c72777724d9b734e2d3a33336bec5a0e0ac638dd8affb47d49dcb5e4e725b7a85db07942046b7c20220c1a294c00a5891c3964c0f024a876511bcc0a5d28d20a5f686791864d1a2e5032cdd306a82c6ec84a66688349b3fa161923983c551414dc62a6f1024a07f2f26122c38356438d4ce937ff66604e6bbbf4572ed2c0b0a5a161ab714ad7376972e0d2f030c36b5a834516a6336ab6bcccc0613343981fc8b8b2c4136dc0a0d2829514c0b9800c37684000440e7386a85cdc9095c810759797c8cc5024c321071e6408638b0b598820d65bb89127108003c2a4e04a1a1b8080010e4f211385aea97179698c9c21b8bf363ff50c2933dc13d66be950598fbda5315e74332e2f8d99624c127da262768ff23348b221126985763ce2baa2724aa78cde556cb734fa7db9fef27359b1a177dba7f4d85c7a3c3b55efda87eeee94bae74dc36a15c1d0dfaadc95cc8954e48ce7de6d322ca72639ac75b5a29fca5ea955a964fe65119121bcecca2ec71b73db7780db360e6477dd38db84b0b3c5c7a79933c0c686f4bddb45af5efffcf257bdbe9e8aa97b23413530d49e6a9ab6d523ae2b36f45c634d4aa96960a8ba1444d2bad3cb09ae2cabd5919617242d242d9e2c74a7cb6e095df95328893876b204ab276517755085e5ebff0ceba1266a09ad383ec5b9716e90b65ea4edaa49d00355a0d72de72f2e2b65541709976922943f274bb0760b73aa1c54756bfe443287ae04ab133f35ed0bff6a7fb932334fd6ae57adf26a5519c6afbd576b05594452007229a864de090681a2047b859219e1786cc265dcf95f1536e432dc9dcbb8925d0526d58d31c6d85d638c31c6d69cc9a8631dce3cfc2f3640423e8eb037c058bea1638cdd2738ac634edc3095c5ad5ba7837d681f06e0b2d3ea96a024f2e8f7549cb9ab1f870c64c24414112613bbbd25eee3f37ab55affab95b5ee3e35909947caea95d03d965baa2b2cf8eefc629c95e030cb2e251ce7b3c0c79b981f7a5cd6ea22b0fea8229e8c53baf952c618a39c4278db09cd4ce1edde5dfb5bf7c5ccec0affa39fbcdce2d9154146769729fa0ea320bf45526fbdb57b58b66ca2c0910c66d1e7fa88c0000da4702b7366305322a750b7e684d2adf9192459f64f8214ea1c5d7f0947e7e8b58308193b86200ae05183ac8838c343932668da30a1c20d41b32840a8e08c1648486c486956b5bad20c070770cae83246172f7cf18691004345173170c1c413a59dcb4b62ce6cf585a26461c32c0c2096667822040d625e88e1c993a12624175268906ae021c3528444124265a8849163858b1a9c903144469b20625d4f00466a0e576b95582c5934496ca1d512dc6043162d59c0cce0440a19284c082146174fb8302048084061cc1c5564e1e20411568400892c2eccd0e5ca971ada1cc57a861b9797c400214607a28e1d16654a8c9f6b74ec30f96c1dd631485183149321e805a0b8051b3746918b16a21c4def3923cb39a309b8b841fa80c708a5ab0eeb67315a88338b54e8b034a34c89751dc70b17421e86d18cc378c20bd38c33a789d20e3ba86014b314ad0054b1403ada90e44821e29cac70d479feb10a889e508af537002c629d37634108e5f9c74e3d800114ebaf95f812eb52299b7a1f4d94308af5070211fb40c70ed3a5f16cc0e09e2a4c1196304b541b32c418a65a2b9195d8bab261ab3be5c69610ff84f849e22f893f9fd817926d391deb788eb218fb1029b6df62a46e618d405f7b2334fe0fbb2b8246e86fe00f830fd2a7a07522045ecc806243bcd8d8cf1623f4b56f1265ce9c9806fed02152c85e7083c4849486080828c6b3fea2eb74be63356a9c3726ee4f5ee92fec2bf27d032d5f4a6fefd13c7908376f72dbbce346877073dd9ab78d9b5128ef88e2863477a821dcac237574bca38e87020242a1588783cc5ea9d4952b3a3adc443b3b466d4443d2a0e11d69c48913278e530335905399324949b3a4a4599422250ac9481489a25034e18a244ecc94c4a984d8a3c7e5221ebe2e83b005e11995947a47da9ac272bbcb49abacd53bd649b5ba79dcd675deb1f3b4ba711dca4bc954ca3ba6b8cef3521e0a95d2d9913b3bde7127e5a1523ad6eed098a1922a957754edd0f066cca04143658157c3026f1bd2860def68c346f36a852ae238bc55dfe0c681c2d19c43e6c8e11d73a85043227f6781d79f0daf460d54112ee2ef373c1c375045b6ebe0062c4bb258de9155532c225b837ca3a658446efc19dc6a88ae7fe7c1191ba38f0ad607c80349b77e10af5f2867573e0a1c5120d0af6038876ead2e2bec56877c779b318fbf03826c7fc839c005bb812137743d6cdf3ede0d0c2f205f9b2fa50ed10f750b18100021c606c5172c66f8b2640307246aadf6d5e3cb1228541331d309a3e371294af540a3334209f5058714a7e4c9d06d440875b5161902e8cb0bb5c8d1919731680479b1c282224608bd9266c822458811f2e2c34e912e332f39e81421e2c94b145b4488a6a27a64752eaf5982e986af37d65e5eb344520a9640d2c258d5e5354b70b18183bbc739e79c28c43952f214574a29814829e59c534aa9925dc6dbdb846ef963e0ee3cc66b5dadbadddd5d5e14e21c146eef4ce9584717dbe5a45addb86ec6b6551ab05abfc679c34f015810262095c31d1c75348082a8d2129849a334c86c363d9406954de81ecdae80d81e3aba55069675bba2b16a2ebf0298125120201a8924111111114ac7030e5cb16e37d80c37c17f2b185622907eadf26badec83468dd506962e8c974524850d2e834ae6adf1a594b21563fc980215c06d3005565432af4fc73865b79373be9444faddd29b8292d91f8b4883b5c118bde8faa97d56bcdbdd41f4acfeefba6e54523bfe98bb254a48a85d7ff77159b5dbaf6d3387d77528afbddf814812743186aacb3d4e69953d228f295a53b83bf8838daff9f4e816f70f0e21f268fb37c74afe8ec8234a13589e534a49a5a4f2a3f4b95b51babbf48b72a3494da2bc544a474a29e994728b9b941ad8b95bd4e6536a95eb3c3314b5f9ffa55ec771dd56b59fc3a8e40cf8643d0b91a2191100002000c315000020100c8743027140204cb449351f14800d789a4a6c52968aa45914c320083208116388310410020831804ccd4c55006137caab1731aa9c4c2cb9b577227e584239ab9d58b81aae14b48e6c19d1f563b5898532baf828028efce793f64b46ce7bb018d1ea9bbc7a38eeab594beda18643887daca40acf8778d3093d0c50236739191ac99c2fe0c408d0e9177b1da0f446cfee07dc365b3b629506f3ae6418d9bb79635d9c40b77839c0df4e2dbf249d4a0b1ed83f38ac4e9ada7212036bb0641675056ee7eb06cd04d6f16f6e232d8d6d44e0247d6f4e97826e53934b4137aefa75c8a185c0d84bf2a0454d5170a0b5d9109818897ec7c6516907d2a13677b56240946b809994f7bba44e25d5ecd73bc80a7362ed1f8efcefb82b7291adcbc9f42865e84cd368e8e81128c83e5c455a10acef4b393bd77adac3791f3dbecada9eae8f81061526338007c7101e238b803cb9c7ae840222a18dc4868b3691d89cd487d06383575efc2b31a936a59b96702d3ae74cbc4b7f052026e54f7391eea0d9bea9ca7a852988cd2b124bee6b143968baf31568770f9208ed7b7cb493857878391430c8ce8eeeef883049686a4c92536ff4226159f564232740e30a5838609df49159b7b4ae81f53db257f24cdd900163e98ae72c171918a92b34f78273e98a33ad793d9b0c33cc1c59a58d2359c5162e6dfc75a8a85088f56aab35f2288aa549ade927945ffa65f3bb4844c9440110c203831ac0ecb8b4d1de3ac4e453389144a9bade20a5f9a2465ed54a924d7cd13202d1ae9a9201358109ad78f491d4e839a5c4233f5af1d8649b98d5bf4afd24324edaaf6b9135b8ccc9c88bccaae6c24caa3973cfac5ecc465b20a0886db64f1a40262eb346787cfa75c8ccba11108b7c9955646fe470d08b94b0903980f2da1bb9319399825887083d7344575e9353d2ed33c4e93a139e7f6eb50ef77b75259f2ee529ea3fe8b5e85f8f1acf19ce2e833fe84161fb357ccbd7073fe8c5ccf6165c14084713d4a220e8f92cdcacf62bbcab59dd541a665f9ec9c4f716e5afd115b43a14071b5c1326e459e68364d538443ba5c26b1bcc62c7f70f94e78aec620b21d291e995eb3fd450b098c783a609b678b4d33d19234f1b7a6ab72ba928da28835298e3b4c5978053ca95877b6aa9cdf68facb191e803f7002bfd6151a7cf8bbf9a95c5c907d6514cda87d7b9a5c37c778e9aa5da67a403d7eac0156078be85375f35763bf7a9cd4e36c46782d25883930819dec541a5f3dc94e3644f8688ac11093498a6e2154c10c278d77bafb902f01ea103d91dbf574c82300328fac1b70378af62afb4012f6fbb17478c22f8471933511d11352ff04b783c47bd4bb507a3cd09463f371365a9ae73a56ac918ad73d5275e98c92c4cfb65ec1233f8135fe839a161c6d00c42eaff9c5fa8194cbe9a6473af0af58298bacc490153e3219ae19913a4202d05f8970ba9af5c1273d5b3f2a38e468a1cbd6dff0ffee7ba60a62605152b4632a71f50be337c0a044170e811013642d4d66c45c12a8e19db5bdc4832b25acf4ed9a12e7e8516d025e316d05ff8c36ba1165617484ba217c587a525a7288341bd1883357e310f2b5a09c3cbb4671b3234cde371ac006e0e38a36294d4cbfe77feb894329ce28b0d8f98b7055595f6f849bdb71befe14d2ba7388e8a161d0c0bbb92737195aaa23fb65da49f84cdae3195f1f85c04feaf5ac2241b5a02f03e5d2a9ac517a33315617e6ad4984b342e42746b7439d737abdeec4f578f3d8233bde280ef5ec2b7a90c3298ceb727c3fa534348c97f22d6d4b0191d1737afc485fbfc7c4bec0f8d077ead7387012bacb6e3a0d1fcf92f625d31b89a1898396fbdaacb13a593d3f5a757cce0d7e8e9e98727f93d4b076df65b02b9916c6815e4c734672ce95f77088d8909647136711c8d806701b79dfb6bdc7b0433010afe5f6dc6712ba54e6fa5d5f87263780a00275b8e848a88d546dbb2c21e7a869858eb59a175675b8077aacb80b09e4525d0dec1ed6e4e21a68951703dd1c5e9acfc6ebd01e8008541143a4867ac853a14aa2ab9819d7320ddce28a4f80a102a188b4601cfbc73ecaaaaa59fe47afc4e77bd6b49b41dd0baf7f4cd35ad5399842e217ae3b8368fb8c84c3a18aec42faa4f880d4c0ffde72dcaad547eaa546666d658877a97efb8324f27c083024ddd3308bc51a8432eb2037bd9905ca1f0d24b1e3c8575a1c9d599936db9aee9376db313a8b9810aa2e71b56d3481d437809b0534d8b882e68724898a98ef13ad2cf017af076d21b5403b881f40bbd624cdf7f91763540e1971c6cf5563c56e1020de8b8d2705bc7abbc01261b0585391c9b623c7bdf34859b8618929622134be145116251d804100aa3726ec7faff28df342bbd09e4ec376d948d47eaa9265c27e000fc434d0084d8ff2ad1a62e60c3178e26579cc0138d0986bcb37276719a2ba9a569cbf56d2d2d21a0f4f64e864b6ce579dbfd824febd8db8ed03dadc4b71d973dad9516da2c8d762860c0120204545228090f81a0427b0531ebc5956121ca42e6f577e186ac4d3d6afab8d1e40f35b0377e14f93303fb99a4365ff34096cc27358b325031af7d95054e7f653b1d4d80c2cad35d793d12fb62b449df181e777479c69a12ce3196c7a3beca296001c40588f50610491403478d7d88e1c2579935937e67dc764269334320e2b159d2257e912f7fcc5f9b8904f81a8e23fed61a5a9a81a293127684a3705b29f04d9c0f360a80644bf0b4e41d9b0e6490152e58b278943e4fa4fcc470d3d90b5e9ec5e551b7c28de74c2b4ba1e6d83816709d92cdc9022bbceeca141cde4a6c596209697991d08722504432a9410ed392fa07f213202ae8b908078b15ce758271738b52154bd7ae6508940acea6c28a249bc8089521ac4ea4d417b32b6b73915c25bc94b4ec65dab79d63f9674cf442e3fee4a363280c40b19a9f1768d0aac890a18d1643a7a6d898b8671859a779e9c55efaf815924abad6e12a877004f08f80804424d5c8190de4770742c46da9c7967f4636372380969598b92a9cb433bd6ba0dd0bc3a2bd05367b9c335ac10321331b2481afc147282086ad43da97c2642c950279f092a8109f1ca92c9a7966b84e311e4bf039e3cf460e478e040cbe59ec5ca05abea47bf7c124f0d612ad2be98ab760810cd8800a12800d6a85238fda0cf97c2572322eadf57b07de02a460184d9fba79fd246ffa5141509f5350c17a40cbb2188196850fd2060927a8b9c7dda5f62e69a586c9f8363f000c5e35225d87e8468747470193df23208dbbc6ca9d780f713e4d8ee16dad805cee905b63db7dac356526d14c4f8f528d24d53794e3349f8724c4d3c6269dd03d9e6b210b58e8e14783458ed01b93dc13c97b5442e4a7df022463baa8a5413cc856ef17d714ffe8b7847abbcd0b9bbaaa112478ea97b73751deb9f9f6515aca690e47c176ec157b5e03c84ec91d06728c2e7ba042093538815c562fcc35d61faa54c600749a2ee4c7338828b9773d40a4c4104051a7c186c3b26bc018c04ac8229760786d53b19c6eb7d88e8105ba084dbc6cac230b5ed10ee387186e816b52d7016b105d128edbc54c7cee7bbcecc00f7112968462854130885eae2bfc9e915afa41cee0b73aa68a570b9cb7b279544aa7aae4d68fec1895149f68190d6fd083543888767778aa7222ac685bb978d288f202d468e75281cc234f8f5b34c6d0e833d5439b2fd898aab3cf4a2e53a502d80268ed0e0fac0c1edf82975de2e4d3793bfbc9ab2405a5490d2a2cb1801d859b014da39c09637ecc22076f54f3878f3c47900306024101e51f61d142fb0509367993a25df5e643f680d1a824494aafc0d5705536e1cd54e4aca401fd2d8c5d94e65e5334e4372fe259ba3e59c68bdb3581d589ffec0e923ba5d0976265161286c1e676aa064067da76ba15ed870a5b932665b02daa04998db0c69094f948588c7405ca9cff9c2ded3d0942dc8b58135d371c233680aa6ddf92befd73384703b50f40f0db0264878af1e8f2eb9d2e6b049f536b2286ea10f1cf0ddc7f28fe1850f9711798cef6efe551c81e1779f390b06450d7e01128eba611edb234b193edb9ca001440796b372bda0452da494f793c74174acdd4b6a158a066e120a7be7d48c25981f6d5cbd9c08575668e00dd9fd39ed9ca806bc3c74254a87714c1f64267d8919726d409584a15794268170c216225ba81d4d84cea2d019ea5d53e6a3a69e5784fbf32caa2d97543d9ef235d3fcd31037b42bb5e050a910e7d1f0f924d3ba98d43411c040153fc69126906cc27ac64935b3988972129208dcae1d7da21cfe042f36a0504dd8a174e0e7355d746bad31da0e59ccf3231ca724a6d0b97d7e3189585552833cc2abcd6bdd048ff03f3ef3823d69688df0de47318685f0940bd2a22d5f1aa5e1f7b54ae62103ad9164c897e04cbc62eec27bac374aff50d2505fe38291e2270b6e480e8eea115806ff815eced1ca65fad6ba3a9e5d76065ce5efd24b522c532f0267b58cb4531c2041f5f43a4a03819c5f16a3e660c48be00d9a47b11b7da80f5557a26c75780ec3903eb665fcbf1852ef80e01754b492fd2c64e1cad8a198cb8e5c83649f89c952c60a1181c4d2815caed878cdf5cd2f9cfdda58c6fd531f1a59d41f16ac0f884e8c2f8d2eeb68a607cd49338b4a746c45c330b30da8e82d8c640be06f6686605137b15d4362a886bac3f995cf7c615160bf862b8e3cd52de26d8af9c9b017683ec5ce054f9eca6254a5df48863ccb8f26a6b53de3f773ee89d88a50cfab41a4138d12d51b683e96e7757860a80c0298a66fa38927038c0e11128b09d99e3212992a6c20b4dad8b622323aa737368990bc48182626a12b20b2ead340254b67931c49e6bd430215864cbb49df77ded216da22738d367eeb9b282c2379b7d965ceecb28318f7be5c6f35cfd6abf48b1b8054f4309e30a372dab9b30f30989553ec1c27353e030b7b81d37584bf1582119949a5b453cb4a298a54eafe62d80ca056074520a8160f6b6d0bb0a5cc1358b5e187baed7b90a834adbb39946fe460ac9a61354b59ec97f680d917f66898ffd9733e4e1ad625d1dcbc3a5b1fa2b4da2f0d0479de63d1c7905d4478b94add8847770ddf4bc62cbf73bf2fa540426077c6040e337d33a4c9fc04aba257de2ad81b769b5f14662a55da796f538367257b780cf8f37864fe6b2f5c6d4bcc5d037ff028083d17dfc1f97f70a54f03290338b17a99336bd9964d3a6e33f7778f176abe8ecb47a95a9d77ba7bc8450587a2d436e0eebb224db5c7a1f82fe109fbb7ac6a4f9a26ddb2ed75a438586a3df47f053dbcd582c604bd43ae564ae86202054d133b39f1a2fc829ae5104bacc3cd4df14466f2c9fccefccd900f15275dd4c206d32b3d54cb5942b712188e4984e01b0dba28ed3c8c3b5a0a625b51ca74b7979a20c1c833b45802c5e34bdd6909860a318e8ca947a0d4a71c19d269d44eb9706d7ba195eae28bbdcd62f0d2bbe16c976785336b9b5ec1ace610d58825a84c2eaafa972fa00f5998cad308de7c6462034c4fad347a593da06f9329792731c6f46f9439c59ab0f9d00853ab0d0df4da1c9267d098019e81cff177ef8f815072c2dfb1c23bfd180f4c19f7767f53974e1fdc7a88f71b3717f2ea75ac80810e7c28c3e128d30a67e0365b80319c497f41cb4abd63e9a7b173055a17dc380a9150ca4467d811a57dabdfe6bd29d32c94f6c7ef13d56909e1df2854aa749b522e7663f61e53c16f27fb39f3209d1238b0e87f47a4143fbe553482be10ed3481f86b7a7c45a94a49c761fdecdd670b904e7759b9556a05d824819f7d4844a79adb0935f4c0f5f288becf425c6cbf01990e114ef09986f3b1e609d039be58ec5e07263a4d87c2db08228cb193b65ec67b487259ed05e0576f2e60d9140f8ca924cde1a10c5715d77035b7aacc56bd34d8b7118adca82fed3c2f16ef5f46b4dafd25765bb67e4868996bd110d8ba24761e7801ce99a845d563fcc56b4278023ad736cd7e6972246dd2c4eb3df1aba00c7a9182281b5f7712cea0bd04c808598c826b18ef5449a8fb1ca4da243b3c6eaec91960e3c4ee18905b536b9c467085fef10ff1c5e9e9aa127ebd9c09f26be64ce8ec7dc3edb5933dbfed093913edff59a5933ec61e7588557ebf193a622a8932e1742acf689a09ca49fb2099b4117a58139017aaa860495f989eefa94b864bec45ac1e722c33227941e6230f0b2b212e909580df0f4c70239a430ea65ef963cfa08d1789be522c3b38e12b3c6434ceffc2417b6c293fee91ca2c17c9ad49d24e42f95a822c67de7f7c44ae2b0d78c854603cd252697f74060910d5b8b5c271b845f0746adc7749e0292880b90cb0e006e89b38875858a198f7c7b91ba599eaf2971946a2e782e92520fa17c809cde48f27994d4113f0dfd4f557d0247b79ab092497b315e940fe0a2f39b3cfc5f9bbbf50f63133afb0c3eb617e27bfda4e96ab1554e37ee9b8e6fdc5a562208fbc8b6cdd52f06d5b05d5260c33e6d4485f5b1cb44d4e6da60af42d2834a8e81bf91dff6e385d41437244b74a5bee35cb013ced3bb8a27d2ee312752b25bdf33aeffa71fefc14d9da5d1dc9cbd1a7849e122394dd610363a3f3a90d3cb21acefe83c167290c6d9c25e478ce0463e57489d4b2960dfa7eec10cd933d9989f638ce21149337c1630cd5e9817dfb2de277dc312a9501eec05f63831545f1c217e848909dead744cfbf8b88d98c409499c1bb31f532fcac173e3abce46aa851a7b7b33c2dcf13c2b9b6515c670d238fdea2483dc804ec2510f79a244bed8f666b165c33852dd22b0c5e808da35f9dd81d0d884357cb0b4e72d527d5d1dd2d58116710586ac33340c644a05a38c8570486217ae5414c0d13024d4bfa7fc90955619a02656372273341af9f7b9225f056a3cc03e8718592461afd69ab4eb9d3122bddfbd25903513d4db1add698cfe18ede79e1d9a3386075b7b4319cc0b52d13f89ab9333ce7061be5b2f8d02818dd1466943c202b848d2ff3a460e3ccb5fe4492097109a640297bba8b34965a5493529ee887fbcad9c52c6f85a72324af74bcb073953f8afc1646cea9da36509f58ada99d7452ee655235bf7d2fd93f43d712f03d499ab68a96ed1264bbc2e9f6c6b874cf19b7e546b2c7f51f5c6bdf4e3b2a7d3d67938fd0a80176e233a6ec40a3a4a41c2801bdb12e270b694f898a4f5886b91e0804a8752a7d5c87609e72476363ff48b4602ee2ded4a4a223eaf4b5d6c65493184f25febe4afaf66e140f39969fd604d3a702117612387b8b56fd18496a294894e787c270ec9da312cd2e779c471d0701ed2f80d6fc8db039223dd58860a4b2693afb0adabbaa4f68e9d3690cb1b23983e07f8a3f5ff30a506cbcc9482e2b500be0c632f61e7c398ee8411b439ab0442eb824ea5f7ac5226dda06da464afd3ae0ea7a992bd1eb0f976de1ec24cc6d33ba088ee674fc5ea1e8fb9632874d3b2e63f9b1ad0a4a6754424e3a837701f269628de4fbe99a52febbcd07a9f0eda3c6f37408ce0a8fc2b8ac69a4ab1b632516bc8c11cefc56c48096f969100b66f1c377e737623c62b671abd381ef2536927be93b5acf3b1bb5ab3bd85be530b233310d9d5027fba2b87cfe6f2d122198000b934c7fee1e129c4d726486eaa78b6c5f2c9afec53c58ac7394b4b9ce0393c0bf3392a6a074bc0dfa4548ccc1ef65ef1ee1341e5367e1654cd98aa56c752e571f5af227028bbb5074f37aaecb4a490e2f1c9f5bdb8c8d5f107890bc862f4e02bf83cfb51582c953bc1914d43ab8b3da10c4b70dfb159ab64251294da6cc98a91c781763ea1aeaef746729571f2d0cc52cd95beb0735b662da0b3526f66f30b6e919058650db67287f5b49df93f4d880aff19f9c8e10952f18ba239463922b9d027aa4dd04b5643a6999f475832eb14d9cb3068b697b7ebbcbd68394d809781488a76d0e4c676ded071af5356717e2e226cbfe9d54686d3029a38055b457efffaf8ffa580a586e142366f2678bf97ede8d82450cab6722c106b2e877ec3799c986061e105dfc4266188f618e8e63167dbf188d4e3d7c41c632f91e55d0d07abf3b03101f7d12318a3925c89b2b706e2707d0c45054d12758682a37e8a2ef3e074755fee598ed7f1882900d055b78fc51540354d37a5556775f5b3dd531264832821cd9ea14298c792ec1d3b4256a61109905851cac0d21aabc953cfc0c28292e620bd356410ceb3517c6d80826c06a83c96e8d61d2e171ce1defd2f4de34a80b08452f869a16e807685c049c0e9721017f6a9a123e116e58ef926e4802430b7046f6f4de9875a77c79aa9eb3fbb729fd072abfa64e2a3fe8f5ccfadd70c23cce57137dd72edc451b7734ea76acd7630600d738edc998ba3297863cb72e8f48bfeb5d87326f9a01b53f66854a894dce6662e5ec74a87418bb42a606f95406c414802f1aa38baa9f188210fe5bf4914d8aed56fc4b2c7ae267cfaf0d776895aaca710727ae19c54cf6c5ddfb8dc09f1b50dc46ac7641f5a6625cd8739cf7adf42b610c90498afafd58c3413c7a44c320250b8dcb6454529414305cffc20b6f4203a6207853457cd36213898211b5bda82e6ddf6323df53a183b3780b5ffc081f51eb6a3fececca92406ffd2d68c7eefa973d4201ee211dff8849e63f7233a916ae3fadcd91d37ae5781c8f3a18b74e1a419f477aa756a0b07baac1931a6a29705ca7dbf247c18c0a5bc8dd0cbe4aa14c2dfb95e6ada9b0e63bf039003bc38f8e9969815fb18eb338fcfb8ddf74ded88a072572fff722b2c69b08e4aa3c9697354ddba3dd164d02ec980f19393f1205e27ab1a743682a4f6430e0fd85c08d942563bdd7e840d0851b694a4b5107fad467679e1e23c513c05b7058b0b6ce388e5b43ae66d18857d0150bffe6b3d6ab2616cbdde1d8302e6beca926ef0df4b696d1e622331e0608c1010afe8683f46080110388464d721268883c013b7280cc1161b1fdaf89d69ca8b8ac18cf5fb349dff1907cf390e227ee9a352f4e1e53606f7e18dab3ca811e64eacce1c3e284a86596b0e4381c9289d6321da19e7329fde39cccd59a46afc21ea5439f783e74ef2b80f2afb614b9016050d3842b74f48a4fa5e5e5eff9d2499c47d52d4fd8ff3b9e62745ead1499989982c0f3fa924749e913424b173ce528317ab6f7252e98391736362a24f8accdb27f14e73c2105cb706cb6859643210dcd2806ff9517940b41f8b1300d82ffd936422a61c6e71b5ed9ef411a46464336ab9c54a24355becad4dd08963fe2677a60a3d5784815459e24b11b01d7735881b2900056e5383b3b90b19783c45f0fef8bb548219094e9a7a070d6bd5dfa3bb9caed181edb56385243c2b4c7fa011621d7a5b03e1ad6c6089efa26f68cb49a6da698e13b36309f18ece0826f19df33a95cc6e587ffc80a015231e1d247705259e040d7423592d97ea68f0607e2ff8a40b94b4568a06eb50134fa1de4948c8ec374566f76afe40c0870e1922f60e76e8557e6b38e2562d103441a9782d3a6d9cded060722dc7e2880acb9b4038a299da8094d07746f8a59c4b1776ac471e7fb0e593fc8eb336a3c7ca61358ebf171fb117863342f32a46c0e1213a66b51ae8d64ff1b4a5e2855a4117fcbe4adc14041f350b154c7ccab59a47ca0bfb3fbe2fe6223a62cfd69cd4e75218d818fc0ae2792de47d1e4d88689daa8855a9c3d08bba74a1a844b3ca111b839d444aea0829b3ed2cc42d07808193f8d5d4bf3107c6b2cc0357671de9221e7518887307c65946d446e614d143ff4d2367628dd097aaf0b1d972f5226879c4b0b555039e31f6d8a6c23265729de1bd9f346e0c5e36b814964f6d4750ac04f326b54a90149d88a49fb4e5148d10e9b232300f0bbd834da5280840c3fab89ac9bf1afcde23077ed9ed11737c0cc82104775f5e33b80481fdeb9b551a8e62a519d75bc18528d833ed895528ed23c225eb604d8e0f2bb7d3b5b8b8d7c3690043b91f5142ada3113fb6769b82d4323b9c0b3868881fefa6a67f6dfb65dfa3e8d0408a5b3832cb155a60506fcac53403dd9e193ec07536eb04231d11d46875a1f3641084b6bfec5e07c4633ba19baddc56f80dbb57c6479712bbea4231b56b627903b2b220a63e18e46ecf94a84fa7a2ed7f93ca83b35b769dccd9b6d19680d9b90fa9712c6e5fd31da12d3c9efb8aa0d3aa6142cd6f86f666c7a969e41dbab258a589add5cd6553d2453790224ee9fd05951a8137ca405a6a8b481b394fa236f23efb0058bd308a85e19c6817f9883db2b90c36074b39b65d66e0dd572d052a902b9e7f9a4842f12c547063f4e8aa0197c01b561862aab78ba8754d61abeeff45e286847ca0360ae6802164065039d9fd73b04458b758e5a90ebb162eeb1de4dd6601a11be043c6954a89b44d7afc9f489db548124e840d365376812db72c747b1d5b67a1927b1070be8768a805e27dc1db3c570c153df00d5990e41ddd1e3ac0372a246342e886962483dd4b78ffb0467e4e7d467c7f1f8aa0453be6fc3611e321fdc8b98270fa81665eedcd0b4eb82c3073337738ea890de1410b7dd6d2546a1ce9caa5a2651baa1f5491fa6003bc72551a5051729eafb747d54d0d5bfaca150b1c03e933fbd17be669902d5913a3fd4271bb16bb53f692a90a2c0223a7b06c2ccdef6d04f8f0e9552c88e3adeb05a4160e3a4a6f73042141c2ed201478dfd534ca550d1d3ec2eaad410da6a4a95dc6fd0e32c17db3466d394f67d80d99ca2eaf7a511433869f25c725b08d6839ca43a93c14cf5371941025a21430112f9d247de0533f00f188e1ec34499490fa4d4783fcd0bfe8a11b24805894599fd7177b138a464d86965c188ffd0d6302967b05ee1dabdf3ec1ba0fb966b15e3b5b97f68b93d18fab2b142243ff9bfc86f1c7bab804a54cf08cb35ab64a2340f700c49f67a1c80b0aaa3774c0e5d02f827fe71577fdcec39d10fde5918e5c03873fa27c4f7b341fdcac5dc35479230de85c555b8eeeb698a142b5a7f6c10194ab1f11aed62cc6e747193e2b780de83017e5ebaba58b3b4e188c3c0bd7c5c720b86fccc6b7bc430972df786b29c670d4ee1666d26ba458df997d72f1d5913462da730f7fc72f63340a6f338fe7d5d0723bb1318e921e4b0d6d89c749c2dc0d089432b5a8dda69c4989bb26246cc2ef780692f3fe50c76dcac349bf053fc6c76660e647049dd45862b9aa357014531f0705e9dabdef733f7aae23d76febe37e74c76a7fc53f56213f2dcd332b210cb6fbd02a2e00fb32ebd15f51270f71523d8c236ef0d38261045bfb5e7155d43a3127c497df0a881d991441879aa080a0db1cc6f601aa861663867ec59acb85bd3693d1bb15cee66e0c40dde9940257e6b3527009c94c9681f23a297065bc34f5d65e6c27c36fae4cded6c3b53c918c29fefddf82b4288837ced1ee2e0416f52fa90e33082eddceb48668494aed13e9b12860e69a35b4449e383c425c21a88d4c3774485b0c495cd2e06b4759791144d876c30691993b9b341acace7c11229680dfec3f98562c3e0ca34d90e422f37f75c1448f0e32767928d91c1bdc57800e419c36a6690b63811350cd3646a96c2431d3f0ea1a578e9c7d9adcda65ea054bd48c5b3af64c6a159ef638e5f6ac9f4c10d3b0ac1b79d09a12c8c4d8457d948aa5292cedaabff615a020af67abf62cad446e174fcef4eebddaf77a1264f84919a2e0e5f13e5fbba7f4f5cb436b542ac2586b71521bac5d2129cd19a26931c47e74fc55c7daebe706c347aef170eaf5b2cee1c99b5d6c9703c8b60f738d38b5ce862416804340ce21e211f80f4dc6809e05bd1c3a24f0abcca03aedab5b978ff673cd8dc8799a20bd8c31d182d1030cbe966e5d8e35da6d7d8281c2292ea40a0bdc8eac54a645a9c9296ad468c726ea98c92ebc6b4dcdae60c610f548d7747080f64d76b440a688c5daba767b1aede6ce202178ae958ad1ae6c55f1e176d9ed68b2ebe7d573e024e6bf2c74fdacef4fd4943308515e04566780b1b409bb711045998e5152d215a64f974770ff571427d70b3b3c280d9aafb1444fd329b0698e2040f2cb14bdea63c9636dea00b238b05cb7a2950438d66f352ff77e4593b2a444cb2fc3edf6effb7e2fa10590c881ae6cfcd63de2e49d87ee654efb8fecce160152a9ae4819341515537a005eb85321ba43aea10cbad57729f3f5586461eb893a44434b3cf159b5e92ad33b59a32c133d49ede8863db6edc35deac986774c9bde66697b67348aa1fba4b80a6f858d59aa97db3130c994ffcfa88478d6f89c550f66e1c19173236aa2638cfe787ad40a448f11d83297c347ff3b2af76d43cb76d528f10936b49f9f46eee029e6906d8e1267887e204242ea7217ff4c80c6b084892b408e7bba29168e9053a622bd228dd6d580cc87230adc61e8442278ada0db7af8d719b25f4b0331554ff23207742f21e624e5977732272897b88d1607b0d949c22d9dfb5323d3025446facdcd831eeea1e06b138eab28bc68142c05af7b82088dc2e34cdc6ef1ab8a456791ff531690633d1d9d8630c2d38c207aef9a1961a5728abfe0a011b81be10de07b253e8b600098cff77a50675d80761bb16154851352ee02cc8a3a6192541823fb006fd4bd87a4e4f834861697f77bbcddfd0008fc230c9094cb275c476cbfb0a81af5fe2e799ba30f4fd633eb7fb2b781891d805e19ad5a3699d422008a7d0a4f20ce0bba51fb620fba869d1e25934c297a385b5dd7e70e8fc24bacc19b6445e9b50d88e5b33c045131394e4a8452b2ff1636bc6b102a5e30b129fa1d10f364861cff843fea51ca7a936f913ef04ede0e0385aba04b45c80a8e011fa0c4e1ac0c89fc488198fed7bb8888a4119727c68c34eaec854aa500f3d16abea10458cd63e87c221c5e742af4192462259855cce67af952e83270158b5cc00d6e2ebf4763b7ea897278510de9e558075dd07724c0dd6379145c7418e1afd98cdf51fc525e117bf3a2e8dbc6fe1f1442c3e34ca60db92bc9d27fec813ad835da550ce81e206402ac09bf1154d4ee761506fd23e298246fc233d033109bb2c009bb9aa548f8268a2a4012da0b46ae254032ad0b22ad114032ed0b3a72e9cbe1ca5266f4a335d012fccc0df1dd018dbfcb1a89ce1aa33e39e7fd5217638a1f23f24555be0746635c46b771bf581b8301fcee91a289efa34856045ed8c7e355cda1790c9f92056002c10a38001a3c2c8221d84706e903fb4b492cf88ba56d85cdfda52f74035b1287e7cd61af6e68df2ff5570342c78c2d050825b5f98e3ac382a47361f1bc7877ebe8491474169da189af43395391767de1990eceff61dd012b507bf0d2a57011a16266a5311798718743e3d71ebc9cc5e71e86dc2d33384ef6774b14bba76c8952d07da825a3db2d214f454e08bb3c52867d7edc851ec0e56ac4856dd2e843fa3f205c72b2b7d783f670a77ccab7aad6644154e87baff0c782c0c605f4d316a577cbae5c651900d6f761b1333051a421a79d3512e09edc01bd157cdf3340f9228f7693c7db3714e84102e072dba657ecc7538f779a2d34b79fafe640d031654f4e70b49a6674e86e18e1ee2f25bc6c85b68a2c476f127cfe8ebed6a00faf512f5ab781bcef05357e9dacad5ff0c169ede2bcf7c61148c6328380f5ee3dffec9cdea40174eebd4f77f913261882d4740af9cf4c6009c8be5f00b6d8f77612efcebd894d4667bdda282e63b500ff62c4e88b735753a4056137af2aafb60c0a309277a33b9d127f877a02ee168405829f88bd96c648d2ff9044c7fea69d3ca05e090222198d98ab6fbc56631eeed2fa54af257ba5566efa9a9d94e010fe5ff7376cda91bf515d90ecc865832ec07418f0c8bb87d4c890b9d24861df53f883a33f227f161afcb45eff46b41749e43f6f52cda59d76b9a712ee794b580fa56647464d063021ab5f5ba9d01bbc13c0cede3dfd79432629b5a39cfecc2cff4053b9472e878f37de0b6ffa9720616a1aa5d6507fb15b045b6811620510f5126c6702d18b7b78bfcacd57bf5e634bd4b35714123e259ef81594333741d0496683a230b5cd4c5756098d3461ee5236657551cc395a5b2aa41691797d0f342eaf54154fdd8adf9735d19026bbf047fb34c8645786848a9d6c1a129a1750ce9c80a3ded8e67e26b4542b6cffa4df2f45b6b00848c2189dd3884a03e5972a577079112264e8b8aa1b9328ab986fd4544db76a8cf5699e27bb1af4a06c98577446f4bcbd3280d5c2906193484a6ff8724e845314519d04d1441857206561865ee9f3e2195a26c4030f6714415d339bfbf244977e59c942c5c356bede014c53f6a94aa68ea6e793055f05a9c92e60052ff65badff02ff09365966b0f64ab8ca8872a4640608c0322e67b159214b7d151322d1ee2b7d7ee800325474157167f2d4c76e9b471c5582d4b5b27cbad8c37685df0355a44a902e4d6494a4b4d5f77cbb1ea8c31a62716af7d4a512c4972dd49650c663442d4e46e2b93ce86585783d593cf9bc507b3ac296c2cbe8308793f2f59ddcdd3ca2275340a86a69c3d21b3d70e3b2654f48c20d69884e85b457691f4a79a77c74cb10ac1f94141f5ccbd806127c85a9707cb842418f2a5bcdd24fbefd9741ecc139c939abeb72081bf2a1612d758d5aa9a1a7341efd3f18cf8874e8c6d18f14078dc5c784f67e54d62aa76688caba34a20d5b01b902b151de1d3fe4420b685318dde06fdf8090fff4bb75ea6f66238fb145338fa2cb45ae33f6aa91a20649048062c43b04e6fccbbbc4928874c315994f6d924d6b6bb764106e27d817fe84d0c971dd82856aa1f6276554ca5d11ad0d4fb5f76dc07aff6984adec86ade67844d27a2aed30665ac22fc61bedcee06c94d938dddba8200897bf0df40907424eca11c50b7583fe08daf2328c6692bfca1ee4c189a00c037628673f70b37ab11a991ca3bbd63bf9dee6bf8702790d0e4ca8f1dadf1312bc8129aff57bda2d92111778a906d8eb8bed8b728223c52ccc84b4e0d87fc81b54ab4567ce7f18f297463b36c2c1c646d5bd02811896199a960269a0f341ed4bda4324aae8f6439b7e22c759e3143211f54d0ccfc5d473af4aa801e99a1ea9f8da8bc61af03e57b706314bd0f7d579445bbff0252aeaa29cc4933c57a6cbfecdc630305223abbf266e0316a0727db841cb28b167e5092d4dbd2869f361e4abe41f8c40da6e3e10dc1d84e5de601457e54dcf1c720a70e3848531393229c669b255065d9e0e7acf62cb65357462b40d6b11e1e8adacf0b43a6542ce28407b7b81209ef170149f544a3167992777a1458a53abf04b2c8fa799a72f268f28376b73d311dcdf90c8a07d065694b1acc613db89950e6a0f1cdfd2ad1772a407b2f396779b01816399e2b86472fe7748b1b24b20fb38454035b1172d48139f5d53e8b2d5dfed45523632964f87a1b23acc10481f031a14ccfe22642bff9acc1763d1d9fdae739848801e2eb0e036609dbdfbdbfa81df9e20c1466a6f0c0ef729df1f079eae0c7850d7519e9a63b4ce430571c62a63478945141088978c858e66a5908ea2aa364f85ca9ace98c47739621a2d6dcc0539f9a99bb38b690a956651fe5efc398a9e9e27ba365efaa2ee1c587dd52516857ead810d2a70a1cdfcf953241a79f29d889c743e06004d7edc957e822482c2ae80930826fe476819bc3913b635c0defecd788d6722a02ba4d42e342c6897e8b11dc4e3c7490cd43da743f34660984cfa30985aa2ce8c444ba989c1025ac745986719b2979babb4bece5b06c45b77df9f85bb7a401018dd71c1fb19f94de069f23aaaf7643bdd15dda7e02b9bafbc42d7e34d5ff5ca468b6da781866973cfedc10f0a6479816bf5de11f837467f267cf08db259aa31896ad4c3a20734d84e28e8ee2710875e8a61e9976310f24927d77dd5190cd79be49680f79613fdb0adfe84670f7f3536e3bded56383c9dc80797d9b886062d8724181294a97108e410d8213bd66402cdd1d17283eae581bdda9552d7e827b5099fe262c2ca828cf1a783fbc0755d1f73da28bd4f5425a76c4a18a1a939c30e69a32167dec07e8de1f0c1eda6071eaf3ac857443e5737641db0cf7b48276e8246fbc8ba4f1f09a4ca9ba5a2be046275d4bb43d82aaca3506a7524a31b75b488b66148faa91ae663774de8d3b228a1e077869a9c3d67a0d1805410f3c6620eb14ffd59c950a2f57a644d7b561588239ded5d9553bc45c12e1247a6c998eb5eecb31fd45c1c79ccf01b30b07e93cc9d14a5ffc02dfdde891c0fa0e508104e8a3e6e0615fba677da5ab8ada4bba11b16233353743d3d4df5256c3e91d047aac3378593deece198e1c7ae70dd169c17b18306299410ba0a4c669f9f61a1cf469c89b0336eec868884ca4e40a7d1f5db7721a4089f6f5155af5f31c06c9e83a3790be5c436dde3801e87cbc0fd5f505a76fcf283a1d17a741ad7597a244f1b5395942d06cd9bd6ab158fb8c5b59ecd9c8ef35760042498fcc942bcb9e84be20a780a36ab723a9c457f03fb386551dbe4878e6bfed977ae24199509cb01b210b25861492fff02a4a822e93148e1a10aace08ead83b8ef3c3cdabf740a9ec8f65674d9aae6986305a00962320a81dcae6d6cde0e64fabfc624868cb2be4751bf96cc843aa2baa79999b88cf032bddb3df9e9deac70755f32895f1ca5db4a30e51c3612126a66c31649f9b582a2a9ce70a1ea6cb9e190c9ffaa19ed9a88c193a939651a48755df023c8d9c88058f99aad8a309b08644802f6ab30d847c064902259350feeab8700f4f31886f073fe3a9430ba7ca85c12a8c4b21307e75fdbf2c8fc60a90660c369aafb8263ebf174f9c2b0b24c1a201d73cf5217dfe170d4989891a2bdaa559eece6ca1a11792505139acf2a6ffe0542781cc762911863639af91a1d8d14665408a83baf2c6a3739895cdbe486677dc4d32eb3c166157d1f81fdde6d1bdb38b3c17c3e82f4007ec6826e9eaec3f908ba6b3b12a82e2d8debac07b94c4840c83e3bc15da73059ecff3f7717e1efeccbe35ac361f4670955e9b9dc24caaf05266ae86ed1bd1c1abaf43adf61e4748d612d5558dbf7e6f6d4fdb1bcd609e7a708bf496e5ae292a2bedd587bc6004834c6defe8d41cbd7e09fc9c65aa6cc9435cb2049db234e49d4f6efbb78b8c3746d3473899bda0ba3ed9490ac6ddf3fbf3d221b31bcc87aab996492021a6ffb8597cbd6aa36daf9e3eef80b361f216fd0564e4bc3c94ed1c4613cd3b47881e763d62d77f6407c2adb3a0e13f99beb8594cc126bddb38c9eefca13e85ac89a2cf1be8f4ef59647203973f5a7edfef73e37d0f0d2ab704285f8ba220fdc19cebde48df7420a5313fc7f05eebaee205d29e0bb0edbdb6a10a3ae6d9878bc0c384633bfd3f6b878e644e777aa7d66e79846e5bfa066942f2d370a8413cb0707fb292bb99f8e1fe8402ab3e4af4ab70075a0d8829a1370c240378a9e89158f5e762e7cc30099923040790dac60391f6fc77c3525af1d9cf4f293a02329c96a268ab0771b3157de17d8c42b2b261a6925b9b83a76a601e46265b4bd3f8bdecf6bff4eb29547e513ea6b5c9db331c4e07d0db1f2e4583815827a26004b56f9d9e083f9ef5488f1a91cfed2a304e4f2a011513f3b3d1774b386b370869d3d403f3b786c6e42d8c6c54d46519b35816ad682b1871737a82837f659035d99eab0e134f01871ee70fc5734f880f4d94eccbd8e6824eb73e237ff8e68aec4e0bc40f8426eda33db5fad701f4e1ccff8e22aa19b14512b4b5bfec115d75a05da3692e07f4645abd2ca462a8af5230fa2f9054e9cc99a580d7d8038cd493ae20c3e4340df744f9a2e0cd2b4ac57d3272f1e04571665943d4044d819c5264245ab0ddf2ffd71dbe513b6a143fc466f604ce19ffe337d369f6be4d368f8ee14d2c1096d5244933414cd1d39acf5dd1993b4cae12c1ceace2792ecad605d224d3b81d8e217bddb6c82c59846db985793b1326a743570c657887b4322f9daad14b8f6ad442f16d5933bf5d1a817ff0226794506d0a49be989195ae9854fb2cfcae5de1d004e380bd99080160e66d3f25f0d7559efd6184b52e51638dfa01feeb4099b57daa5ff9996c907dd3a0eb7f77d4d017935159e5b08abcb29bcc73ed4245d273dc3ec8f24a3459cbc9cd60ff621583b0b64b34e473a352fdb02782230172c5f9cc66b748f49765cc2254a0b04722ccb1200cc02789e08c767e6746aad236a874ebdf1ff8de94b2b523cd2828e96c1e19e8aa8a3d84412875b9179bc7bea81f41d39cd3fb1b1cca7a515440b6fdc410e09dcd9a32b57617d469c0c00e45a90ae2305a5082ef2fcccd1d78dddd88d0f69d18704b52b04eb378a123b4b5dbb383510bfebb078b3792d0b01243007ab9dc4367363c0d9d412e1a38cf78361922b33cc8e6584337d9faf38d1180435da5ae8ea13fdc07858d4d19e27ad94d60dfcd764a34488ce727cf2662f1aad661c351a1e8e218ca48178c42faad718d40bc5ef20149a795549d9408b0e6b4773695cb61802b479448733c6d9e748e5107c448ce721489bf65d4511bb089f13c7d0ecb98ea29588a217ab19a4ab999b87d628255b350dd8b153392d8b6267b2e35e8450913629c7c581b4e376896e0349c18e05e94328200a41e586355a383b2cf0e78573b145149d90af04546ff494e9d4b724db9eb1cd1ec138f8563d64d79753b41950cac161fb5e1adda1f36e08b3b7e9a80e88f374468407310dcfa1cd6259a14beae9d26342170fd363af0055d01dec150dd724350a6c5b96b8886b35923b4f5b8cd3e1ae197c76f0b446e4ef983146f9f3709a23f9f6e48290eafa0ad5c5a029dffb87813926ea2982e9660b1e3ba89639132a3b0f204898b7a95031cabf1ce2624d3ac8cb14590953969fd1bcaa582c980b27f3513576ab4c37c73988fd535942616ab479f114c674c4f41e501d0435d95a2d7b09fa2c7dee2c0f83c63c45586494f250d2c2d088f2e042ef9a77421f2beb4618657fc666876136de59660846d2da71ead20bbd9eb0d682dddcbb191777eaaaa04461b53ac41cae940b9b6f0d8c7e66825720f6b2bb7e26014f822d7683f62284e6dd71d90b4ec5a81dd1dfefa2fb7e827b87e2f8e5ebf17361924d699c9332c7c64cc6de2a98ee0c81a86c3055fc1c2226a05add89b7034b39d361611a8ef1ed4510579e9edf24bbb7767632c6704b7b08d1a952c6df9c2d230aa95c5aba6abbf96fc63bed1d38acfadf305180e02ed803d5e005afae18678f8cb2b8195891b447723bce775b2ba5c535f3e48a5ce9bf63046f13df0ccea4e6408ca9584d6ed05172910745725c32d86f7fb5df727df200578f877ab23dd501d7a4662c925434d43099710160665accb6f81ff4d6bdcf13aa57a6d730269400c55cb00e949f10796705fecd1ba5d16e7c7e6b71f12f11b734689f139bd12b447772f44a543f9ddead370ef713ccd2a32eefa467ced6db6c26239220b6ee33b87faff730ccc1ffa335288495c50fa5fbdfcaf68ebf65f348e6760df5ba6ca38f7eeb046fb97dced9adebd9c54b4ad715d2bc9048963133e96100ab131f74abb749581cb974fa7202327fbd80d767ca708ad04f7ae191208fb94d07542dbdc2ab1da5a2076d5333c96ac69e8aa329fbbc76a2d5dedc06c5cd954095cca50c692ef681ed839f97c062877d35a3642ce7641c9180a7dae3d2bd1598100e0ae4540df8d6d3ab04d492e2a2276a68bc3b8a760e22c58b19aa80d0d6f1ca3cfa02b91ad063536df83030722f2928c899089e1b0a5d4ab7605e0ed6f3e2b913075f8d4838eefa3042f6cc49852825fb4b92e1f5c7ab343b3fdbabecf48f52279ec62695c846a2deca1e80d226b9f004ca01ed1e23384884a2092ca5660b986174d6e691962ca95b71e403e7439a4d9ac99a0723cd7a72987930517c747576f2524f5e955f8d8a80380f6540a66a67a999d69c1734114e7b267f59176746f14444989e16d03a2d80dec255c9196ab31b68381a6f6629dd2dd73fe577ac98ebe54580f4b78dc7c5e9ea2d6d2703838eec030dc88245288505a6bee2abfbd193cd9bab4e05087fed4fb5ee735113dc9bb54499d98d879423b1f810fd04cffbb8c6af0682793dfe93134d00db11eb6281688769f22f6366023ace13ea1ff7091e131aebc45fdea77eaf020f44dab41182c84a132c5ccff1fcb286c91248a9603a7be7b3c324c3b023a7a64049164dcbd620987aa721e453a944ef06d562588a8eac3a68aa878629b42f7cea95341424420b87c49c5854cfa899f028337a2b049d8336804063315cbbde73fc68d0a24d1c64e4a32db4e605f26d255b6327b907d06f4f9b729dd6b8c4c5736786cae4252234b085414c4419359508ec8eee7a53b22c9bb7a24343cd9d7d23eab320a9b34fae65b04c1c4d06899569debd6b066d7c151a02c0d80668403545fabf7304e3de7d555dafec99c9f40f807d2005ecfd5a859feebefcf5456c0acf4cbb3dc98b8c5235acfedbb50cfa12c18f51407842088c13f44607a1b19dcb09949037699ba1abfa84b36416a047fee68ed2fb8f08bd47869654c53061d29e929a153aebb2e573d0d7a14f47df9e866f68932e34a810b425365cdc35b1aad8a026e5025e70fdd1501920b59525c61f1616ba963a381790aa92136eb49ad943f7886ba58953cfc1860fd288b017a77dc446c186edc2b0239ae0441944d7c23bfe4654dceccd0af5af820b54d581e52ee8e9bcae1f9102f9e221baee8c1af080c2a109d64e38e32734eba56d814760d286aef13b6d1b77d45235b83be798eeb3db8a066cbceda580e745004feb1f9504452f3b6f15803a50bdc3bea10ba3040b699ef1b09e36634f3f26ba8144b058b5fc88e3832effeb862a07b0cc7a25fa9f2d85b68beb86b3bfdf20c80092d67a1b1b5a6329c689f8c1757471c9e552210634fb15b56a2e53fa7d554624f2c742501b47adcac48a56eeafcfd6d0c9b4e11ef34babb3b72aa1c4381821ef90ee59b69388605d5978f8f4517aefc77d3b4f7ac389028c098d642981ee667e178c68603713e2746a6d58b9de07a9526aca885e7b42dbbe7714ba6da1ee3318ca104c3340d00d753fa4bed421bc2583d37d886c1a987f845e9ba16d570a0fb31bf6ca524872aaf3c22002759a84d2d294a6de56146c4be799e242192db9a0caebbec436ae7132ade7f00fb6a4d81a873f8a831f9d0a42f8bdc4eb33832d42b140d87eb91b90de23676d8da4bb342a66eee1b4062e372a166ded640c8c599d18ab98ccb27f26f7bc632986facd461487b27ad3ede3356b34875149ce16f1fdb657ad042bb3fb08fdce1fda6a23540afbeaeb98738aa4e75effa1d2cf176398f48b2169b8c8179915b79e5666acd930a11a97ca430c0084a9aa16568e4ac24f004755f0d0c3bd51c75ee38facdc0cc51812d1005c09f1b2183eba2e2e3f739ef8769f93f3f2b089e2c827c6489846d2019ebc6187c6757efcc7de6ff0b60a1a9a0f45f4c7c251615c2d2b678aa8d2ad8b4a42740462a81b276a766de8fdba83a447c2964ff13e9136a417ea7de600078d9855932fa83cdcc5fcb340226135b9d4895c3a9f99a3d5eb38d65f4681e08ea4544e777f6bdf10a914cfd13c25d817169b381cde86a1edf509ae2d7785ee7b9052c9b9bd4c67a57711189282e4f2f6c7c9c713a68edc7b0226f5e83a8e51fe2789fbfa56905179ef0d7d0ff1604663dbb6ea9872b091893e55b17d1eb19cb98cc59ac09ab243812d346908e0b2c386292d2a0c76a9cc3061cb3e2e5274d89d24d503a5b6aed499043e1afaee3f9317822205768631b754c7369fa638c1519d899e62aae9c9a8a1bef5c771006f5d546b63e76cd9395523c1ba5947f9267f62383ae6e1b8a2458b2ac86ecc4c8a3aad06bf34a473d135c5b23401847a9984b4799239a85b40d9619eaf5f0a3accdb885f2c469776f732ed92e5ddca0a4bde89b0fd4cab292b62b7527d189747b297780194b223c8ac5aaaedb6eea011fcb40eaf7f1bc024b3e0105f38e8c8d019e46cd4482f86c24b48a2c0186ea142530ad44854819a9c165bb3765be57d3f07ffd17711900d88e3a53605a6a0d75e2eba25bb04e637029430fc481a472e6987fc197362a473659df10ceae28a7c52d6d6d50d6ae1358469cfdd63d74df4e3765959d31aa2a3c40b7b9d656837e4888731309459c3a850a5148d4b53acab1ab7258517b3cc6d7cd9454466b6ead2c6849e48790c432801112fc5855e46bc91b278430ebce5ca2e051e57bf36ec322eb41340c98ea77ec6b07494e0f6d3cd954dc772ab31a55800871936723939c9a2d7a8dc2014acb40b78543eed42ad837802ae748947adaefddc85922712918ac98112e340d1879584093212f003ee2692bb3c20a132d4792909b20cd59ed7ef6186a536292a2e1df65eedddbc0677ae656cc83ed9b8fb9ad3bc677500179f0ab9a2f547a2f1e5020382504b76de68638c3a9685da6c036da081b49fd623634a5ad1855b5263355f286ccb53d2f0a83d50ccf5fa659ada6031e16f0f30f4d55e349f19ecae49e246ac9b75510b69c0e5560f4141a799f9215e32f90f188b3cdae7af7a6956a7adb82892fed9ffa02587dfa15928b93073c9deb34d1e01ab0d4a6ab6c761d6b489d02203963e7d8255f32897dc0edeb82c09e318c6fbba43ec2c6e6de55212d28d5f42e82649263217b8801145bc853fb102e2abd489d5df2fedd5b15d2515a39260cd2ccc07bd253538c290711a9132eaa1117f63e5913839eb04f1cd522cc018f5a1f0bb0d9d88c3259d52cd8f49cd1ded3e696314cacd45cb54168e74f3891f4b6308f01b970589ce746fa0b238c3e726aec0f843387d304f7238d03d4a3e400edf8f242462813ae15b43ecc1c4b2fa93c3c6ce50405b73fda4f8fe27ae001a9568ce800c0c518b54516b6cbbba91b0a8d8a040aec0767044f75814ea9d7ec111172512c306429b3b7eaef58850fdf0c103e9f674362748a7658e9bad3548cc0a79a27eb8167f921309f543048dddd160cbaacc5bfbf343bb7a081cdcabab9fbfb045496d7b73bd9bc967982326b39bebb20a68ba2e6263abf4b8357e64c79a5da4c4f1711d37b2c7d37fa69358cb003fa1158dacf8c0de045b31e656a09fa40f7767a3b36322aeaba42b554bcdac56b6d408fde3a9a65796f5c27d3a720d01bfa778d62dbc463017b7a4c40174923c570bcc154bae8ab2816a8ce7cb92a28016f6dba207411a29b3bfb3eb78cfc22c17cd54764490418947ef24b0ceafde5555774c3a2ca066299bbbea637e733df54b8cebd5db9d308e3a2101c7e672f5b6f5529dfbf4dc2874a6d661aaaec8e9c9c4b983efd2ee8428df5471bd4bb310bb7563931302184900481f843558aefa2ee1f1ce0a503e490860a486d5bf087bb6a9a536740f927b9617b710826d53bf82894c2d09adf4649af213e3355feef1cbf85dcaa14c5bd07fd82b2f99d557a32e9d35338ffb84a0e1321e0efd10d53809422bb6afe2f507e439e7a1c150ffa0ce785032fd473addb6573c0d69c4c30cb32586bf1b7b11082028064f2cfdcd4d96184ec09b16ae4da64a533fd32d0bc4adeff7b7320aabcb8e62a0abe5feba862f36e07d341fde50d7e8b0b33d70b704b3db8fdb75b38eb0a4893092bcc51b52370205bf68fd43fd6c0b3508638c2b55be381151c6701a1a2d01e8f26b39e83e3fbf3fe5ece76e6721c660c6009d0044551ec12ea4f9b97cf2bb8c8b5d170f20531dfeaf1e8773a53dd0c8a93601aaeedeaf380b393aec42a1758bbbbf9a1578bbf2ff4e823cec5866af9ec2320a3fcea32c6c6cbe3a71caa5bddd062ec154d4a561e1677eb620ad7ec3a6835503fbeba2868d1697acd8aa64ef912b100139fcef501d98f272f68d6f1f36f5e4e0baaf2697e0e4c6e34f4bd19dcb23bb173f4d0e0cc301a0e276d2c23819624c8ac51e2e3dda82859c8abb808758f315eb3152467ef045cb5ee384ebc1bd41391924a42a72833121e8c54f06e36cb50293b1934c920534a534820e43e91e96b4f8245997faab214a065a72253a8aa72d25434ec0f2f47b277dc56ad5b4ca7fd0f22a8bf0cb9feabb87e5065330d746e2431566fff4a79d1a47e3561b1f59a6af77a089a4c2b2663157af921d6da3f7a7e6b578f084aca569ea3db086166f53443f7b344969d1c2b064912a804adf6f0eeeabecabd02d418b8f56d788537d1e9538a42c89a850752ff80cfb50cc153c91beb7725e4a615008e2cd483635fdb49ca68b620e5ac314fb023194a4b60e6af839999858abad4101c16b5d1f4a4c0665766bf4b0528aac90dae7c09cacb861527df86a4579a9995d80acd8730a5b07fd647eed19e5a6e24ca8b777ec8718882695acf88fe27dc19907656388a748b833927959a6ff8c289c59430504bd0d67601dc349c150e55f544fb116b312d7850865ed7266f695e1e989d63a0449ab44c18aeb97a5cd33de4ec4aa69189b76dcf58c9219a2aca63922dacdc21a934645bf69549d2a31cc760abd65ba993c196d368f529881bed9639bbbe51334410c9484b3af0c80d188ce99ec32948c81b9c957465d061e7d4d078d509c554a803ef62652344b15c160c23f3c83e8ea75c9438f2dd2f556e4cd260f19cf6293039e02303ea16b028e02e141281c8a0680eda2f869e3716ac4cf946fd7007ec4ebe8e4f71e51fd480e2d4ef628443529449dbef71ec7353b7338cfb47afcf82c9f8ab7e2a34b74f4e7f7ea7abb47a3d0f9d3853ad724bad1f7a740f0ebaaa72f9925eee47253328440ef24b1fabc13963c5599d44cb07d8433509a88d3fc2ea76aea842154699d9c0139c906b5cfe60c2c325ace50f834e643b5213664710c4c724667dfad2636fa7a675076325057df5f43aaa378e3814506c33c6f700be8d4ade2a55589417f93c249358aea188f91c9f9c2af1e5359791d36e051d9690c1b64e5dbb7cef7bf0062aa2607fa1d930341e1e72ff2c3d372ff5197ab8e2155daabfe8ae4a1b8b1ef126405118f730473b9b9f166acc7e52f508c55470f02f9764e1e6f290624326654ddd89bb5cf05ad19fdcca6bce35a01daad8b84f585327a89075817734a64f014c960d93e16fc2f3d0faa8f5bbcac14bd161bf86726a81926f2eb8d32e538f0010987a2cf011a1d7b618eb075d19f54d0fc9aee31f91a8b3a52a4a738db7085f6a12bcbd89466ea13c4a110d0d4db2122231b4c3f4558291d3e8894c62dd2c2ba1eefbb005828b9cb3aa3a4876f34a9b71f77769c578df4761d6acf7eea1918d33ecf42198b3b43860fa38b840f93ce2b31722da090b5a85b0ebffae09a4a8676bc2608115f4da74728c0c2805f1cac0f374125e7d49362639f132922aa4e40b6d1e4f9edb8a98fc30524f26ed39567e4363f30cc2ff3ac66ab2f32279f3c5bad0329a28f5135afc58c29d2f2bfde6f6aa900ea21125b8793655fdcbd8d5493d447146d8f50cd3190945aaa89367d7f13e35347be0f2fb33e384387e7630558aae710793409348a79e673f47ba75ca304cf0b425417775326e9ef21934c72ad6ab8df5766de548afc78b01ef7978ee61c0a72a1f536b6693d02909315a989f5550fa06f5002db87e1d5f1f56b98c2ee4180b89f3813c3d669ffda36b33dda7ffb86cdee480651acb291ff8e8d13d45caa5e1a844ba4d158077a78075c09fd28e3c6205d9bdb351c50decb6fe902cca1059b944aa69b78fe91d88f100dda824cbc0e7fbd86dc6010a1061157544d15fab68f3a77b4f16767c37b848544df7c4de35d0ce74ca5a2814353da4634fbfd09523cd438a59235fb4c4f264ed681fe7b3a41070801f6e12143ba8308ff53b8f0a9ca3610e12078d13f91b7c91bd7f212ac74779d0d8869d36fefdae6760f01e8d0759a5d152afed7b3bb725b70af8dca5e2a0093c1fdb2f459425f192fe130f5666061902f15be29ca725a20491be77567aa5a7e6d46fb2e512dab78cdbe424957a1345928f49da1e9ded9fac37db397f53f35c339d3818b85a898be4cdfcbb307753454d3da075620cdc0dd46a3938866b54e74a7a993588cd13ac7a193f07dea45ba455f74d2b08e20c52b80c1c410955b41c15f9a253dd053165e05584acc903d7f6920ecf26c564f054b2e7a02921394dbf371677401c4666f82ace8f7e6f583f998347795c6011f86aa9acfbad48724b7dee481c5d27916f5386fd9efa5ee914479afc31cdab348e23cd37ace803ed5c90800e348f94e6d2ec0bdd0ba63e6edbc99f5d68679ed38eb942be66cbb7df9f1ad2d18a5abfb5434b9208d864ff8a7803931c6dda1ad645d440e211994fa7b9d81ce430170a3d6f745759018a328df29006fd9e67834dcf492284cf59366402a7ed0e0f9e237b8201adc4f4dd16e4d4f8e88e77f0517c3c31bb70378e4e30271b222e93de3bcd360c4b71bbb6b7b555e9fc27699312140346c79450780c6506ea3e2e6cbb22a18a370ec9c354699c51a19e0304f1e867e91d029c2a51775af0850bd20d16a74912f4289cd83e1b0e07dce2f7f01ae5140f5efde3700afb33c5f5934efa11a0a7142da12826d4e98dd14ef0552a4acfbc4f5e10c117b1aa6324813a4224738993e840151d702235b015d2c23824e83eeb8584926a88bc036b122bcdc58c4c2d1f27a7b841a2467335c2104f54d762578ed3cf8c6bc29c1f3389395eee1a15898eb3357604a9bc418075c967834a12e6ef3db3ad0e7e2cbec619852f45c6e941abacc8660d20440e4b885bbb8a45c5ae54c343e1af1556d8187ca6bb76d70806e74e49227280cc0dadc3171ba2e9b4d254fa9718372847c6f32c270231b43e5f6570d0c5e1328a1c2c22143876c185608551a14ddeaafcc27cf3af1ec76da599c0934206c00fab25d64990325aa17b229a465ee37e262bb21e2c16c1fa38b15e2773ce5306a49652799caa545ed8dfe3131516c17fa5d2fb68dc0bc918479dfd15fb8e71072328010ece16059e021048748322cddad379cd387ce7f508643606bd5e1c840585f80d76f5fbe7b08277bf878dfc4634ed01d562eacae22a4abb5a9a4669a9da11b3a49c0efce8b68b94081209ad7e3c35f140e75314648a8680772a4575e399c93b6e47e8ef2a2dcf1382919c45ea030fcb856a501fece5e5cf247279be2805601a1b1faef4c0fb7a60ac2761a7f1670e153748936dd2704d6a50eb0e709a6bd56cf76666f6335403c6e1b6ba2033bb3d6e5e28b026bacaf0b2e036be839b00636a88afed69f4633c596731ce2eac341f5124f29ec020d8daf8cd1d811aac297034e9aaa40b55b30a07d09d2780e5ba44ba7fb592c7d6ce530eb00d899f2f7d6e025e0179d5626a1dd45269ce518d1368299676fd681813cfc4c7c32d98145a3e2bdc7026f480e0c7cbd74e7fd7d0ddb62745357623508fa469950f40d2a21ae046cac43cbea035bb02d6001019c5903aadc9e965c30ceb2d28c01923f75f4103bb0fd187f839138458626ba8dda7c166eb4e01e8777635c78e12f071b7d59a8662dc7ac078f5250671dd7e172bcf95453b16b7f619f7c30f3b9b6bd2195647db4d8ba5113114a6c22a49b084922a59401290a4009f508cf077fda9809f4e69ee3b8d5944c9564c0e42c4cd4bd4c6999ca260f521863cdfb023cc967b552add425688d62df53ba65df8ac5be19d6aa8ddd1d9e0b6a8945edfbb46f13ec4bbe7b8cd46763950330ba246b5e2bc59af783d596f9229f5429b663a1c428ce3d3ee2fe8412b353f6b54aec6b9fb8b1ce663594367e07fb9271cd5ec594358cf5a2a2ac4e0036be3af06decee98ae25ce22554e85fbee78bb0ad955e738d7d724d35d374d4a02a3c8a7098235ca9c3e6d918d55ffc9aed23ff79dae4f209c507754ba2ae5cb6d5a77c02714c75630662b01a260e11312180393c0271ba78cc0273407b7714dba3778b5825cc5545dc38c514d8eb3169fbb175422aa168326de83e332de347b77126cd7a936b04feeda33a74f57ddaa0bb6ad4eb2267e55b26659ab00912b96ba644d0e4ad0e3eed422f4061f735bd66a918a4f4d5a5740e548184dd49b1e7787d336a54cb02fb9c2be64bbe94108eaf1c5185d0a4160e433c7e7eef8a037f83d280e3eb7732ea698628aa37c50fc1e344745e3ac32ecd4168e4ba9bed35795eab31cc7e1abb05d537d1ed7fd6c19d63f2a6d6a15b6a76eb3d493edbcaef3bee9cca5ae9d7edf4e53d7fe93baf67dd3cea9b07d5eaae3fea39d53d5abc05dbb0aa96fdcb5ff70ae2dc569df521cf7548adb386dd338a1cc6e2de86eadf89a99ba4a03d19ed2b7aace0271f2a399e0f383bf711a484ea67f529ad38effa36507a29999fed134cab43dd99bda3410d5a6699af2e4a4ca6b6efab36197a6e9e5ee4df6c144c0d7fe83af6dc755ffe063eda35aab035fbbadffbdb1559ff0b39dbb04ac908eed9b7652b3a538f5f55abd96dba1e3ac0ea5e7344dbbf6da639db38c50b682b5964847ef8e2da98e1c9f8d5fed39d7767a6bc2d57a6cfc8a7556a7b82e5307b7515abdac835ca35c4b1b6ec25f50c125a3420be61ec003025e32e38ba5345c3797a23625a85062dbe817485b10497c716353a7a529969ac8dec5d62a71d9d5a1d9b5d65a7b34723da5d9a0eeeb96fa50d8f7d4cc346dd3d7888dbb1ad69868984996dd2ddba2ba9fdcf6b4b537f3b2d5f9c0b3033bfbd53e1476863fb0b3d7aab30fee060011b9de62ad056d6361e330de381d5597e1d4b86117cd264e59ee2873dc1295a5252164624b49be08a42166c9063492965ef82230a6c88933564db74e70c15a434a04d6a8626fe83eb9ecc4146004d48839614526026844c93ca5b2c8b04d9d9c60924222b7367572c2485594cb4d9d9a1823d542fea64e4d68e966c8339b3a355184a724d76cead44491036cea0404b5b1b5037badf6ac99fd0060e433e35840ce6ab51c5552eaa88d979d765a59a3443e331c54775500a5d9da6968284eddf859fb38ba5c78bb4771ea33d69e653407cd284e996dbc7550b631ad1a644e4d14d12a2453272d9e76b633bb65d9b66ddbb66d395607365a93d26fb946897c7adbe37e8ac111b99e95c79e1c51d7736ebffa4c61dfe3edf4bb1701da55a5137cfaeda014e74c616bc7dc7605dd7d8fb7a64f0db6edb9f4fc76e09d695a35a0578686f60f6edfb3fe6aa03bc30b44fcb0eb8140404616465df23d8fe5529be38e83483e3393d4539ae39e599dec4c3a0030e5fa4b29a5945258cfb5a7058e74d4e6a4bf219f1ccfbdef74e8ef47570a15ca96b596cf7c6c5f079967f555da140057f235ba15f1be753704fbef1fec945776ddbf94d779a5d0ee54db53dbb75ad138c10b1e9808a28b0c608c90803aa184c5902e5554e1628d2708e810c61538484122c316a9116099c28595941e9c603a42cc1251d480c3c6484b152d5f94a146d30578f0120b8325861caec05998b8c2c91b699c9888c2c4122c012022890d4c4e7c286286309e12176296801922c6d3c778710444192e2809122a61c5ca112e7200c28b540d2fdc35843cc901c916444d82fc508305243444adc0072c7086f0810b1050c020c117199430e3881620a174248a140d502708a3090aa0985803c9aad142cc88a614e4d003922e14c8b204041660389185920c6451c319b11ccc7032a31ac91a5781afc53fbaeca6ce9ddb6ecb7ba9aecf4aaa959fa5a57dad4fd16f1ad643b57f55bb57d6ae547d6ff5553b906bdf73f65df95d75ae00ebc1bfffe876bbdddb3aeeffcaaea4b7a3f52a7b5cf757d27b733d1e99e6610fe43229ee00e7abb02b43614708b710a8cff40a99d06637245d47ef0eb85d9f757fdeb9bb43bf0fba5b7d0aed5a6ab765ea142cad7db657db4f9f797baf252e3920972dcfd4bbbaedd763b76ad34a1f0deb515df39e79c75c76efa0e979fa7ca7c1e332df6e0772edab95cfa50ab09e54d59e75dd6fd91d971c902b757bae00d6d4377d0ac9e84dd3cd5efb7602b9a6d05c76854c88b39bd146abcce64129a5b95a81fd506506242cd8e285901980a0c2bcc08491111c81420431586801b54614456bf8208489155a9a6851e30429199090b1848621234c30114491089e18dad2030b742872f2248823428041f281090e0d6a34e1d40224b070d2aac070002c4c4f4fb07052324ac5903d5103112466c80285520e5b66f86288141ebe04b1618a1e8e602902071698608841e808224366644992e4cb92d40bf9851ac890d202972eaa60400c4670d102255db051c400318648218192215b7e207282a28b195870c50d4c90c8c4608153123078808244152eec1a927e70aa520613096c8c54c9020515561ca1860b3180008d34868a3082881930a45aa8c0101bc030a932640c242c48a1c519519298c1c60c6374480198205ac4a6644c5a18153c41230b2ba81091628182b1448aa8196030b2a5e8060c59a480a18b218458a284243368b106164908694a0dc10035450925556c207aa10da1283e4025d14594204ad2f0a6442111041b3a2ce102598411286620c1c6910f6cc4409762609472483281114eb8353488628b0e6844515ac2820bc30650452eecf0a58912256e4c174b6b4c39220c2e6e48e2b992c51159ca88218a0c292428429c4842640727d480e1061d965081902fc22883099706059678895a2244c90b4a502b4fca30230b1333609822882b280083cb9430b840c34a3144122156a8106205163b2f252ebe78d1e2c5115f70623eb044942250f004921a9a58a1c00c2349ac38228c33ae0a4e7021aa8829608830d93560f8d2048a28b644e4850acec842a9882eae9cc0090c11a727267e78e28b2f62489273507aa209154a682cd182220e9840da8109a7a4296270663820aa0ad415369e9aa032021a68481285511816980821640a262e448694a0091726060d9e38d284e989222e4df807202a98e0814a142196f0c11a5161f0c01264784181184cc4aab060882b4d59c8e044104fa880891dae581105183a5c512567cb116164e1c404474eca282a2a82099216a20c49828c2e9ad09130513da4c00442589042e8480d1b6a30d2e1c88920ce6801510c5214110b220a09155c8c808c31904862c4183a96a0c2430d635c49230c2b56b00691316eb0410c0d3a2c923094cc60658936ae70621cedecde0bbbf446edecaaa87b935d48475137746f321cf726fb8138f9a9d70ec4c98f7dbdbd06e2e4079fcbb00662de0ae4544571f8a7a9233b1310ee0d937cd22795d1be3fe9d30666e4db1d5d246c021a5c4d8c0bdbcbbeb5de77fa75409ec772296cf237a3e6779a92a337dfc93253f33bac1ce9cd77fbd96b63c8df6b61ac0e0d35bf5f521bb3efb7a1d302dbfe3bebf6eb29b73d35c9dfef14410ff6bedb6f07b749bd116d58eccd7db62de588c1567abf21ab43eab3eebb0d6d4456c7eafc7d50a959596556028ddbd2d1be0598219f1a51ddb6a3bbb33d416feeb72936a4ed8a2db66d91b4efd1dda13a9062fb266d4b14e76e45d6bcaf7a233ab7a57dcfc109f2a96d43fb0e553145ac79a4b447a55d624da4d236b16696655117aa56afabb5d65abfd2c70afb7bfdce63331f757ff74a0dcbbeecc3460440943fab1131c04ad68268ad2833b2efeb054094cffb4474664f09c892b32830d634cd1ba6dc993e338d99eececcef71d3dd79fd96b6c81add1b3be42a33a46cc97da238770b7a738b9c2164dfcbb0ef799f8e0619fb7ed9f7323a3bd288f63d91d551699a9136c4ea70c7208b6cffd262a54fa12c036564b27707f3c177b9ac073398336b7eb79f07d955cfbcee9eea2a9526f26c1d528f6cfca73c26c917ea7ab1e6e5a0496ee96a3558d51ed44d772abd4173644fa56ebcce1b3b0061e4f3c6be5bd468cd275dc5187bb7a58f1536be35cbacb5b6fe4845865893d623fadf9a993e83ae3dc618df56d3c69aa921ba9c46a6cf367562028b2421dd2108ee8bd32f5a7cf021a9880b455f52427a1093ed18aae0e2a4861336ca8842c7c5a088e90a0076142d6336bd820a2ffbe4603b69f9e2c424659f34bb5627a6263b838ac1152e97e53897b66d6510d6ac2743433e4dbd4d7d06f51b54cca4c3d5d6ccd6ccd6022089418c2366cc10450945438c972f4d0ce58006113a6cb5b58b982fdc576fd4c8f819e06f80bf00bac3b3c5104a60704a6a018b0efc06d01da1284538c598ae609245880e8c710626dc6c831232b03b240efc0534800c1df83e3f2364c06513352ac0859cfd3c16d7ca51819db458c11591b74d9db430b140cb5237444e6deaa4e5049cc9c9709d8a5b6989e27576e9f34105e569c96195f271a148a7458615a7d2c202b7c5523966785a26620a83f381814bc12af369e189cb9265731cb7414e0e8e18c0d81b1ac6278631444541ec0db56616235c4b5990563e2f146549a2f221bac28a17461bba8aa9a5b65a6dd3b4d3756f0ed5de0c6b57dbecc6558e49e3c99a87c77577a88e940e1e8a634f73d0d518d64af1842baa596810495892450d4cb8b8418b28da20aa558a2336e6c2651c174e6ca4a0615f6bb98aeb55011819bc82e5cbb6e738d04ad61485d1142c426e939c54d02403fa3107835cb21db247ddeff5626feeb99f66ce896387f5f1297d5e30e2377dde30fb8e591181e7f49905d9f9993eb321fb1ed9f73748dd61dd21f7c85d02ea2b65df2afbde2bfbd6a326db475506e0081be122d6125177ee0cf5e63e0767a9eccbdd12d81836a23817966543acce69cf655056c7c8ea58024481b95157cc988ce83e2bbacf8214b1160fb12f36a2393ea81b2642bdfd4fbdb5af9ade9bac5ea54dd8387098bfcb952f776f96cdb0ef4fed3edd0c1b59f3e222788835ef3d07601879429bedc274d4e6d4621bdfcc82b137f8d886b16370ccdee0cbac40668b9cfd526b7a91cf3aa445594c9b8885c1b762ec8e4b07fe1dc2bf447627e3df20f8d7e80ec1bf45acce91ad5141766ca7f00bf7dcbd99229f750887c1b1bb739fee0dbecb859d36ce8836c6f89ad64443b2e67dd2966cfcfb848f63182ce5ecf816eaeef06850594371dc53bd16ca9a38ca82518ab22606634d0cf50442914faa64c2ddb15fe89385a23898e7721c86daf85fa885b26458342e0b5aacf3c2b4358b95b6664b2ce5deee56a60e6b38866355870fd3bdab686b62b8a6fc84a13665b297c9325d2eb7e976b94f4b5bc3494f0cd9deb563a52794b6679b6c97175eb8c7492b28b9eeec76e9bba642764f3bc8254745d9a64ce966f66a2c25c355387c85c78228b84cfbeef4c89232a44d84fbcb74843f704b3e6dd34dea6e6cd7a1ac89e26897f192f1718c84ecaa9370df59bb746f36248b7477c06bafa2ee801a277997e9bb4cf962c8b8bcc0b1abc58763b6c9c34fb6c907c746306398310ac766b8945a914a33dada7bdc1dad088e954db6e9eee46839d6daa6cb348211639bec152c56b3966cd3d6ae6ced3e55ab5aceddc150e88d762da57139384671340dc73014ba43298ed11c35a54f3c852ab135fc045328c47a5efef1f173ec4eea2a10ec4eb63725676f6eeccdb5b702cce86405d1c6a74cd6d636b633a56f137ba35dbb554ec8f6bd485627005bbb4b77a7c7bd2b1b325d3740a890baea5da94277eedd8a87ec39e14a15b8771f8dee8ea7718c4570aca8644ec3eab977301138cdbdfb0f77d5390dc4c939812a4611500ce96861858c0b27433ab873807ad94c38ad82ebde68d7b49fdc929436ef8d7611887457fd34f1531cfe5502a3c86735ba45be6bf7eefda7bbf71de492cf91297757654f5ddde768a4855ba34e4f346dedf688d5716ded368aa1ad7d2c6275ce8b7491b4df1896242728c4ec95f6f1c8686475a81394a8ad7d1c6275eed62e731e2b26894a77a7d39acfbdb937da2aca45a239ead6bc9390ddd324dc7ffa16b9375aa6f1d88bc465319ccbb444ea8e8cbeb17ba35df59300dd4f01ecd31aadf4105bfbc1d3e74dd25d240134edd1c8e78a49d6d44425b18a35b5733046566d4ac43d751efbf434646b4617c9ead0d148fb68a4dde59a198dc4a4adfdd4f61972b1b59f63cc6734ba372c226b6aac20ac226b6a3f47a3ad9d0330f2c922d2348ecb9965646d76a15e2df9ccd9b7c7bdf6c79a57e68b317c7244f89844f0a157d02de8972b2a9825170d11dd58106c6da22b9235cd25bb87527a71eced977a2847a7d896d22d626554287b83299218a5a4ad8816a80a757736a04f6bb4f16dd1ddf11eb3471b4351d57f387b20d9b95bfd93baa781dca72a14c57992698e7b4aa3c835c9e542da5875ef3faa7bf72a5d9bee0d867dc9d9a649f855c995938a989f4f9252ad629aa0dee06b58558bac513541dda95120dc1d7b442bae028aac50b5892417d2528502979c91c12620121418e0925a6bb5d6da9837828edad4ca41a138196763f6e68ac9b9b443b78e69219f906d1b7577aa7d7a4ad559289b5437f8f04e50a81b26423ef89f7c70f5fcaa7f641e6a20e0655ed9a837f7d3a7793134ca8c46eda70044fcf382505bd950958d3a74ff647f3005f00b5ce43eab986a61d8f70e719f8f8d4dc93e442b505f9024d3ad82131556cf5741e6e09dc044583d9f0499831883a54c95b22fd906422459d67d3ff2599fe326c90c046e9fe31e472018d493274f9e04218aa2288aa2280611441033aa2824401004c1567811bc58ce1cd4a0e895a7cdf6366ff3366ff336f0e2c17b3333330fbf9567099bf5f02e57ce27076af159875ad467091bfce612c3f20c3fa3453892430d0bef1dd421d84202c8668bf790f0bc16d8d26716c1577982a006b2a1391018126079da6cf0e177f80dd2d0902eb274edf0e7b8c1160c045bfacc1b3c49ea5ceec04e9eda9d7c58492d7896301ec866f3186d6cc6b2eeb03c6d6c6c806ce8520934e5100cc6b21e104872ce398bdbf337ef5bf93af9ba97bfb1c0f2cc36f8d23d21f87a67bd6d3b8f7d3d3fbcfd3c00efedf0be9df5dce37d7b0ec1fb764f03d9de370d64e787aed36f47f89716e148ce1a960fded39b8665dd139ef5f0aceab158209210047988ac701cc9f2cca777d9990381e5d320c9f9dff95f3ef70c861f85a835b3fe5ae35d6128fef5ca675d648d27cf7ace3c3797dfc71308f915499ec78ee4bb15a97fd40d82ff405004df81657ed7ede8ae479675afb2dda03eeb069f1f96acacc79aaa7c50d43da1ceacf9953967cda37b90e580cca8c62062a4381487082288a039ac8e35290ef951538a934f963e6a1b7ba43814077cfe61c978af1cc57b174551149f455114c5538ba2f87c7189b84414c5715cb233c362b5cabac5d25e7b2d063feab1858eda9cf674f5ae0c836c8eef67d885a577f15e293e04798cf7bab0dc3e96adbbbee9cdfb189627b7c3f179fcf6702c5b6fddfb78fb79107edb413e7fbbc7ba0763e91e5267ede93385ed7d3ccf1dcbd7e9b7633cbdb7b40847b2a783ee260ff31e7ed3f6a48679ba677cfef81c5477cee3c3d7cf070a0cd841756be084bac73ff4ce63431ee0bb13b610b2fe51f7f651ffa8db0bb25bfcd7f39d529c533ced08b6769eeb7a956798f24a262078e14e78fcf80ab00399d14eba3b39bbffa87bf52e3c0d0f199f6e1a6a58cf77f8eff0e083ea86f584e71e9e3ba1eea0ba45f2e3339a83f5f174140acf2a338a139e2ca935c37c30ebd3ee7cd7c3f2cc3bfc589e3df6c862e993dbe1498f244f146a7eebdfa9dd9979784a73843fc38f9f29a9bd19cf73c3127c3e53d867d0ddad7f77b5b28fba5befbe9247d0dd2dfda36ef1e00e5bbf0eb88befc4327cd7ede8aed73ab90d86e7b16269f707a23eeb161f7e2cc9e7f2e476fefd7ac6939a8aa5ddb93cb3dde14596eea1d6043f6ace9ae0c31d720f358feef5cc3ae8eeee5487d0bdd6fd7954952acf14603d54696fa74a7bd33c7ed45d5f7fd47dfed85e1fc4430327d4b3b02bac1c9a39100eda68a38d3666b4937a1b6db45d929b651bdfece25a63e8eebd99355d30b5581d958e6a373541ed1cbb7b97795d27f4fdcbb87385fd9d28acb0bbd7eef71e8ea7cfaff351ff95a7d0e651f58fda618fe3defddb91e3d3a7ead72b4fae03aea335894c9d9ac4ececaa7796fbe56c858590fda92b8a7676eebbaa2747dd5cf7ecf3807bd681aad3a7fdf4597777aa1ec471bf5d57f200cab1559a0339b6ea2a7d82ea41dca694e2a4ced57367ddf65588abf80bb7714f51b5d6caa5b074b9f76691b48431c6aa6e8994cedbb66debbc2c8c8e52a994f78dc92248d775df0a4accf77d2b992e5cb28ff39cba78e9a245af625b1465638ee8bb4d9dbae0e0d425c81eb36fbf368c6aa72e406cead4c588029cd9b64f5a28757a32c11ead8905164b4d558c734d435056d228412ae3bc3ab4a118b3e9ed765ae286cd8213165d9cb068c13eb91d45907d661b8b329cb000e364a58dbc6f1e724111f6904fbcf1b92916c7acceb98d915913032ff9c4310cc6e2a41886b23ad9b99c5dae5fdc45b60793646a974cf377b996326b6a98c31ce6388ee3380d8a7656250ec7701256c24b4674d4e6c4312a2e2339631e2ff9068d8c9b60246b566aa594403669df7306ccd5b88935ebf1122a7809a5d935d28fe776567b5672664d0cbaf0a0de31295fb158acced51fd06d6d93ed02b39ac6c69ad42a715627bb7ec59a5569287f9f1c975da738b61dd1657a1bae1e477d378e2b30ea71f8f0f548ca27c5f200a01136709f1f13329059dac39a6790fd005210252fa0ace0c810cac511152b69205d199244c703e80eadc2a98c222718e38629c2d061ff43773040e589133831e50448a274d8974077849a14d902a5882ab27041830efb0cd09d06e4c0041b3478114b01181df61fa8bce377dfa73dfc0deff0b86c88cc71e7b19c4ea14b3eb328ac3fa0363aeb517fc7f2690ee1a58eda50716453a72d5d36d8d4690b98cddd9d9b3ac7e5ec72fd49fb4a15d962b14b96032b99cb3ee352cadc4f9abdc1be50ea8385c0fdfe030e97670684aaaed0b606a81a689c8b4b3eb3ae725cced74cdd5a28f60ba15cc0c96deed939a11305a11307576e008463db6b96a9a96b124531e822db6a2d92aaea728305ec6bad3dba78bbfd157377ba4fe6f684cc56d967b64f9c49c151d6bc0fd8f72bcf0045f9c4515f0837c7e72bb3e77a56b96c8b456d7b1b3392ebcf2df612e39bbdc82d722dbe09e7a234ab0df1e42505dc96858d299260da218821261d1728f1e40c19be20818487d49029aab032851728581cb761b9a907f080b0713ec0f832650b09aa28d1c6164ece30811023386ac3898e9332ddb0535bb83c65b0a9d316a49d3775da52844ae723db4d9dac18d3d1d7eadd6bb4ed2d95f216a3cd738dae925d6dd8f572740700b1b169674647fdeb6d32586d27143cb1b043755c1b2eb976b1666da238d52add9b7a1e4b4b5ac1130a9b2dd92addd1c93ec77d72a7cdde76ad431b1729b279acdd33b482f77668f3d8d37584bdd8a2f67df7d2226b5be62f2db23da514e71e84219f56cccdae03756b3d6f541ff56907e19dfd86983b6475b46f77c9eac8fcfe5ea62b03dde101e9194a5153a0a03c01d1b4c33542eff3792c4d79d5cb6a99faa7f23aaff3a82def1e2a3b58d25ea037f73530e1d0a421293728228a83c59a344c98ec6a445a106d8876c4d64defb69ef56ccdb6a58d69c352b7a3a5a3a523d74e41a64e4910d9db0ef4e63ec581f96e47434714e77e004cf9dc96b6a58d696bdaba589df1f7db93d5117fbf79b13adeef37a80d8cd5096baddff77d1a7fcc3e1166be31dd1b9d45be61ac99802b19ab411950741d675006c07e8fdba03a5a18fc055d01dda1f93d6601d5217f8fbd540568636a2528410962b1580c88579eb9ebdbed087385333399849ac3be3d97d915ba6a72668d77cde471bcebe35d2f205cae1188717cbdf4e91a411610e39883b2958b6ce53c73d7f7b9fe7ab9587f7de665755ccfaf5778575e9df5d66a45963ef2eada9b61b0b226c35e8361ba078d17c48891c52a5b9b6689678530911435c76285411e783f6e6cf1ac503b40688b3abc189e1514b43717eb2290b7c39075f1acd1086fb38c60b13c91e5e5ecd118c10af529c422cf6ccf641bcc079f83f609e47521ab3c3d168fd0fb7e5925e98de7c13af99175f2ac31e34f8340378c3c0ff1acc37ac4b32e6a307b0f82792e08c122c58722e983db3f6876be4752b33c53d81b280a9173284418b27228c4ebe55abdc8bf5eaddc627139dfe0830f3ef86014c566089075af641d9c2161611886e1431f75678d42dd6227963de06f807abc311ecce5f8568f78f0a0f84ef3c0727b2eeb163bc8a71fcdb335b5b7cad3dbdedec49f79bbd61af3459ad2654ded374a1acda3375ecbfbe865604d0f06839df4f1340a4224483baf14dfd52f023dde2f78fd3cf07446feb8b1495dd3ea194fbe7e1e8c27af7dad7b25f87ce3743c8d289e467c4b7cfee8fd467941490020f24f6e6bb751359a469f5cd64e66b0417dfa6c12bcf8933c4c8b7024931a28676f87910fef6952f7809f89228a601410f444d063fdb4610df12a0fe4514832830c4cd06687ff9f93f3414ece26c9cc839c9de3539643ff359ab1a20b5466c687e0ebdbf830f460af300c472f1bcbd738e69363798e07c7f0b031c346dd934f3e9f0c67a89064a692733813cee893cca12886219530e730d427370a65aed54dd8233933439e2850d65f7f8de3598795f4deb0beb772ebfbcaba5b3d68ba34908464fc917c88442291e488348ee3a874651c49721cc795fd76a4b8b114cf2acf6cb344ddc39ae4b9f35c564f0fddc39a228743525252920e3ae8a0434e011675e4c8912353f2bd32b3c8833a677b9bb79164e893b349b8f19a8b1f1f82a3fe117d7c5c239993334ec999c2ca2368b9722e38909a2939e7f830cdfcb53a8b0696bf15eba3d1a7b9c3b36e9960334c2f17d3aaa591fafcd6a7e9b34fa09c9ccd23e78c35cf3935e58de7f2cca9f98d1a9d736f729e7c2e28876a6a5af62b4a62dbc22d0c43b03c816cf0dd3624e387498c4990e4c731bc279e7e21b034298260f7ad68bcd3240182ff062f039e3bd89124086a99d3af83d79d9450daa49e39b85a69d647d75ba28ce87aeb33ae6b9f0775bb4e9674bfba964bffa83b947997f2c2b2ee0ec6a7be1e0e7cd75912484871aeb2ee960c6837ebf723c9731ba97dac99edd4c3d2ee2e848950739affd488a7116fc2bd0945ed634d6a4d99d350fb58330b4b1004cf20abca60aa313d8c3df4d0c3b517c3baa4264d9a34f9e1053e3cb81d2c67ce3a086652c358ba276bf01b0882678f0d7a5948b27e721b8491baa7c7eeb137b06c8de0a62d2cfce187711c453128fb01e4b96750b6471e41d91eb39c730ecade0388221e1197699a2e976b04d31c6184199769b68a884544b1d512c7f13553641c5fff5ce4b7fa4872f5fa5ca4699aa6699a4c47408102058a121a1a1a9af2fb684e20e50975d3d890f16134074fa3e4f5fa0994c1861d5402831d046b5e30fda3ee9aef29d50fe4068d920d246934b899a68d0d4dcd06fbeb557358cd56f3fa6a3bf81b2b9809d3353b370ed335bf5173fed0f0a0d13fea264fb3afc76ef25b07ace3af87b3da05f8025799595364d1d8bd9567061bac0269d37c2335f79170e3e55965dd5d89cbee46363373634614674ea00c3679f0acf214daa4ddd9e769df07dbcf8d97b6fcaaec6e94bf3727100eb3f5faeda0d19c355b7fc90c815da6bbde8d92eaa8795753f30fe8aeb9d0a629cf6f9abfca33dbafc36a4a9aafca99d36f9339ac149ad1d786aa81cc5f32e7b9322e9d59537cab5c95278e0dbed3bcfa7db0376d370f280320fbccf6d08d1b2f3b7681030e38e0e0e435c3da415e14b76ddb80467004c31dbe9c3879bd9c8c2349c260e3388e63365a7304a2518971878c78445ca6698e609a238cf0324d23e60e8d84a1197a445e260d8d1173830f4fef4ee8ba3b33e0cbd53a9dd1a3b6d227e7d29f3e734bb3f4e91a619f40a6699aa6699a23c0ee50ac0a499224d9ea4890158a27cb93dba4f8b08704c1d32f83f72e8a240a758761a8611ee487efc93dae10847927bf69af0a59853c83ae177a24a9832e799a2a24b85a8521f917e85a9d2ccfbcc987e5d96387adbfc8d7c3bfc0d5e7ea58df5ddd7e65dd63f9c13c20df7a0ff996a6d6ec19ffe5958679209e7c8f48a620daae8b24e2c3b06cbd6cc487f9e1e6e5e7f3dc30144b10cb13c846cc60f8ed627996b0c587e55942fe29be258aa198244c12866112921cc7711cc7999971b4b1b9cd6d4e9b6d5302cce3616392bdc8f0955f2188da913f923052f7641d82a81044b5c657c64679f4b68dc909848d987863e88922369a9961725a266cc43486e5898dc292c7888deccdd80817a98a602319a41044cd6c4faa1fa4c8dc2bbf2d77dbeae7b695df5792dfbaaf0b5befb4fd3cf8c07f87611882e3b66ddfb7f234616f9d7ef7af3c7d7cff98d9e03f11d4ffbefd2b4f134e1376f7fa3e1d84f776d8f7f09dfeb6ae93028261f78e46ca86bdee1ba8c58d5c91dfb67dabee9e7727a727f34e46ca26234392e18d1b175c505343430383cdccbc5e2e57ab45922cd6388a62188260ce3232abd5f7795ed7a954a9140b04f5c98d3fb71d5ee627deacb764f4a9edf0abbb56fad4f6f671db5b4b9f19aba41467d420dee0c39bb0cf20cc23086f52fc0682bf1f79509f07b7cd7bfd09ea20bcbdac43f064caba571fdddd4d9801b3e872f08880e018de7bb83d2c5d390c5f9df5c2d679ac4702ec2fef6109cbfa07a65f9ade9b15c49c2b88d9db4356e86a1de61d6c85cf0fbd31875a94c338869e488464d5a2d72b87ac4fa1333c588607c19fb629cc3c722d1a49c8b5e855c29ecbb316fdbc721ef50fbd37e05fba16dd9b5a648d5610f37add27d1aa487044de2bc983acf0db56be403d6ee3f63c2f6b0708ed516f070f7ebbf7021a0f3efc7163e787a2868dda01423bebf0db09b4c1d66b1c5947e3118b4592adf188d4a7d0260f96e7b8c1318f79873333e33803447e7c379627d0b87990a3add67e0e089cefa8c46b572b931a744aa21101000002a315000030101007442291609cc691a6870f14800b82a448644c1589a34910c3308c8120640c210600000020c81884d090d40d0a37636a02bdd21df56492be4b0fd33eff4623bea133497be2c91f01aeb700a1e780a1cf3a4ec3f5c21d0102f0fdd20dda7bee40d66a64470581c800b1052979ca0900a4707a587e498c9146272caf89048fc4354dc201b898253dbb85a976977c74e31a395bb256697f5e44193973073826104030994432b3d5e59af2045c1df2eee50b6740d1e15404c7801d6092c73fd4733c90b7e009afbce04526d708f878076cde27a811fc5ace6ba292c11361d5c85020f0817d61450fae1a826f4ddd826b5d4407ba41861b800c401f9e44f006b7adfa7d1ff9afaac5a1a1d440a5582885c90badc49e5ae9c392311113b17f152dee000493ccd993af625497516921e2e0f67b7a8b6843ebfdfd541b6af04164c5a21e666926d3b4f54168862b64f970f82d2d0a04c3b674f461963094c540bd0710145de1e8beb1ac5845c98fa2afbe6c51c6af0d7225151d12be9a58caad7f2538b1e40cbe0a487516216421c420966829165cbe3b1e1fef503c812c96bbf58393762a162451c4a169341a1fde051c91d8cca8eb1fcf926d435874aab49f5bed9530d8684182886644bb9d6ca00ea30538951c7821f58e30ef0fc98725d3346a50ea7b360e9c7dc7fece56ce6648a9d129cc6b3b5ed2ea9ef0a2a3debaa668d87e606cce0438228e5f8cea3b201a72df846631e1a848eef4d91044d534c461dfe0a11dae989ae766df574073655e611f8f5f33fed40de3b0a439ed82247779e1c72938e59c53543b7f6a773c2c04d6cc6c07ee607957651ea139219ccbf2b8e4fd44db770a10220d47ae89535806d64a7b53a2f39aa96a2b23a24ff1076c84a64b9119912947628e072a74cf7e7202d751705eb860a9860f0ea5a9da3523bfa59072d4aa42d17fe15249f08f569f7c228faaca782005480ce8ef5749684825d3d5b60bf526b95913d9d31b7893ec5f7bbecdbdf0f3c15a98f8f6a1a7bb0b89361cfb458744ea33fec4864541835ff17c4befcc714aecd1384cc6295ee35721d52859911c842486b0e1312e54a04f8ad6c1cac244c93b05197598f038e4bf5f492801e87b2dc1f8949faa970ce07c6e0f7a140bd457333de85b2ab19611f1da7fbf283a052222435e004b7f4ee7961fc9681258dba40fe0286bb2dc911e152405bb042a35930ba68ad3dc01ea763f38d140b06724110b2b91e5995d83590e9a8161dc18ef484fac7b054893522018fb5f1cade2c1d15fbfdbfa8804bda4d1cf0b4db4a2beb53300ef848b6633dd5a4f0bdf7e0184c198902a3069e5e4b23ea89045f301091097297627cb3fa74dc199558eb4e2eb78c409cbf264f42962de6475ded18902feb252e9da7981bf33147815ed36428a5445a9d648153938d8cf19b6b69b91ce2150cb735772ba1af8559bc6b341e23e0775849c1548cf38e2a3ce338770cf0d4ded2dadc823ce164a3cd0068115e1c54acb353753929443ebc3fc1445bcdd5002ca2ea7533714c209f1738309d4074b43ab0949e390108c0de80307c6699098c1a3788c901c1f517e95d307456062eeedb585e9050292401ecf608d2d2ee47ed6d13caf78aefec5e265da50bc17e625168d4a6a92a9f6a1b0022b2beb75408c79178597599545498052c16d48be40954397b6767eb3255ae1ff1e42608ad81f067463b034d8df04d88e34777d478d890a45064b9658aecffe983126cab6e58a1f5144d0ecc445dc7f951bbf423d4e187b9b4b60634a667b5521b9ddf54b8229d4a08fb89ce35dbe8cf61cd514d0e091ee476fbb1c36c5a5b564f4f4c01954896a55f2f8ec0fc5681512c76fa742ac2e05fa69a4568211b59bbf664a3b41e6d2d05f321bdc1b66f18c3d9746a89992fd12d46a2df1a8deeb0407e975eac71fe5af53b83ff123edf53439b8c6e2096c0c70149d58b861ee2b36f5d705023fac344b5d583f89bed4e2c381e371175bf6235611128cd7259fb26af32665102bbd1d37a37798f963ebdd71f3d1dd8ede951e20490f0ad7204d547552b17bd5a4991e5a2e3fff6d19144e0cc297fd50754d5527d95e9933bf6c68278a79859dad94d3fbba1af19fec22d9d6607745812cc573c54c7891a57808ed1f22af9cf55e1faaaa5b820c7ddb37b3059a023afc980d7083fe022745e057ff5dec835b4e42a9a0fc3c0b42bdf018a80a4996f0a2df5435c14a9c78fdcace005913fe25306ec9a24b403171fa3488a2ab303080ea12c81a4818819ae9940e44e06c06d364079f5da274d3877824d17e782a38a91e46e43ae0f769679448fa8960780e936506bf305a30c46cffb0d15be8a1d3e238582cfc1c73e0c6ef0fd95fb009f919b0a303e33e09855b29ebd015cf9d24444e03b60c8c7043b11f36c0d964054c83a6f48f8a9b083684bb1d513d50dc52fdc51968ac32be9ad92a7792dec8f78b0f6eea0dbfe5c76e1f7322c1c7261339ea0496bb07aa23372e461849bbf72760df47727d5318eb6c9884160a6ca47e45c44ef3778447f09bb623e41b81dc3ebe223769a6f84da3108eb96ad3e25b9dc0640052729b948f5ff0f6d7a17a9ee67663aa4e87ed43bc8fc551ca66a4022cac989c91d5e5d9a34bf7b443400639a98833f7278b6600c7a9f8c879af4a0cc2519d69d9b20e2900adeecb67b718b67400f6665754afa24b7f47a79342825b46f31a9a6430dd53a01b723105ec256789cd886fb14b2477ee8421002c5d9be529e2c3d34e475a385feb8a6f6a145b7b1df2cddd1f6196eba532359fbe3d1110a8f8f54544db7e662d506d8beaba03876bc8d808e9b504ab0121d254abed4f347d380728f62524f443a1dff54c14e685f33dde14fddde2200d3f733003bec50e276ec1cbb9ae2680e2c18f5d7eeddfaf91fed3c6a3b635fc1cc2dcf007f74d09eab482a0a27b2e8569f364a080cb655278094a907fe60c684b292b192b3c98fbc5274c2fe1c1b5b6d83fbe0c5d4c6e42f615f60b731e23c85f7b089b57a6b4cf745967801552748e3d5946b265a13417aec31934c7894d2f4f0da098851c2ba9cb9b22f161e033aef06b1ef022b3092342a32c0526adb027cffc9bda83d93d0b466a33ce696bb1ea280409d8d16e19858159095fc4d8f3f34c5a0a7d9dc3892b2047ee5ec0cac3db97f2bf7c5b2bb7ab5a65bd56d5dcc78d7dc268b275d0c7510ff04a1d890d02fa711068f280424bcabaec002726f57bcdb449f4ba512a7349d123ddb532f344970d1df46eecb721a0980a715aa6b26f0e3fad64b408e20edc90dd72033efcdd88c70943f940f05c4910b79cf501f11407f2b87e2464a15a21848f176a182fecedee38776919d967090e934aa1a31cf760854c9443d7292915ad272923631157f8425a0e6925c3f279e7c23400188bd1e7d285d9d169054d2f7c21bf726160e611251637334163287617a64de206f0fa383ca56bfcd425fe60561ab244b158bec370b7e172c160c682a3dfbbe89ca5e3ff48a3a1c30a1f95880730091934b589f2f808af7c20ba41bea430d19b83f821ddcd4414e1406c6be783df13bb94ed3b42f28fef9cba1f36f258466e893961cdb83efebabd94b1c10ddb4a55cfdc914d41319198786247d6fb08ffd941801f418ce604b51415f952f8e771078ac12013aacc664373befe5d1fa1e5cccac547bf3dbf8f166b5e902b07a55066b6adc6f56581fec005ead293216d7f899426564dcb739bf176599771035e25da5c93f7aa2c2c308725d7f6ddf279ec5e666e2a3db426f6f9a435c958ba9287c75851d85c7a251a9aac9a18aba15c68d08a9a59853bfc35919799bd7c3db7e95a459b487522bbea107ba1d8a6e0620e794b98d4c90464054b70db27a4746acb5ad1a75375c201e5a2d0fc8dac262a490dd0b87913c882a4945759ce8d435a5064dd4c0c191fda93a146a93c6a9c54e7946dbe98522a3b0d6267b6015c5998fb1369a4a164487c49c4489d361fc9e87d477fd7f28dc3c57d79353827f73de46aefd2f27015a5fc3b3d5e20d8175b5a14b6826fac0f459b9a75feb4f952a73eb2cb3b11d0025b2ba058dd8c8a5b4d9c5143f4cf68f4e9439f42c5204caf16401ad300adf4c1cc7497e62cafa0eb8e6ca9755d16adde903a4d44c43ebb32654599205fa0d6e0847e3d3050881579490d7962bce2ac29f760076f8cb4543324313fe5ede17f8ab576cb817a107733068ea2808fec242a8f9ef84538ef219b9a55c490164875ba0628429380626c31cdb59fe71c7c9c691963fca50ec92212eee397044a562310c0181b1e3fe2160c9de3f2d303c4c0e4dfe3201a8e5f13503e4f6ac1d818d72e03ec97b14519490142c2a8e3562d73e0271c5126a1775aeda36cc58049df1877ee2afb017094c40d8c6d102ba0ee08f08d8c726915d81cc3afa05095561939a555bdcc11193986bf7b74caccdea750e6e438aca8d0f85b1d41fbf64c4e09b8b05c5c5693c67f6cb67dbd7c1a89be64b245920da9e0ba06a347b012d65152c0be03fae20f4d75f73197f9b9906b4cde56bb50a352d7fcc96e131375f552a48c495bab00690118f0255a70a5520c31a6b17f861b184a65576f3c32ffec3733a50a65be1f29d7bd09bc7db4fb017dc9815dc991f83f2ad52186c90a21fec7b1b2bcb0db5be359e22943312d223b0d2d8dce299f2b8c065c5b1744e93fcadaa2b751558281648caa95f0fa526ac59aa35f8a099d422ab50a10fb052844db7737ce101e92091d18fa3b746c69c252969b52d85a0c768e838231bc1270f9000af6569a08a3a9be522256e0048fd87a6683574d7546013f64a5b95b039557fedde661d395dc4d6d573f40da80a466aff58b94c8af3d3ef32e75d71fbdedd4867ee9e397919477a9fef8e4b3a2c9811cf828c53d8f05522ca3e03b4130d8db835cbf75b09415cdb19b585654f37018e6c59d9d57ec875ab64852e5781180fc72af4f5eff9df56b44eb6d3510500db5ed0c75a01a60a6f8a465cf574d39d1d3e4d33010aa594908a33ba46c911cb3fc8f77fe6053b5f90ae5aaf1538107cd09cacb5401d471adf769e197ca0a659921b037144f79241ed6ae7d5fd34e65fb54bba15b52a100b9d3eb1c2f296a93ee7342af20a68bdf22c83f948e9d6cade30ebdfc3429882a5e678b489422bc551924a3b5245b849b2ebfd143e7c1a15186b0fe8952bee059c5743da7d7bde09c2c84244aa97da51b9bb1a900081185968825a9f274f3ae3d163849071cbd292edb31b3c7dc1e335bcc6d30b763d686391b666c98b563de86b91d663698d9616e8fb90df376ccdb306bc78c1d735bccec485334c2a33f53d6ca156650e274d0887716c68016be82197c21eecf439dc4f1dbd11bd94b671a4d8d3e1ed7549ea0ec4959d1419e0b7892ee492870cd6bd2d09ebe1e687b94ef73e527127218c39cf989368325b48d0ad484e4989e18b2d643fd24c77540ad1db3591274e527a9afcaa96dd624ac1e8c3485bdfdc42c8a1957b07874146696d09c47908ef23538c5bb8504a0ad8207bffd3b32d1d4028ac19fc36d59e4675ab4551302b33a2c0b4c2a8f30ebdf5b28e96f036f21acb30f40494263a98b691fcc8935624d6d57e4f02bbee5c7886194e6e860a2e0017aa65368778b7a6bb05314de1487400bc2c0a07dcc4d0ffa107b71b5e4639a2af4a8f9dd035bea5522fbbeaab784f862c9d39739a0babe10409b47582f8b9797f9f094613dd0c96dddca0f17d8bf7c565c2e631a8b7dcfc9435c9619132a3025d9655af1fbbc676582028812e338a739d004edfdffa83b3e6b86784608f859057f658c4fd238e04f21fe2e10fa7fa0941afe7f3620f2ec75eec3c07a417aae9bba70cb6b338733cfe50e92835691f0cbbb75fa80d1ea378f6539c23f5eda609d149123705e5d88dd3493e288b64b438c06621c4a21566a26548438b0cab447883451258f793fb16351e3ca86f9520734ad57b963f36c1da802aa836ab07ff6a515ce7388e8d3b826a913a4ab6a92acf4cebc49e8c51511b39954916b4d29467d66e23d56913a077af841edc326cd4a87155bc3b634e647c10422628df74a2d4a373bba69d054a3e4a3103e4e08507fa2e97c1b516e7a55c4540b60fb155945e00ffd2c09db8510323df09b63e4acd629a8d0c0157767c12dbd545a93cb0ecdc03e706841d0df64686c7dc690384b4fa1e9908facac474a03a72cc397d6702ea8e6e40beecf2092950c9e6c9abdef0b5c26b47114aab4d96eca45ee0121d291f1f3538cd26d619cc4aa0e3d0246d5afe814c9e67da9be141634517e8acd8ed3e00ba58551871fb4ab5fbcb64b82b218b48d529a471b74f0116fd64511389e15b217a42153821dc0053732e9b7e318e870071a64d21a20cc785b1618488008055072cc738802054e47ab609e6961290b4d67ac9f85ab781c3cc8bdfe035b6719bc618e93dc4b236446f143bbd5518e5900c6d300b1e40d347f4998397c384d93788f358083fbb4dc55d02e0501b595da03599f1e0f5c2954890fa00105a3fa2d053ebb71691a68663ec909e025a5208e326d8f138b0f48a1148c04835397c2ffa26236b01e39f891545d123c6216b833df5ebc4f03e34a8145e39e4c58952e1318ec6391a2ce0287080428438983bcc743726b9c8613195aa51828aa5d55529248cb5f85a04d83024e959658982c63ce44151a86a9574a6dfbe977cd4c693a2a0caf49c586e01a9e0d0da9199a227581dde6cd39a3075c33885992a47963a96b09ddac4c085d95657c61e9724145ece34dd0d31a3f33c2bdc993e28d9ee961387891e3dff57adf972dc0fe67c3e032a2bcb210827819559b774ec63d3cc325d4a3146e1fdc542aa7c358a9d3277ffd3b99a49b1318880a09984e5eb23a151aaefd4b09ae0501a0743f5cf3f8c2103c02fbf1cb94f71a4a176cec7743e6c492894ac0fdb4a18c8d756bfcccc6e35200944f6d08c271c34218def1ce721926679e274499b85a82663b75d3e9068907979064803b1a1b8c60a9e39a99c4559ee27ff8c213a22de63cbac0abff1dbc18e8af28490a501be17c0140cf40ca8c59e345839a808b4f89972214aacd9e6192fc8f8b80a90af66c6d64074ee636cdc8a1e65a0784dc0bbceb10afb5d23eabce1ee8ec36cfdee1963f7e5d676cec840104ba02631837945afcb997bc4cd94505d6167d48425293ea79a3359901ba0dceb5160b6c2789a88b1633b1c7b078e3941695a0030003ffc63395453e5d9b5c943851a9f08583a5e8f1d2966ea9ae21271bba4255b3d031e23ef65e0ab63fd46e2021f9ff97523e9f1b5cc21abbcf79386e0b1aee9a3af7419f05e2e93b73e1d7a9900c27cd2b9ee0f5560f51173888125d8ca2251f45d6ccb53216ff95e28d1dce4039e3ecf012d6f8ddd10e2d546ab7a38beeead6f1b3b685cbafd0ff43507f0bcb7399aaa62bdab429186ad49b6b03f8458fe94086cdd1f2b19b0a657e2598152442de0478c3862f68021c284a3b272392d8b8d70838c557d7a26473f5acedd216d3c0e3578339dd624812ae742823443d4bf0efa44b36bc27c2a1966c69182c6c029ce181f5b92924b1cbaf369d1b78de66a26acf217c2e7f6933d65651bf1f0d943e4f2c5a93c5452cf3b4606db99515da6e816815c5933517dd3b6b4e4e062d8152b24859978aaf8aa7f73404649ec31a9b49f000b8a0f3834500d262cc436a3e2e89cc5b2eb8e68285a7aa798ac07e3275f5d597b06c04c93332c230e91b45ae29df46969fd8dd592107a5d3650b970daf617d8f019564fd879a3693595b9d6d9e3b66c8f44c22e3e8f79ccafdec7823bf2d0a41212716ad6bcc43645ebca6c369083032e6ae8d40f88d9346edafccf5e3c832aea481cea1a5a9daf99f333a4b590cfae85975de8f9e8f754b952808a671b217c4593a59bf851c2a70f6ff33ad80ac1c98fd4cd57eb217c249fcbfed74f5a472d4a1d7c725845f47ef3d9704e0c7c1eb479e90002c30491b9bdb04c9d8473e568d75857d3ad3bacad4dc353761190202d42a400af4f6fd848742ed5bd1c71826a0d64f4f51f241e5ab58a3f53c8cdc251dbb1fade3d3ffabeb190d33a8f453ac7c2af61e8581a0d2275f5438a2dd57b1ef208c4181beb9ee4068e553d9330433d0557fe0ae9510b4ffabb1e3426a1150f2cb12343080126c308f470698c81b15126dab2fbb1c275d7a676b02e912486740c02c0ecf8ee2fd597f74b1e8aa3623f45870504e5d591e34f2e0e9c7aa68f1b6ebd80233f6e345a92ef8c79a7f1cd9ae11ed3635711f90070363cc792a6ed9c89bf3dd0f92c7840a6ad62d7d5a6773a4b01f4dfd1a626b421eba0aed57bb29a8d8c6a7024b2d79a1b6a4a5f6482c70dd069c41b6944060819ba3c79b076813c4a6933bf4a10c7d0f32994374f29ed53895fa092a06cd6020203bda654823d6a16b3e28205f7107c8c2996d904318abbb24e413227eb122e2d2b44b2964fad0b4b0dbcb394b0e6a0ea6d0799c93adfea9f2d75007b61db014b23fdcf3df5711a3b27b780745dac11ecac78ac6a38b0a8c28407a4b0b95f9b420aa92ecf5e511df41514b7089fc5210383f26201d169571c6f451ba627a5936ee860f689e33cc36acc7e7dcd5cefa8037a3d8f1e4a49f50cd0d00942c3e4632f72d97c20c0528471703e58ee7b2205d8571fb7855eb85323fc2734b10105237eef2b37e05d06fa2611ba9895f96228f4099fe7930458b26a73a6322ddb500375e12414a325b2988393b27cf52d88876ff32f3030e9685d0739532447e102d454e545cbec2fbcde0c2919c9e04710333fe8297c3f2e4b93f4d5259b4d1021a267f60e35041f485d985beac7b905b9317fbe47f42b3a1ab2024a1d8485236247e877fc2e0961574a6a6e049f9c209440b6d9a906ffb9d2a9e4044625249776fed0ec68f2ff516f34b55d26e7897a5e89919218c604014d3622d8d8dd7df3b3f4c46976a988b7ba43b3931a0f73870cd5dc2914018ec280dc95b6bac6a719842e157039cd68a5c0777c03cad217376d67bdf6d30e4ab39e1fdedad6349146cdd7bbbe7a5aeb6f1e4d5ec728c3f8d32d80b3d4bc7f6b495dc984e5de9c0d0ef076bc78c75b7619e5b57a06959eefdc9212245d36f3b702c17914b9e08078fdf76795a42734d3a5bed40e7c061084979b64de02830d230be8b151be067131fbda6eb7a589a71354e147178b2fbaa99a261f256cee037cb172881b0ed31a470e33e9c4170b15e167d623c8b37ac241f7127de3ab86d3e849752950630b721d0c9eb85aa139deb376f314014ddcda401919992bb203b073a9dfe4d189dc14d87083d22f8415d4015aa614da117702891c2e1f032172b5ebbb39d19055c79648bc8420ea8e8a09c3d9b02e930e0b3a661312a2d9a666b061c6ce6cd64457150771debe23ed98c0c9d27406d991b725d628c1cbde3fe345b05f36a4672136c4b648a8c4937ff2231b22c58085e4df2c2ea68e00a0d31c6fa0b1b6a1493110bbf186a9858d41c2ac41e94b0b17de81121c87e26a9463ec54cc6607a3a380b321c7f66a410ba5bc8f50ceb735b507407bd9c3570608b9688fa650f58668ea78b9b1741be5cb4bce6c98f3c278bd3661d3ed758dcac4cd9f193a4d543e751f759f71bbb20229c62ceb8c58d071c805b97033444fb5de3b8ab945b5ddb68ab323f9347cd45cc8d5bda1f974225ec666985f293314d01200cbc2946a4b28b2f52ad1db9b8d808bef0f62bf69d927aa0b2895849e8b3aa024223f003e2e162a3543761bb9d19fa458b57a9cbcdb0cbc63e549653184b25cea315e2ee4932d727c73077547d36f785b1bd0b65c07a63c266b3a9d56b2c6d59d416dd00fa906e205e18c256c08c8385f83e3dbe5e704c7d7970d3b1012bdfcece03835652029356ab459ae89f524d6b5c221e37b5252f81011b884b21f888a49f517c05cc66bf5f1c9acac4e24578f889c3973d0d32a95a8a1c8d4cea09f59992f1cea7bca81b658d1c1462b1e59b7a66e17c738cb69570a888054e20b90efd3109890badeb40918e99d79d55805a346c7bee97daba3bb02302e2872f7627251b3826b43e5407ece2e4a92e26b071c3393dcc43d02639df1a9488dfa0596a6393d1dc491930223c8eae88e0d4ca64fcdca25ec1ce1c72e5f33b9308e98b41b73c11233756aa121a21ce598b497f28e5e880bd35a746013366932e25e2a07244e2ce48b49e919668038e99c2e43a30b74454ea010563a6baa19ac8838913a517963d5dc8d72c53dcfa8cb22e4430c621910fe62362bf81de49544286f01840e2cda60e2ac1c244451d5c670fd1cffbd1b4ed235b42269dc906b4d2e27d7494d049946b06b551781e099a4cbb098c8f833c77b25d7fdef0becd90adcd8f40b7a063a7af0bc357d3253ce17dd764ff7acb69aed9bc66dd9c1fe19adf5035aff1d514fb3304534bd110ccf5167b1c486a3808ca50023b8956cb1f3bf93232eb6019b9d47b1411408f988f3d56355dc24470fde35c089717800cfd83257cc96ed53b11225ed07f99d21aaf76bf71058a1d1bd80552c87cf2a13a148b1a0aff5fca71aaa11ca7b12c7e25846050850954cb189d4dab1be785de0d8be567179a231cafe1b5fcdc0395165b491fc1a96656880a241d3340996b3d77101825a4398d319a6c05bb1030c94b6f71699eabccc486240c18b62e21f7c54f89fd3da6997c961b0cbdf07143e29ff44148e861508ec3d814ffc57893180b80fdd0a44f96315e5fd3c59dce2ecabda29bae0c01ae8f1bcf657ecbc252fd43e68f934468f1d304fc06b09dc4407b87474a9532e902740843bf98701cb2a5ed32e1c5015157142124bb67376c1264f42d4b18699673dbdf8933ef0d358424e886d313f97da38d4a16d880a67e01fcb256cc957a7381dc30581b1b745bd73773a9678d6d2f99402e0adc017290e180e22758d267bff0963eae0867935c70acfd6bfd04d90ff00c5053b2dae86bc77e7441061c104fcbb4d8ea723285b7dc052c2b9165be09038237a3337761e2a2733a70322781ffe7aeaab8dc4a7da13206eed479331a9314464f9919251623c02799fa2c275f841af19372d03448b5456d8bd32cd735c357e04c416171aafaa062e4a2f24bda2378b6c94db154ec05438a251d1da8d6da7b2b698fd734332860ced446c79522a8fb3c4831de0fd16f5fc4d7e9ec1925642c525dcf0af5999b07923535830c46bb744422eb5814cf895ff05af63fb3817ccb81c12a0219f2b7c94558c096ab15842d8b4823dd20a81c40fc01d397655439677fc47d785c7a116c6145434df76fbc54334e0a706238e77aaf5c97140db22b0c11e53a3b5afc8acd0a75d419e4580d3a0f9f485987878de061c1612f2e4d06a6e372e36990023e414f58fc8850451de682c564698bf2b43f901cad06b86149c57403c168acb422ab34ec84072a3db744422c1ac4e6bb29b85f5c1fdc3175c42bccfca518885b01998e1cc7685cbc33055a3400bee3ca0f408707367c539f91d718a09219e48c306584ee0343216c3619ea9ea01225d502a44192d4e8dee648036020b7c0f804d781a450e60ee771b00bfd66fa3c8776a0e55cfbc037d89d735b7f21ea85ee066ba6f007d6211b633673d2216628aa5c0d8670296f1c793fd6f6636c34e32361287233051fa414d9496011c1246cd3cf233fdc7ec0bbde412162bfdc993bcc221e2d80d565607dde2f582b60feb680fa2812726b3ea2b7a3823d0780b68165257e3b03c08a4fbbb706f38bd4413b7e8f34f448128e27ff5eecf49fb0449a6d81385702e858d23e80a043a56015843992eb91520b87a42b6bd88ff8793b380e8fce2ebacad8c85949ed2d348f28fe5470bb4833ef64673448c60fb2db57627ce0314433821c47309d5145dc3106e35dfbdd813525b7b02e221f9100ab77040ad968f89b6de6967616a93c2c2aa6d3b84c08346c05f1cd0562c145bce8b94968442bfba43eadd918880670ab446f1d238d8cc6460247b90c4c80047fc2bfa8a893c879549c1518988d746646153396d218c92c5099a220b75c79f15bafb2037a5e3275f677984a5d814d0ae4bd7423e5877960bcd3daac1dbe8a4b369d022f40768fcdc85153c645c0878b405385853160c229011fc005a75953f0b44faacf36261b83fada68af54992a67781631709b0caf82c437b6568618424a993ca780d772f4fccb3806532f334b03333c7ad9cbbfc4a70408ba6b72bea080d69be702765aa9e331b05181071d787900956c39a7edca0da828524083e7aebf33aaec3c60e3ce7894acc1079e21c769b2fb11d01e16d02228164c2203616365e7954c0d5537a325401785e61b53b4c11025d74a9e0d3eb7b0371bdb66865032037e589547d855b7d3cc045a30737339787e8a84a4d9e77dd51fc4c893fa0e4c66d9aa4849e10eb81f24a91d52246d3309b326831f8d2415fe798835485a414ecc83be664c06088139d79644dac2d83e18135f57038f2242bfbb196c8dc62233abdfc2c21c037988bd09f2fba32a63fb125e09ac2382a447f597b250ca7fc8756aef9712cab5a1cb5210b2881766dc811324d4bea14bfcabfcc7df1fe0670fc1651f4ce83b5e500785998ded2606a586a92caa789d775553da56c677268a23cb95b9f6aeea30f1094eabcc067a2f458f766e0087856e0da276eefb921aec4f9f9f76f0d02b639f0355031e91e612e6862743eb55a6df8f7d30b20b881fa966e7975151e7564ba607e4f7922c3c35e656a731a159dc6819e5abab332907f1ac9c1ff68ea870a8e592a33afd3cab1de187b7cc67a7922e75a9e132b4a66e4a23e9e6cc93eacd119a74f64119fcdfda703fd5856445a601063313dcfd986a6f425fb35076016ee52b3d26a2c1a766043fdb2b2bd25f05f5ac926746b641b864a85c17bc5955d7b5557861a9ccfa65a5b0e8c3190c6321359c082ead1429335c29fe479c37447042647966dd4f91445e32e7c09f9fd7fa94e446d56e15b64d74ad7ec98b423eb55184e79770c7ed100628097773eb75134c238739cf55d661bd25148603da273962d7f01eaa81533e3b116f83438397cad5977bbf03bffe87db5780902c05d1691998973fd6261bcc07b7e8584eef8de7250f401c64cfec1708d99331dd87e44765fe8b54720c50911d6fa887e445bd64d933d32c1858302df0ae20cbbac3039fa462bc3bfcbd83d627ed3a5e514905b192caa15852e16e49c52f492447e5bf60bd0215cd7f462b0b930a2ee43e3f6cb0f60327e3d3a6f5020dee4fd80adb17419d658bcba65170e3de0d0555ad5ee8377ed9d4bb4bec322519cadc02550ca41ecf0797076a7040aae8f5266d42141ed7129559232deaabd82c64729342a0c8099f23d2cd2758459e9239fa3a096ad751a05090f952d32f1aa724e9e7a4c0278dd9bff65f06b6d4b6af2032b3b671250953f1fd5c3f0992f7ede1769bd643f97a2372ebf90e1c52124ebf5e284a3ddc95ebccf12dc9611ed44e6a2945a2678001bcedc1c6fd55719bb6bf8f3446e2a2cb047245ad4669b22b85adb9dcff121734e62888eff7d20d6674f3ab7fdad562b9cc5d77c4e61f66691b7eec267fa685e52ffd3efeffef1cdcd3cce57c00545f1871c90ab81a01138a138a09b402339fd59400576f61106323fab2c16ab111113bbea90a8f332204fe6c64733973e80b9ef71db30167664accf82d0092500f55fd83e154d274c796766059c060ba9ee0941d46b269053746539a97ada649f21a253e8eccf7ff0a43bd6d0541a0584165638512b076121b79639c25f300576fd5231499ee3f8d11d9d6cb019e547016c55541bdcd0bfda50bf20feb66e9f1575478fc432a4a356001c1163e1765617f4af6e07a1100c6c7dcfdf9418d192d830e70f99a6e6aa8c02ca31647d7f2feb1e80f4f00e15a9c7079a55a12bbc8fa44edccd62c1fd09e05cf9c91f88f0e47b40d84572740ba21ab5fabfa6ea209a43be1c1ef7d3f4c82749a7115a1d10377ad55985fcb0e698406484ed345f40619ab3feaf4771ac1cc857659e542c35ebd4e60d1ea9b10021b50f17df1e4e6fbcb01659b3b3b2ec406f5fa39df91937968fe601f7e0b7419ecba8cab1ee8ce55d26962f9b583d20b10caf1df06ed0d3a6607e17742870cfa76ec1cdc0fe88e0765b352d722d13305d629b0b41350318edf9f6ec86be15dd0d7c9a0116001cfd1956408a65ab2422213c58802964adcb0035d28bf3378826387ca7ce1b2e874fb90f870f2e2aed99eaecc31d3980021d77d61c829f5b1a017a117a22eb45e01a7ba1170119c0a9cb4b1db109787d92d422e7fbfaead8aca53fec22b4648c0106451d63f3a1d5af5f819e497c90d9a48ff90a79bb631998a619973c24f277e64b5ac198eb79208aaae4f340e4a7bfa95cd3b5ae682750fc193eaf1fb44ebf45805621c7da28e878e02f6e97248473841a65aaf4f5f60eacca3a1b5ec32970632da8824af80d9a786e6ae0a00dfdd5b55f70d0f21774ac1f36fe054bc2a29f877b33565d7139c2691269bfafbf0fb21f3c4f7060d5ae97ca24f7cd9d03278ead70c678840336cf0cc89af31918cc4e65046fdec161e25dbbdc1eea2d7542ab08051e7d45999cdd264d6439a63a7aedc26403464aca907cb94354cc7583ba17cc54029f379809ab630f52f577899fcee2e9c61c44cf0680b5ac3249e4037de03b06b37d4a2d95324d2eb726bc6abce9927030e2d17802b75ae6bf43c62d80d92298f1ef77c5622ddfb2f945101fb7ea96d035642b48f097b71dc00d9fe4d7f336690082a6ac5f406f0946a8db201250d8e1d4ea1f473e21a7ff2f6ceafe5cd75c3c11e4d5a0b797217c0f17f081df69fb37d2d21767f1b8252f04d98ce0ecad1cc100a422e32e837dfab0a53f1f1f70f66fc70099893611e3ed23fa18184ae00642ed58f02a102481e482a1894a9562c19205ccf1985091bcd1dc4d656c4a0ee6c51eb2088efffb45ddb319447947ef004702782cff62527fdc35af55a19668d5083f9e0e81e4f3aa0757f765a2b923c679cc187c3632c8773481a921fd991a11867099b70d6a475a6f84a2216a7c5340e0e148a8c8ff503973d90e9d9b006ebcc76c8eaf142f08bac36b4a21188307da03d4f7e3d2c08b209075d4f4db7f6516992af4912ad79de5a8b9a24cbbaf6e87fac66e2a054d68d45bcb64c06e9239fa2745c1590840bcd5e5154d275a34a29bf7de5bd1f1e79304df4b8139364afa5ef79a9a32517c49fc85d342a1997684c040ce091fee674c0350629171c5ad2fd74736a7f653f6800ae178a21cb6a528e82443b547abf40b4a8511afb89074116f080ae8ccaf8a03a3e80a8ff346849394dfb51b05daf4c9d6f91f5882598f32ce6a1ac42cceeb904fa659fa5694c8682cbc4ebfed320ee14b7dc8e67c308b982140d6fa58eac3be554b3d29943d23ea04e6fbb42508ec384d71b899d6d079efd66779b3da9b0436ff9fa4d5f42b6588be92d94c786b29937cec4f74e909de70425cbb7cbe2aab9c33c9214e408c9960cf7e0eba188ec610605410595151354ba3c6e58fe3ab4ee4c5eecacf87249f136bcd8acab5d0bc5f37b2e8e704f42be803c3ed643b7ab0d25e2772c26662a270a8fd5892e0021fad74d320fe55447a89c2ae78c7c0b676c95e2d42c113d4130e2910f2df17934f2e8025f8cfbc61fd4ba27fe7512d7b96586e56c0115a708722f19eeb6bba1d6ef2c8dc6842bd4576e1f75a2903ce6a13c6f099229c568d61e8cac02aeef12b28f594ee799165350ee8741176a0b0f3618eed20a2127aa99bb03745429725d7aed22b15b4faa28c5900263262463f3e796237a21764a732faa4b7a21b78e81875e3cea52d63efb7077957d3ac823e82381c5d630cc20c9e14fb361b86063fd69fc748de982e6af4d6e9b724c8b54441ff377f3b91aba755e09efb502dcae2050cb25d04e0f9c961af09b4eb59fbef562ce051b826cdcc9ef5e64168e3820adbf4b3e500a4c255a6c8ea97771c34202fab276b063152fb3e241fe8845b4704f1b1b19662d0d8cb7cab541760e51ffd8ba60ecebf4a19e3697972da43e219b828bc6fe5ec40fda22897ae9b79a2cb14d24738fc84717ccb40ad25c2467bd44437b080bd5b8bde1240533a5128b02036b3fb2050503a563ba8f1859946aad20b5f0688157264d2f66d246752538b579716ad610a427309891cec9056b2e6a02deeb7b15bb08779e47a331a2f8462e1388031070db71bebb045efbb9b9f730a41823787975964c567676256cc90cc4c94a818fea6f53f8c138f2ebd67b01939e05f110a07d920b2c4c16bf98396bee19fff8bb2ff05a8d865c412a47f74c55a6a9b36ff088fad4c2768330c6b17625e5a6a0febfe8080a021a2eb5786e51409788fc32669921b25bed90380ca07d7bce2a19e83792f2b10a751e933c2c752d1d26ac63963d6f4bd89f79d9d2ddb3f49b8c83d1c0e726a435b7a4a9f480a3d16639b1a07c0f3ef91bf54cc6cd957195aaafb2e785f44d4bf3938c66efe95c0dccda93fe4667de660f86bf5430540457a00a44337e5ef23d12517e80509856268364da1e30c270f003c4a1d0b2a8454098602dc035a7a16d0cd882db2300448476c4fd8384bb9410970938d93514d6c465479ab4401e67a087d64a977139a8d280f7b4d961a104a8c058876c2f6f17c21b2d0d5c8f4a7e6f5a90c7ac7c501b4c8c8014bae15f8a876df678ec94b7af5001d80662d0a0f40a399dc63f5007406b853ee60c2bcea39099968bc9df4300e3fc9d826f0ad7410faacbb9c5f8c125d948421a5db97052bde0cf2eb4767af9612acc58ce337c5625b957a676dc7d65fe1c6c41a18e9e496ab44b8c901277783842b8b5070f6afe242870eb70cb2cd5571ed7e732caa6d233e18236e23acd6a064fe8b6451f84072058c46c9509509ad0298e17e5067a33c44037681a1ddb09337663de563751cbfd56785a214f10ae4af23ebe07b6ef51af63e5494f9f88fa10ffedc3e5f6a63beda421f5023c301ef0bdcbcd828b31328e7fb1e6ab144952e1998e9c0e9f4d7d5c1c3e870c1ab15a5a2309eab6c87e623ea782d1264c6a5c0c339b6108d894ac2087d72ed53e99ed6f51292b58c4522d2954bc889dbd20e4b1e684ebda9943b25b4d76d79d8590d718aff6429980d1eb5ba07e6a4975152b925d4de216b6b9818d76e95c2cae4a8822e01baf76f05791dea328bdcf61591b9ffe0993e922b239ecf7552e8772320d48095a8c762b9790a0c16b90e6d4c88fefd5ada097af233704c0fc2a24744610805325cfb5f63c7779329a2c3cb3c189d56b13a5848ba365404a8fa230d1fce74f5ca85d00837df48190226ffd99bcb31669dc4373b2048c73c25048188efdda34e49c555bf453f90314125f9976a647728490ee195a9081cd24e65726a241e4ed2b5607b65b87879a16c3fc53cddaf86ae7867ff9938e0de72466738474d090b803f89d8322d8a88bf2e040af7b4277d18510aa1ee2ab4e070d64f2fd2573f2bf0e00cedb5c745d9b569f4114e5d764c8afda18eb94726bdd421c17ca3b3c599ffbca83b439a3c91ed43561fd98d0773aa48f53571357f4565437109ab23a2a089ab360856fb10acd2cd0e55d67252a63b0ca76e7646505c16a9239de08f0c046e2b0445596cfa51387d46cd80822fb129adf49e1a12ab5d8131a82e3168c68ab4911bedfdda4b1749e8dce4f4f3867b3f9e93721c7a72914870ca94cab0eae7a88ffc37ad0b8dacd6388e2adbe33e020809459316a0cc8988d7db6cb839dd0ac0ed3c092f7770cef3b698e27246f700263813f53525d6c353a9996343c0222df4c712660f710bc413e54d41ea8737c091561af4dee0d109883a4f00ccb7310ae823a84e11e07289917e06084fa21c12c8ff4f3a41475b92f52e56c66f8fb11ec6cab0ab03930d14530ca07c789c86b042703ab7d315e014ca268e160a446f08315ac7bda21bcb0ee860ab4489ac8825ceb0ca3419be01c6f501aa0ac3609cdd59a73b16202e0965c16f880fc76063f864157124ef2cb343ae20021ca3e04a734e2f16cc415df2d39079ee2b90b916b91faec83dcf322c2eb97fe24a9f77490188aa3735ad360c2612adabdd60ed1de7739c85cc8a8563755ef2228d0c5e87a68c1e12aca87c390241d15fac5600f27c56089b51a1d95e9e5d5d8e1c248f7892c61a5542f73b3c16a947212e7d999d60de03a40987d8ea202bb98dda18bda6886ed976276b9712ba0aed02011aa65a9842613a5a38b91181e2f3a84bc753d06141d5f216bb5ba2de993848a86db45690e0d2aaa4b6369d94a521e6f22c89bf7f1e5c2d4d0ef5ed70c42b709d2e6eb0d8decfd385592f177c27412a0566c8a22eb37ceb395df981947ef6e0ceba55ca205a6cce394a2ed5021f160172410499345f6560f3a63780290d973b741654205ffc90dacb34aa42ef4201f691f8d0989441a56fbfbc7662125c406ff3e055c53d5a8ec89f250e19fe2722aaaa5f093a93d7c9e923e038b4c259201e808c4f5e848c1a15c22ca682bf6906e0d003ea89ab41f540bbbac758ad6389fb089530093245e0cecf085fda3f9911f4b8bd88e855f615b861b9ea1c32be6e3e8711da0094b31c527aea7555a2a0b0ed92ef542818cdb635d17ffec6e175759857da9aa6754b0e305acca039a3922428ed3a0bbe6e732ec5b4d2312cf6aab60399711921f8391347811de7ec4b87a502c8ef547b2af485365a83a20e9c6bc0b48e1aceb72bb63747c846dab1cf81d7553241909a4a809233da91a038019340b602a732fb3763472ac474925a90af93f731058b172fae7a071ec449765cd4ef9e0b31789ef927da2bd20252f7d298fe07172c78af7838e54bc7bfcecf45a0d27e9982dd888bea45064e119ce719f9f56ce5a878e57fcec76acb87db22490171949a8366a7ca3b0dbf1ae4ca358ea187ab2b3e38c74ce3e4ec858de5e091d4ea784ba66d31d3e31f82502ddcc3a83cd2d78892b65dff7bef4a2054587ec4f5ac14d91cd047f6dfb4209c8a642631b950e4b9694fd161f95ac742641647bc1f55f18292ca0480e11ec83eea226d840597408fa8022c61265791bd91e8687587c9d1908a75f8d335ac23c8bffbc49aeb4b82637f61c3ab898aa2d06bfe52a50a6d126486de6889c283a2a4fdb44b5f201a421d2598cd14dffa0fcb05d85329ceed700586618aeeb1484b6554801801dcd794d2f158fb1ccc9c81bbe75d82ddc5bd9f9f65615c3de1a24f7e262c36a302da56333c00955f0a9956cd28f1fcdb33001572b149c85a7bb3e8dd60d05a6955ad7ee9a2ffd1481886d2a02d4328601aa8a6de94a32ddc497dd614a0480537a1ac932811bd7280ce135504ccb86d7d8b022be01c5fdfa56077461ae172569b3d790cbcc10b2d4db7ca7cb7858c5cea9e3e310d57844c387385451a1577832a9c18210be4758347ec4e5e852e165724b4f7921fd1961aea24a01e75a5ded6d049375f052855b7251161e8963064908551f9bac10a75d2272b7259dbdf55b16e796e8082468f50de2052849633aae2f46e6539074bd1e0518ed06bcc7eed3e260ec68be20eba11a39f546abcbffa3e1b61f08547fcf1f6196427b6601a8d1ef8f486374e53d804a0ceb79464df6c12826e8618a4690be4503c10d1b2afba9a430e4e1ae1650c9e5c0ccf1264a5c73ce1addedadf32e8fcb8aadc8a3f3d00584f69b6da039e0a2c31f8af8764256082763a38d56f312d5e43db1cd570285010c76a79e0748c7b9475b8483b465f9a3d301caf91f79b9d8503623ff2240be41b1037cb752e37ed07526307d102ac866ae734799aa8f8102ef2306866ce1fdd041a484a8a9f64603f36f7f0aa1689a7063c86b4f06c995e8bab63fdd6cc941df6d3f3899fe3f6ee8e7522a054f340102a4aaa222ae0338dfa2b1b77572db732f65ee76c8053423415e5557d3b2d910380e9af50c58f1da4ac83696e9217b409aca30049f9286bdc40228fd599397917f5f6a8c194319e97fbca760aaaf68c9947f6680717130744a7ed26f6836063b177ece140c8979a25ec3dd811637c49a087a2b4d950a8d27ba109e34991afb371c10150690775ec3da43f008c4550fb1ff27a1cca3caa5dc0e3313a09b8202e97f4784b05f5d0706dc5b04b060fc77f1b5d3c8506b13274046146bb607c830b643d6e128873b92f9b3d0cb30c274b5cef89851994cf679da2a2b7e12d52100c2f169dc36a367c01cd815ca7a5b4d4bd110a1278100344b80754e8c1acfe2e69b015b657257836135cddd3bd474a7ff25a6ef968a4dbe43825a2af51ba7a66facc9a74edfac923b6c02cf3e32a702727814a5657768c4001caa602f822b26e55bfe3db90270c3318597ccec081a1f2e80b91b7ccb2bb69cd3e638a3d1666a175b59aeed9fe715b2e255692b7b605fae8bf59b6e7fe2b831983e79b179d4d162e3fe366d3a3e188935845cd4ebd175e7da606bfdb394dc1299fa19216f77b072f155b2214f72ec7aa353eaadb2a0476744b8b2ffcd52fe46a8fae39246a0de6fcb108f216e5d1cb3b4f412f2019309b4486e0a8163e3d394ad5348293561f741be26ddce8ee4d7932076f27972df2685bc616aa4abe4979dd2cbda7b86379964fb107d979c873ed1d5875f856fafd1456d6e2557b86d3a545ac9ea722b59dd7313c1a0acfc0a42b8dd048ed0e6ec31bedc4e1505ead8136ad8c47d8d436407b8e62d698ecc04739f0ce94107d7cc4560db1980056b4aa341432e27349178bff0a75181b725e5231d3558a994c347234ac136b6773ad2e2b06ce9e79daaf673375ac30b63265967af4a13e9b75ca4af962903027b5825cf093e3acdb167e21dcb3787a6f90554431209c093e1702f6ef2558ab8e84c497b433d8cb144df877f78479f8c9ccefe59db98fb57e825e2ada2e55212a5a180299cd0a0d72d260941c9fd5f6afdef48499048a56e2b891d7a7e5ce4c7b9e76dd86c42e631da640f740a1c28950b96118e1377017c24132f23fc70b0346a901d40a211e5aa6e71f0b6be9ac89f2c549e9164b9c67b7f5e847d8d55dcf4f17d695caf566ad45a886f73e1bd22fee23375240f6c19c1bc31dff4f86ac057eafbbe7c31b8ca3d192ec95a83334a3dc1f9fd065ba9015760067c5355777d613a0518abeec720b66821af003eaf0f90a7860b78cde9d7e396b872511f133bb81bc5703ad0aee783ed8f47d210800b7684c0e702d922c355b85f493e57603c6f035553c72acd0ec2b6cf83854ae7103a7f62df59e9064d248f84480b10fc2cf082d5cc03e1dea8c6a6e903a30e6be27ba9ebaeebdaddb94be8832f82b67b91e78c09c325b4e4273a687b0e77ac7950e080bb15ad0b62094025233a1a83837fe02e107ae1de63481ccdd2c044107f25abc38867c00137d6b4834e5ae9c48169924b9fd3b0c3b0108165d6f839eb11e21c3f52a07f85edb1a002c7ecd27461876a39802d92d08bc83f216c7636872110d6fda422887eab71b04fa608078d6976ee1bef5368123c91654eb5b0789dee728aa8bece58de84f683294f6f73a187f0d82f9c740bcb08bc2cdc434d868f14b5a9fbf79eabd3e3cd315787d442157efe8a998568430c2d110337bafbdcbb0eadd383ad8b555da2cfb06ece94770ccdbf47e29f39649522b80194f774703034aa0c9a4676fb7bcc4e51246d91ae56ff8fd4f1aacc185d1363207332ea89e01f1a39a0bca8b248030eb42ef83d024a4ab848b803142ebb3d80fb57d5a4baae4c58096ceeb3995160323b844a50cd52fdfb66a7e9307798f4e2e8a28e6d2816f88b47413fb81c6395b8c605ae72443cfc7fdc0e5c27d82d441188431ef81a378267cb8cb1f0284950d88c5c75421518ac041eb6a0f14ed4d55eda44960116cc1c1b2cd47572861b663fbaaa72a877e718173475b3e9eb2159364018ee3c4c0370ce617212b5f78def0b2217776f347240bdb6476dfdae6fc9b00bd74b203d8c160a1def0ee3dfb9b85fa83848c9a49f597cf570ad1b0be30909a7eb20d26a381d30ab2717d8f7c41a8e34e9c3690bf1a3ca97ded744021369ff099d0df0175d60a5e92449ec3d6a5ab2925abf9cf67989872a0dd248a19a0b01a718a1b48edb235d6a3205821dce1998195a5d514079aef107416cac0a0c9b42ebfd3e1e2f2bf85025c38a137e1541e8d3ea62ecca830b9310edb05d968fb8a127571a0cd866a43987ff91ea33416f78842f626dce9efca508015d8dbe0f81af8069fc9efc1847548fc0b1f946aebeeed60c0515f0487a123cee684369bacd3d479d13e6418eadfaf39c59a34409a92892a2d5bcdcd51ca6708860516384f470f05304b585f1fbb20cecb87711ba8307f4f8c79922d941def705c304d6c5ac61096370f1379020df19d620e9398afa906bebb7f07a0afad1e59d547e8190322fce25dc80b526da12317102c165b979d4eba9a1bedd9fff07e7199e358832e409061352ab236339a1faf47b082824e7a738ebe9435a78b7d445bed43f88d8b8e20097fa98b5afb69e3c5f8da03215033c1fe786d8642e641040e5a030c533663d68dd9bbcea4fb510d9022aa095eb1dd72b44466ba86fac0c97f4e598fa67cce53f6704067561134b201a08815b07079331dd588dedd2088b464b192c0b2019aef66487de657d497a49a92cda41f88267d2a44614724a289e7af8095a5047d91aadaa7c979da8c207247d8d546cb00f3d327c67649ccb864fbc048490e115bfd4c9cbacb4dac689946c9380bd0d61fadfbd16e82ea20f8964e6d57a3edc748704150248f31d3a3554d1569732a33f0525cdeef4a44a1339a7b9229882d28102022c647f6626a9c1aa88a3e8eaf150c4c05bd04fefc8da7ca390303c3d85f2683ee3afbcfce46013da54d9141087acbb0adc44210e8cab5ab5ec192da3cacae29b0bd8ff434c2cac38b06f14a3031dbfd0832b6cd27848dca42237c1720982aa2983b9b2074371ad2f0186a383fe814b2a1e0e35c1112cee50424ebda5f9283df2b5b6be7d6d2599bf0eb7085271377da58cfd311ae86c43f1fce8babce08efa04763833a919c195e8d8741d08e392e659c5841c2e50caf2438a608d25cf44ed1e5a2c0f723888d769b29ee93cd552ee75e66f2c3b9ab6cb4b84f431c84483ac5cade76c9751a48cf28567adba29477602accc38d21899d945d0245c529681acdcd7d279f3dbd37acbff4c08506ebfc352357df939d45fed20d2441741070f158ff70ebcd4b3c5f65d47e6f1086862f6e37ba9b7d8010310039ea3b1de30b1f28f8506f163a11ec48cbf538355097a4411baa4d74af328eca651f16e0ef80615f8f66ba241eed8f4bceafb7951365ce0cf3532b5963e54bc61a05cc0bb0343a58fb0c16289266fb1a40fedb4913c738022147d72b5611f26110a518988a0f4c55fe8a3d49aad78f22301ec3d264209c803626d3b0d762c2aeab750b70bb0082805d3510994cfd2b3b3c812d17894fe126b50a588e1cbd75e69e4439137b0ba1c0a7bd076ffa0307c1c1ac8b97ef7f0de90c91563435e6d8bbfa1bf5c8a57b7a0a19f634452ec7c8d88849e104573416320d058c4c646c3ee08faa09007d0311a72f28b3423741587726316da36b9c1682178bd91a364159506a8595051f2364ab4ac69bc11cf1b43de1807285bf3e6706f45380f3ae7cea046bcac0f7ad5e7f40ee1eda1b3f191614c1e22b81819fa9d29d9034f21f8d946c204ad59f509380a38f51da96b4e138cfec24e2f0dcfd219250642991e2068ae50d8282bed5fffa5bb0770b6d6dabdd6cda5c9f978c00d0765c270ecc4d5ac5103926b4966edac1eab40da0083d4d0407100088e2fe7c3f3be847fcb85328d0fc2e6b22ca9fad7b8e85455f369b708a6e014767e2d611628bc8ef48b3948fc2f8494fcd9cd0661ad7c4f1dffd0d6029874a5af86be25453e7af6c996f8654aaa41045078880186971d7b710da34251b7fcad4b4f5ef84d07088f80acaacfb5025a3a25bbfcd29cf1e2fe3a3861bb1a21d0951438eb12349593f187d44eb7897faabdfc5e0d76556cc3c63b51f5f9ccc9dc5608e24657ad539c1a2c6d601df299295a2f5536d2b28736ef2f332dba934bd6b80ef13e96f05c1628ed518ae3e1de4f652e07a6b035a3a13959cb7ed22d8edee8f0f2d8e14dc96feca2c4ac7ecedf0bb4bbffa6304db10f168afada2c9c77f6e9af15f85a88038ba0e6e49a2909e7185a091b140d7cce291b11569f324bb9a55f93b229b03791b66e5a1dbc015a001700d5d25b3816759be1fb925f84bf223d0d9763448fa328f84e8ba3f4116d3451643ab4ce880e4a34c612abf92375a0ec385d3cd0cb714ea892599ef212b57c5b04a8ccb56403374d8d73ca70e9a0329725d91371cbe2e67cb80a1375b27a43accf337f673cb052fe43aeb44576a092d2acb94f74d632546ef68c0c9dfdd4adb99bf00f31f479f313cd18bd3dcdd92a39f08c0438abc78cfdc23cbce8f569a61c453dadfb60c9797a681bbc2a249beb3e39bfab68137ed5e6ca4b07dfbda20b6637b67a49fc9c929edc1b9cb9a70ef7edea95ee5e288adba6d1894aa4c122b7ae6c789179d316d531ee82512069d64d5545556194e5363df8376aa56ecfeed3e19cf6597bf70db11f9c8fa8a320464bc3e94e44c75d85c076d89c9507ae1592895297c508ad9c7ee668ddb6884f3da8bc54a7aff4ba84393dfe595261dccb772277b1f0ad7946098e991b0142754559805bb3883951eff062d748094978bc11e3b97325c748cead229dabb771a0462ce81d3254a929d51d8b32dffe21ff464ebbcd06da4d0edadd53452a8d29728d060e5158ef2779e0a288e635b32da813e43a86a24a5644a2c000766f7039d0c628874b0af6efaef511228abe8f2f8fd785202fdbdf12d651d6ca3086d80456f0b793474979ebd56204e047a75cbfda8cafdf5098d59d01ea44c3671eae810de80fdb267108024386547a45d238351bcfae8168a07cb8805b7e25c20390edaea05b0b59f5237af56f6552b6a8386254645820c755c77823e7018c43044aa83fbd592018564d07f1756b722ca752d7d188ca0bbd730cb74e69a97fb96f16d3591140a151f1d220164f52e9eaca13007d58e38545dec1633b6abb298ba35b49291ae41bf1101d956ff7222aaf57fc5412d2da96726f29b794324919f80ba60b940b37f108188b0fd4004b41a356a32d79242643c915525842c6155fece82d7dd0b4ef26e13e76362d714626c9f917f7dccb6f916fbf0b837d3d1c286a1376a8d29c160106181c9c32d4f07882c2c0efa5df0bf4efdfeed59fbadf79bf29f56cc9b892f367de02c7d99aaf179e5e0cc210662f2c7d40859f1776258a5e40c8e24808b29e17b646c03902cf8b2ee104b117deaa280114464898c1d1ab4994d80b47dc51f1a4e855e43571297a61833cbd551696307a61539639d08213492f5ccad38b3f0042d00ba764f75866afe9b5488045d06b8a2f622f9c92a717899044cf2b66418c9e17461551f4c2328ee063849e179e91c44a123356926862a444d10bab8a6814a9681405adc009a3175e6159616942097cdc63919f7eb524f1c211b7cc4045d12c3bd892c46b7a335051347b6196ec5e4bd16b7ab2085fc4a0e88569e4e9d12a4070f4c211db701d9950906e49ddc842d0108e6896bc8abcbc4667533ff75892784daf7381133e2f1cb107842c5ca1e8c6d701287cc4adbd7f91170764af22aff99d4dfd5c72cd06323f36412209f62af29a5fe4e51e0b1027c2a27d41b424f12af2f22ff2ea31e3cb8bef72c3460d9716161a2baa193664a8a450a79419dae4b25dab5b5c5c5cb44a535fdbf5bb4091977b455e457c88e92625b0ac2eaa978f32b02fd6b638f864a7b4ed17de4fc8cbb6d63e01414af784082e2375d82873596c9b10be4db495014a4bc2d52632f519419e3d545bc04ceeb3356badb0adb572d3d0c34199728217dbdaff68ad4ffcd12a9dfe72d343f5600c5bdbf10a2770a175707c9144927249f270a9637e963c2a10368d8f2c06523451032420bd747082e421b73fed6cfc497d2a8de890eeb9ebd755c13b1f74b7ec5affee3ae9c4428bafdc0705fb5bbe97d80ea564f2120213f799b3061174d8b2fd6b92db2505398153b468420bb48003935b441185163021a3093230a20b98b300478c21fc68b1338520d86b4ae9b934afc0dc961f723bca285b2e57b2ea403ba65b4a29e38c2761effc88d4a0808825af2166155e7e8237128958f07101172f2243e02f98c0f3b2dc0fe048114dbc880c81b378dd1f824231c6cbfef611791119223bf1ba3f8406450b7f8a85d63b9a784d2251084e4090c46b886a83305ed777c81d4dbcee07debf1f919f2bf9f6636980fdfbf62322c3145c84f11a82b600072fdb04690c2abc86b03cc8c2cb7e35afa979f20a5d3fdde23b64adf3cb4540b2c3bb4399ed7f89b6cbaf5e9d802317435b7e8c573c01b6e53764ee1865647c01c78f2f9ef4816b5c4bd10e6eaf6118bc45f2a008b85247520df10ba5f588ecfb85f6efcb47c0fc1884aa72b065ceef4a1d35d4d0edd4f321befd58e8128674f67d18e6db0fda74dffb5da9e383c1d3f1abc15d88208a0d749c3246e1073c5b060a51f8818cca4041060a110a33a23d643e810b9d1a4f5ef9ebe1b1d2e8601ce2918b2b04d1cec6862e496ce2f743cb8eef820d74f869b12dd0b27d10429d6cf92ed84007f1c1b6fc2c409dd87f0217389b8611f6139e206d8900fb25c9a179e1979f0ff1691861c7ce061a46d811fb4882e39324a33d640e39d121784171011be3c78ff60b3bc003933019e28cd7382b7e2c35c4262d0efafc70f023f1af2c65fc422176fc1b63fc3c1f7b50dcabcdc80ae311b6963dfec70e01f54a1daeea6c62fc8200221ec1607bc869df9f7448def7e5d18e410031c3f638637f88b6e5cbd820e40fd16c9059ec08c40d2066d85276078832cea29171307691f3525e10948b5fdf532a67ddf7384fc6b31bdd71d214973deda53c9c2805101f897f51df11bfc76ca9a2f65d18e24c7ceabd800ec64f9902963e2f50f2e3457458f103d8ab12d18868324301ec35046785ec05058b0df1c9961f9f6cf9790a709c2d3addbd3891a860044c307a4d0f4b210048243122326b40c4cf6b886e05447c0827087a0d1100245b387ad19f1e917884d71051082ffa41c122bfc896fe040d8e5e4380238035e1957d477c518f88446282a0d7106013494973052c686227e9856da61e11b9022866af21dc0bab69728b180b2328c1f39a1e2ec2cb3db987f022d2dd09ad4e1d18e1f3c2d2045218bd4c159e796a9d123900f2588068f88b97f6692a632d8545580c50e90e896c0ac3d0167a5ed5c35fbc26cef4c9bf805f10728779dad0f939c2d0d941f781f7f417d4489257a853ce3ae56c52a79c75cad9a44e39eb94b349ad733e416995c94823dd7308f25959f223fdfc6bf1404f8a6fa491ca58e98c31fa36a77b5de200d3864536ed6cf0f6b1f8887bfb22fb7ad5e3e1c62ede223b6af3ab173a91697642739b73fe30b7b9cd6d723fb9399de3366e3ec7711cfd963dbdf5c3cc3fe7a7a30c3d6898210c7b7eb1d65a646f5ef8dbd3b77f8beccd8bfb6619bb018e03d054b6e9c626ed6b4287aa301eed1fa84635aad1d741864de350e8462a95d6f9b3b3f26b2ff2fcf488e421778e3bcbb66d91f156e9e9b7c4952c7d3acad0238461d32fe7c79a2744fec22151bb915bf37bbbae7b1f71775ff7526b6f313d4264ed97b5a70e461fdfe55c33c2dbb63d27a583d8140fa0711c4733b7514f7627c771ef236eee8beccd0b3fd45b0b79d8de2dfd6b3f7a44eaa0449b7e8f492d8ef1d25d698c0d74f812d2175066cab8a52aaea4dcb3d3e663ef6a5e027634aa514ac3b3afc0c2679ba83b0d4dcc121d1d9cdccb9f9ad53c69242c0284dd5e38c4de3e6e9a8cc94d3ef7d393cf793247ea98bf795a6723ef4b4f7e40ea98f781b0fb6e72daf8887bd6ef7eb2255f5734e168d35daf58b15ce6382e67bc49a9699a866dec628cbb8bf2c859164926651d4b5a44dab07c1284c4419ed9d06cc9933da9120f424279384d9b194142797cc7ec89254b7a664a78866643444533ecdc1328fe618810327a2ddeace5388e33b2c318654fcf91edf80e29adb5b65e6b398ee3aea53a54c78d78ccc1248fe24d98e7803ed0a18ce239511ce63874f6824a29a7691cf79bddb618352d3a0ccf5629be84cd5667c4595b2c2265284b3ceae33b26ed693d319bf8d08712cafea13d94898357d3a485d2a409fd71b08732a1921639eb8951edd91c93e0684f1c9cedd72d468924937cc7acd4bd5a777777cdc791e3ec09934751921c9c614c9a2f04113faa3698716aedc3bbddcda3fb7a774b6f6eab49cfb7d5e2b6da945f8c33954afac9c904bec2488d35c68800fa0da19bbe0ff14b551a821a6b8cb1d618238d35d65863a5956a9aa651aa59cf12d9d6939b7e4e4c9fb3cedd53622a585902164a9ed05d81e39e33e56fe932f709068e2f56e336edb77b57a8d0be42454cc9015d463ab4ee135d49d388b3a8b3aa07c699f91ec55b42dc71105b2b249c10ec62f582b75af152bc27c58338386b8f4eeda94beeff4c19fef95367e270f2ec895f72d7c17008ddf2f411e940f41d21f743e8963b87e2d01c9994dbb66d26d363dad9e0bfbdf47cf08f058829942c0d30fd49eb1260fa2ff4e7b68c12b4c983712f960694def4a6af032a58e8d2c79773dfd9acbed0fe619d39cb3f8a941f4ba900d4ebd4eb97de867add29407f9c2b4f40ea535e7adb67af4b00aa4b72fa1ede2920e5e35c7912d3f7709a94da50b313cd71d0e7c741d95ccda8bbe9f37102bde1386b7ecd9131ac3942525b16caa2b9e3e044a284fbea5397549ca913a5c29c156a51ec0952246785b26887e04e2afdfc10b4d1b5596bedf6790ce6396e44474bc9e2c88c15954a1544a50a1244a552cd38823a8242cd98814aa55654425447543bc86986caad21438610954aa552a9542a9a20b11ba0501ffa11146a095d1f750321353bf52a37500985d4e4938cd4a9e506a854cdbed928d4c7d9f2345426951bff9a8d16d546a15e857ad38d2fa4d9a857b151a38585c6cabfe90b41908666a2c2fca90cc89d4afdc946e5efe9f1ec70989d8cc7327280dfe778202e0fc2e0c0f1fd1ff102f3bd7c91fd819ecbe7f03e99929f97e35d3cf0dfc3f12f1ecca3bcb066a3a283b38dea7cc82dc8c8f1df1f01be4b8eff1e08f82efff2ff405cf8d50beaff43fd112ea07ef5c589fa222c2c09f8c7f1405e1ee63f69a3fe889787f9505f64f770d0437d0ecf77aab381c6c114a39df21155647f8fe38f707998971d4b02bec7f140bec7f1c5b902e2f230dfcf55cac33c8e07027e0e181c5fca1f017e7aae523e47ca17d9b143e1f87f2030ff82e3fb2fce943f02e67bf96ae62ae58b6c97a19df29f9752c31dd9da0d2e42c34b516a50831ad4c009279c7022063188410c9868051f4b85559c09a375fa90b342dfa90e349dc877241479e4334782a44de9b47ead9fe240de4314678553b6691016ea9ec8592c3994280e12ff327de9e90789ae246cfa26afc677d42f7930f88efa9d47e33bea634fc677e0a7ef47ce42f2a409cbdea42bfa120a7d2ab4e953faa2ef3c4ae411528e1c72964654249fd039e73b38e5dc6199320c9d9782a8d62a0511d11309345b0e9bab2344967b2082d495c419ea3c1ee071d86c39143107157a7ee83cce72e22d292489a250490bfaa5d08c4f0f620002235a4821295601088c131c49b2850a82f08a0e547db4fc5a6be5992bfab53a505cd1bf1788feefd079a20b28b68a24c1c20f80203402a00fe8bce87b506cad08218c2aacd822498c2dbce8fb506c452dc2303a62a605269a98426c693328021082623d3a38e2353d2ca61c2267e60b2d85c8a439a7cb24232c927c6294524a3a3d9583f20be9ae294fd96823b4a9250af7338f48995a4c6f8aae989d26cdf6b4329ac8a9ba1eddbd596bac527def1a4375051dc6287bce0f65d8f16388ac200ece24dc106f719feb689946171072cbaf3f0c8933f37d48c240cc8188be3bce95d4733c7a8a4cd452a4b43cce0a72229b568943f941a25164131dea33206769ce126a79c981480301cd962cf2d59c56e63bce0a65cff61c37227bb2c4c759d74a309076e848f67cba5bf415af0083281edd96ce466a1f8b2c6291de4af98a7ea114480eca2bc090ed6fc72ba420c64b41a590428a2871266ebac32025ce3a1a526370a28106d0a3432bb340956d1f644c670030cd230bf9a195f14051e2ac5002ed29db71d6cc59fef49340d115b78f5ce2608f83d307e0a3558e28f22af28201046331a9ad2caaec9885123fd8fe857a4f21891dd385ae7170c250135dae136726cb4b10c1f95f0c061ae311d11d671ae15ea9c72ae5412c0c231e8bd9f1b1955927ce0af3ccce9c15bde53d4052c59e6f79bcc5bde6db9ef976be3df2d9f3ed8fb358f67c7bd463833ccfa040b13d06051d5a99954deacd441e19b85bca1e1a29803d65a24bca9e2967b0e7bff857589c9172522bcbb23833a7f61367a6d33c9b3a28cecc3cdbf3694a2d629dc616aa9e3de57bcda65f03d3f4c17d449f3a9fe86231b949ce7a614feab3276592e4e09cb1849e1f8312fd53763f68d5acbdd66aaa9e18e0d8d2f5eb47e99c938648cf0ff39ef537eadaabe892d6ed2eaa94af7dd589afe6cfaf1241b28af247d8cde9ea0064da5b55e661ae3c0e56270e4e2020ef717089833e0e3a8d70c2f62c9aadecab09be00a802edf99567b6e2f481f679771b4facd93abdca6a4bf9a567daf8de9827fa7e3bfcfed7fc354d0767bdb0b5e7a18720429cd57dca67fcda4b5895459700b6f612c75b3de64ad374b6f698eb6e64f783e652cd262d6b6d734a7713b7d69fe211f195f63d66ab075f69af45285b7bd31746a0d22784839a0e3bf0e0a0f6315be89bd29e6ad53fe82cbaefd3384bc6e6eae8ea6eb82c4d59d3f7376b2f0f3b38a8c5211dc37e9de0eede43104d9b1f444a1fa44b77e9d2a5bbcbe7c15d4ae9ee2edd5d87f9c9b8bb0b340f417a70a7db533b62118529fc0b50e6182db402b07cec79dac4f0035d1fd34c3b9bac5357bb9a6ddd396f4b941fb7bbd9b8ee067737b9bb79f9da88ece1d1e0a097e427a3472ca99432462963e4c141ea0eee1e1ca427d82107203a44d78f26bafef881aeff2308ba76373eb75cb9ac753f6cf74306ff21027de77765e723e5ebee8d4189f69212f07c8f11d25e4c155a7efdea44e4a1a50e99b376e8fb89055b9f6a95c9b4ec47cf74d06c061eedf938864887604c1364d115add82620196c1350fca60908951467e6d38e7e8da9426b5f41771b45369c90224a15c599d49083db4691e491d222b5850d27a4aa4e0de995a1ac5dd7dc4d408e4a4a0dcd185ac9490ded29e472e41246e49112922e2e509ca5a59420c69e4db8c9fd08491edc1451c7fcc91141097bbed0e77edef41367664b9d2e46a0519ca92eb138336b5db151b4e7571bb13833b91faffb8933b37414674c40dbe7674f196989ba1839385d8e5ca038388391961fba18814717099bf0900eeff66a6cbb7b2f0ed26f09416fd9aa9824e850ef3b9f20c384d63432200d28d4847e26b42a25b3133324c30491ac07094d9344cc508c508c904ca6498226899b24a721dd9ea50c0eee879452aa596f8b33d265b38ddd8f106f2a370e1ed0e0666909eb061ddc2f0e9a36a6b966bf68d3258d9aa6bd6fed0b1d80f7f42800769d8fb5eb45df21ff4ed5d4bb06d07daa5255c63a4bf5cb75260a191b83121de6fa528811c2d227addaf49b2d6e25f952ca31b22ad49e07ff1e1c0ca26941dce5fbbf0ffe3c04b93434345f7883f4103b1b6e6c77e7c15b7a6adfeb1707a7fc644007290f7478dd053a8c453c047156f8d2434d098760e4e5058b2e94b0e73dfa624aa9851938d0617c6964447de49419b90339d0942525cda42407a29247f224d51938d04392479b81031ddea16dbb1ae6d7307fbf6b33cc88f4f6439cb9d2734caac1db31433ad43a9b1822bd3d9634baa4a51fe2cc49ee24688963b0d01195345b75b6341c311c4ae0d8f771c45acc900e557e62e7c38b11d2e10da17de5c963915f12ed4f5f1fab78a91cfbc624414f70dfd46b5e7d1818987d5fc573f9ccd5d53ed7cc73f1a43c574f123a8491d51dc0c8f69d3050a24bbed635407bd46b5d03ea9f3e98a2b9ba8ff2608ce6ea7e8542ef25b4df2872f0ea982b74f862f4f272145df9efbf84115df8efbf24cd5e8c72c217a37d1fe6751fe668b6b44ca57fca7254a6d038729ef8cb4bb843a66ad1a91d3bde82f999abfb37eb14cc4f4bcc1274a8653ffb964c29ab1b427e8368e6aa599b37e94dc9b9d0dd482fe569ca54e79a92b553b67872d2f418773155686dba21cedc20bac1841b4237869ca56f64b1ef63eda5a496724ed76c1220c835fb5a54378a5e8ae2ccbdf1e486d1ecbe1b4537bab8e1c58bf6c131423a74cd72cc90c638727018f1d62900bbb543b6638603c7d339cf2aa526a595f24ab949c94989a5cc52622ea60a6d7aa9b917347b370ee76edb272fbe76c866cb357377cdf6dd21dbd40a4d03e7dd30dfe582c8e3c5c835732171f1445717ba60b0ef639347c3098d201a400ede7f31923c68501175dcbf34aad8f7c39728ec2b03d200026f0099bc97efe4879df46cecaea30124bd1a4071e64e60db488a33f781bc4dbf9523f995b2178477010de6b3ef6bd9bdb2adb5e9d2dd609a1d638c31c6f8660d638c4da70c807d1f260c183176c8a407f32446093a54f9d9f7e9c63da4d0214c114c91e4e144380b8ab34ad145ffbe0bb2e8fa7d1fe7eea6cbd294a7ce3425d753d650a52fc957f999add357fafb2a53a800a91061dfc7a71c93041d23741fe3697a1c47441e5a47eab83860ce2afd7d1c38d145431c1ed8d7943d25d3aaa5b8e7f0964120982267bdb0efc318c11c398bfbfb30483049d125ff3e4c14676dfbbe0bb3e85aedfb58467733234b55f6953c6964ca926b4bd66a70f871ee62aa28bde9a3c1bb2979d88883f7a98725ce71f0bed6913cb01251c75de2c8be32784d8d86c1c1ed3e0e57e81086c685a238736dec1880e2cc951feea0b01dee90edfb128b3337bc51b4ef53af941367eed3979b7ee104b6098838733fc439fb7ef672d868f06e8833f7a977e3e07daeb3e1be207cc82dbf1fe2cc7d1f323bc9e973a07f273dc1143978bf879b48a0618c1cbc2f3f98270ededfbe301eedfb331869ff10a668dfbf21bab8bf4fc3fd1b676d7f7fc48d3f7ef1c619f933cc0250058ed8445f07291de84c438f99da010f3bc88f3a584120fd438d4597cca60fc45b32e4e0ac173695210665cf43fccac030bb9b1f75666de33eff6afc64d046367d7f164ba4a51468ff68e831830e66ab25aee8dfdb12d43283891c80501c96d0a10c3b8716d0cf01880e3bf0e02cff7cc42d9f7e0f419c2544fe1067694f5f0822301c676971fb65f12f07a17da97b756c8ce980383325953f0419d24a914664cc5979a643b4820719074457ad1b0697a9c27ef834ab2a8371c47966aa40fb87d148ab931af53c81fdbd9613f198c3fc1b20f37598cfc3fc1ee60b99794f260cc1484d6bcff93d94d05674d5ba539e99ec192ee33afbcd7bbac76d39b738339f8502ed1f38c7c3597643fb5a6bff7641d606cdd61704ddb873624f6f3f87d9423dcd0be0eabd6d5556dbfb61cdb6f65123882d556cda8fa607e00d3e0a5512ad8218ca049689773d3875356c1b7f2823a84e0a94cebe8f522282a84c3d7b5146f6fd1f44a84658e7ea4457358a333e2a26ded274544ac456ed0206554c1553c5362d8675f24ffee1f24f74a172e20c4fa7c45ba825be2222b65049c0f085ff2b2b2929bb83a532f54e21a892a967f36c3359af06a6edf7989bec7c6c9b823828a1c3ec8394c3883c72940f05908d32947cd424b23a2922987d10595d13ffc940b3c5925fc6c7e8d24a4a4a3d7968b6543167c91f4b02f4ab7c03522fe3eb808c4fbdcad7012880c8f8d47740e5f5c757e90bb58c0f0789195efa73e42bf5f7cb912f8dead91d2c829d141d0c67ca20f2e8c6883aee57a3582222b2f24f04a3481e1d2ceab83fc6be1f0a208639cae7e2f2f202038303478e1c2088f10ae3150ae5835ae2e0d52819107fa53e546cae6e12fd3d5c7f18cf409fccc45afbb8b3b14a7c365b95c857dc8779c926daf7519e9e2bfba74ff1f06cb66a9d7d78d67d78f6e1d937a391c33b3ace92396be20f63178c5f3086c118470e6e9b1c127785edef7363441e1d4cea88125d38e4b6b02f97857d9f4b8aaeed2b14078faa5107933c6a186214b16fca7535d29c519cb97972dfbdaa9c120c9573ea893397fbcdb3b139558c6bf98933b71a6dde35e2644fa28b232aca39e79c73ce39e79c739dcd66b3d94cabb846133947a69273ce6cd526222b4699b3f21311cc39aa5855eda874543195acc3e9723a2333b20c4b3cfb4eafc423637f14e36018c6c139d6d2275d4e87d3c172ceb556ad866dcffc937f3a5807ab19cf6aad5d512c6118acc330a1e995781cbcb4d4c16ebcf7b9bcc0e0b8f1dee7f20283231b61b5a30c9b6135af22a933238e660bcf32cc59f58908cef0d1be3cceba481cc43544a0e9db0ff16cd3cf023ed80ff3cc1cbc2a9967a3d271f0aa7656a2f6586a31232523259c126c7eec8a3a236b338f833723a191553207efd3e86c543af6314b8e11d2f663a78a59cf28a8d63ac338ac61dbf43b588c431d4c15eb60aa58d4f0ac87a37266ab049babfbf76aad52c1503925182aa70443fdcc8b31468d00958302416ce599cc33d412fb3e5767ce927273db6bd95ba81cec826130c681710e8c418c5718bb80f1d71d3978bfb35e87345b5d112a474b0a2a0a12c261091d6258ad48d5a842a94735cabeaf2ac14ab012ac042bc1e6a7611885c5928e909cf5dee7f2028323c7e6d1df366fdbbe6d73d9b6976d83d9361cdb9663db364f8bcdddd5c0b4f63da6d60920496b79087b11c1abe5d8c2f16b64612307efc77f4db56fd70455d43d8933f7f1d06ce599afbc88ac188b8c9cd57111c13bb4efb77a74d8c1f6fdce88b3422138b01c67592f37f1325076e2e0b5916d74365d9183b743e2e09dd51cc13732f54a1b97600e5e266ef694bfb5a7cec2bb856773e2d90c825a3cdbf769977f8088f142877956b4efd77bb556a9fe41b01ad5d96c7541de05ed3bdbf7f32c23c93c250fecfb32b64ab0583222b6304c87e8e2b6169640b0ef779d8dd61539cb9f7446cef27dbb235fddd7baa37db5ee287736da3cbad9f6350fc78ed63eececcfcf76480edeb79e909add2539b84557dcadf8da41a2a4866d6f389440875d9320bb6350a2430cdb17d51da18ca062ce6ad25d4d7bad6d9e1673f06a426aeeab9c85ff6e7ff38732fbbe2a365bf7aa62fb7e35ba576b95ea1f04e7fdfc33f3cfbedf0d75419d90b3aacd60e9abdd77e3cce7f202832347770366dbfd88bbd6ede7def087a89c7d9f85db1ec5c459610986b90d15bb8fcaf196b4e23e4ae73e4a761f35bb8f42721fa5c459f18aa425fb3eaac759e0be8f5ae2ac788515a2ecfb281f67d97d1ff5e32dfbba5f82e9bf5fca992d1c28fcf52783d8acc1be5fa24bf6fd52a5c1be5fe299c1be5feab1b746ecba10241079008705444820edf0eee8811d220fe8ec14d1113858445982042c5f464904cb2182c9b0d8c216f611195f88e8920f933847c4167effcb01b9b3bd0421d83e239cb1c3bbefd6eea67d72270849bdf085ed8f3dcec42b75c43d6b9d370efacf5a27dde97cc0c499207c07e15bd6ce87063e9838e342fa34850ee58ed6d9c454a1250eecb5ce87cce97c1071d0659c4e4b3e6aa05fa24bf2b841ea882eedfd65c71918911b244c8e976d84cdf95fc9e306a9637a4424ec06f96134c2a681de21ba244e9c892eda22c20304220f794402220f0dc40544170754f38b1b902d971ae04e34525bca57e7438838e3499b56eda95629a531ce9492c0f1259431dbf6b1f4b1edfb31437a3e96b4d65a6badf47e1907ad1cd1f563aaa0630eaec1e6cabe85cd966682b8b257880448414a8aae1a5e6d8908226dfb5a6cb652be9427e2cabe4d8122b653966cfbf70b35156cfb316556bd142471c67e0c15b413263d4882cc69a40dcd958fb3b6b76f99388b7bfb5627b23430ac1291a54171d09e3a0d145ddeb6af3971567efb5a90b3f0dbd78434263fdeda810868dbd77abc757d8038683f0707ed574f0724ded273a524baea6b383a27ced83f7957036368b6ec6b509c25b522c734c7086959931cbc7be588e676508c900e35d8b63dbc06a6ebf79831433ab4311b7edf5f39a2e74ef1b4dd7d9ba78ab142d70f553471a6e295235ae548fd7ae09bbd7df5c21a1fdebe8f7fa2ebbe7d1b8b2eeeade9bb28b8977d3f0d1467eccff8d175560fbff68290a62c0b42769e8d09a9d9b222d524d86cd1d064dbb7218a83f6318bcc4e9c15dad895357b4b0e21c87eb69fed67fb7989fdccc459f10a3164db7efe7196cbb69f9b186dfb192807794b7bd9b7b12636e593014f45ead9f66d8ffd2d8a6ddf6a31d8b622d5a4e8b23a71c6befd7a85c8b22588a07d6b91b6fd6ccc41bb021d6659964deb3b4880023d44d716a1b0c5b6cf836f4e6682e00bfda778bab4cf80c823030f883cb498d421bab6b75f8877fd305ab1ed0389aefa427e8833f6b5200edad76292071051877d6b3fd448b0ad0cb6261ad554a338633d18ece37085debc14599cb16196d9d8f827ced80fa50c6d6cdb972a4171c6c694d9348a33b6cae28c75fbf66fbc95777c65dfde2fcb1cb47fa4e58759b6ad8c19e7aaa2300ad5abb48c019e4af696b24261b0637d81e602cb73936cad7a306e2dd85af5204d8b5eee09241b6716ec57dd6e05fb45d5e2addb527262d3bc4a9b665bab2025052714a07672aa898d55f2f4e26c69958c13ec1932559e1e5e39c2b25bd5e6e43899549ff3b6bff6e516fb41ceb6426492cec62d4bec07696ae29d354890aa799006f416b5a1c48dd88fa0e5ca3893f244b06554dfa2fee2fa0bc14eb56417235b4755fc08be800026091c393b8707769c32534fefe9cd953c9aab235e542ee0a8728c1131eaaf01a74c11334400204f4fced0b15d5bb4a727040c06fbc0ae11c511291c91c2097c240f27c25971fb14b19616f7f207fd657258de9e026cfb8dc774cc992b7f4a6fd6b6971efd1829e8d073a4f6d4bb19983b14620f9942baeb5e4051839fbdd5abc5a12d3f1df345115582fcf81223a4e39511a815ca20bd2d57b64c89ad1ce6aa4697e9e5c73dad11044d3f763ea24cac5ffab6affbc268f4118c5ddfe4611923a4c39acec7b6e7074ea1e3ac391287b6e9bb0f85c4a1eb5111d0f741cada7dfd1a232af74264522844266df76e8d99e6de9f7b1f5cc6a4ce97327dbafbe8e53e7a230e22d0f3f10f261ac757f51dc7c1fa3fea4f21664bc67c55bf26c9180e4388edfa3532dce852d952d6596505779d15c4f26e318bac0b44903e20b27eb8a1407488aefa51fa34b9576b950ec11db5f499abb9a23e93bac6d0aa2be81f9cb5835f20b22210419a0407f116fe5c89d75a2b104d9369f9d8e6ce26872337baa4a5fab4f3d1c30d41e20cfd0840d9b40211a44f25d0cecececc68473a991268caa06aa7e6736a4951ac66b5298bcd9dd894d1c79e04f2157d9f09c99eb81bf118a53f9570370ab75d37b21fcba4af4927461228c8c8c8e8a8490c4e28943833809e9efaf2a79201c07864a1e53bd01011509dcf929ffc1a5d511239483d870dc047df9080d892404788e0f59d4d7d451f560335f878f065861c37a52f4a0b40290d94da505a03a53e28bda1b447a69e5f993a8b1620536f5156b65f69e8aaa421d7ecdde9b5d864bf69f9971872a0437d638003d870030e3faac43564896f0c70001b6ec0e1477783802a7ffaf09b4c298f00bc2013e3c20acc21238ea0cd813c014b19a38c51c628a324c209633701c78a39e7c40902ce0c361c241c0e131847043847745818092a695b3095c2d0f8092929249c888ce8c14ed12065c4132a4694404646753628144ac60c1f2c5490831946249105a222bca05162024ba6a2a54666616161a961c3065111447853f8b2e779dee7c2041722825e4c3e80c10215385494e4c8d2232262b6530eca951d8988f0806a472218183027ec544c96b0b8812593183a1bbd58ec2489128b3196b000a602370111123d4448384154c4124445f0101521051658e8212a82074448e8cc1bd4197f86382baca937ce8adb89f073430e3aecd043d27ed9f3851cedf93f384bd6e460cf8fadea24a469d973ce7a024a65ba3eaef529dd4e730f5fcd8f3f44005437eb4ebcc521715184341f8d89a735f13420cd89679b582e68b62c521294a3274644566888c586fa2ebf0a04f6e8e1e0045b7ad0105dfe73be4d647149b81e271467e64b2ee80b2ea8c583893cc0171772cc7f2b41df2198d2363b08e471f167d2a33833c36882c59939617146fb4c4157e23bdb9bb55ac52b4734fe280387b7dd49798ee36ad5f0cd3143dafeed6c788d67676e96677b8d67b610109d880458f9edb51d67d1df5e9b4597f6dbc7c9b3b79dbdfdcd6cad7c1a13e26afb8d8bbdbd06656f56eced65578336e469447166fb182ae8fb3a30c02e883ca288ae0ce80d45e411e4ac9290b754bfbdfd992d2d67aea24b479769b668fc96b3f212b66d1f37aefbed2d923c9dfc749aa7133d9deae9a49d4ef674baa753c7ed44577765ced24e273f9de6e9444fa77a3a69a7933d9deee9646b02a0e3156230d92a394648770faa3c1c28b847e25faac7268fc619edf1dcda4bed6bd4a1bd96335b2a2db6b55ff1e2d452ba9b5396dd0f9a556a96a1e519d966558e40d82e7170e338ebe3e066992cf1b14c641079d8a3a84389ed89aece4e8106bb686f9a0e34bd35ed65b457cd9636e4a3e5ccd5f69288a883c892385ad18a8c4998a7af279538a8e1ed6f6ec034ba1be95353adabd69ad6b6fba1e1abd16069a961e3c67b262eee92b76d1afa573c9c87a2f4d9cbc0dda6c7da93dbe8891194a12a22b89582a412bb244ba552a9e4034b2aa1429a7223b3aab3c91276e462609fb93a72960c0e8a11593344b086d3d7c8d246f61b797ea65eae5fd65cb4b3f29b4ca68fa65429256177c6175e2de30bb5ea51dfb43c342a9d8da98ac8b25e5823077d2ecc6788ac6bc4dd299eec914a5a3c993357dbd7b8469860262fe4122367491944707bbc7de9c8eed8b8b941ddd81d1b8b4037a613be992dfb635d10a4edd2638c31c618638c31c618c7ac0e4a7b62a441d122f28821862d86888a4afa64c38dedf9b9719675810d916595582099637d2c4f4b7753c30639b8bd1db2420e6e7fea6cb0e5b148ec8e9db5d4b071e3bdcfa505e31a18dbc0f806c68fb187f187b10bc65ce73b46486b4d1ccc5e58b3f3d7c07406b706e4e0f6694e1cdc5ef3d9dbc708e9528967972c4f5c6da5a885ee4215c3f87885924c0297de46115bda50e9e9974aaf4374a176e9de40f74025c51f616fda90157bfb429bc5de72be20c84f135da7cff9659ca53fbf2ae78fd1a5f2f96564dd1c074f4739ceba3a0e5e10b4785ad13541ce5f10524bb23d9ad1de54f4eb772163afb46384b426610e6e20e6366e2be13f793627ce6caf3d8be3e0f62d9d4dc9eef86a7b93c964b23b7b7bd3cbcec6b463b7b7aaff0f6976fe38f3b37436d9f26c7f4f5f78b5eadff298be9066e3d8b13c3898d0a1848532f0386bdbdb4b25d115f7f6d288b7e26bd3d9dbb6bd36145d2abfbd85591c6fd998b684d8b23c1f5a23fac34deb22d4c2d8dbc7f8dbab78121667b6bf216dcc847ffb42a9646f9ffab6f006fed317aa4a5fa8bf20e4f69a676fff630a6c8fae8eafb6dfe40dafcedefee6cc963df2d576ba397bb3470e6e92676f8fc310742843d0dede1e499cc8ba26b83a252d7b5a4edfd1deb6cd1e5d9d6b029b54d226ec0d0912c218bfa9b3c15e672380241dcab0b7c7dedc5a13201f441e1716756cbfdd22f6f6a10684bdbde6a36daffd4457f7dbc7e83a3d7ed059a5c72fe32cd3e3a7892efdf831cb877a6399833f4696854104f1ab664bc25e4696e571707bfc2d5e0e73b53de6c10016069175438c73dbb6d377f3723a7da6d2f783839b1071667b9337c4c1ed4b9d0daed937f35eadc34f894021cdf6344497e937fddbf6522ae1c7da843ddaddd8c8f2f3f432fd72c52e59c3f8255b8cb94eeba68cb4c46280ad51edb9e7b68dfbee0bc1bd6ddbc7d90af5de389547c35bf1b80e07edf1773faf1cd1323602bcfc186f97c35ba9f4a93c9af882f69ca77538687f1da43f40a0eb6f1f2c11d8f963c19f01e6e67e6ecefef6f9704dce0021a4566ac50fd32b47f449e581b0c15f833ca56c56db2206c58b50331ca066b375429a857adb94bef3b6536763ffde6ff2e8ec8a9acd56aaa7e75e2eb524d5536fd7a37351b3d992afda4d1f940cb5d3014d9fc96436994413e8476867cc4d2773683ed9f5537e32e6744a49c69c2963aec5c1eeb1f7d29d5eb77c4dfdecfa43a3498d77c2d24a39f94901ed5adf8657e33bba67f160f01dddd7f0687c47f7343c19dfd1fd1cf2168dbfdfe2455f757f3dd48e83f56978281d5fd54ff5a496a47c524a4254988235414541f5a474504c524a5040bb3e8a47e56fc6a825a81f94935ddfd4d530f7fd940e4e0a96ca491949c54a1d0ebeefa3a2181d212575a7a453941352cf1e124211a18a504f54bc16efc5418efbdcd9dcefa5083a7d2c577f2c5716a453a9007b2982bae7babfb7eb2ee7855204050d4d9ee904d9a2f1a19038eba2944461d7c7324a9af624ba50df6ea166beaa7fb34ea9a6cfcb6e4dd85cd59fa8994fd80e51b348bf50f5462a4cdefa938bd8d2e18b5de31015c21905351b804c87d30735bbd165fafa94c759f9ebe9ebd31e67a57c7dba84fa5026ced25fbf2e7196cad7af3ea9df31423e4afb841467eac770119e902693f9135d327e065e51a968a8542c2a558b4a5543a5b2a152dd50a954aa1932a64f4c157a32f989aeb8ab578d36af3e2979b548c5ab9d57535e4579f527ced4d761b6aa0fe2101854d429e80fe571b0fec9a3291eed71bac4a3ba7ab183a83b9c3e93c929af1cd12cdacbcd5283b6b52fd5e3607ddfa71d1f0b697fdf1a1945ed42a93920e9102584121a22e2b66b512918f7dda760b38512f255fd8a1282edfa28231414d491b3c216948eb3c2948c8817edfa353c21edfa1535dbf55340934767561f35432141f1a0944c9f1d4a23403b94322a0ced3b4f4927a45314140c85e32cc7c1b7f629206785a91e7fe2456ee4502412ddd9f51d96da49c99c55fafaa999b3b6af9f4292e229792d2f1ed8d9e08f454309edfadcc7a2a186ba2f94a2094aa852c148b35f284513cd5a4d8a264d9ca47a6aaa67d7fb4d1f79742404f8822a84b3babfb08c84bf7ecc183ad4bef4614cd27eeb5e6b61ade4dde0607d4c450e4cb03b2d0eed2e871ad9763fb88cb99b7abdbb6304372aaf1cd1aa1db76b7f42d9aed562a6abd0444a9fb889d8afb626a1f1d60b655cd841d4e9f3c2ae3f7f9ca5bdfd4ae3ebcfa0d962f9daf2b5c6d7b749d1e5edfa35bc16af66aeeab37834e09cf6e5b65fa8c3d65ee5084de3599ec6b37cb517ab743732b29c917d25531ab9b264ad65dbaed562bad097c59b3f73559f86378156bee9444f3c7daad57ea68fb76416b0d9a4fe04aa3f83ea4fa1fa9368683e7156bc02c9c8594742ac7c7d095ba92f73e60d767d19a336d8351514c3931ab17d3f46487b5006ca4df24f45aa48508c8cb498cb2eff744778ce792f878431c630ccbd4f2e511bb5bc351ab5cf3bee1bdb94ee90caa8118ab3e9cb2299145d72877368d3196553faf3c85b1c92afee530e69266d4a4ddb3cda7797728c90aedf75356c2a19a50a4423f5acd1bedbd419616b8fe6eada0f4728615cc2b6158c7dad0e1fd6ecae4993cdc489e87a10c1db99a083a9a08325e9605174b0d87d21aa07b6a86b0225ff93226759cec3380e06a4efa814ec95b649cd3a666604000000004315402030140e878462d15014e6812ac90714000d8daa5c5c469609c3248751187288196588000808000800102409080e9995a744ff801a373b7810f827bd25fb8357817e02dd0784a313fa05dff40dd6124e52d61d983ce41f0beef71788f58beb32a154ffa9224be2a6194a94396916dc1bbe95d6cc86e1f6a1a44671b5716bbb69478a01e66a753d8e169a3b225c668a8ac7f3913cc034e6257b6ac247ca34e34dcd36f3820ca9d98bf51c19be76d40281a2bd2389c2c4cca19e34a4634f72a47f49034d2742126e22179112c9c67522b2781179c5299162cb73bb41b81195962a055ab46e912af1411aee1b7e6718937f58a69aa091d285f573c4fae850933ac19eb9611ca4651c4b762753f4cbaa9842a6ac65bc27bb5f86f6cb823dfa935d429e876a4ce5b399fc5af6cbf6718e972ac6437ce54e84e9a61bbad07b657985c3b00c34dd14b8c6e0c3dafd0a47e18cad285dd1b065f2306ce12007d148d8949b48947bcf4aa063ada6ba3565c11a6b0ea84089eea453988943ab8d6ae2107b2ca1b7f0a8e58c0b449c2b81c2960b86de2b4ea9522148e4e7afd04090b8e4f2d3ba31638fad5c6c2f1aeddcc658aefae832a3567c5e09f521f127209a432eb338ca35cd41336bc6e4d90c17a34a73adddd3f2e021c59953bcfd178125f5ad90a9e5871fe006bfcfdc3bfc80dd6731a37f9f36cd323099ccaa80dacaeb33505a5fbf52ed5976ba00bf0a477a13666a0c85efc1858c69d50cdb12f85ea60d06de1a4feb5972b8ba7e5968fef9953f3335a6d9d71d8d5b998adb07a67c46c4ebd702bc0842ed6c611c6a7af89c60779f804658ef8818831cfbfb47b426428d51b4bbf5685a31e98be5cfbf4c716b57360fdadf4340b164021e5436341d5b962111863b0390ee218a0ffe9cf0c4e2ee38b5658fccd52a8a395c68ce8146c0d2091b8eb75257af15de6709c5eadce0c3fc317c485defddfb0cba40c1263a5806da321a2f8167ea87f8371d22c7e8df45e6ebd55b2bea0a2c4961dac636495b906bdbf6245d0894142a4afabb94b4e3949433e841b5c8373a62699a8fb57c93cbd8d7c2e069490b087f0a9464614ce4eaf2880ddbe0746536f00afc17fd9211fbc4f56f22884266b5284cd4773f82e3e1c1311fbd090c133daf3c4ca90465be2b3a88495f68943358c7bd5d33c09811a9ed05b81b4a06ce480d767f19682e91cdede684fd9b26a8a69a62a1713350c013d7f97142a9ec41c5cd9e6b162dca3a83ceae18bb92eda6dbd23a5b81c4ac51edced1a5db562d4b7d76724e299ec7d02857036c1ee686f8b9571d44baec9ab0bb7c555cdba0ce2f798bde3a8d3f18d7d69929785ce1b63157273e2b6cea16ab7f975fe36e6c9a107c4d3a75b956510467a84a7d6b42dff057ab4738f2b39e615f712dd597f58c90c6f51329b075883d9963cf05cc5cb1dd8eaffdec99a32a72a2ccbfc260bca0792e26dab362b7b282d5dd68086df67c3ba16e8d96f26276375f9c3412546bfca3443be0ba4f0cc7d14127e02a0b82223281819dcb7b6239e98886636756c010c6a75ce519d9b38d5f3e1f2d006f561bbc3e76a800e9ac46695a3913c27a3d0d04f05e4c2b3b9149bcc56a1536025e73415c251c4ab4e32a16450a4060387e12503c47049fe30fc70ab9add4bcfb6924c0fad2b2640e2bb9ce4b4cc372180d75025722afdbf0c53400916b09cae62973e9f3f8ff47ecfaee3e14bd4457364c4438a817a2d2149fda2f1528d4c19da491494d5581e10931295a607a4d11011344384fcd0717e607be406ffc39c6553d40290e1d42f4b337930061f46843580fc5bd2f9ffd3868cdc822fd6f96735b04eb6f6edc50dc3d99775a207e44a99d25718907b8f7bfe52e2cfb96da1de82657da3b4c94ea22a0aaaf9ab64c2d604a1dbb17d64629eb844021ec344a209217059592530945da092591552c01f2c90070f44d1ae6bb5a1c76ad2282b25205899a130445482e04544b270412b5a64aca4076b7c7e3f94de4c536266285cfa2b2508d877e00d3bcc6f6f4d1458d6de66b9c89016aa73a725b1458a006613e210ba8fcfb9d7534999f4ab662558d7a5aa4fc12412f84cf8f1a3d9798c33e6936bb2dba544a7c4b847ba9dcbdf4ba1b1621ed085a308fa168b344fa183bac30cf8778552c8633ab98e220744ee78c237fa91b191ab6cd4290acf45ecf88702dfbb7ce27b8f8d2556ee896cb8ec7ec09edeffafd815afb8c1495889b4645fc9a3f678f7c58dfcdd427e75fdf758143927ab8aa589be9c0b093a39b82077da4d451433375db78b7cce78d71103b7433e047cd34b03502d5dc8ed00ce247cb1c1c1c7331eb5b301f30eec7a130700531c0e4b2509f1b713e65b9c1c35829c3529a2c4e237a945bed63a048229883153c0416d559950bf4496ac3bd5b2c094a501c50be5d52d68f8d52d683926f6e1deeb2bd721b3ca33af10150bde559492d4b923e57065b90175048f4615d2b56b7865559de2a413cd6aaa02aca818b5e24747e5f56812e4757ca49385bce76e77c2529dfbfde3a3fadfbd148a4e47f56a12e8108606e007eb4a0de6eefe46009483fb4103508f3c8def04fbf5487381b59f0fc316df69df0e7e6191b7c075c978c2d758bad4cc984cd089aef5c3bde60c96ec5ccd78ebe2a7c7266e1c514adf53d3579ce6ab41e2373f66cab36a35d75e0e3414de77298cf62cdef79c0d976e1bc123ded53bce93eeb72b0bd7e007b538efc6e42fa844b05d67b3b46ceea5dd53626cf2836c65a0002a53b77eedba7f392a62597fca9ed81aa67be2eb9dbd51db0cf19c38a8d819b12ab949f850cb1b4689dd84f8781323d9dc2041dcdf2cdc96fac264a5bc804e857179a678a48120476eef185ba3b421fbb186fc0b62795f4e2163d02a004bfcd459101b614590f0eb37e4b8f686ba796ae2f2061e894c6226c97ebd314f5639264c6fb10a9e744de2a3ada90bfd59609200978c34e5c0b7b3b8fbb3954b85730ec7a3888bd86ae5ef1627bef6729b1e1e1cc8bc516481a57e29cf4698b2d20ae7ddeda1b3e8cad716fd6bebd3ecc17a7b58cf20d80f3427343cc026e660405328a9912b07efdae7a19ee9d377e71c702df27fe86ae01ab2a524e2bf0ca8f7869f970e871786bf570ed20ee196bc2165af1a31fd6628013ada00b4065d5de7019903daef7a4df693fe7bea7bc4fc0a3b7a7f1bdec77c62977da12deea28ac5a782d8a7a94da15f2d6127c8a88c6a33eee3934b328e10f5af36b3b55d94bbaac04803234d043150aa097069f14d48380068ceb484089471a14aa4e211a1a5701074147b1097077a15a2fb29fc29f24cf9f4f128e6c4e43d6c3ae5a5804d0537a21f1ba7773816d5249aa959b65b2fd0ab25cec4c82aba646e4d08924dca2d135758b197fd7f539706ca5eef322c5bb6144207642ca61c1df9eb128ce2040e52a734868e2bed4014447f1205c755ae235edec23c1984b199c379a217fa0e70d4de9dc1e7b30c85bc11126c730ae904b2cf9421b76bc4c0b679e5b555f3da092d41d55ba6f42b3448649d05dfc6898e765d67357c139cfefab5d44840a8aa5257f2fc2b158c134e138d552039bc4af6391dfdf330aa50254dad47946b84c59b28108433f733a852a8cc2ba37df4f52f96b3bc45423dc44fba6969c06f16db0a4a2da02a1b9b18391ee77599f9f366aea6214659412d0b7164290f780d7f6f855f6bfe961ce37dc8f3e3977ea017b5acd6752d8b558cbb4393ea0e46a4b962c3f6594e413e4363c4e4a04f015875c81dbc754d63a0efe840e58f6d2c7d169259282710c73608eeddf5b79cef744d601f3b1f5c229d0153909b781993ea52620c3545ea385f53a137d65e0fecb7e08d7abcab046ddd705b5eae9cc1f3fa4cb992e6105e57c7e0a1d5ccb059de04a90a9a75d82ac851601e45cd25319ef1f9f15c525067f20edf49013c473215f0f5901f96e91345ae1ec8d50d0889b552e083111873b718c08b011b86eb2275d8680a90374d5793fa1f2228fadb914c28c4e5602a586a4070602404c314f2c620d5b2ac5594c63d21dc7ef906e69e171daa20033886dc7821ba560762a03699fe673b04b4fb325d344ebb70e0cb9d1d7ff217a65ad37ebb3bec6a36fcfcc5f92de32d0f243a57ee84af5a8c1ea2b9073fa1b3191a3a75c80ddf094ba6f1246ebc59e663eead0ec5ff3d4679e00abe7e96f89e8013282a5f59146cf8e5c392e6112fecce1447c69c9c101be9eb12ce11f82d78812f4b22812890731f0c3aac8694e9464658a360889ffe3add68a30e78fba325b3719bf512aa7e4a3274e191c3093f86ac79e44ee83bea56ea4c723b110ec144f58eac135f6ab384f3e5b7ccc543d32b5539b94d3016208322256031451e15983b00f0ee11153269a2778e070f1b14de7d353b99b857c7067b15893f206af191ecc206cfc00e51c43cc355531c09a8640881f3c5e895ee3757c19a4e23cc24810551c0b60b17080dfac1c6fc99666124801090db18100e51240948a17236e5e8b77496189c5aac158296f0996cadd2f49a240775fec851558b81fcf274d02c7113c9f176f1169674d904e2c6fb936745665f24e8a49e755a69c4aa073a17af2c1687ac144f08484b60122a26e1a459975ecdd7c6cc7ac3b2334f11c2bc12e9d617946b63875917a0fa2c3412fcbcd058c29ed4609b245b119b4aec9c021cfc97b47df6d1e11abe82f28519ec6a1e9218c3ab7589eb6db802c35946a1d115d7fa43288fdc9273443010ddf22d06fb1e71e2e62592f51dbd20024058edd689ece80dfbb2d5808a92bf472d2cb450de1dbf8006241cb5abf5a80e9dccf0129be5e06e6881cc3c04620afb11af8c21fe64828566585676d6715ba1a2c6c04770fe7f4d5e5cf69ca75a109ed41d1d3b686bd680c2e995562ca9996f50452c80bb2047a070ffcc642a4710ab477c5ac106a2b88948eec32b30af272ec83cd8535ec61f93309429089faf31072a3634afdaff4f5c049651617af0744d22abbe272668323f0b55a4a40ab40d703d877b5ebc1c552241b335fdb54875830f68b1383e19a9e8e32dfca8bc8b143219632d8e2e4882c611d3fab458dc8c6c62104c400c160ac3f3af541123af9951844e26322989fd6dd0220a9401cc2e82418b99230bb4e6e48a75801827243ac487e12c10ef1d2fa53ef7bf07bd48be97f133b67c977cb2df51108696ba8d19b9fa6ae30152ee37df3768251a3a1a1c10b327b7d5b990de5a875654ab00e110d904906a17e3d098c6abc9b60f084275c4b6a7e760e248922c883aa9d7f03737487d440fc161eddb70ba3a1356dbf65c26e9271ec60ace086534a89a42c7deec78db522bb529a103070b83b9644573e458fcc0ab340fed879e3850aae28eb2755744c1bef4e2c6fac5f39d78a034640f096ae92be33e3d0cafdc6d808b77f19bf2666b88f1021a5ee5dd576d5949dde2b4012808005e58213170e6d4c4bdb9cfdd67605b980f60f6f93738fff61ddeb70ad84e5a13e5f6f04490c622d897ce6510d1b443f1d447d3270b3585e3416f887474663e325a54224ed57f2b2a71156de57d50c5cc97256a3eca8d2d17f876c324be6d6f69b86f903ac3718a7d9ba3334590a2a05527e5c0885054599fb204a8daf1a80dd84a9cf795868881e90244067e8dde57fbc5719a4c42fbac026458fed63e10036453df14e8f20bd5a02258041b3f46ab6654044bb22cdfdf82323879f7ac3fe4e8c6ab077786db274427f762bc2de6f89702c04dc3bb0d4f3e81a818a99c49e421501aa161a171edb128ecf63a35785adf762c4fe157b1fe8e84a9270b2efa7adae9564ebc513cc30d79e37cab20267c66b97765ba5d7b80b661e851b30ac6a381f3be4322985185b2e852b3642b62b4a454c99e4e4044174a3cfab842df3795ca539ce3efb9e5fbd66f510575e3270b3f48ece102b44848701b4894348efa2aac03bf411a05dafaf00135b498cdddd75172094cfbe7688dc0289761604d84579d14e1afb1f261130dbabce8131a7185cf1327e9e5ccb0abb8cc2fde40e661c494751b827ae7b89aefb6aa9d8919e32a0430c1c6fafe3c9ed5705b73ebc4158fb553264c48ec70a959385634b4b1c55e6c7f25ec1d35d7954f1cbe53cc8cc183a6dd43d47720cc7fe5185cfaa15a48482cb22b2047f6f240d131cd90a3ea2a72cecea4d05b5d4a8edad6c449481e358ce1173de44cf350bf84c31da73ef69f3a43ee53cf7f1fc126aa8a940c23130583866b1dc8017af2652bcb3042334b4901f529990dba085175bfcd599db892ae91a97e150843d773eda27ec1db74870406e89c7ade6d5fe060db1b8412e7eb12925b76e4a937cca1d52b859e9ce88cf28b2d02cd70956af6062ad4277233665a0845c0c104ce2d39dbf4e9c0ba3aa38fcaf022df7865c5b8813fa24c7a7407163e251498c3022924c7701ddfb7903d125fd4ef9039578694eff24ece1e72f5db059f18ba906eaebda0a72cf038e0237069428c969448ce77925d5954e0f3da0b9e8ce03931159eda3ada355473dc61e9c43fe1d629f84ef989b30df7727c4f64c1d4ddd88f193de7e0ffd6e8e5a0f952b85bb3cefc770d649b2447e3f574e5d1651d5ad7add87b8495e6cee4cb9fd04eea28c58aa86c188676ebf18b5f9e08b32bb98f9b1fd2ab0d697c40a9f5d0f058c2bdb2392161e55faa2a6d6c3a35d0fed55c9a790859abbca5bc2f7bcbc5cdc857b233ba618f87d8011c78b3647366e344ced5eba8620f69908cb20cbe16429cd5c902d47f1f988a196e60da1d94c6de91919a09fbaf39eff26ab0a9772f2873f0ba797c9c3374713b0cadd0d8034961b940de2a41ffbccda59879d249b7c544fcec20c69c977224b30a37d8244657995137d191c93ae2d64c3e8312601d60bc60d1e3549a439104d08736c34b5e532b965d083fa0916284787ff1faa0c6b67108c5d09ae3117185593b227210e2f0df9259991e41be2d16969bd16680b7bf7d6998c90d46c4d679394a3340a461d4b6c4b3f3dc276c19d459ec16c78fab2da60d5b06f0b60c8bb3cd4e6a51f5f25198f293ffa5c6c0080f365f3a2c3e5845f582ebc6a86c54edf2e159bc84ea9c33969d5275f375a5b972a77afd3688777dc41a55df79d1939538a62c1ba316fbe2714d04c986a6bfbb12de20c4aee26ce9c8c35056d42acb2a92873447e7438cd855a7a8fa505e395461651d2c4cff9cb2e1d1e1cb68ff7fce105e9deb2879a4648ade4ebe6af295f37826d42e44a5343450fc936cd5662d9c560b9aaa0f4a59248659b4d297f1cd12f3b3b4647b26f77e9f07c7a973fc207c432f74eee10b6a488604302cef12b2aa5cbbea8f94abec3f90916781f17d1d3a25f36c5b5fc4392f81e2cda62dac36b9a12bfbd70bd7226f00aabc207b43bcbecf484c0c93f4ab95376c44c14b7cfef02333c2153fd418e0f883e89b3d44de73f8a7ec8700a14de822f9edbddfeaea8cbbaaa6b910b4c315d2eb0d301a2521bf81ff220e64d04d60e3bd7b5ad0c4cc5bad25db053b675c5a9cc97b1e3dc622bd0ed742fdda328861dd4f439f4bc7b1fea1013516e4d75abc47df00e604b68f2a9f8ce198e89092249c94d28fbe3ce0884e859ee3706e57d34a27e4d46d351aff4d1b831eb04b5c2a4a708711b9ab918ca6b721aaa5b2b648d6803c22f9deaca37a487ecad809e392dca4041a2c5b55d5ad90620aeb2647bef455bffa38e16dd2dfcd161e1f037a6203982ac54b9e7b0587c0e0021cc6a0a2cf3f03e0cf07150aaf852082f6e70e7cc1c81297d6d8c00f65478c4ce738a214a865c6b1d0150e9b7036f59e8ffa92aef8655ba217183809ead5b4717a048c9ed4271868b787846a20f652f72667541c8bd8728f2ed1f4d083c368efa0031bd62ec0ec309cc065c1cd0676fd0b01745a3c8ce708e40bb4783f5742a3601298db2b8431b407c53101ffed8bd9b5f087fc74fe660dc38db09d52a495936e2198b1708c39570425f4ff7e1ef022b7b8dfbdf4548ad7f6c5b977fb4e8cf8ed5de5ffef0a2ac82589ef1cff8f4aff5ab0db83868591233dadf6da1b8941bce726de5065c21859d94d12e76b075993f4e49359f26e2ce9a619c0098874396790bbb9e29dd3b7c4638b1271e8ea066d18728543d28945a7ad6c99dffc85667ea1c67aa844e4e8d276be4dd0b076c845ce101ef62bb13e5139503620cc56d33d0f46049a46bb14a73e6dd554ef2295f044906e997492270e3d797c330fcdf0de92b1e29d61399e70514f73cbfde21347d8d79913d92d5b878391b62669bd3da4bf02068a9929c846778f0c75577451a57fdd987a566571684e9bea3980d61b00e52a2928c865f69818d8b7e1a2f58954a3603dadb6073f360ef70997dc5fc3639006cdcb88bf343e03263699f9c458a10d8c3f1e780f5b44ab72900bbed2a7c1b5b71ee8fa8305e1e9f8218ccaa144be44a631975a03efaf0f5dedba288306e1c48a32ba00895fa6b5baf0b5e25dbe2ebe1e96463cd256506e9a690f920b3a1b3e09ca664d230c5bd79348e7dbddcb80e3b8cb580a413d943e58a64b59a786e5a244377f4ba3ba38e65d53e1d74113f7e70e908462529e3194dca4ec12cca6fb675d99ddf6916a5c5384d813874f6a8825958b799bca5a8f211a13ae3d57553611b393e548f60b9c32f352f0a85e39b941fd262b81745f00094b8c834248f67859b5a69dffb7e141cd208f93202e267fc9421fb9be1a2b0016336542f81ba7c6767409a532b109215d110a5122eeda94a09cbeb690a9741ab6ce6af491d9b59c1f41bdf6e9456ccbbf29a23ced5da2b8a3bae17d97d173f969b2f25883887556ccb73921a21be93d2bc30bfd3b6fded371c44bcb7cada0ef5b062c84b668a59b036efe3878af070ee1f7e8dc7455aa9d2b18f1cd08fb1a17c133576184ebad746540ea29a175e2c16ee04f9036ad0420915f4d080fed27142e6a1801a9a50001dcde951cff42d6fe5c5fd9933178e4357dbe39fa21298545762a3b0d3efbacbf87a9b0324032c4919326f004cd00aa333f7407d898010d840a74fb37f614e2abdebc0f06a6135a0f4329d6879817087ee725ec09aa8233d80394057e2c04d4f2242a9b971494eb416b1a19cd3963cc1dfe0e6f48df44ae8496e63cd3b4cdb4583ecaa08511c0c031508f980cf457d2d902cf21144192624b4b82a554207fd0a83dba0e9f4d80d4f9614ceef15b30647fdd63070eb7a543c7c0e839e25afe0215c8395031a6208c558c017aad5959de2cc29a6a0745b2ed2a050a9d4b9771adb05a5f224b290245ffb198517b5709f29eb8a4b8b76184698855412b09e1c9525e3e91cb629286cbdbc9cab6e08c78f6c87de098ccace1fc01296075a535446a4d9c3de52527faef077a5f18a02d26480494625b9b3d3e18639d4dccc06dada4f3852a45a40e6b2fc1fce5841f80428e6127d082e0b7fea992c002e98e26838b1af32cecbdf4c476d0502086c8236e59035e4ecf7245f43b9eaaf9638840c5a217525e10d30fbe4412b59c332f3a82944b8841c7388a5d807f96bf9b2f17259d8a9d87e849ca49d94b00ea25aaa1c244455b13691b0f50cc936364a254458409a6f6a1d2e60da3f378cb15365fb6333d1759b3c7ed6a4183f6579c3cf8b24f0932d35f829cb0b7eda256fb35c498a0873fbe3cc538a0782e1922a611a9eedf97e880a86e634d6ee8c04f80842574d0bfa4364eacb258155d27a94a151fdb46d8fd02102271a493da3af5adcbe9d2123af3fda3e4169229a971e1a9ac7a2b943596ecedfb0051354433aaad8c2ea071963706a1ce74d637c562dba877e3dc11b0ea32dbfda451a46f82574c692b8860648a9b6cb3f59adbf05af46420e5ce3d4543915879a3115f6f08ec55ce0170eae81c8488e35509d6b978f402a4aa61273510a4b191d720c958ace9e60105afa13934cc88cff62fb23c871c002230bac588745bc89d0e0ba14548ab141c2a84277332c3c143c782ceb91ded700e5135b927669d1100ed54d0aedaf2dbaf13f66001aab61f94c035dae5fcf84feec9936cd96b4f26deafb6d0e441cf0676a4f52497664ad1850131afeca80ca057087c0e541f0e6f0c0090fd845054dae20cc472657927f2089764e633395d4ac4043b075e9eacfb636dd173ea8a63c2cc2ce0c1b7572beae0d47d55685a02789880f9f6d5936cd93f5b1ca46103c8834d5b1940c48f63f8cb5ae176aff005d949868fabcd00cbeccb93ddedcee781f86821ffa752fe71802c0bbe8088576c9a026bb0f570065fbe729d7278b0eca9269e6e12f0fe8cc2acfc27be21dcf422694c1638a577d75336af417c1a0191ff54f11e807b5c098991516782189ae60e15f1a0504e614584826a9c929d6f6a2d63b8ca95c4f371f80841909d33c45a7b0c63b2723e8cd067c2a13d01cc47605ba16c7242d6eb8599e0fd3bc11070bc61b960bf042fd2a0efe4685552a62dea6eb731aebb3d7201f57e69ba0527870ea2eb528b8778a571c037be6aa1ff199ab8cee672ed7449fb9b1a1ee67ee97756c6696c3f573f1279f309a8efa5cebff95a6a3a6c18b02b9940b3962b31b7df67c4274228a4eaa6028683f18c3c29034c91e8e3ef6bd4098b303468fdcb102c8070d770a98449ff9c30d8cbe1ef4746d417c0c37e5faf5ce057f8ec5e2e2566b4d328a94f80242a04a5a9c3e61108a3fc69b20b3d75b81f1954c782509f2cfc86ee943171b0c9c953107d747151786fbf8c5c76c80844cc5067b912b091298a6ef62c9ba6f4feea7138128a0e8f0cd9603bb128d810f9093b0d664e46fa99c50b443bb8b9870eb432f80e725023027487cfd9bd24626e1e8a4df9417040787574f9e941d964c941e4bfbadc9e6b0be194b99d48cd33ad1b3c24c672199681bb2853ad5468385a69fe71bd868f3b55e7cc39941fd741833b2ff7050046036a4cd0b89a93f69d9eea28f205961772404db54a921c62036f5f8e61e8b6e25db2eb051712d34163034681da8794736ef50e32b733419851145019963ed7b56310f7964036467d465182a831c99df3941745b028bc0cc176489b9cb2b83eef41e59646c683bfe3e0822e2830ea338f442a89764bbe0868ec33dbdcd5be1c367bf49753403d681feb3fe4117e70e185aa0e4e7866c03569e1805dd8f74f41b5c2ae0da60403ee13f0b7a14a2e5b9b446aa61cc558c80c90b02ff24700f5a70021e886a4515b447a0dd20b9f8882c1ec138dd6c907e91161824ee01cb379c89fa8936cfc148755164d1e3b87f981d021201fd027934915c4f113980414ffb69fac64dff0f450a16d33a06003f3bccd43124d3fc0f9ab4bc91c343ca79875c470aff9fafd27a63555243e67cce1c9bccb3cefe2a86964cad63c72839ca3bb33eb7019d6edf981bce07ea7aacc13f5dd1a1be4f471bcbefe9ae8d83add9d58f967a33c9e514b2b35f86a225895ed5a4e4005e1801b7fe0114aa03539b4625c7cf1852ecaa37c9cfeb9c563f47ff3043026c9b4a01d37f75323110519c550841ab2c7d8bf518e8d60889b76ab27b9c29323b78e85f691581f3958f8d53c1647b9ac0fdd3ff60459f6ed289ed2f787f71bc17b9c17405f6654f01dc22dffcde3905effe5749bd8739f5c7172a4c2cab06d5c9bafcff193c3b01a96d4ca220129f5a24da00f3849d1ff4b64afdaac0f850c943eb53ef0cd6845809386506b4e28d6cb115087497801df5f93dc08cba21aff9806bd1d0f16ba4922cd83dfa76e1d8cfa4793181bb64b4827b1e19fe7299a084d4b2131d8f4d9116b6a2cc32d66f160c83616c815f01b72121aa623382db0021a613ad4339549200df2a74880668c52f8eb80f434639722bda96ea42c413b9390f518f2220fada7a3445e0d5668554f5a862f576e186d7ece051464f8221ac1da13e154d6626ab9665532595e00b4b52a01262b52bbde610c7749f8d0216e3b72723211cf5c30dfd008ceed89829d82793bc35b4f3900c575010103cee359ad98e9e5c54a734bb5d203eb630d30ee2e469b1f2224ef59c2c4c81baca09dde00979ed0abdfa656c5193b488735fc2ea9c9bb051548ae34d54e143a24ca228c63fdbb6038682dac83897337bdf0e10bd0636995adbc2570078c3e2ba843d5df618cd7c04cae8a4d1d379b7a2c3914ed1cff73deb89465ca7ec6a270d467a05291b2c129fefdf0b8de9d6ba207d0c8c120bf0f880089efe1d6afd55c30bd52bdc6c68db7c35c8e419512ba361c9249c62d31809fc723a43dcc7af1941ec2c5f9f21c914deae016e1e1eb1652302f785d08e95a75d5bc8504141489be0a430dba417ae0fa58adc3dd91b4425e3506b3a0bf8383231a2b97175404c553f7bb33fed3cf4247914a4939468284e40e6a516604394241534221dacdd805a81434fc074d3b1677480977697227cf3317b01e94b84e9a211f9fc5eb70197a0ef1b7fccc0c9af281ad4ffacf98781ce7c56ac0f051d443f8c7cc2f0022b4b6edff4f4e2c21c43ad5ad6adccc10f830cadc8d8417ed6968266cca099cb3eb26586cf3ac5ccd94798ae00809b08ca619ccf366169424bd90a9ca4c1836a7b49ee5281ee40fe2570eaa4ecc5094df54247be20ef6c73f215cfd0888d47cb8ce6f6ab89a58efc57b307ec3bfd4b5eddba29f5ec96d02aca11eb26cab896c38eece48697a3022e50dca9ce852bb565286f96085e0bb4ea156eaa53281da5ea6828c34eee607b9048a2fdd2eeaaf1db7b85479a1d2a844c7eb1ac1af2ab3ab2bac2a39e76552e75fc996b7d64212f7311d3d555cd7247a508bc300b81e6a471436a2df8ae58d0c601b63e2831d569ef9e661b51679455de87b062c726236957a0b7cbe142c31fdecf1977e3bc54b9892037a2b53437bff1b8c2be998c8538a3519cafeb5de05064ae0a389aa56d9a7921971c225e0644fee80a4abdf2fd86df173e228684793e40caf90403ff1c947aae62e0d67801cbb24b0d6679572589a52a17f4a092725b79c98e5ad1f33e837e31d1110ea5fbb4a35004119da8f159b9a2496b1361e8f90190ad38005a0868dee7b412375741c9467e5e93163634ab64d58ab8cc79b9519dba50f28b13242e021807b8e0fabb314a702fc12eb5f24387857f3663ead56d3d4558dca414bf39562fe206c2e0e9633df3d9f215fd392cce485414876630a6ed39c53ab02b0ad42fb26662d0abd9145614e16e4fa3d88538932766f7c82e7f3595a6f269eb44824782e2f6832488bd8ca6b970b3f685bf108c2d89200f7372525f339592522f4307e5b91ec96f490221a604ac7fd02246b2d0843129ec95cff885b80ffdcbdb35cc9c47da57917c6819e77a1031c79b4baa62dc553d0798ae7540d23893d8e6154168c46141fe31275e658b10e01eaf230426e42a2760cc728666c24a06b74935475bfd06c596e66aac20ff8934936019c0541a96dbf00f096fb4d6f91976f54fc93a8a0f180021e5d189945a727b71cc11905274c070d7948059b8054c251598600cfede8f2a0f750e98c754ad209a9fa406de6d1a29ed199f78bd3837f6c3ae762c6363299175c56eaf63a4c961cf7935919ed42267ba951a8a49c9fb6eaa5c906604a06003f0e220f42140c6364b09a9f2f16d6789af677974a005a8d780e7ce9d581cc9c95118e54cb34a2c4c34b3e131baa332665efc63e4624d11f02ad72cecd1ca0fd01bdee046a9392a39f7cc6d187b094eb939c9884bedf7675c04981b352b2d52c46282d3633fc279385b106a6f03764082abe581314b4d9336dcbc34e21175b4611a2360ec890bbcafca42179caf859c2b732b696c50786eb1803b515fa8d59d1bf1d8d1177934cc7c359487d0c9e8f66b4e4a582e43aaf9a47ae0907a784687fa1c1abf157794aa9803771d1b8a24b1194373cd09390d329475440d72e2f64f13688ee895466e79d948844bb100b87125e59b80d64072a1eb1c06e17680e1fc1962c499d89d62e12e8775718ef469b74ea40b5e3781ad93920d5e9c965aa723842f371e98046fb755a7c8e93530af6cab26adab241a25c037858a7640a4e33334388cd91e3c1b539e9e4ee1b8b1cea92d848abd3b885b6fb7d14d9433325f9903379bc1f81600e0ade0c47b1564f169ef0e1c85b989e101192ed165652e42561f3659fc0ea6b1f59f2b26b64ea34370f022d95aa745006609026bef7c0d00ad0d06da2dee70a8bd5a7325137a5c3463ca176795929c3d63718b8f05981d3e9f13f5e1fd082fb3b20b67d33ad746bf6de81f8868501367d25ff25d324f019f47d03c11ecd8cbb9f973d4cdb315c2ce8b2a22e0603af05ed2780546c386108fbcef5a96c049cda5d7132c3ea2628b61bc89a1473f7f2a83d32323f1174dbc42bd443dc285a3f0fd7dc462e45377237acc35145d79d843014d817dcfcf24b046ebbce31a87332385a6a19c1c001b99dbbd978cf04aa656283d5496c80aa51b7ff1f5b890b9df95a0588ff8746e90785ca13050d0cf9bcbc0e4ccb8616fccc0b81049a843991d4c9fc30b9f59ae3d5600cee88aabf45871e52f10952a739d31a12bd2d48f09d2014d51a998c022592063d255e84b1f2d928b70bf0c2014abd68ab4eda522cef8c770ffafe238a64ec8549fc52bafe672bae44c1782196d2a714f0092f5f58c5a8bc34bf05a59843755e4e65f7b2ba90b053d35729c0db69f8ab573d76046b9708e5e50efd7cb155f339d56b7381aa7b46a5e234689475869562c2f5188a68e42b92b50546ce1abca1356f23a135f6d58097351aafa60d65abd0aa3d69f513e05166f10f3cfb4933931e8dbff203fc9db728d496e26c29e42d26679a7eb6794c7bc6e50f637b1708c297ddd7e229e8068ebf308214402d9b870f96f8072b8c05e222a267e669786c0f45e1f6fc3e577bd2dbfabadb08c9774712f4fdee403e2bb128717792ae4aba1f7b608789646dd0cb29dde5ef02cf9a1731e8530657610ddb09cfea991ac68e65a502794e64b9213cacbb4c0a7f23df18510eea59f890854e9892b03c41a99a5c6e1e0b9f8bf0dd62416522b6b468ad15a76920b481fb9235d7776c406c06e32b08e761b550526f648f898a37c7bf4fd1ee151f822384b947d7184ac0e288b0d0d785b0998c493d6775c78353987cf02b3354582b00b475a603ea8d7b8a5b64cbfb5fa064b2f994dd858ae337293a8e292a4e1b42841f32132c6a239e796975d702a8c27c243a886dc21d36c88473b9fc141a5acf122e3df57e3820ebd275ae361de3ffa20f0c0d8f946177b9778161b8eece03c8c04f133ac39debe854f38f60e4a2d01194f95709b528a5674381546177c81c59b8020ff482f20c9ef7a49c86d142ee3cb2334e58df444090cce674c210b04a714e23753aba1a5e58527d269871f7fff010a320d10907582b669e4d26e46df0723985fa73edd9e602cb63451ce1beabad2552acca7120881d307d25d0970b3f122ff64afd80a13816d454b7dcd16786b4386384a44e6005e5f1553a12a11dc424636b12fce07c6b6ec230fd96c0719f17e62b8abe10ae6019b6e044ab6ad343e811217ca8a0eb5184c8a135410535e228c411189f0db9a6ac0c0433232bd5d9af3e23273877e99642b9b0d081a9d6d762ba6a8ab6290c29ae1b95c8873cf2c0701785f6226dea050ffc39781ec3f757de8a3b1a07bf576b34ee8fb9dabbe6e38cd7d7f3e4a1baa21ddad493818d9a40af1b2cd0ae4375e309edbc10494bc243a40dfb9cfe5ef95670aefd91c708a708ab0d43e469c575996c4cffcd1336f4e67b61261fda119e740ec0b507fd4566b3b85b21d61f188d4392dcb3ef087ca19970e345426d12792a5957f6806c59dbfbb50bab6ffd854918c0e5bfa3b4550f2294e4d9663c10b43bd8b0f145c5316d0583ee264e28a2b5cfdab1c94c52a1e6f4faa9a81badbf7235ee565ca277871577f1e55030ade2e81b91c4e23ec52abba953a5228256a788062195c43807140a413b78860fa038c2fbc545e5010bc4c3e221ec9ccf6330381237a9d61178e7c15e10fb02e354d680409567cf5f95bc5d755cf40144bd7ed9133b22d7ce08ed4b68ac6eb06ab27c923aa9375cd11ce966541c4669980d97908a02afb1d643bb7c32395dd6ee39a7387dc388196e9f98db07d7e33047f33a1bf20cc3438fd54567619cd167e4e9071e51d396eb548a73562ec02c63163b65a50d170399cc447ba1a4c1a090588697e4b19d4ad0870c3d9863f16a3a8ec1f12680e4af56d2d2562f3be8ae6e6d7bc6f406c27b096d073bd19bc7ba8c6e2c317d6c2b1cd469362a3258d8e8947e981426e916ed341b07615b55b1e833bbd398ee658292978daa2a2e04d4d1599e2b1de5dfd2e0a96cdf267c7edcab6f3dd1977c39e2056eb8865283674736641c27382e006415b2eef1d8eb7a58257dc517244810cf97860501a262259d733626a54ffebd9772a229a355bf9522625502698eafcadd6d15fa208356e7324960ef86295101d3dc5af896c3309c4318d278e2939a96b268f51af94e8982fba24278a6a6405f6a275aca22846507204914cfef80f23af632f5abc1ca62789eb08926139c838067e0372db93708229fe8dd4d228f4e6ae63567fc57568f582cb7fb0697b4b3583b46231db45b4252bef78a5b0e61a87bc3f916034b8f2ab9642a45dd4a31f0d1841d425efc987148bdc5466c88f680ebb5bfb3d8010a3213e0b3a8f9d00d24835921f4b17275027995a34c6bd056b1483be75a41cc84178ccbce4cf54fe7b92d58df9cb5a319b57c5beddac3c68e353669f77bfc6794f79d008b0e0b295be4b83d8484e5c902e8ebf4c10c06b0ab3f0aeb920991b2b02d889c3d1a28e07ff35bbfce484d39a02c0cc3c9ef8ce13942f39cfce21364cb437b4a23da3d2805e62af9391921965f43f85da178fb40df8c9337bae934fa3f7036cb7c9016fdfaf0297cddf16e0a082580b65ecc381f33c7d31cea63d06f06995c6f141e18d462b40798ac394b8d27cda8f3430d6e04419660be2091cd7c9825f0615bba791804ad7fbbbe9d157e945a8256b3c9c5dc597607ada478463c79b9a8e28bbeafb30b5386b730bf67dd99fdde6744cbcdcc7deea602deec3bd9d80680b72e8f19296fbc47903e353f4ae9cec3c6e83d81f4e4d0455c6722616b9c29425f12a6067d587c7876859b12620c42e9491f5b032b8463277381d22badc33a9cd3dd6f47fa725152f13be43eec3e6ed43ac9b395b0bf07636af1b6c02622c6239a86c8b775c29e23a24741a0bdbfac0b6b49f327fe3f6126cf80d4bad03cdda87c669dc942e9b9617f9f33b50881f16454990840229f725fc484e04a86b25326822709a52d995304c7dceffa4ab274f615666c20de67d4254c28c41eb27b4688dc52f12146b9a11bde39f4afb54f54d749dab3de6591e98bbd8c3b655c569ee8a84014e102e2c5824816556ff47f16167f757da98f99dc5fca96921e65f9e57ccffc55398bf277b3189f9a7538c6efc283c2d429c0e2c94504fe2a4942c97845831b434e9a5892ab26738141aa050f0322f3eda0ec8a2a0d2f7207654e64346079a723e665f6696ecef6ce14dc5423429c130e837f9a4bc8d24ec124ae8f6153f563f4c47af138c2ca06d8ace0f454d3439ec2191d4f6676f6a67824228868fc40e0f3000d16405515619f4b0b0f95c35bb848c238d0be19332667a907ac2f5d3ea860cb31c49867a361b2af6a3a6302b3af751e183386e5e553303d48dfc9b11b44b61cee185c27ff64238c1f39fe2576bf822f209d111f034d191ec26db90d55dc6ca60119ee2982f2124b7dce2cd5a74bfa03e8dc0f37a5740c47ddd5ccded788b39ab64e0c4858b6268204f892c22c2c740e702c0eee7d0e544a5857e81a3de7b0ff5b775af9d04a13f49dce05e5cae24615469fbfff14d962f10ae1da2c03c076468f0eb8c0a9019b744a6749d75b04fccd98c3308e7511fb8450359127b6228751024b5b13f97e1a21f488f1e69ddcbb5d0813cac79e04487bb8e26a210a0e840063e90134e73143a183667f2c90cb3811db4c30d333c4e382b92c7b292c767b3da623b5984a34a95b1701c173ecdad59ce0e550e320255d507850b071cda81d4750f8112fe74d0636b26b8be3e72fb436c5a62d31f621bc0880dce9ac8efb233693fbf5c63c493f94f7481646ca194ab96c86f59b3d790254813c2f7c8a0da547a2da252411e2afac7e3282cac6039c1811547f67578490b5687ac0bdb3b8944a4a3d5af4d83c694fb05299b2ac14bdd4c3f8ed5cdcb529e99977124b81d034d44e304f742831f4c061fe3550233126331e9a2e2c161256f003e3fca9d88e5a5f23f45248d259527f46aef0ff7dab2c9a0ddf24b60a65682e64a1d50a1266b84b255f6f4f860cdc3ee17e7ad5527859423fc81a228c77333252553c111143c27e4c54eb3b7b27b011f24273706ce415d85ebebb02918f798c3ba253fec929a2f4fec4e1c87eaa49a1b948c2d6aeef26e69cef83a71d89d7a128729056e854487742f112b54871d567460b18a0fbbd478240da0b6bdc8f25d0cd8886aeaec2855ac9ac869ea966e5a44041af3b00b83680b8d344e1d9c8780b48746b58102e99468ef0cf1df1b94ed2504f433dc4766948e61db904fc020e025a01ed5c5a78ad08118cf52979f789b8ba5a42a4040eb7624837af902994cdadd2a12ed9f57b0f224fbd0ac59689ae40b674d50f95a52c4b3df144fc0b3ca5f2cad7205ff8c1b04e10f3879577e7f35c8aee518c0e4902ae6dcc4419fa9bb7de110c5975f11b134e66bbc1f94f0ce1fe0d7c463dc8989f94276f7c87cf8b0672f6b2839377d05232c5708fb3af169f7183a4e36447a2da851bc08f7c3f2a9920f3129bf412d4877d612e211de7f5f7113f45b78821a7040c001369cc49daa3cdad46411c1d7bdc32b04c1e966b14fd4280084c16a096aded42a6bbfe191754211eebfa2b87059e0bdbcf41f75120df83dc82ead03bb13561869b71cd09a0ca085eaa766fc556d6e2f43988d7ff61da6746bf71f57105192d38265598ffe5b9cd0a9e010b50d4e29b02cb2393c9b00d945d18ccd9c5516e119e2b658818bb0e762df116f3a02d3db2ce37d663aabdef8f71f5b159790b7ed70aeba10ec44c5ab31eafaec4db390318b2100c7035f0cbb927c64c7f8df64362d01aae64fb57ddd0769b03890c80c686dcc805571dcfe43137526b129254c87066076b7642f16333fdbe4f3b1ff6f8bc0e6ff7c2adf4bad473c1268cc482dc4925fd16d4fae39e0f77000a7bbf329a868dfc4b52e9fea8b071cfd23ca0b073cd91ea1836e9316d460d4ec488210b7f9a85ca28c73ed6550b82e5a59231a336f976d020e35b078962df95a0a8b94c3f50c46ccaca1238ab8c728af74ce6503bbb82acd43aaf5b4a4212a663e7b7af4e983a5867655f0a2c410624b1377f3344dfcc5e025060bf7bcac206e7af3f69f005bf300ef130f7e2b5cd3c3dff5ecac009f08f32c36ee1f6e8c89de4c3e889d1ec191fdb1a8fa2e1934ef7d72c50fe12664ea77a0c50f8452a6ab65aa93cf59c28d7eabf7e2478a633c6fcb0ac80cf5d53c3c785c07d5c6262803e1166690d92d830e55e97bbed513f34c64497443abf775a9e205f123e35464d67dc6933898b2863732a402834042660d804c32243e428dd04a03e9666e654f8bd57acced80ef6c741a7cddbd4a80e75a100d11d7ca059e171ce36c529b850b58550b560a51d0673368272d719774f53bf0e663bf37d867afe6d4c2ecf87f46a873be8cae9efcb166d42752143a87f43e1d2a8bc923431b11bd0897c405a641d5c124f81a61848c8d31538b5c8491774759e041b25706120115f19d54b436c741de583b714c34edb1f3699cc3a81c99cd8f3c7da14452560da48d1ccf2b970ba1bb2ea2a90f6e0449681d05de8f661362f4cb248724d7cf771dc65dbd40785df4c2bb5d0734ac6b9f07ce68028fd11d978fa6dd1c89b4dd648cc939be62ea2326f9dc6e606b4760c77f59cc2239fab2d0658c2501b08ff48e7ecdfec453e4e0c644d65f46f80e44ee7a91b2abfc5b2cbd90cd5ea085b6c04a8dbf81cd0b9e3e594005cf33c5bdceb1fae6dc134c8de7931cfb06da00bb4c829e7931c50e72b356d743342f78f32f569853ff469a82f2320305958344da43c8b97688a7db88d9b724c0036eb079d4464b0fa516fe61bd0531292588bf3b17e50f03b9fc02259bffb9b044d8c6f981eb8f32764ecb2a510a6fc80c8e34c1fcceccf6fb6d042a605e3f7cbdf7f90b560e15c5778c38b144f4c25f4fb094de136d79f00671f7783843c3dd6cdb6c232b91d73044eb2a6ea67088f3565a09c4b32cc3b73432abc988e2e5ffd270454be9fea7d4be561ff0a414559320b325f8ef2acc1fdafdd367ed2bdfa9d671b350cac3ba39ad9319331fd1b85ba1c0246ac0558353d9de596d19f68a95864069540fc519cb1a6ea63bcc0b290220a39147bada93eeff2c7ecfe1788da516ff97f85c03303bdc8363296e48b2be8ff609e2316ea18e5fcecc2b5b16a4009a1f35e1c9321fa74e4901e48184a439b29446d21c64e026698ebd803771246b66f30c3ae32a197ce3bf5f10b6fe0160b208972b0f25dfcc1d5aaadc197d62e3f55d8493d445f1df4e04023f491381140352f26f7222ec554498d1b5af0c2f00110967abf525bf9100d82eb8e0291100401fecfa258bda0856718092920595c2ec8856c48cbd1059f7dc47689ff71ed6d7a25ce0207fad660fa2dfbd3a80b7ff96e15812fb7a53b84301a7333625bf6f463150b6524b2eab7cf88d2a0fdd6b09ddd3f1458ce46d5a7f841a81e133b621f4438db42222a71cbe78bb7e939b53c8e436e33cca21b66b4c0f63da191ef221a2f40c208f20dcb54c1c6747a66ee94c5ced6a5aa03931240d543882b47af97e504f9c308f9960c1b58df2d34dcfa62088ef5ccf07f0040f1a329b4ec038a2894be865686c845aa85c547e80c9f53b943d6fcabecc180564a083d005a885b12522cfeb191c104c1daf2e6c9395e9edbca765dd10e3b68f2f815457722c29e93af01201d86ee78d03d4f463c0d41696a56c4ce17c4af3d310aa3123db7670522022140c15c900d08edb03bdacf5344908894bd4619318533855902ea56766b9f4a847020e27408ee5b1d4eaa91bcb8c5aaee4f7fb84a36574355ebe521146ce5cb4a210efb8084feed2130273f0849c8ce9d685644d6bb3dd61bacbd493e98ce1a2ca52dd08852d0b2f310e0df277c4684641a8a79d3662ef156ca101a3931b20836ee03df6493e9c224011ae5a91ad8c95eb87c33a004b1ff758fdbb6f99a8a868d4a9875901e98ea1c027da0c6210466f6e47ff0166c6e75c9f17e9aab410323b11d6f5779d7463ec060d2bf0d631124985de16918e339db18b717adf79909167f5fe2ecc2a931ac56fc4e52b36d58d55dd353809e94ab25259adcf015c778949288b88b9ef91d75097d9d27b7a3cdfbd3edb6a2710ed25af8c9987494ec11263d008b276d6c651e1b7c40d83f7849b352f781e1aad1c430f73f3701c1158c44a7681016c278da292749d238b7cbf32054d2ab5d4bd2db220bc8179f9a1d6b4853b7732a76eb12179cbcf2fd680316ff0482f00c096df825dff57ccc93ee716e696caac168c9bc01935c18174587b06e13224b5523342925a956b2d8b89891997803423fae8ca11807f3749046f29edb8c92c5ff2e7a506b0919058920f96381fed1bc718fb643c3bb4a75ce5e91160e53df5f623d661c938f4279ae5ba014845bd9b6ff201b11745ce6dc912459f7d73d31009dac85640bc4ebdacf9fb4f401e7eab2192fb0e71bbf020f8844ffd984232808c09985eabc6cb9803c02d41a9926eece1cba1a7af17933b75f9582461614c61c86c6c45e335ec8a61eddfd6f3fa0bd961b082e57a6d3ab1ec298318cce1e72b5400ff94740691168d91bb27811bc760a5d885653be0fcb90e102d5a5844e8b7086f6e39202b66bc911fe5fe2339cb98276d99dec0ad36766265263b471bf2903d3333da8e77028f9935071420fc4870bb287dc8ae93928806e2de6ace6049899a3c23d0a10805d037814f8e6433433648c17334c6b6c9946145a28b618ca02173f0fb744670a075eb9be9bb551397770774e5ee972ab1c172ef17406b91a8f4597b631c3ec22f0067d2c4fffa2e2c3e9e805aeae03a49664e9360966207350c4f5bf8cc24aeb8066851a2906b590ad16c5b20d1e9c6ab1c40faeae14ead83d3781eb9551906f22b52a6aef56903db6ef1fa08c191c83d832c3e3c455121a2f78c617e8d44d1ca90099e8b6576d8375c505580785f63149caedfb798c25b17400118cb4e78603a657f0f9a96429bb2eb92b5da4200cb718a723e2e9915694e46e6b39fa496fd8ca6bad207610860334dfab2b68beb0a67ad7a59d1c22a5b1b9b027e03c2287c610f1ce4ee7307641a871527cb1d9f2516634d69ee8f1ba6ea42f8145e6054dd1405278a41896125f7a39ad091da8a16e72f171342228ace6890a4e0863ff4d925b28f3aca416562e94eb4aaa382e4b8281197e18e62ffd0ef6183c53bf4f19ae9e8b15a4873bf77627c587be250633fe32d97f3052873f1938aad3511271f938484265bce95d62d3fb0c26d136d30d31cd5f885ef47e24ec5727592f052743b51bc2bf557887bb4e9b95f7a424c1250e0750e8e44b3139b6969271d962bed2cc5ed686cd52c84d79670a17a181240ab69e77bb4783f8cbd84fcb90822da1620fe62b9cf6d3298ba9c29e58782d98c30c4cd2de01aab843a8aed20b26fdcc0e36ae1f3dffce53865082cdf0e4dbfe61c09e879eba2b4abd743780a3b6761ea270f6489a2cb808a0a2a69871a0d010d469c75e1d8301f602a166acdbb6001d9efe0784634d940db10cba64ec36f794145955ba7f2a612d4b6639cdcf9e1047cc76b1ac7e4dc4a236e800c0391bdb3dfa76b38cfd0e358d8cf48462488c1331e75ef39cae8742b0ea118627150125cbd525c2ed287596b2c6090cb2f765b0acfdf099825282ef9836925875f1d52c423546c632f952f9f7129b6b4bde79ffb1fd5d7411630e8dabbd32989d1036b660f671fb5dfaab84ac05f49f324e1490ec65e9298d1f9303e4a4d86bffae0d2c4d948ad11f6e0801c346d197f9f1a3c50779ff8d034eaddfbee34572ce3e17ad2c3602660c819fa02126ca04013436a104e9dd7e503bb611f9e451914cff0a1c0534820904d54f0b71ab737d93ef20ed65ff6e68ddc0c642f2445d53690e2b1210755e841da4069aca4dd9047eecae65bd8d17059cc35f3e790705122bcb033b56df94ddfc90f417b762c0e72f3afd8eac4d77558102e37a55fec001f357120fae55fa2f5bcd59d3fe4718830326f19009350a0fa728c3461cdca9886e8d5866e41df784516463f1456dacfccfd2a83fcf22d3304d5d05a97e15f91bde85f04722e140d1f05d4c360c17d7e770965ee15448c32b14014766342d9032a10088e08f69f73082e017143a901025f004a5ae3771a0e7e50e738b85801aa4f535d0b337e0e9fa94379448444b8cf104d808e9fd07c836d54e3b04f82bacfc3cd17d52d6d94348f47f004e718d53f94d46623f0db3cff1451b2a26d4d7dfa8bb660562873ad1b8446f85cf0d7b639f1a1e74246891d9d8db81242c9174e307d4e8b3ffb2928c26757d9f0ad8087d058c10238c057caf4bdf53caa222fb96ce2adbe0a4ca12ff315a17d2f378497c81d7d2dbaf430e251160e8e0fe5d0467719abccc891a56904c5cfeaa8942104aa6c15d54251c51850552969260d5032997a089c0db9401bf8a107f1f9d2f5911ea3652372c623f14d3dbb5b873f6b561d89bb910c4582789e550c5aa7548f3d700602f3a65bbd0be9de709bc4578112810274a061e19ccf790dd3214c25cb0014e0f719df8a8341fdbc03c3bc49621062627b263db75cf56725afe1db88e940841298a6ad74256853517561c4a96e436e859bfa1e631ee0c15a265a2d6b0f7402d52b3baed5d02661518b50e8d0fdf76f61037648b85d70563aef5e97de34802c45d6df00d1e4ebbc2c85cf532c18c7454f8c7d619cfcf30237ae59c99d6206650577932f56872f7e2f0b3819e0f566780cd63b5246f9581abcc413c5b5e760b018cd52fa88a5978c92350d2dcc192fec4e0a75a3b7437716a575fef34eec70b192612a6bacbe162e9c988402d825a8d1d8e208d7d55218a3857e27e3a96749ab916aeac58aa2cef7286c715e436bed27c7f0f616b45e340631107059bfd15fda98d6e9d0d82041b28cb0495e3903a2f3c8c1482fd9c2ad216bbed7c920ae5c42e395a3c73760731a36b24637af484907b36788e5d78084a6268ccb7a8c832e209703b4d980084ca328f7ca191583670bba9498c67b53fee2d4db07b2f4db96e5c8e8de73801759efe39d58ac257e016decb51a8c76fff73b687e84819bf61ded12b48730a6df88297822641533d56f5909fa3980b52d98e119660db3e9a7926415bff14cceae105f4f266785f95ea99fd8877840593746a7af8e1f688d06080fd23fa004af81add81bfaf2e71227408fae7cd77acee6c88e36b93af5a71e0fdb0a1494cf953176506b105f30b7dbeea8f83d30279e574e1c3e8ad4140caa4cc1e636c3414ad41b4385f777f13fd392f3875370cae0daa1bffd4fbe1a44c7578b165442a5b49b2fc4a6f3463830a917d978d94732fe70663179615e6a10f529b4718b01f53d9fb2be9019b8715532b439d67802b4380897fb670ce6a156438fd2c42ae1e0038082671c856483dfe5d3c7a1773b711ad539300c73e45844440e0609e0e9a2d019ae6523a73e84cd1d03c1f62610bf2e81f0c30cb47bfb4099bd06cacd4b20f8dd02f1972d152e9073d2911bee8788ce3927601b244255dcebf6b64eb116826c2d6209ffd5c1baae71471ccc8c970827cecc9077fc22246a9d501f7e67bd8433428b2a2bcbfcd08fd5c0ec6b1c92c945b2d6b7e866b703a2c9a25618015d837804b39b40aae4f5fb49a9cc15c5edd6f17e55cd50740b363efe2c78cb821b0bbbd4ce7765a7ba79995e5e2757e5e5dbb6e1b7d82c5d3f3121528588b91df24d1fde2cf6ea2e940ea1c857d1e1cf839925b498c547d0060260ae5c46b836c044ae133ab466163d44435cd6033996f90cac87ae24ed6633ac374a051b982cad71b2886f5611b3eb33ba4845accb098066c8344768d0ab91471164bdf7912d54f4f7fb377819cd02075c5b1071e1e32e2863d2bb50a82c9c623a42d6be51d95ebbdd130c32439049b4066e4ed48d15bdbc8c4f11e8700e261ecba59f2611195ff1f190ea84e737d9dcded9aa80cc19f6797472313d6a0685f6888d347258a58dc2996ee5039fdc6317b93ef8c3fc71869e68c4b152c8c5b2943a80e8f81aba5d3858480e39aa0dbd34466e07660e2d31fd29781d74bd49c061cb51c0a45a8976d2041cf3bdf2d80e84113356f02ace66e635e1791542ea558878a8f5ecff74e52c2229292715bd26b31901a919381806b4c3205f703380f1aae3d2fad8a5de9e73cf79686724d1089bc6b0b6225aaff674622db5ff3c6b0c64345978a742a983fc5e8a794ac66247191dfa32ad9b7048b30b1f60529231eb242204bb412898ecb9ddc4da3eab1689daf089c99a160a2b71e0b370128487b64a55fd33d37c6be862bfd1428809a1bbce8f9ff23ce7548399d691bb115cf7c3417cd6bca9a03d94b77d7fb16a137ba5a143d1d016784937229a9592ee4f8947f0337c85e5b8abfd47f7ab1b63ef341d6e492d204f05c276b522025079df09b6ad01feb3a7f90977aeb8bb708c499a218d8729294b2cb80e1b392604509105edb65b75df4d644c0867904421bccc4edaa87d3d2b91ce14c80c8c62dd7fe43631bd2b896b5d477be3d380df309bcf81411c3b347ee5d64ce6a9bd68495bfffb75564c195cc6c54867634526cdc1ff795318ebb34c0fab841953dd4eec672faeadc004e6d2c28d2734520d73f209e6fdad006921313c5515be37414b252aa5cadc1c82218d785c695426da4a1110de7ed503ffc69f854ae9232c370932c9c0b88e407b2f220f826ebb9299955d071dcd1b9b88f4ac1bbe5584fb172c493432f2047dd9370522dc7a0e8d38d2bd00f742a32f610103b249f89e4455ba03c1fa72ae5648719260d5d9b86a7f8eb521c7765bfb5fb0afe5a14840cf65951805204d268d22d9d6c9860c100866481486318b9612225e850024200542fcd8338585014e1b181e3dd3bc95db6d659d15fbab142f3d262ccc695fe26fe4853df449b41c3b0e842965ea769bc09b5d483e5e71a7253bf37a1a7ca53f0769ce0828d2dde01961457311c85c2e8d900ae09436f2d4fc0b42fb519d495ab9406a5e106a158eb6ec10b3bdcb423a9b62cf558441dc467f8adca01f88a47f47b516c118e5f8762595b9773079da7f34e8078dcb9b806b4c29aa368a14d9f9f3d00ff485b4a0abc258eb0df448655dcc030389c036c924b25f8e5381604012364a34c56bcc2bec69a3bef419729c093ad1eb926781a446f22d362a40ae42e3406f4173cb3408b8856fd1838619412ea31e79d96f589c8b0179901ffa5a0f20a37a24a0fc06fb6c071068257ec8bc98a07b580a9313690f50cbcc08dab0dda693b428f3c884b502f74f6802b858e951ec0b857f4305597c0b8a84fd095e526fc76b507f92b568bfc23febd728e6b122bcbecce19b0a889c0a7cc841476a91a3738539402c69adb04426e402e1b7c69dcb68da8726cf5470f51b29c47717c2efa063d2a5339edacf82b321076cf60aed90ecf89f279988f8a393ca36ab1893248738c630d84641fff7c52a1c00537b06e870bdc3b0ddaf49271e22b13d13cf78b2d3c165eabc7974f6493c8a83ae40d9df19662592bd64bf58d96b002239f0a20eb954b83045144732aa8a33777d7d3887af95b8e2fce45df80f345c75e36652cfd2a9638b2bf3d3ede8d88a5d8900b8f7aa60b08c3139764348a79333ae770a45d938384471da7e1a9b306c7cfdb84656f82003193bddcfdb2fd9eceaea214becb15994d02beb246ed61a8e3f6b38d28269fb5d3cfc45322aca758924269f960c08754b927d6cfff695d7a862adfbf799ea63af8ab467c1ac919eb0dbf50913318d0dc966724d580956d055f0a5a11ba69566ae6c25f1cdcb604082ca29d6c209c976ac6656e30e78fc9f43944a77c73580ea8e867f7af27307bd889133fc4fcf113bd1e76f91fa6905a3ab43be475d64af58b91b49729efdbf0de131db95c039565afbd5c3b5ea8973587936eacba080dcb8d3999f9fdb3c5f8af70c2961ca098293f382222933c14d5bd283a6536a9328aa19b8a994ee3f4683c4b3288d2cacb029d1f31f43b8c2e22ba7b8fc4ee00e6c0ab4f8eb5324ae54d02b2f01c75ed3ebf7e8e08afdd957c530205ac5427a2eee058fb6a844e9e68f53df0f0af1c6246c935626b909a1c5a33e8571ff321e69dd24d5f7e545906b395a58bfd6fee8170bc708ead11c8727e57e190a977a87a878619f6790f54110d9ca6558c49cf1d48cb1e8373279bdaf2a1a2356c655bde53311f3c189ab71b4cd49abf84a1932c1555736200dd002bb0d831d5522b7e365a8038da6996a320eaba21553473a429aeb2c84668c97ccedf312079f00204b05a4f9afc1d52654334891f0b40080d3dcf6431966802af35a16ac02ab5795b9ce50a54966d79e8465dfcdab9fc40abe7235c991e43206d0ae7ac071d9f798a27b00b74d5fdb1658342b9b5dad634cfa4b88815a936c0b6f1dfc1a5acf024b6bc9433c29f77d62503c0b6cb0b211257b76028a1d64bc4b46e651ebc998afafdf075872f4dffa3381cbfba90989c5994d5588bf3d97884e92548371de1ecfa96b14da412ead07a42992bad2e3f06679636337df2ce1c5bedfdf1e5799564b2585f6faef3176c625f6e9b1f1b4cf358b4e9f5318d9b9667b44b86a44c6894001233e9234d9ef2c552bb257005801c5a0595b760c291f9c515501330a4e4ab0ab8eb5c222ed92df11bc8f9f1a9f13aacc8a7a722220a2295c269af111a0a4af57391563af49fef4a8d29725622232a2c199f90300927a77fe4a219b1ce580dfea0771f2d8e6add4180a913c7a05c515d1a9fa98d91af9c5ae8e2cf9e56dfd18074a1d9a8a0f5b84292e597ff15da392f84bcc90f5d3674e0615d62faefa812883b6a29eae7ef3a0db198cf25a2ce78e30b9dabe239e7be97a84fdab0d366c9968946c9c3b805ef40c17accbedc7d05c86e015376c28f1d44c469c6bc0b94613d60389b6f7cf11f060eb5165e0ddeb1ef4c499ffd290e0d3267bf1d5d2f78b5ae6126cf5b27a2e38b9d670e81251d8231f9c5a894228f83e9d07fe978990de361403069a26f18447a1d38891789c8a0228c7645f8716c9624cf7e519141da8b036315c52d59ef560c628b824b0438a17c9f677a1cea88a6bac18d1932a36634ad9c3d38804464aa4ab02410f85512b9310525bc46d3cd706dc0d5fb8dcda47d67b6e1ae03667afa9cf2469e16809ecfb030f6d46dff0ad70d4e03b95733ffa869820163ec027517eb1c8592bcf3e34ca3b5322a46188e8b3735ba58154a3dccd8b2d6c5dbf141d6a447f49f77e718d2dfef2a21156745f6005957082b07165f3af928059f1ccaecd6e130e5b9bb2a279a7aaf7d5a96d3c9c3d801fd6d1e72b093ee0b810c9c22d08bc5a56a6667a8b25b5e7d8e3f9055223698715a9e2d4c0a0e56424085b1819a236364054f5d94c698841645e5cfaaf9a4af8dcc221a84977f829db05a8a244ab37215d8d92eaa3b2a7b847a0c5c5d97ee1a8ecbb5b6a41fb7cde24a2b2173208089665a8e28844a3144dca626bcf62a27ab97bbaa9fbfa56fa9bab40a60cddb76048247e4f21bd07b1f3ac32d20eb438d9c8ab004e1c1a979ebe341628625f301fc2c0fd8509c8a12d2a8642245ef92c9399c0414b51e75f41db29dfe5ab3ad76a63f2265aa82d6dfa5a611e2ebb741a3eeb54f4b639738a80de43d9e82bc72c000c7e0565bcad863ecc7d4948bd860fb9d83b29507bf4844a9bf61e4d8b55bd6c4fe4d79f88bc596dbd68de3a299592d4e60cf75a4036a2f58a4babe179847d40440e84b3546041aaa67bec310a27f58d82ac0e304cbccb8bd607eeeb9095a494bdce75d37f86cf92cdf0b4c26a18a8e55c5176a58c83f372d630601ebb9315387ba0ec6a81338cafab3ce1733f0b9b9551c80b8542ea50797b9daaf386e14a2dbaf1c032046f380b1ce76bd04c98af59917a55441194049d1ba5531b509d4fbe88a24dccc8a10319170872e026cf84728b585f3926701b5c2410fb8a6d7ebdbc9bee875182dc875a15c97114956905034f7b7d96ecef818f76fd7925884aa029d904fde04927444d22d7593c58448c8033120581d9dc90817bf6adcc00d5d0fb44bc916f01fd652b63904b3feeff8c5693818f77999be2d347bac68b252a448f135109d684dd89f81500b5fe0cac1373af9150df2fd9320ebe585120f46071ce091870b87eb01dfde4f7fba02b264f253801d6b510d5202b4ec3c826b30fee882c8042454a6ea9d02b92d361b4273748a3a50fde19dcca14f995a1f202d3a44d9f5872a839ae78ac5d8237dec48b3c6694a267ac63ebf113452bf2ce77414bff4dae694d2e8c3a8647bc69d048d29829e86aa6db926e7e9e534c0953b6552d9f855dcedf2b97e2ae9aa517b27ffe02f5a5d087658477952e2e66427a507dd917aa2cfa0d6d413c81a0bdb2ce218592d7e11c9af76fcf8dc04b5999ea946e25ad80cd7186b9425c77454b1f806e43ffe443f05ee041fe657318c79186d870cf9f14f9008bc905290a346c83aad834b22fef6f0ed42395643229603eabba8c90ba82e49682519b7c215f04c0c2dca1c0f723393df6d4268c926c857b43d38916bd83cb4db15ad454e82675589ce8b2bf210f37f681681cb5107d22a7a622113c398faf72c03ce0f96d9a22314cf58bb6a626873f61976dcd0976e55a05465f2b4bf362b39f804bc05f3cef849417ca9dd7305bcba8d0cfe9d0b482ec79a4798931ccf19618ea175bdaf55aa44df3129a41e5b4a83c52c9c21ffc9e27024189e6eaff0beb9e16f3d9658c5ac35ccd87da9f3b2b84e72e577f4aa74edbd2590d985b410c82ea8b48221a0fbf58827ba1c3eabd9e552033c9af5914a0faf3f327a09bd214675d570accca633b49a85298f56de05b67951d81032b8c6ecee93cb4ff262ff6c4b1f5125e064334152615f4dfa4b9b0c943b01e7b96ab170def317bfc7ae514d6cf89734b1138ecaa04cce7caff4cfab66e69eea4aca7bd1e1507ee440dbb9a6abe48c0cc948059c692768f80f54f523ea4426fb5dbcd2d45d752687c67249dc74f51d7d0448d1e4528ea845d840d5e620d45dc11cd770096d8b68046dba8141a662171c38b42630f47988ac83b2a7fa73e789df40a887c6aafb9a9b75ea8995a140c21a81af8139c810a620cd143f2357a509f2e9fd6e2dddf7b37f5cdab68c5aeebc00a0431fa423dcdb081bc010d52f51b83cda054876ed4f40137c5af5adc36a5bc344382674a7f2e31a8b89b85f8c67f061acafc4d238b1cb4ee7de1ed784e51cd1d7f5bb0a85cd4f59d060d702119241b65b3bc84212c604e7b7f8dd8171af5a6cb0c46c4d0b055d07bbc14ce98ea6608e72c54202a907622e395b24c67a5c8c837a837743501ff6fca83748c1be65d2800136f3ba01a3a6c11164848acf90388b95c6303d8c3e75e941f8536986eddd4245cc76d711371be0fc5e839bb1904a9ed01c007c5ec31457f0a0774bb41dafbe42e01e31caa6cc6e5218bb171228ca597554f13795dcbe3fd4f3d9fe15fd2d1553b1d39b8e8b0b418f28aff3f4d0483a0616404ae9b3f5bf25b44d8a1b7e832dd6d1e8a05e6365f9a3af7c82b36f3e3a80e527f5243d8a3a8c6fdb7697504d20b555d59a65c205060e43c5e1a34bb56c9d96542eee40b4002a2484f771ab95994cca013b93fe14dc862cdcf45fd57e1fe564af5dd8fe257fe71d2a5c97bb04965e08ca638e97ca2e8ff9992398faab847f1751f67924101ec26521e129bcdf468b36b2ed682498aa03a981d60b853198273cc18c716422272c3ea0dfc58b5483162c5d32f4fd63e45912842c5b5d835817d37e7086cb465a7d0826b139399a297f359e649f75079751be7af39f7ac3f9a0c983d1ee43f0b224ee3da3e3abc0ecc718a2ea423f7cc6ae921896db070e1b2f948c08e4423dd1a044888c5ff7856e18b8c398ef8a7a4a37f0701982341745ec1ca1928c727b3a4763dbd9b1bf743916200363fa83141b3d905c84add4044bf09c91a9d5d1e8ac66dc7b13d1e393aa85442f553298ecafd3555156e1cc45759a26832037d0628bd276fe04110d4bfc7cbc8a88afa05cc61389422e42b2489de0f27fa02b8c3b03d3268e3293b379e0debc1812b4429d41737953f8c5d8e3d004087baf15034669163aa0a13253315a68eabd04accbfdd7a34aa368c35d54179cc3d6c5f8c37e591bf402fec0130d4faf6a79ea4867e4194c05b404055e8a1df0f4bc0eb860bf874a8427d2bd0b4d4ad6f956e9452823f97130ce9e32111c59906594565505ec4f15e049261bf11173152a0c6e32e77b306e6a3d2dc2ca81f5ece47ae4700d71e1090f2082d0a0e5ec89d1c2c9014e01b0199f4aba00daba3df158372b1ce6ac4333c0a4ae9403549b03fca9f79e34560a204e23a057f4ddf96ef76957a7b4a0d1f301431169594f193f3c69cc297b190084296fc40b5caf8ce4d077520dda382d8510c29d9d2ad811fdca2fae64042203da9733110000a5956f960d9fb8c09ea3cbb8cae6c6c19e9f09750254e342e257c72b389e525088e71e0cb68e0080a28eda717364cb5fc1f29f33eb02b5770e6b544195fdc14911faa4660ff3f3fc34c59a153a2ed54c8f721a5567704cec6ec3a4e2f36233dd21d77dad62715033e6bb79b91068f43ab4c8a1223c957512f2f4c4b8d0c38faee3c73874d2e61b601338778f05b0b06bf310f25219efa824b708118315799e4fa6fc04eb8405e78184fb9a77541f6ed423ff0f3dc5e8c40a6d30abb70fec9bf69bddacddf4ca2f0b1e87ffe9b7af9ebf94ee983350c7c70038a85de885d308cb2aa0e69abf436b2544f645b99db2827b1c6c21fc970465b8d010b85880d0561363368308eb248632c1c6f0a2e91ab270ed3ab08327401186ead6f67c10241b5a21f70ec3fe699ffaff7a2831e1cd45757b56dfb7fef2da59452068c084f082c08be9bbb09662fe13f00a126dbbfe13c9f1a58c1337efcf8517b415fd38e6bccda87f15c7482ef6e81312021813cd52d1086a4f0c7c56e8130a080c320069983b9f962f0d0c96e81306cd1d7f4575493fbed9cdbc6d1f4432a69212a7c40e38923125ce0071c156a2042010ebe276a80a27f743120290aadabd5d7520a9c95f582d146186e5d3f87e186aeffd3178ce8fa6daddf608c310682898e69c0c138084208d82ca5e82b0b0a9cf505a359a07f6ce1a8ebe716e8fa4d17bce8fa5321ba061a49eaba851abafe1aa71c5d6a7d8d60208b1bf8bd2e97a6e31f41c7ffd204186918a14415307058a451c60d48b6e0820917564a4ffc527bf7589785226a3afed6ae6517a0e8c188851a44d082110a22d0d170431520a4a8a0e4440a482df49044120b5d1c29a2448a19b824519ac841e901876ead284c3bdc72cac99d8c8e7f75af552591037087293d281012420a219c808104154f704d0cedaef09c7df7ad14383a1e7b39df20b0a0828c25903c6902038efe0d91200d0d508125a8d4811f5a39e738726f5664faca4aa30c2a2b98a263e0ad49c7cfcd1254707ba2865f1859422085d08f490a7e1728a3a8c401313cb0e4f109856356d2a0828c8e3fc5918e924cd80934761d7ff9d81a99200c1e3880c40b1768e203b83be28830c040a204a527353ab759b061b8fb0649584a3b451066cc306a5de6e49b1444162ab0172c22297649d7af7595338ce83a0b0c5dbfcfd4cbb3fb25b7480ac00207315220840e09cf6a215405ce09a49b164e9498d8420732c4ae471d5385afbc97af0a56d02a8190a2ebffd1a31f841046c8d96aa14bd3efdc82b4b0b5c6aedfb0bc386b739ffc1289dad206baddb923ddfedd1965059944d6e6fe4ee1f69515345a9afd6bc989bebfd4b336f9379249c5873585d4f7777084afa34c473b99f1b559dfcffdde3f0181c1f0f32ccd254b3d4bb36d5a96b4e5aad34993cd4bf9e4892acf0e90700260d7e9f4b99fc8f2732f2f2b68ec9ab7f12908ac9768c9e4636dcadf8ff29dac204bb39f444d224bb3ffa517d4379f8539855b6205a570c5d3e4e3809a0ec3dfb336b0be5ff3ac0dacc64e89576fe80e158dbb530e79deee0b87c8b11cc23928f0ecf286aadbdbc19914f0f5b5ebe2ab76d9768021d54e853c13bff4af5db6b9a4d8212c07a917ff05f40abaaf9d0b8a175017dfd5cbb614ead2c2cec4175d23e8a2abd745d795ee0241175d442e2be1fbbc70495d147f75fd449173d3fc4fd3f5e2baf86b2df4bd7c5e3f2fdd0b87556bfbab07db46287a2de9e2bb925e464038400896467c5710dbb80ba902f7562a3b40c2d7dbcb7de7fb7ef2a5bb4a68e95db99328ba8ad0f7464d4896a6676d76d0da945e5cf5115bf4551fd153b8bd77fb3e0181f512da2ab234e2ef53b57b81ffd5659b6a97673d5625adb047ac4afe2ecedaa05e3cbdf8d7c9e5591bf2459e129fa7482b543bf2a7e27511752ac9d28f25f4870350c0a9f82a649b0e128f6aa732c2ea4afeee56f1b06ab1ed4229523d51f5543ed514950a8c74f15544589de9e2abac141d61dbc6119ffcf98886baf8a9179f2c4a9147f60a19c4800350b036e41004ac4a5e41feec15f2a7daa97623308004abc1c535e0ca40022238f4f103200017c2956108d8c507219c12fe42dfd520ac22b4e2ca10fa489f6ae7b2237faa1dbf91bfdb237f3b18fa6eafe43321e90c00db544e543b9c8aafda75f17fbc7a3041de13b3288aa2fe54be2af838e23da61f9eb5c1c0f678869f47f93ff00cff05c27803f426b548b8df7b6f30cfdae4d726d164d953ce0726f264808b63425db07986f19fcce0071841859bfeacbf849cffdeee8bb70a20a970cb9f3fff8ba20a1a6d400838c50f02119c62ce77dc09e7f1273c28e0540f8155c0ea6aaf5400db2b3bad829de1c7ebf3cf28d20741e08b9d6c28f75e9c7568ec3a0ba76f050dbe1a64508284955cc94a8cbef8692ef66ec41f3a624fbcd1095f27bc612fbcd179bd5e76369e3a3f7a373f747279a3839a650c05bd1b8c37d8e028e9f5b2e2d52788d1f1fd27aa9f7a2773b9cf1b9dd4565facb31651f9535ddf48e1ebfeeddfd5e0f6bb7db24d4c5d4905534958bde1b09a798e15646d7ad8b60f9ee1e7d1f1fb94363c9efb099ee1e74bb06d036da1ed04a8e3c79bf7736e1d4e71ea084a4f1da5aea48258bd1ddf1fa76c28db87d5fbe2bb28c15347a9104d5dc1297eda8dafdcd43d6bf31d875ba34dc48fd16d014ca2019864e40c6016328680598c78c02c3e60161d30cb0e986506601617806794610578c615e0195100cfe8593265fe99456b13ea1d8a63c974d2496bb4adb716c52d8aa1288aa2388a6249144da2488aa2f9af51a342d6c84da4254953453b8d231ec73c8e7a1cf73886e3288ee3388a288c966620c457d669078ab37849a27a53e4e0f9f40ec5b16422a7e0f97a3c2889996e178a63c94496a72474bb2026e9c5f98c2513599e502926389f9b4352af0b36c538f4f837a92a96242ac555a5eb8255ad4db3aa86e492c25e3123c68095f66badcd8db1cc67a993e6cd07f8d772839067586dc068de924def63989265d3399564f877eb9466adb24b86e135b88d729fa9f95acd9a05f8aa5f2720e4595ad45bb334a2310678260b3ee294c77dab2d0eea34bfd467a8f035e5a895196d746c6fd9de38f64ef79eed9d63ef99bd697bc3c8585952c95e66396668343a76d45e5c72ccd06874eca8f17069cdd06874eca8f1b08025a29c46a363478d870517d4dc6c60ad8dacdb9a9e694c261d26d30e93a96632f130992c30992e30997a984c25f4e647b6f13c62135dbf86a495d6dac4ba7d6b6d60dd3ea943a6c6c3820b7a60a0da76681ebe0af0c3ffd4ba9b38bd7947ce3b325a7e37b18a2f5fc78e4bd3021b1794af6e7b9496c40066ccb6b146b74fdacc0c6c34d800001cf8b839e9d464e062d35a4283d25a1b5627cf20610fd1918330f411863761d8c310270c0310863fc230270cb7ce40c817a43c9d669e7dea43eb1badbbd6385a0740eb1f5ae7680d44ebda3e6b7a705076fbf9a6e304e047ce4927beedfb9d7ea4e65aeb31a4657de27cf7bbf217e979c53da3fd9e2e215a6bf4719a33fa32ef17e93607ad616f9a763ef307a34ef56b74bdf9c41d6b0d7b6b6d0a21c63c85ddef8ba2285e9f9b0310c7ebedbbaf567008761e8c96ebbdb6244da7db57c04536762191dae2de5bdf8cf35d4b7ddbfda2c5d928ae06d772aa1f67bfb8c5dfe2de7f83f7db6df36c4b3980fdacb5b5d65a6bad4d885b2b3f3d2b3fbc9175f3107cc311d752584bc7310c47dc8843d37d10fe5d22d52d231a85edbd35bacd1d8a1687a158e2712c95341dbf7ffa60a7301359a65478695175cc29154b9ab05dc10a70441f38a24c07523a0abfcf4b2bb3444a85dfcf39a3597c94fd26248c09da14399cf0fb6f9e6e3996f8496bd2a5bee69c338c097e73ce39a73f86a2cc8fdf0f6342d04b69157e5f6b74d4a3cc137edfcc24b6f6ca40c1eff39cf3a92c6df8a8d03e470969adb5d65bebadf5ce59efbdcd12a551bcf57203476936d3714189b3d66aac26ebbd042cc7efcb9c7244f408bf7fe2b8d6faefa3a71c9d734eae295f6790133b410ccde664e3b5c386cdcb6683cb6303d205d3c3b5010c0600d07b09d17cd157df1700b8b45a3e6ef6a640788be49b5287fa6e4df6129f8294fac6426b179c2baec021c285830068d64d2b00acbe7fec8dde7881dfd73a005aff68f951aa4e4190d0644e900ff01c94d6387468f282111760ab096bd154922792a603cf4fea5d4cd73b4b837538bec0f016d6d770d990a130198dc7053c2eb0d5d8941bf8c0297994b41f3efe8fd27c85bcb176ca19d11b38f0fb3b4e39a20e1af87d1a1f7e9f9663cfcc4e3999a643b6a1767a8a61c15103e48443169381a1404a9b6d25ced5396d07800e29839e317fa30b296db69970b20e33debccd836dc0da340c6fd878c1b88408a05443003ba5cdb611c7da1a3be5004a9b6d224ea9cf09f410bd7b00e5cc10cf0428cb1d6e5a4ac4efef53e334974c78eea0e4d966fa8d5332956ac818610ac0036dbeb45c580428693a70fd1f94acbc43560cfcfe5eeddcc23fc03826b456aaf16a3219c8277eae8b6a39b90038f64994a9778e80cc6fd1e8eb7dbdda2082ff98ea1c08e4346ea2cd1f1ca087780614b0c04f4762137c2c1a6fe066b7c09c6f8bc15dba05e690206bc8f1503ac251dd02733913952c53788d2e3612677d20cc81060d904878ab5b200d3f10dd40060db89207fe428689049c7361c2c25b400002be7a22fa702e343ee12350d8043fe540056fe91638c30b65ccc002a9032f750b4c82942498440a518791730e8384696211dc6ad48048bd94e3c88310edcc242fdc70a1927be921014c8b0b979e2ff68a4ab0d553a56cc1b1c69e9faa8a6fd5c38115b7d26be939a24c617153f53431a1b2b8f11e252ea72b7ca99e9baa14c10f55068af402777a8c040cd20404967cd4c2540a92c58ffc8d41b008324171128370715452021506292a1a777b07011e893ea60ee2852f042281a125ff768ddf34465c8e23efc207cfec7802724a102d8680321c91bc205bf4f0ccf675cc19b90c45e3948b476ec25c308d80cb740b94a1862878d92d500618c4263c6546998473308ae02f3f25784cb7c02347904ef8770b3ca2c4f402bf71829217bc4695121a5ce5817107dc1347fca55b20ee02a114dc4ff804d7dd02713e09c0e5a60063f0052d8951d6a6b4e0a44b4fe6bc4f3aba83d2bdb72cedb35233bdcfd4e94f4fba94234f9d39ba7e8eaa51638371bd6cdc88f95375bd6cdc88f9137d61f0b27123e64f54c6460f1b3762fe44656037b2ad5d7023e64f540616ab01e32aa1f6a74a27ec7ecc49e7cb7b96182db34ca961e58e95e19695e2de16759a28d4a350270a85a2503228140c858aa1503214eaa49fc76b7d6a8d6a2da3354ceb98d632ad7168bd51d9964aa1e50e940c2c26c391ce344aa6d4018bc970a4b31c1a46d377467d4c86239de598b1a3de39ac5e9a8575ce325ffa4ffa4ffa4f393276d291951747894f1d64bd43516f94c53d70e4c0a175aaf54ceb1c5acf684dd39a466b1d5a6f148cf95203a684427dea7c591ef74fa7eb04a4d451282b45a16628540e146a0685a2a1503428940e146a070aa5f72ccd816326bd1aa479bc1a8c77476cc43f4385dfd7515a998e3ae9ec286fadc43cca6c41a92f28778f32d418683da24e5ed2faedd1ed06fdc246b2646d4aad7928742dd251443368f035ffe9d731ff2e3feb5deeb3443fab3997acd2c973aee5cc23670b72be20e71e396390b39af32886e64b8dbcff769d76d29aa854cfbc1a29a4ee4138b57f519710d425042dd2f117e9453ab6d65a24da146402c2a97d9b7336e54c3edd3e370263accb5d74e3ba498755206c1b71ece7d37df2de9b4f3bb9872f9e14e8a13ef70a5d9fb88ba79c8bf5cd1706e3c726fed278dabca2c06bec84205d42d0d5757bbef78bf433058c4fec12622dda010c7c1d7b88ed17e9b65b745d40d719e7c738057c3d9881df05d84c8594a902ff6a5fe3f4c7af137e9f94f9618c31ce18638ccfae79323f7e2dc652c8f49e38e3f25ad1fbf17fccb6fff13ffdffe13f9be9ef1de398fe843a16a6cdc0f39322cee009be6ea020af7e05cfa5fc661e737a1d4dba3c2bbd49b7733bd77527deb4249773d30c4f4076c880c0e29874d9960a32e9627a6a8753fc2c247e7f4d058deb0afd5a9afd7a86fe38e4ab5744623943c4c58baf06632aa863932e676d9af59902cfd8b1a5d13fee6b69f0baa2626df2dba2a0921318c8d9331ada8b517a6b8c5f660ab73659b376e48fb4d6265b8b16c1efdbc718636cadb55633a1c2481a5e142521f481121497264bb240028425053f1fd8a0561383afe392f54a750bfc21a2afb028bd00c8000432a24911b91294412b8021b7812f92d0a204c5912f4a26e81114aa3a48e38a0e7451c605988400076723406c293815a842199c68532c9d3d6aff3247b38c8108fcfcc2008ce189f9294cb7c018727dad79203bbc1dfce3b8f2de83487e2385d7e4998f8984e068ba2b12b0641282a69390dc4dd6e84884222247403797f20f21ca63cef77e60a5f5262065db8f5555716a8fba44dda248d5a94046472460210149cda93f6a50aee3bfb8bbc222146156cb4adcf9d9b1c01b903afe1d560bab6575a639997c71d169a16b14a21fe40d43445188a2104529b234b67b90fbfa0392f1641bb036acc72f5be26ad07afcb2273982d6e63efe9a2d7699891cd9bb227225e39cafcfbdb86cbb38378ce04f8c77ae865819527473983fc6cb97c7080f8ee7c69323010b0941129048485a6fac16f35fdee5490866db0a3922473e63200145711484d5f5c4edb0dc769c6075b5558886106175f5f8895cc16aeef88904856e1dff0e0fab16884351c7cf73e331c283e3e9e1c9ed1387d5d5a5cbb992739413ccc1928384d57bfbbddda6713030071f13924c40c26aebf19f70c32aebf19f6004ab2d8fff045c8bd572a34c31519b46aee37f415d778525d8c68a3205ff0a390ccc8117654a9429f7e67ca34c89323406d218485b14757ce2ee0908da63bc5daf72e23abe6b8ce781cfd25421ea17b779d6c6e589b8093aec829aa0b334760c240f7c9606bfd1143ead5395e1ee287fb54647f804e42c9fbc27212d2d6850c757f0d429c8d92faac20ec72feb548f581afeab8de2e875cbb671e4dc345fb702649c1d9f3cc3dfc10bfc7ecba9f6e4c69173feb25596d3270f7cf82c0d6d06ae06e154457de914e4d5551d4e3146b5b4a06a0ea733449c7f3e09b9b7b7a0eb02ba4dcfd2f4c0297e972e9f5ec5599b1cfaf8364e1597674026b8def2f9839056d6229bc287d592653dd9918c876d17c94e0645e693fd6443322bb222999151c72f0beef8ece8b20de6f1dbdc33aae64655bafa12f2b7fc9a336aa2344b839fe354f5ab956af5ab8a539f607595f17abe6a4ec561db3dd2bbdd6e2c2cf1c136171cfcaa4e055285d41d565d3a7ed509562d50075ec7aff2d49e0cff2557e7edf8b4ea176d62e36f705671d926e3611ba88c87d3264d6cfc2ae3d9786ce3547bf00c3f89f1fdd5b7bc3d09b9aff6e0149bac732dd771e5ebeb74a6707ba9926104577d04b653f8a84a3ab6586e635f65bc1cab8ce77aabe2708a614e2345ac368a23988aebf87b10c1579e86ee3af1212d997a9966ce68ec8e6c009514b17054c15d42f04df3d7f2d7585b910e3849c2f305c18be2054efe1b6bfba14489259208fd84488293dfc508bea66a7e4d646d5e875a8b5a8f5a97b436694d6a3dc2c26dee6bc35814f5a8b9f9816df63700a09eff03acc67afe03fcf4fc2060f59a3018566f589bc182dfd79d352621b3de2914e9ebfa63a98f04b00037bd29b4644d6785dd9616739c9e4ad46aea6b52e7c19d85d37bae66ce18e37d57a8d2929d54adb797fa2d716a2febb2706a43d445ef9982e9a2ef00fbeb254e2dabbca70746b87dd2b2562daa564bb7306aeaa624248e2bc3316bc79c73ce5a66a3e129fe1853ba61b241be4ad70906552365f217958bb539e79c67ad9c572cd6aad5e2a27ae166aa060ae6e42a5fa40dd38d52ccf8e219a25b46c3720ccbaeb538acb5ac2d388041a02183e78c0af1fb786f203a048c891d6915ad03d3589b6fa7e99c67768e7026d6a4a5bea9c1612ab5705cd64a32c6607db5d65a5be69c33eacdadb5d6799f300efc10fac6aac5064b9be68bb530355c302d6b5f7b5ca55f63696cadc7dc507d0ce77f2d8de601c4d1b31c69308e429f07d049a60cd3b48afe570e33e79c61af3d536a6bb9d6b4121d42d336c06fcd4ad7418377e8b8b572870e1ada4c8eda4d13246d097cdfbc20f85e6e267369adb5dbbe6d65965e6d131d82bf583d6795c8c77114657e29da1239e79ccdf451266b4fe4faea76efac75fe1a1657ad2ecd708b7bdc7b14c3d78934596badcdb94487e037e79cf3c8472baac251cfd2bd2a599a51b34ada06f87d9b576b2d1fb1cb7f8cd6341ebf9f2dd18b9556d1fad234c0ef5b1e57a438643158a64d315af4c4eac7dc205f2e186eaab0bab23f8e586db9b4bca84c5e23053383b55835759b8fe0d817438bd50dd331198ed92cc5214bc78b3715a485ad3b67946d467886bf9767f875101b75ac7f341dd4c123a32b57077550077bd9a6833dac833aa8833aa883bb8ab006cf526cabe9d1a3f6fb178cc5798f1e3d8430e8f163ed0b7e14c37df5bd379380bcb9b62d80f11a9ee52d819ed1d1870f6bd3a356737df8f0511b6b298cf6326b96e6f6b2163c6a250e4df39a3fb0f287d95ad8f8b2b6ff2fa1358cdf42c18f4f3bb5df7dd9b734f83e931c290ecd937533db4c36d4dbbca9c9a0d786f8dd19e8e8641d6b6375acc5d1180bc5bacd36fdd926654f39284b73ca41a1ac8ded97879f8e9a1aec09a7e976c7f55fbda3d77e5c63d5ee9799b5996d3d3094b4a604bfbfd60650b334b88769be82b5df2c146b459463b6599c525bd3fc0f686da5e327afe0141fe9a310d54756b0fee1996ddfac603cd47fdfb22def5cdf47d9b66ff8ef8d07beea2431a440eaebbe6175d559b21459312af338e67db3367a48ff34519a05bfeddbed8a9aa3e31bfc03dbf2e35721db323a429ee1ffb51c61c6d4b67793d294c0435f73aa0d6175868ffa1c874c5e668d6f46dd581a7cf50f697b38eb501cb1ba7d38d558b5259a137edfd292a021413b82dfb7b41d0d03fc3ecd08553943c457db6b09617ca9121215b422f8cc102fb17a6ff414ac6edf8f6b7ead8da509f1fbd6a52cc00fd7bc9ad18d6926d1f0958eed13b56cbb416f94f01bfe32be94b40bbcd4286db685b69bbd7dd8d4b70fada1e5c78d8e4a6fdfb536354a1a11fc3e6d087e9f16c4c957496bc27f1cb9096447df3f9cd284f06d5f9ee16f8ddb976d1687160427634a1a10d7bc0cfad9c7917373fbf24cdf3e1a10fc3ecfda6450c3446ddf0ea649abd1526b823428a28024c55c0a4ba1891c714cf14b087ffc351c41087fbf188ae1288679149b940f42b68de548d4cb6f52e6b23c43c82384b0ade934528446d7328f78f462173131225e7b2f0efa4a612dfe1bec72e36b891fd8e4d62d50889fbeeee8f7ed50b74021843a792db0c9937b814d9cf41b26f1a1e3bfa7d10afefd7ec97ac1ae8f1db738351a15be8e3d1c47ce313a6efd61defa1d90a663c7a7ed69b6599c2247bae8d11084086ae06d11c293209cf8d1c00b50d86091be68020ca31d1050860a98800b153031c510f0871afe42072c7dfc3d6e71dc41046fc9f4a9314d6bb59a9a5b03c3e92d61ff0ba727211b1dd1d7aad577c5d2a842d70ef705ca1169000a3c15b8b76b44278f58c86f42fedf6ba488507f087816e2107f0198dc104e334b73fff6503a8d1491d1d51cbd2047ac9a70b9e825587b12fd7c3748c1111ef02bac13fd7cbd22bc5d90ee7d5eb98be3a2e3bfb8c8bd2690b85b7d1a93f82409ea2c9c5e2b55c4c0012d9064813e65f4d2144825184e1fa75797fa68cc6068080b2c2c0ed7d6e457f0fb2b27a213c48409ce70e157c4cb52c0308192245984704892053fd2c5185f34b1e28c201c5b06103fe4a043c2830b403896d747cb9114d1c5600218cc7822c51762485144072765343912c60c2cdc6ecc0998c8d7bc11a18cd1b262875cf240153a2b4c55403132cd84e009253bc89065091c4e911c3280040c276ee0698144ed5fe6689a9f9aba059ae1435f6b3f1c1a914944d3582a998ecc78d2c30c9eb6dc8c0b5c20105ef4b25ba019429b06191b80371c6181059f0d255f5fd3224a782d34c1c4500bb723f6174248b6d8e18631c22849e9d9d0c50f140f0ce1a0c4128dfcb59fa5afed08ce5a1d00eb813730c3875f5f6d2f0446e103133462097c48828b201f9884388eea16e843121b7c68a1089d0a44307457c613e8b4d049b1828950648008f18c1ec6d021093fa0bb01c14b2c29e06418a48e978a3e00eca103a626c01e76c01e8428c500f6c0244b0f3d401e567062e9787982d211fcf4c54802ceb11899f09726c22bfc84040985af7a10bfe0c186310b1e707de5231059803b04813b8800b8c3145dec80c4163b106165071c4c4e76388243127906f0e78b100de04f153f007fa00ce046879b4f760bfcd9405f53fec38761f82bcb836d431b5a3bdbe78b65be34eba53908d6daf7b212a485adbbd7f3934596268fbd1dd2c2d698d40fabdc27484c67f97e45dda6d6981e4d096fe9fae64120dff5110725e0f8effe98dfa542da3474fd498c47de9c73c49351ab8b426fcbe7157ac915ead59e5771b809de82f2e0788ce026f80abd760a9fd183a0a5c1aab7c1603018e45cc75538dc129c4e85ebd1e1b07a5536f0743a9d8b8b908bcb10a2286e26c02da332aa65857ad1ae25ae25404128d410a28b6a599d6cd05d54cb0ad5b2ba422fa26b49c72e1f21d712ac6621b9bfd4709485a40849110ab738068d270f3699f5c9836c6f2e0ea74ef8a5f5f82ae3dd558bde1e044f266b461440bee7d3afb6cace3a29ff77d9a6e2d6d76d95862cb792e596e4bb4a23b7c20f904bb7c20a77b5c2cf6ab5d22859aee50aca362ecb2d91f968d4be1ab5d3288dbaac162aa2aebb59ace012294ba42cf959a12aec3a68013793e3c089d55da136459606abb2229991ecc8daac1eff4ccedac4b45a375aad9856eb5badb3d5425b2d9956abf5b685eeecf876a0e014ff29db4c40ca3399b9759098def22e2031fd7e6e416344e80e2f686d2e117f968a7389f5625362be55beab7c837cbfa84d51ac84fc311f4ef16734d63b6353708abf898da1980fc7a0c47c3128b15eec094e538b74845e6d16368bbe9e3899958eff44a5af325eaae26250624331a2d893582fe68b4d89fdb05a8ad2efd973e24a01f4ee4dd0cd09a239abcf674e8e2150a38de24853c1f98d4f9ee16c7a6cfa97274d67fe1753eea0878f1df4f06e4292094827cf6db55aad3e9b908453741d5f7ee5665f1de599fd9627edc983e331c2731ba1df6f395339f5abfcab15cf8d67fd7ed1136e38e5a00abeca783947d9c6338e7c357b69d757ee53c918ef757bddc8fbbabd8c48c1bd6e2419e3c578a10e68076497b8e8d2851f58e14388b20d26697d756bc4857639de13283e98204e71d0cf49afa8e357a7047bcb2a872bf7dd9655c6b21c56c56f59e59c5b7f5b5639af906b59dd25be8e5fd6b2caf675ca294d9824d74d0a0e26a92c97e4ae455729382938293829399823982b3041ac1265db8dc76ff2217fe5a9de8de2c894d3464fb65c41315e8cd7ba315eec49ab7583eb8d84605e8d60f5be6e368ddcca25e4da5d97bc422ee74be48808d2cbc8ebf6c2bd7a5e3917eb52e375cbb6dffd2ec6332169e527e44e58e20ac2ea2ad63ba1c786a08eff041f225788048960218284f915e148842b2204f3b5691c0bf4d97597c73fa46888d1902317db82935c6aa0aefbefe4055da324fdcec52598948453db73ce51928c6c7286e8ec26e822106469f0df089d373b9c8eaffa1bf29637423741385585f42c0d464f219cdaf0826cb29caeab7e5571b25cb6e1d0da57cea93b7dcedcf973fe9c3e2710ebf439979c3ee792d5e4d3571577e6ce1ed6ca376eb55172360a2b1dbf4ac6b33da1dd6acaf595fb56dfc699747bd7d77be2ee9f40a71056d7f2fbdbf4edf4f93975582d45d1f19f4158cd39e72247c82862a20552169f1e9cfba6b515e9c9a288294d58f164090e38f7edbd3f3e617014583cb7f0032b3fbe8ac8d176e5e0de438844285ae20394555af5274e9555aa1319a62a906483aa1ba094a73197a711cb9ec87ad8a68572791a4bd59f54aabfa79cac42d728c1d084bf744ba16b946005c2f0869b2a987f8d12ccc19cd1350a92908c020fcf2ddb64bc15baf2fe328267a91327429115c108e73f71aea0df9d3d672eafc2d5bb8256ab5518e69cc7573d91a36c1b422442d1ef744022188970b4bac14998ff77210e4461b85aadf20a5da3189d50577e571e6205db58518c861061200eba95d1ead7284638b5abcf79b5ca4657d619177ce7498cc78b3d61a95a6456f00cff1d55e8ca795e4d272a4e7dc26ac9d8484684d39ddd4e908cb7a3db1172c2b3cdc64ed00ed08e6ee787ef08e1147f131b3b4f02a15aa8544c99ac62e9d0940000000100a3160000200c0a874482b13089f23c0cee0114000e5e9c54625030978823398ea3288ca22094318610030800c620e010a3a2510029a34799147af07ebeccb620d252c6f5e1e8efc115e723f6baed8636638d100772c669305e9f0f76cd753016346656a097ea5b04c39c576601544183d997afa03f37c5cb6aed1769845714ae596a12482cd2caa09e3e87be88adcaf9121be52888daf0f6e2468598dcbe3c7f2c97603a741403af798e23a473959f380226ec09bc2b1d13e765a2a9cb77b672aae271dcbce883763ee857a064a96402bc1ebd1c0506876bc076c83cab323011ef3607f9f488df73b0e82c30ea33ebbdf272e8bb5c240f01d1ad2448eeddc984dc332a1a4b49fac2afb42fe1448cfdbf6af71aa9a41865b4a205a9478894b401d86c5571246474b868cd3626acfe109abb82be722ab60260b67633c17ca9ba6c652640d278306b312fd45e85bd332ac7ea024196757cf367e8d8cf5a52c59f5d1c4468bc4fb24c4a56972466ade505b4fefad9cad878291ebe91f38a46306a55703372c0a9b6cae71b172c9282a9085616cc453253a491f052d13b48bc090ba0a41f864f0aeb83dd928b3a098991645645c76efeb98f8df362065bad29caa1dc00bbc6cf48a9f1e8dac2ae83e5b1206cc37db3b719cf901dbf85199c6b5bc1794a9f50f43d1d3140e32833511a0a4c88db480e572a3d1e50933d3a392767c832f0b12aab21bf750004ed22b0791cb5ca576e8bfe40fcba6f71bcdc91e3be5e709751fff6c120834af133f9d37e0cf6883b704c68775d946a9837557f3df6bfc9ef4a532eb1fc60c0f722f43b8c3707964e9d8bd1ebefff9a4b013de5ae486fb9b3e8c98cc798a2223957bb6a033f74402abe4997846eab13bcaec82f2d8453276596cd9d0fab059056b692167e7442cb56e42874e881744a46df69c42eef9e7debfa851ef34bf4b330c9dfcb8061e483e6b4f41a342e0eda4e525387fadd3dd245afb261407160c869f73e3d2203f6ce22407e2b2c09a91af445c3ae78520009c04dae4910dcc2329c3298c13d70c7507ff6cc7ed951df1eaf1e81a5be96dc81a96fc50a4613cd06787a32cad7c6ac850d27a4a7d8ba0b1440e17f9d5a1e32ad2b4d853b1bcfaa4aec043c7adb983d926a8bd87127dac422ef722332e2085d3a922ce5f9e71e2e060028e2aa707f725b9302e52732cac683f625c866aa0e3e773756e94c9d89c4d1ebe7c0a1043cfe2738a9e6725788740101914945c53576115e8b08605db0c8e84fcdc7bfba0a5bb4d6a2930269a9417313e00c0f996121001ee5dfd4c99b2dd27dc5f3964201eb3fe981b8b771318be6e23ee0ae1687503335d75ee282e8c917fd6a56a211407ceef2af985e2d9ec9d239aa99babdb4b2e64a293af29c62306dda6343015d65995a035f19e97cb21780196e6e482ee817358fa78db80c31b8c24680cd06bb93fe6cb576ebdc71a077f38807b75e15a8cf4ef5713cb7ce8fa7367a74a8d23528c8235dea510b6ca222b26b03275e4afca1c93f4b0eb9e8b726a579ff41350c5e047c3711aa3c9bae41e365df5d31413c01d9f0f8b14d6b322618d15da0195fb255e73362b8da5b996cf650a57209f2cdb98e238da12d1906e9fc6f28a06247e00c5f9d59f92c4f7c974daa3f29a4a1695bc427984c8c2ac9f746468e64f9f6ff8b52a61f3c9bb08150a8a3572c1442319b86cf3b34c97e91476b04857c0601ccf91aca4dc568f2a9d1f8b97a42c51b0886a6237015bd587afd0725ee134cad44b8e094ef7834290a9e97a739406ed44b712cd2a9b425a4d63915fbd9807f173fc7cb6a92b9f7f231b6f1807fa82c7de07f5573b5d2151392ee34c57c7a4db8e23255c568c41144eaa765e4af37dda062248af45bbd0d3d01968b54b6dbdef1e92aebe88d8caac77b1e4ad77949b33db6935ccbfe506a1c0234236633dd9b25b21879f1ba0a11c19f8627d863a1e8d19dfec96df3a0e8ed783a435a9e8e935810b3bd226bda721d92f3b158fa9119101e2b196ed583cbc99472fceb6dba26e1f5364e01f991ec9a117caed53e17d792473c578161004c599e33cb3e23d20eba858c8f7255d9b5c74c13ddf6caba9945d4a8f3e087e592336d01bac7c9b37319bd0a06bc75a1155f0f4647a723f4749469de6d344f1cc82457abb61a690b500b5f9f1a813ed4883cb3f15d7b8730da19d40bc2962d5acadfd6d07243424ffb6b3b5290cf1cef437c7d8aa3fa94cf0dee95df46f709b9957e9ff0d391c2630ef858fe3fb46efe03e827c8e080d02e98d754405c6e656479eb35bc626ccecfb5c85dc9d0c2d727bd21203dfc23cbb96fae9a7d90570f3e1187fce136825d0a2ab24fba0a61610f2671fc7d59d589af4fb174cfdbedb44308f7601b89ce88fbb8a6be6eeb8276cf3066cab1ff891eafa8d1b73f0c7bdd3dc8311e5fe086be7dd535d0f6f7284594fd9b0dd15ecff538c7e0f22a83cfee8bfd066cf28bd7d3738044f45111dee5aa1e83b385b32f5ade032eea3338919bbe5e575619ca6114e7c2734dd8fb7881ef01ec7b46bcf0d7b3fdb9e61d22674842f1588105dd80b44be316840b7b0a45437b72dc834b4bef16fdaa067abd48b1f1d08ca2fcfa59933253e328054c8f5fe70b0ab4cbce987cbca62d227504b1c48cdd88d085857ebe7bcefec11ff150ed53c6a14d2482406618d5d720d4a269198838187ef51fe7cdf988f0519c6daf44d01fd2001b5348d2fa7df3e8b0453e3f3a27401ed04835e55d95091988267d06ad01e1ed8bec1fb7fe16c7026be4bdc9b5bbc0e0b34bf960693b5476dfe7947ffd9543d2aa6b8feeb449291bdffa652e2eb8250692b0d13dac8af9a0bab4dfc85adb76e6b58119122453672bba4e5d08aa188bbda20f972ea3cf2cda81140314f00afadecf12e731099d54b5a76cfdb53e23027532659e3d9c3880789101e14ffd63553cc17a353d63b8b1283e90ec8de89ee6f31763084268d8a1f5d951b997c927e4e0093a530bf978d5eb4a0d33e865d20578237e27d2352a1b3153db27bb1210123f104b23781a9a9cdc27e9b9965a3122b063aa88ffb9feaf89c01795785e32b5ddcaa45c8a6973b6b17cd31fceaf72eee8895e31ec469e171c15b276d22bb5a6e07202fba482c1c12ff93f084b5d646c7ec55fdf363e2e91fe1f8e0e6624086a67918b93dc0e9342832fa90d8aea513577b8c54f14311f727c90a435274139ac4c98e1be79801aae3542b5dc8fe7e5da0f3e26e932f96ccef5fc61d693776a7a4ccf5c88505485a6a7e0be630a82a070c37eda35d7946f994fdf7bfcc3638b3d934137e5c720f92350546c4724b038beae74355b91b9d9963d1150d992f72dadef8042520c4e4387c4343ea44d640ecf7ee1ff2b821b574498822d0c835fd15d38385c41740a02aa0d85d39a1d101ff95c1eda645e8868f87cdc373fdfc0243ead9e243f311599e3df98616483c883bff700322158482fd759adde25a74f7d633c3781eccbd18941cb936049e97e4a7bbcda7ddcc505ac444847e4fc69fb513d0049ee0293b95d0f6e3272d5d030eff2adeb4b3c55f3eca51d33d88c9089da44ac9e79b7e6c61f838a1b2d8c8acbde915fd42f60e7007cc7dd9463d01efd1877707ec1b84e0630275c045b477fb24f754285a2f024c3b8190a3fc136f0f76f40f8f841e5cea1e877d572877bfc853d8007ce1e6554d26380f417b0a1101aa8352516a69d4bfa23f60da61a1e045eebf8ab0d0682cb45e38bfd3ae43ae9c77c4c778199ef75a64236e1eebb4a7408fe15d2af49285d733ffc8bbde45fde1aece14e80abb8abeecc542d642489c84625bff3cebb2af4f40850aaffb3f4ebe3b775d384e200752eb6fa883ba80ce1662f25703f578196582d621e86998c1b620f7c9e78867be08e89273e580b7c82646996fb2b53f80a98b8c648a5fa701a1265a9890f8749356f7c9ea132083571d5db0a92fd2a7b300296f72dbbcfd1d06b65e5f56ee4e8bb7b14dc2eb5689723ecc68e6adb97ff7059527086db73f52611a9be826854eeb06563b86d93f814ec4b3d6dd901887036384a678d128f0324a05de433418bb4ac745a4c3f38b63c33f0872de3a0009fa0b6bf61cad9f4db9b11338d1d93b8fb414c4a6fafecaabf78376b8af225e3c3df63a171cccd770022531c1a5717be02b50dcaecf3db260162b29321c03fe398b010660f3e4d03b40a2021f826b8df5f736eb87654192fcac1747845ce02c52c110033e5e0f0410af8495522165ad4e6bb8719ba5e67b2bd7c679a2e0b53084b2d2f90995684a759010b4029c9edce25af0ec9eb237d23544ca52ca4789196981489851435f2c2d87b43851673e3456246240c3454cf02b3b1710d704962f72497cc55047ed4387933540c720049e89fb68c0f3228528962cafd6cc9a99b8e5fa7987a6e23e3bc95a39181c9e479e27ead09178c28246161b5b4b2f1271bc09c6ec16b742489cdad5a418a69f89f41ff4238a2db7a11def6461de034d83e05d6c4a2dfe2c2b983148c9465caa04bafef447fb04335aa67304a01f4cfeea5a0c39bd369084f97117624b623a058aad7d9fd54b106ca89add79c15f961e4ab26d33d2a41153fccb801767666b6c97d3c4384b6a24d208bd750b87ef4619e734c072ef4f91852dbf4315fdb65559f070523c0900c45377228a41ac7b37cb8feb9ef1e41a57f0d0b76d0c71630b0fc50e231a1765aecc3099abf1be25cc72919accb49103ea738cdf203530736147063759e9bf4e7302340584ebcefc1617ce5ed3012d37355192bcc94602eb776baaa06d4b01190411ac28877c38c3e2b81f88b68b8860d9fc44670fb33ebe3ffab70fcc66118db8888899891d3b07e1ba02b54625101b0a46bfa02d950ecb15a09d5d76579850b917d17cada8fb685f66a06606020fbf56ec1c534a33f60a32e756fac95159c6c6768dcb03439e53b035ab07dabb1698e9d0a7b18436b70c11d5b303d93dc42beb0540acf0b6bbd5382ac139a91a3986e2d10589c6cf2424b650cb3c3abde5d8912a487607d67a4948544d2101ff10ed61fcda676d85d0e6081727393a7cfecc8a987ab0caf2f7166d932f0c0bfa79818a3420fae1b1c1c76d6ef290f09f2d77faa791eeaef89eaa738b97c2cc7a789b1cf086d97820bdb8d3c4604702c7d8d41f7bb06df721bcc3460a9fd166d988f3070a0c148e94c77ea36ebca6c78ad1d0da6ab9ab0ad00dec19f5f2a7b72d2c6ec908d4413da01b588c5743a60e98829d32afd8263673b60bcaee323b74dc919216620e263e8493014971bb58c907500366646f682d6dbaebfd3ec9c980e03e011eab39e764e84c83991f6426273a0562d8c239f669c022da38bb573c90b237af1da345ae7656bbfd36a60e061597fc275a63372a0d8c166895eb34ee4b5a1ec3d3e23690e11dbca4c4c2ae5d2452cedb67883fa5710fb955da0da1011876e33b6f7ee1183865ab54bab025529f0392e061b09ad9a40c38844fb522d88e14385766d521267a045fa68d6945455449a6cc46e86893fb1de1ef46c0c53083fc768700165a64a561a58ae37c3ce189653dfd6333afb08a3c56a2e142da772c83662ba69439b087aafddbb31803390fa448fcedf591b39820ce4ce580b882b5dae7bb2f0f284a7f84693fd307249adc51c0fb0f3143684e4e68454e502b9745e5454430967b0af3927d89d080e16c99a2f43120921afe35bfc866224c7cf634df89601baed555ae96569a1b99d9ad7a4b9083d1a0faecd2c97d970ab36e0c2d99a8021389d461c5b28b292234264aaf3858cbad363dd1638d066c34cfb3d6cf64adc5ee64792690abbe9c2667cc222651bec8714112d9838b74424c23cc1a9e4268f44debed4608e30a872c0f8c7a8219c29bea0cfebed016e4492366e2ad590420ec74d09931911d64be40deb44464e11cc7b98cab79c301c313407835356b3223db7cdfd8600453d2c117ca96ec8220067c639b84e36e15bcd4c90c1d1d7e0e50e769dd93e8230b215295d176754ae0e135a9831385832d8ea64bc753011d158029856111203b714d30a78c4285de852e03cc5ba3cb30fb93284fe4dfe1887091dcddaebe8941cb322857a3060945ca4dea69d212ad02f75cb6d633c7c11f77f72416581ef88c1d90684ed1a4a88d70ffd1f22898411f6c7742cf1122a6934aeacd9c53b02feba4dfc8f300d9453d5d8b1a8d0d9331276116f4b442b8ef9902bc941461be47f662306a16b4277fc0e240a382cc26664e1f5268848f2efd892b900378cc23cf7b98dd9c6281124887cf8a1e577fdfac49176d419e71fbb4e9a18d2949730fdaec0c3aa6bf77d8cb3102ae1183dc009f77dbe9ee1268cc845f2304b1d11a57d8c81460981d440e39ed91e98c60ad69ba2bc2054e174de2e5c8bbd3fee1308abcddb48cf19d7826cafb8266ad9f63e4b50a50db25c6282f99f2f67b0a2c54621bf3b6eabaf43806780421c3a10733527d32aa664f25446798d930bc8be6d8e653ced7366b785ed326297673138f2831453dd8aa5aaa8a58ea74fa3c25d2d94b3fd668c6f1c479a0a6231f7dfff6df94d487510c7252b201b5cf9dea51496980e11280b50a4747f586d056d473a9242c3598af62571f74b3ce529bf4d193123508ed942cbce48ceb479d992b361e4dde071a93d5c13a0c833c8bc8f00442c8883e89af95ab51692084c3403d62941d4219080671ef9108682ad9c0c1f3091b02b23a8520bfeb0a3fbb77c963e85d3c2a06a3bb5c636855bc2c2041724e4481608c4c640a03a60e22337cbb8755b976d5317279fb0b8f6f3c408c72b49d74dd30a2564a4572775118cf91334ff362208f609d68726506f07ed8f679d892506aa7ef3802d372f992dd6a3cf70b5df54d13e421f5355268868e695f3000bc8fdecb0950e437a4e5ea6d3b27a6e944a87138b2648cc257e5c293f4557e589cd408394d831b94a45d79599fa6535b34879dbcf4162ad209bb77f343ef1237198f5d10b7c34a23d320ecbc8de72cc09bde0d107440d6c9e25646490a72055da36a3cba29eca97aa4a09996e050d144b32d5895149617487098c1292a7ea83f281a722db85bad7e6c45ba8a482ca896c502ca1d7dfb353663e7e8905656967ef5c6207c473e109490c7af216ed8c099773f9d3d67316b1de007a398592228488b5bb37db3d2cff0268cf262a59d06c73f804313be665bc93132f0e0cd22968d118ced3c2cf3689bbf4ad1dc6e3cf2c9664221d2acd551d6a2622848233d7de315af9535cedd27dd1ee8fb166a40cf3b97bf3cbe8ba4e4f0e2d88adccd2f7b54ed702cc9462e9357862a015ae5c7cfacfa5c87cef6d48312564f8ebe00ddc57e1b98c8a835973352dd02e8602ef480e863c468442515d3684d69c8630402cac72fd24fd98170511d0823cae8f49d6c2fa0744e8653562e1a4c97a4d2ead95da58262d1f0bf1348ab4d89fa2d9812a6e30ce79d5d41183d0d6986c2a9672578d7119db843cb0d6e4d7d6f9a2fef1caf005150c591cc5b5d8c0253f46a6eff8d82e80410375099e1de3ea94b01579a07ca216b60c907f80384e396f08ce5f978728b8a1f2485adba14754832e52c1636f4a9a001c12a2e4cc3dcda7ab999001e6282e9c2c99e52e0acf86ffe13d782125fb9a1b5190fd31b8520cf511d1138adb00754203e063806e7f0f41f79abaedd6be596357e33fbfa8bb78a57777e64d29e42dc33e2ad12b14b658abcf4f4483c5284e165a28f0c8cd81ece107689db13d5dd9b309ae3e027bbf781e4a59e2e45f8bec14ca88073f6ee8504046ba5aae0c539c4bb0aff6af985c217c6cd1133a77960e56aa76e589dc4aa1975da518d4784cbf7ea1520b94fb95feefba46ac67d2224a5309e45a4a468ef05f22d1e1f71721cf886c1c2feff58a89d5675c1f61b6deb2fe256ef8dc4365bd62bfe0ca24092634374692e1bc32ddb08366ec3c54f3c622c0c1c39add02cfcfcde302fdb3b0d6d7fa4b2eb5238e73aa623430273ac0232485bed08d7e54aa893dd4cbf182c3849df44c715081ebd509b6d4c88f53f2fb1b271f86f010d9767aeb1c6e55e1cb82e401ed5c4c794ebe1788f6427e93329160208f06343b19f097ed38fd7c0d8d21afae4e3db392cd683ee0002e0db07153681d8254bbf4cf8580d4b4f8d8d0107b8899ab8e2b4d458906e5b79983236ae01faf2af8e7962042a571ea13b251dcdb4236347329fef6973470185aea90a7a31b7016f4244ca4506c23b0379550801febf0efac1cd03a0a1f847e625e08016141363febdfcaf3107f9a3159a97588df162db9d07ec7de1570c0f7b1a16296349150b81771dc131a3546f8c6a47f701e7dfe74d3920a387d06af58fcdd5373ca18eedc06dea403ba2216b8d9862dc745d7a013c163823aa2f69d9b2e5da00aaa291b4d5513da57b11ced98cb2077daf39dd6147bd4520b1254539d0e5a519d0349770cd1080eb7de5259c0243d24ba739747f54ceaf94e22e821458a4260a996228b3e3065285464e8d90af7b949a24b15d70bd5ad83ad09c506ea2938f89dda7fe489a30b68e5b4ef84c72319c08b0854b532a1237053bc5821da7122b523ebc94e9bd6046977c4731c2e97434b37d80739ed84bcfc2a2b59b0068d7b1840b4060e13c2a96b805dd711126d575ea606671351e57f6fdb6d2a19392ed9ed36606fb3d4775e707f5918ff14679c5cd8d4846671bb5be123f98bdcf158078173d06f0432a05b2305a8f68626f110917dfebcda83fa22789637094ff8a289fd8c86fdf3cbdd81712c3b97dec67cac85bb889fa87f67698fc2c84fe6364c8dce6c4966fb332eeab35fd0170ca8c3a523ff80f4c414444b5bf8a595b4b1a393c4ee43ded86df92e06799530d19b28d78fd1bf6b4b1a0d8b63adbef51c0f01bba297c55ea8294d42d5280c360815f84adc67e51bcc0c04c89609b568fb5f3dc84c04f0fae4621dbcde994c307698a29cdf7949ce4fb495a9ac04bb57037c0c7b39521406d045ac4b7b015444226ee12a2294e296a6caa14427b2f0342aa54a52e94d9f9348c6ba5fe2db3caa7036ef069a4327369cc4e442f035f80f3ec38136ecfa22e746b5e5a0d0e61de84fda085587f4716d4b4fd9db67d9299db0d51303609fdd4bfe8093fcd9d44911ffc000c774247fc171207df4dc0a0e22a3161f3756962631ee207accdf0a3c9022039e9714e19d44965d027a04f6dab8648344fdab47daa4813962b4a787a1b88744935b8c47d72ff3a644e3b781fba96e1477626e7fbaf88d7e050899842f937987e4d4740f14cc1574f4eb324b09fa6df99e8c3ec3ef5b1059d6858446bb844802a305716fcc142080b0f6f0968ab4d7f30abe3c65e79067936a2f5bc40dd52e004f3817976a94684d9835f9c409c2baf132d2ec282757c099453593232b22110ab6ae6bae69ca874dbae65fed1bb9120c29ff23d77e41b38bd0091138126487ca692848fd9207fc97de85e727e9436fa5951f49ff615b2bf10361f30fe8fc247dc9b2893ddbe82769414e7c066c685d1aba6417176f5fef2685c390eb8e2b8154110738fc6ca056ecbc25c21665fce288ceb22d2b5dd84b7618e8cded74d6c2288f7c88fbc447f814cd358515d7dedfbee07650f0da981e20bf4ec9a986c9ed114c653107df41cac8035b4df852866e53b01d05db15de46e1f60ab651609bc26d28d8a6d0760ab6b7c2978ec805f0ea1e896d4b37f4a25ca05bd53436e428b56cc284177ed0c3d32e1cedc2e90b8fb660fa05a32f3c7de168164c5b60f405d32d187de1e90b46b360fac2a32f9c76e1680f857f6c052c2b064612dc885050551bd5b27ca2ff25ae2ecf81e6aed297167de6bb1f68d4e0415c5f8fe533890d7265ae60dbd21f9c04c6e90aebf08917c0c9d76cbd7331bc539879873e42765550cadd69247f12c9d1f31e8acb8db6e344a01d21a2ba3d1e3a21a0fe3b3b8ea75ce1bce2eb01145ccf3d39688f0a2daabb7b7f0dd8a2cedbdef07ca5411eb6ae5f40fea747003c1aeede8ea910f87a2f7b535619fd52531a73a610a63d32c9400b6ac4e3686a47a702041c5f836a6626370abce350880b829550945694e811e4e2f6d655924bf8de94a8cc2f7ce4b51659bdba73236c115cecde79046ead6e85fb478c9301353f53b2bae15ef018dd88da95915291d62e09c951ab5783861b1be2fc2362d7386afde3990aaf0787df6a0617eeb26fe4c4132824461137ef8bbaf4d8cefd804bec51d72eeed2bc6e495b40d96d9055978482dcb3b52877bcd2a44708ed92289d3428dc2db98ae51b5cb5b734f5ce4844f51d3b56a401474dd6a244757263835a42b8cbda4f35f7361e36ff297b424b872866987270ea34bb6604ed8d4ad162d1a8407dd489405815e338d58fb9ca11e23188dfaa964a2eaf1b907ead2986ee264279c689120b801981d2575c988b1dd00820b8c1d5d696306d4c2d8c36ec0849a4692614f58c965c45b25689bd4d1e4fa0b4eb5067cd56a6f73e65af15dcf7394e2229fc5bae5e6ea462d4154704ccd2b2d7416d7d0123f86fbef0899ff86d9d2c7a46bdf7c22092884426d9e493a0d7ae2521376436cd9586130f0196e30d0aacaea7266993af17f7c925015232509fcf61af7453bc1179c4fcb8bb627e316586ad45685705be4e04b9b9ca3ea9b424be23b5d5a4820b6681ded237348106e69e0883f0eee0fc690d86659bc7ee4a3a7793bbe70892d8695c7d347220af5abd2a7b87eb65419cff80f5a9416182c7a0427d3dea6ee7cc2efe98299beeec2580793db050373854f37e49b76863b14792b2c9618dd7f70462af07e5455498254ef537ab34c88427bbb9691636fd246f9f71c8c4866578d4ca9276d87e20ad0c95f508b4d421a39b6533a28b0460ee7591a5678ad06a89f7837d5613914c3be5e7ee270e150f3697382a98222c4ddb2f650982422a9add155497f202c1355582ca4e0b8ee149bace9d3de1c9da4cc0c4ea240f3c9597bf9cc9b0a9c30744e53831f9fc2a7bfd81250a760037a15f14104ded50fd66c9c54bdde8ce2b619b6418217b161b9821bf03136719d3d3093a948e0c372cd222010cc6918fe99a013c4f44ffc016af81986b5c356d7aa1002dc1444e224e025c635333c72d157e4ef3689417b27915544c4e5d1a978c4f7e9b89227afbec9987fe1ec38f3d5e7f35a0359a2ccee37acf337b5cf1d3f58d1bfb55accbb2a39c796552925674c2ef9e298d07dae99748a4fb0f10d070207457faac4e2a9786ff29a2376f06a1f8c14ca8761c0c2dff7fe143edfb7dbb42060cc1d2988e3da84604e41b5094a5548dca43d23a500283cd1c9c63fb4ce92ac33f5526589fdcc24c806be6c7d625582496a45b9e01a12c0a1458982681f4e292357658df5909a555ce79c49323290a156ae508726e0af5a24f312013ab25800e0e99d1339a1c3bf8f515255a842d591a90d8fe7974e404cea20b2477d4ce5640586ce922a6055c3b36c44085fea819e0011572c800bc2ee078ef233e01db01a0f87404384b7a83eeb798710c8f62d3e702c96449ab1dfd063541697844f6e95ef9b1481c2785f657b1f4b1e086f6fd2d2edb7628d37ad6f7576c0880671ab5490cfbd1adbcbe26f1d098f3dc89826a205f678611f6a4a19b8c34bf6024860793736c88beadf14b782dd91116ece9bbf14865be03177b0d22ccdc85c9bf36561a69f3b24f011f0323eed83fc81d886cd0f90b0c5532550b37e3300fbd07556be88febfd995b949d46a5410237b2dc9f96f08b22349e391c44475731e69f58d36889a8100cfed4bc28fe52f1b6891c2203573b0c63056217889b1abcebad13b09efc0865c925cbf0d8ce583898bd42f22ab9b566e20d18dd689915360745df67b4772036d6b4ba54f6ea77cbf780f307a8dc0b217d76b09c78b7c15c6f9206e403d93b7889ab9564228b127433cb4271b48819d15c9677511363c32510f4b07c85146e80b09185b135262106df4da49be473e23034c8a8ca48de613105ac541a7d55af5f5ead14c4c33c575b47b9542dd0cd27a64eb3db8827d10efa0c3925f84b7585dc629aa94fd319a304f54e6fbda6c1efccb327cac2f1c4aece77fd39d7b9e059233c4b903e581b48758b338b470bc9706246a9abebf3e684f66f040c30e8faefbfeabc8cc537793e2bd9e87d3c597c670898589250a06cc38bdf99118cb8fb06fe331cb9ce89efc70acb0269cd90fed757651245cf4968f7813351440d50e2bf1893ecf30994a0adf9547034252cad352700e420e61b39eb18f93b246079460f7e47a35e91c2b43818b33706e3c709f8d37c44dd51d15933d06972c498e1f2848a1e94a82470c5b784caea7e0be3101a3bb165373465eaaea5e791b24862ab567a5c6360ba592aa5935440fde5934c6056feaa682bf3989b61ff808d7f98fbc208bf0cf111e0e886752aa3b589882498e08312129fba24a8049d2691b67e65b6d828042c5a10915f106a88873b689f6709f6c78f60fc82f4be2971ff0ec1e912822a200a41ab0f2d0c0bc2d1c0d379d5b7526f1bf939aa6173d04a0da27af5186d192a7d312d1acffcb32a28bd09c06fd76650f405027aa0ad2878e1130bce9ab6edcd4d173d0a0b2d763ac796d452dceee8ecf4818b06d237993331820ecf4a442f95e16ee9a132ea808bdd46268bd0909378406dce20012aadc44d0939c6ea24767978f836779a3d6d081a9e0fe0345bd0cca1df65142de4bd986522ea3b1b09a4722a80a35a2ea5ec93604130502347460a26607cce78df6485eca7b2c8adc7fcb3dd94b209905c222e231e8ac41b41edbb81ca0f76028c6df558adf9506982e81490f0f891aa8466a15b1d173f5f202ee845e7b906fd06c3253699719517115f6333ff324390e6d3257a6b84e664c8c049a26517f13091f42623671fd6f876900181891515746a54def2a522049d0d255fe2162c6eaac268a45e4d824be82ca8a97bf97ae51646e6b16d0096733562e4e9ee33975b01bbabcb7d30097ab5cab3f56bb2010a612a0fef90339e49b419020996fb7c8447ae86862f20f8774251ada2e06459f3ccb7b826e93946d5efc88cd5aeacb17be511162e708eb25d1a0cb296128d3147a3f8b21587e876dc05b8861bf587ec47ef53af44ca731bf0199261458b400d4281273ccb7936201ebca92e428fc077b0fa42466174fefad70979e28079249c220d5e5438139661fe6cc28b6dec09bc474a477332c6377df11a8b205636cc1becfb61d631f80c5989c99cf02844f37a8310931e9e0332a56cb09c569633616fb33564d29913e1f342434850a0937e855cca81849c042d0c0e6623e26a8ab01cfa57d359a5604bf16113c108b003ab2f5f0aa92fc270beae09b71de698f3c304dd167341dad93d9e816c9a98f01a296647b81120000320a60ee42161e2514d301041848e0ced5a89b5d897c1bd29b10b067105ce605fc26c393b385370a6bd6eb8f73d202b032c0e4a959a042c9033c195852c364541e481490724f228cf172be481b9ad2d3508ab391f52c7c0b90a91db7a0642c2e56ad7f96ad9c765605d0cfa270ad8e5624a9c8760953669251af25c4c4c1291d2ee9f7e44893d876927a230465ad01ecf269b16f9727326ab41b7a3c5ecc8cb3bc040c0e6b6ca1c4ea74104364715f153728b66045b2acaa2440a61a37e7587b8c25b7283b27f989905d37db1c84662b3da308b4ac528a5d17216eba1d833c34fd39167268100fc0add55958b4cd16191f2afcd494c65ee9c74254552d9260eead6ba2e919806512550ad04ba8dac66c9ee5031b8926980f941df37f52247d2a526f198b527ac4751e1d552ea1d71b91a80ee42e4f49557e3361c3c2da28daa2551c01033cd251d04aa52a4b5b3d7a1de5bf954af4e05a043fba9a165c072daeb5951ea23af4f466c9642eab1bb4ede86e7720e4024d46ad1765e065ba111a378227e2be19b48b00eec77991e5d6e8e0bfe73906a032704ca87461d89c5476fbe0913749e7f35250215445b1e83c150e9988fa5ad367a51b12f532ad5aaaf3408ab8226a43a814c59b96730337d2fe9ccbfe44a39341e454fdf97c35722f06a688337a47f07947e5b593e971346d9f88fc165797e16da46df8e939959b5f868521b07a740684b68132c906fd81b7e1b8816b8c20815d8a0acec3c8b7cf1e017b3533dbb812772a2742941c1df471f789e55d0145934f8d3883248cb29e04b1376450c0964a9a1a68a303cb4d9b2f2b6281dd24f89a39d8eda5b0fcbb3efa1544abb475cbc16410b15c0fe8ede89e601b4feaa611e2375e18574e94561d7c03071164b000ec76e0d16339726733e1dc219ba5d715dfd191469611f430abc907704cc4154b0c6a1b608d746d49fb3fc3878b4b3a0673dda7c2f6dbca84c51e897bd6156996a241f67a07ad8e7c0b7772099c54a186808f0553cee691610030058aafefa62876da5342147b9f016c0acd4143cee74ca9901944af3b89800e0725757e9a44585232c08fc0677481934a1757c1f29b2877b32b190dbb6d9646917878ec5642b3731e4adc84624a289b8fd1444fd532758f3622bd596815d59029048fbce5b214c014f7c299937d4f5d297d7070198c34021578a5984e794878955769a889b7a90d9d1e76f8358272c37bcfca776ba05de05bfa8c3e5638f7b952951156252899c463d12d4c13cc4beb9c7670245a2cad03d158b38428ece1394edaf71abef7a63d9a26781f78e95f9c3e77c5027c4509b5fc9eaab2e7484527f0cbb693c11c12ccfcea33448ef78cd08e6ca90d27206c34ef83f61abecd26c62d8f9ee5aa75fee5bf72c1af637965e7dc52957c5d4119fb1e5342e5867abe9ca346559edbacaca31c7d3ed07b8ef4377e25faa259a26ed800d06a77747077092e385b8ddd277a89d89572fd6f7e0f5da9577f7a1176c4a40f676cf5e100d91ffe93bc82243952196694e86b15ac4ebe59263bd0a870b245fb33ed0099b4ad764e1f21139b80a1f310eee1d0a76a67abaea640c355467e406a2fdc6d8b3ba4acf2b97d6274be9f154484463d9c518058a0a0d617ee5c9df141e02044b3cac09e1ad01a30b14df295cc3f85ac21499db7faffbb64b38a02a37081dd1e1bbb18e2ec2b3deb823d22c94639072d73b0c06cff0fb2aa27e96e4d83c2101ae11e38d0bcaa5d78cfce41b437baefb0c3275cad4fcfff5afa18eb9a8910f612d697d72e2b660dc50ac9ee99418f30fd65e84c4282903b2e6c5930450bc3935904794d2740439568847b097b34a58c7b85defe42c9a77b63e1a7f2cd3f9abfd58039cb9dc801775766fb7c611d08d2afe270dd9e66a313c2680455827c882a8bcdd6baf5667d559e60748941be6aaecffc0d57c4141506bfcce5d804a467a9bd710925abf565e352a66fe7cd9a272b7b1fdc75026102fbd7d56e24f794bf805c42eb1de5a408219d081bdf3c07305db259aebf4a4a48a1ca6c355855f9eb2fce53c0a0638792cf7addf7716d268790633b1a62d352516b538aa036ea84eb2c67c8abacbed20c7921fb5deb925188116094da6464e8807f414ed7ddb479188604ef352f225829de08d66cbdc7baa7ea79db9c3323acde6f0e46742871fe4faecebfb65d6570edef0d15652dfc6c57dd9dc3412fb92ebbc11a9ac2155f6079fef2a65eea2d9346490fd938a0e6ab75b9b854502451f61ff00cdc44fb339b1b09b0e8c723ec16ff73cac658b1187b5e0118892332adc44b9604d5aa37a693f063a465887992e4892fcf610050f75499c54f28013f02392f7fc1d1cfe60064148c005beb34c277e58c25d58639a1b50be0a1ae3c8e561fba49d760db400ac1e0b4311fefddaa1d0c3eb20b009ee19d6e2458de99c6283588a8d3d1f1fa6ca4ee1c984c676d4c0ac5638f341a14da121b7dabd0717d760388a024a9dfd1512bc67e46ed376aee91ddfcc0d1087be8e14137b97b2e1ced32a2b058dc91b5e2f0ab93412e421e06495ce7efdfa03ebd924aebc80d74fb9ccfd5d2a85a88322c092132291ed5bce54ffca8ff4232b26a3eef641cce40c91412fae4b2ca84f09e692dde9e9bebda1f8179fdf2b68ab8d5e0d79a45981d99da07833b6df96f066b5f7d193b9473b37fc7cb622afc595b0e4ffb08dbfe09483241dc9239a1d7b98bc5a20a6d8c781a391b423c26b8bafe9a8b0718a103e4ab0995785508fcc03137e9d59cb8f1e12d5cd3b260b154b165422d9872f73d85e45f85508f5cb3d70e3d7997dfc098e5783f4a2858ff5dc0d05904b6b59730b36628c41b31c33233ff1c0164a230c6a02b830f8d28036afc22f1e90ee0cece2cf79aa41c9ec5a1377b66824a40851f6d499400d9300d6f68c971585baa59ac9c4985a19f7b524d3a41e4d68e30c433251b6cccdef34430688e14c97c29436335a000dcb17807ea230894b8be9b3854a69853249d84bc0052481da8acd822e24fd9c6f76f0e698b824d2d32ec818a2df67c84615fb48aac6b87bc5e235c63bf7943a9b7e4fd26c30b5741766946f4eecf9abcc5b7ef2a18f40bb772af057fe2350e932427a60295f51060de3a80c63956aae2da70384a15eb648ee21f3fa993fb29fa8f0ccfad6762c81800b7278a2b982881a066b130c001ee468ef12256e4069c3827d8d8f44d5b299e574b9066ce442064b63047f68e2a66f7ed2d783089bf33b3701a636e86101ad0735df20f1359d2805b882538377b204c56a101d988ea20d07c46b927aff56e8862fb4b27d502e252f4074b1ef87e740c54349c0cf0ab2d6ab31d4af614679d3772b3184567dc65b4ed7e69184112f1e0056cf04eb4ae1dafc09c285ce365f5ba73ce7b33048643459a24c7de83e188c7721c6215925ce5c54300395feaf226fae0e176321b8449f579829f142164847e33281c331287a34abf2ca8dd2fb42fe9757a2e34a315151cb2d11bab94e8d71648a111f605639851a3e88540851f8430c142ef82d41e59cb91c4463fcee131060b7603676b8209260a83cde57594230ed8cb5a983810482232b4cba4235a1e6eb47dffdc548a9fb7d85c1a8f51ee48d94d58bff45110848fea8c8e485133c59d0c435923dc5ec2793821f77e5199419ea2a2bbb7d0a0c8c4c36e03919ed4de616e3f846b8e46e407c62cc5251cf4204d802068bbc76a2c9aff3887cb7ab68148345e593a3173b59e7e40ddd707fc4630fe9a2f123bf65e93209c11c651a47c5fe1a82454bb977e753a5f491d178ed8359622aa9c69ad2f4b2e70cfe7e428cf58697b24ae3c6d715f9e8c7846066d2065d6accc26612b189a7bb294f55ab288601d465f7b504bccfcd5338ad2c38be81a46bcf2001d751a8f6b3b567e487698ee9bedc9c28a616eacbf107ad8c7a3469786173d11775de3f417d85f5caa1c52b3f394413ff9131014ab72e9247563a90b981935b161866e4943847b0803b5377075da5179bf80528e4d37e82c6d565194bf43f54d8ff4a0d84f1e05a8261202fd58579886510a385d409ba3879497198fb993d2de543c157a7d65a5f5924811d03c395b265175e93bcfb4eea7adcc03da2e8ad717ffba84c338aef48f793473ea016f2a0060a16cac28f8c4bfff686c6a1f8fc44c1a58f567f2a5dd328e065e772d059d03ea6cfc7383a125bd0c61cb27272205641756271f408d04abc39b8fe6f9de8703bfdc77c06f93e702304dbfdf95e07961c815544ca24afd8d19cc49ce0402705d3b90b84a6f046551e6c8bf299a296537c435dec801ef3ddd6f7148eb966abf5a437864c52808e39a020c0380d5bc7a5adcb568c71e38f6bdef96fe69ea719b010d9a8c2480be5849dffbf595d4390e49d3ed51d528de4aa957a04b3fb00b94b418590184b085c30303fab26ca843ecb7d8a18ad7dce940502c84988a476fd26bbe1afadfe1ddb5ea1c995c36e2776d62a2c5a2594678a763d274ed5fdbec5f40fc6c8544d50a9bf89aa8c9075245295c0a26e335465a0d78e48a584853a1ba83440d64d4865a05c650b20d0687cc121945304258af67b634f5ad3b50ce0894c2c00d337ae0174b644eeee249eaa1723ea7cdc49db180e90c8a47e93b2a6a36c09b9bb491cad4e86a88f415d6bda21357cc40e13090c196456cfde250bf004293f850e0e320116827d8da914266f56efd667bd5f56f10f559880608487412b2ec530282b05a66a6e4d8eb1de3b406ebe78efa4563b59b14128dfbd71ed0768e80aeb52400a3aa41f34bd3310c819327c8b8d1921c46d77c8a083d5371055486bd161f07790c7740672fad9e72074be111cc8a440ee8ef0c1c9e2abff26b79e49f41eb7d1f907378f00fcb3ea147219056d57e8e500ad394927901f7691d29ff3a313c841a662042f5c43b8e43b81a8644e94144d410141f191bdf3ee69ecb1105e39d86f275210123eb917afda558eb05457e007dd0f07de183080c2fa558c7e8f4ee40910c8f48ac19163797cf49b1d078c065abf0487b0b12d1e0a87a6dcd296f600daf607b76dea34b4915f81886d84912a69e5398500a85cf84a232b3a60bb6b04a84eaaf63c7c63c665d17dad216cf5a475e743b2188ba5f4ab01900a9295b3e11bf9b9d7dee4b30aa87a01a69050dca7af15e71d0bcfa3b1b5f7c87d161e811bc5ac4ebaeefca1093e54dd0beb09562b448b7047b9120ea5e3c81335d18a68447862073a600e483f606a81d30a90c39e689c0382d309b908a5fe2c78de550f08755e6e640f69140b6cd887b9fc853c88aa55c849761a784ee2c15aca36e34536856bfcc7d9420ffacde7c663153e1177a74c223bc8e5365371255811bc9b7860ef10f5100e45fe997b24aa656d3e4c9b90a12f13e8996ef9fb113e004241035443a67e2a74b71ca58adbac5e602d0e458cc95b826bb7493b00a24a52eb3cfc369631caa0855b34ac7b6765b50b330eb2c90c90020bb29a038470ad9562d8efe58d7be5d27face423a2eccdee8b149680f5b7e59b02030cd5c96bce85f8579762f8dbcd3d259ced0b582c3163206a3b82de77576ffa611ba036f3c5a99993981d01b4ae7dbb90e32e82237d12ff2496ffce93120bf47a88426d74717e058a839c3d4bb152a635053868e2ad167a1e5d38361b79036512909e0b781f63df21a1a998b8c5a9a0a8b4bfcfc0fff24e122fa69bdc473d755ff81a1aac2bba192f677ebb701262430ab3006ed829c093984eb8140a34fb543cf298c74d4a7019070ab3b1cc63067fb0a6eee0663cf8ed6fe447f41da863189105b47e93480d1c5f2ac05f65fccaa64356c182b4a7cdcd1037398eaa93af0f2b88e34442622a4f5b600c754420331f21629e864cb39040141a189a7f84e5ad5385b2d5464791dfa0efb6637256332a42ec76e2b28c34aec66a441957e06c4819f7b17c74196492a69c28079fa91d74f79999883f46bd40330a33d82ca7df0d1dfba11b6e82bb6deb7fdd8e831e8d2733331b3cbe4d723c7a6f74ab9f2aeb66ba71ec07e31b52f311a3490e07cf4ae6bb4780b027728dcfe5190cc6b209ac668f4358a3ee51b16de8a5fab6f7badad6fbf2d47e25093780cd115122f1275adc260c3baf801f51a8499c625fceaf2ba8dd3f6fdfdf9b981020d150a205b9aa4924b3cd09080ae4ed3b491326bdbbee16fa935bad15006834890a70a11865f67c1f702d280e4935c7f69f1156f6f3bcab2e3c892de6c0410a17d41135616a41040d798ce6ac52880a298b860344cd9eeff409889ef1d3038d85b57e4234740fd74a650479c48025b521bfc5e8a8a4df12f0fc47f3e526e610b457137b3295800825b9892d4dd4c69b1c63c770ab75f86c0c1fec1cbfa278fb868d4de137cb26df158355301b1ee2c713b6404ba5cd8187ebe56fed8e706ab6054b3b3cca5b01a07dae17c6c420eee583e816e1d51cc8e72abffbcd1e200fa5f49604e0ad2831e39b0990eb499f0c7c76b3a7f3f7b9030f23cacb0ac95779428a2fd0c175d8bd29788f0a157a1501e1400c907a0ee425243c108c68524fcc3406f293c78585ed1ccc1cbe2f4b34e6caddcdf77bc6e4df70a2eab3d4e84f72fe332077ac4b4d39420e191c615a39fe7457bbffda1799c525f5bca2eac061799fb535674271630af39ac513622a6b551001cfceb7722be59e04ddb9e08114c81defc5d0f03880c3ebe3a5d27164a6cffaf317c6f85cd4eff0ee3186e737e226f9fc4c99edc553f540282f39090b83e9971eb262061070610061c1e0ad2de44d11759df1238bf877b97f0de274fe468e066c9184f45bdcd90631fc1be16ed3a81510487124740b3f49e52e05c9789f26cdd404ca1c2996b7c8c63fb02a047526be44192df4833800457199ec092479cba70cbe8ad04af8c5dbc5d3f9552eb10095a0004ea4bd5712993fd7ee1a658a5d29373beed37e68869693efe99c7b403565f1a0730e68c498047b8cb3630e9c17bc9f689de5b883ef2d830fcdb8fd20f9d8ce6ec6a1dd4192d765d3d94c886610901a5ad483bb47b1b3a219978565243ec2bacabc18ee0a6bb6976ffe232deef459fff28bf6c6699bc561ab846f8387ff5bb7159a71700e0934396d0254f7ed07ac0c04cce20666cee02e9d10d6a99e6335bca3da309ee8f04f1af99388907589ba8e7d7d3ef8b0595a912df9005917361bb24503d4cb21af4332463c7be35a5e9c6dbb890a47589e0859a817d25215248a00dc8590b55ac37fca1180d5e11a2caf6efbba19c0000b1468ff0dea38717738a014e69fa363346749b1d58a7789ebc8fb1a32168aa7f4f83204fa952b4f382280166cde4a82a837e0a010f760438272459c83a55f9ddae9a76bc9076c9de648d4464098398c353fc47c16f8bb6d504b5d64d9422ce5448b9ab73c50ad09a411aaa081d61aed73b44f3c369d053619e7872115642bb03f8cac1c8e96281b099f415f3fa14206fc056abfab9543a49dc6ad1a8412b37b6dfd79f594a1db78228bdb2d040ab7114808d789a934c27e359571d7147b328017818f754ad8fbc8001aaa9d19513ba0232a0d8e2b8b4a9061fa8795e2f9f828058d5e3c17e7c90bd5bfe7c5f0b8e1d33f9f14cc7d2c81ea36c67cd01c16dad1cd8e7ad73e19173a563424fcf9c03bdd6ea50f704f5de51fa2d7864f67c94c2939523fa7efcbaaac670826a59f298a77655c87ce8b5f59f960cc0544d1918c61fc6d3dded47b03a20c0e80caacb89aeb8c816215dc0200dc536cf1ae85b6cc3fb0765bd56573bc30290035e085df62b46ba09fb5e2f9ccc0beb356e83f78c025b5778c76bb0df01f583cd86f19b16e001f2b598ecad8ea455c1a6d94bb06ef8a3a8b0045a79e353af4538ff79852b77b1a9c66346129564e6304ff09763ddbcf8c1287b810e9ad7a024858310bcf7e3dab897314415772c05350e40838708ed6793ee7efe361319fc5660c71a37869de3c9ada0391d8e41df6c796e8540abfac7f432cdc5c94c9b01362cc7642229eaaa852f8962543b99636f4bad721484a4022a7bd2e964d287d44d07714996a48028f54162ada7ccd4ac58791226bbbf4c02c3cd6fcbeb7306b209299ebd65a8d7347aafdf67b23133c39b196ccbbd5654ce51b50f2e60c56feefcb7aeac4cdff1d16c30708f6a21099262d155c5dda629e1e2300790f6aa836e3cd86f9b07b076ffd4c8315d557d663170495b8b85463e5477c82e5bd1662f08b671660a9a95102b3470182843dc5c34059b818601b3f13d2c8da7b8b3c1162ae473a923c598224bf8dc6d39e83eac4e4aaa7fdd370cd7b3659ef608cdf5a2f8b98eb7b3056c3301c58d4069ed453588f6ee3315a28e2c2e8dcdf8795e491c26d5085c21d018eacbcf135d1f23de2b4d82f1691422aa24b5797c0023b02dced6764070e4d3cd92bc59f2ba69292ea7b2e4413f3daad0594b27900a3f21e98070858173f45118b5f7304c8eb5ba853abf8ce96a65fc090c0bf1c5363b4e18f309fd5c69538ad843c085e4477e6a5fbdef9e00fa7b93d6057ed580d7d192281b742127db91dc3c86ce92a296c8ae0a04e6a39c8d440e028887184966ea4a876ae7cf9565102d144a35c95559e709228242c362a27ced57541ff20fc57fcefa70e003a56929c5ad80718ff23e518b6804e6e85660f3465777e62099ce3c9ff08b897838ade16df6633528a8ffe5d27958d7974011910600ac6a56a00b2752417d177c0d64c07e4362ed94a31157524e44ee5351db1a4edb56e9b0442a5ad3ab0f56e0264f1ae68dafc0d211102fd0e4ce0c1fa5b4a1056d64d73f72a1fbadf3c1368c35106dcde59248e37d56bb68e30f6d8660f12924fa3e42f42fcf517cd1afe445666ba466bcb376da6419fd8045f0d55eff83259bf504e2fae7ffc3c919a92f0ab182111c891f337a2319b9b86c20c8a98094d66e0760925f3fbabff97b08a5241ff3caa6da4d61fa41c20e2b9a44790f6e082ce2ffb861224fed4ca1d1996354c4e18e18d942d6e1f7900b043b4a8398931fd3f1c2b15f373e3cceece3348ca7f43ab381f604335c23739ae42dd554217544acf3b8daa0b08d5689310528580deea17d32a558844460af1c86a652c0756f36a0b814f6e83df4a9c8c0ccb3e5860f9525185aeb092c0d6e900dc6d7befcefc7b4b1a0d4490ad8bcde818caba2f3255f6979c4f1aaa07ff5e5568ad4fa4ef115e388930544b06cb6addb8cee5d6bea8b2804d2622e09ef8fc2351942e95cc52861f5bb3a235b2b763807a73dd9361299fd4ada068b9a562f3e8299dc2b2a381996dfacc505ddc40ae287998831a38eb83503e0286d63e0b68a60527aef6e33ff940493bc9c3d765a2504c6da786d6c3eb15b892e1adbf6e5c995ff80755bf2ec34e7b354d7f3be92b2a04c3c893db8f6b6a7fcdf0cdd3555aecc95a5b9b420707f65c4d210a77192dccd1d19b2a8571049e14281640b44aea294df15db4a4b369a49972310d1c14818b1ac0bd2a8ba48bc0e17e811c8f64cf72bddbc5ca5aa07f584848fd37bdd1c943ba7a5c1393b642e1f8f9c157321f3253c3308b459842e6a06d3072c67cdb72963037da8396a8f992fc53b557432cde6c9de5882070a81bd1a65f6a71b5dd1f07ae9483fd57c84ac0b0579e72259528fc7e4be31e175df9ee397995849ae99409a600898f665f44fb82238d169e719fd9bc547503e82586ac76696894a74f9341e73708b8ec5da5e03dc18f4d2005fbc7e33d745936df9debf7192e011e62defa46f9f0ac474360b0ddd869c2dea8ae125a610d208c7e571a57b43ff07ab9e15531f92d764170f89cbc7f0474ace1353449bc7e9bad3b576f2e8b37610ba28286ccf5e79bdbd2d75aa6bf3a2f39e31cee09745a75b984547636f8503197f43115fb8dc75902122590598e0d34c869341ba3278a151650ba1fee05926d03dd019b02ee5428be527cf07d5cc545349271079ae98bf4cf33342d88087ce862675504371489750935dc016e6c3e3cda73b01b3824bb40bf11ef941cfd2349fbd678026d1ad2f9d9a14a5205bae2bdeab6442efa30868bb78636e6220fa5fea82d2d40439fd215bf1f7ecb2a145e3f6e77801a58507ecdfee8abd069d3b77f057cdaf7fc68c6c2ce03982baddf13e29ae40c3ec6ff897090935eba26235e796d0fb993339c108b9a8d26183d63ddb9ab4cf7d8ef4644e8f30ecc1a6236d05ec2b6e56b1b8c6bd48a55eee597190bbf54ecefc0a1f9fd770942a62ffbffb3ade83184aadf33fd3c9f7a10d2c914bbd1502f65f0185a8aabe2e035bdc6d00cece56632740c1fe9df914a1b9950744423ebc8d0833c284a2cdfa3c283a21f839a86544b9eff6ced494fba0731e964e8bc18e82ab40ecdd477c48b7668b6fd0e9d227e87f4071e3a7a91c36624afefb3d2e92b1e3ae5a586365d94daa4dcdab19b2c06f86afe0118e66c4bbb608ea7b29e2e1e22807b01b0fcf7efe8d01fda9734490ecd842292b0aa339eb0da0d00b115ac153d86a5f407cf6d04e310c7f987e0e7e51f70e8cea311d0a4db0ced46c8724e045cfc3616a5e0b12d8c7f7dfacaa44f2fd7289685cf676024b3f88cc840633a202757f2f3e923c04436e89f1056538e73dc0b5df394b524a1a8ed6d5f1e14f413e6b278c3b2b0bb9026e9a650d2803ccbe83cfe88d7b0745c9ebfd1497ea60261bb6c129a807c009cf2f153d7c2518d239ceed1475544bc09ca2ed7c3cbc257408236efebd03b13af5c8445f99aff4728b2dc4bc101562259591be659eedcd0942357f26a38f43d1c56cc102fd21ace5ee1b92674202a8ad253986052916c2bce7704514bb218a6fdec670b66719ea11e490bf083c857372185cf951631c74dac10a5ed0f3e71ac303c9d987f8f9399e8a436807f7025d03780d8803b4bd2fff734bad98b393881f7ae111708172356f23c4cd1608adae74cf5631a58aa51f3fb820a874b5e97bae3e7709b70b8c764886b10d1c52f123043c214b4e39852d4ff075378f4348ca47b4e3aeee3420096fa0787275c58d6c5c908d6265124fd9d6d2e49ddca15a6b46ba346d02a52747d48dd3562cfdcd2d6db6fe7010247786cd273b64a1f652822398f188a8d0085fd4f5ac12b4773f3fc2d32502f9d95a173a9d4e16a535b40b9059d3fe1ddbe69e0a0b66b29fdc3c6828059ba13fdeec88f6a074dde7f97951835d0aa7d480d7c3a465d6101dabd0f499cbe1ec87bd2a7135328d727a47c9dc3379908918b76f7a171be35c2f6306ee01c7cf905cb962ca32d23be3bf986a26e66a0f4f414f707d2d20c31b5c3c6a3c7d988591457a5c03cf822f8e298321d4f20f8d9a1b88c7881590a7dfd32ad2db848a00345d4dee094768df010ab20e7a9a51136eeae0d2eb299a57e214980db9e790070112cb991816027175169aa098309044142c6e5b1a6957f4364c09f508dd45c9e28cd2f7204bc7e8ae9b60fd589befa3f73328482c5461b300b7097d86bd8066492f66a048a994a53acbeea77cc885f5bf980b326347d44ea6b78443ec75ce8e5b4af5a6aa7d72d241f7eae2b9e816f9466f11b7c1cc4dd5023ab3caf893c8f659f6eeaf2bbc4c073e17d436a52173572ddeaf8d785e354fc8d11bca7090314e62fa1296ab2d0128f70ae645f11e2d322ba931bab778ac845d99f1273f040d9d1e5bcba534bc0031c2d4dfb53b779a7eae9682a5b6d4a1f8d56a676ad7a006238654a4ab83d396e30a674d03051e6344128a46a75a02259baa713088da4a05a414d1c369992cd9e41a64b31da85091d8cc1a658478a1befb41ada77d377fbea6b75fbfad2301895ca6f530620175a0d8060e39b624f12fa0be4e7e70ea7ce544ae805f5ffce3ba8d09cc47357d8a81cd782361a411f7ac161385a53d240c5939f9e035d16ce0bf40f43aa28908bbe7d2c494bfa3be74ad638c70ea888551f272cddab90dcc0f3a74b3415cd108a2ed0b54f5d01dc04d2d83129039af6fe935f81a370971abbe262e2c9682045320486ab9c384634d44ea66aa6c3d1cb2b5219d48cc9e2803e4741f08efa2386851eddb6dda77c0c3654e43336f98e4c2d1096c6612ded8f90b43c97177c58bac1423b40a0a4e3513a20c7deb32beb42ca0005c426e6a0bc612f880cd00395c2444ec85f8bb47b598f9a15ae69894c1a316f037089eab66fd093dc67991683debfa70daf9bf0759805e843f285f60aaac6cdce12cbcadd416fdc653180b7f83035de05e6236891f884ae38c7a92ec11fbae2fc38690c577a7df3d7bbbe52d351e0ecc0207f96cf4bc0c28c02d0e5463dcf858177c8a4686ad109fcd00b27300d2f60dbad01ce3e0da2c202205d21d01d2a0049156880350550469e8db9bf35363d4e026520f0beec381271961b3b9e845e585fb4db4145a8f12c91f8d409ec69e4b1b3fa086e5828769d07dd0c451f360e28031ce213ca04a46bfe41e9f03ad6db36fa41ed6b85b61a995b09e4a13c86bcce69c8c606efb9a07ac5b4220226a11d0a6390ac9c86b0ddf02697d4e74af1ce2d327c070a8ea51f40ae380f8578f2aae721b7357acf57c4f1ad9501fd12c31eb13fc35fea21d2b11df490ab5e78a944c1c0451f356e15f8ba16de86a46bfb2a904bd63913dbbc8aee9325c811f6ccbf237940ca1c2701b1ed14bfb800297e294e53fcfa7d2e202a0c6cc130c7a5c9470237e37fbb756ec7bddcd76854384363da34a25f25e881aac984a3d0bcb49ebf0e2bb790c6d2119ba81249e971fff79979e960d3793f030785307e3413fb308dcc15390a3e300d77012171288a77b5b057c977e055051be479992eab30d46ed0bb207b743cac11b3dd673932e37256535aa9c89d6162fb5451286269dc890d391f02f9ea27b69288a547ae03784cc6c17e0f9b71c093e6aa73ab30d6d4b2051ceb15082bdf72b2793e59514921e52baf44ad5e930635c51e6a3a44b08eff0b53a52a63f1d80fd75abfb7b3db56212f675e5bed1e8ecb2ffb128a9a79db6c3332a5fd36931660624c6bee5d3079142fc14966c1115b2a434e47b4940ecc0e666997bfd5a8d0774b5d5b96d80170675677708955d20a486865fad2b2660d24a8c11432e0f1ea6810a7eb3b52e32591ff8dde2cbbc46fe4df8ca34d6f7fa2529c5af74baf286ebae283c05ed9f574a17fb22fb1daea9757d732c5959f737fdd24c1b7b81eec075d6c700ec98f12d8462c9d33892f6023f407795bc39406c6b43540613e2f98a30b6ecd7f6988d59a1be99ad361db6dbc6ee61c40db1bb61a9295939be10cd0ea015b1d79054e9845170b2f44f072c717a53744d7f28455857cf5f41fd119aad4723eca378872c9c84d7e4f4f8328b3d24b03c708907579ccddba32d33dc80c206b0a8ff538de4b458e3198571bbcf12cb1f8d41d66075da6700afaa14ed9b604c9d3e99217416c58c7371591ce0b28622107968d3eaf5ae1c8b1c9c9b786b6f4392e1f865193fc1fdfba56b98664623e082dad101b922efdc3a8405a3b1f667b2dcff0f0130172fcaaca369b80aac4177adbd86c4c1e51778cff950e364582148c1759559b4e871f2243e8e6717d70f982557743fb0646bea317aa9a50239c18f462d2fab12a8889c4327b561d0253be5f555cde3b074cb9104b94800c125e43f3a3a5889ecceda9bdfa24ff2692d699fb5e1e495aa8bc5f8e1edfc4bd521a8beb4404047995b7b5816d112916d528d322184434d41a5e30aa91d7003e44538695c1c95ec59466c1f50ba727878f0ede50c1b7d3bb88eceb68b7bc0a82eb738722d2bf9272c487ec5bdad0c0265009d8013e13a01e744c870bee020911799d790688a21273446261f892cf7f64fa493f667785494077601d6c0c3accc014f0239c6a15de69f2c49ad3d9efa4b1164cb3fc62c21ebdbc62757e8bc5f6762feca8bb2313fcdd015a1561395b20161ea7036da7d2c9d981f2b23b7f9665a7f7d20b918cd24809d2ac773103d02527f8d48e29c121321dc40cc0930f0dbfbeabddfb9866fd4ae777a9cdc00e82dadd58e3f14a79a64826c6b03cf2497b614476b72db794294999028d0384037403af97ec22563bbdb8971b6df06a50387e5d95f252291d134c48828b41f1c65ee10fccfa707723d5f01ee51d1e1fd88c6f6d146a50c23aa756eb5d2c64244588cb2fbd20378dd65e7e90a25013c992b789509328149b24f971244ae4cdc720d924cbd9c4c9957825cb1baf744e3f0f33b6a530aab543599943afe75d7a810079dd5b6fbddfc4aa852b2ad6ba3f8e4355afd44bb698f602069f9e22ff7abd5ef7755f2f281a7bfbd79258763b90215d8e2a2c671a073b4baefed3d1d1e91cc7d1b1424e59e7878e33b11d7955c33aaf1791a60111d964bbdaa73c694327b19cf1a3ab8cc0e8f053de6a855ac564744e5ff97dd4541d5753b8bb76b58eab156ead568e57281b4a2980c228b3a1fb7c7a91309298840449f4ec4d72e524442479f180834ca4d71d1c0c5b331e36ecd58140ad305a496821a13526c770b29c510382ee24a3a3758496114eb02648560c9aa1c97173e45838c509b55aeb79ac1ca1a898d0c4a01618f47a5ebcd6928d19d2043197ab0836de6e11c1c6db5f0ca125041b6f2b0836de16106cbc2d25bb2386f397dbdb701a47d35431a8abc8b2a7c8276cb5566b35cf53dd21897f10a270152d1fc4c8a5d5839698961736de5617b6c5858d2ee90abbb0c3095b005415834c40ca41373e84b2c8cbe1d67c3d970fafd6ebefd983b2346cf3bae1f57aeb2ec661edeacade7812a76ee8d91b566b3defe698c151bf76aac676ad41e3bd1925749dbca940236518b4ebb7693ccd1bbf9afbb4425751a9a6d5dada42bbfe69b77e31c4a55c35d54f550c7129bfaa3b470617a3f0bebc10872f4c836326878d5eea36182ff775a996575a998aea52a7eee50e1ed5a6717bcdc97113185b947fa495a2acd4600faff3a687b2de7deb1562fb923e3857f7ed925c6e88f91c087de1c3d64b3f50c2055e7680830f58c081197451450a1d7409f3e5256f86c0ec8499b2559a44034b225074024504433f48786aed301a751b6ff0eeaa15024992244c92ce76f54aad459a10bc6b6dc716264258eb0dc3eeeef1e9397ac27304250ec995c43f3f8df4d3483658758ea4954aa0d78e6d7b81347874a4c5f2f4910cf226667d788afc2081400c4a34b004a887e7a8c7a7e7e809cf11142814a8a873be892536ad6c95ce39b51c4d2ed3cbbc62264d2da692c491b3a8a8c19e586a77d64bad702b7c4d2c130b9689e5ebcf309a026521a594a167ad8d15e8ddeed6950448324f586badb5f667685382eb5557ba558ac4bb354a8cb18778864f911f249e0cdb56379369ab41b5bad750abbb50adee4252d42a8ba256f725b440f1c40b8c5cd00216d46dab9b89e34c5b7522469fadc0bd8b0ab2606982895add856a751772f75add85289534be701c53a7d54d9319363b4ec2fea59612186105e8256f62115468a0e589903a12cb9e9e2b8e8031c28382e7799e77820ebe3f50ed6f9518638c31721b9059e672bfddb86d561c67e388b2f314c9224c3a9b1fce9c087549dcd864de105cdcd8e8fe205da48b74912ed24542ea41e42169c893388edc22878ce4d0962d313994e52d92438e43afd42417b94572919eb4b403146ff7f67e226badb2252a45a538843866292abd9453949c05b49241521e918fe89ccef30af13248490649994346751dfd4ba5522ee58698246fa4bcd1eec7c693ca8f31aa30406ba47456f7a793fa7ffda77452ffffebafc24095efdf7812f92cb597ee81bf1b9059d366d0228d2246a5cef17b842eeadb1555c53f4575c1210d46d6d6bad339da98149c008a23313b13d4fe66928602259228b2f1825786c8b8134226087c0224eccc109ea1012214a29141022c0345055533458a0968785d4739a2860f367ac049601b1bb00422008d00ad80458044804380428041ec688c77763c0e557010d1101024a012935c17e398143b8cb1c4320af7a38b49f266a605d1e5fed39ddbbe08fbef258e3387b90b7ab03090bfffaba8ac00e8d64822319199bee9913889e31c39d263641f21cb5ce49b480f100b9e4e1efb5a4c5b9dda95b74eade77950d062369b79a8277464e1f1a112f6ff425498b857f1d96ce6ef4f65a64a972a5e38f7766fef68e94be29712c814ebaa2a4a7c952eb58a162d5b509861a41d8af0eccc7a28c6ff1fe58f42dd7b6d2c460c0f954241e1ffef4f2f8d9f42a1502814ea095ab5cdc4d5afa373cb2d6fbc996996c336f3a421297589c450e60f60145008f401ece13bc2bd74b4a4c11a27323ac0118022086d4bb27c45344393e346a0d6916a0432503750352930047666411e6cccd091c5c6e4945e9a226f62f7823b8050c027a00e600ea0131004200eb8aa96384bde23a357362d1dc5a30bded055a40a06d5c0c60bda00d6007e006c02d2e0923146edca25adba244a2f853f444329babe5d2e978b7e115635da430f1606f27b7118caca53abb59e772f567265e7f2983ecd65aa6e54dd38454a94d2399da3d76aad5fbf98cbb74169c3ebc049f75310cd69b5556a29c9e5f52b8925902bfbf3e76a743f053135beb76a40424aa4733aef04feef5967354cc8109e145e9ca9b332d65603acfcd2a751e36bbcf5ffb7eeef6f2566e1fffdffdfffffffebff7f7deb56402f6cbcef3bce0affdf0bf30e0c050204b14384f0aca0428f7de1ffbfdeffbffeee5effffffebbfe00204bcd455fdffbbbb7bfd7ffbfeffdfdd7d16aa3da5d493c930fc756a83aa825e3274fc17463d18a59f5629ad307ab99f74438087118616a3d969dd4c5c77928961676864a06ae68c130daf460936523770e4b89f4ac76a070f1bccea01001313af7e4977f730ba63508c8d77e37ae69731cc7fe5320c3fe7ffffffdb5391feefeeee6e1a1932bc1b39beee4710a705fc9cffffff2fdd59a722fddfdddddd3d5a2058bb9a320c3fe7ffffffff10001020af5391feefeeeeade6986042d55eab75abdc0e87bfe493902d7b4d804fc8101e2c53e8f017fc054b53a70267ea76746a6ea8d1c1c62b63ad276f6acefc957a1e8d1a353cbfffa14fd7f2a66fecf6390569293377800eece20027219205164e42b622455a68a1853877d8b88d4d00f8f3e33f9d023a23468e745c2c1d39d2450630e0e4d3ce02027fb1f266003838d20179078604050204e9a2906ec829480f11c29352a1736105157af00b3f82b0d100052042047fb1320212e82630e74cd2dd14e8feb37167feffe4cf2fe6f7e76c237401478e74edd95de860380579a1730102dd8da1fbff9f7966cff3b6517e2b81198109f804e4750b58408912ee025d9fba63b8c0294877f7bd0de021871ce8c43ddcd73425ea5dadb556caa253d221b8ee544d9ba9ce36ed5fbb5bd69efb22ec84efe524152530c28a974d0363840705cff33cef041d7c81d0b6a9d5b9717f324599ee747a993f9950a00d3146269309cd90a05a9d12042224ec0085080ba22e4b3c11161d638cddf189866ed842fd3f46ffff18fd3ffa7f8c74d24967a573564a9fbefbd4346dcba45a945999954057cc4c5c676dad5b7d265b3ca9ad6977fb34fa3e79b0032d7490031c9cc8228949500d424238a85586051237b8028c155f90aa9839113dfa4ce6dec58b0d6ad0858b9090bb0bcd40115d93ca641f450f169e4d71a34d5b8248cf13efda0f9a4c26a333da3304173299cc9b62091e1f6dcaac8148269355219a117d69551335b1c413cd625fcfdd31c6d895080632996ce64bc4a3eebe3bde33aa6a1b244ca16dd5c475b3493b192703c39864be8319d4eafe64ca604b0ca880010e75dbea66e238d3569d389aa2d65a99d43126e0a7a35f11332e0d4ae23843e539cb72d5e5f2518db85c3e8408e243606a4c03baf975063b14ca47cd47430c0356737de874e5c9877cc476b95c54a6ded3173be51ad45755b5c1ef880faafa09f32c9a58a613d3c859f1d27cd3471292ceb907b8c0519aaf02010115c1e85704cd3dd1dcf96da066cd933c6916cd144896bc2580d6c68607c75994b763c7aa561d3a542ad5f70d492c35cd004eb810a7205e003136e6ae246f627e94659216f226865994e33d92f8b6a0028d1466f0d40c1900100104e047e8f241019bce335fc36424c590467cd086a67c400546ca0f5e9812f025881a92f0440a1caec0523063a2822488f902cb166272a0c8525d14f140494c3783113a6401254b1430bcc0d25c4469e28a2a9c101101074770578d89a5324d74c52cc05489c1107ad8f1c507284ec0648b206e80c56b6a9c195020042696646060d1f2032314e57839bbdd9eb75e046877537540d501248a74a0afd7315e259d1323c7bbc471e2b543f5ce008bd75a910109a92aa2ddaa92e1afa65d19a89c9ff65567c910c5269485979dd986ed18ba7204048bf511174f367cfee7ed930ff598e453f2c9e860ad152b446fb1b13e1acaf1f2384e1267c51b35106394d125cd126f0bcbdf6ea4ff8fbdfa2e561255e7bbdc4cdae4e637b3697eabcc6d2618ccaf266f26d56c16bda70cd4d498be86cda9725ac435a9978618dbed99b7af61d82673ce2373bf63954db445858ecc69aaccd52f73dbcd9c2947e6381c99eb6e64ee94ca9c8c8dccc5282173b646e666bcccd1d0c89c8c19b926d78f06259b6a36eb94819a530a35a8cccda04193396f2673354ab0913a65ee4697391c5ce672983277b7cc7d35732a2d733a68e6569fb91d9e391e362c1b97b1319679d53738efd49e1e31a30315454eb8ac4089ca961944646922cc0cb0889283285cb1d52000660fcad270edeede69f0d521366d3b3ad5dd7de5e938d1fe8fd6d00a95e785ad6b1b870c9a1b281929948dee122ccad6ef417d9e36f272e098b939ba9bf270ccddddbb791bf462eeee1eebee6e1e9bbbbbe32eb4c20a2baabc89ddbf314cd442e2564259947d85f8d6afdfed7ec214293df9f4ffe79c928796eeeeeefefff7fffffffdff3d777777ff7ff7ffe8eeeeeeff6f397777777f77cffeffffbfffbfbbfffffbfffbfffbbbbbbb3bbeffffffefefdea30582d6e4eeeeeed7fbffff7f7ff7f7deddddddfffffffffdff0394f6a8940d9e9652110004800673170000180c08850302611487411c9af214800d457c3872603a281286229130248ac3388ca2400462180081008420830c63d2b13400d01be3c0212fcfb2ac23aad5d8dcaf01e0f854ae5740ee7f15b104cb02294ea571d3125d8164753f0396f13eb2f0f89c4b01049838218ccc5be062c22d590059f08cd9c80ba152b7c268e16420aa748a26470f32cbfee445d4394b234ff2c2112bcea93841869c009315fcd52484701463d3f70943af4be38ba820f14000649b77f6cb11e529b319afd2f30950693320308fa7a8dd0e44434f2d5bd86316039310724d704a0ae2fff4f5644d74e0e7422d95b116688150a1588b3e0b7099839529d1066cd3def25328699f9f62a66fc93d6655a4cd09b8df6ba690c979cf622f58c52aa8bda78fda2ac43cce742213ed849aeeb3f3959694ac7111f28f28117153e986fa1ef060892adbb222340baedb81747972abe4a41e0bfc8f4e7bd6167bf521410bb2ac53e7cfa13eec218fd64115334538a4f10bc6f95d4b0dd8203afb7808837b2f969fa2c1671af5b67138d040dff7aaf11fef31d713bf957d6621323ffbe85edccca9c1b28c1e60cfbd25f9854b9eeef9af22d35936c5b379d20a31cb6b128c0f4a7e16c8faa74283c61edbebb070ecc17228420656520ae9fc0ea0e4bf06f84376155e06dd7ba51f6bfb434cbf96e049f8558735490b7a0d859fb9c3af045f76c12050e6c5f863befe86bca9dbe723fa03516680d27d03c438ebdc0bbb27c93dfe6f92136ce9e9997c605906c8ea20611adf0b043fac22e90b884b1f19e84fbe60043f1e3637c467c3fc562701e1cd97c071238b79b49a2adec4a0e755a3e982df54d00bff13eae8d0db72d618f988c60740ea942339bd6180b7e3b22254894a842a71bfe7c618b60326a6ee901c0000c79592eb18f1b978dc8645043b7cfcadcb33c9117173df97acc1c828678b30e31c544bc70df90a2958c99ff5199fe02d74934dabcc807124474a68a07d3e3c9690f2cbb1266e57918a2ec3cf0f1e7003dc84f42eaa477be5634559837ac639d4ea44ef049ef331ca3fd8756c0b816d13440d45bf0ceffe085e968048c9ca742002a2610630b13da4c0f90191c26b5ccc1b6847b2ed0da2b64d3fe0089f0a74d67945f6ccf86586e4190b7bec5f8fa7b47ecb884b886253a16c9115baa2063d115ea0c06944aaca0888dbeeb183e8571f0449087c8203c932813856d8c8d2480d0c03edb4e3df4c54ce7d85f8932f7472d33221f2028187bc92a250519ea6941f0a512e0b5bb620a24c0cb692046c9d535aa12a5ed90e608aeab049ebed659042149049b49420e0e8ad596b251c65b832cc61b2e266b90ca413cc0972545e9635b50f8d0948608228c231c332015a5a92f8a2e692497f0a69fa110392c62ca88205dd8c2ddcd8a9243989b5a4ec895c607fc7942050120c1a3e341200e6c69277fdfa423332a2e7380784bf5e67dad0c699dda45badc723dad1fcbee9198736563f87951c1a4b7e11245e0fd3fe5a545f67146496bd6e5f37053706082879894bb20c252f735996a0d44b5c66c8d27e28201aae2889d54dbd5d9cd7974c50e0b14b5b3cc606f80ffc7d88c924dd33f0f7b0c91ce4ce9da541212a233390f10c676516329ee56c55d96f07f8f349beed20a8cd5dd286efebd34f9fc39b99e37380c492e061b931e11aca1eef4499c360b1340dca1fd241d6490f22245876f87a8fc7b1b6cadc1886fc776295f30ce2a4092b73d7fffce98ea0b857805077d568a84d192ef8b2baa30dee26fd31bf97f698fd95318b83a730de67e60aee69bb3db395d2d8ada26f9a85be4b05c93cbcd2cfd1ac89c41d20cf7a67325551a3edb4c0537bfeab7a0499b02ae25aa7fb3d729080fb2373eecf6606c10c364f203702a14e306ceac4433fa68e720849fb04291245851e92ed7c5530bf9bdb8dbb2c0536cd808258f989275c8492fedfdefd025afa3854d0443619b00c4a258bc27d82c1b5e4dc5af94d18153bfcc03fe3224af48c04be399780c33fd2876965154908542dcf0e4a130614e38a8d0647ec61c4e452c3e34e45b79b689c68c672a14f774dfdca913422c444cefa66f556de2a7d12a48016f3a4669584acac681cc55c8935853a307ef30f822d3a65f328c1015a033cff741d90dca63de82c46e91f5f259f62dff00e2ec4e30dcdbf3db92c0db637fb476c8aed9f3a9100470a0c9a43f5ac40fa63fb490d0126513d6529013265eeb0b8e17b9ec47f2e4a0a4f1276698df9398241d25a6d65ccf36019cb7f56670bf99b4a6b1af5f19219f3afcd6e3c5086086d028d78620ac90124620e1d722ff5c26b91130fa1378d741fcb98cda3c12a302fc75432b32b86ba48b12779327ae90104f9fc0436d897b5194f2ea6f3d17a24235c2ed59aed8598a8f89ff6596713c099064d40f2e04249e37f0a5dbc9fc7d7cf5b2f20d98b15bd50ff030e8279bce803cb3396aa833451a3ac854919a09fd08bff03c4520d9ae40825efa2ffd3d7f0c991c17f1366fc11004b0b5b136c4aaa1b86893135f13fbd09251e97c2d8295932f5b8eac385b02f437459386a120f95bb1860b0c3d9d8dcded170e65d36b725d8153c95782e79745c576c84c8fddb7b3a9dd61e6b4d17cda2886be2b937da511aebd66c89b89ea7c70de2d4226a565e46f4bb59c419159f1ba5f2fbbb74212366ae4cd0ac75e9be69d95135e1f976ffe96915820e5c69518caea1894b8409738ee6231d7f272c121d4ecf4e24446ec8519c9a6226e56412fb2c5638094143a25366e86e20691465525e46fcbb82179be5fcbb4e3d9ea8422fb7f47fcd859c9849a9703309f9202dc626f3da4ab627a8873f019e4e598bd9c1a9e3484135b28e5e9ba15fc190948ae85103ff172ec88b302b1136efa246b8a1a37d224ac0de3be45764b6f6bcceec9bb80c551d0441ab88497919f16fc2da56f64b115c1b7850a15ee2e6f79a0b3911937271e3ac6a21d8c740bc74f471a2e0e01730d77c41be8cadbc71c7554d6f805f5ee70521f79b96d2003eac8d3a0ad5985b1d8c95a5d2913b05d5f81a7ef76bc3da13988e12a4e86161383ca48154ac582ab7076839bef6c35fc7d1fe88ae7018e27ebd200df850373ed71d46ca6926caa8653d9ca47cce9f1e77bfc761942835bfef454b1a2bdcedf8c9641d655897ca0fa3315d5ed49f19a7e09a347293c9b5ccae17dd07ca58f3a379b4b09cc7355daa23ba68181542c0fc3d66e268bbdc823e529312596c2fbaa90f30da5bd4f527e2c020957e9296329269cc36b8b9275884416097722152d512c8bdda16dfcec389455de2e5f4ef47423a0e4b016b65155d6c3fe2d49935694b30b44ba53cc70b472e375d15fd958eb99d543450c732d79d46387c50b368d281d45645211e7a6a282d1159ce48d1c2e10fa122058105f6447d3a8de32ec9dafabb8cda6e96be8d89ce0d3e856adc63c641463f0ecb13570dba0a77b9a3d0f744b4d485a374ddb532c3881260d2b8c0abba3eb58539ea5c395d187a4400aba9788dd3384449d4566b528c3d3b98426ee25eb310fe1e973d4a19a2cf0141f423a8a2ac80c2bcd6671e678876157e461515a6a2a1981239a730a1012b58073930588168e85fcca5c91f3b6caf285d5a5eb9f8825750044dd5b7cae5ef8c88f0c7c3a412eb60779c2b0869d97d54fc71b5924cb05b6e7c1db2875a747314a7c61379e45a008b559fc8d6ef4dd88075be829a4933c38920e94f54b330c709180294261e075cf31d9f62bc1073037950bfbfac8eaa458e941b63cdc47c8bb614793476b98e046f999ba04d544ef6aa283d72e26e9918e18af2c3389979e0f17229af96695f639b017e384eb0fe9945996245c65221d66d00bda48732458067cfa1e736444eef3a6e402caa5dd176b94ff0820c446275cbb48ef306c4239a2b7a97eb0a032098c65a78ebc7ec31535b4bfa65908902f6f61f222847e96d284a35b3563fe7b90ab6aee1ec54757cdbbd722eb452d0b7dbd85a0e10f7b986eb71fbc3d74523dc669049ea25bd2b52749e232a1e2e0a7e83ecfebf4e8e0697e4831640ce769ffc9d3b62ce34c7c703bd081fc9289ca5c458caa3a41978a118b7f2e61e57690e82e205b410471aea915554525fb3f001728bed74ef7f8306c1f4871b3fb7a42890f04fe8ac03bbead6f05ba980fa55c348b476215e5cd71b2f1ae40731b3f2f2c5be94f59ef80d440db44f6601d6ea661106a64aee1414c7d619c5be2bbb0163e2df2db589d9ea31dbb229d375d3a65ab9907175c862e6969317fbe4b2132036feda2110dc755fcf41cd1681195dca89550353463928c902ec28a20bb223a5df3f65b3a37f51b2a8352fbce9f6d535dd33b41693ee31af62d26cd1a6f93101ee3b5438d4988e9bcaba0cb8f490256a51258c3ef3037b0e7d5e275c61a933fd373cdf999fb435f109a493642710f528540b02a025c9709b85eeb57dc20ba5db2ec8c376bfed0379c78aee1335b0b323a5024208242e6f2f50f5f05d131765604d6f6e062a3389d2708370856815224d9e77fd7682408a6845a01e546242a8332eccb7bd5678d7cf5cad2a2b8feb17bb58d7f702fa642a3722899b66de936ad445e9ef934d28cace2bfc2f31d1eaa4e7c009773716baba00e32b2e5d54db69a3293a9bc39e10c9a986a216417f6a85a0e46e60e8d9a759c49eb39e851db445a836ab24f627eb3864caa464510b8a04069225b327c1880fc46b88a87e89701104bee83b066d87a89cf2b2b106fca98c67fd4a1df2473dc2328829a442dffdc87e4be8ab50005d6b0a8958001a46f04d325037b720bef73fd34cac1f928bdca65103aeb396aa4e3a63f346fd03d655a03c8d8e9448e3664374b278fde3af1a60e899ad71ce0946085bc2031cc62f4f8957526fe5b96960768755a4f858a0bc58bf81b10a9fe6be0d31f7546358b4e47d0a2d0b33dc1d132dbb4807bb2a8623e2951926250d748a4e82c761354108e2516663b5f8a2a4388ea013e14af004b79f92d2f3ca3822cd55185ee2409bbfd7c7681bbd03d68bd547e0fc07d6c0082179fde8bdbde38dbffd7ec3afeaccbf211eb454c4b85cd6eb7c65bb916cb84e15e00abb47ffe8ad791dee969a1efa1aca65268af70c984cabc41d73393326477a2ac5cfbea620f89cd72d9e4a2e5172a076c291772db54030f1ae28304a38736f40ea8d41a5705c923d6df451ed86411ac78692c24a6986ff271b392cf79c2dc1512e822e8d134ceab5e5b4502f6653b2cf1e54a5ac88f6ac3acd97898639ea486a5b2cb7db131ba907a3267975ce9e6b76b846f548a95ade292e6bcb77c1a40a913476102d9e32d1fed59424cbf16a7a374e37964e05b5957f2638fef1234fb580ccb91692908887d404b7e04e9675b2bb174d6226b862e8893c8f6bb53025142d24c0ac513644d6d0c8b64f7d05a24eaf8c503ed75ea0e7f622172da945a9a1a51dc21854755e5a633b3de6b246eb2a662c117dc9bd9f6608bd8c474e53dace9a6610b2e7e65782e4c8a4e5d6678bcc23b3016465b4035a63a47565a5f548a77788d9a3f359d1543cc2f6ea5d963e503300a3e8f42ff958ae36ce9aaf4ff68a42fcfbb4c8be78cadf3e2939b27e829189be826a82f268bbfa7719c4d19392e5b94f4bd2fcadd45b1fe1d0d399ea7e10448b1802ec8ede82d4407a1f769fe60ccc3849f4f5467036057c732c4c3399b71fb6e7139004d16bbb413a68ad17ba37ccde6e64fdc8436f381ed52a53d05c8a07cf3248f81b3a1a36858df582c59b8ad69400aab2f26765d191a143e41fb6debfa1602df452f5a3231c93566d5c15b6b84fe2ba2f1aa151b783858b83a394b271b7073d2ee613ad1c28db6efaf8b4de6164c23db26c1282a1babc921178067d220ac97e3013968e393bbbea09ba0a972905add3863f19d57ecc35d0917c62c69d2df1228f7c1e40235b95c25b18d93f992ac07914a287cb3a6b819e0abe500a746d58f20965206aabb901a7fb67a7ed3ac3a60f72000d60ea8f35c40b188fec14d0eefbcba18004e328565a785960ee369b2eb17ef030dcb2e71ad008c9a3e4b15c15e8cde80dc794dfba2e0be0aff4b161b3d77185c6001a3ef85cf94707f4a2ac9d41f3cf54cebae9abc160d988713f2f710326977bb882911400d51a5a27453119fd57272df2f3ea947d1353476cd559b8f6248b0d687cf19f7ab83b626dc1ccf818d8a45a5a76d831ca4bf2f3f54a5f73050bad3319aaea2f636a0f7ba628522198c9ca3c2bb6b4788cc488fb4517736dfb9f6a4f6f8c7662809bbdf6bfc311f7839e1b20cb6dff36f88c6cdc21cacf8bba1727ca639ca3e461a9dd0453dd0fb0d8b2204fa2fa36a768aefea8dbd6c25d31b025c6ed3693ef4b3a1a8b43d4d3f87cf17999eca2ca76097449ed10e34a3ec4574f5f7ec72ca63f2e893dbb377b2a19555bd452bf233637b5dc0f6e3a617a16fe89c334f8e290b9c3e96c9e6be49f3926d4117e6aa3d4e784c52f4bba4772f67fef15090f0efc1c9dc2a8b278c504506405d290a9ff3141b02c5939c3b308e2a9d83a57b7218b3b21a3e27d670a6e016806cb74b151a3b6dcd941b76d268e98ef008e1aa074990ebd34b6ca350e43041c767e030e5b98b2703fc191426f0680b7b3b4f3ef309bed260c36b01deb91d7b9c48c5ecc7250da64a23a17ba91121c362e15984a6737db2449e02c2e67df0c2cf0999a063780cea39609d43bbc0e81845377bc988376a79118d4cf2ded82c4e61caec9c93cbbcbe4b0ac31a93458675bcef77f2a7f22bcaf8d5d41f11253f3d64fe41c233c2371aab7f6e3e031218afc66f42ecdd47b4e9abe0e5350c181e1f41660de1ccf05d46a59b74b10219cfea2690a57c3ea4160436d385dcb360b4737efb247846de0a1e4c48b76a62d6105282696581114a4c0a488116517c606e35434dc01953dcd22ef64db446f333a922a22872660b72960f7b0005d50223013645cc3b3abe95d2c53dff4a953617d489b04e45b609d990bc6de87189a3a1dd6d73533029bef996e214e7f9db1ce20ad75e1c7baf4fdc04a726a38164fed686da967e12361337ce529d34e851d427a60f6c5b35f0199dc8449d83efb147326e9d067b645155ff9165fb1112dd8bdcd9045590b5c351f180c5332c60d06648822756ab3051887198e9f35c4ce5af5050d81adad583211a4f9925a8d64e00b704af0db813112703e9b7374130236140838eba60c09da3d9b1c2fd9f5119cefcbb79d5fe571ad9723b085029876a186051f3c3e6fcdd3359bfb2035353ff4e8c7f658402feff5f51f9c81a80d5c65e04d1370585b23ceed36cbe19551f461c1f4bf5d2e938b481e701e2047d532ad5a16803e8d9294764331f08896bd083621f9a524c1d3f91e7af7a51188e5ab82aab0e8d882893eb563051b9e982bf3b132295c10b76295326558f8227d4b41dc8ef084f558dfbafcbacdec17c18424bce38610e048e38b8e8b4da53c32405e849e8d5040ccf3181a995ab14e143054f663756a282cee9019b1b14d18791e01f2a70761ae8790be9f11838d4533c3dd030f517e15ba213680afdbc48b2a2e0a1c7787cdc81b7e652afa14ab25ae27909ec302c3a3ae4d972191c5dc68dd1240f7e5f6badcc400d98e1295fd4722e418d51718adaf18789ddc8ebe8ad1bd3e44472b95341b0cb2ff0a104ce8e3b8e56089be6a101cd0c111ea4393f9be421d62ee73a6e82a99946cc9738e0e5f6326704c7ac5845667f20b946d1f891e8b933c7e83ce2969a02e236a96086465508d047f4af54a64de334e545b26b50018c8dfc69c551b05567db3e681957752e070b8197c1e47d854ed975431176729aff24e3dcb7dc02f55da1f9e64e9e952a7968e70cd06fcd77f360dce7aa9c3b92a048fb81ddbdf6916c8355f7df4b1ec5ec248e3f5e81f88b31e1e9c1848e0ad4c4bf7c292ef12f598f75780e9de50b73ab41972dc52b7a889a0429604875f687e7b6a055430f37e9f9fe2fd22585f5ceced1b07607bb989c47993649a3140d26007608e05ae0a8ae2e860174caa8aef9f97ba6a13f3c78af6d0df12626987d9ba605032c09102664b09267302b0ee94eac26075a90680737a217982d4401002e6bb034b32edabd4efb87f45a0ef8e92fb370c5afbb73354ff2275322453084b1d69cfd015ffd2ea1d6dffdce826323b6e753a43d701a213b9fd55a426850452c755c05ef2347f891f51ad76ccb5d4aa386932fe1fdbf8a8550c15087199aa4e3d7d3baca773b81ade57b78b221c18f105b486388c3c79ea1da5b98b01c0beb8af90660bb5f555d2ef339715afc9f68ab43f90f69cbaa5e4d1e5ffc097d4801ec27ff53e49b3202538c4ee5612672e5188fceef7efe3c8a56a5d20b3a247eaf43ac257e81a598cf26438d31387330171a8c9c72f60c07d6f33105c284860ed030068f4d7021b41a4aad74ce98d08a707a7b07e194da5a11053f224de1a630410290e0878ebd2d707b24616bf390f4a73e03758d0f0392eaa0b425c07a363f7610941f420d98d346353ed5b13efae28556b2d045790014dc44d9f8281dc4cf642d2c4a76b7ec3a0200d291ca2a0938dc2bbc48616b96b83564ccae6a3b47a4b6128de1b586e5680e0d014ade61365c4e3b72fe54840f3ca986c67de7765d8902445bc75d06053a7a7933aba4c0d81ae4e0450ae05644744e6bf238e78c5ed1eb60e71f7b00bbaf44de00d6fe66741f788402a4afcd8cf6a61e6551eca069bdc0a80325b8fb33bd47a2a6a5c99b16a7d2ab7e3fca8c258915c5e4bb8d21537a95f59178ca76ff3d41951253f8e1ffb9c60bd6c4e67d90271c502fbb3bef76cdc9210dd5a540a96a2384f6a4caea9e24c174d2190fe21de9ba73d404aa3b72c152b8a9f901a6ae0fdaed79db8b68c4ef9dc7b316dedbd01bc60cbc4d77a83f64375fc25a61ed575651ad5fb01e43a205651f1f2a48c571507eb527fdffa1ec42057bce3ded142c691926d5617fc03e022124ce03a2dfe34045b53723124acff98c5250e4ce75d7f0f8e5adfa2d2a8c693189313e83c1ff8e6574f1ddcb96f03eee47911bc7e263f9b402e22340f09ec84874f38f07ca9bca602936e585c0b2da7a918faa186363798f19f45ce6e1c8dfd07a4ff07d38c530d58c4a677a3cb2a1975197deeb78cdba7d27bc03dc8f4aa6773fef51519e7fdd60901b20483e0ac0e2a8a76a67984f3ccc9f41c5b911b068a689ac9a55b253f264ab934aefeefaaad669b4412abe52e10aeba7bac013a558702f82342bf6dd41eea1fa278fc88c6f45552f5c67f76964b7e4c385561126c2d894f2b19f0eb368c419d1c0e78f9f2109f0290d1e018ce2b15d1f018dd6d0e84bd8bf33301e16d8b7f2f7c469cb8fa7e1a2e0cd2f47c0542df36c842c43349bc6abb54cf382c38af3dba75bc4bbf33aa3a2ab0bde1b0886c6d7eac05195a689ab70dd8c593681326c24d8d20c7cddb3f96731742302bf76de43678cb9f85a57e99c1d48d02173e4fbafe433b213b90b685f7300af8b6694f5f8dbbefbfd72258996908f826e1b5a58a0b47080a83219a23fbc192a3e09df27d5b8424ae5cc00c733e418c458c8923f88d274d16f537a566c8fad9b8144e4f7147a41692bb3737df4d0253f3b7238f68aace721328edc36459952f78e04a545db64fb16e0b682d2556e26e423e7775cf8c813288900a95871baf418e107a77dbec70b30e30f2c31a7c46a3e334d3a5b2bd01c473dbddee4c9d431e4134f02a43d411ae809dd5dd0d1d8454071d0d4ddb724c562448fbf91285bc70e2f57531390a35649d739c9f8bbb37e37d3b4dc69a1f6d7a8efbdb1986d32cf908c9dd7aaabe632cdd6d07e8a1057fa58ca534f8f1f18270e561f1bd63a348bf35a66744b4d03a0bc6892c34d266eba421bd6e54561e3d3c6243a89dd6b8235cc12fb0a45e59f8496981c6129ebf2d51f2439eb0d22edcee979985c0f31897d311cac8aba112e4f9b27764ca97362c38449828c0fa056e9a8e5d7c44a0a3cf82a66069ecab4641c1b350086157f1218903490d0ccdbcc198d5cf68bfdfe0c72c662c883699a4e04f3b2a926bc6d734f0842647affc96e1cb8596cb6a1b18e81a1afcc54e9b254d0375d87e7d766495c316f7591d3b89cdb5410380675312d95d8e8eea08ad90e0b112b6ffc5027ef78bfa8ae0c95382bfdd10c9c9602c9e22ea0608a6b79579deb1754ae42181b72e6e9b8d03d8bf002967ca5aa164504c0418213bc32e0942fc46d070ade6e6e84379c31405b63b887e60761a88e628b6c4d2949e27a3b310475545231c65df3b8668ad43406cc744902cade2a9b48876c17fb5ab8ef101a04908d897817e42045438c4b47e27d32d214d69debc6c9df5acef01f9be26f99204896d4df9d528c148b25265800838af294ba9faa329e024193a24532503c75312c57205294b3d568859f07c5b1aeb0b8b6938fa51bc446509598931688c28780c9c871841c90f23a99ba8accca57b45545bea38e1e35bb9c90456d4c423902b96ae138e28c5078339df788e45a5cbe5f7a7453d719e8c22af63e401d20d527af6db493177eda0fdcd325d52deae92261c56e595e18bc4d054786b0cf6e881155dd7089437acf450e64348957f1bde5efe87ae5d9301c0cca6a315f16666edca149a4bba64c2c5b6525961553fa337951d8d4e375433b845658c2ab1d5d01f1fbb2ee1f9fcba8defd9b37ef64438f54d16e713c13eef45d9b0c1ff6a7cdf597429c84656f9fd3c2ec937d8a6e03eb64aefbd1a577f700c074c4d232b440ac92455dce9430fc89de5c625b1a42d2b2fc5e2e5b3ee59ba500494c2e4b5729e50a42e62422bcf733bf0e833f0cf62592ee8c4ea8f2713584e2a9ee170d8929c454196517d4ee94d79be828c856abbd8b88a53024487f2e0a378e625e71f7a4894f4dac5690fb65255976f5be6d100e2669566aef47230a708bd71579e7b69409b8960a52ca1a52238c6f1f206afbe25023c03082d6269fe66b197916bf895fbc66be062cd631ec60758e5b4dc6d33006d1300d6ab3957a8edec4497438d8a8c4febabfd896e1b553b17757706a714ad4337eaded08871317d725badf45bb95e42dab7a22e41655eb265257edc2b71ded4b01b8368bd1d483daa3236173a4f895eca8a6be8afe50972390059eb43bcd05b152cccbf3e90c9c64f52be0a43c3b2caf76854cda71791b51cad544ba05d9f3e5b20748690722c85b7c51f17180130a2df273167caedd7c23aa2c93b09831eed7ec4df21165903920e9f3058c73d7d77cc69455a2d79b2500f69dc6f60640065131d126ac72b7989633559aefc050f9c065838719f897cc1a43bac339342636397481aa0f1bbb28c59b7a9652585e9e18c25b4b17295e30b02914cb1e63eb2c254a6ec8461b7e18643da9631a81f1444b6933d513fa62d66219d5f0baf8bc7beff9b4a0448d045a962d4f8e16b5a764e022ac3faa8a08493bd6f267e733d58d336747667c425c6f1e1351ee4303247c8f3c2a6b1dc020b90c06be04eb34322b1266482526b8a0eab199b21855c2a53f31a66e4e7168896f462baeabb7e408c87f51b638d7f0338d4bdcb6119b3c9ca08c533947a400a0735596dd6806217351bced0aa6b7d3e6569d0523058f98ce2096290df821643a10de742c3b161149cf02193ace2cc1986214f33def6374c7a298a16bbab543cee86ecf9f9e92d2075baba799dea419d7389f17595392ce805cbb1bf7f917136b6181e85473b37bebc6278c660105b485c0591266377f8e682d344db7fcedea73f9eaff7d9362f87ef5f9bc7b8539860532c41ea267d3ae34c804510c1332668d49eafad31a260254a54214020059a62ba2acffed83151303dcbadb9e8d9af21ecabd2a1091e63dd4fdc2cbd45825a1b1e95ec94adf8446af56e93abc618c0bd2ee2f6725ba997a3f2439e2f5c2a5c8f60b5cad114cf349987bd3b32529a56442c9b8c04adc5753721917c4042fb445699f8127f4b72958096f887f19fa47424e8e6fdf51f793553673f16cb0a02bd0597d48ab9633ecb66a1bdae5471ea61759d9bc1867bb678a14082324adbc54dc8d90ab9ec025bd3263aa653280a8811fcf5a862a944f9a2131b77a5bde6372cecd126aef8f6cc0d09ffba81d896ec4b6265cace87b2c39f338e1c45c28c4fcc8a58d238b1118978106d428653285631c41968adc936701807350e0c2c96be56a657463b5f3fc7835084e619a413e87dae5ca725f5e05d9770a1d1f9db06ccc3a87af1b464f5abae5484283b80b7581abc3704f394f42837025942dd9a993a38551e9eee80980bb97edd81b32b5a81640d080a7c63d31cc667836deadc3c2c3df6eb70afec06aec3a43a2b60213a19273a96da4c49402b8768e4cc4215a1ad9ca66af0475bccded98d7802407749250c1f3960bbd6e730a4604d80e9270e748214ec9f69d27550f4c644c597e29d2b539e3d216d98eb5fdffa201cd8b95b46bdc991a82622508025d1d7dee335428967b68f8007912dda938e86b232a8b0aaa9fbd0fff8683bc67ef1634175442980858dc25ea71a0ded74c5e93c7639cc999c25f610f91e55b84d7a48bd52a695d44d16cc6eaf04e0922db6709dbb6f98b4de7221aca1a9280fc053677094c2cdc85d5811d3a06aa246aad8bf643f69c97ca28407144c90c281b4acce2b1d58497354c9f08cacfafa9c46574158f43af1399cc3a045a30991c4b98ad1efb3014d0472cc994e62718935e3c4577ff61cbb99ad57883ce0b516d2465c906fe2f3bb5f8f06ef26ef16cf45bea4000e9e19caf4e6ef20f0ba191aa4219f8d648c3942da23dc7d07719270f52213020a62670974291a0947a91e9b0ab9d3d8480b4e4644972ce93f96f404eb07228f530c858b14b6703076a5938e4fc44b2935c0189dc9a4dd72f9f5e61d8ea8a939caff6c1bd146223b9dd0438e839d2c8dbaea034d452906c6778cad62214517c0296e08f72f5cb1e0f9c8acc226c8623967f7846de2de2527a4b5219c1fcab8058a2c1b1159a2081d62d6333f24e898f2b9108499db72493e9970d1356d51297b1d44bd7b97711e0178a0a09260e300211012ba90215a6d3aec0152b8dffdc2d5fac51ada0453254b838f8cb78da781ad9b57f3d3bcb55363d3fe999b92ba4a4d43ce4f0117e0e5215a99f1474de575d6102698a2113fa611fc25351b2426bfa7f442821a34c26d8a80093c61dabde371c8985f34de8698adc58403010af1d30c419b3cf59dec26f92a7e0d40b25178ca5a0cc7748258f66d82fde68cd626156e27404c9d3ec3047d9ed718036ec87233948c67020b8a9aa7b457588731b1a8072b18dc892f0dc16addc1e5778238c0c1e75a694c33a057c8e9c41097fcf16e432f1cf8ec5ea037b78101c4117ae1626a123018c5dff25051bee2679201db45f986a69523631ae547e9062a4b68ed8cd9c967371a9f88a17c7c5e7df87631da5939273b178523c5c371b2f690cca07ef23007198571b0d178b6851a242c6f5b209e8c864ed035b81d4846c0300c0c46b5bf190c6e9fb1636cc317a1dbe8a379c71eccc1ea410f2c344dcc3a578ca72388a8cb2f77c91c857209be8e1d1583e1e072d03c3b68d98175d1da7d817e0463ebfdb87f6614b61afd846e51ef6d72b6a9b15806abefc1badc3b9e0a7d11be57768924ae6854cbc817c052cefb46d84883e1f9b8d686e6c66d1db8f9d522a735ea1295543e7791f1ae5a056a805622d801c8d2a52118a0331695c849e9f3be6fb9c77f6cbdf7ca4838c10c1ba1612105b682b922937497c78ecf49928f27db9c98a1c6b0bfd6206e60c38cf51e16ae8502ec515231359c121a074eda5161e33ecdcce23b63509aa82021117042c362ccc36bba09a7901466beea698e119c1413fb4d6cfa5d67f258dfa463c9d6af0992d29f289181e0e491c3a75141d5ebca6e1f6c581257cea1230db456851b48fa49ae7c5eb81ab98fd8ccf2e4614552211012d915a2da7064b4702a135409f30d46eaba88c8a80c1b4c3ac7a12d82ec65d33a1c602232e66351b24e07c5b73b026117c3173e36376888ab74d18b6bdf7990027f17b7a814f108c3668b6ce0cfbfc3495544f728f7220570b103304121b1f88ab6aea759f20d6b9c4274e53fed4a459291eb816cf13144bfd548719f2cb91b0473bd1264ff777a952efa36c2fbc1562d41e6d5e2098dfedebb2533cc6f6d740bcfb3d4bb0e0a7f0878f30ce78fcc0cc937e5480f0a892a262a64a439ea65cf913f8f808a7a9a042e2b41fd38f00a077b0f1b2600d56c7213111d5245f38311a71374807ff7274ff0a497f2658973201ba4d99f6127c8a2138f0a1b5eeadc38d85b4fe54c2c4529e4284c9d95388aedcaa4f36f92ce46510d9377801f52f7d45a51eca05fccee0889427bd53296dad86e9fadf367799c7d03e5f7ef00dc9aa1010620afe6f6d00ac2601020450c64b546907d0ab55907fddee05ed6f80cbca3e999a149a093559f356017ae8f9e6ae819cbf1988f2cc8615ad31dc0ae9a7aa695d17fa3c21d4684b2cd7aa2ffd1dfb14dfbeb73cfcb546d0841270c3dee5ff3b7440ebacac73e98cdc3e32eec9dcd1e6c74d01f525b91b92d08d25f9061f676f56a2f646d6249062f5671a092150c9666ae534a8949952fe6e71cb59123aafa18f79855faaee0c999d9b14f1b83d6ae3bb3cff0c54abba1e0612317ed41bc11c54f679f2a7cfc526ec87074886aa8bea37bdcc819039c22c4b16744f440b58391eb5bf89c388814c15675924a31d14a540a9fad7a83b4154bedff3f8489d4b050010e686e18ec675e5cfa901998ab4dfb0ab4d0f973036188d6dad8551f50f2adfc480a7646b073236055b2e9d9f2928e28713244b25469dbb63dadc7093afe8baf582c065b81a85c4ffe3406e78270bb7fad696f6346ec4d607133467360c062f876a785a4d411d70d263586d28713abd03f84365831da26deb4e832db0ab170f97c04c36167c27016750439635c75838309f4e185c3379b322dcd49f517b1874ff2291ac201f27df472782ce7a4ed08182af76f742042c386b5c8c29f06675a7572eb387fddd1415cb0a90d66a89334b25069784ca899f6dc9400b9f33ca6a51baabbb8cc9da38425321faa067d0a54c52092540307dc1ed8c625c8ee06640b8fac268963dfbc153ec8cb64bab4979a5a8b40a86d13655ed826e2aa28ee17f1d9ac00527671cd9ac8cd8c614e9a759856ec2a235f649fe2c39cdd1d4de40b2619fe0b59f202c90a009f9f816b09808f95c127da98fe23fba35a0eff797065b88135e9b13012fe9e36c2861a8140d214a6096497ac8c40f261ecfb6bb902462745d30d4758732907fe3997e07c3cf80ee9b385bd7420c54aa7b8ad4962009df68a558a36e14209321a8f4f4839a676c798e331ff3f0608c824de6317a3dccc284a0fd03763e0a6ee7456e71a115cf6ffa403a9f44132630931a239ed0337061021754a06e019b897c724cfb20cf4135b872edd9b8ea34a566d1b787c3ac9b714541237b4b10a0e9cb5e40b9d03c77ec26461cc980e01548a56f2a1df46880542e7c7484f068c9e3f16b205bb6300af9c66fa9c750f1f9e588025e18f250c0e8cf149322472738639b0e47ea0f6feeb663b506722ee4aa0c263d09deed29f630d05ec3814f6fcc4d29bd54ed922bcfddb0b882588510777a51dec6c1c77d8279e38f1f01b4158b2c8b17878382670f2b0b4a891f82ead2f60b744dd43e4bd23e0714984172e45116829e9c570d9d8c3b7002e992256c0a1823da7b911b594f2c78499bd6ea307df12b40a41fa11412a1c6e5741c9f2cfef8f5985a170fb8696f0f161648b375a9291ee1b8b0f12ac5e53834aeafc7855d528f07976228de17463b8112834e1ab13a24a6214480298b2f914065050f4895b85649fbf08508456335d4bcc8a1aa203cbcafa4ae3e295ffcf4142d4a0627a12d1d145c6d491684c40022d6b7315a669394224c365ec10e363ba047530020f73ac428b8032fcd37421c5eb7a84a454417bfd671c908ab887e73d252ab4262af17edcb6704feb538632e659e77440c598d916f92c74df95d4e38a7a8d5edef508bd0c42b1efcb108cd696635295dd275ad4afc13ac8e81c40500f56f2b10ac5da638b9ac98fd807a7925032fac7551909406648beaa3157c2fdc2e658e948ea92f787f8b700e000c14ffd18f57a8a8b70f7d308da491be631ea5393f4fdb868fda01e0e09cf9fe5ffd5fd4719f986d4fd99fc5cfec9b64aeac691e48cd5dc54562768693be8e30b986018476d274166b00d03fedf70149019e71bb24cb87207cb63c0b501d551df7e4b2e83205504acd603baefee975c30d8554d07f9a9ee2bdbec862e75a605394ed496000d09501da2f220afdb5938e8f141739cfd0a4a0b19a7fcd997bfc0fbe9fec1f21118a62b992b911c45c1c9df261bf509e7c3a0feba17f1c25a17e81093d6f6eeb6e5de32c92465a7091e0948094695e55f127b527893389b641167655db187e541b167f55f0ae3ac2c8f65a4b4caf28f21de3c2cc6c38831ceea7ff3b0d5486d95e5efc327fb7b1193742cce7c126f5882717337f6ec9403e6c6197f1c20685a9e3436f082884aa342808284d18c084680aa1a8dfd5153a3a9a9a1353f688dd2d4d8b061c346cd8f5a8dbb7b5328261430501726cd5163a3a24e5de55a24e55c6d6851032d7aac735c0d1020406c6a80fcff03b1b1d5d800a19452aead536aa365aa01a9546a891628488216336cbb29da0c0f1ada0c0d0d0d0fda0ccdff3f0d0fda0c0f9a191a1650a503be29ecf7aee4d8a09b6ab2fe6cd25663d32490ee07d27de94e6db406c8ffff77452036b61a1b20d6bd06c848474cb3d1fc88a289bb7b0d9006b83fa5be840839e412e7f2df080a1ca5eeeefe79e7eeeeee5de7de79e74e9dcbeeedc2ccee9c6542171fbdf7de7befbdd7bbf77adebdf77af7ba288147cd94e71222f0a0f3cd165b69bab73f6aba8ea6a6a6294d4d9d2db365b6b4cc2bd6d4687ed438bd94a6e653b8462354fb4b554dd10f954dd12fb915e53226572e6090cb966c64a748c973091194b04db0ee687286e3feed9794be727f05e8bf9aac5445555445557446dcd164adaf6ecd504a5f33951b5f947611b87cbd6a8b47b76af569bab5448b21e41277b9546514c0a85418cf1286f32e79314cf9c2956561b2fde96a0297b727520301e38327cc86f040138cf881011db08500082472e8c18a99a9832a88c0831108a240c59422043e34610721aed8a9023639c08324021eaae8398a224717321128c133440f6dfe651d11f4844f10b870c1900d312358408410124a98009b3f5ff8e6fc7b32aae1922461ea9b5480e99324d91fd375c709d5e0f77e3261942ebcb4bdc7e5b88eb396b3d66d77c7127812dba89362b21b9c2360683ae1ff503c16c640a0296363299edb94972428e80845474547472b9fcf6c56058d884644a40a7572729898259925a99e5bd40a72bb87c2a92c140fd75597098533612ce00d22d0b35f111818ea539e825ebadedb59652101dda6a0c439599801b0ff71e20d9c3d62e6a036894cff937143aa9d5463f5a61a6912a7e6e8dc401f8b99a33f882a7710e64bdda9333af637638645f90f7bf89fc497fd749d7b7626be453989b21fdb3aec88c10ffb0dea066589dc8f123465eccd4a05192cd649ec903a271d52046a5881bab4e05081165597a5d57213b18db2484116c274a177688ec66262f16f10c5c4c480a1d8b4211b51ad86a4054578494cf81ba5e34c18c53a500c8e1cad1f34351d2f4d70d5b1879a55aba18cb21fef8847b1d7ed8ddd9c5b57d8c3be0be5b1d840ada3b2762acad843dd6d1d74853dba77853e3c7f2df491eeae71d67a4ff82862e7346bd6ac0effd43cada31f8bb2ee23ada3bbbb6d773d0fc7762ea78f740bfcc09cf9a2d324e72d843dfc5bb06f12bb7612dba7593e767777fb94e970e759e75a80c162b79176c97e50be298a8ce72eb810f6706b3deb729d449a24bb7998c9f4cdf5ed38171e653f25faaa1dd7000610f6706bbd01802791de8edaf4fdf4d62dfadd83dfe237b1401f8bfd02bd410423808b5e6e14b18d42b1916a273d69b2bb8d5cb21fcf7a6e772eec051eb0af75f8087dbc5c27d1e2e002884d734c1628aae8c8e8a885a323193a5b9091916941884643d1886a99084584040808354b029493a092f0ecd819140e8ae7a27232c68fe2b917c5c375267c4d98f366dccec40420a64ddf732ff4633ecfad8bfe959580d6e176f4a01c3970e0c0f1426965e1c0f1c2bdbcb8b8803c618fde6996235093c9244ed8e9f4ed79ed72834e171717ce64fd64f24e26dbdd086fe94608830c1f47d1f370f73f83e364c84821851458dada9e358cb047b751eeb26bd9a85b4d6ef6fbdb3a8c1a08f480000f140260d8c9144200fc4a10f02e043a1808709663f13ad61185648025beef346bedd6e19b2d658ad17c9a84d9a2564cb2bfa6803f7fdef0416ef64709ff860bd02864cbc5246398ad466ab23f546a05bfcae9e7d34c199338690ecd816a6dd8a3c471ddbd9704f7074fa764820ffc42d30903a194de4b1135d997da2e922d440a87c8fd2152ea13e950ed53f158902428c807352635264c5e7c45f8cc66500009010909c108673a393946e4f8e4f8dc20ea3ff5c87ea89195546af45865d115d1de4c1668ca0f7ee3461c67caa4c42a2be54875a57ca7c4ca8a244e584a4a0a20c871284eec91fd98bec885a57c9832ca64451ef6e28bc0c0540f2305875cebab51198d7d5fd298cda976a72dcfcc06551685215a1fa60efa2a714e16b87f21ce1980eebf94284b7d910bb32fc8f48bc0c0e664c11e3175d0ff66a410f189b589af888e533d47749d66f59f44e731893e9b2f63bdd520cc971c1ee3c227f7b71731c9fe9525e0f27e9f52014a25048717c5b007a732046ac49545b92f880d64a6176c1db3f952c592d8f2adba9545b911d3f8380b34d99db882a19469989451499385f62532fd12350b9356a48c6e85153e310235dca0e14b4b0e153a1638b127e54b464da6bc8aa8f2358b299302214c17ea0ecdd1df8af895f54263825e47d8837b1da10fcf9cd8a3f22b62b589b528ec594989b29f3ad43ac64aabac1a9216143173705fea57be551ef56dd364bf8a782b6b06f4e9c091e3860f15a71ea9383f686a2d98501c3ba9b21af5fd3d540b6f643c666c4e789b6cf2a50940af57d88373b9624fea2bcf58879ad575d6ac7e9428ab40ada3e9d39a083077bfeefb8dea4e3756a31c5ce24b5fafb087f7afd087cb64b9bb6fd771623552573e25de3cacca9a5c196badb278bab1b441e40f35569e6675f766c2266c0025364767876b01940165c21edecb843edcfa003519e6d00039b25c5a9d4cbfac47b9bf066104198be982f561e6a0a1d194a17f8fd89c26711849a5be24ba5c52752bcb13ed8e0ba0d8f237efd811f608b1cb15f608310b3ae492d8b3f2debbd87343c256c6ca53779494bc3ad42ed9cff7ddb1f4a09e8aafda71bd00be10f608bb1e940b5f670025b8c428b1f2ccd0f00611e802024c9f1a61d1cb2a2815d44f049400977686aa6228d6a38a546b92589ff4a4f4a04694146eac0828015619653f5de3efeff02cd34f11ef8aa89a2cd09f0498e94180cf070ca18faf055ed1cb3a421f3232377a100efd15bb13c3007c3ed14e94c9a27f45183385e94d16a5ffc9d08974bed498d898bc98306981ce570b2db4f012a2d1808482845c42422f3a5dafd7cb85040828c767c7a7e5e3e3a2b3e572b95a3c3b3b31604aacbaecaca61c01ca1485fa942329475a74ea68b55ad68749d20f53449b6371e60b3df202c5b141a5a0f942ff85100619d9bb050000016893e953a2059a2cd00f40188397cb0d64d3687144b1b440644b824cff9b0106b08a37c5f29545dd1b41057c23d82c18b013bd9c23f42123773870bc1820a52aa376fce69809a64899e5cffd77ebabaead2821d4501d51359450bed7b9f1069a4b3a863dbe0e9ced32b9c2b1859ae5efcdda895104a6d97e87307846eddc76503bdd58aa7289da79027ee108783a6d3bad89c6e68bbf101c9a9c4e505eaf0861eeb48bcfdbeba85bfe561ca25e5b9c5d64f7f26bca78ae5fd2db8d2beafefeed38eee90d877bfb3409bf7dfcfe0bf01efc05943e9c46d97ee2ca3f130cf0cca7ffbefb5bd0e9bf19bcc74f83f7781c32e434aefc3d1a4a6f1a877ce3cac7d51d67f01e7c1b6f5c39f836a50fbff4210c33c1742714294e11bd79223562d26450113db24f8b56df72b34f93ecd77248e6c6d77cb1bf04a663cc08f372d9f17a4280cb699ba9fd344d7a8f3cba67becc831ff365b5c50e8c6092c53c77604450aec20a27d9823f3e181cc0e5a4c1d0f46788b4d1588fd0f9e234e1161e93f207b1dbdc85a20d7b846fedb892817bfb3eb8b74f245fd3cf90fe4c77368d5504344737c95dc723ecd18d33a18f395f668f3ff2a967d248fb34c696469b26ddad5bf7efbea4b4bd9d524a81b8db00a194d600a13b605c5e4dfa0c0f77a7401a40b3d9a68dc640157c1cc771dcab54f7f638ebb4d65a8eeb5bbdbb6db5f69dab95f3b14eb7cf8d1440aa158891b596c3a7dbf90ffd28b66c7f07ed70a460d6668ece8b477290ce318a60d0fe9c39ddfacad3339a29e3f9052430fde65753fa99ee9bcea92cfba0d83ba27d130870e31869d23ebdf5cdad8a1b011cc176c98d28dbbe555bef1d4f80ebd83b3eb64e932ff800fbeadad51d573380e1d350fa6f1cf27de9fbd2b8ba434a0f8eab3b629869085c478ad4a4b52fecdc762acb7e49c44cf0ac2c0a5459b36627a5992f732e81bb914793f6b971a6491c3aec40b15d2447dcc7cc5cfddad1a7d3fabf4ae7bebcf795fdd5ba7efdba75f7ee5f3b66fc5e7b67aebfdc635ab24f1b103fedcf075ff667aca53f43e76bfe6b7663d9fd4ccf99c9cd6e72af9939a65e333ce69caf99eeee2429466637217c3d33225c914bcca40525cffbfb9fec873e77b919ce8b52d6f2e5449aedabbc3fd3a4fdd2f3eedb0a78ff6a79a3b59ef5acc78933d65eefa9c779af9637e226ed2b6647b7ac8de9167ddb92edcc88c6e80d95a5ba220f8bc1037cff16ead6d7651b2f5429bcacecd94adf04a95e74e2cc366a523fd3ab1bbee28abe0ac6b33c0daa4fe1613c4b3ff83d02e5209d31a0ca4154b9f43dae662692c13732ba2125f9db1065e2ffbf106533dec6af88b2957f11f288e2cffd178b3c4ce567883fdedb105f88451eb6fa15f1e6613174726a948849177df83176b0cb7ef01779d8adbac628668b0235396550debf81eae95f88336c7c8de6ff4998521ce0142c522a158370193fc5628f8c134aec59196d88b222f56dfc84dd3c4cc6b8aae36a8696b7f134b4bc0d1a3f04c6b73c0d34544fe327ecc5cad360e357c6213f4364d4a0e1c590957ff113e3b187c68b2b3f61e3f8329e06517c19e20f91f1e34fd80c15fe6b3c0d335e857188ea677c8d71c88f8dea67fc101828b1a7c6b788370f6b791be26c1d718648915ac7781f45ec728b4843ec9d2482aaab6d37b6477519db5ed0b16ba691fa8c74664479b23fbda131d5fb8a0c18af5a11572d435cf57883cdcabf78b1a25a19270c4677b9c794f8d3af22fe5095d44af97562eb884d2b892a31b52276ac812acb61882ae28b9b0e52bda71a1b67a5fa18aa9ec1187b67288a5912bb54d7e6cbcd333b8c5e2922b851478ed364877204456744c9f941830395ddec4f759832252a236bb873982e1ac4ec209823c8227e085510d887203c90fd29162fa64cabbac049d0224f5b76cf5fe49206517404e548b7baf0fd6951fdc8caf2de340a094793b8a28f9f082c149fbe6914f243471bd3e35108f8a617823f7c22b00bd028642a82f88622fea86832bd4df8a6f0861f8e42c2c71ff84460a5ffd50c183b891f7c70148289b4679a691af658a10645ee799ff70e2f169258622efd9c3072a944f9a15f7a6f4e990af4df2f95fe9641b8dc3f90e0d2cfd0070d8c0967147a12bdc7e2ac2c93188ade783ffc092b7de1d380c337fd10d00bdff479e2aaf4a69f30efbfba56a57135037ed3d380df340ef9b139bde987cccaf2461a4c8f1f8f434ea3697c58d3f982c5395f68b882106e5a545dd7dd7d7c1fa64c65f3c57f456560b758ca9f053d0af9ce178f4e9607d33bb03a26660f297bf6aa97de93e1fb7115c3f7f44b307ce36cd21bcbf64ae2770fc761be7811aec18106d35e30e4e3a6cd177ff01639cace6d95a0d24c7f43351bbb69f04b1f63a79f3c11d22cffd253171293035c76acbcb15a6df934ddf2205cf814a7faad0d0a9932a6ec37dc59860ad8712583f734066f2c8370f467ea15c36f31a4e2749a26fdbb6cc37c711a1ba64c97fd67aa8b5e87c9ee4e93e68b3ff8a54f4889531a73bae9d31c6beddba7386ef1bd95e5fdcd11e99126fd5a1cef1b4a39b1654d7ac7727ef0fea17fa02ef4fb17813d96ddbab5d65a8a3359fef75a1c3b9698e2342dfbbf9a6cd7d08fae810263049af4183b14c97b10460a3c9afc3e7cffe6e9160aea7d7c17df7f0523c66cf9a0492c5ff68ff9e2ffad6ed89e5637ccfd9832265c8457b9e5697cfdc9c4a8893cd3045c525a0ddd4a6919fdab8853b2269f34e9494dfa379224630735e9aff2a98fb1834b4a4392fd7be58b3c2cc7fbd35a17315b14a749ff17ef34e749b74eef4f8d90aa4b85f7a7346a93dd3c2cc7977de323689faca245e2cacf4cda0d4c4f6953e60234e3f7a74d88de7ce9d37762102eaffc47c11ae28db721e2f8167185a721befc0bb15b117b5a68fca9c6abc49e1ae3aabfc61381d11857a6a7f14460370f6b1957a6713503eb69bc0deb698c427e4c2fa4e5596f1a698c42683cf944602a8836bec6dbd8f81a35dec62873397d8f362abc0d159e082c5c197bc8b761e389c06adcf81a6f73e36b7c7f0d1c6f631462e371bc901a7fe389c06888ab7e9727026b1157781a6fb3c2d3f87e1a2fef320aa1f12f2fa4e55778223095d8e3f22cd6e760fdcdc3c85741a44895e58f437c115dc4d93a6edc15c417629759a23f29361d014ee3502077ef8eaa70f32907ac32a6467a93f2ed4f81eaaaf1fe3554978df7b7a1ba68bcdb10afe82d4f435c754f56963f11580d71d58d37f8dba8317a8d9f301a35c60ed028c07e503f612d5faa401a2de2a9454ce16988e3cf107f97bb9ff3651445f1453c593d431cfd24d22714a9497f2c36ca4aa401b5561ebc33c2375ba6f5baab5b206a3767c7d5dadd5a6badb5d65a7d4ed2da0904b6b78808a8d80102d012a0274b8e8062091223b83ab275c14e0feb3137c2097e02a7b49bb55ada80d90e7484683202a021c026b082277e1022073a3072b357b8934ebe5e202eb9114a725ffa204ee900472ee7101082727d550b7690ebbf0a727dd26709b93ecc8f0d72fd1710b91ae193ebdfb087add65a7b5490eb4dd3795d1376bb0779090b8e50d2b7d6fa63dbc15b94c8fdf6561e25727d1e3ce4507d5ecf51c40eb9fd27ce117c5ef0811f6a104510b0fab85d3308493c187133d38288091ee44a64c413b986b9ba137515b9dfe925c909240902103945a4e016046f07401dc8b9fe74117941104a72c0041540c03901acae7860ce9098d7a4643a0c23e09a573a805d6062da55f26ee7dd6e6808f47329835019b87781b90112786e467630228769450f5b301185079a107302b33fb18b4bcc0e1ea54b76b11fe3001eb65022081eb238720111245068c1076e3ff000e70856c405faf3298d5ac17594a65289365496ad35a65915ccdd531c1fd4083d9299e0929674e786a4f2d852dabf104995719c55357aa5ddb80cdd399292ebdb40c59a2b47a32e705fbf63365497eac5d76f59bb281227a8eb06caaa5f2aa15031628ce30a2b0000002f4eb481e6f0111373fafa333c685c985217668ed56fcdec9a118bc562393cc1c55224cbae8fc5625ac0ead326dd9a4b883042ae38d7253c4f727d8a4493629d588260e6bcbc2d6e061d8c7a94c3c03dcae93994a7ff518cd235ca09e5f49f83f894eac0b154d5aa7afb348846abd56cb6a22223a34a91b875ebd6dfba75ebd6ad5baf71ebd66d49e56f4d934e56d78b915c1155c4949822bab531949a9dfe76ce28925a2b8cf3a0e9d8c7fdca8374ab6c23ceed0ab6184558a948d041ae3f7bae0a0af806cfe5a4fd70dd91e674bda9ac995b63240933692fcac402756bae60a3628910c4e02902ac3e1dead6a4e287a2bc922715413ab9d25823c136a38202a6323c13ebd0070e3125e0b9248924f9b3bf51bb9a46a3d50fcc7dd33126703969fdd98e3d370fbb5f9f078d4dcffd1b49e0b28dda88e7078f66d5a7a10084c0259d551ff84118321c2c4ed14d8c28979e4b3a9b309280cb98d90e247039693f56f4fb665cd16fd98a8e30d0b1634dd653073aa64213411411c5099cb0c44d4592140324647193c11160f5a94fb3ea23a925a14245b98674d6a40b7009ce66b3fa14a83e0daa4f699345bf8299d64952540cbe7ecac5728babfece333b6992a27c0053205f79fad449bbe81ca24850d7034aa818e30a0098469952a01a680eeaa10fd2a55b27d387cf71a143932c5c455f7b8ffb562c41ff93f75ee77596b3fef867ea154deff884b1c9026036799ea169c42105c71267fa95c6f257be3e0deaa7d12a926ef9531ecaa3a3e3b269563f13264d9a1c1d3971329f6459aed488915c1f06f5774c49d5348944a44995a5329229f18aa8596b6cc6707fb4de42870b1e118476bca30faf57cc616cedbfb26c8beaef54e59666596bad150a9f0031154b1f819683eaeed4babb5b77d8134c5f80b2019edf9385459572ebd65a9f734e9f7307787eed81690956f50070d037a071b7eb3a5a2a799fe7799476f4b9cf36d5a4fd18f74bcf4b65ebbdb59ef5ac679ffbef8a2c9ca8b256c5d271dded522c1dec0998129120bf1701069cff2db7b32c3395a55bddbdfd161226c67e0d7d74e65a9ae4b8f9622d4baa076cbf61a60c8853aa169677b92cd9fe05714ad5c2f22e96886fb6d09ef75afb7d672801db2f6fd9922749fb7319815919245f400875818979edc01754b917b1ff15e112265bb1baba777f9b535d3b764ef26f65d996ceda87a90297fff7466308932e1fb50f13f3da3143b3413689add1d296e4f42d255a5d0207dd5bccccccee604a224db35aa6085cee10c2f77622f79565cb1d5fe2909b88723269400d1138926d4ab64e389165fb3fdae530fb3cba359de0e249b64f632343b763867675c177833c394a7f3e0b4729bdaf991dddb6dbb66d5bfbb563c65acebe66ecddd15f4f2be1a6670d9039da340984d2f940ca5abb76b556205dbfc6064857af5d05d2dd343f6abdb40674ab7eedee07ea06a8e0ab68d3ae9907f8fbd2c7e355bff20097aa5cebbd65109b55b99bd071c688c764d35f21c0335588119d8aa74c4df560af9cdf7f853479bfec2f8d34d62495cd29f3beec7e2244d6adfe98349366d280faa4552afd572af5d7252154d6737c0ab2b4ea098feeee27a52a76a3fa2ace9daf7172f56a953559db4893f57164fe79d5f7fb461b2aabbe377e65d527e2857f9f86efbdef1b8584e327aeb82f71dfdb843f0af9e1469bef7b21600924f7cf0a8a9f382bab1bcb1a72dbd06209931bd064ada1c9fa9e38532bab071ecb55ffb4e5c7a1383487eed4a73318ba7c335f2acd35d09bfa40beda668df6aa76aca9c6b1dd0151961268d39f0fa0934595ca2c2995ce7cc13adc9f282870ffb4dd3fc71f2dd6503a7b7e7777244972dddcd7af69aebbe6686aba658eaa144dd7eeeeeec72c2c2c7992b99f8be20b5b8270fdb225e3ef16c8d22d3a3a55593a8021b0fd4a295dd54ce2c039320283383ce034b6936c4ef035536d4920e5fa3de7acb03f85a0c2ec98d7efbcf7fabcf7d6280dbd3efdcecbe3d5648d9917bcd52f6172dd716fbe03bcdd28d011ad60c8f3bd7f7aea82f3a5bee90acca2c2d1810c989a4c1950ce4f80bfca3df55a7bbc28206aa1352a446934981a4dc85730d46c7f5291671799ba8eec5d9e96855961aa3751b6909d43d2a4d33c5abb5f1a85fcdcd1a6f4de28c41352fa6f5cddf1c288c0fc4d43e06ea4dc485fd8c1b3494792fde9acacd2b8001c2acbdf1b67a5b5d6694d7684992ffe2e244cf6164b8d3a84a112d591da86e810d190cd0e35cbfe7c2a32cd94696f085fd1591abe9dd460892d06bbe3aa46c88f4de9efcae6ef28e4a7ecb9a1b0fb34c8706207c60101c868b00dc870620776c721d7ca7062e7f27ca591ac2c2b00190d7647ba5359f4da3cc739a99b4a22991b699a1ad5b633a0b4149df158bae3948772f69b6ce9d6aabe77df7ddda13b33a0209a4a6751cfeeb373e3cf17ffcea725b01d59549f0202ca9683201df5ad497f1c29c0feed5547f6be956ec71581a9e7f18e1d676bad3f776640b6e99d6e471a9b2e5fad02f001d35ca2766efe230c8c17834a14b8f49f7b9f7f23994c1f7ed9b49bd36e4eb8be55593fc9eee14c6325b6bc330881ed64d50f559272596379c7bbddf78e974aff7d0f7eb6c459dbb4deb9b477efefd88d77f4ec18ab8b6f052b101b2111a8a10d0b0c1c5796c0f63f1cb5994b989a26ed8efb3bbab52afdcc9e0d10200c7e396d2a961a2035d8a7c005df3e0570d4300f9a674e4770b943860b3c974831cb5c0d901aa60be6879fa311ecec108327c0ec5360ba883091831664f1a48a0e6c2183755d772d40b1e090c05b7e0283171c2abd249269ce4218ecea356515c30d9e6bd992eb680132831904df6c218d30cd33bc2b426001e020029e42794efa7945085cee10c06cb9922578a0c8f46de82094e9e3eafa99df2258220510b984693182143c5c22b0e7b9448a224560bc842e0718d5e4ce009fa8e08ae0b07602dc3501ae00df256c5120f19688e2a7075110d1831448b8388c2208b0d445d801a3e801f48860f445c1816b04a3d216b8bb7930597c1c782f0eba307709686538ea609e5871199050c4d59048a937f6bba6b3d24e6438c2136c0417a1b6a416038db0d3ac796d9084ea01adeb0197f2547274850a8e74d02d81b93c951c4d519202db3c951c410162a1e4080645c05f9e4a8e7c76c0bca80daa5892c38407be59fa68a9bdeba6d284459e6f3252412ea71533c8937a504822cfb7474c17bc273407121b64934c99d2db99f5b1401f8af8e3c203dccee34af673b07e7fc5ce164948433db0ab83a00d0f60023be722977606997e39ad48325f829ab4404fa80bf688998342219bb0c825e72297d30a93d15f8eb39ddf8681717a4bb1527f3bf8c23cc7eeb6a97c7466913449b39d9580f2341989271df93ba1e46f761cd759afdd4d3b8bef766bceafd6d275f97777f79da0d7fe3be29377aaaf95b35ee7ec6e55ae9552ff3976cf6ed0b48126d29d42040ca09b9b46ab5baebb5ee9fbc012187ab78237046f14e15397abe318743a68aa9572bed24e8a0d0a987e05318a2d79282847a5d49454a7f04e6996807244107ba9c1524e65e1524e754d1808865fc92be59472724c4f7c5dbb7655515abf59da9b4c29d82de68f8a1548c084597f0dd847f1558f3576669b498339adb5d2ce1b6822b56d0f97b6e67be566ec80860de60a1d344cdfc228a9df305760dab5d6ea848a57707a6d8e5a93cf1754ae00f71c37df5a0b745b60944b952d9757c5d2b2aa29fdcc361d837d8fab0b2557a0f49e282bf28295c6fb3717f68ddecf544facb67aa52fcf96f7475a41ddbe8a0cdb2ac38e1edace562cedca7e7d7f2b96bdb263cd7d1f133061779c9555f2804a8c52b796aba0ad9eb526ef6ecbdb51460f18a60b7b48b28453428261462ee53001d310fc42eebf1034b9358531d85cff3b81a61001a730062ed73f8508f0ecee960b4ff876dfcd172b2595903824a7f56933a184545d354c08cca64245e0019690dc4b485e42f2efca753dc096aac48ebed952521cea1c5782d50b2ae1e49b2fc7715ec9963ed03b1004e9f88f841b01a6ef89303d646559819b0818d34557c2b1ff7d60052917c660b323a027c9715f3d062efb8795d2918626d0fba2146c2a33dd24552a90fd557c4cd79c1298acfe7e0a4c5790668d4eaa8b08f7441cf65c2b6639247f45b0568806df1320700218a18048092b10624916436c5045172df840174840b02978a288fe2ce90de5994191e44381a853186acb9416e59232c9f4a99114b4c90d29a96f32fd28cd321bc8f2f7dfabfc96c22f860b62b9e4a5b2f704cc838288ec3d6194bdf7c21e9eaa8943b1e409115c212129260e70b27fbb9009b28a9158eef69cfc510fe89b02c0149f907eb8e0f47ff7c0134e205161058e1123bc8004b72424f144110892604ec50f84b001378307f82b8cd6408b989f2d78c020986a39ab06b4dc7fddddfddd592882a707206c218463049863e08a1fec300418a0204909980f41b433849a828161c92a158cd31a7080f327d99f47bb3a168bc53ee0ee77871350e47ef70197204ccccb899e19778810f4c0cadd04147237983a2181444c913445122d4f5b9e63904ec1d899eeee46c2a948aa4f3b8e5f9f5cbfab40383eee38383839f36566235717d199cd67cad059a50575504d1244a9cd76bb1d111551a4db9d77e7b619d1cce6b2fae4e672d85cd2844fa648d77aced5e9aebe7b4ca73ee96e4236a433a433a433c45367b57b48d6dd43b221d9902cf7406a24a4da5e4de59091f932b377519d818b161511655a448d683eed412e14e4b40ec867cdea71d5ddb3a326474d6e474d8e8e8e9c14192121212121e15082cb6ab3cd888a5aa775a82d2949c73d698aa4299286624848484848b55a75bd268bd25aad36e92c99ca0d50afc73248f651b54345518cdaba3597d0e009ba43ae5f2b51adedb7a3478c3425f2a6461a87c808111111939b20dabd18ab5434a7d66a546b3b15a24233a9fd7635772323a35b0ecda1393407834dd29aa4c91a7443a5cd97fa378c23e4374137120724b9fa90eb735ef31a9784e3bce6454e69f476e7dded76c434eb67b57673242749f5ad33e1e39cf5bc9f2249d731af24315dc7442c499224f903c11a26b66a036b60e8c3823587d6b7f3a2a31b9293a4fbddfb575b7559c06fdcc811cf691ccea33340ca5d08c350b76876796d06b7d6ccd6491219f6b8f328d7efc6296a1608c31904d56a53d4a6106a249da422e53a856dbecc6cebbd18bfe7069a2ff5ad12b8f49b1b44d86faacba398acfa3ab85660c7c26f72059a329e3b49ad065557bd8d314560b1dae64b7daf750df2b6756b76ae96080ab9be17b5cb06acbe1b2d91eb7b93764d5b7da7e296eb3b923be9d65c524552ae6f6bd0ed885cbfda3ca26a9b3274ece64badae5b6f4ae0b43a2272fd9ae3b399cf56d47ddafab0d9d2a63507a8b610ade6351f722237f222d7a93bf476ee4c6ee7f5767e3bee4bafe55abb72ba553a2d575b89a85d3226617d37327df8f5abce94a1d51c2a5ead837e28c6b40efaa008d33aa80efa7e6b57e9eb3b92c73e718a2ca9a06e959dcfba55361050b7ca6a43d2add26f6eb9d6af1de43e0ee45f9520a15b5e926e354da8859488e5b26d069875ab7e3dba213949ea9e4b5e9094eb7b4e25aab65a54995423f72980b84ee5ea4a358be396bc80680aa02980a6009a2268b6b544baa639ec409f09ca02a10f544a5b40d2936b5d014b12b65b49202e79d947b4f22772829ff63b0ea9dc2f245cec53263faeecd322d28e9488a8bffb69ac9fdef4539c7e6a648392e795ee287a9ee7a16a43c0f3bf3c9724d1f33e7a7e169ca10faff7e6aeebdedef9dc38e7533bceafef618ff993a68e56cc0aa67c52b56935a5525478174cc28715ae9390e842850416332494744848dc20a4e122088926401f1a27489050a2098d128e5c93460b8368699174110283792ab90d91e97324c02c792ab9e930822cb65072f443396f90eb7f27afb603604691eb7fddd09422d7911e49e50080275d55e0c2c691d9dd64237977751e2cd7d5ae47ef386b44a37aa8740c99ca7a14aaa1110000000083150000200c0a078462d16030ce92409a3e14000d7e9e4e6a52168ce32888711ca51032c6183004004000044666a6cd0197d13c0c7ec2cfc5251928c4c5d28b21058288e6daa9ee668dc10bac40075a960e00771013ba24019d3ba83dcd4cd6a9b0282adccaa6fcbc2c5202da7dd4ba4f38669105c2a01430c4e57a076e5cd7af89f7cf2761bf13d1f4dd79017a87674f8d8b674fd1cea97c1a79f6dcb484f720ee0056a3567762768a0d1a82418fc25e072e72f319317868f02930e766ddf3cbf25cb57bb94dad75770fc7a9d3ef1ffe68829b54a3520244fc7eacc49d24b08f251bbb0c8b23dd572de6857d28f74d58eddcad39165f0bd30a39430cbbbf70c439815e60ec23003a9ea163a5709c44edd5aa9c8356c9b29544a8d249f69368779d571ac2e1272108c30e0ea69db94478ff6cd6b2eb30090bd209509631a066ccf9131604ba13a1eca904bb477391c0879b2567bf68c985c327835391337edc4afecab9415745987a92b0108a0cf36545acf8adee9fc320dda0736aab01da9fa77fc5c29a48081dd489b04df9e1308b72466a628e40bd9aa2fbebff7a063c946e2a4e72893850f1c06db7a8372ac57b840901e0d2b412cff3a39fe134848e6d1b8bf3e3f7bb0745a1faaa273a1c87debf04bf4a5ba5e83906fbdec1c0357a10cb348d8541eb44b6de1288a4fd81c11da5b895d93cac8989ab22728f5f0fc5331b085e34317d9562f128814950ebef9462ffd4e89f2b58c6f9d8dcab010b95bcd03cad19357b829cc026bd94162ecda90910ccf9ae988ea60677f48379b1190b72a4a75e838ee3b70831fb8e33ac8cb6b52ff63c2e6ff3cc319c8152f0fcb29c90791482ec0de3e1940907c3044d675383a322adb39cf8cc49b4fad616144f0ed4656bc050553d5a3a70291e3986327fc56b693f6ea72d7366e6a7271884ce21a5e1259b6c5a75a4f57f81b85e57653b8467562125dbe0a5acd25472f50bd05a3ac529434b87be14a71a90690dea6562e926aef29b1552b9dfb789559407459a2e73ab4d25c600058df6a952251b53fd79bfe0e05e5926064137c0b81c6be4f3a2b4c9940a57a321f1b2448b33c8e5ae11d4cbe220312382cb0a29b82958c73ae33cb2400ee5d962877baefad0201f1b3093d2510fe63a1503ace2fcf9b7cc7f69e8e4c5a611d36593db21c4bd2a33cbf0cb7c80586d199a02287db49ccecfa659ce4c378449aae6d10e82965e6fdb63c71ae2ba648b56f43fd7a472a428aa07eeb84926432cb8e3ce1fc31d57902cfc9858131818928d811449caaf1990da28f99f33a25e07ada5af194cfeb8ab6657aaf66d0f31b5dab4f3461d35ada3b1b55dd7f81899c178b47139eca6512c74e83f0ec8e842bbb3785a77cd109edd28cf8a5caffd4472c150ba4d9352577a0e2b505746ccaf8208d0619743e4936cc69cd4c8168f86f1a589579d5e7c38ee31bb0a4e1b5d452baf3571976a9af2e90189ab6a31f51d7d5f5c8f0bd18d7b5c60e1c2f341500e3b1cd23f47c836b76711e44680d9a52547ea92356f9edb691fd5fdb76624d14ec1901e582142f85fc06e25ebd1323a8f1a74301c7adc800c75829d29eec937d591b5f318d8d3135bc24a8de9fca718ee13a4a8852422ed354251b75e3c779952528db14e78e8ba9a57d288f6e35fd2ee81c2f84297c6f71cdcbc9288ffeac29cee250d0e869f8e35801845382b69b92988cf1c9c5a6062fe53ad716ff53611544f48c4af6eac64907108e0a8ffbec87ff3ef8ceefab92cba03eaf124a921fadd23363e6a5b51edb83d389f439b9776be879d967a75fcffc2f69640a047480bc909cd9f62211a0aedfcbfee54bbe8b9c0533fb20a6e28e20d8a68018c650de020ef322a9b9ec8cb1126a8043eec35b98380cbf23a9d968dbecce7bb20f8780d30e6f92d2c8a1a18f098b0882ee5e670670e1d2fd478d94d19dfe88b4cfaff8065dc35738f7ae66d6f4b10f5e551cefd182cf1e579142c92cb2f6c4a8cbceed5dee88fa685c0ac6793f4d393f5abc23ba4b080a02869a4f9d149051a1380bbf6841e361ec1f69588e9f401a5367588b5f24125371724970630ac32d44d048e0122b2a949fb8c3daaf52f4e67b00266b016ab71cdfbca5c2851069886c7f7dbe8c1c56dc914a73e04add95e0e58f62e0ad735a9c7beb0867bce37636842d8555eb624a58113d9f61b873657bd497c9bd65e88fc8b870777f278a0e9fe975097d0312127e5927661ae953d032a3a1797e502dafa30c31f37b926ef4783e19e8cfac7187ad6e388bba17ff202e5c12ee5056f25060c0bb7f964fb989e6148ce5fed104132ed17481b366dfb02141ec875826768a5c9f396f3c181722a0669f026fbab69670c3e2704ef5989d68cb659a223e4f1d7e9eddab716b90400761a5916a00b531ad72e8986bfc9db2db386a67f32160ac8ee3d6b796d57bc0720ceeffd3b57357fbdf2ab7dabd7e3894282a0887f2f72147b9d7ac9c56522231ebe3b4aade94d1e1c677c5e380eb881be537a9a573c839ff5182e6263e27deeec5749d8cf643005f235d81e747b73ad5996eaa86117fbc6fe6ccd7f4e9cdb2086e958ba65d36c05de4f4d5f2d4a3d795645143670b7ba2612c0d345a0452340337be435b91ecab45d038df338d08067fc0ffd88185f7cb8fc156dd6c3c1c606124a16394efca4d628bffb7bf67b61d7577b4ceebe6e868dea3abe2d7642299d3c11fecb767aeabbd276afed58984548c4b04486f97a937d68bd5f66e89a105e521b612caa4bbf1aa31145a427f56c6447eed59c0a8c8180f2ead067dddff481e5cda0a66b80ceaa959b15dc8d0143f2d5e7970912ef7a417b012af59aa52cb6343e20b2e517ff6651e77dfbdb1f3eda62a4bae9b75bfd7b6ffd3d449bdbb583fe161d42d8d8474dd0051bb6d91f87b3e61357e0114f8918dd8c087f440800b3375b0809c5c8e4c2888fd9daeaa016d08ea0b989821dc5d5ec5be79e9854d7626d4e2f4df2f0eb2812d25040e2a17b3a45466a2ff4481cebceb40f028563c7af55345ebbc2a6310fa9e4840246e081c2fb294648ce7a5fdb400a6d6865a186ef2200788b0b427e76cafc17f7d06f2efc20631cc00d7caa03adefa0edc03e3b4593d5594b67a0dcdf373230047e7b3d3d049c9b16bd08aa49c2ff41463389f3d415e7fdfa0904311feeb3ee8ca6224214cc3ce12e62a7786e05919ce228bf263eca34e206798707722c9931f4baa8ab123995a64ee6fcb87124a84767e317ced13af6c532e00476b655fda41f0a5c0da712da2bcd6d74363bfbe4c828b12fc49a3d450a74a430df80f19d7c8dd8a74e457c7d56172297a972fbec866be245179a1ff700fffb280b9f7d0d2b795fc303577a9edf69494752998af8d0b43e3ab1b6e8f0941cafbdcae1c1682be48dd837b5e150e4907c5279b6fa1de948e8c51a32ac7665098e16d2acf71ff1dd6d5d0b2c3af598f73c7155fce98a1eb78e3deab8f65282c217b73fad025e5009a28d200d3bc4c90d764abcccbfab78e79458ec29eb3960e3181d7c6bdf7392ec1247c04f86c64b406c1e0bf7d0df1ed164f366d894352d0b4dfe55c7e266cb7aa7a01509de9aa4c8675511f37ade7b4a2cf8e32f6387a64c4dc8534f5c0ae1385c27138897aedef6b1ad74a6ebf426711c805e7f6be2c973a45e10405c05e5837caf9750e7b936e6512ab1f953b74d11e6624dff037e76992aa57b307d23d470d85ece33c3e417f42a5d6bfc6e2a3c6300423ab546f1abeba07c6b8885667f4ae9e42d8be91b5603b92b9c6668f02f5f0bec37af84869296fd41e91d95c41aef80837546ab2c4b7fb39fdc01eb49475ca958300351c36cb3777519cde6572275f1e826e664603df34db2084923183c3eadc25d7326c63c0ff1b651e7c34e435537901813ce09b28a300329faa0adf30d3a577a2059045fd07e4d37ed74504d113102565f3a1e0ae0780637d0523651608b9205015ca62cf5a6c01a213393b264023eefa0a528faf30e15f8a57c203051936b8d139ad1adf8707b5f1f4dba55382f7b0ee82703b6ca6cbc11a8520e9e4db31e7e0444cf8ece341b5c1c2308bf54fe146b2c3d720bd529f94dd30848686a2844bbb189a0f235e470a7f40138c303bca6cc2df039ad0593df494af7af8f491d2c10d77ed1aec55d5c0144191cd423c2f00db579ba0cee5cc21998a73dbde41321934e2875fc4da60af90df2ed06aa8f3eeaaf4c0f08d8053ccf64e1972c38f3b8b580676ae3ee60e1989a906d02aaffb672cc521023b27328bc566139cbc31a4377850250b4627ba9c6a69e8e839014f0e91f15939d708d35c4120efa9ba3a98dcf209d905037d9d0895273648afb1aac113eb3f54a0e2040f640c1cb2456eed36a6efed164f5362ca45d5fc1b2a4d324c3e4fa90809b2fcab037a53f8f3ada6a2742fe61f885e136a0df933509c245848c848a9cd35c6329ee72e567a5d9715a8f113bb4540520f942c47716abbbecc49499dae7d39b70a8362bf37251baea653dbdf13b85bf6676ceb11b8a04ca8a5606ff3f0b456f4964f951e520b64f90cfa4cfab29f32de7ef45d6830847218aaee6346911bfadca215bebb1b320a6624ae25ead5ed2189f75d6d946789a3dcae655fd94af706fb2272f22b169bf6274bd609cfaf4d0a9ea8b32abbe300bd6f9f8b2d5dac301420813aa10e5ed04048c80de65df86f89a64757af508b52f84d6ec1dfa68e52717087de52187621310a112678a83b982a3a45010b14802f862eb2df299d2f7d2c6c92acf8811a76145bb87830822ef72bfddfd89b9aa33632ca579bfed6d024f606cfb79df63375934692d15df67a377cd4dfead86ad0631345cc745298297d15dc5bc58150acc99e4b20271442b3633b1a0bab5190c0dd79b2e637bb9639835a8fcf78a2697677a2c3f233af609b6cc167bf68944688c76df2792baae6aa3bd03f36193b618cfb5b28bcd8f0f08ec9bcaa6736df030d0c38aa48fa73f2103e48b05605748f6cb7808511851346a7c6d2f12f02bbf4b8e823a0a25052be9f2a7c31ed89901509727047fd94ff5fcf7245a875e2454857231e82d49e879871b3b12ef2ae716d048df0b5ad79d445f4cdc65e47d437cd817a0bfa5e3439a99a286dbd05259816f1d5abcffdda062e901fa640a784e7e8d5032eb5f59d67c71d2c439c3688506438a13af3c67f67d119c16ddfc58dec5ffd5759370d175a69ffdaca21b726372b6486dd4bdf4cca48a58f7a8388f9d3749a3e6824d5ec50cd19c302c6f63dc9c48528dd39d39e6c88e5974bb33854bfe2fe30713e54cd3c45432cf382f542f3c61a40ce788fb12dc0ec141ff5cc7458ca89deea545cb6ef2a549da956c5546e9fe9af27afa3f99da0fde336d9995440f75122e54fed3abfef6fb43c1f529b74abbd9dce5d5ffe4db90d3aa83f00aca480007d80b6ff1a415f5ec75bf18483532dcc5d1c0011e6086641d7bf38f3f8d55846292a173f928bc111dc9b438744b861c4b067f3925eeedcbce3b1dd3fd836c9f64ea407369a6fd2cfd365c308b5f19798fce986530cfeb2a827ccbdc6099628d22ee76f6928e7f0b7d879bb089dfa50383cb8fc4245385874afe6a007ac9fffd2513c6dd705b038df8f75e67fce3a7bf7b0da675e9258371aa4af31cae9fb348eb08e4ce4b5189ceaaa30ec2fac8fa41b7524bd7bfdc64e5c804503da7a4a285878b0f0e05f7e0de16f3077fd29c36a724fac6247974c88b69e88194c6257bc62f065f8b2f128ef5468c543083a0b8c9c7429e3551a535f6af64ff24ba5d8cda03ba79b4d2d2c9547f6d4fc60f5b71bb49ac156dc44f207e77abb0e2f0dca492ed56813073b96da06a103dcbd47f13f3379686d9d99fc85a4b9369a05c9c0df40ee290b9167fb60b6a60140016118dc94382fdf8e386c810fb962629ba3f87db2d945f20e08270b6c9e30bad43f85e88fc45305cc9ea35f97650ad7f4dae55b26c4b6c7711434b651c0e375172e92ac60329bacdca1b24b97df1f863d8231eb2157643189e88f896b11dc7df3cade74eb2734dc9b4f7403120e220dc752670f17f99b1de6d2a299176c778b903b54018b92e20a619a307237020ce3710d082b508001f0756da8a03d0253e0a43337884f1c9749fe4054341ea875c343169fdc30ff85fe6f39aefcef6672fc86a7ec739c03d76926522dcb0951430c0ed1abd614a153c1665d90487d28055de0b658bca832d2b2153f1736547da86d26d9b5781a65f024bd981e0e202c69007d56afe41c00e978575c71af237a28f66113ca136da7509fa8addfb5a5e7daf8c3016f292f7342c3d08528163a119dd3928cbcb3e202f95718a3c5abae99f7550561676cbb6343a0db6e1250c10f152d39c8507a0027446d7a531b2ef3b884d8ad54070154cdab9c97310ae9112ca067066c6584a4f1e37768c8b97b3dc3e99034243ee09e175084b0c97763e00e682f7a5f0824e7c22b4630ecd921cc6d3dfaca3b515dc751fa720478d3a82f56ba885f10d986339d132201c6901b73396a0a4c2063a83ad93841835e912110e15c63268bb3797519c1387b63b2316c1e7cb314a04d55561a5c4a4578ea780732979ed3903a41841cead05bd5e8a64b75a4948c1dbdb9ddb63d47f316719b3198dae1c6d007e755bc45f14b6bb34f36231c041dcd9ca1e635b84b172109b481dfd73d0aa318781b2b53bea60655aa47f043d0fd4610f64fc9fc645fdd171c2e8343fd69406627b27e4259e154ee104c47ddb259c98092d6e047ac10579ad25b08457b7d0db6787abcda71e13d1ab5b8c6a9225ae30b3b831f675a6d9dcfee73432c6502b04c24f44958addb6b611d14d5d87db520d9fb70bfa413f1ab5acb56c74044c292d42613eea5d555d8a0805e7ef4c7600d69e4fe4bde3b8da5256b474bacf51cfd8d9c0a1cad027a65af46e8cf092a79a39ef5096f3c6ce6cf85508b3f89c74345ccee1ddf4ec70b52d9b501137f75a2021b408d8275f494922e288d901f9355689573b94c8fa68e1c50c670e2330440a2424074e4351f11ecf7d6e55e50eb01785353d69ede13d6de85c4f207854b56748d493270f27b4ce76827764a051db0dfd95b462e48527ce50b30825b79e1798eeddad9435c73373292d7bd28dff64c60dc4510ef64b8888a9835316c772e86e6094f194c1edf0829866244b65fd4e67973ab9d086e4d57b1a5c1dfb693c24941277ba9f5266323b8e702dca047acf9ac559cb7e23321348cea97143bd84d68120fde3c2f4dca8d455d7808e7cec87fe29b04bfc7529432aa8b86a7b03ef82896ecec92d3175e571d603cd87a03bde9b4ff4712355fde581a4146bc4f1764171dfebeee248cbbd33aef118342f30243fff3854b0814f0ebf99b7a6ad60e3d0be1727443808c0448c67fb1967ad740e15c1278985506f9a5a17fd1b7b8fef4333b694d04c03fdb650a7d99882b6f4756cf2020cc003a08d80d0eccdfb3028384271327ec7de4605acb3f2c3bbd168c050a2597acaa4ddef7544c36626bc539183658f4729c0a10e8819fc4a93b8e1d64d2d16a305313b17971e00839550da7351062bbd322653c7230a8f51f8d9dc960958b2c1733fdd442d07cd4fa685b1975870407d461093e416e05f478f993d2a4e7df29da43030e3ef3bb7f260aaa0dd500659035553721fd5869a157e469a0d618717ca2f1baa8bde394936c882b8d0432978d0f2e69d36b214608aadf42905d253540309dfcbc3498b9e445f0a0a902039c7f0c5dd255b1558811ea2d468384a87d9296f4d8628758c003ead3ccb413cac4c01f12d741b6b7f4c05c1bcc4540f76bc04ccc1e2fb7ea7926dd1c657b9a7bbd80f3cd0eb7f7abf6138e6a6697ad9e8e9fcf6bd4fccec1bf73e508f4200b46e2f663cc2323ae78f18b90db3ae58ebde62b7ef97b41f0ca04e87af4ccd45f3f86750e4cc99b4a241c9118b78cc23d53ceb2cbc05c64dad5f3ba37bf6a10b180c92df89e8b23182ed5703633ba283fbe6da560ef7d92ab10c0d3820ac682ec0b78033752c2329d63a64c61df0c251f1590369fc9e6b0c37af6394a0fdd0ab3d6b2ea040271cbe3515dec3d8cfea6dfbd90fdc82cd20a1a5ff2df8995d702d848d1627e7dbd79f0b39974b3c776a2cee1dfc278499aceb8f1e4eccb584b9b02cea68320a07324a12244e2e4cc26f2836f10bb350092c2a075245102c20e2a72d749e97078c4d6c7a35d626818948255974424091209e95033e3e30e90e1bcd846ef4f2fef157ae4b51e4c1a914a9ad422f58f0fb320328d76556a8c8c0025c86d1b27de78fd8a16a7503f5c12e933260fd05d866a5e0fe8dbe0adf711f02193e0ad65e59a2f1cad6631bb8027761f3c559c28404bd0ff446712fde0555af194ac87420217aee119b89e4bab24346b1159a447607d1699177b0192f17152072cd3c6fe267c135d346d782e3dce9c6c878da21e4b3a04cff6f71e1d24fe0ef76ed1db1be9fdb6c5733cf1a90381e0f0f2287969dff431f480d46d14a6cc95142d31cf0a2244abc1535669b6ed3071214e553b2edf14c1c8b0da5d8a6a6e7ee31f4ecfa31d8f1741b6c96c06a6f40fbf27f829a63452848151c60e59c7d998373d0a85b13a008267d0bef163c39817febb380212c0a057c09ec1995d255d8f27a4bccacf1b99a152d00d74f08badd0344194c6300cd2b7b0e9c1dd0fa28dfc1021dcc6fc4657bc5043f106ce14dca414ab11cc5a8ae20249b232a11b01c354aa36a4c801ca269ef5fd47a1c1ef5628175630b4c9a261260c92891e3960479b6bd53069984c31d0e561e0e67fa533a36a9018230f4687f1cb645fc3669721e6199ed7e4ca60498565718c0c01f4d2abae32af342bf6d76b9545f4748c640a25df6a8275e22c628503ed724519fb76ec03a3e3e24a9900f6152cd6d2bd34a68deabad271cd8d77b31974ae2044a5b939b63463de34e87bd2e2ae32c14d01943aeda9c13972310dfef9e7c402c85d1e9307a6cb38efd035f215162e50e73005f5c42b10bf5917e880318638e74963397fb95055c4b291c8ecbfd4f09e233791e3aac7e3d0e79fcd7dba6a032b11802fe8e607a0aa77d831a39633c80bc2b3b5eb8c9f47514d21cac7dcd3a8b86bb49f10c2f12130b293a4d6d648e8cc414e974fde05a783ffcf43eaccacfac80bb1ec66450da237e96070dbde9d82793794a9eb31cb82bcfe6b17a4eb808ca661dbdfd2910eb9afa5939acb4167ec95e1227431a788ff3495b6b6f5476e060e794595c892be93fc66303923117454c59eac48e84fe1e66acf5b3e48c8ff841612451a588517dc2ad210672a797fb889decc4eae4bc08076ea684e41a6088d2ff7f18cb806d6aa5235203d1b7e92447b262dbd089ffb4ca5d82861fd2cfb23179539aaf2a1ac42c593fc91a2d102ca7b03eeeb21661171ff44828c4b28c2aaba4c4ec3a1f11346fbd1310040b7c33caa14e3a89a1256a9d111df736507cd968c470620740043c49ea8d0b39024612a84c23f2e21ae6d3eceb1e51ebff287206f713c313cfbf340b73d40cce6d17bf750ccde238a74f6f0322839595eee2356f8e64119e74999a23ae65b9f9bd9169a028757655d0ebbe39a99e1058ee557fd9055e4457af9665bd3240d07703610adf380479ffd4bd4139c6a4d1d73f4bd3832503f15cfebd64fae2fd26d8f22b0cdd4cd9521754a6f6c7f970beb1a9d23f4c7f0389c79db56eb2842a90d52124c4f645a4ec148dc752da712c65a9e38c88ba02123f5c75bf311781f1fd5bf6e622187d200cdd750b1e41c242be4ef4a21fd49c8395cb2d3fd4a56a80cca5589693b9150b98b189654b4265b16aef9611b3b77daa499fb7ad7020556de56736ca3ac7543275d793d2d63a94dc4f29610b159471d8cdd2874d819e9c7218699d92a63e918addd8e2b8a16ba4a87ca4e6f078b81064e76f123913f38e3e47442e0fb83cbb2019d3dff2e61f122436b5c199ffd9790d332ee7504fbb263e8bf907ce97fb300186a709581c822b4d721a5a780ffacf3c5bae9c58f51e411560dc36152090a3f696f90faf63b8faa5b846191e00f63ddc16f274f6d5790c76547ce63642e10822748d1604c7763e0c5b35745624368af40e45f5e7fa5522cc6a75fe84d06b75e5b0c95e42038c95046bb147a4d003257a2821623485ae32c66ac668669175675db2a2350bde9ef8d3a973d8d2492d9a90aeb7b27dd458831390e1da7801f31faaee8852f28faf6ee7e689280c25ad6098a9c47865127330e41de38c512c355380faef8ec60d0f06dd6d08934b6572955153eb3a32e48095db4c714a0804c133dc98274c9c2687e8d51cf7d5ad56188d6c4dc5b21e19b93b0bec4e0a5c45be232dd035543913f49fa6113fe6a118c32b4d333669e6bff389b4a519833c8542157fcd03d10c4f2a8c27f90e8e4f4472c6a6cdef2c748cab19d0514486a6fba888088323ac015c43d6aaa563d32fe9e305538003075f6a22a321571ab005a33dd47229c0fa6d2b0978d4b9be7caf73e1888e7f9cdf9000bde6e7ea2a18c926379265ea77fc008cd21438a60c1be7fd074347e3dcbb385735a35750251c7610f69d2021e139cee269069da5117968108960b51dfbcb7310a1f98d255c6479de623444d588f71d720777a663a24e2fe0502d923ea1f8866171d4d23a2b0af3f4b901b55e66dec591d09d1852d4a74f5aec816f40d92e58ffb7d76e030a9a68b74c78e1891e481dee8250155dbeac96e309d784db1efb530d192e73cb3394cd7439b722b6241c2dbd603bcc3242e8fc299279b08ac2905a1d885ba401050f0a852d4ff0d09e2e4ca7ced353c1af5b54d69289710729de5237fca5d2ed37d1b0f28ae9a1269b141c58252b2ff7ec6e4617399f6d48f38b0bc9bf731b3494209f5446940bea2dbd82fe606d9f2c0b4c500f362f8bbc1e190d9ae05bc44550eeb26017db89cb8ebd3cf6564838375ca253d6a40b5f3824095ba50874d8dcd5d0c0f0d3ef9df1f3e65d5f4aed1d23f8e33151ce9ed2da554dbfa0e1b2fdecc0ab5f649aaf6a038aa1455f5a2d0488526ae080c3ee148fa02ae4e4b901920da64c10625e8fa8435240be56ba296ffb286dd8b5d684b5db48b4f75840c3f37120a4b12b52b521c5db2c327bded68d98ea2362e869a426ecc60db1dbb0b313ddbad7c115fabc2b55a067550df42fa64396e1503b74332fb4f8ed13cd958182275a0086e406dbb85ff2e729f0e0239d069f3494dd51c696b1e57c27724fe027280cc1a8be953db2cbbd3b15ec0524109ff236732b3a42c3df584ae8ceb57e375400185b3cfe4a465deb92a8483b5c5eaba4075d6793d94e720bb9d0786732ba121671bfb334863478618321cde77453993e4b3b2a092d47dec80506a9d088bd6f2938ec40975bc9813984c831e91aaf301693e6e4af29406ef484317abf049cc3e4ac68553db0a0ee8c0e757e55070d0f69eceab8d0fad00453b3de69193c4a0df8dd1302e58437341b971a3b37f0b1c7a60c310c35688524bcaccc8aec51125d476c4c497b7c50370a514417867c506b95f4584b48d2ee253414e4628633e5f6000d0d1ee8ec9be781ba73aa89acce969f8d9109ba171f52017c324fb59f23c184436539d0b47207ca93d79f5c90a1ec01102340e51bfba35839e2580bd46ffac9400ce4d4946c3ba1358de207f872b5a3703c7f1741479fa88682857e8aefc39a289612280303028ccf515e6d012e691445afea4494fc61d0eb179e0c3892d7a943e5cdcaf3066978d3199cdeec8b69bc2dd628713096f07196c6fa22007cc1efa7bed4ce1624d599c0af420a220de82bbed23f60c332745469193aa4434acc507cf925b9e5df6885744d308838309bc14e0363707a9c58c3e8c96a0d5cf423aac0a0052375015ff487fd63d1b77c1c9fedab00a548e2c5aba095984709080526cb54d51117986827b6c40adbbc76812568bf358b7607aedd9640e4f45fa969585f0dad346c7d642ab17449a7fbad7ee6a867e4e1496cb6e235c1887118bd9b350b15190da041cadeb715d66c66f8118e2e3d884bb1645daa57427dbdb6cac82919551afa5eef3932647a77a014510b2cae66dc75556ba933f0c53c2927e110f83abef517d61c2e764fe318a408d34295c5a682fe5becb92fff026ff25970a784ef74491492471a8c62d01dae3b67bd025ba26aa8e412941e59caed7770a91c425c2c8354b605bd94c0a06ad1a376f5683dd37d52a8f8bbbd427224b0cc090545ac26f725c44e863a8b3593acccc2fe926f410158bfadf25a4f53bf755b1053417dc058afb4d48d5cae6900747f3bd9fbf096d177638f2785b953cf1abf3b5c23d7a843c2b9de5c4d19952e244a863b76c9c408659bfd247d9d3420108d402760c419a767e0f444185654faf5018db5d38e12a8edcf263016537c1a00492b6543cdbd2dbdc1546a02d0590c3589f5349ba55cef5288495d34afcbdfbe8eb321d67119c367e98a43ba196ef882cde846864bd6ce525e4858988e6f4e0ff64c7acdad63fe0f093e663f4058dff68fe64fc10197b9b57f240f447c1e870b6bd9b6beb55642a74b92ff71aadc7c49d3e9440ef38584afb59351eb3418d7dcd0dbe9a62d5186a5c4df3bc8bc54fd11d21e79c1ee88e6fb6aea4e8ed4a791329716c425e8b82961f118ba23ad5db6253afe56d8e2932ccd3372034ad8f4f6f59b04491c93aa49d0eeb61f1ee0cada1d5ba0085f67a4e4c708ca3a6afe00e9b71f8ca0edfe4ebc02f2f3655fceb3536c21792e0997427ac9a6095e759f6287052b618ee7221aa4691f216b751e44cd356f802cace44f065ce16280c7402f8762f0a55799937e86860987d556c38c43daab9c268928b3e88eaabd4640b0a41bedb94f7a57d91f54a2cc8911e8112f000cc71f3d134d5782b79fac1441bfdd9efd45f2faebe17034de566967bc87fe3e5e21c65359b26125880a8e90856c8d76bf0550b6a493a5dcc4c8ebd8cf01ee83bc4914bfb38254983aabe480a91a0d14a7d7a38abe811888111156c93b33ce207663aa9aaa383c7cb7708e4de35f0b2fb891a3aa8c66781b23a100c88c8aca8b4b2eca08ab09440db1b9c750331d5a18aab82c9ad2dddd229d68cb19d6e5020dac7246bac77b8e0f067c1ed8e07c5b5ddf4544f0d5ee5213a99d7a9f2a6137a830c32154e18739df5d9488c80b18dca7580fa5c46602160f0e70bd43b75edf1cc2b8a7315b2d066f276eabff5ea65e503f05630fc97c487563751d27e25613b31055da58047221c297c2800f7c88f0029ded6b94f761f2faaf35bce00e70ce87ca34bb041640815e83b26855bdf75725bd23c8546785240f72f0002e0554eb514a44b42ba709a2002e78c6a3f0b0cffe76cf30c1e9eb7da5ac52ebe92aa4fa0ef22d9a8efb73152e150f5e2e30852f44ac319808ee3ce6934de0ba2891ba5e9a53c5829815db1b24e02923c3eedf65e7ead37ebcffef6e641dd32712641c7434421d691ca547a9ea4afb6c7e37c633c3ddf5b752c21da801ccacc632e85b043646a88a9fd9187c539d5002d5da80a4acc7f240d728c5fabcddc1979c543cc4d78c8c7b5a03f4c760e73304f425cfe1fd0a9ee623b7565f20f3baa3949cad4744dd91b480188f47313b477586d9ca6fc2adb87f97ccd0e4cd50e34bcc40783e429ac6f71844d1a01446100c0bdf45f90de01faaca5cc6a3a14cd8e10e0568123039430a407794b8e3d53f431d64f1b6b89d3efb83fc48ad5defe70a5c4867701a687ac0a6428c5d0dd4e1fc502972df1669f158ab43b51bc996b42061f77aca315845f58815f97f013be945a756d797a6f55980076c7dc1fe7151ce0575a622137caf5d20dd3b02fcb27b55a7b479a645a5adc0cd55da75ebe1371157b10a0bc45885623ff3f8535b1f6b292c61b164bff3b3a41bc3a4be893231b400b28832d0ad49b4df9590f880f782439a9747318fb887f64bf4a0ebcc053ee06bcffb38e2d0b23207256880e9cae87b18228eedb3255758bf89724f5ac381cfcb06724954ce3cbea92f9f5dde3745a6ee52bb418771c401b11622c79fc0c75fdcc4fc78712101f16afd87a81590aa83f364eea2bb176e809a82c17cbe3903fd63d5f632fd6692fc3fd968ae74242fd7b125a2b0fb8d56a1c2cd61b492620642ec2e0b972f5badeffeb681f17ef6311d2c434367c9b42f563728b30ac7642830a73ed7b183b916063610b895f4a996b80fde5546086c597172e39d963534dab3d3d4a298051ceaa7e02631b32733503ee75068f3a4e84783d5d258788a48fcfe81b1cbea273514bbe8fbd232855d4af615bfc50caada1a050b22d1253e2626a6362ee2044470aef539111d88334d1b84a4a2c8276933e97407b0bbdade2371ef5912ccc760f3445984e55503601fc15956baddc3c70c3baaf81481b0cb83888c1c8a4bf9e48e9fcbd82419703398e8b46b33efc4050eadae8527bad8f05856c95227056e5a2a7649ec42f2a8dc174500f0f5d7f96135d154c2b5f6ce354ea90110e80c66bc483ea519ad44bdcef0d826594ac9caa6603107a091e92067a668d1dab09e60b7536cc7b249fe2622c32495d4973a29f672857b5c3af597c3f881633f2df38277353b394a970d18c6d288f4eaf4b75f9f2688477ea3b3542bdf49cc5f372ee3afb350df8fbcd0d441fe306e625c56e318edae9e37eae4896918b23cac2bc0531eff0c41c912b343e025d9912488000f016fa5bcbd57bdac841a68e2cbdb84564d65eaada80704ab525f4c46dff739501e57d49fbe17a2717e1d38fb6426ca7e99be5a2f947ce2f75deee0e5d438886440a1abb9e80a7ca155feab3cb406015772665fc0c1bee71d392d93679ab3595939caa49e20a2b307149e9047593d49c99fcce184d2b443b41772f5260279d952d9b4642f199a545f68402d2a389d4555a5d7c79ce82d7ff3c10d6b5df42d7f66da21d27aaf99f83a468bb047651cc822a336f3625c87962169e7256eea428314d86dc19d534ad4129da441013f5eee430bdea690ec00d45e0c01204c64901242924bcafd938ee17edcbc206e90b8afd61d7987ac100d881bc6e193c2475e7c5b7ea4c37eae8cdceed4cb354bbb970b43a91c2c464e2b11e75c39cc7f9258eb9ba8144782512031093349b2a662116214d506108b2350e483228d2ebdbfc410375f0c5e90f5aa21b1adb22037cc2c5d1b864f8251cc716377ddf3e75ca29e6422c4d24036c659e9a93f3cfcecc4f10f22b921541bed03ca4d4c6af02ead7f5cdc207bffdc98e6206784c8a914b5f7314f9bb3da014391166a7e7216378aa23daac9a8bcc932e41bd2793590ff4e3179dadb9c9c72f3a33617736dcb9b3159ea0d41588200b99e62d366c5ade3ed3191ca42c920ed8e4c9d546a5818192040f737129304e22c53fd02abce3e7acdcd1975a25767ad9a3dd9ff87d960a79393585add41b23391d430070a3c10198b58288e366ac28e27c6c29fe2b803b88de330eae71815f7f9e3fe7005c16ea670c6108e723190550e17f592857de1223c947e4069ba2b85beef2a8557f321e35775623c54878df7057ae305dc914010a3f3a037725c1a6fa36cdfa2e9f53a23910bf666a1751d98ad1458f203b5225dcab4d04416f277370afa8a2c6a27288d57fd50ece808a8de15fd6d332667c27befd6c9d2f4a5530a35ceb1f1065c43a7d0b09ee30278e7ea1e273c447e232b4f336143d4ad23d9d6361f037c3da4bd7a18b24c01eab3cb884ebc344ef68b25ab9c07970a101800e33e85e4bd806ee56853b0eba59726c24c9e463ba0a030b3cef5b2229026fc1a74d50b66bf837823f99878f0e5a3a0b66e093b25d6d001465bcac9d07d6827586f5525f7ef76bb2cbdc981991694268dc199f79d8ad5c6b9b652f3390c58dfe3ded3666d509308563f08f7b5285c2c7a2b145a1eafa9ec9f8b0d98e3a3048828d24216b817e1a3ef0ce063ec4a355bfb504558daec765cfcfa1766403a17842fcbc02b98efdffe706bd2012dca9074eeec1f1b4d67b04e5228fd1995f2c9342d617e28deebbfa05958982ba093f7d51aeb3d8a83f88b04dc816930a121bb1b468b4868df598968cdc369f048b793dad9fd6e107064d1a12e3ec80601e9a37d83503ff76b2951170e32216ba9f1d2391561c15d5d46c2b84d850ce1135f9cf80dd7bc52e04ef334bd76e30c088c294b6211088aa044b7b0868dc0f75470e0cc3d2d2a23cfff14f912f05ec0bab4696b492862bfe2b2fb05a6c136f4e79f9ac24303f31c5aa0f24fc196ed7dd0a09f2284d884e7b223d6f08cdca87f882c1245f1073688926d2c286ebdc853bd2306b215da878b62db22eefdb18a6e3bfb02f6b0867e090560ed3419833b7c94d3ec64cac3f70f48115322397b697371c4b9c37523192d9bd1b6340c5a12e85e13e8b26cdc7283200f6db02a5c033b9cb12c50aa93d70fb8e84a2d18329e0446a516069d67df0850e32168e04c8e2d0221c95aeb00ec194eead0027a91187438c8a151db882125752e48d13411fc6e384f5259dfecb5a42da0088540ba0199b5bfca4fe9ba93cdc5cd5963eafee1062202407e6988330f4f898c5bcd2a6b425e0b4b696651160b8724056312df1b33c2c2cab7829366edece300489c62a5311409a00dc52ddea45a3583cf44ccd6e73c3422f1bb54ebe238f0c312edc8661315cc90b36d8b6357d15b2e22d416448924ac21a8dc97b91b5942c85d0384056cff081d2101e0aabed4c6b0b463adb9a750034e46a956dae6ae12e6215ef877234c3e4c3f946bf35508a8a4bdae6529810b263c64b5e0777c3a10d72c251b3fb3411223f7c11f595aba3b8c2085ceecf03bbc459fa50ec08ec8d783c7ee15ceb192cea97e7e396bec147891de626a93c4964059d12327759780f844e737c2908d80e2a1698c1dfde9128157a8071c95290c842f5380e00de6a5e509309747fb1446deac66fcd1f232df618faa06978036078b63c6a66ae8cd6d8605c015ef29178c293ddf8e7484114766d7b53977c975b01598a9e7160443adaabbd92858451e3b9c258dacf93bbc2892c5391c1d1c0a32a472beec773125f6afd9087e469d70903a6312ed6bf67483c85db4d06645f0faafb4446e17b33d8c753209cba6e99020d71a1a3820062521e0f93c939a20852c11d763584da2376211ad7a6b959ebda5787d70170ffe7931093ffcd92a9be66e28ffc82f8943d33cbf9d31a6b88b10eecd20bc03020d0bf318c8b72da88325666e1b6856a9a617942e1c52cde18cef14e6bf02fec25ec66927d4948a54988f0fe4f1b8c77767935305c57048079461b63e189a3bcc64e800149b58a43b23078d17fbc097862e755fc462ffd38726450046cbc4844d086a5b1ce73e3c40d7b03742089bea65f79c34d92b72e44c1afcda9277fa7e1ac72f7ccfa452af20599a90a2d3fe8a2ac073fbaa27eb85b942416e4b017ea736282a408c83734c0c7133264e52511eca32ddb83f616714b55029e258d59a082f03a87a4ebc1e02e620b54fdc1b76a44a17e676de0c917b45286d98276ce06edd8ae3b451ba656bacd12620c1d4f9b8ed6731e2fd4ae6e218bba406d5cd4b451e21a13c4275fb0aaa2469a3316d5f310997c8c0d86a40f2a86b1b62713556b439c1c9ebdbb9725f8cc2db9c0e41d02120ea41e27ad5c40678c9dfe060da93a53d22ec6b365ea6a4fd759857053382324c61d98d028451615ff588063aa88634c7ae166d8fca5fd877e6b24b95897966f403af7f28723a383290e04f5d6ae115a86facef3dfc5616c0896f0ce26a65063c1484660a2a3a14e0f150aea5068a3b084cde5daec8289446a1570468366d75a3bcb9f5990d67d720b6c30052910267e39e54b9b0c43ae453f3674f1acb5b94f6aeac1e06dae61c69de3bf617a7d2ee8472839f96a62799f9e322f276c1913f8a643ea7b0ebac7a365aa19402e47ac2fbfdafbd7fa2de02f8597140f907564627e552c8f0901023e41bc0dd49cdf9c7b76e4137a314f50cd1d38101eaebf571d911dbd36ef579dc5d9712827d3a78c359ae925aa4d17c99c58f3b89fe333e9d5746ded51cbe9254ad5e108e65ce239849aae8bb2809adaa4af4e3f2e940f0568c6fc2e1dee723c9325392dadbd5095200818ebf447b0d96bd2ad16e0cddf965a1be7c1fcba40975d864393420e4d65e56900f4202346b1f0947afce62817158abb872665b42d245e0f18314a51da42deb88f6a6ab012346706d2dc5a3d1be5c2847d215d644d4346f03b1532168df7e9d7f624701683498d19e16240fab486b231fa42c12bb45d541d540b80a4a6d840ccee5abd49e33224f7a5d73e78c933f586c99d968cbd39b7b5f3338398b43e614be16b2a507445209ce7c4417cf727839c317bea35a473de330b865005733a7ca7f51541d55f2c939789874d8db26c5e7098aaee225401cdcb287996f1723f10c3753e524f4670926d1098ba1bf932b58ffa6ccb70e0293dd3fcf83c0c7c7a9e9b6d1caea193b4a8d4384608ad91ea45144105e3fa6f77b4099ae9953b79242ec3aebfcf9d88420517779d8e6d9a3a69e5c88ee76dba6e457b6a85cf3ca10216386b837319c91270ebc76b33a47c919d3de70e6a28e5f5f04678d2e25c283be292b15f7469118860a3a87c3fe4008dbd2bb64544ee5969dd7e3f0a29eedc6929a951d4076883f3b6fb2fdd7a1dd033b447a1529a03468e100d102400951b1c19a9541cbae5dafeb8fe977cc299a0c2e6762b4ee92d1dde56b8e2f480d88fc4a2a66483f39e3fa363380263715785ac5b24a993f6ecd3b95eb5aff39ce345aca8a78130334911a4d70195b61cefd5fd3ae9d25cf3ab3cc6a3fa9fde0202cf6ac71c0aa8b4d75c5d2d475cdefef7d3b7dc0b3e652d841a1107100ff65fa21affc47ea3d67ba064b5decfb05ceb5af87baacb1d8263feafff208a99a2a018e010de8e08d82ddb11c717d30a6fff462bf957356fa8fc402425de31e68ba624287a1c6c4c8209d67b4c33b1ed148840d825912ce02fce7e89729a76bdc1a3936c46455a6aa80944937e0e691f5f5a6e80473740d6540d6ac353e0648a10b0814d9ac0229ee3e4c201f556bcbfa28dfd808488c9e7c000a39ea74243cd90a2f80e121002b9c708b1cbc280f8ff1cffc56d865c1fd9268ee20ac300380e2498563dd6fd184a7b2575d71e05b6ca467855bf7ca3e68ee20c769be8a9fe369c33d49c3111841019b6a0a938b70a68e677be51255292ad17c742a2876e8c7611f3114e4cc2212f7b1f49dc554e914b0e0ca02ec74bd2c04d392af083ce08d1f6c4f1a80337c0a4d99896ce951fbbe034a0d04eba387d9849cc2b384ef8063e2ac7e2a6a4c284872c1e069c161f491de68f9e48b83695b3f5b645e3398ee348e0fe5172186b37314a02015f4b6970335068e709e96809be180abe89f8b212a125c9eb866069da58789a81f8006a3424ae73a86386ae509434226bd60ac278a0f79a64c96a915ecbd2fea144ed6041c35699a29a2ec3841e2c98a8488b6b121bd31bd05cd9f1e27ae0d8ddd6669c4158835b6acf68d84390e7133ba0d428fde4fc1716e7f41363058170d2daa0f89e4d3ce9c21eba15215a8ef193507f25d208ad7ed3163aa215c4e85d0bd0940a3dd697bff42e0c975ab65762b7cefaa9a4d33f70d18a654826c38d3a3aa6370ffef3914071c12c15287064dfbb62f4d49f0f0a17c7a8b85510e1a3e400b0556a3fe5aea386fa63ad0c89eac7e9a84d0cb9550089af6225b70c029136f28bb227b7cc6482199e30246385c76d73f6575cd408b0e3a2a16b3d3370f0ab9f4750756397dfb9a898a9a21bd172230a50b80ccd10b82d9ed1f9a193b66b7fe220e15a28f76d8733d6cbbeee489c8ce9764d866fe99b46a614d5e8b1b9b6507b414fdf14fcac7e50bd473224c1f77af827577b2fb39f1a3863797218ce6ecef41f96a9b7e3eaba20bc7e0cb6500c81a2828113d713fc068eff680c03f3d6279185236505d7710104f23f42694fc032b39344755bef4200ebbeef91170a32f395a953570afb325c67f96ccbc4a41751a941714f8f0a4dfdaf10b57147a2afb773d92065f38eac3833fc14fb0081555f7f810c2b8b0c0e02351c4fc2d5528f42556cee4755f814c387a9e7b1593f4a14cf45b9b9170287dce490026998fcbc07a3f6ce9703101ca40e498e6a332dc2f45eae96d1523e4ffcb8c274503f977fae5ea593759006cb28e5f048b7d3915bf1e58b9346c1e8469611c5584789ea7b1caf738af8260e40f4663c763af9cc5333c00df5f46b94fcc1cd4770d27e0fc2b73946e959c4e7562809745a33f22745c4f689fbf17cdacaafea0743026b071bcc28298b4865df8d65ba548ce264b79cccb498e652f434ad57bfe05b920b1e2a83274d22fdb9c1d310af0706bcff37021df9d396cda54bc719a67bf9b6327f62a046b049bc191a1b05f1888c07a0c50e1ccdd149e2a6e78a43c5891504169715bff85569c81b2ec6d76ba79d2c657e9d03b796f66b99aa465197016351337e108d9354426f3ec21db8d367af8386efaad23bf8935333a93a67cd3f653be76126cf5dd506264765e80a5d2d60ad1aedc79a3a996552b0543d3daa9faa82a2bf77a6b9612ac0b46017fb336cdb36ab45ad1345a86d346aa08ffaf0dcba442802a35ed21fdfc6edbea9e45bdde6a40823078895fe9366ba9ba7102656415f659b208fd9b89904cab30844cf107f8492df2eec1186dd6950402e1a80aa25439ab5dc25dcf95146b42aba707d6da4065011953fef81f55186707613c491d0051b5413f80168d4a074d27022cbfd238edae1b0ea8594d664ae07f482301b5fff83eafac109e1a491ede1a51ed2d2199e99e4009bbb00ce8def52caafae9d77c20abaa8e206323e0669e62ec82afb6de079f7777f72756bfd446c375ae9afb46fc61952ad2b6f13e21e7843419d410e06ad2b8da16bcfbc62443ddf5e9d05d66db92c00c96bbf983895a1ab284a3124d715f712d5f28a3206d3c7574a06c91ca55456c74aab1f631c23707f833d1aad6a41bfc8d4a33512d2d622c4021db953e87aa27bfabf6d7f2c5eaf0fca24b3010d885806e1836b0f154dea028cddff80c8db8a9f6b55f11a59025cc4426f4991e716351408e4b83fa9d7febb8b153e9f08e379370a9190306b2c52f9596acd1a4be9a046d5a5fc31b6dce1b848a4a11a823ca0d4a80132cd670433e2a32436f64e15778ef1497968bfc640953d85a392abf4c11d83a6bd2d50e069721559739f4363597775947207fdc09df97095e571682ae46827d2390da568e080cdea171aabd120f42bb599a710ba36536569883a716a6754f09894231be412a1d7dfc769ef238b4fe80d4770ddb0f3821f1add2dd66f4fa48d318f6f19084e519ac1d49c28302478260c502a5a3d5126350e30a93d5eff010698c1720f089693512976c92073b4cb49d63566af3469982ab8fb2763dab6aecdbafa862767511933db1641f01210b3086f5412ed134336d0f85b5311ed28b5a78361a6e7cc69b82039e2c2f5e77ab7db22699062e310b4800f2576dc847a951484aa20994e0534e398f63883270562f72ed0bf6de6d38d17b96c4287568644433a3b39708c09b7d6312c97d01f140fd7a52fedb7219b773ec5d75027094a590ed2858d99bbef0e556df57b1b55629148091858c48d9137d5eb823f4c397de7328a126f84fbc9afc0ef7797f0e1ac2e672c12883989e9baf5bb35bff2b233da0cbaba450bb1911807690ad6453044873ab2aee66b43c3657ac66fc4ce83ae49c087c5bb80f0df0b44d3a44b5e1711b994cd0362efabb61962837ed2515d86c83941e0790f9b34f613b5abc7898e24173e33a4e14ad3d4d0db63b83afec9679dba165ee838d9f52f24944992d149dd0824f00d4bc14f69273a0185dbd8e01c60f00ea91ab1a132c8c63b8fd4bb89c1a2c9c2a09449d7fb6f7496805480d72831b3d5c0164ab5a1401ca30e17c1a277b814b53ce9e89dd30d8ebce2095fd82b31336d8f558a1a3de34efd4604690fd6d410bd01b28d01089572567a00e6f2e4f7fb691583af8b2a130e8620535d8a71c132e5570253f04b8e4ece9b54f215aa2f14ff9d69fe5ae00958228f454c1979dfce5b06117150906aca28c8d23a74a4eaf55d2fd56460906d7e9d84038ab6ae582f8c133bd227909a164d903d8f490af645be98b77180128b194a80fb9e05546626975e125580355c3696a74dd4fa546cb1e97b8c84c5b6c57663d3efb580d1a30ce40d1139c9dfe3f8c216d708977a00e54d810a8f706a7b8e1f480cd0ff9a98249f0cc488ff491a9fe1011381452fd64d67cf70f10d0d49dbf900bb239ed36e56f18cb93a90fb64607729208773f2f6a27fb9f8e6551d150179a39a3aaf24426ee2803f6b7728114a428a23f8bba55ad066027343592b31efde47e4ece640d96a08ba5a5e24cc48413b14556bd5d0735184f85b4753e7bfc468588dda9cae74d2594807f4bf9c4396a3101210a4fb6894fb1656bae19c76c7c33ff0f96f368543e6a3e70957dcac8891b17c73b4650629db3c8ae31a337ccbaa30f7a64d44716c4cfcf5c04c7ac87f2882b0009629419a1e3317ff79406a85a79e081a7f9bfd1f63313b1f282592785765f9878cd37a3540da74893b624fce4694c353e9e54e3fe4c373c261496582194001e19447d0c6a94c9c716e86e17485ab41b729cb0efc2146d1d89224030819bbabbd01d60086dcfca55ec72d75e06c338d9d319a0709d44c7fc27ee85cb60a8ed2b3ebc5c5c25cb45db32b878501bc163d08981057078af56091514634e11ad8ec3be2cb13871425343fdfaa151675e081872a4ce902d9c47da920e14d2ee3d34d363322d02dc61a5b0d3ed566743218f8e9263ed828adde56b427eecb2219e8493e29a5d04406b68a029519412c813e01edf32ae5c98e0d450691f6b4816a036e9bc7b633355ea2ff373bd2079fd7a11b330e89d12e12d7eae0614d77689768f6658928fe2b7c8cd2e852f6b5139c559cf6f6b84583d86c1c04c241331af17b6140114c73429e24b84e4032949ab1e09279b5b7548cc6887ddb29c607d961112999ddedd2be1f12a8712542f11a9b904ffd8c0b60857010825619f07f90a31794605e277cf547f9dc6295f6f0e3c4e22538ed0ed71c070dcd3c8379c2090ff799930faf85e5898b8614f9bedbb206198b2726169c91bdcedbd280cfdffa71405530289eb98c66baf3038b7e9e2bbbe3986706a1e2448b41f228e16131576dca23b6820353d346ebbfafcd55524930515972b36d5e36cfa872409b782144a87ca18bb7ada51887b2807e6a748b797757c9055fd781bd6a4c895ad0be96e70aa197adb5070fb6b033091a55e9218914d29177e329f8d3e20e8bc299c9ac12ab52f46036c947dafcfdde2d944d35511fcd1ee1160d021ecd142a35ba646e07010e3a5d08259230512edf5ce061696c52ec10a3db236390243d650019afeb8fff3737d5733d75eac876005455f80fd0748fcda9a518148abf109a39c2b739d63ffafbaaff89fea23c76aa2e01c16cd1c64b8f434dfd9a7990ee2a11eec039fb51b1e7d1ecd97fa4e59f7902d553f767da96ec44f310fef916e8b382e87789aaaae6f49ff0f870f9b95087333dfdf33b72a2530c1b2a4e2b4e838e7e98c67c06b668f8146cfb79c9caf4342d75d7e32064f78e02080bde20ad8a074baf571f3b26165f9ffb591a51402b0c16e31e6f4322da836593d941841bdb3fdb3defb058543581f40074cc5e165f01cc4b1fa8ea4041dd825b15eeb12ebe4f00315d3300455e090736dadd6466cba4c0b10b3552bb1eb8991445498390597a58f46478e5bece604dd265b18064ce175c72c0a814b8ceadb132a6a945a127d3df6e4baa14c403392ebeb8fd8046a248e5bf448903e109efe98410bcafcdf9ccce71b31cabf34fdffaad6d1f6bf2b889f1bef408d36eba173e3437ffad002493fbdf8fb3cede6007e916a8bdfa3d727bd8b2897c47d4bb5280be937b01e1ac677afa493b377ccb9f95f454fb3645213b0b1adda0c135b0099b0391bf7066e268ce67d2114a7f6bf59b3542638be11b3d1db860e741fc81cc084851968481280e9dda839b7c2a26f4508d8820fdcb1de0fac13353745a7532af37d3091838f01bd66e437f1dec2610e8422eaebadbc17c6af851b262c7b4deda6c013bf0674640d61778f8b27c663306761c321df324657885108663dc60c17f0234898a668b62722f975ea0351f53d31fed993e60cc8137b94e1be4cb7c126d7e8963124cbbe080199e07e70ba6aa345692d5ff27a54b3ed53bea01da6aedef9d73d3d8a55db49ccfb9eb7242ec15677eee2bdcb2acb96c3ebf37a9f9c966a265839bfd9012d563e8ad2638da43195b7192f7066cf86ac7227fc60106d30eb2e2b40ec7b7ee587aa02748a5f557cb50ce5ae83b2d79c5fff3368bcc37eeefbff8c15e59147cac5b5c77c02941238f7c11788bdc9213fb88aa72cbc975de6b104e3935d51db6ba16d1b496fd7f67650e95542054d023c36d15ff5d39cf1741058214f51d043840a99187ad9434415f24c04081034853324550d5a0ac910d87c4b8883647659b487362c936fd207519951128ca94c55e20ba1d0d264b0877633c2079bd14fa5302629267e3ab676fd707094bbbf88b145b9a37eaad0582d9665bb7b4e9147974df0fcb9f299170e025d93cf1cdee74f4b2795124a60b323bc0d5438f512fc6992ebe6eeaad1bd62be4e73761cf3a305570432f56e3810c790000cdedd10c9619faed243ee42f86d1bd62704587f9881cc31f85b5a1472e567e3df062ec9e1427c182a9390fa2b7c4d6c2c43d5c70904836923b3d7c95f0c5b2ccec324f394329caabad7c7d027c6ff57e3eed8a1887b4316cc2deda72473220b702c366dae61f590559d6d3939844876b3a85222352e4f1b9c6eabd885e62e6b64d68b18c242c8de04e1e1058cc5b5309fdfc25fa512746504bfbb740281be3a0920eed049c07da27183e9a404afce1acaf01382752553e82604860c72d8902a5decebf02705d792acec53ec6630cbcaad115c917e32656f42857e6524449b70519702c1148c06013e1d4f94d9190042bd848f0b06b5e9c0e49b205cac1ac38475a427d9eeb481b7a283e5ee9d42e690747302075a13e93cb86962b2ea22d567ac13ac4eb7afee7a9924cf291ac7638448a660a199d6bb95ff1f1ab2eea136402180cfe934a1cc2d773af98d4f28bb3560ac5fc131c3a588c76f83b8b3f47133c81c712c3423749397dc27520d70f7f4c64b03bd4d4066d50790f9bcc9421395074c8398ad499d79ca92bf1908d626a34cd424919df080324afefc2c2af66e813ccbd0b71dbfbf89dd2657d35a7136ee11d83707ec900aafbbf708c44c8cb9c621fead5e2f864fc288a254917e4780c6e63e87a61e9c088e27c599d0d0d6d1bd56a45ab9247eccf03a774a2aeeb3886f7819e62f660665dc78a727906c6cbccbfd72c51931ffc2735aa14d723c0cd33e03291c542b5804f05fafda0d25d7f894a90f276d3ab0ad9cc0c2c1c07117d21b58488d3df03052c4c69eaa321c7290f0fdd3086aa904703e28b4e62614b623f2d8e842777804bd42fa7f782bc13db0976e1a34ee01c865a284ee154f0708e7f3aa37c55c113d003788cc862bf47f0074c8824b33cd6e04eba442d762b7eec1810f52f37991d41c335f91a6f80f0aa260d6ce619ae978453d18ff6b156174b1230e4360c5de0a6ba9df8da7795771d4dc2cb4f33d8736bcb0b01e22801ab5579c1d157e580fbf537a98c691d7c4f8f5f5ba7f831a76a98d0c988e6336128c3a4112c6a6c3fddc7e3de0fd495131adddefb4161cca648e837090be7a596980eb6796e7169f4d1947a9116eaf93d0c09df2393364ea21823b3e0d96820c4f4dd0d931d4355c272b87d44e2237d152a9f4369cf40f308fd4af20c95201af9a09762bded473dfefe88b47009ce14504dd2ceb25d18b2095575e19c07d49d20ca273627639ac96ad3e49f057a998cf39c11156ec80ea4912ff4a897d9a0b18b9920e564ca2f8693d3d70406bea9561a998da0edf45e05f847304b1ef93139f32de90a305e84c6116c7ec881653285dc660d00b4813e0033f2b5f9cb69d68edb93c65ea86b0e54baea5c25468718c9fad593ce6ec8fd8556d7f78e5d9945277f245510bfdb06cf05551065d778c9dd5fef1d0ff6ee5325335b4b4f445d43af7a5c38ea2e140c5fc0cb3e94e47ee990d1105f9826c91695163956205725c53f163ae6b3d1cc2e10a7bb7cb173859b9a3596c3303784fc9511a944bc765d30a83d8915fa6c0484b956e471c34d6056e4692971abf2ce02cc4a8e3f0b09b515b2e482bb099ad903945595afa922b56ab915caf866cf3045c81fcdeb7fe0b9d4a623e95d5404fcdc9056ffc540fb6345ad911096664f250cb0dc8b1aa18c667a996c75c65586ce0d839d23c9e5bd36c6e5facdc1c36a3ce635ffd5bd1f29ce38ebdfab8d88fd2015007072e49caaef202d2159b728fcecf0b8f6d49b436dd13774204c136900dcb1245a62d7ae7cc94ed058ceb4c5350662b2a69c3efefd8cdcc939c68b2bd2c1b45d66fa9b8cc67e134f9a189c1f05c6e77c19932a83d0724ecd6ae631eea54b531ce3bb829bce79b47d30e816dbc9a5bd8350b7062b72e40eee69ae83f3efc015a59574cc74ec4ee620807038ca7826de0620c8c5373b92dae8f8201d068f734151a40d9872d239e383a011bdaaa72eef21cd43351e7e2a71ee4dc14d7d6321f5e16e513cdf575044e3e094fb87cf1f6f368a586db930929074085affbac8e1e214e020aea647e92c7795e988d4aa7a3132911be56b60b8cfb1f74f1a6a87d5b2bca51b3c310e9760cd2fed7d47cf959cde9bbd593aa0088be1edd3c73416877d30f1722f096e8727bb9d4e2d00534846e989e3aec8e60b2847442194d86ec7c7e2218d2b2ba3c3b17826c02ef5ec3acf631e1ef21827558560d4d9785c6ce6e494ca0f4885dde0ff1844b029c8b611790d91a6b7fe37c5a0c0f1ca1d946b3213e18acdd805da16e08bdb8abf3fd32692c310fc206a439a28a7143baef2b051f845dc75f4043241f6f6fe8616d51127699ef38fa4508940408a31130d73ed61e40c6ff9c9386a8764ec30aa8de7cc4b6e9181ad65f0d0e2ca4dad19054d22e05c5ec365a52076265b3bd150973e301e1f2495f40ff77a07bc328195fa2602dfdbd5a18071a22d72921ca21da4d2736ece2c5a86e6a13b2bf278a092c03c6022b995ce0c54acd67e6b2fc09a2cef5189dbdeeb039dc65a03f174d2f4ed881e4687cf5fffa30ff9c166f232637d76ff2310cfd7be0fa1018ecce5e68756a3406a05fc9c5c48c4d4eef7584d7148d357c7db05768777ab358c9101b4581b9fc1fe876039b96df3c0a4ba6b749edddfc1280cf0befcff29c6f962c42237e5af8cdf93f86347929f237b05dcb5875f0cb13e3fb6e13594b2a6d834e086adc21ebf5792781b5e68d2e338e08bb8c34daafa3bdedf4a1f074c1d49ed6c4e7ada1ab914c08226d3e2bad05736f56c9aa78e546e7abadd38e6617a279063fc1a29152e8966b3655df589de7afced12163b37e6797a64ce82338392a3795977d2e524444716bd2ec7222190ff6308d15494383ea3fb0e9ac6cf4a977da618eb224e57e23f33704760690c5570489fca071679353e4c758d207e3507c07c60555381a82a3fc29d00fcdcce5d7882545753fca6ac547d4197ac9b04086ebf354c3136ef19b217dcce2699d38515626ed8fe35a50f2eb6c748bbbb452207b00d5a15a7c97b3273426846fc83e8daafa7988539fe63cea2587c314a9d15491743982613e6f07571fc7221db36bc41774f93947457727fd10178eb41b4c7e5c3ae2d7f920714f298f09e6e869a6c069b47eb7d45bf71c250151c052e01c1c8234adaf06708f5309a09a6435bddecd6a8d02e78c5539c2647ef3ba3072fc9f06dc2564e68eb404c502722c465b7f863c5e7e0d7c69b48f0eb2cb24198d13af4c8a47dbad944a4c055d70ee7fd63964f89b25c9c60e6738e3cd2ef54a6910a0b97f4e8f24f8c701b1add63a7300a9686bd531624475e37a1e41f62ba0708fc3f52e5587a6d40d7b5ae7e734522a2c6abbd268809bd7077892e93cd1e6216e3b11409612db1bcaf3224d143c1cfec1ef345708e1419feb55315cd40f42b0aa51674c68de48785be6807f642b162bacdd40fdfb02cf1ea91849243463c249b32effd6195832a3c768c4f36294a9857a5aece604233c7811cb697830e195f3d38b585d1d543f95b18461c0e30a4f6af5f88954483a80fdb9005e3cd1710970dc0926d943d047e75a650e569c24f8a974dc273987e0c7966ba50eae9aa4f85349dca77287e087966b651dac9a24f1d35a8be036c629fcd41d25369102f0c8c9c197d9256fce4b85a34bd9d5a53c55b1b73708cfa5b77f73776ce0288fb4bd927745719cd8aa908b8a9d8d6d96d6a54eaf8423d7352fc223e4a389974bc86ce42e0b6e772b547446c3ce3b41b441d1ed6dcd1c3c65b2184e933fabc000407d2f8c3d774811ffa4a9a063c52dba513d3718df98f660106dcf3cfd82c012d14a2d9ecd1f3ebc80cf69663d98aa6d22392bb0bdae8fd98f6914526fa29bf62ef25c0549bd1a7058034d61333662abb3ddfdd3d8f70953fd2f895aa2dc3f2893503e223797b3e0b8732aafba41991c81a84fc5b0c5242e8d2e357d10a97339974ac6b472702c55fc5f03b83c4ef7119f4149a8aae728b2c5cdd9bf8443bf6058085844060516911debbaad8827f957560505912218c4e284a4d33aede2c1046e10e6e11550f0d3f66372cb7adb8b19c03758166eeb1f28a375a48d9c0c01a216ab04a2783d0cea379fdd174d54181ce64b949e63bfbddd2cb2322d29d72813e1a0c9012616043adf0b84410944ed9fe22d26e1b3884acef1db258b25f3af27a2d81ba9bb3d442dd0e205cc35b1756279d0db34ba2df78365d69994675c18bbf86c46313739751610c8fdacc0b66b01e12f2b6f114f1e8167b1f0b0715e2df476b407f6cd2be0c607beb94cb263ad9464973ee906240a2b03d290f32d07db0910fc19e49196ae6a4d4e270299d8629311014c2edf5bc414d79b793f24a3daffbdc7609c023486caadb0663d96d5aeec9b8edb71c440e5dddb2600ec4c4d66c93368c496eaaf01c01932f546d3b4c05b262b06c74199d7c511ec70845794dfe96312bc18dbd2b45f0834070c92e849dc63adbe8bea1bf66da6ef048c18714504e80e78d4be3b8d7aeeb40717c82049540477ca79b7f671b3f712a3b70673cca854c95423d08d00e7f2015e3669ff4174d46f4c13d97835e4407ce1a0fe31b06d4a64dd8b3522b9dc0eec88c2d923076d39f7cf3b46b9ac17e2e2aa692b9c1b3566d0831eec034cc5aff45fb62734a02ae343dd70d5dfbf4b48a7d05565352633572a466f36535d5e2a51852db5d30185f6c434231ec80a434bb82e6f6d11176f814285f32e24037f7006ca671361ba5ef6128add0f9e94aa896470e4e9e88be6b914631ed8897ecb8b6214fbcc79295d98eb2f68c9b38c6689250e8ebe0ce2a827385392fecb86dcd29c591d65e08c19d50d962b75194ffc3efcc606e237971339f6912d167477be08a3faaf53640914dff59a2a909f5d8352f975e1a587871c2ace48b1f6847137e4167df7cc0b15cdeea4ae1d0fe1420962b656d6244b103e1ea76fb66c4aa41067523767c38c90dc09f62c82ed0c20b5f73d1fd84bc82e5957b6df6a0696891e37b6cebdfd13cbb014cd5cdbe0b185dc9cb60ced1f18e0d2ca831646bb0062c8dd3b1ea17c7e0261b2350aef4ca85d1fce030d107baaf9584ddcf118156a7724ab15eab001125302c8d3838dd6cd38c5041cad5d452fa82c1fa063f38815b54ae4be5306da4482c6013898787dc703fa318a2502f9df59e3ead23dc0a393fa1e0f480c6edd136c668f17acdbb570455b5b1eb7f38a417bcd1b1c86f1063ed4a15d1b6f1bbb8028315a2cd4336ac4101f3fb8cfe0ab7a5f7f2ccf0ae64ea0a9cf58817b7ae6ce37bab1a2b5633c63fcde196278cc1c8b388e74d60294a850d240b6a67b7441e06747e97626c60f042c845f93a7cfe940685689149f8f6dae9342cf3ee11a04a2d42b4b28a06fda58ae559a7e0b47fe224f23cd4437a8a3f739a3e16d665972f45c566dba17dbb3f30d718c53260297335762df100a20dc3f57073f18ada0bbd2882180952be1ea821696e5484a13c0e4629db1d6843a456898c44901d1306613b4e89499c5983491303ac67a4f6be2e5d5ac6b6826d5b92c17d2b9af24493674caabad4b5326ca79b014a572b76e9308749aafd5bad8fcc1c87e09c3ed6006ee5873b301e76d8e4c9b4ab6045d3a07707c454b06470b63b16736800e99e545386cbb76ab37aa4f59ba6239d77ebbf5c90d7f6ec0fc3f9ccbb5476c5f24758818dfe09cbd653198ef95821fcc2958ba665d14ba0f8429e6a50788ac07d31575163bb0a29126305951cb043df70b9a184890e870a33608955cf238755c0b3ca2040abd0fc45a200eb39a0e655591f9ef62b5ddc8a9e514838387735ac5b2e6689ad243e8666abb38d2ef6af3eba552de17380019cf0fdcd0f2980b1dc168b8bc23511407c340129a030307e66ed7dea7de4f2dda4493d6f6de7bcb2da59449cacf0b0f0c800c776ca2cbaf7eefb5e2dc5fea2df1ce4ece1b06b123e818beecb1e92e73d2f4a90e3c1d50c3b1b5d7de161e29a5e3aacc9787d2b5f872ab4d82cc5c7176ae7eb293950dfff2deeba24779e6cfe9035f778aab926f4e1fd4f3f6fbf5de6b474addddebe8fec5a6790a7998ae3213a618a5e1c4942ed25083767d8e40e2022f4b24390309ed56d997081f9c50f0049618b8d0ee744112559828aa22041841d06e17fbde1b852eb537c3aeefd54dc085181e0c69272eacd03a6bade81bdb561c1c6a674312686cd79ab3928a67cc396b2ad711e7063d77e60e9500fd325db0f1a5db63d96318b440d7b7bfc2d7d6d4b56e701c37961500aa74d4f58c4fc88b93934e2a74c40527597072baa0443cda16e30ad6f414b9564e07e694b6a607dded1b4dcdf2d8f64271d2523ae2da8ed91c13e58826c55c26c73171b6cfeb304754651cdef86d79a1ec29514d5eb6fda74c7473739364392edbe6a26dbf7baec963f6c863f95a6e8ac74a5cdb4cb6294d962689c7280d174cdb3e0df5584ef218e74409e3bf221902a1947252aa50e298a8131749be40638d2a94aa50aa426909d7aaec87fd121f7129b026c6b9078fe66cdcf6730e53766d4a80e8c09c71320e3ea775a357e005cb9b32679734b50bc55f5615e5811797f168f9cb566533fab2bfca51dbfe6089c1d746afed07e9fee098301246c2f8478813c10f4f0edafecf9c5111529bdb41862e6f8eb81b2537481e3baa328ce42f7be41179459e9193f66992b80c33d51758e36eba3a699fa9cab82bdcede6e8e68886a64653e38888328e72ee662907e531999380d3629feb629ff3623f0fd9b6fd4c948b6a2e739afd9b238f95386a3379ace488b67dfb34f669b66c8b9130139cd485aa9e1a994d2f622e258e8a1a7117276d28241c808330158c91b9e00a83ac194a55afc2483bb8d0f6e756bdc7e4314f0a91c7c2b7cf158151980beee2319b1d6fe892bbd1ef68c8d98e76dd78a57c294a55946a4a61288da15486d215a52c4a79e488648f0883429364ee58316334404cf242d976c7969be5c1c1f44181f7993eb823da3367b7946ddbc1fe1f403f47d4c79e0204db5efda3afd2dcb1dced8ae06dee58ee260206dbc53477ec630c36bec16f33818a9ba3ad3477ac859a3b36c7653449fc65bfdb3426d874c9dda0e6ecde3c862bc7edbc2db72fde1863ceee8c718745df5e28646e8ce7cc377e71fac869dde0cfa146cc9d1cdc8dbb8d81e99561a4fab23e78501efb3df7c6b61c1bdb722366c253a8886d580a120f4b639f471ecb3cc4b540c51253d9f69ba8387d6024ca63ffb1387706db96dcd3b674c446cc1d9b83b56cfb1fc64c6110ceca88ada8d8b66d1eda166aefe042735aa0a6381906e1a2e68e7ddc3477ec734182709869ce289589df3eb6e1297396dfaa321477a5095b81afc04c98c9884bc5c648d4c785728583e2b4705bb8342809f44f95dd1cfdfcdcdc28b941ba610285fab8693279ecdf24b1ed97978a6d97c0fccd5195c18c34357fd9cf3435dd6add1c0d200b7d73b457db7634fbdc159adadcd981025d7234b56d9f3b9a33ac0489c99c716f9f4b72aec9e486983e382b93878839e3c6983bf6ff5baa923be2acccd9e58838260dd0e863228ea9c61971516e7336e4311ae5321c555f5ba60f5ce3c4a03ef4dbe7ae70509c9639e3c24f811e47a37fb5c8894179ecab44ee0a07c569993bf681e4a1285ca33eb82d93c77e9985b6fd702c39702cb9b1c45db6e5d2d8d6876dffe3c4a032a79ce56edb62cecac8dde68efdfb84be5f72371130e6f2e3cc618cf1b843c5a3d08138a044d73d9db818dafe2ad79e4e5b60d95b40b1e99c51a72da24ceb96c6a468920f68d69e4e5b88a0abe92f882bc6164654b68881e3a2536b7820cb0ab4b072022dbc003fa0bb3d9db4b069c154e3b458e25a22ac05113155c976b528a2f1129a60b25a0c655a42098efc3533b571d1ba04a52efe9ab985c54302a3d032948406bb8032689519df1ababbe1297a25254381028a06f7fc228b125ee8d49e5f6451929d640982099df7fc224b0f2d2c4cbecce16b13e3515ba97b31362e19928793f4eb94fdacfead9f8ceb47f689d999bfe3f3c379f87cd1f7c8189b4dc31004bfcfdb5d486ded429f3bf46fe642aab2dfd35752af3e77e6a7f606bbdbafddb45df0cd83e3ba5446fa32872f7577f79857ca63cf39798c436c17497bef98e3a4e75a69ceda8aadebbaaeebbaaeebba0e0cb9308553aaeb24e99124e991a44adbd94d985933c9b933f2e079314b9369a495b4d3ced9f572d65dce5d25bb52f4beecd9e58f3d9f874a079591cc23592d99e78effc803676d8c0ced48d2c6a6d7a548929cb3a96a23ebd84be6d81beca0fde1ec02776a07e1df4194d22e3eefb2e7cad5afda1973b723aed7ede35492478eb56359ab53ebe40e822913824f4c89a58b4757ba400f0aa2947ea978d6d7e3246f7d2a625c9fd67b9fd6a7b89b3b17c83d0aec2a1302e96262685a380646ab5a3557950a6b6cacd7657b6b2a877aefd3fad462fc7fedbdd7de5a04e6a0e9977a92d75a41bdda8bb9dc791f18a6545a867630355d055853f6b58e390702b615c705ac422094ca84238834a0f598976a61dbafdddcc198025b2604826362685a380646ab5a355795ba19b836b483a9b92e6fc658ea33e52fffd08ae2247512007e9d0c0847f8ecb13b498cb10531f041d307f28abf7e4060ef3f1c9f172346cf6dfbd21536f71842ff9c2c74a8228b2c9c6c49ecfa34ac648f7daf4e4113513b6feaa185d1873de91256ffc22ab67673e3ccf5b583a651384a976948d82e6eb0f0c0ae50d0aa13165476754ac111bb3e4d484a16beb7d42bbcecfa20f861d7fa25c82c8d0a517b44be195bf5432ee79c73ce398bf83f9b226ac320f4cbcee30dbaecc96369049b50bf7bd7e644d7b6ae3c5a50c583be195b58b47fb9b23a7c93c3ff5d10880b3df3536ba9524da24594c8cbc69c580699e063c98d65d0d0fdeeab58d2fb40951b72ed95de5874dd5104b08a73ab78d0372d10b0e8f9e5ca0691853ca73fbbfefc8f399b1b673b63dd5f2017833084ae6306e242973f3f5546923ba6789ee74dfc308f551e55744992ef75a9a108bebdef446f6721bd02f37b77e4be134bbabbcbc3490eff0c47e8b1f108ab55a6e2e24b3015171e349093b5d607018ba65614c26be48c3930d39c73ce8f458702e69c73c65cce39e79c299733b561cae6ff78ccfbfc3db0fb99ee3cc4cef403197fc619679c71e63297b9cce5ff3e77cc715c91a65d1934827fa3f5ec652f7b63e93d97f76773ce397335d74c82f7f5bdfade076d20f772ce39e7fc409e9dc9a138991f84274df3cf9cdc1df171ff41b1b92feb957def4f280ff7196d222827b92b4e727e9b3b9c2f3914677229d4879f608ab9c3fd93cd7d3a4fbaf425eef312c77594c99293dc03f9066ee812f6d3e331efb9b9b9a7229833fbdca7e0b2e93f9ca3432d2f9acbe51e7398fb7616cba05debe88dbae63c6b90ba27c6d83f89b9c365ee9b4c1eeea7d75427ce2d523a522673877b9b225db9778d9039ee534170ef4bdc3b13f76ee3de9baa2d031155a47d4f3a2548dd548a1225258f85dbbe3f9933ba7dfe062dd02e849e4e2e3d71d23e08436835e6cb3e75e328061b357774a2d0657dba3f3a9dd6d4b6495ba6427d758952a152ab644757f227feb27514a223085cb4db6fb53ccaa8c70b5de6bc411bda9f7e797333677617a0f501fc25062e5c2965abe5810fd4406eb4e832b762d8f44b231ec3f6369ce2b8b9d172a35b196cad8056ab1f73a7fecd571cdb67b6e329fbfaf231639c1171775a6e3e983cf539118449d6ff4aeb8f0014a1c11f1fcc297e80ba1671837f88cba69f406d3514329e60a4f43927a5730625d91386dbbae1be7cf9f282ed230b2297c9850abdf11abc01c1fafe9a8b063d6c8951dab66a66d8b232bdb23b7cbe5a551758d8e56ab79cac374ed677b286416e34f72d2c74b95ad14ac79c2bba04976e402d658a394e6a0d64c6b83c7ddc509efaf457389ae852b7c81bfb1e8ac0ed3bcaa6e8eca45881dc8a3f77eae73983a901c413cd9e5e50e1a29a6493990a9c4c0d9ab40f19ac922e575f6519e7acb547f3fd2cba70f7c5f4ea591ab7ec4768722606141e5ee8f2b757fa9889970e9afe74bac2c9c6df85346b50454fa72b6a57d4380c85172fd7d29ab8ddaa9324d0dc4fa7285036fef9cf3dc5dee3ee27f6ec0d984be57751e5376ec714cd02e7dcb9ff414d97a0678bda5df61867b3792a231591a82a72c12ef5bedd08de9cbc0242815a9cbc4f1a71b355e61d55108bd1066ff375bf741b3e14e68c67fb9ccd387122708c29036d47f8db26f0a06dd94382377ed2651e127fdd1f4a69527d5d14e68cfaf02336e542207edbe28c15908bc74ad0b6bb78ecfe7df0065e01a1e60cff7d500b1865b4ef83b6399b3b074d28a405d270003536ae1bc7e18e4128646e7fefc8c9fb1e153d254b2180b7fb5e529581371f6f49fb823727ef9b10455b776fda48dc4be21d5519e8affbf71e65273950cb9ea9ddf6c509810bed3351aa2636493ba868baebbb44f05dc7f200dbfae81281dcf6ebf6eddd3c76c5653646f5d55465d7e688cba636352d94fab42ef2ec2a56afc9631c6c3a9fbeaa36673b367d10a0f45c5a5ae2d9330cc2b3ed5ff1b3316dfad4872b5cb4d8d1075dda18195599d7545ff473d6dac668d3afa1083c9b004cb47b47a287b454651e137fd1279e934d7fc9fd2abb636ee96fd1274dffab967edd5e938a03dabb794f2040e9f9a5d76493c4e5f0cd39b316f018fe3c14549faafa277f252b5956eba384094cf27e2673ceee460d930d1c26154afd6792f7c92afb315f5396a4ec0b85cabe478c60bbb167ee5c1f1254624e8a07909e12427105ded8b932b2c2b47163dc8286601a220b1444288842c38f17740049c80a0a6a5aba2724ece54585bb0a549c911f2a5a394a1b5b548e49862c2e87850e698457e8f0e4bb556e62994d50586c7fa05beb4928293c281f805ac25b43e33d9da092d8570ba823ed503f8c2b3d97bc4dcb1c12f603c5011aced0ad67ede984e50d2c5a7649dab010fea2bd3d9db088b14b5818586c4660a9824b034b1337542c15adffb02891c93e94e46558fdc0c7f5c0603f324891618a0c4fadb7586268e118b8f86bc6e0250ff96bee227fcd9dbf8c34ee17ae0c33b03541034bb80c2f2ad22dc3d6b90942379bcb8882690f0cf663c2d0cd5f339711c550095f8a5c33b95774cc9e4e6534d9252c375186929b3d9d6a5496947830f25395547f9d8706a8dcfea6576beb06dbafc8b5c22acd79a4b9656bad3fe6ce936e7da6f596f6093b479774319c6fbd39e71f5b6bae35df8c339733775b7648a5793f7749f7126f3c82015a37c60c7d8b7ab51773b9f38a3839e7a4de3729b536731c873fddc234eee7c79c59a0faf289397cefbdf7d2be1488454bfb5420162bad4e09f514a77d30208ec1a92273871671d216a145e6adc8ed760bbb225f64ce265805025af75a6badb596caecfa1386ea69cb169ca3a5d7da6a6dadb5d67befcc5fedbdd6566b6bc63677c175a1928058bf0960d129a5d4defbb43ebddc05bcdafbd6da133cd8aab28eab1d954ce59b245649e08a5cfd26e0dc05287d81fac5dc24f1b7f1d7096cfb95d64962ca5da0d2b9831d868bab534f592a2cad39f6a74865185126344969a9893e85a164daae951ef2c5758a50e8890c37a8202a093668e5ecb26180820623dad000162e55684ebba4446ef3b2f0bc9cedfdb46defadf7f9ca92edbdbec282ed9141c5f61e466f3b6f1c7ae4988da095e0e6569babc2b212c4e66c9bfb6c050d316a62541903090e8683852ec14d5b9b82b0c3c09f65d8f85665b7f2b6b6bcc982665540826dc1b0615b306edb3e5dd9d692d56f1b9629d86a6960c41614b8a1450a13a221682071733285153178e8be9859c8e00229a48cc088258480b032a5cb13a82c4532745eb0e046a1d79fa4185b4dbc6c1bc39c39e579e261fb574a914499208836c6f0228d27681638922106295a88784388aac42ea54429414a82c69314d0ecc3aa4ce7c90b27343401022cd4e89ac2e88013509394ac4eb70e3cc7807fce400afe70123f27fe3889df43efb3fd3ba2304475e4be6a2c525ff88368b42cbad38f9f1e51242638fc705c21f49792025de68aa24af053a42427f8e9131cb3f15328f82913b551221c86e3b7ea0bff27925ded2849ada90915b2fb8ec4bf4113d40c34a2886857b43f3c41a3f83f6c34d2a21a15c23ffec29fb3d621b4bebf634b57998bc87dfb763c1244bba3a6e17f2074f7e5cfc673168622b73fcf6f0a86ed8d3c20d041b420da97777b20de2a54997dfc2c54d97dfc28e05b183e285a177dbbefa6219016e8d802014e70127ff741fce98774fcefcb0c78e19c9e587a0f3e1557a01f769ffad45882637937fdee83b64fd2fb70f49004baeddcf1c4ba3fb17af58708e424fe9f241f4c1905e2e686c50ac35dfe6c6c69cd495c821457fc396bdd6acd8a31c6d88993b88893f8e9a8002731063d9683c715e82de4f265ae2fd71d4f1052758cf41954246dfb308f591d3abe9f2a3b72e407284892689cec08065e40042dbfad954a71641f05fb45eca760df887d165cb04f85ecff003935d94ae4c6f044f3cfe24f1a0eb931a880969f8643ea9527b2d8685cf7f95b20d28d2efc28e4d1753fffa411e9f0788290fab27f427db9ee780207e4403eb388421502847e7ffbd6da35be7a6b8f5d1f56659956c3af5c56dd3eaf73b96254b715f2db51672ada9c719474555d5141393943eec171860f3e38be007e38665afd96b5638b34c1df45825dc145428ec05c0a47e8761e5d24ace022a1b3df8dab3cb67a40f1c77d9c74b2febd1b1069ff255675abb5d65a6badd5c9aa82525d7972534559b1f2a2cb9b1d824b04dff4e9d8b35364e812848033b75a4fc2e8122debf1c85c02a30a128d4b210a5a9e210a41510c815485c6d91c8daffb4aa1b4fc10c10fabafbc1d14e97e929f3ae102eb21797c4eeb46afc0d467f0fb72e57d7953e6f46ca02a4b852d18a7c939f3833997ba6ce539274e2da14a50e0f7605495b988e017bcc754c9633d76c6b4fcb48b9739bb9fe72b7fce4a39670acb06c0347024eb2beb98a1ebfcfc5469cec09993ddbd2ddf95f949cba24baa449598a894153c98140893025d2e2cf77e91ebe20ade08de48f270b225be08738e736a6138ea1cf50ed8ae17493605c2138496f91f276f8fc726d72383820974bc240f27ef0858f5f88336cc632e12e8e7cf748451fa4446664c213fa54a19e8f364f2bc79325989501115aaacf52190129c74711fb4b9b1a45bf5ef83a69f9f35be8b48108d35b6eaeb7e3604c289ef839ed52be52e37ba46b8bb6e6e2c61d8324439fcba7b1f06a675cb304c8aa440af48ea27e85127234d62c203023dc4c996cc6a69a44f5e46464c41052761c6ece4fd0fe4d6cb7fd88017241aeb391460b882860c5554e2dc5a558293b788bfeee7acbff1e677715ab8258fc9e807a2ee5328f729d37d6abb4f9feed31bbd124589aaace6ef7d5ac4496e893e717203224ded0f4fd0669ec668708386443270050a94a6242223b841c3171a6b24471e4eded6fd9cb56eb5f6bdf7aa90c26ae65be39119450cdacccf90881e8fd02da008214463fd0c89042d01046d66cc2111189a3c71fb426351bf41da6d6af856d3b67009d8159543c27a62b27d4a5b56bc736bd0ff568da065d13336a28b8415a6f771de2773b9629a34d004b4c2b40015aa2fa26933b1a553b756dcf4f77ecea555cbc912fc1f347e311c41ba595e7409ee5a27c663084ef6883f4efa53214a448bbcff3e153e06ca16c0694297fa81dc977c69c961c0fc740906cc2e58027a7fefe6c37037c5e9c6916c55460cacca6adeffa7ca68dedf06f1acea4253a1234e6e40a4c1b10cda2aa4e0e4672405fb498d3de17f30165c7092a5816260401918cb02403f32630f5486ad5663089f6717f1c749584da561c62ea20aa0486b4e7a17779df3489180f34acc560bf853a29f4df0cf7c10cd25ba4eb0799bf10805b2112d505f4294881689d4c8c91a4d028e14c99c4991a185e431842ee0f6d6175af6ccd388434da693d3d19e99a10877ace2520b896fe654ff22d379b86c9a61abffd3f4c5aeffc3652b5afd104e60da356657a726a55d3f85965393d074f2e269571616bd72723ee8a40bf4ef92078ffa3df57f4c59d00e4f1a0002cb079a08811ab4daa4898a1bbcd882022394a0d507daa2fd81a274a9f76ad79f5fc9f82a8e922eb50a469cfc7882d03d1e9b3b05fa396bdd6afdfca64352646823a30a4ece2b400e04c2931f2ad7ce9da79903759e281082a5b84f47afeff5e7f5ead59d521b964cccae1bb0ee18636c6d0e58cf9d9c3b7a5bad9cef58921be3cfffe18c571ec339b75af8f3a83188edc5e2102769e6c8faa279e72e1bef4efcfaa2db5bf7311628703380a38b2bea77e5826ffbd7daba5ac5b85f69bd25c0e9bdb5c7eebdf5bf7a471709f566dfd10577ed1d863fa59be3b89ffa20f4531fb43fb1b4fb7b2b9647b6d57487dfcfd0ba2006e5e9fe134bea6477ef89250bbbe34635f40bb9753f52b36ed5287ba991934e8b2815823916bad4ae75eb495b9dc889bc366541476b7cf9214a8d2a4e9044a371858ba8206e60e28315f2db67eb9c76ce39e7bcd763143f67370db9b967680275c1379d9ba3d804fba47ffbb7fcdf9fb402d2e8a04bfb2b3680e8c2898d35daa862fbfffcdcb0556bad4358d9b5666bc1496536f1d865cf172b5062fbb7567082edff6bf4b0fdc935d0d8fe302e50d468dafef6a7c498ea1b6e4b8a504249951aa8a041a00b0e269842c9194994a0d54ecbae21e061d73a964626bdb9d99492e4cddb27b4128c79e0693c6d8faa6d8f4ac176356a4843683b6cc728c7e92d6990d143144dc2903244976569d75d6b0d5aac000933a854f1c10d5afd39d2e5cd8d0eb47275c3a3278b97ed4edbb554d9be4589edff5b96b6a3c181ed6868b1a077c5372b4933067324b9f47abdf672298f526d9a33986bcd132b9231566e34675ee4799ee7799ee7799ee7797aee5837d25aedd50d0f165ea33e2aad32ff4a4499d87236ed8b03ed76a15fe6cb7e795b4edacf600864b5c2f349014eda6f5659d562ada277a92f7be3dbcb21017cafe08d375fe60edbbe75a2f9b29ff3b7f37321908c41c761ca2894f3b0ed53a870a4539ef010c8135df686888a6e5d99a0323969ebd2bddfdb596db5be634afd092a957529d3eb5d3c36b76f998e9b7b29c1b65f852a512daa486266d30e53b6fd8a54979a74485299b835b6a526f4a04b7a239a529dc8a3ea52bea090c7f21d2aaa46dfdbaf483cd6d5921c29f11892c798782ca93af1982bdbf9949d4b974f742f59ac42b58bcae1013d7749996c277336b3e8720d815c21a67d5b97d892a8b5896d7fa94ac975e9a94eb95798f0228732dc08b9f184a1aa004a3467b2498b9a5da8d0b6f6859c40ae5af7bea67acee60cf418b7e5de5a1ca03e2c0d7bb2c007328468f3488806ce3136ad5ef774d42abb72f7815d029ccca69652edbb046158d139ab9b1ad9600a5d829b7b2fb5e6c495b702f75534b2dab5d2598f4d354739d1d2700073736389b791d5ae3fb33f5aa7574a79e803b9b7b1e89407ecc4e7b47c3327889dd55acbc349eae392fc79749ac77d454b61f8957d8923ed31ff49565bd34c19d47ad5baf9a35a1224ef888260b4c79fffb1d2a0a9a9ad1a3cb68c6a9d79ba67c6d20115d77c0d479864ecd67f3ac6e0818b231a0621f78e2fbab4b975e4dbdcaa8cbc79acdb7e5b4dad674473c7afd840cdd90ce864ce5e0385594af86b394c3e44fb87c87aa0e44394b46bcdb764647eb5faef12796ce6ebdf3a96f56b708981a85d6b7e86b5bc461b8f65fd9a2aae1e46bc454eca383923b32a8d5ca3ddfa9a9711cb6bb46bfe73b085a45b5fd36abdd2939ab70e91032bccb04d9a2d35495814e1440c4ca04469408d0815508932021d90a0f97f333be87276edbb288e6ff7cff69f1979ccbf8a626b2ce96e8d22f922b8f3008407ba987185c76874bc0c2bc98349aa2f7f0fe63f1a31f5a0f8fd2723f2ec50c4000c53a24e93ce149e1d8a2951b5b18ed749aab22ff297e30fc52f7292467c243b5b8768693232e30cc9d71ea9ca74d4aa6cacb21cefff49314931339d4e924e948e4d47898fd19cc9f814790c8729552804261412130a910985609af165c447f2464a74907498e818738880009ea526232a48d0481d3f33248327dfd2a21cc650da3145975fe4d2d1058dd469da6145975fb444e7bfc8e891cc99cc2fad96288fffea3f1af193fc516da9e66bbef41c7f191af1a625238365b0e34055d938ead03ac75871a074c65971a0f68c960d9cd0ad963837298e5fc5326afb8cce952edb9f55532bbb5d7ed166b12e38339a2199d558ac244e7a8d52160b0901557831e2894232e95267c738c8b16abdbf4e5495914fc3d39ad41c427306bebf06467316ce7ccceb58993e66de758e18a60f5cb44b1fa225999f2ed359c2c0c11a8aa994d87a1b71f5a058d3126d3e87a8a2e11a1d628e0f67440ae49daa3ee9e452f5f1ac86c4499d4ff2474ece88dfb7c49a0fc59d4d8a96b6129760b105fc33ad1d57f4ac36ce90acba6cff0d6ad0a58ecde6f621983cfe3ac407c5573277e6cebfce527d7f1f229af75f756109b18c58445546beb368beccaff4b5959659cd7b9d69c105bd5bbfc278e667ea4acb2a8a8b634c3ed679ace331c67846d481e2a47f0e5167496725ea583179e68ef736a5ced27e2c8ab30a27161c79215a92e37596aa2cc7f83a4b5b67e9eb99b0afd5e68e0e141da6399b79ff1a9107496a609b3b1e28cd9d199bb4ab88c1cc6806004b73c7bf96416deed41ca6b9e33f001b3429dad8eacb5f47b459aa2f7f1da20d934d93932c25b1fc25a5ce183964d0b9a27ca55aa97325c7500d148f30344bc909ad8133926a59645275c3c0c606831b97c6c04675e370dcb8b4eae635a9883468aa2fc7f19aec192a1caf89c3f15f8eaf82ac5a95e9d8b44eab95479d9bced3064e68bb83d4272df8f9a3e1900c7efc192220e7c5d13544a438b8e08926201f45d790f1c927c72313ea0adaf8413416b679ff1d4d383f432033a399af18fc0c81d8dc9cf499c760643d612db19466becefc0af56bc6672de17c5953c352aaf9cac271e3f221627deb3f96c86a89ac272c2596524bfc672979ac3eebbfe6bf17ebd77cad352fd2cd52622dd599d1066a36c340b4b9525e1b4bc988b5e4b19255633df1587eaeb4b9d53c66374b69befc651ec758e61b1f22970f51c752ba360d8488b4b55de60cff8c8da841934ac75653c32076c324a939e94733ad2f59352c1fa2560d8bc582c2c4b2b1a6b09e5837d61556940f918f5195e97c1844dc78d44068ee7cd2ccaf80bfe64b8cc7d1c9dc711d9b37f3a58e0d0f79ac6429cd34796c3edd5c36a3a345878b4e178fcd6c7f1d2f3984885c46693ade9fba2f211fc8756c55c65272729cfe92f9d5cf10084bc949ff25e4972ca52d23957c8fa444d4f91cf410089002fc50f33a53aaf847e22771d2756ccfc449d2ff6b1eab493c3673a4c46335efff481e63e2b1da99b1fddfc99cd1eddfcfe943c73679fcbf9f99799899ff6666666666583f43203e44a28ead3eebcb9a9a9a2f756c353ff340aed3e4b1d6d7e85d3365ac9ab16c3dfeaf25ea346151678a8e4dc7463343f32d71d288338f6966661ec86944ba756c33a38f9193a24f91933a36a2f26b4d1e2b6d6e7b8ace93c7c0779b9bc760de9fa554653ab629c3524a7dd74ae9d860c4b9b558da11a8984abdc3afd9dcca5f62fb7b3a369612abb6fd7588434d4a70975fdbfe3930185b471c6a52dadc52782cb99a0325e4d17444e9a0af0814c2f8239586fe5dead8fc759afc756efe3a502018e1f80266a0ae2903a279e2ae75c5c7b58054f0051050929a682003075b0f5a9438e580051436683fb27023491761074c3c2081abe0c20cdcc21d646943660c32946438f72c028ebb212973250009693d99a5ca11b8f252b90eca66c397d07643118e59970d4469a208357ea881e655a2a0e00736ce9081e80a2ce0ea46dcd3290b135998ec32e7066fcf272121a43d997699c32c6dec95d7daa36b48c7d52002215af741b432e3b16cd1111b39a62f9ba6d4e85624051558a8b24ecc503c86efd3f768936b725ffb627e2bd6a7e212fbd82a316960abb2fcf76f973913f7fdcf82fff36173b5670d2210da9336a5b80f147fe2affb9f92db5a53ae11361e4b14361d97742355ba9fef579132d5d70e98328a4895268731a694e3fe73e7b81dfb3e7d3267be5933e8faf62b259a3b47740433466d98e4fda37d998830e4e4fd1d5874498d2aa5358ac449318327354a311ebd56c445c78e73dc828879ca82a49565c8ee8b65df5721ef5bc6be36eba814d1c4720613b0595d4d65f8b0c3952d5486804c31c40c3b74b1a50837c8380389dc852e41d049607f3a1367dc9002a783d603f45d03339e4eb0431538d8a0e82021c50834a4382289165c3981491b541c89008b11a420e8c88a345a10d503114d8818c38c2e9dcdd19c71db5f4885e9e0d75a9badb5d65acb84962d3634908aa0e204cdf2b05921841354a6444982666d14db5a9be3244996cfa39543dad89ccd2d661948441991e10412464c4121f8f204d31857b4808b1b3a31a6e0c15ba2882824d0c264060e4246563461c3568226a20881c58a121bb04b98b1e4f39b8bf67d725e2104912501073e6045115a18d124c50f1f6401e3055b866863cb0f37338a78707742ab0f4c60e1e50d0d8cd1039428964071e38d12b4808d2d5d183e5831c2c91033b43164058717624801f5c594217200038a8c18981194b05dabfb16d5bbdf6fd5fb7f71a8e2298b176578e00a93a01ba65042647402379480a202a8a67d73a0dd2fc163f5ef9f5029900759ea4ebe39432f789dc3eeee2206fbf340249f873d2e7b9dc7a5ac93978ad971b5f80634dc34143a401c1c1c1c1da475827c912f1bb8240951c45e659041061968b043881f7474747476f0c0e1090f90865f7636d8d9c08626100aca94d61a1bf06cc0f364031361193c301e98d502e300c64112347b3a051105073d38e86143cd062424db1fb4c12808257a74d0a3830f42880e7a3ae879b241888787a7c7e789282a08220e38e0c027f654c3d074410ca45f94ec47f6d381819f608901e3c7831f0f3a3064aef060e6c10cdc22eb3d9f88a4c04f6a9498f998f978c2810991927e22da810bd190bf93a71aa2ac96550f3f3ef8f1c16705eff95483134829a51f00e0ce1d9f3b50b82944bb046980dafe600d4c6a78f24483bd73367df8f0e10300207cf0c1072000810042078205da79358011387db1dd3d9dbeb4604fa72f4b3b6a4fa72f497b7e39e3cb8d470e4c38bd21e4f486d1152e4e5d9e3879717ae2e4458a9317254e5e8098358c36c340644391f4548116b7d21aa17b5a1ae59b2f4e40cf271c9e7609e22065cf5fedf98483964d1f9ce30c008e3dadbca1c30f56963059f152862def696509152b47d4ba3dad2c91e2342504568ee8e10a9b1317695c61657e8e31dafeb5c985ea8b8231441a5bd0f073e2111c50d0385597c10fea824ca073cedf5931a3ece9740227bb13c9255f5f45e8b97dcffa3a92ff7b4e3cd23d7efff49e69bfc508c508c1c410a55e13513dccf802f7aad7e30b4d8670af52fd0be0a746577d5aea07e8c7c91f1380638b1a79adcafc27f7607d10fcd478840ad557adbe9c0ba2d53115021dbef72515dafe82f72f3419e28d2efadc83cffd0be1e8a2a3ab00de873f840bc7234d86840f8e479a9433054634f02330afec25e0f842910feb1740899eb49902a37064a1be0ad08337cefaaaa30bcd28f7c0dc7118a8084cc0812cb4fc9f08c34ca30568d040e3be136120bba0e5b1c94c1830ac8ea0716393992374e94c42526c1e700fccd9a475e2d1f5fda4cd2aa34f84fb6f524aa9b3c02a12dab4cf99709561f0bdff7e8837ba2c38baeaa73e88e68de07fdfe77d6a3cc21dc94134a4fa3a3a3a3281d292e8aa1ffeacb2efc127e27d3882e30b4d86e0f7bc7fa1fb6f74d59fb4ef272d75025d3ad309433374a38b427533e0d175470a45a351f95d957b22f83beef113e18e20200c9b92108d03f2d41050fe6e0bc2c1862f903a7025e98b1532558820090b8a00c2091968fe3686c9161333e42408526284b6336526246742dacee453dc7a7d3bab91759a195a4bb01e3fffb347f6eb4802fda0dd7ac7ae1c7fdf3502fefb5ce8b213ea843c36d411790cc7e3c0f1b5d65a2b8e07f25a0530b7cdcf30c703f9cdbb7eeeff712c2db0c7cf11cbbc73fecba0e6c851239674d7fc577be60e100d7ab5114bba6da8932d42ddf6c3cef5ccaac65a9cb3b7638a96f91b06a97bc9da0f8b8f715efc397f103dcde7edd3f98388a4f900c047c4f11131a6384c929c742738ef1b27b55b2d6b630f137dfe719e7c0d7e832ed79070383f27a981f71bfc9cf6bf6c047e99872af9384fe7ac0cda3a96103d0df6f67dc65ebf71c46e4814425b25474e5a274efa6b5c02ebd1a24b67e23ac62544240d3662a1d8bc99c00b1634d8cf70864482849042062568b0db25f9eb4bd50e757c9977c8336e3096bf336a30962d1e2339967ac788339639c45185a13ba2b10341082d3ef654d9c2b6a35d9a3dfff33e27ccdee765cf45a9de55ff1aa354afc3c787e2fccf5ba5a71e10e1e03d887d0f1fd185332ef179d9f7cc467b545f3ea245aa2fff1ed126d9a0cb3c3404f61e8c477c1ef65749979dd050955d2f65d6ba75bdc43cdde1e4418f07e3911eef1a127b0fde83f1c8cfd8c53e88d6331e710df1f99eef198fc8c6cee78368b0121f6df711a992086e4e5768d9385efcaf822951147fd27a8ce2c344716e17c5a913852e717ef56527e474934c5a14e9ee843c166eff6e68ceeef6ef903a261e13dff34c9e99f9f2673eff57411f913e9194448b899376bd6898d76fcc19cefb5f2f38637dbd3f1ef218cefb63228fe9787f5c3467e40c079039186cc1987b4119bbaaac97487144babf8eeecf419d2b08c35930065f50e66270653990553338130a995b83c7117dbfc4b93518a7933a5ec77f5d97c27911e767e85748d1a34487722dd6af97397b63cedccadc713bfa6deef8c34497b5630b443af8d8c7bec7a4f5a843a3cbfee5e23efeb007727b7464c71bb5a4575fda23db1175434f9af543e5cf07e6104bba737046e64e094274a0d001110edee76738a4c7c7c6233d3ef6331c027b9ff188cbbecf1f992930a2f98c2e09d02f3e7f84544115269acfc362e2a4f9883e041b49b48f8231d1857e1801cd473c32bb486105130d068f0c5a139cff70748c217c30b4b47f683e8722785991b67f063583b1b442e263f03324008e17c7e964cee788ff2ed48d93439cdb06e7815c7cd155dfe761df4374d5b18521b0f7f9168870f03ee39118116b04413b027b186aaab480d604e76dbee77bfcf8e258e62d7e0662997706ff4d970dc59e86a7f97cce57b1b4c0aeff197c4c9cee23be8fd824e7c8163f67143310e71ec5d285ba71fe5f14cbbcff3f0ab68cd038ff38380fe49d90c7ca56148f23fa30d2258fc7f11860f0fe3d9d9093eeba79ab0487e8ba718df60849c583ee88ba217bb4fd41c0a2f1979d10910ebe673ce2573ce1e08fcc25a4a315d0604f439b91c80b4ea6a0f5781a12098aa24a1839d0600f546b8236cd4fc9a4ce00ca38132f2ec6f6d7d7cb0998742358edd21e815e9987f2500b77979dd08f5dfec0c41ee2a7050d8f2efbf4ab77429d907f47e4df194dd903a4f8e105464f68bcc1029a7f579bb20cceb85202a1221aa278f16941eb60ec01f640400f520792681c8cbabe1c264edadd4197bab5b481f360c113023db76b886bc8dff1eb0bc8092d58068c36fdcfc8a280429505510a0b32bfec9eb3d62df9826dfaf451e89cbaa57624ab90734a12224250a58b144bac91248837867e98a1882a56d068d3b4ac4d6784740facac3f3d04200a2892820a40bafdd5493d858293f43b2021cc199d4d52baa75f2405153c769fbe118fd911c84972735dedeafb7be2d717f7f83ef759c756ec7192e2fb46c87d7f809c9c5fc71f64cdbb455362e8df281451813e0bda0804c368fbb7bc68fa333cd4aa2ccfaca14b5772537fdab7db354711ae92a324488c6e3c56a4f65f7b12f693738494e45ff36721a14bafed27b52073d7aaa48ed38e538a7529d756df11eac201590e9f4bfe84cbc660fb3b142ddb46bb2ddb73957daeaf82c26b4748494699886fd584b641df4cd3049d9c597409423c46c71644f0cd8d46b66b04fba5d75ae2317fd0a6404ece1f27678b8e4162ae1f4062084eceff7172fe6acfd5fc9bf939f379b8608ba6272cdfcc292dcc9b6073fe4cd8fcd9c59f3c363dac252affac9ee4a433519130c7f2bf192a5a3c56ba23d1bcd0040065d05974e91eab6f47b739e93ec5a53849450a13521d5dc99938d96ad2a5236dff3e0ac2c0bcd6da4582eaed0751bdfda05d63c452ef98237bbe95f91906ed2903f31506a67b2d6247f2984a55d267a188e82281eeefe9fe46149c744f846d6f72d261b01f20219dd8935243c36e505157a435e98f823534e89a1a74fd6f52c029e01c7430777cbe9d630bf55dc89b83b94342fdf2858349fa9d4e6b1d611e4cc9f464dfdfa537f534dda03cca99c066ccd07ea574264d5536336cd691c9b6c5d0f00c26fb538db0020bfe2e12aefdfb73973ff19c780a19f9a4a32b3b39e79c73cef97e34e79ca59edf9afff3492bd4816fd2223dab50f1647f2afa938eb46848680516eabb4870ffdbe324fd39e3a9a2e75fd18dbc88470beda32b13b991d7fc88524a758bfed3272bd237735cf3e97e1246ff079c62fe27613fe1e34ffd8dc76c9eb3eb6ee9bd11eef37b98c5b9f10875779c91926e2e145df0cd95413b6569a5e5de08b8e7fd15f25fef3f11f2a7c692ee54f7aaff1b1a7e154bd5cf1048087e154bed5f553f47a846ba4f7d6a87a204eaee1e142540bbee5df0ddcdcf5f5ac0c7b27e0b8713b496740523f7b93102f7f14d4d7f88c7eb027d471709d52360dfd69c9c93d6a4670e55516fc9377358e03acf4620ff0a5eeb488b3e4badfd6c33a538e8e9c40228dbc33cc29caccf8d9668c8c99a7ab242f5fd68acb5d65a6bad56c80a4dd984128593284c5ab0e0090dd6a8bead41f9be11fcbed5f78d200f91eecff9baffbe0b3bf11373b6168b65d0c696d20ffcf0f39c942c6c6e5c3939823737393c7a406a95a2b67f3f29cd35c2f7f6bf716e3b679f689d0c09107e38964656a2efec3b255a574151640c2dc0685aa2892a4a1ea891650610e46094650434cf76d58426aa79b94345de37c18e86b5a6fe4b8d2e1268a7f0a884ec95b5558c2aa4680600000000c314000020100c088582a150248e5441953e14000d85a64c6a52190ac424c751ca20630c21c418020000640468469b060050b0f33d2c5e78140dc34f60305a37484096c67191ab75ef2143f3c3e95b7c8b0f3fa27bd206568d73c68cad4d389de727a0f109ac60f4101a76834eb648f4d23332098e87d060a9f1f9452c5275dffece36d1b78732dcdcb1f5296e95e0e1d3a1879cf2053aae31b6f651e6cd61811623489f437738fa5d94c685245783f4815560a5c09d6c2927084697b00c9b4f298b2f546491b47dca60b37242f90468e18d4f41387807024867c21556725a6e650860040fb589be1f51dc8f0916f08de8e52844f01423a9dd0c17ecca65a54eb263045ed03e03fa6ec21db6720e1bba9b516231a28989415d8db69782c84f2cd8b6370b9a2d02dfaedbd5d5289504469f03093f51d4ac887e358b718a83686cc4623432d34af6635e73a7fbcbd504c3db0c6a9a8a54d98b796b9ed01a3aaa6356a5ca5eca64f308aed5d40d18122d2f9c4c43d881a969b85c28c19a9993df0f59cd55944826dc4233870dccae46b401554a77f88e2f3ea5dc0c32e4af5122221514c5060138e6ae464c760e00070c46d5c5a59a3dccb5e6c706d18477ac011a961e3d09ee8a92b60537104d83af1a94875012fe90e8adea8868cab303bfba4dc084a09f82f7cc4ec5e76e6efca16dcdf6bde24425e4d09a39b4e79899e7f06a0479c988c5d567af08961923e0acb45fe09eab1a9d0b2a8447a1057fcf0f21fa7ac8ecc6ab11c4d021bc8a2db87b7e0031c343664b5e8d20868c64426453b55979670058d479cccc6c91ff3533ba0ed1c7d4f493e0621863805691f8ab7f233e42f707971637bfb1ac98da7d1d5efcc6bf72177900982b22126f79296cff5f75a59407e7d35a21d44df534aa7dfa7d8f4c0cf46299be157b8f523e2be8f78c34e6f4818f641a63d056e88ea08948f56e706bc0279968154e807994e8b91a5352b8523e8face75f6343c6bc209e3bc2180d52303c9772eacd44c445b0d0e29023079aac2341c700e92c0e2030f6c8be74b7a6acfc01a97ddfc0772faab6092c28c741a7d8d50b0ecdf71913b964ee099073293f4cba5e5b64d8776c401a903593f985faebf441b0ff4de8ee80117ea6d8be09f3b26ee9f97039e783aa6338629887b54d99c6f6e265e97a6b966e80cfb6bb1f6c2d8a20ca9d24404a28eda7394f9bd6e0d689f60e37a0ddec9a1007b0dee0c4d5ce4ee6ecd86c185a1057d56f05d92dd59f47d24831099a2dcd88dc2b08e3d1a3d4f57b128eb9506af0b73a11cd39a4138c8aaa24a67a534e6af35646e485f65b48cb8446a636ef0308630ec18dc54609cc8ef8fc4bfb95effb787c6aa3c7939a416c205b39251228b5fcdf4aa0aaf009748306ef86234f437842f4bebc5974accd86c0511240c9e10d0cb22a4cefaa3fb5596ce3bd6198c199456a8d11b5d6c78d7b2effc327fd4d58b359256d98f17ca83b2d7cf357ddfa8a7ad811d3a45b4dcdec25533af759053d430cdd81dc9b75e4bc21f9ac572118d0521b56e0a2f8b9f6b01997e9edfbbe78337323eaf5f97db7670d3ee1956a7f054b19e4e5506c84bc9095808d188823bf94b382831eb7954f3cb831023a174b01e68849324300be9fbc64d56f75dd4ac6f28c68996024d19bcd755d0d9bc77eb0cbeb66d1b1954551dee301bd8d021586f2fbb627b0541a4d69b50af81f35bf861ab6e2bbe6d91e894bdaaa2a3fc7acc356b36a37ee51a46eb124f406975d0a8c08f224f120c9e86b223c7bd8ae807efe90b51fe042350cf4f0267cb14cada1c38afbc7ee554a0e2fb2194c21c9ea91736ca0ffb6902ca58400837c965f5fa4208db7f5a82587698b604b96ad5a78867e2585551aac4b9b0d1fb6008a38c66cf4fe8f21b05a707743879d4a7f6ca9f4e558137b23e5620755ad526c035417697e330388e05cbaa13b6078229d0341034eee31335cea0b74950aae0a612200daa362a891a8d174ceb24083bc58d0ad088044f247ce144c5c39d08b930e47f39dd6c75556fd29c30b6b79655dbe6175e5910d9a4521d9a9529cf6893df59525ae1e0942a5d94031e70f2768f8045abd42a3f1f4813b62e2dfe6ee3595c1eceefad241ed3a1d850737f740948e01cf94f83dfe50c75f44deeb8398aea77cd54cbab0e58de5a07655ceb20947562c87cd29498902dd63447a030dce3f235d150dddd2ed728e7f5b66b5ae06a806584ab0e4fd8a4191e7a7502717b84506cd003c270d768969d60abbc7ef90668d380bd4fe16811e2201fc4addf5baa2fd83f6d6ab385f06d6e8a2b87ae8cca8435e6df6300997e62f8f1fd03e1a59e9110e14238244ca7c4fc9a231c6d28ad5fa36f7728158fd0f9e0c4f82bcd2e8ec44045bb382027f2c1c327a484e1c04d47545af4880339b3178ed007c0d52e38816b437f670bbaa92592fae49d6ea34d3c94359e586a60bc1510fe7834e555558dd356ba5189d6755d6c022d7618dfd6c66a43fc10464290e959878e519e93735e55fdb21ff68f50de61761510c53a6b5eab3776f64bbcc65cd3b7cd9c8bb542b93efe009f06d8313dce19c48488578855537a94318c2c968d4b9dadbc6a94ca00b5e25b7d2ff61286f915a9a1146d02f3fc7c6f238d8c3596a1b67fd1fac9c338b6c93347bc3a72e7a5f6515356d05bfcc09a6764d31698083f264f66036c8e8f871c8f753dc29e156d12345bc2b158d64c354c70e8b38cca3b3be8699910716a74fd61a3d788aeedaae35f8c72a686477d5d54f4c1eca8a68099374f2c509b0fe584cba3c71baeee953cb6c7b70e40a849434b2219fb988326f389d3edbe1fbc1817500692def665cfc910b0f0e7060c5345280602196bb90ee1a13b345a5010dc4778191d4795afcb90e6aa96dd7dd4273d63435472415fcbb5561748ba1aa9e6199c349dda9156dc96bf7adecbfb0b9b1101572927d67a2052f64177c50e661c7f2273ce5728246dcb8f8e134bfa710f5818232a326f2e8d6f3175b12d2599ce2c21288b1f010007e09f34c363d3f8970099c7b67cf56c3c241bb67acfce0772cef4c3e81a5acce66ca2b262321b31cfafb0e8e0501e8955814baaf305ec7327c2c1323baea539ffa8b87564d29362a203b6e463a52101fbc6596fceb4ede475fe106601a96dfd5d39b651c9bcf302f00b52c4bf07a9186fa958d0ebd75e7631d416c3acee428c0c18f66a9206d329f9fe9347af5413f76df7c25c4f1703fb7f2b9540125abef91248d2d3a23f58dd41fc1216ad51fe8661647a6428458e582e885f9d0b1aaa77faa86b0da835ecac9791915b954919189bbf3d641047e6437af2e0f12016690400d570a96dcd6b522343c742c383442bbe4a849be55e4554b3eaa849c6202e387449694548d3bf2028fc3b7d2de146e5cc4344895f66f242a99a004ef8043b032e2ce65c6c5e0de3bb43a976155bc078baf3abe60cddd5852e38c5deb9be42640730fc88886a4cbe51e159dbc913e626b6314759be68db784ffd25eef853b8807b4c0ef0e5e148e3c630e90daaec5e27394662d188791f9e48972327d5271f4e292529a4003a9e6395ee53116707de1e051d0bb79caf64220ac660522b7d1c9193a22ad17011bbd0b5f7aa50441929b8e8a7f328ad3ad137f2914aa09ea1ef0b156fac7121efe2221f5af85f529882ce27bb501676aa23f38f2d984eab700cacfd9b607cc0e62b81137cc7f4254ff3d58d6baf8d1920e3c66fc333382ad1005d3e8acabc18612ff20c532357c4eea38fe8200d43c4866f8dad156a03735c4555f4e5c282ac922b574a176263892bca1f4176c62414fbe8c264a3612f4df671aa6cde5a8b6de81c623a10942f651cabc9bbdc93ef5d53903444cd6ec688ec1124abaea694e033cd5fc9e7a4b7e4a9147675099e6f545a5f818854859eb0a51e946c700825c0bca466f2f3a5aa6783087543be984eb2c0514b635ebfa703697f31ece8af7490e39510170625bedf942dc53ec1728ca6267aae194f586826b8ff0d638e980ba982c95d347b985db26a18665958e64afa99f465538c3f38c52a7de5b6a6c281c9d3677bc760d3f1264c284d9029a20eb50b5c1d132147f7df8435d8ad762fa70a5969aa85c5ac074d13ed89b0d7f0fb2bf4342f7d0aae46636a4da7db199058440c7f61cfcd31c67538624e960481ae3841f364292563f540d2a6f60e6f791c675a4deefc987861b32bc980ca45c791f06110ec0a00cecfa065de1ab41fc369df6d52e7825883ca21032c62cd4522a6f3dcf4b4aac3cc2d39e6fe6e46d17ad357cc7866bff4a0cbd8f71420aed1cc1170942f53dc00f9d2dff8214c742c54904ef56a3b4b767cdc13cca198dc09f0212f8f20aac9f2d8199f511d8502781f494583ba288d3927cacc9bcccc0fbf5e09a71da9abfac576d3e0c2c07531828b19109332d4d198d669f6f27b28fc61aa79f20298db6d7632761a576b10b54cbebe1b86ffa8a13c2fc8829561b250e65587509f83b4a471c9ff08a1fb3cd0c7bf32402f23849e16967b19d3720047d8e2206117d6a0690386b1b761d8dc1e04498d170020c5ff58f2deabdd004ef3ca36301a1ae338629f62fdf073c470c521cfc3a06633ce681ac8bac1c7ef2a5c0c3ee82d2fd2185a99de8aaa520081b2f048bda1af854dc8bbb11342522adab108af3038a26945ed2205bb2312a65929febf498d518ac158a2b960aab3ab53b5c71de3ccbc505281b569d8c64d4bf6509f0c1c4f3efb76c180963a38e19121bcb027c5aeb06a879379fe85cf8ae22e9b588beaaaa19141ce306273a8188300168728870dcaa5284931a8c38f635955d899c06dc693bfa30cf521c796ebe61512953a8a41cbbbcfdb8967796d4c1500448e0c8198d92d37c59c90cfe0ad22bbc1d3460e14a82fedb76a749c017c449c354ff92e50a3afea8681b6bf01e60ce6e92ce24bd7d097dd097021166e0e0d8727645207d78f1cb1cb8b41a0364560167b2032c6e5589dc38cb77ff94c0a8db3af2e92762e5833ccfb8a144e286450ce5de89ebeb11b1c661b575da95e539dfe5d9de5ef0de0a3f5304a6fc1a2f87fbb1010aa0bf006c871bdb12ed9518d1e963979c46403c63bca29593b4065e37410302651be4911767f44f21f22512d3594a9f669021c8aad068bfe72f12f90461c6976298ac0ecfb4a54b6520045a63b0c2a69a94a8ee3ef5a084f90a54c6ff4643c4353394a319d7099a4827c882be81818e1ba0fd15ac1a906698cb096821ae557a0a992f6516087112dabe484b0fafad484215373d6677e353613dbbed88d04f375f9ce99bef1a67b15b700e5a57b016df61a8256d970d18c86abd86f1c47375b4df64f9959419ab3f12ad98c50b8baa6c12de15b3dd316d8bd4ebaa3352c427f1ef6a3fca2e283526f5c1ded1619db42b52bb38a9827ef749e317675aab7b6b06971086abb26dbbb5ca07bbce0dd76857d7c40bf9a4830c6b54000730d8a2906f27ecaa1ed3516ab9f05ab651d087b0762c8aa1dc305917e620bf44ec48ec35fcadadbc3c24cacb3ac08159021b5fd29962bad9004c22a9d09fe304e4b0a78b3f2eb13507abdcdbf70192ac3f48bde91b3a3ed4f07cf2c8eb7cec171819ec5e4f361931762f69660c56d712f5e7c7933cc737883f1422d480d58e7467d33df69199b51f491240722e6133db8f28664f540ce310a626a84782498f9acc863fd1273e3cd22cec0c217b82f8f272573b53214e53edf1c5333c130d5d7c0d63a1aa0174f4e5e0a4243a202d58667d5621587ba755911c3da97a48da59ed8e2c2ad8e34f5f32c05fdfa319b8535c0d1b4a8f17cde1eeffdefd017dbad7476c4edf8a0510f958c77f395e3942c963cfa5c0f262896169c1da07c35f7d9e470b7744a4e7718ee70175793cd47063ed1943895d04497ff8799ac2db7698b4931c57f105e6f21871f8a714da345ae28c26f195dee27213a6ac5ee288a8b226dd9613fb2353755e5cee442f3f9bf958d8bc5c115e14324604dc9715e33a40872694c455d5ba62e8b18716751ad0e88b0b68def4a76c53b14068655cd70692f1ef979545349df67606e8e5b762632c914f52ba60a1d903f60c34413cab48a9b5fe59e22d7b92d98fa67310fe947132df853c592d35983644e57ddb8e209514bdbc4014388de1ffb9b3f2fc70be24eb6555d5bb67aeadd17f74aabca0d058cf40490d74df68646f845cdaf552150067fda11f33867136038d6d9809de343baac580cf327761ddea5566bfd15fd076f4922f4c72734b2e8467ae0a78d0bdf130b33cdcda5ff8a318d2443774033e65de52d3e7c8eb1f0999489a37e2406de7fce0a07f963788a431f5d42126b68b6d869fd4f4ed2a95d0821a14945beaac1d637adfdf3c701ce03bca4e222173a6460fc945b8d7acf1633225e9a473f5977868e97b1a3b4ca99e03b4c84fd1ff3c4e719bba39cc0f2917ca35ae9d6eaf4a0f0b5fc937a1e1c4675fcd51b6d106a530c636bccfa28b3dad767aede5ae746aa0becc7848de87663af5a0598fc4ab9f2fc1bd64afbaeb97a2baa5b98ad93a2c8acfd61013982f14b991d744ef2401c86f94193b26342f9e89f58203d4eb510ec31af43c1497769b02573f12c1058f5569fa08fe5bffc0703511978d8197f01fe027bd727077bbc11d52fa57aa042b81b77350158bd06b3c7dce168c5482c3112847c4816032661ea5459ecd86ff4056e2c31d50fff2e08a1533294d8e93e6712e4b1e0301bbd0e419feb75b10066ef6ea2738f512502e7c9e95bab314888a08f5adc4f0b66489ca1750a316f2ef01716cbac2acda0264ba798ce29cd61cf2121275a4b2e0a093eb27342a00b70f10abf4242c26d274db2c8c8263a9811002d646e2dfce8047c34b4f66174a3f9ba85207dd51bfc1e7d6c548e877bd25e637dedfe1e304ffeaf3055f1e087e4c77f08d6cfc2e4e5ad873b39fc07c98bc0f3daa28f954e634e3647ce2ec711199b320ade61cce0a548a0821941b7acbd92cea8a55bb7d04a95726748c3a37a9fbeb8daecc8df702dff093b9762697d899632924f1a094e3e1754cb85c2dc84a44a3746a6ba27f8bb19d81a4d32c62e6a42ab51ea96253d45870b95590351da630f8e824716a385186fae12883f650ff1cb54a5711b2c3e618b625a9612ecd33262d2b378c0f484c30266d9c0f9821fb8d9d5b92340d8e3c308c8429533f61ca9ee4b9d2b11da516ee88d387c638b298396d1d15a37c5874c9aceac05377e17073fc4c97486a06bdd90d9bbbaaaf6a5cab764fa349e26681c68265e922c85053fe211b0d61a1850e4b90d882f104f58eedaed6676093a9da9c534bbd10f67ea1d17e74ffca056446d9fbc42d6ab678f823435376eb8851e7da91b9e58fd04030b2e88cd90398e55da1a692b55a85873e38ac1ee7a02977396f5332b44adf7f4ca7f7503cf80d3eb804d7f6fb44343e62a78c5a69c038f9c973f0176a38c4d897483b8902fa7b75347149707160e964b8ab3276582d2dbccfd05aed0e48c444acd2df5792c959a4e67ab3f591a494a60e957323772aff7c97804ce1f5749fa70401d7a4a298dda59379b9301101531ddf0f9baf9be948f0da582c79ff10e630c7b9405dd5a1f1c9fbc7b56286a17025069f68bb817add13f5ddd90f2848aa3003f4e5910030eeaeb2d92399d4fb6372197405fe6f869e60d0e974360dcb0e6c46615ab83f320007fe4c208b7591e5bbdfb1802956f0c50665fc49d063c3f5079917d6f4978c92529089be1e34db5f1b17802c5d3891e481642847775a90da0983bb73bf802b6ab7730be617faa17caf9b07fa8a2b6baa6be2b7fc0a1a76297f373360942251c6bfe302b1eac240199e52a284c89155047720c95db723c9c8622d9df85f37a32d748f6532e0ef804ceaee644f3029e0dc6c03d4420be61cb01b422c40a4377848a4335cab0c47702b5d3701e5ece9365b7740e63d82c76e9f57e36b9d56adee14c337169892152867f0491f93f559506556c9a91b85809140b051fa3d2cb3786ae497a287604166bf64b5bc2af0ecef8012a16d81e884751f1d0f8f184339a37cf0041762c9db9ae380970c4b78445fa740d7d5411281d20448d786416368309be417991b94b16b5d5a12b366d925856c81629fba75f2bd65cce602388380ad71ed39c52c731e4aca151622991cfc2d83445e43fad858d0e7f454dae1a41d88e4e42d304e7cb7b63ef1059da425e5c28871719ce41cc80c257c766b5ebd4dc40e538374d599c5095d717dafe283a9e924f1c75463091f338aa311ddcb43733739ee0f0f9384c078b308e4ee5361511d128a2cce31581759337fefdcd48291f15c6885e7f2aa71893b2e414cd52c5f1ec29b3c83543a9b86dd6b625066a4323c01bf6f7eb8b40f2e5724386f861bbb6a67951f1793fbcf7a4f5510c2c9d4f83b2f1b8039f2284715c2f3b8a8929a620d43a5bbc89cf1cc196200e1978bfd0025a1949c7703bf9fe8671fb4069f1cc7e57901ed1671708e876aaccac36c59b45a581714b197532b880921c5f4037e03500771743691b7f60481600e2fb8c259f19e672ffe2727f1a902504198f5dd238d369118cdb654d453d4a7a7a79aa69521da3edf82da7bc163eaf0f7c09d64e60c6ebddfb61da1dc5ccb9037969c628e7b2f601b883d4f9c856097d6808b0edb8da0dadb43f3d78ce95e760d41f507a0c2dad7156c28b653e2aad611a5cced5ccec274e33719f0a0c922510100d7669313b49b7dc304dd533e44b7dd5535c7efe8080515144249b7b99fbea9bfbde83dc089be04b5027dd45ead3eb2143c263ac5a3f74656e6061a565aef90e8c39dda79339c2a9cbbbef6081bddcd17a20db11311740e8173530429775e2430dcd3a6b4dcdb3d34422687f1a9733804824e21c05917caebd4d2aac409cf3b1c45dcc75abb939530647c0ddad1b308734a9a307a6427ad787cc656d92bd6d3b3ac5aaf593ba58c4762cb8297d6c95faffa6db3882621d12a7a380dd3c12f65758a1e8b83c3c969e0ac28129a1cb3768080a2505035643da1c2fd54ab0387a37594be917bac20dcff01dbc0a8939c9c78a48b1c1baab2d5188ad3597b0c0128a356a0532e3d78cae2b99df5a47ea4a007930928dc5255e43c43a7d65b5d5722053aa79e34234058e6450fb625693f777052960d8ccc7789862be80e19aea012da9c51f7b53e82233d5410fc3ecc7d80e5ddcee6d85f0a813ac54d52d8ab1e2fb2591ba5bf43151082cf7a2b06150a15e0d384aa1e1073553da6e464dca0049f876d062bac4430593ea39d3998938b02c8a50aab806f34603ae76b44a62875bedc8e475315558d17168fe14c57617d4da74c875b6705ef14d73589990a060d006c254da030eee04900f1cec993d001b63d6bfe9360e4dcc32044ed1481665111cf8c1dac1797f8a3ef9bbc6d553014d98fbc0e936ba014ae01a1aabaaa36236addd4337bd488c833105b53c4bcb3121130e6294785558200e6bac4f2af8bed87e4981275eea6b807f26a133b6c4546c85406bfda501c60bbc7d242891b33a44c104b760d7d42262392ed9593499379b28169fc74885aea1378b30daf2798d86f8592df862984a629e3eac3d67900cf40540351cb4b2089abe4ab50510ef4691dbca3fe15dff4a14bb384a2e7a901133ded7174cfe4cc2e82f13a4727c0495919d16c07425fd565753f618340f98983718979a604279d50060953f4a3d92900fe9b0b5ee623f48604b0230c3f4c80f8c5bbcebd933ec225030513085489fef3cb7260db6a1043359ed4dc344ef0a10d55d47eb67a10d07570f649879987bc1ee18263432f5e49a24e26bd3fc8b13af84c4089aef49853e327c99c4b3d5663618a358ab7b2443ae17ac906896cdbd58d598e41a51d6a3815dfa1b4eab2789bacee6ae5f8bb15d380fd827d31de833eeece163084a5d22b806df635d0652c2c90c3fe54bb60f005a1378289e9b244981a348afd3d90797e3fe45a3cf107d15287e156f8bb191c007bf8c86cc80e7272917bab4aa51b3f00c9aa93abb62aa7e29b461a2f036d0e0de1e54d66ac0a82af2a86df92f1b635e46fb7800a070375dd9848c5d8e1d2b19ff6be58389e11330ac4af63d228260ce6bd9942080e6a981df45ec8b1cd846c7b0efb5d01cbfa18cb6c3430e5ede19fb198cc4084c927eb40cf9ae53f85e448b019bc8087adbd2084fd95c39f39eece9b33ba10610d03e14b3c83b02e247901ba50e60d85e6e68cea5f546d06650c8a2787b3a501b9be2b9018feb92a09a9655907a5e4267370e4ffc1249fc049da8c468d662a7a7dcaeac601c8244b90f4bf7efc3ac6dcefa698d98dd4db38f88f9ed9c1aad40e6e437180e2d6ea68cfd30ababb2ee74fe23614d0eb91b50d90dae2d7c82aeaa8fcf6eed953ad38ab18cf4db2dd70b6768e80fb287b78395a38b5d61341d0aff10e9d1426f0359f878ed775d8e0064a27b94405c86f4a2e77353fd741987c93b524818faf19dea0e6b2825ff739f3d7a535d5c7d22605c4d2f5de3bede5f7738a651daf86d4654db9c60cd4f75fc238a0e7ea0683070ee38d6dd0188e30f9449af5bde3b4ae10933d5541a2d89fff3bad8899d1c540a2041112a434fb5a9a2c033308ac7915200bb1d252f58abdcabb34cab3989a3dccd9fd4585703b4320a0cfc85ef75f15ec2033193ce00357d5b74565b7de6f27d28c6d3daddcaa7002d2d225b93d35eb1b42abd2aa84c9e51e2ff6c1ee33f39096287018bcf2b759555924c387678c64296827597748d34a589ed9a6970bd2811cb894e0e2bcca1fdd120d7ff7f1cbb8299aed7aef2839a6878f0ae33e83d18ad7659cb2554d6550217bbd67ee0aa659a7f0389663cd9c15a26cf73756937065a1292ac23cffe1d77ea45c967ee254cd9da21158ca60b36df3a8246be965db16ca530436ddd509c88a167c524f110ec808920eb8e452ad335e67d8af5957a0e198827ab86a3877d6902ce808609d00ab852eac4ea2d4d395e4f7288672663d8ac1fe3fe76ce2105a17c0cc7024c31262a067df1fc5e03c1674aced1dd2d09cfb9eaeb6ad5f5a33724710af58a02419936b21741b0799cdf9bf1b8bbc7680ba6e01c195ffcd09d66bec374b097014962249e3c4110445f444e6990d03a7a203b497879e4670f5da2b6443d2f0ad4f91d6ef795a012e76e9957ef89508f1b9d4c5f5abcdac539f9224af0c973d1f6242f98ad9fb62514879b0aae9931140942b354a687ccd2aed47b81bfb3cb8d5009adee0f8f761eb64ea96059753eccd2a5d152b4ec3dfd23a3090acbffa0cfbecd4697e23f2c8886a48bf3a530260364cb9733a4bb4804ce3e763d30624a17cbf8029ac834cc9514982d67acf6c47332fa21b6dc2b9fc36a1fafa530028028b3857213402c588d90b7d4ab4a6087712989fbceedc14bd9e2244909440c42a3c847e27db20d6320d85a803d9ba2dbbe2db30b5381b459cfa614942e9ed2f54dd6f2a0d2d295d252727b8f141658875b9a1b66bef0174ef201848d6ac73f22377a6fd9391ffff8aa9c95e76c80aae76e9f4be9e5a125d481476d690917f49218144f470459146aec0e722a0debc536d7c89b02bdaac1359b25c37fc57fc2ef1559874650f84787312689e8745b82ff17d22f2186cd8ad14164a98fcf2f61eb1bf7725d3e717232ba659cc786aba228331989f44a613c11e11bd15854a0e6fa87d523660f0c84322335ab04590e210937b84edc98f87b1e0d0f952aa18aa357fdca04088df639101849497f4d3f9aa9ee5c588adccb99bca5242cb8933133d27d881601fac101360ba20f33655c6d624e1ef374f9da0ca31f7cf8a0db46fa0a8f549f03a4521896ad2278325d03050227b128b7a03e64259c336b6ac27f87cf4d1dca0b42628fc84d8ff4db295528b23a4c4f56412ab60bb927bd881628a8e475ff45d855595c83ddb689e68e5337901c27eadbfdf11b8eac2e2b2724cd5ce6f6ba46c31dd7e2315afbcda71f1d82e1c24335fb82f3b17ec5d39d762681da7d2e6c15e962274e56144f6f2f1e88fcb2931f213a585dc2423364ced2b8b93b5b022a2f1019cca77863cc2d99f8731db5a8bc9f22415d2aae7efd2734e82be7655e45e6bc92241fb4040732816612bbe5d48ce32ffc928d37b9df9800db1f24a4cf62fa2506c68e5d00f692aa022c7baa159a9e5ae26166b0ef6d07146410151479225abed8fa71e009ff002e23de87e40c62feeb18b2a10edf57af4a124264422e0a356664451398ad76b3aa2df8b3e3c3465054335d69830d168a92bebe8f3afb61dc04e01f3d87aabdf2f47b51383c9834518f6eaaf9aa7ed9534531d3504c709420f20c278c3d1e5382e003f8cf4d9c63186c21ba1014b36893f37b8de54da3560d5a2884915d8ac6106b3ea7e5210f67b5234936e783f93023ab456227eaaa5c5020a315b6d6ef2085a89cd280e5a21d144e90497ec0be3e7f2a6afc72c8498cf8caf2406c0f8d679a700bb90b32825b4e76cc7cddbeb66e8531a1421e4625b095e2795ce048439acae0e748792885b66700e417f99b3d74c8de0b59168f4472020df4fb244d465913f679ff00ed0f5a2e9079d0a7b2c6a188482580d608f4976c4aec64f955d1390060b152f14e4319a533ed6b15f3b4d590b1e7c635bdaed9af1a9b9d3548b7674c3ac2584365bab1969e0cd160cee91212654ac23a85d14439410282baae247fccb31f1aaf97595fb471cb2b2896304608bdd64cec926a84647ad4e134ea16cd4abd5069b106e004c122ef9d6bb910bb18c8231320b54e251fcd44024f77d8b7075b5fab0c2791ec8fb204356e8d0a1031afc9404f053ac67474bd407cc86de7f9dc28e254cee1637b54bdf1299b24b3d9d6c5de718bf98257c24fb24c5cbc912cfc63e61ba2cdde2a9705cb00a60945dd5b2f769311aa5cc2e76a8ecd0c45db3faa032c93ae30da9832f386aa5711467eff77af460568fdb90cf08bb602ccc2ed89897b1f9a8c04f55a7d0b7553931583c0113e86e29841cdb27eb965948e470ff0d80b7238e8336e2e9f44093b1e9b776e5a3860e1a166856774a24b2a4eacc1c108763d1cdd305b110bdb92475d1fb1506a9c913e41c80ffcbe434712c096ad686c4e031785d1d102467f09390668bf4844de04ff37daaa9c1a0125677f7df0468cb04e25bcbd74cbf845c0f6577091b1a9fbdf2ee61e90c378e0c39f554b77e4c4232ad31511d809337c720ec94d4291ef8282270f59dae97ddb679871bdf3e4960c9c42b25b577c6fc24f03aeac9f919558ac5bdc1303ae1272d588992458f0c311209c4ca442e33050f22623191aa055a5ecf58d681248bb0893af07cd61d8fb9b268f8b5a086b4f69a050e2629fb99200e7c43f2c973fcfdf0ed6799594765e42135022b30f9877e71c8ced9bf73fc2e5abf68ec69215b5b21f941f35c2936cc009f821ef04ae28e3e43577699b07315f4e8e3f3a9f2f199848f8fc6663b26f289a78e4f75212d4e58010e75bc41ca1f688ce4e868b034c0d14e373bf2dbeeb23e917ea3f9de0241131642787b7e21a7921ea32f89be3b43c7b5a785b3aee5856895cc11dd217a7cc1b2a324d7958e2fa209cb2d95fecd5ee3dd587c84afc87af9ff41f81a7ec9e4469cf1baf23abf5928ebc296345e694ca6eb3121ba859ca1a2b839077db1d0b300bc9d94cdd14eb6ecef4aa636bad52d909b666ea9573b22551bac288852a4f40faf06a0b51899baaa71b059a549245ad36c18506d92cae4de949b38194b45d306aa17a4533ed19a5671a562c86e88682a2b43c599561f9b8558606242046e5197f371aa07d28a1e5dbc11d882d177cf11e1b9119dc68ca82ade44710c7d025a202dbdb953cc26bfb0e057eccde7e86f832bb2b4002836aebcbb4756d94504cb2e5dbc4709d48c3962a3b78a41f6d8c8285d7b2b2b33406d961d70012fdaabd616b97cfc8184cc05ec351ee78f2fff0f9403cf4877717d39eadff4ad9e953108f835ef6c4e897e4f950ab94945bf089453a095dd6b677e63b6903839ce247819f157d5087818fda13d77124fd9c74e6fe6702eef2c1b2bf4f531515d98d50766810580c7183fc0f7a3c87a433559a74c3da94750af3a3a3366022bbc4fc263039900cd340bbe3670c6ec4d7451873beaeae2737f119f8a097fc52e24b80e3e4a664e4b1d83181881c450ba6bcd828ff4c0c9098812943255ad5fcebc438ce64a69ab5b9eb48dca19212060c80418ca8557992e4a5401db92be5e066a884f4b0c8bbc5cb72bc49ac400cfe72455708f02dd51f316c2d8553116fe12b594c0ea6d2765ed59a118388ccba3618f1bbbed235f0f4572f1a78eaa56bc0c1705283b3a10d1f9ea9c83ef8b3daab433ff9a918b80e756ee1ab1e50e7e8804ff74491cc50617cfa4207687e7f7135fa72c775badf1ad304f9355bdee56a3a4a4c700249090e57c89ac91551589677ec7e3c139fbfbc4bb766ce80c3ffacd8a7f5433cc2309d894882ad248ff126a72122c2d68a785527f73284426a4223944ff3a2e23e8506fa6f334348230bd957b463068f548a535ec09287480a18d0d79adc39bc968b022659ca7bf7d0c7d745d34cb5432f3e3522b0724a9914a1c860e27f3a2b17e40eb64d0dd9dc79779fbf90ddb4745a77a152b9927221c25ab8122cfb47de9202f52a03180e55d079ca8b2ad93bb5b9b268ec3809d5d64c5d44a46510ca6e16bae4a75919c9668743f7ffac238b1404c64c2edf6e6f4241b3e5a87e9214e0200b84b1781db729448a996a69323e310bd5ccb390674302380f798894f066df9148c287fb479bbbaffc58e1a3889cf22569bf066fae02a50acdd14dfc04e496597473647623a2d42a09dc211f1b99767741861c54ce1e98c6ee21320da7687abd0e5c35b1730fe9e4b27b5ad29578089e61a66b48eec13214ba9cf8654ada63abc07c1844eeeec6b8e527387842d22bf7657f4b623ed99057a7bc79b3fe654fb2f41a13e5b18bf60a08776ec1ee4900a2163bbd33bc9196218b6c41d27d281008dc799126e93c012bd39bcfe55dd64532d51411d2d947b4595289456a1c137e502fdc44129322733a124e6ab54b88f8468e073b62859fd1a33602664f6b47f11508f04c2144d5a28160ebeed0efcf68374bbc002685fa146c0a925e1c721b51bf7d3685902812405ef377c3b7738021e752420e5c8de110a3231154d7b1579d9b0e435a3dc11624b1ebff98025cd1f9cfe010d34263e0c546f4465b944e076a41dd4f60f7210dbe1e6935b156c74fdd2b22d6b0360b1ba764f0e1d97ed9dbbc01fbc1435c4c5f4b75d280d6954dc78702de77e56d8dc7c150f20cef069a29d60f1ea2774886c044cd068f33eddf53b28b240a168e83487b985b276478214d80dc3072085bee5fab20d9d4e9606d52c14798243a874d21c1d28c4362920e3624f0928554f82bbb8a9bf472465d0fe9205cf02f1302cb415a735bc1ee28cf511bb659bc7829328e6ca6e87669a5b4cba184c70aeaf91ff312b5fb320277602af0c441d32510c8b2936d61093ecd4a080765224991e49fb3ac9da9e6cd7e4564fb525ff587831c0bfbab454b16aeca9c517b20cf86a525685ef0598a81fbe4c78b736488acc947aadd18d78fc05d300fb982b1eff6824b1f2e95d2a19abf07ebdfd1620b17ad019e661fcf847724534b3b1cf1ce0cd95d573d82814e475b23edabc88b07899122231d34b9fd1eb0b95b302607efc43b68b150ec9a9e201dbf3186074139b46392e62acf33fff457becafeb8cccecd878364995c76f81a10d28bd58d3857a2d2f6bc7117b91455202ed12a594a3ae2c251611c394cc32c3795b7933425a7938a5b35f9bd2c01fa066bcfae39b6655cd699f6f1cd6442751042915866141a609e54d93c88e00a8573c643043bf807413d739e0f61ea12c763cb734bb222889f1d5ea07d7dc87efbee79ef69c0ecde41e62d1aadaca067c9e631f584e825c28285395b314046cf210221be038fecb70413de2288b8b2a5429e703e8e8a8188c103c74c5d7eed7d724688dafe3321509e29b1b30a3ff89c4027e95ed148e8a20240d0952d4c83548da17079cbdf0595a51da311ed433c2184017ec76eac69f133a838bb477b4f49f9066f35c005df0b2245f5665f5f88897cfc87ff3aa04e27c2972117d0b3c016512b0d0cbd5f85cebb46e29da06244e97f1307935a8743999e62f66880dfb699f022a5d50d675c1648801813e9ac963ef8401c6729b6cf5728009ece8418ba9a5fe3aeb3004091160d1caeac027e475bde3bb89c44cec8e6603c9efa08006401c81faf268d52754169b3b071b1ffcbd68b07d8b2008e7b95d1086a16da4d9971aed6a7100d6ca03a1e53cad3ecbd2a03d4bcd4a24f4f11cbbf32035521092a4a9a28ccfa20b182589a2953853a646a3e3b3a9be7149b5abbde78cdac5e784b77b1cd39205cda674215934084e254356ce11453b672b9a25263a5f4a32624f3d5fecfc045d96a736d0590ad45f6b546fd448d29a68d488f5e51b2fa2eabce8d2271bd2a76d57dd4092f764362cf011d6e699a38fcd443ebf854e91db9b8cf641efa5b16b21a867a565430808199b22641498fe17a594d99c92de64937fb834f63094c9899c211d7fb5a6824881c5a8ce4d714aab82458684362f1c530b3959454b85740a4d4795d8898a3300646c1e56c7a87792428079223d593a319b886e79a944712582e443334a57cfaa93e5a52c2c0ab6d0ff045ae35219a19608c56b8136ccfd09c8b0c5a74bc295e04dbadc1236ac13f48ee64642a172d6aef4a724800f0b1096830c82d4d72748cb617f100963629c9e6e0197916e999ea001327e11861892ec4315bcb4ba4e9299a6a87c41077307bc5e842d0d686d5499269ed684f3533b715305bf9cee544c5a53fcc9ae62962291d42fa75a87e49474ca289cba5e4d2e38f826b6a17c2d5d5c5d606555c29bdf61e39df2ed70c2c2c8a2ea4cabef98ce43cb98b471154af3fba43752c5b6ef5398ab151c9985d8c05eb0dbfb82cdfa0b86a047ea14869110afb43877743dcb2c26d8a58672ef1399a9eed3f2e789ba2753235426cbbf116fa129b5486704d3a644e2f95f82475a491f1828ad11c86fcfef83348abd48e2be8e1d99dce855f538bbad24a26312cabdaf40df554448d1146a7a69c446b790922c0cad6981de84d3748792def15ca45b784826d6cbaf8cf83aeffe79c99974123312d2329747326204e201b1bed2b4097b1a8a5d6628c506b579695c51e18da4fde894e514016c9b23431438a249ccdbf8e203d637a7fd0283c5a6515dd0cbd8835bbddd3940507eeb714f8103a78f8a9f6df5dba5156b1c1638465834face792455a85b488f5c31a20786be20b06e5da8707dfc14408fae0adac8553e6b830bdbcd1fa44b46d3916de4658e33ad46aaad2eef2213b329706410498dc171c1dbddf88fe9b1f07658875912da9dfd3e92bf3ba73fca7b6065c15aa789d87451a80010a9c7bb72c340edb20f070bf6da70d6911661bff4342435a64fc2a209ac9e5805b20cfdb6212ff275504953763a45431068e7ee0487530fab15b80039352d9e566da8dc99f3a7f30a5cdc2202d97e5be88d5e2b7ac669e7561398a581be0fa9379df4dc39fb8b3203fc0a9a53458314f3b7b77d9651c6aa173d0a7694607860905f4aea8819d0d74757e9195f41f7fbfaa01d058b925b19aa71d627bca4ca1a92af1b62db906c92a39f768cbe9d778e9ec0247f96794b04c086262cc30ae8ee0f0253d3114587fc64ced6941fd10de448935e8d46874fe33de30d58b2b06a7e2110d513610702b9576ebf428092c48e0d71ca88d637433087214e82a8e1a1358feb7673a8568dbbd631d6eed37d6809a233f2972959982070c53322aa4a04d051733e9a45efafc32d6535697243b7f941641f48a7ea7f062201fbaeaba9c3af6269e0f4a9792a813107e4bd7444a00719148229fc467b37f435c76645dff10df89d205d8c77083d98cc3997df385f1829e781a6906e468192718c08345e71604eee7140832a658ce27324d5933648938931dc60bf2802d6917cb3e4d90f35c232b9abd082383fe21c5d654814a0236528806d3f02a59f7061a57bb8a0a54b0526481d4b48c8334bfa549d7ae48d9d0100ac1453630980cf3ecc77e52446235d48eecc43e126728e5994c7b1d8a64ada9396aede02fd9611805565327d8293257e9b87220dea5ba1a3cbbfcffa41f84fb78e08b2efb53ced56cc135ff4c27698883b465582213d0a2e795ea76f04467cccf7ed926d7087c010e08002e6419a38ffd8d988101b7e7533d13a33a11a0c6d6196cc57c5b3d288b425da38219eede33aed2278840e68fe976cad7f1c2a2a5e4e3baf36bd68c8c69f8005a1181941add69965eb1207230e35c6cac9a48e996e2397a47ffbdd786c13e7e85d9031d54939ef39798a4575347a02c155c4e833970961717998ad37163f662cda8143bd062dd0916940aa888de8713320316110360bc4c261620dcec6b24ff137c83e6b5cedc2a239722c4b20afc84e655f0049dfca58f853144873b6c81d36b447e510ab7b66df6a99dbbdadf1fee40723069d304bc6ea5eaab9910823b7d297550a3bac80540af18d24d75a283563552741407a7a49586441a58191fbbf1bce7749580a6f6ec877a4b4b779cc246ba4dffe8b90b854355288286c8a2585b5ff97e05e909a9ffce6a54ba56fa55adad5db29c2f0bf2bb16822ccf71eafe65a38371e4193f85a304132a57d70fa795addccce4bc5f35b5aacdaedc329dccc73bc6b513a3575cb6884efcdab5db20f0eac455d736b00344bbe6b924fa8da8b15f73444daae5fc5be1822424132a619ccc9d800ead2c031e760317293266e2693fd58b0055256a1130b0659071b386690d0017f1b531371e4ede8d376784ff20269d2d0f99d5d1bfc076585b51cdf06083eb82e1d09a728b91b5eac78189d58bee1d04fbaec9a27fd8106be2882d5ec03dcbeca736d2e3bcfbc93d9974926459552c4ca0971406266ceedadcd3fc91b408f20d9cc1dec0120b19309feef0eecf59a480c6658cc2fd47d510e955d2117961681618324fe11fe1042d98ea86bee9d970eb14d280167e81024f73b5d7d31de86a4f0f074682dd62a63a95c1e63ae8a8a8eb5deecde9880fa71603258f626773d18571210a3a80913a583f6f8ab5113112b543cd1028e8813da46c8960fd7af0c3825949391986fb36644f2194948365cb6f216b7251c67c1bb689d408aa40aff97e43f2d16bf1cb84950e1f01846841350d75088f49bd66ccacb273d0a7aa048e0760a0d2c5651de9d6abbde3a2fc24e36198835c4bef25a2997ecc6ee9793f293568b22cad49793a28f30fb4a6286c35883ec5439f95b825008dff3585715c92d28f9d718acc501dcb713544edac73d0accd527d72871cecc546be5a5210407fd39e0b37ab0c44885770ae270bffb1b0a2634ce9cff31963dd31be2348c5ecc931ab10dff404a94ad5229a6d1be8f13b0a28678736625aa18a26c2585bb8cf0888551dfc2f00a38d1a2ab568cdd3d41e7688051f454e5314974a2f8565fab86f2d71e1ef492f8283cc2f815f90a9e7110b46849dac00d61f1eee4ee93f9a37132112efba2efa0006999dadd2b518cecae265485127fdbd15e088a5e81320976a898e71323fe9297ab2d3d7997fa263808b93592ab500bc1ed833907e9e80627b391b576702b6ad37dfc6463a27cae8c36961fcadb7c60094c1e657a7058f4b731d77795b7a3bca82061335768f59130a1c262821ced97ff2845abc06dc4ca08958ff7f1b7fac50373fa100929a31d2986fda95f8726278ef9538b21d1fb6b2596703daf789eee472d1dff35ed3df9f7dac74107e9105ec8dd413ef313a0895e17751eb9f3de0f8c0ffa6612758adfc38e07911141b43fd825b24367d2036fbb6cfc55223ac544df13e473e2fd02f0a4a7f68244770a6c6acc09a17825460e1749675586ef3a6ffe60ef7f194c653b1a48716092b51771016616ef886ea0a51abe92f6626aa8de7a0c3dc8d6841a9e815b1b376e1388626fa63b85d1ec3c7e5b11c1a854e10d359197f016a8dd0a867282b133a5a58c17be72b159cf5be6c6eec689bf23b91e508861ca6e688597140cd680d8728269545e4b4f5a26a30f909b91c2bd12b4a43188b96bff657647b4d13c3ad05605e22fdf3b87ae8a006275159e103c249fdb7e7824fdbb22eea03e9a58ad8f63578858ad5c9e78f636ee4160008d1cc651c6bf1a824fb57aa155a165a547917e9d432ad7fa3db09f8f11dd80a1e20262abb0e4b50aeb2996d325ad418a8fc1095ac27a4b422c5df346218b22c2353b4583638b28544c2fe86b172c5172374b0fbf18009f3e78c536e3cea893f326ce7f8dd73010232d3180abee7648425d518fa9bff42f6f1064f9bc1141f529992cedd510d72e60ceacc2cdccc2ba2c9fe1fb2cabca6c3bb168c0a1526af7bc159249ff12e29d0c90acdfe91aa64f465a0447e8bc4e58ae9b8cbf6fdf7a809f72799acafef4c3bde554f6748ee643bc0589f658d63d53728dc73f78980ddfce18fcf92471dc63155566d5529a7d247a418124eea76a933118dcaa70af487a6a525ce8c86e92c4707aadbc9b1409146f24ed657e5a251f6451a5a411751b551f7b5c90ecd4bf01d1ed0c027f1c0a71db6edecdbf9dd1ccc8a5595301be2f56a21a094e81b1044252513da21679c3e3cdf1dbaaad45e5b32dd7ccee65e048b5d091d3f1bd9485c99a79f7bcb6b2c27060ed3778f7c8396470b58f7df3a5b908588e6d0c7591a7e7cc5dbb4e6196fe575fd3a7786abd958462e944c22d7b4c645657272416751ae4e0ce219b25ef7b855c464c7c473b5a7e3e4113a6b47575172cd7e42eb4ef4e0f159d9900e50cb48273867cb89024841837277cfd242bc1d14be7c696e808a22a091a66765a82cacd4b69302c704ddc0bf16521d37662f8bc3d7c8f15f17125f173973f5d4595617d7b8f8c3785e068a8b1479405d1d42f329091b2c456f2f5d3fc8bd9a7007d89a2d1d8f76515e40454b327a6dac0aa0bf65aaf08c197c49dcbe3ce53c6ae1fcad9bceb17545d5e26a86ae3c8cf2c6b99411acfc669e30cca20291e10f9f6fa0f70cfb3284e38cb9b16bdfc73c7b15992d0fe183db408605c10dc29e941a99a20026dba2ef722380b0b49611137e0f449422b825ab36d414f56549cece681b9cbe5602f5fe18d1f8995ea12acb2ebbcf1531abc08e6c32bc0e3c78855155c254cc6c55a821c7e9e289ec4692a72d32c6d34eefb4afd06823f82fbd10c2c94821241c490a4ad7d0740eab4592b2a730ffed7234e4dff6d4231810941dc8d00216eeaeed4ec8680056608fe5cd45bc3eafea0615eb590f65561d2c519efb8cf85f516832e4145c470e4cbfe5664d2196264e4364e7fd89b1d2d0b27f936c2a342a193d6b9e1092d05521344d425cb3d5c0b372deca96b33facb6013d06703b835a1a820555dcd284b4232374dc543c13c4ce5fc45aa9c413131e90d42718276916051206269cc3a2e5b6811e7124579522d13273b2981c8f3bca1412f3515ce78da0fe23c80eeb155f992a9e71913149f14cc9150b3fe0995febdbdf87539dd20080bba4905020055123962065934a1432bf4437ce4c1488d2292619371763f9f8419792b496ea78d5569bb6e2081bba7ab0c3fcffd0f06a08cd11e41457384b496c13ef39037e26fa5f15b1ff112427141e9a291ea0bf4f9ba4a2e79fd68950a5e580d109e9eb06abe02a84ddd2866e4de165ffaa820501af3b4ccfbc35484e7cc5403a4015eafd710b42305ac546572b61e30d11e8995896a289b3a15e3066acdc12e35742fe5f50038d051b9fe499968d27ddfbf2746fa176bc85447428ed3d0312709c0afb909a930deeb77177f4b7100fc4fe7f3f579a1168819095239a2a70a1654852e555d29b02288a7c20b4a2df8b0c6ec38d25863c61259098d7f2a6e4846002cd46b8ad9709efe430908611a6d3f74b9252147462106e1d98279fb374d4fcf55dacf3f91d372f5be8f223308b42632e78f205e04c3e29a106efeaf160d3ee77dd69740470071c5acc42e5c4d73d48df29d9230b79f0a3b88ffe2402f987380c0da43334e5faef0b220c244635385ea703c76b06b3805d4fbd1c93b5ce783a490e99eb55ac0c59f72ba9ae41e7790286dfd66460f6752567c902cda1a64222359cdb7c8810af212ab539763b188613922c1aef8e0c0241a87f69bf49dd9892dfefd5c07f92f982fcce111b4db59cd6482db65bc52e3ea683f56a4f6111f0ccc09e19da252aec5c03e1ce62d4861af8e93c2b71f02f135d08659992fd5988782e0e7031e9fdfa4e8d8680beebf7447e328ee9023679b04141d1e52868085f0fb0cf25fbd16cdc217ffa40fdd6a605777015e5acb63a9ec99b86e920a6c327f5abced52343c0de147d4e6bd672f6c7e153b3edd04b298366d5a4377fe97b5280e898987c28479cc826f6c4f3503bfe74cf05f237940c67b4f639d46225573cbd369db8d880e3437d4aafc3eeaa917596f237dce100ca62bcee0bb5a40bd4e2454870d73a01f12df003fb22704c8e46188bbc3baa3d7a3c00ea6ecb9bc98d5f10170eca720dd0dc819686348e0eef1f15cec5334860b7c206b1986cbf0c9d456ced945c1c6860ca26d5f9f1799bd39cc162f48c83dfe501bdeb6a66a85f175ad2ada8a8adf6460f6fae1543490796a9b3c35addd0eeca370608ee31608fb851c5edab2009f2720347fe338090335bccc2cdc7222404c77d1e61af4a70039d38c227fcac71fdaf111ba436080ca40d1cf4b3774f09552f1417c6da5b52c8fb0fbc5345cc3a222558e75b2df0dbc72ae9eb0b9d5c8d2b8cff50787423827df013f7047ce5a39bafb005acfa006325691bc872f850c405f37edd69d9e881215ab43ae544b1d27090dd73811e3467f1623837cb9f7832e666447c4ba4a2d29bf1c74593f644106768fbd76bcfe1e0c5e17009113f2512a888f99c90a16ba8bdba48324ca65c902ea58a3e5c5e8591fe3005216d0af35139c485f79621e303e2b41df9e4cc0fb16f7efbcd8af71df955014506969b801ed1de0c2e4855d396cfca46707099748e3c86d339a1cc453f78ee4acae72e04863bb67121c45270116a786b564a6b3576a16d31c43e12a917e6bafa77d10041b5253179184982845acca27592c4550b76d060a6ec18cd134a337d115a64eb546fef1895ef1143707612733d40fd23fcfcddd7313e55ffb9f1151dfc90386418f3650f3d8a5f9022ab5a7cb4894d337e6f8263a5b4b22c78e32960641e4b21368be6411699005e3d2a592447d53c21fab14ec39bea4642dbfeaa54e7a998062b502767eb093c0cc46eaa113331f7a394dc539a75e7af6c6a6c62c7fe4af825a7c8c951ac5ecd05401e973ba031bd054bf36c8b20f0ae106ae379e38c6e55fdbb0c583f8de1562dd3b7a054900b5dac1e53728140de5413e918b0e092e4840b047b1c090e2e663967e1f59e75c8ceecc61abd960b5b2a7358aac42306efae04fc43533721d8d80e0ee058f15aa09b6978e984391e16c636e6a1d0d264c12f9de40240ece2841e85042af4853741269a5f0cf20fc812022f24185e8876fd80ef8e08ce762b7250dca6769d28762d94014869187318133ce0346abb69495aae40c0adcbe8208947f9cfc9638b8e33d9ea8a83b3f70de217628912e4ff3f19651436503ef00068e94ade28f2b6e6c70835eee5c0c86ce7292ad879d492e96bc7db38ae861da045a5432488d1df989d8561c8f062e5f6b364815ad9001211880c93f84e9e5c7986867b43e72a101ed73842b977f638e516484f3824bc0915d3d9c7ed09cb31c604dc5bf46b6f607cf6afdf3844a91b4c2a255ba18df23a153c83966ee749436147373949b3c87867867adf5a62c0d841d2ff754db755ba667bd85ed800b8bc3157a4b280ddc72567af0402369fc803e216467a8dfc9ffa440693accc7acd470bf34ea04b04a0b5581909cc7bb644ecd6824c1e5f0df0c67f37f5643b5c8a06c6db5d614889f76d06e4f69287c1dedb8b9209009c38ecec36b4fadb8d818f1538b0e2ddb0b341086077785e34b99096df6a930f30d13c1bc4c7bdcef3a5470d7858f5e44e50d376953a118ab099aad55e872809cef318954ac6a832af55f3f0e91d01073ebb5f59e7938d5efd06aebd0f92755838ff3c028eb78648515b9dceb0abda702ca6e1b8296853da4347d4a395f33a8b8135621747a35c393dea928af6942d92468d7c34df49ddfbb33596387958007e7e3057c9359045ea0f8ccc881569c3ac61dbbf17377b066539e2c72b1ec6612b023a78923ac8a0fdd894efc60f9f665038389f538ad0f21cee2257f93e68995017ad4b91604ac8404dd025c04aa4025c9cb01cbac83060e4ad1852401b66c86be8ac53a75870080289ddc9fac93a40dbd9be360e4cc947ae671b1b5ab25c193113247cb3369cff67c3747480073a7fb9b4f6561e42d742317267c27f11207b1f8ee4dda604cd838ae2ac9efe0eb539c8c0af421f653a240a9451a3b1557ca387c42f33f3a356a6d790a511eec3a177e7973e093da9dacbaa941dbdb507797192068fe78fb960b4686cb9e520492855d0cf7f2b2310be6d38669d6f197dba273ed0d05061c015047b014757aa91e04068a236553f6e3eac8507e28dc7a1896ad8f5e3b3b11cc244e799d247496b2c80b9ba641917e3af3330e041c79df23cddc39903afaed77ff24f055dd28eed1e6ce1f45d342d60ec754bf07f569a75e059446b506088026ad775e69964693ba022929fe951abfc3fbc3520043023ae4c7a9e8371125f560bea601c1dd638c1a15a5362222d0bfd6929072ca23a445fae0ebc9a3367ee29a4f5846192d566d94aefd8638d4a19d4c11ee5054b4b411501cbc757e0577c6d059a5a466b7418b309865a091dd25243a54fcf79f07085fc354b81cebc5f359c5cc1cbce0272494ba6a4b76316a4aa23fb2b7af50fbf82898c00d70634cc64a5c632611bd44100040230351ab268109077366ccca7ab406bd296739ea9fd2d45f12b46d3a16e0dbb34bea2d389c8110de474abe775584d723add0919784d15d45fadefd5e9852f8b345bc7b73553e174d3c97c22ee771cbd2a604da4d393c3ef3dc21e946398847a4d8dcb6190519ab3c1b8fd53c3679211cb7f71a1990126105b95f1593bc99567c2ab2592ab32a2f107f4b62ee4c08c2dcad342db411c1fa95444e89a6ae474ab1461d11100c923461f7c0c5eb50864791a720ae8013a7213118269151bee9bdc12f004062e56cb5f7c430a6cffe730e148033fe46d0f8a49304029f9b8c408496cc42491a5634241e07f7da96186d155de3860f1309da5067344e6567ea8c900432f54523024846339dbb821611adf0189c6a69b712df0a4710d03cade6dd535101a5af98d347681e4a3089e1c62eb7228bcd816b3bf42e36a602464c624db42d4377ba942ed2af980a493e0b75ba2dbb41234b985fa664b4d1762c849519b3105c526fcc37888b670f4d07983e5e32f6ec5e5255cf292e49600c6f8821ab41ea2d3620f963311bfeb439a8f18abba5dc507f67d83cbdb5cd7caffd0f5f9ffd6da00e9afa6d2210ad4f3939cef2ecd862dd3cc45e44fe2f8f2666edd88f01b11ecdae826dd1ecb4d1d9592eabc29935acb93ffa5648c35c739bcc01939961fc657a8fc7f3b2eed0357c41b970f65d3dc43bb9a80ad2586a321ec1c19cd2ed05d4f8328f51dc483d90c396dd509c0eec657932b7cf2810e585977f0cd9fe94d2157f8dffe5fbea6394e08cd080bf4f943aa696a6462ab7aac7b5d8d1bf5ed2d51d1f97ad50593c94d0c0a92352960fb6829b4444b7de2705a5aa8a83a670829f3421138bffb110bb6e941e9a49288ed1449755805cffcbd523547ed0c7be3b49bbbc457e8cf927a96141fd9e6f9270025b3c3c482005163023b2bea99d6f6ed03e73be27f49741366c350da1c81b5a724f961bc5241016db6029549e9507d87de400677fa02fbe25fd7af68c21668a6c8e019e115735ae5c7daa3d958568eb358cc92124fbaf474a3693d532f104b82c4e273628ba28139c3e26bda6494cda8b038ab7abcb7a2fa5a612d948dd4f84c1fb516ce25c40cb8ee3601464b920ad4a4bd12232b5b45164e3ce0a1cb69685e921099cab98433b0527689be7ab12d035694cac079fe987ff60d50cbef8b6e96577a1643d829d98c60dcccab9729f77800a37982b9a64407bf1fc14f8c09d517d06f7fd9ba0ded9172923784c39540c7980b2012a08683b302c37d3ab2a9b9a084d2f77ef2a72b62184dad343cb0bf4bd749f24e9a45135c4650cdef11e4fcc582a63d519593e4fb24308441ff140dde5f2613ee12becb2c139bc1511fa167eff8aa24c6109f2a286dd74b7a4c7d4c11884976b9f2924fc2f9b2d3dd38cf89344ca677fd5a1ef36a39439780a2e8480c36b66459d84ff167c806744d477fdaa0048adeb45f53d39367846420c0adc705b57e9b605863bc872fe296b2693411a40dafcc7aa7ded3a1119b47f3ff15e3d2f093285ab7a5cde59c9be1f438634f752e3d93f30406aec7a39b14f623783913e1f7d12af2eba2994b5f4a8b7a3aea5876d159c74f58a8c3a5fd6b90872a42b5065e510bf26330dc8aa17816f829d1f3b3126332413d0f17a311f61216fe9336ba5db2448fe82e655592995b32e5629ae5b6b063e425d3fab5aada2c260c1b1dcec77849118ad7bf909af9d3cc49ee0982ea49dd964ec49aa616315a47711cf714ac8ab76feb82a288d5e057da8bf8250fc61629a2bb8510f236705766bc1a34310d90fac2d313fde380c1b434b02bbc058b9ed19b7440f7944fb564bfcd5d51840a91fc35f0b754e4b4a44d331a800b590840a177cc81c512dcf68432041ecd55d34f7f9f61fa3ba198cbda92843be4ab7c9d86ab27e99f00823a56ac5b2215a1dc0899a683f0a16d807dee1cf763db1ac0256a72760c22a3a0179f2f75fa04bcdcd449616e7a57cc0410bb55bad3868bd3483134ec0d2972ca1f7334d49e4cb24d922cdde71083a2b2d7d4231c7f0ea82695113d3a97c3b40db7f58d64173ee4641231e8868ee7cd16ea62750f96d31cbc15dcb045d25c7e5c0efa90f7f1de35c426ee54203ab20ab55da4c848a6cc89817ed24713f3ac2c96ff29cabcd2b12bcfd6f665309ea9c7a01f448e01b5a4ba38e60310aede846f5f960c8566c66564dad9457f513316a4ccc2e645961e2dd7563c4023b9b40507cffef07a7a3d2a0fddaedee19f43c81bee68b110ac5e763e316c50f74f9ca6a365c53f341db780c9573dbcd8503bb0e5d31b87c71bf89cb6f8a780ecaf9660a2b05e622c908ade9664fa9b4bba0a886b86a9c3d760515b0d607ca983af91eed8306b541659d259c92e57e6e3dd94308c7cca5166171e7eb171706c136f85a595f0aee25eec3ad07b7e012b52cc3b6e3c9ebd5e82896a29061945dfcc419577f9a28b127fe08110c4d2412de1f8f0c6591a912ab47181fc74a511bd030518c0e2394909f4dbc56733f9660393cf89b0c9ec1b511db925b0903c1fd99ca9ee8b87401f161e3327a4e8a9c7d1adf71904d89fafe38d3a68c7ee08336ecf3d85e81faf2da14b70b7250489540719c4a3348668d52ec837a21e78ad073cd4f6ccfbb0b961a721027634efa3d21d73247b78a448853166cb750f866651e2810c5d62799a8343a63b355805eaf7ed96ceffe80c2c87b7eeb84ecc29f3b705ce434166dd2538572349b57c28ac02e303ca92b8669bf27af55291421c99c430b0e4cb9792313136495eca8be2f940053c174afa540ebfbaf0d172a0d0d4f6352e62b10cf9bae3670244cf124735ac96bbbadcadae183a857ddbff6e964f9e85b91e5ac320c0b73fb10fc7413af317bd2725284944251a3ab66384fc121a45a2dc373d1b154edafc2408dce36712b8760cfb111d67a6115babf018f0c22a43cec118b4b6775d8632f998c10961b1ed795c41d3a2ce90800b14753b230b498064dcbeb377aefd1ed6a4ff338e96ade2d902c030653ea763eda056c495c664cdf5b0808b5844535330ca28d631554d0ce02d471ff580697d9ca30a1da8f9d0b48687b039b549260f0ecdd3831ea51930129e1fa0aae2afd9c5f98cfa28201ff698307cbd9c6fe49c6395ff0b7e772d87d3cbbdd8865788d5b9a8ad972b0ae34347a21e11a74376c8e47ce26f966f3f29f52bdb066a248e1e2f94a3c32cf31315397231e4241f917cab350e5195e691103aa9779722735673ec1b72748b1f67066e8b2172b46692f20832bb1240ad1004af2a449a0d91c76d4367454c5133f28b0604e267c6a92b9f6bb6b89a9d820b12853bc45ade969bfcb03ed81852b9c92955068a3c47f20bfc1fc8a7ea4b6c9efc6dd31321325ee16c0d1dfdee37990501f5d516d6e8298a62298e9dad2376c154aac3387816f7e4f70e2492294f81e1f93209d8dc83f581fc42ff0b6f10096eee31752763981cba63e68f9fb97e249032644bc648a864483f9762201ae94dcfb088515b1ce32578d2ea86a4e58516ced709ab36445902eee00b13a5afc4208a8fba89eb7d8cb3ef7424f05491f025e001d2af09efcff074589019b838aa9b57676d0a02107b1b0b6122b23a38197bf8fbd1b2aefdaba58f4778fdee6f02e9921966c66485cd502a833f8531fb3b32675160b6ae17426d33b8e1eacb8a4e711c7b5a4ba1b205825c207f1fafb8c764257a643a7e4c0ee998e469788df2e5b962b16b5130d945400337013f68ce5937e3ee4da1f7150c25df768c8515eff77bd4377b4d4f3bc3ea031cb1b281b56f9b7a000e58eee17d4d02d7e37690552f0710ff0a123e38715cf5667fc0d55a9c3f1a0df4ac9eb74d7496b29da358193bdb765958d1cb55f34bae77a45e8b553297e4272fdbb5612c7e602979346b6f46ba5ee94f18778e66c12a5453b2890cb64097e1bbbe0097d0c9534cc7c7817573c8c6a713d598e7d649ca51f8735792d465d61c4b7fb6ab3f6ba0ea7d198236dc610fe46e9ec22bc14db4bbf6b343ca20f3b4bec416b0f8784d883b3f0915c0d33e09fee5c4658572e2a1a7423359ef60ca05d072be5097ac81ddfa3e37b993c4c60dc9be11641b9cd3d5842e6f7c02de643a086b94ea7550c997261e65e9a0b63b2604a57a0cc1ddb698ca62eb5f0a2e2dc03ea31e93dd332960ea310ff4652b06301607b193b77f7f4f031420a26367693deabcf885327c8c821318142ce7bc5d0665240422644532414379fa2d6395c9ac1062630ac0476b578f09171e71b4aef026d020ef4b2e28081c3e1a3109d0c38b84cfe088e234364cd661359949b89449c6aa3d88abd1467659e6df835d11abd10175e6f98d8f0d50aa08a71c49c7f52338b5693bd26f432a917e63e9535b42e0f31234abe5764c6b8d12a517e17c04a6291ab23093300a5dbb053758cb029010923ad3b985d2df410242c9b4f93243918e0a31b597c2150941904816e795272d0e5204d934875e0c83f2f83d7fd484e77ea19343c0ee268c363e729e6dc304cc162bd2ac59756f93b71e1cfe8ce591d5bfbb183e6d46580f284c6b28b4341a15ca744132622be13ff3cdf37d327d497bd4cc7ec20b1f3347756fe2528aa8139fed13f2e013247c20cf038a272977d926f9440b0dfec6c5675f8d05e058173fd683f12952f8ffc0a80a3fdeff0c83093aaf578726d2d314d91b726d4205e91da844940f46eaeb799decda4472aba361ba8805ee618e0e3cf504380a33fbad84a542c663d9d27886ba1a185bc62059a969d20f6ca11a93a8ed503569159aea40636117c23c424b62276014177c17c147ebe41a58f036c85605d2b8c5d63eb7b9dba61e61fe82be1da549861afa20a0d135d981ce15a047ded4061acf731e8248fe65ab9464347434fe43b397b93cddcc24927389a1b732a6622f3fe6c97b44c05a117b035650fca96942ed06cdb4f0ab50ea62264a87a43283469a8a0151af1f741f14b492aaaf0e4891f866bda4439c6fae341b1b1117f37a7ddb84db3b53370a27b28c4d55df204a06303d99ec3bb01a955c8ae12f650e657f48d14bb92971a9ecb3e640264d1ac89188f39cb12ef27a7800c77a6bac9aa2d4e53dd57f6a5b23376f07e6198d560452633b18a4d1a8ea827844b2111ec9b4571834cb10c20cb30c25cc524e8cae09b783608c680d1546e287899e74c2f6dfc76c89855eba1a0b459b8fb4ff8b79ea22284e4ce332a1540ae986234007507ec2a64b72ec1e3ec84f4d0dca6eb01fe626cd54ddcd78fb28ab7d76a24d3e692436cdebb3e985c271cd1276bc418fca59865b3ea420eba52d7216430199faf8b21c91d9b494ee4fb2fc0d87fdecffef6e9b0dc75787fc79bf3883cc092e75f9207d25c92616778316e7599b6f4a6c8b6ff73cf4aa871d79db76a8cb7cf6c939bdbd6fc6bad2838eff3fd6c8d7bc5833737f1a422d319fdaedec90f1bd608c6f4ba38b52e01dd905c27929bdbe1b3f1212c76f3a204d074a0c76ee60023ef3cc491dd1ae8649e4750b46b29005fbd0fcea9b95ea9eb4c5ccf9fc91efb181c00c2b0c4f9fdc5d8742a6dda81ef06028db025b5d9fb58396d48b722b96636379f42f8627e709ef3703f719380dfeb2f6d8279b6f51502cabf4d4a18e3c18dbc7adc1974d4541c0752da075ad544e98a878ec3ca6cf5aefec6bcb54e6cc61180d13b32bf26a0fa44b8327dde637f0584bfef9789c1bbe356f6cb4c7fba88586024fdfba3400062e933c2c8f6ebc2e1c0b0eb642b82821e1d309607ef768c50aee18772a5a5151c552eb8dc8ae2355b22b3def2b4769884f6d5b5c385a6a4d42bd391cb5ba798b343afcc02c8a2a116a01bbf24ea94aef8c544e07e9014c67e804cc87a8df0630b200fbda97491802ad2137a4cac686e9371d43a17b20a3c916c008fc56ce554b0098453a2db3813f68f711d2b0ddd5de1a1e8e388d7b4209fc43fed3e985364077e0f81c4842e4a4190f4331c374b7aa5cfc96ae14a292958c34d3aa5d54da67e1abdef67c84c02e13fa0b17fdcc5e383cb4ee37ac9874608d870aa042b4d66252590f1aa4d3546237d365f57c0736a2edb215c0bcfbe4e8b66b9505a3c5bfb447fef4a679eef1c3f3038e7ef171515b7e98a83b10630adde3968cd209648f2cf939bc84d461ac512d52d18d28ee5b77957cf6c7f9673fdad6d79f3875cedcb2d5ed9a25756f88dbeab24e8b22fab35faebfe423e0b308dbc62883da7c86211441fdd150de49bd69ca3d4600ee04fbc2709eca058e27c64ac77e67195819e77498072270a121ff3f1e80f27194ac1d3f8314e50758938d751f8c77133c4ed67c8ceedda632458f503a39db0b0eea6e011f63705a97c492a8215aa170644d2ad09d6d28e67097aa9cd71d867b5876b4d9e356fa1e674a407c06f91649240d41ca6bae62c4b0020582213e7db6d4df799475695304949e3b2e464282d6ebe134932e754ce5fe3708c3a14818adcaaad0ead004ae3fea1124dc3fb374a922686f1ddf8d49e9b64a989f7c5788917cc5c61109c7facd03ee5f00f82f2e6bcfb4907ffd8c8b596e4a6a5cacc296b1c3c9feda878e49b48e6b8fe023e2bb3574ce8d041f7f4ea443a4c75799690e69e04418a117319c14c0d82240d3a1c7519a6396f8d38278dfc5e1c0d234b60880f4949aedaf2108b9cca76c94f5e338f57584e747a02f837beb5ea9653edd11b8effdbefe4be6978d314cd9da2ce13adad3f76a30c8b40133db86668771dee7535e705717948c4cbe8e44a39d9b599d54cf9189bf3cc6bb034526e14c53602aab704fa7a2b057a7bb13214fb3622110d55ea72327e364aa934bbb83d4d46bddc22e08862522519b0ac2a364c0e54f8721cf6507397d6b7cc11bdd65252271a6083beded6662a4c6d1d78a35c13ef89ca68516352fc54a3a9114b5bc8870c75d33ea00f1527526fc906e068697555d880222fb9b3208d29f4b1be48b25259e15a3a4f907b9e8b4f15e5ab0bad886956e986b335f1a50b03437ec99be4811f1095a7c1f1393a8e844934a8cc4725b390428dc3e759087210f8f9a0ddf22803ff3c49ed2c64ef3b84f22d127b0c04d2b34a340912a3a8549c18f16c7781941430e26072096d499a3ad130eababc2fbf665b24afe8c5e0bd6a76a34664cb78de4b0bc119e03a79101051f5a64f45dd66a3a08bba8793136519bb21c1b8e54d7282add756df8a496ed4466d956c1a8fadaca33ffe909636f8cc0492b26e36a61cb5026921f768bc2819313d9c89eab378c465f7a31cdad81ce25f6e215f037bd1c56a3a7e0d497aec52a0bbb70a5edca4097dd21eb8398bae8226493f6ffb0eed90978432f434494e406a9d43e6bf779496a249a7bb41d0332ed40905e6a1a9d317ef410f7cfe13f6508214724df625e9f9465ca2652ac38e0248ea59a142e1927b2a37f1f9f41c10d612312921a4f56a16fc7bcf23d42cae04578306beeb4600be74bb70480a5213066daa3b2932b2cd0541b907054324925aebf36a782efb152aab30a608abb8fb3bebef72cbd9133c337c467d96b0d5fdb8c5a22ec8656e86d95f5796163cf59e06fb5c6d12c5a6ae359632f77da829a6c17ae4abb8ce7b219e20dc4ec99d62d88cc74093c867dbc42bfff26ca024d69988911c7b34c46830c323be10ed4be29973fab92233f227b5dc9495fc3ed0d319b83db8946bea7b6275b4e951b945160d697e67f4ec5fec32a853f318e4a5652d0cb796352d3978c9e99f24e3ca8e5e78bd6bd9614471c36c5123258ed9a6a00057d4e3714c1b07266712e15e227a01c66469b67955caa21c9bcaddc7fa91704460b9a5d6353a60a56a70996538d9a30b4ba90098492055427976948fdc779919882c5166233a83dcca9acce5296427be3e6ddfd9aa549115077f9502a6aa41f8a090720b30eb8b74253b3d882abe9fc345fe2cf9f4aa61bdb5549f4b20ba14d1aef87e69a0b04a528a7e96fc0a71738e33fcc9bb5fee890a4e9a6fdc9fb2830e9f711fe38c9b28d7fbd274af66c967ebbea8c82c591fed595a523d77f9f8b4d746ce43fc78814471d8231512270f09285c690b5bb3bc0c4272a1f93bee17451545ce6bc33d1a8fe640be279070ab841105390ca93e884b07ce496448a548b0302a0355a033a9a82265faf71d546494f4d4719e0210bf29faa8ee7caaf56258587e5dc7262bceac74a95e0358948117b1c49c65e95c6833942a23632a77ad34b3933c47919fc9393199031f4b37b56f919f2087900546d40c3327e590c3e8c54ec226c17255b3e410771680fb6821bb5a2b507ab61fef72c92ac2053a680049137d412b8c46dc7d5fe5c861f537c56106ca87d40b61d2de3540874bfe1ec2f899767fbab084716b8048ecfeec2756186662cf35e0cd31e818ed3e4808dbd0d8ec670fcec45a898f23155b6193ad36e456c1a713d7958668d02d818864f64bead739c1289ff8baffa0b12611105eca2f4fc15667fe8a6b3421f860792e8580be9608937c2ef5a3bab19cf54578b4ff2011817f8650fd752228124517ecb01df7927777580cb4d0c116a97418559ffc55d6fb070ab0eb51c9dbf843ac656ee26f077b6ba441a4698179d1f92c923386bcf781cb5ae9203ba4a76dfa9983c935db2492d6be0106891d48c4b2d0d451abee42b034792b73ddc10cbe06a807fdf628ef38dc69438922b4ac0b0ead74f5e0a2b41ce049c35011d53f47e9d9b8f80bd8228c5b785b78608514d63717c2099a80aafc2a495a260827a09f0110df7650b0865a72a28c10711dee44da402948a0c0452081aa99f1c2973b999fae841528fd81d32fe7d90e7c84617696ac9d0607ad67cd5e7ea394c594969a9074fb3919c2324fe3c0c0b3befb6b398b4ba2fd6d3bd2d4a00d2ab4ed30b716b40808dc1c344da8979279ebd6ed11b5454ef88ec330147022ef074a7c04ccea2ea2121056df371b890be825f5bd11c478ed5091c548bc156886d3420058254f22f3e835c7ae119498a1f24891c684bdb7f647c70d318ab2c2c91c029c7d8392963e2f145a71f6c1f881f4fce9fff05232abc4a10c360a26f3259892d45715d6e4f2944ba338c8e1dbd14b24f616fcb88c46f93ffde05684e044b9209cf9f740dbbda7050709cbbd523c10665c9e40c5babfbea9754d41c5267709f61f47aa823447f3de4721aeea6fad3f513a2d487dfa48b8be119d23104de61b84ab8552e3841cb80aa14dcf6124771d23be8f3bbe71af389a70950fcf5c71d50ae8d7f1304b4add1ba8bc36f100335ee8f25895f1caab59bebcad1227ec7d318351708bfc17180c314b3f972fe1a93a89ed4ced0a484c6d5c1762717a716812484845630e612d060ac55af11b10880690c1ffd552adbda50c38de40fb878642ad3a5724a9dc8609658b9a580cb2dd4ebb685da3eae474df83af2ae01b7f440640f21698b14bc7343cb664f231fb2092ab1874db1278766edd6e0170fbe2bda165abe179995cc0e1a2bf692594511d06c7ccb88d6984e3c19a5e00e45d76708ad4f88e908e7e521d85a88e58555373bfe51b68b427960a44cab7209e2fc1fc36728fbdce89655e00bbb450ad06a93d3ca4f63dc5375e0db58b7ef477d052448e52915355b9d531c5db13488a003a7538ff945ebc67bf68334f96c2bf758ca1d1f7bef1855223be2449534cf772dca4cbce50926115975660476a3d3e44a76a1d7deabf943c1d006524238880c532cce5cccad3a2aa57c163656f3f6ba275252ab9452017870cf33bf33a63b952df0267783bf48b7364525110bf41b9319607c75e6e93781c5fa6839440210823574eaacfc36e12a58611ef95e734d13b3b8c3be66cfabec5722e7107e9b4917be6c700ffdb3b3cb8cb69cc660376f59c08f4dfcc2fde27033198ae370339a8a006c0af38d473406b9ffb34a8558a585303d68da1d5a0e783e3c640af0465e9814dff4b4a34646dbc50567dc9b0f6b6ab7f9e9f1c682e3fd047969a4a1c52282fc743440482c21b8fafe5fb8c286c6a6a1fb2356fc495bc021d63f6bf89dee02d25dd1d436c5da0985b102be3116f1f8dab472242fb09a3aca69f255dac4842532ef05da49e9e61ebc6641317ed54250e5cc1bcba5b49a30fa1a41ac43d825a1b0be0bcad12b0c5d1f684166c4954a4d288f99a3cbf585cda2dd42fd33030f331b0353f76a1862a4f10f1d40038d8d6d3951085e00aa2236ed96a5c092510c6c063251cc7d27ca19e0a922221fea6a62ab606ced31523ae511e12adab9d9890de268e17be80be3606c7cd2a512219f05511e336347422fe544b16a6cc6394da506c36c97317f68e4d0def22c2dc433262dccd83d7834630def0a67c82c89d3c13e99c21e48fd2d598f9a24c87b07b95d45b5157b85462c027bb0e4c757cea8ec4c36d457fd893f6559178bf07cd16f45c764408fb44582c525e8cc52fad6c8817e356442e8c16c1920bc82fba6f28860c2f98c7bb54416ee8c0b4a52539851386f28570ff741c728f0cae6a326a9fcfef97269933234bfb70071c08a719a33a30241c246509b0aff0e3582f726796523e8b2e003e1eb9f3fe67255fe49d95b46dba4b5dd373e26e7c8829dfe5806f66b0a8fcacd5ae797b27e4ad03762ee48b724a914739324a4ac1a72b9b285b4a245f8e7f4c23cf6e00340203eba382bfdddfb60042639efd84dc7e15e83f9e58d66e8b8f2c4a93fb1f59b46a684a8da058dbbfa67dd42b038a583e7f59204ad2da1c7233835edd0c90c951cf1b8f379e69fdbb893bb177daaf325371066f5175d3a175711afb0dd6ca6269958142f06a0ae85502002dbed3eb8353ac2fd1faf5e14947217a9b9cc1d41e345ecc76d776776f29934c01f507960718083aa9ab9bf25bd71c8773279c3f7db72cadefb1b074586dbeafb8be1f4ae1a90f87ab4eb8fa04a46bf5d6b3fb6116d6aab7add8156eb3d435205f7fd796ee7ff7bb5fc9424e1d2b7fae2839f55c952439bdba179e9cbaab4e4e9dccbda382956955f82b22a73567e1e4b4e2ae1039ad3730f78e8a55a655619b7b47a5ea7ef6f63dc17c494fddaa5bf6bd395e1d7712db646b6dad5e5de9aeda741d33466acc94adb70e9df053ccf603e95a0976663fccc25a5b5bb12bbcd4b51f7666df66b37dd76c3db31f92a2ce65766bca8ef192d0f9ac73f5aeecccbe6d3476c6ea9962ef2ad7bc8ecfecdfc9723dd9da246d9ff82d7785f25c3023525d6965615d2da295a813a9bed38c99316d74392b5265fb9f4855a7aa54c57996126cad6ef9cc7e2c56b7b62c560dc096abbaf5c3d67c8ccfecb7d1d2e51c96b7bb7299fd00640063d5dd55bd02cf245ebe1f5345abc2345c661f00e951b6ef61b9526abfd39be35db952efa884c9f6bd9d2b799b203454b0e4de4d89ca44b97753c2649a2d5baaee1b86890926257c66df2966fd96530f93eda7349f0a000edbef7ccd00e086c94af6696ec66b7537058b2c679dacfffd5bafc74ad8ab08fc99665bd2e1e675192cd7af0f7311c1046aa4bc9172737262e669cb4cd6956e8c14d4939315619cec8cd013b5e5848628595737dd182923acc04145714a614b4992ac2bdd9814a450b803958213942d265459573b28babe3efd4142f075597f504eab6bdc8a35e7db567bbdeffb3ef1895c50bceba26845f18aa2278a9f2882a2188aa2288ad565bd142efeae5181aeeb49747b61988c91a3f8fd4445325bead051ea004b1d61a9432c75b84a1de4885f30a21a624444b12f47d8181e6498ca7d6028ba46b2e4612a37c60737430c5052a1e81ac9f2059b014a0af7539da46ef5c93592e50b867d2a957ac3c0c5d975bf982b95e0b2912c6d4b374a0cb87541b4a52cab8ec8430c7471d8a510d97601445472ffd2063a6842ad0424b6009a05e24a3e546bd795650c23c11f16b6439004eb95cb742eab56323213912719c3305b9e5075f6cd24a46350be111c7cc36575a967d4da2836653093f6316e45e1972219124c209b512083f432838b0964330a8c8e902a70d14236a3c0e808a982a41641330a8c8e902a48a20591a509249e4d81d111520549b41932da11fe6ff1ed8da523a40a9268332c00afade57fa18224da0c0b2ea0810191d7887c565df7ab2e5798bdd8a5f5b7eb6ed68d1764a181e54a0bb97fac91cd0254cd96410d1b37340040bd36037205156c785672addfc2bddebde2d72d2fbc51ca5c67ec46a9c3e52e9775b9aecbe5b95c5fe901e85ad2b1c1918cccb0d7a8c1bd00b817c7bd4bf7e67bd17b0370ef06f7ba7054ef02a0d48183ac2e77b9accb755d2ecfe5fa4a0f40d713b9d288e3dea57bf3bde8bd01b877837b99eecd716f1394491d37205dc6c454b35e666986669d934324adbd2e7bfb4a3c3f8f4c3938d0b143003c3a08c18f03b24d257370a083f4d2831da42d3d1000794b0f78905ee94107e4577a3000122c3dd0816407d95eab35031a74b9049c30f6080b3dcff33cef2f0c770ddc48b6d4513dd23dcffb4a0f5c24587a701dd6ee31192bae4b98b8cf961ded2839c28de7791fa8248c122a2fa745b209d972a94ebcb045ccedb20be03437a727a8255d9bbe6ae3395d9b2bda122fa3d97ea8383763bb92d7bc0f48cf7ad6d6dddaef6a5f3ce0dd6b9bd17f1c9168b275c7381abdc10d341abdc91218198163d7e604fbadd585a260b73157f2f7f3dbdeeb55281a63627b70bbc61e61b497c59a564b0f422f6ca424c69d0a58b97756ac9272ef5498ca345cc91fcb883c5a3b284e59967bf7e4e64732cd09a7e40d9795396894f5ac6dc129aeb75cf3e8723440e789100219cc1faeb29e1934c129915beb8320985d66ccb4490898cdd448f6d2a6ec819ecb2911fbe238daff6bfa989a54bf4e896f3ff01c6a527df1c512c42a04cca258c392098883ce55961dfff0f75b36026acc77a39a3992e05b32d5b2e0d8d1dfb861ab47b23d63375ce97e330c31e74eb67d812293531ad9ede7b5eff7b2dda8379a152e41b882cbdc3b155ec8770d26abb2d37654a8723d924b10aee031f74e05a87c7f14abd8f6657e11510edbbf58ae217255e6e47afba11daef2034cc2cdf7ec6ea49ef166ac6f4200cbfadf7a46647f20af399a841254d9898c46797ab7244c4e63b97d72ef9650855a58a872c50b45a4564e63447bb0b2cd13d60ff880d949f1e2eef6eea4bcd052a0a448c940d5dc49716a9b65b46f831aa92b9055ae5d62415da36667626dad95c50fce768ba051aa858b162ebe2aca2b2e622e621e9e179498504ce8d3ba17c3603008609021d18de023f852cc1512128a513434345424e3878a70269b7d776e8c1831283092214386d1511826612926b644122d89862d90ba165c60c105175f40e3021a372929890606689ca46cdcb07103df7b63d8860d1b00c0a181061ae058c28143c47197f2f981962af6da1b556badd77b91db883d4dacb5ded7e28ee7791f6885951156ec3290cbd20b56198df4e0fa4dca1973ab6eaff781a1e81ac9f20523b10f0b1f1638589b92c54f1a235c2873ef050a7a0a6a11d402cac99151aa858b162ebe2aca2b2e622e621e9e179498504ce8d3720189d00ba1174db23c392f865e0c59ad244b866862d56417e2ea9024490e1135c1c5c1f90083c16010c010b36b32c3ae092efb93465ca1c4bbc5703244f011fcaec9931157309101b9ece7e7e7e74d930c0a0a0a324fdced245db870e1e28c4125242414a3a8892272686868a848868855b70021c104124cc0848a7272441105441529a2a66c99d98a9283a78b135541b84067871d2a2b24ae50d99a52264bcc14b727e0cc89624f13922b5c551aab1ec2d8c901069607c0bc81a28a20a0507f9a8e8e6c2a032d7cc087234e384346032872429cc1b3440c0b1a609afbcbc8b408a3260b0d4020a183664c0bc166ca1398a7322fe4e91d972a4bbe64d9001e0fa02e1c7263dde1d2c3151540bc81027589c932c4d400c50f37c871a186b38b54982759764850703ab99088ab23be39241a17198638a8d6909121032fb4e002064a7c4123449d343a58616140b2e74bf2f91924538c3a245664487ba25858d4c1928e7b26fb9a5d949aa1dcbb2818f2977b1785138518691dc0fd0d8a2ef14133c9121b2abe5388ba5c13b01784dff61e117e57a710ed12b6cbc0b4847c1f40c4f3fdc94af75a076dd8213557229ebb8050b0773d734848cd619a179ea0d076c38493163a5634478ac8d51ace347143fbceb2b07fad820a3157b54d0b64b23ed233fb8c1a15a4d06b9e1a407d8a53931b7ac730ac5bf260b541afe96bcca07bc66ea5fbb65d6695eeb59e6df87b0fa9441c47f62540d02c68ff3f1c02fee3dca8f8e187209e21b4bd5e12b0edecfb9ee19f5efbe3e75990fceffffdbabb575af03f052f9ecbf3cc51ccdf671f7ccf1ce261c0bba4670e717dcfbe6f341b1d0281fcf143183f8406a1052ca4b7c4efacdc8436a1fea1cb4ce27a6c67e37b26085cb090deca44d0ee19e09f354753f67ec95a5bf2b8a06b777bf9124f12bcf0bb5ef844c28cbac2f00bddab4232b6ad79b9dfb70cc1867fc11752af08fdaf99a329df5fb2dee83553233f19bce1597b265a40fcfe9a4396fcabeededecb9e247806c30bfa1d027af1fea2307691176bbdd4b7e690b73f863e2afa9de10f272f426cf901446cbe2fcb4de8f77687f742ea1549be5fe245882d13b133fc6dfed2cbe3e7da1dee8561586db475f7ebbdee498267eb8504cf366ca430ec1a9d874822895bf6deba87e70745dacbd643b03ba9fa079a704b1e7705dc4920a1952d074df97ef8fd1782f703efed0fc03b9bc06a918019db95ae57eb5f9304f73ccffd7b24cff3af9fadd61d8770c7ade7b5f7da01784daa9efdab778d6aa3b37786c1602c8c5d94e2f123c1bd2290983b48efcb1df77c80f7375bfb64bb770eedb8d9fead453ef86e3dfbdb714f0ad8fcbdf54a1e5fc903fcef041f3cb367c20e9b6f7d3ba4823cee47826721558fe7d5fbde33bfcf92c73dc9fbc3571bf72cd255442943063532f680868e81bf778b0ccd41ef37a1370a8cedcc0baee775998ffbde7bf72c52a7f298c9428d8c32a0179f45205883def33a06f59bd0de52e2cb153adadeaa9ac209b5e6d01cf43676ffed2e6bad1f20a1adc1a957c9f5695537f4a7f9e047b23fcd879f5c9164c7d51a723957b2b41ce6f1fe84b9e6f095abbde59a1d77adbea77c3fafe27c76bfdfa3a85c76732ebbd6cc18c665d74ee16e57a79360072c4215299f75be37092f5b6212378bde77ac2aa82ecc93fbb78ad7ec1316affd8df2dadfbf342841efb72b8950658a4a9ccaf7ed96adf59cdbed7643210bbd7f6ff6c9d6dae9843a8e2477bbe34aaebfdd8ee46e3734bcdd6eb7266d76e87d7b656b7ebb9df07443ef5b2c5b7b6bf31857b252b86ca1a8d0f600149aca70b5e165fb405f6db8926cbfc8953a77cbf663b4efcb374dcb3adbaa4eeaece22b4b2b6374e859e7162596dfdc2997c3f92d4702cef6c91f6b407f7f244df181cc9fb72609a1b728737c5948bde2472787e4d15cf2a8bf710cec8fe9563ebb3fbe20694ef80515495532893f249e2e9402f65c0daba95c2651830af7ce0a2ee75c49a9738f63be4f3deb158046a5ce5de7d4ac9f8bc3dd355d0349beffa6aa6dd45b5f9d28923f92a23d3d002ae05477ab499dd39a53cf9df15c55beee265f22f27d6bb30856a074526711ac4469a4cea9d9d9c7deaf0a2974a6c8f6f1c54a71c64970d0dcd014e8e7870a2b48422b4c60d93eec07c7824619dcbb2a7972eab91009325268e0c095aa239640ed97e1ebf54368ad288a624ac4cbe4876fcd34881fc9e4972379a6379361922cdeae6c51d17292f59d808524d74437a5cd6d211f792632295964218b56b4255924bf5e426c7e3d59328544bcfc7a33346b59d689228bd68ae283a1283ef9d6da71b4761c4523797c6ba635ccf84b2e8e0f9a2e45ae0149f11b02285caae06e68da399bdb163628368e67f76c1c5f6f4df045b3fcd15532816790c6caaf7f814a648158ad077b79bdf2fd6b75dbb8d20b4e9c8fc9e6abbb3acfe174f9eabc76ad7c96eb1a9eef3359812b9a5e5d50b641f9a2e959fbd0b3ce225461d3b3ce6999ad9351ee9d955dbe3a5772aaa05c732d83caec10e67436362fd8ebef68a67e248f47c6879dc13f7fcfee997d32882463990c0a43a0d3de7e2ba685c52bb00d58ed4b653b7575172af6845d5b315dd8b5331dbffc34c6c27cbd8f99beeba657576fb84c9ae9639869f7dcaeb066103f925f352cef15257c7022dbbf170cd3b25612a10a0e2deb6c415cd7f0f2c5ca7a93efbd4e38f55c8e2f5685b1aeced63ce795393e1b10d8a3fe4c8978f64c83d0f2f8e1f778922f8a6f6deb3a676bf129addbb43045d9cfcfa738e83bfd2013c8ec9efd98f67b6b863f9a9d49213583e28f62682de862105a06c3ec59610ef39d02cc959d259c68004d12a8fd3a7ee67599b564f65cd73cd4ddf566d62715ca65f63fb346c9ec09f47383de83ce224650207382258680427fccc63e7eddb49792f7dadbdf48debdf75edbd5b6f7367be7f53cefefbdd7dadab9fb73621cdbdf92d66d4d3dfbe8e45baf96c9f70571ef7dfa82b8f77adff7e4dd5a6558bc3b051482b78bf8a10814a6e1bdf7bbf6a3bc67de0ecd2ee2836699c399ea8ff7deafd57bf12cfa28ffdd26b002a8f436704170bc33aae034c6843def2c6a242fb2d78eb9b4a62b836697f03fd32b87e4f0ec9d43d69e45b59e373c653e2bf2dade7d15ddaf0449595191ac48abe876d9774f0838d0ef53628cc5fe23f02a86d56acfc210b4d63fefb3d79e716adfd3c11a3c31f442118e18820d8381e08980116cca22df0864fbd9cfef17ca1ecedfab4f0b112334ec9e6918e27a7eaeb7de8bc3f0dfbbde059dc85c499c51c50bd0438956dbe0cb27ee124aa067fe81115ca6f4801e7fd85a5da1eb1618ccbed78bbd101dc195eaedbb55025dfbdefb03323bfb2b1c7e2f7bda5bbd6dd0c1ad56dc77444bce162e425ad0c8316f3540c1810a22e42c913af244cb540c6a94c053bf561bc7cbd617273b3b28ac1d0d4fae1fa6b0230a8509b3841248bac0c11da1baa10a2b4ea63840278e163571b4980113474b0c71b43c89a3058b561c2db7ab3859b2e264e9214e963271b2c810274b953859a2e2646112078b153b269ee260d9aad5c6eb968772d85cffa891ec7dbfd59dea0a3920f61920c32edb1fc16b47a8fd09c46095ed13c183ee644093ed8b6c773198c9f6eb930f57b2d65a650b648409583294758dcefd19b4cc7e7b8f8b9cffb7d6b308d0129c926975aa5a2ec3433e8a34c00616ac96b081052b2550ef1ceae17d135a73f68178e6ed4e7ecdb0823d848b7a67112368e3401e469b3b25f2d9a56c9bcc645b851849fb4e06ef054d1f15cbceea8be7929db9ed8ad6c6ceea770e0d81408e4ac873acafc475fe59737676cd1f2eeb9107c80813e81a0b3b4e30f1214b12281dea5f42d76e4e0a6a07395bf2d4e0b9af77256c4201cf9eac2b9cc8a920c50f78b438e5d044983b4584b9b5b460195514d164853364a4a0d2414cb9020a4f55541631e850151c78b6bfe3666bc49e4339be6cdf9eb146f2f7bce4563866812ad480c93591628788540816aee450e6091d0a682e8871ac25d3f734e4a468b0e77d5957eb5eb0e6e46b43f28d0e1a210577f6f020678a95374e1c00270a2498e8729b810e7adf872b0d615c99bef74c1f2ebb8fc5658e7fd1fbb0efde1357f25aad01773f88d75ee87d22aed43b2e77f2fd121c0bbd3b18dee4fb35892be17c7bd7252a5ff4fe0f571a8a11d9aef275adc9f75f5a4460401022771c8164fb15842be03b11afe4e1af0304476d302c2274ad890907941ca19543949e0ea0f719d03501e0a922cb9919ee342106bd1fa46bbd268620763d747143850ebd4fa46b4d28147166ce1a2d5f908001bd67046c1ee2e1bd7def1cf27ee946fe4c1bec849d50164e7b97fd7125d6d8b73867a68ac27e70847d971fc2eb4bd89326e0d384d7eb5d6f023954bffc267434872aec7dbc1ef6f561b027cfa15aa4fcd7398eae278b903f063552f84beec5874fdae5f521d4276ef0e1869a60e4f6afd388094b16bfcf49b3b0f2f53e61ac7c02340a7b9fb34891c6af26f443d8d916e3133b06e1bf1ef63adbce60670f3b0341852694349bd0cac3e6fa2369d61bf9e559a4089021046874043bb32f84008dbe9e008d96f546b656da15579f705038bbc373fd12f6e378cd7a9220c4f37d9897437cc0fe751629f2fad75961a7ad6360b06ff465fdbb364ad613a891c2330d12bb5fbfbd73e89e3c6ebe7f4f202eab366c023d8ca17b760550ee10041b0c43acac1e1e9edfd9fd9fd74761bda1178220087edefd96187949b1b27a78fb95918b4e3f8fcc9ca6387bf7bbdb16acebba6c96effb3e0bbef5c2300c3ffbf503c12bdeef3b8788df177e6fc1fbd6bb5ff8bd05ef5b4f14cf6fa4ef41effb805ca96e6f4dfc8e65f5e8da929d79acbf8168ddb5b6a239428d3138974b97f277bdef47eb7df5ce21e123d59004f7cc4ef262e42211aed932ef651c20dbaf1f5cdbf5da6f24efcd0464cf03624f2d156657e0eff3d01b4d7c2f56560fbfa7e3d0fbd1f33c9bad0d9eb4f7db696c7cefc7d104f2db0d148ab6fe51aed6ff3b9b72e7a39ca6bb9df4e3e6a149b7937084590f2cafcbc5ef35a51ff7c7c829dd4dc62e9a63c3cdc90c1033dc8044160f516be07cc1410e14970f4f3edb25cf96255160e821cded4a550e5d62b4a8a1b3841423e8588152e6c813a3e7ae8032785ac8b325892aa726282c512ce4908382448d4b87e40999c73303148658afef0aec0bc3357b5e4764f896626d306875648acc625d6a742ce8b95648a048186c60e2063b555550b4103a22b0a0d8e1083c34c43e26ca68605766491673efca48bda63ac052654a0830486c71e9e147083242d801828523f434510015a0780aa2ce9e27d4a41180d6122870a833c40c1b686209284ad97a2dc53c18ae7c5684624be00944d82ae006a63c118f5c8939a7d97660aa72b1978191c28a255451bc54bdb0050a9a3e554e65fe61176f4d951d0d0c6165852b642a30c495dd9c2e77a610c3830851ee68a93283c31129aaaaac60aba66c85e019c4d6c392d3ac180f6c8ad293e4082d43b071b306753171a4aee432f044cece86db2bf70e863979ccbdb3618b098d4a992719406243124ad0e4bab84983470a27724d38e471b27a5a23476beacc053b9c9084ca4a9b2e68860013a5430e3c5061c344ce888717a888ca81853c70f6348103126c64b84188291b6822230407a020f3f4013238386181105874a03cd9f202d60e4d5041d89993a408372bc44047c91040c4c1b9b9d2a2c328c60cd61736604e083ed6ab8fcfeb058361162c58b060e1c3e2e7270e1a2820a0a0a0162d5cb88809bd78313464a3416302820002182108e3830103860703460b17b1eb82f4298518f1bc9105698113b62716ea2ad4777cff297300914225079e81701e5fd4172f3ac80bc22dca1c2ec826227222a24a140b4758ff8b92c906018ca121222208208001238208fe63c42082f12f862220892020dfb45e4d18af844204ff6f92117c996334c91825079eb149e6b18bbca8167933c0603f6754f118318a6a51db578c92898c515432d52f2a738c30192593bf8c25092698f1808dbc6b648d8c8cdcc8a81ab5d02bbd401ef211013a3e0c0924984046ce66145060640484c923a4500272820948d9accedabe5223f93612292b9970cc654d64021950613f65650e9b43725632852405255368646454efd15105d62ba815f4d748fd464748eef6babbbbbb69dddd2b2899c80c7ac0299993683360d8829289ec0b2eb8a0ba9450702026a49203cf6423bd120a38256fd848fd314e13e923800101121211d2101212d20b2124a418928b164148d77aade035b42329fb87d9eb14638fb0186eef10c7906a75ebedb5f42004bdef929f07ded08a9ed710fc3ed0bbd64df72761b56bf403de03638fb0ce6da0a3831eb55b679cc1f5a4716bae1bd6c68d9a048220188a0f8ae18f2eb34ed120e5322e5d1ac9ab6ecb65771ac9ff46b551eb8dec1f388389b8cccdd62dd96bafb5d6a33e80539bf5698daad5ad2d3b6dc37b7f9bd5356e5e73279f7967f5402735d14a358a96f983362bfb99d3aa55cfaa85067f271197f9cfc84d60cc19c46525d85a1862bc25630c36e34a506188716c460efb2f85b1fba9ccc3330d43f0fcced34f1a9443dd27d8134bb61b3a7a28666b423df397b9ed3e49b7b50472828f6c369bcd66b3d9be3858dceff5b03d480db63274c8f6ffffff5b0a0b632b6cd5e6cdd52e8681de7c616cbba075290a1c66f76a7aae18638c3186fd00041423faa225db0d1d40b000b1b5f6de833b07f5cc1f82500646c26a201b90cd66b3d96cb61ed0b41001080346009dc0272054ad96aada9b7f912dba017f9ee791455de3053a814eae1423fb834fa094ae11069c52c316c00c54508635f8f65596f6aef17dec06ec854bf61f1d0b0bab7e7d1f22d7378d94bd7c51073705191ce2817a5c063a1d019f3492ff77824e4060300978039db23f0e36f89e9f9e6c806ea2a3f8013a3552834e6972c5c0c9c90974029d5ae446316970fa5653d86e2c6d00e487082360b1f6c31afe7d61db712877996374ffaef1e2404b14aedf0f36188887430cbe7df5636b84ed7658736059b03ab22fa28d585cd69ffd6d0de8f7a1175a6b6940a48b383df3872901db99f67c37f8ba2cfc14b6fb1eb68361396cce67764dfa603b09ea60d04e4e7f97ddb4d12081886cddafd5044ed58c2ae81b9d8e0e7af8f821fb22da0c1b306d0618dca7cc65610fe57865b291fc28097e1a2eabd686b6eaa0878f1f22c8be8886a58346f2ffb6ea20280b4e5fe6b2fff796b04ff596c1274e357e429dae565537d92b11d975b58d958735643dab675ac9cf9c69e7c878676ad340d362683dad1b62bd8d5bc9f2ac6bae93758daa93e96462d75c2be613665d637907c6274e55d748b50a0b05226e6e6a9596ced6aa0f3df377e10263ad46c24511ba20745dc21f6d95c19e30ed280ac6b803577a1551d3e01d8d4396c3330c756037927d6ac2ed17c98e68b8288bc3621de75e97b6e08ab335b2565b23cfd175ff338978d9bed7fd59dbf7b6b53420d2833889ab958d4d875367739f06fb6cba460771a5faf5ea0a0b2b2b4b4b0b97fe9a3ca4661024bb8673f0b2418af2f7f73b92d9ef7eb52012fc7d4ad6a9b81a70eab81a2e74cdec4f1d977d72fa2f840392221a7384c3f9a8f1d9c2c99051b79c1a4eadb5bbbbdbabc41056b75ce973cdf5479df963a5750b4bf6ea51d9ffd6b3ea1ac95fb90218705ab7dc6f5eb3d9da6b366b760dd3352217ba569dac88eb1a356a4ce5d233ff8ab3d5f11dcaf1caf6abced648afeaa21ae9ac5cda3b5358e825fbdbd373bdd9ef59b76aade332af77703c816b9dec7f804e402fa06b313bab3668d4247f195a346af58f212493fd2bae91b4e0b46ed5adbab555b77a74e0b2a398add1701ad5c6ac93eac78cea56ddf299826d800b76a7618bc229cbc8aeb595fd81a081424fdee1af0afa84589a8e8e2aff2b571085edffb5b6a80a4ec35cab48430b4e9bc6d10f5bbbf22bd027d5ed5cd6b9afd040e124ff70a59447dd93ede93be025ff948cdde28c8e1ef7d65ac3faf71cb2fe7201bf8e1e3f809cc1697daaef7d08f7fb34a1ffbed77f4db85fcf217bc61aad4f4aa2304146cd94ee0734a87f85ea5ad2171abef410440d4340a1de3a9c1579f6bc00e7090eea5fa5bad67483814b1360c2e890660e9ae49e6d67a7ad074d6b47cffc89b04c3a64d8c15317ca8b2c4778b2bca84f362145111eae062d465fbe68495104aef246062090d0e202559736725ec0c2811c6cb023860e6ed281ce154fbe50b1a2020a687d57d75c5a4f6ca8a0228a28b0d4ec6e85f5a20e5cc97db4b8dcd0420c5ea87a47832e5b213a600e2e0b9d23480011850353d4b0a14a614b94551606fa0132ab9b3c5652e88f0994071ded8f59844402fd7920b308519227aaa4d0a0224b3cf4e78ddc1850a00f328b18f13a479c40bd58cbc2e79b32fea60cfba6fcfaa65c7e5326bf298fdf945ddff44d19fca6fc7d53f6be29df6fca46b0137650a0f7ae60fbe90d7dcc87992f73831e2e93d91fcd118898019ceba8d4ecd86435ca10b2110000001000d315000020100c87832291401486a1aee80e14800c6b8848645632198983410ea3208a82189241ca18400800c618a20c4dcd9c2000f536c9cf2d774b66fb4d191f14dafe01ab66528ecb65f6869572de644932de3157b04cd6554848cf281c84364674b2ccf3dde97e89656d8688b88d6fc6d176fa0b71b0c68265d2bd2a4cb763022a702d9374ed9b009283f6faedb2e593c6e05dc0f18498b1972613c2319d7437bc079fa1b5e86e69ebf43280958fcf9bace96408fafd37dd975ab70c944a77f4f97b5ea938627084e167ca94e2809e896d813547e26d93d2fc0c8c6ee265fdbfa74bf2f8e8d302883ffa866cc7af784d009f4863d3c6482348a57a69fcf1b78d28f1bb1d552b48b5b985118c1c9799824ab04ccb14a4ad1ca7f783abe91a962c1c67a17d4039909551b2e946ac599cc584a4da44494afbcbec37f55f0fc0105a8a9961636e46848578c8a817f59c4992aa6b454de3863f7393ead6faa753989669dac6cd7761f42fa94f0cf90845ec00e7301c3d56caa75a3c0aab41145dbb326e9a8e44ac363e363fd40192bed04b60b370be930d054149e8500466a808e61f03a05dcc516f0c0b618a190325913fe0bccf7ff773387228f6452f72d0d410793331130cb7e0d65e7990042ae638c9f74cc5385c568a8890e4d77708a3d071d3078a13666c9f7bb096d97757fd680bb9ceaaa96e3bf8063f69d39b833dfba344fa4b3076bb14e264576953d14d92964cd1dab76cedeb434b1eb525d5c851ea5dc8652fae5ba018736180c29a32dc7a1d0ca384868165db7ad9b26635db4558302d0adddce703cc071522625bfb0b5eeb0afdbcc7ca8cd26187157a47a5bd3907df0efa6fbddd0af4ceaa353e4fb9e2117a89b558f0dc7d4c83d03d3d4ae188309dddf696186195ca41e2d32788a49a716c54f5c0033ddb106e14239cc62d0ea5c096feeb1e702d6f28a003bbf0b8876a176af0b305e8d28406ee16433186d9d38692c4488ddcf3e28a495e349fb4d47004d0a5c5266007151b145e1f7c4d9b6b3d102130fd2c26df82b1cc24dcca4cac0f59a4bbadc535bfc6a9453ca171b1a28dfcf36a152d0c9f25fd2131d3754c14c9d2786aa6be6b4084d055c5dbfdc55b8bbca3095b5451c79865ade109513c3767f00d4fbdd0f9ddae3942b86ca23a268247c2526abb9aeb083aa2390299c47d59e3969dbabb5e622839f605c2b28ace864dac690b09800109fdf730ad8c4cc050e793e4a9127b85fe95bc32a5aaa002aef6c7399d020a829ce7ad9918f003ca4922a3510910da383ce67487818e85f6145e13f1715aeb052248260c8e995602c8e0d285f0dc979c4ad423b40e2a1936f8f66802fea4dcb02319df2e54c3b3ea62b84703f06dd7e2dbc25dae40fac0dd2cd27d3f9575acee990f78f1715540ee82fb8995805b966bedbdd1e4b3b077e0f2cf699335b0b2a591f7d38bb02a9f142201cb8e584740b39f5f3056c4962f459330dd88fa0969fbe603f872d3937bf74082420340037a905fb0673a6c923a41a43948a8e5813d2bead9cc213cd34f7c865383bbed3658924d1579d041038c4370ad6e0d90c0a6ff0a7bec875db574fc9d22a6ec4837cd2e4736fb661ca0a9c4ce6d1644a312cc0ac01238854c727189be6cb7c44f32f0e02086ed7b8db7c50eab4b23fd3821cf42058e16876e2755428af354170ae13dcc19de795232bee2abf2c95fc657bcf1bcc079276431b6b3bc44576efefb39e9e3c1be495517e08c4218a8c80c38504450e4a89589618fe3113bcd927eeac2c44bf52bbe37e110514ba8fe625e98266d649e6dc76dc8c71311623d4cdab2a166d616c7db448bee554ca091fda683834e54c06d8413098f2e2aa1614fd110fe36aa3d67247f938dcad4c3d033bc5190db5ae566f3dc20fba872e70ddc4437f70bbbc4ec39feafb6aa491e165596caa0fd6b08d6a254ce97976f9786a8e21ae620605e3c8efe3965150cc99c929832080d160bcfc1294e98d494ae318b6d2683430ac7714d4bce73e45cce4ff84aa337f8be1ba63462614621ebd8bc275a1fe93faae9500d12c9673ef9dafc18db8d4817ffe3a9918ecc1800c168c5704ea7f9ba1926c873ca2147b913182f8d6849ab36de80855e45b39463e65ca965c35aeb5612e6e2756625caee0c5aad3b13af703044ab46af0acc30f0900787a800fc240ed7c700ea165d903836b0ee93f170d2cc6cf1f796934ca5131d38319fb48891ba90cb56275aa41239ea2c41ad3c320cdc6f98d6fa927c0bce1a47b6515747fe18a8f01bbb714ca43a29779e14b5c4448467ccb423483c4e1805fdeed95ef0b661bb42de6437407cef81019863f00e5d04b8e899b3eaaeff13d842023c883311e4e9aae96eacc69ecf9c54c5983e09c6ec026e5ea3a6e12fe0ae06acd904b65c71d997c525b32fae2e22f26d55b9a4761f82ab9731172f6532a39a96a51127da3e960b158449c75edb2a73a55fa92ee01a782df6b40685c830084aa93c36a969f6345f0a721a0911946ede6c8b85ae6f6e62105cc98a9ef89a9f3390f064a2a99d6fd7fa843b816ac8a547385cb6bd675604433ca52f02bb4ba61535cfb675756cc45910bde4cc75a19778d2cfe85c6f457089bfa44bd38a899c87a10972a65cb75f6df4ffaf94abba6e3242cd3999222df0fab66a4ff774c70d73ade82d7db0bd9faa1ee5569f73c3b023c517b35145cd7f03588788f389ebc95e5f0d9c035a89b4a92fad4d7e0f0599a15c9155939f5e84a7db1036ac5a8b45ce48045a53e151270e335f7a4ee500855ff6efe7ac6a61930e8dc6f9cc300ffee588d55f58e9bb0002d7a300aed0d951d24323d4fd4b95ba269a095f0758ceb4212331a523beedc7487ffa6f8b988964b88229291f54af651c44cb1dc434be38e26cf9e1bd69a562f6e14f2e83809b7cd8d1cf20d06c6f5c5ae70ae529abe0e5f9d60bc4f4dec4e43db55fb875e71274ac1e2661b4b2f0a8999af9abc0eabdcc7ef9537c164a9cc5661253fe0296a66d98e4d494d9ba17173437ed5f2f9ca6bc2c95b6685c74c1467208cc03737b85b871a2ab2599922e195cc24733744118a4bcc55d81697bbf66d07e807806e54221b44206e460d3912ef0aa7a0bb8071c8c7c5cf35db2c9f3af4da87c98bd78f0c74b61560735972846f87a75faef4cd06430e50fb831c21a88f4abd05fb924004ff12bf7ae1d58a0b072a88b38bd55af66fa9763a205a69c3cfbe904fb00192d8ebb6b5abdd01f60ae16fe31265d0963783b4f079017e3a7341f5445c2803c812a440323a8f085981ac4631401765298865b0d2bdf3fe41227d0594b17482132f8a020482d4844776a70790412c1fa51b417d988916d42f3d188b4c023f580a63b99a153028ca2b579a84c3cda05d80f6049969a58602d176a883a0c73558d5d21192a506914bb13cd23026a9f56b10aa9a77031096b78c2cc68212e80f22ae0de5ddf8bfcea978f97b09cada40ef8550539705960ca9b272c4e7985ce7bb198ee9b6943e68edf8b1df1f35c889ae9b8ae82afd7af757b112cbdfe5a41dcab8c963dec55166afa356c10e1a2bdf5ffffbb3bcf52725cc347a30f74ba56db829b61a03948cf6b792ca4fa896e4caa49aa9fe9184b556d16afb4f39e65c996de948cd6625e922a587acca5ea636b2e94fd27490c9b636effe05918c564eedc3c4dc90589b0744e44c6b60a9399d90c18b70e07794122101f01f299c4ec0d8d896bc8284fdb9a3dd669256dc8b07c2ae1c2ecfd4af898e1f756443e6e93071108bfaeb4052e1b20c6f8d56869c375dc65f63c9b7a8dbc5fcdf0c6051f256738d15cc456cfda4290f1679ad4fe5f6a7b3334563929266684a9e1e7125c47e26ae9c03ba651b61260b2e11bc506951132a2d1d2cdae90cec9a62454c6c402bfda3daedcc1684d489a59a5188969fb983541cbbfe633507182f1fbccaa510224458fd369764e5583b5c2909a34123f12fc07c0100acf1a88d093ebaeaaf61c556fec62a6a3af7d29fe6d5710df4b13913235e412a7627d57384f088282adc4d4b58c11326f0e79a3aa74278ab7797382e1d09201dc629666416720ed5d18519ffe5c1725424b82014554bbfd9a80974a853883c6cc46a180dc320884ec92efee8ac8d18f086ef8890828fa6a91caf09c72ffdc0bf4e21549cda686045a9c952b5c16bfb68ea8d11983f45183593fc09d2688e01ce0702aad4130ae7e7b2c11ea35f05bc8409b8d62fd9867a76904a3560a55f06ed395b49cd2729c1d9e3e8d7029bff641a7fbfe1a27ade40faae23c994b047ab1deb83cf6935106045c5eb316f48200f4e13ef17d17d7fa4889565043c18b1a8dd13e7b3d78e5a5d9d458adc1f196a513534b80813f95ae866e173d352ccb37e67ba460ea6a67a750e5f7826c7f10f80bca99d88d7c3ad402bf02edc014674668348b61db0c6f44315044386504c27cb11569f164693c50049fe90b6a31551b1134c67e113de5ed885446d17c163c0d9d8ab48134fd520a4169813d3234786562265ce82713fc83c62b819fb28171033c249712ec7e5ed0c19af03b21bdd233f25bac537a50870102c433852561eb81d7a5c6169b1a092ce938c37b7756870527d429248eac9e2d8600b51a5367d3491429ad3bbc140c994bca7c709e6e4138c29ed5f43afdd986cee33dc9ed3606d6aa629422b5e31e67193f4240607342b159f74767504e7d68ecd821b291bdedcda7cc709a9ee285fa667d1e6b6039577dabb84a6080b5a37e6106c3f410931be31e408cf0e9be547437e0b1258d52139fec57d627e88b41cd3b53ed6994060d060fec70b9d42f4112e868ba467cebc70d48575d68ac297f80238d90d64c9f38a70c27b3a8cbb8259ee923de768918237a05781e80f01fecf56e739a0ed4d656b69dde612f7c90c87a0e75157edf25d19dedacf2e83d70ae80dd9af4827415871846f8331fcebe78a163e70ccc46ee5d1e5cd0aefa0236844f628a9d74290988260dcb39275ecdfb8798ef68fef3e760e64b9339e111250718d5cc3e8ecdffa9297441545f60405b0a9d485545888d5d0f8053671767470fee0f9b4bdfa85412cd33fb6298bae785b474693232bb464ca1b460511eee8c729d86e8893fd2c2f038ddb7c8e1af7b18098bf07bd8a748b4d6b327fcb99e987da63b89f1bdf7d39fe8edf39ee6eea0a5c488537794dc09c495da2bd9a9673dd129fbe6ae94bb9cb711b8ff49c6752d98390988419fc821e5a1b90f908c56884728a3c5fca7b0bde160803d9d6feec43a2f775f90e11af139ba5f8bb889e0a6bca41a21113ee8cf20842f1fe9994770f109846b2c60ba892c8c62e44cb15ee78eddced291da64a82bac21654a038ca51a67bc7cf211a0cb48a8416d123198645ee024a3aa901543234daadac495e08f88c1955af8101f60d00709616fa1bce79332e059521a689167eea9571a5d035117d805c9a40e926aeb7545102cece1124ccc4955c9da0755d49a6b2fd84543ca1edccd7e6c182855a1858a2baff00e0dc93f36ded3f415cf7eedddb975ec9407bab12c34546db270ae81cf776f80e4650686217a67898e89b2243cce0c6b464a4af3b54e6ba70caa87bc131ceb8226a14c82e6c386f1e6e33d0ad4484ad8156a004080ac0ad36901f4d706983a6952b68a908ccd360acbd909f930c9d06cee9d44ff735f93fed22028461d07ba72011abfaa40ad678a684fc869a2bc50e6b0a35715ad3dd0d49dbf2bb01d4e6914945b557a91380d2d25943cd8627a6e25d192055fe39ea899e03b5cc6da07b439b4ca7fcad53c8f43c70d4abc1b7f1b3a6119dd33f2a7e1d5c1dd8de24fab70e64df8ed378467ebbd813dc24cc13840c3cdd1a1c6132374a9ec6f62af783af8ee992174d20898dc6d7317a524b3b559b7bd94126dc76c1ff0d63d8f10996943fce8f01fcbf4d824157f4a7c0a1e18b5d08b1fe4d10c7e0260617c8b98a951e61705b7327fd3d95dd685c0366b26d78c6189581c83e28da07cd281941aafff9703a3ae85e3de9a2fa6fa995fb20b6015310d66d814b4dc7939fc01be0612320816911c2de548afcc48abff457e128b1af179cb474586bc37127965986259ff5b8f5259230e5ce0d312a568038019f44ce8b41af44e24379ab59cc3dfbbb382f7501ba26baea22a6e7615726e367f927a555ff8ef7fb28325a3ced63a6240c6a9837bf2c368b9961672048002309d236c1204ec7adf792a8ff5f9abe1928ec3d6f3048087a66a0a888a4d8c0aed2509b125d4de567727160e2d8e700f89689fd35309c24d871ca2b862627ee5522a8a324456b5e5f3f6df996f503b26908925db96de30355c35e6e23e0e1c26a3d19eaf1a8271811ee18493bfe158a67c6dc38ed7c9ec9a3bfd3d3aefacf59ee44b9355efe344f5b52ff99caa09391b507c33a36dff7cbeb046581ad55dc248e8c9a61f29f7f03df36867c7dd751bf0d6abdb39e21b8473897471185422aae3b6e287ec3fcf1105d5d980a04692e4250785cd69798bc70f1f6276dd3f8da45b5f2e20375c5f8d3816db6040876ed9d583c75ab6dcafb4b1a4db67c7a9012b64d5245f457c18a22631a50ed629eedf89345456f2ee15c85de2a4f1758bf58400364221efa2be39cd98a3759f9301a9cc5d74b957ff787113f44a06ef2242ef3351b80bc525a7495b59c01452067a36f573da2d0281cfbfabd2b0aad290a475d9da220b219ea738ec94ed4ca7eee040d1301c27c27eda3336365d02c8c1baae0e2bf34e5436697826a8e24a7dc6f37a905aeefdc640a45e79007d5e49535dfd4b931edf199d8a0603d394918192a4eac6eed4b2564f23d79079777ba7e31fb6d33e64b66d4e6df933aafa2a50cfba29336cf120189c94e2e0bd22906fa2a85747e208c26ca3b0c82cffd0430113e73ec02e0343f5456c4c71479b6d141b2283d310e80eefbbb3355f2aebb30c7941410bacce0e3826cd69cbd9e818f4c46bfb444b2cfae6652e02be7283291cca81078d17c02956a9888b80cf27a0d645f762e027b690e78f9b8795e494005aa12f4c61c106bcdd02a7914a67b2255d956b26061851f25a04ea74c89341ee025929718a30355a0a12633d602c49ea2ecab17ba8f95477a37ea12769b164865cea148fb0186bef83cce6f283e54e683f2e9c845cfb74c213cb12608517e25e87c28e21cd26636bbda9a16b5029ebe11d77cc7a142a923d80af5a67c10e6856df4b8a2613a2c1c86b15217acadfada0fdc9c29332a07468d7caf6468475cd029711639be853979c008316ee627845bb847370ac28ad3e27f016120c37f95562bed28b0d64e59c62cce8c4246ab74283a5a065705b215c189fb948e80e2126b64fa5cf38cf988ba18ca4367c0c07e28402a60acdd01f03ae6d4afba1e6bef27bd4f5ce1e58599a9c81a236db0f758d6bb4892a0ede1502a6136de9053b05eb857de98265967e0f9ab891ece3e1c6e2e7ff8b48f4b71115060db1f044e5e9ee3087c6960508faab0b726a0a88c7a5f235fcdf3868cf0fba497c2cf1aea40a2064dbafd52313f410d8020050476c353de7e00f40cac5f492c6e4a0f5be5231d88917cb46a6fb7b24293e5a0c78681c453d26d4e447ae81b0e4cb16021e0361d35ee42740b12a3b91a092b17e4a35744ace2240265a9fc0b8235f00b35ecd1914ef86d782a4125181a9d53acc69c835c4a6a1ed43b3d97ba1ec7aa30e05a2c0f0a8685a666f1c713bbbe0444c6053d578b5c99f550579c27ed0837b24aa0ebfa1053acf8a6758a100c6fc3bb1e08bd88963abc4c294b48a5b5229673a336e87964ad8b2f3ddebb688284ed73fc2fd931effaa6a9d5056fc32628f881518dc96ff4f40781763c91d42943d409f7ba65ec63c6809f6ff0a1c1110a28717187e86db951eeaa1142d43a1f72e38528f3a86c925fc4f68fba81e931bc1a420a1c7739bd5a3750b9bf3f40ae6d12cc40b3a6231c659613718af2b956cda086b10435686a2030bcacb6bcb1ecbbf45f096de381472574941647ba8db251501e61883d7f2f9a9c13bbb3c14111b11d69be38c3cb11e2e56a8fb03eb6486068de99e26c8fc10a0d87e268df381c82e2e89289963ad9afdeb82d2ada61d202be6acaac0870223e4c66de78c45f581b55d0d076a34034eeea1fdcc7b5277fa15a68d4ae416bea51bfd66538b78c492a70660ad50485b3c7031cfa064bd0c0844a1f77fcb4337f3644a5fc85ce9cd3fd850a1697932bdbdb40892f84863187841277ada7f0ac6cfccfeb01ef3ccba9d2fdf9c4a5d749a58d29d953b089b8d2fcd2c5d1c0e7bc550d87495e953ca4653cce93c75b7d64c42e8d8aa8901071a4495c9f9ad3508d20da5058330eac4d1cce663c55eb1e487da3eea666f6cbe0e99852907619bedb2bb25c5928fec332788ed87ee87646419a391fd16f14ed2600cfd777773a45ecd36993948b2ddd021346fa8e51d0b8491e4eb01f642c91a0751326ee1811176cb5e3d2b5e524c967cc1decba7129004ab8209700b6ef9f52a682438a52b06da35ca7facf0446ed0232bb407e5d7016af64d299a23670ab3498d9fbc1f819bd267f4eef1400c7ea925cbb27056968b0d269c98a873e3d4c28a3ff0006eb21265ef8d3b86560e726ac042456dcc1548b5600128f580502a68a2824af96b94afb7f43a38f2f73f1a8611953d56e8873813c1d2c52d62d7a29e4975c83b82a963bd530e0421192c1b6e061601e29f070e1f0baf20c36392c471b0fc11968c10ba63a1c1f98cce06c8855ee681d37b5856e140aa6636273b70c9e01bc8a848d263225bb6654a434884ef62684619dccb1f7c5a38a082d5fce5a6b1d1a81dddb8baeabbe205eba11989671fd22ac63a70220277623f894cad4089d470917473b4893a059abb21ad7a77a46e84112612df5967a5b5d4db4f98a5029b72eb14a7548c267c75987728dc82f35ab41a6e611c9e5dbde45ffb1882237eaf434c01a1661b23819c0540e92803917513a7da66c3311f29909ae71503683d91efdce52de79b412197346fd298b8dc0bfcd3ba189f2853daf4384bf949ce5e40a6a50c63e97ec5420ff95f4a198b881674f4017bf045db3bb32878aea2117ae79c06794d5e704e3e7045226cb1488412e5a954b640bdb7116a7007a3ef954ae348643eb45409c95d6623a3d188b52d0b50dd37c24aebeb1bf9ba7938468ce31cc471293ad62f082a482240450eca9e826f68faa02e3d17b7274705ad38169a1ffb00954783319d6cee276e4659c068ce072686dc5e6911353f31b4efdbe4067948302709a44422c583f4189ea029813d39b32c2ba0a40e6e6f3433287a5b43ceb37f4de7c47abdd63d73e63ffe4f3241a7f2463429ef80acc9b5c323fc7d62da0a4de95dfc0f2f5e546def0e34524c06f82292b06a99772c572a0b4018fb68285367180eb1e8cba5bdc04413b3e04be145f2cc36879fa2fccf3429e248f59b433d14f76c1b2f1cd6032338ed5fde04af0c2b45097c048ac12d4ec222d9befa1174278c652c49e90c10d35fc1bef07e105bbac986e30b987063299064fd27786a72512936de5da1ea5e824b98a59a35ae4cc2774d85be66ab02a15c61a42968fb263d7f6c13c19a89555683b4d0858b5ee3050934f3dd4e948db813b8b56dfd1fff68735fe685b5ba1b86ece6e1692af9b1d3cd6db8481b2a774878ec8131a03f147002096707ed661dc341326e8b811b0b2a41f6eaa708eb1df58bb2fd47a297c33d56cf8df303436fbd57025d9ee851d13349d4699c86c4bb3181580899059f2b12d1ce9edb826d52c64529c4082ac2d095f8fe182001b69e0d38ac112dd7f5206a145f59dc626d959c1edf4e6c9ea917ab4a73c76efa33a04cf3d4dc4e3b4058e7b32a0539ab9a9c4671f7c90d2a1b0adac8a1c5127c87339895105a577f4ec7e9ffedadec9dfc3c3ccfd239728ee8079a52e9a5b145059feb54c859ce045658a0b5894c6180523c90227934360aa47ffcec5fcd563001af80649f598f2e7bafb923dd6820175a951a664359d1134969f444228f9e4826d7cdb5ed30dfdbf964ce2c5b1f32a49dcf5344539400ca92d4344ad113464c2213bbac40258c82f517dc49539800011fa1f4c797511f872bc60a0255ac5b38d9133ca167384f6dc9132e3af0410b93936f5d81aa9439622153ed8419ae10d96c34723f99c45af143201b8728487607ea82a839e09e40cd9bbdfc19dfd8187e3e5c30715ae47e4d6e14d8c649d9f2b00adc4bab04f40d1f72022724e9316373f699d0999384b969dcdaad62e12a9c8f9733b95d6c58e4599545012e311cd34feb4935862bc1f554969f1c8649e2f928802c0ca28e4e6a00b79d28c4bcc0ec1719bfecd80af8b5bdc2cd0e23899c62478c912de40ac45707a61f05607ec93f80aed8c9b7a79f1ba43fd0cfb5c0a159d53750656c42cc1ebdf29f34aa802d554983bbcd8a726a3da7746c16b0540282428fa5e1d51708e2671978173a6094f39f0439e9f61454e2b59e94af404f7a30cdd9f15a64d42a79881f767601d5b9e82617d0476a924cdd192e7cc0eccaaf16f00320abcf38493ff1808d9585ca70b334aa36aa70935d74edef12c17f057751b03624ad2e736ad09876342758e42d29ba51560f15a186d8fb846c263c7655e7fae3110f275fe3b9761523ce15d56bb07fc8dad3c5097c8006cbbc66ad7aad62ddf3d5a416471e70ac56bfb5fa3f4bca24e4f11106f986c6cdcd35966efc92289eccc360a46700e4b77915b1e2b83835ea0144c13829922921c44d5285f63b2367dae89eab800fd6d005d4fe860360996e48d8063b8ea90877cd25fc446a88ed9f89470104c6139f08e559e6d7f685655420d3083864a8fddf05ad578b6937c8db1b34a6f6203aa339b95984b08ade4904812aaa2cb1632ad59a21ae340cc6929fc7075391bb0bd4437fa73d6519a77003590af835b2d99240db11931fa1d1b8a5b55321c734c6329618e5cbfc07967aa03acc983818071db35a861d6e5d2eb322fc13830a3ed2921bb49b88a570eb76b115efa1530909ae67bb839e1b8c2a8d70ba337f6d7028e81f740baa18cfdaad78e8b0a033d8302dc5576b96fe41bf502b7cdf747842086f4676878db81983b61c9210947665419a8d9b8f58af94eb08549d4102e248c57d7c332b13018cbed832321350d540f734bdf2f1a9626b0e26dbe16040ff70afb801fe8e9505c1d63ed169e681d144c9f61209c87896aef9923ede6374cb4de85a7a815bdd3fc204d60b8d8f76e9f8890476a7e32712413d557ef7a0b60b7c69c5839d1f40eaa6f68b8d526055ddfc82b86ef3367185492e1e30e9cd1bce64ba1e22a6db1d1c12572113b2c7d92486362f05463362539646715f998398e06a56f017629d41123a3bf05c21c3c2df6271074e95cd8229ec15037cca32f32a041c51d1c4a03d9b68b1aed34d555c97cd3ee1d7b787aa99a8a305eea0c31206211f062421398edc1aced3d3f99bb667ec03f73ddf0e1934bf17fd80792fa11088d3a0e46128229426735b185a38183ea11064876aec5697713c0e58d9dae70d96788cead426f22f95864de33f455589d4625426578b730e642cb26143bb5e0bcc9aa546801ef80de1c529d739cca65183c60a00152bc0d828594741ce143ffce879f97d1bf1a40a6b056cd3d6f25a3c1ccba09a96bd424a9c3549eae2080dee5d5434cb003ee8085b7f72b1807cb2f1b026cb1e76b6386ca0132a8c334149e8483fe3aca812d431cb46d772bcc2f2a10f00a87e3c80a2f5ad782d8cd2b6864bb1d87ddeb220ec5105b8d9f37c2dd530639a3fd2e5cf8224694624a133465e215fd9dccbd4369e952675da7cd5681c1a1c48583db6d1961a1147a65deffac7b84096a5ba69ac4588cdff3e06e7e0e9ab733c7c8b67e8470510664637c451fbb31121c640b8435c85b841a0818c817485bc02798344079131904b6e0d7f23e7b47bb2a9f84e541bfab44457981d75dff0f731e8fa5187138c8b45e2a28b991a896107ea0fe8b1a793417cfaaadfe24283eb9b5d94c9e6f7760449546db30d132872cc688cbf954dcb3c1a9792168a60aee745c98c8de25698d07db0e208768efec89b36127e8e03e30100373b331f9bd0bd6b45c004bf41736096df91f2084983780945e0b155f8063bb2331a03668177d6f598b028081eb9eec8e1b4ef7c11823d0b84f841363c5ef8e735117a72bc5a93145eaf8d3f7dbc551928233cbd1005a664dc0235ecfb4ada6f76cee58a8db1083a58a9977b5c78f091a2ecd244e4d651e6f7e111fa1945a5932ac64f782a594333e8b6fe7559ad826cc2a0bd6bbc12b615b046fe7c15e97c5f833e52f502c5d3920a18d9f833c9dc786010750df50a41b968a9fa6dc3f0d86e216fb2593c4b0a89e766d313baf186d647dfcf57f7e75aad8b761c835ff5c0cd73e8599d8c9f55f7198f0aec555defe9077fdfddb32ba06c522879f02ed9a37dcbf5c0d6fd5c64d694e419e8e8b4b7da9d3b0c08e8cabcc0e16bd136466b5a1c35cf871bfb28eb5b7dd8a98816595ef491e5afaa8e91d88775b21e6c79f2ecb012a38046fdbd6ed1bb61d8b749783939983f49cf53131623126caf6c61256780cd43c016b3dbfc36e2ebb2ff2f20e9c7b8129219baf8ba9848d0059d1434d9e03d103b7cf4bb826fddb79ceb2fc2ec84452259ae9fdb4527c2ed561db13b69085e3f2decb26e7f715ab953b8da58919b385833ae046e1758b16d67f21bb4e6b4702bb6cff29c10d8e82b2bd7e254551f079bc6157a82a9ba267f59807759577eeead9080887c2482945f85298b8331f694e52b7bd9376db1f0a8ee19e66eddb6e01b4db9122edc6c356fd0ccdd0f4294eddebfb14e142e524139147177450bc614fe57a438a78317f6836895951c6bb01700fcc81e81dee3334fab9c531fe47fea01eacd6504da5a1942a81d6c15195e41ac914212e8a55124a685fde906fd97cf9b0786ec0d74aa5591d467df049a141a104167a059e7223c063a17d7c17bbf017a8dbff7fb7bceab3a8c63e9ac837222dce1d7107a2f598f2a76692f5a8ed04b4a52482fa5613d35fc553a5ffd760a47f724ac8927614a760c6de2e4f1d288e82c2b880820129219e899d8ea12c767a0d3d0e8c22e7e7be5ed24ec23539c7d8373250a9f826e35051e690f556865c951f380570e90ab6239ee47ef2eec22595c809aa2dc182d762cd86bb63cdec743d6892ffc7d2a12436fae58355bd832ed35c85e515340a4747e043d291824dcf6c876b5d6845b384d662e5d8b16be7309d9ec3b1a6fff9a49bc57254fb23540fe1e6c81cc826f1b600b734c68a8481f1d4a01ebd1fea602acc4487aff9fc5d63a81c4a3a33ce4f53f1e711478d10a02ccd9859b34f9b39e4cb6d4529672896440b756ea88e36319f04275d63c92ef4263540f6560c7cd0949a2b3a22885647d7bc7340fef252ec740524fede50d7ba75482ef52445a1026bd3c2f19c15229f972a692e8de1de43f714068dca96cc8f1d8f4c11e4538cd14a32fc983d426148e80ec1ffefd457c6980822d658529c00166bd18382facc64a6ee15852ee55f8777252a5ae819e06a24e1b77d2d64372573651b32455d98742d9614e61ee11e6dbee86c4c339975779d3e99c75582538af88323aa6d2d0adc1488b4053d6ee7532c164427efaf485eda8a66c4fcb65cde15ea5f65c48a14fc0d024aee426c5e2156019af509754e93fb1b20dd222461d5d8990c04060cf8811b6f60064f653690130eaa3ce275c54af218c750d90d1023f7261ca585950b5c5fcda88cc34c157640d314456dc4dffac761144ab69972af31f3142ce50b3a4113d2ede8a3bf29c01b087e829165017e453435ed2682d250733a2a6f751d3e31c1cbf2827c7cd6dcaf6b69bde5df261c88c379c54812363269c6dc8eec0945037a6327929a41f543030a023942f12260dd8927b98c8bea27c5026511395501af09ef356b810cc8ece9c522787199a3dd3811cea504b95f94b7a11c24048bd29497380c3c4b9391dc18273c90e03ac366e2b2873cc24c018c0355cb7f89d042c3b6454bdc3bc34c48c8ec02980e33ffa324d81e8a6395d2719d098885ee9863fe07a3b035c6655bbdb7aec842dbd3ea9955b7b77ecc63a351cb7795e549f454ec78221cf30dd9d988b9f8bc2444326284df96cb4a519d80c4549cb04e16549d7985a2ac6e984ee643b3dba36e46920a7e4581a41d96f77ca1790b685a94946d8eb844fa69bd78c479e37fbcf317cf27f79b21d53d57608fbd264c9f59e3a972b2fdc9a09ace8f4c9cb4a62621f081169c8303eb4b49d492e17a6c85898703ddb00b1ad4b6d7669dee207f6d27ab7e10dca92a59e3c722554e7d16ee87e12f6d4939d4e75c470967ec0a57ac96caca0fdfc00063c72855c66f2e9dc0e6b0981a570863ef0e97b9cebc046b2efce0d64887692492fdb5aabf3cacd8f6d8d528f3417bc9e9a2f1b8b7adf1942d745c46d9984d6373ce9e275440679cb6524e1be2922a15ef85f69cebd833ee9082cbc0c21165e2d91991e714997f496088053daefa4d4ce05b321d5a9acd864291bf59cf8b074ba70db72555dbdb8119cd5a02a05cce73f03ebc78cae9b1f876ddf5d2eeca958885d546ba28119036f2b104ec296905c67b8dcabfcecf220c9c2f91261534e0f10e5cf26b9519de63930d124f417a1a65eb911566162958dec0a1004d54bd3f8b3b89b4b932f01354ff64f1ee2926923592dfeaeac33194415b04743cd692bea4d56044dcfb3f78d4e18bd2f703297db54ae90453cdb6892deacc85c7306d97e6bb7254388472b107a57b474760a38d215208be9648044fbe45331d0a4d0b420627a2e16301941ba829c61b0bddaa4f2609c5c445380eea2d965127d9e7fff0bbb8c0986e387dd6e7e3d87bb2a82a253a2fdde62ffc981f2badb06551c9dac7c2f1816560979ba7fa39506a11547cc1f3f22edfcb6efe0bceb344309526110f8404c8882d342c1e70d70dbdf5318fe8061c9697c3c037effd30184fc609438d3493b68069d26721f0b445300d645d122987888de3b448414c28ab061188b3e04e6fdbc11736b1173475873da983a50fb0aa3793b5a218cf72c839c6cbeb71b46615a42ab5612d017415a420cb406cb94f5ddfaab23424b9fb333106f7209138c16d4dec5bd9118a47c1380a943ea72f4bbd1b1012e04ebe343a88824dc86486c240dde8d5bc7e98c4a49540c18a8ef61985f3f205726feedbe46882bbf406583e4485328d8a2d49300d136cb6fe7c9519d39d6a7ef0d13ce1c6f4a077c5f54424bcb41252b2150928569a9625d188b821f714f4ebf7a55367a6d1d26ea7abb9909d76e67f8454fd311d0f1b1196a84e6d1d3c1cc46c4570c6eb8aec3841685c38e79d013f1ca6b1da79078e6ccf3997b9edcaf6e5adf60b5c5482641495de84ed7a364f922ed2c299f6b14067296bcc57cb8a51aca200affadb39a31a703a01c1be9bdc6d15780a60cc98015c208c125f046f28332984cf1fc351013ac9a47d2a3e62d07a0bf6a57a023484fabe0d9734055fc90cc3be9550327ebeda5ccea9af940a1275a185814b30873489c5599e1c69f36f6a49a550c3d6854a8bd9b16c56c10701649f4d22562b622b811140cc36dc2207921fcd98e496315d4f52c0203bc25ccc966a1491edf50824cb1e00325d85a33b75c5203673a128c6f06e45e3a96d0d488ff471b0ccd9cb195893fb4529a7905e0f74df9394e37df69fbee00608d382f66f86c34420fbb977ef6c267840b231b5aa109045620159060079b99ea1c1800b838efe15b53b0033c3c559e7e960e3adee78cac6dee163d910f03d98cbe0f3b0c4389a2b81f03a2ae7d3196a028835ed25317ed22864fd775465ca5ce30c09bb4d41cd49e44d1904f8574957532a5caa209f0ace0b64b5f69c2e20e263b0a5d5e4bec5fb1748a0c07fbce16abab44c9150b96f168550ab544220ed49dcc0b4d6242fa06167ae312dc058d02cc6fd841ce26e4f0227506d94084f0f471ab173e0c7d98a86cc89349459a06fd1ed4a373d0da68ca12b1f3dd0d5e83a00c3680d5e86011004e4a8021e724dce267ae74183e81db2ad084f9aac7fd78bd21c41666ff1eee61a05059e0fbd434de37001841580148103fa9a5025a3af009c08a965e7ec25bdc38e092742aea82e86232491806a3237d01e48ffb7f8c6d430b2ba1bb4e281548ca959a6e603dcf2f000b011ec5f517551858014356dbb10fce63f3760c524ee2401e1e7e3e67c0c9c4b3c543c880dd5277dec58cefee48d4d438e1ee9acd66f410bef034f678d293d4bfd9a1be4785d8272224079afc286b1291cbf4ca6144db932a36f8368d4189b0a19b91af68ac9725c082592f0d91047d62669fed62d7c2bd71c894d96a681cd8fdf6b9f8bed93e5e5aed936ffb9cab27349e8ef03a33aefb21dcbbe3fda4934efe45fd4312ec56750d0704b73fdffe4c8e1332f75b9c32a928dff21839265caae1def48ba473c0d377ce25652af2196fb59a1e583545d9cfbc6c96d617f72923f58937258a7601ff26c2b63c9452ae48e579f71fb7e1f247b92c636ec34f97893b3d3429c7dd2e5201dc910cf6e4296a6934468f27a76f57f0088aead0870a6a9920db678a00a5c908acffef76a914b3cfa40227b441950ede99ebe50dc98a4489541c18cda7fc4d82af3c3232e9b11ffaf9172d0d6e5c7749c8ad4e90412ee5ac8ea9ed7e8f08449f1692e99d0f0e877fd86b96e9b847c3e0cf7f76870027b81418cc404724dcedae35a16f3f6873843efa0896ae79bc9c83f52bbb59f74822485d2afb56ba582e0e0adc9a272cfe7aaea06ea4a7a72b227f1a3cf9d231207688224212279307482769f78105b9da93b4c2c3ef333c4b67d2cfda5fcc149aa7101934a5d6b288211f877b78508b88483ed36dc31ecbab56f0b4ba4b0b6a9504dcc41c12207f7747f419b0fb6fe4c2fbadad6af5aff30b624b6dffe8935e44d2200933098662f96bc4740bf81231da941b56b1b8668c447742b213538bbebd6af772d368e5746d008fc712380223fc3830fb89ac1a62d3c0958351200fe78c3775b6df5a6e1e422569a22e1e0612fd41806d5c26d2ec7e174f483b68d8b5326d355f8ac806988771a6f26dca80a719c899577a90acea8d451a4e2c292531daab7afbe7ce6f1ab3541a644bd408251b954e3e9a4e7a95c52c95f02cd14ab0b65e88159ed22c531793014a70ae90ae3a0111a5c925ab1e1435ede72dbd0f3c00d31ed0f806f78cb9cdc55300775d9d12f0da3d94a367ee5e05b9f6545f0fbd924e58d2ed271386a75a2e22f060bf7bf5bb78f056690ca3ac07fa9f5b16af87dcc38befde0b187db7c81e0b2daff745cc06cb17d581f3c6cd2dcde8ce45ab9b3f92c2e8960f547e958f1ed0f9e9ef71ea397af8ec708e72715049eebc0740a3e00ad319f5979cbf6a97a9f743827165d5e7a057090642129d09a2f73d1706ed1efd3fa03e110d4e074481cbdfd282f38abc253cd1d4cf14ebf248661be3a7e00fc8b5cd444b165be50b2dab1e9b66999941b4a0e833730154ea8150a9393ffa3dc0cfa896aaf8463761ac7e1039e06522baf731ac76fa9660cc3359a49f03b27509b0902ad5f0a58cb656f7ac206e8754e4c843ce0fe6037ea49aeef167b6052d62d0e38fa021012527f049e4a3887ef5fb0f4802834e66b690ff9ff47e93a571ac11ffb02c25f6dfdc1ce9a9d24ea2fad9f274442f1f23d8c1e6358189324d5e4222a14362962a499d238f99db0c4a3f29d7a6381d8afae378b4f75cae63bd170664596287f3df556bee6298bc3cc63c0b279026d2a846e125e1c83a29d0bf8944cf928920f2848cc70b8fd50e712541f116a9605000819a41f32461e94df2e1986c03773f550ef07804d4848a49a07922f1879c4a2485444b0cda4420b507e19de01130101dbb71bc980ba5dec6ba188389a76d386d71cd5b82b1376e0654d6a10095185bec2e81d8ea1eb6238f9fa368d44e5ba171b70bf6a365a4832766954c597bc93c82bbf50cd2facaa6828dc767c84eecb212f066c715189ae11e695d05d4b2a5bc40a5bce8c6436c68c063a0ee2ac8de20a522858835dc2f56e272b72ad9029c1d129bb2f3e87732912a903f77e8963849c8bb19a1bc3130873851b3b97286142a881af9f10bbd8c9b3e7a88d58d667d39437a31c21be4a7e92e2d43524b5dcd6d84af438c86f094d32420fad997d3a35ad3ba15da1ef85aea526ef82f276a3f6ced16c57f0f4e28b313dfac0262a6d23982f59f71c670178dfffbd61c75c29129629be1e6a4d558c347da2de79f615150f4ec36415a8c35ac790c4b89f78772360d278ecd3c00bd40605bd4ee6d028719e70a998e73587e3a54781f795dc48ebb2eb5dd7b347038e0b1a8b026bd240f69e01e28ae5cf378548ce80a62d54cdb9c53dde3715a0623dd0844daddeafdffb3d64c70d08db79a014bbfdab8b33c4136aecd2ffbd9b1d7c8b95422e862364578c89ec9fb0f999d261c083d6c5fa1f8ed4001dcd4910ddd9b2046c2aa71e22a30c8a5e5a42653ae0e2a5f036e82da99daa294a75faa83060182f896b1a1bd18e44470c91380e3accba868ba2e0499e2e57be84d8c39e43f9f26cb23bf7e2d68d77e74c451812b05d9d3e657afee74e7ce28ea051eada93811dff72b5a3bb3d1ad3037bed18b176e667f307e26eb639b10809f3f244a409cafd402bd2e3d600a061f27daa3f233db2b83a72a08792c08e4e65dc5762bf1dfc9f2c8f90de38f64a0735177ba9693c92e046b534ba80fe299f8c13f2968bc6bfb652d26200fcbae9b49be3ecef0cfb42e29690854149d348df5b79b6ed0b4afeb52e03d6fe184897fb77b0307df4ffeddc3ad6fb61d1be1f14bee61d3bb0cd828cf5840c60bd01a38542326879525916a86c2834124cae449daa281dbe6c9ef0429d2a5108a6305262eae218dea06adc6abe2bd18b67a668e3de4ce9a0fb92dd606a0b31e02bfc5043e2f4ee02e4481abb463dbd6f5d2669301041ade5b20b88fb98b0958a0800402dc049481cb3ddf873bba7ef0c76f7c3ae4f8d7e33056606cd637c0718ef7f175a743a73a8b1bf175336ec7635cbae8d254425e887ca3ee7bf499d4a51334c3922f1a67b85ffb12f23e11814150759dad186a52fd8cd7b8da5b6c6a22ce7b4c151969b054abbf62b20711ec987198aa2077a954a2e0d677a31f769631a2a4fc5588e574c1649b86e190f1d70e336dfeb5c3cfdb7fed20d780ee81c99bd90c70188c9c8aad04edeb94d61642fe7189344c46cc01b5144add1456c1911091d201b629008ba305c2ed92838882e5b6ff7156a0d7609d1af47ea1bc6c00e4d689132ec27602dd8402a2e0f2c11a031086680d269d8b023c4ff9309e23d7cbcfaa38c83a6cf32f3400179acaff9408efe4065b58e862ac8e594ec20d47957904d1d885cce084ceedadd86ab02d99a8ac3602ca5da49b9090aa41a26a6e4c4300adb1d0924e483f4c2a50968317881227e22c3c0a8206cb527bfe9930df6b876ac5338a9d6eca9527f2a862ec6956558cf0daa96208d95415a3bdd78ae83378b6d94f53cf48dd601fda84ed0c4070b88986128b19c00a679f9d0640c7b24fb087ee5619310516a8b1614f1e5e7a78f1ea2d8b5693f7f45e7a0ae31d75436fdebc7a78e2e96d16ad92ed713091b29e1500b4d6938f3a3d91ab280e23979fcec62d5bb7b6d89c0d3f3e7cba0be21b2b2a3e4053fef589ede3a52738c4edb0c035b26b14776d96e9a780124627c9373edca5465384e4b604553320184b62ac1f09bb3210aaf4803323a31ccb21ab0b45f06c4060777a409f374bf3ef29211704fa4da1aba0d1f0392de77653300e2021c90e59ba69bc7a0e41c37f2e89bbc61db3d51cb746dde8ce6a613e3a4d359930142968d3c9362ffa7954bbaeceb4adcc9de158e334f818ab3f76b351ba895ebec4acee78ac00e80c84201ba2a96b267f965db358fdd139b0ee466a24dd38d840dca41cb8a40f20d795bde4bd6d48b4ecbe9390a2e63de1d28d52be89956b4d5d0bb287472faac8b88316393aa8889b5ab3dff31ea733de0376578ca6d2c1479b7ef08882102697bd5e81c947a432b292faa7836c588f1bb21c3c983753969b3a8dbe0b7a32dbea95335c9a6b70fc2162953314e146910c32cad842999c418d423cc7c40c1f7d69db78e40c9027a39281c80caecea763c2873743b03a1149f23d37242000d0f71d1577f38184b0024d5464be19908958c4b51dd764bcda35621af06abb6deaaf176fc63a9690bd3b9cc1de89fc252e64daf08333cd81cb937a2b9d3c268bd8cd6d2e3124d4f0d0c23224feb8679365539200e3b5f4ae50f619c9f41ec1782d48526ec407ce4fac428cace146869255bfa06c5e7d9f0ef5e76825080f193e3ca490341b580d4372f264c991904bad86671f4f9f3c75ea649e605a282166c49a81492916331992a4a49191d99881f74a78bb3346e091410d6785a205da44c3e20bbea931bd3ffe76989012ca27c1e9284b7a7f0d6a27ab4dd98906a1127c7aa633c10c4b9b2f25a6e5838ff9028f679f9e3a7162a7721a366bfcac3f26c5ecd058cd47889888e0b0f16c922c283fd64afef7c663b25617f3407ca38a477e11b5ad52c5f3ba9381e018c40913c5307e92eb480c71dd4618ca98d00c3e3a73f2ec8cd339a18270dec21ae3eed4f884c17060d96321fbac7de552dabc2c31f55e233394bb9cca37cbd003499091198c052a9ba43c08a3289b4df3598e8dcce0b282138f0be19282f4634a8f4283f288f5be26edeabfde7e2b391b33741cbaf5a36011f91c54a33f263bb707f50e1f9e4a917d9b8a71b3bf4e56089e6881dd1b98761d98f50b1e79497c2d048900464d0c2b2c6498100b3125d81d43b1318479324a550dbad0eee0cfc4747b3eead15475205172662ee38d7736c07f15ece13a89474bc8559693cf1c9f8d54dfc68e58bb65b4c8ca89f995fe6e4b55e851a2c40cdc10080b34199c4c62a0a3be3eae71ae903b523276f99aba8a3ae9107911b5dd0554eb288dabeeb9a0c9905decf6164d06452a1fc89832389e95cfe868d97420b02c11a02af357e61c2d657c8f5b02fc811ad11302257d6b3e03f19a0427fd29b725f0fc93bf1026f723cf294dd3bc463247e3ac84ddff144ead00dcc7e180b78607b41e75bd5db9f90cb081300a70eb337b5d8621806a50ebc5370f785db2b063ded77e4d311ece39ef45e818a685006679599d86a317268d2a250cfdbe83b5903bba206fa7f4ec5752c32c4a49826981676fab4ca8b5689d68a6dded51235446a3230dc511362affb83e74656f6a782dd7f81898695b5018f5d89f576c5bc9d43bf2e1bfdb154561b9b37cf9a19ee2f74e61f905f7c769e3450ace200462585ea8daa182c3c8abd01a643b1365828c242932a447f645be44c228b84ad3f4a56b1d7479d899e15769d6fe53f544bd54338c92d990777fbd07ee3277e2ee3855760f79713c9750b343dfc16590f870e8aaf5f98f7b6d3541ec75e4d7ce2da47a203e8b810c7bdfdf98868879cea9137d4f931b22a617dc463d514daa5e362c53e646f413560b74e3b5b852a014c601781b8107c0e0e8101986ce7c2901e06f9c23b9e30826093f57ab8de33f0d7c51cce91ecce0b672e4f505bb7f3b468cb7f7c0799ee57c26af5f97e2732d2af9719a9af1ae2d616e4cb00677849c25ccb8f7c8a2a4e65a878e0cb09df03e2cffb1cb106212eaa05d0de669e13181f6b0d2b05dd261e9e359bfd354b448546c40783c714101fb5b6eee5be23d871e5b077ba94b6d976ac9ccec2899d9ca4670b09a47104d08a1d331cf704caaa36b5de84a5c10806052917a91df3535d934b28a5d0d2662b1f68bf1d5f720f3a051e52e009866249e07fef6c7b02ac5ebfbcd845d52940f95063aad126a98d55c4e5cc25ad5a313667ace7d9946e07699145f9a5547c2690efcda695da904bf3b9343dd89a40fa7f98616ee4d8d0991aa7833ca1153b4b5717c38cfa3b81dc5aaeb996a99ec3cd28c98f60bec12a338ecb4d28ab54ec8717d4778611ceb2662e38b041b7265af48089db1c72a5f8639eca5e55be3e5f1dbc4cbd986bb8c7e46cd08ba111397a1098746bcd0f548c043c8e530f9f259b31c90b569464ef99bfd30ad94bb58b0da5c9b3b3305f4ae9a933fb0abee6a22a7eb1a9943d0723e6edebf43e780e2f061a018e265a849717de795a3e4b884708650209e6218ff22fb38a1dc12200aa74784a4e6e7c378cbbf9f32a659cc301f16c663ad76532ce1600c62b51a9460a17df6c712fc9b1ace34ee751152263e93d2c2e522e8b0434612400860356e85b09f663e637fe5567fa5d3cc236338344540437cc3451c5c9be5a7cc107081419bcc50e505767f98005d78cf926702ea83414555ff9f4a25e2317a2fea1d4cef4e463252fb911c99a472ae06a4a06f0ab73ff05b591fbfff0b7ae4fe3bd36ebecd86993789fdbe3def1d68d40da3c44b6f6e771812366b23c49d9238f724b27c1f31a150969a178a384914578ec515ab3bc129d66b88d430ea961023350fb4b200f492464e8afeb1a4785bac9d23eefd7422db3e3607f8db71f8aadb1a1ff28f2b7ca2f1226828bb426cb3fbcd3026725cbc956f0921fcfecd02059c0809fa9c812bb0fad5876c01f2909d89b6237e35a211fe5b619ea9a105cce42b615aed1eab7031ed93b0e17fff91b90229aca8595a558003daff1c42cb2c18def282fe921e865f7a19d8c27955d7d83460be3dbb9d8acc3e7bd186f4f5542b9b18ea55e991d2b2dac7fdcdaca483215ba6cbb59b3dfbfbadc60fb91e40bb83e2a53697109fdc2f5d28675f23006a44b041448bf030425634027082b6fbdfb81d3d36ed60e6348dc5c6e98f4c4970eee0a460ed5cd1b36150e0c5a9209160bc4f8d3835ea9af22fbe31bc3842a15a9f73c61a4a2b64a5c479e20728819d9b150834fb3978b1d542df6417b9af35383f1989e39c82ed88037476cbac2c483764e047099ddbb2cd647438ce1667e0e42da724c0f4b7ef6d49dbba07025cbbd6c560d51d1e3617bf5fc2e6a1662b89404398b4123ed28f8ea822930bba2ffa518e94bf6df49049894ab5b28b5fa2443ab15c5cc53fbf305743c320d71c893cad2b7209a901d2109c1aae4b465cad6e5857905ec55d513b2c60399290d3e7f07c0d11c6845aa336eea066ec63e906bc6f5e2ee026b73c28a8b323b32a6266aae095505042892ec2325a61fc57262066a5865504e61c2d70e0f21da63ac27b9efebacfd0b0aa40f7ed5a427efd9a1364bb78e4c2f1cf2aea6380cc3d01a81ffc0d25232b707a42d5f81a66d560dc693f4fbc08b2e9990146d7289bc68b7b8b458fe9ef78a021d4d28e0bdb01c5863703968d1e2b909da4d1c7c2ee0c1de1b0aad8a2a6dc822e855630d2dba088ed23483849c60824ca33ed1229042931137fed7c2125963c229d7b50f7f57245ad4233f8d5da7fe586dbec59c00c47da5467412ccdcb5bc62c89e2bd277094d7f7bed5195a610352e1c2b9a6f9f80315df4055e95388c532893e3bda437d6c6613e0aaba4a4e3884acdd25f2012695a0deea2742bbf5918a1528901ecd28464994323198e460aaca5fa013cb2639e575dc2124abad106ff4ea6164d8526c5d49847bc8e0074bcc418b5840ce3f31ee33a796d3e5c75a942a49ccd3a3b3a76421066e55bdf1ec6c32598484a9aa2fee49b36fbd71e387a1317c6b6fe8e16168a0d2d0d115150e2b0eb716961a56cc032a17c548501a966d5a2a2037d3e869946108301b55baf285897587c09855026f8f93026096748eae552cacb87db6302b852dd77e2e649930ae2dd423ccc17983bf75b809b8951a847540daf4692bf7cc5664ee45d4c90ec62e3a195d66bba6d260d179d02bc40be64145a857525742fd3436d59bc06b40c1164384c451e51205f4c48e60941ea7702b4aac99a9359729f032e9c010c99007073a5972e3115eb9f1ff293027d83f574b398a62cd49fe903307125f220756b60f12b03f2dd8c2b9ae0318829b02855b94ed662b59a531e41495c00026408ae0d1fcd73d2e82287347a3c469037c40304a78e5fe82ec1611385525a7e9202f6951af117f39306bf2b50ef7261566603888e82756fd720f13e64c0aaa057339d2b0fc02d8d1de977dba3ee4ae74046e635f5cdd51c59eb0a0ba3750fa4a462af68196b1b27d1996557d09edceeb38cb9eafb34a1001b30af900d8f0cdf46a41bd76235fdca27b03d45ff571536918be22045e8e42d7d37b71106ff46177a3a1d4dbcb814983bf65b80bb8951a7b7560da68bfd7380cc9c534fe2a184a812892e32148ac5eab0f0ec0e84cb7f7f71454fa64d3f38a4bdd0336ae6fae126d4ab2c53500dc4cf1775150835f2f1e83fe2e051d708ca138aa49d2c772ebc8bfde189db392e4334d522f3c853e59a6269f76f7a04cdc50510319fb8045dd9bd023758ca499f484faf993109b5bb8eb2011fa7ca88eb3272dc7a42df928be68918a14a568d162172dae98225391b722cfb5ba7d887e895b55828408c441cfcf43162723730a79787a422fc922634a7fdeae7de1f63ae50f11ba9043fe4188a4d5104a1783719edbfa0293831be808306c968248f8550c60da807dab66fb8259eece9e3c5456822c426257f53b4fc5cc918340ccaafe5c9e8c09cb2d5de051faaaeb6e1189abaabfab82cfa53663fce0754bed1830e1762e360a66f40bcc545d120599f4e7b461ae471029a5dc6c8c0754b5920a01319ac3219400600d91b82a24c44c22b130e5e9c088430422f308ac9088ca550924428b664d7029b5334a7a41da6a44ab3c4f3a9ac30c4d25366c576492b2eb3b00b62c0ea62a9e33734b007abc1d7fb89cbb28d62b29949403726250c4736861feac70236b5722ab6484ee0ede20b8d1978dfbb10f587907938d11a0af23d5089543a924cff7d83c8c430a04685c1529c1e86e73d1d6294583317cf156235a29e357ab3b81055348495f30c32f8bb9d3568715a393d981274084bf2b4a5efdb29f00a5e1360560fd9c64dd7e007e3b24ea5b223f606d0404bd032a94ca865a2054aaa20e3172cfdf1f869320b8c15e12ce984de4a1c468f86745d578b6fab46feb43a41f2efc2598867b994fdff8fac1180e018e587020f2831138484251a8519862dc1db1b935b4b6d143d25eb1feb2649bdd726f29654a3237085d085b082eec007f5ba0ec66b3f97acdd0d4d8d0664094d2b29c5e7af9537a495dadd638bad3930d75a93eb1e73e1198e77c3d73074a609fdface75f965e9b315ff619e981743b110858d5c3615ea6b003267d564f220b4c30e9a59714cc2a0081e98337961e60f0493f298b8a3b99ec221f5d07cb159825abf0ca1598c4145ca97a848f7abbbab9644d2fea721a041c90e460be0325307f1fa915234ca64021ffe12eaf5196cb6d9445f272be78c9c3b06d0985b21a577880c931d3a800937e72a10998f419756151455138a8502c81e949a6277d094a6dcb27d1a724aade2482a627996606f36cdc8cb2fcef9d81733529ab676de43039eaa2b299973df3b2675ef6cc4bebe5cc8fcc9b43f61fb2d76c272f5580e9973247e0991b097d579187f990d7fc432170d31a898f2e3881676fe9131ffdc8479751ff9e1d992ed2836fbf92c43e3259fe9dc3bd62f3f089fd43cfbcf4b22ccbb22c5176d66b6471852a09f64a03ecd99fa71b4960f2e9fff48c9853e8c6908de8ce8aa7bf5ee3f84fd64fe5f64c5fafd7ab45f2adb5424e2474069e3e0ad5144aa4d2f74985f3dd2702fb5644602d5bf9e871fffb9cfb5f8faafe573d556da15e62ee800a2c847ca4c1a1435d7b513bf305a64fbe5aa8e7c5a9fffc7ae5ac9b6ae09dbae1aa43d5e5594fac569cceaab5864fc029203a5a8a96a2a568295a8a96dad1c4471a8d46cb61ba5048d19ce6b454d3dcdd6bd7093df8ffff2ffc9ab04a6b7479b9297bd9bfc74a18d8d619d3a75ceb45e9918a642ab73f398e63a8054e8e8f1fe3b7b486f0cd154437d662f261523e8eb4a5ca71c2e1403f0107c7bee6cb98004a29a55e106629966fa179cdd83436cd7c2abc3301af6b0b5f42e06e95d47dffde534975eac7566efa7836c52d7b6a7a1021436e7c8a659cb4a635ad693f0ef3568b6c20a751d7bd18a7523f7aa957a9ec0a315e750d625c9183852b161ec04a7de2e11f84b21c7fcb69b41bd0c2c7fd827ec18cf18c73dbdd76b75db8ea49000d163e5ef5cca1181747b01e19ae1360a1a8a4be0ca8a77dad96993cea8c994639294e4d6ba5b34921a6dca5af2b55032a799a2414520a1f7196c4a691218262ff7d4bab89c440ae91e9ac91a958b9c82d21f7a90135b29d2a303045118143b147494ef8f8276561b1c716c106248062b050749f3094a8e413af8ff5716eb75b2ad7d5f899ae3ca75a42033001a6cd982426cc6a8e39904dbb3ce01f660f917d929d9bd6b49bc9517c64323a435363733393197198be17e3546aac473fb556b273db99bbeaacd27c2a9091ec98ba5439a79a8312980093a191e00213c094d44b4fefffa8ee991fe05e69a06f39060a83c3508f7b421ce2952a07e5f1a3e0b087c35062914a69bcf4d5237a2fc6a9d4ff984bf64b4ee47503a6f73fb16b3d72189619834ba5cf313dea5139a71e54b8a2b8952a077ff858a438f15216e9512b554ef8a80f459a133165914825b187c3e88eb298c0640daa443588ba6a512daab5a8d6a25a8bbce46f4376944997e13248226bfe9e9cc94ef62d7f4b3e93fdd584d5533fe8b2937d134fdf72ca460d98fc89c50d725dd9e10793f5e7e85e8c533abe8f851aa65e3daa4724572983ceccd0d4d8dcece8000942674c7fdeacf7fba657e79c539cb9f7defbdd7b5f2c2af7eb474df57a337f6da4671fa5f741d2bddf4f29a5b4fbe90557261fbf6f0c55d062a67aa577054c170a60265333a999d44c2a4777344769657256e7745068c0c9f1f143878565a86da000fb982ffe244badb5b2cc98146280432460124c22b386e96a5156cbdc340ef7ef14e4234add596ca5f368c8d1d151a5ad9b566bc88d62e8e62695adb5ff2f469a2481220550fce0400119604145194a104248f702b824b73871b51f5d6a9081a9587110612dc6fe99bd5e1356698d2eaff7ec94524a7fc6cc17a8121cae7842ce12c0624c497d25bd52612530fd7e95f744b210dbb58ee338deec937967c5b806dcd97ffaac2ef80f9f3c89f9609991f15b5a43e193f049f8247c7203ae990c9f587b67f8a48502ecde680287463e7cef83f7261fc550e72c7f31ac62d824ccf9e8420bf09c7386ba1ceaa8cb13afb33cd491f26562061619aab1b9c1c909b2c33364ea76e85feac280ee686787c9d731872e164c6a76743a9d4eb7838184a8d784bd958ee9792d1593d74d5dff041002eeecffd1b7b1efe2d4ca0e471e9bb91c1d19c1b91b4e8e8f1f3aae5a46816b2f5aa2947ab6d61f86a0d556cf9eaac3d489c3992f4ea45bd6313fb5cc2dc80c5cc5213ede8b718cc861a8ab63b10e8a7550ac83622dc4479c1b148473a624d471f7c60d7c4d291b66d75a6bed23eaf22c5c6783e39680c91c339f519797d491b8367c9b39128e43c2718e73dcee5e5a8328f0eb35435363131bd223c313635c6fd34f65062e65b205a3568e30f95a65ff8eb5cca5a1693063323065407085bc7682388c97cad59fe75f3abef7eaf7fdfce8d7f9defc3eeffb3e1593ca0c8cca648b0cf9fb3c07804b78d87c897a560426e7d190d89d4743969c7648a1d5caf19aa1098fc25dcc595858dc5958586a65b151043b119824dd2611396b472ce12edc8564380cfd70171e8564f8d830fb0a91c82498c9b0958f8ae0ce240b0c1466c570d75a606c0a77d9df85224cc5e963b80b77e12edc85bb7017eec25d0a4bae90bbb472bc667ce0e4e8948652294f79aa3e99b2168519d3c346bb6048c9e4bca53a6c82a78f7ddb62ba260ce3dbd425e1889f1b9630c61248d8c1268cfd7cdae127fa75a5a2e20ecff451f2975d70dc8a2a700eb1e5a37dd2c586136cc5a942a627979b0bceed769b379cdd15a3540adba957ef2395ba542ac5aab5265f916d245b591b99799fad147b7bd547151c60dc72195b2311487cf0b380039c5291e116121e29b810817dc9c8020ef0fb383f954a9d5021c628334464bf36c8fedd08e0792b649216ddaf28087f461f6e0a4c7a1345d99fce18fb9416e5bad21f7b2b2a9a2ff6469350201fada03fd95e61b3b05b14c1deec4d2797cbe5723a37561d0545cbe8d2ca816373e3238514fe29d55a6b6dc0b4a5702964ffb6090287b7ac7a21bce5fef066dfbecdc61f87080d3d388109457831031c1c210466cc30051192e0f303116037680b025a6c36d366fb7c50c2992fd34993f9321f860aeb294377054af6674b89c66176a0b22d03c7fc8feef5a31d377480a96beae80ed4afb0046cbf7e5dd9dcf838694a34348bd26c213f3ab3e50c098d02b9aa15b2b6ee1ea2d45a6ac215dde68b3bf1261ce04124fb60fa1c0b33955ca5c37d84c98ef5804085952ad5d126f50919f3c5657b983689c926a1f9029396ceb20d16cac064e7152930b549e60b0e5f153649f6b7e5939ac3d8219bc3905f15420e43d6b28a96b13f8dc36799ec58533a294a956361a69f26b1470658e9d4e38395c46e4b03b6352be4a30b37c0f4495beaf09749930f93a8ead2fb009ff439a0fd1e5583a2aaad988352354a54b588131281999ad628cbffb4b2377f92a5346a8970bf4954d99e92a8b2d69ac03781a6ef01bf749fb49af713498c3db156abb5233407ca03fd81ce6c39b3a52d6d694b5bdaf2bb7d1e162136e77fcbe8d29a26f25940822ba5d8545b06ccac57e5a930d345801a970ae68fe39ff32365e25410942985f9ff784d90fd5b8e1dc6b351516d37d6580293affc342a97f57acd50c3448192eea6558784524aabc53151a25335c03329823c824cc5596dc0f9f8a1036427954a0d758aba5aeea99619b85a6b5b330615b46a192f46c48cf1c18c5952d61ac98ca1d9617dc38409c01cfd63388fa55e0097645b04fd983ac494a929ddd4b44c8f699b506437e5daae2ee22e3017f66f22b791fdbbc861a651136c9d2495648a2ab23f2a06388816e65ad58016a249aeefe58411c976654b3924c28f9794b5eea00e0a0a0ac2281f9c1c1f3fc66f69fdb478d3a4e56dadb6a562a2ef318132c3e18e70319f9655ddff77e798271e393c9339ec53570ecf3163503972e070499830b60c33762d03a471f897de6bc88d84ec2b5e60920a4cce231a987ec2e80d6ab7d26a04334606adc384b12d43b2a12c7feb9144200d8a737e0183ec2239b150026e116785d00c50c044881e82b8982e22438cd10311118e0441c50c6039bcc83ca15acec0130c288ce479122160fa49593407a1ae9249c442986cdcc5e170386a0304cfd870b8998989203b3c43c0274db903423a80ca42aeb5365ec51a24b0e7eb81e99a3b2dc372ca6e068beec4c3ebaaf3e7d93c59fe525c91058d6e47a7d37d9e9d2c332c9e77ae50df6bc22a291c9b1b1ffe7dfecd19d34360b295bdb1c0ad568ba60b4cfad2dbfaa515a975f3f7012008d87b977bafcd868c66f9961bb9dfa5df54fbaf4a7fb733817300f4d3439ff779f5094c760ca6da3053305dad140eadd8fb8947ad396ca5ad968f4bc410a5b4f45f84816f6c86ff332a356284526a8422a1467e28bddd5af467e85e8c4d217e12afa6ca09ee1e0e43f94b5d28fef762dcf746229d4ea7d1a56bad2c8f5548a4d389443ae127e1138944ea9fdc483c536a49249ea9cba46f3c9d9053b7c3e613c55d2aa1fea25633d37889ae76eee424eadce875024c4b348e3a897475517d43adbac8a8734d743e3af17147461f4d4aafeb6e0f87b98eb2fc6151e0ce24353287a8911cbea3de9f22719813cd614c3f2418f01d08875952e6a6a7db74cd28848c9628a30c020cdc744d2fc228d244871f9c142102cce70d09164ea438020a2fb880f9b76eba66175ee02044b4841540b9951f4cf62ddfa8ab97e0ca5cad6fad7a5a5dd3cac4f22de3ed5681421780181827c7c70f9d5ad9dd4d5ffdea8e51d78bd257bfba4b26fad432eed3a8aee20795ce395fd4d565e9a5d8452c293d5b8d60ef1209ee5a591a95655996e42dcb1dea8a6ee578cddc5971b7a573ce56ee26edca3ef6d1fef5d1be5839d0944e0f05a5d9526a32840ce989f9d46ab5a1ae51178b3b4bad868d70e9bbc9aa7f8274d82fd54ce2416b0257b19de87c5c80116e522bcb10b0974996053079b26b8d03fc5ef51313268a0963a7c0f9a06bb556fb8179c6cd04b71b6e42686480ab6b2b6dddb45abb52107e67c5f3de39471d9d71fccfa5322b5387e9beefb3efaf30703fd5e91d20e42b73a067aebb1be5cb3a55609a999c385faf5cd5c9e572b9cfb91215bdab307dbbdd866ed4756fa505e430d9409ae57f9b34ab091553a67d1a07d18c919da0004d653773566beb9dbdba77b7bb280c01fb4cd632de02b2773ece72d60ed2028480bfbf400c1b98ae07d232332fa9399b581eee2c3881e95f9a5acd890eda05ed76bbdd0ee7c6d69ff9dfed4e4e70628b1c4a34183f37a7dbf9ae62b85fba61a10b232596e4ea9d745c70fe9de0bd57c5048aa830e5699c8c81f4f7fb535634ab9ad5cd0a8767e2723ba0459204df3ebd2b22997e3de93851dadd6db24103fe48fb285188e7aacae0df4c02555d12710e7874e107fc3df915d580e92308dabfb14103b6999c4475cc2d9436e9e0b17bcb5bd66ee06b4acd7af6339bf530c19425e6f03187cb03ced55a7bca5959966539c9f033baefbdddbf0a8de60b0b4842a319e3dddd73da5aed9c33ec990c8daa91915168440f90fdc797fd37e1495955b4634b91febf3da8b583ea0d53bd2aee373795ce396d1881556882c90e9a734e1b46c02d922e3ad4d5b2c9f29f5d1a50ce86f9e21f64435050505090cd6f4e28e1df8f73533373f000bbb082963a636ed8e922c064f52b800526f7932bb957c8fde429f7976e4c5704266bfe7cf2653e8980f9a402505892844f9f58300393d36802ff63c6ccdc3fbdc83d8d3095905b45673677adb411122fc80d00581b1d5144ee2e603d4493dcdf3e2d0bcafd8dc46d8c9638e9c7313a028879f2315fe60a700a795216cba824cad4e917bef2fc03484470a3c0c0e89ab04aeae7d431595eadad43cc1cd965d0b4126bb2fc65c0c21cba538c0dcc98d935a83c469183f0d6a1506dc8e63037eeacd87bda377fab8679ab09c37952973b8db28054809d8e367ca7ff9ca7951df0c5294bc35b4c164488ab1af9e9a110158a26ac03d3c954227d1077fdbdc08cf1b7c0fcde9f264fb0369bccda77ef075ed38c711d405a661265e0fdde00321998c4d7ed6df46ae5a099fdd5fad1b4b0a478c0feb94d39ec468025986cb572b8c0f756cdbc59156775ab4546a96f38373ec5324e6b67ea598e303df8bd4869db1b1fbdc646085c53a9542a954aa5bc2dfcc7b5c05f26279133c1e4cca81860ffb1f5a2ff5e1641767886984c2693090cbc73b2e104b7a8838aee203ccfbe576b9fbee7799ee7cd4c3db7b40519763a2b8a2492fb5d86764741d84574f9f3bf558f1f1adaf0c416b585ba0c02a29784de12207e8092a0c886663093046886849692440a16bc688dc4a7654668e0aae02287911ed2e330d55b6975ac872788901a332023081721417480ec8c3b40727cfca02ce5185db4fcf06173839382c5b999a1a96991820549f2c7c35243d3caf1f254c0c20658a46c8e96d1e50039107da1e232a658deb3dfabd4558f1f4aabc763cadfb7f2f7bee679f2acfd69574268febe996bf655fd3a0463c5f36acc2bab4f95cd3c4fc8616c4e9cf0385df1a8ccc0940c235c3f4f0b32dce258adad2d77d21ab31fcf8c4179a5577ab596f174e075e13d31ef14d97d1053810898f44a8a7396ffbdd8bdd4820c935e89cbfef77697541e35e695f3c569fc8a177398327ba0f45187c9062a69495d2ba28abe0ab5d1f895cfa1f12b4f7f65e555c41e00fccaf7a890b4966b348da696e0a04c6dc0a91a3574803d0bf3af3287f1ca1b7444635796efecd2c8ae0165ff164e80fb49afaca93330e915657f148ce0d76aa4f16275813d15bec0a457da261c8d648e4cbd920926bdd22b25d063da02a642e3eb490236160a2ce4a3973edab7f72ff820e949a52f99de74fa13ea51e187f831caa38824a541bbbbbbbbbbbbbbbb1d01fe3456d5c711e05fb2f35465f8f3ecc20c28745b80f1e4890d5047283112448c0a277c80f9d7130f958f8c8a014e87c8f34aafe6d9bc5b9d61b2fc8bdc2339d49857d698e7799e577adeca0ec55784304b8e04b7387a1e2ab738cc6dc6ac10b2804322ef432287a96f801f60ff3a295d79029318638c31c63cc033333435363729acf2dddd7ea2dddfe2ca0e18db232f686a6c6e7064ff26132ac910875961869bfb884a0d989c47bae9c4f2d43e6b554cd5a4b202a364d204c384f9dc07df9da5047ff6b4c09fe779dfaa8d7cb40293815d90024f1fe99b545660954c9a1cf0b97e9b54585aeac59576747360c70eaca3870e987eb595bab5b6ad9d2494ff8efa1e5291072a7b2fe133d091dc006b60090a394cf74cd5fea11045438aaa4730e93e3860b2364c6c17cacf2755c8f3c916f2fcafa42e147147a6c5d938e8110caaec87f55570c024952398b434d487628fcaa3beae72c2c7624fcb11b0f04be1aae50858671b4cba5ad414f8b2f80077aeef937d567d36bf8a4359ddae14b33dcc175b8366f9db236c10d97f47f828cfa2c29c0426c1eb59115505ce348c5af5d81e56a0832d6032f40e30804d47c0f7282a708e9a4a3fa96b2ca9ab5e4c7b0fc7c707f53eff346e6308939dcbe5c0b2749801e4989a3de6a30eb48138ea420177e09157c5aa0215788aaafa298f7adc23e5519f93e4fb7ed5ca25be54ecda8753f5a73c11186aa5ea1cd4e3efc7f853c49e95c7df9382b252d1a7f14460e18a08acb4b2a2a9919586cb4c7e74b9444d2920e0faa427c17265854359fe292b1b36bcf229df624a08b88a6417417aba52f5081fe573c2475911c3b7620e8a908af2a5af0ee330a62f0d39d155ebbc9347dbc99b3ad73828a53f4f0f682e1a0715eba798605ca360e16ac2505ab44064b5b9ab613e74a3a2fd21ab68693a15482452b5b67a47a44c82250d12c0274b60b2127d252ac6b7435d9f12cdf2ffbeaffc9268821b6569d405967dfd55c0011649f781992d92b7741895f7d3061298f45915c172090ca4b29a46c81901829540535d812598c47cf1f73209962dc430f99546e002589ff9b2f22778508425301b5ce09949b0acb40a5469955669b50795a812a53c1828a9ca05c6a84c562226b0c77ac65087b95fe93350072a01f200d4413fd17c014b0a3a7118f22b2b056b0ea3731877d70ae0106873970a2c028d1c6602c10708d91fcc814dc0dd577e3522afa812cd98121402cb5a742b910e9099036ba0cd1fbcd17894163b87fa9868170d11aca1be32fcca94ef072855e00f8a102c7d8602753e03cb4a548bea0d2cbb4664c3089804cbae35cbff5eebf5cf0d3f0e82271df6c1138f92699a9ca280a8cb73b83c00fd70f21958822558822558829eed58cfc4c0122c533b93af302bb5dce8870e901d9e572bc7d08f19e3fec3c8c87f1c01d3c8e434b2d6fea8c1044c17c0046cff85e9635d4013487c03094cb65aaddb6ab55ade1440359ad6f1041132c486a606c754ea06bfa739383e7abe992fdf677bb602c19d944559241d03268ff9c2744d9a9661a9d52e18c384b1decfd0c8e4d4cdd4930eebd93a6bf7621c04a75fe73d5f585ac60113c78c15351a52105deb9f9f1b3776748004e9dba23f2d1d9d2298bc395b9f4e1dea9ab0f9737f5cad9baa813740617e1bc93dd444361f7f6cbd3a08d8a6e65de002374aeb70ed6de66e4516678d6c6e470748101717974bab50adad368cc0299974c1618b042669512e9a3158d01f4c178dc164f99348f48716d11f5a4477982f4e0376fa335fccc031574cd797b359a07c39fa8d51bfef3bea6e7ad261e308fc3d04bcff44087cf676f3b7387f9b9baef983238cdc62801ba3881160fe56375d40b6e88187299070f2a406301b4233a7720493d448d6e9a8abd42279539f2efb0cda5512adf7e40a1f4989ec60778bfed20a65e08e65d28be84cbe5aa608ecacfe7b314e359e2ffdeaa3582c7603ac9fa665e65fd38bc606c76b2e5483f6d9683f16c826b141371b11ee6702c1c6a6ab98a340d65a9b3077236a6264811c86ba3cd867fb6cdfedc37db952488b4cf048b6592a9b2f56fc6e1f918f2ed8307df2fbbe5decfecb137c838049a2d8409445c5a7719afd3f1d2d79f68a25db77a3281a5019c6b6fb7d5f9b707c4ee28883804da2cfbea026bff20bb2dd5aa608475d0e93cafea425baecfeb6fab71004a63e8dc3bfb48212700ff50c137c5b8f58324965b3f9e2ff0551173d92ca24957d48502afb824091ca6c54068220287e9fed06271d378ec0a3edb37db6cf66b3d588d1a04f9aacb5a67c82bf9e0aa24e475737ef04e1f91add8e4ea7d3e97666b70632f059b5b6b6dce94ea32b5486a1d644d3d0b811dd3e44a93b2ed9f00183299c9630fc36fd5d9e903da6f3ed76bbdd707a09256a43538343279db54e54a699ae1530ac90628833665ef0c035ab78d2c30e8c18c4cc3881ab892454914493243a881143911c7ce8220940006102983fa53473d686706449a622146324c92d171c1a23a306a20d844343594698fcffc940e01a0d787b77fd13f77123f46817a394d239ef9cefd539a7e78933f7fbee8b45c5bb2f48baf782f7c1eb393e7ee8b4cb8c9979de707039dd0e2756e4f59aa1a9b1496195476522f0a4acee17f68628a5443b225df6577909f4d42861f63d232aca4c62232a9678abe92718a69fcac09f49fc802f705a381184a4091910c981135e004405125138e1335d738c305c90c4131d5e60c3aea6c84d08a02514c18b304240440d86f801a2010d7230bd5842db09c1a48926d800fbc132c0dd23e880100e7cd95f4040b38ba43f07bedcaf05d0934ce2da7a65aa43a63fe330d4e530aa05d0ccab08029abbd64f8cd3c9d81a5d5edddddd3da4736dd5661c69236da48db4913696c6d6131c0d3a988721041a29eec5384523a71310fc3ef0d49fc9cb3de0fab96475f018f1e9c982c43ccef2f71f1f75388d00b820bf2205f65fe90106400dd3cf2fc0f49d80bf6f2109069f255731954d999c4e484dff0918cc3c41bc77982cff969600046065c549f523b04a0c0c0ab1197cfb3b406a94c039f09dc4a2a92230104972cc385f280c9c38c10f1ef089aaefbd9f19145b5e001f1455dff23e52d5f72bd5275ad60c4c6238ecc08a1618d12b1e21417680fd298d46694ce17ee7f5aaa4569f9e0b45c06428140a791556fca8a8cc1814a59ea7425576d48c72a457301b87e91a29cb5ba66694b56c48f6dd0b4c986a6d74a6ad49ae4977694e151520f3c55f2693c9bed1b395d6d8e85831239335e94888868f29541bb251221d1f3f766aadb5d63a44a3d14aab344f247d15af9356aa1cf0494fea015f861214b0ef89c0ee4a9543ea51358159931378da5a6d9f74e094be4ea34c52218741217b8e0ad1566b1cff53a9204a81e8127c450fb2458284a6101da2352a743f04f8d73168a9aeafc9f2bf1763a0fae3234d08f82b90c3cc9faeddf474c3084cab345aaeb44aa371c3b31a4d8dcd0d8e16f8efebfefb9af735fb368c90a5b8220b9a9a7746ff6c618109eef183fb2faeab4a53847dce799ad59fbe202566b3d96edc705b7777f710cf8c7107a22e1e9ef9e284a7051d30396d9ed8ef5e61df9d4978e20f6d7b655165fd533c9daac7f7dee7bc371ed1d7c53dc064db686417caa8f131d71550202e3a467b652397dce6443ec69a8706b2d96c36dbbcd96c29b1531774cc4edddddddddd576365e54a3d8822dc44b58a8193e3e3c7f82dad5a27f67bfd1261020c318f187df4a1e62e2ead1caf99952fb0fff47f02df236a7d0f74263dae8d66266198b012c880f2a40f28a20c4a62e051529fe78a1af8ea15a913ec0fd6157582af87bff24a72683c6a52948b39a85f117b50e27853e3acbd5ed97ee95edca3046314f18a3928af22f6d850967d147107679bb8a9a321aaee8aa8ba343e07e5de955f01f244b2cd2e731c75b5eebe2d7218d3db7729a68cfb340efbf67dd63235db7716b4cce9ed3b92126de5ed7b495de1db54ea4847fa14d9da9a1b31adeedb30fdbdf78a3f7c6c1f3ede558e8f1f3a9f96e93171f4efb2a5bdcbd60727c8b624e2a860c6ccec00d2d33030c98794941a0f805779145e494eea533e25e5553e27e555eca7d0521e05b16748d352b27984f264cbb0ad21aa480010552451d503e5533e07e553683cca93bc2f3d8d77503f8dd5a4acd28a8681ef83283f4f3a543893b2720e46119de632cab2bf030818e5f1afbcca2bc949791a4f43ec5122f628217d8f7d1a243187c6ab883d1d4459f669886da32cfb29621984b236550f94473d0450707c50c449ed635c64ff7657aa4fd4f1b17ef66aa063178040b12f4677bb1b474f629fec8b35fdc121ea642add8b712af53f8ead56693a018429762a7811940448a888f962f251fc649f4f18f88bdd56461171ab158e23eaff944a99c49238765bdb98aa3a881f236630ff91ba7c0a211a2d30f9c5bed8e7f3350ecf73251b2c94f1c5be165a8049bf2205b6f3469174c07edd915f0c8748de39c1e0b0baa32cff62bbbaa32eeffe2a8804fca1dd0044929dacb53221629679e6d189aae8b752659b4ff6f97cb1d0068c23de7c4bd85238059866b295690c947e15552fb4bd930911b2cc338fb21549fa20e86c71eed527cec6e1651b1008745c647adfcff37ed532814f0d63b5b6b6dc09ae3e181c8663085fca7abd5eafd7ac64744c666436d497d24b299d73ce39517968a8875001f01dce98cd64926ec4e94957924b4f7a0fa916e01bb29b80f4647b013ed946984f0620938d1b7221097808e567c64d9c50ff7e923f77238e24fba3609d66f9872299ca5e79124d22d94b4ae227921d4412c90b8a24be229912e78eef511802a63c48b99fcc17ff89c3e1702249bf3e4e958d5454dc81cb35815bd63eb80a4c98fa3a4749c85d5be90c458ee410c3c53c5b71b8a2dca8242db8253d0ad50c0000200003150000200c088603e2a068442a1a25dd1e14800c7596446e5e389446a320876120658c51c818000001801864648486260e03be99ac0ec22f66eae262b5e3a18f49e4ae885900955fd79923ee87825ae55ee67b7389a742428332e8514ae266d3a900ca26a1b6609de37463a58be70fbeef76af9351c964177b8369b670435ae74c7dc52bf7ec40b3b504074aa1f2a66134ae8335e109bc05735bb7c4fc5e4a09a1d44abb104470374c41d9dc08ec1ec62308a115cd86d2daad9c3542f8071333b944951b5045fc9fe0c42d74cb33ae336f68eeeab68f4f3f2b70a89698609cc85b2fa640d50fd59071e86630999dc387c296719aeaa7e01bfdc659766911d9b62bfce5d07c4f33f579aaa89f8254f79043e827a88188a1e1295c29c17185801b00f85cb07a37be04cc3e79446c869e81e759fbb93168d6635fb6c43e4ced2053ec2f6f9b3c4833b4b17d28cfcd9f648bc2038fada7d16a64e2356d5a7b31d16d978f86a900448f54d5959cbcdf8c2f90c96460f8fa1fcc12154602626fcf8a5806df9c3fe4908a83038a3f0010e4d89cd9ca16f8fb9f26337e58d8e379ed45a2bbd82384042538b8479cb61a926cf8d6cba12e6f84fb854d4faa0fac50acadea0fb177818fd895900ab906026b7ac0bbcc213281ac821b02efc5e831a848f1bd8c7191324cb886f145f4100c9c4356b30d84d103ea75475007db730b219a1d5caffb6ac8311808bb594939d5580673be84de41cf3861c83f44d0fc8018c24c64b07b6566fa5527fb8a8108b34cf64fc331626019452ebb8e723351a082bbf0da00b825ff955e99044d6c08653c491a8dbe86863ddb4526cfc0af5169c6cb0113a4e0adafff8d66e48d78d54a6c1cb9119357f33aee19b59361e6f0e58302b476e76f110754a08b6edf9d73b933890d288ac6761f9a1abde116cf1a939d23953fc3701efef8293eaa0eb58e20cf8353b3182b90c896e8550e79ae5b269dc09a678c7bd996c5883be34dc8cd2d9fcad702764f2de89b0f41211d18c0f347fdb4a92c4912e5d21b6334d0c0f767cc99280df9b4aad482469d42d991a32d897e8238c33d06dd4b7b06eb2619df5882fc88b3a5c337304390dc4b423046e765da7a9d2124a135cb488522ba96fbc30629ccaf014d6891fa795599e3010f5f42b5078eeeb8384df98c6d0b22a1603d27e1ae2b5807babae4e93ff52ef40891092e0c4b1c17ed25322ae8c4cfeae1a55a9caa806c961e82ab3cb8d1b65b90bb52885f27681ccaab903e8de33a8215ebf8b669b869563ccc05b43be61f458ea05398762a936adfcd5ade383e828b1f482a622c8739752be01835d388fe539d61e92f46769dc3308ed1fff00dc297708884cbbd90456e804f26339f9316b24c6fc25943414ee6f766cb5d022bd9ffa68f709de4df77ffe477837eca9378085ecaa4b62f527cc41f0b1a60b390454a9ef9c468c60554b47041a1c07225790031d03ac3a865dad3eaf5ba70b826ac106cdcb3e9013039f1848bb0d346a1da2e011a087d318f027dae490d56b24a5134967868af6973e92480ce6e77cab672b6a1bf6806452b22b119cb1e4c732a4dcfe98896c6431fd309708fd881aca3a6d0f8cdd4465829977f7e09ee06617a7d09d9ab02de10c8be1da0663504d124bf38b9dc90549275612b20dea8f3980254a66563dd1ffcccfe7b5e502f9fb7ccea6ee3158c55fae4a8c50922e5c7a9ae9b10f1e1814d5d0ed71e0f587a8fcb1464ab9147a0e351e707a6d9429301e3d0cfdc0071fde816d9e59d52e7b3728e623faff2e55a4d59e4d331e07343e90e311a02a5c16beecb68cb742fa3db084028e62834d5c373a315522c1b9f6751517f39979e8c2eb6f88afe315e47a1c1610613800fd2242000db9b2c30ea273f54ed7c0c9c0e588feed4fc75c09ab95309ec80f123b14e8b77d18b374c8d29e1dee310be51a65cd27d71fb07adf3276195016a46bc58685354ad31d5dd8f91e703c80cb81e482d9958e4502b7dfa40d6671395c8fd4366e55f2a9d857eee22efd78f128d2c37e2865651e833845b8f924f935fb7ec7d8994f583ab5ba26d145f410c974210415871eab634117a8a5ef1d9ff541dc84852a5f946963c3a9f2a10817cf7237f67c1227bf64f99594305f2bd9c25f31afa2527afcea049a3a08c3c333472ee7adae3d0aab0136f614a253240269bb447c75b3a79e241b8bafaabf3f50f76719625c303334feb7ca6751f2d762e03452d4b4a1444a2894c55d4f10865c9a4a45cb2945f3209fdb83107041024cc2b0274618e14662a074c1d62e99c2544bc93f198ff0bd7df3328343275c8c9781cd0f290569dcafb24867706045302037b435a9d956ef9694085ac54b73d68210c0e21b7ee18aa5b8962be7b59267fdc6f1129def18f384d06ce049165112d0ecad90b13d771702213ce021633ccac1bfa8f9ea8d70c00cf2121fed8f4686e11416e0926deda27254733efde352038a189a41e4591948792d3faa31f2a37764ca5364ef745962f305c23c88ffd0eebdd6a01fdcea23a0318ce4a615668f65345d9de70f39ef0f66120270c52c4704ed746ef219d0b5dffb0a2a44877fa9ad578fbab274d218f7bdda7904064356b80f0585311bc66575d6517e43f88822d534e5545c6b6300d50fd66b5943131cf3f5eb5e79163ae501c5cc0e477e5e1d9230b1a70bd4a5ca9f91f5922d9f4ea1b463366fa6be1c8b5ccd998e3cd926c7a89a4d7e75cad6b48645146c060ba90fc022b688bc06ae04624e21a0d9f013cc4ff48180dcb7f2b7dd2a957b6a9c74adec999f78ee9cced135016428a17b1e303da534aa8d9bbe128b12414a83938cab13e700e8c09f52550361338cf2095bcc7f91ce68eb971ee159fbbcd104bb405aa8c8f206cbfc857ac2267eeaaf754a094c93f46bb77e800fd65a8201337b6075bd0c43eb95cbae600e17c080cb2ca868d5cb7eb8a259d086f59df5e1a1245608dd20407278f87aaec9c50a4c65b21c94176f3eb1ca7c56a2d489dbd64e97d6baf933b4fb07d88e67fc02ecbe443cf456acc17d029529971075b84863ce74133862f097f8ae41374baf5593ab2a9374860d43511678879889fe30403ae6566b7a98e6c6130e250f54c47c27d89c9e6a605bc42d61b4835c5357d304526a8400d20e45d2d26eadae86c4d6eeb727a84e2e47bf2ec9d8b5e881e604a8e427ab44cbd0a15bd336ea742b5237ebb14bea8b2f2c3566e333d0ddaf5e3db34ce0a67a7c17dcf17cb2847ad2072cf3c07312b0a8d468646ac16334e016f3f2f90132ce0390cb9a0256eb5e2473fec011686339a355620ed2908fa07ffea05bfefb289546d9f214149b0a660806a3201950a99552854020229a96dc1b34677834f663457c7ec1c2419f4345b93713e2c82c36e2e6d6565879baa818fd02e9985c4754e15168ba00178ce1ba41e7ddbf745450ccbb2bfa9f649f7c4fbdef03d3539f83138950a7e208a8357c3d44d186497751c5e80606561c6fbd718f4c771928a92586cc1deebab0cd60b24b574acd9c6827b8922608c161cad88019ac6cc700f108ea4d262a99bfe47b88029a9f25e61cf011c94101292555c19f34271f5e67e61cadd738973aec637632273e36bdb95848ff75d7784cb68b6f8aa40cc78597797493717cc6ad6388ad3bd8e179854c5450a500bf0241ce44942d673912ab62481c250d468c7a39cc4f5caa18691b38e5523c2d2a0e71aa0b612bf992519d938f81a863aae2c75bec693a9c856c3065265b3ba169247bda12e5548453762c8cd051e649f90c64fb64556d05dc2a8447280b863e66f1c47e50dafe603c380e707406bfafb82dceb2b866f28786a1a73bfcc15fdc1d6c42cd784f7885ce668db68ca200f10c326269daa80d49610efe89587acea837f151953160ba1326378b254837047452d7bfe2d053cc7a2321c292eb06713b0588600e4f43f873f1d070796840324256bd32a4f0f08425deb688b5baa83fcfa420c0041b20ff190948f2b9efe8904820c412946921c7e2509decb3095a98a08f5e268efcbbfd6ea101b47881b22279bdc7494effb5a9d20cdb749abd25031605bc1e631a161d5cde21b08c388074d30df2466af470a6b1089619421d8100eec696dc722abe3a23e1fec9308a8ab27b15ac2cb8f328794b3e074cb1c48a5bcabf5da98cc8ef40534b2d4a36bd23c5ef75aa48873ce92803231065f8fc2e0691b43f330ab93c66050b15d13ea7379cc18e3a76917130f96343637779edf8ce96e0ddb4d77b2e65004af6aa04c21aff00f7fd666b3deb5846b5a1358694e466818c98ee109c74b923337fcf94c417c4ba114408ad6a1e54f7a681d7e741981383410bed41a107afe83d5663b55bd03bb1862d762f2ae891ca3074be2c4c58b63466597f74b4ee26d94e2325daa139b22534a94de4d3d2858d9fc1ceb44bc01ce2fce02800f92a514611ae8b3b806776ae7890e131f5b7a493c9a2053cf598950d37b797461e0c53bfc8a484be28d7b01112d530f1d4a055f69d020c47d0995325cc2b191e940400f4c643ee04d05687f457943fcbb3e3b43dd2a8ac177df323d8e40a94f2f3d1865538a41d1ee06ac477e99970f21ab8afabd2fa6c4ef56ad26204a3b0169280a88f9d704ddf28fe0df7f589465561c3c00ed9454f6a65356d49d25a21bda3462e0a6317ede24a84e4f51e039723dac8e9b3a805e4b2ac503cfcd2bb71f3a4895e3ae015bde9803e98d6370284530055e85b530e3a6cfb893dbda61c621158df2e417310301746decfc194112d1ce220186668a443cc8aa90d09fb5c3eb6e3909f3758119a7a86c4eea8c875526d22d0287a5326e2a823944e4e49b879c8ab1a0f9728cb1608261c935b25b1bf11c9e08ab2d19c4b9a11679d288f96ecef6cd6aaa13e69a2b562dc915d4427c4e93b305cde86a54f470276b11ec4a58782f9677209eac9908beb8cdd6a0c4eda362f526bf8f373859b895edceb3429b1c457726a4a3cae47091b3c1848ac098e82b5cf0a20e6c5ae2c71eb55f1319d4680c69274f216e13b3b1b4815e02ee33875eab880401f3d82ed8d0c9429bbed385c91aaafa7fb7d4a39a8c80acb7aff5880840fa979e1f3a3ee2ad24a0751152a201681d7d9a750469ce0341760120f0c2dc46c812b541bf4dd9658364c32c16f906a83475807789efad0280995dd7a9d74d6b05bee3e64b813c45834bb918a61767d72c949acccea2f53bc4bbfe0fc95497e4553ce283d7ac1499bb44ce460864905c5c060cce2509d87731c0d3f08da1274ff56e413a9a582a2f8052849bff7d40ad05b3869095a05135c44686328a359a7aa168e32b628416d395395aa5340144971f656df5e6f0833686c036bc691c6b2488bd0dbb8acfb5e943626d17252380160977bbfd197c203a3fcb1782e866a0063f567758b9b0972ecaa12a2b9319fa04690fe74e37e78ed0e0836cb578a30102ef93c4db291d56c9b55a0436dd42324231d66da0c15438187c4534c201520145be7e2de5bc7d03742778dcea042e63883cd0bae7110d12fc8364de72b1f639055e9299c6e8b029bc546f3c10411e57bd83ed4bf62495a2c10be398885fd09b1e61ca724eb4e40a2a5e61c236ca51b581d56b3ab31689a41da8d0540c45177ac17d0ae26bc0f6d8515dcc8757128e2ac72667ca29636339c2e3448e99590602e8c67d46b608d10c1f970bf8fb79dac609392f4ee08f1e3fe5bba8313b145e9717c09ab0f7a9c690ac03804713e07622e00a2d75c03009f42b05dc5ae1446465ba50fd862ebee7edff87c9694afc54a8263a0afafd24cdafe9aa856b071b8cd886e5eabb0c9861765fd02facdeb0398b41d2e184f342ec9c936879156776df28399725ae9b859fd91f06424d430589256398bf191ab3462b707085111f0bb87efbd343caea266dfb4665b70f855b8a803b6a7c297834b934c0631a11710528351680696f4b617beb87c8bb8ac4b28a60316150fba4c0eb6c915b71fc6bfb2e50594df79aea056833cbfc41182e5293fd68f3f0921af6bc40eeff931892e533f22de8c89a7a3f167f6dba8f54fc9a74feed133bd8d37d5e200ab264053d10481ab7af583df6acfa6a19b3d11fa36a8f3a0b7ebc0bc866d405c1f40a05b3114e654970988e3885032676ce847aae0ce7ec6dcef4f682addb8b894679546a26cf35006cd62320e1c046dc0cdd1e12f90da0118a3fd0b1ebc9486ca6068d969ac693b699bd0cc1abed5c87d314d0a68078dbc0ba20ecd5301291c15ad053354b1cc6f98214082436d4b4dad0310b93bc441827e7da87f90882bfb1075c5044b7024716a4304d5a1b536dcc550fa87e3d1675d5ac886c9dda7cdbe40a1ee63285733fa907e62040d4295c0d8e22b687270aae03a2294123c7efc20da40c740b63c0ca156ef218c4b7404ad80da0ab88234270694882c0374d3b3ae04864185b707028767525d7ab06b1c6741eff1e911eebf77e89aee72f2a524415b28006f7f5e456c1af744cf401012a91481be6fe61b40166e8805835bad967a842e63d79150cb9e8c17a5363485b4f98d66c1c13787affce483ad23cabe4e060572983860507d9f596afafc6ed3587a77f70f054e33046304c0bfc01aacbbb72730d15aa45ff08c462c68e99c442d5002a25032daeea86161ee79f4da1818c4124f7f02697a845a0b848c008ff1cd3b34b31feed52aed9ba1d6fab797f2753baa350e6ce1a489ee3b306519ccd274c6f948b4761c92c96f8cbbbfc06716e5707a0d2070731442dd2f744b907179925cce1873c8a8a3d90838e047df065f8325a8a22143bb169c6ccba80c92fa3caca3442ce0c6159ca6a60bac1c42cb9831143826ee31f5470bfe48fb721b3c4f2d259159200dc88a79b6e53f13160f53ac24405bdb97381dbf5d0704d6be870bf062658e001928771fc32fb85164d2ea8825a2c6328614b0f859aa211d14b5254670e1228457358680a6875999c178bfc654a69152bf0e3f0d25549a29e5edaf501bf40cc32936d48ca5a6d0f835a3122970f0bf46b766c482590d3f18cc26041774286afc5b5f2cbdf3cda20d1a47ae481c52dbf8a286d5c597397951fc922eb007947bc79fb8105b6c4d76eada0d42cd103dce66aabb25dc383d49ed440f8f8de8312c0aecbe88c153f2390d7789ae82cfa800787cf9ad7d38a44b3cd9f314bf9b1231bde51551ded7a05dcc18a02d23e2e30e193460b82e46a20e930dd2a616f931fc32b9eaad993e30f138d1424fac57d29e47fe2b6048f29ffdfe644c80d2ecd6c26f66db26ff168dbdace0aad08b14a7f00327fa41e67a03d29a45ced0ba6a71b39a3396673921dde0e0591a1be44837734b7a672d9bc70924259eeb1c15d1a0654b664486b365674d3daa6abcb649069473fecda8cf099080baf8a1774cd6e6786d12ad256e3bea11b21b2af36144c0d534251458e7276e139095efec5e1b5ce0842900e4047d0732c69cee766074c6dab13b6be7ea0f66bdce7a10aeaa5970ee1920006143a98eb58489852d70a023c1c1326d836baba9e1e0af5ba5b3a291bb02777c32680cdcef3021e41729c0cc1be7ce967027d3e16ab8be31f4ec577c235651494fe9fa22b2981240a5453060cb54379dbff9006c558eb875b49ca9b0236f365a245ad57377cbdb0363ecc5452bbbea950e16d9d7510d9cd902098093604f8b422a897ca8f0059e9d54339f0c1ed863dc617c236aca276eb33bb96b9de0e9f0013e575a59122534ef7985e2607fa0f8034f8db174f1d38beaeb2dcd1bb2a49b56c0f6cd4fd59a5d076409f45e6f0cb7e84b67a3bc1fa494b9238a6ea8b44327fbdc217352b48ed23f8f0f3215d7f66550b33aa3aacc70bc98852907a7d59585d4ba65201e0dec4023593066d0d32a86dc1eb8a11e93fd612a3664421224269538069b4c717c0dd033775ba4c779035bb078e9a28dbd8d9c400cfc96bb68a30cf3832dc7f9a91d7e7f04a91d67dc80c3b730e85a3fc2ed0f4aab04982a54b7792851b0ef2a15dcb76437bab7e46b2f1654a8b9b8a9dbd3a5c19af022a59068d63fe104de8c770cff7e3095989fd4511e51cb3cc85149fda2b0bdb592c37bd067c9f557d244500f90945e56bf40ff011f7a6a0b564ae34aeb8d361f869314b00488641d5280477aa124d04465e42b000a0496351c23bab7c29cd863fd77a591cc3962b166445e32a273b54bd419aa3402551220cfd799f4ffe81c68060ec20109524783ca6b508f8d6d19d12975e54a379c48e0b7e93c48e9b207a02edf264c3e980e911e0642b823b3a78ff7d79c0e7b83d5c40bcc39388c4c18a617a168d30c984106f514ade7da53a9ef8bd47f01e7e121179a4cb9c40a5f5a21a1919f2d92731e04b4159014688a901193a2ac50d05533af514dd85f83199f058808d2d1779295f3a86c14f5a9fa8d147c0cfe8f35975faececf5d92c6d9f2dbd895cdd932fb0fa2b9590b9c2280df75d6162e8b280f74700ed1f831ffe1493c48178bb6de4f56d335dad29b330ad713be5a0fbd2665b643e18162b86495e42589859d0f98eed3156350ab0309a8b47402fd12ae83045010f2fc49e459415d4f976d98432b715474f0911205066e4d712473ede5356a82c319b1c454423f3c77967bd25f96d53c7198d0d2c79391c2b1660b79a98b7f64f6e33095c324e8091aa67229fe45c958a8c47d323e947528f7a77c594e4d5b08558c61d52f2222e6c30699bd67df14926e0ed94d99e7ea15c53f0feb216519ee10daff91beda5bb02b02ddbf3eab61c42e3170354aea7465348115da0db47e5ec099fe5c4bef4af8d522d2cc0f445c69fc03e718dcd33c3be2ac4d85b2c118444ae193952551aa9c447d8997387f5b81d60c68c0ff86261ea83a47c6ae9084a84c916194e8b7e6cc88453d62672dcfbe00bef9cd8272643b922ee6b3284d6bc3c94e5abf2aceff96d8c0cca001c4545d40cb2a96d160f2d053a0da12c6205a49602a35d6965eab107ce7acf27081196e4fd8d42c1dd53988ccbeffe8801bb31fa83e62745e23f29f785a93522e336ab0a81478cfefa9c9073a82ae56702545f61c7c8a5832269571e174ee1d0b0178e1ff44743722eee46cb8e7fa3dae40ac8ffa6574e64af62e5d5ecc59d54ac4ae11684d4ac417c5bf1214da59dc579e3cffd24daae6c86547a44a84ff8b03c43c613080ea05aabe54b80e1eb9a2b3cc73264a7bc628072d46005519547805566c0160ef5a6b3f837526fd090625a6035aa7b540d64c53ffdbee53be28a956ee158baff5eba31474d2c76e03ad19c38abf366abc7574ee15321878675925ff2d650271808e79bd1b542b976c0919f2d47043bbc645de85a9938b6b2798c2c577e71549734b7a05d54927ac02efb82042fa5f0077a45868b32e7cae344b55ff7611c7dfa339593dd3d89efdac4f70cb2ee531a0293ab9d5be6faf9e9e28464a5366e74a6fd785c966b5468201ecc184e9721d43ee24389ffaf631b70bb43536ca50b5a3de4ca6bad4080d78f242a736638f4d30e9b01195cbed9daca9d49efd7973d7121e317cfe2f8067f180592548bcf78aaef78194478a48bd3b87b80bef69c393514374afb79815252657125d37ebbebb7ac328a0426014721a5daf9d85c3de8e07b75436b097a3ef18e978accbc8ae4bfc843a3749bc9f0f01796dbb286870873cd7048552334f43cc3bfe4a5cdcf7dcbac47975ca5224b4f9e2185f5314f27b7b76435a74b2d6ab595a61522483682728e1c23f8d189c4802e72fe86c13520f27d926c2069ba146f2fe92c972491fde6a822b7f825396b58c214917d5d31c265095fe39d793cbe6eed7366c93ac9c7fadded0d608c5df308a4a937ce8f3f4dc16a9c20cee5cb7eec6034c16636f48ed032e0be288b8d2cc2603016ba030faaa25efd6730ee93c01a3a0d36fb7e42c618deff37a00b567e0720b5faa5a1a89cd79075957ce2f98e27ab9dd62328b8c2446d3d62bb919cd7fb15d225c258239fead2378741bf9feaac473cd9f3374f1ff095b6586835f9975b726cf91c5966c286411e79a9f1d528b65797e7032c9b2a85016cd08b4188db032cc1a0567686708f45d81d9091a437b79de3028621280171e3a52232e237098add080691cdcc2552767a21eca6ecc7a0817379c75e6e61d632588266836a72d1e4028f40525435b2438295a9822d7376a4a4bdc39b09a46e43597720d65dc650145aec73db35f33403bd01978b7c116d90fa3bceb0c711ee13c2b10eaee49cd6b1c113ca8fd770436373d8dabde6190902bcc942bce8b92ab838e024b809f156637c5c323a4fea610881ce7052d3e2c8827deae795d95193f10179fe5d56f1002a580c5566a96b91c4b413b8ac52ceaed47fae6de8d73c1d6ea94c20d76dcb0e39712d4eff5b29d4b297c04947f0482b40df49cb6168570defd7eb38df5c90aed89cccf8a4eebb94bc24d693985bc0dad20b2a11d6ff9dba4f2a7408476d906b407e3883f4a5284dd318251e71c3dcc6e7977b7537319a46321817be25699c0a50029766b8c85af3fabc0a709cc5bd76f9333caffd26a55bb5df8c49e9a6b6a9cfb1f1f50dedc69588f5718d2f1e92c3a5ee916ceb4cf7583cc1ab4c0e2f0ff1766f98652c5cfe63f8e67f2507cf775558f23b48131191da6fb3b556ed6fb15d1b55b37f303d43651efa188e911a61ac057972759fd91c5fab4aab1b7b588ee13a8e149985fd6cf1ff29e5f7263a905f5096f7ff57b90673bc89c526cf1ef6a4842a24c2cde8134022d04ae3daf04218e0bedcfca8979d3716a2a990af2876545797b8d84262cd8e03c9120d16a49b1842925af341c17afee3ab55889c3273d35d6fa90d1e5a544d3fb1752e5ff039b8eec52a93a614169b12a11ab950d323b16aa54caf1454b36f5737364a662cdd7f5c0c37029c6f4461affd8a17c8debc594a03480c7d2a6a7aea5659b289fcb6dd0c05dd8c89383392893dbab836d3382b09f52c8ab5702790e43c593dc8361b72f6e1dfdbc4950c8af6b17a2cbb7a545f9e91f1090606c2f85a6990d74252acfa12719b77014a9b785d545b5fac50be3d7faf05d45353107b0ac5968be0d3b6a91b755ebdf5b4fa4c556d538475ed9553b962d95e7e3cb34b05a9708ec479e5021a654f422d352ad1b43db0809f02dc00da40370048225e124b6582d7ab4c42c4f48ec0bfff505910ce5a0968b00811ff2e378aa8fefefc96b6d5d82198b23d1a572f7eac2935ae0aa2395b5e9601896d29d5777f35cae8441f69b8c8f9a70f4c0014dae47d5d5a10f9b64422b7df523bba6da41feb01a95ace4d0a28b60bf6a2b8e7135a14d5d19786e97a5aaa7510bd4d044b041817c2d652843081c058a6454830a6620a01fb8ce1d6ffa224b334daace8a43982864b25fc73b7be00d0cc60ad241b35dc3fb895e5c50095402f3079b0c176c91df4c8d85c4876b02b402d35243498af1439af0bdfe6ccc178146ce9770b00a35bf02bbcebeadf7c7b0c5f12e7518c2a44cf0e44ac64bbedac7808de7d563d87fe25f2b51da574e6e5e31e43ae9c856923ab7eade794c7ee71b604a80d29f8574eb16aec93bfbafd7db3a73c5b6404477dad3748095d3ad4090a0f86e1d64523855baa71f31f32c7d06183b8deb1c98b160df4867348691d45e33631068358fe1c61d16510150fff5d80115a008e2747344d3cec7aecc9d257c3c44326ee009e46cb3b3110f928aea5347f8097a6e100c5700b73e1f043118620d3d13876ac3d8d95c52534099aed605337dcd7f8e862f2443521f00fe8cf631155efa12a8e58dc5cf6ad044dfe2e766167103086c869a87d0acfcf8d78ab988a710eb630c38362d4c05de067071ff1a6d5faaaba2a1f74fd7b8e10a56685c1805f67104b5bcfacb6e32bcbc5d07dbbf64730963e62f3afb8223266081ccb88901322f1ca5b8e450a8b0b015b29d407d3f9a1af54680622a8b0c2f0ab39814405786480203cdcceae956bd09bb6804e61d7ea2d8b11fe02db61de9bf412058b2864e8064be0f3bcdf2914bb5d0196f7bdac98db16a268b00ca1856fd1446b63e25f1353ec2dc744f6523bb856bbd92f90c4a2a1d0b673244a8e344ef5701157796adbf3324e75e7b77572f56a819a9b1824b49901552e9d255b12577f84bb1cc3c00dd0798dedd2baf28ad9717d968d1acc9538764c92a8f30e3ec39bfb2bed1e4f93598fad60c742007957ddc01746ee387714a96925725e0928073c41f49a9d36b545db9af86e34cdca0bbc83c7fcba0b69aca0073c94af01a3ca92ef61d4ae690347170cb0f2c70c4db65554a36ad64851a70bd3d9519ef6756a0ed00119908d02e2895961032f5f228a3ebf0262dc8755e4639d4baa2a5ab3902a3822f17cd76cc8707d427fd16d551f30938b6343e015e10024266e0f4f0da33d58b89a46f4bbec995aff426b33f0e256556e29d8b86a8afd619f4ae8c53ec17f09d4c11ff75479b02fe4674c4cc2ea69a93aced444e033d65ce5f3c2a7cebdb509a1925a215bd343ef758dac6db3667cd37641e9d0e9d3e9cc679002b295fb7f450d12883fc827fa7396ffffc794cf831c573e71fe1f8d3336d04f0979daf11d766842cd835c7cab16937e21765e237990e3b14cf77be3871099374195c1b26df842321e1a9eef9a1fd356074536ebed371393a408e64d6c5f5701a6d9abaa26d4b7d7be36160798f5d879ab952067a50a86c5fe066c808a45566e2325a05f762e91bdfc64039bc69af90e0bea459907b8cd504d01a0332cbcbb371615fb547d707d886f25c6602efb96c38c8df40fea9a0c2892b13b1a8f128294c2fdfddce6b8ce9e8c261e2c988b2da5fc0b74b52fad475ed9246c361f4a75cbae54d6fccc88e9bddbf0abf2a31a3674212a2fb94067d73738318a52de101fb9ddfcebb5995e77c6524a7c80ffd11f4136e0b4afde3760776e6450c3523f99e4d65c61cafc647fd3dc96e4aad7d7c1f2d97abbeda5a8af949804fc11b0e1c454686e58760a7925fdb22ca2b4eb7eb11618080e8bfa7ef8cbd658045550089358862b5ccca642a27a1ee45bdc78e69286882e97add2b9109f128b2b124c08448c61843f39d294b9e89ae101f14d5381ef64868fe89e26200435f1046c1363d58513fdd86cf79712dbc496d82b96b82a7b795bb6b8352958b6019c8a97a81d69aaa65cf497006806a0298f864537ec157598e8c60f7b4675e3060fcaf925057745658f5f2b88d751c973cd1f2064f9a9380d6cd495dc9c88f9765af2da2fa04f92f96daa479e199cb7e4e95de5f2d81a6f2b236368ae65635da40d6bdd7a9ae5d67ba63e27a488d03d39c11889c3f780ca1f093981107f73456d342ce25e67c3d19da7fc4d8956ba99b688fb2c1dad6b324ba6cdddbca17f1711a5b612ca334bdd06f6478343a32eea032b8d067e5bc84ecf55603dd46c3c1ba9c5d8474e5da7d3c8560014deb4284f7e7b70a5a62c410071cf683d07e44d79e83381cdf2975383457baf188aa803249bb8935d1c5ff4f39c2c1d1bd8fa3a19366b7126e007b036a66e62684ad33815b6c4002ae965bd6066323d19918ea17e8e51e8bf9d9ab557d2c48aea73730188db144bd654c0d37baf801f8842293682ed12af3795956b7395bffde34b8d65357d9eeafdb8f04b89961a1c159b8e9758345b0e5fcc01b6eb1abfae2e6b73371a8294d824494e6137df6080a891f686ba514846ea3f7b89768ab7c2482bf083f9c4086f68dd38ef0867ba2a991906b1309b8736986047f5b4566ac36a94c10b62e3a62e20f00c890baa67366917f0b14eb328bd70bc330d4358006960289b69e8ebe514875e5abee8e273c9db0fb6949b94bf9e7864c4e1c586a744b7d10d3e5656118b36dd79a919d73ee652d32708f8d233764d438b19b92c2f4cac08158cc8da1639303d84735966a89223376ec2ea88704683107c064908ede8035165105efb2b85836752311fe7601eba3c554d7590adb4691f4dda7c2b550f20a81bc5e008162616af145895ca84160b9858dcad74e42023868d7b5ee3093021fff955ea048a74d1d26464a063b9835ced580aef45d7e6cbf8a66289c26557036a5e270bcdeb7641c27b623e04f584cfc137bb4687b5d95daf1773681d859e0c2bafb62ec44a2534cd51cb2381259c200fc7a76bdcf3f91e6835b33da383528002674541f0701b1e27cb8d8f02223899a57a54babc3f1aab7b9bc4bd197e9a6b123dedd6e6e8196dbaf32aa3997816617cec0ab8234f5881249449f8fb197acfc16b7c12cf630ffc10425bbe094d5bc715b23fa701aca4a700d25b0e8005904604a0fa3c01a03b474508377a5cd846a4944363eea0db8097a630f1a0933d31258af98cbb6add488b1798c7ca123bc2b939c2dd496b733d7f9ee77ca89fd013f0a4bdb1de700bbd6b800ce5e356614e8de7e90916d773805f4c2d8bbd7bc13bfb3eab83d17e5243d113d207a91669e7954acf264dad68a51611cc519cf453d07bddd833c3f04d82521ea91e716ab77e907ecbc1c6deb4bd6183334c4056d5d00b0b63498ba06319d795595fd7297e90f48b679abc6cc209883de8d1e69fb4eb10ed16e67a1c2a697773c30e41c2d5e54acd83c9c5812111da82217740f481cf94587153d5d51044ebef6e29d98710513698325208c8f742b1bdbb5a0ae00c649c51f14251706a9b010ba06b75ea0fbc1c24ce8fbe719d0430833760122dbefd1f82402d9d606e66cd1a5efec64616e019b8abe213558bcccfcb359a530d69782d4e8a0ebe52e06baf9eeddf57a217ca12c056161b71f40012072c2e6a96cfa9892f9398e50e8467909d5cd30ffc1f3cf77fa3d97c18e04c48a4d9c44143d4db8906df8480ae64f7339f7d3a9cd9367e3e01a086998104902602ad78d3424c2cbdaab9fc12082a433a8b7eba1baa1402d6ada92363db57db5cb3a0fa0f5a9c5e567916f761fce09c9900fe5bde6971b142b83c9eb2b2cd4cd71c84b111b4c319ce6471f42c3c98a84fb0318b89501d6e25babad025dab63c8f1a3c4943bb6c1f28a88f06d3c764b30fac1ab33b338f51dac846bc17985c210d8fd0e847ae5b1913e2d534caf22ce07fd08b389c3f195b40e8c87b035004d2d81b3026088d0c59de3eeba7e39538addf6a40089a86c1243adb60ee31d5b401a16e84acd7d2069a38985f769d6dc011bd15a076365e13472a9791156016dc3dc1c2b1280b79b2c26d3ac4ee6c4498deb91c2fabd197583af8bb7c187da6b38055bceeb2b60a8ecadb78846c3bdfd4738b9b8ed072006b2d4068a9349f49a55b35b348afb1c11603ae6c0219e1a2a7db8724f6607e926d0d944ca2bf28b2a73a10c07828379533da0a23c5a2b5e0bdd1f67f2e49b478caa8857dabc753ceedc6fe798ab53f9fbcc94140395a15c6e75f6e64d91f715de20ff1ff2d5bd8dec796da160102e1fde3dd81d5a3664019ba2a713d36b486154413e34159b00dbb1ef663df4385ec133a10b19274e4350e14ea863d76d0dc384e07ad8840c8f232a1703658a177f9cc0b19bb1157805a3b2ac49efc6a80324a80ef1a01410ffd876cd688be7183b1715831e9810bf6bab3e3b7bb20ced694e3391628105fd0f3fa6acdfb0f084530051366ea15851e45f1c84f8f3d146939584f0e9aeb0a28cb99c2df030dbc1bf52f9d98ea09d27c93a9eebf03f5bfce1a6d4f6fb3e3f1eaa155312a4bad04d20f857ea76aebf6f5781be3d3e1181d857da6477cdd862f2ee3da98ebb92a4d2f8918ecd6d09bf1343a4bec73b797b267e6b40188ad9e9fe4de407d760e4afb9f891e764c9f1b84dc5e806ee21582c399a594a7de596bb95338ae5dbf8fb8abdc01db974efc99dcaed56d1350891cd1e70a08e29b371b39946528cf55391de19f0961668055449ec9dd8745f18c7c5a603d492224c3c2416e21dda3b34e1e1a6f9c3c28ee20bddc22a22cb5b2b039efcf66ff5ade8b7965fedafc784bc2be71b986d08f54fc2489a34f6832656d84ef1a02e223318dfe1dacfa3920afd3ad939e50708465c0d85b8c81024f611d96202785e75874f56001e0469c2bb5f7e48c5c64545e43a767d0cf375a9e2b884713fcdc55d52755b05b75520b0739bbd300ca37494b841b06c96079b4edcdb7e90426b00ad7544b3a9bb6fa317433d0dac02c1255bde03c432a702f3fb36110359460152821ebb1b556f228c30497bd689391d03da71c6486a48c627b02db7a58f09c206cdc4a3840243bbc40bcdf825806c4cfcc41da6d1998d3f69d3a5b4e94097c8e35ff8282c0944659d0fefea252ea31b20429cd8ee84026694111d386e71667abce302bf079b46ca38b02e24556ac12bf31c8bbdfdb882140c2951d96e331083c0d668a7e28f0ee60656c1c0747787c7b0ade00d904cc3fcb05fc19526919045ecac341d3661d2c392aba28014c4e8e6ae58f3210cf8f2a8d856be587ada3bb771e65138ed899e6383dfb9ace77afe7a180b3bf6f46082bd26c776fff8c8b1862dd3db74c580cd8c5905cab6d7e3172dcc7c3310268dd45cc821014e030d262f08bcb151ead1e570710a82a453d1b26783bfa310ba790f84ef119eb5f40554e80916541b8cc02ec9609fcb4e1062825d15f552270292e274e2b06a7d66c3c3acc40cc8aea5ada23c9a6d5f9d31974168638a4a6e9af5c0e5c32d3174030f06e0e8d87149d9247d927a0a6b0278736ec83717e421ecbe194d968ac37a9d6fd3cd70207ae2c2c8b7b79b430c853bf785e2f13952b9cf861306610164e8606d82220cb1a7d639fc853185b308d1b1728f83ede6296d9ae1f38e9f649dbc6df80020bea8b2775c073092464f0a2a637dc26e8300b06cae77232986d155efb4aa991935da7a18851b9a5f32a6403dc85b8ad362acbe4d878b9de89178da8d243ca5b710d7716668a70fcfa0f15c7cb84a960185868346f74b7994472ab235e8aa9ae38ba1741e8ab9092b96c1545b1100ba3b01adc4dc7adaa0ce976e5fca50e07e01e94b86622675eca53ca9cec1ec23d298e16a1ddc9651cc2e1047df2f24d019a9b0b9c752e0a50b097256928405833b5c1b3296569b53b0c3f265bff6c15a8776f8a7739a2f700257aad7c2be038af30e7ee5258646c537172ac9edc17caaff92b7180952bba20f2a1d4b9cb36201e0818ceb655565c732df1e53583161b4c85fa1187b7eead3a4b36dbf2c7d9e01e3dd56a966eec051f2a40e17321ccdb5bca29ad458ef3a1d9195dab15697ea4f36bd54e9c64f042cd13d205509f21b3e9b7256ca97dd454529a07372a92c3259a0693f5f2a7252cfde2b984d30d35da8b31a79c8cf7b8811b315f1f92a6909fa22dd6232f78212816b915c8c040521ec331756777dde0586ec598cde212ded33b8912a675ed05207bd24b0dd087b86e908daf667b38087da0d053c6c3750b91d8f0048f5cd8ba1d20fa91c2f93f125b18cec4465ab4992f2ce56c5e0f0b28a7c6c4094c6c1d539e0e11f6ae179ab26811148f8abf48e27c98990d1e358268e92f69d326d5bc143f4980cb94ca04f1efd152f0018d3e413b5d9a5ac6f79e4a95749f5e7680d9163ee2595900aca8b9ba9602291fbda68d8a0a652352882d6392eaa73e440ee49e0a0ae24d5b40b2dc966dbeb5e04bc1a24e5c9eb83243083c133df307bc759b6d3b206250d41be4059849d2d61066f752135697b62978093609075dc3850d2f302ab5fccc0cdd59bba9c625c751bf253a3d11a559cfb4c10febc909309386998b3c470cd86483b8971cc6e0e2b58787a3efc6143307390ef4af6418ef2383189086ce4224eb7cb61688c48c5bd1560af929c46f6ff6be556ee1ed5b4706b204bd434d6a76e01155c26ff172b2830b61b4be36e18bd9163b709ff575702284c0269ab656bc3980e731035317cf9eeaa36063179004a46ff7239009c4b440405d31df154535959eb546c4e8f007aae00e0e4282dd75d2485b3076e02f8c9fc8b2974662d185e3b42eb5b0705ea5bf865a968f5537fc75f28816016b411998529c52b180bafeeb24503a785acb1eeb2a88c9ff65066c8ddec3518127b957e2bde80fc4d5eecbbe9fbc6f0acefbb3eaeab769735a88f1d24b737944d0cc23431257e636bd2cce69d5f6c24ba60ecb530f594d5e289f47ce5182f515bd015eff055d046645266eb6f172cfca63b428589e216b4100bfa4b5a9d7ade8b38cde3470e7dab5f4aea617515913da12262288081c70d64e3cdb2c82f3a5cd299aae4113273b9e29a710759a9bada780553f84dece262cb92cc8f605ea616d2a20bc14838bfa13979dfcb67e192b4a124c15664d29770751c63ce4862a3433729b732652fa085ae74237831866b045571229b2c85eae3e8d9149dc636a5ab1f26e781efbce5765ae944fb8c079e62f9579f69a66d96a8c3bc6da2179561c05a18e7f1b27a49813fab4aff8bc52640a6eeb9cbb259cacf1cc2b87f98356e60a720b5b08b6a9b483c01d0f94a67a285766ae818918882e14281de829b8f4bfa9eff89728f5ca20bee41199a6de883cc67b9475cc0d7bbb7488d37a30d8c4656b0bdd4fa04131722101890960657334ce6b4a221436f392a78f7d0a69a07dfd22508ea10e772842cd61536a302ed6662a0f944495252a522a4c4e4debd2f17e196dbaa95bde5b662edade95bb8300adf44e832100a73f3113c08a4410bee60b8c56be4a9424cca088378260828216ddbc330a4c5d084e0f5dd4f30355694f78e9f9d12e18692b045918018760630fff975160fd9767d67fd177a01ac4e95eea066385586fb0cc53bb18bfeec712ec84ef83d983fe5f3db3b8d4008def671fbf4efd226a33a4f0eb1a9cd179964fe1d0c8946a6d762756b55bc3ce6536f1c92a9c94c3382c02d9831abf6303e290a87eb79c3657d3f78e58bbf10d595765472ac53bcd38a39388cc67d20b35932590e05a522b9b64dd2327081d947f514244157d9750f7bdc47b91734e965e996fb4e13692f3162b228da3ec2866dcf84815dbf902d038f8786b949b7c0b557a455eec40d9e14d8302ce46736982132d26168c25077cee3a5dbabceddf8cd416a5346d713876e661b938967be9f76a1d1e0a81b2f07798e51383ee66615a67387a15a63a1667942a6f368f59cb17967c09f92f6591577d34aab6322a27bad1d15626dc38e0cf731ca29fd1a341476baa0ea76a9097c0478dca7887272d7f70a1a42d478509b7e1f38b539f168422b82830382b7e5e62e6f70f1fa72d26892313c3ac952ff1b05bcfd62e336057b2e4daae6dd4b1f2e2aed391cd68f90397e30a6d9cea9221324d40ad9a1a229980fb1e2087e4436c97ca382d18136787115fae3270cd8e075e918e471cfc652f28ad5cea175029aac8c8a2a36eb8f5fff69f0b77f50e0a0be854cf443aaea408c23d7309eedc0a0428890f903dd3a853242b7aa74a0424711311094e81e2801e90240be5d71666e10d519732590ee241083c97126801534e7218ead94f2fe1feebb3213dba71b6c71e382a2736c9d59809e0a6fbd06887e5938de50410e0e1eac8f26d84e1b9bbf848c93aa447a4e2300a266bcb41b6afec59e28394284c3ce4d85001a42219df1c8e9f8ad351ffd8344be15d46ec0c695c1ff68936513a9a02a39e41941887d6ff33b4ab78ae0bc06ef31e7cf6eb9b2db61e92d20c522846e00a29a9eb8703cd69d7f257a5b4e91872eff6b1a39ff9e4416a88d6214dd8b75da230ba7141537456bd6dbabfd7d4a4ff9f17b5fd00dc833ed3c2f2510670690fae86f0e0a54027eab9885fd04876cd9191c2623c53400ec47599404a3fc7eb003bee64f1258d8dfda791001f9cac63bd31b1a975fbaeb8c602c0ea62b272f1572686050c0357237cb8478508e7f3c851fa142500acb32b515bba690f462306b51caf3ea418b5ace23c397e01fc211f88fa0f7f34ee3b4a9d5b813f645b29b20f9417a8b5f39d8c9a24665b2b8bac025ce36c38d0e15e22828de6fe1059b82ec04380a89ccff6ca1c54e25ae1c397834a7ba0bd4179edbdc6442825feb81b5f2659989cffd66727e835ae68e896ef310b1d4a4b37cea4929007f972d40579c0f6e674e957d809739244e27f969673787b4ed851f1f771396cafd0124c07c1fc8b077cbd3384496002f5cf8e6a3517758d2dc9fe0a4f9d45aa4b6d0c34f54b00022a60b8aaa3c79c830f9fb850383a9603f4a21d439f3afe02888e13a4b33fafdc7883ff3a7fc55a998c674196d11655fc6cf07f262bab5e099f7818eb15fd4bbe2d845109f7fa0095d8ee5f0598c221cea84ee45cf7c8999e2f2bbb93caed36d0c5fc16c0ed2a9a7abcfd3d33d77f11e1b37f1636c3e3b5d99bbf867520179e6930e12751cb7999ab6904f8502370e030dc3abccd2ce876fbf7cc669a5ac0eeeac949cd1a3f5d49d9d364159040e158f956c2fe81a21640e148811d0c881c9681cbfdb5c836a040b9b989288cee074cc5ff0a0b241b097d31f8a4a3f8e57827c834a5f1411cf594a370f3676de313aec538f6d0aeee524e2be88a5b97e1a09d2dc8a562a80c377c1c1ae916c8831f4710945fbb8d24df9ae382448477131cb01f1d7113d2a0a59c60cda7a7cf85ef631190464c0d91f433e08cd2b6bd5942687bec85f83a0c39485ff5c384526dd19dd78e6fa04eee8a50d555e2a410478cabf2c0a737bd69586c86463725891599628560070c76d9e6cf7c3783123f3673c4e34ca7bf4e09d1cc413d9a9de7bc1e02c2983ae7ce3009e7535af8d936ec6c82918b0f572e8b5fb787a6d3a60514427dbbb1f120c410e670c5dd82684f3eb5d9784a4549ab268a6db2f663d8f98dc87f4e60b444d7cf533a030db00f790e154d4696c03076296f8fa3815987c721ebe7e31a561ac34a4b0d286ad9a814778061bf5339fe792f086518a4527e4480baf70acfc309ebeaadd97b7c3cbc53c44c47d4ddaf9939c64c8e2820203664a2fbc01dac2e12e21d197b44bc2535e6391ecca0b0f887502edfd27b26b111810f156a9b9b4610040325d7c9263b24f47b3d748f38c43f05444817a4cfd486cc59552a3034aa385d62edb5614ad8c875206d88d475d6a446b133fc2a689b992582fa8e9b2e992a078a022b83f8830c53f827a4da6d415268b6de7046c10d3757a25cdb69aa5048ce914b342a8c2c812a26a00afeab7c2224df3c2598b2abfa38d4bab47158372ebb0fd3727c716f0bb31977d359f925bf05edd5ea4910b6a4c00e18e7d4a839264cbd00ceea717d936b06a2af6acbca10d7cedc35ef56138de91cbfd7870c68e047eea6e99a94991df25aea41592e779d6a96a651084d2b7203172c095d6dec6b124ae54420102294157fe51343eeac6d0d784a3090a6adc8fb7ea9c30a0836e84551f2a17632988ed7d409928b7c44e28b1d682211964779fcbc39addd48ee6a1ea427f1f6080d0727ac5518ee330542590cc1b24e41ca440bb3a09c5c18500ba24e650032ab2fd4fd2d1ebea720ef7e478089137406d390bfeb4a3d68e597392564e45e955e2429680e3b98ba583dd729d50b2192baa0ceaa6dcf7d24e670ae3eb92b058791d6edf6cdc2d90a41af5169459a456afb895e37b6d9e89aec9e78b2640226ebfe20e68f0decfbc6b5adc224355550bf89654d5f187c7735a6139acb975755e73ffc44425b65dbeb2b92440c7e67f6213dc4bf847e2c42284753cb2028290092e6a853438e314b385b7013cd80b23a2f68e9fd5a578fa0d1fb4ba1eac5e7c7a23557d31d8af683774d1f3749d3ace646c70d3b17546adf256123d841e8ff55b45d09eaa2e35ce9a4dcb246f4260a610cc1f33820f08cc50310ab6b33d3b879580928f6f6e01c3642be27c88fb2003324f398a5b522818c6b0cad0156f429fb32ce5b73d023bbc5aad2cda61b214351b0ca4f848a2a5bcc5bd58b4c3a117ab347ebdaae5ee95ea7676dbc189378a7ebcc08964f318e8a454658a8958d361b81a027a3ad70accc083a9cf2223cc72e6f1a4d1f85c8a7d858ebb1a7f643c2a00d38a4315f822b71ea40701b9b7c8da1923aec55b59281e138d1a12b7d0e31c19a3c6a8b6a808826cf10c70181a897fca2b79137c1da26c41c020dc73720fef070789c860899e11c177ce16fa74d94cb7697a4268b53b39e9512b6d7fbf51a6b3d0dbabc0f771ec8f3485e2d3aace18b5a6de58172c6ad2a8af6a57d684e1510ed29b3c56a50187018f1609858219ab75e8be6c1811e18706b13bcdd8b5897a5088db70edc033ad4489f731991c9ff5e8f272045452c64e1985cb08b42e269e9c8919842017365bd04f44685d6dc3fcd5e3f7eaaa3b88b1bd41dac3f8bfcb32408192e9082bd3b1c207057628d5cc28b0c73e6bbe701cf693c91ab9e4f25aabf52ea4d995761c94d65088bcb0a7b250f3de9f5854f3095016a20d6693d0d41a42e055d2681f58da6900344d3b4b8bcd336846e5fbb53dc9616fc89e836360fb1d259f987c7f96b6b83e149e50fa9b96c21f88aff4c9678165e961ebb81c1f194b26e0e6b8423c3dddaa0b62bc9596e40d4b4543b79552222ab78324dbb95cec4d2029eefdcf96e100147b5fe6ed875fcc87af00e0113017a06e66b764564cfb69942372040560a3e257709346c3b006bce41fcd431d490c09f2812fe8fa4482d718b16172e1eb347bf4361567b2a806c51b1006ca0389cd01e7365dc6c40b9f19e0f57ca983124e368186d1de3007741225d60980f16584249589d9943b80d4f46955b0ce46e4197c228556d8885fcbfb99506709d929442af5530d5903875c2504b7058d14161a84a83689706c668943b77f7ed21662b04bdd7c152c5cadf2e1f7bcdbab5d8a5dcefe3b6c30df07b1e752fb3622ff6e131a71049dc4c1b12658591d34a0378d57b23392337ec1c116083d0d03efdaba8ea5334cbce442416c5a56a655a3f461f05b895cf25a5925445b06309b1ea125a51231bccb158135b076e0e710f4831121f744427ec1d422124941644d89a7b0c3493dc55d196affe769ecdad8893e64f000c1e716cbf499722f1337e90127a43a150ecd61f8ef44f77b22a294600636bf96dd940858e9389d435dea3754884b5461002a991fdb69bae4374bc1e6740eb284b5ef77565be6e7862c9939d1a3368c55929f5ca12a0bc7d4209e607db5dffd73ebcc3283c701f20c21b05776502d9e466ba7c90289ebb76bf63948a81f081c241f89bf8205a0aebcbbfc26ced646ad3d70a19a87d6406472bb1cca2b074b955784043350ac609f4558510c746111aa1c24b4062f070ded73c62d9de2574f344d42cd613126c321e67db61bc0e0f4b0bc3a20a24eb9ab9ff4afcc84d88b995e169b6ffb01938671e5b63461dad49dd17c1380caad800e4444bfb91c3bcd25ebfaba15b5e1da8fe92c57706b66b72f3d0de68ff4dc75912392b30cf28be4a4da83308def8756220c59e73f51013a8a3ec1d111b95f5a51f8648375f48a98ca8ccf443b4ad8188cd61d1d477e5e7f6ddf942db6bc9cb30ef63526176354600cbc9fc6382da0cbb028d4928f8504ee6431ca618d19a3aa4a9007dc65b5f21e632f46478aa2544d74adf6f3bff397d8b23a577e53787312b919529441c01b9fbaf4b7babdde4cc57895e29d96d809372b357f7d18c2ea14e6ce1a268cc488343f3ba66bf5a47fb72cdac1d5aa1ce08be8ab19a786d132179ff0e22212eafa30b2db6f60ead3746a420abfac8802e2d45f0b3f376d0e7b2079e2b849b771db0108e15abca2aefec1e55bbcd45b2d2f5375d131c1b4a93ef9bfd3eb140043d02337bd9e20daae0c8f7005de6dff8465995d7e923fb1962081936809e6fdcf254417782ba4be4f7a28bd729a9e961c86f453f85fcae04f9695e24e147b15670e5a8e07d252a91bedac540b55f565c8230000eeaffe6a6fa68b46367a6107ee406fa9008a8e10b60d5fc9d6c86ba4c9cd16455209e5273012034d00da4ed936a4c8bd0843d7e2a9f7be59af97579d3b4b5b85c6343f12847e94c5bd1c777ea0ac38022bb8c18284e2c52c6b23e1e0d0decfb67a7d11640f86e218673f8e71d4262dfaca4cce70981d12e6d2ccc3e0de002e10578a3d38d08da4d1cf28f13af26f6c28eea529038f2be68e4e8c803c3cac4e2e74b0e85b25d3c11734716affbe0933287195bce64e22434b49c7e750c2c12f3e89860abd13057ebb644ad3e19ef823d5810f5fe5206f55e22eb017d6a7d00866a9e06497a138099204fe2539a47551e1a7256ff1fc1b3b2af50a09352f470c40bcd87c287c47fa3ca458963d9e2d85a5f3e36f036a16a3327783847b1d68452cfbbf3a607e6f3520eb035e8894bd3739704a254f405440f90d820ee89b781a51399d817105c456025076162dff9a9868de4c9151677fe15e433f216adc2f3b40a7792dbf2bdb8024420fd4c552a0fdf94a9fd67c473e484ee86b2adc3289da1111f68defd4992381572a6e7fd858f0fd5ce219d8547f44f7b3375a7fb54758a29100d8dfb5c86abd56a417dd5d53b0bf9ddcc8119dc4d69a7c4f14e8902a834b57fdd81133df522115557c79f03f1152c6fd230508543fdacdba7bf103ea5be8fd644c7504ea77192160cd9648a6d9d30a67c1aece09de31b72888dd42bcec931a9afb024a0102c5aae0d36a2d063d36b3c15d0715cdfba7b0fb442866cf6d6a32a6ab3bebff0b43be399a2be81636327f61aeb1755113660e9065a6dde7c4a055f2f5de4fa1cd65a125dec561d748ace11d899507a10aad886a8a3bfba9a7e3bbae80268931b70f7609d255a616b16e522c7809716dacc0f46efd5b69f9774a4b9888b948e45f5ff60b6a734aed79234da10b46c0a08e5e8f0a67849ad4f6e99fef14d83eec62e2a61e73f1d07ad625d1c6e29bad166abc897a8428957086f240d205c2924128a7c72d7167cf239938c7b8f1fec69ced7965ccdfd1e984633ff229eecc38bd373f6a21e7244510f61d0f504c2dfe1cfba7eed5d943956ef3d4c24ecd7de5e91a1b3873174c60643fcf079553e86ce93d2cd284ce9104dda39fc4fc52b70df0b9de48e05d1db6adf1e0d9ae387258e6c5f991a31cc148cc2f2b1618a28ca5c7db980c77bebdddb4c30f92af5feb1993bc5b6706ae31e450772b8b90500dcd6b10d8c3f3e7b2da3bf7364f91ab888af424856a282f51935271f84e97e58b0c59454ff269698af1090749587939fac4aac77764403253382c95c5e31b5c47e45dd79f93bc64ac83f81a9c38a00b0e9891c95811acfc57f8daace2e1f38ff67119e771e898d255b8c3b756d4cc1404051ec36f2d2ae693634231a942115134323b0e247f4916fb0032cf3dad5ced17dfd1d1e1b7b29fbc4f86fec351a084210c5580fa3258af4c337ba6195d6d7c8ad2236b429a208a2e3a175b45d1872080daa6be6580622986fa96358e79bc1c7e6887e61ad3837a405004b6d53c4eb48bc76e43aac0d9d187619a9a3e8d297c512589c48a14442baf41428878040c11602de92a15cfc08b5a8216b08570a32a6c036a86f4932fc197d162421d0abb96e0521cc4b3f6c3d087a943c44ddcbf1fa1fce2e3c88038dc7314a3d13b86c8b4849898590b39b5a64e4e2de67cdf3d52d45c06e311df72a4a20906c20c8d4d7b683b123b14bca46539468ce96a5c2a79423e245d8a9cbaa894e7aaa58044fad16a5623e1345642c420c4608d70821e3f43b7140c678ebde4388b46cc68b29550170dee975a0c4803b82140c61c3cf91316d60855df9147509d4ceebc24cc74d42f3b6508b21bb373ff93f398281a7a1bcd8e68e96c260dfb509dc65b36bf73d2f16020eec8dbe49814e02b1f157cea27feb15dc666661d01d841532abcc898d7817eb73420a293bee0d93afe15cb23bcf5419bfa8ce0d8944b7578e549a0e9606db8f54408942e4e7f0a95ebcb9fc70d3eafd13afad9428449f556473d11f943064a46b0b7b55cb379ddaa2740c7cfde2adeeecd7bc29df3c6ca326d4a044b9c5ead21dcabad8d92cfd5396172b1ed12f7a13a3b0c4e635389d38a975ca88e6b6baf45358731684115260bd41728d1e98118a1172fe2269bca5a85b19a5485a225e4e6c91168ba26235c7f65262b845c15a5a441dbf57eb763aa5619a3141c8cc1d8e45211cc0856e985f23fb4c0865d66b21eb7ea2ac3468fcb6fbeda4234a35ec2b0b50f336e057552b0a9465dc2dc460458eb0e3de9b5e509bc645de45a8314666b104797c4aa7761865f1cb3e3296f41613118caf44643b56cde095fea831ae7653b327f044bb7975195a4fde78e4fee97138033985c2d9cfb9f2ae605cc1e7053e92865b803204154b3c4da45971ea035024ca23694f17c65ad89a0a735a7691a3c9722286c4863a0d060c0a4ad1faabd378a7a769b49c883c565babe554bf18d4412ac551e75e4f7b85ab77739afc173953a17b22d3578c65ac1fda660cd5fe4e7ac2a3a68888d3e5660be32df776fbcccbcac225f4acb5b5822556a56fa87bf7d80d0fb9a8a8f6e91728f7403c772f06c5fe750a3f2fec214b8f5aa560593514ed4caa69aa4ca65606cab65634e4e34a5e619645c6ef98685858f671bd0226e882975a9975a965214b710b3efd5f46469229b691ee8ae7718023b958ac2cce9d004f9fda9ac2b0677e51f176704283ac444206082d360392fdf0fc16e6ef4adb35f84bb4853df601cde6b2a816ae8323d17d539ba4af5c70f28883f9001a7e23029413bf9a9fc83015cd3c9a94c5dd5302a2ff8a488367fb8b819aa52819bdc47d0c077124b9df8681a0e2ae7e4465baa674bf2207c72715c9b7d95370b1e7c73e31101c7ac928a9e4c44a1874df4047891244b5a1d99b3eae48ff8961b8e1251086cdb3dd4a144cfbdce76142cecb300d65d75e4d04904a1d2f23d262550185c6f08662b0e68cff21e8c6e7658d93eb2bfc087773fabeb57147af268c18293dbbfdc26cdea1ec9a15d725389eedf91ae0143b85f62e8b33b421ce5470e31efb3319b7a175a7ab33aeafb6ae9b44358ea9dab9d018a37547dbb81d123c09c6fa9b0b22e5e433a09dfea65fcb97020f1d331156b9517c0ec3198794dde23ba48014e2abdd310c7957170188f9f3823f8a90e8ec3bb6f6b8b9bd9981270fa745aab2cd084eee40cd79c2bf8fa7d23ac2d24436a82e461339ab8c3b183235439a5747454cf9fd864d3f1ae70778cda5739007b1c6e3d2e52933e91ac2e30644354ed2a946b2f09f46ddc2a3469b63884dd42383c6ba449158f4caa9398be6c270b4ba64db67408c8b231aeca731616c0ef7d989457c6ede861a2b998ebe53945aa3142234e4d874a75e9627aa09a0266727ce6af61e8cd050439807fa773ca2b9f0cfe9aa599ce3fe8422a438babef696f9f676e092e04b2bb9d17e6e4bed89ea3ca6884af7f9e6886d522dea5ad74bfc8ca5cee6b9247d275626729b40563598a0f810742bb2a4c57cd2153915922d91d4f4178fdd77006af859c3253d50c17da49338f68af0230284f2a4f83f85e30fd435cf35124287281c43ac052cbf1b915ad8f5d2b97590fe4cfd52d63a8a54afb954f03c8ab0f496a0feabdee8923d546f6e1390aaa12a690babe3da2ac0c6b1f4ac0f43c411dbeb1a927090774d21278c002f9c8f7a0d8ea174d3e37815e391d7fd78d420ff83feb925139442cea0038abd93481c1a2d1d4a5a14a6e5fa7ec80a3dbd4b82f80fdf2b83eca4c0210c5114aecd1531fc5924867bd056e5c98cfd216906ef103a6698bd9e581eae882243984ca4cf2f4b3033d814271ff56cf01d4976638104370de00bdc070902be5e9e6ed36745865614ae43ed15d63fa44116139b8acad923f9214fe9b59f651a4fa72aadbe6dcba6d2ab27d9ae92d888f44d77a9fcb1d84df1d96ab95812df8f5a2f11aadddc40de605437fc1c6488420ef098bbb865c8bf19ef613139ea5c8228af8f45164615a03c50b386a6c1d6fcfd9628c22c8983a577e2a0d11b31c5263c0576c10f8cdae76ebd02fc4150eafdcafbe92996d2e3b3444cb4bda4c93fc0cea5801d7259e20f5617d80fc99d7585b30e6583144249e68ae4affb3187716eba5d5f5b616a4d81765c53d6dd2492b16cfda585cee5e334a6d2b4da24d4ec560297945fbcab30cf6f7776501bf33a00b7fab1091804f841262402d70c5a00dd78e1d8beadc31060bc80a05e12529af47560f68b44e406059d6d2b77ade2be1d8321b4212e25ddd01f690198cbbe1f6c57bdc0195665fb6fc08ec2873fb382081ea2a296968ee253cb378e9c3b0efd2c7026d44f34d5cba8af9ff1d7eb5ba51fd7769d4e9aa3377823bfd4bf48059b25b4f72cd648044c08a028d0bcac6e2171a5138995687b56146d8fdbf52af9bc89edcbd8bae27e9f73090263322a0e8bb32ef8e1017443aeb5ad85792e4b8b4ce54ffdcd366e719bfbc839209da54a6bb4bb134cf7a176f3d8945eeeb8959087db375d6b55827caf1bfc92137f9dd9d6bfed6e343fb933300914bc24625bbea44249d0f015e7c9e4d5e5b6e4e19a58bc37a9ea8b7ef3ea3a158a9b987cfbe5f34f87010aec34434e25fe1a9d21b76f1a780e5b1f4721c4dcf8a065a7315d2cdba7df76707d9c338da780d9296e4218734ec65a51d7ab6f2061b2636eba6fe224cc98cef8f3f4a3f81e89589e39dc081de085dd1f81b4992d633219ccab6fe3f2f80c56dc2aeb7936cb7cb1072fecc1c08c963d9c75c146090a85f8a25d8de85e0611eb71b19bd24cbc1e7b32d6bae5fdee147db5906a0227081c923aad097827cd321f79859979ac8845a3e9d82c0dbf4d1b9abdaeb7f021288b96e473de196ca16661cc3df80175eaab91ae05e7ef9a37cd1af2890b17f9ed43baf6932a866cc4633dd847df341ab60a660c8a2658f52659506293b041f51a4d43cddfa981d17015e1929faaea37f4229f9bdcb6a17fced129429442d588c823c30ae006bf8e3f2248124a6ee47abb4c798b8f9532e3d3bc760e81c4853a7e0ec9410a34e3aa13942a831afc7ad9d95b5b679249a8bcbe15decd61b9ba53f13257f586aaa5c98975748a22b89a59446c6a572907bd565d2f03aa560c4d633af19c84d73a89f35fc16ffb3a263251628015dbc4b1350dad4d0fa06356702d2b64c4a18662c2132dbf329c6044a55948d6f1f753e811ae4aa1794115d1420e6f6fe6f11bda0a52e2641c6d48656b65ac70bea1829fbefbd3b81c1897d655dab174e5df6921daeb04e45a3d6b547ef50f1fe2283cac896d4e11ae3e3814990f228888acffba519b1d586b680e8cc311c9516679289e2069185fbe891544c502f2de209c6c0140068f23633ef3d000af68358aae2941cce4f204930bdaeb7f2a6afc660658912246f637dd59ff974b414a21a38dcb05a962b618fd5594c2a77a48bead3f0b252652c05dd7c96ced1231eb2ebf6d0a1ae065ace50f648d5f101cfef8cc29ffb554c67ec05d54d8796235a650f1a78995b33fc53e5c35584dfce0f948b53372def918684ff41cf5ddbbd2fcc1f56778aac241d6cd96944f4beeb36c904195a10cc78323d4077ada8432c37e7610d189fb6a24134f7672a610f2e984428012ce2fb02c8f4266f6d25b36b8d8ad99e2a7175fb9b947996a81840cdefae3f04fc469e2ced7e29e27dac48d177ec7b71fb918088b3903b568d5770c840136d2f784f81c02b1115c0cffee3ab48691909c71fcf36737bc6f7c0d56e3c053d0bdbea042bb23a212069adc559dad8984a5714bc0249913baf0936a3e7472928c7ab5658b38801c5de59bb37c60d8ca6e068afa047eb89c041ee4eaca281991a181c07f72ae4c1f3798642e5fd2c3a7fbbfb022a963a9b426bdf180c427af618e6eab0ca6e6df4ebfe92fa5e43dd06d748a764aa1b33317f467cfe8270eace75f96170e7c7efec991ec03062e04ad4d937871b580077e4d39e718547d2822b10018de1bcbb1b3e8aef964dc272b3a3a3618906499c19f52b4d3237ef1c4bfbbc80c7237a65e7d741c408fb9c3659d9e5c9bfc6ab6b74e4bfb12980dc5a6424953788d8c0119ca2ebd210085cb29704a8be15cdd790a1825cd4c89c7c8d52d2c7b5cd244ae6e5a4dd53f1b83da31e64bd9953619812a1c6b211581b41d6b4d1889efb7882f43b7dd6c3baef2d7f5abd03bcaf2cdaaf8d695056755ec8d5697d5b030b84791a9ab4644d9ea28dbb4f53c6ea55f8c3e34f02639ad8b280a951854370c05bbfc0406a9f692b92abe9095bfa0ec8e42c60742da757266de4716203d414eca0f54fa05a02b7500cb8e9ed574302a9d6bccd7ba12b27ea0fc37a92ecd10db0aa71fe884d58fb043146a1cc1ac1994bced0383e07785283ee6f1649ea016abffe162ba42b419c5c366510b24cd17278985d64e08d3e3cf1800a41df790894e5ab9798ef3454ee5d06c526ef8e1be52fb2cef9b3f8c52563c058b4e8176b1c598dcc4d41da9a843b39de8e84f5fec2da26a20a8903ea26b78759cef86420a7e026a3fe73188c1948c06a55d50e4d402e57e5fe82d7f5f68c3576e0080bac3c7de1e5082f64d20e5a0c7e5d04ace08851be420436ab580d7883d156a7fb4a9edd703efe4ab94595d522a0ca55f104eb400da92dec17811c57000b7296a10b82eb1c1f46639a6412c0eb770a8df4c2004cf6a00164bf5396e428ed545152d629d2293ee5e875900afc7453168b8319c7146d4f7fa4f881a94df665f22a396fe020f76bd62489296a83f04db01fe1ea92309f14af86380fa213fa50b10902b5844fdfca751f211fac67ea13a30e042e269e304d0bfac9c84f5ef4c8f4b6a5e846769f938be14579703e26b1e6e2345a100e956bf0ec0a61837800bfe1d1ddaa734e4262f461a966ee2e9b5ac768d91a805eee9cdd1b1c8a2a0a887e7d96306c743b8a5e8a35a4c7d166d5a2e771ffc1bbaa0402bd17acba05a9583c51682051f699a41bc7747d62ee53c93c0b8655bce87e57f8966aa970d057dd20223d6064ccb63c21fc3f5171cd196ec1b70bc6cfda9a110820326d49df9b61b62fe27874b8a95a3980264a6035a657e7f5c30ce325207296bba296ada397f845f0f56cef02184f70ef2370094f1d51ca48c69f8bc355f6584e08e033d530879f2b28677abf62d184a08e47ad1cf0fb01e688e63e88d8ad28499ec3fd45eedef319f1a2106624b88dc5b4a99a40cbf07ae073308536cad17e35b2b15180994d3e38ded2df396cfeecc5b4ebb3cdc58cb83dcc7a5dc1ca88d47b93197b98f695632c7c4c5252eaa609a2679e436d565bef27797e124a44c4d939455aa7f5164b16e76cdb78ce1d1f1822e2f154bbbd9a48f1841014985c16030180c36a4b54af52f8ab7c260b0b7f12dde974145ff2f03a1b4bbb7a39495325dcfb6aa4f85e2200d526bb081d6f88f03d80eee90485ec6dd022b62fa0b8eb48db1be96d01afd7d5f0a99745b94608b6b05cb86ab8afda67c0f709729346257479028b12b1a2c0d14a76efbd7af173b0b6d6980d9ea13834261ab9a1e6f8e1c3f0c3e065df9a391d770633bcc6196a691a03e9eda6385b906bbc3b863a54c580bc5d11e220d0b08a52d4cfd5e1288d0f7415736ab8898a649043743a66101b9c9d1d9a4aa1757fb813d3e6b2a7d1736d184f7f6b3df532034d9e4b5da50bb08a65c7493e90335f88c432e8163929bed7d37ea2ebca008765bbb6873f9d5ee8bff1e220d8b24c9219bc94c92b695adcd64d694a6f17b9e976dab92e410243342b48bd6aa7b3261078d67685117b34d8bb2b060df5308d904bb0e6d1245d315d673841e69a9025df96f0ff89fc00d9aae7bcc3b86942479215ae8cff9ab8b6f9637df14b59a0292244a54a8b55693c93464322d000c9d04b5b94b501bdc04cd9c826632a5406e214992243fe73f87246bb0542a95e20183be3fa6ba56dde22bcf4183542d34038a53bf30a5ee4d993a9b116d551ae9f3181a8dbac6c6a27e0980cc264257fe1e645a73d5ca4dd029aed8fe1c28a1f38fd454f2f33c60d0de8fa9edd80be18ad445ff6f23a1382d87e218a0adaa6588c55aad4070c749ab2d86da483c60d02138ccc522b42d579b174a5cef56b4aae9513c6d37025d01de1f3e9550b7685b18a02b7f24b66ab3d96cd666836941adf5e6e6e6baebc874d1e699519c8b55407ca86c462081314e28d01aff172d7abd5eaf5787af7dbd68241fa4e88eb6c113032e2be8e285156b50e185a6440c3cec6084080260450c29352959c648228c16986062872360a083037c0a2322f46693fe80c51a3f48522352ebc5f8d6fa6383fea12a6a43252e166d22d634692ee7a25c4d42c434dff43a7c5f444ca103962a53654d95293355a68652b58ac9a18a49dbca596b95ea1f939665fa13585d304c4ebfc23784099cd98101c0152e26308f0aab742714263b7069de635ba6b72c9628feab545ae76e0ebfb63f0ae6640a6dceae723db6ad831e319947d58db595c231e7d00b6bed200a6b24c34ea0a45df978437af97df49e9baecbd4bd2b52654faa4c0d79d50cfdc545c7e47869db2fcd6d469bdb17c85b6f735fdc2665ba981a723155ba88491c34c63d2e7e30457721fd119365ca4c0d6192b44f2df661458f98f470c624496212933a4a1ea30618ee3e150573327d25120a26e793d62695eafb2f89220b9685ce19d71fde1fb1ad0444916f4e87719732dde8e4dc0071b19a52300d603d60341d86c14a5ca46aa5122e4bb8f4818970ad542a9586dcc79dfe1eb5bf46e2627c77e0a06740f0b67dd23e89db8625f30d3d6220207c8506f940de4ed0203df00650ec3d62208a639fc6f6a8413aa03ffc00a69b45bf5e325126ad294d1002b049385a834b0b06605ff0d250355c6eff9b7a89353ba3356ea335fe25b36496cc925932cd925932533552978f9a744a853b8f72a7db08603bc9ffde9b1bdbaa54d0957f1d32411dda418f950b6de15827b48d93e5d9733d6dab0bcff35c525fe40904a7973a34740e9d43e7104dae673d3ff3c5438aa2e823da96b6a2a8b56db96b9d33c659a7bc45aad99536b1b80d07ee38ab73859eb10ff3c1844d48a437859556fa2f64c00e7af47753074d8f6e926ce84466e949df99741177d37d66f18f3eabe148ede31916b3d2933e02a570c646a0d2ecca7fc682a82d64da556da814da256880e2ca6dbf823a9cb14ff7fd5a73d149db7233931de99166363db333b109a607edee4b98501c6b3a51a7495811177d0991a8a5f8686ab55fde34aae75eb9eaee3e5aeb0842d7a7b2995dc1d4a06b4e2e675f16ccc93ce68e7e76d7beeccc87ccf2581f194bf396f354e161d76ccb85846a423517c241cb6ccb0b55afd25d687fe9976de5f8cadf735e3914c7bbaecb91d963cee934a408cfaa561cb280f490cbd997252dcc7376e54e29ddb2040f54c8c8c18916e06cf4a538f7c9ce7da13539a1e75e4ef2b8e5401b4e4e4a72b95c2e97cbe5682b882961644f8c46a3f9d06ceb3aad057226f3656b2a3d2df256a5751e036dd59b8ef71dfe45d5457bd139d4f085a670f41d60131c2ff31a6c526507c7cb7c93aeebeefdf1ee00a9eba332cf447fea7770bc4cc844e6633e06a45f35c57c8e6f927a6a57a637c57c8e90e678fa27e0f81c6193b049ea639e9e4aa7521399c7f129b049ea4dd08ffa08c83c8e14180336d18f427dea8de0f8981870e67b1ecf822b05ce7c31bfa33fe63f1e2193d4cb7c8e67c105f3a393277fc19c6ce86ecd389419ff712a32d55b3595fa98cfa19fc7efe8e71132a9f27d8e9009b52b53a8ff0b77643e2664920a93b020f39e49dfd38c09a8986f92410470844d74545a85d91badd268b6d23218ebad7b8f47068ffa133208a90bf527e8c8f1a9a7ae98d7f1afd23c053a2c08c845b7b9587391c8450f9a895ee42b7f8f8147fcd24575b485946dcc948dc5c94aab47d04aa39566c5252b2cf49e90a439493ae9a4eae43ad028ebfddc25070d5471f7adba83638adda2b17d8ded29781dde01a08e8b2610ef020c11944f308fc1fc9fc9640267dcdb796770c66d1edca0f19364606e335612e845dfc9944116b609b49b874e1adaab33ebb6fb3e4327829170a67b4aeac06cea8194cf18a17e0e6744c828b8884da0efafd4e1133a9947fd8ecca3ba223c2ec884d4a2de8552d6a7cfe08904e67044b2f36312584f302108fed4458c412f7421ba3950339844b54fff9d869cf00db22d1958adafd7eb55cac0503068bf855e2403dbf73f70427b3fba6df6695367daf8744f25d49f1181f4de934216f6e79d4ac0312fa3498f9ce918e9c584335e386302ea657e07f53221932ade332977740d0aeb4cc775dc9ea1495faab36dfff3a6a0e8de719b5d5d998f79fd295487eac21d54905ddd4785f75217eade2bf3a83f21e6b54c1813d6d3ae6e05ab59023fd214142a7c55c93322e4ef3e7fd7bd8b475cc4285306bf378175fbae279f81d6d829af9d6d2edac75f3d39406ffc18873322e42f3dceffdd97b0ded97bea0ffb1da8b70ced73f106998cca66b21f9a677aa6699a414034a2215ae34542b5adb7de9f9bd8b3ab3274fd1cd62075dfd70947718f9e89c31c7a160692b4d01a0fb8d02396d51f3d73d3db11fd1dfef1960e1d6757a8100b6d0f81f629c454307e11cb6ceb0b3d205ff97b401e900764a44db75d8d90b0ed1a26a139201dcf017ad7ffbcc760066a38238297dfc31fa87a5bd08fea0fff9a7d8fe2f73a7e048955b9c5b21b96e58d655fe78f8330ed0bb1ace2d976d3ae803c212fe87a4051b010253ea2c4574e58e69f01c9635c60adb5d6be495b6bad7dd9cf59eb7f249fbf2c8b25aa4c72db6a6dadd65aa27253d71b81ede35bc90dbcc7bec3ec7bccbefbd8f71fa7625df6ed0b461a51c3b63f23d846509c7a69d1959e6d71b6fdda5009d2ad83c589cd6114afbf86b425ed073be8b1be5e95a8d681bac7ea2f5a639d50560c3735e4e841fbcb862f7f69d8c7629dacf308d72577c302a2c3bac97127804a655b1dd0957f024a960f0a675b27f621a4f5cb5a1cb4ac5644f7d47a6050623e43baa7e7a647f7b8d0a37b30c6ba8716711b9dc37b7a3ee94fc84f0a35f865166cf822934242b1830e3e107841ca1b2b60c14f131ee8fd09f8f377ef85dd37f1f0e7dfc921932a35ccdf3d13eff1b3e012edea860f1345173172048969d3d390223c3559c909a7c9643d3d3e6c7c943ed27bd92e19a2828b5509ada9bf5384044a3b12a9a3b446a135fe3cd2d0f54f0ff363355d064494aff4a4d71a380d2e030d8202148ad3fd913375cf08c2a4fe803981a6afb5caa8d06395b90c7e83f3e052bca7472693997c559fa76757500570898bf5736a100eb80bf659a250839450446b8e30b9ddbe38edf393156594b012e6c3c7c6e55ab75a6b874c3e393939d7ce9800f3a6df41fde93f7bb3ce5d4d0355163daa1e467c2c7a4c42fa113c2085a43089cdf97308c4451fc222d2238b470b5ac71e73b6ce0cbabe9f3e7881ae6fc104d01a1f812eabb92302297a101a62ca151470d1820d1fcae061a3ece22a73ea7f75c8c5d2da5719da92b9ac43419414270adaf2d3ad709c7bb14ebc90a005eb84b694d818b6db1a6c0e39df771a625fb4c6b6e05e461043b2a46c05709bb133fb76766ea75bbc96659582d628288e9da2458b138c96e4aec3e55fb7b88ca5d9a0fc4a6ccbbf2362b4c679fce562c5d528cab2b44bf494f6659dd8977dd157adc1c22ccc56580d56cbb22c6b59cb5a963ab23ccdd9a4532a9bcd66b3d96cb69cb5fe779beb592c5154a940eab26efad2ab4b655b4c6a1157be80b956a05f64d0b2850bc5a43e71ad509d70a1de66731b0e368e3b8f8bfee55c7414c8a4ba5016cfd437d5d39b4eaf4fe192d3c384f4481cfa7ef492a43d97e50fd4413b99421f2a4f6ffa1a9599c22179b42fefdca48b268b769b1216db35dd1a8adbd0ed2fc718d72f3c18fbcd8b5cb4b57639bde923700a4d4f5d115882c322307f8201dde637d339fbb1d59acc07bb8d546b5eade55ab3916cd9e6d9ac05eb0fbd9d381d21b6b248ac5dea979ab3d52e3ab6d266b3d96c361bace419e452d58384dcc64739e4363eeebd3755bf25b4c6a178cfe901f4759cc713d2feac29e579265457fecf33a5eebdb51ac4ed29e6275dc1b95170a16aecdbc6a66abc9454d894fcf691d80c22b1ab8e524abd9bd9c12ed253d2ebb8685b19867d4df1d6680d8f27badb63ca73e5f09a5e0a11e1db7348d1e335af699aa6796fea55ca269d62893437207559f74c417789621698ae62626a1027adedbacedabf2711460dd02d3b89fd0c24a15b92d8f0861aa05b3c326676625e66c4e4f818865f36446dff6aaa3686db954a33fa53a7cf04c6dcd9776774e5ffc1ecc87cea047e29d0daeccc4e0e6b0bb35d9d1e0738b383e3748239a142189893d313d13e815406a42e13fe9b2b811dc059ea8ac901858ec574ec4f2476e583c4b680b8030102c4ab24d7b6620184e278a90484e294de1f01fe403610e780e61043e7d719438f35567337fcc56dbcd3b6cd97a9629e633aa68a95c21aa3ae5a831457c630796c981e6b4c013668efade7d0a2491b2ca13b938984e2d41c688d0e74e57fc410b48d1fd4d81ee341ebc0a0bb90ba0628aeecbc9fc940128a2b674628fdf71fdda530e33d02d9e11dbded7d1e61c9f6fecba6192cb42d2187341623629a27bedab6727c559f163d1622d4111fbd2511128aec18a99944b69b3a9349a45c06b96865095ae35f73b486e62b7f3cf39f5a4397e20154543fda6743d97e769911a1334d79d13dfaedca72b87bbbb6d1ce9878108d8b4e1ac54f0ca20ef32b74e55ef3f3b4347439f4205ae35e47b341b6c4a00e16e86a9ac27a56d5290498ed436684f972954eb9fef0f7200ddd3df617fdc3a0ddf4a4009e7263d0deace9edccaebc72a12beec8c50f4a3d7a100f1f51e820521963d62eb5303714fd0af5200fb21ee4398674902dcfdc7eb8e46513edccce646e2a2f7459ead856ce5967471a2449de5a616e83721df974f942e50336f448b76cb940063690c2172f5b30c69924495297252eced0d4c521a870f1d9f573abba6a911941b501463fb71d63c3a8379532824d8d7e6a9bbe1bfbb4a9d10f4e02394fe8998ea2a4e8df253d32a3882c4cf0c0060e680c91013db19140061850e1ba3d58fb34361ab858e9b374183a043eb4274efc4031050710f8308361882b9c38420897b54becd797fd4afa1772d3222e3913170f4e5dc4a5679b31dbb4c88c18974d8b4ed9aeb1223b465038e201a9ed7f7e6f05ef0f1487e2945ef5acb1c662b219cdf4335f89d64c5fc9a46bbc643f342d5a0a95435cceda0cbd45a018d1588a843fbe28b268ed66e797076468a721ecd48adca04fff0a53c5e86706181801d1a5879b11102a3002028b289630b73002a20823207e8c80e8c108089811102e18fda086d10f60683164f40390d10f32a31f68463f90c0e8071ea3285d8ca2906114c50ba32835a32826308a728451141fa3282380011946322d46b21318c9ac18c9843092c18c7cc819f970462d892e361805b1c5684a8fd1149e1c3ebef20bfa84dca622b930610749686b29c6d45a24a914add9712fe57ef798da818356ed0210956347d343dad444ba4665fbd8cdbad9b945abba9c1645f9d9fe1d90dbd4245ebf8b0d5f20885da635dbeee5a2ef1c2ee8efbfa3d916ee82c4005cb4f895e067da957f4176e58fbbe02e38e736d56d7cff58bf38cfae3254fdc6aed8fb5aebd79c3ba14130aefe78511c3768902efc40dea5af4f3a0da9b82aa3efee71ccc6b81a0477718c03932841d2c5d9288126925f4b0ae91794411d446bfc2bdd3a9a2e314e97f6c4b5bab5f7de6b75bceeb8d80195f043f77d476e3376b584bd5e2f27436a98de9271f97f352cfe5f91dbd0221996edffddbe2d1faea315691154cb62fb77656dbbb7ba8ee6a28f5f50d01714f405bda8bfa02f2847990110372c203a43a8d3da5375a24ed4695b2c16ea64e9faac0cd618592550176fe7357e9248a4babb0ff8f6baf7bab003de8e195ae31d38827de38d1d54f4cfa711ecf63e9f44c0bbb37e1ad28526151d85622003888b315e3a98f1e508212d5e44cc500b72e1d022441238d48ecc18228b95226a5022892b3ffcb834911e59378c4fc707ee3ccad1d0d0d0d0d0d0d04a8373dafe5ed57012c3f6d730681efa8936d1501cbfef00fc39b0e80baa3606af757c5edc11107aa423ecc8a82572ebf6850f546608e2667bc24b1152be08a20c2c5a5c33268427a886e8539f38da6221092952308301186a804186cb5990e18d337a88220736a65071f9eb04d59396f5a4653d69594f5ad6939627080e7446415bbbac652d6ba97396e7799ee7a9890c4a23281c4901098cec89dd7b7d4ca46dbdbde4930fd2568e8184bb18684d267de56f457b3cacbcc984b1c9c5d8c358a1c73cfaede61c9433ac067127dbed2cd3b63fcc09341520b7a19bccb01cb32dbfd95b47766447de901946f2b8a2eb0e0166e39089106876c8830acd230a3dfaad832971eb0220d3bec74c765434ce641228509cdb919f49b227934116c8c51f2d2d9319967b6e481e5634aa14527b0209cbb12c233399c94c663293249941a97b68438a0e111d2145b4d6307befa0ed8ba626c26531b6995a5114a7d0f62bcc1ec5bd0190ae6fbfceb40190b6d4614616f68ccc56776f7bd793a1be5410ea7b9db7c5d64159a18908417da914f58546a72ccbb2d429dda0a05edcdb799eb75acfb3a916f41217fd831edde3a43d4edb63bb777a3d1ecea4db05e7623daa5bea8de2beaf3fa3d2e0549d38cfbd4e8a3bb5e094f82fa12dd0144110425061830b908e529b4c444828b26304051791b8e87e3aeec8c50fbad0630f3fcff33ccff3debe121c19aa2a15a535495c6c1d715daa8e6828f458a1e4bc23293ca1c74a56216e03769ee7d9bcafb5e2ce4278f0e87a5141682429b8e8bf8018e851750b154057ce852ae74829092a8a342c2037995e5dffde7b012d3884e1e4ec91b1e04b162d4fb000c38b15d2e5d6c280402b6ac10c4f603a4071c48d231158a182216088c1f32c904516415ed81074029ac8c651186c0c9103971574dda5b52aa298008936a498c284919a1aa6910b8410cab9fc312e404904032e4d9441c50a0e8a7278420d1160f182cfbda2c8b2ad9cc618a5952a6a88e1c50b0870850b5be4a69852c4862a0b1d604f5061831644d029c8f8b2068c67288b0c2eb79f41a01c7ad2380b381031c50d3c70b962822cad22687cd182152e56c04317ae366014a703b886d076e045671daf9985d2e3c7328ffa718a0c8af4f9abe04f420a3580c39911f0931e3fe94b24d01e69ef4b8f417ba4498f3d7ddfd32cbbba8f23d4cfd2a1e54722dd271551426bf44671241289b463add7805d18449582debff772d70ea45b070c3dbacde6413613d86d1e052042e3277dfe7a72c02983b568e3a2149e05b7d9b1ebfe9ef270b2e97b35f7c1ceef3fa5a3522803c54599169196b93bf67d19286e03f3a5cf4fc2e08c08a49911eac6a470c67b5a4f43607660da861231147441040ac810c3758b8494d89704d6d77d19984c4c462633b37f94bb6c7b6d09bc7111f7a78ada7224b8685fa7b43b50b443aacd4513f8ed0eacbbdbd7665d1884d994be54e4c36ca7df6a10d2beef5bc4abdaf751fa59db8322b4f7d41fa30c4c06466b6ea638970809384d98e68f49c58769ba0f8c695bf7667a028187141d63450b60d3222da4d8ddc9845588855ef98b76055385e6a194c7a495c7ac7f492c5208420deddfd7b134a059fdc1a27fc39422d09587e2dc0c7ce80d326c8f05515bd50ab3881825b69b3fb89aa615d434cd931017dd9452c58a133fa6699ae6894805b3d90ce39c6de6608ace3a251dab22797a5b9b82af5c65af4a3b162fb2cd2e96097051a38d99939ecc663c331e1f3e68332a41a9db2d47ea886de548dd6eb3ca739be19089d15f6129d4c304c9a93f2a9024052413a04150a83f3448ddebf9fbb2fb6908eafd7b529d398e5026d4e1f8a0121870e72b91728eceaa94f1d21192232928f1a194e65d776f97e39ed37d473ec8a147a5baa96eaa9bbdd5da7bc39b43d342746a0f5df9d71e8a33015ae32d0ad8da63c60d346d73b2d0427472d0a36a7b0ebde51cb9dd6eb792152a9d7a8c5929138b0b8dbfd35af5a24ea944dbe1f0d2e07b88359308875362713825b645adc5e1b087b167b5e700d83833d42069d414d49612ba727fa1d618b05171d5d4605432b6ff47b48a81ae43a5596f2636e3045eb878b9ccfbf5824272d6ba66cd5a237211574d5aab3f745c8ca1a6c434dd559eaa536195aa9a66cceb2454edcda3a2aa542a954aa552a97c1869d5dfeb030c3dd21214756062d870ff455f74db721e89df832576f676ff1dcf3794b3d62ad5bf28b2583369e854757baf685b7ebbf111c53a548580dcbf56efe36ac3a1f3d8ca1285c5a60e40d54c5c6a45768ca07084543252baedb858a4769ea6a93ffc290df53a982b9aee1aaa909f655b26e472b95c8735cd104d6e89cc0c6a3382c291149008191a122264886621248c8570e08da1bddc911ee64ff85974ac2705ebe9137afb38d5a96fd6663b1f442134e2a2bfe7d9fa2716a28c53627d68c887d71ccb1225d55a1a8d46a3d168a2f8afb5bb582cad55da528f524ab7d7d5aed320557b1aedd63db2bcef4addb3b4d802ddedec821e7d88163463298e0d5b4476abc4218fddb03a10570faa76e818fb3add5bfb95b6bcb7b4e63420740c4aac04c5f4df8f193c81356757345a73c43905a745cca2c2acc0650eaad0a3bfbc1e589127564881db4e021150884e4a035a0f1a0d0dcc9846fb1c8796db9114902451f243b8ebb0e308f2e10514b85658000f4762b84a98061d5c2bf0d8c2550aabd4ff91550a82c7016cfab5665ba550e35083fa43dbd0f78731ae3421e88f4a440066b486cacc39ab365f094183d42ce80f22284edd22035ac9ba7221c8286d38a1b5466b6ad042638562fb7b0d77b6d03f736ad3edbe76f63b156afe4ba2b5855f2fd98be7f572e5cfb5e5bd9cd45eb4d713577e5d5ba8570bb557ed45832bbfaab6625e3c3027af970faefcf6342493f65867a4500d0205c5a95ffa2feb94b7f25692f7decef3a837012e6ab471e4bc9de779d61fb5c3e7192343bdb9b9b9a962472c9663d927cbf24f9ec9623eb356fdf195fffc50eadd5b5406d11af7befee854a1c7dcc5dc66c6be97623bc8d06329e6821ef1b94f92174aca42495d509ceec71c53d1a04b30986fa858a0cb0863fb9394a82d0bbb81b62ccdaeac90a0509c4b4a01a98a275455b4943d9278f052698bb7eeb9028a93cf2f7e76f1f368fb97a6a02d4c4a4171bef72ffd505bd7b42b2f45a138a5cf57e421b67f49467172e98b2d544c9490f09cb5eebe0cd60d839db01376ee6bda96a5dd6b9670b6e553e8cadf88ed4bbc1c0ad283b030dbf217eaca7f86180edec3cc5da035fe34dbaa6804ad515637ea161e475ac77fdc845998a575e777c3fea0d09add81de36739733ae11e51c0527446e1fb11d635c7f62a558ee34ee62d67631dbc5dcb42d8c552aad712a95d6262ce79366f199635974f5a7c7c50efcba88d9d6e7e5cb4257fedf1b19064d43cc54822016ccca988531fbac40a135fed8b4ad4f891be8ca3f055598e3f78459452545f380cfed4fbd9462259f52ac83d2c14ab17aebd99e83073d966225a1986de558ac9463a51c8b7d2d723115ab41a9586c8700c2d0010556c66231cd81149db38b546cbf7b6f59aab2cd5528168bc562f5e82876143b8a1d1d39ec13a36612316bb55a5fa9e10c986b858b0615ae2af8c767b17cf8b84651b59dbafbc5f87e5608677514fafe587d8436111e8df75d801b7aac3ef76df09458fde1326c4a8dd8bf2b58b7db0edf18916f8b14e87baf8f26f4f86be8909da7cde6e3b6e5ec70ddd91d75b9211de69ab5d0fce6b47bebeee1b9b66bb3adebbad95675c52acb14cbc7b4597913c4a289b3b7edeeec705dce7b9db81ae4ebe23639dbaa66d79d6ea3b2fd4dec4edb9d4e25c98ab69c86ffbf466b3c0b8782d6856eda5577bad7eae984ebea42262bb8baa727133c571776677732a1c7eedcddd99dddd99ddd799e3a4e4588df83853ab24c6c1a4e7089c1b502890b339e70794c3ad0e25aa19ee1f29ed212637c2fa6b9fefdf15b0056975d43dfb76f75680d7515eda0515b50b70f8ef4a82af2b184ce5ad0d0d4b8f3d08181b635a45142db2c776f8084be752fc8b8ed563ffa23a32e06aa561bbd85c0a3470faa2f536257affb2e0c52d7dbdce6a5d750b5adbabe654a5e44d1f59fd66c10453bd86db18777599e0a0d44df2d96a2b65558d11a87199b884444259050565a63c3291d099912d1560974e54f22c5c4eca04424d09a52d77743a46101b9a1cd2acd342ebab62dfb72ab9fe8bc47fd44c3ec51ef8bbb0e93c0da96d2b008251ab2333bb3b41a04891ac48aaada0cbfdcc631500da2840f9911a67b7e69f2f49bc5d9966ff195bdd9a31e6f05a221a8140e9725357568660000a003c3140000200c0a05c3e1804834281a0fa37b14800b6d8a4c76643c1507c320865124c5206394310000000021c6cccc0ccd38000129025e7ed95b36632549e166e45d9099cbc7ed8c936ac15ed1704ed30856673be5891e831f052ef59102570ad9003e192b7f678f96f1dd23afa4d765148f6c3e6ada79798e0fad003bb8802d1b79a94f927e320baa6645d8a5991ed334b3aa8145b87d89082059dede86ac34a4bf3c80c3584137b488a7bd2933996e9106b034611ade0a6ee467d012cdef951685838b316cd8fe8f8081eccb10085928a122a9aecb04a546ec2bc12d8f7cbbecb4c489a2f6d8c23c747ab7c3a1cf0ce335ca22945bd2f2467dc53623ea1754d5b98a892d50b114ca1553672559f1f6909b5410cf68a4b534462acb561a9a7260685306bfcb4f7bbab69f9ca197a7fd66d271dead8d7efe565f07b319a2d015d3178a5eb53f6f8e2ff966e5e5b48e2807aaa68a1b9271a357f431510070b9cd61f4dbb362726bb20fd44fc99eb44d3c8abd3535517d87a8edffd0ea6de24b52d992ee9a7902cb36d18a9381c40b6c936499b2c7bfd780b3c849bfd76e1a89a3ef75c71535687caf42424302d7e18365693971a56d58ac677732240ec977eafc59d2166eae7a659811b88060f4968510af6712c0aa512404ae7325eb4675bf47a740a53b1d6169891305f468ef4b24e98babf8adacbdaf17ea601508c47518e3e7485ade3216cb7a484caaea50e308273352debedad8cf891714cd66a38a3b85efccc3f4e98e386da6a43ac6a81119840bf61e33144c39ef4dee3953c0abbe36de3609d974436c02d7d1682b030e3e75cdbb6ebe27ae9c3a8326e31be50a06b5dc9ee4842af32631300bfe12d51d52170dd81c3e85745e84e764545baaaa3dae63c5741ceb3fae4389e133441e5825221620c23e6a9662bdac0d98afad297855286d55e0abccd4564a10c92dcaa06aadbed311270102c694c3a230c604a6271a0b55cc19d14b9763725eb4285e1a947c90f6ea31dd1c4de0a348b8c68a08cf19e5ca466008d1e649cde631bba42e0c9b184b4fa5291e05b545f997b31a123b0fc0bb128628bab5f1e9fd425a35e679b605435500e5c9edcd22c435d02ac94b42386cd7f946a39be900ff3832ae66d122c8c24699fae473a5a4d32032831ddca73ae9ef813e06bdf9c6eac65cabcaa66e79c12931232135589f16043328195f5910829d2130286db5a3e9918b92d79cb0d457e0e1d393c454d70b8414671ea6734ac5cc8fe7e0311be54ff1f9f11c3a4b937b5a524aa5c54f39b4653ec388ad5cd37116749a38c0f8fa948a9047469ba8f320cf7d1186966d2a91c4db1ca64c6d4d363fc33ab721add883ed7ac8887c4d769e0676dc950c7929a29453a25644e49613b83277f088cdc9f952bd6296b5cc3de8149eecb0c3c66d05199bd77c45f86d5d5a10a2319f7617ccf2049240b65b36b64aa288b209c093900e91b893e5915a2c81c4227b90e348ff5144992b94bc2c1bd9fe72e036da14b1a80ebf223df2fa19da55b1e2232e4f015b0e89d4739cc92325513586089c14113aee07bbfffae80c76f4393f5bc945947f86195d9566ec6446dde85f6bc4e0593ba19f3cac50b46dc3ef07216a2ae706fa3aad08e3302edc2a2c1cc013c64980c0827f9dfa1e2b936aa9682f2f37458205b21cfd74e4efe49a20eb746803c4a20d6cac3dfcdb17da3923e6919fdb798881685c1df2a452e0bba7c1020a4659df479944660439e3f884dc7660224c2158af1bd67c047477dd1c0105f1c8ef27dca712b75bc190067bcfc5925f1326ca1320f94c49638e5a30396288d9d6f3c112eb850b18f9dc992a08f3d00fef5defec4b82a7ad06712078fdf66c9833f569aa75cb10e6839fca4c2e574fd11b4c37072792adc06a1d84ae445978648b9bbfa0054c7c4cb768286252d50f53371d662fa5a13d17fa4bbf8432b383a5e16e5e2bd8971b51570067a551cf510fd2446f9d7028f723802b36a270cf4546366bbad4a20939526289c8028d85247ee1a4e8291fb40b2a6407434159ed91ba93a6ba4f98aee34cb487704988286bb4be5fccfa9ff5f241f2968a1b0580173c47594cefe029ab2cf8941844f1cc30e87e20fd45c8186b431abe521c9dbf33e834945c752bfc15fd03a42cb10333705ffe80194a3a5024d02fde41658e298c33ad132c5293c0058fcb42bbc696d19cfb234d990afb0e6b58fa97e12e97702e1631437126b1e2c1c019d632de8329f59bea4cce732e8cdb54b26d2dfdc346a002ea65c372612f1538fe04cad3a2f14589c081b792c783477cabd4beec85c38b6a2ff3d20a736ddb2bdee6906cc32cc8375b44fac0867498caa1f8866c8b8f481115b91014c29556dab727380cc7bfc4f29fb9c7ff8bcceabf59979352c0d73a8d79b4cca439863b045c98da27af396e05e8ee63ca6798286a5199338ffd35767d581350e24e22477bd7aa0f8154f9a3a809a7f888d93f542923e4f85a4b26d22a95c480810ad43c58480082b79ab751fa2067cf7e0b7e2f64c865f530e64b8e978d7622bea2850cfc5103e0e626f3970dc8933d0d2f889481cb0155cc15da69bd63e4443a7c5c797a9e99c7517d38c21ccf88eef2e5cc00a0763d6be6797d5ca6391448a36749370b2431b227cdc85f5d1e1fe960446d83a291a22c70b0e5db583036e90594a9b7770b4aefbff44b017023f74b610129b671e8a6be5125c9a0b95b8e497215121f576ce8cf2fbc01018cfa0df33da991571279afc76759b33ba678925edb203145872f096f14c2d47121bc49f85b2b13918eb50e726280d5c208d607e6320b15567d12840ac61049f89e6ef4d7a96c66e22ef667f4398ed8db2aca20ae7c8c20d4b944766e4c6b22cd736518ae72ae35796eaa1a4b9b203678da89c885b5c45e24550db63b5e7aeee2239b7bfe45de2089924e08313aae45145d32fd9dbc2cf0c9b7c0053118b93a51ef8458fe5be67b73d10cf708b774a658dc40a8643f652d5d3c5380baa81fc1e4b4f8dffd2e3212ac5003e4f6a1a7c431ce448fdf52d854d1c799f24884dbc9a82f05dfc7f4c14179133edf07aa10436973f92c6428075abfb79fda91467189ca17b939f584a403337d6792c925f8e09a88212f704f8855270af914075615852af9b1f804f7561edcef1b19fc7395f55ebef55274016231da747587ee1bbf18840d96508f77718973f18a03be0c2826d4f2418349cfb5b70e5ae3737cd682048ac424f2b3110c3514d4618ac01546e91ce432ae8a8c67458e661cf64e18296736d867ca0300e0bc11db34638eba1e0caac12b1183da85aba836a1f0e8644174b4b1ca0c7a5f4608d782688fb62edae6e90900527c50f9755a87e46df80614d795fcbcf84f378df59bb1f6f66b04e3d2eedf808fde76bb25d7826123f36da09593d71d85794d5d7736bbb29f717be44353df320e1dc827f22b176b51e98f9ae5f47288da1849cee74644648c01c36a8a197b3a4b5db49c7eb25ea194cea0f15e97e4098af9304db25363fd5d9b3856dce2dd6c05b0637627ba46088e6d644af85cb9b7599dde6a65d6ac9348cfb6f2baad646783bc049ab77c0658344bffd455ab4265ca0920143a7670d059d5a04c890fcbea7821637566225392a092a93abf4aae69508c8e74c7eab5270272421725f6055199adcc94563f402a75ac99aac79a246c85619d12c642f111b67b3c3ded5f22d364295ca0ab8c19342fe89b30e75de3248b8a3f9789e312df056bc4380a1e62b5d626afceefe43ba838893818cec2c7eef4e92461638252148b5303ea0098fa4c0c781f9fe85001590d022fc8f6be50b88da3bfdab2a97787656de12feb46cea6aaf352167cc7ed2882c0579520983c11b6c96a896a3910edbf923285aff26ec0470d164d7a7100256fb376ecc3e84e53424c9c8d4eba51c8c15fd650e5c944d283382f29b59eb93cec21f09cb68acb880b5ce3c29201c2883440e4fc3682f7ca15b11aebc7470f277b092d751b0298a82294e2cc0c63ba6245cd8ab523ced68e3922dd6044748303c448cc380fe7c8833afd2a8d25b00a4c3132e2a99a25f8ac482066d3b0bb952962dd11c04284675d1530fdaba04c1808e5988516dcd0a6707dca0fe4ee7da5c0e1a1a0a8d92b30a8ac25f1b5558954822fe102d9649a023bfdc07c64b7659a9e02c94f930116f24337a6b8dd140d35039fb297854ee654f94c4e8f6be48402e1222ed65c883ca2873e6c1d222fd92377b713623f4f24d8cad1d8c34cfd391b29afb0385deddb91df2929d422ff51417a1f26c38fb7c7fc8a648c6264d2cd03bb01d7a7598f45b89bbbdfd4ac61dfa08ee954553c20b0fe0a669cc2c8bf01eba8994eb14afa1594ec45a3aee5819fd02e9dc3d275fd95262c6d66fd9ee367430aef05d1d4e57d0e78d07217e9fceb43a2e40dc2170c26edfa9ab182a4f52375683c74cd5c349440114672c363f927aa9ac3cce801cb7c1248822cfcca2f285a7b692a6d330ab47fd03d44461a5f414509a3f8d2cf137828d0fb9513d80ede9337befbca51d849297db03f1037a599140810acd16f587e460c1db640bacb4246e5c1886596cad1c54e18a3dd025a82ea7e6b0311bae8a1ffb90189262691cf8ef88767541957e5daadbf1d8c8926b06a306fa008e755d69addc07f8b8201daf841d89d23e077101014d9aa8ef5620cd8b4d55e19493facd68c7898951f1642863479c941d62ecb4b58d128172b4af94e0f0dcdd3e1298b72477c22d5f752d22ac490f8a499c2e7ec82d02e7d85f8da1b91f35a3625c460cbdf28de07a814c58c8f9aa58d872683a0944a3bd921e74eb91a2f657eed110389567c12bcb47d091a30232593f2cbcad120fe78295f827c2d3442a64e00ed8c9c04e6d47a4d8e079964cd749edc73750e4c954a878c37c55d4f01b83550da43bb76e55def8bd8e7ab56be908a42a24f78d5fa7f4cb06d71aa79133fdbd5ee70fbf4662301db12fae75674266435d74473d5ddc17716764230f4199f8ad25419f47e3e5cdf3fa5838b9bd6b81e406894c769ee48b72b01d8ab390de1c8a39fc890d33816ee2e8f3b44b876726deaeb6620cd1d689e7078c073004d6a33c2b237c3545be2bc6be12822292bd845308493340ce8061988f9c81c7503bdac8a0ead128c8de74a976a716455f2334d2f4c6a4dad9ee7ef87894ff091142bf20fcc41ef2e956c2f4ec45351660ecb8c2c29d51c12a8f5a32803aae4a96214249fb36cc5d0ae08259644d8ba6ab1fa743cf9728a4ca256e3517db4164c90d762b3ec73d6db3c1a9e2ecb5eee54f80422a00fce913db550b434fe97b62e60adfbfcd512238d272d17922bdef1d47244a86c3d822dc4da6ef9ab3277c9f814479bbad61704567bf563103a5d98f88c13181249c309c4e81ff0eb8d419cc5b17293be883d1a93c36db1cbeafd8470be33889502c37390bdaead8af8fc13770d96160550094d1a9c5da77ef24be29e29e96927533162736a08aa4f2b05254fb1770da4c8b424d3d584b3588cd5bdd220efe044141f9b2e1005414a4ea1ada970a2f59f200bcc4a1cc6f88b5c8ec79f5bd21aee23b9b0bd8d51151e0ed01c956e30804fe4c9c70e56678345141dfd384a36a51b691ca9e7ed6702d71dc9b9f78260b10725f6f2b1bf76f04c3ea03687af1677595018381221c3aa6544a957ab6b02ca2726591d043a157afb179ff5079ec39e0fcf3cf51ab9c5db0a426818cd155b793c98f0261f8aa14579d4af43f65287906f0215e1f1fc8b3e3f4a9cbfa7231c8743ce14313f556f6eda1a17c0606b181061522c2c6aab43afdd2f6a4209d88b2427a4db97ad35aebf261576b1d678472e72d40aee05081959fed0e3ba6c98f03aba933f0987ded31b72276cb08f1410123c88826e42d4ced2dd0358fb2887bac844452c4d25516fb21186b2c7ba9d6ab3b9f3d0c2c770b0655878dd7386eb5a1a574bf2a1bb3f2045d086716037bc41322cb641feb0562cb36e367962894b341c532551a7cac8008da050c7a1ffc2e1e6df0263c3f53038017eaf3a80abf068c0a3d5503c5d65b365c0a2919222d71fe83d718ea3cde4c8b5330de70519c8f513b14c40a4e913f1077fe0e79324cf2476857f09635a06e6663095672070c1ab19f2d810e8b1b19e18ba1104429a5d5fd25dcdcb3d9456325e9fc699ea9c891c00d868028baafe251e6689d165600bbddad469fd70514277f389d43ee334b9b3784ed58bb7d34fe28e0a3f4aace7a401574046296acb7e74f668f9456a7a77979480d31bbc578e1f1911bc659628c4f6c24dc8520f555bbdc13bf20d3e208e098d566e3900d1090eded3349ad8901f5fa6955b46fdb86b29fcfff04a257a5d5da66f5c6ff035e59ea0a3b3050dd614468e1593b4a5a846c5851264d86f55419b3d9f9c92898d941bbbb89f620a4811d082f61e90d643f28d8024e826bc50992682a83a2848099134ec8559512ae28b31685a02a2fb49a2eb73c1d6dfefae2488344aa884c3c4248060651c7d2f63def1bb800a110d6e13cabe083b3dddcca28e00ca746be1054f92c5784dd82d59008daa0e7c0eafd98d97856af51ef1445b06862e14bfb26265fa38916c0199ffe3f03240ad6a5fbfa37a234e567cc61c06f363f5f29906ce871c5b78c186169ae2f4b7c1ae10367f97878a5d4b0c5a5b1e6a18532e4b5e20b56272999b8afba57076801bd1289c4fc811fb74484036956672cca6cd1f26c1ec142e85559d3e9f2a22e69a0010ae56207b9a07bed3488f84ac863e8c6289a632b5c46f57a107e0f82eb5ffe2cba36967bb9318e76abc46ea4506f0263f94a5c24d91c323fda1b288b1bbd469e3c85867e31522f9ad64d71f89441d7f17d4dedbfe2ab7e19366534ff2db0a5b063beb250007177bc787e4fa9011715485d496a10737036b65aca9c8f472bd4d9949c058b6c8d2da7041f73ceeff8b200d075b10c3f54bc30579b81166b4ef4f3178cc62aeb790c10bb60850cf6192212deb99261176f13b19768b0cf0fbc1cbedc8e0b9a86c79d369946948f19392c1419dc1bfc40a997d4f1fd425e71a3e1fa3cfcf57cf6133dc32e62c3828075a5e56a6144dc7b654eccae2d776e31b0a331888c095b1607d88eabbc46a0dd874019cd839f2ed491e6c8a58a0588fe4735ccd690efe3fd2422761580c5a1ac8ad88072117533420db874d04ad728b53598dc1f5868e3ff86021242287619100218ca84adc2a07377d88030f30666148a444ffdf00d1f9174b02cec4ea487d1a140463785febac5c2f681b1ea0c696e113c571e120520ec639bfe1c089c610a51ac35f16b60f3e5009a4b94b2233d9c650e7c542514c46d043af7c8a343b66ae4d5021113d010c8a40c94b04edc166c1f3e1f92afb2480656358097e5671bde0cb9687520e70631865297a59c8d191c012f324679b8e23cf09fba68abf65d76265f19b7d1b9e71f100756d2f9644c2fbcb2d917939207a19c47f0c5e1a507c8e00e5355fe73711f764aa8652e3683a2026fc2120f2a9cf5dfd2acffeabf2c48ad01e38a8f2482fcc88a565708301fa7162f20c07899634f3fc77c736d7f2d454cbc78b5709aa84d8257bef14fc6e03ed449eeb78ac1a39235dbf1979206381820b2f3249968714cf035d20d0782521e04ac5b37cfb951390de2bc28b6216e80fbfdd9ae2a78474a55c8e1570d47fc218e11006ddeb932f51780cf0fb193b75f880c966b33135ba6c52db26ecdedba7af03281e91606ad193b1f412eb0c5b40479a634ce0e2e81d6a1ea742c290d78eb95069ce94941a9e6eae36afb46a4882b5356c41d3971abbcbaf25e786e9394af95ce603c110525f12a4fd5217238bb927aedd21c8c808b78aa61b1badde6425a88ca6670425ce56d1ffc7c4bb7594966d3ba3769d40f702622044d0bf0be64cb8bf23f2e0be47a6e07e4dc7225ecfe9027a180a5218852ec004df34e98f6aa793cda74a4be65f9df292d60531720b7e28ab59a133c9c1d757447db7c409391c51b7615ab864e136522c984051e837a4625c0d7a8f09b9cae5b25c85c344378885d12257c9997d75481c57a3311f945050dbaae1a3c64020b63ea0511ce35b9789731066f3797b8698cafb1cbed03cde3290541afbb2edac78f9218aedf96cb64b2c253fa3d47fa914e57bba8bab1b97134458aebcb1736672826cb90944082a19241475ad001a518e35dcd4b7023632c75eb38ab3ae0ccd598cf620acfccd004ada539195616634b7f7ed8b8b03431842ef858e12eb0b17166f04369967c30dd15ad3180c7a21ea2e361f3b711054e838be99fdb5f4db3e533590037cee0f8e4d86c946ae3ec2e6ba36d905947fc808257c459894791bae9cbe7545f945aa336c244b7a23d5a945c70d3e7b8ef328968b00df8d7b816cf8e2f23e345008d86992aa698ad019fdc8316adf9b2725652f9c11e763d4f280063e3b6137a44a0891f94dc8af9399894289c9a750aed5058c49a7685e8241d5b5161e0bc28b421a0fd4ed633670ac5eee32ebc82424e77f4a5095bdb3a3f285f55db050a4b8d4fbb92e45a4ff9bc58710a3065ec5edfea6fe13736c38b18b9c8cf80e52e592cb5c882f7f3c00e836373a364a4f300043626995ab49315a4a706db3c49eba25fd4f09a16a85901b9793262d72766def73bd9a89b0105e61c5d686b5e6fb09c9bac4d981ab066942f4455fd2f1b284c711810a2233ec2fa18edce09b61caca069b8feebcb4b1b242603332f8d99ec2a20d3a8f1dabfdb0210d9127a251263b739b250c89945c1cea9ed51489813b911e105a8ff21e3d3f8d1d3df539f32bb735d97fb9c43de32b29725d285603519ffddaedeea7686d14f16e3b0fd8b714cd7657a03c499e0a7eddf649d1955e30bf28d29f5b20b9ff329911f54eafe4c36fc9e0256f0e42c01b2cfa019aafcf64e2e274b0676316afd1614a8c285fb82c20d63a9526a6477b7141e60ead2fb54bb0f9685b6df387a6f4eff9deffbe1906e436679ac946629b86858e41c893ffc15d40f6655cb343839afdadee87ac3484b44015b03876bfcbf9c7fb6b88bdc4e3b46714ead0d66f939ca76d021bb18b5013ca936e3a1473085924319931e69f52ba41395b54535df1dbc5e22578c2a1a145cd11716b24e26f27a095abdc7856d696854168e6fc42bfa9e6d7e75309eb52a053058aa4abd054c9d6761cef962a7d355788639a916e0b4fa2d483d1cf92aed2dc6625304506d7edf1c162d9116f52b97ec49905f686a67b839bcac66f55ed3900ed8c8efe375d8c6d522331a050c1ccb65e663f3a41c56bdaea7a5f029c682eb78d004d3a8a3ca58c8d49c7d659f7c98e02eef2303a7bf56e0f091f7b791b26d3c00644e7565bd5584c0c80a299b75af4591d4388c8aef050d1d300779a41019339c780a3b513a249e99d06034d31414b4a5ea3a2529e3782f1d0022645187045a824a83017273cd9ea0e77a8cf9d38fff65c34032b1b715d4f681eea8473bb0e8ea09fb44a8a7e0ebd660ef1927e1ab69faa992271c3511c7809dc110b59e5108e4dd35bf361a6f5b689bbaabfd2025a207e2e996ce1581c76bce465b2882bd63657044db235c1d114d55d8a1aa8085081b5393f5a6eab367802a8bbcd2bee9df1bf119a9afe9a0e018b651b1c067718dcae04453d2dbf31eb94f9c63e1c3ce7ca023c255f01823bc179195d62f78f74dc20567286c42d1b4c596240940cfe99953c5245f5be669beb8c4aeb387ad4fcdaad7add878047421de0afed03d49977a8be3e19b694db1bb6419d65cd36a2851721c1d61507f7c6334143cd01da117899fabd7092121a107f00c05d246fae9c9091ae835aeddd38c437ba59cee38bae4fbcabd134afefc4bc82b5fcd8e04e0c4dd416dce2583a7c65a6a9c8c730025ace50555bb53b4e03acee8c2773d9468a49f7684fb699302b4f75d882ffa3c0061588e6e9c94ba88fd3b2b2551141c36dade9c9bbbc843a5bbaaf104408356c98042cb025113b887d1a383692e90c32e37521767516c1a0ed17c1bbb05f921e9d6a0280b3bdff228ebb86fc94bf87f813927a3d2984793600e45bfaa31d183694f9c640b480fc10111019a2e7e494adf92f51962609567753bfd08dda1c1afeca5fdf0c28bc37521823c0d2bd69d29e9ab235ae11cca24295af3552a66b1782726c45c03e43011eb42290f6d367c51e108476689d8a8b0dbb4124af870d88910c08cf944a2aa71e11e481498ccd1d50251cf2274fe9296c1dfc0a872d711e448f314e9882b8dd1581aa7b74b72e94b4dfc3053f6e4ab3977780af83dd5b9cae44311393bcc58efb4ecb599f0e7838644e48f0db4e8771a38ffac3c8b4d0dc7401b559606b078931354ab31204809b0523261d814841f433b3a479f4e2575e51280890ca760e4f19c8226144bfd7a3302e32d0a728c32b859c6e8ac2a828cbf6aebc475fa9b7d566901d0ad36cf52a4100727652925549a132f7707a004d678aecda2de864c634dc8ed278bea9936296e2955b7c3a371b881ad42a4a5850018240ca4a0191a2ad75d34611f9f5a104a87201ce0e86bc116cdf81e8b00f73145e307f59a0780a183d26f9f6ed8595719d62c20db0b564d20b2f9fdd87113f59e3fa518ce518f68dbb728d666cccfcd4d3587d2696dbd2966cc9007d65874147a6a1c3944ee9a01c1857803efdfc6f5db81f92ed712a45f2693f382c9538b8fbc17b843b6026c1c173f55a5174dbb492ac2530e8d6f130702322fa861f0a6934097d2121239698b395f8aaf16a2fd5c798a3d828070546c9528414852d480a74815108ed34b27e453cb1b2bee8ceba5cb7d46d7631a51418fbe80eb8ebe56e5b6806cf666b292e87b84fbdf71f5f590f9a1d18ef4fda5110942825441128d51ae75428d5d81858cdbdb2e806a9ca16e1cc8caee4354bca22065794f36aebb5379620cca7f867cd84fd3f16420e52a364f2002195c2ca32cb82ce537066ec1c58390ec4fd7154648625e8c3b81655481ce815140fde2ddb27026d0e79fddb2e8f4fae4b709953d4c67738cfcd6ec591677fd2fb513b3d75c0969a04c9bed522fc0271724c4f721a73c069cf8d530eaca9d8fd7347a838bb3dda83f225a2480f12263d7be05bb455825a40c673aa4c31440daa32f46dbd2c2ac0fa75948e17fc89df07dee06aa04d007261d4bac12b1e8595d0c9733e08647a0af89e572186bcea427d55d4b65c8831f24cc7c70f132a019af5a0835f602b2d044f37bfaf26a147cd37b67bf77599ba8306715bac55591cdd8183507037fe7fcee1f85f4b0c2100cdeee168df2730bed8c01be5987970b58bd855a4583de6139c56e18c5f244714dd6151eff4bb5113e05f582a632e836a05d68433585f0e64c74cc442b1a1da923b07fa92f5e524cb9f2d75e3fa49b124ec68eed95420332476c53fe7d578fcb82e43106048404997acd4794300415277b0add58446203a95e15eabea55a27f7586ebef921653f0c0e2c6c235571ac1a3c76b4b8841618d55591818598b83353b60bc1b51058e56b092cfc4c47d703bd4aa64e2f74ffb96bdf8a831b7b15c11771f841ee3604002ef4a3973874378ee488577421ccdafc2d324d2dd22579ec5e7f626a6870f6f5e85cfd0d56cbc0a42401c8c6f13c212ed340f17aba61d5581475899c8502ce45029994d167bed29f8205e21830c9c0080d96efb955397327a558a11ae1fc3ce88c595d99e2b6ddeacaababc6f2aee3032ada256e558dcc8f5b186ef7abb72042fce25944d4e5e993c09ca83a9c8d71de634cc216ef0bac38e76423743750393c5308d9a6f77e8b7d2eedfdf3f372b1c163f3ecf618193d0b86102709d49dc3c57b66405ee612a8a681ef14da984ca6fc3ca210dc7e6f292d331c40600a023c823681f630e6627475719b9540ef68e96e503616f11fe6a15445be6d6370248202b4b6d95687501d0b3800cd5761026147c83186b0bc3aed94ff75b262e3d636d58e231f83854e9886270ffb3eb5d726cd16591bd415318e824cb7083fd86f256884b3c5e64b30569be64cd3b968e1853a9b1bc5133aee1a792d5743732e954a0e84c042ed4f09b0e18cfda32db0b858a88b294052a25cbc4231006e2350a761efef50e8a99a58c6570ea23f771979adec6a58135b360c0c2ea07b43e9d4d6196f392e743bb35835774afc0808631c834e29248916156466ec7e93ea042c5ea73ec13a75a5e3dc6a89681ac10e286583ea520cf49f519268b65a1f4a06467eb0e9134665c71778d4fa61f065f2fe0066ee85da40b30b7838e9c25d15d029d5d70c4d5966f6d1aa150021b3636efb82a2c8ef5f0480ca10c32a2725881fd3e99483bf50ea15701bb0b96548ed9bd04282c73f5abc1c1a52b153556dad6746c08f6a854604540aeb9c81e3d407bcc7efb022b480d4f009ff511bc803435700f866f18543a4dd03afcbd919cfd825eb94e28ba2b100c57b978b868dc41468e647f2bd305a18f045374dc7f50aed4ce04fa100595b0cfee1f5584bca5fd3a96a1ba74d878507a99926a6ceb61e2876ce4ae193f32882cb2e5ac1cbdf121bde3e9496d58c69a6ac74218db0bed165811f700343bd1bc32a51948af078b51f64abce50d1f5de47f2f48c3f1b066a7c694ee3e84dd8a9c215c373e3874c5b95d2154537cea2c0314c9c67fa44109849a1f7e709eddb25575e572e6d1bb4ee4cd8433fb79c54cb5514e07ddacdd01a0b4810dabfd7e6a9ef8785a0614b077d20d102ca0069758ac7aef4febae0a87ec0185a0dc4b63943bca93f8ceb711c7803512930219ffbf3e421e63fee8680b41948d9b5f0aa7a4de76c66898a5eb3a4c1c156ec46b97b5c42c65a53c33649448d8196c2ad95d1f1c427f44480460ba42c5ddff09cd2731aeebe9c15b0c12d47b4bfd671a68ca95aea032aa06add5ec5db032cff5e7cbac0c75a35698104bc9e01388a4466a9f18ad85ef2389e4c2e55d2774aec983932644ff130cde1d61e4f81031c8d4a91b45780d6c3743dc22626a9e4b06716630159837a84af24c7d44d32f844c3fc5006a0bb3381873bd387456bd2683dd3916458b21554180a2359c60a7d65f02a2eddf146d81b3b9ae5f29b102fb00787f3547ba3e2829bf9af1614335e5a15a75ae0a2dae2d67c9e70c81153ba68608a7e3ece95dcf47cafce7d8239ced729c37360f39ac809761c836229381e294912e37a156b36a0f7712872e937f68f5c40fa5d6f36d440608ecbd30a06bd638620046f7049f745c9c541a082d7c7bbdffe322d81fe9a5c1eba8ae3d6c0f6409a1901f0c3376757fb16606fe3bc91d26d75b2210823a79adac97062e108244236a2cc306d20286aa2c759e3786a5fd2b90092ff33f8e5e5370199bc0e1564e5812a04b2b4eb26c251db45c813af672c3b55d87fb2b3f8a8efcdcfde367a17e074adf41772f4870471ab51ece808a48852c5ea03e3b8ab6044830132d476add693eda69f506e8ac73373ab7af1beb8c52ee995ea5572c4ea37bf17912bb64091f729a451156e9f690e3ec9122eef0908388b6378f6ab2c4a253724b065d318915333e12717d3b33c64b990e43c7d043ebc617b26ba351727144153d22511db7031b1c342bfceebe3639e425c67ece4866337a1341b02b3bdb5d15429c99ffbbb8645cb7482dd93234309e2fa61f9bf4df8fc31f1f63c049b6bf02a55df220d2239b7fa34d83782ff635ab5498a238cdd3e2b833b2dae6c076cd7588d009fe8658be0e23e121019f14653b1c72c50a65cb20a26c11f7f7e79944024a9ec35f21b5ecefdcac267ac0d01edb78c1d2476ddff7cff64924582fa38d8a4ca5ccb6ea38db06d32a52d65a225773e48aa946a7b233872d014743c749a34a0d90ba16281c1e62d0753af4248972b3f9bb2b69e4c864ec754772ab6c5ccec84676086abdbee2965e9408bff5c48ef21794deafe463faf897474a537e735f4775dc5e633535084b538a81c11ae1158aa40ade61a01d446bcaf6f55c7983ba551518222cc64fe83dd0fc419ca4918d6f3dba467d9fb0679bfe75b8daa39715940a04a6a351c918be62a25530c9928ff3f1b116b70594f707dc3578ec219034cc95012a645d748e9e29709b90e9a87c11cfad711d7c64a12ae7fc219bff6466a0fd8e5ce69bd45433f8f80629b8c759e58ce034c7c1491ca8dac01317c285bc9817956ad389ab608e11c8ad4f540951812936586ad2240cbf8f64e44c5c3b67695c6c4904aec3ac13daff82b78b54af4ff7bfcd29c5c673151b7204e5f0d439074e6c0b2a71793b7166ab2a1dac1566f142b69c16ec8d2ba92d85ceb9cdda274e56289ceb9958a3390bdf139a84de7d8b90e740c18c27131e7267610ebe360e25d970d140378f1cb2a70b7768eeb9f5745b07a339b3ca940377a1c33d2288e10d965bb8d37bec720b54874734371d7b5ddede20b62954d1cc5af684e623cabfecf03f988a7055bbf5de6de449b120a26268fffc83a2c8032f5215c94122ff0ee717e18524cc3a40a2f66467ae1e982ab402d88d722baa1ab43add680106bad527c99165a9d6e557afad130cc626db39fc278f2bf00b3c9f4c057741d6a28a12646a6a4d0a1ba33e730c0b12fd66e328c04dc01021ee9e1a701c9e375458f33d56df10d4fa86d8466041c93f1b725715e253e08b5a9c04918560bc4def7992a6ac155d831132eaffbbaf985381084f910acdb9913c395a461300b03cb3ac67c02a6535173cb6669beecee663e77d9151e19f26c874d89e78beff4ed533d17debff8d5518e8554143ec8994dc36e56e19cba6883da93108ca3beadccfd4dc1be540801acf0fe371e9eccddbb17a7ad9a74f3415ec204349d1c9fa1af1868790c2887ccb7c93b5398af0a676634461524b81591d1fd38ba1c616fde71369afe5e7d1240c40f2ead722a6563f147863ed0129bad2538f06476c2085ee84f2f3332ce902c78492e6b016ca7c33fae603f00d10ad9fef333bf6a39da38fe039c99aa08e4ec122ac124c123f5f8ac52b37c3bfadb70f89292f1e697b3fe962b2c950f36321308ddd9847710359be17dacf4d5e97fa558dd69b0b398f965446844ae3eaa62c25238a7a93a0c819faa5bd28d3c796d551a53dc7d821876f954897491c3ff19138c1156d55d190af528240abcfa6e6ffada6a2fa5f79c0160142de33f1d1500fe3f7a1bf5b83f3e5ae492bf7296ed0b6e537abdd6bc7420423d69f89f08704b67d372e93505e12d1700e3f542bfb06bbeff6aa70edd2353c6471cb4685f61bbf0cdb74ba413b053ada44390d89b8cab91c53820af02236f88ad73b1cb4e45f5744e3e04a8dcf21f3b323ab81ca4e201e4b562236152cdc58632cabd6af9b1654700abd86fed7c9cdaa25411bb2081bc0868ada67ec11b5839ff8a4cef709e6e8b64a00d309db07d30dc056bea48d248996b0ff5ce097e5aefd98e14c30999e7441e0abada20f492ac663c0e1b3a49c3da91b4c00b97b6cc14c642f11f864519c8d1a130c57201b12ef197e4319abc0277e6ed8f2fed3c16842ef42f1c6d2dabe611ec6c2b04aa028e9c0854a7ec20f77187e3287363424d44c2c47ef6085f1201d017e327ab0c212f2c184b4f18c741897afe74a3daf4b068217b20f55611a38ec6fe27f5f8ae48087a93dcf710dda16d3d9f7f986fa8e56f315cca370f553b74ada3344d6c3a01ee0d3b662e381d37d7b6fba09bd9b6eb4d68eb2fd33cdf9d810e1edc170e55c5f8e02731b16290abbc676e24da939dfe1d7dfb002079148c1f66c06a4f055f5421077964a707492c2b802d0a90094ebc09b63684aa435e822b40af00cd80a2ae592daf6f1f821a96547c489c0b520531dd01dadfd0d5ebceeb28ddb0685db6dca09f72a74560bff5184ec0585b99cb304f815d3b4937d4552cb5a280139aea86b28e1844f7f5dcc5364bc873f04cc37a4c0fac21146947292707ad59665c818744e4285ca00ed8607551796c075335dbb2e2e5e3928e4861a6847ea14f291eea0af411e117937505142055db133a5036d6406d177739a4d536ae8857b77309462831a571f58b113ba58af29f20f55a8f87672101c00ce42664f68cf39f5c7a332e4d9720cd078ded71a33d82612d06a157c6c8dcc7650117e5039cbda0626633343db3a616aa8240b828eb00b364b4cc28f080a5cd406244d5e4dedc226b55add04b587b0ccc2fb8b6c92106c1c586c2091d633b6ca308b04b674147df35ddc1b8067c8bbb24292ec94d96d3bff2f10a0c71ef0ea43ff5e316c4bce0d1d5e7d4e455b1030e7a1e2c5f6a110cd511e4edd30e688581549cae8895c24bf061335f9022ac78d5ab21cbe5df637928286182bd44dc806153101cd1ea005f26729700d17ac819fbe5180ada4b16da1a0869813c16285b2c6332b33999ec52e5b09222c2aa8e31985d8ba4a427ece663e7f4fb918958366e21c03669cc291f1a8406749bd8d6fd7cf53bcab8a5845d90bb6a1da6360b02ab3aeef45762d98a504b4f31421b90b9bbdc1cb740c15ad8a9c8cd9481decd952b6bd2048acc839ed53914861bbb5e113b0f69a7abda5ae26242b5af81018adfa571b4917a96655ad6601f60040a5f472bdf710172aa5d1d6f0887a310c0d9586eca268232d84120a8e6c916c78977f7c2d8ff67ebd2311f677c46daf3079aa6daac31bfb373688ccba4cb690179b123208c976e61718d5f632bb227e6b55a0589a4488574c893f3f9937a7a06ee4c9393202ecebd849cfd7ea731df1c6425c6a4741b4e1a73e50e85c500754e9d4897a60cc50f84ad1e9cfa81c9603242e9e28579e986b50af5499ab8accd2afea3eb0828b78fad31816f06c7c7835be2d2215dcc703d5ec40dbb7068e450f35532329c0e554ed3d5549ba11f60542b0cd291d01bf497722b8920ed40c2437835c8f4d69900e3509a08639170372aea57048febd5cf77bfbb2e90b071f79b4f9538417eaf9f00f930100e2fdf3f532614f393aefbaf55990e2133f4090c1cfdb5e7760b3024b4a632beb8c9f709740e1a619ae0390d30dd00d09dcec0d582c872c674f6c82f5b7bd7553528d0a72ce4063938be761747d9d8d28adb1a276206a3b52bb60c256671aed7c6d8b35d1a7486531ba3a792a3792f485064374a321168c864db1ec459fd1524f6b0099cfc5bff84cf54c1e2005885a9753b9e722cfc60a9dbdee946e01ef9102135c277f9bf6b246dcca1d463b84438e03f73e80dcd223ac3f766844102b0ffe2b47f005f793265daf479dc7f91e1159bfec22207b157528ef240e376db50c501d04109c8c24fe0b29a8364721af03434c1889c83c20df8c6a426f6771f6659a03fcde002167d9b49c0a007104cb0d71047991921d48c946ab92062496e50065d149b05b4d58a56bbac1067f2d2ac690f8fa5747893d59e5f9e8178f9098432dd43be434f0f704c6a4cb3d9b685ea2c26449334ee562bea90257dd443042c40d8c91b5b546470654721ccb091c71151e3257afd7f63823e464eb52de893e40448157ca33b38a0a5900dccb9d0cfb3fab52841d7fc6991758c77378a792025a7ec7ecd598db17f83aee07e66c1a38b570e0d9904d90dd5280674a9940187daa01b992aba4a868e2cf40f4638377f4aada48df19beaa9cc099973249c6cc310248095f54ca527fe944b915899bf79811f11f7692d726156c0025c4582e1af0d55121fecd49675bcf1cc15f47d7d19f8b0053702c3dfb9a7019b14e2545766f16164307dd5cacc6774523b5633ec9c98908c692bc302cfb27aa1d0cf64f5d0f947ce71702ef40e19a1e68d66750f034ba230e6a14a68eabf0d8e41c0fe4fa1631d4c6bc2103a5404b8a7b6c7597906333589f25dec84d87154c6746a7a09d8eabdc1addadb52a8f114f2c69b6dfeaf94dba76545366fd648d472a70e54505d417f0c9c203ec3f6108e8a53a79b39cbdb0571ce01c861ff35c8269e838e6367b79fc8b876557aebcc170708d44ebdc35ef65b6419ff67d19a019c9e205fcef90a622ccff314480a1ed090091a13534e52303d9834f0bdac6d5774b4eb405f9146455fab2192e7e03b7a264c1036be216526e807ef948398ee2933a93c4a3700f2ee89b001ed62c29f3c7e374f8bdca020670c7db6175283789752d5cb00b057c97dbe5b8897d5a221909f215541d21352c220f9d4d4cec6f99dcc954d879ee5b6884b70b5decce03d390f7d4dd6e80276024a0bdce31a3e756185235026619caf9b2e82eda2fb7c9c0e99830719ca2cc92c998999264b0c211e7d023e9c03b16a32332b373c6b625098d6febdcbfad532515c786b998ae82559d963414b625f575cc17c516cbeee43860303295bf3e612238dd9a0359c0da1db17800a9fc37b7514e5594ea4298efb5a2cbcab7a80f49425732fa8cdff3620a1b2c40abed1b3d764a752120485fc03f5a639d6ab5f174c448c5598d82937a4c823172ee56def04b95689f2a32ecf7452d4daafc2854139e93726a1fb1efd35c886a626e9bf6d56b121f7350dff6d2ef91a6416112cfa82309ae085808888724ecb7d0e7582712dc909f309c80ce01e7da05ea751fbc48daad20f32874ae1df38076f5da893bb3379584c9a3b20a37ad4e4e9b031fb437932120c0f65dc0edc5f0130a1a20412b371b517a06acf332839e0d39a1b38ca2a2d382586702cc148a262059296bdb1089332e38ff4a30a5c26735af3147b248314eb4a704c1c0c3967e0fe860c90c03a178993b7995ec360961716a73ce5942706ee152441c31bfa3515d95c9cefd8c456d8e0c9949ea839e8b69affc5e338ebe7fa287445f40f2128f805215268e9d73a79314b18a838232f7d4ee21a27b517974e771fe0f3c80108ba6f4a824024126866acab7732a8416f0aee523d3a7aa39a026492823d3a7ada69203f8d0bcf0cf331889fc67e32fa35891d9b092f43df3047951c8cb64eff602eb00a0565fe32e1147cb11a37bf51517018baa54e66e50295a99b60ac4c0655789b01942e5ca539487b542f2c9e01bdbbc28d4755b2cb4f96bc6b9f8e5cab46c9d403a3e68464c44dd651d8ad080b85f20aaab80180a9a0b99dad8aa71e5583ca5db6d462bd66da33d9876e62f7a0d5fcadd7c7b6fe52ae56655a7646c036c67fede652d8fda353e584593b22f5bdabbe7ea48e43a363419456a4286bfa1a3a7f67ba5b8ce15f7fdb3f254bfc6b57d99e0c8da6c03d9e66036b46161bf00a9df9ab4602363605e9336b3e5b56dfadb2448bdc9144e6e6f78f8521aad0a1925394e032c688d21f4762e1e3a29e811d851a0257a7c0a62ce612c1112f43a5d7479d335148f8944a8b5e963208c1fd6522fd1695026902d2409488b1053da201358c0894fe88ad93e3f56edc64c2a2d7d8b08f0833be0f710e7ffc5312378468771173518ca364d6334b033b5d23c99bebea0bcaafde5cdc3d65a7d5726e803a55d5f17811881dae03878eae7635f3f0f993e60406c31e11af8d84c45b902030c34237b3b35618663331d7480f9afe38ba8af5edeecab33ffcc6aa512358d2a19e04b88404c274ca73f61005457160124badeb4c08f66922f3060491378643070e7bb1b79172b5a8053dafcaad7813ba1d6f180b1ced4dde9a8d9f6e20af5999fcc0715dbfffdf200b05236ea0814965cc84dd996c6d9153250b4283636ba769aec754fe354307c46837e8fd4e1bb3702e400874745d5698422bd16c9cb9c81f914b7c1ac0b9efe0310860c9edb3bc66ce547de847982ca9797a35161b29227cb2427c54853ed925c880aed6e27df44438465d2b7ec5908ddb8658b6ca8e2997335295e5b1bb039a7693a6db9e7b10c0e9ef1a4990b0127a4064ea8629008991d724d679c9b00bf2f06b81676da2e993ddcc0366bd144b12fccb77948e8b3d7fe759278af036c62f55d6dcb94c47ba974557ef0b2b78962e899614420acbb5e5f44e8e6b9772fae4544708ce329218b88408ff7d463040e8b082c310234be4df18a881be3db14a222e2bb04ea93c51c20d94a30420a751042302ef245f665a6d86f7ba39f9011331d810b0474366fb2b1026fd4a772ccbe3515dc812d2dcaf85bc39cf6e2e5047367c4c5e9973da3772163c5359ee1092014750748d7f83a2d03c4b6df474ab87e3c027b84e98f94c7941d7630f66a5b002e5d38a96f37fc574b643ad5bded6c01549a4326fa5ddd9e19ad4ee18c2164441383609124a376ab0ef6e87b63b1a880e4aef8222d02342c98e4142ed116023a6307b0026eadcd48194ae6bd30055c3174aaa5246b7b7ac8a1218412ca01c14fd6895430b5130db61f7e821402c6322ed45d6d08bdaf1c03de7783881c1c5c241e5c916ac95e94a876956308d6b1b3684ec6699c7ca42b480255fa9d496937a761bf23ee6ee8bc49fbe52dda4c5666014ad9cc456206517f749f9aedf000eb716b9b7cc27052713577e67be9f471abc252ba1bfeb0e352c4da260ea5acd9bb511759d502a11851a428d4509cfa1c37cf8a95fa5f145929811a8a3ed7c683c3a45b2c2828809cddc0885ea38b86446204f5bdc416c8f3982788424e84adf225ca4fa1abb3ca0100a0c827cf5e05d0672d346f255807925bb7d05b58089b1772dbe4657241625955431c86350dc90483c6178690caeaff995be372d0a70caf24818de024718f20a934923caa3ffc2595ef2e713b7f5e82c266a38cca096aee6fbcfddc47db491e9bb1adbd4f6836206d97e70097c105633e7dcb2641f2f0e805251aeabd7a2bd05e08264261b5bae0979e7afda3de682758ed6e2a44659e182358f36f6dcd2b918b47a32e5927a6f51dc799bb9fb7f81c80ec40a138ddb013340601370b0fb3ef04abcfdcf9095658ccd36c139d05c6c5125b8b9f902ea90e1b8a7590ba25313686442c74db931bb85bb3fe521e65dbceaee70fe284b5f1ebfa060d84c33072cc0d54c2a60e51a788a84adba8b0de54876d7894a9d7ff1868330a2c4af173cdda9e9881eda90e5f4fd17fd1c9a15f0675af4cb4ddda57cc9ca21c695bb01b4e1dd9f44bea7036dad20b56eab05f186e9915fbcacc1565af9588ab3a246c2e5c811a5bea13f27645a24884cee377cf1f7e4518a8f020f13b4498ba489148461374a24658d87b9bad21682c9a875626c26e9316a69140fab7cd61ead085449f8129859f1e01bce5daf033fa483330f5388ec72e37c3d3b7b7c20e68d8f681a698c16eaf75b251c941d064160738bd819b0362c1646067b947d84e8233c886c75f9229a491d77fc27cfcede82d8cf48bb9bc089a5ec9ae4b72168b4524921f3aba854073d6e09b028c04bc4c42417d4f0348257528426931d503cf5bfc82ee70c0d521a38e5d9b5afcd8fc02c0201ac268bcbb6f31a6219d3572917b29264f42b07bce86b1c0af534dc6b8475037455a27f9b7b04ba69d340838bfbc8aa0d1fd9028524821494af70f6452076663d0cf86223ea17e55a45523874d3397721ac8666a2a830258592f23db34b6e34bf98d68e04d3944c143c3b333e4d0bf70e0af31ca73ff825a07c81fcaad1853068402f8efa4afef922cd26774641f3abc4d678db7a95e21f01e5a652eea853b0b66796ae7eb87a6156a1ceaa0c22d1176d06967463ce9c668bfc84ee23411de9d18d28e9cec7717898733bc6d040749084ead800ab212b0291b5ab10660ce2d86a46407080748b6e716ac34144fc6c59f738b03a9dc85a1b147990851ece33688612ba26f88679cfe23e565cba4bc5a5dee85123e4c55a2fd158637180f048234bba7bc2366233975536a006066727cbe54102d52151caf0eecd797cd4d572db0764569ae5274b46a3b5b3b1c848e217087deff593e0dc6c241eb57a5f59539fe7490b71d31c62fd3b53746da43d8b3635edc12cc5a3524e5d35156133b10ff3367af018bdd441f991cc4b6068b5ef711159ddcfa986287ceac5df7620e751834f2ff04a2119773d2cb603a9738683704b99aecc506538a6dc03c4921e58c925c75830d04053c243db94f059ec48af5ef6d1467070ed76bf9480879df08a78179818a76191f208adcad34410a8b55dda754416f780b53ed88067b7fb939400a1df517226bc4cf0e936b247488095bd9117f50de888e7dac7d3f43b5e9e5312475756a949c425c3d3a75395b9d577ae7cbb42bf1da1b1ba350cbc69d5595d1bc4c8f2807ce043a6831aded0a16f26a4b07adfcf43b47d9833b6609cf71591399c996dc00315f61b9b1b04628137100aba0d2d459de19cc643e4422251493087d7386196035e0f3122b668237d0d51eb65c2ecb587a94b70c74f9bd268f56365fd43010a8b01678f3264ca659ca4c2e38ea3d1f655ef0abbf36a1f3e87f27cfd44d2d1212c47f3dc3a26205c5a6620bb7880d064f430a1aea3708a7176e7f0e832c7f934327173811059261ae30884250d864e58450ffd84e59cb334991590498dcfec086245c4f732e642f5c21e54b30b57f39c97d04c74d26dd797312212ea41bba756110190ffd6f212fb6b9040a44d89235c9945e4358ddbac0da842b29aa3eb2984163731a1ecdfac7ac312b12000115eb32d5aa24c92cdc73857e870bde2518d49da2a4fcfbb1f039e8895b461812948a1689dc2003b1f6c09288226afa590020f5ed358308e77e40aabd5ecc9a985012ffab5dfdba0d599c4b7371180b409a0aeb19d50a38d0cbffd86192a4a058978e026ca64e51bb0abfb11eb70e74c7cdc6db689dce86211c841cb1e1d8beb932d73046eec1b4867602966cb67622e1b1a0f29c861bd22c253c05e704506f2f9ad3a3355e9291e869c59a78b2ce23fe29b06db94fa2b57b31b32760166e34ed3f84b308fe1a0c4b451cb0d072d5e0c4bdeb74ed9b485286c72203aa96a70571b4886f7e598f75b71019a52c0d1ab90d271fc908cef057fae2413468b7be69a2c7d9a4b9ad55fb7bcd354049b2f673a86ffaaa7b9deabe50b12f1ee35681e975f1376b3756291608020015e2d94630791a4a6f934d248a86dc21d87373d3b7e2594dc485ea22a9a786c66889e1dcca78212f580b63500f6e3c181711e3314ae8421276d32b1a1ca3fdcd37019df395913240c481370d2551a2eda4ae9429156ab254f5e2026a2c0f33efb8197c5344f58567356d0822cb1822b46af48002bec92c63aae5617a5e10a9ef21effcdea4a12a1a49c46e662ee384e05f4fd12fd29b2c0fd9ee3b371f6ef4ec9b0572d99b3b1b983b800e2796915c1e15b998b131f1f5b193d66cec32973f1bcceb4be2aca9b694b6c02a4f95351d85c9d2f34c4caa6462c88ef430de34cf07df22841e2d17617ef6ebdb1da777a48693252b396ec26531b0342c0bc09e713fa54f058c161e818361a637b4ad9f8eab9d3dd404e489fd77e443d040d99b02a7ea62d210d5bcf7cfa3e412e11f1eeedbc810ce02aa03f2e5c1a347de780489a2c84e93233db61d64732a42c0858283853770c6684206991e78350e52a5f037ba7e925193e9e882896586b0efb18a5fe417cab6613462348fe02b42f0645ebcc43030fdcd0fb7f5cee85491bb9b3dca8a52f980cd213131c16200b499897a46314a8e40cc72d3ec0bd2d9b15049e339961067418f4711b4a2d45ebd111398f68d66c1a31d0ba01620d529b264c5f67f60c4e352ba5a61f699878fd3a3b9116aad287bf44dfab4a2530da8f0d32945e298fe0a243f642bf8f25c22a82ddc27d8da8071e3336df16bdb36bd0de822e2881dfff38167c6c464a4423315d4219c7eba1bc546abbba91098358af82b79fb943d59056cc38b5076b478a760bc2af8304ead701d29c82e0d5de2418f9b8ff7161fdde984a1045cf3c03c5116eb50c002b7ec28d79d5eb55c0298c7b5fb0362854c01ae67894e7016e23d97be9b5b306d4b6c6dce4d043895d338dad388d29876387280b36e4e68698e09eaa15128ae97501d4b795bbad4c0a6c75d3e006b1be023c0008d003e133ebbbcce54655ab6eba7b07c11177a16ac72cfa610e2c8429bb443086ca70fc8cd6e2fdf93d6417ef2faf8989e4eb6d025d329531a54ad121faef6ec37ecce8041709c1e7f61db4f7df77098ec3d8c6d6d3f3b84d01a218818416650d6d1ed1ffc1e1b5e5e9df95b30161b43d6e6a02006af4eb4bd092b55d83d92136611f16abb3186701255d4c6e8a6db8d3ba5756e7822898d02df7e391e1884561cda54accb570ba0e594f84f8642f2b86392601895384c53546afb34865872aa0116d8ebea58b4f82dfef6c2a8e35f2ed85ac8b917db47c6598647d7bb275b92332a8e5c6358f64a6360bbd2c96e1fdf038069379e612fc47c956338324c434664b68a0d5a7981eac4514403dfcbab1d541715dc6b16bf80e6417d4f5d18257b263286108ff42b259f13fc7cbb7fc1a269e02062513e7100012a858ae2cc9a8c18997f4225150d548c7491470c66ccaeea9a0ea87cd8c59ee2ac900c82336a77733ed30e2a4e1f9118b331ab01c51a85f7a24c45020a97eba96316421b4362f4c1f3a747fc6348f003a34382212ba2c2a1bfdc0e2c7bd676fd4f7cb01d3810baaa59528bbd8da3b7db9fe8d9d2a242411e74d3e881391953026cd58c48eeabad0e80338d01f921418d7ecb64abb8e6fa00c76c8243ec442f343c0b23449251b239eb7b72e891d0312a5517dad1248009aa5e67ad28de9de822140f9d8cb405d24a330f05f0cc8c1ce7892dc10ea878bd9982f71353f3ae009826ad77811e72345ad5befabb1b29126ad451a11ccc3e44d1502a40a6f62e04281469523d6917301cd1834edd4da2b7068040ff78195424eb8f417b5b0c5980c35bcfb9c1cc98c888e8a55f5c47393ce8bc43e9f32f653b767c47261266bf1f7db8069a3b5cb4752a897dd735282efc907c52e58f0e809a3f1b61228d077ed0c0d024b26095235e1764fcd554e809940fa20b840be3b8f1465feb4a33d612e2aeebba26ac16998f7fbbe9cd771c0a2c0fbe0f8dc142f7507eff2cb850702d8cd4be9fa91409702f6bc750eb3b4087c835a4871a7efb40c14215e667229c44f3b56001664ed4129c95ce28c84a29e2aaeb2e2c3aaa3eb258878fe47c090ce6e32a7cbac3b14a17cc8491c052d73fcf929ae4e3c624aa01b5d306ef3d9fb3e5371f8c4a280ae3a257debc4d68b9ee9862a21ddd49c6a03f964a589ec49b52a732c73c97c988e1004f7a7befa5461f6278cbf39d59302b8454c29bdbbc2deb6341168033dc4c12585b8be29db5a4dd83c250264dc7e8a6edcbbb0acc6dcf52f9b313a351935ca65a0b064ec259ca051851d03d8d357502ed05128710adb86ec20947db633b2b7cdace4d89e74e32134990e583fae6453fc83bfb39daa39886b911743226eee4d853edd5f98a351462aba972cfbedb2a6de07a589be32d3f5ac683e08228a28f0b08b21c1773e53d141ea5c100095c63b4b9e058ff5c7bf38e9816e67099e375030aaa907c3ff27fa590efa1a49f8e3167a67092987a9d5ab34fd9c4aca143b6e2ec240c789e705693b0911c5f5823769d2a29353d1a3eb7df797d1fb14ab4b00121bc964d8b0a9cb5f495b6cd57050e2b203d764f3cb6c24aa932617b0bbe56422e0586e93621f104a3f480cfc78458b49f6a527a74719462f788041c8c119f978518ba0cf97d0049495a5df1272ad899ef277689c815dd13524f94307620a635818c90c84d55874176c1203a697b264e0a07da48d5500a0c95579e6b5f4afa5938adf9ea8eec644dc99738d1a830ed0f4109b8b6e10a4cc229ee6c03ada05e56e05dee67ef86a1405aa55f40493a1b45bf906ef56c4698e7e13d0cb1b83c7e5b40e30bfed1db44130dd8126616bcf170e5e487091e70620912153fae6b75050ea8de802a815eee53ee98e728bc5533bdf77fc579250aad5573b9c7a323994e9a844b0673e5643ae0d074cee6f87217d1d6fddf2c9737260d30b95f1c6ea476b4210db14e49da18c67cd5f15108aa86ea769b2cc2a17bd420164893b6d4a314419204dc74dbe0f414d98b2a7e27f0d04b9b2dbdfba62b62b1fdd55e0ba37d27485ff0ed450c23daf021a2043945dded3b5ddb71b731bb033bb0426f63408543c00cd2142a1d945e6f81d58b0173c3d85eaee470e5a88a90fb3cdbfe35b174e0b0041e32a8d48471d951c860bd661e556b10de7e8af625beaa83199c758602ca0ab1a05a9582f7e74e9dbd4d6b313203d479c119c7f8de46c6e45b30b8932961c923d7a756002ec45d8c26e810a332f5ef78fa3038dd3080155e3e1d8a25a61f662fbfffb756828d0d983853458caab0e9f7e0d244153176c51d403a292274509da4d322e7aae5a8cc99bd12c02cfd6b7355eee8c8d9112361e13f23ed901e4152f3b8fe8027aa181d9621587b7f79af2ec301d87623f43154da92348f439d54c9b2ca25d57e92643df54889e5c574d5c5ab87b4fc76d1604c7c787f6c8dec1aacda1273a79e7d4b6a3cb0cc3b80d76b4fa169d8a1e304eaf8aef36da8202ac0e0a42d6c76fe97397aef66de3cc129ed8cfb45d706217e8f57b70efd19f703bca254b396d0cd4a85bb1fb0bed03511d7cc7fbf6239c3374d98d565c0d6ba7b4d714db4865a3409e8ad573fa01a9ea5db06c9bc7d373ade7ec03246ed0766e1eee86664c0cbfb284eae0c2c8adad9940895d2e9ae832b6b7464042d3afd57a37d3f2ac582a00c304bf4ad6a66ffe72c64eeee9ca678f5d5b899bcb702cc4f40d277df680186ce8a9fb41fae3b2f3ac15a488949b7785dbc7e47c1cadbcf1043a11b55ab8d7fe6845634a0bed20a04d7c45d679a0a6e285034ebe67b18fa24e5eb861884d9dc85acbcb16c580a3afcd4df38df7d24a6716ff241b9d261f88dff5c07a48e08f9e42fd99e415f479648c9eb440739c52cb503b145de73a0db0712ba8fd72e46fc251b25ead895691a4a64d20adc149990c6d1b2dbfe2db9c9f532ac3b91eb730cf85f02632b67841aab105400cb42e0d762a001c4294ed2df318568a3e4699ebc56b5162e457eeef17810b7fcc8c209b126f030028820246d96181e48438d5678ffe339dbe4cee331ae9d00c70821a5856b4b5be8b020e8fdca76d5fb67f6371229a87451262769cd6a30397f494a86120654613ad157013bf1c20281948aa5c248e831874d6ba2e49954e3f948619252a5233f6165c7ff47772f02f47670415655d479be84d0d8fbe56902a2e928fda75bf4c0951aed6a2cc1ab5caec2fd38e0b8f301c00b700f5fe2517f621ed928ea0b0e1ece49886603f9c3c412392fbd607ac9603e8ab3ffee9802c12c7c82bdd3b7e8b8d2b890e831b24b8372d7a817b2d3eae333e7fc365bf54a730679752bf39c60f436488059abc0c2fb53690b2e35c9274db1c24a5fc5f6a307371c177b33a413c3f63dc21d7e60e71492a14940342b8f10b4fc03d61749648d45044b95780473d863712756dfcb7642ac040287510f876819f8e3343d82cd42c0564817682519ec26a2a488bfcf1c8f91b2f2cb8812f3f6b4e46f8e4939bfebb9b66591e61bfe235196a61667c4f26056132cb4d29313f770659733d1178b642fe1dc6c6f56e3a40da9abb9c9d671ea89db03f711e0cd13708898be88ebae987badd9492cbf158c325effc2705a9026ebc3652fe7c52818d9bc862dec0d0d68441ae8f0f82ee34db17df28a51b033c55dc4b4edc151fe8489214c7a63d8005116468fc3eb1bc7981046408298b0b22ba14490b3aba6a9ee0efe9c50cbc699111b21c32a717ae85b0439b0b61a75c04517fc00dc71a7b376a847c1f1b311d44ce42a1c080de4753ef43f6850bf7167b3e9f79004585985258348009d026fa655e81bef23d2cd3f694ede6370483489ecf08d230356ae541d878e3153fb7c2093e92e0c404744efcdd9595e75fb33c2d08aa9e17d1c6848b60268defd92da0a7bfa3e03333b027e9aaa24571de13f9a5d301fd7fd5c691f23b6f34a79786b3c0713d3b8098c1d713c06172bd2c95f28949cc6c3f592c245017d46186d870c5a1d16ae576cf08f574139b74a909104ecb5837ffb763a0230cd5cd670350364d7fd10129c616f0666711d1cffd993782a877410f6b96b7cfc75d0d5d04911331d1c0bd003ba8a391aa3af4750ca9c74a2c1559a212ef9224728fa3af444921c710470b59dcb197252ca2b21319c111da8033ae6b39d7b222a49ff55277dabb0cc242ac85427bccc8888ebc5a7a6455894adbc1b8d0b47fedd6c6cf9c6a9b3ec14fbfaeebad91128dd446834aa44d3f4f36e42a11b4ee9a06f03fe613362e781d9acee9c4b9c7bcf76b8c4456a3e460a0263507765d1d042a132ea2cccc734c120c2d3d568849817c846a766993cc50829c65732dfbf129751603d349b6b9fb612176f861d023d5b36e0da191cfd936810c4138549f0e45437bd7058c451ba61b04c9b5dde120ba32c34e0d46f563d0da19acd08a12b46b47c1530bc2e05d8cb6dc0b0e94624836778339130bcb676de2057ef1e95347ed3b26e690b6eb3b4917fa1e9b81e87d3701ccf7ca9ae3152af36c2d7cad4f5d696d6471069e57180346cb2bb597de703d798b64107e86da4174287ee81b1180e4c0abd9874f1fe82ce1e394663528ed6558013a61c611271d5999127c56746d96b47eb8d1e930687be348ed16761cea396016ee58c95560583c7a533a4ba0f5daa7743aa723d54b4de50c4e4e2eadb034a6ebbfc2dcc077434c7eb65667e978f289d7cd4505d6e9e0b2c8680661454ac2542068ea147148cb53a913bcc91da18ea2cd93344baed93386bd3467a2cb352567d6012497def69ebe33c0ed64c2741e21d3b6ea001a5a015df24be770a5150f27eecf14c45699b21f924d003fc4320f346ba21509f1ec2b6e0a63a0dac6dd0068b7c12a025087695e03beb6ec3496839aed8276175de3e1e3e83e6ae4f644c58de9298a271450d7216bc17fd51e981da0e895f489604418df3acdeb10e3886a36d5e2c92906f579b20b12a5d896ac852699f5fec71afd61e4d25fb4206d63ac9b6e8e05a6a6d97fc457a6c92e63b0de086dc47665f861bbafa0b676a6d77284397060890f2e59354f105e3bfa968c6d73069a7917d6eba530a8c15c88c4e3642e4aef15b11f88720afe6e72c38cd85175e378706274a462236a024d9a28aa68b048b4584066621e27d9251ce1ac526ee7f221d1ab8a378a913dde2ebda4753be21ac973422e95609e910ccb8b48b60c4e84cd478603e790bb6cbb7dc9c4f989524684e3f5b81e271300ab2d7353e17aa7be06cc178f821fff2f7617fde966aca522c2517b3e417cb1810f503b194e59297552d20fb69a3fe4b67625e111b680d3db0b4c82bf79d3491da640601590941f4cd359aaded8954e1b868dd2bda9e7c108e54b2f4a81ac93bf5d035c0532151d407550d32d13de5a71a464d522add790796c7fa1fe4b44ac551c3c0e667312b51ca6c71a733c7c2d94dc648b2a9710d26d848ba72a3229aa8d0bd3fc7f401c81fe29676b80dac59bab1627099d30eec86728204541b58c326ac2f3dfebc643f60a1c1f4ab458e353616dead06132f586484a8daaac628fda31f1c95f0c873943b9d034624b87bae2dff4d0986b060c5fc978881997e0c0c851327ed130689ae97251037a008c91d4ec62c5fda5d80218bca9965322dc8d185f3c7a8c3ebd15fb59b5cce889d44f53cba1aef76e89025385fc014b2ed18124b10663c0d9460b1add8c47d04183e06cf23be0ec9c6f73b86895e85f6d874daad31515474497a3eaa76e6f3e34aff5108117250ee73e96bb27e2850f1eb79a27690fa794103f7ab1bea0dd8fc961a52963dae30f47b2b28ea80a7c2e78f70c16dad0e53416ec5c0c61f3ac2044469e33ce31b032b188b2edbc7069f6b73d0123113a9d5d729fcb88122fba7f2c6e26f033438b8fe35b17b0053f479f7402215fbe844d989d7072aee70f8bb29aa204801810e8b3bfcd3d7bd0237458817542da64eff398fecc0dcca6563cf718de21b0c35fef6b47a01a571f6e0fd73e32cef045e6382b1b0102dd886e30a1f7e6d4ded8840bbbd3de9c4472efc7b5a636adea48f7030a934bda87d903661130eaa26b31436b8626a9d0ee4ec869ca621e1d7faf02ad9bcb133ca041fb36a1d4a8aa8991433a87e0a39f9c660d350c0acd9053a90bedee1ba551458dd07c0023b0e94eec52c394297f11013536e1e76608d43e6d9a27c2bb6af38e40b7b02fb6aff0fb1350f12320083e210f7bfe034efec1153bb38dcc252d2fea7ebf7c808c742810327a47e8de2195455516d50b4efc1230d807eab13dc2b8b3ee166815b6fb4fd4c892e2bf8b4adb05090b9c1bcd589501afd920ef9aa251ffc41c22137310404f73fbcb8dd7dff7d47662c68926cbb33e744560fb1007b8c2dee3b190415982220124d6da7368e83b04bce6521875de9e1e05257e09f5a34959bae8e15fc3ba950e45aeba3d105def81da5987e3d06dbbf8b57e263c3b10a35a06349755921c31b9db0969f93ddc8fe59b705c0830da74fd3d3deb8028b34ec4ac8ff41b032051ed9951dae9a3ca1c230e5ec81097b800bd55358025013d190d77aeefbbf0001fe33795b0666c9a69780efe4720d523aa3e85519d016b20284e4337d0c1830647914e27ce0887acaa016f35c73c175df54c4cec408bc45030af129665b3016525107c995d1cd74c518d8399019a8dd9dff3137bd7aaa4dec0b1b6a5468365b13ee7f660c2f2518f1730e8c3443f6e8bd3e0ae6b740108f7d210d876bd2ff487af9d648f8bbe89b0654c7860f0e55a1b92556ca2da54c49063d0647063606247ab2f1e979b49a78dd3cf1ec890132cff9c918e6b76a52f0c64352fe3e5492586c47e4e9a1d168d3f4d3b4d9ba03a06d21b1088264d5a0becfea8afa8b3cc3549928a5b4560abb5707092c81a409c2beb9e32f3f268e9940126d67345a7234c2dc88d298ed2a3d892f3081c5ce68b320b5da7f6a5a6a98dcb1189cc09552fa5f7dda0f8379410c989d01dd60504041ce1252215249e2ada6d15494647fd40d75cbfea81a0aa722da19a58145e15cb2054d41303ee08e8712e98699285cdf7046b23f6a0845844a822a72961c6a81903ceba1f9d81aad9bc765b0e3add52541a4772043ff1b11b0453ba30d61e20a27682084d654c5d8ebeeed7666a380e8571086ba22bb4fa3865044281c50db40792161f0477d71850b7d940a4ec6789d76366b3bab3919d3b7a942c4d2835221ca3819a322a270dd3f373bcb76365b96666bd6f67666672c442b63d4c8c1143a72c8d9c1035fefb39192d2ff5af45e1289a28e53e89a79dd49414a9f731cc7711cc7711cffef87feeda3ce74a20b21b07885a03ec104af212c0bc040e91bacab550873220f1a83461f6ff5cf1bf9886021d98364ef7eb256660b3fcac36e6aae802e9b28a09c2fa7f9624a7197cd97d47b78d4e0df139cf238289f02a65e27e5551e47c6ca9fa87486e0ac3c0675f0afbccec9abbc69aa4c5f52997e4585aefcf73e545eaefcf7bd7ca9a0fcca4340c67fa00fd087caaf78de8aca47ea65bc8aca87caafa43cca4b20f53254544370522fe357543e521e05e5553e878c5ff915158bf7339e87978a2ae5571e27e557defb155067c80c5047e553ff79b0be7941a3108e2889929c510ca5a2f22bffa5fc8cc749f919a0ce10ef3f9af21e8893fa155047c504da4f7d8dcf14957ca54aaafa3254282a94aa68fadc2042c29e9dd86df680698b1ed2c80e24279d321f7df4d1471f7d9c3f461f6b6ee3388e63ece4348a08df65752f18ceee9e3e74874e86fae7cf9ea1d9f25f8c7d2def52e3a2b1a1f48e272e202ce7cb7772b95c2e97cb65832d5ac82ac8292a2a2a2acac133263ce31c21cc4ac6a523070e39a45238661d7266869d1336beb1d02408ef49a62fbd498f8f213e48eff928bde959fa71bc273dce89a54107784f7a087820044ca00e1d4538e0225c62b921bdcc3825f0e5ff82647561db702980f4b711d2b65dbdb6abd7e55e17c7e5c0d64b4ab86a5c34363f73ca1c64d773f0d0c4e59ad5554393e33143c58e0efa042d6366fc60993bbb927cdff755187fa171b96a489aa74600fe9b93d26fb6fa04f2c59f88f6a1814786437b37203db0434aa21c37a41a467057e7ca8615d0157283930387f05d562da5e31505bc1ca2366f35376c6cb899d786b9dde49552d2ed42989517c8ccd2bc94c659b0fefab01d1297ab8ac6c3155080fb5bbe1d1227e3ca63f4902028e5f9b24790bd760311d89bf3f16cf98ac0b0af5358e4e91e1aec3758a448bd75d61a7944d27196cc9555c156cdc9d3e3a18b55c176b832fd8a8382a92ed3e0e2eedee30893749664c53004eede7ef82b57298082b45b8959570b620b32f6b76c24725914a1326d0d560dafc7133d1e4f36bbbb3b76c2613b76a23fe7ec9eb33bccb4eb6aa763ebac4a667bf2703cec39671b21ab9cb2eba6ec3ad086162668e361378127586bad5dad95e6bf69559d5d62f88161dd2d08c843ef5a519a27861f2f886163462eae39274fb704d5e3accead0ec8a768b6da07375bdde32ffe382230acbb657f1e67c176b872fd76567f11f856b023e2a1cdc3ce301ba329c932b6a10cf344b1a7a77dbc1292ecef79b41b2efb7bb520647fcfd6016991fdbd9b2b0b1e6fdd21257c6eee80827e00f48212ba1d7454481b36667be87a90fdbb1f8fc7ebf1441b6b1b5e10de10b607cfef855520635bcc9b3f6377644c1492657d90a1bf8d11c9200d37b460823a5e6d17481b9d5118ad44ae35cda86d341312862e8c16ff9ad6a52a883d1125ca18cf54b3b1da93536e4d43f5d08aebd1b23bfee26f5fc86198277aa2ab874836bd99277aa227f6b454614e1e393b7acc2abbeb644765d7752d29793ddbf59d2dd56ae569a0e0acd9badde3902dd58ffc9ffff92e2707336f514e698a868159c9b8685482e0fbeeac897dbe67f95f9d56019dfb6b98b9c10df4872b1a1833b94427b623f2d8d4dcb891f7de7bef0dc3ff79ab992df9927375ebba396b4881fb27ed5a6bb5b9862b824cdf44bd1a11eb2cb9d70321cdc500d31a6786e734bc796200ad2b781d0b55f5a49f3dc11c24a18c83b3609e494f7a89cb93e836e967f7f56e1c6779ee74bc0564cba64799844c4f38ba9523b0cc5987b366ce8e1d1a80ebdeb4e2821d3b74901ca74734478d3c5ca2aab1bae32129d7060ce1ce117196062cab13e22c964dce90be7e2c5f7035e36443c36b16cf5bbcb9824759f06a0b5ef7f561648cbf29cb94b289a56505165a7815b892316e41961a66b63f2b89660021983e8c56f0fbae8e5a43711a8edc6a6ed8d870c32367478f1249e696a29c1e2338d76dbbd98c8cddfd232363fc3b49a96461a1c13d7bf6af74ce6f91767777b7cc9cc141a9dfd64ffafa52ce4896e9fb569f7477f0d04b63e46eb924d7b776cac84c96b62ff365699086ae0d71496de3e1a1cd388ea36dc866b3d962d77695ba7795ae6cb61cca0af04d14a528bf5fcd30fc9f7d93e3afa02f687acf16ef75b992c73c8af5cffaf4a978bd1a49c0b09b6f664bbe6a38c1a2288a2210a00b746d00f2152ae0a9eac00248264a29694e0a92e8a4e0f5100621231001064250b2821ff0f0441226c0820843230042eee53fef902856b9a70f1169d1f2a3922a526e39237fae87531ff5a4709f2d28b5569549a634db4d5efcd1b28781458f8d0d37383c7276f4e87e0de0e89f2f7faa2e20632aa57595f276c8980cc817ff9c29304b8332cfa7e00d29e5df903143f0522d2e30393d5ca07a7038978ba6e6868d895ed9ed8594e9cff9ed8849ae38c0382040e44ccf8e655b9fb4393133ac81643f754f55fd9203f2c5bfcedad3a4ee80b35dc5e1504854e19ee7b97b1ead95cea6b552cfbb22163f318899cc8776d4e3a77b987ec0f59333242364fe7da4943743ca2ff7f73d12b8d4df957eca1070cd13b0f4b02dd8371913042cf3017ee06e2ff8197129566012d8b22cb08f21a4f75c2a81208e079e4020e003fcc0b0960d69118474fa6b3a81d25f48247f21c91e080cf0bc4126c997a4c21ece3cf4190296d1f8017719f6e58e443ae198ffcd1bda4bb5b8c864d74d9698ba739df2546ae28b4b8069e76c3e83f82fef67f0c0fb7296d92fdb4f34158cbf3815b2d5a27b31656db1a7aa8dfa08f57e225ab067d02d14d861f48b7fbfd0fa25a792614deb971c0ba694dbb7271aacb4d25a9bf24c6464584ac6485c028c049ba8e7a94eaa16bf5d058982f7bec3e82afc50fd4f204b7be0e9714cfe04e29cbcf727ef81f42668b2e8d0390719e3456839d120a3a9890e3d86898a658237f84d30aa04983ecd4355d784dcb756ea9c54b58834965ebe747486e09c584c3aa76731e1d2936e2c1574c03bb18515456ce143d1135e72bebc5e3ac831c6186349b6f71b30b30e335b5007048c31c6189965befd9b6b0ba1993c01f7511b798173476d44411c3ccc85b9dc0a10449f45dcfd7c1dfae9bdb533dd931aae60f7f078c80476c94d5b5660e9925d728d7bd8d9449bade6a6c5f902045710014fe0d9dd3dde3940bebcefeb81177f17ec1e9e1f78be78f3fbca15681ba4ff68dc5c05360cfdf7d6c898168190ad1c39433f092382a8b9f59248b7d60bdaae697cb389707fcb18d61843d0767ca6a8e2870725a618228618451c2122e8de9e5fcb182b636cec872d5830fb62081f642e54ac40091f3cd1025a101d951bd0820738e8d142043e68a1841f23470cd123460f27a85f894471e9495f8944e3f2c4066108b39271ddd8d890a37d505029478129d92f981c7be8a0a06c267e536962ef7adea5f9cf94b2f197fea093f08687e348025d36277e7d607339497347dea2af762229a5f4e818d97b2610b9031d6755389b5a7523631cb0ba59aee674b91267d347345bfefafeebbcfa536f32a61bea84648c9f1e2069ce08b869918ca1479031344773b51605499a342783828878ab7924908b0b0c8c8c0c0d0d69355b0e902f08186d1c27a5e7791e4873f4c8c8c30ea4b9942354f255ea2a183be9805efcd520f25a1cd1373636e4b872862ef0388e3639316c060090ae27468c9cdc40a6bcceda0e3c3122f3f20405eeee65dfc174d22eca41624e174dcd0d1d3970c899d74a2badb452ca9694cfd9d9b673b6548e1b224ad22fd339888a48493049ffa4f8fdd712ca1e7fe648939baae614fab269aabafb39797413c33017e5ccfc96497a98bc93c9490577e478f889a228cea7ed9d4c4e300a050719e39dcccb167bd01520f88222116b0332742a248b87874f5af1f016197eb5d65a6badb5d65a6bad36375a012d3c5fe428a758b9bb3bb55da5abce095ef3bceeee1a290fb7fcb87bad599aa5c19b257d2fee1a6ebe10551b115c8d09f9e28feb9e60cebb2fc0331b1b6e7078e4ece8b182afe471f282c22c32f94f9f177f92a73f1781615446c609f5c5f1ee019b270558d2ec204c22c9b26197d5dfdddffddddfb5febedd9d21de4972c818d913839e628b765151d14fd1a554cef40442c674dd9a256814940ca3e2bf58001f0c79ab6f12ace4339a4b6657bfc5792fc6dff71f86ab55174d91bacb190b03d9f2318a2eba8842916cb511b9246040492452aba88b76a6eee460f811625d3818d99b50630922848af6a9088683318df01ed2b5b3c759d2e78f399b425068cfa97b7a78d8446c3f5caea279c5192064ebf4decf388106901ee882b93ed714e79c738a53a4b394178c638fdded639a73ca29e79c34ee34344d43632d0a1518d642f23400152679b4621ef5110974859ce9dc751064770146f6af01a36bfb169432c65ad1696c77ad8dd4664bde8c0c818d7460df3ca4144663c44323f5262828284889288ee2288ee278131414141414746d5729aa891798a092b3d9e8cc56a386b5d68ea3cfc427531be99e34093a739635e2a1db31fbd378c245cec8968dc2da5c5c683ce1b9789e67f25c687881617476049b41a215efc558cc23eeeec5f86b6b7f9c255db8c999993b210f73f728e3d891b54dd016d1d001ee847a606d2c24813b7f5b4c177a10401358bea4ed0618d6097547b909dc8f9bcd96a57df83f6b7b5b245ff466ab659ab5b5cdc38ecea0e8d1aade92bef410b86f411fd6c710bf4f72dbd809398bb6e4065f4f601eac8d08c36610edf91282d65604cbf9821b7d041946679d12f2c55f064e14a94d91bdab829473276c9e27686d1e1ae902c3e491b5f5e817ff7b8f6875e1340c520a994c26171739d339668bc2e03281a351d099b5599bcd66abd485e37209599bb5e556ac70ad646a7a1cc7711c7ffe65d06ab5fa5641385dadba0e87db01be6f7fa4fd071002772ff3cb1d27d82b1974c129300e1fc71e1f1dc9a44ea2d1be1f42b73cd0836ce36ee33a8cb1976004eb479d8f3b93678a1e8a395098b1c0bb9b95cd6ab6e44d8fd39c9d9dea32924811c964a24ce4e9f9219bf58f0ee972a5e9a43f3bab6cd659f5e99732e7a1125a8bec4eb7a4d4f564d96cd99fe2953326552673d6d7364c66d7e064b25a55a75c630b8c5395728ea5f3688a77ce446cc129524a9bc8edbbb516ac29a1d4500a576529a1ec5f33e78c9fad0904698aa2accaaa4c26abb22a4b11a164606a598d96cfe587878cf1974a6098cc551ece3aa981ecca66b4ae4d994c2693017101c4870b2062134b1802880b205f7001c4081740bc00322446ade5e8c881478dfabd34ae7e130f7bd8c48b994e4c2727d36b60039d496f8b1411d23388879eba418e1e79e844b139f3304f7092be55f4882ea9b1bae33c46a66f36008761347623b6e3ac9393877f90ee5c82fafbb01d73898747d428fb55d1b85014ac990d860e0bc8d62c9a7316154dd994dd1dd8ae14c1b02f74dd0c61fafd3aac3dc18246198382913c9c05a33e53c7dcc17d824cdb9776db4badeace2b8974784b85e526f59d3df52c3729dfd95b9ff2fe7426679afa64e17219e6a7a8645c86f92baa95cb303fa5827119e677cc5ba9ef5151497f49a926117f7167c1a68c269341878892380b468d74a6b22c036506c940415121d74e22d9ff4edb24722f164a8e08f15076a839bbe7112147841c2132659476693774a872f0543b76b84fa594b424b7db4fcdd26b6fd324495830495433319d3c9393574f384cb3b6b7c85ba923b324dd5afca0b3d98c86a74c1275a635ad694d6b5ad39ae632826192a887645119c8d05994e6a167fa7b3f9592a2329061bf9c1e4865f86483f2fac400f75064a4aa97d2792a2b279bbb523548b31002287f51835c965f40f153802cbf804228eb982d9aa3b91ccdcd30ccb955ca2575c2f1efe5eecf9b218a44991575c201e361ab5868134dd253680af5149ab829643a29a06613a5496eb71faa64345d1b7ae8cd9bfd4ba98f0c46694242ce82d1dcc4f94ea642c8feb44677e8d8c9fe398c43336a448fe8921a3b51b59c70785e539fec4d67d7dff386b2a80d01c18bdca77be4c7911f477e1cf19131325399b3baf7aeb45a931c3c7413af4f24500705c85c1f870b9131f2a4038efb34740f1125219ae2e4f110d401fb288dd23cfe26ea7db3253bc80cf2037c9ff4b0b6d96e5f8153a480493add031140c8481f821d8c8cfa8d64a046ab2cbfbc42044c4d4a38c2cc94051230a5016616fab8c8fe474bcfc7e321cc5bd102571c8649a369d204be4f7ad2056d161cd2dfa71b7416d003c70e55601ea0f8f104129e3084e001e3e5385a4401851e8c00092b40f2aa71c4122b6620a4064ea0bdb2008214403723233260c18bc2ac7ac8664312854d0a2a7e501d05093cf8298881050994e8a2a70a20b48008540881c4b64382287c2def52e3a2b1e94a695da5bca399ba358862be53ca25e3a56a2704f697b25ead645c34358dfda7a556d99d049e19d6925b5e5c60d8bd2edc30ccdb6ba7819a2bc8851445341acd8bbcc3fccef2b4009ba7d75cc82a3b48a3d168341a8d082cc03192354bc004120918c2fe54e874dbc212554aeb2ae5c19c1461d8149ab8130998bec6691401974a6f32954ebc9389a9745232999c3c53e93e40beaa40851b174397d4d16b49d776b71a24e3a55a5c6026919782ee9911851f11a8c4ba3168047256fbed366f371a4f60017463378ece72217b2e5b37ca181c7c349460dad99c45a9145e3b23dd2845072463bab1fbe96edd68c400f2c53bd7388ee398bdeb5462a42004f9a07bb50ac3efc3b87fb50a439377f973f349255f2df3f15aeb974f2a1d03c85ea70f674b474ee184256a27effd3fc834a1999c62263798e4a95614f6b07d4ce012a76f9faf3cfcc51f0461de0ecfc4e4e4d5aa0a6130156a0ce1239c1e55da738aa2288aa228ceef45175d965d5cf9cc7b68bdf82404dec34e12af213cbcfcc3193388f785fa93a741bdcb401805e20062f8423dac068de87aa140da335f4c1d10b08b2b0d308cd28e8e8e684734b09b265a2a914e38baffdee4798d6291f118e7e4514e64a0c84051b1e0c8789497818202834a4fefc51ee4d14eea5bf9aaf8c44df2d27b7474f214225750c189d54ac94a49cee868896b2553f37d9f924fc9a74409ad95d2879d28a14a949c283951b29aad02e4d24b936975bf5b82f425d5edc0ff56241fe69ca38d0d373839646464645ccac8c899f92de432481b4d8584c167ba0a19e36ffb522933ca79887de0116a5ccf23145c420c5ff7ef542d21feeb820de40db4923bb0853ca44902f35ca635375b3d8eb9d9c247634d0d2f00a76a96a72993bdca4b65273bd975dd3cd5d09f12843bd54a6e550a2381bb0e26c731ecf1dd377e6310aef31e7becb1c71e7b041a81ac90ad1a46a0116804b2915eaa835c88608aa68c1d7f93b4a9b97123efc53816c3b1d8bc17e3effb0f4359c262cd11dcb717a557c24a432ce49228634a9d89c03480c0261c33e11816f18e50ac7318a0c015b4393da05ff56489878e45dc83653513c7b02863421c6be1a705a016461c136ae1a706c7623886633886633886632d049d6c5044cae92eadb5524a29a594524a293bdad14e4a7badbcd6da9694b46dad6d6befbdd7765b6badd5f1f076db96e5b6fd6385db6a446e30ee3030523a0c8ca5d4ca406116efc251cd02248432bd8b2084b2bb77e136b8796c895326a4c8ee351b91564dcbaf40e359be9fa1f22b29b8294b468b879c99df5dd9529cc8f715c016107659401a200ccf003f700554015d48f64f811eeba336ea1c0965029e4010d63ff84672c11908eba2b9a4569b6142b6749039afd564ae56abd56ab55a4b632c083073b7dbcf0814d4a44b6ba52e7b205da4bfb6bdd20ff7b5b3f3c3bf4affc3ea65dff4aa4622652092315e00587391650cb0ee22b717f2c53f7704fb24d2f3f03291543de64b6cbeb0e0947a8057c58243fa189e2f6dc1becd9739de8ce337ce7182321ed62630ac8ffa8fc295b4d17d3f3642bec81c5824215f64865d1c4d80bcf2f003f2c57f16c4a9c71ce77834c7a3391eed70131474ef3d3aca9914b975df7befbdb7e6766ff7766ff7766fd7fb339e2fb4ebe81258c6b48c310186c9253ab358901d1a4f17c93ed37976aaa9bad51c81c613d8850cf33a12a9f3d3c9637c129b33366333e6d23f933b70c2175034e184911842b2095110420284295040a48997c98ce63c2719d5a143b364363309e38b1c52470e1c72a474c1066e18fc25aa083d107d5e21984148103daf5a650e67ad647f1d149037140e0797a16d4440c2208b268032801f18964ab58d4e5921954a350cfd3970381c0e970337217c975577a5b4ae52deaabbb90d05e17f18065ed5f9b911883e30578684448bdd3d27adb2527ac22125bd5e388bc8cc9e0dae606e72dcd0423a41975f2982e9c39e947bb81a4c79d8b7452233b35a9215a01ba8644e58f52854240200000943150000200c088482c190482c2655d6d51e14000b648650745e381687834990c3480ca218669031800000084246664868d6010b12f29bbf88c6095a2f6c653d3cb35e88f548202c41c98379b9000e77678b8e9163ebd738a5ca605b4e8c45f91ba34bcd27b005636f081a3588c10b2d554915a80f196033ccb4ae639d85ff99c59c8a5323ac76f4be90f8b3357b78338533ac39db3bb6351c10b89cd5b2ff61a8035a3f6fa88ddf2d04e756571bd009df1d29289ff7e8b5f7fb7f695e1da12fa8a6e3bd235fcf35dac8ac055151cd9ba871a9c6891a1d75d007d2263855a3a22b343a361ea317db6295289d8ebb821bdc3a9acc14045c48af7ee49d42f877ffc4cf6fba32d04d299ad3d6317d6b9aec86fdf7f3d42e5f9909870cd76b50a2671c9ca562ea9ff1cd84b5c73e6909ac9fc59394f1a61aab06bf2fc04ed55b9ac1299e81936c3338fb1f51ebfd2f3015ff9f9449214ea0a94c8dc4911198c0e5b96ee50e2282bb779f33277b333bfee8c2a790462acf283add9488050545ef173ab97eda71e094860661c1ad81ea98a12ae0f672b47a3a0e4492b0f9a7dd4a02db9b44eeba05060c172a1b27dafbb4e07abfb7eca9e9d833c89d1c70eae8fdc4b129f58e6305691be3a4e1c6bd85081fc764170204290d95ab277953851d52759e56dcc82ca1b01d8571deeb87c4671fd218164281397159216c93ebf7d2441ce6b8ae56dabf69af12a9146d0669c0a04711a184dd243de7103c6072e84afe781ac28085148f64a775ead276c0a005010722eb54123a46a0f71605f6af174585259197caef0624c0ca583c7004147c1383e518923fd76a30e21c70d264bde8fb611a027dbbf8c3f49d5f8a24edc9540f2a6b3a43686a8ae5e84bb1d8369da138b6c384c6382c0ff295c85c4ac55f5c4f5d27f66c25e334736920c2ad9db9135467be95917e777a6df32dae652657dab5f979ee8be79ef7e153e8e58b227bf45111a6bce7a7c5381099f5eb4a48fc4f148e05f864293d149cbffe4e105711f4e1d709f2f7a809cc65d031397432d505d751edd75230185d3ed0eb404a90af3adb311211cc1666288f2a68731014cdc3925d23098aea3a6fec0575dcb6f3f43109840277e945dc06ac7646dc368ca5b182221c8363a9ba9901d53d7d7359df2e195fea9695497e03c0d7de608859a021f4c0918e4fcd79655982c2ca43a048a069387809bb6b8879933542a0d96162d252bfd6a04944a1ab78022bb943e426acc62d89b47205141a18cefce5bf23d667481a22257cad95b1636c470abe9912783c83bd08bc910cbb95165ab602723455de201800cf44a11c47b31c0fce58d611cc31011dcef6077e644dec6cfed831bea3672762f9506d98ab216ed0d54503c987abaccf8c7a3917cd95efa09636c468ef2659b632e6a017bdbe6349198196a2b93519454d358052a174a6c2540f25ecec65c58a1dd459e3eecfd997517951bc4719fc1f6643f1860d728b66a508545b10e275a0d2dd884a297173c8b2920deb5862cc508b30742336d5ac3f6709e0ff6a29cd26e008ffac4f2d57259c06957f8f7ec91049d714ebaa919ca39644dcb93a098303e47093364b07e0ceb3a8a5a5cdb05535e993ec47887799057bb4be6e9de0b39a4f99e082e56c824181c74c58a42a504a0301348db66e6743274928bb4b295f5691f15714dcedeb690465c8f337231739d9b3bad05a71f4ea9eee7ebb3f7df011080c4773e229283da65c2011635c1094923aca547566cde4d89a616c690a9ea5a90d49d6e17853dfb94619f771ba772c32849e846b59277fabdadc485654802c70aa20a9e76bdd7a0a023d5f3f58cf702612034264cb18470336986d59af6e080fe4a6ef743167aa97377041c6564257f3c32bb69a78a02e4eb9b1c516a2c53a0a2df35088e8791332cfc6b5ca080fd23253fab409165bdd319b27c09c3e44ddfcaf8872c33d0b68f445195e6f50e9d443d70fc0b7ec441b38bcb1688cde47d016f88a1239dc3e5bcdfe5a51fe126bad0da7d558791dedd617aab5862926d43a98016aaa66f843591d0683c3a6b5f6e9a053e2467ad554adb54b811a06e51503c643df5503f11850d772748f2d548c6c518931dc08235b44b838ead2efc70827338cfeee02d4e9d5e70b80f7cc940a29f806fe775a6780097e29cf14913a77ff0b1e8c754b646dc46b35bd89b1f5acc8854ed287f0839f4547c6cddcdda183ba0b4ee30d3a4348a7d156878f36642bfab08a46b6a0b19533ab3f6927008f1d240a67a6226c10223c1afd9750a1694c879a5da55e4a3ab6644cf11e4eadd3ed4a5344ca1e5454fe6d44a190a00c8d4d67623a0ae943925e3adae940f158ecdffb82d41cc3a28c7d68773a175b476fb4c07b6b849bf3ce3164718dada5673006de60dacc57512eba6ff7e5800e35905395488c54db1686d2bad2f6f6046329ff7af7a5de667bb5acd29e02c508813f2e2dbb79e7b859c3b95fc75519bb6ecfa9bc5d2c5424b1613f45e701ab8f95610d7dc9a9b7aafd2fc1b772cb51302a3a755305926d0a5fbd2dd9f28fc9f937bee5362fc53e8667eb219c92cbbfd2a264b54862913a52ba25a86f17a52bd696a2b7a2577665ab7ec56fc8dcac6c75796d1bdf8362c46d15f7402cb5fe09a3a66cd145552b9324e7b05ef6d736b5269466119340843b3ca7e57b82e60b4ee8bf92a3e74ba962644c29a94aaabe344a9498e6358c60b0090956c09191b4eca868d20003735532fc666df4a551558f8a5a09a72941f37a51387436409520ec47d0a7a6e59f9333b80d115ea1e06a720fc56cf2b592fe41452dd83330cbbaba20d4a8552f7e4a18632fa14a2564d6ec5bb18416d2139da61bb540214faae2ad2046add1b093a9a1b3c33b0498da0e6076e6c09851cbf782aff70bdfa847a7fa34914e823c14a30be3b898763f53b23df369e09c5aa08382b80f94e0e6918ed3d7047f1559c8f30cd63fa339c1840921f6ba5fbe64b57688348bf22be7753264c7567a85dcb5ab19fe3b127e5bc115a5007e2bbb716ba416664f57edc7abc3890b2acdfe1eb48ff8c60fcfa8b56aab3c41edf4da161e7f6549f6f31d0e37b6bba312e3dd27daafc7144fbb3cfd77478ce57d079040036a0a1c1fa16346c94a2fa0cb30d67c04ca210efdf462885169cea3e959e589cd1842b16608e60c65fa05c48bf93d52e0f43a26860785c723b91f4454ece8d26a8716c078051a80c942408a5444760f45751d29bd2388fb2e291ef20275d82c32fdb9793afb1e162a56026eb1d8bb162b573fc419b1e1c223b66f531cb4180a98b43de8d4eb31e023b18fcf2fcecef6350b2dab3044abb54d166770a9554916f473ceb1815a8a99a6ef8408eb7d01b6f9090857d23631e92963544c8312731f73912583c0193ff33e45bf97f585d4f63cbfae6991eb39908c6ab7fd92d9d4f22930d111b4b0cf3a2f60e58d832ab35e09900f9b89f2d603c705a1aae417f298134fcd94f7e65ae64cd670d36927a0687a0d06a1d9db2b22b6860735ac0c2776703d5c4c647f9b085487932703e971a6e971236717da00408edc0b2f011e8c259a5a6bb37b618d0641cbd124de55e9a517050ea7f7a21398824108a9925e4cb1bd564252044debc156be20cb68d5b2bd7a79b6cbc87d16c33f6eb2416918631888231f375a67a21b7845ef5fc1d5b883e30e30a51d20e538bc930fa510b7a07efdc873c1b2edf2f03654c0ddcf81cd685fb14b829ba9ce5f8b3793d12424ffbde6e5562958be0a970cb0124e27144013e414c7ce57a3bd851f940f7757c5ee4508a1746e16e71f9fd680ce76ba9d3a97bd0ea9b0ffe550152b7a0ee96565f05f02c3b8cfa3b64370a7c741719443cadde15029343db3cf3b1b0b53b91442217dbbbdd84dc4079a0b6a793359be47c91a50129ee4c3cc0a3218a9e87648d8f3e6746118703b7fcf6fe3e0f1e86bd3b6347a28fcf2cc3990fd19913226a9e3c2c1ffcc0e681641f7a74012cc87775e6a9bc62fca6599eb367576ce214087be65765b101f8320f9fc6a1cbc6d385c77d9341932c950a9dc58c04700e4aab8e79abe34ee78756c7881b5dfd81c12cb18f3b4dd72311edd1d1e644b67ccebe04043a2738936b6698da44418b060e6a624949a29e69bc9c6f25f6fb94ceb9b0d65635655bffec871a70a520ab10411b2fc5717f3ab9c31fcc1a811bd6b6d79593560e082890505eb4515fb98b33907a6d5a3614af9ca07b89dfca14044136413f5c1f1c938e755b272e3c0c357afad3ac00780e15b9083ccfd6b3e5b855358522dc3cd3089760600c595c29a5652036edccfa38c31fea697907a0ec09310e1e214e3c67c80404d5d0895b42db08d87f96cdf280b078cb63c7692c6070f11774c6b5f5e67aabb3f1bf536cb14120f98e4389ec355ee30393ba1a1ecc37936ecbc318459b504c7e7562f2b5c067054d9cce074f5ed0d417d0f2fb274e7ec828e37c9b26929f7a91458c9bba51aceee41a2e5652a12380bdafb182987fdef9a4a989927426da256b9ff647c85a5c43a991a1cce9ef2897d32b4b82cd246bef6fb7f11a494fe6f7067e0f3207238f78c25352923069d77e1afbb3da87fcb8446516803ffe2dd4e60a6d942c7874603f79ac2f1e8a1dfae246e876c1b8b143ae1c52cc9049792eaef96d16bbb3fe1c5d03dc804067727bcf2ba20dd664bb064daaa03577d3be17576a73ba02bd9817073d178f71a5ea2e9ba2bf6ef75c5c82e91ad3be4d8cf1cdcbae6cfc7afc9440fbcbae62ae145d3793ca705eb64681b7269a07fab587a8dd88136400257f701891cfb2ee35ad9fc50914e7d7856ba933ae349a5f9283e444cf83e20b898e9f5cef6f6bdd5c2df380a875c27fcb501e61fcaebf12327dd6e0b176d51a2a7c9a5ca527639cde26ca3c8ac049227c146984138391c8555759ef0dd0cc8c0eb343531ad947d034c683cd79893f964d9849b39f7ed006d23669337c14691cbfc64c9519be0c1619bb3c50e36b48b590be83f98c1f86cc0f8e6bc019c9184a51c9076cbf9ef5b0f8b34eb742b81ebc6b608c7bbca6ee332b3a29e88c612f88b88f4e4ba67e2f863a71a78aa3476dad10088fdaeaea52fd52772ad6b946ec119bb9662a3a53c8f91197d68d3e1affb27754c35c577dcea7859c5888d556613a01f1bdd597254e76802af55834dfe9ed4e39297ef24a640ed48c6cc9920f49dd786414f725af7941223da4ffa8f01aed2a5a0a889046a0445fd46a8315ce1a611884c15eb4c78e3a676a81310466fc293caee176c78978cc97a6154d0666d9fa39364cae525c4beb2385d78b6b21efbaa18455f2bbceaa4915a9aa9112dac603f05fadbb914fcb2b215e773f80f91b97cc5a6e1fbcee38743fa3612790e35eb1b0afbc02919dd3e19c8ba854cd0afedc0f03a6f1ad8f75d9d87998f745dde7c9a0c8da8ff2b88a1117018f14ba275e3757e6700c34154b676d0f674e226cfd5bca4b17d51e33de425a1552f598df2b73360d16bc0314c645dd7f1164dcfe5e0b97e61607a962bc2fa7f89d3c4a36f231819cdfc2e6d0c80e99079756a7cbb3fc761c12e1f4471b24333bb03c05ac7ab39abb57b95fe32d796c450d90ec7fee2de7b6f70a3d3b4cf0db1d1401a5a40b051f3c8c6f383b5654df500a1bec7d59c4b5e34cc1d081fa6a284ae214d9471d2c7a6b6ba20ebeb2c15728ff8597c7540aa009d05d535cdd54391504847241430431ae093c7d4f14d9d633d33846239df3a38c56699414bbf92351abb1a538bcba1397428a6a9337ba391230da25e512eaa8234d5db8cd3ef9770c1dca394f9ca6ce8ba3963774203be8ef31e9fbdebab5485f0ce0429a63c112d2a8b8cb05c49a2d6b7b1eee9df6eee0a3e483c4e48ba571153a7ea9e1a808738b56ee413977e0c13c639894d863c09983cb97c46462d492749944d0a5cd9d2acf685907116133ddb1fff22a6fa12d34be4d5c61f9b6eafb667f5909e25e8d3d5aaf4a669187b798569859ed643b307f62c9525e4ecb3e57eb8facb589b372ef5e236aec8dcb6d5a48d221725ebd4d62d62785fe18a180ac16d022ba5f21b17fcac567ce29e9d4d5bbd802ab0bc101c440966bacff79a95da07108e336531904ce464ff37ff317555cb7d25fefa7837fc2d082a0834715d9b966fc90eae7a1f68dc6cb24d35c7d193c9c15586e7c4185c3a94b531ea87587644dc9e21d46bb899e5c5a84f40629a9b0aaf9cd899d4b96a578907be4f2068bdbe8c576dd035ca2cb44ffc31dc9a8d646b27ff974aaf73f822dd4cbf617524a9c4618069141d3f360847dcbd527357e8a4808aff567f220d240fb8302067e6bbc67e4a5a28fbc89c5f200d36233d5e2307eec5306a215d2fd3fd81005074c15af16501b2839306a6a7956f703860b9bd0924a013f4eb66ed840cf40c532c97e949166767bc1f8b386dca6af16134a36858f88ff05a314c5cb10e48cb943d44270cc0dd36fb0b0cd2ab5b1a4553d1c818794e26d26a87a8cde57a4a9bbee3107743c89fc968277a9cfaef3a8a09e4a63812eec4ad583f5e861e8e0103626c7c84f8c8aa15673af4873fb8682ac0b741557cb42bdeb94d8353c5ef9e161aa2ca25f6ba10962a060a6a5744ee141f9f56b074293ef633c2f0f996def9066892e927d98c29537b8f3622905393d38753345b083219c43989eb2256d1e293aa65ca045c1a3a748df89ec0454e2d043ef009baaf50c55defdad05b853eaa161f7cbf893e09ff011742894fb4f173a9e042328ba3253c5038cd994b616017853b325565df5e14081879a804de832bacd692ec719dfe2d8340f4aec6f68122666e6e886c1496f18b408aaed8cb442b9cdbc74cd3bbd30fba08723c4585fca316365e964043c84a01c72d4f9b280ca0b98196e244ff5b8fb46b9424607af4f20b65cf31f7046e34aeb1e78e17356a34eb7b149d9bc11e19613aea95e940d2b8145cd3c10e464693d3e19c0df46aaf14f540d28937345106a2597946f759feb67160b22828da41eef142745b18fac684905828503f78970db03b2b0ec08d175e1d9286a9953029ccc1b37413e8d4e39a570e8cffb599b719eeb84bc66358cbf48317741925518197a157edbb5ee71ba93da8b4ddd05f8903f24dc3e163eb758338e80b57caa103507edc8ebeb7b4c4ee4ecaec7e6a0f0dec7205dc3268ded9a3aeac2edfe5c550742e3234ba47351d1e9f8418c2faa11119b420bcad0c00c657e8f37055ef4159c4f52dfb65e40461e1e2d264d6fb780a756a20d97b50fdd1ccfdf39e28fe7c9962dc5ea3449cca6296c00c96a21c2ec05fd90c2c5b82e51e8cced47c68b95b273caf234ed94d4bf017eb71e9129ba4263c7f865ec65493ee29460c1b7a21c249043798252495be6700cc7358bb20f1bc9131fd71e1c2bb29076eccbbd8c9583183f077bac9b00ac9bf803e7f040efa269e1c7596729a56ada8520c4d5de5a24a83bb54d7a4faae2955fca946c01f26fabc38ce3e7612524bdd6a06d6a01a94110618ab62de858052db18b37c81e90367f0804ec47d4991f1407ca427d7274bbe394dc89d04df9ba1a83b5440119d89b5c62926826d4cfa88d70e8b4a4e0f64e4ab2e30af619c5ea71928aab960351d3aa9f377305973c3f4389a7e915f6c886319ac0dc470665b804bcc993b2e3ac48299a2e6f64a7f5ef6c0abbaba7b6618730ef578aaba3875c845e8af3e3d77c80f32e11a667e1718e8c3ac5da1c72e05d844da06fd13f059ee174f0805ebf90258a7a8d73f384238b174a5e0f651374643bbe4fb3ea882dbf5814dd498ada31226aedf6ab6d8c91eabf6ea85ac8f1176c47a5d98594c0262b53adcb0fd582ee1e644c4085d4e61163cbdd48f08111380e9323082a177dd2dfa10c3d1356b28717ad45d64035198f2abf4b63804ac1e621a5200a1b16e69f07dc4f572859ca9107364db76f370919f2c09836a2126867eeee19165e1c9b597a0780d5310fc843cc5a6effbe0332bd84c4b99c92a12d443c3296ab4348d10d83f353cf334e5dc475ed9cc2c46ea3d88a855c5004a6cc8414f7b25edb61eff4fb52b401fac8c655b27b6fcac271dc52bac00621c18b0fd2f9d913eff6aa7deb3c07054b19a007acb7ac58bf4035c4f751f43e34f0929f057a5a8ecbfbda41a8a68422c2428377b3a467e531eb8a906fa0b40f1cbc751146c95e8d20100878b7c3f3484b88fa964ae44c94b9c70dfe65ff46eb78fef50d0f4185b3745331fead76841cbc9f77b6c408dd20ea37f38be8e3a04152499a99a32edc622b663cdc38f368ecf1c2eb107cdaed8c45afe31b8717bc39314faf633cd91b4d0beb0d826e6e726b38bd3c8b0e00cc62b774b656df314231d731b66d682fb995ef096f90fedaaf7a950e713cecfc4f89fccc153e226e37c2599febd64291c1f45bc775e25154283581ca2f4c20424fedd71ec58d91f40756eedd3d3408cac908c07cd9a9c1f08685ad919a67ab0c0c5f3f6788cc9bce5134840937af112e2fba6e35a265081e6ec502f27f8fcc2afe0035f0c9a35b827e71aefa379b8dfe80ea9efdaa30e1bde99d9f33e1832ba3ce95985c570fed91ec5866c03146d8259f1e86783b0c13bc9f89cf852acac0f63173063dbf6830f79eb799cfad4f4097ffedd2670266640fff6c8a640e57be3197f84caacc9f8a3372a80d98e71c1e34fb9557bd984a184032dbf23039a81af923a801cf53833cc5e4f0de34a6a6a17ae79771fc3050c43a76530df231c813485a95e1ce688b1224107ff31a2d960be8f3fa5ae4c4b30c58c98d8b15df673c974d5ad860f5bd099d38110b49cde6578340918dd1f0087ce581f8dcb06ce7f906b0c2b4053b9c736792c8f310dfd67206f954b6576d9ca905c5d6eb51f9c4296f0d9cb1f1b69c2e08a21729ab8326143c05a96e9ee24d51a56c8ac9e0bcad77048e0ef1081f74d3d0750c1bdb5305bd49a191f0a6585463db153495db023e8b21c7053517748b0d4e7aeb69c372aa83018c287a5a91ae6cc29ce1dd54331fb075120975698477a82d2df5b2476200e61acd3753e2db20b2acd4156e433c301ed8edff8d8eb472108d37642973fe883c52c18de9159530796f2e61cfd0f5de3f5d9df317f4624eebdf058b40ce737121ef285314b7e5bb08df6477d800d5b416d410cae700f3f85988d59714d9fa799de85bc622b46f70b81cd0bacd468567cc5edea073741dc7d0be67e9a58327b5c86947ad1f01083551e473baece23d9086b7797d6bc468fded1b3715a78b49adc4105a2b3272fb61f5e7e0b070a2455ee149ab80645ccfc648ca900f30426884b181b14f2311a7e924a8f8db8c58239dae647828c1b8a3be28914dbb0f1b5f3a5d071a4af98b300d210a3bdc74a726ae69ef569d75d0f83bad58af586c43624a49cc732945b437a3ded884d63468d2d88ddb427cd0e3bd62bfcf74f81434077b5f39bbef41bbabbc2bb7e65a4b8f2da1dbe3b7a516ac547b6c801261bbe69f32096f2f1c0d75c5b435c87c1bfc261994aa5a6f517941a5045652b7e546ab65fc4cbe967d1ec6e964c89ba08c9b7feb9a7badfaa54e9f6e30120e9e9078513447a2c68b9f78f1db62ccd314a1bcc4dbac0af4ec5169c80ab4e6fc4010541e0b0338c902a012f8481d1369ce2c744e894429ec215c4a6959e09b8385ff44a510bf9dd39f49402b0d795f3232179be314b8aaf5cbd826fd8cd4e8df6151250808e3e319f46ccdfa015e92258098ff78d4d91c25afb96b64cd4c2a423ab64f7b538b6084a107f258a74e702bc7ddbd65ed6a6ae27e38f31a1e6c78d438dddcca54f5bee90ab018fd412642c1bcae51b7a551d7caaeea616d772fbba3d754fbb26b289baac5a20e4f3a3f36f9f18ca6b0d3c489cfb831a13403e623cf8d805953c8d20d135eb84cea2067a2b729a07bf2f400999b0a21132ae2c45f3e823901ea83d365b5333b401922d29087d0eb9318d156c465c1420bf4a2422c016240185c1155c38f54e42dd9442e20dd3639ade8b548d014de9b5185d2b9493768626e284f8deb5bb4311a51984281466effed0a016cf05fdc952090df4d3b053da7abf1fb6b24e35c10e3c520432b46829fb8fcccaea327b77950c371431559407a9b6a42969473360355f46decab78d2684fe0fd789339898b0a0fe9aa6aa2ad4d8532c852e9193486764303102cc444e27d43419f9320ce4096c480fc0e9ecabe61111a37199014c6bbdffa4a2447c7379f3129e6a1bb26426db8e0b1f587faee54ec69cb2a6570a4704b4b9800987cfbccb468f8b7af4c4484adeab377084ff03d7bf0b8aa14d04d717d7aa585281f967b81143231bd10335e0ca28ac760278ea11c528ffa7515f4aaaecede12089b8e6862420ebe92eda716ba87a9eff8faeb3031d2decb2e785e46b012d7395a92f4a9e135c6284baca3ca3b9a116576b5bae31f57bd1fcaa05664a2a12375caf30b5f4eae1b59dbe368ce3b37782512bfa04a7a32a42f439aff2fb3a3edeb3e3f6d00909b57dcd0450d07e2d58280ba648c4d025eb9a27b2be484b40feb8890875f1e1ab51b317781986ac9fa577bc2fb9c8dad9a78efbbab2c800e42077a21360a83f355efdfa5e9155b5f1fe19befcf7a8c96415f61d681459c86730192cf2f1ad3adcdf21c91974d58da60d703aaa31fd3f6289d882d1ac3bdfdee80b4ac8b91cb5a308b310021d52a2fe6c7220de154d182338cc113ad297530c9ccb34a60db018dcf8f2c1d3d106d85df8b035974347b97c3671d25622524db33208637d3e40c84b2f1a34100be8745df99fe86884cfb3fcc49641d63bd61fbeab650020fc797eb354a16530b59114ed20ec55006bade247aad2d4810d37d6489863791a5c062cfe65f4b753b12c05209b6994891ac8b5ff6a3b28db002247dc009941bf996c2a73f100cc2ad939f2a9863aaad06837de18e633cb2d40aab2036db4e8443528ff5363f7058d8109b8dd8a6d5a830e7a5ac5a0a95155980fc8008fd48848781ac047f8a0657cc6d6717f2349f7ccaaa330f0840474f605fc566b0cc2fb437b001fd64031266c4db2c1c042b3864f2919eb0a37c3b0b64588669a07928f3f12832db4bf1849a6331bcc175b78320d32b04ae2bd896bced1bd0b83015cf73a2c508ee0c715b6da0e95840d0fed53af28a483734d9e0d5aa06c47128d941628c9e4ed98540c1d380cde052980b2a2149096614fc02fda9dffa79abbcd7596d1dbabe7f2e56edebcd28e511833aa61826cee8d8c4c201f23fb8c2122fe2fdaf191f0c564895d2123ec448170eaccbdf7daab24bdd354137d6858204d8711566d246a39f82684b0b35527c50d9e31016b7642643911951359d007a4f4b61c54649ad96bf1465d4ead73a87ad0a31499e983e13488bcf867bc037c4b79c537128a550d5bb6108846d300481c09ee97e5a50cb6afc364ac19681647a722933b12a7190b56bb36020633beecebf09fc626c7e217418d10fb065028a575454669926d4b03cb17aa883bb121c3c80510aa5145cb3a0123d8145068159c024770ad132e8eecaa7db3eb765e0da23116e2cce2b8754de9c94874023d393b7d22669363e023808407ba9060e203539a507542e5b7588f72b0b6238d8498e7e6581d7b67d2b8b902b2b9639ad72f5368fa76c264140c3a8bea4d1c14198155c22aca3393265b1b2ff596d1adb1207c9340c338ad1caf768efa680c6f77fa7d1dd20cd9e9affa86037e9d7e6df2337ec4474e7f0080820152ec80ee92c4ec24ba06d14bc6ce1000eeebf7616263cb1ba1b96195e040d05070046ffcade76fb614811a2bf7b28bd10e9dd8c481bbba7caf987878a03c60fb003841589d4234461a02f253ecdfb24dcb659b6a217d621c2f569b8c91c814a3e1d2cd3831405a0458d5bee30d8ad5ab97b9a511e0ab362612ffb950073cc3dabd5a1f4d105fc79db886e580fe5ccf5c3d1404864563b616d19b0186fc724d68380797de9fad11cddb0ba749c42b957964cae89639c222759f020560d4cfcfc6fe6d05444bb5b3ab3caef6c524b012691b11170b59629d6c8596c69360a29796ca2f20778f5a3e519512ee3243642f2c246fc3ebb49b9bc413354673aa3d064344e948c41aef2d94affbb28b40ddcfeedea9c634d967edbd46459e5995c245ae69498168ab164184953ffbd5d62e96baa5f8f4c2ab7aa3eb793cfb5f21fb95735ec4bd1321910f7e9564787e8c3cf155134db0bf2808baa3393e50aebc5bf4d1bbaf133a09f754122ca7487d425ba54e30a7b763ef7d953d6d0b36aa7e0a24587613c0a962999a4b86c91bdf11916b7183c927106e475738d97967e673083391eb05a4005baf30dce8ff2439c83fc131de3712c29b9c01c8f9e9c8db6505c3469bd5a54dcaab81aa1cf4918b9d8a48211720506a7ef5d0805cbbf688b3f1fb44586d524f29c2a36a419f34cacd12837c301668cd33d8de0a0b250755f76db2465a88e207aa2c93146d3b7b750e966882a6dd6f343d50ca03ea1af4bb55451a8bf07849312d1811cfa518de922eadf9d686ad589e4dabb9b2a7bf8c86cff6ac9cf3d787af0fc583a58b57e945aa6ccc0e27af0dcd12965dd6c0d06c345f5e5e65aab391a1bbada62e96b9bfc18f1d6ac3399b3f351f98b9c77d667428b7f7e042338d33d6ea9636c8fad046b1667b0b060d698101f5a6ea423f1353071db4f7c052ea20a9ffc0b2051cc74d0855597c2a93589ebc1a2c1c21f2190c4abc6f577bf8bec72fc38b6c7cc6ec46438175f57532f3b8f0ec33db9b932087b7467129b09e8899ac91af552d1234d4cfc3d25ca69386387a36885587b53675ced3786846da6f78cebac2691b9f3963cd489d0f56a82674b1b0b74fa4165569592bd0b3218c712384adc0c30de4484a8c6b2cc8643c8f32a15542a0fc8d71dc86f372477e850421fca737fbf4777945662b88527787dbd278c8b510a6e2a868d4bf81e417bc091878264cd6fd6274e9f4d2d105e8dfe4576edfab66e6200a296b359bc2db89fcada825e22f6175181646b6fe313f7a39fa4df249bea416404fab3260a7cd3b366259903b77c346c72515f1c8ef9d765a19ea9e9efab545f7523782485a95d3b66407c1bb8d9d8dc939e2da01306a2222a71c1f62d452a550db1a22fcfe163874a89479d20f74a103da03a462833b808cdc77d5e1dc994b11456b64540b1d192a72a160a62bea992dd025d4aaf051673e0e8e27a343c064b80784f7fdcd5727c7faf12249c803d58f51ad0cb61c6914b06e4c8ad2172d47313f26d20874af7ab2302b9fe584a9705775b1228ad2441400877b71ce0f0c311a7df2c1a6973b14fb96445562913ea931ef195ea8e15e84421988232450afc2452353e79f8e6e5db4a1a8811525ece0349ed42d33c2b31f555d754ca7a38505c954dae6432fc7600c5aff4bb96753ef5472f1f8e0fc7e4c89b8726f692508330650cd0da5bcfb7edf32eaace046d7ebccd91a5c6f416876d11bcd2b2a5fd1d1bd22ca528ebeac44b034d3d843728eceda1a48038c508b0eda9eeafab466c0d5b921629b595b0768cce38be4a520c62154c66810269c4ccadd129ad98b7ff5f4d144ca1d56ee09cd06198644ea16330f8c3d6198d4527ac3c671e0023b08ff584bf1ccd20878b410dd64d315168fb979a6e97e8c8e4632bd51d844956f404cf02d48360cc442330bfe34cd75a81e7314eccea7587bdd817645ca5c7d295d2d0ed888fc072378b6f856ccfaa9d322693b7805c62cd5048a96752dbfac791d261e1e40062dbb964fcc572231636e07ef1add9812fa4fd17f7b12f48ed224402e9a7f9b734d428b3290069ac0467e718704ec2bbbce55fe0f0d0260ae9feb19ca70d94526e926fd6448323443563e24e8010e0a971c04a44d9a3a45170518d95d163e0f36ef0334d8797b75f68234f814104e19b492d47207e257aced17f52a1530cdfd174d7fa092287101454868220c5ef340de977cda0939caaa9c5765d0fae22b467df907dccac481892c8ea9bb2b8515cb0da8d38982a50e29ab14d5818eaa12ae08f344b2679e692e33e0d390e6f6a7fe2103ac0591cef303539602c5e4461e7a19460498da580debd0157fef010bc54385b369fc020479229c993e170754cb06732f7383eaae4ac6daf1cbfca7dba7fcef6048e5be3289febd0b4a9ffc6f34fcf5cfd2365c825114a6e69363de5ea2002b66ae7400d0350bb09494231975b4c0b75c6077a3ae1cc6d2f58eafa38ba05b909e4d47404ccf57ed6147a03a6da105de398aaa771f686c88b29979cbf8bfd247d3fc5b4a1a9aa01b7078a453aa3b285a0085748bee05e7d04942cf2ba40d6a0da9132760c5924333a19c82b06e8a8d1bb8f86d9a21bad147e2e688fbe8767e2e12b7226dd225bbfda046d3725fbde5270ffbaf46fae0221af514e360b1cb70a7a558a2c5fce5def7f237dac4b56a22250a60e08208f49b81e42e7afc62aa47da03b31ed30ebecd5aba0362270fc4ea1de531dd0e78786e76833e447fe9bc993bf1a989c7fb643851a7e129dea7b95354c1499b5ecd51737df3097bd70ff62e22976e5b5d1a7d6207ff3966132e7cf2f6e42c00c1822e50603f5905ec93a7f96dafed2893d90287864a9ba1b6b557f73bab1261d4529e30c37ef5639a8f4dfff0d66d2c0c0ed5ce4a43dc042c8ab7ca32b9597cd6f4a0ccb8658114fe179f78beba3f3ddf0256ddc75c84eee8dc1547267d6161ec6a9045bab1896591bbfa2a4ee8f6e2f70a588c2c2bd92200c92e9d57a05ea2e217d96c042a1ac29bb3c3c0a8cef0d96391052d290eb581c64d6d23cbc0dc70d41a681142d24a8fa06f88a5d1126578b1179550ea5fdf13e8c86a74559eae9b5a864c924312572eb6ee3a42b419cb4339484fd414e83e30a101240c139eecd24466037b0ba6e5223c315fe4404dd85e3d318eec22abb8d1fe5aee28f0a6e4ba2c820e8527574ef1244316974bc30d1e8e12669d94507ea2038c878e15a07f0b7865c9399698c131d91f3289fd4d0dac7c1707d5bd8933b853758657394bad3878429264a2291a93bab1bc444d23d0c8dd4fdd98e50c418da5c5d102596a0ba28dc67f6a86a88c895191194a2103a45b8561d4f56b998804319121d3e7ca55024ff094b0d93c91e8a466ad1c73e2d6baab12b01dd06b2a6a425ac1642d424f02b0d2a88482be21a2396f02a51a25b4180ac84b03d614ce46bd0f2225b0d738d9de81aa0ce262b70eff8bdb9943b398654ef97407a0c0e530346192d9ec2ac3ac14acfa031d6c1a1705770a6073e86faaaf9a9f08bd9abf0461b079ad1b6cb8d61e6ca6dab0d1edda556dca6f6812b384270513111cb103e912876102df2e5c371d2feb02c9b786f0bd9a9210d4c8a4325909b3410c13fc4b7f1084f933c23ddd305f2070fe8c3a95f9830310123c5c4736cada092bf0ee5af874821ee591efb38593589f105ef90cf24df38f16e22eb68252013cf915fe483c809951de8ae97c65cc223daad3e0175d0398a250b3e78ecb1f401a92083642e6e0750854d4a36375008d5e366f74a1b86f216bb122e568476e04bce79a7be294a1fff2e0b8ae45c23f3bfa04f36b94ece1426a108d5c139beeae376e044a826a819699f9eeb9b9463e9f432c4c7a6f0ea2b4c35f32374369404820864d3ef13fa8786694d8cbf46e97e3ac06d246df5aa2c3068189dbe5b508d33995579b72db68e5b90c022e38083d878ee805b0ce49f85fa6ae208708470d5b1679a414afd7bebf2fb24589dd7b220ba9ffea3084bf371d4d9e2e76fc3a2564e91056c8033cd2c250d586182b9602b217d8a6c2b167d3d708d28e99d1534da59a37cf5321042864f53fafaf3488c92689756276133e35aa5723951d4de327b1b0aed56b7493d493cae0a56f56c26a0ca63ae31b4505472f184bc1e97f5fd0c7a0bb30f114f11fb7b1b188ac26fe4e9872dc1fc8d4d2521fd04d487009e6c1107f01fc5da382f88309edada66287c78cf8c57bb2a9525b713019b4fef5f66a7089fba67141b070eba684a9d47f873489e9d57a763e05a0ef8c032a6d9876f4fdc87124e377f5e86c1f9e40566aed1ff9467602f258ddb6295b0eaeb4c7fa9bd2300d89e58b52c4d856c9142d1e12a5d149ea3ed6bc070e2cf2c75a19cdaee0c3011f5ecbd7e0fcdaaeb92276a5a0625d5190f422535ff7160aa0dcb118cdc95ac3b9fd0156ae3f7c5aa2e3f114b2540d69c9c9fc128d34546bc532608ca368f79fb7214a24bd956834a644e1fa34cc70e44dfb4f80fa6849627b96c8478183c528a921c5a4695e1af14e34767bdac0ac0192173590985e187a408f3861b186a60e5ad52e5cf6cd95d4ce81333b36a60d07e4b000596d6c3b9964b309e33b3e50cd44300403959c9b1d4952467374aeb469c1499e3e1cfb49d415c69b83f72922b5bf3959e41d1336d6dc49c768cc7080f76f66dda0218372511db9035615f3b38c8facd29f81053b4ffe50046f3d3d97219a4f9350e3f74c1d0317425d20d2376a99ed9cb808c27fd0001bbd6fe44409263707a1d8ef4fa8136692da113537e00f3ac9f8e7ec48f6fe83e8ab1b9abbac1f17d3ef836b9893c91c978a20650d856cf8300717d281dbaf33f8f2307a28b3730949ac8fd572a662b244e706fe3fd06bd50d509a370bf729638b10ae76e56669ba607e466d38e8bbbdd540ef707ae606aaa94eb1d10dcbe1bdd7ff7476c382a2f76b00bf406f0af30bbc701d0990f14eb62ddbae1d4c18432ae8b1c615c526c5ea01deba3c7da96424014ad55c78f15996a5915501cb801af288e9eeb37758e36cffe5302bc422354c4fd638e824823b28a2dcbcfc97e81e6f9410d0b371d7de5e893f4fb2d0e0585bb0d935fa0f61384cecd18a503409d9352f70764e74d48e306ac938dc43d749bd84c78143959a2602afe5062c4c367cc67d29bd7c4d0cd5a0783f5966c029bc49af27a735999c00b2b43c703e2e4d6b14dc2706068543124f94082dcf8f81177c399d18776413e1a3a6170d890c82c1330b76af302f6505602e59ba221807889bc49e39d0dcd3d5146fbba98c61e72f21f66835689f3140186a75b017273ed8d5fadb2e9e0db23d84ff3f034b3bb8b126c25c004e19c9e3504c9305b0dd99e6a03667750007b9d4bd8f28ca4e64b7a306e307ca665034609f020514826e773436e279be21fd0381d9f607ce35a6a094d4f4721ec507e75b659b1bc64f43a6b9e917cb3496af51388d3949b07f72a9aecdf20ae493bd86f0a562120aeafcd8d76d80d77dce349da390a32168526487a98f141e5ab1da1ce1d0813e7ef2e4ce24d7ac7894904c08f63eb4313a8b08b19071181a68342798604fa4fe994eeaf33f7160e2b629f5161a213388b1cd4eca77da424badcc47b111439b7b8868dbb9c8938921cef1c4fc33ab60d17a3e72d3cdf309e72501afedee2d7392fbbe4b7d946e4a7367cf6de6b3a39b36e7aae1da4e2a1d0020776b9eae3499f9f754672d2997e48879bfb5fc3c0719d909de5ecaac21b32948f40efbedbfcb6340d7dde6a22d4420464302a5d911022ee620a3c28be1622af447558b1aa55f1ba9a335fa75a0c72e1722aa470bb1569fbaba5fba18aa61f5958371266c4c1569f256ee2dc0c459d5dc1de7a5c3cf14f084bf421468c085308e6238fdb25501ea444b9bdd82c9d6fb9de2af81038c3e7020f287e85019f0710855217af789bb5fa00e8087ab3e79a6dadb4c00a2817fbb1c506b87a8df0f1c002b5fef5be9872a470e1a571b04961836fb51ff15117803a3d0b370db36a8a178032a8cb76d584edf20de3cffe96a8ac3064b4dc1c5e3bf31180b819e32a8c3773e266f4a93993b1fdfd2bd44c43a51170ac01a30ac60813acf3df304e9fc52a3c91e95ee819e6a3e39fe2745488a22a6caaf9e3e3e5385db815146fa01a52d4800cd150b0e29851468223100a4686cf03aa03a80b00448ffe86a563597416fd343640c47394851f8dcabde1908a1e66ddba16711ed140ce21321be8bc851945d00d3173adaae376070b254781b1a392b177e63576d489c204c346131f18438c682454153096d183abd8e2bfb13c701057cd0144bdca00f7ae48a04be85b95035ed0b1c935e69cf19426b4848230fd64df3a7bdc58d2e53be5833b546fc5fe1c3202b70b8c3886ba49332e23e424f41effd7e2e37cc7389b9f06509395c2ad3b4ce5a302b584a683dfdaa6d8219a6266d5119ecf470fd5507cc421ed8b06324d0f45428db485f752aa1a31f2e91fc2e924ad7167f004f2e1d556fd1b70327852cd599965ba2745f02386ce9625df26b97a6b2227252245cddbfc7517a717fbe448d29975ec18d85e6d0ba77d0313eec43582246ed429b03a094087d50767af1f68aeacd2828b8cccb2f3e1dc1791cf52c3f4d58aa1d9cc01a9176c0cb10409486cd8e78041097f5547aca3dec5467faa7d2978e8ca23ca050e4ae06a7c1a30be8765ff582fd54e8e47971b179631c4925fc650656b3bba360beec284163951ef80d83f982fe7e3c9328923a3ad80931fce9880e30c02c896ecadde5c794880b81c60fab28d23d175f05c9bf820ec47e6ab62ed0011d2a74c0403224647dd53ab3856cbe3c61ae0416c65e12946cd6c7cc8e76a5255124365596f3d1da5d67de4671399249db22780ae461fd97d622e7e65074cfc1a7881981be630081e50cc9a52306c9b7f8987b21bb039c7d5d234e88070912afd1f5b8d768d92aa673102ca623994c9128461012f15532fa3e449a95c5f2460d8a6cf94f34f3170a40494b99516cb82d788eb30c9e3c024f3c8259df7585241ef9aebcf13b07553c15b530c694e807a6546bcb33fd93d674e45746442600150814c1d63654ae57126def7dee3fc2c68e4eb6874673c895b845d054d75ca91fd0eb89c733b95677e441fa4920293e039f0aacd25e571db18bfae2453cb978464512b1bbfae1cc8a67c9a2b3a172104ea121b672a15b488d1e69329e65445056e7b75f1feeb3feed6f1fe99ef587d47d792d201a91fb3eb2234ac7deb4913be788f9e9a52815eed779a57180547ea56eed05a272ab2e474255a85c224af06def25b6319bf1d58dfb3c71cedf114497fbc429d45afe62b9ff2aed3bbb6d7ea7fad39ef181d5afd6a9740c460507375f7c217abdef22e18d17ef16161669d8415be89928aa362a529cfb41296af79b9606ba78fa9b69be29a5b1d607a8bf5dc9ad765796bd2401b49ded614fd1e02082693b9d86aa9d722cdafa1db6f3025564584ed87f11867ee84053996d9f4f5e25e767ed8a3165f70e48fd00cf32c0a9846a53f3348f398dfc37b9db0c1c85f420180d50afc82554c9c6b468ea5405ae56240efff71165a355cbc517690bdc626891e90e558e1f951bb5ec74d9b29bba5a703813026185836aeb1f7f64ed455f4a250fa57a4c200b249c03bbc71013bf174104067a3df5a957c4297229d5b087ca521e8d42219ad74a1836b878f28cebc913dc47a95f85108fe9d4024af6f4ea5884aca39cc0a649653b86a9b663254e8e528944b4581b1cee55099b33dc13a6212b36cd37dbfd0b70123e8bac437f212d8efa9896be6917aec44be95b88b62b6c6a95c8bba452222ea8931c87dc22b1bcf2244147801c8fc1c3ef43331e6b57576e322614034ccab61a6b82952c05fe3eba3986f5bc0d9ba9c1670de124dbdd97248519bc92b67ed802826faf95f943363854e00b0bfb34afba8f7345506225d14c3cda4a0876eacbdca4b561f96c02e8d250310c832640a75af5f3393bd45c4b5815f256452a55d333edf664510a737c7f52a29fd19745b5611f7559827b3d0c48fefe3b0d09191e7922149c25ff2dea0dd844bcb8a8d70a4cc4a572d31eb699443651aa8d24bc44496ab023e315ffca627b34803e7a7e543ff62dc1fb03221c0aa17b00ef2ba627aedc7e2fa55b09a71506f2ec18a8a468b414d7d51ba074a14983d4aba3903a067dad10e5f4d3c107d0128514da654449df3ea5dc6e8b88e4c4272e0373025aa20e3a2dc13321125d50456cb24b31c15c2f41ce309dd261515247ce8eb60531f65c58a7fc27773ee920ea0fbad47c2715d2826b08e76209a9a049d7e941fd10bf647a0f2b621bd004170e78deb71119f44232d6b0b05e3851d43596a745f759507630de18140c58862f9812b999d37959a95ebc304f8075da82138d03089e7f5d53e8d0059819589cd9229e42302e6884cbd9b78bf47f5df6ea8e17b269f07f2207d71842022973b4af01365af6e2f85369f8410ceb7dc5210bcb10280f4f65a072c6bc42afde1579e1524d301ed488a37698a9da37a79af7b5a51858f2217aee4f95177c8eda3f0ebd4bce34c1b63c3df64074b2fb07ce8a1694c4e6c93b5ce1bbbfe0ee66ffcaa070f7de45d86d8a78f638fa8bd6c194dd16a09e284d478a93fd843730e7c5419cf0dde8b9a8963a68219ccda323196db0effe33a3f320b0ee1089cf588a52bcaa51638a12d5b8a6308ff85cc03a0c21e5a593397c124ea7da04184fba1a06803118bbcc5a4c336ba6abaac17155cd6962e374e9b71c18cf6f22508f547393014837405fab22c6a002cebb3057966503cf5c51d306f1d2703c87dfc8905cd7984398cc5bc90bc89a11907089b74270fd37da1265086ef3e243a7ff50224802ca82d3e53a007f73db4cf98885ff68d3e1837ed6e33758015fb942e7f7fd383d6d6f0a788608013884185e4e31946e08b184415b638c7f447941a3974bafdfdcfec78e4feb5e5d2f3031fb1f6ce47f804cd37a280cdc13bec40af7222502a6fa238f67b79136d8f1bc3ab792602492e29e34d7979190b23d2ea086800e8e3d983f7a330dd04bf84d97b24a4a4a8f2d76a80cc23848af2582e5c60b35806f24df075746a5207680c5ad4201074cddb4e8bf3e97d7585162fad030cc5f5383bf469e14e664e0bccf3e4d290e0c18f1a6d358e4e4a527fd510e83cab3270b6c90f9adf03aecb560a2907b5a8ce8dd2383058eed24dc75d29d7cd0d9833076e2eb77bbad971284329c7245a11153c64158e98421e503ddaf37bae4b895ae86f02e5a12108627088dad3e082b1608977012ea0c42858917535a559c087961ff5c2173cebce10cc8dd7ce302156deec71c161820292ea707aa6f04332a09b6e78e3897f148c6bef02334b6e15e1c05e759384ca13f6f24521610cbca7d2c092956a53dea2acbb300404b43a4c101b29bdf4dc0d20d58c5dfbddaa45422c90dbb413fdd52bd5d04bd17c367ea65860192fe1d0671fd1a37bd70c9655db0ad9d00af7c255969b165239c31c7306a5ddf9250b8d68c0d856b2d29e5db626614aeaf2246e15a9ee4346d96f9a909804b4c302bbef38ef68fc13a0655605be5402a479f95f27c3fa9bf06277f8bda651764d6bd31c8817637d10d429d924d70d1d1c60fb90b2048b02b302a774146fcecaf64e752d5633c55bd528e7ce7d0c68d2592f105cf6728d6605b3074b8d650b75024ed26c8d4c7c26e178450e1b6526586f17c8760ca2c3b572be4b83aeaf51c307ef81cf215d152fcecb91a2c70cbe9923ed9512bda28ec65098cf874889f12809267a094310f22e153f0cc10a79099f82b2ca3f6a4ed574255a59fe00379172e7c3ee77715bbee7a0418a078a773040c69bfbbaf3de0fe00e8ed057078c59e832454dbcfac13f4cb77b1559714dca9eabd383e1305aae00409bb37abf15830861ea87acb5a5c365988dcbd235daaa3006746ca3783964353561c1a80635b55c6d29f8565b5a9e7a2f48b99603827584edda31524ef8ca15e89b65d57547410b5110655d9903dd1776386379750460752d8154eacd870c9a546b099b7dc305fbf939c082ef60b2a75cd000305e128280afca85505a94b3797f4b94ef8f37c51cf778091ba1b36222537bdab8c5cba397f7ab5be8020b2142a71133cddcbe29b0d6c4e87c5270f0702d6b5c9b6c8ad50416e071b684eeb43c418de7fc0ddfb1f7360495468a5783d606dd485869f73f302a73c727cf6064646b1bdc882ac7df9c0efb4dc2b7b3a0b1134b3c6e27e4d9219faf28642060084291bb60559be12c974b4bd89b5cfcb395a048a3805c83a9437f0e5f844bce3355330204f3c59d3d7e6246704bad2e435d82cd179102164b87698fde5a016d262b55d289e01c6c9d404bfddca71b458e6b77b908542e9161542b9ba9de20d9c49f478a6184a8586c379abe0b83855be662565aba9e1a9857eb7d12eb1e5ea15e75513259818d068a46bcac9345b0728cd266fcfb0626bf608895995353c54ffed494d418f81f79bd3d03855242428d3d7c7ec065dc5e2fa34ecd3f28bf164f8aa4c67f168770ada286294b50465dae19f3ef4eb1d9186a97a3c7e97264b15e87cc068da343d3e4962c1b46425be767a9a33826be0edc3f875e1523e0b1fbf8e3d80ac01e4a303859b2bd3862edf01196d311741c21a0552699a917bbe22db0745fae504effba3a45fc5f75dce26c7b2c7a3073821d81be23dae41fe3aa935ce5494e914f380a96bdadac1c819dafce4d67f258ecbbd0d732413315d040a329f0f6e6300a9a49c4083779126dcbba2a21271843688b60056e20d51572be3bccfd371bcede20d2fb0294a2ca92acb81a362fd2b2ae414e620faf1bbadcc7021e68bf73bb27b267889353681951773db35f01edc24436a71e4d3ae91232344e1bfff6e05bffc568356ae446ecd986429b326958a77327cfc4650df4870a24de649bf64f1b6259b5fa0ba32553ec201fbd2ad2ae732e46e7ef9e4417f331b801d7ef6e729a5978268082b81470a521c168545c428e0919e9d06cbec0bb1bd21f81135086923cfc68c67d7346c6f9a6854941cad1529526480924ce153ef99eaf86bcdac2e1f31c5aaadd6cc1ad892037fea651307656cd46012e53dd99df71d21cd810886be1ebf6ff427a2eacc9908ea47b76a3a4db92e65c187f0aebd628a8d120f72cc2802b742731296e321cc1a09311fa30f9a68690c48c5b9b218dca8e5ede543cc1bed51a49f3519704b3534ac77daac00e5b1c46bbc0dcee5226f2a58e45f7bae0ada23068384d86b2772b8e53a6512f9718de11a584f6abbcb8a752fa47a4d7ff9451667d9f5ce67c101954ab5c671ec6d0ff376fa300f74ae1b527729a8dd27758d0cbbffe6aed486f3721ebfa946edca761041d05b35c3c15f3d4ccbfad8021fe759fe08ee817ac7ea83505a756dad3e4ae0e50e0b7d863e08ede60b2adc08bd010aca9d1c5c15030d105c92bd97423c674e8667f9e898a95f217223018ed91e8e71e3ca252bef288a9085768f0a89bcb6529593f5ebc09f916e0f11dc40a34640b56ad8449ac0f7d1c1fdc650f6d03f535543c299bb275cf41f4b16747c1d6352ce8ce6a6348ea7414f2f0de51ba977f716ac01e569235ac767f7ee7c1420d5610f4b25aaa847e7f6af29fdf17546e576501af45fd73ce51d98a7074e877830cd230c4334d681ffb6c534374028ca6c62008e649e54bbe5cd55a9b1a50bfb2b30814256964f163cea9831129e59674d05cc33f5561d62e08201232d7d73c0b46d5e1a04df094598d6dcbb57107323749fdb6ff9d04038c547bc4dc7d5ba554275011bc64f12a0989fcec22e12cf2a49c086c223cdc93f0a5284ba2b679854aa6d5eb136d486a39e8af81766879a92e2e64f7af650fcf614f62cb63a7c047905bc8a05e8a31483eb38d4d44942d8869e92974a9156aab59fb10e35da7325f61d4c9cc5b6324fca0bb7aa9888664f6d3ef8d2c57aeb2c2753183ca4c3c5deb7d73dc37c46e436bdc84655b3ae7de945f42c36abac9d2d472880167e7f03d1af33e1b77c167caf125673d38b4424ca2c9b033ef50275c3c2896f03debd5e34f14fd56b14fd0e5ad28b4c4a92f51709ac272a8e7cb59f5c18f52d9107115feebe4b5e19ab293acb80dcfcf869dcd38b8c90c4625f2233b56053abd580ffd4f9915e1da6209c73ce8400c0c5da27e637003fb728e93f1c997b518cea48f46a27dc9ff0f4446d5e99904a7126376f2ad21b8ba80945178cebc501eeed7ebe691873ee3594ff1a95c8d07a29a25fef8aa5bc4a11ec39da3021aa52fed60b3a044d20490a46d6197ba7632dc8b922d0c41159a1cb4597040045caf09bdc65e9c6e399986c72e2d77388400beab633814e78d5129cd35cfe131a46423b93a1d097649406639d988a1d4497a124f49d706da220c7ab064a6c7a69f7afa24eca6bee70eb702db21040fb775005d4b2895a8ad07e09024a0c87a7a15b1a011bc682fe369ebd128cf76f0fd0b4cd0ac975e5d51aaf0da79cab77862cd904d44098c2a04ac180e47538626467badee0ddd1e22b6236d911bd0d41212b6906118c626453865125e09e5e3f82f105b94272978a159ebd4a920048722ed297f138cbf7a89740b8784410dd1035ab13c02fd102b75d57d25acf9c655632bcb1f0fb7475ef41d70a3a8e178c66540254940690e6fd29155ba59279dfc3cf5abf6b536cb431e782e88efdce066301603416408475e5f5bfc8c67e14f3fcac8560f4fe4277393d1b640f58252af6a7292460b41e36054af6004be927ec47f2b8b0ee00b1075ee70ae91dc040b9ff910bece6803c752cc0eea69b24bf99f81a9d584ccd840affea44315770e57f909552b536d14c9d505df525a90b4844d0edd02526a9f91875e4d2de72dde39c81b3f11aed7d1ab544cc830280bc59caa159bd4c7cc936707395a11651c84aa828fbd7234b68ff7c335e6e104ae42b16ebd1f6aadf7053ec9f0d3207fff041f0fea774cfd9376528c4adc0ac8fcfa7c0bc202f7dc8d53eb60796fa4480195072656f68868b7c442c519685a8b39efb7743a366183c03805b1dc66134386bdf8d7ca2c8f70544f9e5e53f90cdc111b5e56dd822485d56601b15b394c068edbc781938be30e7de9a18f4950dcd964141982827832a03a4f9532ba29479274a7f72227f09dfd5f10476a0450470944a0747f6b962c7292b966e8796bad4d43621877be522c204d20a06222463e8299067f92182652423b22b584924133693bdde8bb87c01e1eeef27866a7a3abc7af2f1bbf4a310a5f9a683b125c292039055b4421b5b124d7d6653ad56466ed2f48d70aa437a0476307c1918cc847e71b289531fcb0bc19c3e08a5499df6118e6a1eda8313c47a228699b4c4474972a4c546dd7a486a6f63a6d41fd9ecf6b2367dd3af90b222231dfd9166686a3242ae73308b8b0fc1c3a1be99659a7d858085a9810b6ac725f5a29489bbd23977dc8cde7a0c7253a64a8cd9e7027d43bb97a9fc4e6c0406e85e3db36ab108d4148ff30618201ec78431c77c894544632214609cbd59bae1cabfb7228242e504eabb7cb26f4390ecf458e08bd4cde124587ca66aad24085de16193dcf915cdad604c5d841695a62bcfe6d20621a33fd2835a0226d59bf3e465882c24661f019f29acb86221cedbe0181b3246696a5710cc801dc861166c5803601ca4dc9bdc843af58f3735ac03c3a715894f4e32b81ac2a4987bdd8d388ce957617fad68bfd7324b945815b14245b5b9c9a0b77670154c5facbaab2fd212432f26e3287b339cb5fc78de8ac462b6bf58373ab543865af5635069c021fa58d4323c8e199ee529c3da14176d1ac8f086489a7bc9221c13b7568ad72aa15ae346214e8365a94505e655fba4b7981e8c3d33046c779aef9b73c729a831ea94ac53135008a3c6e3d01dd42616b7863040b73b3d198aa792df5533fec120593d71b369c1560a4291cb2926ab2e3e6cf7de4e30bb84243469cb9fe9c7a211e6771c030a2f2abc823c0cc45613f849a07e4b954dcbb45772dd79750fc1bd646b2113d5df7e570c569591361b4f7788c181fce3a4a7a0f5f1c1aea59ab4181d6b904eaa26f09ef245efef9adf099d3a804bca1d43ec4485439214ea2b30dfe51dac3d002f1571e4384ce9c6115daf5ad2d88066af48bf8271caaa71dbdcc9c29cebba6261fc7001e664cc6a05b55d37185fa64ce8a61cfa0cfec05f68fd64f4d80e1b48519b155902c0725c8ef463db3e7ce3647b8c1b1b2856c2af4d0ab3248a060b36d0c6b1a24d6649c6f88ae33b1bc02fe725c5f0f7cdc0c00dfba4d084fbfb26f163c77e601efda332889395aa67165a3f73be7f608a8a6797266d2002f768813009aec6433046ac6d506f5321a907429fc3f9a4bfd1d7328214de77692ed3a1fbf47d17b01609daaacf1ca832ce4ef1dba8efa48ba6aea82ef4c19dd00100f7fb2a7f99265d959471bf9bcf68e9fc9b339daa0241aab34e0318d56057a244500e694044f189ef2489b0272feb9fa236c290c15de5c2573fddc99d27da857592b7df522cf6904149a89521685269c3c075dd7b2a1f07b1790e9ff3b5442082e3f437c686c06a0bfcbfc21884048b3b7ea09300a390ce161872594c2b885d2a4050b9b3cf5fd87ddc6f91e7bf4a8a9d21809e853636f6b31652b1396e2ad6dc62f72e3c0dd54274539e10184680408d07923952c6f1bac9016c09ea2442365dd376df0e957f2e29cb4101f070e5cb6f0910b071f7f21260ef293f8601097f631c7dd6db223a6dde4b6fcb4fee88676d6169bcd511b3bd195ec5564de7b2c420b3df477175c1a70da6756888360ba2353ce0a3bb06006736a271bc01f77f0a80ca0e7125a1f3b5abdb9346125c317ac2f751ce041a78f15f39c9e8dc9cbb58035796112f749d50d87d138b3136e9400f005769af6d8f2d83c0ffcfa658cd8057ae9ad3cacec56b624c5bcffe89099e09d4f4f5002c61ae9367defeb81159b8e16507d08582a4f207049ad883025030408e7f020ee20248d6b83a4161d4c276204dcc7a135648f2060f1864baad10c21442b384265e0c963c6c0be0de43548b5831962df3952c0b59d208b6089105602235b7cd87c63eb63efa3c02bfb74a7a145f2efe8a6aecc682613ed56b6961f63fb3a4dd8f388af0d3e902e308b0f744be6cca66272b2bcd663ce9bb0fc6635bbfca30e264de75947d5b974ac65b851b0f959ef9e86d0e85709ae13370db184633f01c4dc1cd8a6c768985095f39da85e417bd912bbeeacaf06b5e3f4d0737bb76980cc60a3a2c9e8d3fa4952ae6dd7b677c13fcb871d21f573fe348cabb65d2c5619dc8bcee66674f187a89ace9e0697f8a618723f15f25b3010922bf92d10cb4a44d675d051eb616e1dfa062c098e76ba79743f977dc6aeaec7594c448c1780619c91a68f92464f7ecbcc8bc529c2934fce22410f59a6c90edc7c8727dcc4554bbe287a1cb49483fc499c8ee2f9566c89ef30292513d18e2f2a72d073f9d3ec86a4e7a125e87dd8efd032ce32c36caf9887f8817cad9011a27daf7cf302474a6c88d7ac2003bc4594b728c4dbf0f0109dcd92a42c6c580fca43bf0f31932734600c312a8154d519e0f389ee990d8270cc3f41c078c0d86079fb6fa7323a00f1c3ba005c98899ed8b41b3751cdb3cc7fe4fe19252dacba8bd83dd75fcf22dda2dfbb5068da7300b34faacee143e62ec5bc7bab1a26272ec8c9e129d72efeb40d8fc7caec922dd4ee28b8bed0552f4db2a2aa3736d4bc22b50726f48460f8765086f02e66ce6c0ed2a2776202d7fcefc74956baace18dd9558e56b525790d7d24e8397ee9cf52b46e70ce6071d46d7fcce793bf93e5f41c67aca5bb542e301229d355eb27c1514b57552591857bbcddaa4ea85632539a59fe5bedca7de7c95785e6de37b17ccca06460a9eee82b534f1ff95ba2aff886dec8266d7aa6db3122f96c4fb29558643be7169333999aa5569dc675f251ad37dc6fb9b04ec7abd6a48b14a598ab807d8f0a682ec1af1ee027e0666eef4d65b623b1b6aa87a6b9db49a81ac7c7688b639d0b4efb2654e15aea9951e7f3eea2ca0a14b52073638bf71f00280038e8f2922092478f212be351811e4418c304e6443557d749adfd3b24b660d1e5911c0961a6e16dc2a05f37d3f7797b6897a905c241aeda654c305cfb70b4a3a11396e70b7ddfb34d47e8896aa83d9c23ed1527047a09c68b7194b3793884841a79b360df724d251c4001bbea615dad8ec7d0b8c72104c936220ada2db88f9e90ca08f01a0d12c3a3620681cb60927ba3da1bf78860c9ecf65ed72c1445a3cc3aaa110d54c019b6eb9af3313fd1b1bbdec06fca936f8f1608eef3001cce75acb2cf56eaa39bab5bed9d3a61a2eee7ad45c132686988823fde82ca092b05dd38b9fa31bf207f7a9ceb079310260159d1fa4d024ad9d75921671a840ae948060afb6bde96c4c910fc904b0b316b15be16cced69147203516694519542ef8e91040d14265ec9877edc4a5e5396e36bc7dd9b3989bfd46500f534e1e6d6ed0367171d41ee893a921e35fe68405db6a8c8ae50babe10383a90f9dda6c0326e4aed68c208199e11bb92d79c9154e0e3175574bda3f1cb7e42ab12eeb963621fd6732b6866c625daf0d146aa01f2a7dba03b8838752d736ae0c88b8562648fd91de8806b6c25292682142eea0d01f721ce7ed1578486404715a47532237b144c65405691d69836cde7451d3ca7572cc09d47f03fa55a6795b30ceba4a07191396d006091cc747bd5a35ca80279e07f24249c01fa62f180d3419352f4890519298ba6d7abdb3bac3c9f01c107ad6d119210f3e5d9c0a289adc887707c03935ec8edcbe65d0c25c163549c8de7b6fb9a59432c91491077e079f0758fe88c19a2b70a77952ca9d2cb4568aa377c827589bdf0a070d3c56a8209fde07e1de0b7229a8d9f385b58aa9532fe0d1fef7639dd2c298d4bc27d8deb812e4540badb5d6ca80054becc6083260ca6443cad455e9a0098f36866dccc66cccc66c2c16fba660cafe72de70bd2b6c176f84b3894f0925640891224626073f3fdb804b26d20e4f300f482c5261aa6036cf414f14cc26b4527fa677c864fa9d8c4d50035a26617bedb58dae64d2c82030c16a627d2f3f251b68c07d37c7f988a179d7cd8f62f6112264d664e0adfec677e3fb20ff6e7c121c5d79c4f9c6dfd9c3c1dfb8118ef3679e031b608d0f9a2e90f512c43f676ad460d5008fb832eb83dc255f7e062ef935612b9c33e0cd3260100fa1212221ad237f035003f006b4011d8884226fa0159368fe13c363929a33930d5f05f1a5f1f55c5d5fd22af569dd92d3367cf60bf0288ab7a9163e9354526aadb53be4b78e943f54051fa27778f6ae6ac1a38f9319d9cb9835b20d7d082d735562dddddddd49902451320750c565b7d7805c5244a6aac46c4462ab1d5c378f13e40324e4ee4122c0f37d7c7eb0dfd94ce12eb70b98ba92f3d891b5245a32bcaa752c85926d51eb58ea83cc61df95acb42ee94a33c7ba6da23217ed23a007ec3f522df659bda3d2590a92b6782be0cef3e9f770620a4a5bf4280eeac91c520ae9f77ab8e5aa65e076718912179b62b1582c16a3e23cb2a929d6146b8a35c59a3076b9fe650a7267c7072888c716f92fffabb5f583bce50c6ac0f4ad09f75f93d3c63ed0046d18c20ecb09fc5948f77c0c492218030b21644638951317a074790a034b13a41ac02083ea05b1272aa40b6ed0c2081a56f86205cc65723c0b717107c8a77776765c1472b5a0411af58cf5daf101ba4db1c372475df19225d839bb4fe9ae34f8bc7682a8a8a8a8a8a8a8a86a1e5954b5d66e1b1336fba983282c5fd3f09cd87b7577fffb0b69be5abb96f67deddeabdd7bbbbbdbc32ede10e8de2bb52befddb4d6b4d89599a4b3475ae91c7f1f583e6c8165f689b54fac2530810a0c913f3b51ae66c14ed48cf2995151b1582c16dbd989c5a838a2ab7070441caf1d13dc8243154a86406afd8484c09d3b279133670a75f791286ee93e4925a59486630162426abdb7cbf3abb26d5b0904c849ee95d993b3c5254167d2bd8a92b1b49474979666cf7dd0abaa2e1217716ed7a723175de6d74ec1a3cbc8701e9e310218038ff2c8c7f40ef9decf1441e7f042aff21c9fe1f85d0825805142adeead5aaaaae2b20ca794136029a575fc655e04123d4a64f2e70229c8644cc602d9944892b8281f87ee21f21cff1185d44d384d82e4880b4d290464c897aa96aaaaaaaabc4a8c5779159d71ceaaa2525a17506306400acb9f44ce43edffac25e8ba6379d3eb6177f739bb8b94cd7fcd1e6f01c9db8d5ae7031bb052c6e1a2cc8de497ee9147607253ebc82797f6e88a94b2d9b33daba9754269c47c7151faa244fd36d1d08da696d934656e24a5a4a4a4adce437dd87e0b8d42233d6574653223194ee32bce43bd774c1eb9c97ac706596b559fde5f084daca4511ccc4411c76bc7071be158113e624db55aad2af9d6dadb5beeaad7ea1dab6dce580d593986c03d734616d4cc01610c1e7db2fbb700faac30d9bf1f2c29d9624db1aa585438068635258ab34d056088840c215244525b67cd1778dc41da92c706e380eed991392e65173b586477415e62aa0878f5972e3bb4565aa703b00043d4058cebe5724131e76bc70748c81011119f73721aa7719ac6699cc671dc4deb9de3348ee3344dd338eeefa6654dbb59dbb4bf9a94b26a488c6e8ab9bb69a6942ad3f7af0795b2eb417548c1f4b60e6df1d53ab4c3c8f30b2fa6144cbff39bec94fa8d8e17b0fc42b8ad3343ba80238cf36a1d9bbb759ac331a76e269dde43a544a41e0f60fe3b52cc8075140f288ab21759c1d9ebd704f1ef53fe6c79f58a420198410c800cd8befc0a8298209fd7c51e3464a1932252c4c8112497833c89dc6ae99c3385cef10f41d10d789448b2282b696fb56abb05eecd496da54490fa62177d2024244e869893d3749a936b2d4ea004260654d9c9691ecda37974249d6ae5bee3388ee3aac7792e82da6a2bb5f24822c9a3a96ebbdf5257d321057bf395c815a451c79a82e25c33491e51d924dcfbdb9fdf71601217251510e80386412e7a4ec2c927a453e734d12da5b5d4d5c028e1fe93319916b9ef40dc3a1c278eadcc712c2c33d375dd6d1d8e0bc7233e7405946aa3537405b4cac5e9d12a0eacef8163935c27683bef5bb164bc10b459824d320f83dc732f7fba4ce698930899632ac9dc4fd0672ece9bafcf8266099a94a24445ca8e1c6397ebdfc929e6aae2040414c44308880bb75e4ae96a7d55625b5d321a840c53c4c81124492ef6a49b039eb2478240e6f8cb9b676ee4806bbe9103f69cc3d4a5f4aebaf0e8ded25b7acbeaa280c7dea219b1baf86ad43a4f8c7a6cdfd15796f2e905912479e523458c9c601e3d3aaaa770227f719214903df28951afa00c1b608c8c64fe1637a3fe1cb0353a4252fa30ce528177709be2596b7db5bca41c05de9a38c28b2acec8618c29b831aa88e0882c56f0f2cd6a458a48112347906ca1b5d224ef461638e78515a2186ddacb27225f68209d194239a7177486919191919111f7142b92524a296592cc2593dfc53a4976cd9ac75fa58ca063e58ed2e2c41ab5a49ef10d5d3fd5365001d4739e8e011b5d423f06d0162bed00036af640a67fbffa5dfde8cce2ba41238d2e2538c10b2e348030f5030e4bb420852892a8364091810a3a60419614ae200183d30d482270c183164484c00c2f3ed02f5e88bdf004088a37850053bdbcc0c593e24215c194f781b1c1e07fa7cba22db82e4f4e40a93c317789a01fb420747238e100831a8690228a3160dc134d5421e32273a108b6848c010912fa22fb532d2c0cba51907bf60382780801192212d23b5e2da475e408499bb67de7b61a91d52ef72c7003ed575a8fb8f2bc429fd7fde6b40c2a66d25a2dd56ca554ccd55a63b62c33d73ba6bc410e0162872e4fb0cb9d9461c710206c689d2d4f70cb666491e20b153378c96209d8cd1304e2034044e91cfe5c9e2097bb9e2e3d0963d6ab6badb5ce3967929aa98f0e58f66b604f4ae9db9086173fe9e89c5de9cb09b687cebaddab6e9d9e4a60e93a735f977b5dcdb03d09968333dbc82dd3b5a983554a5957de3537a1520ad1dd2196c924d41edadf26452af8c0b6500b2fbdbf81463eb0fb1c58a4c285dd37f2816d6f1bb681f6e72c41cb3324a1dadf80f638d330c84c230dfff9413a8d3460965eead369a4210933bc44fdddeb8a394e2117fbb178619142275d48efe82cf46ad92fea3084880a963f3698dbae97cbf5ca93be20018005670594de1b5796f2a36451410eba120bd7a0bc1595258aecee4082845c2f6691e5f195b52f9df6b4823ee4df9ff5bbff56d0c6d60bdac8adc1ceac19be71ddfeb195e977b77f7b05b47f21f46f7288e8fd4ad7389cf7bdfc6e5b92e75bb0fb293f684a50fb3a3ff0abf669f6010a7766f85217e9072a50aa5db0f394d4eff428ae766af6adf6534caeb996a0e56a35bb8124ccd0e687fceee7dbd0c6fef61c0776eeb6edebe643dc1612f5c8aa35cdf51b2a925f0d718c40ff83197a667bd02c0d1a78e7f574d6f782c0f252ed52398569954529fb905f08413e5dae19def940051c540a8fba3ef001fb4b9f3b7beef7f3784ee97b60d0cca1ff810e769e14b4991bb8444912e77111f40172dd213ac998dd7711effb8e475ed9fefdd1880651b0b52109f28b80442e4e39f66fb64783998ccd39e7944b4cf682376b3e863e40027bb288912345c4286145c1475c9c73fe0750b0ffb4d5da57963e40ae9933df03c59933bf03e77cffa991a0a34fb5bf4fb3a4e08ff9f42d459ae10f54701ffdf66e7f9f82230da143fa964891212d254952299d8404454ac90e3484678e7f6005cb1f3da5b982ae713af9b5dd89641f92ddc17127d7f670941fccf0f8ca7352202f0799b026fda549974ab395d497f9f251caf7e7076199e51b86a0814d491217ef0a0aa6b1ecdf4ef4da4a87848884102972643e922433cf97b10b369969e4252764198a34a9ffcadc39a55eeba6d513f42fc50926034880c756f6bf6991917dca7073b103551e5b9eab755a990260b4a1e9f169e719c000724f6007a727e6377db032ed71391e4096d9bf01503a7d3060083cb66e7c023b6831811db8e81c9d47fa376b79e362072de60f11e2e247d44040dc9513740e29b88d26cf605636e23d2f294516aa525a139939f3134184fa89603f11b44f84cf4747bdd9e6d4edd339b37e478bf43c612fb27f11aa2343ea0b71d11b4c48d474c4c5b1c38c5eae3c43ae74d162e7f10eb98245e77496e138847ec15eee4f015d963f3b4fa221486c6a724b7e05672a28938b38cffc2b58647f234fbd8027f07c29eff609719f50f709799fd0f709ad3e214d87142cc4031e819cba4a49419bfacd7d217833ddd339d246ee5126f76fdd3c76052f4a5465f974f5f590d773ec985b8d1ec8f23b9b6d922cbd2cc320ff3e1f52fe7869ac8421fb629791253ba31d7895d2fa6a7935480aae4fff0615f691facca966b7d09916d299fd629d5cb45be8b4917ff8099926d139fed44b766a059dcd5a3e373e3850f6e98a9b9b7b736f92eecd4db7cf9b313a40d0a1e3f57ab9cc673405cd6af6bea6596b63d08ef85017ed0c9b08d6ed39a986b88047a96594b1281f3210f277f8e8ec53ed8e8c7521736c475b5c378f13e40324c4ba4de9cdad11e0d1a7a6735c832d1de8f84855332410ef795898a88c02be1f02a005d003e81b990304a74d67b3d9ccd619a45961857cedf800dda6f8e7bc8d437cfb5d931266a6254c4a7bf68387c389165255736a57bb9aa6ddb49cb6f4271c5051526186a0a4b6a18f8a99acc9a965b2242a9b3d3d2795c9ac0773875bfb12ed955d996c93cd7a4797fdef96eb7465ad2bd59a2ae2e2288dae0c093cb68e728ecfa3d94cc19195c9642dd352f049ad34926f65b226d954982b3392c9b6dc2f325714141899ac4695e7242a2a2a2a2a2a2aaa75ea8faca8a8572c165ba25f0d31b0a4ffffffefe5a85becd74cc2d8e50a7201cba794c89d055d24194bf2bc35c0b9dd3e312a5042a088081962644bdf16008c0a9ceeea1242c408927c0206b285c8c97fc4a138b9a12e948541f757b0615c72c0ee39bb1dd617bb9c67277b16bbe02e9e8080827808016901bbad744e77d2c907610cee973a6a88840c2162142b3aaa53fd74e309aedc918e2c783e8e291c317f5b648d2c147b64916cb794fd6bc2c0a3cc5ad013d8c6664fc36a9a6a96664ff7354cd95f842758297bbde1ce0b012e3a199ee3eec584328bc63818ade33fc505fbdf3be58e1dfb541558768e5a9978a6de4f259673e044112834a6a8b0030d257802072e4f4b640105851b60e050708516e0934be7175d6ad197dae4882e58d0c45119512855f10113c4a005548cc8210b27e5848beb048c0d825c3f94c8d204182cc480cb164d7a10628b16155a9042418982e084278c021500dcebc40c58a610420c314b3ee47c91020f57b8345df1c2f4e2848719274d3645506cf65e016431a28820a6b0010462c0bc0a4b0f467811e289275e00731ac3141d5afed76991932aee17275ad0f9e4490c9688af4a510bb508060de78e6ad281260d8f3d8d18d3b46673afb7846deea826a56d08246d044d51b0347de09e816feea822d2c863cf3a2ab0988c451caebec11ebb5f132b54640102347458610449c060c042184b6348498202663eb1613a409545185ef4c0841831b02657ac70d262440f5b568001367655511e65913492473c35f3402505a58a316182801989218c34503006195186808d92e98bee5142b198f228c514f1459b558a9022fb071521a514c68bec31ecfa228ec8a3b8cdf083d5becc4dcb1d55c41002a041053a7011038933baa85dd440840b2a9c80020eeec597d8194e68be9c004385d2d109f4f229620aee2656b9a38810f3019adbe69d761f44fbeeda28c03fc421962e3a95d03d5be70cf58ef9b24194e15b703dd94ed8f29c23f4ecc56d5a91e79cb0aa7d90eeb570d3fe860db3f57e90ee6f78c320f7bbef42265c889f526d0befe7c1162c345f2f51fc77b93ca42eda4ce199bb7ff8d3b6f9e14f9f2631a6ae68c04243428838486f067ac8d6a1efa3b3f4af5b87863d1fc72e185de38c7646c4c521425a67be24435299509fa8d20f4a01964d25d862f037c29cd3a95c9c3ed53ab328cf9f6328160f7f892e511ee40fa52273cc9ff322e5f9dddc79c223657aca247f1c853c9f6a719e5973953b73aeb4ee358bfbf583dcfa1a0da231e9d6b690c9b6854cda36719f5728ddd061069e3fba1265a2323aa34ef69bc0e4b7fd1a8e9748d31c1ca753b6f1e9a1cd089af6f7dd43a225784913180dc75995e78f132a578bf39cdf081aac8694c9c529a35a7ac0fd2365a24f930a9a3b0a08a67903973b0a880ff8963b0a0819b2ec1db2015d5592a595ae3fcb97d20adc49af299716320db906ecdee432175d4bef18831b7b4c3e149494d4d454559509f2d53a4b9a4926b5bc241699ee91593a47be1751892c7f04b32422cb1f6d48a6978bb2c318bac619bb5ffb91b6bc2f5e87493cf79340c316d1d3f075053d120ab95879b8585f2f2cf0e8cd6f39cfe73967a5b469370d6d7ed0ef6f571672b1f637c9493c13b958bf4996b1d436e8d6e7357348d0c0cc556c1ad0b0edfe06b6d74163319cdc9f8da46098b7b067b01bfe5728fc5d498398fe4925c77ea292a77b5a4a9614191dcd60f992446548c8105299084b8b1c1484cf4f56535de048ef90ed824623858cdbf52285e218c02450fa2e452acbdc2f3f05c858ee26d9bbc78d2eecfea67d83a307727f053750051f9856a402104c7b230abb3ffdb3b1e190f69d89b0cd0fae8a5cdf8457ae6109ac5ce5fed8a447cb988ce5ab8146b07c9973289728209ea0687f6d248159a18d0d6d6c18043f2b64628589f7f883c83059853f733cef5f42ce43c29d478ce4fb7694f94a9004fbddf71782fdee3b0b8e72a848825e170ab9e8854bf2fd696982b07e864ce6b39e26643d93991a29d845fbe3ed9e86e683f8bf874168dedf4326f3696cba779af9ddcf708995cec32593e6dafa340f01fa2d9a70f5333d439b6e26b4e9583f13facf07573f03b29e067470ce67f273a89fa8bc5efb1906bde6d33c1326332442f363cf90b4140c346157d9e7e162f79d73d24e254e5aedfd87908b5de84961903fcb7bcb71a1cd08f3571fc4dd9fc9cccf6f983fb9a8f91717b5df4077aa7231f6b3ab0f42f34f1306593161fd2a7c98b433a08db536246a3d4db884f5ad5f3223ebaf1e027426b4799ae7c2d127b74226acf9334f34df7fe6fd6768667e25bf6381f36740ff15f89a3933e19225561ad0b022265688669e95c1339909656ce668cffa1adf0a25d3ccd1fe5b3ff3a364a2522394473118320895a4d2ccd134a77926ac50ce668ea6446526944f7296b51f0106dc309a55f89a39432b4f7251fb15e8ed329cb49cb44bded355c456382a882dd6c2341b29e5a2f69d6518af52cadaaf5e7b17a394b5cf22a6256bbf0a354fca1a8745d692b2f6134996b5a8ac49a9c934654eb3672e798ea6bdcb58af7df793a44585598112e654cef3bdf61d0bece437b4fa55b8c4ca10eb573096d3ccd1a66ce668bf9ab3ac2dcd1c6df5ac9ff99ab742d49ad16c28a7668ef634a11bcd1ced5be13897a6a6d630d7e6af9e68fe2ab4b144feacd0c686443434e16be6482eec58a04df7345df72cd6d3844b585d38dae7f14d609b36b5d7bc6e6a3f97bc6703a9a945fb29d37eceb49f5bb49f5fb49f4fda4f3052de2361dacc6b2f85601cf83d0b6cd80c6c2e6daffd64729efbdad3cc71dc6f1d0792f0fdf7f70bc72516f440e698646e49e6c2f1fbeb81248cc9f73b7f3fe8fd0e2c61e6bb59cfbf0574cf7dd0fcc0ce475cf97e078e38dbfcb0e30d7d2ce7bb16edb539b9269a6bb083d3094e5926b7d30942d078cdea9e97bc94d2895d9ad7729ed7ce4f6de1822582e8b2e48467468219d31934f4f002ee04397057023fbeaca56e5bb4b9d63007f1b0407503bf16edbf4fb53f8ad5c7d21acad6b14fbf1e73ce49a7f5e4f5412a69f9dc2d60f484c51834b65c9902442188107421638518184d33784862c5c3131d38b94006bd3d645c1ec6cc60e141e9f2b0e4f9dfe9924a35cb517c75634f75558b29323a426ae2051a44a489186252a909274cbca09bc20730f2f8ba21c05dee2826a4ac60a28b1136064d517040e292c54b016f476c31bc62d274b8410c66e58e62e205ab8589149af0b2822d0a5c933bca8b15347879f2e2e5060bc48be6b6bc8bf11db78bbd9c0066ff0fc72d3c8293dd6b90b1c4c0de14a7d5549704f569b17136207952781b0d539d17ee4e51e294d034a86d88cece807479f8aa524c53e2a8d2924da27386aafa92721d530c024e02a12136af748a71d84b42f29cbe622e76d5dc515d9e72065fa098626fc03672474d79c2ba806772474d31a25bc23877d4142b4b98e68e9ab20317650a0e5b0eb846eea829503a257006b9a392cab822a96a481727d9a52fee01853bd3ecca348fae592581d857b3373247758c7914a0677dd0da8eb2fe5dae952862fc69deed368edbba8bf1eb256a9f5dc99fda9ff6f10872f18240413c840ad039e4433dfdf8e0ffd76bca78ff531745d9d369b6a3f13450b6f0053ddc72d1b5891bd4f03ece61b25cb6b1bbfcaf5c7d5e37b9b9dda9d9ae1e28e1e3744e97b2e79cae3ca7eca0cb8f4b3aa98b78756309e99356abdd8debbc6fc5c2322c999915bd8fe5cf57695a5eaba6abc980cba0c6c6aae1baf247fe68d9c60d7b43fed4dc4f6d3c9baf477d9b1b6ac78eda9a47edb41f7f727f01fa87ca1cf4af07338c630bdb299cf94298998616dfb4fc9959830d7c030ebc963f32bbba2748bcd883fedab0ca70207f28767dcf5d42c6e54f5fafe50f5edd7be34227bf63cdaeb9439b1f2edf5fcad66d9dfece6deedc733087fd3ee79c539aa00b759857fb71973287ad74babbbb533a25753b29eda0cbabfde54625656c809b7c5ba777e0846906b3bfee0cb4daab596b6dfd497fca5bab76e50fb5954eda957a9e7757da76c54c7ceb53fb14ac2dd6efbe05ccacbd50e5c2ce6a9b1702f0d6aad5aad5a79ffd6e7543eeeb6143ca5a7d1e6bf5794e3ea8e814705da4b57e26e81ac7879cd56a1e98bb4768e608691a0d6bebd0a7b452ad76e0d62b7f64e7984cb4b97196eb6ae751ef9b94d2cffbbe1ef4354fecb28bde9739bcc1ad73e8cb7410010b4aeffb41b3f580b8283485b648df82b7452ae2b74ff1e812c83f58b4470da7d0ecf1421c0e67c3e1be1068c66151af8b1d282c77a0269239e99cd648d5c2222ee2ed29eda6640d81ad594b449bd30271b1855c9c1da5eb1ecc8ae59b71bef447d6d18ccc8f2ca65c33b28c720d0b8af619fcc84272fdc852c23523cb875c63a5f5377e64c9720d6bb6aa617dc9352ca95cc30a936b6a6a5855b9a6666441e59a6ff9c3fa9115cb35e1e8363f0356b19155b1f91ba7ec7fc3a635a3d192fd6764d95fa609336599e329fb7f54d99fabcafe1b19d9c5647f1b50d9bf468daf6015a42a35de0526b1e404498db0678ed49472c3ac94ec5f9192f20c8f728c15cb41ee01ad498ddb2b645662268327088066b416591bb2cb3875cd3f168b15f9755f2288ec9fbbbb6fee9d2ff102db24490614c4926a70c1ec075798a9337090e2073158e0b8c8a3140325bbe7514b28913def31f5aed10e16de074d0fe4fe033defbfd5cb6fc96ff57da009341f6931d9db89c2b28aee7b6ce56e4b96dc757f9fe48e8b54ee36eae5fbf4fe9dcab7042f60af4a2c6bd4be1250dcea44122dc894cebfddd3b039b1af64a7423f761e18166bb38ce2062c64f2880389a74c9ffe6d21d3c7332e32fd4f21d324b6308001aefd5e302a12891a74649ac5c0237d9c1a6e327d2b32a57f99323de2894c1fe32f430428b0618b5910631cd1255002e3080a267ca0d2c26d91a9163228654a2b0725c0e36bb028237cd0a134966994a23c79a432d30d3b3ceca3755df4f1b58ef4e1fa7cdc5497b4d6dab54e6e353fbc0105bb14a3bbf45e0dcf9c1eed5ecd9b7a68653fa51e9d93d2af74b647192240aed9662868e6f4b346996d823e1d2178f6b7f15042713643f3756459802c439b1f52be83357772888b3dd43afd1234c1e623fd9425958b9d3b975976917172d72ec3b44ee83e63e8ba79bad2e92115252e524a7b9cb0fceab3d03afd1e2881657f9805cbfe900a96dfd39f8618b390aed46afd1e5b4cae741ab9d894a7fe482fa5af01b948b5fe0eba60599dc0f24719e6a7fe4829a5f4dba148ff76f7ae0553faa4d56ad703f27e87227fe6f73b0b1269944ab95f2e5d262c73cddea9472ef5bb8e8cae92ee1f4224448adc3f42ff10c9de517b2e95bbc6b46f9cac99ebbceae4e4e4e4e4e4e4d4751eb7791f5d5a5a5a5a5a5a5ae2b86ebbdf6aba911bb9d1b671575bb1a6309e77e6dbc7bb7bcaa73c8c22034ad80c1880cea94f03d697535392270138070002b7db5afaaab64efd86b5e580065a16fd7cf80a587add595299d863c88324b05c9a62c1aba6a6a61c46137a1805a773ba9701bb73461cb97b21b3c7a746dc5d9c39ef71c80abd5f85ddbd0cc721f9beecbc70a4b993bf81de3d80195ee52255a08da8b40df834b97488680400003315000020100a06c3e17038301c125559f80114800b6d9a44706030988663490ec3300c42c618030c010000630c0164688ad601dfb362224b810d01ef64e39714b2d897653b699e36f6d3c18a4bd1131cbbe3f51210cc0a3be1cfcb751479802443cd978cda4574c9626f8326dfd9a3d14750ad183be71a9bcec599ff895d61976704246943f7440e5ce8179c93a4a9ecc9d19f8b0229ca4f6382d64bbdc108d5355cb686a246b1407bd6c3111f6c0dfda0f1b63425aec3aa097b9e2b1e584741e3f8267a0c015cfa543ff4b3fcf95f4012c265d4b56bda0a48f4bb37b9af89d2715f375d0d0763faf4bde99a4088d7718f9e3348e7561a79c34358aa6e5fcbc025d47465c8be171d9b9b14f89d90e0c52860694b0971eafbfb370c641c0602ba5f4a416dbc51645bf7e4e2ef41a0868081640880593e10d56150664a498c8d897f5daec20667b38911f758c60654c58087c5f6f35da3475d18ed67f0380337ea22e40a8ab28cab5c4dc16bd3a02da1b410c8d9cad89619eafbd7d2fb58eceb3721c5d5eaf370208ef531388546793f0345a05cbd399055052456896fcbe09690927a53ffef734c1f2a1f2ba709c467b0b5ff5a0211b5ce4deec5e5f2700988955452bd275777d0321445940f767397b5c91ab8cc0369491ae4f6dfbce33f631fb99c1e0cf8f10f284eb51eaf8ce8159a12ad3f9120b35f241fbf7d66c8b05017a376642dd0a5ad3d590bea6ad556a605ba30b5d558a84b5bfb3216d0d5acbd4c0b756d6a77d682bad8da9c6d152a52e3a0035b3ec24606a9e5bd690755c16e033f4aaea1ab05c895974dc1e4aa35db686525eeaf7f543887e3df460af13d2e1bedc35b1b3672301f4ad5becc0408381fd1184ab64ca75b25fabeee9d150c170ca3286cd12744c03ff70b83780b0312299c6fe19083b1d1ada577f96d8baca11eb0e54121038bdd38772bc499df0af4f89d73b736f34f0daf52c9388fb02ee8fcb114f8ac0b33540a6be56d0c8cece0653a1870033db4591bdb718291e78c3de02672ad44bb65429a13f073faf433c505b39a35d653d1c54ab27b4a373f8e3cad76328ed78c564d2924795851c5cc6918f8697b645109706ff211fc2b6a1d49ce391e18d7ea709f521a9c5b9ab789f6c31ad77e92bb1b830d769de6238ec8bad025be040e69b415b9c81ff71ed84e0c30448ece9caf1dba7c42698627e42eeeaf41b553236148cb64d93f3290d25772da245fa0703aa49161f0641a4939a95aabf25a6efe09b5870374f9f962a906dafbb11d8b6bcf1cef21aac6016977ad7bc6514505ccfc189c6319143e3cf983819780b9f681ed42221c531e04193dcd4e69e0d193cdfc2456d7002129775804f845af0846bde2a15255aae471c6760bd509ccd13d17e54fee1d652947eae1700044cb05a0e6b1a364d78f505da3d1593faf0cad72e970b448c2ed7085db3b40c17eb2188646397fc15fcfe789c9cc2b29f432eafbc9c9b590d86aa77dbaa146c4835da5aa5b1f7a7dc1cad5f5d64806bdbd190515b0faf288870adbbfea302597244ff5f35b11d2c847a4447f910282beb7a8916e670434178eb3a7f0f0d097986f7501ad96e9a63301c1f7bfaf1f7bfbaa9a03dab7b8174bda2262823b8dc462b25d86a7858a36d7207fdbea20e0ed40bc09840d8092d3120334444ab5b8ce0af8bda07099878881731df44fc1d00e4ab6408cd5846838b1631472209413ee24715f343f638f46a1ac3324b0e6f2a3f8a6f157898024409266d9d945ae3dcbb6c8f3c1c76fde689060f4a9765cc299567315ef174783b2f599021aae0a26bac073979efba18bf578a41027d0cf74e0919c51c7db4ecf6ef6bcd5fdaa32d404b07960da1247548bae82bae22ef4547fe6546464fd7694d87b781dac1c477b663cf7b54d32ca4fc7d47fcb2353f6900c0f623e878ed7c5f14494df9f74ddabd1df8384606f4d5e74d25ebd7f9b8f2ca7983288a6a0da459ccb78a6c17949a2060cc769c700fa339408a9e4d1d50af482527c1bcae23dd51ae297562aaf40608817bf3e5318b94a043ca3697426bc5aa4f45843c55aec1cfdcba5022bb32c563c8652dcf891c3e61f2afc97872a0fa5f22aa43cc7d58e1fe94b926719d75346e5f6bd5c106a3c8c69da8a0b61851440784731a95c102d4ddac01b2a0da4ebb24e054110e5fe585de2dc64b71f6bc8b8e8cb7b11ddd638a24af45d1a500cda745455bcd187ae58edcc81b29b8f51afd6f95f0af334fb8e7c6753425b3f9c1dc6399792ab6aefd620e775e4e818a81bfc2866633bc3c6fc49d7ccfecd536e0f7c9045804ec8c248e064f13002cf18f4cbb82dd430817a7fa78e53a3de0cdb9b9e59e429b0bcde1ee93e98c817f357b8da93dba49872b80f5474c5c6a80d5efbc0b517036a0fba87601b5358d31c9ce9a7c46f00643bdee3578dafccc762032808995e1d6cd2385cca6800e31b0864ad249fb90375a802a9d9c158ddc9b704303a1c829eefd073dcd1161f724edbf0763a0bfb470ed5bb174e483f68a14d23bd675e92526c486e0b4039dfa581c5bc68b6e411bf346c5527e4bd863f8f114a23e6a53a0f0a17c29b100b11b2d6f989c550acd385e7ebbd3d5b8f36d00130dba87165ddece32739215bf1dc575ee8de083df1474cb8e9ae8ecc1fc4e535e879869b40ff9e44e753ec56ba286c2d9b516c4d1f0598c7101638cc48c943113a12d00c5645480c8c2ac632d84c369caa177decddc0c3c4bd00e2703427d8dddf9c4cd7ab153bc0762e07ef376659f2da2c21e7c12adcbf48fd76fd0c7eb32676f64e3366d4a8431c5e35be4216cd2f8b5eb4c36aae60755dd9672c55905f28d7bd16185de3e5cc1863da4253060c97a7a16c2dff5ae290d3bc428ba37f67bc820291d3aa47ee752be2ed8127c03cd8b472cb3698ee413fa8583ca70cce48ec8f35ca8a4cd9fcfa5635aefa1afeb2c947d1e69519cbd8f95cd587b3e030a999129bf46a553bdd23156dc06c6ea0df5443d8d89cd767156457cf7df9e5b964dcd965837d7e0025d540ad8ec8d7649e2ec18793657c4dfdfbdd55ba083a57ad31f4e2bfd325e37d7b59e2b0f4c2bd1cff32ced6ce933e2b6f9355e7b4255aa41c51c7c2d62a99151aa157ab678564116c2d1e1fbe1b698b8d7f6725ea6595947dd42ae22a08d12efe2c261caa82933c8d95b4a26491507be4e61ac8e61b2710bb60ef20816cf7741525c4b991106ff5b10b974d1ee99ea4fc6d522513a419a2b4a21a1b539364c4b79785a6982d3d51e83cddbd00aec6e1f5fffa6e2835f9007771eb234799b67a22191444c7f9c1a51d4d12ceffb40d4989e7d7698e98295893137d6c2e4c83a239d312a29e831adbbc5b7981a7ea1ce92e0ec63edb66c10f7597766505eb3bb684f5c35d9dfc005f658c1e5c58d153b0497b26767706ef65a8f79cf6a8aa8ca1e5b28d55655847fe8b858b65308b689b0ff944ac109f7784e5745f8bc9d4e18a42d2c6114730dc770918f06cd4ec22456b8fa3f10b6fe13da083174e8a2c4c1ca3439bc457f31488122c4a0ebad5376616fd125d6f3a4341e1f139a8cb1d582a0579dd6441aae8ac7afbea364e9eea66d265d9a606bc8a5464e545d94e1202ed50a7763a4d9a0b6e556fff644375d207f2a523b5188b2bb315d41d894b57ea361fc7b7e6e9ba1d1e24224696cd5694593c598dfcbdbf418e48242e2f08e5420168d0f92db9e980a49519000281ddcf1f7323d5eb99331c2a6ae9fd1f7392ab5c9396de21a5fce8b529ad3a935e4976865af52a530c8253eb4859a74a7d2ec8db57aa805b45c876dacf4182ef26188018f84377dceb8ec926ca503ab11b1ecc606f8dc447ee24a094e0b9e48dc9527e96e9a4ba7bbd8fd6cedebd0a28151561401fd30037ce326c9fb16d95c86dfa5f0daf3b6729f44a66a480b32403d80774da03e251d27a152e158d40ff0b345d2525a983244f289d84b9a0ba38ecdcf7973a0dc3cc678e2e060c56a7422735252c0be2b799bbda62034ec17993f6076b18d457ee44af1951590d0cc8e4ef6705a50c631c660bd0e4706bbc46e5a85b9defd6d53e160c6d464cb29c1ce13ed00a2e940025944a2b61707e7fd8cb71dc0be1c87f4d13d76c0ab9f1276e362a1c593e010f857a75c066d306ebaaf42e109747c709340f6d0456350427650523c66ef83802e951efb04dc5040b5807f74c92712649af6955971d0d6b97b9ca3a7fc056dc8988e2397c2cf05e6284fa032ddd937316fa22e064e04d1c3967f1fa26a81153cf0c2a68b649805d5c911e4011f40e5058c1436b06c9311ac82cd1b32da754f820e785157295c445ea3c1390efdf24138e17384a6146cbf767f892130eeb59f5d90b1c480157a22329ec1f51cac5ea429a4157fcda7a3363a1503149169e53458a1266d50e3d84e6d4b88aad95ace70835c4d7738c1929841321080b2574de9968faa37d7a345b323943adaaad3a2f14582f2c8e3e6d01eb4d2b2a8c6cafde0ed48876f8e5bc9d42837d274f354618d0ea10d75b3a9ca0d5e1cb6152600a1deca30b2416107365605adf6e4e618f9c58482e16b80bfbe2e1b86f69dee8f4d008f9418edac543f16cf2d946aa07cc45b086c1e221f0bf8c844932491509f1639044d5684417a7e13a538ef77ca3271b61c441a57313f76b939cd9001bf2fe5ff41deaf655cf5fc51c2e3cead14e1782c01b47868818f4d74894adedb1dd0c55377f21684ffde113b1fe2147b8321bb18ec5e94c30d2bc86acd45e21ed8a787006b4fa0a2b2335e8850281710ef048e49622a9d6279ad0e3d993fdd531d99cadefdcf7970820c34b22099ca72c2d3e1e42a027c06bb00430c2d2e068782949b47b02be53dae7fbbbcfa378b7102bf5be1e2f38192a002b64aad83afab605f54f072fd94cd959a2999a85da7336f0b9140a2b5bd0181f67f1ab52a6bc1ec384376f1234ec4c89dafa2af38fa708fd5b8ee25aa69730a5ec75fa5fd9682cf6b93ac32d49fddb4bbfa551786286000a899fdf941181fa06a67b1bf52a314037776215d7164ecce28b171e152217a32202507d86158046c2d40d40e5e03f2681c75ccfd19650b9261e2fa9a09d5ff4153eae10445b845b8fa3e52d2162d462ba77d058dd322d988bb54371e5858535ced68b90fff44b48867c0c89c3e15143e53cb2ddc749fd69f3075c953aadd0886fb101a5f19409fa7b8ed75bd8ddb4487cad13011f3b8477d44fe4919db953866d4b52e7d1ebf1bb97a59493c2f49cfc360fe7eb0ed1f474c1716831024be2f9f1d521ae91c9e6332c8257bc3b9696f816c4bee205fb462c40a66a8a77c031c650c84d0057a522c84b936542db695038cf43aa657ec336678d4afd0cc4a3710b896ceb574ef8e4f60c653b58842797f929622b690710058ff3051e30be3662526949a75f0a016cea0aa7c9812c9cfd6b3e23105d6770ad108a6b63bb309039d5a94c5e625d923568629c146a44967f76f1b7700e2915ddda87e03852687bc4a5d43e383ffcb6c05166821afbd48d7fc52075adc1cdcd5e059676ca539ac7b417153e0770b7c4cb62d7541722fe1aa8e6e162d0b9d763eed723cf62fe5d89b8297eeb0fcef1079f7918799a8525f95b1eb7c1c03dc32dc3ba8d939ef1d2ab2f8b72ef0039782d1bb205e3cd272a7361987ff9498b40e2ce58fe8a95f2f758825a20f1482d68f6e396e817bd6c81c357903a5a47a16c40a36288c11fdeb0a5bb02e68ae4c13d33f4a82f157da880c4a31c2d55a6ab8732cf63c8a9d78eb4cd439da4876ce636ec2550162df9b2cd4ddea592aa1d32265b22bce187bbff3c743683a977ea155791649d6f14e540a6b62e8a8e8d1309c9aef0f2e4080858efb4f57e9b7879f972b0d63ec92beb66acdd472e7eb8a853e747db06c078a6ac8c8ec412c082779fb4029106d1bd7e39f89f5539bb31eb808cddd82b308e4add898c521d65fd9724bc9b18bbf19daa2d9400d816e8f84ab7da14c8ff9cf99f78ba1b690e3f2ff3af188f3cebf578a044bf5e76f421cff37acdccbb1456104d4e9bb557b6597de09c13ff16addfabcf3e1436678db495745a6c28b5e3b92f1a9be68825efa546677080e42c5a0e1eeddb173d4b65e8afdac6249eb73209a65e1a5cc6f92e0eddcb02a00c4d659b5a59680225958402a21f87cfbdc3e840ec8f8ca55f791ea4c4753e05152de842c9719974bb7ea3f94341e9fa2743bfed535365682dc5d346b2fbdef3cc450c017e952bb8e9f4541d9980c3349aa4829d08e16c8dd57e52a8d82d51118b7fb9b1b63a9227557f66ad182b2cb49b9c62793381ba58d93a5339c55ff3763cf25808c0603c9548eed98d283847bf91ca9cac2561bfb8b39e3a1227080875837ec1b923fede906e38231e37b783d9eb255fcdfb4d89c821234e9ea0dbf17b4eb2f17c05771c45ee1a7d4f5bd781a2d02842226d65850fc27edc0242e8e5df62ca2e6e9593972316c3be567c7ba34004dedcbe39be01fba3eb8c0ec1195af31bf17f464309e631ab82562bf07856b5f27cda1a512ddf05810ed91ac42c86324bc1cd2db20d1aba848ba5765da76368ae2aa1101dbfca9afb38594909c84c9f60a07ada54a482042ffc4a11d2bb4ab18e5c2e20b124ee164d0138647f47314b4a80e7a99220e0f1b6fc301bbcb691712615f79c4737d751050a2ba4814258955079dc071d2fd130d012eb813010370d83684adab4a67e3f04dcaff803c208b5353c13ab75285ebb31043f2d7d5c291720afe4ee86ac18be4b6dde6562559747bcfd5ba93a3a0e179c568c61b66c073151c38b7afa5fc55b5949b2b7691bcd7183782c895bb6619388a53a4034be18feb78f2e5660e4816d56abc9fb7b305bc1be129ea94afa3b4b7787a70838033a403a5cb44ab7867b4147dd77a7273ccb6549519504a02491337343a90bfb49481fe1c29ad6df26fc0c2e1c5e760a9464b8b5caa06063c00d154bbbf943442dd7a8c0dab3e15870b4353cfdc3455bb535e007c5fb621647730fe5e74ada2f3f3972ea1136979f2d6cc3907aa0c50757e3678cd1178e3caec5152c7036bf765f818d7e04324174c020ceddb139b45bfcd8839d9003306435e5c48a91178e0806f11977993e595e9a603caf444fa1dda8ac67632a2ff5ea0448611ed6de37a86f6dd5687183d0cf656f68b4e318c216078699813fba35a118a18cb23192709cb96dbdc676a8ad3d9a68daeccb4898fde25eaeaaec9de43dd2c278c32c673f50979efc2513d2940125c035f3593dc270f6338889a7e67f606b8a51d2c89ada27493d060f66e0609c1471ece884ba03c76bfed80b0018df391475073630d2d6afd4822b17e599c91d4f1c99c43f4029ffb48fcc4f423ab3cbd640617f343e9281949503ce68614d874a87fb422815f57cf0328347b39a80a97bfbda4ca1c52654d15e285bb137700f1bc56c1934c513d6d4f8a19a104fb97b97da76a30a3055f5778986c2c20a4837f1954310f5d0d91b0b66a05cf344cf542abe345c6ccca4973a96e2f1cf9c8b92c2c36a35179d07053e741e489ff3d0cc7d4ef1f9106224e78dbbd1f5d5c17fe750a369efd336820ab0681d1138e81d18a828df8f58379495ebbe1f48a94656ea591a90120c8e6ac908518c208098d999857a20bd925906d8c4016d7dd7adfa7599bbf919923bdcee43c5036af014479d51b1916f9a6ac9f9a26548ff2fafcc46c7bdbbfd97ace7c03f63a4762cd31b81086ab7481b22b6d4514b5d41498732c45e1d161c141f0956ff87c6e68275080d8680c4b01e48b24f053c3f8c6dd7a9ae3594864b5fac7da255bcd8545dcc4eb2956dec7431c3586bc23fd86ded6784a07cd108b1e0e599b6792ce475c427f19984294fee6891aa619ebe4fe42cb94be40c30fe17d745a65f20904371e1e6003fd74f383f764a4400f090b04002cdb823cb5c43ae0c36b858510d9eb0e341010910a2c21b48ef09de5c161c4e975e0e54b37316c515ab9d654b1724a641ef0523e5a59ff9837c769846e5e29edc094507234b094d10343e2b158c646cb0a1a695ba2f9ede8d6412b92bbb4f59ca327a6d031af5dd9a788585eead3552b39c7b84dad37166346dc6b47aa2fda96f249771f69a69b89172c75b3a69ddd70d3a8a41facd5f302cd6d44a31b398d09bec3819597a9fb823a50489d35dd431fb20360d09bd194652322a89e321d4fef9646d48d240535c7653f76b57a95204624f0266f0a62f96aaf2285f47b0f319f2c503ae40022e7d617cff53ec89ddd1c4212338f56812b8cd404c38e6c8f937a753fd9d89bb3c99e3fb6130760525db5ae936c5ae631b61f7e597ca3ac4546d46767996ce6c4fdfb1844c6ae4b6de9572706022f1e5c45c9821fd57ee0bef9fe9c6446502fe112e2f994e2e5b6292c08228985e5761decb2cb329adbb4d8564523c8e48b4c838d4e5e7824bf508320484d4dbcc7010b387509f32e29491ddc838a0511f37bfdcb3e43fd95a816db5f7307ece4cb4e45a2e7265f6913e0665aa644a7ee5e76ef7edf4f16f5f1cbfc0e206edc52ea388256001923203a780ec0a50293ded621caf398c9535a257aeb42df4eabcc76277091055cef751b5cbe64e3237f8649afd7714342982a74c61bd05245d1cd5dd1a147f6f74636b37dd9aeb3b6f798b1ccae07bfc19835762c598e6d222c3dbf7e3fca4d33d04b807ca5c93e083e0dec7a7bccc2b23b8859cd0b5fd304197816df03ad67e63ecdf310a98e7189cb5ca2df01c3001eb2701b1501f47fd2f81d9f72f01bed95f0286e42f013468615218a57ed8e9f63c5fc9597a59f4681598ad27aa36bb9f669735eec3e88d994f3f8f8287000a4a34db7cc14be9d8670dc002783f99a25eca0704b6e55cda60529ce60cfcb952ef2014ab2a9166ce80bd4c9cc09209f492cd0cf9b2e3588a61b39c1590d6bc70bc969e53bb25f837b17d55c5969b3fb2ee95f9cc41670f2adf0b7c0da7aa3cfddd00509c46223f8471186b5aa81be04e5bef70d3558bad4b99f67db6ae9f0700b3918caf4eedfc45813d58ac1ea00dea87910cedd833705c8640f5d2585d7ed8e996c9e5a439cd1ac47cc3dceccabffefcc802f560a4e1641425c39a0888ea3b39073b18a180f6011f00a3bb4453ce0a5f352c763a513d6aa2a9d32b627d8a394aba5419cd3e9d80cc2975c1e668ec62a32392cf1c2903ac0461af52896dffaefad0abae86c7e03a141bba28ca43ad7f149c2cd8680dbc215371680d145f2e340043221e1a02b46e23000711070d69f057072faaa620307aa2d6a6348cf5e06cb398ca112267098f2dc32c3a8605837aff1b78c361a8f48d10e0462f28ae545a951271502c7429566417c80d3f9806fec1d36054c6245d8a3d2bd0cdaee85b324caa2b3077bee531de9d2e95861fcf3847c8dc432e32eb788dbfead380062c4c0126cb96d7dc00af8935678146288438aeeb013fd343b523f2c6731cc28600d4fa2547d15dc0772cf6c58f02f4fb4f9c14e5342c0a8ad3c5e38c3b45156ac1a61566d8869ed35e2a9d3824349a538cb5b27024d997054ddcc00f1551fcb3738fc854e7656f2eff8d71172246fbe40640106658abae5d1c30428f158672000b0d203293bdaa4e563e81ed08f4aace395c6c1edf9fcf5ad3fe47004ee33030bf2dd2053c98fa108400f2f9517539aa1b3019c46ed9f906051b1e84754b3dc9820d0b62501150602d10c1f95b8827b04a83d7cd2ed77c7afebc5f9d0b44f6da619d67b35f976f3ed8a3dbc85b155dea5715b6bf837626c4bfdbff6e7347520812652844a905ea623bbe84aa60ecb912ab07cd7c225d5a8ad9d73a77be6aad1a35550844be9d9f12bc67af32417be128da2b0f52240d3b2480380fd39e5262a8e3c393f5a6a31a386a3d02cfc1890839c8d92ccb35ab095fafb18e2f187de97171db7079a6687e94400f08ef03bf8abb94912f5c873f8a82073373ba5313e9cc747443a822a427d232aae7dd83c83233bfffe10990fa947be010df1592b1607aaae99bf8e305a108a92275e84de1d438201db073a1afdfe0ba021fba3473c38afd995e547301b6206251becc3096663e0c2efe311f4ad9d3cdf6333cdbeaf4912d49477f7348e7aea07e45370afd5254a515a0073497a2846d8668ae14ef7286e5ecf156a91452e5831d057f9d48b0e44c2aa17f2ba326c663db53dfee622aee9f192bef28c921d8bc5f0995bb100ba45b84ca83f829a4924c4881e096322d9dfcc2127dbd14ca67916398fa09250d51a3895f554a7a549d5ca64b01c33c13b84ec8c13b0b18616f61307bf6c2cc9f6fee793158e7105dd04410fad93b2439d5622b9a9ba093bf0aaf985bf29da57adaedd775ca15b15d0f10d0d26e7677885cf816bd7097278f99886d60be34e042bca13ac2f858428c765555d636141834805faf726057495e8ead6278c54012031085ba35c04b5652dc17fc86a47069fdb1a91fe8f0cef94c05282a06c4fd3381db38fcac3a03d45f1ca0916303516ffc0476a41443499ab7c6270faef280094a6e1929d28638d75b394b6d94cb743b32f2008ebf20006779a1955596c0f174c0d79eda05a63fb5b5f9302fe47887586a3d2162381fc0e34a2ca2f827a059b84a2981022d334c929e2678e2c7dbdaf11abc5df313536026a9dff86977f31bb22e0870b12054ecfd8c1327644230b706df61a6fc90e62626c884015a4ddab948c986be079a48a110ee91013b72eb4290e6fd25f5585d38cdb3190ddf0cef4765380d54e1ef990409f4e1e1f6126e16e51c739b92b255b21a651fd6bd2a411419ccf448d17d84649247c185c63dfcd0e26ae497f47b089b114b5e6f277bb5a844124c76678960e00f79a4dee0b84f69fac82b88627c2fda2ca129cbb53853ab475dd0909ab6299844eba95d1d853bbe7af561aa279a5f81c6539c0281149f7a67da0f6c074630ccf0589d384e269a7f215ea6b83e6c5e0420e4444d364f9d9063c441fa80ab09061977351516684fd2b7d6e4898e5f22995f2995a4ace681362b4c00414412b86802cd88a3435223348da64bff8e7c52d8165b750ac8ffcd6890875d2e3d63697720fa2a4d7185919cfc77b7d1ce08feae0174cec6509e64f6ff85154ca1a8989e9e8869db9250c26373fdea0e8969fb13024a281f6cae3e46c82d1002be02e549dba0ebe0e48e0f702bc74166371f9f854180ba6a1bad0b6f79ef85661f6d0f7307cdb045036a23980f29a4fcb919ae6413a8f3aa2ab998f05fc3b956aaf8453e0e67349c69bc7ca0a99681b2aebc7534931662a615f94df8e793f7fa63c47c094ed79982c010aad02ed1a952bb712b328919e14ea8a8c3ab622b940b70d5144e24689d059f82cc16cbd5b98cfd84d82828e529d71cf6cdd30429f034804f46d2c7bc995f5e4e04e86c539d46065e9d87fa9468082f077956bb690655dd0e42b3a1c8e244fd4a8717dcbc94ec8584207032409884c7ba44e3d7be97fc92253e36a24e5cc33834e32a30e596c46e587ee73a310c0c4ffcd366ef34cdcc283d3e33a43a24332d6e8899c5183925e2aaae6b5ba470950add481d01b483ac75428cca25644dd85e30fdd85a0f0525a20aca0c19b64b3586303e3e533e73c8476d5662cf2534cb1866a0c800a03643c70dd88901564d273d496ea5c50299c90fef4ec7a65bf0839bf6b2d4fd7ab4aa554ed588e43144dfd73df985aa240885455b7f83741c871ec6821a6ad93801b99504a587d0feaa5b82c10aee1df4025b5639f930774e5fdb2058b9938e4e4813f6220c2a56dca17d8e229795d48717b08e362e4dbe35df8e27219effb4512e37156b6a146d625b2e0803e814bc9d2188c204f3a50a6c8ccf7bf98c0aef35fe5e7566fd682e9398b2cf54fbf6d8be0753519b41d0445f803b63e885430d02320a682def00d83043bd10403e75603ac91d041828052c24898b2c276834fef60942c16360e48343b94f9911299234c866acb60c9ff0e717929f8714794cfdb647209253e8198d1bf437ab770cdab1059ff011ead26ee4fad2f553fba171680193867bac9318ef00990032e81895120630b00862a4245783932d5fe458f4c7ac84f087dae6dd0fce16ce489e04a06a23c9253c75d8d0d31861324eb853c04a27b6dde766f703caef53199380e559760a7b76f615441461e4e01071d1d6422dfd98717c7d6a9461f5472a69b6c5a0d24c35e5ce2b62365401c2141db315d6a39814d2881d3c92fb364283bc9be452af9acbd3516e1f3851c30781948045dd80520821c8e5f6148597933a9cd5ff46f3ed893bdd73a716adcf0cc42b9d96b3b20f48161cca9d0ffc068a07ba578ca6ff3c52e335d3dc4f05424eb8a2e13d051cadcd4283e151c5eecbcde22c0f2f8b3d2ed28f994ea83547f16836339f9119c2de7160e067ee10768928b2e67ce8ab371b6bcf2db36c9e2ada1dc3fb0fa878a0001bb23c821a581e4d6b7cc14bab47a61f6f772566301a32d4282989f5ac90951504100135c0a1dc664c1202e87d8943d26fbafa8ed16f652eb448e9100ae5c6f0a33376f18ab80f148387d404bd8da2ef8c339f83934f5bd35187ef52dd168ed39a77a9c2e59b5d60c5837b14ba5424c33c685fafc02c9e4b55e61d9bfc5028682e55b5f939549d44e191968838c99be6f0d4013b3d33a06b5641a212db870e21584606ee2964eba61cf43961a01e6b1200d0cdce1330472f5311f12b344cc491a7345471f674c7ce88e4a759b2efd5fc3e084f6e34b0dd9e3c169b4dfdc4f49d826a9870897e138aa9499ba981a344ad6bd9d5427d775ce29de60ee16ee8480c954cb9d5623f30c10f4ba98ac55e4adb931e806d470f649945e28a9196fb831978e2bb0529715b04855c213967fc11cda188438855a07a17a8ef4513f1c5a1c5d617594402a6556bd8014c3f5b5fc249819c473d414fae1ca5f0417eac152a9855de9001d965b4c090efdc4d83b065e13133ab3286f5c09f658fd80862299aa86405e87d3da2da87df6a6c4c437e3db8859e5de5c1c2dc834cf61f82ded122b507490f6a373b6a2ce22de676b2a632ed8d362f670d8ad3f08b1921c5e4d780a738d98f2db890e223d981ef09fe2e5050f96e16ea7eac4f57ebddb7e656b399b8e60229d07dcb67a176f2232d14121a7a0512782b5850b4f22a86f223d840f7cc69d83d93546ba6a0e34bf7b09ced11c74db78b25ad6139721001ea4ca039fa0dc04bd486927902dfec63c91d9c098ad49b2dfcda1b9725cb088884c3660ad87c294f30b00feeb5b22f605cd07c289a0014bf53ba968a149e64023e46f92f53f1ac499a277a7a233d608edaf20e7cf484b1fa3e014921f912375fac7f95f1eecd09e26119c035909edcd56f5294a8fc80e198af41a0aaf1c1f083f51232a3a780887c5008b87bd20930e08f66ceb15c7aae3e26182af63d77b67027167d2e45e182cf91f89619368c3b001dd7c8b89f72224079168c25bb123ac3c92b24fcdd41a3af1dc4578d6c2627cd8d9fb385b95e9c2f9195d8f36f63f13ed834bf8afdea13779fb09566417df1bd1a963cef66a69edb31a6f0733d9163f7e22ff7bcc85215cb326ece1a0137150bf7c1586d2857c5082c57cb89f755875a825065ef6142bd22145509284f8c5290d93be9831a369fbd93914f3f23ebf3d70f3fc35d01385f85cec6ba79fcffa524ebe491eb71a282f0bc3f4183dfe13750f89f80a94cf4bd43a104d2437b487f82f98aec558c822ab085b0c553c6622250628d903e1a14a4d597c821e4e3acbf59894899de8a5ea8d5139ba205a221f8372bf4b8126657517391f767e6bd0a6ebddb9ce21654a00751ce2dee956e857fb312d2cff5101e4704587c1a27e8401c5f1dd62ce80364df00ca8bc48c07ed0b381f7604e6dd592f34c9130d42f4465ae401c95c23dfb07108d7d4fb9576b13675af21c7fb950e472afa7a5ba97ffba9127fba9f16c1fa30502089b5a34bc9b44a34a7a0453a7ee52cd190f0db7e47c013f1720b5c18c4f4882d59235208aa9fefd091a6ca2c53b25a5ccffaccafb2a5b4fd032e0a2055d8d3ad825b6e94c2b49aa61583b4bceaaa4c289ae3bd4fcdc8ea61ce46071d8d28bfd88eaf4c32f758317aab48081c9c147d7690b1fc9dd0a592eb620f2ac43e8c1f6038f6e50f8c081bfd96077d53a7921c72b67cebe10f76120ae8a75a20289cffd0b267bcc0729c45b02a5c50abc803205697531137bfb43f1aae079043621645b6871956471ae9a98c9649b5277531dd58b8e374ad356e97f0dd625c247b0622e89f52e5982f91e3ffcbad7e4366c3cde6d93dba42c9664612393cb972d1997798bd3d092023fdce896d172515ee023de40637548a38e5c04cfce3dd9bff128ca3358185729bbe00229bae38201ab9dfad2abf7255ac1add9768bf9739784c888d238bdadf4dbb063c13ece2ca616c8ae1bc100cdfac2c3d4faf1ee00f7730b786c122cdbc879d266c37a4a9f56288b3058aa2bd8ca13e394aa546c327dd1336699eccd0fddfd27c5cd7c88f4c91998971679b867bd44d56aee5549ef9547cfd94cf1a6a342665cd54c3db59ae442fa7e5e941afd8d30aa277b0b50bbafa68809e85850b5df65dbe6b8ff4f32068c00cfd160ef2bbbe297308ce15eed4cb1fb0e39cdb9cfb120f0cd9ffdf79cde7fd27716f3b87dae9578e3858d89904ecf895cc503d2d7ee287a8714bf7a0b745ef4bfd64d77bb8aa47344db9574018637cfd5ea03355428717acfd3c1137b62947777e7f8024b9966ed935189ba91633cb8a017c4ed4feedc0135e08cabf1835b74fd63cae561f5af7c3f5df1e09fdf3ae6557d8c73336246d0b6b077d0451f620ff42d4ca23956cf8becbbc1f8def3542ad32e0ebf7a73859396e003eaaa6261906c7368c3ff7541df72447d99b615a22aac23cf4ed013f4427e17926c97d289c1c1c996ee56112e6574d93caba0d6fb3d33ef6404a4788f70f73e0dff293de478cbda9d39c8c1ae2b00b1c0846a17c74af425881e665f8a1c3c3f75f37fea2ada7cbf01842a62a03a848ad25a62d84009e67a8bda2035381e30757086424b0801d877d56a3b9a95e6b7156fd09bc03249f2c2b626a0ede876ff1adc8de1726eb63d8c296feb3e1aa5983eaeb1a66fb9100060d89f3def4f2c030f46a5a5d2e516f377689374b4a5cf26a9a6bc78c10c640c29a7d614e2ba3a2156b43ef6dfe8d57f96ef8b1ed65d0bae3cc3db588d056840b853bb39c42d9bafe04f58aaae5fe2103b89bbd93bef45d6d26daf409812c8750cba6c6c5ae3cf67b94b5a292e811f921deacdbe521f51f3888f34d19c7fc63599f33db83a8870877e4f2b08427442421e75de4de1c04581db57d7604c9fd8a307d90013a034969ad792b0a6d685f65553e66ccc0e5000e23982abb97f6d40d28198d0002dc29aa39547cb43a40e45e1d1da54fe197bf8fcecce1facc50b0a8f7f738d77a39361c25a2b1fd50069fdd08d65ef208f0ee07d4f64635096813b0a56206efc28050fa95b1fb58209f26c0932ef195edac73cf4502f4a63eed2deab82a65784b0febcc813943f40fbcc046e021e2fe1d8d99038bb483eaf14b8afb7503ed6745d8477455326ce04afa0208ba3d0b9270249dad11f6aec747d8f787375e3bdec3d4bdfece90eea0f67d63e28310abfac895bbad69636a70b44d04cd4c3115e577f11f1fd28d8218f8103f4794a5fcdedbfe2059cf542f062e05d04a5b089a4aa106df1622c37ca45cb818a0101742d9960b48b6b02de2e13f1ad2b9e7ab1ba81f5f3fe415d80f3301783b28b8a37424c5700c989e80c8a6e8523e6af90f3ac4f3e385c6f209512b8fd246e28729ddb890205d90154400befb7db782b05012a120da6c8256cd07501412a4294030808dc3c7681bc1311035707df8ffe27a74457befb627e07c33e8e76ab44a29a82f5c5458f288b99f13a65c5478cd9a90ffcf08c3892c749544fe1ffb6ee2e47aad3ab1a4f1e36d2081d64fcf1d6845bcfbc789e2eb7a7fae878be7acb27477a516ec4b1d2c9dbc80f5902cd98a61ca70dab618737e9603f0672dd0553cc5909067bf6d7fd1f50fe2e0e607fd26cce72177842604fb9dcdb4207763813dc746d8de153e755ab7cc397cb77c7216fc8f811f60765210e7540b4b6777444902cfa357724295a129895e9a6690251331fec85301fe680066dde081c63b830ae724e88fc8815dc144853e3965d2fd6f4a57a142e90d4f9112629f13df60bb5fca454e72b2e149911f027df129dd753f0822e5a6a9ac01aa5a7fd16d467ad3af492488b6d4287e6a30d3375482344a715baef81a2f5371e902eed8dccb80a3a5382fb7cb66cd8d192ed1c052e9c989fb895e62101244142436cd69940676f760555e4ec6d64182f73f5b81eef9eb417260376bdff33bd1381a94f8f0aed2eea3070a08f20cec78592332a183066f729f095585774a86912e13ef358726188b39ef10b6000240f3f06d943f76e1c61e2069ff20fbc32fbbc202aa84f432e543387d120e29509814dec6f15e23e308c2cc1ae64ef688f997201102b2b9317d935d1a2b940117f1c7d80a5e655d3a37d2a6c035c7c586161f3606cd10a12ba86ac22ad6a7620922c3ad15658007d2491829aebb12472a940764493f4700cee0f8be3682760ccd7614f14fe85c0dac69b6e1af0272c71ea7e3622bbc783e888b751cd0ab6f8e0cf7df87fbb23447feb2741e484753c330ad7f90612055f6266ed3a9855abf95d46b73bd0a90367980890d51b5b6ccead9ba8d120f44350da9d9f0eba0db99aa47bcca2990f1eb07876f339345b84f297426c273dcf863ece99bae79587420dd754b70990c8f197d34c26ee8a3590d833e7a06c2e8a3d109451f7dd59340aa5de903cb9fc7c3a54928ea937bb4d1280b50dca18570fd37fabc1924e3bda4ea11814024bffb213a882a8f8248344631c5be98dce642aa5e8115c309312a1836ed6a81ed0d45370d40e565e175dd2f6afe484e5a8295fbbdf5ea1bcadb06cefac81bdc536e955bfcbd224ad015851c4c29e831b941be585a730900921d62cb8f25d425f802f5d1e423a11488cb06f5056505fd09268bb210fabc04a7505e9e43952ba268de5d6d6ab688a05557289ab5cb2e234c26a210dd9275f7aac6629dd59e4fb294e1c44f39f53047d83fdf6c1ad9f479363ba20eb917910341192ffa266541afeb53e6261f63a6353a42dfd0c19f25f938779ab49867030f74997f84949e1ca1840e363e50aedf118ad4c310a2f3c5328a503b199768d9e79c21de3678b0059e15b5cfce5705edc45e16b48bdc84b73d046d4cd86458b00899a0d449f882e2f62da395c576868adb44b054af68ca9826226560a3171f5abac67893b1d3a36076316bc10e8c89a7f2dcd590e0d7841f380249d58996c20951a8f40f8a5977a5731309192eb6c71ee92849052a4c70b40756b1d62bca03e543f5df77e54aaf10b5a69e8d7e029f4a06bc319ce82be344aab9b80d8cd2899a18e274af18b44b6482801646d423f52863245ab9f80a810a1019f4dc37fc603878cf19a8c10a769797ba3a88fd75dbc0ccf097c44fd1b64149cd491024f32ff5351bf6c87c091d99b76923f31b27ec6678783c7bed18d6ff37a116e407fc139a110351c02da4dfe44e234d2a2a3379189ccb01121a3a0aac21204970946a880109966b825327ff0101c9a6f30b246e0502287483fbb28b9374d89a703e9801c6d11b40a5f7a00cc0028ff989d8fd14ec270c55112c7360979978030853f6e1246e8614dd7c5b18529538087ce44b1b08232121e5182494824264145a70a9509629a2dda9809f8f2ac0a9788c613555a1bd3ae454e4cba81041bf82a097afdf7c0f8d5f8a2ab0b9c636eac3787600fec083de087fee250518e8638bcf817afc791415df7ff8976f63f1ff12303e44828298eb582800940f4de54628e158c5f08a7dacff1f10b3115f6175f7a334939130c8707fa461e283d5a2a7900f809e159f841234df115a3a59042fdedde904f2280dba2bf2a7ca8e0b05dd36c6e0409736f22e4ed26eee4f4f8973502ce99e0e1f32daa8c0c5ec0df8e49cf37054d278994ca2e54e5297f026d499028cc03831673da51afe69978404ae1be05f771a171be695a7deca46b4ecb51a0603fd9f5a49cbc146405431c984c85f0c1d811c4fb2f561ea630913507c7d26859db0bfc1352f579f2facc12ffb3961a4b8956bd5a5bff6a844c9c5b304d5de6011dbfb538b467e024b07e9cfd9896ad38ab8017bf33e695bb7658ad6e3bb8e5ec7757e0cdbaba8c202e87f4c2345acff04ae0a8be965e9555015b4099c35dc1721345badc27166dca185e6051a0c91a2ae12783254a6268a58481b5b628de2fe6e3cd0d859a68f44ed90e60054f6bc101f0a5a1e5d8d9367f302b4f4903fde1f155f59c82fd8f4fc22a3f508ba1e32a722d2db41aa821e3c24515e61b1f6f24a877ee10793e103cbbf2b92ec9d837dbe87ed8520d7df98af2462ec146fd55213e3c69930cfb3dbb59dbaf28a890119bebbac05bb6649f1bc5ce0c2c291a8cb4c5be7368b1e308d4ac8b220b663564ea4a84ef9b9e6fea806ff3490224bd9cd532005d629473719c476fd894475e4915281b205224830746dd64de8eabf689870970c17004f0693a6faca72598ba65ac0906f13c1ceabc224e26d3aeab33e98dad018a9873fc6b91fb78747cd235a82cb5480d5f8e385d5524a640d39819e005a7ef2eb026be8c3c6516dabd76408bdfcfed1ace0b57028e0da90cb922b478c35c0ca68d475f70edf7a6a2646231432099dc4a1c71c14451f818d97471ddce3c406d0089f80c20f66c717579f92f198504f000b71098bab5964cd1fa78196dc4c8914c46ea620c709b997c8149b00bba696799914c38784420b98f6e5038b76e673c83ecc1a156f555230eccc4c4ee6a9add61b8bad3096d537604f30fb2542eb53ee3e818ed6c36c2fe10d645729605122295ee2fb306800b2cbad717cd25ce510f9b98929293046ac61fcfe09c75584698fe91daf2a6387231f7e52dfb68ac20992c2b21c0fdab262806eb4b2a9115ab7dbafa9a4ab4a2b4fc78ca9a418bcc073a7da3cf176b379843bd909a39a5ebf0cd30888e7f63a2a49298adf7796572704120d729878809c348d25927d296f6b6672a917b74d1b735bb844ae9949ecb9a0d2d0ba0ecd587aabd51b2138c6c50b0da2c53d4a62c59afb61d8130c5d1506034490e1f1e529ce937d10c69f0e0547a8224291205fed6dcdd04cdca54393e2279ab00d61f0a9eb882adbea95b41a092ac4500e3aea34c78e9c4d769a98f738443f533922d0f3d92d48469cf31853b8f3aee1ccbfe47dc1ed026dd6a1e35f57871cca5e213882cd2813a81343505c311ff3cc9d718e31c6f02ef524cd27cc324f2d2d54618a54c4e182de7a74007740d82954a576ab92627d2b14d3136b03054ffe000d1894f611145bf30243189aa15e86d1d57f4dced67ad13266a8ea458208ba498db869527336d31a8febcee2ab15c7a749f323e891cccee81b1044b67b9bded5f48bed8675bd25508c6f57028c14a0b1a49418289bff846cacf1d5cca23b03e615606059d0ce3ba34d5bd2a65c8ad53fe0eeaf9434402ad95b2887a63d6558d1e0ecb2bc7de6ff6172c01a45e6079d874e9ab33a93d643fa82d803ee795efad51b1728874c71695a0a56f8f689183fc7c32d0264aa1d8af6429d49c0a04b0ac6c3900a926455cb989d1abf87b04b42fb67ca6b7c30954e77ad88314085b3c7eed81c3eebae07add91a5a074eb4fe7cc9e081186e492d665d06cd7a1927f77ef62032aaca71146f7046098a04a9ef13f23dfb8beaf5d9e98351790e54a41e78eced5de76a9e5c6cb5315821bf2cc5063efdf67c51d5d69a8ba997c4b978f10c2cfd118eee6f1742af8828e3cba18fc1c7025afcbe5f64e1073c41cf4f43a96e873acae71727cc0784273fe7ff9eea52e5d20212eb67500aaeddd23a4a2242be74c77bcb1a377d87ea776936172ed78dfbe783e8dd8899ff3350272653b53b36411beba00ca877375042ee9bebefc83ddb31c320bb70911ec39940920cccb11b3a3e2bf9a7a05a68a3cd87003ccd4182d3f19ebd13f59ade323d5ff704460de2bf5e401eb1c071462c9dbabd4ac32b233287a1c742b828265af5301efdc293f7d48cbb3420a24c1cf795865107967600fb9b34f03413c5ac612dd3b0e95cb6ca3dac2c1123e67bd300615c24940c8e92db7b738371c10db0bb123175fbce9d1d91699d6e6b961a6af94aab2602002cadb14250c2ed4ae8e949ff5c482ed57768fcbe1cb6b8297d965eb408142813c3bb2cc60f03ee404b528a7a7d12dc5992335ba557abefbc1da8d006175073e15b2df3ac4540a56efd8458228b22d277f1fe25a32a6f3b9cd1a61f9febc924e4ba33e344e613f29f361a36011f7f5113ed1f380b7158b543ee5e0c0be0da3ade19ddcf4168bac29083628c5502649c55febd9c9a766ea493bc4ff09b47297dd0ec54b1ca801a47409b537afc5a2d856083c5acd62c69965ee1af98122f945190061faef19f7aa5b5bcb473d3f0372a6b9f159ddeb3259d721288dfc23169c37335c90e84af1e0cd0e85fcbe6d5be9230c64fa2d0da3247146132990f79f0cc85d01be0727696a810fc2d1f2f893ffd1b812f25229425fc8cc936fed645b43e50404d770ae109a5bd74f36f534e4c5687d18cc87bc7aab953cc289dbc27af2604fd83384caf1d8cdd0a17123a373aa030a30548549901ffe20e782bbc00dc210f04c2c32eb10e757655b751c75c7c1dc31ef1964d461abe0f35f7f0d0f0003087466cf1500591cfeb97173e9ed40ac57d06c49f89e73fe5604f3cc534340ca335f793bf3634f97bb5150971469e5fc1cd05e584a382405f79c77bb83e87baeb04a459e04d5d154dda3875c9f70287634e7b8a5a1373eea7fa90a6c9675f893680853a0cfdff1fc05c2e2b32a95e568186380dc6ff40bcf7bfdd907c411903d64a554007e6506284e17a05aa097fb74f0a34e8773f89f2dc9d8fc4c80cba86caed0a4c04f048b4be3350fda99a381d3ab3fa93a1dfcd02caf159d003e5fba07d16a4f09ce4e23539a61b1906d9ed1e3d6eedffadf240791544cd3588fd6b740a6b20846a7f5f5aa5ec180b81700357780742c1ea1a36d08ed60d5998084ecfe6b0687021383f607850da472a3ac90aeb780982debe36b8f42ad4523905df49f8d026bf4c942241b4bffe5dd50992712bb83fbae2da15f8963482cf77d4a30b524a04a893ea1d39be48907fa1c80a0038089c0078097c602688756c4b284bcd4f902774e1b6f4dff7cb8b2b3d24d604d3ba52470d54a45f00b56064ec4571bc2b2c82354809f5c14c99088f1ea4c2bb88dc2f71af7f0f70b1cbf5c96a91ef32bd62e44368611cb8fb9d512c394a63123841628c708b7ae2bf66f446f2eb622545c08b64bc5c6bc7fdd5f7eabc9029c8f5ef758d0ffe1925f9f324a16d22a907d00f23665d44afd6c94421d68e91c575128eca70462c3b8eea238e101c662b19d3ddf0d590ba8ccc63e290a2a9ebfa183788ab501b818ea282cbfcdc4e921845c6fa796dbdf1c458a821d68e80ba97db040ed9663f3e333e2f1160ac1a70e3c2d738e72f920d0ab77c09c0ca3702bd37de055dc45b5a613d741f8589b82d7a15f76428761729cd6498ca9168c4414c648818ccab51ee705b31a8057c56755c5ad1f5d53ee824d0a86548230a89c37fadd0d1f53eb36f4572bbc5063c2b3be24e6e266e35fd007a23d183fc801f0fcfc1e4a0eba72efdeeeb001df64e3ce6b113e7658e3b8904a62716e4f0204a5a1626962e1041efc5c99406743351cd71743b82bccd8fea36c2241094820c2270616c8257259bb67e3d8193750d46adf3763469df44f18ca54b0dc25d8365796e2c3d2a1634d43b56d6ccda2897862254a7d2598e7258fe16d03f5396fe3984a23e51a0fb5bf8f897cee79f936b968b31a253e333c79b82358d8021cc24a5f28443b11216aa93f634c456d5b6eac085aa745ff6b332874e04083a19419f4c8cecf9e4ad12291ea45103356c2ddd01c377377ac8c01283900b972246eca403561d8e2c563cf7ce1b18330633e2c70c50506219f3e58ff03918f931ea397965c15656f1fecd7698b86d3fd318b208225880760267cce54f7d41e89c8d07b9a5580aa802443f23cfa92cd898c9f3e8d72f3206699f705035fb0714b1f52e10f8b7ff7591eaa51d0d68e5cd9e4da517b0a63162187b5f2b95c30ea831b1f1ff219779d1a8b486c1e4005bce41e8110cf60e65d498d3af3e83235903b636d1624167e2c5f5f61b70bc1118ffeff6b9b18c932b94a96d2c96d005f764318e4240ab1d56beb04be601013abf5cd7165028b2f524e10a22cb026b4b9d114d6c4112cdf02432e4c43e5b2b8a4b14dd01773263d1c97b480b6088fbc7c4a1662ca877d8f3a0f2853536a01e8b6738cf096f75a95318b6f70169ffc87a89dc2080e737de92365a57d0470f3c2a0dff91a7e3a29005c4d14c62a17d3936af8493f042c363a62b8ea116b60d0b251a1fb2ec9340025f3d97e2a9dbb501795cf10233343400d3b29fa92b7afdb80c02f8a4ed3419f6d97a52ef70c07155fc95a5fc122e18bf33e870400982b5b66eed89b08a995dcb1c44200d64f39a62f7213e8e7a0528051be9876b739da64ceee309f710daa55f2f981b3953c328eb061c04c8bbf20322a2feedcc3dbb9177b1329e68743956fe02e26a9dd917f2523c7b964d9f913c306a3b5a8f57469633a6b080e48d96a1d5ef760c03d42fc30c200265cf2d705948eb97dbd9356e63d9715a7098fa242687f739cc32840989b86162f89df864d0839c82b3d7ca9adae91c6927079884685b28dde8fb1b55daafb179952a53a1af8ca3d0d146328a652858f7cacd480b7ec546c8df4a1c18829d51c29efd42d4c8de6ebcb2eccf538691634e3efa2de5297b15f0e81a76f25324cd24dce8f2f3f500e55d48811201e1c75a448a87899aff1339ed29b66b89323ec19f939a096244f28ec02006a2e33bc5ab37a893bd5ee9f143277667e3201c6fc429714a49709ba8be5904252ef4d391b0f89ab61a7485f941aac009dded045549b41bf4af2bb9b17a35fd1ce4465115b1ed3d9551ac2c0a7a3e3ee035519e2906588ee0d5884baa6c3e5c3e42c7c26cc103c2e5cd94e77a2e3d257b16f047c6348fcae57841a66e1eb56c738eb4257947541bb4eb2cb61a0ac8101fbf03c33e2c29c3fb3c3506c51c48857b18d36bf75bae885bed7f22f31831e61f2f07bcba1c0827aa5db21ad6371bcf1ae1b7b75225effb280bf28e3755b14250e9fd3a85eaf57f30b54db2dd23f5e41a4f2faa5737e9384733d5cb67bf1bed4c0931e18d026e1f62eec2c31fefce0176af94bc1ef0acfdf598bc34b3ce9e13c872859f2988292c5ec0ad1e75a73d84ae7b38d5b9773638dfce49bf15e444d0cd6ff9718d01de0c01a9b292547305372ca69a35538651c7e740ff6880128613cfc41d7dd8ae6b07a6b454501a5513371d0a0beebce055ead8c1c27718760d395d2acfb72baa448a29c56f534ea84347cd6670398887689391788ceb12e26b19a1747bc4fb2597937d365d6df4c2128adc24ace0d0e2162f89f83587e694046018cd0df992adba0acc32dc287d68416538898e343186c224b8b2b7c6c337f84f59a17fb4bd4db6c5aa11fe350beddbb3b269b3484c6229590ec536730f30b70e0ca3b070682071f97363dd3d62fc50194182979cb05bf7435421e68c93932a3eae287ac0307e6324eb22ad850355331616866239e826b4844e66071b561d83ef40bad580cf707c6204d91083a50ffbb4e675867f07f8f655e34482bad30274acba0db017c2a3a1e6257748f7aa6c788b658fc45eb54b40589eb56f098aba9203d6e7addbe80f5867683da6896e23299d8329c53a190806a4d2ddc5299b52c3e48aaa9826aab02042948c0f328ba4e0464a8bd8a2efbe3e7e2c40f81e99268aab6c84f2311002dd5891661e041d505433870f200ff72ec177336f3a906473f41af35a3f8604c5a8cf3b06645b93f7b01bc164648f8948f20e2e2e156fa3281b05112df25e932d42c3145e6844f604547fa10b5e5d3360748b959c4444900b3c26f4712e71d1e2d99db284eb61d123614ce00ea7fbaa847760dbea783c8e5e4f461476b6b5edc64e84ebc8778fdccb5a3cea8149981956fc78d02071c565eb71076db6f226a75cb08c6c80545e115f4d9189c3c30638a963dfcff57f7a40f3843915141b345b7be0657b7bdbe614585b316e7eeced071ab889c8164271b08621372ec1e63da79b34807fbc4fc5360688d269454959b5dfb2448799a9ddefe7972d3694ce3733fcbba94d3e1e455c59a95a1029d394dc45a28bdd57f6738af0ce821cd106b0426d006eec4f75a1bea192ed2c904faeceeb74814eaf5b15c3529b8facb6d7ff990f6f862726e4e97dd4cf0ffe1bd845fe585427575ab5d94267937e0c4aea5019207ec4d50d31175bdd240c061ad14802e58b8d4cb57f8bb2d04352ef0238b3ed0757ef12548d80776eb7513e5aaf9f018dbf7c6b16cf260998ee618d0c0f3143f23d6ce188111e5b8d2c5865e99bf3c9b2573544d8721c0250678bf49aecf1d49c8d1f7234d85e7b8bddce97a8d15a69191a1bb4b23c2944805261c89816a8a5d533ad72dfa9292584d39367489543ef7f49f0d1e27bb8b1e4c39b70d8099979f28e02869b383706dfeccafa66878bda832982bdf1d3d3fea22f78ca684331800998d2b8acbb9170332620baa1628ba8878bb600e0ca6403dd48ba49fa4939e618ad6055bb2cbc98565db36db28b5bc4c8f8320fa8f52471679510fd7bbe42bae188dd4658c852b18cb9d60c6b056ece02181b6c3fa4279ec625585eca31979f6d7dad3a382c9fded466124ceb68c665eec735942a7f63703007218af1ea2944d125766b030344004b44cc9d2b06bca9b796c2ae403170e93a4b3855c4e1d81f18ecdda94b70dc43979281835bd3709243ce0b40d4141f5d1fbee2f065447750d511023a82584b8a6e429231cf7287746d8a14c004f351d8220516a49a0a04d6187d39b4fc0bf3700a0469f80b52d00eb2a68c90c974721309eae578d07f8ca6903ecf3fc47d48981df161faa38bca838f4806694cdf0c6e8241617654b58aadb7d62ab732c7b2ed3bc276e246af3182a336d42152627cf58378d5ec8a55ffc0e99f3e3a945ba49662ebd5aacaadcca1b5772be5bdd95c1c7f6171cf031d7ab1ec978cd738af8974aa16abc4af3e1f93e01240dc7cfaa424fe734b97ddf42e9b5b6c273333dbec18f068bc4aa3a7e90a8d82208fb56820749c8a72584263d2fdacf49587ddba9e79810ea8ed01d726b232959187f061318d8a462f3d4d348dc60c338c3a0e680514904aa2547d5c55d1fd11f773e8149ab8ae7060939fa13070a67fd43cc62974a01e5e289c0d018f7e34f4c9f52fb1090c73037177bf82d28a625c4e859c303fedf8cea356ccdbc12351dfa4f38835fa929e4737a5c7e081ade9d5ef1ed9e4de46d4dfc4ab99cfd43d123907ef11bf72820edad0f113eed1d27b06243b37ec0c99bc8748d383d02827ee387026bdbbbea085e7a90977773aeec68135fa8077ebfaee092a3cc8d47da12f0c18b4d59661bae14457e6a7f56164c4420917d84108f1216379cc2c75f5a95c7d5c07f6dcbb438d7d5ae3aba3917d4b161da1b186d1c7b7108e4855523686c76a0d031e057660f35264b083e5d7ac349287b5e63ddab4f87c5c2ffea860eff0d44ca12d63ad2c70aad5594966da3b0a9035c1a6549831079ec4243bd295a02410d879ea2e6570ec086898e0ae268bbb6b9b8384f22e4e239257664006a87bba4a4184e345446b461e503f7264af951245278bfb5429db66e2ea59e7a51585829b325443365bb198160990eb45bf474add1d214c43c31db7439f7f3d580a05418250ccafa8ffad6a7623bd170b919e49f28142b9682416c2d65aa54ac5576e5826862043f2c4c7f23d5c04137c265121676d551d66d266f9d741b938a8cd5d5ad3a4c43afe9c363cb8c00b4c9a75d2b05c026bf7e892bee2e3d71922828a0a7ee191a276320caba05f8e5445556ab20688b0be8d7611e09e42e04776480e8ccd84516a6424a2d4ce5abac043b1953eb5bed3838c2efad9a2b32d68ee2c22758ad7ce5adf784b7b755c179436752190878e9f04a6351b580fed70f199ccdc678889cc51c0d155e700f6bdaf08211aca627eb87f0f42768689d1ad9c6adcfc0c57d413a4f514e8220a4663574043d6651340479563bd9d4bf02998f85ac3efcdc10e4b5f5865b09415724af29c15ec5c0cb8b64abb220db1b2ea613f440386ccd05b43db39ff4a084c836f5de89834248aa217060ac5d0fa738d8e4f5adbb15c4a603f2445ff08197d447050dd91d2a3a3d252fd3c53ab2020530a8b2445365b9d8280a6264c819a18b81486a0e3f5b44b20aa00558f2bf2e4e291a6414f54e1e40dcca862139eb7b1d26654050ba1b14a2727449fb0805dd4cebccdc56c6099bee4023a9cf4e61af95a8fdd3a79dae93a336428fb84e17532ce51f0a2ec25f1ae5ec2d7ab6265862e76ac69001d0f8702ef5b39dc4f291f69671953e288182bd8529e222271d29e0adca1cc52f39bdb57e956ee9bb09569a033b44102739db459366afa5895b3ee0fddce7fd1815313d72f64fae2a8c562ccaa80bb0566b619a03b8a15e12c83cf84d19df1a7206e2b32582f70deaf2c99729de81c4f0d58bfac68e29aeaf8d2b3eec018c0f85068bd625635da00c2fd29963846e00fa8ff7c6e00e0890fabb677e59cc8c003650b97734188503439cdbc4d12a3f02307cadabc3399906e9f2008a8c2b4ee1d9b358b8047bb8b6a3a5a5e5b64856629c63e2e015256accba08f98b3f345b1c2d4b59044503bffc29bc957ed8fb254b2b264712909aea00d018b00322870f8b0c41e1b54a7e29e00e512090d3037944b3c296d7aeea9c04762d7a4b46dc9809459c75c639b6800f32fb3f10bd578d59492f0d54e79cef69098969bda3af89649e142a6add5a94ecfba8ab2a98fe30e7066abaebd371e6e95f8c149034b39627af37417f90374ff17f6dddab59744018b6f2566f484466464646afdb335d52952eb5d303e8422470c7f4bfd611a45bbc8ca6cfc8d0ba88a62746b18e2f1563ed81ad4de7b56e06dc07159c67d028fc096f1975ca566400de74ce20193b586ae79c0e6f4017a9bfec643a1f2bcdc80c07d20ce31b83f85dc36ff64fa4fc091d288c967688621eed8cab55697e8688114e941b546b5e4d4aad56c5a15505a354b75d5f99fc59c5c8d23fa8d5b3d4d2abd05027b0b947a28edf080ce49b61d695fed22f658647f071dde63eeebbccd99dbdc13a8e0da8813e713a003b1415fa6810eb14166260e5894fe464da303e8107586b230271bf983725623feca89267c2019055b2f93032180226df1a4ada2eaab54a9e6178310e695fd2de003e919b4c3d656c0fc26760b46fe60443ea54f927a887da6f06787f073ed46a62eba9a29723ea0d8d687a432c4386429d3e29f9957b014de700d7a9677616e2ce2760da89cde1774a52563c0424581509a38eb5514e4186c994fb228dd0e113a5a1332670e331327296706a43ff3112e129f9f6491b6f7f59103d578a0cbd4f404a09ef62a45e063f81965385cb33a24bfb0901eaf21763d51dcc591fe6c2bb3693f89d75d512f1a8f1146591a33f8d0a5315745611a07d7dff601b47495d7117699a04de331fe5482112b86e2dc456991495997c7cf05c17369ac04ddc6f7f3945000724a8ef986098f679ef603fbb06739a277c42dbce7261d26cc08ede4522e8d056e03764117cf814c8a7f42f92585a0c7b006d86a59111a77660d6a2cbb05bb6d4067ec487b95da01dc25be443d440fdd893c0644e2b1ebe95660522945a7947883e80a64bddfe8d54932b038bb57bd563d91f6626a7b5c53e52ff059fe837a2722e0df8d86a3df2276e3257fe861e2d0daa4d0ec5f8cf21272fea36e03db5a152bed4b0f15c4bdbff09d1e08debac3f9ed5dbb7443b1167d223f6af1b7f2239febf4e64550158eb966d760d98a32027b9f21228c189475ce447f3e678ee82c3b1823fd0b93677734c0b6b43c56cfc39f4f9f0f98051e55b235b709ae999775cd51f59a3fd6d74c9b80cdfa0b9b8f1beb2155a34d3c0bbc39b5b44806971694ca0f30f9de1ca21a300687902306f69d4a57b681e59541e7acc7e33a5551bad6897cd1cd46d6b9426857cc4c462b8c0e470a6c85a397786f033be19ed505459059704c1d36cc8f833c6b070db006ef278571f1798172a9bc9175b6faa3c60e5bb398937ac958bcd8ef6e8223b4395d18215b72aa7d019b97ad20545bfbf4a694735716f9351e9f39c174971416d2923079db4e09ee0ef44e3531a5567d0fb088bf618dc512dfe22295d8d373a4f9b6dcc9f7939520451d56bbd7d003b84a483a25dfd47cba8732e9ff9c23e8065b0b19692574ae88b15a2bc1ca97edaba79c74b8f00b9f698a57424834dcb8737e283d5b1c195697b460bd857c1df9de02041cb157ffe995106a68a2d77371aaafe8902ce90b48ea1468d49660113c99c013008a164ec027d71eb8fc3d965005d2d2d078250c3bc0730d5494dfcf2d27c105c88e83a82a9e2560af2fc0da92ef762b9620e87c2ab3581d801d8244e96de46d9d8224e8fa5c3a18c869f477eb14a60702c685037037fb127d644fbbc4e28ddc2bef1127800025743834aca0e4ce0bf9c28c8ab67b9f2aedb5cb9459445bdd5a137f33f6876f330450289264360a6feddccb5230d588b2a83c81729d7476fdb1f4d567063a508450c7f3ff00997f64395a8b4e32141c7a194c8e8f59515bc265e87c1b6a17759032ebea82cb68f802d1a9317245df4065b45f9121e9faa428eddfd856a9b1ef0662ccbd021342c0bee59bc6109705c519a641c4f674662f40dc70e7d0831697981a1efa6587467c3bc486da2b753b95fb9f3fb618e9501561964962072a49f5e7bfe186146e07d902a243f21f518f41910e4d34888e726a592f254c596c29a1362f95f00865b37de630003159bd84c4485e84c137187f34a9969e4b39b5d3c0e9102b59e3f0592cbc3a64601d09b25b8a5e30137e1725a3809813e045312845b9017150e538f61b54c26233aa7117a0132022dce16da899bb4f395af67a8f4a395bb6cc059d0f6a2e0717fd3c53d703eba1c31c10897421a0d9ced76212e274d4fcaf8e315f69414304794431ff559f5816e26a43459de88da0c5c581a90fcb29cf8836d0912b379753160e0c0741b03ecbf0a81c3170562b892a8fc009bc7903aa7906805b3090b29a0e5293d8889c945ff5413976a2fc6012e83131ba8eacabdbae3c1d4bfeeb709e76756b34fc1bce816154af150f6a603830946ae372eba63f1d31e8635c63399948270e2ad2f761e0817bca31a125bbdb967b4b99524a018107ca0703089a0c1125556aaed53de91cd9516790cfb5c9f8408bc8bbbbae69d1e36ed450e081e63082aea6691a6d56ea55fc1c46c066b7424d73edfdb9023e23b89b09ba8d2b9323ac824aaff6b72f829ef70f2ab47fdbfd658db5638fa534a1e2d450865867d0aa4c91f924b87fad1abdef47edd6378e9b3f2a0c601e8cbb36fea1e7be5dd90634cac87337ca1c46501478a061acfef16f7ab51e7fd419b41a411c95afd1bf52821f8dccfc600ab5361ecb0d690c0d34a4a96ea17ad5349a7a52a95ed5ad2d83941fa5fc2555f257e327137f498dec2047b436b289902adfbffd0ac4c0aa61911a3f821660d5f8a3bf9004f612ea6e88338316c697993254ae3ce9b8575faf57a14c91ed49a8eca17fe4ead43c59fd0b5935bed7050d63f4ee0d9481dc346e76a695fc4c9255a4fa4c19d93e199bc0a274fbacd42d187bcffc5c7bb52bff7e6934ae25f4d0eada3be552daf6c9a7ee3b0e44f7b525b21d05282872bc8854b7e026079677808e4085a2de8be1cd283359cc1e42488e27b1ea33706e5835eec3b3bce8a246f5332914f5e60f1bda70968cb3c4653689ce9e8373c3da76a2b3a3280ece92573938373dd1d9670a25779c25d7ac543f9382394b4eb16a56aa38a2b3d7aca488ce9e83b3821907618a4acdbc6a55c3629a7e66e5e0dcb03888fff4282ac5ccaa9f49b540c6e220fcd3a3a8d4ccab562b9c1b56cd8a8ab3e4cfc1b961d54ce12c3907e78655a37af986949ae63432c41985b36456ce15393395fa5fad582c9c9c9c9c9c9c9c152b2747498be8ec54f53352a8544cd3cf2a9ac2b961d5ac543cdfd6d82e8e59b27c66668d99256bcf539321d670fee8a1eeee9acbe8110539423808fff45eb562dde0e0e0e0706f49429a191561915d895559580ece9682aea6a6a6a626f535393837ac1a590c959a9e648aa2b286ad1cc4e7fbf7b66dce9c731e11e973dbb639c1293055b7a23f8a5dfb4cd3cf93b973706e58352bd56b1e4881728a9f57cc38152705a6e99f93d254ea7fc55558385596b8286d49429a194d22c09dc229a798274f96bb6feed23777777ee7d76e6e6ef8a66a1a18ae6a785384457625566561393839d0f0867b7b2d26692d6e71db7460cd504e31d395ea67a874f13b0ed2cfdf1c647dbf65901a063adcb6ef671993d42612bbbf7bdb7d0c74ddb6d7a34071107645adc3f861a0ab0cb18b238e1a26d1348da3fbae8d86625e4909fee8f16797917725a56bee1ddde8765b7183f4ca6df6b1ad8e31768cb13bc6d80d227541dc3db20f9617eb314af7e593ce7ef419fdc3c87163a4de85d49225092b98c8a090b212ccee2b493228a72b3bb21fe815a1dfb2e0a0fcc470e086643c1dd4352a02896f75b32a1a9a4dd424fa81c9100999532aee548cc95c8a6ed7b569a9ee9bbadeddddacb5d9eeeeeea1a1d9aa67501ed7f4b336fb71bbbbbb379cb5666d5655d7bbbbfbd766bbbbbbbdbbbb83d66683ea767777cbbcbd9d1d31ee4b0c45535ecfe92084e1819758bfc45e6294ee8842dcee3dfc37ef1e529329d38fff8f09a83a18fb31fdac4dbfe9e7c73ba6a00bb92ea9dffe92babbce0ca50bbdea736d4010238686eeeeb8efdbddddbdedeece9b467737ad73d4da78b53bae0d0862c4d0c0a69ecf5d85e8ddb13b2560a87bafeffa3b78a583a0da5b4d3d1df0f61cc44ed39f07f5f4f14c39f524010608c6094cd002a1fbee999a7492520d7749a986304330424ed3ef1fcc935ec10039cd8ed8fc100648fb3ca830409e0703e4c100793040dd3bf7ae7173476c81382a080608150403a439989275a0ebdeb977cdd4fd0755e3765831358101f20ddc11eb00dd0f61b6c8ab45307610b46581f196ddddddde1cbbbfbbbb414925c5ed2d51dd8aa9d8d263cf0291cf600b4e28471452aa63e925f612f354ea25f612e358f8ea2677aa8ea51db2971883a99d9d1d321bee5749cfe5fe83cadb07754f1b1875d8a0f6879c95fa12ab71a836a8636987f2872fb1ba36f28916c8072107aa6ceb4175f48ddbece8d3ddbdf51f153ea81c511b1ce7a82058b7bfaad0a454f9880a5c4db0b5e1d73111fdda6411c544e42ed3cc37d024731a7ed98c57ceabd9f39b64ee3211350dbf696622fa963355e9159b882ab7a00a5c5d1391894ab7600ba4df54a54ab738ae76ec9962ddd29edf54a54d571648f4565228166d02bca0a11c320dadcd6c6dc29549c90a202c5ea0c2020a98ba465848b142826d7a58fcc023361558780045c5d21566a45ab0744516182a6457c476b880288785f31a135484ba4642583129210416219a684542e4408412227041f9f7638c11a769ea67b3bbd3d4cf8e22e342bffafbd560120e684ab835343aeea29a92d1d89c94a652ff2c7f21719a1850fe9682227119e5cb5fd19f8764962c944edfa4a6ed069ab8996aad59cedd565b29e5d440960bbafb723ca32c0c5a6adb9c5b15943fc6d6a49452d37af3768168714e3058d6eef9eff26f5ed12ecb6aacf80362dd9e6532994c6e5b4f6fb9ae8c9c27d779a8590fea0b192001466f3ef93d363aa52653a8d4cca9460513416f6df833b036fc5376588289d61d856bd712419c5c00c71bbd8290215634a175758dac78d2a45b5577b1d5de89be908105326b66da0564ffb441701a30c148a59143abdcb42b27676db8387d725726d3c7bb32796fda408d72b95fba373168ea51b543512405c1827a093d3494b238c2fbf8f93c44407dc95d3e7e041f2380a96dc9695888f5db9296256fb10914040beaa000c6a0dc13a8d9273585d8a7eb0a403424a3fc3ca0d0504a594fd828b41f7c38ab071fd22a53559ef0fcdc64c94d76c17e0727b3a75b3243561040acb70c34a82cbd663ee0b1a7c78eb5643ac4ae744b66e595ba4fb3327e62815018779d503f3e0f11d0f9e3aefa7b42119e0a9e00bed02f4fa84c7ffd252f9906651c20e44f78170cf0154c32a5df00dfa00b42fe843f014c22e497bca8113de1eb875128690a0175ebab4088f6e78ab26296626cd2d4af5831169742f8645c082189920e22092baf29ff227c082ea87e841f014c128057fd9257095a285725a7d90fa7cc87b4c787a90e3efcd4872b0e3e64d538c2f3bb7cfcfe94d22d1ebf3f8788ba15f32e121ef5ee2ae15b3b7e7f626917017e7f1a754bc7efcf99bb6e7e7f26752bc7efcf2dedfaf1fb934bb7e8efcf2577b57e9fdbe916ccef733ced72fd3ee7c3fdb80be7f73920ce49bb4cf87dee8990bb80fc3e37c439d1ae20bfa6dfe760eecaf97d2ec65d6957017e9fc3d2adf920801f08e00700988c0e96fb8be4fbfffe03c307ff1f0c79c4fc928afa2575c72fa93a5e88d8a5fdfa6d49df76820184fc03309c1e00000c53fbaee4ae5d1930a4a90e404fb992730086ac7d1e9f448af9a452aff6519fecd2abfd1d9fa6e3d3727c5ad0a749f934a2974fabd2abfdd3a7799f66f469499fc6a557fbdcb7ed7c9b4faff60bf06d3c4db39ff3694b4eb31fe4d3b634cd3e904f9b39cdbe099f86a569f6713e2de634fbae4fa3d234fbad4f1bfab4274db37ff369404eb34f804ff3699afd123e6de7935c9a669ff5c924a7d9f7f149a3a6d91fe193329979a55ba1ece1264fa0761160688f7ccaa8fb53a85d354a757f3ad13678ed4f2afb13d6ad1e757f56e9d61ee55054f767ac5b5ef7a7ac5dfe5a19de611e9bdf973feeaaf97d09e4ae01fcfe0b113bcb444c844497f830911057859b523877eabefcc26798cdc733258cb1ba4ff3355bacee87a00ee0e399d258aa003e9e29e1eca9fb342b11be241cccc08c34642f253a947e7885f001f89278b157121be46b8a2cead586004e916950caaac412c2c789c184e8a5faf6c5643f94b2ba3f8182f6a7d0fe1cdae727d8a772e0c1125587e002ce893321a4858991961d2a2a6ac92154d25b8a9012555cf7c4881f5bd07eaf1d23cd96a6c72b85183288bde6d72dbd3a3e1d20ca21972c65b6f36210218981e543ed7f21229e887475010bcb85b5e9ff8185868be5c7163fb4a07c4280166a804f099055fbed94007eef1ad7a80c274aaff9c93479695f05988734d71e29f1f4f8300162e3a5040b5a3dc2d8d22d2736a9c7a83c53263804a9f6c3f424e1f16142bb24e9d50291a08c0a5a952fc1d4da24611f6602ca20801d844983f2b757d4b9bbbb7b8f1fdcddddfd77c1dde565fe5cb34216638c1eb777578aa524ecb62e0682a92d426d1f130c5db59fd72504066320071d74104805970983c2603323b3548d1a97438b1b1010e7403495926042ddffe4ee1665b3ec0447a7a1a6ac5bedba7754fe98765eff6a173dfec2239c460d73d419629d6bb34d847764c3a0e301c60f3b4654c8e00c6526fbd8e7eab553bb75e7a8fedc9f77a86a5ac319bac618230adcbb598433242814836cb30f4dbabbfbbefcdcdd453823c60fdddd3db2f47afc40b97b37377af4b0496d3335cbdf4deb4cbb3efc57725272463c421e5bd4ba2d8ae4e44c0de9df99386ebfac71dc16a3c66d1c99a36cdbb6456ed3dcb5cd343de949f9bc699d4982714679d3be4e4a8e4bc110b56e8b22392939f6e76892d2876b9b8c52c66ddba454e2c168a68e99c2eeeeeeed758a41a7a6791cc799b6d588ae173c8ae236880ceca37dc45fb0bb4ac99d5ee8560e19628cd4e051b5b046223c5cfa7cc15d3964f8923a98ad1a6dea560699bf6fe2205baf8f24bd0f808d891d771724eb621e077778a6ef8c2fa6b9b5a6b99f4e279df9a7d301ba76ff02c4b93ffd9e7aab4be3a3a483325f50fecdfb6076a57d27a45b3b76c541150d86139118cebd09ce1d2e9864aaf62615043c6f962b5f3ad0d7467beee3f5a13907dc339db6efbcd3ec584f27222fdea977a569e045fecb8be74a3c184f7be1182b719ca0862c0f5059d7683682246650ba17cc86b042c67c99f930bb223b3ba739c3a13375e9f1dce0de18eabe5863ce1f9396d336e360904363a18b6cc64ed20d16dca05f3c9183851b047d2104c3421cb22d3c38645f044d16dee861010e25540d3289e6a86b242486c72354349b50adae9190163750535d23a1d8b684104c3b8110152329421f7096fb74f7ff5655fb8a140959a5aaf609e196f961b81c1d308c09269040024d65e68fbd020be321c6df9ab44529841a9f97e23750fcfe89419176413bf7747ab76344b236f1050454a6fecca410d285869c4425c95dd4957c8412502addc302b12d2118897dc48f30103aa235d9d26b4d26ad4d4432e9d20f07ad4d7c8ec58fcf481c848d581ff1638c47d4c8485d7f6afce956c85c25c62f1295524974563427a5b103c041ba391b747c44547956665ef11720a89c8399653c9cb4658bb80b2d60553e79c923a42a65a0822a7f95ea8c359ee47374568d545e6e5482ea476d54f7971cabb081ce59833bca8b27b2f0503bcb96dacfa7f601a3a8d48c0835f4ba28c1f4e287775610bb89b0f88c3201da4b95f70e9a177aa8e879d108aa53294adddbf3f8c9c0d5196475707a0bbcc5efbfc5dadc01680001137aa268c1589a9d208814dc408c2baf06a9b7e3ad549ec7001044d1021f209ed9142f3290a0b4208ca4106cc1f332a191c4c443cd24dd5043158c8bd402a6a02245088684193a0029f185156d84e143144d5eed29904509da500073329d119305c0044face1012280a020419657b701c51260501963368215840c317164bc715232a25b4d9352d334971b4bb9b5d464f7d62da526bbbb1b9461939a642addeeeec65d8f517e94d1b38822b718c29b8c31b2c4a04b19424e960841c40e2270e243135abce0d50e85156dfc4829a7540f44cc17b4000aaf2064081934a8fdb19f723d9081e4646e4252e8156b71c2f9d655d03025c4b5eca069c9c1a7960fd4eedadda95fa9ea1a8d31d3c2534356d56642472ca0c234a869382868659d3ebfd8a1b28d3a474c3ac4f1c780a42b0f35288f23a8bb92b813515091c62b89121178b87879af0400675c7975490060c62b89126de7e5bd12125edd4f990b9b214e0db99f41ab526a1fbff98561184e25b01a7fa7c68fbfae7d4792d46da972de0646e9c09e7f751fa5fbaefbbce7d3013ca811a4416bc3efb9f4089405ec9d58ad26d31961681763219bc1a5629e76b1d8877ff6a8072e958338880a2dd2161862405255607e091c41b240b867ee619f76ad32007bc24ea870c35d433c050e228114778c24060b7c30accd5609cce778420057155887cac035a44130c4808477f8abfc312c9006f244a8e9103dc2880d9202fbe0675ea5c0fced6ba9a8cc4f85e893190d3709861890f0107725690970100aac0f6652596359778154a0db661a54f9691015a243fc9488ff87167455cc4387e6f61320f1e4080927b2e856c5df41a5755f85850639f11d566d41c38df98eafd02eaf69785837ab9a57a566bc7063d3a3a8d4ccab56355eed8d496283b3115efd46fa25c0e44aedfee961383727a5a9d4ffaeeaca68fe9b14cd5ddfd0c6b3f5b46b04fe8d09ffe6640bda9e746b8f80a852f937a16e79e5df86648fef487ea9cdbaf48a97b61f547cdb79cd647aedebde848a5379a9ebce77f8a717f11720d0adcef4a7aabd5c5727390dbff6ab3990bb7a681209c15240ceb0ca9367da4b105c7af91710c7fd71fed3be841e8ae32e6f22e4020d742059f708881fed8d75f98ed374ab8bcce9b96adec977388ff2c72dd6a50d390dff50162231603388ad51a31b959f856a287b969849734baff835102caa130c53ee7220981d207769b3cd81f8595bd2baccdca5bdb1340c869b0fcc568336abfc392ba0f3438e67a9f2733cddeae17c96bad5a55bb15bdbd76ddbe212fff6c91fe98461aaece9d5cb174bdad2b6b3f56c3fdccfa95146742b80e2439ea246d0875cf616d91e4210910cccc8653e3483a1f8ec4335521929dba5e22af139d6ae115ef1f98889518dcf6ebce2b351ec51e31efdb054a3bbfc15df61f1f9b927462682c564a91899fdb5cd9999f9c8c6432c85c819e634fcb1984c5654349b25854c54e3c617d23e50a63e33d5a05b55e8a8e8d14d000b81d2c622a165293cb4a3a347e7130ca98e4240c43c3363c6277b046454dd84ba3b2a1f61c406f105b24f82a454207721e9f5de4d82296154034b927995101795f1b3c80bbde2efa2a2a2e934fc73529a4afd378bd541e530d533a761202120a01c29a8f6a30b1a7651103ffff850e709129f3f2e9184140f9b4afc126ec8d28511520735825d944385861dc4df52da85c46958884abb9a4b50d7496c107f95aaa6e6e6e6d4c2b65fcfba0849d8453f8aaa08e1c4d73d9dc3daf8609fa6e167528513534031aa5c73a4a09d148287b938b1e200d2d9d75fc224b5ab47380e19ead741c076a9831872828477922aff760e1fd8203d0bc4a75d2ce4ead9daf08b51f91b0c0cb86b3eb3107f0d5aadba7f532a352983600937d0b08baa0c33d0ca59d6869fbb581ffc2ce42e3642eaa02eff0f2ee8ac7bd4a44b75b067bddad30bf1d5454ef3c55424e627aacccf1fb650e5ef22a7c98151eea02eea277be403179547a8fc3db4a586dcdaa3264695bf8d8a84f68bb1424f3acf1dd4419ac626d34947074f8d2722bc2b831e7ea87c4ac0be0477571ad84f88c4da422a5451658f80882af3e9c4c2be9fe649e70857236bc33231ec2019dd7bbad52e762208a993daa5e26f2efcddc5779ca74be5f71f2ee2e6229e81b952d4b34ee26f25fefe5630008c86ab95bbd849d08b9f8593d3ad3542eaa9341ea4f56a8999ba4664c498596a6410199111e4eeda26c3454ab94d24946cdbb6c96981f5a86ba40509297902b16e55322f1bfe35c5f4f2e33c40a18cbcb823f710250816bc3ccdfb92780fc31d5152c210afd37b9f12108e287abd3c1b8121067e24fc316b50ee639428751c218a420f34dc5891212bf89cb5260e59a1880b2ff040c4e2412805164e8dc79a6ecdf985d248afe6b391b0ab915eb1a3f0f3465c30cfffaaeebca25233af52aafc30c42c606456f925d0ad1e52c42303e6e399a2bd0dff7a01a7c8f73e9e2927708a7302b842fdb7761dd2a3f2175155fe179e54fe996eb9fcc5473f3c956584b90a833156e89e8834e729748b5bb9d6c9f96d955372df4d357d6b84b454f994006ec80483060d40d5be65c11744f534c150499def5f922129549748dcc41855a26668e08ae90283c143f58a863b330243d7303a74ab8a0983aa7ad5ff6bd33de4f9bbbebf261be6ca34b249ba15ae9687b48b9f18daba4663cc5caa57bf11960562380241508d3b29746b05633d4e951a1b52e4857e2332a9d890222f1869ff05b2dfafa23b6974ab0a3990d57d1e477408bf3f83dca57a8f2df3d841663b24bd94edcba227b4d47d39ab511649192a0514a8e3ac573bbb15b71ac55814ebd5ca7ab55d0433232a44404cb828c9ae4811eae1419ac1a838014232830b4558355b2413d9152942b127f220cd6054dc89032d71c1221b92d23edd93845405c641ec24099217f66fd66655a4578b5305f5eea5a9353855d030d6952f3244b43d59e976635074d265a9088b1343fee33e5b9262559e7450ef74312a2272827f942cb05786a8ba960d94251435f0d0d04851802af711294a4fe53e2241596aa6a9556598acc35505613058ebc7a8863cdb190a48506fca998ddd2b3a738e6791671a97b1408eb01257eee32c2e02b83fc2c50f03db2baf571ba8e482ae4503e5ba2d00dd3ec27a98d485d9b005664317a4259ed4454aa2cb00ea2229e153613cf95a8c47b6b0ab3c59d8e288238e1aacb0a432f3013c1aeb3638e90d1d0a526818b7d7a24efc29139fdf8b49d030b59fd2893fbd5e55678f270d94405b2a7f4441091aa6f65b3cd030a230445f267e7c9df80ddef48aff2b4eaff8fb0857075933db498739ba24a2d5f8312a4deeb7ed757ee31dba47493ca9dcffceccd2f6dbdbc776c1e034f3b71aea0683d3f52d6e1ba79d98e3e436e7c730039224edc2719af9309e984f9d2133a9dc674402bd9adff337e6e03e44d5f912070ca7090ca906ceffca7db7799c9704c37c0bc4708ae2fdfc9a6e693ffb63756bfbf9a89ef355ab395735c10a70101b522215284c9ef48a688b05694368a4214fce517211e2d18cb62d5b152c338a942854dc7dd9a33c09a3085151326adc0fcb3798e1088a4fdd2324946a48ebee511154bcba4750762a634102c9638c934a8c7172f20a45811747508ea0cc8ea0683fd2d89fb5ab320beeda1c4181d53d8252545123e8a83bc51433386a6205dd8412dec40fb1091c3e382aca5363ebc8d8b66d72474c64e19888999820aaa85ec9103165a0462290c032c4d34451dd26e06822298cb5bbbb51d43bb606aeece65ee9eeddbd9bc388c9209441f9c3aeebdddddd2f49707b7419bb258f7c51822beb76f193f508d7d8ae28a516b5cd9bdb6ac8fa10bab1219cb712c083945636b18b320f766ddf459ca6df00ad0f47a801e83ef4a0f66a03591db469a68dbfbfff3a563dc0386448d3d87652a12b1804d54e0888d5416dc802316943869c94882fe0e89e9c314a4d7253639611080f9a5682025e3e1da71e9ac61cdfa3dcbe337552466d039ef69ee745197f98802e95e1f1e7f54a0bb9c518b55d6d1bf75daff6f5aea406aaf794271ddf4c332894095f50fed37a2fffa21f0823802a4ba85201d5752c8dfcd3279fbb3355f9ace3023aaacf93f66140c6183daf9320ef2aca0d789e27a366d24e3f4e40fdd9933f9bcbc1e41d931c7e6ac8ba01ddea1ee5f08124726896e3b0c64bc79d61f034cdfab4100693a699338506cd51f7088730268cbed43dc2018b491b2207141dbcb4173f1487292f2722181c44d079402f383079e9b2149d70b0e1c554e429f1e076ba2e38984aa62a60b625ee891d5a0b5988e61128d98251cfc6fa800e3c620b453138605ae0628c0e5ae842a80a9916bc801df50cf568e10828023d42cdc1166cd01d758f6eb8420b2f2800ea1edd304485cad43dbac1878e0614a6eed10d3618296184a543a1bcc6d8f927ab77843b98940cdd09c20201c1d75dbe34fc5dddd16bc32fc1aef17fb5e856b56279ca5fcd2be6cf999999995933c104f4e5279d22b25dde92fbc76232595191cf126ca071ae942fed5b823bda1031521caafdd409f3f252f757fe48274161c4d4503e111a228271f0a1acd286349233992495e452ed0f6597dabfa164226352a6ed683defd33fcd04888623271dd4423dd44454ae80004b17f58c3617980f7dc77b5c50db7d7e80daa5e4f8d0891ce6811d35f42a1e73992bf952e85d767a7e80501f4627311f4621294354381189222cc6a28cc787114bdd231bb0c42d51292ec99d86f5d29027d58e413337acc4d4fee98027473a4409a30719581147fc9d9d1d9e37786abf74b7112cbe9165b92ccd1e1e02a564d4d304483d8f934e2a72f031271d0ee24e2edad9a93c1e75d2e11143afc66c4cccc7fc0ca3c67c4a8d1a7354830f3526861baaa8cf71d241ed28aa3b5ec74967878e8739e9e858d51c473c45d41c4f4f3a39e40d965e94fee9a443c10a734685f997930ecccbcfed4e3a2f948a7a3aa201887a7aefa4739ad57beea4e3c5772eb2a8e14ced54b543e2d53ded400c6af7a929b53bf24097da756004b57bd349a75b0541a90f915450130c4c0530e5d4f0a69acca82614bc4c701c514d702c55531c2fa8a65fed504d473b6054130eb5f24608a656a47dda9497f63487aa7511c30d19bc07f1a71b4bdca0a846ef9f9ae21e40e0d45859b11a7f881e0e85124df8c038ccd8e00c1bb461831f6a8c40d0306ebd5586e215cea86a6ed8b8620836cc68a34aed5fb511c752171547d3388b932964434f72b8e2155f60bca183152d2140a3e7154d6ad4a8c41b3572502313d1359c89d5b0260b17266a7f8acb95daff351062a38635b668568c312ad1536393578c5ceb68c6e715aa6a6e720a50c3ad02537a924607d2f0628dd2d052fb71d480adf143ed5f1a20d57e2eb6e4035be000060d633041028dd6d11b4dd0b0c510275823aa11a507da050da280b2754301a2f6a7d0bf42118f52ae004a4003260b468dafc568e5872d88a02499910227628091008ad80a7658e2288d29664c17d02a6a3873c61327b01a3f850610357efc22f72d32c383176cf07094548452111d88c2b3c302377c62f03229d5c6524451ed97daee2ca0214dd510b5450567f8d4f89ef2f8dc6a882066829fa52751b0604913113021c28611c08144cfab2352ed246450fb5370ffa1021aaeacc802e92d4c541826cca861679a3b0c8478d5b8289dc10c8c6690c58c590a0929dfdddd7d77f777a22a1571aa7a0996bf2677258beb56b237490859a81acdfcd3a7c32ae27db44bfdc6dfee36bdb9d1867804ccf350db8b890657aec8426323470e264204a105a824ad38353909d18c000000404000b315002020100a878422a1409425b220970f14000e709046725a321c49a320c65110640c328610630c01001062000d090d79a413b8c4184bc6b0601c4bc658628c256358308e25632c3106a27828700d441f0d857bee862ccbaaf06ce5f895028b98873336eb961782a91d121ac4c48753c22c190388891fa7042c30ce02638178f1719480bd78c0b806154230e22fec8a8768ad41d3fd51cd85965c7117a3df21f3b69fdf395c85c650ddd2cc6462a43a89ec04b35f7ec5582593e4fd219b7530808ae778d4fe3f1f213ec45cd82415e4036948f1bf22f65ac6d3cf6e4517004dbe6f1b0a835fdb9fbed0255f929080340948912886ba25490252122211546360829484d9c90312142a3a3b70b615239fc850e0b245f7d67e4a053f48356ce3fafd5e3501360da9d14cab6a4008aed4a0059f28277f6546991f2812186b8505ba89eb8d593cd98e81c3a29881731a05604fa98d809f06c1fbc10f1f47e6b3103f645dfa8ee8b381facfeca439e3eb7037381c3a089c22026153d187b67fe9ef54901cc7f704d8788fc1a1e3f3d93bca0b4fab9722966bac1ce1ba7b28dbbf9c897bc3fa58999747494f12d1d9a5dc0dbe8627b022fa01f4be258d64455621d6ee733e82469ed0eaf58a93a12fdec7e1732ebf8261e96ff8436f3156c78bd51ceeb54a7c700217300dff33c0c8493411c267baa34aba6f28b2ef93175698dedd162af5e89346743f759ca7e0a9809955596150ed1090c7ba77f53c452911413642fccbacb4c6e2fc9502bd4e9b7586c5fe2bc62c4ebd1fa4037c5def9b13f834e2284081b5a6b7bf0b82d9676afd3d9dd5116f1d3cfd02ea113733e361a4eb16b77832ead3f9d41e652b39275d7754a8e5f9a839f64a1603e20e07f4c8087032ce2f5f35c315305b874cd70bc2bb4f0cc69b4b6d1729ab8fd45d657fe5f0239c6a3962ede7100d9f684880bed4ad3c136bcbdc815b1083130c869c00826aa82a1cb181822e8db7c5f7db4b5ff5adae1331e5f46a988071ef0bd5076fd27cc74e8ad5306612f10b2e26a75205e3cbd06fcbabf6b1ad62fc609b2fc6d1fe95cf145509a795f3452d7722a29c267282dfda4d8a516f1358f7f2493c99b234ea471a23bb4da1d7d99834cc2b5a4e2eb8c82f4bed5d7895dbb797bc2289ddf98877bb07564143ece518f239468187dab42217a9d2bb8df9064079ed123acef790352a7b5687b956c3d6aa1c062267cddf640fcbb99f6069b4f6b7951829e0bfe3a0ea302f7aba55fc7ed9f1c0ed9a6fd0e101cdb33c918f6924f3b2d223b4bf881e89b662429e92ee36259d9e457dc8253c7e50cf9590a364a730a4d836b1ea1bae26c97eeead22740d3cba2b4b2dbf6c2aec0b6e1b31247b7de5fa7c79d2f5db791b533e3c16b6efc1b0c47f8bafb4ab4f54f7b014c5468bc96496a849e90eb0ee30e3fbb7805d362ca52fa7cbb856527aa922d27e72a50cffad188549b3e0ce658d06b745ed79ebeebe3edf9d353e143a4fb173d625c567b0ebb8559f62381bc005358305f6279772d9199a8ec4f411e80e6db5eee8a10501d4c79a451295c28514bcaa1b5bfa7e3ecf1dfa61e4daa72a701ae8f6c65c463ccfaa7cdde3c0f9d62a24f7f41bcde33b53c1696169e2a773db2c61726ae4e0433b3024b36cbc8b1be6731c1c2686f3db37406f67c318d74b8b6f817d986e5bf628c37b72be2ae743d288b61979c1fc4393bad11f53f49afd57ca3ef6adb6ba91363b8e6fa8f2d45ee9eea9b989f502099e7e9825e22d91e7c6e8022514b3296fb8e56ee12e3de0193ab7a9069b70c58d0524210bdcd0a836bfc2f5456f01d85d7b5bc4bd426b5d2a88348336b87d4b7f3944ef4d81587a522c198aed3a05ee3dfc3cc9255f281bc4ac9a02ee5d0267f76451d20013d0175687b61d69b600a2621b9fbc0347644f2af0cadd73377c917ef87a331eae50dc4229a80b7c20a6ec748ad07b89a8e62f42caf9e0119bb93a549a64d9f8140825f01eaa2309f589108496a2d0acfec8dc051421eb83bc9e08fcfae25470984178cf01949c2bebcd60af9383e7d110b9f4239c58f62f724e85732c4348a7c4f2f721565c76b8f96c951ae2a46f215c4317f5a9c88dd131661c8f632821a94ef27336f15c398c761f9196c4d306bdcf8d2911a831d659fe2e95b7a6c52c98593701e2fa68c0ba19c8e26af6a903a7f5d3459e84be2f95917f329162f592274c0d06a91e0055e04900051f45edda7419a0bdc3d425a46d77e597103ec5c644fbe0f3e08b7d0ff53d3745cddb4ad90445a6f50d75863fb95a5a7ea49a1bf76a2cb564cc155e3a589e99d9226a91f3036aabd42dbb13a0fa20bc0db8db0b18da80b6615b5d118a29c70903264e4638bd1ae500de03071f73868bfdbb1ba260b2d7cedfb4dd9c3944a8e1a795c4633b69eab427fa9b2081dbd634bae0a9a992700ca24ad506cb5530ba384c392be8c50915b030a8f6dc5d35b046c1181d3a2c6e9347ab454af1828d6c7ea89793190d358d61b7c1101e3d26bffd9d5930c8e76d360d0ade99c6d98f69d1c269b75a740328a406872f7d2c2d66b650fd669d1f7a34796671f26325120b48a91db1352f631ef6780c156fe88f09c7dd2197cbaa2ebd930652380205375d7c81564bab106e6a5d88ac41b74f04068b8660cb511c4150b44ae84dc64af616a109b18f1973cc6e43aed190ea595218735d88c79b013015052910293e2af7fa0850bea8f188dbb00d3f87bee205c5330951123044077b40254540c074a64617183cf62ee57b1c3dd554296b30e6471ad86ebddd46447653009bc41e207c97c270a6b753c536263479cc10895d1aa55a18a09aab236ef68073206e6accdcd40711091d7f2352713218ef3764a897e37527cc29d2a4533fd5bb09fa22572d956d4dc507091bf1d8d08bf93bfd1affecc03f7e66188f0b772c3640efa6457438caebb63b4a29c8fa650e7b8fe87bbe0dee0429965ba5bee737b8e4caa449e8e94abfd14aaeac4b424f85f9a92e57224ed7f0ff73c903441242ef59a02b73748bbbbb89cda37f6b80d63bc0d25ff0df255762214af0057d0467eec45e8f278a1a5f560f1012055911b7ee0b9ef6874186e90af9b5e9a5e9ad9e2b6e61b88d9e9b6d250b27a169069ad5aff2ec9dd9ca3000dd837989f093377317b1f2a3aa48de75d49bda2c127efccf8cf9cef497cbf6fa0f8230408ed0b79fccbfb70227c5c0d911ba21ee548200fd900887eb56d07a6346842ffc37e5dfe2612c34dd57e6f49347145e56e327bd0a156c80c52e634fd030e698d1f511514ea566d811d15109ebbe1cfd81bcdb215cbe23897e7b44a7983cc6eba0bda9966cad7351d8d6c1e78f630fc4630ff4361837cc72c293d3d5ca28eae4b3c986e62c20f4d8b8129ea2cd2961d57ce6e1f0b9e3e6d089f8853ae09f0057d214576ae98f1b100e5f89e643927b8ae98490acd6760e442644266c1a9e275c616803ebfc39a087c34423b2d3b91b51b10eae3171eaefb4e36588721abb023076bd251178b1846897c56595262fc939dddfce01922401bb05d1ada7ce46702635e71ccbdee4a15392c1d2ab4cd150efad9d360131bd5e9a6ac3109dfbe69c0942f1145a41a015a90c63621d67b3876929b3c03b7ba3e91550c59cba053b352d930282b4f13a549e75e980c51b9d5c5ccb077d50db6fc67387623cfd62ee183ebc1ae8badc81bd993d717bb3acb534992d1f962ad606266b5290ad485b071e91a400bcdd57933dc9f38b89107ddd65c66287deae5c1ed54759581f51e406cd5bff8bc860f1e7e4700b9338a085eedbc3420c857e106cc312ef00d03d69a1837f57b83ba39cf32af2c529b74a83e77a7a1c8c05443a8153b4e044eae9350951b3d041f05c157a06e08b6ae85c59c4418eef3a593d1815191f7f39bba872e5c6cd03ca30b401ca70ba0681f4e207f300658dc3baf39b69058134488d4424ec6c2a4e540443fe59d7b1a00e48558b2a04e4f170f6fd8b7faea50e938f5922254d6d198cb0343893242947fbd5f194d8cd5fbf3d83e4a93baa6ae3ed2085b3f11c64cec6d43a8ae92ea2ee7c51935bc9cc2d692534573856df5c2a19f4162b4a6f4886c092775bb9ff91d7b8c07aec9194b0d187e69a7bc061058f9d33344dda28e829cefb225c52cb4f22478684a547c8112321c912e42e4642a623bd1c17ca24c4209a244c54e43b73d19720e2498369c5a76f2e7d0922326998acf8f4e6a22f40449386c38a40370128d1a450b042c03a4119720d482540ecfe80e0a9bae67092716d4694a99249fc8431629c66568047c60245e543b61085a22c78b6c48d1558a8f659cbf7e12c18a2ae635f6bd56ba6b060f80df3db5642316e48de633da40a909e16b7d28fa4a2ae1caab5bb3231cdc1c664a8d54f1dfce30934488f158cc0a3b01a03a52037ba047f14b93eccad5cab20c3b2eea793c30261d1d11235c7df7dffc593aa64d2b2294319a0fc8178439da76af37d6492325debd74f21be71952c3f8e773e7b775689d6807381f0c67587445a676fd5fce26287da8609195958b64f89959e100abb4ec2cd1d29f5c1e1c1cb66822b304db6ca544b83d48cc7653042008dde86931f972db1f630d20119dd3b8bd375e98ef5ff06c7453a8f00c7a9fc8d5ed6437d6754ec4b4e02457d7c9d9127765f500f49c649b7ba85c7c15c2eb70044b30ba04be07bb34347a28c78c01f7f124cda80800096fe196f88ac9ba0b85896211abe78f9fe13d6ac00b31298410ce3a02ad1addb26de74ca5cdf8e3b06f45103bffdd6e45ca1e985d2bbf201c76ed49ca60515f27ee00c59a7bc7c395c9677e55c4b16a3ef5a97629990cd142eb534c57209bac7701a61276c81f520e2c3b49aca34953761995bb064572337192c92e4bbec6b97cba91d2465ab28108f0938922442ea13ade44ea33968a1c4c3f9b26739774aa5137e3c9c1a111ddab1218f25800158b9af7896b3b15650af290a7c9cae54641d959325082a7638f8dbc5f234d43bd261ae72427c03610b292b443adbf342130716814489c3c20ee690f1655a801f13ec1d272820baf0022e03cde8bea5b218b04b8d7f8a4396c229cafd0624ff75fce748081875f494707fa4c738fc79256c1fff5db24c81aabac2edff78a3f4409c7d0302b59a3370c67540384c1cade802fd4d0289677c88f950762d9993021020d416707baba6b296efb7cbd28260f99ea4161fc965ead78a93abd85849a7970b8b82d76600e27b43b6246f856f9a550130ebf841c4c976ec2491423c7411dfbb243dd9b7e923c6243a5893b560e473a1f431ec3f3f830f4c189a1a66073201360a219cb02349890768c07cf65ee2dd4096bcd5f95f8410bba029318d49400d682e0a095785732bde3aa3be98b6f437574eea4af824b0a4ac299ea2eeaead758a3e2bcc1cee5afa807201e245090cf30b2b5a53e3e32ff0eb0f1583e9dd663b334b9f49dbd78aa5df6e862f3771aab0fe5f41b080fbcf0adfb4c04812bb0898a5ef486117f986a51f31a2819e297f9d6450996586e356ac62418f7f79462f9e25f37b606284e2eaca3f217e0dc3dad5d68b805d6c0780b5e6d5d94537654c1ccb7112b882b0d639a097bd9d6d6e088e99c5979906edd917712570a2ccb966394bf79fd82bdcd82a313dd515f506d3b60ba9ea4457780356feb101fb615714477539beb67573c44c1e504d6ed90c43d881d4b635351cc0b1c662b1c333fb6629335efbcd1be0a577bc396d093715061165714937696cfd4c1f57c091eb0e07ce6f0e8c83808d1c1a878fc01df97bbd0af15966473e569c5fdafac36fad06c3049101a801f1dff5acf02a8b3f12be27e088d949f87d3ac2cd1e944909b132a7eb4e93aa060eac532671c1d3d3540b9508800c408e95c00b74b14784825ff0c245556943307de83962df6c9d4313c5d93b10bb2ac0a15cfc73c1f8c148e8bb5fa3f4eeb0d57a4f41557e850d5883f9f60de94b25addeee4aaa8f7e04ba50c79cc0819b0adf983a96dd0ff92ffc0eb9cb158d0cf4911fbc0fb0eebe9cb175c48ba1675d200780490787605d5e9335bb975e30ea8ae3729469492709b5a5ccbc2fce7ba28c4ed512911aaa14e9d5ff5d39ad5d715f95dc0ccc55bbaead76b962392d131769ce58e7736c33684a9666042315913de3480d1b438654a293e5054e02a654932ea810b3ff7870b8f8a74f083edd1ba00a93319e9a2979b4472eb975a92af1146e0b296e4fa509b54653f5d6a49b73110a2dabf35911d8664081d7b905c2bda5979407d1e0909f15136ff206412be511c202d1c1720d20f6f1ef3d9bdff1c8967160ddc17513758f76efa97e85623aca0e0961381f0b663e17f3b1564e497ce4425d815d89f0791e9445ba690fe45f2beed2925be1ee52449f5f7480b2ac159fece00860abcc929f3c14f047f06259211e0a06fa0d0cd4778fa3388d5789317d3b7889446b0801cda0be09e4ff0055abafff9168a3653958d5fb60e9cb6f0a9461f3e6cb8b4f0017998e95d9f33d2da9a09029a86faf8d8a2c951e990565e0118ee73e220bd34b2412a40056f92117527432340988449a07c329497addf0a8fae81da0d9ef6a90787e43dc102144ba0dde894f3b0c780f732ad9e56fb4f7bf3b8cf0843899bbbe9679119e466bb22389bf7bbe47a06705744ad104e53cc38136c0b3cc6ed89d42815d83b004888725969a7577df4bc4bf77c61b54347c6423cd8010568453553293470117e37b4593c017f2a27bfbe44286b9fa08e0d8530e33835f8835fb7519a288ef1091a455701b99a7ec142f04622c25bf0f7bc210c318267f3e631b4396c151353cef0ab472997ad52ad9b001fb8a8095692d4c2dbd3585b874e8ed307a28566e51c172a27fc6c5b8fa93820244d591e0138764c89a3ba7716644c5a1abfa6a14b49b4c596d1c328955465796658c282cabd66f4375ce14efe3ac0194a7565ff2f7e071f4a9f2fa41bdaf16727908d0635c4f15e54a97290421d138c90d441f15a109fdadee19bbd347c6caf7dd894afff417d32487e41666f6cb55e4b3492222a644f112bfdb73260a2e44bb28e8e6a3259874c63f4d5e3a5da8788d6f54874e3414c97d3c66eea58f26ec7efd4a649200b12204335353d988baa9bfd1213f881e8c171449c8f7122311a80552fef450d9d81491d5d0e525f205374dabbdb6e4853f41046e3d003eeaaca20841e006cece7fa4fecb760baf873554b15fb53beea0eb279ba034645e84ffd8329a1e871555d724dda70f125544a7d7fb22d5849ac22dacc92238c61f844d8a8e3bcbde70b1598ef60c51ce00ecca54fd7c2d4a8e1292fdb9383a2901f4a21cf2635edd2ac0a6ca9577e09773ca9409062b5841f60ccedb6d55faa5ecfd06e2cf5b782d7249f300bb2fde90cb29cec591132a15209ec2d19c76f294c2d02a6d3073cb28fa1e4453c238818e6018463bdab45146099b4433e3811e61e02861d198e9d98c1dd9e1bb0afbfa50eecb063202a4106e34107afe513a5cf21aaf3f461e9ed7eff0648800d989c65ee4e728df284db4cd73f8aebd7e07a0667a246fc95ae62534ea00135ab7d34465a525220e9f9ce6972cc52b042dc1c7900b431c5b3c2cdcb054bfdacd5032361741832eec5ec6f24dadac59d2bae770d4af4898ec10caa4d55fd95c8f5514707f3b15da3b53215289c2ffd1bf7cb0a58b137713563d30894aad576e9668292176e5b687240f5e2cade900af33975f18cb0e9b6d6a69fcc12e9f7b88bde3d20ef063b1924def8bc6eb5f629588cc7f19eb541cc21d0c79efa1fc9fa1b071301d5e07f58d7962b2eb8f1d712d2804babe9517636c8ca90cae6f304c51a8efa73c181f49f77e03e8738bbf0f18b2712aa14dc8b29912acdb88a79c42faaf8b13f709e5a89e774f69e25231a5cfe05a0918244176ae6cf706b4d54bdd65a5538b08ad186853fb4ab4237fe349d9859a326f9fa29ad150485d2bb16e3d0419b9b6081a3da6b8682f8cb9f4a7a651f8a04193ba9d349e41a003b85be8f0b066ea02c46a47f2918f38cd0fd4c23d8d6d4dcd22f7ab17686a01b3862135744fcfc7c96eb8aa64eb8a568ba6c24e76add7bd7a11495490fa72e1ba8031c2d7de7e15d5fbe524eb28f1136f8604ab81e99a939b033077b2e90a0a216ba2950eccd68e3f568663c8e1890b37b197c7f4a3b4b28753b248fb276139cd9ca4284711eca435bb2f3278b5e50070fe8a0f5e6899d6e571b54edc62ac7c4df3a237c899d4fc22a5146d471eb923445e38c88241d1022323ca29c304da1d5e286ee7da6700a0c3a56c6bdaa132e4eb10ef9df8b055a624d2bbb478022b94bfc23e14cb4a4ebc9fd89a4cba16ad19bef1bce85009fe6952533694b40b48d87fc090f2820e774883445b5e977fd2269aa85105e5c12057319f13c7fab74c146685f37d0d29f103b3a52b875e11c8f0f6f515074c1aed5b5fb9536056a145461fb29c8b7edc7778a02162d1d77175554feab55b891d19ae6d40506c9954d5cbd5b1ab021a4f1a05c26ff5292d7939ca3d85ae3004b9e4e34e637bdc270e44f6f018228bb395a22ade845e853dabec4b03cc7a5144e758618ca9d940ea2c8d08e6544bd2e901b34707020bda7d4f336d2d1a0dac46bd1b0b56ff820ebb0c4421650f8a05b0b8583bbcb476a6cc396ae43e2540a34e392965c2ab9e9e53b7c5e6df162b0efab69181a578faf6692a44bfda65936a7e0e582833ff5131033817c68a93783ec5e42bdc9fe40978513d6a62676e841096da1d7aa417a32695d5138160d83c398aa1e22f21f3425f6822107b239877abb2dbe38c96ab355f7149f7ba61d0666642f9f89bfa265b075c0ec9c0cc60c36eae8c92c80b5ef6bf9333751a54e93ee470e3087d0aa3ec34480cd89162de2000250da07279515878ab5cb812b1042fba2b8b16e5162ac077c3e0617943e3cc41d17fdeb9112482973b9724059487729033ae7e75b6fb060b8b2a581f0531dd74bf6962640d08f3a088ac8114875b414b887db421f7f3c643f86350e8b6ea2bbf18db1f04f7b8d3e7c58acdca840ee52d875f3e8514ab706a5e381ae550d0879bc913d85b1e5ccfd218499640a0b7b351942e09aa16131c1dcc65381738186a07796d1a544b00ea9a4ea9bb4f405f03f23e59edbba51cb790c96d44898c86fc1019d3d61a2d9da4244d06428adecfc98850f9f73fe455eda821f84d021612f86bf82a456496bd9f24794a15af8edc0941086ed18ff0f3b9d7f988933fa8a2c1a66bf62a7a93404b66a43903e2e234a39c1901d0a4d3b61e592a9be2d89c4e16d893ba3b810a3ef2dbabc7ca63db0f878a1e5f9ff0ed9aff5316c701d0fa98ddeb774d83bce147bd66cf1b6499361264e0c9c1b4daf30c9ca0ad2ad00a471f93d7ada69f2c4a156471841f361ee11f9b1b188d36f7b6eb158711ee96ad4f89d93dd5e185b8a8a13f87f201a2c5d993044940dbaa21e2abdb51f2222d10e55b1834854b38eae0cc6c26a27aab3cd8b9d794acc9ffd29f22421981d42048de85aacc70a07c708159cc57301307a52c7c7fc2c30a4d2a6fa7f2676d89a21a730fb5b5fbcfd268a4d6f0ceb3b0e221005f8c506a319b2e86b17371bd5d1cec7381e12a54ca1db51d4950a126bd3b165826e6434884226d215995938910ef2df608ba87dc6550b86f3ddfb78d1367ed790c1f0bc04408aa83b6b06180e38d3a581ee760dd31700aa6a16075a45502ad5e862cad6705664a6fc74205d3a43c758d78afa88a7d901e6b496b3b755c6b202dcfb145b698ded620151bda3c139bd0660fd08337831b95ca991d89716c538d9c7349cadb9c723066b25c40be0840bbdc6e36cbcf9622a643d4636f60a1c218cef4501838b6e4b913098bc2d13af4ff74fe29df0a45297b2995eafb88fafb79d01de299000c6552ea20785607932cd5e1cd4dbc1fe23ce59cd8f49932fd811e8a5d95e8358d7ebd0e96001e81c04ba5c314d8241298594fa92cc4ed696b4936a7bdd03857508a665ece4ca49416627a0267be2ca4a223de0a8df3490bf1dfe0805dc9864b2a4a2e176936b60ba984c24fdac9ac85205b3b3085d12a6d15580eaff4b8f3119ddfa0298a65ced5d70be9d245ae71a238fc36c8c5d9a7a6d0ca7649088a586d9b4649f25f3980536c9344d7a327cd473f4845400f7fffa07f29ff78b7a3c567074b142a68f37cc41aad5fb6baebdad4a2a5c1646aa6764fc0b63d740cc12a45cfae9555df1421e06f9b3de436e3fbd8df3e57be6de5c335236cbadbbea2426008bc1e62cf8621432a67d8c26f6d976dfdc4e91a95a90f41e4c2ed9d0699a17de4ae3b99905d0bd74d5162ae1f85b065bb63d1fd160014f2fd64a54705d9f373c542e19fcbc6a24eba65656a3b8ef05fa480da88cdae51c566b690e8b1cfca36000da14281a61173c1be63352668d99297b075666b1cb44f7936401fc2a705e2510a14fcb36473202aec76d38c02c0e2c05e25f74e020501b97063416554ddb1c3cb002a2504bcd13f8a8b9e59a65d8be1ffd93176a1e98285fade5f91ad2a5beb67034d38d1244019bcfceda5387be8913ad9c7a18e15b0a01354292b443a2313ffd4056e0f2f1f0ab0d5f978a79037517ba5068a69ec9cd0ebffa066f884d0ceebd71fea60d0d235983376e982a86a481998db142eb2b9115103f5cb34f2674b08608526ef1b3d3f515f0604bcf1177c3ca5dc637798daf44270142de351f1f7efc9c643736439b4c264449f0880e28d7474b92a848e686eb62cc8c88a22b918ed790e18d96d1926d035335818369bdd9b8481bb00d854ba04b9683dba0a002f63b1f47c624f965b0a43983bfea144c925589cd30a5aafc466b1b446d750f08e88371b64b376127769b3e0e8f6ebf1c9399a0156cea0a20f2de87630ad1e755d0635ff6cdd0d9fa3a92283027dc2474a75ad535162663bc99b1f51d04fee37784702d697bd5851eda52a33b8289601a31370d92f9a5a1df54d3efbc28e57da3e7d6230bc5e303388b02a6594eea9e2ca11fc2d9c5f868eb2d01d3feb15926ba6bda71ef156cdc2607a7f77312320206fc182fd292588760b0e72e089f806ceb63d9f81062c6f32092b5aab1463f99eabe72a384cda98fb6b476c2f5fdb8c6fda7872b3cb61fc460964d5b86bf05c4b1cf147df91232f0fdba8cf51b5488c90320ab3eb1219602226e8e2d5d380acde801cb80ec481180eb29b3e45876bef42ecf507b66a36bb62a254a21209cfa2796a1247fcaa99a433f52545544d2740c91f5aa406a91987d60d58db75a13193cadf490cf0d5776342ca7f9bcbfafa87261b3c42f363e6da4568f9cb8075a682d901b733e33a8b7a9392b7bd684e5500e14d5a9fe6199eb6ed21974eeda327a0103c22278996ae9118ae3d17e1a22510766c3f029e37f4ba3c927e3fbaf4e1132c5009d3b7e7cb6777be5f228768989285a8325bd6d78b9527633c65a763458b062e4b8960f2034d405549cf4d8a65d0d6c2cc3d8cf9d211e3c6eda3de36c7aab527cf420f598f12a282c7375fb36dbe6e9470b4eb3ea6f8ce5093071c9d7363474a02b39f44938e3ba704a19f2d1d7badd2f1bfd58105e2a2a381a8c8af8e8b8e622a72349d038d788d0885918baba4f60ef69cfeb37282140b767ad5ca4f7f822c74f6e45142157368fe919a5a8c6fc77a4b2862d441d17764940545a31f2a27bad5a80b564ac0597146ca0cfac864cb303ec10614acb96a2c8f30baa611430cc831a7ba4670987880009f599d6871df2b020e173156bd1c1feb824b3b50201cb91d785c010037e123dd7df15fe72771f7709dea6b0a53369013d6623c0ec324d503a1c6334280b6046f55f1a4853b39eff69671e16f530ebda363cf6aa96de4635a0a762166e70f603c8147cd68dbaf2b1af69bbee47d70d53ef211fe24efe4e530a61610ba1035934893807c0324aff5002c96e94ea346d4d21fad496c9a8d10d44a0cc4ab701472ab37d9b19887db41d291c2b02541a441eff734e900cef1bb48ea70fb489d228a8039f7f04bb862d1492775007646eff57de1efaa0f06c53c4736b9138d4a716ccb7ae5dacb5813dca90b70ab06b43e45592e2192f03eff14a769d0efc6ebdee1fdd22b48a518999d25a88785db01f8a595c59f3af422a02d67c80beef90e7df1283dfce6a41735459d2451a4f17ed07ec4495087d9577da5ed7f629f3afd51d8071a1ab380092787170b380442b8a4c96ea779187ebbac7775f316d44a7a37dae150a7a0829ee6399405012ed9750b0f19a41c05f288fa909711d902f55f0f4df1977d25eff64df79069a3c8cf5a5190a18b178c2bffd13965c3867de98a70d867de63d5cb4db307a37422b58272014eb2c5b509fd77fc5e0aded19b58454ccb1fc7e9238661d6da94b9f1f5d45e06ca98a0e17888f64249fe44b4b969d1e93a454ffa164b69ec7bf4d1c9d33117de46092e1f1d81abb193b3b5caf6d5910d59b3a279d3eec0f6cfc332650de3f4b4b8ad2d87b266669c858c8f83ffa7f9929a01d717a92f547e94029ebe8f79cfd80a05636ca8a2bf005c8b09eb5ad87e6f44cf2416ecb6880b5d899640bc671d3f102fce6b6626f1e5107522ef6975ab068892c3e5b70e3e56cc8e63cc69d9100efc08bcc93afd97f01bb457927721ca07fd3150bbc5236306b6d21953b2610f03c68c1875b898d22bb293819d41594220d380bd614d0c1364f9244150dbd9618ae38dd8a87ee31bd216fd3cc29d567c3cfd37ad199a08332b7321903e131fec891058946aec34254f725d07582674320ce194e95926aefc46234ea8d35619630339d9902acb201d037fe3c5d012a5719d581c3464632274c390f3f1148f98e8f36745290b27431d951340bd8a04e81a79d93feabad6615c8b1505d272429729600da224a74bc863d4526031cc65001910027dc33c8afbcdef19d8e1218de8551f415d5cddbb93604514301f4b2b9b198355c1b6242b57b52758653f8d6d84adf0938accb4065ac86dab60446d88eaa8b1a2da9ea5bae0859b58b1678604750264318363735ba9bf65c68771b9d684345402d07c2c9959b42e345fe4d07c2fb64540f79913a4cf2e42429d6f74ae00f48ed725e45da7c43603afb389ae7b1be3ce44ca6674953dc138b557d0537b5aa9d771c2b287ae6e6193c1c18f3a6a590571593e36e44ab53dd56db4ecb32112a29564bf4e80023cd1fb935cd61126175fda1018f7eddf5598c8d31139312a3d9599e2c2e27dcbad514d8f05172a181feb27466862a86b9174409da4576fe20313b1ebfe532c5078215c2e49c0a8084a402199a30b073f42c1440e7d593b4d01b0ce431348716cd598d1a56168020e7f62aa7265a431b102c8c6628add0bef39a705a1d6b9b05f169afd5203291bd30e9c11b004b86a6ac4bbd51d895e17d910163a72dc52f3a9408090c9aad37b8d208c5764f1864c55dee7bb5759d5d0e13a4e0eebdd0fc8b7eacc6cf8afc8886b2dc086dca27d90ebd9d30e84c6dc57e9999a7ed75d3fdb069b56109a3eab4cc8cbae4998550352b69081721a2cdbb7394c608aa4a6cd5d6bb4b9a9bed8894ff5cda97a51f1e15f70577423b76cf9a31bc51ac7bf8fca5673feec055d993a9cd207cf7ae816ec72aa549819c7f3972267dc406d2f29f207e36b9f46f67c5f945a733423c4bc14b78fcffbe2e4c2f0479b1883853f15a93349fc2ac92eb435271a390722ae379a86f101769b75cb271618204c670aa31b5b8784e8e9424e2e8c63f3031dc50a8094e37de0d161a317503288ba500fbf0d5754699f4a005fe5fcc94d6c00e86f9102d91aede281c1a14746316a91ab40fa8d312160dafd92516d2e30835f8816e196ece7fa93ba87e9592af34dc9acb7f5dbee78eb1e7cb882fc50d9f4097e422bd808f6ad6427531c432303d034e320ea3530e55a6aab93582da5ce82efd4d41b0eca8d3ed6aec704ec3fe0b4feb161bd9a9b6dc9c71c85ba1fc4fe8df6d4a46c20c2e09c0a0729e79883370d3ba64ada4dadc609bd4a475aa06448fba429cd67af94762f5bcdf8de30f7de162f97b5b2947ec25f70c5806fe41dc3f60ab8448293135cf9e92290d563010152b49a192d7e863760ea4ceeb8c7e4d18d16d7889993f3fcd861ab9732c39fa5d4d40387c593fe607a80ff292208ffaea8f52ca58fb85305b896f01a33d0627c68b732f259e8a2e86a6dd06088bb005e4bab0d763d23f88da0618ce99b65b0311cb208d6030dff8c290e17bb7ea71efbdb0b4172cfeb7ae3953b3ae74ea3bdf57ed5fcf293e92ad1f0cf697429f17f85becc397fb3de735a087424f47f38b298f9133c6af67f77f4b09507bf676f0fa0b54ea8a95c70d8982674a8302db52f24b55b61baa3d2144760d4b827b8d35b059601629916b156ec690b1aa10b81ab60e405ff31bd3e2aa88a5463412a26a887995ce9f4acf8dff59259cede65fcc3dd84400748094dcf9d0de82e6c11ad11f188fef2dbc4fc1dceee4c77b9caa0e086defe265ca07bef21fb47304f982db6277c6ded4e47cec2acb55fac7a8226ce9e898219083971ff0dc42ad84e9c6cfb88f9e361efbfea1a6862f59486fe26168d7058ad37674237a89a9e537196c8206ffa0dd96d290aca8b4f2461b13d43c57fc8c9ffbb8a9ed254722806eb31b5a8cbaa1074439f719e9fc631943b53b1fb28a3f9e85f1cd5b37a2ab528c461c8826e66391540367cde9aa0793140d65605146a7b6a7224f5afa668a4b768202451011aeb25f7f0c740dbd0daa5c40d0e15016bf558ea677d44522116c0bc6ddb93d9c79a4fb81118bd2040fcf340048720653c5f8ca0671724a3861f381bf28fd83903522339dac55fd166c6229c781af1fd902134e5931823bc059ce483eb7acb59d1a365c825e4ac6287293cf4f9ad395f3885cdc05bfaee4be813397c4169bb97bf1834a9dff4950d0853eaf17a56e0f3a9f37bdd9ebd55585be50e2b87bf22ee42bd8137768f5ee825774833073379a667400b273e78707418d1c1fa3205c1ae4aedf1f63a4fddc70b31d280ef621feb45b33a14eff2a835967e89165f48c6ccd5c19ab1c1f9b8af256af002de797b645680d8cbc968a082e4d15d21e72d3b297b099ee03315da36f4978be9ba96d2a47028063bb4453b0b64f6385b9e4f0c31a42d7a2ddb8e82686266afa6d719f404d89d143d02850d906059b3a67ff7022efc8ebca8e2c8d01e549c81ded858ab4ca6837a0e17ff911cef8bbc3ab7836fe59928ac3a4c281f1512429e1f8da456b15c1acbf91f5947945bc806dc07aab08bec0312078a262de0cfcd6c1112141c5c207dff26bd34efb17db5a34aa33d314263d16fc5dfeb8841d8c5c2cb4b86687d70258c0cb98323c30ab280d33064880ee3ce9084a0ec72f85c4f7162c68ba293e30e1c423fce07c8f4923988a8f5a9039b1a02689f6a9e8eeaa185c7d889cb442c283ff83ac6350213e8a4bf1cf3664a64a344d2d512bc9a01fc2b6847c09aeb60203977ee998b619e106b446886e4c52132d9c1f123963c11a042191fcd65f78dd843099b8d14880a4ef4358823008f0779429dd5ec4ec25d7a909fbf7b27190dc6e0e55fc7f33700b60b9381b4d9ac4c9852c95c78d87fcc8c2d8e9b08e4a7c27e24020a7e6f161a42e4123109bc3fda0a36a5022be9356803f557b231348c4075ba8850bcd17f2bc863c70120168f1c63d089a98edf1510ef4935715f3952344fb332cb5ea7695d77697258527fa56f51e3099d0e7492038d728a8f5b17309d1e8026ec3b4340859004b00b7001c8575cb487d9a263de684e642c65a68d34f96b934a9e5d82916bea0c78379ebc151761cff958d2755e7e650878b4a93b4142cbefcebc7ee5b8b0393ec48af7233bf9374abaae1b6b53a7d6fcbe41c6381e4e0f31ca803db6d7ed7e11f7b9c58c6db00f3450f6297f268f5e258efbc158c93d1776e60f00c15415318fb64ca7d45881383a6abc71323bc23723c9e21fbadde4eaacb6f190aeaa06290c821ab4eb881c5f37bdc66fafd049967c123fdd9c3671d01c99cfb8cbe1656560a63bb802ddc8a219766a489d7f91dd1f65d2c7b95e800cfdaa4d7b887589abe9e13ba9e2b8cdfad49d2f0f286940763821d2521c047746b3cf0f9992f5e0f98fd06a2e1361062b2eda675ebc1fe28243fdc1356191f8dffecc37b70bc548ae15d8fbe58c2195b08715e5995319e0e0c89d213dfcbce4f9bd66625a36c4c25c959e4ea027b3e70b65b6352626da5f268e5b082ff89187a6d28718ddc5f44cb3a65a6d88fd08b3dcbed365326cf2ceea06c4caca070cd7e90519cf951501bcb288b760753e97b392373dc58ed14ae5ac65927c50fe8dbaba15f2d37f7954e50c251df176617a28b293672174cccd8606a614f855358212e4d4521ed0e060b638dffbb8ee14617ba6a5e0bf8ae5106bbf00ad201cdb238499d772287407b56946abd258851bb1b0195278d7819f8ac4a28382d0b70b3ffead3c3f5480ce235610f46e4453c11748400110966e256a05ca27560d4565509f4c0aed28d9485f1e728ac5be7c95aa6001576255d5e7ea9d537e085728df55dfbd37624d162a0d080f788c87ac27b844c36c110d74b4fb86e405599265e8ac2d9a5812ecc92231934ede94d725cfb499952c5711f96d909e785c04d57a98d1ddce48a2e224aec597c32e37f2530ecbeed0babe8f6b9875f812e7642d6e828152164835ea2800cff6edf4abc1e9e08a89ef68f21a1a3ab3d69325c3665336297f6f7f4a1629bdba87d9eb43047441cf86b63e601342f5fe009ce5d5a36b5e8220bb85662bac39eb5daf828a2a61f5c7f3e5dc2819fbcb6b93731cf97a44fa9a65dae84d1f052c8b3e626bbd4f04f6d6cff496157fb774b375b3f97fa15377ad93534bf913c793a6b1c8904f4634803c13116dd060b9fd0b62f06ea85f4d1618862082be6a3e55519765294f1ce31d57522ffc2ecc107427af4c153737cc8acaec3f0b8009df4f6f294a94786a49fa3fdb2265f90e1a6bff617144addfdc0153ab442548bf755bbbaa901fca9218a16babe93da90ee8bb6cb0f95d6e0289ceb446fb2e0db943ce974385e06ef00379438999da199bd97511bbf1bf4302b5e5414dea649030dd5c16b81bfb68b341a5f0ccfd20844c78ccad4251c8a1691b3c4a9e11c42c6ecb0f57417053011f67938fb8c085c9d1445d1e95bbbeaee476494862406b641d141f5de681d2c32003f42628a79b09adc7509fecb395eef387a6efa6abe45be295a63ea6e8c2c5067a1ca9da602bdb37527b1b5b17878da1a707c2a6ad64b8ff3b5bcb3460e19b11dee59fe8dfdbd18b347926fec90f9dc6a5786cbb0e44275bfc660be468d465322830b44c79d0ecb9425c1a77606e0c28dec52a62ffe619b887881a0f3273d0a2f907599b4459f43d777b7c718898975992ce4a0f5068fe2e645b0823492b090551bad1ca761e350304432a149c473f9be0ecb4653c0c7f03ffae81f074f2b7c73ca77022de278b9f44c10c1443ce55f83f1d4cc2fe39dda13e7efe73ea55fa9e2f3a2afa23e812bace2a776c5ab77743e83fa9df45de44e6dc8f01b9d2a86c0ecb3724f1fbaf15eb79337f769ce9c8936c611f0f3a4436dad8ac0ce91c23a6a3db214d99d83c596db40ca9bba83574f25b806e203d584c079017727226f8a0cf684c0007dc3e6e0e7d723e50fc907601fd3ef898804b886569f2ef298e8f641b6493f5982dab6a055a7f1b04cecea086ae5e17a14a4ab81849708eec58fce0a96990950156463a61b1b02c0ae21d411fa2e8bd7ea63e0c3c818ab20efbfccbca1f3125588994a2a48d61fd59c627c91f62ca97d9103e61ed938202619bb1cebcb65a6a52944bec9804313d52cd152ea2614360b3dbd25aeaccfaab59bc9df92c6d1508ed071254b5cd230e20c5c13c241d0e62c5f68100707af6f8dfeae897c606fbc974b4641b25a289ffeb27ef2ceec1fe8d52b5c478e41158ff49e83ad6f8422ce26900b83204944572b383e0b4007f81fa4b69877f2cd1287076768d809346cfa06a62c659b3c1f553eab652880ddac73a4e0a5d2f95db8ec9dacf4427abf6686c61a4cf6dc4ffb81ce52e8e53331ee18f8fdeb4d3788247ae3716e2cf74e79efd1cfdfe57fe54a879bbb8d8fd840fe874ad3c15eef5eeccafd8c85af4c0631529dc38d9b10658a38ef86508c0b98a2d5bfca54ac768bbd35c6b37d7056be4923867d0634c45b3ab3ba2c851955b55d7af3c4c2c0372b985615020c01c028a4729089aac98e660e4cc3340ca39193612e670b00ac475dcc9afcc0d845cf1e75656c6baa29cf3e7ec4c89ef5ff751b3d062ca084bb3e5015bab8ad3fd858e6ea4a1428c5b93567f666b40602ff9c7538023ce790b89edc668025a6bc418cb8b926bb3e7ab5d1cfdb453ed149250981981c00298a3a6ce9767174000887622d8da40fbc53cef3a51c7fbfa2a808022f96969da3678a75218a83722109eb5542a0fc4f3523e7c96bf2fd73307a4b2f035cf1050f8405ffc3dc21011e05139dba40e394495b910f698b01b242262a7aa18118a26bed7baad9512335e9c6323047088059e1d76d5ca9edbee3d74db755f9f0fb0e153a026a57669d0a765e6b33d738a857d34ee6c55eda19fbfd4aa523c1e106563d44f95a81b89d5d5ac33e14b24828cb0513d38e170aa6f61d7ef822e94387844155de5d8c11fd72c3910782022e43c24fd8225861e542d0b59d2f519f626028dad247a775e94e5710c875ee928d352e3c3e025035b4a0d4932b31b51b1a54b4f500e0f867c6469a1ec3a36e3aa2b634bca4415050a8dcda7d101dfffe8cf14f9946821a6173a1b2601ae9230c402671755514110ab771b057f6e8c09add0765fec2985a9d2007d96369a5859cefb2e10b44afe6546ea45f84da04593b18c2b06b3e466d3247a972a08ce0c13b31910f4c7120efd484054fa8bda16d1f066ee59ee3aadb1eae2b1a1624d73a8c634e9b5d878094bd17b9c79453f8ed57c4f01fecb850f3b3c750c713b985ca53d2c6318e98dd575c227ce4b1e6c30ed8cd11de3944d306444e9c678a39861652d22fd58cb84da65211eedbe0a09a848699c430f9fa343ada13956cb81c9bec3987be1c1ea774287316bb45be01b88f459681ff99078b39e45f8df655d3ca329d617b7961140815d28076429d0d9140b6a818924a038e701878043573cc2138f8dbc3fb82be50bc44f72512a1763e11f444db4d7e0ddf04a37d56feb639e4795b7e71dee5b78f8a3a5143a3b472e3216937a83e3294e56de869e29838e7b50cd18037570b4df234e4da2f5193fcbd2f8b88928a2659f89c837018d71d8f2a6a9fd42603e63450e945d69f4affa4e52e78070f7cf9bc5f67d6a818ce9e688759cb42c866006335b6f2ab2e9d6ab37f09c886b85b3f13dc829e845251275c6709e4cd11494e2ba4567a173d4c1b42e66deab32247fda2134381377ecc323f811ab13d73d4034fceaaaec56eeb10e217c3adcb72f2e263ad0f9209fd2640bc499a187575ac58752b9f07510645a86cc642c9d4fa1a3711b25e48f815d9c14c7481b62810fb8785488da3f014670cafdf96ca24703b47995506c009b475b6a1936c58509b5b2369c69a676206f6c56c419e73d7dfd807fb99b1ed2434027fd090c06a8eaf44feb0aa1f1087d0daf3b7c16b32111470aeb6690bab50d0d25ba47b4344638a7e75f4a378b162905bb6775a1fdb0019fa22f35eee89091216b3a12a2bcb76918bf1842597366bcf5faace738c34489b4cd0e5c9cd0bfa80afc2655f1f83add1564ca126cba9904fc4c8a3307e3b7611d779d0c9d707778c8e00e12541ed4c7420154661584889dc52bf5e3de4fc31fd101e5d6a954689a40c05e066224c49d5a647edfe93b960dc5e562bef973df0a14b5f16fe00143b569e3e75bb437aa52b6e0a61805bac945a943114f200aa647dd02011b3107a4d5d9b0aed526685b86ba6e6376a191d8c709bc604f4a1860304b7c269ac7a4303948334558d39be80a627c7786d64e3f74fac5fb7c6f1cdd5a90315ac02feb05c5b18ea590be71d00c4b8f994bef7d82b2647ef34e9bee820bb9f82632ea85dcee8c4ad567e13fe2f4191289dffcfe470abb6d71c7cd3973b5ce4efd82ab4feb718bfac56e17b738e662affa2a6a3078d785fc7483870c5d13ae3d72d38dd09950d0bc21ba3a8e3bdc5f869ed2ed7ed32db7f0e928238025aa6e295aef00da02336b43d74f94dcc07faf38169427c243fe6042dcfca832abcba250543cfde7e550e98a3ca8df85397f458dc152ae79e6e0a4bc7c2d5dcaa5195cabdc0c7dac390c4041d054e37db1eb034250c81790484518b3742ee08e6860a7a4a066e44cd1eefba56286774b09ec3aa1fdc2258a11e73f7aab1021a88249148f5dfe84b57cf5730abdebb667014a18fee32c90a2bfb4921aa0db7e7692815347083426bd096f6ff32209ea469b423e36734a0c4d069d237bdb91d94cb7669fb82059bb7baa446a84849d2a6be6530fd8a86934a29f13de2c1130c014606c9a188b3b43fc9c049d0031741ab30c7270ee00d825797c36958a2416b963a3234c9a537100dcf5930c7a9c4004bc91193f318d1065b1e308f49f3d1eccd5db0966b8e85b437333d20dd439fbb2997459393cecf8a620a144c8bb8ef110935222a2ea35ccf767074a849a867e6d39edd6f930f4cbd2b1134038537a349f65886c5c0cd3c1f1789fdb3250672a77331948f2c94c2208cc8e2af85fbb4b535dd995fa3af6794a6da7257c1c596d049ded1834229a9ae558efc2663f93b7ec8e3730e50075b03d268b2d8955d3dc9d66e01667f13d07c5dd09fd8db25da13462e5fb5454a6efc98ea9449003ab69bfed8c3f0ca594a74ea4961be7238362eb933bf4bf81194f7d3b47482c12d9b0c6d13d03e9ce82adf791f79271e51ebc50cb2d06c75150508be9ffc7852691a514e963b94d1d7b1ea78031526677d4305bf888079eb52100e3a2c41bc6a36f5dd8d73087676a2970c1b4efd73abbd2d4e4320a89a7c17b5610f01032fcd65117450352b7c7986f5c2749f015332c883d585a5e89343c2d15b471b455143772c2228e0640a7bb097a9ba4f926cb0ade8c2ef480e1d66e0da8ea8a071439c7024fe6f8e8b5db8459cd3e9c2074ec28db39d38307d574d3e85ec3647499f2f616cb16843e7135d3e8d576948ea789b90523ec15ba7a4ec8e0992ddc0278ee22b8954266a8476c78482cd7ae33d23a8aa1d5836c14cc86f9ab323813a895a335a19075b07cec00beeac8f230cdd2eaf32c086d1aa96a795484909e02a19ea56662acb62c12ec21a3fec695d812f3873fca849c70fde9e2eae172844b47570faa09ae2f71cc503f8241b2996a80e8d587bc1ad88d5c5b2fd07cf2654cfda41382cbbfb612f608b26b4d4b73ab06d72e1b6cc6c852a4670d06da460228376b812e08918c623f9f4e1d6c8de4a5736e3dfdfa94738040f1947ec066a8d7b806f6af6bf02d2c56a247c3e261c811a213f4caaa3696b86da0d770bea4a132c1cf0cf14adbbac2472893b66dc8446cd64f1ea4570e3cf0259ed2757919aa5c8ffc812e4a02d6c65ef98198423a0029a0f79664bf602689ffcc4311300b92c47b61af361f8266ed4fe6bb7ef42ec00f2c3eff12055ffbe4261264cf3a82f4cc7519faa8878081f5b6ff83c45e656be7f494b63ae06567a797cea048a802350b588d7400a1a4de7437719a0a7c4528ab59a8f5c4304bc51f847e84aecac85e725803e25c2fa3d2ff908460b4e74b275f11668e2b45a8a5cecec0cdf121fa7093e71e55a9fa52ca751492cfc6ae3b113560fe3f39105b3b713707214632000d3df9c68f21161b6c6f9ad2882c379085ff804183b5673e7220f8c3a7d71514058f523c40014db99727ceeae5332bbc2c0b3afb04946b346808433280bac78a25771eb818117b5b3da64a78dc982539c062499fac58c103500e479fd616de16d02d09de182c4466dc49432cb9048aa64af3edbc44548b41458af99b401439fa0a1cd2e0230254bf91768ec6c28c20b5b71a7cbbf5f32531b8079a297836f050df13495090f726b706b70708e4f47edffd304858943c03c3a9756b28054ce293eaee9629a6389a5921d38aae11fd5acf04273ce2afafafa151242ae9d86d180a401def8a79b76384797a662502dab67ec9d3573d7c96e0262ef584b2778f216a3d85e32a277d6b3316ef519f8c5c9ed4f6f8c11a361562d328e595f944502e82ca6fb21b77c0cda00dc4d6f0821cb3fac8537f99f86c9ff0c301d87c38238036d26d757740f61029a108b35acdf9b1c7905427b720811de01790c9d7e66fd3ef7ae89ea0f12fc1e8d1067c061037e3baf426e20d026a4a991c45c939ae58c891b54c6f54f995ccc28ae975ba8085b3fa50fca18a344cd79e47945ca380bc4d8ecd59ed1a8a181f9dd9d562456e02dc35985384b6bcfa7574473b16a2ca348d40978509d76e7ec78111ef943ec80552121cb4e45c9498b78fc3a17fa65a854603d116e34ab771bfcf6d062ba36dc50ce00ba5100b8ec129ef2600ecade27d21f518e663e71d111b705481e01dfe0ff1c0036e9849cbbc34382176ee25dddea6509ab4639d4bd9a380e4b771bdc1ebe585d5d17e5caf7acbdbb758c91d949a5c81be2901a8579244c188651028ec287601d7e7e51488c31ac6dd429f9aa85328ba08d2f8f4c298c9c150245f57d0b0ab42937087061e382f153196ef74269314974e4a01d82048d3bd5f742921c6b006f5f95a9f4eeecbda4c2c8712c123f3630c95c4162f166568486959144a0a5f7f7bc3b9bd22329984103634052ebece1777588eae4bd078b8b0e8f4d8ac34dabed0fc5730aa5a469e969ee4ec604321609c114b1c62f00024c9a9511bc1f856964e73cffd54262965469710d9e717aeed60b4418a3a2425d19f177fc423c47e2474c62457fc35c48a05a12fe07d64725cfe5ee1e0c3311c230ff7874a213872f03d8032be83c1c9e1aa1d8b91b0eea924c688aa24f8900d383353086e9ea77f9771bddadd2eaf48aa30824ef5df01833d9f18238d3b1af4068ea1644dac4718d7d2b8ed8618c80358095385a536549ab7037270442caccde4f026445eafb15ea080fef46549b6bcc720ae1af966ce08026c4c46c054bae8c29a442766b88af4561c04bb11d656c0eb218000810c421e406ee2813485708e464e18f4981f98759b75a63a6389001995346611a8ed21e5924d925c4caeb65eb56c0f0f4093dfd416b66a23c35fcedfde2208d7321f0761dbd02b8be453882195653a7ccd7d09301b7b95b4ee289992df5165b71f1f591b626b3a05bdda170d899d7b02c415385a75eeb6139c71ed244d9992611c431b0d8da893bab9fb8496fec930441a65bc2813084e8f360c606f1f10f8051b840866ec86310c59e127c6c2868d196886196966ffebf20e7f55b33a86818cbce6090f80c7d7db7a5c678d8dfe0fbb410c6bf57281ff546e2d808594956b9cbc8b99c8e043bf022000f51e065f294554e4abee7fbbf71607437c2b9a564f3e84dbbeeb5a352c85f91291574f5e9df228e6c781ce2751e52eb1178d21b1a9cacf8d5f2cad1b7acbb702d67aadeaaa419898e6213b8d9a43c23ff2c0a364e8d5e43d31044388e4823b5e91a0982885b972911abd7ceb87ac66cce5932af4d2fc0864107377d8406bd2bab70bd27df10785726b1ef855abdf2c09438d990f6dc10f459a86f86448969228a1187bfcf128f3de76aae56059987bb448124ff8a31803a3011e8c4d227c255b65c2d47f84483399fdc5237ee4f98d47dc37392b86506e155a6482e0c699ae60ea8c43aa927cbaed6ab1e046036cb4bbf4f6f27598180aadb8b66d1b1dcfec9ceb184136da8473f4400a31e7f7452d2b13c58a85a16a415605d6f237c610cf76add2c16b5b939d7e3efc982f26ecf1145e60f5f37d8b08849d784dcef07981fa2de7a4bf0bcd0bfd73d7ce13a5d499854ba852232aa34bda028261edb78ad1d4e38e5e5f7ed763ababd1d58174ad2e3d244df6b7473e27c0d55a6e6e5038b387e1908a194a545515794c44a91f3098d1e5d608b5e9f6e3cca32aeb3c980084ca992522cab26fa2c673bf57a66fb474488d90f6dc7a7409b885cfc8c59e7ed3e32eed2e43ff335c5dd64ac75d82bbac90d47dc7990e5ebf6e1eea74c9b3bc00385ee6355b035a8ac96342ce8cefe6bd69bae592388b3bdd2a740294f4cd336b4062b95c2089164c967f7f1a652272f4e8915110e70d8bd99d1156e1729ac297506807dda27bca98b1f4e59629ddbc195a75c5c314fc06f0dcd59a53f66fd1edb8f7ecf59ffd2d93d94041330eba924a3f82c6a78b3ca64344f94cd5d8ecf88cfc1d1bed5df13782e697faf1c1b756f5ea5bf32a7b5e85025215840e34b3668e44990fed1b55fd0d114c3437cea2a14af6236e14884212acf13c46d43abb7e118c7e2e4fcc206ca94af35f710bd29c503518b4a0906268919a7cc0941ec3843175be8dce609f290bb467c70cc8b079b1afebea018aa70019f358dd907318455f5ca7831cd534762a9c608d244a8462943c782ae16b92d91a5984f54ea9e700dbd3d16b54b092837e63d10ff07604216d4af38ceda85e63e25b0bb029cfe4e8c18a15cb59f0344d0f2d0859b981498f89f6dcf7b2430e96e29d3932a00d34b9290681f097633b44905521e95f75cbf29279248c65a45abe20cb986a8b2c232347f1d84744793dd60a621d55122f6559a2d52a84407eb9972821b3833426af04e901ec5da1673e67ecd555dc135d79df7ac515009c001c3099e94e1c4863fe3c44a0fc800b67f0d86ff2ee5fa2e49299ec02a67038f215781d41677ffd0662f69bd49c038d4b7674e61c3f7464983e9750e83116a808760d430a6d4c5d3abf9ae6097c1d0bae9890794b8f1597fe84b8a4c54052818465e8141cee8844885104c52857f20f5e41a2d190b6079cd5567a2a3e4b666e4461292ca966fae48b7fa4770d4e361fefc7b3e252c31947cf06daa40aea1056c7eb9b1dee9db90cbd580bf4a3514b84cfef34bad1aa4d6fc7990630efc02d7418dd119a5e3cc6c5e5d7758d2bedb9854734e89a13994eb40e65e9341da421e3e3bcc75a8b5b45b9aba45249359fa76820307d9ee9b66a8d7fbabd23186754e963e7e82cc8d41d942f33d00d04d08522793807cd6dbd29e618101c2a3be3c75411361e47cce3c889090b590067a6d7917f7a0172a07e9f238346b20c5e9cc57ab38eeedc359c1fcdbcc9dff6a694ee65ac173f325cce0d7a3fe5ebb661f5bc56844d000ea755d13d760d8a7045995ddb9c8fbf246a1a31dcd453450cfb323afabfe003056cfd221a820ecca57d0d34d688614c092eaa87dd23f4f05e9a3fc4ad132e4716663a2fd5c39654ad25f8e1802ded5be84c7b0682c806c8be07b583bc41f692d5b849a5e07a76a2b9052642a670c849c56b2345c2e6ab7565244c805032755a3a22d4649e1595b1a68284fed71905aa473396fab9bca698122871c23a919e73afc1a6c4bea5eeb26c57e028033eee0c29d28fb312968c662da34edb876553fd570859fd722ee355f44cd831713b706dc5365645e8ae8808b7c5f6a247251d166184f816e03646bfe8a799b000a1aac59aabd934d6169c79a23284f6bdb936518c1eb09487231dd6e93a971543b47ae09ed2032c1d236c9a5c7b7101e67966bd87ca543d705a29fa5ea2443cc1f48dbf83cb98c9c6a386baa26e4fd5dedebb7a28889527de77528ae30b5c68e9bfeaf0f991ecbb6c82caab3b05ee3a9a7b8aa65743cec4548e2704f5b344bdba7b90b78632cfd0f0696a0cb8695eff24acbe0b1848bb70237d32cfffb14bfdc518bfaa6614c1947febe846594bb5e678cf7ede8ae2f1c3621168e7f66429fa0e20e5744b56d1d52763b1d1ac1e348ea3b75199a840f70dbf4626bf418b6aacec456fdb72b1bc89c5bbb3071d5e2249e9fec40e4bc9d84c8239e6a989c94334a27430db4e511052230d3332e9e06c85d438d9083b83e49b39cd5b3981bfb25dc126c67fd70516eab3a1db1c222d521e61911dda57d9f4709bf509fccd38fc60c679939826aac10c1dfebe71e931ac0596ec162cb4badf310fe2f1f900deea578fcfc5673c991730c0f91791e7c2f2178b037e92fc65eb35ad92ca1d7787fd7c0d7924f01b81b85d347ee4ab63754b5022132eb31630b48730213477542259fa4051a9f9802c6d038fab53beeffebaca7a6dd2b835514eb6f2e138754edae190d9a41fb4c902abbc0f7afaf60b26d15919a74743ec5c92349e1b3e0376e86a62c1b46ca7b1a134366ea354edf242b3bf17138f026cd59f18eb23541dd67d0686819da43667bd6437aa75804873e81b035ca789184a25f88449ca053a4046ec7bc51f694f241e7ac5601cc1e0ec9272887193a6664f8226ca44407043c6761eaca3a3b6261b20190d6dbd5ec109d5f50d754041d406460eb9d13c2e2aae0ce9de730194df47a8fc8ff6899aecc07bade158f581c9f4f5a7428db619dd192025d5c0516ee279c18b4567fb97b95589770d14c20b72553e86c2bf31dada257852dd9cc13a80d03fa59ade01490ee2d211bcbc399714bd6711f40935618b17b6c586e3e500e8b84fa6d5e390b44c758a2b70155a0c75e29b2741db303ddb65f2214e217366af981bcd52378b3f5c2803753c5d21894e1219dd99b2212107d114a686d065fbe91a51a2d5152b2ba9046cd137cc226e7e3cb727565dd5a35ec55bec0669b14e37096cd404dc55937065604a2957f26eef2889c8183325461aa79ed211d10e27217f09520e985f05be5a75e5e043b99616bcd4290b50532c5c4982aaa781457ce21fdc4d5b0a8a6a2b3f317cce7fd840c5e037275ce93d9a7e6c6e99a239eb4eb93087ebb250b95a41891b57d68b7adb0a0f573511fc420fc50a82430275c583834055c5c181d6d6ac1bf1c215345026a4d88745f0f19ec5fb7103dc4e0a4984920343dba928060288198ce90742700c41d5a328bab00066589be0037243fe8b2c43bf74d6bf538f1ff2b25387113e9c5016155fcee6ed2424e4718a671a800209bb9886da3e12eea561875a7b9f382076473bf0bc4001eb090c81c11d40789117dac30f0a454908eb6f8396aafb99021daabd6308aa2ef911261025757115b0706b4f6d6bdf339f2762cc17b3e0d4783ca84462d83faae934e09393af910c1c63a086bfe367c160de4ce1722007e55b78ce07bc62d99b551cccb5d90c360af704385040bee96eb9602c6049e0e5f7270037825f0daa9fc01f6ac2b64b011a0cb88b97f0c80664832ea9e9ec155ab1df654748bc1a5e9c4c66672cb9ab6542323cf09ebf56f28ce259dc0187b90e31c35cf7ced2420e16f957be964d0375ffd922eb612537fa95c26ccb92a8b8ad5fe7de92d9ae05e7c21832df322f6e4c2bd13ce32e69b2720f791bb247c4c993857f88796e2e8a7b336df6b1b8c69aa1dfe389f8b398e64151ae67517f642dfea2e6ee8048ed5137886f40a2cb70750e556e4537917bbbf4376d3fa7095dc0fb96519850de64f2aa931c3f6593f3e01fca329a58434a5e0f03bfda44837599a274f01da852c07464ce33e27f1a6f38b9047b9c659bc9fc9869f80118d59c274171ebef65e370f4922076574ea4d1807a6c7fa83b9325407a1406de1f6f8d3f8c39bd9222b88a1323691991ee585cea3d3ab899d7634b63f37448b8522a68fb50f0528343cfc59551cf1293619ccc61f9b9c5f3d89d680496cab8bba0644c279936e82271cd6fa230ed7c9d2b83097cd00aecef936590c96fc7368ed65716984b676834dfdcdf09b63e8ab4133a4a503cbb414603b945d05dfcc33d808cb0befdc19c90117625eaa12c6344770379193407e890f45cf12f9152bca776fc8c7395c60d415f57d621dd15d1d6640b9728bd97de3b0f60329d11404a56313d595be61e9984870daa404da2d509295eeca16a6d31e2068504e8757aad9619a73a841c8d34f8dea814915a30256779b38b048a42f57f07d40ae8f9a85f7204c83e438333f9ede3be257f5a7ea2813d6eecba89d89fb2120bc60ebad416e95000b25109059f784f200eed0a4a33886d6728bc9baa4fe56064d9568212fae63291ac314273fa602d79f589e585b0795edf787d5ea63696eb406973d0cda79b1c958ebe94c6d4fe7e99fd79120697b4bd609e3a02989dd031e48e0303796e03f391808f4e81747104255dfdcdc562c3e749ef17991482a8511cf97aa0cacb17343c57abb16520daf30966ea95628412d3f399346b536503413f9b0c5b09e520ea2465e6c10664551683baf80816ee6c6f2ec0048cc34c7cf6f8ceea988d53ffd548d83eb5ab923e2524851baedef5bacfdd54eb2d5065f8e2cfc7c344f92f416e517b6bda5076a7012e351cfcfb0339544c25d09419f2fe18a485a94b82a85686cafd12155d43cf71ed3515a038ea6f7d7d35f03227da5cba521a4cacfa11cbef2912cfec9df5ccd92c12dc13040ad527c05830585d493ae572b95c4ef3372f45f9c07b2454563ebedb57d4330badbd5736b6d7dc6f1da3909ca707ce6b49d07def03eede86a12949e0eabca7d6188e369fd57ffd13ada3b397af9c97e6e36fa4b54d36218490bdb7dc3b8d0be90bc20b33e08cbd8c7b6acf3e87ebd29eb5ef4b83ba264863efdd6c0fe950ab24d6e9f04b10a67737e128d4e1af454728d1468334f63366d8e238842393af67b438a41286402aeb70cfe1f35128e61025dbd3c8c3b37a28d99ee6f27069dcd435c94b203c7157c21f344add54b6569ec66be2aed4266bfa4de770bf3ec77187ad2ac998711cf7c9fdc2923be54ad8a6aebddcfb9a6e1290f44ab9ae3deedced3db5c7bd07f7791fd1c67edaab411a8e3bbd199ce1b87f45ec70d84d22dddef49ac568dbb3b7f8a6d2d5291de60a2d8e12fe96c8a50f46c96d6fd8c8167fdd5b0748cc108051baab630f73e9f62d9eeda5f227e4a704815496f8e3c123939e39d1f9b06f9667bf69d36d693aa9ef97cadd69704593c19ad253345783281ad7da77d853d102d1b9843338636fea939e6568b9b3fca66be4b878597ed3f693847da432cbfbf695e5926e2fb56739097751660f90fa0e27dd2eca7adab33466b93b5c2851f631f7cbb2c531bf91db55f1987b4311f23cccfd4ecff7f87e385ffc23fefe882feee79271b83f627671555c47ab48375d9309ef20712dee0dd73149128844aa32a85516ef0861d1c03ba9d3b0377d871b24f51d5e4d5726c94107f49bde81c685acd46da52e84f469fa3461203293b00e9214566287c3211bf34b964d1726eff09bce4af813924b3b13c8f6356659d79d4ecf261211a67e77285124fc4520db97eeb744d621bd74688728fda6493c74e4c8b6361733e92689fa84f4a0be9b6c7f233b3c2fb4417497dedd2f953bec7bb6b6cb1648a2e6abbd5fca1a613a097f3c32e929d33f1bd95a6b6fadb5167fa49bba4ba0d259242e9d2bd9034089fa78e4d253184a5489e596ee97caa6578d33fd84630f1b00a97fa7b1c3bf2eb3e0e15f96599c876bfa0ed7741a37bd2d0e0b7b618ea61a745fdf542a4930e4d20eaff622a1f19abaadc84add5e239a953a8d1be4c588d4693c75c8a2f11b99ba2d25689048bf91374dbaa6dbc0f948e512ce4c787ec5b53053e162871b84c653346e05689eba4c4416cd6b4b842b1ede72155d4b0be97e70e8871e66623e182f45fac7c2a4c56ced79b810a248dfe1924ee3929ebaa4df48920ad31af217b3ed5b9c4487bf004c31c514d965e66855b8c064171577e61617dca23df9d2fd9cbfec49e79a44bae9d6becec0f1a0b592bbe926118029a65843361dda2060f27744b6bf695212319b300460b2c53a1c772cebf027247737ddbebd5f2a5b967f5eb697c63f163bfc33657b08573cfcd3b2bdfd9765cb03de21cb30945dd402c482bf17f3957439fcc164d2bb48ae224491ae65a6eef44cfaf7227f5d94e74d17c2191276130eeca49bba3b1910c2a240ea412a903a139195c23b910525ca74d36fba6f293be95ee7eef5eed2db5b5fba19a95aeb2395e9f57ab3ed6ad7074ca6bff0bc50a23a4945a61dd044aeb00ca2e657d861dea2bda3a28d9c7586894bb2c5a1e58be21ea42419680568a412683a6110b4023452cf489cb38ba1861654971d45ba2fcb5c5c320e2a84a9241674df239279680d008409501e79dd00f3140799d9bc84dd27c0d3ea894339beb022fd7503c84f1c645efec2419418312ff14b1fb282c853fcd271283e3a898f4551622851362c8fd40ebe181f638c310439c609c0996825c7797ad40bbaec7d7921ac795fda88492ff10e76fa1df97921ac8a492931291f248812232efcd2c78264f8a5f10b11d7e78d4042a2e23d345081820c5668411782701d7b1190d5458042064020030ea4000a6b7e42292c0cefe4c03d246a1e16b1208bfe834633da22226bc693444196c44c44969222226b12d1acc98a51a65408f3cda1acda0e73f80ab3bdda388290edf1dab66dbf694ddb1eef76b7db1737210f347435e32c0ec6d59ed254a8a6451cf1dac4e2259c4680f85f43916914326d2b64fad992187fb327c37036d1ddfb688f1e89faabe973f48a4784287c7aed09c6eda45544da7d43e94edf4ee876fa7e229f49e9a664dafdeb2a995ebb98fd11c4cddb551cb338f7dbf5e2d5360c44bc760d7fbe65bcddfd62c61986690fbf4a2e3687bf5d8d8bb69d34517bf4aa225dbdc5184a937c6c08a591f6e8c5b91809cc639657260f1259d675a7d3ef7938757a767a76fa75599c17af10467a481f573922f7478bf3e239a2cd767a02c01aedf439508561fe6531ffbacc72ca2c87d9598eaf845ef6edce9b3de66687b9a92ceb4c9b9b44a55af2e475ad6cb6322c8027baf9ec1f3cd25eef57bf5d7bbdb00c460c8c637c88a7a6691a9640cc137fd9b3ebd46bbbcfda48ffb8dc2babc0b82dd41e7dcc6d268dcab2c7edc6d2339e4d5e9157aeb4473f8be0af604e3f8b4c9f6964fecc23136826994178b6666b12993d1ae6e2253073f6244a39c336fc834743949e6109c4fcee2d0732811d24e44a52b937db63a6730f2466fc0d136181eeb371afb482afac927159a3e85b3d4cd1616f7117976faad1039940ab4ea7df8135305217a78f445ad5e2143b3d10f14458a0d389efae2381c42cab447a1fadead347206ef87692f6e861e86f50c1b3d313688f5e52b94eaf5f2a99fe46e270bf9871d83012edd1ff2fbfe148f44a080f0f0f4f8b8787e7022cfa08b4eaa70702e18a2eaf587108571c5a9c1b26913b7b342ed370a0a7cf348ce10b3c5bedd116ffe0910bfa9a4476245ac5220e717af6ab552c4eef2302b006e69c9e4920660d7fa6d7df481c2ecc2e6e8b3bdba37fb935daa3bf81c585a76bc34502f315f7e89b2aee1787647a1778f49de859ee0fec761748cc257ca33dfa1c94446d6643ae60306cd43cad18c6acf197baae0743b1ce7cd1314da8e4eb4e2e0272b5e21757575c15d745e361a5ab30c369eadaa3b37f759356492795c719ba18df371ebb38fa05887e7ceb102244a855b25700579d445dfd827c1dc2a641beaec6b2654aa2ae93585e2557e58d4c62a4b1799a077a9247ae3888927769b5c81226dbe6296c61793704e92c580231b760ead39ebc4e1f9b734aec41e28a2206473229622d638e12a3448952a127e5aabb0ea5773d5e9bf58b0466964fa294257ef76887203d6209c43e764edeafe7d791c0465c18e83e8f74634aaee290d1e9d4f575f5c501b3c451d504f678d3e7b567fffaa78910acf9e995cbaf7792a05f9409f62bd5444dda49ab483f49e9a0e4ebbaee727948d4754c92ae0d48ba0151f24f82f225af26595ee76a540c83968821dd37a3e42bf2a083512871f24521a1289410b922eb7a2b198a593613f9d27e5db6ac30d2291b5ef232b2bc7faef79156c1d2212c3d5e168c8f68ef7accf6d1663033990ea388c1923c85a030a132d4e4fa62919feb57e974fd465e242e2fdd1f2031937003dabb6e0651f257c55f77babe803ee2c25f56d45448dd624a7d85357215c2fa1cf53c8ce87144af4e12552fa5d6fa0f56c971b6b7830e46018325194ec9308a1738c9b7bd4c665f8d9c7d66af54c6a6905e58567fd3f530335d8751bc6049fe6ee44a6f54d507d0aa7e7d8e2f8359c535c3b54fb9be2d8eac6b38a1966df5da73d4ebe0d1aaf9daa255189e3fb52a7bd6b50a7bad8730f59a1275d0c1288080f20d194601d4813ce310cfb1932bc8ea543cdd6c2f72b681b42005043da53f3911d5b8b13103a645d7010965f953a28b9b537ab51169543fabd2cd2b43362244b6254532fcc66446e9084ce9488bd21197d291dca5d211a021a12741464049b8cce8492c6a2f6e4c362c0bdd178b2211d2158f74e5a42bb94b434857ba5e29f1947c4a3d1d9d945a3ca52199889e6ee248149dc8cfa1fc512222aa0c74252228dd078ffa48f868922911a55244e882c273c40936a567895176e5a78976046b9aa84a7b7d48891ad57f42899a881255393a6ad1fd0f7b00a4e94395073aa20cf300ba4f4f889e25fe2192a1141514e58f12a9204aaef087cd465ab948a53c3e75446ca0fb268c94648241ca52f1ba632b473925774d49594d8d40c96d24df7491fc6519942c4b2c8764930f745f949249c95edc86d2073d894194b4819046c669a95c23906995bc2be86686431b20caf2310b39bed2ee0014419092213c01144c902243e84520ae1664e0084719c29d2c7103d1d365dd048d221d3cc49cf0210184a75a4b10422227404786f074770067b90278cee5a119c9d5f62351425233cab2aefb91abad48a2646d22e579bfa9bb6ceafe65d9b469db4f77d3330bc492a0d293f67060fcffb28cc33fef8747112e3e12252f5f488bc38508cec8efd85adfb6881ddfae7dd3b0b444ec78ce4bb7c4a4c8c508d6b0e02f6613125a8af05b9ec0ffeb0c83e710da9860bc46cef6c8c13ba4c8958a221351b45101a5eb8ebb23c409f03aa589c8454a96575124572c422aa0441b962691464551560185abb773dd785c9300aec96700d784734d4de08cbcf99765d6ed883a2770c6450000f0c30d9b1a1f6c5413d7d9d24b4c84b8c65db3ad92d092ed9698dc3043570a62c2e148d13e624fae527c26246c3a1bf6c17dd3a13b28d6d9f076ed1097820e4b4cda93df4eef4675ea7dc49e5cbae5aec90addf68fe3f996a09235ed56ec23f6e49720a28675b473e7785af59580b2d4f06cda39d138d39c16472bd2b812572bfe4a5182e45c88a6dc56245739cfc1429b89e8e2b622962726a22ccf2224572d432c4da24d0b51a4916711e2589a64f9c823573967796cc19ad259f04b4f5c40e9be5251a908978cda932624c0198ea76548ae589cd09621987f2c4f328b937bf916a298cb8dc5499631e75a88b2ac3244ddc7f138e1786e20c2890e4e91737865e16eaca1fb6c8bd4922b212e4feae99c0840a8d3f19c671627e82526adaa9147a22a4ec2508e98e554632942078e3c12c572ee30b39c3e07ef08f19cedceace31aceb98ee71cb274fc46eab83b9e735b4aecc821006642c98a1d7827b284c0b9353e80dbc3057057e77173be05c92ffbba1db6a02cbf1535113f1b5feaf3be7fa7af93b58978688b280971131260cd8acb9b9ac09a1a9737f5987c5ab5babcc948ab549737fdb4aa071efe756e71086d4a50228d7c8b1dcec2df89c633febadc92fa0d2e459128f91627b0a65ed23c00f8b3a1c30180bfd4cc7fc09f37e337f07799dbe0ef24e335f8eb32ea3ee02fcbde6de0afb38bae49a49177f19c9b43a2b4af2e8ff6b4abae11ed69efe1f6684f7b8dbb0367b40b71238f44695f71630bce68f52528d12608a4d17e44a3b4cb29b2761ef02777c0a5283470294a0a47c97246bbf69250ab58b0ce4b105c2968c3efba26dae54b4c68f0674307fca566f0e7cdc0df65f0779281bf4ea2f097e59ebce19250c9eb9ae412935251978c6cd2d07da5a12ce54b434d5ae5e4f30124573ab4245a100db2385ace65b93d162024570d686d49aba09026c4dd0cce4cf9cdc8746223f579f9d38cf28b777ab719c9f26d8bd0712851136b41ed490d6b2ce8b47f5a922cb1a3f9cadded3e3ada65ce7568f78b59b39c766ebb146353302aed491d31ee97650dc7f88d8c716d780ef7478cb93f22cc85717f447c3f97df2f7b713f080587fb79f22eee8f88dd2f6bb91f8492bfee7ea62164d9dd8f937fb9dff3a75d16db6d78b438db4f57b3e16a3e3f47a80604c3d9b066a4bd9b6501e8a01be29f56e448ae3a27dd614759927cda933665e88a5a5be7c203ddcb0f1c9d21105b598754a43d79929176929d6837e6edc6562601d994c1277f98959935eed1e2703f99a73dad752421675306dbca2c90f1c01aecf29a36446b69445a45ef175b53e44fcb5acec56e0667b4cea4249804b4b114759f25fd646ecb5a88a1fb302326591e93d22a0d8ba26d43bc0af98b4ee8c0c70928e70bb2fc5c01098874e4927eda93b7b141f761565ad8151e4dab455af501c1f2bc7679ebd32a23adfa80c8ccdde5f2f6a72d50ab20dd4a5ba9b4f988ad9720b8cf739fd8f6b4675beda956d071273dcbb5dbe2a878ed1ff14724e204ddb34caf251241d092d6273a396a8f881e8a2251503620ba880af7cce2a800a2ab148133f2d3d2538b235a8133f2f45a96a50fac59015c5d4012258dfcc09aedd70ca0273f257f2ed2a707cec86bd71299c1052457360410e504b4b11b8034f2f2f204b0c67600ced8169c91ef9c744e3aa256992edf15cdc9d2d25553ada51696ae542a9556702fad30b9dc2cabe02e2d0eeeda555c976dbb46342be7d5f6b44ac33af04ece75087183e45c88577a2d91f6a46d65db3222e742e8b89095735b3917c2b2ad566d97b7445a452f6f7b28109937ac8324072b21c4e150e621c47b28e1bee3155aed39b7155939d7ae01222be73a6e9017ed9095731ddf718728d1f00172bee33772c7852c1d7788e7dc9612435c084b881ba4023ace4464e938b43c86b0026bb63358204b094390a5bc22b70db795f624c70367e45f36ed23fd709bc6d319106665887cd6ca7ab2229911f9ec473e3b229f0591e4494056b2943cb0866679edd2dc56e4ca1269dbe2e921b9cab9ac97a5cb771558d372b9e3f2b625573b241cb291f276fcbb10ff4eff3a02e01e214edd0e3c04cec897ee026e8ff6e4732e8f27bd6ac0b42d1ba9946d655fb4927dd14a7f99bc665bdafbfe88dae53558b35dae21ffe8fca3f397e50dc019f9216e900a10e04c441601346c5baa9f4e9ef4433ad2aaeef224a0567197dfb65315ed8352561c8f44c9ff8357b42268dd2b6625ebe08a6adae93d2f65a374b51678256b67b9da391eed72a86a50ae6a95d3944e4ad6cea3e16ffb76d36f645feef5fe60f9c3ac647953b771dcd551ef173317e14a886b8740b0cc9dc4e1af33777a4dfb767342b0010b08e1a56ce4fc63913593a65d88bbe3ce6b9774eec24cb57968b512fe027035cc6259e64eb7c334b81ae219acf1115b197bc6f5c0a2f882b882e8440c41ecb1b1e9f87777fc6321c43fd310ffb4ac1dca55ceb521ae1077c7d59173a1446d19574f8f0de15d087859c35f8fecc3cb57dd324c0856a092af2db6f209705544c1d13ecc101b0c2d85d169684a518339e794c2470aa078a3906208462a43145680d2c494397479b7905a7ed373ca2b7703a5da6ba0593390e78152ad6a1916ab3cdf03c6d12e590eb2e1a418cc4b205843fabc8435a5cfcb255248be00da3450a49925d3bb7797744bd75e637139e8d99bee1bc862f86ba36c73c80ca0bd12902e5b920db4ace11c2db23d24fdab2c2e50c5dd926ecfc10eaae26d4fa4990318bac9412547ba7ebaa7f42e9d057f1d96a9f3204428939e63a6fe6e94e98db2f83b2293f03780f6e67dc064edab25092499e4a9bd55dae70570fa7c8636a7cfdfc01a99cf0fa0552c3e5f656eccdaed094d5dc9f452a954aa261e3a4a5de92692e5baadbdb3b6c5f138e87a157f586e49dd12d34bd884759774fb98e38f5c7571c9168358481d7190a729b76d12097356e6eae061c41070667e07a49937e2f2686fe2d46bada2e4c16453c54d2515973399fe42b23791ac51abba8722188511a690e7a550af4cf3b2c9bc249a5c9e511c214a17cdeb0879be39994bb3109ee439e7b3698168f1181652124b0061bae91f38fdd2a707206afe6391813cffc1c836db0c409ab98aadebd634737bf8086da2914833df9d477b1312e9686fbec3465cd7747ae57578e9ea70fbaac335ddea6032fda675b831436b2add98a307e02a0110353f7b4423d1c6c7943a73ed23bdfd19267bd285b96edc0ddf2ccecb5d611f6f9cb91df4b6f7902b1788da3e9f80f9be137adb4d978319f4b6fbd8b61927bdceb87d52f7b4388de58da69bb5b76d168815df4c97c5edd52e7320593ebdc78c1700220ac52e769d7c7798a11da2bbbc4ca697ecbd6eba309760ce2ed3a349621dd3edbb7fdd4d380e4d261d2ebd966e5012a0cf9b30d9d6eef62d7a15a3586bed356813ab449ac983bde9f6309bf0677a1c62d2de6c726346a1d8a47b6d2e08a793345097de3d76380fa7f74712718a6c3a902cdbee8955a24d1f895225cf571eee0e8d945c25d73df248b46922916676cf913caf842ab96a9c8c3d8b9bc3b52be311901788f30212a8a8468a064d0d1a1aa948e7a605a9719a934926916171e5922b854c1867ef0f7bfa3a8bec954142677a0fbf59be5dbe877055e33087d0a60fc31ebf87be10d27ca86c5fe3f2406362f918d6964e35e3e2954272890c8233f3f2ca24920690663e5a79f1f926f2cf17ffb2f97f3d0f25d0766590d06dff1a68e31ac78a6f3e525927c677685e230641a37b85d60091c6e5e1a9db5282871a7747082b859950d2bd593ce09dc8a2b136c6adc5e98ecb728c9b2c66797c3c4b0cce2e914db7f7d3f191ca5f77ec316ee2744ab716bfe4b0609dd24d2f611d4cde7498a5b538f155e3facedc16273eda227638cd3b4907c19afa99c3a78c4feaa2330ef65f6d1a401b8b7f00e9b277948b436813a1449a791cdeddb91b7b026b640ff54a1a5d3e4e39bb3a5b7d76bf54ce244cfeb0673a40b6c39c5d1d894ff9e391e5296ff843224bac335fff21218de48a4ee92ab94a7ad45ed329edd93cd161b777bbf00d1e74dffc473b7a23975cb18f137708b1cc863e8b56ac60571e7b920d5d5893be2526f66466ce21a2f6a493f6a60cc9958543595a59d4d7112633359213aaeaa59448d397123bc1b2a8bdfeae233ac5480a7db79469448f8cf2c492a8bd3e102c4bed1e39912b69848d9c40e9a222ec4a43a15ba05ca04dadd02338d35721e9208b1e5d47f2c8ca915c4d28d7d13452bde093465f13e5fea611952aad9aef8c1e4d81f6d3be522aad92f24dc23bd7b91bc49e7bbd2e3dca2dedb9dbdbb217c2a24753a8b40a5e1888cc13eb20b15809ee70286a4d42c25d724459118b34402a1190524a299fc1193923d09e9c0090001875473ce44e0eb9ea91412a116a1a349926a43281f9ae3b9d3c7a79e4b83b70667ee3312f6dd8486599f24e53ce194f674ec44882d4f77bf477944c0cdbab15c74ffc2191e7dbc7295381a242988f5259a1e2f0f574922b6e645515f7ddebb35e4d1e89f2717a028f5cc522b1080f4fcef21282329661144b00ca754a1987b427ff52e792aa8293a757357e2691d9337da6915e75f3c8049a49a650fc894043b29414d6c42cbb45444a920a6a7960c0e52b3696bb13592c58f67c12aa4a1c5cb5bc65777df489458ab46744f6742579c5e22943d4bd70ff260f4e3ffec42351aab8241269e4b35752cb5b521e22d1864e99222f29cf24d2a8d61c32454ec9f27d3b573c799074367cfe9b3c91bb9f0e902cd7efd0011273c5485aae19c006bc135941ce72538be9cd93c51f977c5d1e17f96984e975c55b6e90973e64adb88ab3dc5664adb8cb01566096abc02d6722b25c7e235d4c67b92d254c2c17b2a0c5e161a2dd940aa92b91e42a57739d734e6c6a739b1846afeb9b96cd677362cfb079d198e706787c6c8cba2097962e7cba98e33f2e773ff2e42ffaf874f49992279e6c8cba78692b77630e4a4223500f457088038a4ae04a2b026a551258b37d42017a3d8315dfbe6ad4a33d8f878f44cd479b41b1381600d4de1c42645d70b8bc08d6b83401d6c0d7284058937dbe42016d7a49a4c191655a24570d24511a14a0aa6700bded6696fb178532eecd69bd84fbe42ef11298b9275bcf806e1b546539805e6b70950541d5f58d8a347af2044a7b932baa467066febaf5490e209605c91584944ad6f8eb96dc86a7109efc71f340b0a2acdafbd5286cf809ac692770c60970d542123555fd03e84d2879be7fd04680ed04ce4cfa3a717a2291f66653e9b6128faa44a14ba049d8b6e780ab9a6fe70155f6db7b4055f68dc67c512a7d8d5a31f1e439a919e0aa165d25b84090e77769204f3a459e970af2bc90e479cd20cfd3a2225a24335b8a245cad6cf87b86115a1c16bf6998e1b36c81b8e1b8adb4ea54a59b7224656221cf078136130b90667efb11bd9a473bb046f5ed39e4eae6db79b4aa876fefd1aad56dc0a1940d2f75ef74dab2418fd055da9b4d254f2a6dc5c6a5b4255712881e21dac82927a0163dc2ea92aebadb7bb82dbfb935b71766da9a5deb9e475bb425e7915cc993c5df898b2d5ab4389d5eb6cf03454803bdee6b1687c5db49cface2b52f7779632df2bc16a9a256bfbb77fa2d974791fc290e9d5e5efa2fa7165e2054bcbfdd1a275d1ede727778cd0d8004922b4965f20065d9fc91a839a57081830b1c5ce0e0020717ffba8cc397651cb6e3f06971ac75f2c3b7c716ac99b2f5b6fd48d4fcf6ed11da644922cddc30f7cbc9c524cf8b09be9cf4b8f11fe6b31fb9d286b224d14623a238fbc992e4f91fee8e0faf796d6d48aeb41f89228a365a924833948928c6d5b83a9c874bf31d2e8d07e0d67cf2c8d595f1e48bca94227e538aa96d51d24fdb8200e03ecc1fb9aa790dceb4202d480bda8ab67b8a3f18db49f6f3276a3f79beb8d4926849f2b4b8ca1075fd4f2bba9da98a37e930bee3c30170687150363740b4b93fbce6b694f8010035980925f507bc43efcc1cead01671e344b04687cf6fdb4fab687c7e3bd2aad4e737a056d1ccfc6b9b8b28d2cc970ebb93b1ba8aae3dd18a600df7e9fdb31123872c2683c9b2967f9dbbc3f9ec10da60419166bea391ba46b4b79d46071fb6d7ed92fb45b47dfe2ada3eb7cf5c4433f07792c15fb75d062ecaf3dca5f76ad22a12d67909429ebbc417132cb12014fe8478f8b311037fa91cf0e7c5e0ef30f83bb15c544c78c31cbe9ac0c0d7500b167435b9985c4326962f4125cb1efb964bd259ee47baaddfccf69b43f367064d21f993a58ffc9140edd33fddd33d5cece9f9224fe6f2d7729bc48b29a6b81284f4c95cbd951902b19539fc2d6125fb88ad4c4db73f60442853c993d55c1e1255df727bb4574fba0b68af7ebb71484bae1ad043eaacb3bec5d54ba0fa7939a5de898d940dafc5a13cd52aa71471e392a7bd49b1bcb27db66a7bb5977b94ed5ccd6f4854de24942838b65baec8c517e37bfabd5ba715157d5b926f4b02d7e2bedcef75727db5a692dd66d2e6dcd39b4a4716271b1b1f7cf0a1b3c893595c984f37f3e1f9e3f02764bbb648abec1299fb76b37767355bc24aceb0bdfc4dcb7357a7afc35de66a2f118dbfeeb91e245ff8e39e35d6e1ecd5e11e33b4456c57e2d813044bacdd51f27c4f8922a58f5a66d07d95f41612e9b5a8559ffd4184b6086a7138ee75bb486cb6cde60679a93964d9fc46d6dc9612369b8d3dd7721bee8fa8e2dafbb53c12893d45320dd6c8cf6fd1c67e3b4d99b3a5c5cedd986bfc696f4623ed4d8efb4d6b45357e3a0d47cbd148af24904fd07c9d3ff347db2e57548bb8eddc90567d9be5b66ac4f1d4a20aa51ed529b54ab552af70adada868d38a8a600da5592bd29ed4e06a2451f39452d9364a855ac9f350f544f75d54e42a0b0abaa870f79b3f5a519e2ee76ee72aa5420167981069e6b75b9ffcc8553592755a206476c1d5260a1d6401c95514924b82da932bee49a3e62707256799c39cea48f7d5a228adfa2e29adfa382328ad2a6a55568bea939a9a7335afd5a855db7603efd4fcc6ed6d6e909adbbcda5b9fb4376b517bf35bcd6d6cae0fbf7121abe6b66a2e84558b9eb4cacacc611d243558091f0e873297a4575188238235f6f3b508d6b87cd67c9efbe18a9a386192e761734bf2fc11abcb8d998362bba6994c90058bcc196def3aaee8fbe7a5b8a23cb7d7dc1c3b7066fb7604446d157f36b66d6ed3cb82360cdbabdc37fc2181b3fd467297f371ca5d7b599390f8f09be60c10593ebce82c97bd52ab799effb6a23cb9d7cedc6f4dcd8354a0a6c6daff46dadb9dbba55f97f4edb64021cf37e9dde9fd7c402b99f452cbb6913612cbcd20478a70f5c3b36b9cfdb69de36a369bedc6f6c3f68397aaf9c7c2e69fe9c63fed87ed3f5c0851dc6f5c9b1a4eb3dc56b14ddbb26dbb40b0163e5c48ed500fcd802c54080381d8ca748b9f0fecd0e2a838bbbe8abfd8caf5136e36d6cfadf264598b5167f2c828c83efca90acd248a3b342ac229fe3c9294a40cd20cd20cd24ccb3248258354b2db12475fe9e9e529a590669066f4dabe63199bddfd1874d493fb70550fdf01b8aab88f34aabf6111e4ce126a593ec255b7e4754d69b572d3678de1fe91c7a41340b02bfe88f37e2e70f6c82e5408f3a988926584359a2412493fb66599b4eac3ac6c9aedb142ad6a5bc4fed82336890db24bec106685f4235ba41fe98196240202e8c9b7483d9a4f96f6274bdbb2d29eac825d69cfe689eeebb28c1647d5eef4a13e945301bd80a8cf15449d8036d70b203d01acb9627005a9c047a254002f211fb9ba680051f2d7058439c9f29813ace80a922b8c89fcf68a1d1df98953da9347ed49eda735209cd36ffa276799c5636840a72add94f61941960f026dea08208dbcf6237a557d76600d8e6bcf2157435c3b8f560171ed3d5a95e336e050ca8697baa755ad66ed995c5521890ae2da23b4a957228da4dfae1d3142f7693f3f5a103157a12bd166331269e4abd0959ce3968ee36a07e2b27c889b7321b9b22d8992bfffb27b5e2a5585b26664745ffe9df20d2f2fffb27cc3e9d4755af5c9f286437bd3c798f4d624cf5c7a6dd1b026f452d0177baa6cd9adbd1791f35ef1eddb771c4a14fe565c1720efbafc7057c325a3b6402411a7c82caf1aa75d9c97025de0800da830858a82a1283801045b100209322324400663c88008aee0b382121440056a385a410fa098c283102400014fc8010bcef005287881a8082310a10c37183201139ed49e23828c600651d040158ac08125182d0102c105809003241c490b10c18235547902821a08e5a00c473a98820dc8808332e0a08200be934109a88011253401032580200b52402dbc6001034898100432384102213c4b94d0810e38014910aaf0810434f1832658e1044d90218a17a012905c20094f4e500414a4c0034298f0800348888092d0a3021984800529784282283d1822028f8c6ce189095a57808adc208a2540c1821c80010d19e88002ae5546673cb570620d27d0c1932e00410b2c098513676082041c70028416cc0c388141144a44a50592ec57866f242a3e52f94c422b4910c186822ca5bcaeab72204b22a23364f916cf4096f23320d601c292282c98c10aa090c27ac0135b80c2058e70c081275812b738515ce3a632294f533a20c0cc6815cca6ac6518851198b085203f50030e8e9086208c61882584066170620540581081069250379000209e904212a4c0e00c4d18a1bd50b76024075196f8c0024658b14a105c40041e311cc1c7881720d9c2d193263470859e22841b3e475c20a54a1a466081195578c10aca808128d0d0c412241025074e68c1177e88b086da128282115831027454e484225a1788d04210d2d3041f221811f9821a3640bb50e4a4081e6835a1421210b0621c020e284821890b90d0832df8a06a408828f85ca901d0921f88a0d5d02483ef56f08856c3bcc92157190bfe1495108256145228410d5c20032ba6e0680c53b04003160862c577adaa4ce4988ad84f96aff02dde624e7a63d0bca7978bfef2b9e8f5d3d7910be80aba965c4caea1abc955447d82e8cf2908d6cc2cdfab4c9e642ce9d6c3d8f232bdbcae5fbfee735d3e18f5a13f18a6462e9f0b75a1445df3d98dc1e768f5727dcc65eee9dabb7dbb8bb7c5e17096755d95d9a3c519800e9ca33dfc0f3671717a49cf6ecc12c0300c04cb36bea0315f171709ead2bed6b8366eb4e7bd467b4850af280cc87c08136761204ec15242cf84c752c2bdd29f46499fc9d12ce38e52925d46daab1987ba43641cf55a51f732d23dc85399671749cb63c960199789b3ae9fee41bec666c9cb27c3f408bd2c8e8c1a39eabe497d2493cce4faa1a75875f90840079df7eff2e138eec68cba433a25f4e8e80817a7cfc1a3c7d0c9874c4f23d32054a6970956fd0444c95fb88a41122557fd73faacb98ed0e6f2f18936524aa491d713f0a79f80abe90488925792dd204bd9834cfeba92f48a1e49f98efacc8081c91ff5f92e9fd369e888fac8d5ec2c092b0267f0bd8eda832c3924571791d350ccbd92b4940b4a964fb2247a9313936b89fcd56d0fe07d46955ec923892a829ad7270f912c2fad6043b294d7952ca9139a6632b1a03f94521f4a7d32eac3511f4b7d4813855df24892f067c3e22f25394ce511954734abdc8c9b964ce67ca54765f800d851d7c906dd477da84fab3e4c05366e64b04910b2c4e64da491a732598d1b33499379af9fcbc84db4b99cb84e0067e4852f1fead32a930bec7eb195314a8b66d1459162a80fe782fa9832986d500c8a4124d4bd977ab348ae605b6abb3fecf8376dba8d412eb06cbacc851285f18d2ca3d4d4261dd3a9e94ab52729b538a5cb63bfe9bed8c35ca5c591e5f9fb7ae30ae2a08a74fa0eaa624eef023568d346228d9c39a5f8bad11e767fd3a818521b99d8c84ce3740e873949127a9dd2e70c7fd9fba77f6e3ae617ce0ead113347e11798efe8f0d4697ed3f506e9b3c184eeab51e3b23859e538233bec3080cc5146c81cf5ebd9a92542467247b532c6e25f2ac68b90f90dffa0141851321e92b30cdf2570464e1857f6b4272f73658ce6acc4ccba7811a85f3670609c746fb4275197f2bacc650b179249cc70b8ccbd8ef4f57319914c5ebc904cb2fcbc7c506ff977f9c8c032708c1818491099a37aa06464502eafd3f6a0f19d66ed3021f32558a857998b8100b064c8c8c85c86cc655ce69025e33752c6455de6b69440c9a00c803a8d57ca3550ab28c55fcc241a181ff59b46dd1d1dfe02837360e0189a7a90146642490c0d0d0dde892c1d7ed334833333d701c8049a271d377e851647cc657c4e4c7aa517890ca53237c80bea9025f31b2973651c755b4ac8907123b38bff5dc7a400d899edf125c24877e11c72b84064b6d0168135f3f25714b992b9fc75745169554c908a2015412a8254bcf8e5036bb2d33f7994d1133dd113fd29a35f4157d01574850d2be4d10a79b4421ead3849e64efa18fa1944a90dd4066a030da2413488de068a2f8c9104417de633df5182c24ef18744a69f7139b436cb982562e650a2387b7c7a1818f81f8c5f308f160898dfb7c5c1aff666aff45ed7074466d7e9634ea7aecbae5fe76266f69b26cdec72309ec1dcec5e303010996fbd373bbe7e9fa5509f7986baf0a6ae23adbaf8a2f7cedcdfff767f71f9f804ddf075502a7f1dc4dd1fd186152aee7755c9f22e2d2cf7037219b97cda9b31e370285f3766990b59d166af7183c78cd78cabd12a580464cdf8853f21f4a696c0b0ec53873b56b9ab735de6da99081486d27e41b2c5ce619d2bbb3a5796e9c433da93188653dc313ca7cce92bcd5019a597a114f55f07406128513213c35420e7cd3888ba306981884444d60c3ca33db9797275f9c8eb28d42fd4ebf5d32a4a65e01dd465c8dc20a8cb5c462e9fcb87a22e2373bdcbb89085ba2dd485b02e9fcbc8f5835d580709eaa62fcc57f670900af499882ceca70a89691e4fc8283d580c4e3d51e86e24b492b5dbf3459f186f947c82352b1e749fccb47b7ae04c735ea810e6a30d6bb8250c655386512c6148ae90870e460105265972b355f0a61c0e73f8a722c31cfed9906de9460e26dbfda661bc1991e7199398c424268162fd97d5cb24ed7d12a8d6edd8d55e6c346faf94fbc11d489649a716c77e6a11a8cbfe3510f649a00c6ba306ea253dd44d7ad5355117f5938e0224838060cdccf2d89dd9a55743621ee3f25d8b56c15c6e312e06e2142cd4f17613b4ddc539ce84b921afcd46a4c9b2cc3289361d0338d3404f74df8c2c67b85c1ef332cc05cb2ec76c102e3a2edf5c509ac569a9597e7197fbe27298398eb3382c8fb91858828785d25e8db427e5110c63b97dced0f5f503788fc12fdd77647cc665fa487b3860a663188c6313c36a959784619a535e313fadc2b023da8ce9ba348eb338a66b779a66b428633ca633b53d62bea3048b1123e617053261d60ee3313b32fed2e19c1d21ac190f320333a1647bb3224be632327827b2646470c6bb0c18b835acf312046e9ff6fa48ab4c3f46b467335f8771ed7edbaf89dd948dd3bd981c73b18c75c72e0c4dc3ba4dc3228c68714cafdaed2428182f02d52e52eb33b88a797d0755db6b178934f2157bd50ef37bb1c5bf08d442edc9c7dc0eea245dc4c5d7f25a47a1f3bee2d3ee88c72e9099e39118976f2badd2605c9e4e5d974f3f9d5cbc81eacb310cc3fe829d05c642b2607128a70f8b6b37c6cd2151187618b747140c621886cd28d88c8245c912fb0dd8771c23e9e17d47494c760c7f4864ecdedbe2d870bb4c2d11deb59be5f87aecf83ecb4064febffbfa0f089eed616c7a5b9cbfc67bbd66b5fb75bf7aec18c6ebfd7ec94b5ef5f5dd6f6484719390536cda4d42e60d27114d8f16a7bbef6e866fd65e7dbd1888cca66abad75f6f12c2c5dcfb7563eed740b997540c73f7057e915fdc96e3708bb4e02e4f76ba36acb82aee0744de6bd585b905a83d596beda0187827e631fe0191de0d1273ef35bb9d2407981131f75a3117c26aa056d5cb77d08581c85cb10e9218ac8477cc7b863f2158ec7aaf7aed0322afcef5edba3ad965aef542b98ab144c460283b13feb26fdb2fac93d5ab931d4ad4a56ddf30a7c5f8b28ce16f02197b8cd7e6302ce69776680f10832700256ad3b2dc62a8fbe812b23c0d4245ae3117b2ea1415bb4862bcc6dc5664c5b0621ee30679312206b262fc46c6dc9612312e84052d8f18f5e6eec60c2fefde851215e342d676638ea13987d295417206595e2a8134d262092493c019f91a93b407d49ee470048233aa18745f037d74094b925c9757c5301089ddafab310f528198331159317827b2b079ec5e1bd5b00b8354669a65686917e1a671857ac52299251e76ff2206723cecc74f9bd921d76a457bd310d29bf46e488e6d4bd72349f27491dcd7619ca2c556914d5a000370a6aff56b0f6d51da66c8e490f6faddea1e096386258f0a49d718f36459516e08618673495094521ac19924d2c808d6745077129e24b98730fcb438745e483420cbb944be2eaf052289dbb53c1fd82d89e994f66c0f61d7853da1479791298f7a55e3a74fabac4c432e225cfffae969843dc9dd9f519a49a062a8d40b33d7c91e07196323229800009313002030100e0805c3e1984826c9815a3e14800ba3c64e62a94bc424a790218400180000000000000200800000bef592545c1ef6b027f9007552e50698764ad5f1ba525569382b4c6c691ff01de287acc2a1e78b74e83770944391b6e542aa8b68fccdebcfbe79a8c0a36dbb9a149e56d8275677e15614030f2a970c7a178bc3b99ae21fab4c89561261ba075f75fcbfc4ef2ac75b1ea62443815ddec3b3f677784fbea5976da61834facd08c9baf0cfc10f0a92c175ec3c5a8501f0aeb48aa950c097271472d5c132940e3b6085d60bd4092f05c414217b0944d7549385f36bfdebcbdb33405cb311e2329af32673a4bc5a2e86fc28bc2b55a56535e36a37dd649afc003eeff4e5599f7a21ea1a9b8b8eb7d92ddc4e7ae3ea77d5c8e78ccbceabcb2777d713f3302b47fa1c7bbe711ce9a1bb95c4a503eb9950c6dbb193da6e622f8d5bde6d92fb372cc2e54d78491f8f0b23dcd46773776189ac1d68f1a396969ee2d386ba4928026ef84b26f4a910114fd036b693d74a3569e124caacf96ff8296752bdcce56a457f1f73cda386dd7f1f90a68716fe701eb570114a5a719a7f1224b176e82a556abc2dcbd7dee8db4ad265f7752c791fc55025c46f626bc3172e2c30745e559cc03489d907fa3741259ce621618aea64b617baf1108e02fda40f7baa6568e037cde92d790744fb029c6ccb240b4602e4492f0721586a308847528f9311550f6725cf6e60458343f87babe13c01c07fb11e5d1f1a005e5005d30ee3565e421cb3674f3bb0c0079a3d565a1ce340f28858fc0f03fc4100759bb7e7e328c0eb8ea9975a1c6b8611d63ae6b6b0697782d4d7b00f6508370c75f7d9c80a5c6d4f0d9dee33d2d45c17f80f02200dc68733ca45207dd8eda41c1d5d7af7ddbd019e451f05bc1a713ba1399ffc07d24a8a8410e163a201d173f04a82dc909c019e9c5a99480600be0195300677951b7f8cdf42e281046a7c008dcbc0792aada85b0a5e145e061afdbb62adfeae25b55de934f157dc80782eeb12a373769f08dfa5d82b0362bce2e7596a0822db81b2d48136878ed841382ab890fb915bfda8a1a390f4a46ab309d5c73799f694f692202b6e0003a670d35ed181bff0a87782909cdad6946df09d9fe6a9c0d3d7462114ff1b4498ff302958291f9aae83f432a8ac79686c68868488a4eb0239dac719e4ccda0e1e1be07c151ebf1ad399b41e80365da14a466868e82a1d3a170c14cd696a6ce4dbe001d4eca3010012b2f84f7a1fdb466b68b0b549cfee2c48da773fd0ff83465cd732617481ce0e852283e312efa400d593dabdc4a9b01d56c3d02f0d2c1900c1b9a04fce017a06a41352c4517697fab988b6147b9d9d102861060532c539b18073d957aae761c041e2596ce9eae6286377879d15f90eb772df68efe1e9ee05312dec3dbaabfd345b7406b4fa8c809a3a7e04c113e6916d833422fe32d4c9a0dfcd988a34f2eb8abcb5057538b0ea0c9d221212218b27155f5f2c61a6818d70725662e480e0d1df4ecf315828270b828d2b605063ea39d9ebed01d46469871c533c91425cf8e6d1c293a7655cd8083b87ca9e09c610e36a2194a7e0513c4c0610115165264fac47d5886a2fc824a0034dded333e5c2c7e3c135c89ec77380b3e157839106a65729171d25316a1c2cb37c429a4ab4de5ec87bcb5a534c26d45e8b71a70ef9c02628b2acfc0d8225b59d46079c44c709911545934a1ee35a6a926c297dff35ae38c38e76612ccfdcc4e5d99462f6b24ddc449c355c6a2b6085aec18d81bf0edcf4fef50f4b3a0a7b596294a695506e5e51a9203ddf73440affcc79b9d1a37a796a2a1175cdeacb43cf1d056226bb4182ab8e6d4a5b7e58b4612559d7fc7c75fd27a58aaa9b94941a97ac862f5727f4c712a34f9210478e9567963f5935f3978dc81d40486f3c480359609c04c4a2b28bec949090c8ae3b2e8c69e19490952ba4aa2f72be2e662e8fa3534cf7a8a0dd15897e8c546f69ef5d2c1583f5e83806857f786b21a289d15181d5e76ee0f73c54510433c452ae6a5a2faf79d42cc30d3c808c9aa11d9d4af049f55a3e9f4809429527124ec23e2439bb85b6e57fff836d81e5a08a22de6366270ea5f86d982519268616f2fe633e6e927f369f34eed9055795ca5b419f2b707c9445830bac566651ece04e5d0f01303886061aa28622d7bf21232970d4321ee0d27fd020cfdda8aedd84615a0c0abb7de237441aa9474867eee74f7fb09226230d9bc0c9acc0f01a25358f86424706c34bf0db9dbb2fa73069e63f3010b79c3b8629f76b9e829d2b1af81a7767a699ebfc518fcfe31160112d8295570d79fad2393818a33f0b55f78afff7b28b0238a0935ad6bf812b2bfb4cb71b141657f7593bfffd06e8439fbf1507a235f29fdb3ecd2b4df1bc1907b08f89cb8aafc0599825831009b2de5b32c2e560bc0d9538aeff5756662dbd81676f0e0ec038e0f14c7211a8e0a9b7155c2358ab974fd220f7cfeab171c481937989de881fdcb109a16bc6b0c00e4c6883dd4ba011cc856e7b820c81062dcee4db632a8ce657fa5feb065352e5f824ba291c9084f16f40c0e074815021aedbff9937339e50712d4d76f8b54390002d0a84956b7d38f9dcac031dbc27f76b801cfd5f234fe2d53214e40f12c717785bd41037624831c7bb0bf6d11e699e239d13933bb62fd81f106b2ad2575130cb2b59f2ff9a9e1ee484adacd043707ee9f567a430e535318e9b694023736bf76937429876385edd4fcefb422d16729c034f99032c3e51b507e35744a6805e9b621a14cb10895b9dfd61cfc8cbbfc258c54537c1a7ae4cdb61f458ce583163dd7327e01f97423592ca7ee3f42fb7475b9d1b313440fa486083ccf6faac3122bc4b693af5d3fc12fc70aa924b0850d9a19227de0e3766f8a64c01fa4ca6120024ffe0346b9a2316ac49b3c4023d82c46bcc5b2c405e2a8b66e3d66d7b631227843881626cbae6a01c7d22c44a3e3facd07164942022ccb205e7b0b9b915bc2238d230d67b583b2e97edc7c38a32e717437c68e0482203729e0339c25c0a269c13002f9c15fe5556ceb5b07521e6e6e9b67cb7c185b88bdad121fe1d4a90cafd5d0be1041db1f09090d02611680a259d61fd34d453c428e87f592de6549bd4722958b56d0c062acc9469398d9163785f1049f790bbbb879585cc010dfa3e45137713d301a7fc5306859bea85f67e28ee85aa947848387d74d16cc6dd9f46c20782a671b90bc0a096f9de860938a518e4433d75a59fe74004ba15b159a88c120fcb11bfde6cf7190062afc8f7a3aeb1d6b11ac4c2e81e4e5a2f417a3dd7867b7c04450826f6830901517bd9d9c4b31033d4132ea3c737a7e1215bd47d5b7ceb08044aa3c863257f367faa7eaacb05142076cd11247afa000ba70ab2917d5b33169a3a72887fd27c66667c6c8d9ef4b37242afc0dd62767df66720bdb4467c67419342dbe38d3f60e7ae81babac1067c584921684c44b868203fa88d0653a5fecfd106d4857df0a0977a5eb966a41727b514fc2a0dcdd5ee33da5a8cfd6777fe7b0207c4bb2976c50e8866d8264eef5b1d9188862aaca2eb6d5801b00527b2348056a165d0dbb248fbc381e7c925cb44a2c0ed4029b1b5ecfb9c1dfa18fae6a263bea961696e8e6f67e89a1b0d73a100fd73ab6b8034d54198aa957f756bf4ba5bcae753a7351806a87556288076dfc6bfd51aa97f5ef2ba60ae95b33c2500cdaeebde7d24f7ac02680706db2843d70094bf987be6672b9a7f356b1158c8f138d024ecc001017451903ff51c80ef89dbe787517642082685fde1fc920a770d1f44cb6051fcc9b3188fd396fa54f38403a38dc57cdff6ea346aa6d67e9a299344bf160a69612df3ed93923b8172c20ca733c6d169b15f4979adf75580e4269cfbbb458853a89f3cdbd97b8b6124edb0296ed4dcece52c1dd61f44d3cb0f827490fbb4d6abd0cae7b5ca3510b6cab102306a815bd3a09834659aef18a6235c6598489fce28233c788c917a37fe7dc344f0fa5f05de3cb2fd5a2514adffa2a6695e379f9c1539cf320cbc6f39c033f55a99668633b6592e4607ce688f12c282d3a9ff4a33d196193faa568c27612542537d59a696870b1a5ffbcff2e34d8c89f164bd03244471094cb0c22bd67683ba1f387d0708af637bbaf54b2f6e0e7e2467320949d4858e6d0df0d17bf181365cb96f68af94fce86ed4c3d55e13bb30c932f89b893751f95de3a7aeadd92d849d80dc6c9ac49bc1682350deece26b7e65b8d68964eb9a86aeaef6105d61ca5578c5860cede4db8503195edbef77b420089f5c32bbb70e43955df244a0abcb2a9dd938a7519bf49920936045442a8982b97caed875382a3b1ad85d92b35c5a24cdf173e755574aff075ecc26242111d65dcd420203932d4665fe034388b617d27dd8fa37d875d9f91413dc44c2a196536ac5a64d161af25669f3f261c3ec3b1533b860c47205f6747c190aa1f65128fd6b1487c35a284d66ad2494569a65105241db38bd1f5c8b9990594c1a221c0831120bca56f6949329ed2e15c4f9d1ef7b7e380a26061c01404902b9f0578b1e68fc40421133564ef7db34484ea7ccd41c484d0705cc85616fe1444db207d76edf2f88402a5ab6c7d7cb4b40eafbf5bdf55766962265e8a563869b8b45e900616f5edaf6de1e77535925f9bdd7978f8d7c6d26e9fff8a01170e643d42ee0a651171954fefa168078bef4bb7d03e81b0da4b8ae9a2e6b8239791fe6a93b73bec4ec896a640f23685fd79beaa6ad365ff79779af79be86f1bde60b40f4f6deccad39aa9327ad79ae7f9b073eb1cd742b51e4e2d3bba3239d3c194adb0b2e0bc7c9d9c8638000f1ee71524d434277e648a901f6028c6475f310f160b979e5e6b05d91084ba998cdc5ad007a901caafee70853b0d9e1a6c06f713e4e8eceb2fa07cad7ee6745f9278cd6be1d1f88cca6f2161fb19b377bd672bd1a348d5f3100321390c85bdaec87be137a11ecf163b3c5cc6025fc91ef5a439e37dda5dfe030cbafb78dfd00c59611aa673aeccbb6760c1eedad981b21f4c80cb9c6aa0d127cd276053ebd31afe45eaacd0ced5b4157c4e04a82e9b343b7bca23e2ae666844bf704c5e972d170b265f8157c28cd4613a58f145b35581a56636fd71505ff66c14d6a8298a855a482b15531a1ad928813ab1d7a95344ae457995315fc0055b4bf9e3a840f8796925e3777b18a1939c9493c97420221c41f723b0146c26811097218050ca0f589542b44d553b1c305888891b18506e5a83e7d48faf5614c7e67c73aec2d5f9b146f3f3c247a252336ac50610a52a0625bde7534508014b86588cef689e6c00d053f30b665bb03e84cc3a722c6e8521cd8fd0d787f1a8cd3b842886194a669764ca7cadee4db03e918134ba4b660d3188f742c84508d1cbbc6b48c46bdff7a0c6d55ac4071e79087516451d4b12e8397689f272973b78859e641cf5dd07e1c46e5e345176e0a20cca0e534f1ef14bd0f5be2f3e3bc2954a8654a51c332298adf50722f07e42b44ab16419b89bbe1380e076d0f692f3d7405e3f92f33c12c9c86593ed132ecdbeb3f3715782cc758fcd428f33e829d3e02a424626f4e1b046f0ae3416059f08135ed49fd81af46dca6971c8bd4cbda0856cd51c8de78dadf4a89fca138e7410019863ed7d0493007276ed32e628dc1d464b2614adb58391fffa9ebdb595f2049f349fa8361392a835ca6c6f482da6c4c4c69f56076cd90460e9e5e0f620ab4cb5ed04f60dd2e0e247ac230b898d5800a392d0a379cba0a9bbb7cb9af2070d52215578f2bbea58136560955b20c155298cf7e679c9dfe8c33499da38e3c8ab41ecdc1d9509ef9588e2d6fcdc19393c0a25bc294cd6ba13e94a502448eb913d07222c01a58a4ff69460f21396b0efdc9a6fee712fd64fdccd6c6903680f56e16d4cc12de1c72e99d5fb6357af7488ff395d6b1f98187b5b812710e260b7f7f78578088f878805442d47968adbb36e05c77a40f1c59a85e55185ff5bfc216e804d50c45f30cf94b745ac7f4b9d03b41905b895050a46f69394df34ac27e0c77d202f19c086a5acf08ef5d839ef04f9155619af69aeddd01c8f59983d70b94f12cf07a4332bd1e84c36aa1d4901158f4a0059ff8be3b5bd7c7d9c412c81b3e065688187dd5fc79caed5e834ffe8ceaa8d76455bda3b0a3d3f6becf0426ea7b786bd33883df75eb5b557474a7e6df699c58115f596689fbba9d3f866ad838c9e2f1962ecd7ca94f67ade5d6546e9d62757deee81e17cc86009c9bdab69916d57cdf6f04f94d773874cf52becdc82d199696fd88ed85a6b27909b6a481c951dfb9c9ef0fd496ebdd3b2ed11c81ef9da45eeb543be6c847bf7950f8521ca2316488dd39263bbdb49b0b0f69cde4ad8250bfc16acf812456c135106602471d32b2365c4d9a83855e866e4406555204241b825efab93d1519525c6a1013e8d3869c8fcc78383accf0d293b0013a8fc8cb2424f16ee13e8b74e275dbbb8d822bf0f2a83f68279ace86b5db4a494c8259a1097c173d61ed7e7810daa77ce239b0fbc5382ab8d0618effb1bf1a5875c44c827ce213f6356d145fc7b0f46af4d8863364f5d940c09f49c283d7a2b6c335e7fe2e46e4910014b55be91f7241714f859ddc2a3e83510d4b70c613da58a7ca888c8f87f322cd18937ea54a25d9ef1d3a10a0d3d17529e377f57f2a4f546400fcb3e75369b40cc0a164260f8aa8edfbe60ae89d819569eadb76d159649afc503f23bc89136261806809f510f69373d31e8bf20a7ebf752e906255dd7b361185fd8f9d40c5a5f6d800b30a73319fd2e27e8cf0e390d9986b6d809af0ee1cdec5122419b93751cdfcf4cc37d6baaf125053d403fbd3235b2e4adbcabd7091fc34077fe905068085043811b3d24505aa2c8baf942844a8980e3135744dc9ac128b9a5805bfefb65963589ebe501e307b71b6f529d3dc7682239b45ab9405be5d8c612bec738676cdbfff9b95de907064022ae5aa784aefa430b1370407031a17c00e9e990abeece7f4b52ee06c15d9063c0e7898d1eb970a87a1256634efdd0486d30d33d000cd9759871ece71f52deead318146253a72c120fa551fe3cd8f401cf156d1309c5b70c2d95769f3bd714b788c9dd6f1fc94cb594483e4ae871f36f600693ed39163a3f241d148dd1a7b02ebadb1c97292767833ccdc9099761a9a80b4cc4fc08780565e89331f7e9db24a5dae994a122aa031a047cb2a4fe82047a3f7f31b373728c0375f38371c2b2cca596a6da9aac3a389279b64524d20e8f79ec0e658fa48eae5ea36719b0216466304f09f40ff80986d4fd4124d2927bd56163fcb51409916a1bd90c61287a39950e6fbf2c93fb3a26a8626f804fc56586b8fc079b38e65af5e94397c0977ed00dc4cc8aa4a6086a3c8595e212cd49ed5c793c3bff7d81428d06f959b30acdf0c5eb66ec248e7616a992729d2f22e007dd78cb995555461650342838d80fa9f7011c88028e37a2093654e7aef7ce285ede1a70e1212c6b6e0a0cf95904051250917db03a080b9d48d7aca58651226a87ba8b46523f91ba1fb85750ad287e1d72bf45c3b1040928a420d18b1c405ebde60c7335bbf30fc74bdfa99b8d724abe76afaa004d54195bacd9a985e5dbed1f61a9a8effe6c7d9368aee8ba583e64a46423f309702c7ad912aaa38bbad7e87e6dc5c4b6178ec8bdbd05c56754c21425ad111aa369aa1225395f2911194d1d5238380c7edc187411e05d4367d13787d8a99d9142ad8615652a32acc4e2aedda72928e4a12eb1ad9da44f6c3cafbbdbd559d2a7f6e5eaac9e379196835ae2610a4db2ad62ebc88b0a8861c5d8ee512a890bd26516cefd0c49f3c5d49dc00268ba716ef658323f16857a528976e58e1af4d256e60e95c60f7f0df252f1adc65d0fd2a4bf780239806d784a3f879e4bb690ef378782ad5a40bbac0c0decea42005b2d2fb0a6d1111170b76729c3a6f4da8489ead486542777ea72255b1e17649a2966f31ab048ede8c57fe37c162b96947b0a1186d8b9241603c2072a77ffaf3dfaab76109401d1bb872ae6b44d4511f694a738f5f5944b8a78d0fbbcf907bbf6c21103f948c48f001183d7b4d578429b49b2b08ad72be7a063d8eadebab296864cc1327077c068da087380cee1bb9d6270af534b084890926e1bdc7ab31d7a3d2e3d501855e459a56ec686879871736ce8d51cce6b1297a76b558154a9b68081468c4a6fc37cec00e0f3a12a5d840f7c9d8e85c059833525b2e33e0c83aae498f9bafe9e571229c0d71cc81c7a9b2902dca66982cf59a5c0245e55096e141183562b5d2ae6d8a6d02e7de31e58acbd77401fee99383a36c4a81b291050fdb7d0957d8f75af9791c1edbe0f8a69c0bcb84781da62d1cf43613a485021743dc06be2a36940a84fb3b45595da1f4f8c51b5d1f7e83c4779322bca564dca55ba95119d100d81af54d93355b2646d037d949b6b6d5fd7680e96b2fc793ef39dfc9eb0bda2da271b82d565050ec00851fdd8af6bdb9f6bab84c3d6afa01cca9f2f2f4c14aed0f36e12f2b1440e78e271fec13b78d49d780001fac7918d6be74dae7bc75ea79367315c9e82a06f13df2530dd99e63ab86551c0b492f8027a7de37d62a619da23e00274e6504e3f3049d63a0439641869431e0fd0e359ab4b3d49616b21f9d7bf306222866f22e20e03997c3f12320c8a4cb81c5611c5dc9af7523ff0acaaf774ac8cdcd02706cdfebf34ce8d4598f6cef74e748257699a842dbef912d0cff3cc32540d77f53e0b041b1d363b7cccdacd29006592074e4f6844439ccf32922846defd186a4db48a07455019fbcba0ed185fe6891e717809d540ffd4be5e01e609aa6ebf75b1ae646ea6c910116403fba92b27255083a8f6b1518dbe89bead68a3787d36e6a81b7e8f14f27d815c7476d2d66f577aaf0a21b1d15a8943f4b2c418bee1ecc8723dd6d59371680368c9f80cc64486d1d43ddaf81be4dee4a8484359325bd8ce9bf4d2e0c8edbf6cdfbb9f431635067e37f70b8e3012f262e4900c78629c36f0e0ecd84ac03725cfac30a7029a4e7e189edae672e418e9c30179da275a1ece11ae8503335a09b42f840577f0f194beb3c71a11766734ffebf958088900851a7edf4eb68530353f6368eab2e7da010389d35cdd46121180741a6d10c8109b15af6bdd99c124718760601bf809153bfc8f2c60b079e0fb4a973bb6e6daf223121b8032cd7b257394e79dc6b1e0dd369999fbb5aa0c15eb0db6d87b1649f06fe66db7a1e19146a8e354ba44181fbc92001b938f43b5f4bd6b7e611306490e38e5e48715549318cfaca592a9d378e383af99d6f1646840aee4176b02c11eb586fa043173850d62560bbff01a0587f88544ad3911ffc84d2bd18e282ee089104caf0210185a8ae03e82430f055a310ff62573ab75c60d7c004d8c256739b9956e08c518ba78c3aa28b80ef4aa4a92e1fb89d70cfa5b9e03b7a51da6bb90e01e2d8b6d9dbc76d74d8b42ad616d5ceabf9a39951e4727e3921c072f7a701dddbe58f6e45a3ef37e64121c5feafce041d66e9f496a621f976a6d3f9c9ca045ea4bf49ff69571903b4971dacc2b43f1407405a39575ca81d052234e4707d5873583e72b6477af5b458c4d8b946b881268b68409b8018bf329ac8d539e357c8b12c9df0879bb913ff03749fbbae4f9dbe44df1ce2bbe6f25538e231859657540d9d348608e8331dbaaaa25f92905353dfaca7863a371c66b96e9ebe79f8af330f8d1973ce2006e8d5c76c137046e70ed882580e368bbb634232311177968b40fecd2e72f41150e686c13699dcada9b66d37d1cd3433dcada2f2dfe2f5772055dc32f3e2b152841b03524c33e613aec1166680c70d834b5c7d0d8df405534da366c51f2a5f82fc0ee380e0e805df17cd449fdb89c83370081a7e588fee6cdcd2312d39dceb8d02eb855c5b0015a559873b1e6a0ea5cb949780cda3fb86b17967bd3914c337d8fe86d2e71dc3c5846b10c142812edf3699649eb01894d1dc98cb9c3db7feb4a01f7d28e72f1cf39fc6c85052e5d15a12fb7629b88b638588cd41307c2bff08200b197492a0b27ccd00120efc3756a0b953dce19f01379465e25f6c5d25541d5a0a26ce53a595ad0d00127616e74ef02a29bef53b0848804722aeac0f41ce45d2e0290987db0fcb408e0cf78bef55fda7ab06184ec7e12081af4782f7390a8ab7248d9a428861e724d43adcf34f22b8c669ab88e60066f35d7614931271aa64d1bf4fe8a4ce45ed93e6d0a46e2990303f60019555771655e8e44d214c234dae6b5b7d78ee3f91acff4f7bb6890d16e8faba7b161591d4584a104d7902f4125e49b9c9ba1c690b002d1ab54a42c1ce3fa3e6300c00e3ed8b8eb7603a025ee91ed54892ca96c98de4e8c85839712d94a0bc67363db6f8e7bdaa3a3367b846e1ab72801c9359c0ecd19d830540db044d00f7423e5e6f64d00e118081f364d7e40edd61236829ea9e5ce77521c36d74693cf08dbb4dc0299ed3e96af8514023270fb57850eb3b8570d3734a8575d409ebd41a16f437f3321be733042a68b9fac13bf79efbe25c187f41e43187f3047e4845505888908b20e5cd9638e8035c3a9539f28788a82f90b5fb704d4bd4c42dae7cdc42cd7599c929f0a0babcb57f1c1990ee65e0ce5c8b521dc95ffd4f4ff520cfffe9ab7b03a5a4b05c111e4426815cec6c4b0f12effa28317342114359508734361ebb030d41ce1e4754d0e249e1280da142d18105ffe8713661486ad7c77067286e407aa58ece29250528cd4bfc99825c0d3e7150bba1dd1526452b79cb7064396330157351cee0b7ae89e5dd5e0add953547680509bb7a650e5be0e6ac6f3e9f568b8c0c87ac72b3d84c527073deccc62b24b47e6ee289f673949386b06a371fbc2c684c010591a73fd70059c11435c4b20e4e2f42bfefce47c35b9708ca2df9eeb18f2784722eb39862b15beb592f154fd3062f926c503916d5b453db4c50dbddc379716c2c98581ed73107a54947fb9032e7e1f3731c8df7255b79ad93d8b53e5a4caf597ffd85946b8c3d627c27cbade82b3fabf6b1ad9e0584f2a81d9306671a3a89e1534cedd42564a1d31dcec109e4fbe8105776c71b9726e4458f518cc3f45e0eebe9be96d057d4d58f2eeaa8bf34c3dcb413618c54d909f4eb9d4473b3a04d2aa9345c233b5913ce8a3801d61fe455318f8fb11fde8a9b0fd391cefab864f9f1294dc8f2004dd898526897e613457b59e12bdb8c0dd0ec4b2adc2d6bcdecdddcb8693157ea05a68db947d60d29cbc6a034eeca34d351936ecc06e9a87bd6bfbbd1a6a8c7c816538154fbf3e1ae7e2463bcd1d198af8b579a6d63a3c40b28c458d91b21d8f83d9c71cc551356cc5625bfa8d5b6644d169ba176c49831614b4da2004e79026fed82ba05409d81b363cd58d45a993d5bb5a194de90510016566942c3541a5c35b8db0eab7789a7e1d946757164613903018b724792ec151185ce9e70b7a01517a3257496350cfd5de6652bf2544b1ca3490f4c772bc819947e3e8cdf020ec7b5ed379d31f4ff590174349c8747de92ad50bc50d9510f403de3c78116fbd01e618fd4ae63879ce25fa7386080ecfaff6d6b0923a7ba35d20b3c1e8f24ee751d3ff83541a0b30010e19b6c5c424301131f1cf5e63d99b2fe0403565a3e70b13a9f88c6c297f93b42e233cc8bdf72924041e7f9c9dc676ae4089011877f032ef433de52d20ddc74f9dacfd3468c103141ef2b1811627d6b7b2afd312e20c302e10570cb5d18fc82087adc14f6a0c5ddf751f5e6d03278cad24c862d087799265f58854db8109e23d9a844467a51e4db56cc95618603b3a1c3c3f032ceb39761c37f404bab78d1c7da0020ae596e3deca4ca9db86790cde712b4d765a7b25469d2291cfbf2a62d1b3ee4515d131274f22ac521931f5858d9e85c7a2bdb2b0aaed3684cc90819632c07825c70500969afc10d574206b83b2aa52661702497cdae4549330f8fa017273dc12a7feada974ed0de4be5444d6bc7a579c80977746658eb926e4de9e3a492bd23532f80e4468c05dbef4b92b8a763edee8278a37b5ca7ac4ace355272c085a1a8248bd4ef8a366119a515d663ea85c25679a31c163b15c5ac58aee6c7b01843a398519671d30cb0aa98b132410772e369114567930ce3241e5ba2cf7482e54e55ffdff92474d46f49a246b0236987c06517950677139122b1bbbd936e07591036177225f5bfd6bdce654d7d8ea5b74718d6565e89b7f1027ceb3d04337f034f35f986a8ebc05ea232a9b1423e5e3cf47ae5de436e88a7e4ae52a0e6dee959c367aa5fa52cb2e0ee10ce3d13da8b0c2d5cf5d6da37c62b3c1458c28b524ba7a1a924429584b5e8d5578d1581951fd8a5f3f283fdfb08360f9edc34f0e3bef1b8f7c23dacd6f5e25c51753f3c0546cc452e0ca20958a7ee0ed7230bd1ada4f99d474bb206c25605098c198cb02286c0d898fc5e363a1b6aeab16d158187b5f4f7166c258e74ddd6b6334cd15501893a04a6792c4a3b0becdf3d9fa1d0a7cf630a97eb95214b333074d26f38213cf9b3ad973d7629a83eee8efeff7a5f4cde655fdef27510fac3b0d5825fdf5f2ffaf31295400cc4153540eeeec755cbb0db459519bceb80cf043f3d3ef6ef5ca9d22352f57a87d34bb17ecd33e77eae20eaee27700d991ae04a840e64233f1994e33e580c96748da581d0ca6f80c7a5e383c9c5ec862ca9a8e37fd11333806848398b1aa4296cb435443da5f2ebd8304b2623f53a1ed563594854e1c99105f35f4959dc9757d816d963dd4f097baa6092e9db0813a32e4b1779a2e22af2f0f9e6c3ada42b5ba56872b7b6f4fb29808b52d0b41e99b0c9a57dcdc19bf96eec7101215ad925192a5fecabc01fda1e6b058de32cb914f2763e0a858a906a60823be95e08992ca166c52786536b21d6733980a482f4306f3a6ead1ace815fbb0b9c3aaecad1204c69c92ba32d4b6a9712e09380f520eeee483e94c570cecf0fdc2b4043e103bf037d08da18115e5f2eaeab50669f758f360fd7d4f589e7bf62e1d58ac992499dc11bb85b9a59b79259d34d282b0db6aeaec04b770e4a2b5848063333735449d979d6b7bdb5004e5cb3a840aaed66c92f26d0dfae87efa56e24b16484f3847ad54e8bf99bb28c7de2f4412e5d83e950b92322b2f798ea56e60d84995695ac5affe2ca03393f75d9b70c005c3f640c99b16acf080963456c16d2c6f56b1d7e996dae0f235c8774a919f361dfa32431b473fe47f11b799ccde8fd12f558053357d3f4e9fe4d936a3ae111b13a0e2921fb7560dc0255bbee50c45bfec249096ddbad308ddd7ed62a464a9f08a0d89d321d04ac15d0290514fb00eb1c0ee8f4e3e7c424d7001bf36f9a81b3e6f79b88cbbfa936470b2ce051d0c8a6f097e43b16465a0f8669d406a5f7e08f5bef0a9068373b76c89c7f74ad3f4589439e30b4d86458d6f46aa9f8261d1a1e0b487b15b89ce75f2d8b9abb0de2734aa319081ec0603819e654ed6b32ffeed2a0c6c960cccc20b391a3de9133dd4d8d81993896d9ae95e062f99831aa8671bf85018629c53fb1e47196c08c5f3d710785d88366ab2147bee5b4c5edf092fed525ec7ff342b7833848a28a77ec0165ff1354a3aa2b55908280cf0dff5f694ad1c8f967a515a180176e850392a2ec411d76b3c9fb1015726292128441bcee5f7ab3ea78b1fd45c1b6ebc180a20970c50a371f3c222c6fc8eaa8be735ad414dbde3787f837cd39fdaec089ec1eb9b8dc52cd7010ecdcc38c36167867caaff34a9016e9516dd87e3b8dbfd7ebde0bf1d33c69222f29e048ef449024f485a9581e55e6057cb8c5987b1752e209f0ea564ee94d62e466be44dc00e917d16761d709c12bcd5c837a40ef3d6622eed47e8529fcefab6dfc3362ba3c6a0ba9774ec8484e4ce0e2210365c7dc2b1fa248ec491ca121eac0ed6d3957fbb61957a848eaebd32f12bd23da71c8136bf1f73f6ac2d96b3ce5f83faecd6e5dae7c477e033d8a208c8defeaca1938f68a4980d9651156c8d4748e857ad4581942dfd06fff5b27dddf3a0312b449f371858840c19a79739c042511747df6ce7ab519f351787523835625d426cc560c616062c67b549b88703bb60af9bf83429fe17e4659c7dc95aee4ed36fbf5314e49971471eddda629e017e15be76d02e029aa371beee470e88e4396e85597d26a1c002ad515f8d91d7c2748f9073766c5bd0785f6eb6a90b1a5f4dad7954a8073bcac4303d413601698935db2b2ba86b9a31ae3a1c7d48a4293fab61bf7270c29afaff3479883a29b7c9b74e77879ecd9d1ee1a55c88aa90ee564e57863f81f62a0136a1c258e4d6e6a5d6d635093d90005165487a74701b13b2a4326c4d7021b6a94b7035e512fc749690787b7d449e54abf691179767ad3e8a5b13c1f906b7c2b97d262106ea5ba577f697c9b3f5ef35aec3a08091474e18a2951aa908b47156bc620032dd54d9240f441a69aaad366c65589ca2fc83189acf18562cc33617cf3879a6a61e0998ed8ba3e13140150f0c5fd4aa042a10b12c0662897ac67b6f9d3a0705766fa44cd8120331486a04a1213cd812d285a7c09ad6071868c91ebb7271c2f345d1b73a9baca8adefafc990a612adaf646ad0501ac0fb5f3b28c6343ed9a6b757b435d584ad1b74407748ad81938dad9a0549677e89bc4d3ad74ad131e007b22a65b2b7e63ca38c0c5abb12b578796068896c9c2b8d0b48cf2cce5c35a4e83c2bd8206650ee1bcb3b05589bc12dd0d6de6148d63411695962b2cd0b9a830f39669042ef22d0773fdb9113c0c7a115a7cf7a8f1e807dbc19a1cbc53729191147753064fff569e3db636c22426b61a24aa18c4dfcfca3de8d633e6a8643de77dbd6547f4c553b0a5a4075619dee780153a2eb5691d3ac82d23a3be5fed07fa733d7d22254ced0b9d615c055e5dcbaa49e24f7fb6a913fe14319b843f7540828850767d53d56413584c467a7fb5af722588217b73ac9f88500b652b6ea258544e5484b2a884160a6ab4e11e003967c851679b3eb899789954b0b952a1b4a3cc62b784fdd66a3d3c0e03027e918bf8e51a2abac5ca7d8bee43f171b551c9574de8dc1f9cf92be9b10ebf2bbf8ad689a337bbb3a91a18a16f486e3c2ece6a80e09a253de202c8b545cd5dd40e4685f30cffde3fdc54bcc179a1d1f67e3d8f084ea2acdae9767b8d9610d366f4933efd3d241d78846c89c86b56b15e6a82407784167b5aae828e1747c93fe890a9a0324893f9ef84f0578b6e6ca10326324385d4dcf793f07ac11d0c5e0b5b21cd15ff8f62f17a0806389369969b5532335b1dec10d70ef040ee981934e0810c389f1b5afef142cdc4dbafeeef7131fc70bbb3323c04c2124cd28089dad8f187bdc8e4290400f2c642ded91d8529699477d492b701057f6d7d026fa5572cbd8ba9de29036976873a1cf4b48b7f6e2d8e87f82a1842129c125c1f1aa45abeb7f4152fac596cfd5a34c201694ece87865cf0b0ce244c116da482264b8775a5a616ced571c561f57a5d1e6c159817cf51cab5e99d2bcca76fca77fa2b3feee24be2ab6bbc6c825adf34f5b25290c4a12bb58ae6bf5fb1d1d200850b39091c14627d56a4d36fe900557e5c4654693544bc64e9ea273836d2e525fea7498e1b7cd032a1d1637e5fa90655d05a2711504482ff12088449f607cb1474d56a650bfca88d4a62829b8bcb3b81f19b1c0642fb11f898936db31301ea63f23c634c36d668cb3ca0386bd73ae33f92a690343a1100e10fde075d46f565295d1e80050616dc8cd4ca72eff50f639ea22dfa6e8fab7d9721b08e9a2935e8e2b4f58c1476004e2558422e5dd738b8b2bf51b483711bec2f97d7c865e1fcc4599b17aeb2ff12af267455ad5f59d2a05fb4c0cc4eed2702fdef646a4d4da86067200fb0eea213caed38da8127405df208496e89d80e00e10dcdc1c69790bd71340adeac603a1437263cb3b2e3a6565c0900208fcbf75186006b0d8b34a585a0b22692c3c003c10a5a387a0b093a743909c836302d8b5be5b8f5bd66e515efdd9f305467b1a85c5a2674216c0cad01f0e10202f51f5af4e00c52bdcedb82850bbd8234eb9faf34c173b5c57b728bc8487fe55e58f349cf907a5ad2c920a56246eb84eb989462d09b9b53b2eae77a781d1a924af31c16ded8338db496bb5448f4ba6db68fe196cceda3dc42540e649eb1b6525fd50d5b572504d5a49415b1d0c67433354cab7bb00253fbc7bab2fab8f04116a681dc7624d6c8453fccc8667d3b8e5c4caf1a756499562c697801a4703221f459897e37a414ee19b64232e2efba18b8f88db0ea3dc315a06eb60c62a5c12e5d4b0749620132096e5ac24ff35205a70da99646bd12896ebfdaa4a849405766ddf49a6840cd7bb39080fc5c2e040f7dbfd9fd18b733f9516e65429ec1d0405e7f73c12863a8e2a05a254a7cdf681f5f969a3795d1bd08bd50d415f9f117caa8768966a83e51148868fc0a4706530fbd329b86a7c84c92ef16547ed18dd04d0e965758e895ff478b75f52dbef9469db0bb2c2c46108d880a2aee897597921afd13ab576dfa70c70d7636ccc572bd3efed1981e39e68510c1288a7ef2a99eaf1583fbc06a0e46987fe12b33b99ba7b65053476da39f820593e11b1ba37898b0e72a26c27b1ae09d9e5fd40fbfff8943f5975bbe6b9fc31677f2906e72f7539fca4f0b6a61b7bf2a5730b73b5cba02b815cf1cac613fcaf90550a56963da82ef452aa8c35273938a514cc4076794c3f660c5f8e16a15884e797dfbb59ccb3d618b6dc0060c7000aae48895acc4d7b537e9e17099dc80000163eabb9e2a883f51eb639b71deef2501b2eb32ba4ce6725d5448df3e33f8179ca78b3aeb82faca2ca85f6de32828066bd12eb3fe0d4d1a03a1bbee760a5897530fe9834d5d6e83392321bf51effd8b31cd1bcaf48f3b8c6165d765e9392f146e11a77f85ad5dc4c4879df5ff1db4d681c8533297fd9a033f374cf1aa6a96e6e1c1e34896c650576d977b27be4a97d8f9efc33c53dbd2876eca4e91cbbac097a7db364f716669db17a6ff54956653439aa666349f2ad13475429fe82a90dafe7c5af051b69b743de517fe440ad15f350891f78a896ffe8342ddb623644b54b3b2864e4bf9b4b239080aa53714681519a338a57243e8be53c04853b21f0da76b22d515ba137f8c08a3e7cdb5e82056505a0aa42124ac81c714c232fe361c2c8fa2c8c9ff6b0799690d33e30ff36c37e75a1c65e65dee78529336feaed70548cd77b8924f6d9f074ead1f4fa6be9f8fa5c61f248a96375fa12be52e2a20c2479722ab8ebb90dfb0ff79a54f4730c26dedf5cf74d45f51e25b456fd09ca04406e13437f4ba1aae9db809ab4b6988afd9585c6b693e4f9abf94e8e8906b8e7fe6090dd23296aed6078209ebfad9e951c3c8f048f76db5a62e4504108996c387d02e3bf3e7bfa3763f0b37f990ba76bc23382dbe6c083c33bfaba2029701988e362379cf31f47ca3199ab9739402aea6675cb5d85d404dec8c0c8bb63da99e099bf755ea4f9a1b3a93adf009b4daa9c1f4f0b3c0f16ffc87cc25a29212316261311b7e86871e4315009da08896051e0b8f5c99010a1db28548f05b2b512763df8a6415c8232cb92323416b1dda6a9c6c46203677c225d4f05d335cbb1b781e35d6c8ad18a7f96e54d01df5b8bdd20508653aec494e1f76320e3548e3a3deb4d402d04b04e0085ac7e1ff0daa011b21b487ffea84dbc5b30419245bd11b8aa30875626d99d6f0e3f1d0fc5083308c2803d4a833a92ec52406f0821c5b9e2ba78f51001ab144dcbd14c5cf12193ef3fc212fda770215d2db11cb3de06179c9df958e94b458c1942a60f5053907ab05a47ebb72d3feafcde03e471bf447fca0480d90f1751745ed463a984a99f486b4e891b274605662b4d669194f7c08b770c9221e2956afb04aaab2cc76379fcb45473090231bb505c966a118315d225df341234a92b0da2149469901ab8d7eca48f471ee4ed183fb06f44d9c728c4a87860de5a1013bfd423da516e87c505e13df78c6f5941cddc2c4b9376b4957aa2e8fb1a2b66c1f5b8d19cdd201553a032ffb35b8a9ece134f06a9d704211dc8cda6de267d02eb5fb6b9f311458f8be77fbbd6722277f23ce7b7edc91e90d2bfa627e5cad8d6947d1b02c1d1a0b18e2d0dc63218d79a842e9dc136d19591d9959d9898e95b238f3da0445c1ba025efd43ee76fbe51d9fb33c4a2eae4c142dcbaa8247803231cda327fed2c83d0eda4428216b65e72f86042bad15608c3620a54a2748a46b5df2e70dd334934b2993578a907495f923ed3dd915de198a42ad3d1befa3f3207ee2dcde19990da6726987f186510996b8150cd52ecf3c2beb9e5b825971d0ca9ad9858cca5285599191c41e1f1d7b7495840a21ebfd1ddccab91ebfe24dee6333bbec1f7b7dd9df47bc37bed085c8b22502ff310510a1fdab1f360251dce8d15ae5a7c0a0e5bc764833caf08ad358eea5d00d197145dffcf0b7bcc5fc832f3a00531f92a684e2d716b633931f120278c99a0940eb21c5cfef1783ab18e3f907fa1ac827fd677217a444247cbd61d135aebb65bbe90526d0bb54457888638d3c40d02d64c5568900b5bf5db45e4994c1846c5bd04aa32ad2f44ddf795b94cac48532bb85473c8f2fa04f61c32e55108603e6766e8a5461a5ef6da1b720223cae6609bbdd85bf59715d9f4a588c53564a754cc71981e93e78e246a5e76e13fe6d9ad0eacb42ad3994714f8747a737f2cb4f01fd4ed916753d3834b3f9b70c8ccba5a0f608dca9c7a9b6427c9afcd89cf3e2d21d072b4c9dd6b86c87a5c956cd61c39ddb600d43dbad568640d76d403da4f579f68e9552ffdf5411812381e8ec8fb60aedfe24c2b5479d39721df7f5a5c144ac976b375fb86f723cd1a6375fc00b157b6cdbe0bbdc2df5c38dbf31b61691356d8f53a646823b4b731121c5ce2f24533f6c1c5c686ff6b702c3b1dd649f2c92edbe183fdd8126869574e00908812c7442c04da69d3260acdd6964c26bf6b17c6f196d504d546a5d49aa16e4cdf38759d14721b34b816bf71ebabc95ae0cfac3faa78d7407e65575c304b5e28b1cb64e5fb13a919748376d2a3b72caa259d369a7d1e5934d102403deb762dc5394c2749059e02f39fbc1ffbe44ec4efed1b3571e967510c370feae785aabb6f2f35f738f67d3161850a5a5aec8fd91a68a0d4eb3d4cd8ebe63ccb4c62711f517d24b9d382061386f6ce825d575289d791c79b5863327e90c7c76f233a96c6ffbd8b775e3acc27ab837bfbf21dd0b765bda37f64b01cff0bc576a1353074692bb8c88a1ff984dcdb45af3bfc6423bec322b9eedc3a9c7b18398071782e40089a5b8f435b5e46b078130692b5f2f6069dc0893bfc3aa2f08bce74c2c1b35d1d4f29e3fc3fd4d1142329f4adc7c0838a178817a4d6e3080160972817a226a34c01f8bc845a0a49a7cfe55cf0e6d3c09314f537123ddc362bfb9666a761cebd8004f9d308b40ed57d54514cbe5ba805a131c5ce8440a648a56c4ee3da88a19973072bc102d2a2347e8383c27a6eb3d5686d4ce6f1a78d594f117e66fdec12cb0fd96fcc612f53bde42b11e3e58d4fea65bbbb551849b7aecea8c36b532c851e0a8233ed00f88f08f374d22b80baad59051ca2ecb5dd34113ea03d865aaf552a49bb19f7623a0c81821d85919ef5ece225d50b7fa4d7a879728bbdf801dfd87402773a2e4f7f89b6d269f55f3fc57f73de358dea948bc2e4d5ad6ab42274a0d214102bfa78419e51e5fb2551df0c36baea2e7f986b265f116fea5d391c3b6cc90f97bc36ff431ecd2b97824fd1b2078e1c4f4e0749efe2310c108b86dffe28dc0393df9807d845cf18e0635de932318fcfa67620a98d42515b975f5c68d4e82df8db2ed162112819837275cfcecb238054ebc21d9b4fdd226f6eb59e81f786abddbe57c86264cc5524232fcaa2cdeaf65e78a99b924e7aa2b8effa9a195b32b4bce116f0d43b9d629db4a18cda4e9803307469e4fd735c36958ad63341a3ba44f4be44254fb39cb6ee0d6ce7f4d1d8046df5aac0494c170060311d764cd284f8dd23f6ce7c72977a621831341ae4485edb66a4fb5815a3abdd2945d9bb1128293b2923ff251ac732abe70b951d105d71041bb17fc15faab2060f262da4f1df3e9e4819927b3cac625021132d701042cd99bbc1c94590ecc4257f63e3fee0b8b4425667066dc4f2e45b78b01a39bb9f914b16eedffc9ca20140383c28acaf5608a751f52bd89d9d1d73c255d236a9c16d76e8142df7293250416617069a43c2ddfaa2022025245d077ba4442f483acc385cd566c931deb4acfc3fb8a62af6da4febf6464c103346361e43c193b54e175b242012a730e9f1d3441aac26fd8a0a6bf56e7216b252cb294aeeb3b568a23a713dde1f60ee3496a9f1e8dda9afef1961c351ff4cf44dd9cd388269ec4e5ca5b0aca0dade74528ac787af07cb4523ca87db216d8c1f46b29c1a0fb2700b026c966c128d290cad2b4a5500e72a5fd0e80f155e16e67c592fad67f8b01560658567008a5f4449855d203872e491d5423a7e4c7e8cd5d3f622bdf1c7cdd7ced50cd2afa0228a004805d81f2af9c2f9428fa331ad180270c3cfc21e4024f439586fb09b58262e3615764c65b31d98b44e60b377fdbbebe8e9c8ce497b8e0ecb7217681901883b99a6352966a12e45ec4158a5b366ce436e15a6bd2280604658dffec701c3996e4c62bd9d01371c3536ec6093f6634a691b683d5b02a923d0ac97c1aae5126eda5be9bcc574a80a5beb10eed96d1c29f90f8ace7a2e84c5036da31ccc483e23924467aa8aee4c9a29e9069c002fb43af3c1b3f24cd02e079053e7b98978c1c34dd9ccbe118fcf7ac0f34335047a5f26ac5b92fa9229971dc5f875a77cfdd1c19e9de6e295225d7717a193f535076fa16c3ce70881dbd5328930ed139fa82294125b9cfe7f25dc6e68bad931801833bf24d308579341bc0cb3f9b331935827e36ff36606208cf91d65c289ccf8a52aad2a84fe2464730bd9a14f445eb1a5047a16db37f84385d4becab12662abc5bc33d4d4933f9fa8f363cef45cf573838f19df8eea9285d5052a5ca4087e0bd76d800a7acded5b445db9ef10a289b408ba2bd945d32f409ef4620edb3ef8b63d4983e8bb0b001bd3c99d3a4ee68b4dced31029c145667c4cec83b82424d98809e5c40f08685b12db9363c4577b58ca583cc96440d810436321f6d9ce21bc4daa88e314d34164150e46a3bac31b15026e78de966821afe685d3d5570ff4bad3a556c273ab6d32296f042b7de1f4498aa2350fbb049af61a65ac18c6082dcd97845cff85b668cec4d46f3f7ca8cca66d6c08b7a89c048ba2720a14ca32902a4dc774fcedbcb9db359ee4599f3248ae8d805e849bd079b100ebfbe8e43b5339c736515dcfdb235a6f4bd7d0204f53750f7fd42a73e0a0ba219e564c8de7cfd351313a6be836a6ac5abc943ec676d6c912c7dd9dcdff528a429130825a84cd2fc75f87a15ccba709ccd70437c5f4f2e2a4b700f1c8d8c958825371572d29a582a68c1082bd087fb179130d1897018e4558e626cd0bc9445cc7831542fad156126952570b851c6d515d6b43deddf2081d9d89752651137f23c0d46a832acf240823c07f4d9da20c1a151a8321fd820fadc9c90c145f9b2f1929cc9f8cb29b27c2a018ca334f6bbe60bb260dae42f91b38984d84b135d502c13166f9dd6c8b28624a16cff464185d4588b56650802f4a5e91ed999c5696d247c117565e2c6b6cf66597c3db4eaeffb8f44bae36e4645a48b522584a0e81e9f81b7cb6a5caf250140858376fc1b079f574130fcf33dc843da22865f9ca50798dd6f98711a372ce992c34aad2d0436838255309b52e5a60bc399bae9e9011d2b9527f062f56563f99b8ac6e0bcc664d52fb3f51bcefbf1676fca626c5ee4c1555ef6d5bbeb82d5055af193c6c37a590343e35ccfceb9d99497c533da516290c5bddfd3417154075c0d03d7750ba2a91c92ab6c146e8a03285718b8251a203ff7b52df1daa6f97ef32dd29f81a29db23cf6aa0d4cca2f40eaf58f1694cebf879e0cc29089703e66ada488e0271ec2b396fe8ba977e92e7c197a5d580ad65443393f65f3f670a40a5018caa11cfcf9db111cdc82d73ffc2bddf334acf8e602af2d9e336d122adf91ae627c0a20154d5abc1352cd5273969d1c22447afa966747296ab0ed89eab0401d7bf160f04bc859f70351e29942cd87b1938b4c9f2517cef5897e42671f9fb096da788795b8cae03c2626ab75ec2d0e7478c2e65cba539540f53d0eef1944d04349597700b231e06e23a293d69e9e0c6c918df974c71c21545e66395740ce8465a810ce240a692eca29a1efda924f357a76e6c117e0538c997b648d180502fb949fa91e80451da91de32114a05f02965cdebfe538184ae628f49ce207f0005742132887d33b3513e6af93dfc95553ae7595e87b277d94594adea94cea4c426d83c75932a83cf01c8aeda588c2a2dd3f727f9a4ce5110f7dd4d59722c84eee65ac4a812b632138618924f4e494f4b01647f3ad671fe65c9663c2c5b75ae69876f6616939c30674fbdcae19ad037b31515bb55bd073e61486aa1a14b1b066d9d4559be4173fe66ec5facee5827936a403cda3fbb9898d9f2326e50c60634393637f893ac2f6e40a2e50d752747fc98885f0b8840df9a3083c774a8543700aa29416c3b60d43982ae593b6eaad68572ea88cb6f35026a10e8ab07591755f1938655da069557bd6ba8bf1ab1e6bdc0ea4efb78669b0fe64e0c7c56e814502b5c4043c85f8896c3c41eb05d8a1ef463508afddffcfa7ac65e35a48d4c1dd089567a9b272cefc40f86a5ba517e7edb7c0937f678b7dd4c98d45f950cc2fc4802ba915ddc3bdc328b531e2c6f799720d84198a864f5c4d0deca5792d5e3acda54463fa8767999cd0a7b9555934703c2d2570ba866fa142ae108e9e36232ab20de52875d4e61a7db45d0f43e7a267453265c4bb0531f98e622b761aac44c319fd7ed005bf3c53ea18ce047c612e2361b4a1f646ab1bfe83125e82851e2e07e16609baf03498444966e5338acaad9f8e53d858f1aa91fd512555d4818b321f4bf013eb8c604b882d89bc76d2184df042744d4d6a30e13b9059541e9870364249852d313bbd65b9bd8a6c662028f60aec8af87ebb78f4d814357f7dac6d21678b6a92af2086a6bf95ca0be98deb4861ef72ada18c747a481d74f223e04b96df83a4506ca5d55bb192a2f891c98ec2299aff927e9a53a7bce9445c965f854b5646f7ca0551ab79f0dd0a9e19b694df52c338a81bdb385723ef37f45304f8fe6d91f3f10eb745bae6aa24eec45174a2c5a5071dbc53943bacba2632cd0aaff5ef8ca65e20ff09f845671188150ad844a14c333232d1238411295e0df7293272c9e76598e246ed1dfd9188fe6be97c122bd592c80345768639470bdd7f8709603ad6c52737a2ef75ffa19ab91dc37b2aff91a4c9987a0e07bb8345130c010c42fd2e60853e2e3a02b90aee227c29d348605f91f9040547e5a693463b5a80706bd5589c627311be582a8d5bc340b26bbc4829fd3be89adda6169358639addd862c6fb9953d91162bdc602267e099ef365c3d822c1ceb836247db05ca597a18496f50b46e9996864358048d36aaff470083efef13e42887960c2c386063c70b75d25a90d3528be8724ca383ef85a91a98bc33fa2ac45d22d7a82a6b63544c4ec08772d298360d88ef6e582fb765f5a0896b5da2ea10c653d2c2b986d893a2593ad2a7a09a44828afdf52421d5983ef6038cdf4e0266833907f6db9720ad2ebc11eb52567f64591babaa08bbc8650441dbdd259ff103a2dd9015ddd2f7965c99a4de71e4ee4c9cfba49f7450120c9e732d2183f07b85db6b393362215b5cd7683892eab979de2361b6a9ca11648ec5df451c884d638876f5abe62804962044c3957eefea214e90cfbff2daaeda10d814d9b8706944b9fa42956601e2c73360f1d53a3f2f2a5fd6e8e9de161cc5008b20a3f05551f93f457ce2ac7d5cc88cf02b10df0344cb5b52bf4ce86f95350024083b3e8395ed8c23ae49a881e97a047235f2b66c030abd5ce00e339a0047554333fd6c001019a02b09392849d31d0ebcd55cf8b80c17be15b249e967084775ac44a4cc35442d3d0ae1b7943059405264de6b7a8a98a49848314844e327ed7ac8f2f2d3973fadc0a269f56e59eb9507f5e51901cf02714ce70e2c11a4781097dacad451b62132f885770eae37dff78d7f2e6b6446c6bd1e2fcab7e9ee39a2720801b2810595348bda6fb0145703016c522fcf912c6d900b1125c347923c44cb0a3b468b6d89d7be6a36dc0ef1be58ad82bbd8f5004f7fa2b46fa8d02f31fdd5cf62724ac6463d8e6a6cf26325f5b75abdf52e22cccb0e6a8b3bfb355b7d97e8a3cc7981a182086b9c1df352d856cf448c8e01a21d8656cbcb1eb9e99a61075e9e238a75bd3127b425f69a9bf18827108fc532f30c1211b381db3df5d287326957c6eab0ca9056dbab328e0b6b77dd37141425ba89dc004dfbefc5d84702d8d39640fe89bb37a4d134becdd140073a6c40d0f1bc0f6869ec64439403c3a6fce2280ee5197a7df045e691d1835a4df9c356fb8efde3f8711f016326caa392a401c0f3791cf264fc5af4f18fcf55fafa030956d788180d51b608a76752feae6ac034c3ba1b2e4da589a83cc1ac512328ce6f65b5972899df41abee858ecb7f5bd8a7d457f6d7d91ac89714e14f540e1c35605876c35d04334eb4760ac1820d28ae4c76ee95d25db091fb17452f1b1742929e249fa8477d04bdd80e79125488472f99a3ea85bf3bf51fb99bbe736bb1281098521b6ffca38a902b2d7bc87e6b837f0c8e5edf20e38e7d649827cb47454bac7d89adba1f6a5fc20a7ffd1f0954716b22c52bdef931a91c57e7a54a11ab5a7399a98643e0862ff0c82798fce614fc44d149e2c5c4249bc5b51fea22d524aa8c5d4588f11b2878b2eaea38e761f7168b54bdf8cf363cb9c751177968c487922dbafd947d0fbe32b2f6684064e70c54840dcd9fc60b390e5a17c01545a599036d76ac1785431fe508dcb71007904757c8202be1c08013f1cfcc450aee516cc011d229ee5a4614edb452444182ce3e69632b48ec5575873d527dc9953676f59c8b4dec67323460fa924391b028345d989ff8017b3f56a02df3f70230afa2ddfdcab58041a3042cdd5026b5c9202212677764e3d06da221da58a6fc407634c87a36d2ce1853999b8e027513701f97b89096f50928738503af69ff362e1516d70c81bf5b7e9eb0edbfa1605624d6bbd5373bdbc25f45414102e6f1ddcb376b17637901b9d034349961a130e0bfbbb8bf574858bc9f35c9b10164052c0c8009414d03d25d03c0f04bef7929546cd8617787c0e5869f4ee790638bb8c4044e456bb101e2d30abc08bd9f8203516796b3f8d1f8a93bc3c484a0387fe1f259d9fb6621b89d6999f79e362b0ec9a30f954d08aa3c59013f02e886bec257508c14f9ee0d816ac425b7eb6a4b843810be6cfd02e2c1f1ddce2a5bd05b3384a133e123c0a2466c748d8f1d244ff011c5ee810cb278054f8c7e03087a67eda34202e1d425406687b9adc821ceab4ae315c4eca442751895de10ba68d97f1cb75e32ebcc33657c535381ebda8d7ffba976fd326ac59dadc4ef14b7a077dddfa1eee00dc6c84e81d2b5d5c5d241fad1aea91974033081dd231a2c0f6ba8754a35acd609c2933014c5ccc757a8bc2b327f79069035793580b27b900ca1d8ce4b3ef273edec5c418eb7eed19d89fdef53238aec37067de065021d6342ba4331ce820bd00317ec0e0216f5d2c6c23eb30bfce609c293a5c75d82672cbafd90e0d13d8076030a66544385440ddbb9b039de9d0c0d12dac4adc670a280d00cf6cc8a7c826c8955186b245ba924793681b0bfde199a4d159fc226254c0bc973935443e8f74f8a2c9a4d954b7547d92696b347c90580c2f0c985aaa8f74d6c1aa76f10673684fbdb444cc723ad75f26d205a60fb9fde2900f53820225a500fb2b7aa4429f3d4eea717d9d052bad00eb2731c7e90848a661217882938039021b3c1065928ad93fd94441da153a8632d06a674fe7efacd51af543f06d3fe2a7d21e9a21ca1be04798b9cfbdbc406979ba2b0c5f37c92739acecf5159ed53e2c874ab2258ba50fe06b2e57ab0c4260781a7bcbbf0c2b1d735fb5db7ac801ddf9f5249d106cb8fff06019a2ccc2cf9494c22bbb51af2ed192077fc20c91452f52372d4ca593f39dfdf55ab94faf26375ad4dfeb1a13b0bb4929e06efb171d19ac5ba4495b62cc3a7e9b81fd6b4859deea02fa4d9c29d50eda4a863edccf75a3830191579d472d34483177376b528f92abba24a43d884aec788d042295179eee024d62a2c7799165b5e1bf42d696108a0816b65c9712ee913e872993a5f0a044159fd5e756e9e47098e1a2f2782f0de5903614aebbbfad541bc64b3e3c7c8e03409615e185b98e0c09177a380a00b018f369d6f0cd3f9db6309ad68a08cafe3f3bcd847a5ea8a039885439ed8325b92377dd9e385188c945f9908870a98988af0e7d702c23e80f672673275d6a93255c98880199992c1ce24cd1da0921def2590cc1f2758e0fb4d8d176f35724952f588d249366a359b3bf809c7678a42208ef9382c28ea14a851060d538485fec6f4773d2760173a417a68ea4ff1028b4b05a14ece871591092b9d13d7cae5fe039d78239b9af8aa7f68b8222fdfae7e2b0f8dda7a56541120a59a5a71700248f6408a146f4e3de7001dd26ea785ea8dfbcfdecb7f59ad2b2263711aefaaa530428bfbba8480139f78b2f1ff97cd284bb385dde1316c6aae56d180fd05075138defb9368ea87fbcb7445adc57936954bd64de0ec52c31fded8b307c982d24ec6b4e5d2421e506108431daa37367ce08f423981c9694405e95624785a5394104e69b11e09648fe65cc3047b575ba2f432699c3194b42bd54986210816cdf590ec2d59f0a96d3afa29148d0a41687b441a1a66977f7347fd5f8cffbc2fd74ab3d50b1ddd822e0f09f8ad7311c492da8e04d2054a405ec83f31e03daeb2a710f883ef1a478c0543a0bccfe5a5185b1a8c9eb451315b366ec4809fb11891a28cf8401c8d5f8541b8f0d22494daf6de79d753d707ab780002ad25eb5d0a68cbb5e4b282b67794e55a61a7e1e93694dcb5b1223308c748f11b5487b4fe599502622475e431406af317451ef0199b3b00c1cf3ded88a7222052b3fd911f66a4e71f0711024d2c34a7a71331290bd09a01379881e892615beab6474a6b05bc97695858fa9c33373c736ab3eb6ad674474a5a755a50205f8d0ccd0393e6e673a04132568a3a3ebd0fae9fae5af08696530433bb85a5f6911b36b3d2817289bf2499e64f0104b39f345cb209550e1a5450cf9af636f986c2b6aeae0c61ab723e7e3f4d9c8f460f6cdd1247bb1f77ebff71dc44ac9c439d5e746eecf3e4610ef803b3c70097c2744e8ca180d31978abb962225a0c2ce09bdd9988d6695c080cb276bc443a5b1ac4af51f6b6eacf98e798d4ec8ebf9cde8256408148413f677189c7e4f239ce845456b98210b01ee2a83d74c8fb7602c59b96ec2efac73ee8471eafb064a963f2f36212c660b53c621ae7e15944e418e0de5425f6cd2b36f18cfd546e6c26beed1da1aaea94acd2f05f4ea6de0b0ee788dc51f3c757209b8778a0d6889f280cc69254903d58d2f76e4b5e08aaa80b75e1d7af7ecccece14542bd3be84d8417a411da10493352775d09220a6700e22e5ec956737593009f83235a0c8aabf25cdf110d130bb3cb20ab79a75c540bcb8110ff3780a32a479458baccccf2525ae302570cba78f1b55b80f55de6c8427661a0cb3d0b33652d6cc01222cf289ebe714321a35c87035c41982c983361f30e53b07a8c1c8295f136ab7c50ffefa09d5f880abcab90bbda91e3b968a63d15a248d6eb5416f9682008309e24c5c026d39b865d8f3dcaddaf18381dbf7c386bb8c63592c80b3dd893c03a19f36ddefb9954d4b87001ab871b5e81ab7bcb2228914126b30d91b70346e9790687b3fd937423b594f66feb6cd9b156888e9943a20ea82a1edd35937e0f35362ab81c9e308c38ce78f6aab7ba7d1b03780fd5769a24489bc356b1c3502faa6e2e933a3abda345ee4232019c835ee0477ac1ceee99198b4d99fadecdbf0b6fcad9b4ecc1e28d5614e23fac68d4f3cfe879dc43cfcc3ddfc278212f99e42ca1be24a35349c36e9895feb0818d71e725d728e112fbb438342c2495112a29decf6e9f255bded30738c7f67c96a9d95e170daa875ccda927aeaf34418acf8daa5046f8ac123d975bf5407074918aefbae5144dc42a2079fac41e6509c0a35e1f5f7240b34ac42b574deabae85179d9423e348fd83227a1549f21513d8241a819303b0dfa456b8e5c2d81e5af9fb273aab24b08ad9230e9da4cc5a52589a54452e53758fa35bd2ea10efae9070f488550a5c386c55857d10752ae99536e69f8cb4c77c873bc3fee81d11f40ddbcef0edbfa510e0a91c3b6d33d0b0ff0bf090e75c32556ef800636efbfe89ca56b9e348397ca32548531892a6dac375ae3c963c2bb71891c55b831a12e946f1bd265caf33d1064391929f2f5aa5d000ced4bf53b27ff8ff89d5c420823c7d33c5e36b34f5050fee515ba240c6bb0fac066b41f59efa3a8128b50b6db687887a472bf598836f950cf7f48c18b0351d8dc655661fe919451fc6694d0815379ae4a5b4ac2d689ddb161945e64c721a7d19759e4ef8d35374745bc29567b2e038a20f6b244ed6ed42ed170d0f17e320fbea381dbe23cfd4850685cea6f4a27d2ea813dec387c54c4b1bd74f74702fdb1cc77c7b2f85127dd9ed176b1eabdbb092eb8f02febbe476d6922c6ed95c2fd4ce94f59a6e821686c087574d1d3991d278b56c2cf7a70a1eb39e9f5bcdc0643d86ac0ecfed4a21b3737cb6c0da55465566599403f63c5d3014d5c1852c6af3a8ae98aa070895d5df187b69639e869bb3fbef1cf9e8ede96ae17b43d106570c00773be178f9e8a9a0935e3f25591c14a1286c81ad11a97d5c16edcecf1d9729729ca6742ba4f4ccc7975f8320f9720c06e561c4cf847941b2f3bc094dc1889b8cbcbf54f586cfcdf55e3f04f821bac80e1d6485ae5feb0eca0ff4baad4146caa657be7557173b01b4971bc31cdc4c0669c5a5606b6c86023bf76a15c6006cda9e34e95129a2514e531d8c3bd953b6403e6ae7b2df455f421d1aab1404eb153256af222580aefc5de1e0cf98b4859fb5e1f38725f4b526a0384a6c28b0c0c92fcbfce87740c8e6cce80a51c2affebd06d6f732214e33f608712673d0a0e773224e1969721c779003331d3cce1185102ae830fb4a775b2265996ed97ce77817a581d93c042b307780369974dbdb7cec45816e57eb31820f33666f4155d704051e64a4a490e50991a0864f2f5b9e7ecbacfb197de4bfcd7a4d5db48a505c9c327e9d52841e6ae4dc5a98d3777f1a64a557e897dfe1549ab54238465016a1d953d58300cb1950e862a470a898735c19f06033c3070283507ef10908e1fa0601a7887a461781aecb70677641cae30932b60389eea4f6353719564065641425c26b190fbf1cf75bf1eb0171b0e326f6cec48f69664cb2da59452cab00495036a035bd2fc883324c3cc2bc9990e2c33d6d02f4a59575d506841f9c2b5b0a26861610b133461b61bba5d20f272425a982d2d46d68c6d783a7beac2f5c2120b26441bd8c09a428341f5a246cecb2d4e1829bd3838b286b6d880bc792176e666a30595d8096ac2ce5829185a781ae2c34d0d8d17065a94b1891a92424d96250a58319616a38c953355342c851a2613c896fc60e34ae84e43d446c38d852556a4cea8d031a87c09616a7ae38427a94090334e62a2ac742c5169a3ba529212060c4732c480b12a356e505f98c87858812509a2e614c50c7e43c115450d60b3d28447096c5aa4aa0daa62e84cd4d612243dac72f428675cbc66d4b04ae10865bb2ae34448152229c8a0e0cad718121e4a42567c4844db0c4cc50e12721879b165e5842d2e305a6fdcc8d0d293d91554112e1c6e70c8d4a41811bbaa91e2435114012f5f5154d6bcb5b170a1f4350544868f2f4d8a504ab796a20e605350634a469e7c5179435b9bf1052ccd0c4e84080514d2b0ecb0410256d3181c254f2dccd07c816199147d51958023e98592943515a88e9079610c096b493745d151528f2f2537147a4c5d398108163852468ca04133444da90905312d30201b7800a191a28b1531504286cc94792363d14596e4034b72442571b1406a1264e8480999324b6a6e2a5c1cd98011aaab2131d2acd10242c40505166eb0b449f342b145090c16496336d410f9515456f6949583cb8b88921166d89264b1c21ac2843584e59682295db2a0d4b693b4316f40d8ceb4603228495ae83501813ae2a6c399b2af335ae2b838c34ba05e43f447fb6681184829bad810e2d4820b50a6a828616b0a0c8a5f1125a02b0c4e1a142e68b570f42408929b1d31d276c8b022b2543ca67a3b92ae44ed8049f1421a17aa36373809432dac991531c312a576b500b015da62bc30212b07864344b5e4e5adac891388347455c4690a15d48e296f868e4a68b144c80b276d92481d29a171a6242d061729321f744b21c28a32c349d9112853dc4c59d3c286e5895b0968bcaaa864a3926273c4071b17559c8871c2522565acc77bd05a630897866e3645486f63ac48585bd1e4c754569a17589ab8e141f716229f384a4844c84cc5e842ad805183f65535e4cc8aefa060d2103561cc8bad1d36bcc04c8901a545cd1b9337243a28d882a80b4ac78a234a616cd43cc005074ed85b0a96665429222f6e30aa9edcbec07c804c89a242e1d4632107916e43c2f4e4e28d8b244055e0b85052a1cb132054433cc85c59533566694b8b3166a296be9ace964099a23b8d88c7e204a62b5a6dcae8e840169a202fb2c2bc5082a3c40c2e246633b484c4b9d2a12645ad2bed4a8ddf2032005656d2999356db10006499c186090db231a7eb3400292c52704353c1e66c8885991a4e49bac0d46c0c69e00dcc1a154c50bcc646982a2b6b2b83d5d6c46b0c6d60f37424851c3b9c68547959bac1c4ebc9539714111135361e6f708831b9b1c2995611186bcc7cb5e15145f4d2a0a08b0b1c6162212a8b8ca8a913058dab2827343060a0587855098206869b253eb47ce508b2d4a34b56188d224a261584090ad30d37290150517342975e9933339e28c8948306c6a5c387d48d2a277812c302071c2a1a5633868e563c8111168609c58f172e902a43321bd2b5d49341f4e5c996b6a10715fd96416fc6fa6750b7cfc73027e6e7a34ed5e13ba1ce8eb8539fef84b7d6bb138a5db8c6212e37085ccdf7fbb4982b2b79fe873dd895dadcf73ccb3ff2236bdf69fd7d8f35e79cf3f3f7f6007c5e6d7ece6b89794ec4181be12ae638efde90349183b4fe5d3bd5632d79d6d45aff02908ca7065d6ba0c7dc6f6b6adc75ae0cada975ca738fb9cf29cf5de79c3cff7e8ee4590c013eff4f04117efd7224cf08f1f1b6a64e4338ee9e8369cdf0cf5abf6e545feffd7de519da4de2ef3400e157f1ebb08a5938051a718f3bde39520c796523011c23ee2910cf91b81745366b56cad66bad257ef0cb12610894ad1be1d22289f5c2e8b23a30ee8006687852b6bd03631a765232102cde210debe7d87568604d3023184e3954b10d0205ac1df71ec7ddeeff4c79fe54fc77c3d35877ce1a741cd427ccf881c57b8fe36ef7dfef8f58e7d94abb3ae87440e13dfc54f4008b9073ced992a708dd041efbb5b904a21a6959aff8a93dc2d51ee196e3c814dc3a97a6ce75684510b604a2fad04f6badcd0034459e1dfa89c3e17023e0cad56f7996082d6902f76b2dc778840f5bfc207952fa97b45935034b2d25adb5e4eea0e5a297624b7e8f49bbade901ed9d3ed0d4185af3ad9ff76a9d7feb377a0396367549738072589e71c737774a3f108171511fda4f4c0496454dda6979de9bfb7d8ba90f7da37bd2c7581657c134691d04bbea66a73d30a4ce69f51a692fca17d1764aad1194ae3ba51e2e0a2f16cc3a7ffe997e009f97ba8fc83d3c4136f51172aa747ec33ac7523acf513ad7a1938e133d2833e697736e35e79cf32f43ee3caaeafc690facabf37dd23fc1b739a3fce7f722fd132471b3e801f8576c00151f4022579e475d2c4ffae083cfb3259829387a5852f2ac7d5b0ff4b7359fff9933fd4c829646e0df37ca4fb1e880a3279dd20ea7f800f02f08f2f2a4f6c12b82a3f3a8db126fc0c2b8e455b7e0d3b6360665a34b55950f7a698640713176e40a7fc21b8285e3c7992b1f563e4c6fa4a8b0b655a682e6a294286492b68505e7c6579205496a1479610b8e0e1f1bce9050d90f2e5cced098b880c04a179b26b6362bb8a95143148b815662b09c5989b188112463acebeaa9454f09773294d79ed04059612b8518396d9c50f1b1a6c505aa8913afaa1e675462c8826cb1850123a3d4d6c65544a60bcdca8bd999aa23a9265d63929ac82859e35b44f4478aa588ae6589937483c91733329ecca0acd861c6f4d59475938a3a40ba9255c4c6132737cebed088440920f4fb98e4a0c5582f7d6b62fc5c7f38908320b87722089c491379674dfaf4f1d28691b3c621983f311a469d862c63ced96727047e3580cf71c67d084cecae4333c06f62d7f1d6a126c646fb352ed4a0d331087afeda831f14a1678d49f0f9b8ba6b5b0ffc6a9d05c218aa46fcf54f8cfbf8c5b8eff1f73d098c7b0e86db5e5c718e529f5c8ffa474510df16b1fb57da9db3f1f27befbdf75e7c719cc82632d5891c1434b52b52d057630c814337aae7f7fb6d090e7c83e486fa8b3b0e499c088143d7a5517e0b83f36d4b981b5ed010281936b226e0b43209a3558b2ca7525aff0407ec1f752a8638eab6e419619ab546d9efa16575da0be3d609d0690fada96f314afd3beda199e9fc3ae0a8ef07bfa7f31b66a8cf23023fd5f8f5fe2a4280f6fdf9350468b75414d1d3ede7ffcaba74d1c2c0ea7f24f899d424d090913e4fc62178f29bfd7b9dcb1166ff4ad39a9477c9ef79fdcaa33f97d49a278f7eb3e34e394dc09881848c673d7788a39e4b1e11b6e73fc181f3a8e72a8ad8af4ba3faf68d74c9a33f3f2e797439c2ecf9cd9e4b930a527d32e2bf3d1462740eb9d60d807465f573ef3470a024cf2d43087da55290fdb926febc13029546a18f96276eb72ac1a7b485bee73bff7dafb48578b9c1c7914a4142e07352c58a2d04be529010ee4900feb71fc47884afe3d22897f87b5d5bb517678d753bc417d730e77b1fffa678dc9fee86d802374e1c0e86e72ee75ce63fe93e6dc7281a802bbee1189d1b36e3feeefde9e54da90fd6e9308cf7c74cf766f76eb777f901d0bd8df5298f08905af3ace65ab3ce388ca76bc3f925b90e772639f811cb19392ec7a33ef6315318cff6585e0bf31fd30f3cea5371389c08e2be8b1d8eba8f8a71cec370afd8dd9e2d61adf733a51c9e867da5902e7952e7f586616fe4d10ff4476cccf19e274abd658cef5bc6185bfbd5e6b78cadeafd9a6bcdf8858cd56abd15e78a73bd5663f969c6b8d69c33d6399718bbe55a33e692b11bae35e79cb1ceb9c4d84d3f1fc3aa23e25befef545c2d08708355b8b6d67eb5d6da6aadddd9329ea0f8daa35c2d90aaa25e9cf5b74310c4dd6fea0a0a5a0b714b9d0b4c9d3ee7e152c716e8b3fa9e672fc9834ccdeb4050071f4480024319d08008e6cf4fc90bba3d4141e105faf61ec5907ea84f73b9dce31dea4ae8c29c9c31dc17e8ee52182b07246f14471081ef8f2288fb1c300e5fbf34d6af3cc3fe9da0eb7c73ceb9dc7f79f7665d6b89b0dfd2ba513c5a53f719f3aefffb7ad69ae37a7e9b75d6b87c3210ba7e908316e319f2eeb76f4f155fac3a8ccfbfa5ce9af6c392525eeebad61ad36eafd659b33e48be2e7944e8dfbfbf924319025dcfa589dc71b9eb3cfbdc661b610ac633ecd6d65a6b79ea1fada9d3fff5ed69eb9f21cde9b79267d8eb376ad0cf9ffe8135f5e3fbddef7e65047020f818677e46b3ad07ad1fbf3593c69cf3d78c6d0ffdf3de9b69ae5f78e6977623db69486b9ad699ee9c33b8a9ee60e2467c716984df9a548335a9899ef57fdfbd97cc648970e31b9c520f1be36dcdfc3a677df151aeb58c6feb0183dd0516e40a74187674c69c9c18721cb83f9df1b514835d86dcedb17f5e1a61e5d4c7f22ce7f40355c137883bb1411e9a0045116c70049b04fb567d5bc00d6a7d6fd639e7f05e4c7df49b3ae3bf3c32c679ebb6e870f78217f7f77edf5ffdf87b70eb9bc970ef6cd9d904bead870c63cec6a0effa05da825e41ffc84c7bb0d8b108bafdc24bea3a86cec1f0923b9de3c24bea74cec34b8e9d873c97eb3c175e52ec3c27bc64d8f9185e9277ae135e128721bce4ee5cc72b082fa973e7178497c49def30d070810515e830ec60c09321774b4c7df09b185f7bcbc6dd08669d9d1046fdfce22fe75c81511e7540d0499af125c2f9ad42427b476fcf67d0fdab39fdc37fefbd258f88b17f3f623cdaefb1f56004fefeefb308707fdf87d603fe11fa73c983fb57f28cb84638e75cee116316904e9741adebbda0d6fae2f06a8df109dbc16c4bbc75fdecc5e9ce9b0ffe9e5fbc33cd207f3d7fad38533363ea939fdaa96ee9a3802240a419d8dfb1b9230e8432346c031af6737f6e8f7d0474f0b3dbd4c45f3bb0f48315477cad4f82021560ccebac5b2a1dff49cb48809af83759016ae21f81a6e3b73fee939af8edffe0719767ee78858e1f7fa40f1500eda126fe4bd29344bf7f2760f6d304fdee74faeb516d6f4b4f4cafab2766af164e3fa494fc2ec5971e404c0747af4a9cf0fcc60bc4bde807fa5abc0e8e94ac61f982d6c6cc8b095d63ccb2b05451b922c2bbae10e9f75ecddbd5ae7e6f98d456bf57e85ead3509577310d3d438d8e9eef5eb96d4fd8a212ec63d93b7eb10b56f9276500c71df5635ce4130b7b53c22aaddb119e8dfedeb50e47e9fdb7b556d8c03a8346d167539c61433090000010083150000200c0c8644028140309a87d2607b14800a78a8566052990ac45990a22086a100640c008600420000860063658101dbd40c0c732f252057282b159c6c5aa1b7e1aca33a9999fd0e94306172d2620317bd8f0f94ad4a3b8a496b015b6ddc2a456eb1017b72dd506d42b51b17a422c439d5ab27cca7e7abc6b870e1e27e0f8f480ac22f1138407e589d82f7839bf2b70ed339bfc77f1ad17364bca8a738f4a6700fa5bee8134321d1500f18ecb0e8a1f7afcdc2a12e601e4c84e28a76a4c2e6172546ec14a876cdadde978385526bbe44138f3faa5a7eda733d8ec88612ed816b0e45f5d74b6f4a7ee615c5c8d1318e3b2688670f1ab2ba4ed5954054b5d28a0d83eab01c99bf75d1046c9a9766a67febad341973ef19fc5a4b5847f8e6b4587df7d44356e56c306298e4ec7d0210b4eb07a2f7358b8449f24d45dbce11157b0b896abaab92119356e56baa8961e8ac5b8172ac0ce34918faeaf1c74067c9e0596b709280bdaa72df3014ba4693bf6c9aaf8b6456c7891aec9a553c45585f7b2f6d359a9f6627104fd83f697a5aa4ad0fd820662cf667aab92ebc27f27be9fcfc26af10c9be011919a6fe9b60643e942210ad1b2bd3e50f22660327c6c16b0e050b97c9bf3735baeaae68b900f44f169b90eace96e52fc62245b55be48bb0bea70346755721e55e91830d60f95652fa088b4c13c747c79ac9885d5e730a2abfefb6177b8cbdd4d39e076aacdea013655a9faa196c14a99a7157ab3988a99b4d44d4509a0ca91efcd812e2025c131282677c00ee9236717785beeab36b9c5644271bd7e490ac2429dca3277a88b2305e291aa2aff6695257b90f4e1aea878db6ea8600042981a5f7be5169bc63b2360749425be004965fdc316a1e3a65dd967ee85e1d398720125421fa807a9c9ff73eab858cf81b3b4d30b39de0fe9e9934d9e3a4c058b65a24716a1a9611533b29d18dfe4ac299a7edaf49d29564427abd063a229a3129cf1c53e51f39cd62aa4d6494cb325fd8e6438cbb46cb741c8a0acd33446cfdad73591202c2e6f1419258460e9b46cc84a693f6a1c5c542f58a69e678c7e3dbe37307430f9e52ea500efd25270f73361afe39c296d84dca690d8899e6bdf3c2cd0281a0d1c68635c9347cf8e7640cd2654820cd8207bb4011d7157a43c62e498fe32248321e6368c35fa1b1f224da3bdd942ded248707b9538cab852a9374cc67025998b2c74c26ac7022ca14fd995ea750fe860895169507d6d11742a9b095ad654e6f8d509adb328a4231aa8c87a9b78c78c22f1b651a3763304b5eb716322e44d0be05640a30c04cb69ad7789c3a67d7a87c4e0208304d68dae73f67f3ef604cefcb14ae08a89af13a1fa0436d7ad619ac64890ea089455aaa455b8b455989455b8b555929ab5a6aab58480bb54a2bb5486f95ec750906992182346771aacb102ece5f6c12badcc32439a2c1441c310e2374063b63bf7efad0ea1e427e9e48f722df2caa525bae9e99bcdd99c4927d8c92ecab178d9c3324e25149da38b2c5cadde748ede9e483537546098db0161759325d91793039e559fc413a6e58bbeebc27235436ed92b1837e46ac11d33f99b198d8c3a75c265c3192553bd94bf9c5dc233c8731a636aebab34bab44fb8f3269ee22a5125c221b7d2c7e1a319ba4b49300e0cfd52dcc5f4b8994f675b93f40f5d454f63ebe6dc6492d81a74ad15f7920473d84c3d8a560f2cd09e62b435a56c5d0d4c58c9205944f5ab38e99c8a04077f39ecddf2e4d2eb4729e094598fd6c461aed1b2cf56ad1616220637e8755cc391e9e0c6a017178c58f77086119765c297c3ebebabb943913ad725f2f0c54a703a93541f64afa1e010c0079ef096fd517d440da43b6ed8154446ea87b4dd7a3b86bb7cb100016773ca3ac786409e3faa5c6620f1c07d0a274ac3f3d8d397fb94307e4dcd1545c4001884e76b34eb85fa240d128c7fe3384d7a76f837f0729f2b41eef008f6f64b705703983ca770d79fab51cf0c6db3edbdb13d47355542c2bc51b34c20f7e92d511aa45b984cacc8a6e7d9a83d1afd06e9c56d5bc44e4870c657883f46ff97d551a42af7d48a026e0ffafcbf98c5a623c5c80778a2ce9596bca27818a82c1b379415c122fd27a1d6cda08195bc37a518d12fd9e1ff79764e416862da59e5c2c7b7cc17931c1b8678f6b208cd1c25075c81a0761d6a14aeda05c613dcc8ebf3ce2dca5b7e1dccd5a3c942c439dd3fce0ca9c464c4d5bddb9de83879f46f3cbffccd6772c7e7a640e6598ff7642d2b3fa535b9f6179ed4b7fe8b462aaa31965090122f5b99b78edb9beb05b483d76573ff78192024510f5a86ae45b5e4a379ccf95d21734a893be22bf5a1e3190b2e6cced4c5fb7ffba30cbb22ce91c0b6306de48965b8335e808ca560ac1edaf2505b01a9ce2d159a2468667e93386af7dc50fee5bd948f691816514c03b61691bb272ee5dca1c336cd82a2b370f90bb87000646d68148d928ade7c3381aef5b2b01c70af9210d3b70c1cd27a0806b43bc9b0261fc808083a1c40395ef08b5d4d32eabef2dfa905cd4a5c35c5de3066d938f796372713c25ca914b91fa0959b44d59e87274c69fb036b688242db86826648e0cc61dc5679b2b74dfd8eaba6071127bc5d05c4df3b25e621c2c2e7d6c4b8428f7c7da30e6193926882c688b8cb364b4897c6f3976049d803b328ada1fae55fe7ac8bf7ae804c6eae054b640c596e8eea3db6e6c2bec940dcaa5b7c6172b320e9a50c79b0776161a8812ecef61bf920c19b3ff6139d10f75f728ff94238fc008fee96ac94c61431d184ac919f91484dd69da9ca6f1f527c698ef456f91ad9833c19b60b828c91070fbd44d18eb5c0f5f137a02b29da9a809cf90acbe885a3d20671575da30e7a38c469bb74c9add8fb9582ab4915e422b356a3842906a730ba5dc98c0839af7ad26622197bd7bd77bc06a5ddff0677916e07c6aa411207cd27d2022b709c225f8bdf5fd7c88c78cbde4c4058ccc7b8d9a136334b595d6e22a1ab499e34cae99c8a13a8b4846fcb9a16e8be23c2dde7c4ea4e124f4b097c795c5d533066f69c3705af3e42963fb3f6c63f357a81056ffad26a90d97f65a494abd5c2a93d59baf6b4f8300f63830ab470acbc071af0febf77a88fd917df1b49b5f7ea5012d4e18de1b3e52f9281fd158995c87177c1c23e312abc940443d948d5a5aedf7045f3806b3c25352c3459d3db3d28ec27f248a3490138dbffd7aae30ff72abf898fa76e393dd151eb45f1f0e8d056d337f0eb7a7b38c7a87a2ca7b0c813624e151076d9fedf4d17dbd3623f1d80c350956fdacd215bb80522d2cf228765a216a6a9635bff036315f2361e9017ab6afddeb69d8ceaf75cc747c377eb3289d9f94f458fe4fb816a37e84905209d8abc6472e2065cd4b5a8d58c2237c51b0568fbf4bf9eb125a0b1babba39a35dfc40e4a988d1d57ae31fcb284ff75f4b0b8a414b69ac38701a76c268b9ee8bdc1056cb9418a085547c8aa4158d45add150570c48d19ddb94ed707077da24f71baeecd3b300f68c5b469cb317ca2649ee4c519751f665e2e1e079663632906594477ee2bd7ede3237cb2ba33505f9f42dec08fc230e178741509ae781614899b0632946b09ed6ff3ee3781db259c5244630a211c5db9af46eae3614cf55b62b19a548cba1f7089085985b937db8badb42da99aa03838e0ed77848f9507c1807bdff0b48f478c946e60505e17597a4c3990a74a290177888d543981cc62266ccea77b94b050b510908c5bdd66315645bd50b7cd9a7d9651eec653738e8e2576c918dc70f91d57878af6cba1ef0dd0d8ab8dc0bce167d52a16fe60aab6f10b3d48cb443c864642c2de299ab1d190cd87eb042883bf4900b65a61f64c67d8aea7fabd2627aa32271f06982f37b251f4081d98160c46a2d9130e0ccb8a703d9cfc41a961a8bb70b93fda3a5000a1b33ebdf65d1ca433c64dc391c806b2920122700f8ec9c23ea5682bfd7f86a1acc9cc98fd51f67ec04a0c88d3c5d9977335b33284499b70cdabd3466e9a41a051b253aef9c2bef3199d11a360151f9e33848c7fe6f3bf20b8f7b534f75c9c36801ab1e995310603ea4a90943951a6abfe47b1db7dc3af06e9c1a4d7799d3412fee04fc86c82ad536a161088e666133f0d7a73f28d166769d93fb97f10fac523fe99ffde7e42d1338d4d049ff2c63b94f81c03a47238e1b1dca43d7d5ee89afe715a06a1a8bb399b1d1533e05d9a7d27281c362e0f9b9062ccabfbd4184a5f25bccc6977949a00babe45cf7908d513f5409dc7b23bbf21b705dc85bba9f84d7150d357099bb20203bba12953bbfd5b1247a6df7fafded768dee2882532f62e09a412f06101e57d09b4971b46491bbffcd9f00b6d0f8b846e1167b26183f92e8b1411bbbd74fc4379264be4de42474441fd8c8964c0fed4f07274c5030b1aa36574a4fbddf36590065112eef2f53e843451570d6037102eb2fb9cbfd770096011626ee3450e6ce1f1bb858f3439fed2a67a0cccb90a674b2d891c9277f5131f7f0f541a38592d8d711043c8eecf77df8632ec525cbabc7bdeef2ade9287b7cf85e75aeee4a0d31434d21d867616f4c9ca9d635f358638768e4ccaa27f2d76b0eabb5f921a310478aacbdbab0606a54b4e779d3c082eaf7f9096e2f1ac89706083042ce87c4e9536c3ed2e8c5bb2a6e9c970c03e794b1292147d5c5a841fe0a69d50c818b846879990f9666fb45e3439b5ee9b666483ee09477fe264143888f9e7994fa60ed44371d3fb7786c252695e6adb2d6ed9cdb822356e2b671547278c46250998c94fc326957cab2dc51261df38518a57389caf1550d8bb2488a60b390aee14826b07607ba95bb7fb7a04b9d7dfd88c830f9dffafe104eafa4c5285cb6c3ca0315e7d3214e352b6acbb1602a05080d1a8811ad5352a1e14ba28066cbeb914ff0d46ab19833ff30996bbdb106a8c1a0488a85d20ad675b1d1975a30c98e5baa20ae4ef7dba253e05a483e4340f0d7ed08bff6a0f1cedb4877e27a3c2da94b8ccc38039f21f7b89455de845b7c8d4ed7146b41a0fddc1be6fdc98b6060a104e963398188d1089d48ca33ef3266afcee857fa3d9da4050f842942634b48b70520013c2fec6b8beb5289bbb745c499008d12e977913cafb362379b6efe6f2e79541a6842e5b0fdeb3fb98ea0f592b7afac999502c3c58c16b46c574fe9e589377791302a55c3df320b7a6466c155dd36d49b51fc0e3342b3eb1ffea5c2e8fa33d8bc16feea90e9140cbc0ac84ec3941a513f64454089bd202bc9734427eeba4bbe692b53a63bb87b7a61d6b6380dce44cb909fe06945e86411e11d2a8354897b4d9888f8c59f1d45b6f44b7614b8089c95ca4323255c867bad4791addb09678a63e7ab66804b2c9575ce708f6a3bc0b446ed2b3daea83e8a9022abb77aa91c9fc817bafa217ceab85e8da7c249c4d6a9892445d27fd8129659c3dbe09217294e9a7bd5aa0a5eaa3bf47af08ff29ef0d8ca5a29fad263001b073c8922ae707e0edc528f7a94b4d1a3917d91b9d950362beaf4b7bf3a64a4103782bb5fe00c772cc75b70293852266daaffa5a69fbb4cf6a1f011204f8ece4c133dddc83d1b55d3799fc8c9b3b1f69402aff7c7ead9101ba417eff1d53668cd6ccafc3d97d6e5c44e531b56219b2d099af8b87386a56294ca63272c4ca084af44d531f4e38ff84967443dff3de2dc0eaba4bdf416108edcebeafb2fcc4259f80a5e91e2bbb394c53eb133283f30dc9cd8e41c726b36cdcc8e8a1e3cb4449e9a96c5639523aa34470d9e780d182818f700c90720d16d0ee6c73f1f3bfdd334be502f6cc96db31db3441fba6ede6b51e023092a4992e436ae344559ed31183c242c54ceee171ecc505294a3c1c7970b54f3c509899f649dd4e74f944f75edd8e4e3fe42c581c577afc5168763f98f218fb51c79e64cf2ba273d5181f72111c0ff18a279e89776a19185fffcf684abdd946b238858890eab677de54515012d2b441a6b162211cb45f8dbf54651a014569489502f873a9b3da570387e8ab4c699c78c1dd2ad5f564fb8aecba89b9526f7b3ee9aee4736f3747ae3bddc7b04c91f4468cec1f72dd33ce76f91e66a2d1e68a003087bad2e6e035e7781e022e5cb0f826571b759c5809cc19407ccd058749248c10c5f70ba37005d9d8e8c5c9a27024187afe1283b3cdac9633d0319b2973d6db6fadaa1a991050ba1fbfb3db54e8358a518132041ce50fa008f6364a1a68ab8a055f855773dbadeab5fe915fec9eadacb2a4811c16e6d04090fa8d63efc6e98304af6637398a671a58af7325ab153838e51d979db6d7addb215f8bac6e0f6d5359ad9a86c2fc817c16ec70502f39c8aaa1f8d1dca2fc246c9f3b19ad26498edc74b3e822b9b9b06fc81c032ed0327c3fe7ac65f16179985d9d5d92577bbfcb18bdb9a6a83bfdb95f6496489f90c6410619410363bac9a272e80d03f3599b3fbe5a64d7f3fae47b58c9ff9e93dcc3b1710c210d57fa69265afab74362d92b33ef2278efdeadf641252cc827511afb62c9de185283b371c5e80d8fff9c28aa559da96b61582902e29d64a7e5a6369c54153a657352d8910c013755cad03e4cecc5c71f96fc0afa6aba7c51fa0f8a080dfbe537bdceaa5b3cb85646e15dd17b952c23acae4aea051d14874ea09bd2f0c3051c2dd7928ac7cc362aacce11bfc3597f5f15652ab4315be3298ac5c6675fa6852dc8ff074269846f6808a21d4cf48f19cb8a4ac3fc519260aaa843cc032665e32b0e018ab8add4fdeedb5c9e0d627a9caa2af46053ce52307d714cac60a82e35ded6dec041c237670e3daa54edaa40171192b54b09ee551af1620ebd336849132e08a0fd63196dc99587b469b3ca14c839c9daf00b5fdea1c4fb924c226289537c09686ed5701c6c644c2e19fc14ab8cf74a69c71cb528def5679315d0456bd6aac67291c470b5eac17edb2ce320dcae42878ed06635442e9d0d18255e28353d58a6e915a1f9f636f9bd3a5f6d52f4f69c515ddcfe863b63ef3f4d4a06e2a43b3c6fa014fd3e09f35434ada637d3c81ca21d01bf11ad29b1ed4ef662badab3e472f788e18c698b3367710592a67f89f63d5795bb45689f2600dffd4bc6728831392a015dc51b65a7c04de3177dd89e2b885063f176654ba8b395bbaa05cf4c04d4ba640b56f9b3e239fb24a5d154fe4c8669574c53491966d32332a4e605c7f154423c98b7dc9c65c516d36519ada085ca806c2b62487c385fa1faeee2b26a9eb0cf81cb9eb1ab8a61dfc862742abeb1c852e9c3d1d8124062a31f4c225faff8f1973e3410aaa0efaa88beba45d96298278f77d5de62147b54401a868fd4b5fbe3bfea02543006c8310fad25ddfb707a3475142a4952325a10aa1bc9acccfaf851847f01000311f815b3e0543805b5f25dba70838d32d0204b1cdaafc68a641113e3bd922dbe418addc53fc4a29006342685e11138fefb2b74237a78cd1edf7e049380ca27904025f988c0988f68cbf45a332e46bf6f84260b1d25eff4c9d5cf43f747396f4122712257c884473e8cdc038d99d6333617960057978aa1143bf7608fd2c703022ad374c4a9af016f24edd47ba224cbcf98988074b79dd429ec59d712aa18a280136266dfa64a6799aa8ebf2e4c63c9ed555fdf017e8518ca6a9bfae6f4811f2f4027bc8379cbaa9c1bb46b597715268c74f747c92a7f8afcd69de87352aeadc48290bede8dd89a307e060d58e9c0fa550328455807a7c25b2caf9caa13c9781a41dff739a96c94c5107896f4607758ae8cc342b12c28e71b22300fd803697c0369af25f91528db0a9e5a913060fa626880e39fce20e676135d031ead90c0064dabf0bfd2281d1eaebf1e32747266b8094feca1073f07837b64b9c3e103a82ecd09efc4471a66098b0f54b37df4d4ceb78e6594db31c0f5a76b6962745880e0fc260146af7bb66bdc5278cf983e66fd8861a84c0dcac9b728c4723ef9a4966454930e0a5e1a76b5bbf6cbbc58f343cacf3f086b325bfc87063015e31357b0105e8824748763010b1189fe69e334fc887503f5273b538a71abe710d7df877823304906d2e24f7bb4b98f43e7228d5ec9d4435987028e8f243e6dab3362641a5cd355a49a322ba5a756f7bf3d1064f66f04daefc362fe3aa14625a10b85000fc2420996c8dd6a5ac431f402075bedd562c9b420b6e217130a62351f1bac366b763cdaeb81d5d7757eaa584202bc2e1ad4991072645d45edb37e4e2b7a5e65b1a35f74bef2f5b65ab4395fc05ba1ae1a6a5af0d52bc7cf01df76ba38db051e212683736c4ef188276046fafef9a7a72dfaded0ecab254afd772f3846e6273297e9003a4ed13ee311568a34ff2b53c7b96a0ce3e2f6f8c537646c2d1c573b34b353f85bf2ad927bb519b4acc81f27b5100e435649fe23e2d17440773736173427c0bd892d9cfc634a15cc65664fd651738fe2447dd3fc1f99f881f6f5cb0c853dd2e57c6057c84b0f0febeb11da9a3e2242969c1a23464be0c0771ba64782a5821c3e80dfaa244ef0e584aaf6bc4f0bfa64e6bd54a0ddac0da60646aa28764ff1f3892a310178d56e505c32a6d14d7cf516d7a660a1bb355066372e5f26a5472329c8ee6e9cecb704591181b42c7a01b59b34d16abf25b8ae3b15503f821430be004c7c06536f3dde4575fc474968fcbdaad4abb7349d916eb787f30f97a9c207ca27f0930a68a906b6e626588033d2f527c01d285631cd88ccd08d61886823aee4ea2bc603ba55dd7dc1026df01683fe9ce12aa4e5829ecea1b4f6bec022716b37d539bcec804640b6622ce33dddf957d8622e57e1739c319bf4dc4dbd96e328bd79b8529ff885d43be3149eb1166d03c65b8a22e3cf5aeb1d976942ec1751b7cc3a1798aaac0e0fa43dd463a93c707b76bd98974a5bf707066accf8b318a3a1b4ba1798aacce0c6a1e55722eaafff731549d5681135cd3492b879c7f1ecb01cdd3864db486e55ac2228d41e0ab353e95251715275b421f118d1f610af4013ebad4656fe5a3a16df51a50c336526121b1de5d3598dbf213bc00c6112ba417ac1062554660cbf239b23c895a4496b7c463d6cd8c556a47020a3aed6de9f3e338d819c2eb1bf2f4c51ddd4c35cd79ea4bb11c4f35badb41ae7a221ef2f9faf9ff79f02b74ed30c6f7b927c3b1cebc36e799c627568182ad51625a80ed8d53dba75e58a9c7324dcd0150cc076e0ba99b6ca8d21c6c1456774047c2a2383bb20873f2156f4fd97a68b98ad2b610ad287344e19dcddc4295ebbef9871354423824ea997d928922c5a2fefb164e4c158f2da08b6ce4a3e97ccb806cbab3da49ee8477fc313de250bdd388457d1047ab5980efcf87be2dbb55fb1051508fc4252623c460d8bbdadf30eafcc0b6670f2a29804b29482338e592001c3ffdc2209d34ed40055c57b3099cd92b787de567e356b6cfed3f9baa1aab2fee73ba0b50c06ad0c84bf110a2cd6cf911e4a2faca852a652b1b586364e86f3b2a5af79ac63b530e4aa22e0b71ecdba01b36a0e02397821854fbee3f93dd569231cc535aeaee22627d13d42a0301aa5ac76c45a6ea28caa904df62ecbc67027f63149489ed63f5c6725c715d7bd23a83874010d8257d7c8f31ef2a44a26acd4db3caef6d71d22b6df5628e91dc19290c1ae0ca53203f366200ecf4b57e7a21316eb1d2bde3ec3373adda30602d975d22d30e517ec7d11e20bb86a6c867212a0ed687ec3484d8ec2bbb18d1801a26d7b0e2f74c7339c9e56c84986221186e938c9256170d50f6777a291a698694d8ee06885a727a2ed6cb51002d7619986bcdcc0a4e3515e8289545b9893a8227811cefb211df38caf70a5f7d683fb470f066d09264d73c1d29bb65ec279154dfca7a625d9fcf224bf1b56c5f47954f48255361eac4478ab6bfb282dca0b6b2bc1edb5e68b13296cf78614677507a6f158aa89367c71b5ba273b7a1d747b379890463b44b04d77a9e90e174d4a9b586ac57824186035693f79506cacb881f2182f11a6f290f84e1c1ad2473315197f5963906b7e7ea1a38f84463a3037d145e7e6954d6a80bfa7bb4421a27cf24842440eb0e3db51419b7a3045317c181d7864814e877e0ea285ddba311f0453cfc92eaa4533a472b149712c1e37ccb43b32fc9f00c2008ff56746e961ef36f8943191139884307dbb77cf3fd2ab918ec636d4df8d39338e1fc09e93eca516c662bb928d55b899e5b7b0948a86fecb3444696a17d28b5d305d2d326f798cb27ef9e1cd9ed387784e9716130339bd9f2f71e9cccd0d9d8904b5426c9b1d5217d6743afa1264069ca3b45c27311a4eac20fb1e77ed04c46c33bc3a0ddc1f2f0d0c3fa72b056759a784c6442f478ecd0b502817981f30943f7bee4b7a31ad6b9d229f1c94477783d0c1a4292a9b54c6d8eb3f17f7cfa3a3236e75a68480f62b33dff7bfa4753b8dab7d1701926d3e8910c4621c531df75b1006cfc42210b23110e808be213e44b037a36866d56301a52a503dae4ed083ee5cd19d83d8595731d317b6f43be3450c65da410b12543fd54dad56a0a778bf7edb3737bfc1fc6063d385c1da4e6dc0679c85a76b11af3c6f6366e18e2d1271192846cb9f796524a99524a012707a606af06333e3333d333333cc383070a071c72c84100029899b9a18999289989430e9cc3ba6813521d0e13071c301c540ed84d6ba614113a67785bb40da9720a00bb917306bb913ae8a003bb94778a530b45db90ea74a0c16ea86366f74ef1007aec3022000f3c441ed88aa95f53933201dd7e00cd1b5f68d06ab2d731434d8d0c352e3535352d396a6a70d49860cd931f547061b34febedceb1e337b65be3408fc7bcbb323c4f24b113e488e647447d3af51521a46e260ec23b7e8207420410ed08293c5181742be1b21388fb122dd13e2dbfef5e578490cacecf582b98b6bb07a32c814f9f968bcac8caec5bd72cd195d9973d576c9122378f0a9e958182f28fd80d2674ddfd422161ccfdc2e8d33e18a5d919e98501c6fb424585559e0fa934926e45656565a5444a595941a12b2b2ba31511b6b2b2b243e47c4941b93b093a71620fb0ae2657c6cdf4c9eda2ea7b5042ecc6f554f771c6940ae846a511530a09f72915d04da690a0d725f7a773134b15f91412f41a9d46d8cdcb296684fd70a94f290a4acac61e60853115228173aa8e944242a1a448229148221de843bdb8aef78bdbdd76ba49a560dcaafa51d5bde69ca2d1cd9280ee5f747f62484b42c5a06652524ab4649a245289964cb3344d25938b934ece557951c16efe7965a676a8a32ccbe2db2cad6037b434595250d0f7269fbacfc554456a87d2120e8a03bb99b4d492aafb2d184e55534fd0fdcbc54506199c734ec74cedd0cd54d7a4e3ff6790c1a525c73f0e13cbcaab9448ff9ff228f475fcfff310b5f480d2387084509f56db74d809a338e15409e8be0fdf4cce4e823609686f7371a18146a3e10dc44242df597416dde3e3d33d4d9a3469323434c618638c0104f40304f4430553c13cce3cceb973ee9c133124040efbe0eb9c736f6fe67e919b9bb99999b96575715b17c63d3166e6e6666666ee9e3eed3769d2a449ef0c8d310610d04f73afebe11ee6696e228810a2b9b99b9bdbddbde862f4e6883973337389574505f3c159a60a8693359b260b0b2f0e87038737e3601c5e9273250ca784f9e0d802bcba95c9b2c2017aadc9994cde6c92fd5c9b57a4a8a587da5ba8bc6f83c5b5dceede289502984a416ca05d7e66c0b52f9b03b1513766b2ee4cb6475637eef9e19d1e21de7961a3ba6f31eac6757b6126fce284c69cfc0d7005eabfbd5477a029f81899331056b08255aaca01a29807fc2a7b3007e6015f1e31730d99e9137ce6af32f8328b52186d0ede82ae12338466405789194075935576a56d47d4ea09d1a7f7550537217149dd807495d7c52fff4d8079bc87fe7eb106548079bc97f0c550afbd7a1e2184b3102f469771bce1f7376a344073bc311f78a7aeb6f16646385af7dd3780aa4e2b625477f3ef6515507e2374540e0ca9fb5de4f873c0b50ee8a8fb5398ac45a5d1b4f4a0b990a0e250c7ff4a1cffdae43bc008fddd5c2b51aef27b071f8067f0401ffab984a070df2f8200b90f90fb60a1040d26fe4c002520b5849f1417e132f570912406dd0de34e9213c4243befbd272b26ec20114335872c11149420590292316a697286040cd1e40c490d4613c3306c4491c4004914282a60484961424aa396482412a9a4a2c6182a980c5626676aa48065b21a2630e5688203250a39701ca1c57403973462c0591a514c22b47bee0dd51662e20942fd86d0ce138e7477c37884c91392e09c8b92093c624008a1acce18c2412db9caaaac275051fbddc7cd2ca87559573fc1041b7dc28ebce635817a6aaff146dddc1a49eaaee18535dc98d7755d1303e259034834843384d8490b4000f47c849ecfae7b918ba605a617f8fb12b524b70daa7bc64e75ceb977e0c7fad9b17e36c867834c32e50340d067093dd067b505da0eac922563d494ba4a96a0a164c90edc53e38b2546a458c26449932a80299400a0aed00988084d8184971797d28c89992100022e93e9078779df1aaa4f33316f86b59818d4cccb6416c65f87eaeffe5acc280b1a53fd7f0882880eb2d0c51a63c002d010a00004348631508145143650ec374dcbd6548fa8a05f472c3ab666080eaa68410c907c210c16b461e3bf636b44513c19e30b5a54e18d2c6cfcb95bdbdcb3fb9b7ec940d960237fd4d6bc92357e64e00525b871858d7f6a6bf649125d60810514475c20858dbf0fff0478b7e377ed16c8f9e0727777ee9c73bcdba74532ca82c6ba4a90e0a4f66f0fb8028a52570912a6507b54570912aca8ccdbc3b16341f508d54b759520410795193352f991e004bfe79e6f146d1ba8fd1c8612cd6a8e5020ae3ae7e2ee9973ac85754d341b177ceebd3977ce39e7dbd74a299470bded67f716bbf1ca035e358f5cd36c146d43dc9ade611abe0e27bcb19b22dccece092a90f85c1bf381c55fb01fb1bea72e6d071bcff4e97f7bc4daef59ac2f4d33d3a7be416141d301edcabfbdd52617d3c5b4f4db63615606dde7d2356f14b9a6a309ca1f331c4aa6ed115786d9f53c88d304dd233c18aa1b84041875436115362f1439acaee1b0323d0318e886427d8967322f507ee7551aebcae0a1dfb9ec1003516cbbe402fe5a88807a0d7dacd236533fcd9661e28fb2652c5bf61f3df6ad3d1569353ef388719bc65da77a0521813f7962d3c5e6ef033f795273748670d774e06b21021f7d11e1802c468f75017fa4fd80f2274f6cb017fd8f28c33222fc35adfa3706b5671e7e755463a7724386cffcde473bbb215eead372a05672b9a4844b645f371e3c7640f25ea316a6ff3d76cef95f5b3be79c73cebd8770dd102f75b59cc763657a0724947fe351fb630e78aaabd7a8ba2ed73a7f5d99acc23914869a284be376a997eb7873f1504babb4f8ce456d1f16ed5549e5597e3b997e43551ca2f708e89a938f1c198e6c1d86f4a68c255bc954b252b60b74615a50ae969522a550292923a7144db506b591d622cd6510073d3b39f5fb0e9326d244180cc91a8301866584c5f015b665540c33610f015d6372180ceb23bcc677cad0765a9e52f5bd436da60bba71913e75371187b9827edd5261b07caf74e959346d67bd27a5e7919f2a513cdc806e5650c91ad2b17e6a1394ebb39258499a86bfdddee07383cfb39868d6122b49d06605055588a342087f36151c95871bd0f7c3fdc0a1460b0815fea6e2050eaa464dc7d0caf4bf1ca1dba603fa54e8a36388e208bd2dfc31af7f674508715a0eefb726f98c4b5adabbc7cbddbdaadcbdaa22945252fafa9a40fd818ae9d3b3bebf018caa2ee57b32bef7de93ec9ca47a6b1743235cbfb96f41fbbd3fe700d8d555d5d6cb3e558e4529f9c927ab0ac8afb7e6bfdfb8c507392debe1fb3f7f1f1ea14f7631b8f66543f9a93953c2eaa25710aa5d3bc406abbe47f4bae465597c59a2eb92439bdc988cda6f65eb72dcbb37d79211234d64a8943de987d8bca875113fc83a4cd480280529bd280b5afa9437e292d07518d7c57b11949ef43185b11607949ef4409448dad38048d19889b60e235465fb20d202da3c4feb27b608f4d264e6d639cacfa8aba1a63914e5316de38afd10cf3e4da13ecd2473ce5fece6657e8996e07bd543ebbd590979d3e974938abd7c1f8ea168b24ff4e9bbea67fcebdf575a8b0f717e6338f1af391f7b1f5e655324ca4699ebf7c7ae37df9befbd87bdecd3e5fa74bd6b9acc656e2f372dc7d9a633fdfdfc2bcb795a4b0fd563ff7ca81efbf9d73386533d765d1f33f83edc924ff6e96994ab2410fa4208337eeeb891b864d3e4b8ef4d674818d5bd5b95ebb81cd7c3fa50e56c8dbf980356e02aee28b8ddd5b6fdf780bcba48647c199f9d03f1662cf8c6bf16eefea2fa063b7433f3d87fafe3e99c60b70b4cd57957bba28cd1ca9e84da6e9f744cb493b868f5dfe0c7e740380b95fcf5ec82f073e0bffda8edeefed33693bbdb485cb3fa73ee3133bf776666d67466759ac3c211de73da36abd3f6e9f6b3b4ee7d69e3c6b89aceac4f93ce97e001fa59c21012ddce39b7de2eb242e526dcd3b9f7208c9233cbba30e77c349a9c51daa72df569a67477373369724945656585579a33ce5658545858584aa414161614cac2c2326211612c2c2cd54f9122535cabe9e0b87d27f5fe5d4af424ddb4a493533a39a99ca2114aba292775a81412a9444d25930b35954c2ed4bdd41235954c2e544efaeeca314bd4454e1717279d9cd2c9a963a676e87f96653a6690c1a525cb72e030b1642b2aa52ccb48590a4a46b32ccbb41413a476dc3d8853d5cbe989a78b1494df05a7aaa927286f34652bf15f2492731289446ade15d3a8b6b6934262a7e24eed58b5b50d883585330ab64fec3e650575ed431cf30aaeabdb39e75c37f7157f7375b3025250b8282beb7abfb93a7799b9bbdddd9d8092ae12974aa57da26dc8061ff48e384ea698a0115638d2e22798675ed7f5de7bcf9fe3e0a1a898132ae6a48d806e5f794aa929e8cc138aea53cd139a9282b6f6c243dfca2a19619689442d406036d78b4ca59ed231b34f130e1c397278738e1c2c2c26138e9696969696dd9863b6a9c505fb51d522f889d48979efbd64ee5d19e6afac75a3be5fcb39f9d16937a9fdd750bbc1a4760b7592aa046d67a0daeef1cdfc51a2334c1d3afe35ec46889b09fce81ac4caec132035d313b809e247572056c654927107dcb163c7dbe1bc79c7ae88b620a49f259599d5abb329b9fdb4329c65d8cd2b69a625280dcd34647385656a34300d34acc944c3c491a3861aba861ab886161a4a73eed88420a04f2f2f35d4701363c3a9b4839e4e3030bbb246f85c4ccc36a46eb4466182286877db3065d83167384d1d3f616ef0e61b766037b3c26c4b02b6d6ea353a613dfc60597d0606f381abbb616a00983460382f3306fbd195665386655e773b9f9549edd0d40eed5f9659973b76d870e26ceb15002783ddf0cb603823040420003e78a01a871c9adf1d739f6469e6b95acebe5573bcc70650937bb0d8b54d8847a1fab30f3c8e88f12448dd4d487dab84093d1508d708b51c9d55024f756d88a76d6dd555024f652b8bd11c125784c1c5cb2e84103a08610c840da13b841042085f5a892bf163cedda3fb622be3524da0db27b7539dbb3f6f583db95e505921eb26c1811475dfe5a861c1be6b2d628af4af056afcb540d5c96a7c986d59c47107c8c2d5fee15a73777f396a58f03ebe8b3042f8debeb84703a12b46a72450f7bebbae1f6652f6895766d70c16e3bafcfb9d805a15ac20b4aaaa42797527294ade0055555d6a6659c148295f4ad98ee2463d1f164ada1ad742d438b72382542095974707ea7bd927e72465e7d2cfeacdeda6b7716ddd9728040e84f041086bdc84a8409ec381b24f0bdf7b2f93d4b77057cf9413d4a4b9c01db57f69d80d00911e513dc89c2edd35df30fd0ceb13a150db505efb547d66376f5048eada173fdd1e9e994a38a05ba9b22eb69eb94eb9c32f8f7ed74c5e55df153774699aadeee4a603a7cb0ce01995150baedabb9ad3706e18b270ae9e33a8aa9a7093b11f467ee00059de50e48622b573fc2f78b9672bc6ea63b442091d6283247c57c5df54aca8fd5d693a8282e8066d50500caa6da4e6f8bb1b8688a0449a4f6c6e5d518ea0a1bf05a9b203556adb12315b0d55ca1fcd1d4d865b4d2aaf1bcc9a24a35a43a8a843bc805159cb8912d26c946d580580b426a95a5d2d5f9aa5896ffdf65bd6ce5c1897a17615e3b002f2d1524acdbf92387088975a6939f0c975f2855a4ac8a9f59b269d6fa81d11acdfd01bbade72465e442326795a0c72461c11229846c4993061e24c9c91a1d83b2ee5ce1b22d2a7763c7d7aa24f06b802dd4ca647d1a894234da4392371767c42a9a7e453c5f9acb8e05f4fe711c9c2faed59f1866a7f851a2968d65841e74585ef7c3459ea39323202bfb11f5fa3460a1a01edb77a80b6878e6af5d42ef958fc50f082d2dd4f5fe853adbbfbe585c9b54df3a0e4dfaefe9abfb97a5d9a95354c95c577f7116708979ae35a6b427a88d5bc86ef38cfd5496a98c77fd0dc1494abe3f9fe204db3a5fc31f3eb20a90ee2261dd441411dd4411de4ba0ce62647386976e2de7b20bac6e43f348dffd320dce9f72e55b704ec10a9ea5a0e7c7747594237ee09e29eee4975900506275556235e7d2cdb5cc57e770875eb86aa1c1313f352398663629c5420bac9f93d5a275db40e83256784c39789d8592154a57329a4186b6a7c1d768719e6d11f63fc99eda193aa9c2265299205cea578070a28b144a98a35579793d32bf76bbd66ce9fd91ef0e77b0dfd3985e2b789562819cd500e1331f93203022bfc276a6846a7fc466bf5df34d65757ebbc547159105e115e7f59577737cfe8c9932456a062e7e7c7a7ba1fe72636a1653d0b655d6fe9c4542652a1b2e8714bcb82998b30980bf6691aebdf6f3a96a87a115ed8942f5596aab46a442fa58fac7cac1fbc860820e6a24f5fa476403794657d7f8a0041f57aab5f94bdc39c9c88159a5d59018c7a2da380ae12301881562563956dbca1ea755da75d91b6399110a23561936503a2b6d1ebabbfaacb876dc2164d3052b51ca761eda6d89feabea2ef2dcb925648e9e30bfaa274b26bae9799a961baf405855bc9bd27a157e4a0e6f25a32c36f9c44c76f8c468dbfb1cfe837c6428dbf313ebb51e37fa6239b2173c9d6615c7e633058acf83264eb30288789bc5363649e1c31b2911ab56dbaeb622087696d33a97c49db284a0a49db684b0e6dfbd30985d2b69494942593011a5ad15434062269436c0ca1682e3751dbe06f3ab35902a93e4e403686e35e7ecc8698b5a218a89696033fc7dfbdcc369365f91c0d41f92d932ca91ec8f6b05e4a4a4da6ff53f5eba91a97a699d7575515d9c7a383e1f137fef11a1626fecc64f6149f08af790b13df010b135f06934a8dd8501b3cf179d2a85126c6281f3a8f31c6274f9ebcb1b9d459372075371b62d6a8e5c077efa30f6b85ba85a056dc391a65891e1fa5a020de20dea00f825e31e7a96efbe3a3679b4ca686e977ef5935dc175e38c10b2710a9cd42333304183dd75cffbc43f5d7d36cb3e51a211ca6b5ca292e66668458a11532f906551784568496554987a18fd20f81d1530d02298fa2f970181f692957f6439f22b4309af9cccbcf3b70cd9c446a787fde7acfac9fd9f58dddc0cac51f527b6484f36111ae45ca2fd6f2c3e81fb03623ad6d52b477189c3328d7944719f99327d5b13fcd7c388cff28e31eaff93f9d505baa623db748027612940d1d66a3328b010652e688cf62603134cdfbf116f3379e903b9192d227549fd649b018dc093be762126fd0c6fc8d37e8d63c426fb894cdf38418eea4c13fbc4b2e205987a2b8e8fd51329a8d02948a7e34ab95d18a2dcdb4febafec232f8d705e1eee9da57693e5a6e7502b0a28c2994aa3f0a4319cc5c23996da92a632ad390f6d44ffb843dbb53939606007beaefebd49569765f84258001a73ec147ad0c7cf852f2a56100878a691aeca5f22cd5391b663eff3a147c30db96899050501010101964c0dff6a73284f065697ebbf2977e9b95bd9698478f9e257b295da68ce5557e252b3dab68405e2dbda9a4c22cd9c57bda9cc9198544d27665e03fd1c30c853e67ae3236a254d3592655e486165e8c449ac4b2983ecda9c1bfbac63888722c5cf5388c2793462f1a3db315b32d55638ab60da929526ef4515ef474f4cc75b18f4f75007975a4a1fa14b992b27798d8eeb12fedad2c3a4f554769a702e77462580957177bc7ee84cc57b5944ec687869c143eab22409f2e5edeacca66b2549fdcb9e8feb17fcd1774932f73319196a0fcbcb303ff276641fbe4ae4f8d23d1a0fc46b411bd80666efee622dcb190cabdee9aa6dfc56370f1b35cc6661093bab9da69ecd44d56cc49d0188076828001d31926a09f2000f9f839e3070814820f2c9001e964404c8a9cd1536408411c0f900ee264c6d0e90714908f0e2a08423c0f90178420338ad0ddee9c8fd14cc270510d5cd4e249170451e144d008628c9535865a72555555d675c4c91136fac44615a9161dfc73f7de5ec1e5c8026de3bdf7d89995b4d445b2042ac85017c9128eb0efbd07e17bce4941e17b0f4208218430babbbbfbcb86d0dd9f19d7f2404bd547f76f00559b99d9fd39e7ae836b1fc26ea871a0210eefc17a774bdc2174587fe7f8c6df60fc7e1c6cd5d835665bf5efca7011d5efcac86c57c6ca8a982bd3a59591eeee48e88fad560fc783ed11b3bbbb1205eec76fc181a2c627ea6238b216c14fa213b50547c6266a64a22e262391bad8562f37e00fc4eb8d6b45c49ae35f7d8e7c592bf99b6d3fb61611ebbe115e57dbaa9716fc0b5af02dcb9aa6699a73cebfb279cdeb2fd395859d6a655917550eea1ae1ee2e7d729a492be287092cea66aada0096a0b2ee0f13575413efd02e3d9c1731242b5e5d254ab8a8fb2f0cee1e217c6f7f4a4e4825a1fbf2dd5d4608df734e480ff1e636c2d8f75ef572eeeeaebb4b8771d4c5b82084104208dd217408ad1a33775f943b620310b2b801094b1bdbbbcfdddd21841066bebbbb0ebbbb454bd0f7dcdd64f0ebeee6eeeeeeee868f4e29280aa4f35723d08418341168e2077bdafab475bf35c7adeb2d08f1557c150160c273ce9d73fede737fef3df7de7b0ebafb7b81ba7feeeed0ddb9bbbb78042eaea7b9bbbb7377e8eeedeeebbbee8bc4dddd6338db742ec8bbff32bf4f1442082184af218410420861bf75c6112b98d43d52c4a7d6d43d52e4a7c2cd1c96017aa448916af2205467e3d89882507510423786fadeb36a4ef4fdcdfddadf5cdb84bc2be06ff61eeebbf337e47eda10fb5b900a351fee2f5b9f31b6bb43f7cddce64002260c0ac4230a16327480c1063360ac3801a1c5c915ceb975ceb9fe09e3dadd7d2dab4308677b7777cf3e49eeeece56c3d1067d8f64e1ab9c701042e8ba0a1b9880ef39747787103612b59ff91b5bed4d11f3aa887153be18216c7e161170b4618316572869082174ee9adfdd9df67c8789eb6272f1b7925b08190984d0dd3db2935584d1ad0442cdb9549ffc944a42f7e55755e63b10420821dc8074fb0ee16d103efcce71bfa3e6404d62c07af7a8ba6d1b3fe4fdfb2724887c6969959684123236d51321d9c86d48858faa5ba9baac5449f587242ab8efa3bb800f352df637a7bddd3054ffebda7fcea1d417e18eead336f7ee78ae1664dfe430a5ca852b76e0821df808d9c86cc7d1c0043018c10b7e609384123236fc4448369b84126d239f48016cf8ab8c48016c64902e80e00f1204bf7c07423efb3b1964f06f1bb45d58c2085a5c418d2dd85882cddaec101494f18316b4408ca01b6cc1666df6b71410bfb363c33caf2515aefdbda2a7bfeeeef6ccd53d420426d4f74428a3be1b0877abe105c25412ba7d7a10c2d5341ed0072184b0339d25a3c2eeeeee6e87cfb9aebeb8fcdfc5f8cfe3f321fe10c276f9dc92a13684b773d93451db5d1784e762c78e3106b151b089cf5964f80fbec8cfcda5d7ae044b8aa0a0efd2ad97c8094ea941df5fbeb1aa62f5d1bf5473aae8dceac2df352d2e0c885d6273bd8f7e2bbbde3308d858edad85082e6dc7fa2d4875cd496095c0636395aa6c9a4adb184b3ad88f1ba374311a913d4770f731b867d56a320d7a1de9c1127563dd233dd8e1e71ddc44b21b861c352cd87fee1e8ca29805e21af2a2a81229de069f63dbdfa4bf73a0d5a8c44dd854b1636a0600000000a315000018100a884442b1683c8d534d6d0f14000e79864a6a4894cb43a1280a82184531c620638c41c418430c21646688c800301a9d350c894af685c43c1709ff74f14bee9bea2716e9e6e99bcb32bfda766d0798c8dd403f2610c01bb3bfb3480c52d25c995d9a2d4f3c7f742bbd5f1629f7de9c176b0ee025986cacb80fd51a0a06623d6fff93ca953d49196700855155dc5ae7576186bb4d5e51bb8216bc317f6221acd8b0519eb6ced1c766a1131f6d84b008814e2556859c85cb7e65db584dc54ebf8016a2d8483673d55961597f8a20a21ecd86e3756118e811588243d55b629662b5f11f082088b93b113a703621f044a38bc1e5032147ee3a96482285c5c2932b0ac2ac5cdb35328813c445f111219e1d87bdbb0bcaf0eaaeaca8290bde13d57bd9586c5da228a1af31718dd81ad3cb8cf9c779a12b79f546a90b934e8c5e684de2c3809157c0644b5913c46e66f7b3d1b7f332fd6291699f57666cfcbd7d8ac9c4f122003252d43921e3d4e994c5f9f37a5c6c764e5495dfad9e45b320ec4719c8a01c06461b34a21646643deb94a83829829199a23619607daa96481b51fa51b0bb8397203433de5fcf00ed3ee895bba80ac5e3a2e814cc4f7ce4b9ee877ad30938e9c65879ab2d148d479b250a1c077d2e7e31dd8527e0e45486e01704b0bb17ea14d3ac2d26ae7078ea283cfe03e148571697293e6f4f0833daf6e04ca2dec2a51a5c6d2975150bf381258c93541c710c6a3a324bc8791f78fda4a6f476858dd4b8f5a56e26c6e5a50fe925c6f10e9a4d6ace4bb65acb64854e881cc556b7e61bc4ca605326940d580b2d826a886523284d95633d2ab2190ea1abfdb5825e9437dd96f766d86849f61f7f5dd1c0319a210076430c4cd96da34ea73fbeaf03111f74f74a7931b806d08d3a4c6c9d0ebc7f35b9a97c0930c6768a11e9a5699dbf630277f6a89ce8c4f7a7529f1c39d47a9c84fcf65d9c78f864bc48fd4e496953188cbed8d98db7c35086ebec349900714fe8453a000b2f50d767d8607d9b8fad3a7007aca14db4b3105ae859afe26c89d083502f74b001f35681ddad444c8579f6e268a4146513e89adb4191ef322e02360c0462442663ccc29879f97b1698bc19de12b6703a88948a450af0ccc61136fd262f57808df66712cf46913a708533d123294ff56efce517a9d377800064c7f4d724e7469bccd998bb8841bebb0f40be4b8f305d1a0760305769801a33c463172dfa611be5f1c6f018740f8ee8c278c609123a80a6b92150b87ca93e71761749fb9df3102f7a1093e9795af70540a1a14d4f815546566e4a2a2e19af93dadecd4328d40a95a9b0f5a4cd2bf50e4e1322d58ad474d12ba94e0ff2af3e2138a8ba213041ff20461beb4feced18170e59db5ac3264d36ed84720b794e83c40f980387ab17ca337224e1852ba0b736759f683b5d39ea3d94eb953ffa3c8ccf68ca1c5a17360cbc3099422c709048f5f2d48d67af421d923f65c25b1496f72c18e27841a4c730012bb78e5bb81ba805ddcd0722973e23a1db8d07f5725019bf82711f18d3ab12632673495de9809060e20c81bfdc4aecad0a90c9938b4f1a84b91b58a0fe1a5d5dd03a704dd66f1823de7ac8823b7f971a0d11d42da2eb633484453768f100099e74840c1449ace7096bdc4c0b69b87734b8aec9e00367648ae1caf2734517c63867c044a49aecc826ccd269f8a895532cb379413de386a1710f768f4c4c8d797afd1617290e8cd0199026327bd6c455b4ff8c8cffe441cc43dbe3384a577fd95155728ed87b1418b78cc75e576c221bfdd05561c8c30aa0b9408de7a602feae7dbe7e275b0eb7065944b6ed98e736c17d64953ef18ba5ccd0a0454d2772a3126ac74c4e25515c569c5a2f5703ded230dd66f2022e0d37662b3362aa04c8b2327e6c6717bbdf5888b164a5a0748ee7b4b2f8c71b22b10fb061d5a81883f4bc88a2f1b66479e11cd922174e8ad5fb39669dcd8fbd7696cde987e54c930c4c69b898e36f2d491bf4b13d8f45502d900a0250d28a68f50d787354179352218a1ec40610e4d4e76b853a92456e8aba5f6a0b07af550eaa76a126c13bede3caf28c64c7d01265a515419c0e14150075b2ebeb20207bded52cd5e24ac6bd4aae7dfd12ad853af3a89f27c7edb86bdc6bd3e91584daaa3d6c09d6a6166eecbf076eee43be68ad8d156632e75fd18759c03edf3335ead85f7c2ea7ed2de06eee62bbe6376bf72b4078b82ba45f0f399b3f2384e3a9d4b8977fee1e761f29a8616248130b2eb9fb047473eb6df05044c6ee321b4fa87c312b97a0b672635f330b3c09e19a86f84d369241fe564c31f31e4cea655f19087fd6c1e5a324a8e8bb007fb5d558e82d5463f6d91ffe7ee1519fc442326412bc62b3059f3f02ed0c318bd3a49c700b84553cb47195aa8cff3f440da09057d50cfbc3ff478808e1b89dd230c69d3b6d5ed49e8b88cf5af507bce7ded6f06365a1193f9e255aa8f9403d7a871f219eb16e7ff9cadefaef4d56bedc95e8df405abecfa010e0184804de24f9523251370d598869f300d41413e52582e3c481f8b7bba54d14c8fb748d90f1f2f6541578a840c4ab240dc7e5fab5ab8297eabe813c56fa5309e7bad5e373b11471d36115b0847200ad8eafaca3a5c627f9149957a361d2d98ad327090678176e135c79b132a43823b15399daf3b5e3f03eae8bdb50d080ab831be7840e5024ff9c19165e5a16d72a2c40ee9a3d20b6aae484e7c7c632f80acc3990aba690df72320776e7963a9044235ccd0f70208826ed6083889a003fd4efd1f860b9236a22e985dc22120b81bfe0ec7aed4c98a6d73ce98c009260ce2e5d62f09b4c733127521eab952843514fab94b554b59f8dece750adcd774c2ed2b4a489a9477807125c089a86ab7c97e0aae9aa88544cbce0425615616db2d5f2980f1a51952548aa2f0540da0b2948cb3433a14c96fed9f12900b365ba333ead5e5cca8e0e4ec760c78fe7d5814a79a4f78decf732362756d7e18b705c6b48d381d56741d3ff87c8fa270833b0294f98c47754c255b17f21eb1f928cb8fadd8bae290b2e3d70906784ef2939907c838cf1e03b0cc75daa6af7e16b0b96f4d43c1bf8ad81c9a8af32457e3c7522720c6902d793b10237c08f110b4150236eb7ae3487ee9b04de31c686289656f0b1c49143e9e067d8605297d6b996d30860a4d065e238f435cc50cd5e175775453bf8e460302d6a2c8d20cf37f64ecb1d6996d62e8889555181b4331f78f1239f22084e6ce0f35fb95fd61ffa1a82a1f085ff0923ed8ab54086147b2bcbdaafce54caf69a1f43cdac2f873aece3516539818856f911c1ea8d1f51442b13cbafe7d4da0ca73a62900d18c5a06aa0d55c4ac3fe75c02f524f48e95971ac859120f2720ddaf0c5905d515dcc13d2180a23391b9260570615553dd23ef23f03ffa5c15d9549198e67dc3b024b91f8dc0c0aaf62b248f2c2286f1dd43635840cf64820eea164d6b911cf504d7eb4cbbd3253c5a1469d2a43bfaa67bbcfcecfac9c529a8b975d50addf3f747af94c22334192bf30c25195c2219987a04c8f59b150e7f5a39b4987042fad4d045b74ff3985ee25139f3114ce8ceed24ed4c9b17b53c6cd84c6b740a01c756f2f3df7ffe93d8f1e0426d014429230a6d63ac3bfc76a4b40f4944fade0a3cb8bf29b4fe4a30b936f16b9d03ad52b117f24ca6adca27ffc7f810992033b4012cf521a0db8c917deb116e0f9e6c512cb53d5e2bc1dabf16dca19eb3d2d363801be98a97c34b6e2fa7988a06e71dd1df89c8e1e503624a44d2378eb5a5d7e21ba9d82482bff6379b4111cd50a9074cb68e9c14dbdaaf67fa9f0ba82df90b76a700057f8df3f727cce9e7b0be952053d3d79e88ad18a9a9f92a89a4aaf23b2ec7cc659410ab5c83b9aa0170d0a67c5e03de9f1a04615a23289cfa3c95717cdde5c4b198f0e88988eccd582123b8a09ebef2c2ea748beadd2d34801a01f133b1f54fe3f55768a39fbb1581eeb914a20470c660f2fa201eb020091a8ee2227320d2a2ae59da89011c4b8a5900dae3ee89b96bca78c5fa751c3c4f7d1843accb0c2f896e2b1c9d4ff73859ee2de047bf18cbde1a9c0dba80f2d582cf0b5e03945e0ef77ea5846fa578151f6cfafb0b90d0bf709ca858bb52321fe7dbc49fa67a7e05a8247f9cad052d03f21ba1ce24a7476e0522066adc714640ebe47b8ca7dad763ab48e14c0aa082fbc08ede76f0aa118ea40098ed28a958464400880e09b267d0e03440935211e79faeecd67709180a6e8e83652595c8b7708262ac06e7eece6d0053707049b73a7c4298f45fb3ccf708b85cc16e29b0409bb52b040877ce33c6f1da55aadedf4e783d239aa1a3f08886663d499ea228032c99891a3469734c46dc99a78e6a212dc1d79defecdc49c070050d0193cdf8a975ffd51cd7afa94698abab08c5e122bf891e78c28dfd113246f3a0bd04416ce8fad78d5e3d20b4123c017130f056fb31d3543dc677fcec0a8d7e48703b7f1b119fef7f17ba9a6cc873d6d2ef100a2084ca59283a19196d57022e2d03a23653798ff3e347cb65b6e2a7f6f2a4b1f061c795a9242a238167a89b711bc105a8802e9192f316ad66d8cfed5532a002ef1cf34e432d29749e451bf8d68468de88ba12651a3ef66235a4b326d296b8e83981420aca125036ef52f76c32ecf1beb113515b24ca02cb47f26300c148c6152056b245dcfacd3e52fc65107b192f01a96c9cfce7dee7bba74a930ddc244bf4cbd32bf9f599f4c7bcb7c8f89f4e5a8f60c6873ebac9c24ae17982a97bf230b2d12774d970521e4f1bfa7fa1be4a6d74fe3874259f45ac1a4e4fec86f1c1ef0d55d1ec497fd3f740312fd8c07b725ddeab990cee3fe44e0280db544c360e2c336a4d4833f870f0d78808851a951445924c487ae4a5e2821f4a85143d1078a57f4df4c4560544c85d5738267b482fd51379c0b45935d5d304945ae5c73041c1f54aae383728fd369cd7f015bd5da82a42c90bc900ab265a27adb7f1b891b151bf7cf332a305e63d6354010a9500ee8eb0c3228232ec17d8ec3de63b1408d4ef3caf25495a2cf444a4501b54ac6c66d5049e96b24ef1a71909da6753ef5ea0106c509dba416ded7f10147ea8f03b0a3df655b41f01151a2475f4b84c6171c42d1e40d29c6404f90ff24fb951b1d169179e6724eedee49c325aef2164c3b723bf9e47ce7daca55a343bf58dc2f933d15f8bab7e755d56eb8e585f0097fa1448db64be73e47d5d34ecff13b3dd30a0f2864e40de6074a7f2a1d117d307c9df87bcccbe363fa655984f46cde4817b1611f4682fb5405d3b7eb7c8eb4641ac85cf9ed1071c2bb40ce4b17bf134eb5d43a0908a13e4e30b68ad539198d9fda123795721291f4c7c52b76da80fb6981546885995cda6c326c2ca4f1116eaff746e9658391c35de18284bb992b18e692a70a28d44548243c33be227a780cf9c678294c4b9311cc993b38407df0f06e8648e57bb16d71c36be25e62d4578bb97fba73f28c3f4f726da45d18265f4ca8385e3b4ff4e1eaf4999a96aae0f3f271d86f43ba2855f2bea85c78926901e0cbfdf33485c9c540e5552f6e107d8ca4de7f57742e1973b10e8f3c572409bb3859d0a1984443fd7822a0dd73fa4e6b527ae479fbb7b94045174cd7eee287b28d5b9c8ade16eb7c3011ba48d9ced0eea10fdc747c8327b7e6fe74ef8268d0a31211e56f2e4ce9110b121f42e417614db904b2d19947495588bf888b884002648594afe310f54b46047509bc56c6863b0709b02fa667c9a1d2822de979cf4fbb19b711821c4c895cb9e03c9c7424efcaf5925fd72f1f4efc8e3c522dbe259c8d03ededac94f3a8199380ea38a3b6a0d8d97f063e61be72b8d9a3b7074c7c485a3561606f19547f320d27e558f225095680348d3f6c9681296cddb8eb952fb13784cece008cf9e4c6d7e5cfaf61ee9611b81bf5960aa63e81507537d535040f926d85f01e6afb5396bc70713eb6e5ebfd3d36bde6aaeb26b3b62624273c865d8a718b4fc413c00cd6fa540f46addf826c2a780f52e0cad58e4d881923dfcdad4276cbd8a9632f8b1c093d60e31279abd20996e92f4b0961edc900e2858132b0fa1f1f13ed7942aa44dbdfc1243fdabeb646cdec50bf64b98bd5516da8400116da339779293d2a41fb592a300e76e9d1e940865c4dc65c5115f663c8508368c255cb34f61f2df88a8ab8faf02f4ade4bf024340b9f80aa5f0a2d62c316e9075a47f8c28008e1d40ffe1c307b310e8e0294d0b0c18e8c6728426c6b2ab8872f03559b1a2905c2d0f2e70a99e4b8062a8cceb804bcec65ffc8cadaad8e811a0e51529456a5b148b5b76ae906613a68f8a377197c8afb656502c131b4ccc52f4469b6bf18cb253d17cb26963965f1167a4923c229a2176dbf0d79368c82d5613f4afd243aacd0999cbbe632c5054a8ca4cf9f510c83e220eaad9d9173e651c250cc0e5f9e5da528011778feadc0f08b194a85bfcf201ff21f940592f20a5a00dd6b8e1268d64faba35185867e0afd675571e4808bcfcbad6d90d514c130c4e2c77a44c8682d75d4176a3418d5becf27c7959819fa3830261bae5d8d059b7a06ffa7461d06903747e15329fbe6b11ebb41d5c21d4e57c92275f2170ae74b52f4f1a2f2e18d7c740500066c0396262af8b146e721f7152c864f374abd8f74cb21e96ea2520d095717c47352a3d88977bcec89838da8f0338ab0dde2dcbadba3d7a88b8dc26c319414c21e57238daf2e8f874f10cb52f8760cd49f2e446649572c47cc73436eec9ebb0880d3e5cd680a33ed607355a0613f55480e41ae501fa7342a124e149692cfadee674341dd12f55d8d1aba6dbd767074df3b4e1e1a4f6f6c99255084516d8f80dbe787051246364ed083a32af532a4122d4b79dffd3b3f953a276a347c2cdf34b7517fb8245d4aa47f9bbfb10c1d9b1d82848abae5b17a977e3cc4b90794a7ec85a4d52a12e514f29c61e6a8c604e27501792f3332406190d6525ee6f68ff0ee6d774ba218dd83036e6fdaae12de9f450e0c91da7a549311b70494939b6d6611860ed6fb679aaa9225461aafbbfafcab14c47a8ca7c8e088c829905a0ae20425f07c551b7e813f25ce9754650d21253361227f214daafc9661e026a2337e2ddf343448e10a5319a1516d1959278f83ec50b1ae02a07961c51d9c08c631ea9d452f3c1f8a99c706c66b2a7b84ae8a733985841ca0c2edb57107773c5818f8c0efd79f13b6e823596d0beff5f1c15f647359ecd316c8d817eccfa2442e554fd2957de5a7f1890cc7068e572d57aeb9054ccd192940acf481c0bb6c90b8c0fe8eae67dfdad9ba75dd50c82067df65ff08390eeb090da11a445335b2a19a264415f581ec868922a1ef0c32268ed50a558e0f1b37d5f8a1604a59a35e84257a75242bba58390513f9960e598422111b70070590909b3601704f9ba1e658766aebd829b8a4e8f76a3b325baedc0b113638e44080072df2ab8afa253e8abb5f912844d46169f37d4d6b9996ab6f460c9c9d702e9e7b322a7d76dd5ce0728305acb693090071038a0ca8b0e379921638fc975214594d07769d561e6cfe2db5c28050cc06e28d3f93574f5bec56f357b89b947fcc51bcc951d5f00e9b96d697fa2406f92c535e42d140abf985ae002ae12b4609569d2ac2f9d0b8ea16fe161ff0f40f76077ce67e59f656cb49f2723a8580cbbe6cb3feac03883a2674fd9dc2cfed646ed8c8ec352750ec5e485078c46c1e75f9ee5692804b2083fdb4a528bba67108f259bbb68016d6d62eb965aec090405b8cc4b84b6b25bd6dcbd351b107a9454d631176ac7a4e903db850d6f8c811446751bc3fa50c478e6ca605454eaf95d15882d2fba687a902c97840414f81d1e61ff8c680fc89e55bef02ca03551b79e08ceb0c2e537bae327f91af6e8a82a7ebd57b4a96331e203159cda8cbd17b28075a90feaa501a3fa70dd6e55a1ae5a23e5342e251eea3212699aa5c1a182977fb48701af16d9e814feb1e417f62f7b3a60090b98007a94c05ab2ea8b90767f979d92714f0bdfe0746621d1c28fc3d4e81cbcf01bd91a002494e03dbf7eaca1abc66c2e1480dff2734a7e7c20b218200e0a17f500187064a1fcf7fd8c22a36fda0000459e4562418e0e88bda748cc8200cb7600a39b5a207115251a08076d7379de17ac89f0c50964fe0cfb97c4e2b0f56420496a7b1815ae3a454dc440ef5232ff6c7efc10d27fa4999d1b1b39404f493006a292b0686758b46ddd64752678a028bff6f5d4628ca1ae0f92582bf885003de9aebc7b2d222d57c80b35203896e7e82cb005c16f8074c7a094667897e0b568ec348b861a5a2cb214e82543bd66a3ac34416d7f81f9ca0d9a20ab38edb4d8058a3e4449c5ee91546d9c5e45f18b72b8dec4dbf79be8e3aee3f225ae6f02cc542de673edb748fbfc06564d4c47e9feeb4a1bcc50a608e825ade58fb33e97d2c28fc5eeb811987a0fb98613a8f9c26a2950c45e77d548fce3e46f1b6e65eb33613f887868b3f8f43ae75ba07f05802c3015d29a9ee6ead5de96ed7d2e9c1d3d46e627da3ac650d9859633d8065b04572e5c94b574032c87225cf41717921848d178831e20466be8fba4340fdfeb6a2bfe761a95db8ac1ef030a1117976b023237dc1b26b3a794b9653a3996e2d5353f048b6b33b0e89d1c563d532c4f94dcc3863198e4505a6cf301fb634d62b95134833132cdb86d09102529bfbddcc40e35dc85598f72c3a9f8c300d08f0ea3cfa62ca892f3c1671dd2dcd10dc80f65ee3c5d24f798b9bd4a907572fa200ee271f15d041da4b949581e87adbd1bed243b3254f1f200761048ce2b6abfe298bed2e947eb371a0cb55662e74ca933af0ba6e22faab17a7f9861c05c557801fa8a436c5acdbde5cda8efadcad3df51ee01338bbe47fbd207cbb219ea6848328caedcc7edc151ca9c623fd42ccd9404723ba0ada6fb56ab2f7c3193908b0c85176d58b70b20ed6198ad5b9546184825a9f2462aaa03683853e4feffa049ee88fa359816f7f2c50a1212e0bca22c5e08548141b2c9b072ee36b12e8114ca8a9f840eb58a103659138f60344c3675257ac1d05a66cb199ed69d9d70d06d113f4f44afaba235d3569a4a5740c32ff9cf959d5ff31455686ed8f37d3a02a946357bc9521ef6fa6cd920ca8d13454f41ad8a84b3b0487e280819fc923fa4ac50b4d6a02dd271f64f89785b1a480b2d1552111339b3352f1ff36344c3ec649dda117c161be88d46ef57454baed454c41482baebcba61758b2f5d2a425403e1c041914a302089e5b194ed9acc5aff3b07d607fb04c04d21f008338b621f6a868f3e0ff44281bf8774914033e75c55ca3a7d91d01da55b854403d9d69c2921560d56db76de6f8b3f8d05539ec711adff84fe225517c672c854d98ca95d0e6a25a24205da213f9caf2721cca27aff3f51cca06b6f27378883bd603dedec865bf455609759ff912deae8997d5bb3e9aaf9424bba6fa0424ba6074b22947339cdd4d07f1b06a3ba5e7bb892cd60537c2d74630080aff40567a12da0b9c62789e00960a7dd2682eddfca9038493750b0ce7e5c3006176658aa2490221f0615daa6a810adfe68a510b92fba86cb6d6ba170ac9eaefc2048d0d25c310308a8346d8b7dd389b0adfe4bc359bb9a0ec1b90e4f0cbb7385435c39c01028443042d37be0ea5259be446335cc9c42238a5a2010a86abb3cba63baf307c13e5028ac41dbf886899143d2781ea6b7e927a29afd56fdc58233c10046477ff1efbaaf7c1e0730a1fdfbe320d77d37f0ec4d31489ad59f1726b4e3d353ce999228f80003315dd74f10a272cbb9f91c8ab4a0587529e8421f82ca70952e61b0b09d72f409e15bf884f07bff1ed7bb228144eb01beb4779abe2aa59bfb13843da484d28349f1b13bdd1d463c9ebc3d5371fa0f81a529edeaf8b413b67569efb676cd1a4f4270b00d8267ff0ac5c09952c2d253f43cd905b141c86e7dd4dfc752435c2a4d612842818310b6b61478032cb54956245de66494ecf06efde6d252dce773719b83c16c60db5b0869ee2c3e0866566b530cdd8e0460b0b5ef679caae1a40dd138aecead8537de646368c107a1d97a5180b5780327fd0e04a6252e59edde9809cf27bc2ba16a26b0bd7bfb21cd1b40428bc697ee92293adb2b2679028f2241e35814852447cf1e9269430e910944c0c0be43ed9170b02e490df84df7cb75e0a9426deeef5b7d254809f020188a05ea2dc403823bf97ad90fedefce6669f63ebac2b89b62fb920cd0cfb5f0dce30656d6854fd689a20faa6751e776d5a37b739bebd098b9a3cee3e54ed2e929e463fc4285cb8dc4c21282e55d586eb0f10b9172af5cc9ad5bb94df89aa62aad083948ea9403a83fe540ee356844c4582937370af214eb513815b1c87ff1c1448946ea55a90f3a320da8b2f8f1b305d8b165f2409eab50df46e89cd711f46e2d3c79a922f5a4b846a087739e22a5918984d86716769a51081e212056af9065c040b1b16f7383e82677ce92124ff3c9d704a1140b0c48931da41705511029f663da48112ed73d12849f83fb44f1483a5e699eb390e17f52f40b337e6404677aee4f8e288439821c30c8332d8035d39cd11166175c883afeb9dc9418f1cd642cc44354f5f18179c3295ffb5fbfc449e1ac279427e6cc73fab6956bfd53ba1f510781b27bf455ecf1284fcb96d941a35da9938d69c14e21e2d06930d7eb8cb18b5c29c358a9c2982f6a4809f3f1bb05742290364b555ddbc9f0cf646694a7246490844ea0e9f6db05cd7f438ebbfe077629be2caa70e536778bc0bbdf48d25d409610d2a0f1e0e252be3c15ed27ea1698a53c5d630969ae809bfc9db12d3ed2e3fae18cadb4ed88cc124b2e748c5a1e4845108e5ee207506d1ea8bfa166a9f767ba2ef3fed1356d828b1c28bc211213acd83f8c79cca210480c3ab137a5e6c4e0144ebe60a0b6484d23f61c0c459d0cea7f256bcef574f28bf45e61e2e0426650c4d76dd6dece303b35158cc63cb73cd3eaa6ca09bf127e69c7de4904550952edd612624824329bad631fbd209066fc1632896bc943bc447879d9855009d6becc960b087afd91fcca040464411498c006e065edeeb5f148d104109543289ff7811177a9c405b69da53a51119a78e1f6c6b1c7a677dff24af6e59a8cec7958f78d07444080b99c2687b8f13f58d1210f86dc909ac9574e7e38d96eb5e933d3484e5d1c84c9a4425741e0464ef6ec0a997f6796027a724d95429b0979318179aad262a2efc2771be0e6c685f5eb43e5bfeb637211970ed9461f8610be6673646bd4997881adf27d5add395066d0610ae9c98958f640674dd23aa0ed51a1b0bf63a613523efe2bf41c4f870d713bc33fdd34e1f7eb2700b62f791b9d14dc82321b9d436b8395e11452b2b9d48b01dc87f69749f54e4f7abfdb95b14fcc1e4804d12640dfd51e66fc25283b6c7cd422bf0b72199c8753abef35b383bf49de54e522886c8793a0556820754190e82d2f6116f3129edb72f1b9eaa4dbfacb05c9e2d1e3d18b001fad3265e0a65a7591ab00ba883caec0a8b9b06012ad7455465f974c12a9b54336df56ddc591ea482edaca6271dae082648d8ba52774a16d2e52fa66f9555e98df14145e24f5d95e78714e2fc4d6c97fb6bcffba51a24753f0849f7d220e28332bf12070fad8ba1a12a136b0d350e6a0a7156c47031ada24ba82ebc6d577665093740a716be3391033e2400a72e965554e5b5261b37499a76a0ae05ffea89fb0e678d5c427cc70334430e09019583f8292b8e7e87b50138c1841526dd680088fa37a475fcd8b05ef9558de573687be8df22c2bfbfba203d8e37e3c7c4f16cb5f5b4b148e117c195560117b792d7fe62a8de5cae2f665c7ab245959dd2856e231a0962b49a9f3196ca60479bc92493ab99d80581ad09950c8158f79a4e5b0ee51d6496bad3dea4a0aca61d7428d7b5219b7fb5f092996c6e5c05ab24acc35bad51e619c12576e60ec808f1d22f069872aa89a90b1a2833301c9052899a4ea2ff512c8b2e593c97b42d812e90f2d242bc831b763f9e32d8f7033a7462a7b4057ebdef95713870aa9f91cb3aa47198ce8dfadfcb6e4e0b81242ef8dd4b2d1f3b235e9a21ceac1695ba051a368b493423952a24208114f020ad5ebe646176fb1114a11a294fe0fe71c206fb23178bd534ab52cc82a810c0fc33abbc8d63c705a8656c81f60cbdbe914bdda15b0c2ac94505183edbb8024851458a7c72c42df0b2ed8bd68d2d1a748b4f84404bc4fc5e53025cbfc0bc11d1e59dc3bf15156f43b85261659e32926d4727268d5987746020f33ef6910c63fad2c1cb532f83999044b254e7adcc24f0c89ce544bd8c5998c1bab0718d900d11931103f8212c9720a1b1f8fcfef87dc74b83bf99053c2377a2aec55ed651b6c932de45b53f2cfb08f0c219a18bb6e42774c550de0b7e03534b11105c7f09a4754b9ffb2b26b56a9742d62e82d878ebdceb6f93dae51648ca012d10e2850a6e3c761d422af9d972e0459d08378b77fca7a8b3bc1ec672d73b74edbbc568dab322c4029c76d9a2388188657fba911c40f7c66658d2587ed1995bf4f30c2835510f3dfc02c202c0a4317b3ed57efb2fc6652700904c77b5c0e400b3e67564a5f3e0b3e51909ab970255f53ff3731017c1f3338e92d95a26b4ecfab8c9c466a6d797892fcc72d0cc370655e400a040a83a77ea58aeabe9f9aa7880bb02861a0787cf4d9bff07821d80d65d1dff051b552ec48a2c92812706e7ecc6d2336012dc1b90ad30c7fe75fc41a39eb199953668fb3b3841441cad6cd36a008aa20b378aaf1f8a5217ed95e651b1f5a00ebb6d9edc9fe568a74889c3b8837b6a9879dd768d8c3eca99d8b36dbf1fde2a0e1a88bc962c781bfd311f6d0d20ec2a613a62f25896844cdfda3904f2fb67a2e64a347639b297d052b9604cf16b4dc59abcb532bf4d388897da2f5afc76c677b2b7702d12b3cef573f59ebd8a3fb2956f1fa9d9bf4614b60446f7a0ee474d868be465c641508251a55a67032614ae4e65cf817f608197cc171f88c93b2299405ba8e24a4aca8ac7c014e2c39bc0757ae18274c9a41e9b2fab6d0837d1111cd184638443505669975ba7f84f7423ebce2825da375166c6d2d5a74f1555b13c035330a244c763413c6c6147c13abdc45eff1f24d228764f32385cd0c7cf8c421f5a1744419922e77f3ee3848ecb24092f6b136a3085a51b031514420e2d92aaf0b1dbed3eb0bc603c214d7e0002b999c80804fafec5d008cda1bc6b426246e9addfdeeb8ba3741492f72e28e91455e7b8beed6672126287080450e36f257f477a15e5645fada22b09ef837f4c54b873ee8b2ce2678f51aba78898e5820e1dd65c884e05ef0fdb604503333af8bb9de788fec94c0ab62859638a83f0fb6b003240b950cd458e3a6058900969292a6d06e3e4513e0220228cae1a04cbb253a8e5041c315358237547ad46e0cba634d8af6b808d73a5a16e9359c34523001106df2c49cff0159fdeb9e45999122a6bf504c5062276843a6c588970d1c3f189186f2b0bd63d93316c7dca2014425a933a2abaf48a1e857d1f14084dc8f70e38e2374b671e524e5507df3fa0c739e8a90fc0174f922715ac22d1111a26e839812da63c881f12fc410d0264d0617d249329ba8b7a23422fa375cf2777e933824abd2d36e6200ab5706a59ba50af29a3403c2a0ce17bb457b4c8dd49692078b10eea03a4c5d449b58fa2a49b96335b40c41c9ad694e5754242201a789d6e7f8e4c83e7d900ba585ab26acb441be3dc720d8c646760282457726403ca66f2121fcd6db9057413e435c324306bae89d7152dc6e9f405acfc93d25148c7fb35d8d88c463dd99a45b8aa0de340a94d639c760c0493847a4f9ffd9b7db492163d72364956fd9c71e6992e1f482355cd89eb48e8517f9468564f8d48e15e6a735845e71538e838c1d5bc6dfe1c654e46e1d144190a6196c91247fd7d746d0861c5c5fe6db2e900b363288098804f79c361999a8b0c31f6a79ab39a263a4c07b1dcdb1069d4ebfcd74a5a15a141b4c9f4348bb7c95583ec9d65a3cb4986f83843c25f4de7fb534311000d75e1c63a4509df468c31993965a066cd8d184b19528151fcb0a283642f0c63e3aafb3b9dbbf038e1a7287e96b981805a1189f643597caefa8792b6a25d4b5f898be57ff638c348166d9cc0766c3bccb6e58c23713916d20b369233229e40bcbd8cc9e70ee0f3a597752c499efad3783ef29038dec8ab55452fa877178654060f1562aa6e32f8222561ea7b681364ad3bb9c0fc881783a0de670eddafb26288842ffc5b18a96f3e4e20aa770b4f7a80191d7cb660545b653b9160306ba501a2865526c500f84e5c4341d2dd8326702eed442eead7ebd7262ecaa82721694887e87fceb8cb9d284492619f76ff9551cd6754ed4027cd2e9cc8378fa868d598155b571f0d6563afec04e790f433e72e9735f7d8621267e47c8f87a6f591fabadd19cd2c401907caa5998103d4586240cf9980b852eac81f0071d4e3af3b477b87a1d192420a7c60449e0c82cb0f2db6dc45f7259096d5b6a3f2b52647ece41b45fa22a01ce4670f1a887dc54daf8b55b72b4f8ea3af9bbf6a8fd706c0767a863254c45751b22006a1254483b6873f35efd7c44bd8071a48be1d50dccd943e21928d9b0aba77c155941a59a5c4b19980a4d6539449114bef8a4950cf7063421b2ac7dd301627a4602fffac82be303311b176e536dc9991b6569de12baf189ee2623e5e2f61c878ee3d48a5211e51a4711373418af7a3f1bfcadc75068f9570bfb1486630145f6862bfb2b8ac78b721df4534fc35872ece90501501f93c2048c8be692012d9e9956130e655e3a7fe011a813e68f0febcb6f61a8c3a0dd33a6a1a477055f85d3b17bac9b38fbf1504e63d29560b9e3314016f5dd1820f6a51fac4723111c8e9a8bd08914108bce4e41bf1ef22a55623951fcee48591b951fb78a39256986379ee42d2db58dd42f5a781bccb4eb17f88e5f4603ff769e6bd38add193b4c8113a6d2dab0ecf1de4e4ac510a9c66cc8c7500794b0a58c1b9d4a1881b08c138bec6eeded37543d63948f70bcd506485fce8fd08dd377acea6eb4bf6f07a0996c2ce4b2feb201053905d13e2eb18ed5778de012ec4a3aaceefadd91b14d3759cfad6d8376806c80f75a8b5d57dd22b056846bd2da35d5687360b6404fda12189a5b1a0b50c7a344d080389ee3c1af5e7c7c893f83bfdba97a6510eff362844f0ccc7111fbd006bdb2cae5bd6ba38e683c823356fb33c1ef9ebc29a8216fcd9066c91b11527520b185c4d75fb85caaed680941e2038a1133dcb43a8e0123d307c582684d317a96dd3c1f8b93675fee75708bedcc79298cab0925a990a8b807b9632a190851d74f036e1d7445043aca5b23494bdd879a127b65ba1cdca9ae7a4238b6927e5fc6b54f2844bf24015fa1732d243a3f24faac536aff802ecb879fc5879838be37e0978e83e9612431be993da1fa31a9fe6e03a676b67ab304e98b91b608bab6faf6b41c11df2a19b61839083afae06141e6033c1bf6ccf174a02c7ccee9638d0543c26012ed2f94f638583b976bf5ff16da48c36e96b56bc55cbe25a014682ccbcaa38f457ed58caa9acea266afaa86406cabeae79739f227396de4df857889938852b41f36dab4309e7d9d68a35ed6c5011e26b10ce8e3d51b7a6f9a074a32a2f847d55b08dfa270bd7ee99186bc3355359b6019b076d03d1afc317e5a59bb494bf2289acadcf26e5877f57f4b5b1a4c44c136dc437de89abfb7ec5efd7fd5396206f4c749fa90a3c2a403f0328176276431536803625f0c2d19351a7811d0761722d1d4766b2c7b6cd60c57078a5c57d9991089d8db099a6169331c2eeff06a935c86e9bc49fd1e8feb436ae227352173c5c28c7d95e4fe73aba90a1312aaf58c1f4c0d836dea292620d6ae8e2f1dc2f6273cadf5c6361f609c3b01da7156b17ab43fd6a3fa3cf1556e1e3efbbadb9e520ea7d0364d971051d11e38b851745be323b388561ebddbe073519ef20608eddd3219a56fe7f895da047a89e46219efb07c922b3265ce93f665b8efbe20603ccf8bab666e6acdd45516b9c06fb2ee88703dec83e0ad83dcb3e99238c882ebc46169dba03ae0073d526979a1928d23213743757b3167ddcbd31b6be1048f0e59922eac531606c62722fc7c32aea61fd1633a2bdf617bce0dad8e3e252125fac688814fcfc9d026be98d74890b0dbed982b91efc08248c216ef8b0e09c424a89f8511e5b5dbc2befd286b2c9d06b34df67523c497525baa97d6deb78414eed4b994d4ae1382898ee7a92d1c74a30e6a8ef324c80988669c92c4a5859f457077deff9f9ccdf49991872233b92d8b15c633a95af418155d6f4c4f6a3eac39ac6a3ed8f8b6f652256f03015e5b223f1b836e24949af2a42806f93b2fb3c60781e4debc632123e41c4a407eca0644248dc3854751be614df42a946c3751adac33d81cd07c470859722c242d97f3dab961459d73e137572a92468ac74d59edd05331e5b264063fa78e098529c5427b1681ceb7707d2bf51936f64f955e4f8b0f058c81a96e4d282bbd899fc3d135ab417aec3445dc4b3bb0956ce3ba1c3bb26e7d473115d50c46b9430a5834350db926082001cebed2bb45e36b12bae9cd188b5da542834b9c8751b0b5144529d15cb21a3a3db431f7a593d234967f35e8ef9efee42d17dfc9babf9abdad0fd7b1a0fb17cab0eec6294916acab94fa7ac8604eb12dcf0b28611ae2fb96a4e488e3bb02950f830c343b43ef10201e902a8bf88fc42b4d845e1cf95d5d1ec06f9efb1d84eec0e24a4dca750a893dd41a9589d575a1533713b9572eaf70f800f402151f47793977741319973a5c320a331d7508e3a2cbd6f6fcbd830b5b7d645e21888511600a08554e4cd97888849ff35e2c4ae12f1f95119ac268e07c81a70d56d37991dbac95d8a05e961101bf86540c3bc6a266e21ad08146984c5173161e37f8942546b02e364b63b6341e195c928db4c2730ed78e472110b61c219f64e5c33dbd7649c51aebfc0a5aaba8cefc76a7ad4f05b06806c977e3b14c22f5856d2ae87ef2fd6e762f813599ac46dc074b22c945680fea83dd9c098f8ca073a64d04363670d7b1519b3596737f9891d5f1414fe2bad92614a4599c40ef231869efbe0edd47c156462488d68c140fd80d868b4bc5202c2f627471bc6f09825e91e4f8e79795aafefa513f956ace6f3d545ab0ea49d19c478b667c61c998e2f1f43c53e83858e2fa20a4d1bde263d76ea9a91cca1834915f83d6c50aaec623c614b2d6accc7078ad613a4778e603227a08fb6885b9d8348f6449ab880555f293dd45aa222bd75ae7613592d22dfabadba1c575199ff03a7f5540cedf7cbe9578a20f62ec7ae0d30f4c7a84f77c5209008406a48176774155402e3bddb29d0bc72dabaab3196a744eabb821bb26c1076e1a01a005f39935e425a40222da5765942085ed94166ec984643ebe7fc76eb4f38eab6a83384a49a2dc43badceece061dbc8f0b7a205ff6ab22afc138fe0c92d701651222582dd26ea16f0eb9b77de6ef120a4790b2415acd7845f137924ce144103f1ca5f2590c0f89d95a49cfd0e44c30465913c5268028f821dc9fc85c9e34e78df34e0a4cf1fa4d0b3a5e712b261079e837a24260ab2fc94728247ec2eee20f0edea3f72f49dbf04393f1794409bb92591da394b20182f09bb0a1615357034a2e131c1c5ee0f9395ff77bc30afaa0c381f46b5c107ee56e5d0c0cf5e944df7b70d095a2b0507bc033f9f50dbf3985cfb1369ffbca32a634745719fe4fdd5608df40e4f15c93c1f3b3c23ea6b1978a93f90047ab5684074cf984258a4b36d256f6e5e783b7e9e2489704bda57e4604613858649a10fcc63933bee737dc00ca374308ed95d43b625ea7d6a8a4f90d8475ba82d50c5a7bd9998b739f25d50747b4bb33c5c0c02060ab511be75d243647dfe350170d9a142786ad94af7f7a3d6374b1ca7c78d68160d5dfd2e054c6ddab76125d8b5ec1401e056becbc77e9bf5af1b7fe0a3f319e77f31f9bcf9b55a3106f31d628b9b109128ee2a3d2bafc251ba2605f3e7ee51400e82641c9149c46af019eb0cbc1b7721435f34b95a5ba2fcc7719213a48ca80b22f0426d817c8431b1560342ed99306b7880a80d4c5b96080f4c00156524cd0048f68acd0ae9cede82c881301f05d808a229de18c020854b505a2168b318c3cceb0f351315e73bac6086e0fd4d779fd72ce2a80a72aae55c50e6878925be969679338ff95020b3959e7aaa832e2175488df3117c45ce2e2be0ff7049b337b36bd952c21d0cb795cd3addc768b701071f8339e05cf1b26081c280d18f93d34251c9e38a8d8be06732975b74310a76c6b008c97ce99e8f9408820ac59003740c498318578f5e5f0a94d5ccf2c578f2ae2de063588b010f6758a07abf89d945fddb50aa3be80db9396c1c3affe7d8e76577c18472142840f077155c9b3407a00cc2da0756010478897d082ff35b55a740f94854834f17fc441ccad5c74d4898f5bc425ca7b04c5e06b232c22c6c5ba4e9aac9c072210ccfab2fa8b87e6f670be9ec03f1b6b65e51b9c19f469686bd55556d4c6248c52afc2fe3cb874160264d54bcde3e3addd76cb05287070dcd6d6a086978d5b7b88441a684724d721ae28d4f7e40a951ff3a40e292f112228eed6aa1a0b1629376f650189e3c6227e91dc6fc5b0513293790ce429a3c47d2b2e98624bcf9867b8f7e8143b9aa7a87a28b137ac88b611a88f1dcb45a9780b215e5b161545d6d392e25cf7e11e01a3e482a31c533276d2c22bf9b47adea4e3b1490e4dfd9d5bae0196e1655237254dacc883c6f0a049e6d4413f98bf0cd142ddba3452a1c7c150c1a6c61e0ec90a8224ff9c4a9dacf57efbfcce5c057bc56ef2c5f0c244109a555154a3411ec2b9727ebd9fbb0170cb1d1c06dc4fafdc16cef8a0fd7327edb98d07435af57de89149722742cd4f18302d718d27faba1bd82eab6cf6fe36d6552a848ce4cf90ebf1b4c4b23a2f878fdd64596054f986335716909c523834aae5dd3c59ed45089f4adb0be2556a8b4f120e0b146894818a7283f15d94bcd3b67ac2a2161f5d1049ada2aaa111f3d8a5827f31662a40638fb044228b0ae376c4eabc1f31c34f35cd625b225fea50533d6a55df0266404c205ed5b8fb58ed7cb24caf306e00ec278fcded2c31701ab3ecdc3fa1d7e5989025217fdee720aeb883f105357d7b73c7c3d5c7dc05c5d9ea5ae4486a737c99c0f1fd1af92e3a70c0d40f23183a96cea0fb10d9339146a73919715ae00e9c91cc1a05b28f1080f9cfcbc337ac0fc7ee952807d687f57ad9983e8aa6ae3b43c984f801f9f4a9253bd42419c4df6bc331c3d31e48ab014f42e8333f8d0a870cc7f2a1b57bc74ae2e194e0f9f8e77a20c70d630bdcb213a3a44cbc8ecd079b39a59d229753ac1346e58a93096a228f2f9fd6c96a681ec24e981accb5b2351f9c9b8c06c44fabdc8d3babfaa83271b43d715932ea06ff90d16f7f97faa2e5b70f5de47c08846b70dec8a4c85ab1ad03e20ffd12042d069736d899d565b01c3aea78a89431cd6cb8cb7c8454581e096e07561f9bfd5a7d80eb551bcc8ade67b818e926212f89a2c9285339adc8491ee08840e7e5f3b13ae846ebe6496c24377991ad7374d02c77e364c464ac93f76eeb2b27c41725be868031486b825734c912b433dea81e7ecca344e582716fae83cf8416eb5163911cc68211dcdbecfc360249c414065e13664cf1b80274306a9b2b633ee70046d6a57c57748f65c6b0c5ef9cfc414403f38d412731a12f39ea11a22df05ad15458fd168e5f3d4cfbf7b1d830754cae05bc635d129acee0a4377aa6a1fb4d41ae7102899a54e680ced632989929db0da73a39aa28ebe6224a32a71a1f836d8c91242ee7d4c55ef86a8cd0202a2a05ea612185ec264b7c2102096333e426df06d204a892eac42a19b711712d409f34346a84680a18cc33fa6d3ef6d1b6574898c496280febf0453c22f7b29ddef99675eb12655bc469ae6213073e9eae4880f75c9b2242dbc20b26966b37f9dc14b7578854e70326e7e5726ee8ac00e41b5810ad6813ac6b1294aea53383c91919a7de83399927c000cd72b649c5da3391e1281a677c2cb0dde781cace828f24b1c2f34dcee2e8de377ea388dcc07631cff14b9f09be0009935d267b4937a88c838b862da43562e829e5ef4495b9e50b9d1d7ac17dd325003d5c117d491eb4f687bcc2242a07dfca863606cb122a83b32995a68d4f63f29d983cd6807f2919142abd2f6a4a4b78d4fa59a4869c6c3a3cae7cd2e51c4a50d311a8859f00bc0dc2256dd4afbc5bc77c40c92044c9af60f32e70bfbf8c2b8143ce974c9b50df379a1a21ad204a841d18c4a208fb1dcc21e14e00ab56fd86fd4f05cc146c40d3bfa9a5bce4ea38617f003b6f184db35c6cbc6afa8bbd6e5f2d16040b5cb44df63ee5fc7c268d3c0d964a48cbba0252cb47569259533c5c70b97db36174198989b2c72dbaac44c3426cd1d023bb8ee464a87ac9e2e39f6d92968d8938a586b32d0dff5dd0aae6cb6548316c8bf54a590372b93a0035c3bafb66509c75360a0b67dc1ecf829179e999b69e7b6856348eaab6650237137db8e1d9aecc27f47dac9368f150851726759e03bcb1ebbb3bf2433167dca7063074ccf5fe1f1b50cc117996f865f3ae246b5690be22c9b129dff53e3db523b3da795b34eb48824d138433b69182f6b8aefb4c06f30e244b513d28784d96c3839b815ab5aae61e00434e85e3cab38518b2520989c201ebe29359204c3f2f98c1215f5fb973b1aece7a9bcc912ae06670c1c5a333a2f82f6771a342a38d87356cfcf0e3911478b11386b0d5cf008f683ea4c4e75931d3e625ba8ad731368b819adec968054e426cea827cf970ec8294e647e3f615bc7d711a049f5e7f4a134ae0f31f889e7e47e264fe03ec596ca08cd4ca559cb7b24f2879362c51bac0d1fc15a46bda0fed7bc8a59c39282fe962a4fea66c736f067711b4e06fe8aa8347657e5c9612bd16bb2e7397376dc1b1972531bce48fa8afd62e00ff0b714b55a6649e3648bca46b813e69cd9c76271a0933d75fc938e9d320e6182bd408070ad4c34b0a41594ea86f3eb6d9156f9a03c3b7cc1e0cf4b7ea4b16b646f423c704884b99b80c05f326d99ae40547a2338ab29041b297edc21c0cabf703bdbb47268f8718da860c65c4189374ef4e5f0b55855d1ccafe41bd43d3ffbac1484006e0381206374ae5489ed15d1e948273f428a19d71d1ed934bb54798644f2d90a8c07b99572fc950227af3ccce6ada3de949903ab4db841aacde71f246e5d69a2c74674dba1001478b733101d7de9f99a3179f9116629472bc19386ed279464debc114075a3810d55833875be3d38149d37753a08a86874f4bf63f28fa491cf8c0964d668243211f58640763749b7ccc7e475518aef25e7d955c738e4d69ba1318d6f40d8919a924181f6b589453a3088a6c877c6cf61e5ee469db1f7ec82b2d512d076e56060040c89dd0429b2e6a1d6682cdf2b74d537aeb043ecf0d5fcaca3ce4b5593c7f124c1c63a4f92abb969689770dfa727cfaa0d9a866238ddf980d4b7a298550e72c05e66fc63cc6d3befc0adc7e2985dee03b0ecee68461f03a8d284612c56317a5e8ff6cd5aff8cd833a0f2f76dc4934d43d4d6f62d1ee257b9342d0e040022de92d2ba36c3d7c730bbe24908e77f5a5995c1d93c7bc6100313c7f25c9e25418163e33c03ec2f3cf72da05747acd4c0e64bba0f4a2e0a0bceb85f15933dee1331eff50988db27151227c9f7b23e9483149cba24a9bc9784d0b138911653a86243a31a5e3a95ac9cc2c59f5ad579e1ffb592e63ad240b951e71ccf2793f411cb392f90f44ce62ae6ca4487a2540237db9fc314e17e070cabe34b04b6978dba69a1314906d5c95a79a57513c3f0cbb16fb354750d7fa8c73eb8028bee11b22d0a08bc72c6cc89b3706065b6b1364c5a5bd701f8acc3d85925a2662f49dc9d14ecc7de8b935eec0da1d229e49413911eb689920d6b2c4d82407b519ca38ac73e2fe87e8a3a3da99749a4cc90822626d4ef850a62819c7ef22d675bd9d382fd0115a80ad2482fac2947d478907a6e1a331da08889418d7137da038fd4050aca28d6b68c303eeb48afba785c8e6681d43c3704d6665263167ad5e25c0aef33757f0fc6e49136e4243b12936f198dd460d0ee376b79a5b526de3ae858a182ea63c556f6b4df7635cdc2ebf5c2fe1fd0f846792b18e3e714935378d36a05f0ca2e72a0341f90d38c9c651d90ba277de75f9466a6e7857844952bf6ce90b7266dff05bfbb19c9e056671702b3df6b4ced429cf30e89a1c94c280da3c789015fa619604f62345462d4b805a536ce9efbb04a9d90bbe1f243984a9a72f4e14ee9021eb04d27613c9a2f68f279cfd86b813bdef881dc61e8368136c7840b6425614499a8615e72713184364bc4e43f5982d96e4b4a9009ec64426a4531f1e80a155eae1cf0d7233f0f8f9cc88eb01e516d112f5183c35d0de4c0093284b114332aa0a8440af81bbadccb5491f6155a4727a4900ecba9708be23ee874d37d836b4ae628b3d2005fe1d5052ebe8835e1030e961035586a1f52f95e0ab572a7c27ee4b40e1cd4ff3d0efedf8c20b9e747df6f341a69680af970edd59b0462d0ee70e58cd8eae175a9498f2511654c54bcb351f69aee718925d720e1a3e500ea0fcce346180bc584e2a09dcc655839a20f3acefc0f4fc8ca828910d918767954b5aa870146b22088e7688e0ddeab25311e6dd5a0c66f96ec3550739bb055ee5f275d91aa6a50a3b71dfe0522e6e8bbcf3aaeaf0bc70261cbabfa85e38c91261a1864c5f2d107420e7e08a6eb882303602216e6ed3ddc2908a785534d11a06434ddc698e8931e180c78e6c5073cbfe82e03a6e34cdae0097a7fa493164f75cb6cc912360252a13ac4431f9f6f70c5eec83c56eb80dc761d2a11f61b858063aafed58d3dcce6a6bfad5943147f00e60331ba69dc529463edbe6193c0746a1a237c7cfc28f85082c729b97fe0c1580ee0e0620052a19fe23b2e077f19b196caf6637912c353ec5860037ba9de931ea5040d82edf11f0e94ae9735363aa22064484a173b654f02df06bc45ed040e5a6dbbe64e7be016dc9339c585db915f1bee9d3126fef6f50dbb2a08d0fcc14bdb6e49d0634251b350f5e29a2e55b8fa79134cc81dd25c52f63cee73099a8387040cae421a237266c0ef46e53902391ce6dee74a75d2ab8ec2481e6bbeaab650c364558b0e1679ee7c2a9d333a89acc5ae25545525b3d822fe3af6e9f1e89079c9f97bc5259f2902a949dd4de6045a5f962c244fb31d7b9b35b6d353dfe71772c4ca69b1db4c477356de016814fea2f9cd1b4165304f065a0f8d0dec46d546e25698d39e80fccba3426dbb8288893225993e6b2b8e05fa6912e3f3ba2d421fea3952068934eb2241f9f053e68d06d6cfb69f740e7235a8cfab3fe11a116be29e51dbe9a107ffef7a3bdb148cc6e273d16aad646c3a01961ffa85e5f0467ff80e02d5628d4b559902b463a0dd864b8109cafee04d58113185abd8ee0f939b3d5fa42e34ab14d6b67b59ed8cd78480349c6173e7a6d2af65109b6b4cc7a491d66f053a8169a09d6ac0d0ea6ef9687b41a7a16a329cc57f04b14a2e690416fa164d0ddac88ab45c3d05cec983133801db39a3cc417fdd659e8fa938aa43f109a1e12f3aae9ad32b064a6bec84d5ae2e1ea57a93abf293475d2b7f1e8c54d90d68de087ef504a37f9a32f1ca10868c0ea4949535aea9cd5ab13adab9ca2f61f8594d54e9268bf7f7f94d127ed117f12d148663a2ec3cdd66220af36046dd9915d674f4e0746f1d3e8dbc3095829679fa88a4f7a52b99a1fa429c554b566597230f0fd657b8874f4e20960e4a81e57426bc82ad685c185deff97cc20dad38d2781c9a57eac1caf231b771706d773bcbf6406e89e6abc09ece35759cfef4b8e75fe9ea3b6b4d49e71eacd6c16987bb69e5860f543ee015bfa7d6de1ea6d4a728f134172bf50a1cdfcbeb8f7cc8e7b316061d88705014334ac41c2fc388f211eabec918b7aa8ae5bb8aa63698610f3f845ae224e2ae51c84811afb379af954b74f4b3c78f3df5918ef9d17bfb9cedaef452a2d6ea1cd5bfc3abe2e28501329dd6de12ab5aad577258ba70b02e1e411d27dd4a103e50289eb5b661296b8a6e27509472956f4d1ef68965c967f1039405715fe34d515d0f824e9818dc7a00bda705540e21138234c4c48cbc1e482365c15907804ce081313d27230b9a00d5705241e8133c2c4844a136f95cad9561b73a6c7d571b656fbf198351ecf1b4e286646f789b78a7fa2ac0a4cc5fe43086d4fd798348e0bddcd6942f0e9f8a59a83be7699bd2ed90474c59581aa174617443f8b43ec53686907d278e2f6089537cd0140130e6e2400e4e338140a042e2bdba96c803d30518436ceaf243738030efe748163fc9a00409aabbf5d75090f98b5ede0e0ced6e1be80c7e0b8c59ed5b12a56c64a82b523683056433a193c70598f0356279821a8d4df54f9697ab53f9a54066a6eb1f645761cd911888427f1fe3a9542542480d41d0b7b38472d44fcc194027ec6e4572d95ddad3c117393abd63f0bbcc66b54ceb6bbc931cff5122073d418713d1b91c4f293ebb3da29c927b0ab74572af72a9f5d55ed6ffc34b50eff41590c30da6a748067220656d74136e5eaaafae972b0db9cfce666cab623096f55f4c81b6f0584702d692ea63da69308c221244148ae33405ee09f7b1039cb1ec5b926e78c5dddeeb056f51d4334e90cf3f1040f67e12c330b4fabe06f15edf0efa1c8870d70612e4fda6a65bafc6687336a548e04ad250a3ce38a83f996ac2b083c7d0d33234136fd081f2e79062e3b99ec4083e1ff7de84fcdd324c49edb88f8cf2aac289fc25d962796803b212a025a5f493c4310d48716103807e46492c2c06d2a99cdd6a14a7ecb1b668ff2b0dddf34a16990c876a6e0b1ebcf5b887e526b7bddb033c3802993b3742fea058ceac5b0904f21b87ab1eaeb962417f488a2e5453b5d00224850914fb916414c47783d595040c8822cb52c745b47698daf43256c4df816933d5806b514fc898de8a557cbcc8038edb8bf90373bab61edf7e03e54f924d4a0783ef7420e4394458349a17c613ca3167581a0a8218bd3fb33852bce9a429093bb69587748a9b76e060663c481ad6b56dcf590ba3f44dd3d0a4436dd1c250e4331acc8f96769e68f545910c35760014849a31b75db9b04e0e9686e9777d6332bab192bd0b86fab33fc8518b02ffb2323ed967291bbe1274ad10368f4781a2434d06d963d1e1b60ff8ffaba749f6a2167b8048228a2ffd185f5c7a7593e29f45a109c58712f7366c83c4f582ab338ca83acc9087c71d39aed8b22922ed5a0c5be5b78710ebe784f309d6cd0fddadb9f377779261806ebab18211fcefc95037272a14485dd1633159a424e2ec6c48bb1f6ed0806d322d3a243167ae7e4f7735460f65a96752df303c766fb85366d8dba80898cc24b3f5796e71c2ea3de43bebecd4ae8e893f311fae6e2848812dda0d47db390751fce1c32ef490ec93863d8c1bbd8224a4518774e847749bd8a7fdace8ce5cd856be120d994e41be8ff3dd524144f23bf6d04372a2d68582b7ba592e3868c28efc2ca904efcae147c700cffe625e5740516739a25cc4eea7821cd2eb7ba572ef52874925f3535395c07b40a404a5921e1250ce84541d3ba4dc9718865738336df32c2e3919395687c381dc84a024aecad639d253f5923d081bdb40def1faa004cf49011a599513666ad7ef74ff141d4e46ef6451a691d86fca92f9206dee4c6421736f22062dbb558fb8df6521525165537e7a0cf5d2559f21ab8daeb2f7a1b70750029bac3860f3222b5ccef005df8744325c3dc7e4de6eb36a649f0c7e920978824804cf33f2aa1f7f4a52fb48690821fe2925a1948e3d982eaced43b45be6cb596d3a8ffe8fba85cd35ed22012a305fa05ef806753e31d7a3ca4f1fc4d8f03fc656d50cf221042d1fbd2a2e55a097de146f1057f433f807388f4e3eb22dbeadc945f257c71ebe0061e22ae94d62309098d3047bd3e04122441216920a901b26452532820259d000c016086b87449913f58820d009b2606ee98a1134b320203ba7a3cb86cacdbae295998c95ae4ed2983fd8853758c7952b795012243168c7074950ecb648e799375ea5e710262cb48d73490a3dfe2c0a460f6e46d71889683f4cde8cc977fb87656edf3d585844eb768262140951bf44b17467808a3781232a071c30aca3d774b98afdf68467b44665bc48d0fdb30c2a7ae9cebc9cd0c345f6bc7b5600d1b0b3b11d200a1bf0d4a7638f6d0da01ab3a9c5880d4df70afe53f2665ced87c971a956f0353319707c4fca8d19bca90ac03b1cdad41f0c48acd45c59c0fc96eba9733196a98e403c5046bcca0dc98c29b13373a29141afa7a06c911ae08671ed54a2408be384f462182582ea7a7c32c0d2292f91c81b5326c4ba6ea5ceb0e1e9b2e1d49f49d2e25b282e7ad0d8ee97de30dd08e0b9750e5330d6d6b938b38fced8f95bcc2ba34b887e7c60fdf138851e01d179def2417869d709f521a6fa39937574e99ca4391415a616c9b11cacf0f9c4610ef1525733ffafbca784f91b8bd528e7dba0b6b6dc391f6e9e95cd3f01c9010ecdc5eed1cac5d88ebeccf2d01fb9dba12c4f6c224553eebb446a03e940e113ba2efc3e1a6455a0744641963b3b8b8339f99e3b95d1d3158b82ae3a2e2be2f7c4be6a1d476392d316a4036607ed56d8c0aeda9b3dbf13fef392daddac1cf9dafe792c5343c8cff01ebd328e7d0de81345fb52995004cc6e8d5c2e2469686a9188953c0bc2e6f9a11b1ba5b510644503d2c8af38e00b79052c076c1da58f1d22e0bdb9c4a61d8d23ba5384544a0dfc561ad42a9df99c545cce36e0368d6b788f61177c17987b0adf9e1c8919714efcdf441391f0079747d80d4e7970d55a3ce5917cd9e9b6af5ba05a00801d965992129b8c6820bef13b4c0aeec9d930592dac4401c5856e687a78438dc3aabf4fe1ee3f8cce2b9a0131cce62b0fdcf52caceb30271049f63a9790f0d06216c0d9990084033b0a1348a3ffae6d55a3d1442beddab0fe737e5b2d2008ae003a36ca0ac623afa782e443017858d07e8a8b3221a15e755f9f96a1a530606cbfc064fdd8df6df0970480dcaa44e615131742e35ccad7f3a30909c7898e424941b93a33fb3cebd5a3634457a7c0f45318d24ecc537b3ed6e909f2c756f14878348072840afd23d20fc46a77430a2a215147b4a28e0c8ce1b647e017b1e0e1630bc6cf9dd379911544c494777961e3af9995217561186055ac1bf44f744cb53bc001e502e0014c19c67c7d7ae26b8dd5cde1c09b64c3206768fa02fa001186c2ead000e26b6a846c9efe97087ba803150d84f4f404808abdf7668f95e68a48016591d5069f0fb96f7d7ccf80dea74d0a0cdca60dc0e7d1b249aadc71e7d1409181e24602ff3f16264fa05abb497ec2eebe13eba33f20c72e74348f968b064e5ecb2c41bb5f53449ba79b3dbc4e182e06d808eb63a13924e6213f09d67c20b2bc9407a8ed2c4a38908418c1ad99c48ad764207019af1120908173dad1b19535493cbdcbdbe993e19708f58c8220aa63f1f854597baefceb075b6bb05240310b872d4c0ce0987905b5bff89226363f65e1fc405e028181718f82d2caa1f106f4119a29163bf5a29406ca194342d2ed43dca562ff867336c439f165d84ba8f77f1ed2fb40bd580323f41fa2df585a85c2b79028053921608201e5114d9b6ba0945e6f88659a03137f8fbfbc87e9d02364e0d3bbb46a4065b781d7495357146f6899590754f0f3ce67418c893818020c709be6db08a1084fd041a358c2131d7f7ee44a1a291931ba98c043256bb55a00a0b14d4038a91a2805930d61da50dfd0ea51e1a24daf3939e9f7fafdbd4e51d71bab0e8c52b59db9bdbdbafe7f7b64567d250f8c67c5f85f50d00d098305ed7fa49383111f05eb39a619e79b10a0044920bf2a41ddeb7d64d922629894476f7e696015008e107a807441ee8893fc471e63b9703be0f191ca7744513723880075d381bb7375cdae2e5e7efc068eef797b4e9e57139e48ece68d3f8f49d6b729b384dfceb8c82c42fe238418c788e1022d96fceca8b016a47259e0378c0840378f084d3dcbe98cfa3242a3513c2ba0530829b2bc28ce0deee95b768652b3bfe8de3cce7a6646f319f772f9df46667669a4a2929a5afe874645d11cd33aead5630e7df061430a4fabd298585f4234db4323b08bd50d5d86fc3f74ad0c28b2ac850ed9755dbbebb0347e3a6a84370346e5b0163bbd7d82fd768c0144c381a87d380299e709afbdd2fdfd473cc3927a51652a4ecb7ad3b148410420dfefb7c81fdb708a5dcee4919617c54742de6d49fefc1003fba432945e862b465b62b421724b6cddec729d54614f0a6c3636e4de686cb2184699c0e97437e8cbff29cfaf161e6d991852a8fb981de986d27d2e4d00186afdaae0a1a10ed4d67ef9041e63da7eaf7e67befbde78c2298d5130087ce8e009c0e1b8703ee8823fe99f7e6e7ebee563ca2601dd7e2bbbe9973c62f5631be7b97236edfd1cdf8aec54fb98f0f250d5060bc4f66bb2e452892d9fe303b3adda309ac7b4060d7a50856b6cddc1195fbb7553fb2ed3edb532ee01f14f71422f85810a85535d818d3e3ff7a96dc1ecf76707f54bc59553f7e5f7a8a4a4836660ca6e7bf19b7758cbac5dbfaa058ab8e35ff4dfbeaab16d30b7b4f6ff32d7dd1c77285349775252636d413e4b25e10d2cbaa1a4c7f9f9475c03e49f6a4bfd9f5e89009c91ed3d5fa2b4b06941ebf20249d64a887a493bc1eecb74ac3500f66bd20a4dfe28509c19ea49360ffb211893d06982e3d1f96894a7f25761fd3c1f4f82fd2bfb7cffaf99ef456de8c6cebe7f427e92b62f3c12ad39477287df6b666f7b6a058ad8fb45a9534e30f6d5ab483a26333cb44255d453ed63a644f7a87d1906995109256d5805d1bad2afe560e823542c77bde54c530b8ea60355951832de5fb5b4f87ea078463c6ec4b3fe7fb61d427c87dbf9ff49fcdfeca79fb6d59bfc53d2dbdd57f3f93ece9d9bbdeeaf6aab7f7f5d12fe5e830d4cc5b80b7fa641dc266903fb30a887d7fd510e9ad957fea6fd85bef590544bb6dc4963f7fb01fd8574dcab2fcfb510a144eb6fc6959daeba3b7623ef2630cb6fb3a7fcc7f79cb46e46f8fc64dca12c5963fa150b25bd8ae4b162e7bc33ed3d13592de82e09e2f7fbe74ec87fcfb3307f9360b947d80edbae880083b62f6e7e3bf4fcaf25677a6a484fda8ef48decb6098c1b32d086ef1df9c29c05bdc9ee15c443ef6f6caf5b2e28617ad79c3bbbe8bfb7aeb2f1c6bbb715b6f7de6439b948f7610dc925acfb2b09c83fcab7f2ccbbe560199b6e60b5ed15fdd82acb8eb5f78de5837dff3e5f8d71732ca207f91e42629d6398e4a0535106dc3875a1b7aaf0608403001210739c801172e5c7080031c68d172d222851427299e3c7952545434852998a6608515272ba2108528545145151ce00007924822092f5e4c5ea080028a14a4200559b29cb2608105162630810998c0042634a109a62638c1094e70810b4e2e58b26409155450718423988e30c410a7219c70e2e404142850aa54a9b284252c81091326529082490a3df470ea618b2db6f0c1071fbae8c2d4451082700ac2124b9c9618c210867074643ac282e584a58a2a4c556cb185698b2fbef822084108c20f7ef0032210e1440418c000061bd8c00696b004d312a24489a285165a3ce109a6271041041137b8c10dbc783979a1820a2ac08001d384263441094a3029810a951395231ce174842cb2c8e28a2b4c5734d1c4a989d311f8d6adee202222124208213290815306986082092eb8307181051658208104125e7861f222882082e8d2c5d4a50a553055e189279e0003e6042609494882073c70f240073ad0012630c1c484a3a3a32cb2c842031ad0c0145398a650810a544004229888606464840214a08004242081490b274e9cf4a0073d50420925642083930c8000e20404084000022eb8e062cb962d3cf0c0c3094e70823163c638e1e4042952a424210949b8e28a2b4e338828192ea74a1b3bbed589286713573bde380e4a277efc95cf17b8ca8c5623a53f0e82be9df101bc23c30d3caed11c6cbae368e8bb3f80cb71d2e960d3b73a40e0ed5e6743e98eb3a13dc0f3b79d4d5fe6671c473ead8fba19aa7fdc111636667f580ff770b8987d9ede8686e0d3c1ba2702ecba7829da544ed7d735f9821738fecf7cfadb944fbf3adf4e2d9dffe6d49b574905264ba4b5ae4b08ecaa7e822d1d11608b52c94436b1229ff80c2875b5ba5a6badd5613c66eea370adf62de76eb49c73abd2971faf74e25c11e79c7318b076c839f7a339e79c23f288b683d2862d3d46fd66dc06a8ed2937215beaec00c7874266b47cf4a1bf1849aa986453fd51ea20df3cea0eb29d6bfaa216eb9cbb7b046c8d333bbe75ce39e79cff16fb9ebbbbbf13d827638c73ca29637c4ca0b2595a8205053b3a3c3b7c984ea8d23fd4c96414c37442c18801037532edf051b274aa7446d51aba1eb9cc6c6ecbde2a95b0da1f2c31822df54911af0652da0c1420902273d97fafe338d7bff7b2b72cebd5f87294b2643abd7d5476a7127ef6c6354b1759c1a83aae59966569f935c7df82e6f69735f359e9d0f5f882957dafa4b96bfe32ae798d1e70e9e593debf46d65dfaba4b5a0504fba0b7a5ec21ffcd1c1dc731fb379b9ee613c514538c31c68f3d073b0d7d8c317eeba809749dcd049afbb2fedeeb6aa984efe66c49964af39564e98fcc391f4ffdf3be6e9c9164e985e02ee92d7bac85e0ce2efc2b6f785b7a8bdb9dd1bd0209219c51a4554438b4ca34908322382c1a707ff03d203884dd9fa4df6466b64cc92bb13c93659ce6fd95e55fd785a2010ab6f2edcdf6a5b556d7b7a3c717a15f8752bcbca1f69b73fe7539aeffedfe76ed9b3eabfbca779bfe7a6bcaf32fd365caaf542add0ee361edcd193d9973a6e68413c6a9b325cc3b76b8f6e24c10a8b7993de35a106bf3e040491dcdccf0ec78bd5e033ffe30b36750beaa8931c6d48d1ee00704dbe4de1da85aeac96aa6378b896c777fb92ef1179705cc8e8b515523f26517711a98b3c369e0432c5fb07cc1f205cb971d985328e0c7385580df8629870f571e48e3046bfbe5ad5a6bad8d72e92df5858786132944949865278aa230680c2a83a6e8a394c7c2a83a5996994af8aad792ae4afa87611816e7922bf3e939dfc648d66559eb5a986559cf9a9645dfb22cecdaeb4dbac56d294ab52bf9e582c27843a9066ca05b2ccbb26e6e6e6e6ee86feb74232f79a54e1bca5d697e1b05bf6646e6e6e6e6e6e686887e207e8cd80d9470c73597573ea69eefa95540b6bc82afd0177fb8c2ec08a38936039d14712efb3d6682df7e0fe371e824954aa552a9faf473b64008c36cc7e21a2cca71eb0481a5b846c508a789816b8e65472eaeb5b0e596ecca8e4108f83d8fc368424485f0564d022abe80d9f19ddb927e7dc90369ded3ac7510d71e8c92c2f8ea9d6a59afd2e7aade71ed4606d8dddd6db4984fadf0e14724238343fd192341f437241b6e4976fd0d601faec9f490b141489021f98630468290384e7c7bc31022456c90d992525a167d28836bfe7163f169be2fe23067f6cd79d3347797f999ebfaeaf7ba90405a04b527fca1fdae3d231e031578d39c6b8e436f8c0421c9f38d997931d85b9047a7995ff3957a157da0d65c43c9003fa22bccab95a49fb5a44b42fdc9f44f3bfda8e8401acf20cd7dbcc266f8c9016efb6e5b2d04b77df9080022ef1c81ad9e52fa57032afe58679a888404fcac04e00378735b92d880d2d74fdab949bf94d535ae91de56b167592997f39450711a7f282b27ce9f8a7d98ed5b886510e0ed5179542eabc2a757d7e0586b6e714767a4c4f37f6f88b8e7cb4cc9a62cf99eeca396565e9bf221623d509f652213876de5f4b719ad06c348d80e1b5624dcedc1f8f7e61b1e8e1735fc98dfc3f7ef0d71ed39ac6a3c0ecbd453b2e7f1873999fed79132cb334e838025f842c18f7e11a393327c1fe78c641fa4f1e90ae690ec05e96339db87d177b4c28bfdb5ea73f3e135ba5c26615dceb6d6c787ef7c05d31561fa1bde56adf52bccb9473bf539484e11a633012be882a75b7dcf71cbb89655f253aec17ffbca2aa97920d1a88c0bc6d7b50328c15bfcf17f74fe7c8f7b6615107ff952ffec087d061fa3be3aea6f3b6cfb566f50c93f1cafcefad7a5dfbc3ade5bef4f07dcf91f0ee82b141683a9bed78355bc28c4357821a5240b9fa437abaa00abe80f6dea1243017f962df3e6be1012ebadd7f5ae6a4830cc11e234f09da49860e8b4bc9694d3a2050a42e053289cde1463e7721e044abf49605bbf0dd94f6f1443cb92e25bbf96deb2393729a770b0efbb5dedfbd7c6bef77ee67252d4e594febe3f9c956baec352b7721c1dd73c7339bc000e07ba2763bf7f20f4ab6b7ab3b47b38dcc351bfea1a5d51e6530a38c67badb736b3598df633bdc59d65d86734d7e943cc1e7bfb7e6c9663c5f2c5291949a78cfb6154c8f74f4ac8514bb0ce71e24bcfd16b4da5e49e8fc24c050a51c23cf9f29a1c1d157dc912c668cb4ac7ddddb37ca003c40804777ce9181833668c91e7b0da7068bea8835ab1e3ccd75105de501baeef4f4b1a84c06fc996f3ebacd1013c7f02f9f7d4baac59b76375ce0965cee12dd93f17d3f107eb66207cf7565bdef62baebf6d3c0156d51fda156e9fda125f8931b4f2a679735c70aabc36d2867fc94bdae8210c139b5a7957ad0262836fb9c16960ceca69e06f796f24312ed8d87093f1bff29783b195f3d26a638ffae0af5f05454dbbb9e607ace221a487e69ad300a3b3335f4a2a77d8575449d95f7fd6b71f737d9b554f1e8e28319faa697c89247838e2db1b24aa28ae45ab8ab20d6d7b6920baadf51dade39af3b8e6421cc785b8e6f16df07aabfbe23d24280c9f56e32b19637e087bb84595004707dfab3ab5a1e0ed665f3f7da8d5aa1ef2ed0f59ebb2f4001e8ef93b66f4dfe801863ff3ecc33a60ad9df36774959c41357fa8248caf8f04d177ce4668be733642713b67a3820e4477cd40745fd7545203d1368e3acee754b05452faaeca9ffed06788ef9fe5c898b37995bed70513261172201a411b21745ba283c101ecfe19b9b805955da36ce8a86c1a30f788b1610081dd7bdb391b184060f78fc7793cca9382731820344115f07c0a21cc5e308cedba5411c5b61002d10207e0c37b7564ae76ff613e716bce263e0f13683ee2932744ef89cb1197c4cf2283b371f7f101bcbd2b59b638cefb1b5c8bcebd283e6a1b84f8c09ec709b03c458d836b43201ce29088c31e7e100e48606ac435a789d65fd901596ecfeb9db3f9ed0ded09f4b0582f8bbf289c4dacc1101c3412d7e2471e25c0f0dfde5c982cfa450334c1f3e9237a458e7da443fc600a235411827bc289c17747439c4dfc27d288111e26c0cfaf3c25ef2979d10788ee99630753b07f443b07d332ecf831c2f7b40fd7e2237a44efca13a765c77f575e0d4e3b0ae168dc865d8870348e4a76721c992383d3c4f721c38e5d8c709adbd0015dac4021375c0d218410c6239412fab596f623c9773373eab8b643ceb8107fe6e800c0e9c8332e47dce1719d9b1e3c3b168c952e3df022043738ba41cffb8ca8878c3e2bcf8a12a7896f3d1e50300f22701425f62f9b29894f04e6643a88d344e79e3d92b63590c0d80d448a380d0e38a4477abaa9bc052cd102bab3384208557e1822082418f5bcaf1b06711cd28e2fc406cf7922a2da9bef304d7b988281f123d531ce5a5d0f3f38e168be97d0b5b04dc43844dc308d4fdf61f4e1d8eade82de4ec1b7256e023f6e023fa298f7f322620e79ffbc97b2ddaf6ce0c8a1941db510d6b2f236f596e4c9e781d7dbebdfe57f3d4de94bf9a44b78dd7d9981e0feb93fc3fcfba81f28100a64de9fefb6fdebdd9637c7992bcab56a45c7ea7cfa144b3dff6150fe6c2ba995558cd7712024c52c460cd31b7da7c5bfac68bd19a765392cbbfe3bcd7a2b65d1212f7d60545313fd6f56aeb9be71cdbeadd64e5bedadfb0ac17db510dc564dbdf5d52a04779547e6b4ea5601a04b47cdeaa65e6ffdbc2e4b5ef379fc7af9472ccbb2f48f8c3f85ac854240745b423001f588959705a5f5f4089b02deb4edd8fb7d5be3cca8bbbd77efca61e537a72ea5ab1c5639acf64fac708aac567c81bc8d4ab9e62f0627f086da3846188313f87d7c5e8443a1de95711c4a5374fed35c4629675cb2edccd675c98fd9b284a09b91d25f47f7f44cfd9aedb5e294cca45087422ae9926d597f444af95556fa50086a2021b8e9ce0ef0a6a3730408c9a69706f1a694d60f7a5a96657560b2e9bfeadad512c59c240d966e09e72c93304b86fdf4265180916cf7c654ca2d2766c7ec6f03ccd942218514527ae339298d66706ee8613611fc940f98e35f6ca8c1274ae0f74696167f637c1eeb8433d229e994d26d77623ef2eef776ab192271dc14c258c10321b460c50f53bcb0a20654709c1541b0b2e1dfe03810f640fbd75b8ffdd0d5d260cb959554715654f1c5fee17baa480e6c2b2ba9b26939d8f388fa8ad8f23644ef7e35035167737fce9aa50d4445a0eb6cde3b67532b10eaba1e6713898044307ab58c58962e3241b045235012398f81d7c0af780c5c0aa52fc473707c3a2794229d285b0247f80790023b164496959130e99248d6974a965533aff7caf4e1fca79d55c2a55b22954a258c21b4d9dbbf2e8cf1f7908fb34cca5b924dfa9bb17718090e6dd20022fd2bff5f5ac45feba39416703673c24cdf8bef2de06ca0745f38c1f0e17bd6ab3fc4f8ff668818c6e3d1fa5cffca1a56d7a6861f23864631d0fad57d8ec0f1379d14fded1531a5be937a8af596d689fa48ac15e354aae698521f428fa13efcc7c3d6294893019f23f0161fcce26ba5f4b1e34038638d57b4e8856fc63863ddb629996308ec4f840d736f110a7b198907d20cd1794ff314153daa8b4867b4714002524b5bdac39cfb960553291f29245228248ae6106cd1ce4d7c21886fe731416b7578379d1ff7c44c60cc044e3131a36c7f7f68a5a6bef496665b0a026f2f95633c8c5c51a68f0103d307df9a188fd4d37c3d8c5c210caf6f65fb335b58c328064002c328262ab5d65a6badb4be7528c5c56c18ef0fa5b8e60f4389e3c478ff27d009846263e4faeecef165e4f9a76cfdcf794dfa0e8bf133cb782b9f9e07a6a08c0ca14027aef9c7c8504986528c9822f3304f51fd294fa1f1a63c65868c765eab0a631adaf90c4d048970a9547aec2d56a2f4c8081f76c58ab8988deb474bca334fc36c4b7f66fb328e3365c9f7cc78fa8fea2933f49b980fb5945a4ab9501e946a9496f1c11a1b0009fcecb39a1a29a2a30ade7468b2291236e9f157d2e39f711c12d6357a068b77cf892fb5965a2b939ab941f151d83a52869f524ac294642f1ed7d71c5cccb610250635636a4691e1338c20751881b719191d0a53c060c322cec5df15ab18afeb36eaed12418cd1ce38b567c569416ddf7a6badf5ea8b5a54b380d8d8f5e3a31207452fb3726db52584104208e3fc0dafe66abf0c354ee9c41815e07a6abcfccb278f401d59227945c6c0082af289dcd2e43abac2c8275be64d66d9feee12e39aff26af30b562fce293bde17db4e50e0ff026b344e19ad774b1451f2364017e3b0569f0acb796bc547f244487fefec64408bf88424e9fbb20c2b7545669c92b9b483927a62f841652ed9c0984d67ed9d61dd90f2283beb61cfd9730137b13875f3a026c326f80fd6f905b9c2b865dbfaea72bacb5e2778c5d91dd82fef2017a6376f659f63daccff4d0be798bfb3e29cb9b0dfb66ec8736cc41be31fd8087c3fecd5bcdb6f3a1ec01b3276d6cd1926559b222d995fdbe8e006762c25c1e30ecec3df8a91160a8b70a859765d9593ccb9265b9184ae8705044133b7e91ecca8efa07861da304387e6a0438eaad5a894fca0028c9de92ec1f58ff524aefbdf6a235be072d7630252dedb00450ead10646a8f750fbda808ca7eacfdf5259e8dd7a2da7611470ec879c216ed25bbfb53eacfa08e9550b6f25bd750e1f493fac7e759cab3724326a159008adafcfe359eef14ee0f95beae543a702121f7e5dc92d32191997fd67bec60ff87d4cc04fd4333a5e6c623cee71e536162386bd8fd815df5601b8a3deec551f42ad02122700e49ccdc5aefdf736fe837f59ec5f86be4d0028c98e2feab83601a01bf8ab0900ad6a2ead694fca289f4cc03f21088f4420241bea9f0ac05de36f52f7e026b0ed8075a628f03683a232ef988f7d2d5f7d4b25bd743e55fd78d6d3b72e58f17c4be5b4736e1595553f668dee07fdf9f4a716f2fd031f538d72edae325005133703e18fa7b724f5fd76219024fb3df9f581e07ef4270ac3773ef039ec3d01e6bb3871142dffa13ff50faadd94f73d8faf8e70421837043a48e3f6534213b56bc23e2d4eccd3e28cb470795ab40479294d7b4fa0eafdd056fd78db73928df896ff9cec2010eaec5224a1f7455d547e48b315d1d148efb019ac4665d78339313df65986ca4ea7d3f770fb94b7b8f19b4ca76bca25ec4d250d41f070608ff3e64719295bd40f64de88bc4adf81de981f18479c68570d84a20ebb765332ce06fe949c0d7c221208dfea5fabbb579f47dcdd6112b55a76866d02d39f1f73f6a4560d6d58eb3b240ded9a83e42669bfe2e1b0ac18633d028464d3e97a03aa31521d65d43fabfbe20fb26643f9b5faf56b7db5aa552d1d27a43dbd7c233009d153927732cf29c322fcf7843dd35b9356f970dbf43ddc36fdd02e91367e9bb721dbbe2997dec2f679fc3ece43db6ac8c4c3e15bb0cbf5e8c05a314ea5fe6bb6d53a5b7ecddbd5f735912cb0d7df3a0664beea477cebad217b599785da8680d09ffad48211420821841042087fea574d75cd4e4628056cb919d5696a9c4dcd117ebf0afa5a319691119241529b99f9d734e92f0a3b678cf7a250a9948cccce8d8ececece745f62df4fab52abd23db41db597e7b22a2a47152695a3eaf19fd156a6edafb3c3735e8fffd09fd74e795cc4bd36cb64ee359a2681669c8d7c69bd7cefdcca32ef6c60b45ed239e5a43346a7b552202a04b7af5840a3a03665216f6fb390f36e83464b1e91cf10f19c7a83e3d4bcfb218e73e3dd3b896da7bdfbeb72b8f0eea5d35143f32dbcd35b1168c486572cbc047888f908e02101de67007f236f37debd7de11d06c4e3ed17de0706eac4699c3aa9f12e68796671cd9f26cfa289258c8d7f0fc06fd5e637ecc20a32b68ddf64ec4d86b1e16a72e60a7f23abb4bff1356f5f09bba66ae15b30dadb135472ae1b9d1f6cff1dcf1940972ad460fbfba8428f7f902bdb676cf74274438f3f87430bdedec6f9d5c3f02ffc469d6c7f1c536016b47c9d8dfd1b39e2a002b3f0db2cba2d64b8b5dcc23fcc47e71f06e4b39fc7db2d3ccd3bcca700ef30209f9ee7f136cdf3b8dd7987f918e0793c878e180e1003cfa3700c9af63c9e81ded69ec779107083e75f76fb060232d07b214f18f20433c3d4ac6e5cdbdf828e2470cfd37c4e864558b2f83dddd33d5dd463280c85a17e4b91609060906090627c16238b91c5c8643c9681656019bfa5525f4afd5637bc4b296844e33d95c278c69b6ac53895fad7b4d54a67d3f84d67d3641c7a32919d83328f6b3cf90059271b20efc83e74e42039b29002e4223a194912954a35f3d66f4e864b3264926193283b3f0c79950990072080cc9377e8d70f00ad7fe621e6f382ae5902bbf7c243963d80edbcf0d0c3c6d11305ccc23b1f920ff04fd9f1f30bcca971341e00fd45e66de61717f49692c1b67b828b2476e4e834f4b51baf3d4dde8636cd4bcc87e62daca9d12a202c7ccdf760e16b7e68bf7ce3464dde6cd8ef467ee1c60bfa010f87f62f6f355b7b1e489323e6a36917b2db2de408803c9333ce397fdea613dbdf46deb0bdcda2edbf42de2610dbbf46de2612aabc3da2ed45d9ded1f64fe5cd8962e4cd8b363fda2091296fb1893bc259de6298ed4ff2c7f226ad4823944ca4517a5c060fac7de77870ef2e0ff569d000c53e48e1d7ede7d2282d44f74fd5f17a11ab9a9ad54afa3b722a1aee63cf00fba47f2a1af0635f83e9492a21f831b787b64a45c3bdf63ef63ed82779f4aa552a1ab2c75e01ae47890fd963efc3e9493e5a25b156d52ffd504f0d27ad92d9d7703fb3af03fefb35581db2b7ef7a4c5a55b58a86fba51772bf84ff7ed542ec97bea493646f7fa8278812ac9354c974922adb94ec15e07a74d84113659fe91d74b09fbd3b488314ec305c4f225daddd7f50dcaa0e8a3be8affc885c733f541371cd7d91a97fa48b96cb2954abdeb97734dead604eea9dde8a38959e2203eb2dc8c64f43f5433d31623c8d1712e369fc7b1a345ea593c83c8d4fa2fa183fd4e3f2b6aaf1433d3366fc0a2f64c6aff0ef57487d0d9d44e6539f44f5331e13c7299556a8614325f3ef6de41a2bc078a6b7a6fc9660c1db53b25d896bfe645432bfc21105b81e2005b89e1aaf00d7a3fa15749224433def7a647e7b99773d35b4eabdafa05fcf0a5f830e3d35fef5ac208dbfeb51fd86877a56d035f46ac3d05b459df4968234a437e5ec53d9f5fc6352ca56dbd1c872dda9ec7a9e12cf79444ca6c420e5200871754d531721caad2bfe5620c80041e65619ff2f3735ab550e37456ee4d0f427a6d65a5ffe81bfa9ae674557b4ddce76ee79a0fbfa55ab2efd83be45f5cf7bf8eee1d7fc53044ad945a0944db9ecfa2e6f3168c14ec8f79664d7a7553fe8bbbc158152b67bfde37ece77fa47f563e2c4bf506ea9d172a82952f38efcfaef27676696800ec3145d186dd7250950f6e6b4e82205d2b9e91a7ecae238dff035cf3915dd7441b4e1eb780e0b3df079be6cf83b3cc719c197c1715c97276cd99aeb2266cb863fe4efc34f41a7390dfcaaabe61a7c1694c05b6ac394922a5db6cb42f1662edb73bd96c32e8a2a4ebdb6dad9d1d12165179a4153ba6fe05fc5a9d76eb4771a1a1d9d3924fd89f9ffe87e3ef9e87bd0abb43e5a1f5ffe762bfa70ed594fad2be6b861bd55cd65bf9f7aab520b71344f96f67338415c7b41ce26087b840243db7d1010dd79bb6f05c18d7d7562b073fc57bb2f8193edbc4059b24bda0b1423b6ff15821beb6d731fff08c6f8b1fe89ba6ef709a03c5c7db72f296f439bf4f0f7c01effd0b6383bf73c3eb45d0ef29de9013c1cf7230f2461b95221875a92c0d22de65c9bccbbd9d9cf15b9fc9afdb39b19bf2c37750e0ecbfe71b2befb1de8d0742782d2893d6cce5b2a61f631122ee96d66979ed20daba9521a2985d85b52e933d23bccf4f3adf798658c4ac9bc6b35aed54d3a499f7ef5a373a8244e77643de914890000000533140000200c08860422b168402252e54d3d14000d8e9c4470569849932049419421c418600021000000000100080050c600ac613f527c31a749bcb7574af783c391594deec43e72d3d0d09eec992743a946c737d90e158a025e5268f3b9398a5aaba815fe5979c21da2d63de9c04e6148bd8df9768362579b2bee735c6d6690bf57d4149464434425fd24c8f20c2b079f2b7985a886d20bc538973dd55cc0d307645b2d49968b3058dd434f30d55869eac5557b94d2dcde80d52cc15ea7a699640d300fd3a9049644cbaf3afe69d4fdde19486216480796f3e20b68de95bd24171978782148fb22b73bc2f53b95ab5f68b7196bb7346a14aefdae2371c9ab0d85943efe2b6426545972149da02fc3750db57e192412f3b79204acb225f26fc108fed618c659954f64d55e3387bae0d1807d059050c1880801f1ad3a589704883811056eaf96919deb4e0eb26f76d146cadc4e4e7d69414e94bf34ab166f0b6afbc5d6554ec64b8a72e3909d0492ed3b10e83888340c51efbaeba04305fe8193902c7e1453a676bc75fe1864bf70be341c8c26f09e6fb5532f640d9ce6f04864e459bda3fb16ceb24cc8de7be0cb863f890edcd765c140f9eb3b1c6cd25b7e37312ce8922e3b0d41c3c1ebd6e57503daedd52e916246cb325bb99f27fe67ff9da20cd4617e5da989771d240f3dc092330c8610373e58f18b00b90fbf862eaf703d18127131ff76ea99177385ba869a1f14673cda421135903c82f5b47c73f9368ad7254bdaac609460acc0a9a4b140e1bda7f0ca67947aa79beb63cc874ce1afcfba6a75c9ed1760786175d8d7ea44170d586386fcf0b77d2f4030828fde61a7694b604ca851382af288cc1c168cc78f341c11a23586f46909e6057f7d4f6308c5bd07fd20f0c3a66023450ffbfaaa53bac0c362cb42f05305fa3a4e1e83ee8cc2ed2765122402c0fd922fd6af80865ded21af394922173e8d810b0a6999795a274f8e586e70c2761f4bf18b77cdff087d6943e00c13172bdac9066d94da75274ccb5485330387b5dbc10fad0aa5bc4b04d5ce50495c81dafdc269e3b901157e72af698d516f6c7496784751c27b694ee83a6c636633e98e39451efc39baff75f9476ad9cabb9615c2c76ece2b7064466846cf5317efc8de28c16c355800fe084ce0638dec464d457d7937260896f6ab9bf2fdd91839f709fba234aedff445e0dc3cdd7bac30a2cffbd0d7570b9d304cb18056a403dbe9719545daa72087c67dca0f9fc87e2d2913920711af5d8ce1d616f308f71c8db6f3791145ef9d74f80691942e8288da8fbfb02719a6d54bc8c3ac9a6d877d2e6d1bcaa2aff80221430bb54391edd1623a214dd0f3026621cfec44a10cf7697d3a6885947697a4e6e3af448ab1113c6161da1cb473e6a866112a26d67cc20eb3a0ed35a652f06f60ccec04d34054d1d9e935ba934790f3be0f57693f35a71749868bb960f05c2cf1586b87d3bb1ab51244de40ce23dcee3d46d1a06670a9df4888f96f199d7aad03c4fa99415b42a2dcb6af991336d7a2b8228e8e1431a7aad1fd4ece2b9953beb75159d999a4df21266a4142c8d71b4af253baceff784215b422b5b8d3c171612b68959a09e6fcb266aface743a3a392044423e8d7925315a0674939990913f30ccb0a12aeb4a5ea33293cd0ff403b473b0a00c4119ab703cd58684c5fb446320f4da9dff5bf428fa070217e8dfb5ce42a736a2c483e84f4c3c43eba6adc987b1f2d984720cccf7f64878143a10eab01a9415110e74b306eb51443d90412b88d2f715bbdeed375961e3b87841e0079d799a9f17d4dc88fb5c77f48fd8de908d204fe9ce5378e94582cbe5c7aeb1fa4986c2a8666473c1f597e1a02992794772799620a3bd1f704a8aa7146893790c7492827303a327737a6b25c64c51e7fa62489c7abe43fd7ae6ce3a6614a287f213995651875c853a26501216666318432102038d3807eaa996a8e18235adc41ababd3c70dac898bfb17d1e6946190051c7735cb30e837438f4e13c056aef9a5dfdbb609db07bdae38e18fa5d822eb32f439edc6ccef90bd90133040d2f217efe20f1388518bda181434e4e91dd29b1dcee2d00dd95d7d2c9d575bac09b9d8fb23d653c66f1e1bea71fa3369da5e3f764720668482f86eabd8a87288386768150d57435584f97e4e9b9151e7e33ec93b30a019f44e5ac8b62fac6d70a39eaae73811b17bb62b619341a14dd14ee43565cd339059c25b1477865f14aa0ed15f38b7bb309657597113e3c7c65275ce4a4ac4138e5f516cc3a5c3ea5ca6c1f9da5f74dbb94dcecef87a453acce325f212ab1c420b15f3b5ec77144b6cc8dd9c5d46f56046896dd5296c4c789c456c0b9ca74d380b80b6c11e084538d45295a84f4299a2f9c739ee3ee5bd821ecea60521cba7fda9dac0b15c020ddbd0a5e5aaced37271b57b8e177a2d73a9a8d6d5513d6fdb9495736f49d65084ddcf9b04884309f5f5998dab2264b38376928326315c112e172473c69192cfbeda00fd10b8f86a302fc77d155f77fd2b78d5c30de9f318fe7866644881ee2a02b2ef09991a56d62f2eb9cd02938e50de10023847ded043fd5e3a59cbc9f493e1f7c5d71736f16f359e4efa885b4fed87b7e341c4402a96edda0c087809c2976c90c36a7483c5433798883b76b4cedead8a6108bed15d898bf6e219d104885cb07b1a8035309b13d3cb83ae774c948d82946cb8b54045c3c3a180e65ec6eb4fc87474317a1c5f0f7e836ae6e4bafaa9709521e8e7062906fb7eee2ce6e3f21ee712aaac4328e37f97e168e5de56199d18e8126bae32fc762daa63a8552d392a992dae3c7d0074b0ad0cb1f7e405435abd308e59a3df2174df10a642403bc8fa63c82428acb460d3b80836322eee1535b853c0f0ed81a73e1230339c3ea4c5578c6e41f794e269dd5b4821ff24ad6265d47c696de0655ccc386c6a8f790270276ba25dcf3a47b05d6287b56be1fd40da9eeca77204a9586d989dc528698d377ce9cfb2b705fd4cd1037f9d5220a7b16a72efc98dec608965b9f9eddd8a1b2352af0b7fe5f7a50539139ff00212897749018fd362d3ffda5bb53bdd1e905c12c3f91d58d86af714e1a4ca6db3888f9ba8e07587ea154f09c1c867eab0a04ac56e746cbdf9daf8c1e5a6ce1d19e25c114a8a263efeba78490c0e1345cf1f1a75de50b93c229b0f8927c00c40cccdd843bcc7271c57932e77289498de9b0e6626ae74771d8346b1b1a46026959463e84200eb8543ac07390c52c16b4de7ad6a29c2a58a5682464ed7167ba425453f6c30083702f2d95d441c71460350fead0bd0e558dce8009efe750dfc4934a03e4cfe8f2dbaeb4b479921efc17b3bd57b040b2c9ba12abb57b10a2b225fdb624bbaf62b1e09a1ec4b5b927dc972044861105f6a1abb9a2e74eba25518ab220a7c0ebc0b80ae6d9dc23075d441a914a82956ec88f7af631b316622b372e0e21b38ef3e5374693e5f2bee7965e6041c2ca0d280169e447a9de6cbfc0865b8af36c7d43ec6de05ff4b4373676ff9e543bf16d7dd357165c0676daf0ee007841efc0a72d505fd9bcdb402e264e1affa526b5ae34bbc23596be13a3a38d6fda9b6d29bdb4d921042e6cec6b084dc9ce497b49a3836db031e39e3fd02e7c503a4c8da31e3ec7244b2ad7d55a5f6c48c63377ccff4d4d0bac1763456cf456f2839555d4998e7e6e7a26c4d5f8c4be0d2231ee2c22d5fe68c31855cb55e40c28ad2cb7534ab1e91ca3f4681fe13db569c86ff3996b2cdbe20a893a090a0c36abb62bbd7026002db0dce4c33d05d2c506aaf6788b336ef32cf8164fab4b7e9ec2fd5f58716d07af0cabea6f5fcac143486816390a671fb2bb3c24fddc98179bb8506fd5716280c3ef95e68546cb3e91f76c0ad27c1b608722b1799702f11c91ab8d2a4c333a728d7ac5f78c6767319d7e1ef64afb8967517cd7b6a151c0c3a57192b5bbf74372c382abe5e19563d1a9c6df53ace63dce5f8425598e896caeaf430efb4fcf670c8fa6a9e1026b41f6b99895e2202aeb4d5e535429ff9ba74ebc83034d9b9271b40f824ce4423ffe9f18ae584d9d29e6def2f9eb9343cfc70937b3d3cf539800a23ac5f2997a7e5b2a08706a8e82295714eae56d4be42d5b403d67c99b3ce8a6549de62844503f76dfe8751370280fec7c714a342a85102458061449e05c1642728ee8068f98b17a9a9fcdfbde447391560715765dfc5ca46fb738d89cae412de91293cf61ff30e945ede816377da57982a3817c3eb33449b12d96dd9be5f44c8880c7dd60ce53efd9c7a47ce300b09dfc5ffc5a5ce17106d5447440433cfafdf9077ae16d715c3a0bf7ad3ab86055e66b7033f3b59433c460f4a1ea8d6953d07ce2b9b001400470b1a60cb8bf9e2474da836bcaa4ca62277662c1948d8e42969fed213c07266b6e9a5dbbaae039240881fff5280d9c12cd5977733283cc313ce93ae31cd2974e70dbc35d00ffd77be5218e4b6336c1462a0abde33e14ec0cd2bb3fc09079f65c3ebd2375dfbc7d99ce16072da884e97e20c04a3c7fe11487ca0b11178dd5c89e2bf66ea4485a27e1fbf23a8efb4827257bf0bd64f913beb759e76c77efaeaa620ed15134f04c25a7b78722c937652ce7f652b844e01e9064750d4d4ad4619838c08c4574097e536380cc5e25eadacff897d35d524942fa660dd13ced4f636fc8fed09315f49fd4626fbf9889ea87fa845f9ec1dec70e7ba61d458a0e33e138b3f6d308b3cd7d93a5a62cd8698fa113ecd6304aefb10df02a83f20550ee0b2b1cb28331038f0dd2d800a5be79a7d4dc537783ed5cf528e8b3c25c447239d1c72a2a6d0d03fd2a03e301ef7c2cbf095ae9aadfe547fa60c90865c2bc3489815eceb88e84f7b6eb2a0ed36c3d9f62ce5cc5e9a894c52b74a5f408ed2bf4a5c2a77d1f9676e31a0e1a05a05bc81bb3e55f1b36479280a1d9fd8d45df8ced3d7b21f8de71e121c33a10e5b678299b8b462aa3b9cd5a69295df929610dd46548c9cce7344d70d43ecd28537ad8a3e9f8d73ee7cf4628f3fbe7c8914a0523d37444ebd48df928850d7cf0b7ddecb4dff98a9fb43cddeaceae2462360e6f2b93275075dd818dd8483dbc33c209d5f94e87b6c3f0fe2cf90db025a56a44f8abebecac38f811fe94a8257c3a4a7ea432071b7f523ba94c6a59e0ca7969c0287371c3006334e173737d5dcb18e83f19f53e8ea68aeb7dc157c38c413e28386b88173ed6a485481957155ee37276b883916112ebe5d93313f786566baba714b6b390ee105901f63a706e895d6fd39c67f8e618f1935f4f096439030642aea5974d5ec4085056464d88db0c05c23357904be7cedde7d100dc3a471e2b1ba807ce17c24532c67f0ead5e07ccaa4af8b79c3a7e00062de7182ef11997fc15a4d544c95900e3cf57ae4cb1e91df26bc4c9c0cd50bab33e3ba2c9bb156d9c8e947c1a72ee070fdf4abef8e4d8df19badfd2c87be5bfbee3c4b2656a20bbcf3e9b802a7c455e2f6b839ea1f65e848217ef0c69df346ae0f72d7115dc934c614b0b2c455da72c0565e893b2195bf7850014c929f2f54b5d23ed8be44bde649464f000c9ec7f80928b632cc1afae77efea69459ac9347aa7d3403685544f29c3197179118f8eb8ae78d0de793145ff9a7a7bf8e2217d91543920144be9e4b094e2ba6c6cbb06f93ad79579d83b62ac51a719a00f886acabc83c4a454020b7ba2d9f1ad7e99986451dfddabca40efe4361e1fe7b307087abfa2dc2014a1489f5f41990e98cd3bdcc46f2de676f9d0ba8399009dedeb2b689e75014648f8e08c35de484dfc45f3b2fdcc237007b763500474951bf34eb2cc1ef25f457f5452ed54f63474a9ea02857611df6c86b4b673d62a9a531eb67ec1465ba6de0df614fa32241ba5f3bc66739807c8d8ac24c77a75af6151a3efa9838c6ebe329e0a49b6735517821997bf8eafde0f6c78a72153c6dd09243dfcd6194f8978d8457098d0e56f49ccbe4ec51b8e647eb9638bf38e7583050f698048268398d76c0a9e41c1cc60498e52510d0db3330c5a8703d44dd370f9bd3384d784e418cea67c4fa28ac3cbd881cfc2211bcdaadd8b7ae18e08ae184ed81bb191f9973dcc727fb474de570a0ef45683f06f7d1353d5e0a6e61e565da7662e9dafaa42cb97637d2da107a06ac463ed03c138a17c063a2a6310d9c2a2e0c9ab01170e1a6409b11cd08b06ce75754b8cf07bb94db03dc5c76ea62bf6a26d6758305522c35b97b7aae0f8f82fc08dec2abcc7a3772faa3114b1893a4c7cc49a16e051203d4107119e24e0d1fb6f3b7230797be0dbc80cee4c75b4b0683708196efb397b3155a3d6d59931c50d3eeb10f220411d95b60a08af3ff17f85a11f68a3341fab9561a7a6683688f3d91d38e890c4923669ce67e69b257f4c906c6a2ba1d98fdeefddd8332c06c79367fe0d0d4426f553eddba39a5b9ee3111e44cdcda9688e10268462a770fee9ae688f960ad1d66bafd5183befc850516aedcf46e070a24bbfb662e41c1cbedcc7a9cab448577f7f5b11387e08a3e8638c4bc3d6f7a6f631b55a9e73df74d9476ec0f1625da8272598864de4ab0b98a7bbcc240d5311cd40bb21aa00bec57f093b66f08572b3c4b553dc0c1b2221744122e00e5e2761ac94bfd4d6530ad5337f936faaad228a012f4f7212f54fb0cad6d13a738076b9b16983192890785c07025470436427d156f7ec6da6e6142e7138ec35d4319a939d5c5364fcfe5e3652fc5c8dff83e5ecd51169a9bd511ac7c40844eddbe6f98f6c45d5d96298f477f852de54529fdf663479de1ccf0747ebdceaf891f81dd2b9d0c4c314704b97d9c6d0cd0116a4daa4e7732cf98a8f323681a72c23a70deee3c3344d6ee99b9424a7ad493d1dc1040250b4a1fb441a8b79077e0e41d152e17971ab7cca7ca728beecbfc97a3405e5215b1863bf5c1dbe3b7716cae2a07d3dd780585ab2d9266361922d46909fd041dce19016c8044410966421b9bcb16a8f6eea9b28dcefc6d8aaaca1ec4071f63bce906bb3a174d2480f4370f40cbeafbb9f72cb77177b239f2d1854f4cade7ec699480a371e13495b8bf8d114e94500130f25c3912ba367b7ac9b4889bf767a399ab6a24aa06ca1cd78438cf71bf99e925ca3e803f50bdcd3ce609cc64b62a06709d82334667d0e4f156b92e31eb1774be61010b67c695de3a216604bfd419ac5cf28001655269f7071afcc6b5c00d07f7b8527449b24fceb50bda9c32d4b9f7cfff7cb6a1937ae14f3ab86ae46a766113d542fa0d2765909fd86953ab061bf56f9185bae6f9e4c6a467e0d46b08cf595883434b31808770ff98405ae036c1ca9e17bc03425aa3d0c76839d4676129106a4eec5f23c341527fa5a795b0ac953e99a6f18dea938b82d5dfc63ef5128a6461b5661b5e79b46c15ac13414f101b4b897b5ac894a9bfcaedbbe566f40132220ae55b6391280a30e987f5d20c931205b237c6c108d3060fc3b48f497e4d022f0e88f9cee4b29ea2102d3a051509a11a5ccfa224c71fcd342e7bbd6549239d107914b5b50dea7a4ec2302e85c0fc7f55c4766d5c47261f878e4ee84ff7776b126a01b8e10abb8550b82bfefecef601a8ee28a13d0c4b2117aeaccaff104fc465cc85cf31a8c713744a2e44b5d474c24acae5bb0a8e21904a6b6d91dafa1fd8a21f17082825927235535f7ba5cab2de3227665c1aac328ef50ea97db97affd5aeb2bdad48f2db92c5941a47b80aca7cf2e374e410bc19272e114ace2b5ba9c94d77509d12424cb193cc171490435d654de3153757d97b88b6eb847e72b6782c9218466c10dda18d2cbcf89ca3d2b76ddd9dec038cca99bb27b3fafec9862b138c0f1530d687c0235a6f7f86db969306a85ad3a73f9a7ed544ed7b9ebd1d4ab69d2ef5cb4db69bec4e439b000943c8e494803d44b6f1f4711eff518c458a7d607b441edb621454a54c8910b98ca9cb496cb8e1e3ffa6dab064ef563e6dfdd164902e37b422b0b288e207006bcaa43f0711927c60590c83f8771f958e17a9031229bb93fcac8da9b9c309d65d6a3615fb16ec6ed95a4873637cdae50a7637976b23c1bd01768f8863671b48f67208a2592906867c17ef25268dfd40e236efa86ce3f30f9cbf675fa77cf1be640867e11cc79610515d338c99b2cb10887ca313dad7488510104982c24de14fe851853a1451f15a775ba60a1861a6b22c7a13c350875e6bc99cf6444a34600c3de6e9d3729b76cd46599136479ce8f95523bd5e05a2a18acabce5304f057350bfa66433045e7e0199196841d44230838cb9e23d0caae07c97b2cb9b21eb009861f61f654de1a5ffad14dbcf821f0180e8fb30dfa6ea45150c99256803575251f0c959fce5122ca520fc1c0c7f08586b31aade413ca7829c07f2a4583e57a6677492232550d135284588bdb8995a0f5f318659e45fe1e0b394179059492bf09162bf6a326a432ef4bfb7cbc0487fb3bece1ae94591d35044cb8303c8350ec14d043f5dcbfbfc277ff145543265f57e9a5c6206a89828893bbeca4f98ce1abedf570155e4e8c27d29a73b1531345781ef9f4a4652884544c25eb56a0d850d0ed515cc38c9c7a7b547f34a9b0d6fc617da90eaa98bd88a65f10bd709599b795c3b9c3d606dd7e240dcac80417dbdb281e2234967f75b039b615a48b0c19caee2761f3ce84e44d29713954a21dfcf62250a5fb7524fc3941599e45411d0f0925592fc6b224a551cc3558a3ea07cd20ec5cf6ae42661c88b74c759368c180f289dbbbe07e5106ca0ba009c26bc4fbaddc62b189940f095fb34af6a8748d08d9e0a0b18c9e39db382e075f33f171a1cdd9c7f5658bf8a4476a4d40e78502f52438d266b88425541102405f86e8d447d024bcd4c56d1e8505c122e3a9cd058ee7394e52518858b5ead9aee80d13e45518e76ef2adb92581d49d7eca92627b3516f3d6a6a54dee006286e4ae69ce3c70f0711984b25dfd23184e20d1b611e7d500406cc9f122515c50cf15ae4835f54613211a690a63926d84d11646a2da759b9109e838190d3bd793d8d392d81f09a546b359488304aa3d00f8e4feafdc07b800ec55ebf2e26a9d0455664299243b11077d725c447f9717a2af6d296ef2c656a5eb535485a1d6e61cbf5056b221f7146fcf9c06a45904cc914796ffc982bda16ad92238c33f947069d4f985e7154e21e64bb7ec4b3f0cf344d52ed6fd7f90c95597631364879a3b9f77cffd165a5ade62cd23008bb2b96942a1427d0e49952f1d0de9d2a207b9b847da96213f500c8ad4e090f23e5096d28434733b5410a4fa15631eb2643c80440c18ee0ce0072bce5ba2a985cd6c6ce2c17444516e082289db9d43ac1849bef2d6c9ca4662e04dfda780df109e16db0a169730f795bc72e40dc1c89add23f3b63cf5709e3a121a8a6f21190a7369f5e1f12e38918412db3dc43077c127b6f52bdfa104ec85e64b7031321baf5a1264c487fe503f8d966b06ba7fabafbecd0e631be1453b55490c3823ebc2e0ea8d2062102aafeaac9f5603910bfcbb253dcae21a732ffa86a459860299da58079bb2f6bae3011d4548f7712ad15daa11954146ea2385d769209c8f42a55a917ee36f3ed5b0649b08df0056a1aec966061e40aa52817e608dfaf3867faf7d8d40faa4526a56d90055828d16019608071a36d2da6c93cf6d9ad418ce30c1c39e830ba575d279089d5d1a563bd900f95681269d744e54c6cfd842f574935daebed1fcd22785bfce38cc1151fab3dad9c48b5e90db0ca1f7c13afed089362331f6e8c958a524721919d0a3bdbc1b60660d0bfddd732b1aec3d254c82cdad7deb15c3903a6ce55884ff6169e6655e5152544786ebebb50db4bf5ef830587a6cd1cba80b05e0146fbc61b3fa7ce1116f0339e857b7b2d80c4d68db9bf268a0ef42aac9495ca238215364955116d0fa81a0e46cba36f3ce0c02e19cc9a2178babde0def1f4e8c421729aaa2964df535439b3a97178a815e305da22c5cdb055e72a7ca5b052b8fc95feac18d631a333c3f2578ada3d7a398956d631f691b53d1c76ea3a2f140b4801d5680b69892b59a9b16a3d4ccac58a72833f8870fb1afad5b4a279e471ba57e700b68424054ed288de60e64f66aed9b612fbcef32e6369df408d2c8a9af923e1e80f363f3db49f58054e1ac81a98681b62157becb1bc4e4ba20e17035ef8f04a90aeb644751edf72bb345791c7816821eb0d3dd12e5aa85e7317ff9af83722a719e3fde999d38cb0ebd7d02d04e2929fa405ddee4a1079d208191ab356d45beaf7d1029da8b91d4e909c5c084cee900d390a4d3e66cff3d58319a26e323b8ce9b4da68ab5196596511cd3223f0e2d4a8b96b1c0ff9e09a1a2e79dc624d16307f49f665e8787cd81904559f974df36a2e83e496e5c4d05572c08434c0524ab6f41e907399071a393e052a04ce1d7df4b41b62299cb45f46ef9e1fbc26ed949c715af5f04267504ad3e91af881533d6ec8de743f998c005e116cafa2ed44e6a6d41877acc9bbf499f517a1b728ecf18ee84ccc79efc50dd8ac764f990a4597278aa5bfc85512960327538a2891275edae4433b6c2554cbe4bf04af4823161ac26e74118210deaf9ca0ce01d0369b71618d6fec24e4339e282e9489a9d6cd81ebf78726130091a1448c5c3a8c05007adb8da6e1ae25466bd2f300e4faebecdd82aca8d9099077f91680142e5726481f9599fc724be9ea48409b8829a5cc31521ffc6a46671a54ccf9c7d26fcf537a7a42832f9d6310405efb4792ffb13446f7375f1cd934feb1f0fceaa177eadfe2921670f6f8e855b4dd458d74112bd493cc69c49806f30d241db9ec8910fa2b7fcee1d5e6c07d443b2ad0241899972da0fa4703ee85594df706f08abf061a06afd11cde2a6beea5844b60259fa514ee56bbedd39b192ceeb31f0a7ed52f8a762c311fb01021ab14406df608e56297afda981d845744befcfb561097b308c6aaf632d8ca8a40b852f2d8c97554dfbbcdabef90176c8235411e681cbe8b74a81059251bfda46813adec6784139e9de915a4c41845c5466e67bd54e18219d07d1ec171574a9fb4c94c7b46e88a3cf9bcc831b7388e42e85a92854d0b8bd40f0639e2747601de29b946307a77f9bf1b0a9ce317514c689a212bbd138d22551a46bae1eb08ef62d580bb7ffcc49789a89dbbf81485b181d332ad1b7c755925b91ed0ec8b9483dceb6445a0f4234619d2d532a1df1e832aa0416a828ffb32bd78191c7b172232a8c52a49b3f8fc5000510f60268ace436dd52eca04740a5c0c4a38758089cb168dd88525794d0a603c47209dc83038ecb645c3b3ad37d88beab7d1b83acb40e699cbb152b4c08159d1d83a20406d7804abc70ee196ed85e665f5f283729e63dd1a758431a052263e5862c5895c9dacfb6f7412f151e4a6e1b5902a8338a6d0fce2fc46ee6a6365d782533b3c1037fcd31b1de1e2f50e6723302bb2175b04b1499f153330c922d52845005f6b4786e6c2312a57c0802ecca8bad2967179215f80658873c100653cbea514431344b5a441d05ec64e9ac195d04a1839f928fccd3425e58a4612c605a158fd46e83a0bfb361f7a7feae91564252f4c6de4418e8dadb3ecef7fb85e9d5d5efd20cac60d030733adc2f55bf2b293f4a1ac6e906190957fbcc384a4dc3e483e959e6de3d066e69dd852bc63e404bd8a25d5a1d366fce76270fd4bc6771afa96d68f8047030759890126f9d68e7fd0c94ab423c4e204434ffc5f716c8dfd934b48308309cc73ade45ce2485c5f6bcebad233499586499a57a276564b3414e8654dedc56545f6af66e0349bb1c33448155863527cc7e2d1fe057a1bcffd8d34a46e538779f8d3a042ae3fd34da28d96ba9e7ccbc79896fe883d1ff3b313f941a0961118f4d4a46f042c980bfa77726212e471dced831fbf6b86cbcfa443fb753c1587293831ae397ad365d7dbab4ff1ce3b926e83f2618b10222e822d2c0bb24fa0673af7488f6a5e1118c3e21a3c6872e1135f95f404d68a0d4fe9e77edac07f99f37a6c8268497eeb54d301e9ddc09bfb305ffd3451bcf75d95c882a626ad97530e8f8507e512cb5cffa02a712d760cd69b8d1d34360be32c72bc136e83dde195fe3068a1ce505f269fa18e9b74f7194114804b928548054763651b25fda23842d9feaeec4111316b35dc6ca7f1a025d9365f5fb9b3d675225357d1d72cfe5f7704e837107f9784113497699f8b15dca737037dc474b5a8586cd948d3fe720522e1d4237d27f18d13ca6743647a94ce00d31b18344bd845c79026b31b20f80ea018b5340b16cfdf2b8445bef410197c679f20b4876871c4626e141a94bcc0690d480761bad8f0e793ddff36158da052ada95c2987e7a509560e42f17d29f1005e33bad43d9e11fba02ad032e8194bf528f4c32cae613c3b48398a9004eab495cef42a3de4ec75f5639fc09e7838094431794ca18415c7a96f702746ed1bd56cb2c63cc8070a3c8eb05dee6f27690c6468d3be358c6843992976f0605dbd57f28536fe2641ea3e4dc1e6bc3281ca0939da9fbf4f95393d73cb649780c91a708153180e8daa20cd9de2c0a0200e10b206835fbb27dfd8a648a8e9dab8c48b6860b570d8a20a00c211270810839c1767c29720f01b366365114861a95b7886a0c0793498ba326d3bf94a568c793136aaf983691625fd2890c5b4d8fc2666acbe40b36197336b6bbe6ffb4b659b59eef50b87e69ca389f92627e51093478d017929a34882735b402e1c6c02311e13ab78486b061212a130cb40d5d6d526a8d3f962f864ea5f0e6669c9f2f46f6acc19dd86008a78a3cd2dcc7e7cb72f95a97f114c5801c740d3c0321e2cf795516715f44ada0e96469817a62f11e12addc735c2e93489783d52e3e96bb2e4348f34fd5ba7d5f4fdf4beb818884750d28a29766c06995acf806f81fcc30dc194a3b2e171a13edf667f52d65678ea5873eb1b6d05095a3ba427c914686b2774326569c740b7f161452587797f31e21640222a9821b911d726f5d920958aadc19b08519a1aeca0341bbf2565dc762df0f8312a548372e1766c5e6ae03678a033e8a51fe51f05510bfa632aa751e75b618b07657314a9bb3b27a5e9b61d3ec6dd241577b00b270f00f94b6d8f6b158ba1bdc294a792a3ff162a06f5bf5b01f3de9f21fd7632184655a6a56c387de92dccf73700e05e28baf1766277603e8624a6792d85322ab5d0bfd32ee09120ffb29be32249258f27c8fb90b537a2f7a8bf9c597549275243ed0a0a8f070e14308377606b1a745d239b3df4838d67a5d0889e14fbf10b0acfe4f69eefd373de4de1552ce920861c7a04d9f481ce693c4e032a409a6eb38f3664ad95b92ff71e8506ba1070f8d6b33997b909838352bec2b85008bbffa46f4ab59271bfc7946122379718c90e79e4bc48cbe589e55a805c2e26c3611ccf82b36a93cc0eb4026861b6afc8dabb38260dfc08406c971cbd804a5428dd2399d0a87f33d90231e23c85f392886f1c257c86e3cb289c0d2c980dbaf402fc5f4279c7513a8571b5adf4000cc75ce68ded81582e99be17592ee7efaa656bc01ef230140eb3c19ed43df3f0de9e71c0ba2a8e184b772f277200f26f2317c3932142eebab6635ac58201416d0cc7e019601e6f510871c3f65d564ac3263a2cd5cac9a9a333a7caa59951f1fbeeeca9f312e3a324ed37d16689ff904cddb3ef9a24adc68f305d341adb4f2893060d7766c3c4e3b0a8c1e9b0b0a4f627353a3762cdfd53a10b70aa185f01a81eb428fce50e20700b193d60b94979f6161cb4725965ab2ed8d8d02788f4b900f5697cd6a0431a2a02bd9ba2739956baf12744d6a1050c0400f5b04da79fbb071aeb377adbd483a91ee124ab83f8917d864bc9705608c039323423eb36d8ee28030fbb177cf53f35a284d825f15ae7e73d6156caf786016ca145a8b5438d147e837dcfaada5e7351468b4738983402850f32427465669f36d5608b6e6ec309ee3bda19e1690d44d4601d078db26b4d2da01d94679a5a552a6dce270662904124c3563eedf98876d4260ccafbcd4eb949ab50cc70a2cf480cad606c3718ee6f6294702cfc3d7462f3c0f5d55e6d47b9857484044848f0090cc42a20ee44f4ebabbadee99f0ba30515702b01c0c9e9a20cbbb76bd290cdb9215368d63f526555933fe91327504fdd47f6a7811b5369b036dfe74c73b77f73e2f46e1c6ea3933d12b2cb11dee3d310632904a3c384137fb9cca3f38c5da258b3c00cd16d782c8cd0d885189537088f133bd372555a9663674d6944088d611104d173a6aa6807836506fa41ff203e6addc3b28d35d760e9225a0f22fd8e93426d564e91700cdc882ceeea8c87e8e64d2ce3b62948b9a4316a501b4e8316183761c890064d53277a7e31284e7a88f992bc197c9fd134d8f667b110804a654f9bcb3cd550264cc6e3af94ac1edb13de1cdd12449f6a891934923567184413a4093694e47c1cb36dcbc9a79f932db7d11178bd10eb49145a94056db48265a80cf62778ec038cc43a9debff3935793c8482a23e9850104fa23a183d50e726b57ed3f588d2561a167db935a577a4ca5e6850d6e623344464867ad1529599284f2fec07f642ab5914548e2074e4b839bc12bd0345410911ef4eccdda041ae088e062b20a6c4ab44bbb4b1367ad5f4f2de2d9cb68a35529eab25df9d51431021ec17622155a2a0c1f0ac0592dde08a0cd617b1046ee43af3cdb1cdda2090dac0ba5bda54aa843e2d68da2451297f573f40e68c31aab5ea849a88f75f93b1056914dcdb8829a319be55a66e8251b19966d2b6a27cf62e8931e1138f7fc814fd0072a145f36e45dd4dddcf288426a0f975c8da4b6fc7f77a4dbbd2d605df848ea01d54789701a793a96b31bb9a87afb3df1e54b99ee02020a834dbc7056524296b80b2b820f09644db2d923847c4c811bcdd525e9bf30dae35c31baf33adc5aa206fe7e8c708baaeff0cdeffb06259ea2d9c4a52dd310695e144d48d381273757b0be67cd0d732cd4676e49ca716a27433aca1b12e437cdad8aa50119e68fa0c52af878753c8920f6ab41610aa077c0d4ee3bfa6960df990acb5afa3b07089b6deec1b3e667a6463b4c9398c5c9c867e588d31c887f9f7aa7bda148d053dfb162ee1ff2c2bc34d9a9bfe27058880c4289d22e4f6a26e84d151fff34ff500de88500faa488322348992cde035a430e8e8b2242a286e1aba99be2876b4834f0e63831f9ff4e56528b15a715514a786ab3b1549b3490ded6024857c7ae4d1e434aaf18303a2f2c34790293de49287dea8f809f2dcb24fd366931ca988ee38788885ad4061403983837b82d4458a19b8ff8346e28879a7e02629f51517acf46f19c1e1d8227e3d72f52f2a848a237a070dcebac96b4c82f28f4ac7f387f9275faf88d0b0330100801a5f40174de386c17f7fbea1e178786380c08cadfe5d41d7af6a6a9427babf391a87daaa77510791e1d004bbf0f1c84ca1a65c209275c5888a18322a11cdb15f376fa3a825d20d19cb9df1b48cc9fd129489a5b5e6b3260988410a8d3d164d2c588ba24f0a63f09ad4e5493cee48b4b76dedeb48b1a0e0f71242e3b006236eaed53caf3fba15ebaee2f7dacabd6f2ab6cdf0289aa47ea6c040170c88a885dd5ff07ca28f77c7e9199f3b3aa13e00b8319409cb856d23e3b6e24c8fe9fe08b31c8d143387f88ec53701c532fc9dfb950ce1e6887dd57bb8c6a6de2d986841a36c8a7b9534bed160b249c326bc5aecae48d16182f548384bf4055b4fa3ca8c61e6daebe4234d1945e44051fe45f746ef1bf04f9b4744367ab156919e19851d2f9147e63038833441d8ab0710683de90443df999cc5779878d104844155e9999db1748c486436ac7dd01b0fcce58e0ae1c03c12516165f15db9cc161a68c1bb7c33be0b03c12e18f1cafde627dd74110c69b817bef74c1013c83fd35d64a252743311e6b4bbe4e4dd91858b052c5322f937ee3e951df907bb32ab45b107549a3efa456410d950866ffc68e859ea2c2bfdb21d68c7fc9b38ac35a22be78b615520ffc91484c22f5e96d8ee8eb18c84745dc7050127d48c2425d6713b9001ac8412b4cce052facb5cbf1238f3c415cc1b4991657d385cc33da0466b566ca7fc9f57128286789520c9cbd696a7159691fb6367c66debfc594100240898e1699dbdd0f6263718d3dac1a2db16a5a60530d97cd99e1d9fcb9bca48eaf66587ab82d9dc15b86508e0db410a8e8aae126ea15e6b995b423ad0de0f162ff1f9283324edab0c1f4381d6acecd5b20447c16cdec12d11401bcbf0e3828fa9de32428620b25aef57326c7584f9b93997ea4c0751f82428d13960e8e694d44475500cd0e33b9505259319ac6948b424a8d9117caff893f7c51ee4d2302c38a747e44c32608e00aaed8a00ee793326c907ff6fa0902fce365a8c7b3573da37328679193123509848dc2676139396daf455420daa4b155949613d02bbdd25a0b7409cb21f17f55a84c5f12e19437a0b26cd3d35642df946285f1edd88dbe9d8e6047990e28feedb46089823eb538ba9d3c5588e2926e543203b4d4ac822c5f60f5600827b5a46a47a63aa4039415617594d7de14cbd3324af78a9f6eb66c4c764845bd800d1f63f39a933829165c4ea59562cb18a9fbf414c5fc055477285419be39eb0fef67fdf3732517b921eb2a4136387f6fc236452d9f9aab3056f04b7938b0d542c4a5c17cad28a9a7a4d6e46cabe9c91a5bffc309b1e758dc7a6fb4129f6d65402dd8614961ec19b88a22cee59bf31d039684604f12baaefdf0581898b085c9d39b62737a503948c407642bcd58bcf4a8245714bc32388184aff81c76abdba88538149e895b10c80767a5a8665642817ebb3d3efde8cd83ece08c7c831c8634d513e8f0588f28c20ec6fc70b619cce69242933e2c84479f7388df551c5fc6cc4ed697166648585d398af1c9c91aa8f717322fba6ad6551253dedc68d5b1b2f5d3cee06cccc425cff7e8c245d2a48e257b0a43c083e94bb21e1c10d2d7595f2aad990da71fb5314393c9041f619727a9d8184d80ab8983939be8d7332c9e43ac6045edf48c8fb0d7981ae4086e81943e6d4e1beda2a2c731b39928510df19a6792a72a3656b8f3877821061825cf3178db0625f5512d8e784d7047b72a449c9f6821f838112d4010d6952ca43283027bbd222f7b6887b553c76f76c4fc38b68e0baab185c315a4334bc2d881f2807f462adf7fdea2b0a24a0ffd8fb8d92f4a1769c7e37b5ae2b68490ce1657763dae1201c38448396edc126efa18e766a035b67de4e58342b863a825d77c08dd43e80e09dfb03eab8a4cf67c296c3ef3438db3acb71e163c9b03ffbc699fb644740e5204f634dd1dfef4b72af5b0c22c8d4d05002bd98115c25c8bb6b6c834117192ec8646e4285d1a32b13e4de17dee6fd526794cbbf704435756c86c3e521283edc7866234eeefdc94176a3edacfad4ea249b5bde312db97c967ac8eea43af5d0b09285a048a57543c74980639400daf7e7dfb1c56cd1e76a35b85139029510fc3b4527e7867f6a64847f2f10992cdc9e110444063cb9878c31cb24034f8aff6b070f5b9e749e0eab9bb51028dac5f33e84a3a1abaa61bee3302171ead7e395092649203e2957c1161e91be230c06e636bb0ae8deb6ce507815a949b26539fb75214d8ede29102ef523cb27a2e97837d5ddded120a116f4b82470fc81d05fb6caaacad78b5cac18419ae2260840e0bb8c17c10cadc42e4d20f4880d1729072c515ecd0bef38e75455f86b08ef3e3f85fa1961ddabcf58a953d187887e2a67882d567059b3a465efc93e42befa62780dc2ae495e4fe862d67d2f19e302e8353edfc7f51d2690ea4aac3715aeba545d98719cf4963a28ba9812284cd848986b50e7874dd07f24aa0965362dd09747d1d542aa5ab1514a95383aab087516f6b0052480483c719428ef3a7c17f3b3b6a610ad2abf5fbcb9985d84715a5a967301fa442df9f5b67f1be3e21d55e8275214b1dc5d08242af14f8de4dc000e5cb664003cc78eac01c212b559315c2fb4143ce27a77c480a574dd3711818a96637a01114882f2a0cc6a3b43813f42387063b60a91f6da85aa4beb66653727791780e511317c66c35074aac3aa445af68ded856770ac9c5e126bfe420e009acd1c181f3c31babd83be4a76db9f3a39f2b026085026a80521949b104c74a6bba35dd9c6ef69d8983c55d50faad09a04a061ab47ce740a9492fe5b954d0cb29611103a457927e8417842975baba363ca51bfb6424acb1826ccfd79115c466ec839defcca450670957bb77146884b084b5719d1779b20d351c8ebc7c4492960c80341ff0fa868015235c489cbd18a7cb501751d066b75180ea6409253174e53c6c0b3b2f9a10d50bec99b68de176a147f2af86576b1ae3233ecc0f4ddaef5a027ebe39524f298ff8fcc43ac6bd1c24f43ba28587933b51aa286b602a38bfefc7bbbf06dcb6c0146d1e00dd7f9225ebd8601dbe07db2695db6050055393dabaebbf9d0901803a669e18b847894633c24e0a284e3601602465e772aa5f0141e56a269c9c4e10c953f79a8ff05e82a1c2d6f51788cb2ae0ea1f5490adc6632a7d5aafe014d8bd54ee39a7755b27544f083ee1068a6921930869760faf2930e8b5349220a990a5fd04148a4fc272ce7ea84ba047c42ad803cd6d0feb8d26e5e14f4bf004143db9ec34ec65be584e967f52eadb1601cd0a284e256471004f3acda5de4dc37bb2a92b6050e6e0f5228a005855c7fb9c18af77d857778ff2b90f02bc62f72bedcae5d32aa067e56ca8a9678eccf733ea3bc0446c2b839331937ef7f76bd57b04fe6fd58ecff6c9f1f0612216ea310e7ad708de7dd6adbe86657d6b1d355d9fc3287509fb2bf0a7afb5ac0d006748909e42e969b03f34c415fcf3f12dae9401f49b8684bc8b290100197b0b23d88687ef8f2533e90ec213ee25e581193616ab4ed371c59d10772f46ee8e507dc1d7ce202bb261a1da22021982e3c22b63a9e6b1ea6164ecaa1dfceba16bae55c9494c49c421078e48ee1c55c68646eb2851f0fa39f379630063758cdfd644f037b9d6d93854fc14f0e41863438f9defec06b5c5c90eca6a9e6328cdd778617ff2ceca205ffd5b2400b7c6eb85dadc8b9531cc6b223f0fb92117c492d01968f83e993f71e0ead053a02a402c975615359259af3c715fa78ee849050f0054c306b548d83668d4b56ddc3384f73d40038178f53521a114ac05bc8b7782c1e6e9b78241a5b38a402cec8700a0811f2632a96d808f242b8e3dcc5ce210ec785bdff406b05d80d577bcf05f5b0924a5bbf024542a2f08b67f7762e403c00a35110e7c434c9c510a553b55ffa2818a0b1cbcd1b92f88411119dc6293de179f46d3b81cedd0737d236b2011eb1bee906703cc85c5c2bb8955f990eba011b504200328668d41dbfd325b23fb6e3f79aa1c76ff2ff24463ee2ebd56aa7c2c4938d9d73e3a21bff1894e8c67a3563837b7e20b4f4934bfc316171dc3737b52da2279f983804a7d34b2e65774d5e126e9e3de66301e40de5f1c1119cf215685d14eb214eb302c79cbb7c3483467acd26cceff1ec65899c3b36beef92d785d8c0021240b2b9b12dde1c70d0b6e73820b0e73b9452462a972fa5ae52aab3a6dc19cf9a6ea97d750eb38df236ebc22c911f3613b96941906d74ef7c48e88164119ef8a725fe59048f8995ed7986b2e40543f768d2e2caff832bc848a6ec699bf8d84617327878ce210af20172c426d015721d014ab476d03bca13e73e06bc32c50647b71375b0268b01f9237e4413b6e12ddef10c084064e0135df36341de48316a39f8fe60fc91872fb5f9494468fd759ba7a40c85c8fc92e71bc38aea7892b84606d1cab4d1f08a38998146846f14fc85fa99713297c0ba16ea38cee0448f15904b3cd19bd425805f98082e55d81f7298e832200d02a06a4047c271d972388b4b778fbe0925f3a8570f75de4702661d12e6fa0c6e8a40865e13043a431f2fa4e150411d765e67fc038e206c84640efc946b080e5534caff81bbf4de7ff0a7a3c2721ae11badc1fea35b4383a47171d87bae3f663fb0ef6c88649d0343e772bb024eec21e31ce7d7b2132086c4462ae6b33d0ca5adc6184743a903361a8388268a200f5ce61c2ba78aad6ffa07a409058316905b6ffb87678d965f2b91e609598ca81ee6ec003bf33fe84b6819ef998caef3aa1b3274942c6e3deae13e5feb9f284cd69006cb6eb5a8261d9b861f66b24230a665e525097182c89b6aa4498259caec1e957a029f6becf209f272e49f985284107c202189d22401d69cff881fa002e8532237270510d5074f74833d56b1cfadc1362b077f246b5806b54f661f05ce8aff61051aa29c8204d54b79a4777ccfb232e33ba440eb7ff0b3e8b083f8bf4f9532ef3a03d127d38a1038bb37941f42ddcf811219b0680e4078aa0a622ca27cc39e27d8906d44adc55ce16f52f28107b1446ead0188433a42e73e09a1a10a9ba46ae32f79e368a857f8635468404ab1b8411de9414af54460991a0e6913dde744055b5c5d0404114064cf822c0cad929b9705d1a93ff9ba7d28bfb77c393d7ebdf7b2a0c5b5eb1baeea679e8d71656162bc667e6380ff83ddb5b824e4158a721da9091180b3e1c4923bfeedfe2e6b3b56f15d4b4209a024e0cf8e71c04dbba5e3137c88c781277392ff176967ad69b546504f8d9f0dcfaf47404f0817b18d3b6d8ad735ffe6419759c19594773781bf4c57c42e1c87fe43f819d5de0dc828380f340894698eb6bbfa1b5213809f21ab161a075aaf835af10046424b845b8cc88fdd74e2c6d1d051be102670211f900796bf86d1acdefa1270c9dc4b4453f7049a2203b14904fc37c499445c71019e90577bf0d1875b6c50201dde3d64e830f8e52f228356b95cd8134ab7a0155f8dbb56c58f252d225b299fbf4de0314eda2a01149d2d471e2cde34c6ebfeaef64fb8f741801fc00955f1af9a708e293c34bf3b25d2130414e1e687d4467b080590e36d3ec639194247ba8c331de836f68dd302ff8e84dee224cb0ff4272be16938d12bcc19de06630f5fd0e8dff94c7ebbe9cea8adcb80c58a8101caeb05e632f702d23284802cd75eea427780220b1e691de782a36cff792a5a7319fb9228a05402ba1024b0389b9c149cc3854c44b7b31ca6617309e0d1b99748c0b5076f9b26b403c1081d5fdd0a630c9c8eb3797a951e7a5284b8f046e4d048f7056ccac18c3bf25430ef8acea2bf66024454c6e5f3c049eac56cc53b39401d721787f9f866771317470de51621b2cde7f93eddb1ce83a3ed64a39828bfe22c092af0e1fe3da5eb8f28258b458c6af8ac7fa1281d0db33f691a2c1660107bedeaea1aeff13b85f87f44e63416d9849f68277bf05d08603afef3b64a6eb7f9191b8b8bf93bfd509134d2a590ae8a7c05084cb6a82ade7512b5e153801da800fcac774ae3927747b10f78314229c90eee6d7118cc5b0be02cb6d76f9cbc5ba69375293d790804eb7f37c91b36caceabf9b9a3161ce834f89db3f19517ac90f4b9bd187aceae663551d2f490b68ae3b119fb8356940ea2b69a0cc3f37f5ce3b1d85d0e58e80aba782ebfb8f923a04cc93c8605a2bf2276edab230371d04895839c47bbe30d58ff5eb1f0d06377fc45ad2413c6c17015374cfbdb672881ca3187a5612d389ffd960e02bc1da8eba683f91d60b1803f30b59d4b317ceb9f6e78b3b9bb034e6a3e31a339300f76afe069d2f144d8a7f738c9b0965cb5180e7a57060959a4c621ac51dbeac92f4bb5f7584557b1719dda5678dcb9803550a4d2ee9468577ab5074243749af7833b7cfe89186a5a3002828ea5288d881377d3cee429d17594595d35d64c2e685d926f293f6911ca1f6f50618d76765ecdcd8ed82b0b8a3492118eedd20092f632ddaace7e33a49e1824fe2c5a9b89738d80b751b51fa0c8dfea5aacce109a924742d42ff9ddd53a06b43d5eb2fa900cc5e789b1e1f267e8f7c619f097de176538576c5d3b59bc0fa9ade1fe331f74431cd853cba646cf0d49c26cc19759c6073c9b2d59459d7ea98b934b7d3d83ffb1067df87d2b06f0b79cc1f279d467f7c2cca4545f977b9490c49af7c18114adf256d17ceed726793b72960f248d52a2a3c7e3105523177e990c23d690456bdab7023a12cd2f9ebb5247869acbc4ca1d0e3e33e4c9bd37d2ddb386a50a89259698dfed21198a247f538c23d2c0f6e2ffe966f728e29e1c0bd4d68799c8c7abedc2a65e64d89233d696ef8b2f5cc98dbf1f7e748172aa6992d0a16ee175c90ee80d00eeb91923ca2807d8762e4c0912c485a41a42e18cd3f17a2504b12722c0c155baed482065085841e3822d59cca909fd5399ca9676af45dbf1cd1869fda7c8e425b55bf4772957668fdbc30570e438296103806b706e038a9393087102f1e6b1f2f86220878ddd10da9f16bf75d0d17cc72a34049546d50f951f81369d845171a4c42ab53fa3894d397a2054e035b8445f72d8bab9d428d02b0cc6d3297f64df8bac6ff654260805ddea8d7252cd0459b261197f7bb8f8bac0df473e60531cc1793ba58e56c3b7f739111588810751ff79cd83608dbc53da58c83d8456f222b48646c7d2477769b67ab160006ed671c1825d8e8f1fb8056b01c09a80ca3b61e91fbd0b94e63956d459d2cca484934ca07ec70e5491bce2d6f98bdfba3d1cdaa7bb731b70c0456611759986f04dc4a9085d227600062a061b6e65bb3397186f78846c0a0091347e1032f6289324d32d7ecc9e3d9215cd36100b8ce5d7a479becdafd09ae0afcdf9ec78b30e03a196ff7ce82120be11c7087c2ff8aa896afc0a42aad3515ef1f1ebb316c4b68016ff1ea11b18a6f8ab72094bd6b150c7946e3f09c0d5eb8720fde8aeafd122571213d9d91e6461c4ae694962cb316142732f2089965665157fe7426781866242105b9f8b2030fe0e2cbecb6c27fc55f09854ebefb054801baee3b4f2a91e86f4b3f8a454d0627d70eac8b36991098ad79eeefe87ecfe2e0d0af3da2b7c6509092e0c574b35239ca7cbb3732a69908c73e9a9e6775a9a934e5c30d2e803420b22e0b929fcd9e1ec3b4cfb22cf0f6a1d6c6480abb1d0a1f5a57909970493b1e5eb222b55e177f806f452189b817ce42d37b1346c12622b363df3f2eaf57fd5ed7e927f6dd3b17b959b20b51844e2cdd0daa3f5d96596e814656120bf622a930c0959763bf8b868dbbe044df27880a7dfb0cdfcb940098836628890376ba6199857ba4363f5f35be33c62c596deb0b86ea35057fe1f350465b20fdba1b5f48283d5ae7f15323e5ae77b23a27dd83b38af6bd31e105096412f3a6a2797ad3dc508eb2c66f77d37eef00a4f6ab2ed0b0f1b0c16c45bd784ab95a73bd7df338d14dd77c7119eb927099705299ba870261ed10a0eddf05a9e6f86d34167e7e575ea1a03ce575b22fffecd1bc442cc6785ee5dc80881229a5cce426848d188648bc4bca7ddc21af86af13b482a39f82f59a536ba25b0eb487cc5da148991a02014472f8a76b3a197b7c976a1ee878909ab792e19383f358fc155da0e5590dca84767d8d46013a2360b43455af81e761c38db770d5d09d8525e97d3f5bfed329da1ea52975014056099792e5b72d941576b19f66a998d4b354200c50fa4dd124bc93f8dd577a418307405f09c5c922ae1d070abee607b3c8d10105aefd24bf3081aa20667862063166ccfa26644d027b6d63841e92556d611e144d8ea1f6d30e384cffd3980f821566f52c24fc8661a25ae9fbc0896578971f24ed6c312d25a5722bd2a9561951e26a1cd6ff47942f2268e8b8e8597fabd64af11d1b80668cd6adcd2cd6ae82b50a4a7c1e6d5aab80391bb2597be32b336d5e58584ab210633caf560a490c70408ab132364fe421aff1b78bff6285062674a041f60971bcacb6e4d092a92701b31f58e02ee640456fe95e05f3a95bdd434b5c257761136fd37a754fc106eb6da5fecb4bb130ea034e5bf867a3f3874fabfb0f50ac31de34a13a6480c63cc8506a7853ff6a11dd3304ac75dcb1727541875c29b0a0d024adfe0baa106002c6d2607cfbce192d76c3ab31b4ab9d17a0c33c6a852f2058d692140a889a53e4e229ea97b777920a83ef81bccda7888aa6ea07f968ec131b4287780e5b0e0b76170969ec75dbc0f6e5a31ca3c449dd8cb0611881d4f2f46fd12311185f26540965d8924b2269c10ba370f40dc5fe040e97b6c4400ca91d4a81b093bfa2f7ccd52822c65bccdcbe62470c8ca44a589eddd5a2dc04eb86e52ac78c879fd8fefa18cc6fcd352915819200f99be3fb603a44ec591b579e35f00739d6d7ec6dd5bf05c3ee4fced80ee3342810e2f07e613a3db03b11646fbd810359bd071f1f28aafbc8cd09162fe3b306ea162e7b380d5c9d57340692ab8ed2c21e5db2f65c43620b98188a1b8756caa57c943018ba4d4c9bb59c7e704814d5e5f9dab59ca4327941b279401edb0d2305a3a00b01c9cfd600545d7b0b9edd16bbf3d2a84bdff435d0f375e4ab62b5fd3a8c4fdb4f58ada5bb41280addab210ad08fcdbf0b5ec3f6e6591b40bbc92fa6fa9c67bb828987c0ba661ab23794fb0109b9286de29053b19ce560b389dd02ecf92f52384cd0f39f7e8ceb7b31e601edbb566d3030c9652e13085966a5cb0d9cb23bd35ca7861179ab9360424652f7dbbc27fc6aa2a1cae08b3953c395e14a95a48290fe6605f98704f43b28a92a0c0eca1c585bcb99c358553ccc4c326cf99e48082e0dac289e4e77a52e3d528f12494def19aa836d711f3ce89f70c85f0f9424612327f0ea858d09660f1fd6ced5b986ddaf1e6fdf9d868a05842bf3e0f1ec675889a8a3c6f91eb100d92d69e1eca62218e9003b11eacd30bd382f27bcddcbebd992503a05ea30730e9455b8bb9eb5bae26e0025cb9bfb810ec1918b0ed1ee3a633f43b1c5e5d274468e0d7668cfb39e4bc9018fca0e1b83f0836a9fadd61e7482f8845ca43eb31ee87488382ca7d63decb98d06d8e72087ad495b859407f1559a86412032e0f8d8c5c0a397ed1135a3ad2f493017440a49c2f0a355400e163a36f3f4ad3dd26b896cd21371f37a3ac242f5243b4fc51192fb2ef421f651fc17edeb916a6a0693bf44c5395c644054805bc52e21da4a1077ec0de315efa8ac9a670e80d60561aff159f854f7c5fdccd1da38f13a39b223079d16cf3b13469d3bb96def7e4dc20f7142674d650b14c910f174f4c31d11b8c656c28ea147ab1a46c5f3de59f8045eb8211898d2d3b0ac39084d2f67e7e40f70bffcf999314e999b440bcfbcb26281582a43b7eeb2a582e7cecd7c90bcabd840abdb2154de145956dc0c11a12fa00f69045d2e104e99f3f1f14c6d007913ac3576525c58e16011629b13f527f4344e581e2aae1655f90bf60642ac7e4aa3769fd9667c3f7634e0314413672323116e3994490a68c592bec9b7b4598113b926549c30398b8646b19344b161a4c26deed429a722aa675f2b35dc8d37b0eeccfaa2604e9f04fa24c946b2323bb55544aa054521645e169cc1faee9f06e98d5c5581e07fbf355363b553fec310a359f1499641a1be8f5c3132f849efcc2ddefb65a754b723d34ec47ccff9393fe1fb68fc154568234f21bea0015b8177b0295f7f6d8a437c6aff94de2cc866cf2e7b39155a1f8fc80daf9145a117aec77b587415e5bf22a7526cbe3ae1e2555a70fc2e0f29d89a36536e31adb7282a8bf53dbd1cb2d06f08dee2b99ebdbf3caa7ba0c5efc88fd1ec652c07fc870dc656e7100d0f6e0e335702b144363533dc17a50eccbd7f65cd8b236abf8c92d7e5d913a80d3bbea1b5c393ce37ef831cf045f2bb5117e0bfe8ad72538dbda610cfd2662f4f67dcd7b3737455423a4d8824d0f9aef1926e629edc77054ec52b8e166d0e311a35b8f58196ab5cea57a4b01c79e32e29e40e53d3e959af79e8a562f3684dc51faf72f358d4e074974d10194a7ae7aff8c0f408359a00d8fecf43cd29de27cdf9c3a75362ac79b9dfabf549f6a65cd7adca79128271e647158c5b68765790609787fb65d22ec5ab24dedc005e388a200a24e71352dea10ecd5f714f14ccb09609a55b633a277f3d9a18195aa699c207248aa5924fe6c4da8045348b4ca2a4f0dd8246c1702d0f5f267d8845c47acb28be972362359aded92633825c91f83aed40316c4c7af9a22be432111e09e31654cbad4bbd3a16811dc578f7f240cc7bdf92d6112badf3efa011a3b060f5184484af54f84f37a4c48477b3440f7cddb1d38d61c232b5ddab59632886ff367402ba3f1fd20b63119fa8c9dfb18538d0d9402ac9a07bd8e314953ace906bb206cf437fb736d351debd8265df4054b485ace6927da395529201071db3d26c04dc78681177dc199618b01ed3181f6994580cf526968a143c8836b069873a66ed362534ed39a12062d0e0b783fcee13a763151e25aa7a3ea1623dd0aa83dfadc62212bc0986fc7d9807145d28023968c99ae01ae85bc045ee5b7012464801572428baffaa97259ba62732aaa0e23d87e5b92693026cd53b3ba11fb3c1aea55e67ce7642c09ebba5c913ad8aa006a88aa5e55be95ca3b4d687e2835b6132ce9071808d5d7d2bb5353572d1ec0fbe534da1775a816c3f8032249febf5fb60b2070d10b765048d1c5bbf603ae0bc85152b6266f9e2c45ea999efec58232ff814d20cbc0d7b4b1680d68e839b7a6149d6c3d6dbf64fe63f9f85bc0ac2ae3b10aa6c4e210078ac3f5d0df02bb47151a3fee460c5c13638794000a9565d169aaa3d8db2ed584771c78d4e7420f2317b800b0014310d0680f412a3be41b4b6c132b134f74a97f4fc1c8eb165677b7afe34b55b4f527f305bd753b3afd4484da2d2b58c6d0b2e729eb95c65eb9ed3078457590ba87c6c483d5ae93be8411dc969bfbe60c1336ff9488723b6b628b872eb5019db4ea97c4d62ea9acb1465b2aa2d667a39a8e156f0be2228b3629c16edadeb35d9bc23aa2930ff760f7882be56cec85404f15586295ea440390c6986245dad2ba2ab29c4926a194a62473175d74ff752df2fa931d87a2a29e0d734ca2f901423e089c2914211ee14db221880de59b044b5ae1bde9be925c955b9fc93fbdb08a928643a167f3f2d0312ab9f04d4299ac1d57faddd51df57d6c22600e67d99a46906309ab9f6740d32bd97a7258d5b7d4333349bd80dc31384705e80e166e235a378bb88f5edc614817243a4714ff00c5514a3ae25f1526db171cef126a1dfe9eb0f4a3bfc89c582b0f66e41c551c1a962877ff7ffcc3e69c4b9d75e1fdb23be74d8692b7778417899fab2383fbdad27ca74f2a0ce275a2fd14b0e36ef916af727a59519698b99ae7fd4f4dce959c3362458fa80bc176be57d2f1355ae2b6b38d7cac838a4a19d189180fb66f8f19f2b08945c3066f2549345301df561c1a70c9855e73c1ef03368909e0d64a23d5f6cb962ce025ff7d1702fff9eebf218ad68fc4b1f12eff2062494c41a4082bfd4b4917f9b6e2431053c624ccc8e929de1ca90bfa355a0afd4fc93193f328b7c02cbe677445e2a57250cd35ae175984043677de135e3bb1bff2e415f152b0a2149800c0534ed41d6af25546e850611b12a6f50676558a47486d4cb3f0c12a51a291fb22d1619caba02361298461588dfc3ad503247eabf905c236de067e281aeaca866c4963bfc02733add1ba68f428ba35b27e1971ebe3c4a15ef60eeb3365402129009fb9803ceaa8ad537a9e3b95761af617fe8e208cbdccb0429f3546b30e7d0dbd16974cca62cc83cacb51b38c43f5c533ad52703bc4379fa3a27ae9c278361da134a31e82259de80cd31a8413470c918b6107c19936a847fdbd9360fee83c83db17cac8137a71d7ceb484964425097d6463ec4be6e7103dc8b00642403f133b854014c5dd24e81b538ae191c2c8dfd164bd2e8505c3578e6d6365ebec0b15f0ca2787428a495a8bf80626621de3faa4d994578a85043a5a6209cbd410873ef59f941bf880cf70af665892c44d8dcf10935c67b220246aff4d0e690d387843e340f7d5e9946a89d790aea52ece2fcfbc95094001366099e95d537c3f1ed498c414d4c2bc03ed29ff6418154c522096fb906985c2e925348e48af48ba94f277c81efb57c18fa564a7b5c1a70d3a21d99a517e7a5da308056c18ac7dc8285927e4d42a4e174845633f24033d992243b7c0c79ce14363d38cb80559afaadc6370bb53314e74eb0ec4fc94abe83ce15cb58db42dbc394ac992a50e01fe217ea71d5ee0bf1414f157e26baad5a409e4d71dab642d477f4a0a5bae06e06db36b2e79bec6279d5d045f48a2c722e68fb48e53ba7624f3e8ee29ffd702d7a6d7199a6b19c39f822c35bf355ecad9b9a50b8337060228dfed00be7a5dac3c6c129a8aef425935cfea8ad30d9a5a1211ae47f4385d943cb91dbaf615e465acb2289dc1b21897f1323ff784ed67773c3b44c25cbe885525d0a908f6487e8d137e20760068c163bcad95228224006210305e02fc5d3fcfde22cff0b7a5ae29b549c5c7e70258124220bc6df07879821de048b200b07a9679aa08b4bb15b22d0178b166d8a8aa7c5054d4dc10071f4f50d7a4ba252c5b158a48ecca6d97df6b3d320e9559a5d7bcc16bbdfe3c876a8cca59169bbaa7a5d44b8ec994afeb3504e36eb841e6cbd52027a09515f22b96b49b830ad4fc85eeabdc680b2d7fbdde0fccfcde3f04f6420c81f6df0fe582583ed053370d161d2f14f8bf7ba2d0f4abefa60410c6325f2ff59526e413d0f6e04e3189c704a7ffe921562abd05adfe3dce1766fc763d0b507ac000dfeb87422f9cd801f4d68db42006034f3ed57ba8383d1424fe59a5fc5a6ab790ef16f97bf93f90f9bd7145f0d447cf9742d65f4ff71f4047467d774f149c7cf5fb946130b4caebdefbc5423278f475fb6840e07fe34d0cdf6c72af75af9d932b0c3111ee598dae07083789077aa45d259bb0e5d3dbfdc00cff9b230e4ebeea5fc49c2a0c117ed74375a11334d97b7d145389b6c1976ad99b5e445f3fda30d4e7e68a83d3bf3ec7653845abfcbd7d7ec062067d775ec4e0f7e97d7abe0cb2fe7abaffa04a19f5deb91783bf4ce1d3f35c062c58e2ef71f583139869efe68b0293af9e5b0e5b3fee4522ef4b0340ff6e5ec5214f4ee8d773cb60eba797ffa14cbfdeefefd0e30d830b88f7e68a83d3bf9e530e5abe7d63e8a04d9bf4d2713f30f3ffe688c0a9affe9fe061f82ee23c583dcb84d550e3afb4b781cdb740cb9fbdf4c52f1a08fa7f1bcd1df6d731af1b8952dec052c09e3bef2218fcf43ebdbe0c59fefac3d382b46eec17ddb3d4a0dbd05ccb9e7a01006588a9d5c5f769b932605740a5431f07264d6b0cd21a1f01034cfca24731976f42965f2ff9695a40f0d0f6dffb2260e2177dfaae326cc380b3ced71fd181cd2f7dff0732fefbd1ba400b477bee3e0a08f0bd91e287092c4fe9d3bd531506b193586fd52f03acdffe6bf92468181fe8a39b58097d2f18f87f77160556619a579f5782ad3fef3dc259400262a23ac66b37c58cee0905feea86b4208285a73e7a6e2968f9af8758e96b345005287bef5d3138f547ffa7736a43209609f1aff86580f58b5ed2c2b72d08ed7bf7c580e92f7d3a4165c48f6c60b7c1837b6e9e1838fdeaf3cb80d5dfebfd5086efcd8d18b038855fdf5f39d800cbfceb7dc3582103c7df5c1403aa5e30e03777d292480c70fad5eb9701cb6f0ff9bd0140ff77233774f0bdfb07c7432cb6c8df0d1ee6df782268f27b3dd252995bd0f2ddff637eb4400a1efe7351cc482e0723f3b7c143fbde2880508a6c5c6289340da6036f98942f34ecbf2bf50cba7abc55392cbb5e1495cf2f799bb0784584bdd3332c00a079370a10b81e70b04fd903efec76255fd166c9f8b148760cc8d720197240ab64424dd2d2085fc8edfd7f21b94d4d5dcbba578164f96a818867fa406301540275d2433664b247192d244556b1037632edabd86b30593795ffb09161eedc3f21f08489c78872b2103a02c0ef7a5cdb40b04a54fd89d60bf050a6b4b2d03a52014f3ee42c906920c1121ae1629e549f0e2f432605cb32e98ee884fc8f8dd59618315e9bc1c14d51f3973397c1b6b38e5ec3380e0471274f5cf6520e815c802a3b042fb9e50af83df22e49a559d80f20a64ca0f657fdcf0d50e9c76fe7f3afe1bda698932dacc0358aed918f9c126e189bda19281de3fb8380efbd067f1e447dc9a7fbacbbc4c02d66b6b8311e5eec4adfb50ca5783abeba9b6bcedea6847f9ca076238c243ccd636d27688a8ccb1148471405b7762a28e33e6f1159f53b7384f0e5a016b7b298b060dd5ee83294f064f595c7108e8f7dd1978c3fdf54ea1d32e5de1bb6624d20ceff6673136a2c76aad37891b2861d5f9cb856af7dc165e0ddc5854b9f4212ccd66b203000e893c684e3bc870acc6a54d1c3f6cfce89f645301552cbf34c117ae5cbded7d4bb0431acf9300c8aafbefe8e2326a9d660e6ba400d16fc9f8ec1542bef79db92bceede9de3e0dd9e8c754777b814a1d0a64a3ab71d6f34dc1d8bddb13b3133d573b3358a7687e9a40861cb778d6a8856a25892e20c9bdcc37406ce3a2f9d330a4f07a82aec2b1e8b4cc99aeee386898ebe569f454b35864ac9b9cbc8ae4bd0c19bbf45d8030a6aa978cb02dc168e3a9d412fc41d6e4dc22dd05a2294b1bb2c0ce57c6385b8e644471ac6ec17840d047296ef535062bf3a9bae262608d7dbe20a7dc215e556323888be9aa522074b70ed13397488a8ef846a0a2ba37ad42890e1829b59830b1f56008b66d4826ea8a889d529a540578e14623d945ec88387344823519719c3e95e17b21d0eea289fd13f0554fdaf85689466e255dc9fb57bc32fe9260d4440c40a9deecae134f21167a9207040e4020735dbfc564b75955c53b4298fc1751d7cd2d4ca39e5d6fcc1d33dd6925a5e45c5ef4681ea2526aac5e18543ea990348466eff3a5cbd95baaf0fafb8705081e293f912e69e6809cc002e0948b67b1ea6ac6645a485b5aafd2463029977728f49d9fa63b620a4ab5f0ab1ecc9852cbd79e73093a0c259209337185026c38f435aee3401003dbca78d6c2e31337b4282b791957e4febdc9ec4817158a2c199d47fa35aa0352e87742301581178649b82f5d2e8e3aeda8013c8e563a44a5669275db915aadd50a4be7cd1ab8a33b2fb16fd5e725cfe90d571e8c3bded7ce9598e68adc546dd7122174449e31990c0bc80751bebbf1cd9a6bdd3e54c7f21de68d5196b27aba91285e31b692c2f1bf753d93b2609c8015df846c8667e6301ebe147a2140f99280f951f4c86fa563dafbe17f81f0bfcd2ffa14874384817f0b2dd7b4eccb3167b1145f437958808b4d03e7aa04da1626d0f027ef9b482c6161bd7817d0834433172cf87150d718d05baa5d0e6fd9035ed366c72284ba8c4d41629fe3b9e7bfb748a4ac3a4e68e82587ef568e7daa16ae36fd59e20e831c6cbc5a20210df92cdb678e31a87abdbcc2aac381193bdc151284e66faeedd4b034d32d9973ffe4a5cb7ee0cd370dd9229df5dd3e80b93bd078c25d5de56b9cb611a6435fea915336f7fca257a625a8760f89fe14b130c79db1d9f427111155bf83355547b3d8966979a875f9f94c4a5b32fcd3b6d3e3846b4a01d82ff917b3d70734e0bcf2d9204f5b1660a36d75b30b3b078f471e41b5d084b539ab063757d6ee1926f36ce11c2f66076b191e17a46b504a64ec78f8be2dfd0185075d8aa5fcd184d1f9f38ce20063496fb863568a9968e718a05b8d101f09b07ed06e333f0dc72df520918309d707037f325c503c00ae9fc495a5d160682527c4903c2cf06a0344826ff775c7de9e72ea55c49446063a4f167e2ae73f1840b1a0108f0c5a42bd74341eadf06ebbe9c001d395a7974e02c62b2546df391c2f594d2dcf596084fa6dc7e7c54a36dbdffdc47749ee2f83b90bff491fe7f0ff5aefaaec1fe11829b11ffbcee7f6e88ce8efd89d8387c89b66ef2df21d35899f574e088f6b567cceb0ca2e99979fd7b13eb92b47fa9521961708a6b22a86e2aadd4a4df17f5e42811d7ac14deb2a29eb3a3a8f9996d7a82b204a6cc65ef1c5b0943692680c51e086bc60b5870fd86a20039580335c0ad22100e320ccb54d02f533d8c802c28f367050f5af5b6a15434fdc58d924b123029636ae0d31cad27d7f18a0dfd6b9827a3e704b9636706858ff2db0105ea329b229ae50d7f8211bac2b49db7232171887890786d4601b7cebaa21ea8d56e75644eccff7a4c6b5cbe7f488c034aaab8365e60efded027924ce9bc32156e3df4a672cef75a0a2f030c683812928c30a81e4f0f24fc3aac806d77c66c36183823b75e1aaf92f4ea550d5e3074fd63d0b401854bba81053020a24a5cf35e0cfca88efc9327b748d33198591072fec17b00a7eb5c41648dbddd78f3d29f90afa42d147a044a8463b35820165a4d07e63e22d657a519bdddef2b976fd1074aa2a2efaa87969e5d12ea5952a6466e7125c4a57cf0b32ff30da72880805ae02e6a76fbbeb38522c4a820536d687b868d472a5ca0917a4c432dd4c8eeb6f7de52a62453270b090b3b0b11c78ed842fcd8a235377ab6c18fbfa3fb98b21c0e09687f4f115273e79db699a6785ce31e533d7f97632a9b437cf5a7ae7428cbf16539be62d800b707b002bffaf2abffc50a8d466c1452000be8b6a1727480c7b82756d221e220c2dd4dfbfe1c220e8f48cb8bdb9f01966d1fb2d2fd7827e2f0ec0b6761605994dc9c45ded7b1a0261f747a217ed63db7a7b261ebb67cef79b870b577e1ba0d9ad6a81a5cd0ba29abd26017fabb0ac32eb8fd7c0b95bbcb5ed21a272a356823167dfd7b60813a2ac288943bf09423348c5370d80a17545cff78253279acdf417ff9c372fa4783de05bffcc1b84ec675230782430ca84da2d45ffe5e6548bc71896fa6a061c4e2facfc68135e836e0c7a54e32259317b19871bd0514a434732b4b4bd7bf871a87c6f5ef238dc34824486aa28ef9ccfd81d0a4ebafc30cd2f599c651c9af025c50c12df0955c44e11bbea15ff99263fd52de9de67104edef663a6de1710d2b867ee30fdc42cb8e71d25f4a193f5e1983a2db08a4848845c75a8abffabd9f7ffa242c5586c45eea826391bb8e572b8e89b9cde4318e5ff199b997ee0e7fc5f7eaf3434afc8e39b0687bb6eb3f6570eb440fdf7bffc37b9f269fd5217a746735e88433c213ca82e54a0cbaaa7f9cd377281ba26abca037735fadc279c758f9b6b059d6649c3cd05ad7bfe7994cfdf737a4feb33d34e9c193f6861ebe47599e71f2bbe271de7b52d334cf86f2fe70312e613e77b5a67150efb26a719d5e9ef54de4fbb84ecf7a9ebd48eb8386eb645d36ac9ef537ac9e657b68e2e3e55dbe07d6c33c8cede1e55d9e6734eccf4c63fdea7fbc58eaaf9963888f9767599f17eb009e71ae1ef45d0ee01975dd10672d1f672dcf3316cb3671c9205ff52a1b24f5f2f28cfe7c2fbe4a53bd5459bea04b6da9f46b2aaddac97e5ecb1f781fe7af8db1821134f18424232b663f3f909102267e800289316c303bfd4e6bac693ef84f775c5213ae80aef6ee7487bfb497a931eea9af895d8c4c8da92def92314be38471498bdca4748ca500691fa9682eeda352c760dac72bdacbd53e625172b5ab7d6b1fa368da6b2fcf7acde5b54f2d41a314ede391f6b18af631497b46f170ed8865553ce6fab0f5378c52689e67da47271e8381b13db8bef533b687263e5cdf6a7d0f341ec6bab6e719ccf3ac555ba915d0d414348c522e0debb220bd82c6bccc87e0cdd1d252554da03e12498c0e1e73bdf651c86332afc1d0002fcc5565622c8cd5a45c4dfb972857632d5dcda56a4cb8ab2e0a75b51ad49eabebc40c9e5efbd75c8c43df358d775af5dabb304e4a95427d31b7b33067c2e350de8c7f8b65318ce33178ffa9eada7ef5a94755d76657a9a716f55e736bdf56b78f281d7ebd6fb1cc5b0e50bdf6ce38de6f31bcc9dae29bed5395ebe6cfd60d86c735e110a9bdacda175d2a34ec285c50835c12e866a791a9002aa8fc7006e148ffe41c7a0268f5bc8a2b1b0ae125977ff9186364b1228b65996f502f2e5a8cb1258d0fa8f666d0908f7c7a344eea51efc17ccb47cbba7cb49ec6d3b03e34bef53f33ce5f30d6e503e65bdfb23e138a2a6a00c6cc07c6fa0023861466cc9aa85e1c8dda64f59e8bcbaf582f3604725fc2bfac5fad5e43e558bdd49e795fde63d570bbab975f8e97bb7a6f7eac1a6a77f5122583bf547ef99d7eb15f832e2eef69cfaaa1bd2b97e8125df8e5f2f1b9e6227333152b2a86e9f22eaa473d0bb38852fdaab2705d3ca2ea5f17bc00b8f1f34e5c6d1af44ef65595fb58fd15f16c70f9d5dfe062d95fabbfa1a50abaeaefa19d2492d4cff53e3aa5f475f0a5ff7355b586f47efeb4aaeae953f5e7a2ac4422b670faaf867d744fbfe31ecc354eb33070a75bd5f2061ed77016576acf1580bad0827d0b20016e6c3e071734e42407c283f0202fe242f8102ee42270227c046ec449e04578097cc88d7013f8117ec44fe048380a1c8927e14a780a3c89abc09760e28df8e5cf713f38101e8407791117c2877021178113c1b29711b08c8693c08bf012f8901be126f023fc889fc0917014381296ade04a780a3c89abc0977026582680e7384a5b2d10cc428b262839610b2e96baf0e20957a0f0451498c008430a58a620c6184d6450a18c2c5530a3cf70209ed859b0ac99a005cb1aa9092c6b2b4a2c6b2c9cc0b25ec2162ceb2bb860592b6189655da50b96b5155eb0ac93f004963512aeb0aca94081657d842f58d6468802cbba084c2ceb233058d6440883653d0429b0ac85c037de53a6c0b20e82182c6b208cc1b2fe4113cb5a0a192c6b1f5081655d45192ceb1e64615947a902cb9a077cd366b0aca9e09b3e8365bd03be712096b5510ea51d52d0275a41132c50d2021738b1e48917c08049931840e1240a19cce0891434a841910d6e80032853e420ea60e37e8b49fcf2cfc981c140f03f2929005ed078c33632f2586c2296ad8065a8f7d4fb4716b04cc532fafeb1052c5bbd7f7401cb5ade3f3ac13217d6fbc72758f6f2fef105302c6bbd7f6cc2b298f78f316099ccfb472858e67affe8846533ef1fa36019cdfb4719b0acc6bb8df78f4f58f6ef1fa560597dff480396d9f78f3560d90a2fab79ff680396b1f0fef1062c03c0fb471cb02c00ef1fa1b00c7cff3805cb5eef1f73c03201bc7fd401cb06f0fe40bc0036e438176c4829cc86ad560b36fc27800d41f0c68630988d1d40bd7cd32f803ae39bfe575d000c7cd31f809aa3c6c037fd2c541d7547e551195065e09bfeaf33f04dbf8d4a436d00dff4d3d41af8a67fa6f6a8365407d407f04d7fabc25408f04d3f8d7a03dff4bfd408f04d3fabfea812e09bfe963a01bee95f550aa86a052cc037fda87a812ff28bfb98d6ea72cc7d678d6ebd9c951f77f88677f0c162cc0f1e378eb78465e8361217506e5b22dce5d9ce3003e8c6ff8971c8e93fdba56cea7da84d591f94da9f59ca125dd573a9d4779dea3b550d515dc7bd2ad575df7b9cd7aeeb3a8e7eaa5d0b8fbdfe52368c349e672d30dffa1b5e9e86ed81c6bf7ccbf6d0c4078d7ff91e5a1e8d1494e338fa323624415d6e685996bd81460b193d5c5a5c6ad8e3d650f552d2e0bd5b8e5136a4e0bbd486426c5273ca10afa4ac56832e2db7f0384e4119890827d7fbd37b2d21d090d3be25859e7e82dfeff4e63d7b5f75140da7f72c0d5db4ccb50fa620358105521345484d484971cd9d42fc6ad65a8ca5a75ffd5b18b90a23316e7f2cea982b8a13666da50a59dcfe7814a9340e5bc9a2743ba9633eeb8f4a8454dfa9ef8f466d25cb1397522c288d7ff9908d545ad0302ed901e2b19716b761ebd9bd3f7d142a425093302ab9fdaa1ad42455839a20f9d71b129c73ff5c854a7d0b5db5bcd07061c1b46a3c4cccb328ccccccef740d9e78677ea7639e5139643cafc6c7d0d4a8f1aef73ccff3bc1af3352a5f57e5f1e1badef53bcd13afcb47bfdcfb8e732533d55539999856fd1af41e86467da9330d7acfaa350d7aef52c106bd6fa9390d7abfaa3a3b0d7aafaa30ec68d07b549da147839ed5664b266a5058e1c249f71deb4071a8df6a3f4715ad51eae0dbfdcfdd6af8ddea19f573e74af53b4eab6cf0f452b6be67948d363c6957e39b4f45992449f55a55b5deb94acbc6a0f65a391f0d238d33c3564bfc88c3e5e9738cd1d547211aa369a31117eb84cc33cad523e61dc0b3183b656c34f2d78c4e5a0ff3323ff34d7cb83ee663ac4f13970d312ff33e625ec6fa34a131d4fa88f919ebc3f96b7e8ccb46275cccdba06426f321e8b2a1f5317f43eb63ec0d302f63df5fda33aa4750eb617e28355b583306354eeae5695454df18d4b19fcd8f465e9ebef752b5a7b56fa35e342156861a2518820737c557ab216cb55aadb41d47ad6c2835ed616aab6a3d60accbe5635836fc21badab7accbc5ba6c683dccfb683dccbb3c8cf569e2627dc07c8cf58171d1bef53fb31de7f1b9a9d76a189d5cd485a93c63eda7f69ef6274d65439babbdf6a82ab9162bb5b4e7240ccf328b092eccdd9c6cdcd3e72aa7bd9d56081f5dcdb9cb28196415a03b5f732496462bccd484dafb7b6ba641f7231caca65ca731732139d7ddfd390fc217d7bd498a1756f4910b5ebc8c2c34ac94e184bbba6ca50c2a9e17adf6f179da90fb191271ef9e87871b647b7f1d2754070a3ae46479baeeff7696880fe1ecf3e0b4e761cd820dcaff5ea741393df7ee30da70fee977dcc563d678cf93e3d9e71bc935b1e4861ca509229c98938432d20a8c48242698aefc1d1d63a31e9dbd21e5109ef93ccc3737f8463e8f077eeeb4337c23a76d35281975da666833e79c73cef76ddbb66d9b3386289eed7a20beffd42c11229ec43df16ae06a3823e7f18d0fe1d97878d041011da24debe271a525e2fef1fb3f27e237beff15cc0f82ffcf467729a57c90baa40db2be065dca20524e2991c88f4a3be70cd2a35df79dabbdaca10e11b447bb53d3aca6d9185b7257da1eed0e498eb64aaee3a494ac53ec2217633823bf25a59c71de1a7052fe3b4afac7496965c7b19452b677955036773ab9f5a96d764a97fe83e7df311c6bf90be3b07eb27b15426e92a5b5b9f1c68d35fcdaa4bbec66a775ddc6da94eef28a96e4624be3386b5b77d3a6b75adc57a49452d29694526e5ab52ea00cb3011be41a1ffa47b64cc252a858ea3e58ccbca033c84b4d9b79a1c9df5ef2bb7848c9f1d4342d5e79ed3b10edcc719cf4ce791b9ddbac365bb677f7cf169d06de9a72cecd35e7dc9ddb7ea60fb1bb0576051484e5fc367bdad0fd6d6c6de58441eec8201075b252555571b4c12ec20172221050500e8d1352203a78a773fba5eca89c1d0cbcf137b6f9ce752fa5949227769de5c017832ada39e794add6e984fab8595555aa6aac3a00b9a1129205860554dd985a9cb4c1af86df95ddb4f23955c388e23ecee34e1cc7711a37ce8c918944cb11a18e7461cfec9957b3b441f67f4dd3b4d79ee38c76e414dacfdc7fdee92733cba7b54b55e617aa76544a39a594524a4eda7a03a3df89d533738be724228a4452be70bb07b11b7ed9e8084143c6d2c383cfbcdaeafb374b245eff2ef30a87190768e99544e43dd920ee1edf558d5772ee4f3385f2a9d50ae9f5545e0a757a8ffb4e55db92d8880407f6c1af7e507b20fceaef250dec5039b68f718992487484a871e82f69dae09cef7315fe008bc760041adadcde648321c7940d39940de967c39667c3673ee5dcd3e9744aba5acfbc5b0c33de305e22f26ad149ca0a894a795e44a9bce71c06f6f8d60fd1c907a6eb3dadd15d3cbed7fe7b0df56cb9af7e34a0ce792f04f61be77dacb0a21c27d7138a40d7a35e7c6ed3b44d7ead2d91a71871b8f1a7e888112ae8aca9e92123b7eba2b424e25b7add29e2e8de02e10f941bc31f25eea913e2bac6e3539e9ebf067740fd8c336ec8e264dbdbbd107bb5d77e46213449c58dfe71cae6a490e7c9d89004654db3362441b90fb7e7361b84f9b5672bc49568cff1b5b72109aad9285f93fd41f8fd7b5a21ae64b321092ac4955cffb03f14e24af8fda30d1264bef69bbb0d6f182dcb9649b061041a6140e3f3bbbbbbcc69906505d93966cdbe0de9eede2e86c74e439877ef49a97121d85c9b79a756011a602d6067d307a962eac2732f801eabddeb4ee9420d5ddbc620bff51402abe863c1c65c34b1a0e90829628481f3d7f46ec8ea8e82b684d4449d1d21da5db6d244c47502f52e5b19e38ccbea181bcdd8c0b80f6b7e9aec0009113405dde0c8895908de18ca20620a23ce88a20a246621ccdbe2863963305919838cdb0f5a19238b31a8dcd0e648cac06b1b0ab12cbeb4dc3bf1bdc75528cebc8fd547cfbcff6a0f2e1fde7f5e1502c1e964d95fee1ad7719c0f8a4881d1952fad0ffec37517c1e31ab97127a35394ed34a5c19642c3d351941b9e96eed2c9c809b7ff84c5e908caed3f51316a9ca9840cda3fa9a0fdfc3d74437ac349c4a44125fdb293a8c61468783a3a1d9da8344e15eec444c593492412a62b0df2cba439e7ec25a9d42037135692a49154a1e2473e258ad114294650bcc89f3059c273da1e71ced93d276a47923b9fdc287d34c8f28974b2440996069949b301162497ad84a1745bb86c250c2c77329949d71f07193020687ca26332994efaf31fd070628145e38493c964d238d3c97cb2d34b9c12798c2e09eaa2c68946404049401ea32e84c463ef4440cc9c8d98bc6902358eeae8fa0f2992fac53fa4586a909d8b4d26fdf2e7621628412d23d7a75cf7c9e4ba7f3c8a33efb4884bfed7a5164d80a45c8f483c12c525d779f098042a72291e8b405ec52516ad44ddc865948e45a029541a878ef18c95ae5fe1aeff8e1e52c8633e747dc99dc99b1c87633c8b7133ffe9040b9ecd2a4752a6d12cbafe58ae28359529d73b0a78432ee91484c71f936ebf4d4d042368039445efb76aa0c49a09caf5b6e2b97c8872f95005800f6900f0a10d163ebc61e1c31656f810012b7ca8000408bd10748460b3fa2113e1f233475b2c433dff3bc8b2efedf3e7b0cc8bfdf3efe8f1c36331cfcfaf83c7609e9f9f078fbd3cb39ebfe304b83c7f0c270000cfffe204b0f0fc07e004acf0fc3c3801f5f93d00d496af5575aa4d9d8d0fc047239cd75201f035aa8d5565e1695de1696acdcffa33d5beacdebbea77d53e556bbc4b6d791b95e65175fe4bb5f1ac1a8007405d3d0b957e4d9df9efe56954d6af50556fabebbdea1f5361be5569bc4c6dfd57993f552762be56216e16f31d80cac5cf46adf1a8aa3d006acbb350575f5369feabf357a8f46d9d79afcaaf55f5a7eaffd5f58c72800d9b8a47a2911a95fa2bbe5669ea5798bfe24b57ddd9c137f1656a4cfde1aff8ad0ac45ff161aa0efe8a4fa3eee0aff82f95552390bfe2bba0ba169a98d54d0b37fe8b22400137fe01f885f8aaca426022dcf83cf8054fc5f58ddfd507999faf3720202921a50a92123be038baddde36d6f11d1c875b92765489d1ccfa7d50b9fd3fbe987514a8a071d9ca17536ebf901e10765be9f67bb0b8e16820647c6dc078b02c86475038f24d64be892f83f038463f8ef379d6b376adb8ffb49f9263f1bb281aba8f0fc2727e9c9e655621104e55f28bfbceb61a94cf7646fe6639ae910e039b1a5c7a849cb2458566f1e514c0652b6118b9a9cb56be2822bbafc0f075dd1893010de94c2bfeb820094b14421ca1881f5c31935e13ae5c0113b2083d188ac9999cc92f94a2104418641cb1c14c5a567c49b761d060a6a671f8d25cb612852a7775d90a14b0dc107428e0c05508424a10c4006207498a6210620654c0626414460f3c2d2cc0822a9a3842155a20c160c64c55f0a289225d3ce109112452058604a1882b4a2841032650ac388288285c7086184130e165b1831d68800a2f408211b62801165ecc62e426edb946ab3104512fa27238e51b3fa602da97ad7061744319656c5842e7f3957d7be28d4a9838eebded7b77cf6101082264a31d8fb5fc9cadb2dc967b5aedbb41dd0525d8b6cd4afbc52b3c39b518679c9aa669a1bc44e4e5ef583f2d462c3ccfeb149a46e6903d21c1d1042d28066e4a0adfccd47b316acf820247163892e85789c81b04a544fb1a9523d59db4cf49826a9f4365bf063b24f49483043db957f952faf377b8aad76aa7fd67594e1a9c1f802250d69206e77c9691c632d22aea554e963c699c9005c59d444a1a07f5f3554b5ac5a471a80d55b647deef513f9f05056b49e34c9723be990d10a2dce0295411dda97d3887eefc549d42d3c81c9a486ec77272e773aca3269e2265899220a0242ca01421398285e9680a9325421da414938ca02441c2438f8f1e309ba3294c96c820a52423289ec4913461a172e484490b2d2945318a497c78f8e10307120c07d2d78567a5fd739652a65c1eddbdbfe30b3caef14edff514e2d4c4161e0712fd5a007469c7deb4f77058a1db7b316eee32e5e231efe9fd9e6c98638b5f130228400160b723102cb6d01cd0dd762040159f14fa2ed7d9b0fbf928efbfffbeba7ddbf6715e8d9afc38fc42f0080a9365f3594a29a594f3d482a2a15bea8ed7645a41a0fd9e44a5569f8aa81caaf7a60cfd2dafa3bfe57f6e57439f5ed59f4b6d01620ba9d48f06234f3c433604f51f0fcaf6dccf32df78fdfc44fc9eac6cb0b32ecef268af91b38892a8240255210d46b66c73d8d1c9e11b360debd88d1a1f2ce3f1c0cf8e988f7e452fb211b703070a6878e372fd8a3637864ce54656f27143a709443978e475d93136528286353539363232680b48833369e230336148080bb37e1eb2dc7e9f30668d24f4050bb79186186a24cdd3575aaf3bf04dec60c09c82a018637499c5dd5d4e252425b050a1d5dd9d33d3cff2e1bac7c833ece01b1faedc344db6aa4ceb0a2a973fa2783ee0c365bef1e7d92e8a06ffcd7e575a69c6124037cce9e1f2f27fb8c887417e8e7c1d558d7cce86ded0917186c6e1e1e16acfef8377f4d88165b35506fd1ef5212b5d8e5f0e4262fc36f1714841b5e7a293eb712ca28c8402a37bdab696d5c6b3b5d4d087bb526d615c6daffa132cb670f2d3e955aaca77dbfe74529dea8d067f78b6ab52ad56f5e49f0ebe284f72ff75357057ab61fbd3df689c93ed7158e3a072e45ced896857fb9d26e257b39f4e0c68e4843c7eb63ad8caffb9f18cebd2c197ad8c28b62e1eddfbebe8deffe746f6196d1a24c01394593e6df835207f4ff164a8019e1afacbab0119c6187f561e9f1b650d9b06226b8087c6e7a216e3b609dd3924c6185f9bf3ddddfd3b77576ddf9b66594684bbf125e3f09d35c667549c93888bc795360877fb63fc1e9eed72960877a3d56970d61b3b3034e8819fdbcf6d73f8c6bfc7de68d0e5c7979a94536a526e9b36a5947ee5fa540112134c605f4effcef6b7bf066909277708119eed4a1eef71f1f83b83f0c433aeb44438eec6b8e3fccc37fc33a7411e186e10e1d92e4fce8d061be6308fd287b8bb7c22f26ff843c46f4462c1d2b5818b07fff643e43dfdc9ba6438fdf7dd0fe1d806393dbff743fa76df59194efca7eb91f9379d28a84e14d475a2a0dcb3e5661a8c514379cfd5fb53fd7eab2d8faa3c9bccc513cfb8435c9e07f5a7e7f9c0f63edcd30f41d91ed4c77b7acfa5f2c44ba4a5f26cb7e5252ac76743227e5b6c7852bdea3ffaa7df69be2d75fb72782b8f67bb9e0d379b7ad47f5f79b6fbd91065bdaa3d0dddd9d007a0db3dfb0074bdd7714287e8404175a0a0dff37f431a88fbb872d3b6580df2e3908286dc758973c9f3646c4842393e5b19f668618f165fda2041dc7e0dd22081f247130ce1e4b22e230d918439ce863ddae5fed4d5309f93dfbdd6d1e9f517bb203d1a0ddecfcf863bb7b91eedba78783fbbeeb7f99e0dd2fde9c3d959ee2c27553c7fb8e847440d06d3fdd1d6fc60371a8c52aea3ae7bb38acfeb02095a1150b0041a6130f9c2891b20018925660e4491224820042ca430b1c5cc2dad69d0bd1084a900498815dceed6af7019a90815aecc65a4224937acb9d30b8f6be6dbd9df9a1f3f88db199d22bae333e02044abdfe0fcae350dce8f156c9036387bf8f801c4edc7dec9a8489588c3081adadcf937721a673e6cbe8d17790a0edff933740c75f4a37118a948913b1f878ed5d9fc1c82ee7c1d3af61329288c3bbf878720b2dcf93ef36350cfc8caa0a1ce9cbf23013ea09a0d7b3a6a4f783758d642e01e30022e7ffcf4d336d80b7c83bf6f87ebd1ebbdf755ffbeef7b4186cab15328cbe2973b3f06b9fe0cce9fa81c52c8f58f12c5435eff9a9336ce09049212334052620992124b2029718226242584b0404ae24a14a424a820252103a4249c404a0209a424809092184242320524245d201d214242a224896efb344c16da41407142d4469e34121051ae1196c51f220903794d1eeb27a2e8a221e2275131f8b3953f513a529f943d4d3e5794623c8bd1cf08080848881837eb8f4c625094273bb43fa79f36332d2555019a8551499223bda49748a2225e7ced795e8aa20ebedd49bead8bb33dd4471aacb18d64c686c82543bcfd3b0dc62339a2508e8824474c52e3f5785b0dc6f8bd247e3b89df45fdf1b6eec7b55a0fc28e70ba1fd20b8e5c467ac11208a03ce54a0f5461a22440325d1c2947b6e2e849ac8519238d20090c0808a88c59231941c16d2422b2dcfe1f40e8e974555c5c07816296d8d4499282490e4a6e763fe5b26c07dff0377f6b74ebb8edb9c9c9cb6a1006ca624043ca0cfad36fc959e13cf4ec2044876873d8d1a08f679fdab3e8d4dca5f632de68d0610dba8d4e13d4c66da47ccb4613c2934f9f9f199563c8f63c31744027950828edaf81ae7c057441435963507c9283871c5168abdc9d95811a487e0bc9ef21f98da489b0984f4c59c1f5f71cda6ad80d8e4523f8158730a39664b4520150d0f083790c08d7c19c615b3d79dfc710efe955a894aac585ae582f3dcfa22c8ee368c4d84f43c618238d9f3de592bc02f39864025f3aac3589e49327b46543da82b14b4f9e3cf978474091d0a8f1484c12891a5c5223931a9fc422ff548d536a3c8a54629588c5d04c0c201e8b48fc3b4f926dc30634944faecba57ef9739c5c1a72b934e47269c8e5925c823541431a87e4d2f5234c9424d161824e1a5105257e8c61adf14e27d4a7beab414e4f515eea4fb56f5783d08fd743d9f02fca63de58e38f63a0bf62f8a93fd910c83da560d7cbf16c783ad5ee4147691f037e2e908b7ad4df5414348c50dcf8f453b47e837da9adf94e291faef77c3dca7597fa53cfbca9e74ea7d49f3e9ca92165779c6ccdcc8d1c1866f88103100bc680a26a4055d77c76794de38427d4771f7ecd10f4f43145645e940de2d14ee3761a5529a5d4c62537d2ca57b593450c9810e28a2220a6cc408a2b9c1c29c1892118318b331f39ce86de7beffdf65f77dae29238d331ca44aa118030175430c41749a640c40c9860329a94baa802080564c860f6c9f820074800430c134411820d33cab0628b1760292283290ba5a525dca0072738e3470a23a89cb1c454441121669405c68739a135400242880097917ea8723fca6a494ba7dcf0bbf2fb58333543785cd3ca42a33fa19f834ec867dc18a38b8b7fa3714221ac3bbfad8bfb7e79e3e7ccd0a371ac2603264870e73b1317775f684041ab8377348e6b3e5f97f67c7f4cebd2ec0c3d1a84a171a6d5498141ffe2908390f83df15b48026da10a75cd8f1784a596880fc27276706830072039a01f1f84e5c4df894047f0b8a685225057f4a28ef8f161f173e27f202c07090050a1fe3331689c47785c133afff0d163061824c3648ff62c3abf41a94dd73e764b391383c61853575096a5af0028a8df11d0f073279a128dfae83d374ea3de513c39524e552efaf1e555b9a8f632cf5785c4be565dc85a37d2af7e1c50d0d08f20f1248da5bf973c06246949a57a4fa5a2b4084b4ca88478d0d5a4100d4883dd4baa226833f51523683813db894addb34307b1ece5bb8d5a4ddbdff53df3366a44268df3df5eed9e637d7f8cb29ad2385f2b068b8fdad047c87729b532e08c087ec6fd8a95e7779afae578e8a93bd0bcea6bd49ebe351ec60c227d6dbcabf6f4757dab06693df7313548cc772d16e524d3d0d0d0bc4743c30dd2d0bcaad2d05897cc6b2faf8d1a64e6554fe392a9a1d5be32039a26c884f2aae8abea2753c31e79e9cf78aa1aca3b3333f333cf335f833374e65575e6652a0fd319ebd25ef5f236d87da5ba34ebb2bdc49462a23cd89e06fb150024a6f2507768b0bf05a2787758ca0e7c77a0dc9d253b4594875ffd64ecc0372fa0f14366eaa93c34d86c776830ae6a10170ffada53db5856bd545df4f9aa5e85831fa1a3240ce1450d4810c40c785032038830ba30410d8260280c55b1320614a2e84005b3fe59a28c13084141064098400933a61d780012f2b41aa13498a4245328a0da416da4bfda491a4c5d9e55723ba894407f89a9c98166fc9be524324b36ba939999d96d9c718619570b720acfdf87e05c5a565495427ddea9e3366d4ae7ef4f4a3aa3e0beafc11c7c43e028f7c927340475409063592a0b8f9b6364591654783a0ebbac1ab0a5bf407167194bf17068f1a0f7498e8d6c40980dec06d8c2a2acd6e7c2a2acd6c7929ce43ea62cca6a7d2d9d24d0fe18a59916fd282b2747b2e4244b4e4aaed5afdd8e3dd049824ae6e44c0a9ebc2fa56ac1a1056d7161b1688bd59aa1352cda62b566687c2f76fc68cb18d58c0e12686ad8c801c2a1c5af7490020f27092448e824414709dbbbbbfbf449593620cc06b4012df5221d443d2708ea55688ba5040ab3716d5aa70a7da425209d2974acc0d1041c5ae0d0028716369f8e153a56dc74e1c576e6d8d1c25ed7473b4b39adc68f4383ec546c6144e55facf176aba8e3afab242acec99d036666e61b7120517e8e424e245da6e232921349ae87c30add808ee88d3845d02a21e776012da0710332f2c2996f73f93b1d6d2de2bd7befdefbf6de1334be6f9fd7691f3717ca85b23280db6f9cb775603717fef6bf6da789a2c1df8bd175f240f04424de93b5e9e16e8310d59e8ff0384e91e40923f7fbb8240b3f41b9c16d6543113a1f014ed0f0afe64ab9525606f0c6ff778e0b9fb9d54c835df89af63520cbbcd75e2ce3894c57fb89a221fee7b9bcef671ef13febf2ac0ce0f5de23126ff7f0d160db20b4b1110daa5cce39e68d9999799b431de3a41396fde5e7babbcab53896d0b0e66ebfd9b8d4febb5ce350f0e67baa783d2f7ae439a7d521df37aefe5cde22cbc83cdbf54983b444fcba6dcb5b7416783cb42f231d9102cf8de2f7cffa77cc30939483a65b035e398a312e01da8044b0204bfcc08dcb3c18224bfc9c242eb7ff6fdc9c212b5b18dd1b4de0c13640399bdb1f5f1074fbbf58592d21b299982c890478d259ba979d75a67ec9ffeccb0da80cbf1bc6a67eb0bd5d0a49a11a9733f2394efe19db897ca22447861a944241314b6c5a1501f27e1c577224d2488352c6a47499b0a880652de43167621272a0bb691288db341aa3288174389312ca1f3a13bf8bbb5f8c13682885aefc96ef2fdfeb46b18a22901012a020234396f5f265fb1c2a6a9cb671a40b241d73cde44b2226295fca9746cee44a8de5863128022189e0882bdf971a470057fe4e0c287f1891d0f0c6028aa0e14c027e40c3d82484a4dbf2912c6d240155d0303605354e2881e4118d2e18084f5c1dd2c66916510dc86fc37f833f877f0747e6f2efc072f97d742cbab88fb62ef3cce519fe1a7e9b1b9c64846dc6b18c75f9198c4f5b0fc6b8d32f5ca12137f1e0d3383a390dc61bb739a62b799ee669ee6850f6e87c16cd198ddca85fb2eb3cadebbaaee3beefea17bd6e5d8e632ecf965f4d9f8b934c3eae8be500c9203974a46354269144528909a05cf9728974f284eb460ec5280e5dc9d50d4a833a53d0944791ef6d7ec6e49837b197c1a92b83f85848d056161a91741dd75dd769ff755c17991aa79ffb88a571b88f591a673ec7148b6691c75a5e4ea32be53cba2eb116eb52fc257f458f58a32434c9c5978c9eb811128d51d0303e79a2031ac6254b7240c398242699828671280e350992010db9a969090df9ca951ad0909392704043a642c5091ab2149642031aeae814d1100633a2614d0d0ce8016c40e37f7f8019c44e36fc9c5ceb4ddde431cfe24057fe24ca7142bf0f231223a4744638b141beef3e57b4db93ada84139c5a9ca2a7473f26d4eaefc827cd6757aeb3a5919621520a07bfaf9dc231951e5761f57679606e58d766269b0a94139050d279054020d271353834928f7da739648bce1ec5eab5df75f73dcf7278e7be6bed3cf8fb3a7ee639206891aa7aba17b6e0a600a95cff786b148cac8f7297e8424a8496a5ee1904c0074e547283270ff7136123528ff4ae3b8787437a4dec5faf47084192798b9bccfcc105704e188994f4bea9b702e199a3bcd26dc9f2a0f79e773dd7bdc7336fcbe0bf27df711c54343fdb841f52b948fd40454bffa9df671791ffaca0f4f98d1ff2a9178e775a93e33415ffc60c9acc5fa409f008519fd55f5f9b298f90831674dfc7d904fcca86dd29faa9cbfe4ab2af5d7ac8286dc8f94edbeb3dbf51930a8146232d2382163b9438d23bbc7d96490046a30cb121ac62237b2b9dd7fdf32021a7a13f79ccdfdaa109bdbe1e0251635791499951299550ba890cfa606853ce659fa259b564ed021f286b0a620a3971c5097ef597e581f0d02edd038b2a828e9fbd611e53ef4a6eb4dce7194365d0983ede1d1a85ff28b564fd0d09b8c9a0ee0466e64a87134feb693b6cde60440a43305f53876735dd79d4e2758f55adee33e166a700b622141b59d669b2b5f9b55603652eab08ca33031cee44196e96ebfc20fb48958bf7d33691cd66f9ee4afedb74dfe69b24e9275f9613d828ad0f81a5f24e66960febf88ccdb7846b5be7e11d7cfd858e17f66ff6fdfc7bffdf9d6c6af607d56781bef63ffff6736535df36b7dfb3e667e85af6f9fa6bae6d7fccfac46adf134efa3c6d3fc7c1a9aafb13eaef9d45fdbffcc68dec735ed101f35cf02e7afededb3607d7c5878166c8dfd99d558e179b6c20a76662d7bad3fb186dfa35dd6cfec2bcf6c549ed5a83ca3a93c9ba93f3346b1ac2fb9920aa8bff6a127ddad456b22df5eabbda4c1ed5bb65fb9800e49a0c6096a9cee4fbfd1d3f5627079edfd65ac2d9665d3336f2824c7a58642ac6c540daa8f96c57a179797a81c2e3a5856202d2fcfa8185f58afd5b093aef72ed5e6bb2b4bbb57d514aaf69106b7ff6a28c4e69ebeeba197400d6ed24883db77550a3518c4041ac6a6bb6d12a85fdb6f12e86edbb78ea8fcb08980729ce388e204126a1c548ed512946fc8dd54ebb76f228fb97e93f92de6613eeca296d2a38b427519a503acdb9d29a02178b76da9c12dca9f4c37c6b8e346186e94715e8f4c0d6e571adc7edb7ea7611f9b3c2e6d9149a6c6a398045369d4f8359b0d22e98faa67a0f08a9e30594294e4c81007f9f0b083901c80fcf031c38e1d9d1b30b066a6e54cf8a7e63e79d6d799824a30e6051cd01c7e7407c45ffdb4d5e2e797d1b88d72c0a671eeaef9d4eaf63a53d0ed59bec045151db4cefef057ff0b5768f8b156bffa9bf5baf186ac1b84fbbafdd2851aa7639449053102cc904a803414c495092aa229f6ff0e5d93fc56aa581423140554a1334ed07cc8ddd3e91b1583ea4f4ff35cccb37ea7b58ffe9d8da93e45e22c16b10bf263beab4f9cf56b4b4a0d4aa506f9c2bcf67da5415072aee9cd74a7fb50cc65e4471c8913b912f9ce44be3b691c1a978b2b37e66fe3658d972ee442468666ab36536381a9dd0423d4a0fc178268d84c577ed84a3ee442cd54c563451ee3a4db2257ed5917fde6425e1b4a1b3528bb48c86339fc9239742b6acd3614177af94fa6d667940dd555e3cc43d5eabdabf28c513a3c275cbfd3b5cabc17bf5a659e513f7ae6fa9da6f1b18865da4bedca96975ae54a1b55d6a8414dc256bad2a5863ddb9ddf6265cb63d106fc92bf83ff4111a4fc2ba52ce21bf939f277e4ef90df433e4d9da9d1c85ff257351ed548a5cad4981497e295c85423162ba84f7f93f9fd612c72407f0f21887921e22cc6bab819f597448d51a4c2c2c415464008020996cce447238ef15109c488020c2621929230932b38f103a02e7ef043931f3846a364c50818296072c10e66f2757ad56d1fbad0dd34231720f9f1482a41f99ec43893ef425e5cf93b1bc751aabd178b3aae2846eee8c4a22bb94dabdcc7e97ef4d22f3f7c4c56213993efd5079d492baeff10d875cba3ba4ec80fbffd9504a6dbbe691fc39d5bc77552e3a09ebf95947c37f80b7b66bc2a392f3eaa32839ff779a7534f993da58fa420d1f8614b5172c39e22e5091abf26c441fe959249096fc8f6dd775503ba5b7575df97af17652502ca1fbb2dd6039b02448c1520befa4fa7961619196b0510a5fca854ad74c54d0e3245330240000000d313002028140c0744e290483428166ddaf814800a95ac52744e98e85110841832840043083106000000000090060828525b28238ef9847ab4bfb4b8aba1ba2b24b32bbcb22b5aa115acc44aace40aadc48a56688556b642b132709543c2dca8c9ad1a0a1a40a8b2cfc60baad719e97b73812a851188a0619544e9c785c1d3225a25adaa5d42e3119ec88b02b43c61509d8a75469149ef930e7dfe567a92cb1e4416ada6cdffe3de34c255bf78e6dae8f0c5f80dc3af96599865a8063c38f1180b12f1129054989c652839db1a8b006b1d3a6054c3639164864007e042019c6f0d836e8fd5d7c58afcfc197fce9d527b922ec81d505db48e48b1d6d4761468d24d06428402c0f8536566227574f70308fadd55a9c4eadc823f8db4cdca01726c34576a1397c26261a5029088af8029396f71d1fa313e4acc4aa2ad4b929285c08711a16e5b3a4d0501c4b90fa2469027cf6a75dc77a9b83cc400606d106732b8013e19a491020a48b5d558978f20d4e75461f27d909d9b9f88670808264b98928016233c11903053811df706eadf3053c24aa6c0a29826ca8904a1f49f953fe5f43ec83017d539bc800cc828a1ae7eaf485360146300a5b84f277348b3e14abc423461d371227d9451a91abb16c5ac7f2e8a09218fe7dc81f657b09d1402166f96493d12848f8e45774855a5100929f5a1fda639ac0af3093e0875d729a9ddc4a6197d0bea81ff826dc810b010cfb2a346b1918a93b85325bbe45f25602fd372a444012d71fb4ebda13a193bc16484d7c9deea8093a093216448003d87c23ee374fd7a2a1e0332b67640dfd295f9a90003351510752289e77b8b7da28429b9c1c22e8ad02319cd608aa8ad3288f482b934a2cbaf3950d7e2358d27eefa7335ce2f752a9d416c8b6244c8bbf27a91f6ef23d13817af89e49acf924744853fc2de33eac5820bc35716a337c9832f6726162c391525eb5bfe3c550e85711787047080182cc567108f8562bc60f9d4e3dc6beab51d1405e4e7d0738f3d82ef54fe957055da2218afc47b154edfa84ff0f8cd6cd4764df8d5e23f16c2fbd2b2d252f526fc561a4cebfd1bb9b6c647aa7d32ce4282884da3c7bdc1adb8748272eeec99cceebb79b6b288645079cab52a4db11c83fc58a1b29ab0443747a66f82125e394a5b5d8fbc9dfd4f2674e18478d43100796f23173c85a575efff70c62ddc4697b0511458eae6cf4b28c73d626785a515f2a435755279439763b8a6acb38d494a57702ebd934af2c399832d34fc32bdb0d4af77fb18eb26a24b606a2c02dd3b66fc5e85e4121b4f4fa08fff97ee7b81bf8c2087086fe0f5d3a325ad13beb4361907e5aa2852eff64052eca83e7b44040c3e8d239388d9366520bda46b75c02940deaa9ed5f7a48017cd868a4a5c004a3afdea8bd127e5160881363d02a6222d101f3db154f934c8915ab8aaca2d0005d9dcbb8a1920308071add2fbad134c9e29ba9f2588d958351c507029fa5090724763656b650497541faa46245e80ae525c759a4a569525632f7cb4597e014eede3f185d7e7e094676430aa7b16daff2195c4ac0a1eb636f6211a3e7420096bc810fc81b78891e0c55768d3c9db23d2b5d0823307f7b99fee076b1d89fff565b6425261fb1aae9bef49e87c117f74e8ed337edcbffb139dde0a47d9a2bcdf6b34b1c5d3251e0a47f239a6ef36a412b7a593132dae1528535990c538bc412c1b3cfcac93c53dd3c89570a8ecfb3fa5c195a5dd46cfd95ffe7d6196f05ef7b435c79e73f07d3d913abed7bd9939bf07fc1e7d9fa451732919780d0f8fc77fb8971bb2af3b9c87660e19eba43b520382543da81fd6f5b9b7e8f565c1dd58ffb292255b5b311865812583225732be55c0161fc45c809bae1f1aad1fc34c03bd6a59b66917a9c3afe46319f7f20a38d14443401fb256d75dc165b58a2cf946482a591c920ce82f528ceae89dc144b4d7c21562738e819565f3ccb165f342c0f2021f34a0cbcab2cc67658af3422f9feb852e61f20a8867462fad9d6436135360e843a53df3071408c753d25baeda65bae3bb8adf85d4dabd6ba5a6b9ddf62a5587e2810432dff3b9614767b5b14c45156cb7e746ddb0a528e6c8505968ef762d5d96584ca422dd8a4da04527ae152f051c692a6969f42351ef541687b5bfb12ea0d6db6e4dbbf262384ac2a40f4ecd472d2cd96666edd667dc9f3e86c19dfdcca7dbee2501d7a700a31f11d4610d14cf408d25f0e78c937c2c1a86386c92f609d28d98219352889891886fc2158f8816ebfbfba2058b5024c4a90cc2f85fa18ea2ad5546e66f3a808236b5028e030a8e8135cc14ab9da8ede508b1e3fad1998612861465ce55543448138f8c0f978c676c14172a9f02a9db9358056c0639b9ecf1a2d0410dbd3e991dd3da561b15c9958076290a4a5096b756446511e9c7cf58778795a4327996157a9a2b8db2c1bd0856012393d6579ecc721134b7116b07e45ec7fa23352fb683d358ae1f456b195597f74c650a14c7aadd0e05784437e570dad1191f618759bd1696c2aef40c772297c8085cc2f0d9266da60a8797af1c35c6ad29036b7f6674f507a905b6e3d4375fceb4988aea477ec86d3981703b9a0f042893e1ac433387edcd95b7bc216698c1c76c8f187f8fe2ff3aa6585b5ca8a787ab7d02f7c6c6059436446a234d488fc315f6ab64042fda6ed4f423cb9a78365aceb11c044cc0d24f72766ffc7d1ff2b69343eab942c0e9cca7a645575dda40d4802c572c740b4506903014d71d004e208390f689bc22036188a5d3c61c9f048a4371932e5a9752929f9077fe0b2962f9a6cd4aa9800197fe8141bb679fc241a915ff2a4ff985970f1d2fd38be12b7a53af4166358544b1e0e4e4d096f4985591dce1cc7b2b3a9c164eba6507792ca7f0394081e6134cae85ae9a1a76064989695974e12d7035afe4f58eda11d18329dc1cbb029437dbabf1038c1396d8c02a6dfc49296a21d7ef9d67eaa03e6525626a26189ebcda33d18cfb878bda60526393c8999ebce5c2f282559084ca5810644674a5b3c4a9ad001cf9a9033bff8e1e02b704665fc59378981995d068c12eb3864be24bc92adb1a7ea07c2708f9ad427cef63187faba1f984130add5566ed4f92bb907f879954f1b52be3d71708a9550efce03c4fc1a1c4850c7f0bd8c5a4a0060ad8255bcae0afd0f2d0b78b95208cd066507464390ea0a92b85ceaec0ba7014da8f341b04f7074bed559c5c0258fde17ebdde1afbf44b79d4d5ba358bcfa577837e3650cb834532976ce791ddee2efddf1f228b397583ff0b8e26b62d62581272c2383071c20060460b4ffd178dd75a7cc39e64a97e581c70bb58bad87817fe10ab95ad07c5ee748c679acbc7ed813551382be5978290f3102b68b4009fb1d634140ee8907eca6e039751b6a4aa9a9f48928d8304fa4fca79da411299a197c3868f86b00e1615a47ef476ac57e7244140eeeedebe7c6498628041c8903109321cbe80efe791a3dc6d5f500e29f2562d5e4bea494e9d6a37a89133a6b5e8bd4df02c6163f9657fc30f2a5380fc01056b2f0bdc52ad7c09b7321fd1d3bffc58a9ec09a2021c7ffd942e408dc5b37ac996b6c39e54ba65cb29919ead80a04f23ae1bb09121489775f03734673c144551a373f56afdd76757514c480db9f85805f2a0a7e2676b674557b18056e0ac69ecf2b09f42e23895a76039d0473e8233d71c98a0dc9f097679ac8f6e1e685cfb0befb206b2ff784c224be0e734595cc701485c0452dfe8017b649eb436ae85891d066620a9e2c99bb0e6279cb2fef597eeb33894f33dd00d41a7906bd25e56c531d8910e3325f624daf7d6b63fb69273e4fa577fa30a5ffd619a17344d55fc626dc2f910e35e3c3072a75f7bce8a4ca2b2c934e15cfe498ff377a009f95701fc2f7d6ed92537bf5037799e8dfa6c7eac4a3824949712c7e24bceb2878d7923194856095432c334944fec4cb36482947a7eae7f20d0cc32139ce910c4268f18ed0f8b460d9412c00499118548a55409d14fd77f2c3744f17610e49d0be023a85bf4761c5409d28b7dafb7d5bf8808ee234bd5bc8c6aa850dab8c2374d20b5f10255c2ade71323b87521b7fb7440a61bc2c59cce15cc9f77529b7d5fd0d98726ad3da448a7662f09c2fb8a9ce2a9235b6a1961e5052a576caf2a1a22bdcf69cbc31f7ebe4b1f239e3718eaf8134d9c15682894ece701d91335625780f2a60b3ff6c266d799639457159592854315315d2b12ad5b489bbb38964f68c3a7ffaf23591d15a8fd956b88b796954e42d668e052692e678862d26e69cb6e77e1dcd35c1841303bbc0fda50f6dda3be4263108eb63eb9a8fa5408b5a784f62c40e275cbb4853840e86f01b74b8c7b350a9d7aedd8a29da14e0ac7ddf3ee68460284d46f66e67a8b78033eacc90c1b6084830c9d1f6a1df3e7a09565d2c6f139f7b858b9a8396062c1304cea8aca418e3f576764c66ea619e2a2e0584826c52f4e8a4e3e1341cec1466d0104be7eb6c50df6638e8306194442acf1300a47d7c662a67b7a6951ce9837e8cd5c0e897dcf36dfc90728e30fbb60867888cb828d7c3cf29b6f1b5d23c8928881862c006642943362f3111fcf8ae2dcb29af910ce60b294ecbc6a2fa1c83ac72bef68dc82099ce4a53f43972d57855f441cd58df08bd0f8734024be6cb2d2785910cd2518d1b1131f082272725d8bf5f13a61073ff07a7443c04851d207e18166dbfec8936c4314471a113dbbffd19ccd0ee939cb262954c0cb21e5a5d574a242053173748ef1b338c86d43ea4405b6dbb6cfe5f2f040714f8f633fa4c8d7f3b664924480252585b49d9f0d793bd894b39cd90717de6802f62c1d75b454e6091cfbc7727feb952903d95132b0fbfee0caf92103aa12ef6abc64374d281f7f6f88da1d951bed43f945fb93f0dc4ec5d705476dd8b779dcb03876415a152d51ca675c78edc10db14dd67c12cd49773011b451c7d12e2024d9abaa4db5d9c6dbabfba6ef914827bc2771a228202102afc0ea791023af74f05dd4ff38bf932885366c238939829e90a0b29ec94340733443f27c491d83574dc2f0da76c6c022e6330ad542540e4dc5695f3233687c1fc0afb28f6c69a79b2561ce7a513d2c473134d0ffde80076202363fae78c9f046ba0c227144d9941afceb31357835f5ad57eb59d8eec4a96e6c927a3a5d37769069881974da6332cc81c9183341c6bf9e7063f35efa5522287e8b3cc03b0061fe43bd492b4c423590c14b0c101cc6098ebd1149f1299d407885f7c450e8f803350a89b19e16f486aa2cc686c838e149fcc532219f8521cba8ab49cc4eba656ee871c9e161b70a5aa7488d651ec0505e07892c540df1a25016c34e7b9b16aa063e9c53370d9c09c9aca292cc13a3af5be54a07eba4fe11c3ccc5551a6b11430c8aeeeaa141513650154fa6f91beaadbe809bef064eb05fa6bf95717fdefa4bf81c37308526094f671a6823561ba1f4deb63e4d47b287ad2c8d7f34ca5ab43ee787fde188b58134c30b073a42697d929e25c8db98f932bceb85b31116b32ac3a5e071ab3f57d31186f8b434906b9c140d6505f95f4363943122d93d6cc1f6712752f133c96d0b3f64c94de076acb4e7d0e3a3a75a9d1341aa0d7fa075d5d814f8b57e27f7d43426afe61503d6b973a9e8958fa90b88985cfc00b19ada3d6d725c4631a8493229dcf15cfc9a3e103fd3507bb290cc7545176de4cfc7e86ec9b822f73c182a57faac7f823a01f7ff9e0ac56746acc919423572b89636e4c2cd93ff9977a0e15b4df71580035199fb309754d75c30f33af031ce15cd10c559aa887d071e30218e05da85b73680bedf77436e905ea7c0a22373492b534bd13c9c75b96a7bc8e9024be98a6d2b425802d06a5ceb77d8a6037af196f439f244f668d33f42b7d9088e395019b15b05580729640ae08483563447e1313f52eaf47ee65c10faa5ff9da28392fd98259bb4edb6b5000d074450c49da35ac08928c007bc772310b40cc4491d40c70e5b318aa5dd261011a2c718eeccbb92de6035e6d484b072b181bf3d13bd90d214389279986aef620ab71917091ff5914b2f7975da0ede1c31ce5fb53b84fbeb2ff10ce15e63c911aa32f40ba1af7978171ad3c3b1ac2ca563cfe6121322310e75efa88a11576cc1d46e9a324e275aff243a44e0616c8ade4639fac9e8cb9f284143e9f57f32109a03aa5504359e127656aaa6608c1ac9221e80cafe4cd7d456cc6d06f8a49b0f8a343e1d2964bff679939a082374488cf717eb6a38e5ab1e750f014d8377412b2ccda07c1bcebaf20688f01f2d322791e3020f41d886dea6a965a0ba38e2d467e063d61ad6f3d03034c882e3d721e58443994652aa8dd9ea52590fe840c8c59395e52dfeb35df8c3587c225326005aae70723041161bb335467552fa8d89f47596f5425a13f9a200508779e19e3d3e9b7234545a16c9d456a40e19bc065258d612e8402ff0cc55c2759d3ca4c64c165e95a4ae43e6af4a6fb1cccc5b20748e7a5de69bcf04f87fda68b142741ad77cf0838b108c818abdca0a0019df158524ef8a9a14c282c1fd428fcad1455c01d47ae9dda693f259cd2a816d1cb594d2d4670daa705e0b836729ea6240746805c83979018b253d605467cf682fb1b9450ffebbab71e880a1e8f88fa4f71b7decddc0764c8e9c07e0ed1a1322c78703ccef84e3538fde81d8aabf1f92c125df082b13e6921dad8fcbbc14ef049a0e955dd40999316642ea782270fd1b28d4ce5dd242e4394a12685b880f28fa07b4908c609a12aaf2d3080b5b8b5c20880cba2eaf75372c220fee651e2fd86391c21417a8dcf0748e85968a7ef46d6772f0b251c1157234c3c43ec619d6fbaa8dd5cca45bad01e43fe8d5ee0d94fcb092b791bc8ae59ae779e38e963e360fec9586d7755e5a51021b70f633366a9161668663e061b4603ff8c0139a06960c7a6e85018e11cbdc41b23f5ac4064f2505d56d9233adfa97b7b728d0f9a2079b2a2358bb42897c9082558e45ff11df61386d10d48b6a89516bc64371659dd41dc648af01252f8daf0c344edffddc482070715b916bc01fee5ac7c5af82090aa37d513b931587d6485b8504bbfd528f54c28fe577a1fdf20b102eb28cc79e9739bf518bec2d0b7bdf269e7ea7b7fa0661f3574dc721837f844c670eab55ca27098c386e3607fcbe7776e71006589a1595d07389aec4a490a338ca18cb4d578e46f31e7e3d8b43ac552802f2430185a941541c4d7fffd2ee27059341205b6dc9a607d65953b00f09085e66ab632f6ecced764cd09e0d8a545a08b7d58c976744ea307304320eb97ad20b82198f863644e6e49ba19b49bf655ee283665ec299aabc1326a50d1080bf0df1e806adce7efb20ab2f40bea26b231baaca587f2425b5cdfcf08887aa0fbbac1cb48d8082ea19f9680fc99c9eea16e34b9417f868f6e7a19b0fd3c298084d19742b1debeffa9061811d2d7f7c4b5730567a3e952a0600be6203943703f49ff9df0597001e770cf0653e528a3da827cd34902f8c3d46fb893bda00f23d80090f813daa8baf346116b6a3e7d186ecde36847c0c10b8da04293f5f40f794018342ac8658a83c7f56f8b51d82208b766ea3aac10e6436bc5327e64acacbcbf81a7b1ef180d9cbf0ae75d9cb9c03e72444dc252b79cd0570eaa5b8c3d6b0f71b5db5cb2211d36b3f2fab8a22540893cb803cc3d26751a7449b0e834c7792481112cf6c6e7f2468b2142798c64b12535ec797836115eec68a3438e2055439002dc82b4b690b68941a322b0533d2068a632156251d005738c8ec48dc53a975753e35c79a805005598f07f66215457dde157d19b718119d1eb6aa84caf52b3127707586cb4f3f0891a9238b53ce18f02efc2c03a83c6ff6aa444b3a799c007fc7fe175064ca6b9bda8c53ee92f232cb509877c8825b9043f58c24b71283d58ceb60fed5275a0913f1c21109cad820e50b1f6afade20fdb90b9e2657c2267a13d88dc25bb354fc0567a38a7a329e342951825c3238c8201055a3cff8aecb112ade68aa8c83a14d2a5c8042364453450adc45131216fa7bb45de58a92cb9bee98e8e2678dbcef64e9a018509a4a4a9138c80887c333492701169955d04b98680870d4f32479f0e136da747796b6d687984cf1d44c8cef53303a7b7d03fdc28e29b2e730e9c086ee1146cfb76bd03104ed14c7cb29e5b6e53d42ce2ab3ce1e447388123e8808fb6f936a9ba11419d6f5056a0b0a5b038573caf46a524ea7089f8bab915eb3903d7836ef1a7a7cedee70d052517aed6eeda348a583140980c79f8f1e608211765e76130ce96c03954ad4d8625bc8274405503df100dc079f0c702a3054dc307949636574143d69f6dc6915721cf1f3e678112024c8d1b02dcf63497e9e8005bb099f6f2c79880effcc442e5cddaf3fb777dfb0be71681f627fca07d988406adddde0ccffdca1f91292e9982240e2e45c0098be978558b4c5059d565a04a78f34a4cc98105914ebe1ff14f3e4d7510f2f7cac22052ade8f20734d98c96acdf97ae896141063e4f141b906f34d81dcf928850dcba2dce50160e9fbc851e1f4d14d7f8ded19a9db6d464aa24e070da323c1a4f404550e2380659a76f1a09598582bca87ea7042b3380c7c013fa9e9ca1781422c4badb3f8dd168bf942994af535c86ef12355497f9d340da4b792e9c53d5e6e98dee9c9d7228bd99d1685498004bb4073819074774791a1eb51b4e85bbfe3b599087ef23ad7e514d94f758e7e5094f4ff15164ff770a3a7a021fd848ad505a887b0bc5365320d1bc5284bd732866b70f0440ac183c6bac34cdaa8d04e249fadd2e8b6bdef4e4876ceb935ddb706ec4eff5d9d07fa6fab4a85a9ae8fb80486dd8a1f3fde6be5521b354cbf221bfd24a519c6bf49c94bea57024059130ef6182c851fe0209c2a11b4821ac63fea97c1526c6aba09fd6d56fe67d988b98b228c7f4ab3889e7c82fcfd1448ed559de10e2c8456992f12016b91ce0e23d27551d2b8e1d575248dbf84a4fee1e8b069efec7d91a4668c2d83a25bc50d720295b2d6e23007486fd7f35541cdec1b886f27e74509c234c309697ca342b969226b1f4fd9aaa161c3cc684d9c050a25994ecb9bd09f255aba40271dd25a0f4d420482367b97f4caeffcc2989888cead157d979979a8c45433321ff4be860020bf611c50ec5f3176c48f00d4a04e4ff15e5664d3716684834bf1caa3740f1c2ad152c35bd8eed1480d2be5c178ad0531239a9a2dc5042a8387a855d8ae60252032c052b6ef969cbea6222dad813954a5088d281475b5c0eb781c7da29995d72d85dc6c00f1027a0a92ad05336daa0a2fed383829a84b27ee9c7c04cdd4915f314e1c4378b82bc7935d1a89048c5b62b0232e6a485dae4e1b5e42cb8b8b354887adf729c4f71727b67fdbbfbe18677568e26ad683d3f63aa1d22ae274b21622cdacf8fad76e465915ce063228f841ef8b2d43231a43373e86d6ce0a799edc2f8cf25aa518b24b5384e3a46e6467940ecf5405ed0ece8b436a1e8efc4b06e2521ca3b9344b272a186638067bc94fc6162dac168d8707dda390ee2873dee424276707eb80b5d2a31b0267a81b235005799338fc9c0f5b508bce58f32128bb1020d3b961de5bb256884a66c8d5929de1ceb6380cc38ae16ff82f7e0bc291a0208948c7e5724eee02c2403cf25472931954238838e014662a06550273b6a2c353a1052f3996a82345a629896ee9a2fc0b8f7e174d5da3da887f605e4a7e24eb6bfc9de6d524eb187b291b2ba3d24aa454fbd7750cf109a023f8207884dd1d1aa8effb65956835422ff787bdf30b6f0f76761a8cc6bf51300d40387dff0c40543c41c20b52c1896bc2f6206db5e184f8161ead997801b9895ee0a62b63c2266d4d079e523916122144bf57ec82f5f6017e52bb51316c2a7ecf5e11d92481fb455a463806d4f9295840fa04642e2dfaa087d4a75638b1b89ea1f55b35a0b7ef4f8aa63acbaa161e9f95db0e019b60a60aca922375633f9ca1ca905228ee5a95a8a1655b9c99c751d61c47406ef767623405b91d193feb17ea0923fb07a863d49028b7ab206d03fcbef79d9dab7fff352b2d46f208356a8824623e69e0572d1bf97cb627fc9aad592711f2f1e220e7008c1bf537e1ef5d188fedf2f7294bed32922c51a86164ff57855347755ae22f1fb7c45be3ac5e533b8dfe5c49b2aeae99700c4039bbb1364297f322040142a98ae55db78ef6174c149d8a30478472f4623353b1cda8e4f7c1f270346e17cfadc8eb750c1d17a12571091b9e2a3624c0f62f47c37e0cc08813f73db2f9617b08cdd25b029bf00aa86e8efea312ef46a4f722ec8a2d93f890744cb5b04303518623c3f4506bc3501d42b62c65927971fd8b112c35d54823b0f09b17570ae1592cbe9592328635b7319ec0c386c9cffa2a42d8df52b552260051533162533732dd2ec8f12b9d66bbf6a24b050fc1b028f4f081e95db1ca2a29ee0f899a5f04700b6c385347c43006ee8572b1187f971dfbf9fcce5dc9d6daac9117c961e17237012b5f244a01f85dea71243930954ce34118f7c97db5a745072c5b51babaca09e7ea5a4a2bd5d7cd8ffb1494f398a3dd99056bf3e30e7b15604b2e731e909a89f9719f14850a53cc001e2ce2cfb10274e119b775f3d9fa2e926041bb23a1c06be0fde805a70151e915384d9c4a41200b81552e6db4a4c4e678995de0eed1a934430ae5c18fa2cc890d12028dd3eade13eb3bc853165bc9647588128bc8e3d72daa390be20c48f19a9d084cbe000725fff4083468e7cdeef69972773eb6b48151338df939a56ed034be91c2eb88281c822536fea8aad24b356dad731c28bb528918c496919eea0a17632c8038e80962bc11de688cbf41529c29f3f66b1788d50b2e967a7ec3e305acac4d594a1b0d6216c097c17d3492d27844730ab81e351d94d9d11c335ae969c456c5e22484f1ab9f0a302c0d375514565ad44983903fed6b266576996aff6017e9f58c1b9a5483df066827c324037be7fdf74c7101a5dec22f626c4074448592ded22115335c5ae09dd095359b0cdaa13f0f481a2f01460a2b0162ef84641286892c660c10129273a8f596d4a47d294e1ff944de52411e5e999746eb84f97c5c1620779b50e765676269c3ac6c305cef0d0451ebbb5702d2f40a68d5936df410727835bb3d59304a0a173a429a0e8bc0c236c035572799318bf0663432e3852963e11212f5fe6eefeb7ae51600aa2b26937af672d9533f5090f3bd047bfadb2be29040141dd1de4a159f40e8e1c2a10b583d6e679743d4455c00a037c059526e7c7034e40729f7d5e6767acf8badc2788405228ae86771c3e3bb4b44e9c77a4519460f268293c91abada3d23cc7e60117e64ed0e394622c56f0b55a9522c36b6dcfaed18cfc492c54d5352332e9586ea54ae507738b24608f57f9830a7f4529967017d2c1e58746fe72ed5717f2c4dccfccf2e4faacf28cfc5e9a6b49683e098d01f7d74048e007fae36f57a4c41589c51ce1a41ca0a722c7ac11c2e66ca40454a41088cc3f8c8acb42bf7d0980cd0b51f27aa4c3723024a9061d375962dd0c286b1f9a962b295a3b305cb16c3639e85100ec2f3dcb4c7cb605cc80969c7281cbe13e5477afa2ca75fc928dd1e02fb173d2bb53e6ceb364670bf7c4728eb5fab23e502a5d66de3ee881b7536defa0c1a3ab30d992813daabcb20884d9a39951c87c13127cc0a549fd890b2414c61c3447500d1ad97466c68d12422bd196d39056132b16b5e2f7281b3744c4da4deb8b6772ee19c4647b020841821cdc8e116094560fcfd2198661f5788364c09d3ba6c22da91e490fa2099ff440355e7499d85b0131f917ff59f3004bc7841ca654bd6ef83ce816cb72468292acffd3c05f06056161809d079a9e5dcd09c73fe37f4a48fb1d88fb207919665174a7e96ba798663bb593f0f3de59baefd60d275d9371ab00e28ec722a88009302e73927f9a881183aa492dee1559ff42128e3c8380f4101a8b672ee78307cf48adbd3392cda96e267e98ed0c1b85d17a53c2cd4dc69ab7c9f1798ec0829b8307f09e7aeb3420c2e9a9c65b6a704dbc76862cd7d713921a3e0ce1beaf52bdaddb6468711116993f13fc922bb2a61018ff4292835b82c4a0c7ed9fa8532735cae41947cbaeea6159de050da346ad471d124efbe40e8a5c4898e49de325c91e2e1e2106a4930b8fef5598c8d1674a126cd502dc10f3c2c8b919274fc0de00cd68be1ef876bcbf5dd5ae8ea5f9bf0a48982c20d25be8e74511fa1d4641e7b3c64602c9e64e7c72290cfae22053ebf74009e0c202c4ba98c2b93ac48a93711b25d8a2d7f5f7274549e600dd733604bf6615e043ab5006ecb09f752c3ef1ad19af77431de993b0454b75db246dcb73d1a57217b298a1b228f7716d8ebec40cf27f80dc38713981167af9210852891ca4a2b5d5438a164c8f8ab5b25de5dacc56fe23f488596bf6caca66ffec911024a02754512c1ad0e14a156cf0b4651daeecb6156cf8a4917a1876ab34ca49f45a376e4cfa5326eb97724ceeadabe78b0b36d50fb12d678e6785f48c92acc6fee55d8ce52cfcf0be50b54fe681312aba50a629cffcaac932927350c9d3438e5908f702e75427649a66cb4d81b0a0f93e91b48f98bc1a89f4f3beefe512195ac8bc59a367533b5194aec6d95318a28f5d789726491bd6427066793561e88ad8fd754bc4224dc8a1fb747d179a371f34130253db541b4833df409679265e9a1c713c244e24ad4d06b798a8b51c4696f1a4e885aaee759a817ab0d0c04e6ab21fa57a2293d7d742e7a2cc87911c323f01936fa2337a9a27a1aac4e6a2ece0e02d19241d7857b9c9ddab8e8549af0b2f088a7340cb097d16326b961023c177fe95fdca7b347a4b92a94d9856344e4738f592c198df3ea4b3e76ed1eb4a860144716fa49901a34b656dd5c944a42e3789fb10de3146bc801eb95d58c8e91ff0659fbf70d92c63801761e9a89cf470851acf91beb405e8cb3509f1263e2f505c72e979397214318731517a36fe1635df4edf67f3f1a3910853ec95d042d9e79a2c087f773e3420d88bd5abbe801bc592ddd1b9bdd0643b7850721ed2e2ebbf292bc9b929178db35b2f624a3a2e1f6b1ee06b4c747b53a4c65f29a2ca5176235cfd66d0f09685bbe39dea7cb29295a0391562bf3adfeaee7f75e43bf711a61f4145cee10c030c56f5b93902154052a751b92e082d124795b323d923da4d458b6bb7d1bd79ac8b308bbb018b6b14d1af3a3666674f8a698f8a48bb5c03382605fc946b4222c7f52ee4ffdac3e553ae31418f7f5c150a50c20ae71b7dd67bb39149604c62c329c468ab682b74dd644543ac31e278368aab3d636b576fa75c1c5d89430914d012c8e471d71f2d8763ca4dd5d99413be0ffd8fdfc8481ce84b4595a6770cd772ac0d59084f6f16fa8f3562c49f4d23e201f1c1f082b9f40efcfd32f66fc02b97f4fbf68f18bd17dbff443f52f1fa80fab8b2f47ff74bff58175f1f5421f8160f3285ec03bb68516192c1929248d1c31f3596556c73b97e3d4626b51a3ba37f5a7f974327d1a85f64908dc47105fa2d16c357acf2ceacb7488b135476b9a3efc94e0f3b984daa13622fe940d6a29528a9d8eb943d69f0568ee8cc13c7de0011f9956396af3461ca3c9b2f088088825824ddb0c110da8f16ef4e771faf0d9782038e40a007856500fc58b4635f4de004503c1b88839dd89d58afd0d797cb314212a38aaf266f513a6b2550fcef06056775e4632604a2f9b0a1a15b4b386cda8952912d68260a012f12da61cfbdec0e9382d3e7a5d0ede124f55a0c945b31ac4fa1a5081a22020c5e1308574afacd5b11da8ea107a1388a4b3c380ffd91282503c2759991a1f6e5e11debe0657810deb2b16fe1fb31e1e31e27067686d2d3c4def07b944ae9c4dcec17b4b21cdd2f234c04881334bfe7423a16d36072530f3a666d377d2e4613e80af7c2f301b3ef70ab5c20733e120c9a10e8606d07302fabcb2d57f2d48d970f8b62b5edaf446d64150a6b8f496360cd318fcc818146530bbdf7ac8cb2881fc8ab48e3a15f3bb9ef5bcb817a66b0dce23d1df3cce771f65949c6fe6e91ab579cd69342c11a2a0538b9c7f44e27400478758e431c4ea18302e206c0085ef9dbb6aa317dd4fca5fa0bd66d848b1d93120c7eaa72aa7027135b12d3f55b2b9c23c3fd8704a7b66611635c821676114ca3f069b217503b162918b08f7f0e0c80521a34d7adc0002362eb088b7b57a0d202a2f0b7c3bc04e3ca395d9442240e99ed8c97d6247de2b4054b330442e3156de5be4cf8e73750977f6a61766661eb27ed904ee11d7ecb1a089482697d7e048c2da35c459a81923ae140b6b3c915e1b0b2057c1452167374227d236d07a9246fd35b481b758204405fc250d52d1e49a32953791a2e880be30347d3244ad96cde32980326e42a062ac24a732cf00d0b6e3d6321e4a5feda73ac2766b28dc51e69560839c504793c7a0eb27a32b1d9e77a22b6d3c10f2f9152c9c6c96f600867d81fcf65f19c124ecc043545bb8af84841d0f0a31a63493e926890368a89bf585c958d21f16b2bc61ea9f18d7528dfa2b905d0c450f501c12d5d632cb9f06602444b6a2765250a5af815cd3c305257cd6830c891eca9ce41ce3e89b57d83bb4a8082a752c33ac867eb0a0ca4a97a100d69b9916049b6165897b519c02311c67f641214cd3cf7a08205d1c4b10ec901020579537f7348da6d54fede48ecf1fa39dc4932ace71cfd78dad7ab37548eb544b3b5d9a1247d8e965e30fd8673e23cb2cf8cc229b5612550e17ff859f2c972d53a633f0f2d196927881919466517897fff684859ae4a7421cc982b058920f4d7a852cb813cc321e028c26527f01e41fe23ecd1afa55924e32e46ad01843bd12118f468d4979d349c2e56df33a0ba60a5b2910812211f8ad362167b7ad9ff18afa1ad2cd4689c6abfe9a95f0f210f14cc3b8d4f00e31d3b36c57aec32d8dbddacf6a43aac41fd9b6cd2422e68f63c817c1734b639860c279924799a86d91edcca0859bbd1bc25055b4f9db44dfa1f4a4e80b4414dd0c438995c172188050cb6701d9563b424ec4f78b20aebce751a74ed890ae656ba8a9fb16aea54ed718042c5224808032103726d2107e88905047e26e7b729c0cbe92d01855247a1553a8e34b16f2246b905537564c086322e7bc133583005a6f36cdefb0ee6ff0a56da39282379c9afb28dcb2362e4c22805ef1602aee76d4fee7248e2fcd209bb8634c7a64925dc6bbc613690d1e85ba48295a5613db95aec875c5e53a6eb6c8bf93bfad0e2a0c30c0270bcdc28ced76ac3cd0c49c558e6bbddb5940f13cd1a286e90c689c2119b10645350ee562c0a4cd17b2c7b42910c8f2401d3a17aa50d545e663ff2032c0f035437dc62b91a9c8a3db036f654ec512bb1c4a0dbd9bf39e346bb2f2d849793a043b22c176aa4c5a5d07c470bfb8fb9c2b7ae4bfbaf7e14e93b0b48962d3c34f6c89e18760757077720cc6bda7c33c8faeb64db9057c2483672b0b91c5fb94b745a4e2bb9348cd5e140f30dcad7149e145cbd7df5b29c0de9570686b2201c909a82bc016945c6393f0c3c62d3df09bf8ddad42c17b96d3144919647b9137b24da80f949a5bcfce12f75f09572c9f692408fa244b7e1743cb876c398d75fd52245614c7f85230fec7416437d0d8a611ce13df83618841e21d2a3e6d131c0240639dc1854706717f5eded5ec7bd969f30293a1cae1c0cacf36878ecf79be4840869267cfbca02269ead66043b8cda5adfbe036feaae799d6e859984cdb2d282153d19ab00315c6bd55678cf6ae234cbd428c0d2e32d78b2df1f4f9295f407de68d9d9e5a8acf34527a51a760583e739ca925477c3b696d10ec5e011764d2f0cae835af330e45147630437aca065a49bd006e66fe6ea75e8adf9ebba9e805a42e190bb9308ec04919a09094d4e66f3493cc6a94478eaae6d57e9312ab4dad1716b543334dc1f9c1e7222ff3948b001ac8193106406ddfb7df678a1b1d834e8d941fbe0e325cd5a0b1d4a4805f1247faa6857e73f08ac14bdaffdc32fba2c6abbc0dc5bbd3b68877d9ee8bcc0c2520774c96a44b548b3badb85f0f7c5817b331297a8c9689ebbc26e72b72951ee0cc83920d70d2063d2154c5999babd274363b0897df79431fb2b122d953ae62c23ede42cb2d23f4e4bfe10bd5c70a7f54ec5a760a701c2bff0cd9e82a5d32cc7dfdc46d4de2767eb74571a897f83f4af447fc121f87e042e04dc98475110474daa4b8eb0a79550fa79eeb323496bd0580067949f808e381fcb8be6a9c710aa0bf1d9d1a588992908c47473a292bde5eb6afe360bb0bba201495eca0632f55ea250f7d98014cfb9db8e6ee6672182433b5809861a2737857a0ea36be1d79de47bd2de76660259718b4dd8943fd690c0a6bac0ba2d281b749247fdc2296bbfca8d8e37cb5e45a99c40a0c5817a0885a68d54c250422ded1d99197ce5ccccd52a63d7569bca84df1c4699670e9d099880d0983d6d2212a3fd0b2e2cb3eb91a00a3892fb0f1c071a2ba2b21643fe8eed94f89b65e08d032c55e6d313103dd12de80fef45bcacae5a05f986e92cf38498683d8f8afda579db2e27397ead7343f74015384357e20beb7a5976a2c995151fa68e433ee52963dd712010eec3d98355c1a5d7823fe93604b8d46714b54deefbce4fa9d6b3056611f05921a51517c4644e2e8073414e42357906b3970b875355a43d2f878963b981dc033d6f96d3aa8d134fab3010ae3521a215e038681d0ee0f830616bc855b68bdacb3a510c9363601108f926a9d6e7e2a231a1c61b1a9c1951c65ad39dd625ec3d8ada612d061b111da4e1774260ec6e5a6f9300762dee43731c54286d13507d6ceb5c16bfdf23d67e0c35cf0f6d175c631e4363e6b8d273bdcfe836d8fff5df4da7746780c23ae5a3fe4985436eab280b4587ff52895864e8fb0df2770473c61f8246f018c219792f1667fc2d6101d8644dda51a4b7fe8f808776aad5b0d3f984e040e435587ea6f8f0099d2d69a328b320b435fef655a7a4902cf1822221b8d3cabf0d4adbc043a2e856936052cbf8e4817a4033e2af4c7d005178f8ef69f18489c6aa829a4f9f46e1b5d2bbe3eae2021e22b04dc452ce5fc9140ac014161055102ee7419eec411cd45a2ff19ae9467971811c35396ba051e6cbb346721fbaae9354a8e182c7ebb53b5d7665ab56f0450169adb1d5eb037a94ac9fa7c43b749f3136e13382aeb0f5c0f866d9f236ae0f75442f46c5b542819e9b9eb5df0f7a7167850b8598395663b37b7cb4c22d64b708462efbe1e13dded72a050c1f68fcc3c01f60b803ebfc8e66372fefee54c4876268e6e6e218db2c1678259fa3f24c9c5cd082937a5a3d0bd936eee5afba847ccc10964ffa9752f72923e328188b30d81f6c53305b39d3ec9c4df6b9aaf9d35e543363e7dfaca8ecdcc3d63eb3a6d0f1afa730f08a44b3659ca84ec89f417abb07d734a8709fb08df2adb712e6e7c713e1636f68112ba1c9fc841b16780a96ce43f73178f9e2b4fefdd5ecf4e73a0c54c9017538b4c420856431b7debb24c5b9e7a2ffd30524ae355ef9d92ad7925a8e0c173bca971f1761a1c6ade54b9a66f7c17c7dd348342b26f561e25b454a77ff572bc830f732153d823d7e1264bc3bc83043d8646524f87acccd56da67912f438b4345453bcbf74443424dfc036ebd70078f1bf746fadd8661894a83bc305a7ecbf2f12c143e7ebced09767696ad7f0fa1bb32b24054b9a5b2dca4d215d1785882c053c6f8007f23704f877ba2cd029ba0f503d899016dcaefd379814db0017ffede0876c116aafc25941bb8db4c793074d0bcecde574c64b88b555a78d1fe4861e97d25000a71b13c1f9a9404835d284cda83eade2f151548f0f8d1c7144800b434192140e2b7542e907a7d4ca300edb4dba2d5652cad7d0533eedca74dcee3028b6bac2086ec9a3cc70f37164e1f14caf9964393f26e6f87d0702f0db4d5180ca39edb699f26ae7c3fa1130fa1c3415c55da5a2c8481edf5e2d48620a55d4887387faf3fe9b68cc58980c8e2023e93c17c014d6fadcdc83b4babeb3b0ca013d3f4ded8043f11f6763c6fb102e4ecb080c31affacbf59fcc6fe59c7b34e807fcdf34f42e9504dfad9cec0d08c7577ad3d3e339b98f5454eda056284972825820ef0493dded2adaa721e62b8434ae9ee21b0dccc1fc07041d0388c5fd394168a7e64f6e6345582e3d419785ac68ee566176f4a70edfb1c4f5e6393e4e9d6062f8fad4ff18ad4e1cda53dd7d015e61c2eb84e7ebf63d2180d5bb743278048434effaaf3e72449b081b9ba7ff44c90a196171fd28dfa6eb5e3e8dbea95492384613d56b54c65a8be23d59880d2d24d7ae506366dda6cc98144e6a5828824248006e4eff140bc95e822e51f9c7f02fa4d1c947f8d4530b8a2487dd238b1737f2bb4a390875fbc297f7054077aa470de88c3d00b661cefa8d691a110744226ad9eab4ecba68ceb41da2ebe943f089d6d8b98cdce11df0109175964d11667034703f3b2d928619e95e0e42dc7e799521d8028b0285ab7ba25b1090fc01ce9ed0ce3970025b3f45e3be0f59087aab038480d95407ceb3d100a19513c4ee99fc61fff31e21d8d58486042977bd4909f15e503f8d6e5c6e605a11a68540a0c002d5f091fbf9c8438aaa1d94ef36fa7341394475093f55d77a1a7ab773a36b8ebbc93acb1b4bdc5a6460fde2be7fb90771cf22aa2220a0997b9962638bdc4d526cd1484cbd4e5b9d57d57e90a347733461f1d7773e7ab4bea3ed498481129542c7e5afa3e3e0e798fcb1591a0b67ed0ba42b7c2c3a9f10c8ba4845baa29b6f1866c7fa57058740ee0fd6b6b4f8b82562c849a4ad4afc62842f31c4e849190c4872e757026ae8973f7353ab275967c93c5e9e33aa65688c2961dcd6a9d2ff8c58de2c687e0c840ae42e7b7840dd53333b2ca3436e6b70d41f10cc32a782b7c44d8c4c7186e68a845d4eff4179da28a5605e22c59aab7143ca2221a6a854095e5b6904ffee6bc57550e4e9a4201ffa92b7c38e99a78db2743a72dca5e3b7e16cc15dfa0edebc82447f1e57da435a9eb7ba7e44e65bd9008bdb345f7a86a381a7989fbd333c4a97e58b19b20fbea436d8cddd18dd6a368cdb396105a05fc851ac2dfafa167ae38179e20cce8ae09139c75e6460524cd407985010f99cf3a97a345f8b4e0e0e5f5fcff5f3cbad96d2a3abdb5bd23e45eb37027a774bba000d1b7ef3df0f36fcbfaa540b08ba1f1659671b78a829856a81b47626388db26b74871f82fa4081fd6dfc07880ee86da9ec08e5e58b3381b0074a50d64d23246a2234dd8d8254da7915cd51e42699344d80ef498116e340b629de8dd6641cbe208a50e71aa507eea9be5a5a4c63ceb5863ac59fca388130a10e61ca3eca13bf93cfa43286bf574daf8bedd6c029893e9cea1ce68715748b4309deff06d4a934106a2acf3f86e3c57e68f9216d80df4394a652a396c80d25241d9fb7b4494507bcd2f298b1fb7022669404a9df8da7a6f370f38342694d674fd5ae90210e505bf62fdcfba6cc62cda84522b6396c19cca56e07bc3e5690077d434f68f62d12b5885ecab0b67ff8faf6e727b59a5d4b452ca096a4116abcd2ac24c43b8f31e47e0bbdfca7ac642e787413a7c1ec012810fca89acaf8dafbe69cf237f02ce730e02f2887861ab5b087d4d9fca463f6026ed8095b6426f414274e11c31a65898909c16f1cafba6329f0e7934967552ba7e04fd3e3ed852637964324e7c030cb733d93ce056593e3ee49a3ad1a90559811baa491b3118db2ab61ca96bee3c37d9a36829541b1bb3bae46ef1a2de53a981abdede4a657c27dd4bbe51856877f8b62406c13838c8a88b8a317174249774b2931feb8027c92187d1a5e5d593cdb3acf28e95e62041bb6d3a1b931d2ecd98442b9305c4078452823700c23b176258e2548c95741f8265bead863eb6bad72dce840ed7f094ce7ff741ce52278e414e027cbf01dcb6613c39f27a4f08ec54f8671055d75178af8ada2937d9185d308c2d89175c31dacb8ff55f92419306ba04b01c02ed10b61dd28185c3ba41aad6b72cc197b540f2fc0d2eb7855dcbd7547155a5ad219b00321f572dbaa06c084327fa4ee442a319a3160a9aa768715e3004a06226972c6bfd50245b951d0fe89f7fa861e170dd025429a99db6f2609a113781d5c5a488f12fdd4dab519b3f95de6590557b3c8eda14e9380304104e37ab0306acd39786e8090db9b1d5600439c941600fd0eecf3a3284785926bcd8172188f31db9c8c534d30809a400d8d110e1b1f13aa5310db4b7117740cf76cd1dd9a1c0c655a2c790cc31916e218fac33c91cadb57b5f7bc30c4345c508c95693f78949f657bc021d8b8e3edfb673b0c0741a115e8c4c26bca936271e35e3a17aab2a41ba3f128d58d41988d8b436b074bea3900be0d541091117b1ce8e977f1911b0311d58effd24fb258a28c4142a843e1eac7db06804f52d1e856b0e690160a489051becf230e68d70840f9de430ef9d7eb60ff8600bfaf612405be1040ca69b605b766803906a37fb90ba1d5432aa69c1bc031cf313458c41ade865a02220e6351e11e904aa9648fa31b46dd4dbd3b3d796eb7642f728ea3a2665ed12c492b52ba36bef7e70d8ab62cccd4ce43dad64765908d496b68925a50e49f364469bb6e701e02af985abf3e9d745c814120c7114923c5d4695cd047870f4fab7d8024d77c46087cf1505155754b1c5187d87975f470789e247e8a249ddce120cce0bc60c4310bacfe3f686ed4b5181d37fbd59f338e12184a4f46e15ade394aa9007133040fa9a709d6ac915d726b1e5d58e704bc2829a185482aae16e2ca97453f0291c2416039f0c7e13e505a1495ae9505c03904881f45fe566f0ea50afaa8ff6edcc0d9146ba57e17be2c7e32fce73448a591ed5658c67b6f4061b788e114442a571f99e8e481e8b16b45025870a36979aaf8194d8e61422ca785489df8df0234baed89cf67520b2cc7dd7050b0cb1f73b73641696047fc1c49922eb1b03a4805509ea6155266b80f77993ec08315ed4055154a960ac6211f6aac256cd5702ad2ce70b9a72b6351965489622bf645fea40e9f08f84bfb29a45d9469e32cb55fff4e6ced9890532b97afa1c86b2857010b6f66131e686596a66f0a9c30054836d09237863230f3aa8e302f0853580c9e078142f14fb0c9f702f200b8f7e0b573e9a8a056f79e452e0cce82a989d584c5b9f24b298eaf0f721169120c2223c32f929feef282c89ab45f49225957b208ffed4289f2d4d55bf8d41b88907e69c4b101fe9b688005d7659331777a0c30e02ccd62f10be4a5676406a39fbd96814c074ded5f11b92bcd9cae7b400a4fc362db4b142e0226fdda7c035162431d4bafb31cf520be0901cfa76a7a8292586df1af55cddca99bd0aaf1f6411a639f37fbc85abc9b308188e41fd042019c2d898925d59b621d186900d4f7df5f9854d190e45ab5d9df2915d6786a072283e695ead1016bdd64c80da879a1f5bff98c6cfb2d44121b34ad34856eff70799b1d7c55cc899c7b95fe043a8d85012bf06fdeb8920bb96b585796d05b1ef0adcc51c5a97e1ebc44907b7d14a3ea53fdd5c5df51a367893d873d9b573a6392b9f1d68231692962356d6e9817c24c5cf3eb3a3571bb991714cc58a3dbda509567288aa0e80b19744ea2908bb67d24b4a6c30487060de813847de7b26148dbc50de9a29e4960e6b60af0bb821d2ca1494ff2ccb4d6340832a91f5304cf4e9d3d4c290a4d8a290f28926f6b70b2a9186c13f7adc3444fbce166e4e2f450e325458c447f0216eb14ce54a4d38499f5ffac425bd6e6ace7b119537502faa60664b3a0959029c352137305f0eb74324cf1f5e84587530abcc0e67d196e0d73ea96617eb1e13f8d0d23571db879d34d11da343c6a7ae580c9864d13a0a6f063cfeb3ec9445fe9dd518c9e519f518dd88e1f71f742a08c57323deedf297a52dded83cdffe61de3bd3aecd23611d7fbcb77674105a6b0e5db85f4b177b67214618c5103f44d9dff3be687face54ce03864ecb9c41a758b6d6c583d12d80991b5b04e11893bc9b65436c45212a893efb35887edaaa6f5d8972e8a911d1c0bd8496bd9468862e9ee463f5fe828a104cae9e34ad44e7c2f952a81db2a1a6985a380df4f2dfc09fef24d1c3fda08e43b616959436becf137390f9cb7abfe072ca210ff52283325086c7c1918a03635268de2f7b9942bd2274e560f296a599aaa461d1dcbda86aeebba52a9c8cda579e5b47b7819d827111089e3c07783eef1c6fcda2ad0d13ec31cfca270b48231e2ee1a3107e079f839b78500f810da973c677691ebc373cbac25e316bac75b014a10cb1c0817137695c9ef8c5c7299011c45b416d23abf1a3cd1c6f0bf76a69653659eaae075846489a9c332edcbb19ef92668a747f6d61033f164b3bfa3990f7f17e24d7a2346d1454a91e5c8969c268251d5d7a4ce3621e043046d04794b20c317458c6627687b99237d1df9cb6ac364b7e326c9dc5b44bfa79d850ae306ed4e0a8e99514a201d7e57d05949fdeeb9a572f38723e1db30f6f2034927b9395b159c62d9f4ba839524ca329e4c84fa1c4509a97b34328ab6b54067cea1c4b24fd9eeda5f52db000a4376a9c2b13900cbaf3feb61025680b2634cb935faebed076823cf58f22de440bcefe1eebc9d3d48b9192337250136e389bf0f8a30977bc5f964c07e9224df9f30683ff1990b38f0b42f6722ec6ab4741b82715168960600a59f72a87fb86dd21836eb188a5c76e5f67d90916f958bd602205c852c4b667dc9bab36396f0976ff2776b03a221599360ea2c52e953092974057e766d51a28b8e78e3bcdac9e73a16630680fd2419aee1958083ae1539a63c289480dca03bb7a2f2d1709a808337b5ff7dbc8faca5bfce36af62c46ce57c98c6b0b9334b4946c4e0bd865ed49a46e7eb9a4110b06814c657c703887b5b8287f6b107f584d43adb0ca47f161f93763a2526113c4a3273ccbe7de36fa1182862587196259414e26628dd92f640c4d6efea3efe9fb8535d2322f9dcaa85c1acca48f40e1ec96858c8556fe46e515198424ee6e4fea0571f0ee8d74881224c9e513c9794aad414f0bdd46659049b602c5a019ed40f896fe3522671c66317fd5e051249999b487d2ae32cf98b65558cc029daadc551e5814f6a9f22f38f1b260988168b04201ea69a57ac06ebe662d9519fb1f9f5599cde9fbea23bc3dd1dc4af676f2c660697e43abace8495af722d2d2f3d0aeea33c3898dc65ae65e5308805f84802375fd678d3aacba80ee791afbef36559c9da02f8cf8e6ad259ecb9849872346a34e83e781ebcd68bd3e5c1701236bdcef0469d470e3664cf318b64e1c4f64da849527ee98879bb872add98575b80bd66263d0e77764ee261e72e52921f89be953ec46d2e105defc739afcfd37d41bf52250388fe8d1a40ce74bed9a2f6d4244396e5122d7af2bcc5e144a8f1cfbb37a49f8b65a381f1804768e8ab9a7984eaaf52c9a736e354053774278b5a275890509e51203b0f49d92ce3ba8d27ce6561af1f363aa4e194623af59903b2dbe7a7e553f846ecd8423717113a1a05758ae4950b20b073f8a10bf944d962d2ba0c26f9bb829d64c997c022b179cc5ff114e684a32f14272dd4cc1a2f93338a5794ed5f59e907170ccb5b780f3dd93c1a1f6e9cf1368d0d53bb85f8de51723c83850d41369a566d76d54ba9fa338134e2b33d9e95e04cec0c0f34dda06019d182b281706e13d6d48744c1115e4c315f76cd9be5d2fcdaf67913253f2192c296c78421bebbaefcb9dd17326955df9348a9bb771592b26f5f1fae3b732babb0bba912a041bcb58530b230bd57d700bda07582f0316fee14aed7236e34bbe3bf3931d006fc390d0939ccf92e23ca12acc3e3f5a071cad9ee3ce8cc0729772f57c06898dcc62b1f66bc4c6d8a259453a3811708ca54e6bf23190bc76ad95e56e0d599d5bf8f134dadf8e5ee54e763e355f1825968047baa49f4e4727ba5a04ebdfc22e83cd29fc7dc03d859a13d56c3f13b96f4dbcfba3e81af30ce2eba48094689e21a77f38137761a3708ae3b7bf3b07ef141d64b5f2ea394307890fc789eb27671c2103ff928ee3e2ae2fef772fd0684472aaf79447a2bba70a1dc6f00d5e2041ce446ec4bf80232fcb0715d5d860f1441ecee3d4be936a7f690e2a9e74e00dc21b4971386dda5ec13da73d9260e649f0279646306690ca2e3f056220b6cd6f171582d47b92db9561ce6bf52a758016ff2e0ce92a959394e1f1da7bb40863cdfff0e9badba7124ba78a4206ebaad96a8a88870a9f8b706b926622d2133edb2c1ad518b7c4aa63c38c68a73d5464a4f92caa873c41abca3309e5361a16acab1ce3a871b94a1d182073269ed34f155f49db18c93514337dec0e8469de8ba16b0c521babdff5465a4e2fd3cc8e949e66d1a9323d3a05aaeb6988dea6d35f55314613e4ba088dccaa4806bc450c134f91b713d27bc1320b64aa1c31dc152f5a1f54a74d26852c125e2ce45ac0ab1a98db96d074c84cbd3ce0849c13cca7e4356f1d06a83836af4ec1d261b8dc3ae7899263e15e08a2b07d13f20684d01275e1a8e278272c153d03b4545f995b42d2bc6b2e4e2eae8d013e4e05e6af2fc6262920df56d34e49c950d8c7096719a1513a03cdf05e716171e8a371c0328fc9c91118d9be7092a7c87ee5705c3e507683ad4489abf8dea67a218c9dd384dc7601db28a2438011763f54fb57853d5bc8225d4160b7dce325aa967a8bd4a6d083bf68b5e55fe13e6cf8003d7823cf8590d5ec97e1b1c41dc8d5369fc60058d7ee26967ab51d45cb107007993d8ad3d26d2c911e10562a2864520cdb43fbb8fd1f65d1f22adf9b614b898530217d2a08374b2bfad1fb72035caa4b90dad384eeab6976aaaeaf6da7ef586e7d88a772eb7fbf7657a9ef54a1b0f562456dcf41acaba11d92a55e459dd851354943593d3d84fe4551eff3296d4935e1fe4fe11c01de032bad89c4cfb6a13fd85dc0161652bf42223c20a28429dfce64607b9a8363be59801240184bab01b96335ec0d3bf89e390169d44015d81199d6753d7c42962fede4ab3f14d28a196e625338acf1a377e6d1bcba99d3e5c31f236f810628868822091f859f03ff986c7067d37135331d6d711300b78138a807950f5499b22d53ef4eb5f490bf840467c9acac6d6ca4cc8dbe06e5419592470776ec915c1c287a4ca380ace9f0c4ad9b032ffe0731107ef6195986f816c2ad6fa1333665d55cb16d6cce7681f51befa5d53edb85835573c9118de442a1cefbae536ae41607bce2086c26bf46e49285e65e5358d5ac7f9f75a3bfc7926e401a849e8136f061118564e399022dbd6b239818c4705ec5ccf899ebd2750f0d71b477692788691e90bb902d548d68812ac86e8e5043e9c425fe399a467b8866aa7017731283c8b499957bf8b9093131d90b36aac2ea57ae4cc7d1dc9ec1d93a6b0c1a26a078c1d63c25fb8fcb35d36d23bcaaa1f75bc52525c9f0ac9e0a018c3046205c6416b17a506b28017ae413aab751ac5127a26e1c9092bfca6086c9199814025a8f204eb46ecc65925f957b8777a646cc99bdfc0d247b0f0fe5eeac34500de0f8279b71e52e1434eac3223aee96d39ff099cb4acbfa4d16e433fe0c19af9aa8bc095681c8b21463f26c7266aeeef62b767021d8c4d737ac12044bec2d4867d628366c5469a306aec5fb80c7ed0710076d7f15e736195cff3d42e57f5409d6febf3a7eed9a0277caf59abd2ccff2881fa003c871ad4381edac628c07b4515025b2d061b61d1f00bfc01e65e0040fb0cb8a2b572e7c44a4e1e6bbd691e2c508f8c439196f9f005e9425d2523096db346b005a8482e0461ceed8f4f9e49ce98437b29f38f2855dd26bb01fd28497fcb1a16a6d6a4f69a628b156482f27e65cf6ce8cf85016ce4e0ca9b2688949c70156ace0e0efaee798a8179e5bd23cd16a7df1cb068007f8916f09ef7532ad8cff8c3b4a5ccdd98c6e09d16ada89cfcf5b5c8e505173a22ceaf2ff7909b6688a2de09c494463c6ecad8d48f8ae0081b4b1069195d29d681bc4a1554a14f405014687a818aaf04e43713eacc233aa136bc927aa77f8b1ca445ed11b5c076599c0d24b56b5c752920b20c32a2453e7c6b8e1e3359fa499b4e019a6f7c132c9159a85c83a866ccbd221b7351580d676660219e802a7f355e979b1c2002c63178fa9275231b2bef92c01b119bc628e7e09e1037181ca82169f8143eccf02d632f4847b54b109080daf06c8213b6da26878cb6dcc124589c234b7b8b0dbe3dad4f6c545f01110236248670edd21196707a491ccfb9847b34aea1e929d3649fc97b7521c6c0aa45d517b3d8f458634501b460c656e5842489e9f82ef6bf25c640a71ff313804ebd42aa19299ba773f29426cf99ae83c17ef61c9bc7192d1cda0ae6d133534be70f19ca659943279cc2b063fe55b6070502b09aedfe807a98fa698d821cc642c0c0eedc753b301f96d93e094a1049e5838514ae5dd3c3ea62d594281401331c02cafcc0ee569cbeb368d53811bfda8a44bad66b27c2f37fc72f2c254affd38fa450e16aa00930111a99ca0afe3840a77ddbebc55883085c24d3587d6de65b25ea5818e725b87c07c1ba1bf85766d5f0ca9b6ff8c92fa4c34dd266adea424918d31d7f1f389f41788a526f0bd6c628d4b43d6fe339aba93d2372682197e7970225c950bfcbb9a0099813b73d643eceb8efa74401a305b2620c569eab02fadb1a1a6ce3bdfa975de1398b3598977f020c9a0114f30b3fb4856e1994880c33b04d75d95160846bbbd2238baf7e37bbd2c38b4fb33458e56c890555b0918ac60f15feddc990362e1dd322c86fcb992f8eaa8ae5d49ac8801d95a863bc51371dc237a63805fb93bbb7a218cdbdf08bdb39b5d8a827ab5a81436246b7d5b4af9610f26d91b5600f35e0da76e8f346f8788d91ed51e5465bbd51e6520420c19d9532726c6acf17aee3c01852501bc3a01714fc03dd3595404bf9200f61fc60902ef1922247a3527084378ed6f42c5421996cd8bf59858dd5b0c0352fd9cd11fc9ff9729dd73c9ef14009ab848d192e94480fec10898e20cc7a045fa834f18604170884f4f00122c2b998ac8bf9f753b803cf809610d4d6dc3c13ef5c6222dfeaa8d4b26f94395e03cc03afa9e89df309ce291d1becf00aa38e269ca280b5d4f9fa20cc2067728f731d72cf3eca69246e81282b2a1c549c36969404e40fce871588832180ab5807c5e483170e6945e87853f064cc1aaab4279f334aa174e13c832c518ba81b92c6c5f1d4b2b9ad819a000b4dc0b3be43184ad405037ebd131a550f6938fbe461f98e3006271f18d75db55cd02a343e5837f1e2d1b013e6018c7d0600f8a96459b48d1703651c130b08398ad06628114d06ad122c47b9d8a42aaaecf159aa2d4d5d14783341e5b0847798f68c84b4df71f29f9011e800c3fcec581b13871b1d81c67799aa56ebb653eafd97287b95b8998f22019e40cc0b318befda7d1b2601b2c37cec98eecc849d4ea2697c65fa1f814884f81f154106f85e2572e9eca124f374ab1e82f298b680ac7370b5a37f15727a43f272370615f4920dfd6067a332cb9711be92f8ecf62c312f309beb0781589c789f565a8d1ac5cfc4ac5ab076289c9045b145f5362637cbd52c43231904f2045be8e483d55d05693583684b3dca5eee15594d6ca12cba467f3a2f8d5ae7fa8d32b84b4483098a67c3e6a25134da2013860f21b8f9409c1253878cdd72fe320ad8be34e54918a77e48aa5ae91deb49c51bf72058c142dddc140129011b5ea38eb3a1ce6ec638f292f71485fb30961c058184d1f7e7850195876ea3ae6007bb6a1f5dac9b59db66cd77397bac45ada4b15225469aa96b18a7c4d716273798879d0ab1ac719f77abd34b1651cfa505e5a9188e7a7817b522e528c51f412177108da0c5d413bc5dc0d7dd15976c4e77fc36dc6a71a4a21db3c6e48b285d84e5766d772db236c7eb386419c1011dc5abc4bfb7f86014374e50f209791d4bd756f3ab65f4fa22b94f36b1a46c9b4ddb298e3479a21a65180e41a2d45a5cdc8708450c3db8717abcbc05a862ba61441624c523d73d4ac65b82159f30e03f83e0f3ab4f63ba8687f2dbfedfb2a7d5c2fe854f8576efecf1335745160398d28deebcd5deec2eb9db53abb336e89c264e55f297800ef9b9e52124da221cfa339d75d6ec9f299dc1cbd26c6c4eafaf663fb3ca0250cb7bbf0cd5def643999d53b01598ec90ecec5fa739193517a273c6c525036b8695511230f5eac319bd570d50aaa134bf6de14f5e2a964066f5a0498b957e5fba4bde97d5f27d0fbc82693363a611bf3d1c64541972890d9c2ca842a9f2d051b4696c52e8ec863edbc02796f73723ec794daf527080d446268b92e56e00c4d29f67b8bee600a96f10a15dd8bf75925cec063e5fcc770da44a7b22ec7345f246e8606bab957fd6f765cb390a4f995aeb1bd522e819e3667481d3259c511d04a463fe5e245146b62125c97764fd8fe6781170b8a62534acc68106246158f50b336eb5292bfbf7af0147323e648cac3511f1dcfa798932b9e880ae458658cb6896098072937a2a7e62c6cbd44d49633e9b48fc876c429921d8d34740c247d348b127e4ae387cb2eca1de59c14ddf43942f8a1619e5d6266b4d2385475e1e59969ac6b2c90c60dc521553aafe4928f395daa96298cfcc7d5ae4467f2d1f206624ded7be05e3c982ea93392449da9e6137d6262ebdbe3418f343f426508a5d5ebf509ada9c4b74b26e92b2a0bbc1fc3389579e4c8026a7947f592e7b180a6f3b6308f010d1099dbdb39b1a7f4061650f520c4b8b97c0e4499537382f10294842f65b70574ea4139e198f56be4f01ee1fba8aa4b971344ead248fe5f030e9a00a6cb6186c834f06639d69a57b2711caa97015164b6c42fa0fc5f86a2dc386317818195b1a67af45ee7306ea662656b49b85ca691123f298083ed8dde7291da78a8f933062c2ef37e3c8d48440a9403d958c6d35a3a8c93562396007b1e24903254f32bbe3ea4f2448196b1ed4c55b161aa506128ac2d555d440eee051a4b643a3f579cab81c6d31a3328ff1abd602d8f6b8b57ed31247ae5b6a3d48d8caa2802eb28ee84cd070c902b56d903de73660e2aed71431a69620f266009f9cbff24b770665549583ce41d7bb0848d2cf94dd3ff0b2f21a93842d841521381c6289802d1e932487e8d1aaf974c2e85b22cd96d788e29a94f2dfacb912f8582df55a9970f0c4e94d5b381ba4eafa68c9722baec7de07797baf2ff90e45a0d9b70a2bf5af50746e3f69d5d6090a54e9c984213f2e414a0144efbc8d922f7d784edf334e5cea15beb5a54ec233d5b3269ca1bed0cf7ef2c31acb52eb2cb8295a3a552bbac3951cdd50b34f237564279b29f15c6ca2179e70365cf715630c810dd5022148a4a6a0011d7f408356165915e26543445a4e017d5be6a8c8ade8611bb81c6cbfb6c062643bd9ba5310a696bc87cb79a14b0ecc76028cc42aa24cd5b68cb53a157ee672e57ad99998a95e5b06f863a297644de5e56741811aa0186b4453fc42cbdf5d1a5c65f8ecc5bbe86e3e9e6fd2c924a50c13378d7b3e2dcba803f94f2444dfd95f4cac3540862943c85d33f9b35a1a9e763cbcc855f19be1ad6a44cdbe7e8dbd5352ff62096340e9b3ed340286fd02b7f9c1f5d61c1029fba2a781822cd8b55d146f58760ed570eeca0f35b484858b0b30ca3372243e00fa2f57acbba7b5593e5abe2b7f9fa4ec326a435d03f0f83890629a0a6dafb2726c0d9471f8ca2d3aaf00b36cc3111ae605207fd53887b336d761856408838821cebc29a74ec698d6855b7202e2db52f395bb14a207bf5d1dbde5845974a870e7bfbc2096e05d35a7eabfa6a3af2ac3bbe09e227fb5bd4a58812d20aa68b7f1c281040dfab054bd80b27932fea5aa767762e5811531924183baed12117ca7fbb7149659241c7be3ae467770171465bf45351d01133010b1d1e4de327534ffadafcadac40ca9df4f90685de037f02dc547d1b8825f49a9555ad803d02bbbd8c6bfe4b5d09fc97db4d90b52ba9a62436d576fdd6ade2d582db82725335975591730fa6e741b0a46040214bd0c61c2bd400eea3cfab478b9206c6c045c01884dd92b002441da11410cd8d3b2e347a411ecbf7a88b4250a2e0b1b889f80392a4039169ec9e196d08ced44d8e636e42e4c3d5ef746950c3f42310a7f7fba7fdfb5221b4873b00e892ebcb762284307b8b99aadf39987c31684b4ca32ff580236678439ae26036c3477d5f07319b1edcced54cbd1b15b648aa90dd5f81e7a182a9990d1b3c1416593348ecd5ddde0ede3b57aad15219c48238a9451e52933b1e9526d82f746f2045f441df3faf83881d8bb92ca7b8564c794764b87aafa712ba16c88c33396aa1d9bb123d9b0a8cdedae4eb27f9c3d2a10fe17978b5a91c68c5bf0dee6a2d23e2dfb0ef886950c744189e098fd9dc7e6a005f0a485fbda477e47590eb602d39b2633e6e768d8dae1b1d1040c042959ebec1baf44a771d2c30f9301e44a461d8383ccb4cb30d0c9014f1c5fd18c2e30822eca015654f644d75b948211913cc88c5f602577d3c322c85aca3e04053240c8b42500ecb853b57555303631fbc2880575dfbc243acfc955c91f955674ce739213291fd85d12f6e0225c2eab040d125f75c75e114e7acd1d107ed1c00b3b91b1254506b7c40c807596b1c0be4ab2218aa0e1a89c724665de0df69fdba9045794fd72733c783a86345a92c1356ee76589ca66c26221ced489bb7d9de04832baa2c1191b66b7ab5a606616a425c635cb4f8fb697c45911fb28fb4e203b10a1ea98eaca40e4a9f9ee31d14d63a2d3d28f1439b80b0ed12292bf592e3ae0be7052eced6efe612222a91e7516e23d36e176e7382292047138112dc3619a3fa2f0847769aaebaa3fe2b2e01609d7570962432d0e8a28a305828e82ba4235d666e462fe15804491aa4536838e3300a52647698ffe0d38afff8e0e5d250c28663a9138631cb213829be8b0b9f769e6684b7eb7e2e8036bf5005e3ec670d56755a1f835422a8e9140d49d621829ae5b1c092f98be88c0e8d30521efd9732263dac2852c21452c1b71ee41105213e140de9186a56da19da64c487e0457c607e8a74f11ffebae730cb078626c5429a539465b0384756a929529b9b3aae0628803d21b007b196e0a4714c46357d2633272519556667a19e4e9521b132d868d7d2851610e42f6502fb1734c94c6227a0ce550c909aabc39c1363411a298e2919435418d47847397a3d7093f4a7da596bb8b4f5eaef51b21851791c112d529556228a749fab1c392496006d0f99c57e66417a98116844868c7e876933bb478d80e767d9592f1855a81ad9f078098d2747a9e13d4269d4b4051f05c6006c97710a261982a90c8e63869a18091529cf9f9541a77b0ef09b0bab054df31c01ba5cfdd82bb8a93041824e32c0f8185bdba57ac76b380d436e7f46a7a2492c4b4858216163485d3026bb6d6d5cadc150ca039977378651537443ea79765bc70de64964afe4cd47d1426e7ed4da16d6016d44548aa225720466085af065f6e743d599969e9af8f38d4b340b64c0206eee091dcf7b2909ab9720712e71366ef1f55740c93f92415546060e5ebbfcd4de663525fd8457dc340f0a0038292e16741ec7dd58c4e8f987c4ebe8710ad03e9b5e7400e63ba27dc0bf0cbf061c097f62ac76feb1389f4e50b59c8e3fd8f3835fae8644b538fea54747f0a5c75530ac456169d569326807747038776379ca8b143c698415786637279c206a488a4c1c370cacb45a9f29c0fe7a2b73dfc8acbaf5234c53a99e9fddb79c34621f4b181f6d74c3d609a3250725418a3e17b8e14a77af99758a903f46bb052cf1a2e1070975f73dc689229a9da314c90fd848910bfe039ee0444f5881d6544d459d1f362923b354803d52505e76c34f46477e10bb75a16c26220a7b9d3bba385047b5accb570773ac54ade5a4e9d9e17ee0902983c936557f9ab762cecd84b639a03f83acef0c0985fdc0fa39b34a8c607fdb9e9e5bef002cddd1c9922c14b6ce22981a31c397994c506aa4154f73fef972fd0c4897a36bf38f08d1835e702ca2ecc3b3d48263b448712f64330609975a5f68e95463cca1d4a59b795e178437a3642c4d3535617c0899c5a0f7318ad668edab4eb3fc826fc38ae9e8732e8694f3479ef36ee7c067fdabe25ab3a14f51592b4807a687a06cf241aa6fa33599336f0ba70662590c01f6efbd997f52445b9f5f93c0ec460fe571fa0befe3f606932c69589b0221d6eb8cff0197fdee7aeb7681976fb055183847ca6482229dcea591f31f55835ff164a1e0a509de4a127889b8e42139f16aad1b718a75723534e5d714aa0f0b6fc9a957561d1053467c082aaa701f1e7c1930e2916ab0fd0be7481c3a04064f8409ebde44ba632e7aa54df9ec290167ad5a2d2172a5c7ac356fc52ed82b76f674dc8f69089307575d86ed69932dd9326d886e9e2a33ec10bf35893548e8b3e70385ba0e5dafc2f60a988526d84205b7d701ed4a40ab1ad0ae07b40b0aaad1e865a27bd0be104ae19c69198d7847a151026fd1e3e8c1c4349645a56b349325df3b2e5b26c3d0993ab75153b637ebe4e01de8d8c94dfc8b160ea385970eeb7b7f3bed70db175d523a246776898d21e1ca92b63265ad4c599b59de6695b699a56d76a95d60185f6cd024f1597dae3914d2506fa5ec824e89a512ada896263fc88436557c43640c809047a037e8fdf6c33c0f71f85aed0ed4e0c0c6ba34caf8f1d2690e50ae9cbcf1e43e6ad910f1e6c3c37601089a5ded64f7a104c4559fe62e75344945f9d3161266e805ba8c63b35da12481eb2b4925a5fb9f364f4a401a1b84daf6a762d359ab99839d335bd49c207b64c142703a808c28f3ec4dc03e77be380ca1b2e9ef4e7249c0b5e2172e067f2f01fc2c8da53190e8c3fc97b48f865824f42df95dc0af77dc43a5c8450735b56ee28a8509972398a55e0387287554eb0ccd03de6a4bac78e33c9f33c9b0f597b09a71c2e924b4b05b01e1ba8fd3bc7830caf502c40a95f1b763c585f9ec0291c355265223c95302202c984b555ff5e75d2ccdae44b9698b7398cefcbd544fced461ce23d8ce49ab7d4d38bfea0849ec2ab30dd46f80c7f08c89c36d23be7e12b52492a32226b005f9beab5c1808fd867b5dd90aadb42f95ed2f6568310167372dd1f557db190b0a0b943cb484472d004d176096ea900ca81540dca7a0591216dbe68abde67de561bcc31509f59e6880cdcd6582bbab1330daddc3347d1331ff6736e32a423b507aee2bfa90010eb9ceca032cebfc5dc3588f24d9fe8ee811800c697e84a6db3b8a9503f90f1b94d178b4fd21255cb8672e59fbebcd1d4d849dc62b18873b65c1c36377a50c15f741cd970eab7798e9b456905e08cc8b41de9a15f66466ad6213287b1f3d5572ce3f990718b68b85fd3664b26af50ccf9d8f686ee1f854d4d1735b0c757bdced7c4ac299de340cb27c6f4276484f79abe54f173c336b461b3e4b6c2f8d3ab8d65292172d1074483e273661abfb185c8b7b05de5d33d8d151b47a794e287baa2446aeb97aad6d89c5769379102090dda9452059d8d239405b5d82f166e51a2071b703c60377c29c60df62a04542a1a9d358e4c297a56ab875aecc001669d98e2ffe792464069caba5ff731f51e6c7d88bbdefd3d1d741bde2e8ef81a3a392909634b60d78e02d21a51a216aa971b4be173c10b3c1b22a739fd35ed777758fab4ef39fe7278eb9519376d3896d2b59680b08590580855506464b5be36376acc3c320032855d8b6616141e5315375ab95cb349d91f72491234ddf83a9360cc9e3c68b161cb3a6ce2dcee170fc636fe7fba49215a3687357a0d2e7f2a6d080df89498ab9088e34a54fc80512c572e370c1cda2c7ba36c590d8fb26691eb3286b72274730c3bb61749dfa2ff95165ccc58e3bded9a04244b7b1b6b56fb0ada8d1bd7a57b55fa4d369fbd0bad0d9054dbfa8c96ac2dcc5985ed8dce733b3dbebddc3d53e37adadfc1a7923d6a4257d06f7558256d9979e4ce9d4d2fa9e4f23a99f568460ba5dbe31071c07e1fd80d365dff3e3f6654a0b083562266b018c6beed56025e93544a951dd16adad8aaea433a78214720a59c7338a1e35b0205ac5b8a1b2a11bc182c8e6551181eb6a70b34a897374655cb79083c3f4e6734443d28e229e11b621c1c493c4092367ae2c8cce8f289bd22aeec6952f16215c6a3022f842a633d052275d2603af43277262b16e3a21f4d3ee0ac0ccc1f5591032046920832114608a2744d05e005998478b7ea274b90b916255857a908de8d4880ef79dca6ef322ca8987d24e67186e4266cc6e4ae77ab94ccfa7aedd2343c57e195bfe3a97cfd3d3604f8752281be036b79ff21849a80b2b4796639720936fc6cf0fe16c2195b9e108aa29e00e428ba9097131ee31edbb26c9628f2698e4ae2228d95ef915f7d9bd5f61036e645b7ffcf0d4fa12f4894cd7dba6a4a9367191f044b80c2ef8f8ad431e2cd2786951b5e336ace97fb563487096a871868fe3f5f709a3768e1a7276d048580ad830ea04bdabb91da1882e4d0d75ca45c2f2a9caf26e2f8f93566b5b21c5d549836d8c8a3bb39b74c15c294bcad893655fe46116bea5ec942f1e30719cb956868ac41c270fc02bfcdaf84fecaec0d7d42eea83791f9f4134325e87f1aa09350088916e77116951cf09946fd27322ec5c9afd5ee2d5cf93f43c64063cb3b2d3271998a70028d18c706cbd75e87c1b7e1af32257335ca9c3a947da0912700a32294b43dfb21d54c6a078c53f8ababf654b9217944c0976b16b9ccb6d0fe96a9e37b4223e221d62b40162787949394950783370324eae586e95e202c24ebfa1d964e8d51bd26f3d503ef4b1cc70b2c35d95e09e14d843bda19a7986cbaa8f2bbb4ed3d3e8cc73941928147d468825e7b1389aa636d88eb9abc472752c1ac5658b11b214f8b077b3298cad6904dbbe5a55d3990095297e5ac3cc61653c583d6e8b2580fef0ac0af5c58110d423a18f1ff935c13d8dcd8fdaf7d495036e4228f7d6042a926496f69670dffd7d480189596a2030f29758b51d5a58746ea5d10ca9787bcd231d1bf28346348398ba3bc3964a47c3aa999fea373a806e65fd783858256255560236b51fbdcae6e4402430c34037ef5c05d378efd2cbf4722469049a8237b15920da554d07d99bd0a3618d2b155f1c2bfbb0b27c7b812b8577a50ddd215745c445a745230552a31c019f210fa2c1e6a080c33e153d5887d7f8853d124a5f95c2c2f88ce2b948ec45fcec04014a16d28dec6e5bee2d654a5206000bdd0ab00aaf1e82708b002e5d943edc4bafe5c57ae5f9cc1b3ff3467559ff73af69dd38db8dbc8f5432dd9318324e2831c8804a999152a9d0a8e160b8d9f8ae37eb55f5e99e8def825e51109012d9529d695ac81bde4f4df6435fbd25fccf772300df7402801e135e55f740afc662f566bcaafe2a02808f34e7451fa98e004c0370930d936954abd56a26d04d1e8dc934839b46b3d96c660add342222329946b1582c665271d3e8e7c754c34da397c96432d170d32827c764ea6ab55acd94e2a6118dc9947253379bcd66a6196eea88884ca62e168bc54c286eea7e4cdd8f490637752f93c9648ac14d5d4e8ec9646bb55acd74e2a68ec66492e1263b9b99ec6c668ae1264b346f5422d3c84d36168bc54c26fb63b23f26fb32bd4c2693c9e698486ef2209875dde443e48badd56a26ae66b234264b339bcd4cdccce4b9a9ddc4b9892332c54c3153ccc4fd989c392293898b994cdc8fc9e425d30004108ea8552886010801107236c270c504d63c9a5aade6d17c7570865238230267b319d1577727a9c47e7c141bc57ebe7a8d1a1f8dd16b94a3327a8d5ea357ce57a7a1f2526a239a5aad36a2f9ea2aa9d18c1951ca6c3623faea2a548712fb89c562d55332d818ba579783d2bd4addcbd4bdaacf387127b6d6d19cd85ac9d66a1dcd574f91b1c5b0334b746267253bb3334bf4d5512319dc4a024d3e6decc7c66cccc68cf0d551a6ca83045abff66573eccbbeeccbdee0abcb60ad7dafc1e66a9686ab7135ae6653f0d563e8da1c37e388b81937e3669c15be3a0a0d8009f48a3c26402cd620224f484716f743c2ad16af2e7bfadeea6390fb496fb8c5bd727478bee414c6acd04b4e9390305c4e0e95c1979cdac897152f3975716ba3cdd0e88b56f3a519c090309ceb0b45f2050ce2d6269309c988644c809845430b09b305052d41897cf11d6e6d30980ce6039b7da946141266e3e1c9414cbea878c91b09b73657dbb86e72be34c34bde2890309b4dabe04bde34f24555e356a5d18a68ed9af952ca4bce5e4898daa44915be94e2a52a932991059562b042c2d4a0a021f4c817140eb72a0c1683edc06437cc92c14bce4b4898ca537286c917142f39cb70abba5c4cc3484a609030d5268c2ff96c225f4e5ea234da10ad462bfa920c264818daa48913bee4b34465b2d923fb2999bce45307128606cd1b3588075f3af11285c1260c86038b7dc92712665de769c1977cae40c2509e22d56d1399a73657f8926340c2509bf9922fd34b251f225f7ae8d24a0ea43629c297dc8784e926f34675d923d331e2f892b370ab653a30cb7ac973902f9c9782befa18802fa1fc4bb052afbee424b0df8684e9a015f942bde4965b0deb55f552c9a784699e79a37aa9549285dc8bcb09b917f7e25e5cce573fad9866a071ae9046a371aeaf2e032cd19005d190c964415f3d86936a6cb08d87c606db601b6ce3f9ea272adf8ccdb5d9ccd85c9b6bb3f9ea57e5a5684d66d068b4265fdd94328a411614834c260bfaea2554274385559e182aacc22aacf27c75128a8d515dd526467591aaab545dd5e6ab7f274e06ad490c1a89f635a47d9b49162493c982befae8a4fec8c95c4abd1aea0b61a690529eafde2971e98f9c8c7bd4456da8cbe5a24a7cf56e561cd52dad098d46eb2a52907a270b92c9644bbe3a570540f2b17acfedc913c0c7e0f61b88ba2ceebdbaf5bd54bcaa27238abe586eecab6ca9774712f76b245f7df466deace600ef8945d4f76a245dd33638f0ab58ac5c8cfbe1625c8c8b7146f8ea2976f6f8f4e156cbfdc04963b1fa0d700af1aa82d46df5809a67c27859c81bd56bedabc3bc59c3605f93205baa8f0d84af3ea2d5772471a97faffab93ed7cb306bbc1c0d83fcdc0c3889be63f1ea2a6716e7d5579835808f04ceffc0969c1439f762ddf23c1fce93e2ab8ce77cf476be729ecf57ef3616d2375bbe6f6e4e001007bbb0582fafea05b2853b36c1e29d773ede169e2d5b6aa9bd7a0b388178559d85e8c462751610c5abea96db5c3c5a7bb32a3a8a7e87a3ad1dda5083db4ebf5800d8025ad0210140e8f93b7d869fb472ce39b67335ccc0f773ce70c8f72823a0b8ad73d6ce3927111510b48642daed58e46dd8ce35e5c1e6a91f3d5aef14b079d781338cb7617c179276d87c9a9efbb185743e0ea6e9d3079e5c19b7d95f41f99ce3ed7b348822444c196615cd26cc2ab96478865934336897ee501e2aabfd38677ee49dc6e99c8eb54eeff4789f7778d8a30c6b9ede61b15b07478713aec7b3c362cc923bd21d1d001cb93328b9e316fbd8a6b3ed708bca78058674a79f85e78e9c638dc49cf8ac211099eb31dc488ce9a78b2ef2457e0c90ee501ff086255c1973e2a85eb527e9c1e4d76f584412ebf6baa909191ec36580397ad51e03e45144921eae0a8e08c1157343b157a5252e95f1b0d85e030f2ef591eec424993e8a385f5baa70e7049b30d5b9c3accadfb2af3acc6a1dd68d0db71cc99569e716eae66942c4e48b5ad63d0c2479886becd3dd5df3dd33df1da4a47f4c4c88c5b69d4dd6bef9b44cdece3974c54d985c927a0019418d9a6952eaf525b3ba9fdbece3928fa46166a6b6f62a7e75b09738cffc8ad9e232bbba359b84323f9bb3f046eec10312bfc2a228ca96395a1c6ce320658b6c79233ca70e80de9313c9954b68e0f39375c4fd12908357f2cb2c124bc957c4ee349d4927d2f58cfc746e92288b8d04533ac1252ebf949500e7a90bfdf45a5f2e9901173f69139e5c91ee200f3837c5e18f1a4236f7972f7fdcd8fd39e44ebc7937fb69db7aebd3fd6ddbb8d3734883ba2ba5331c511c8ef7932cbeb70a4afb44ca9edce188fa4892d55e4fea095d8294527653a7d39eb0db136e32c89de025a907333373d75a6badb532fb46533e70f0daf9f3290433cbeda43ac97190cf611122338c27c96ffbe43369ebe911e1c2217a739008f75b3872e16cb99d5087e26e2eb7e93cba5d62e1359def51a6a0101e850081eb3760846e95732123171251d1902ded74034fb2a5858c31644b3b107f81ea94b71899da6e245fa86f6ea49df25c80472ac917db1fc61b999302de49bea46eb01b30f2458cbc9197ec2831c817209ea5e1c9e075774bc1ebae38c82732c368912dd58b7e86d08f97c94fbf3cfb51ca683f9d877c21c23d4f26ae5c8204cf23f1f3a3f8d57360967c61afdec2e0e68d813b5e547842316bf41c5832bee6a82a6e754cf56bf3f52b122cf85ab9e5ac9778fcfc5121b848a77cb07338c340c25b82040a7cfab649d7cb900773dcb6711cb739ab982504fdcde7846da010f6abd71aaa589c5c40b9c81983a067ffa69451f88eb9e10350716738d6191aab35d3a5e349395936980139e33949e07d2e6d176ee88347a910cea54f9f361c727a2e1452db6587332a0f30b81c0e39fde6955d9a8474e89c477f907e6ca11076294476cf4ea7d3e93405337f751d0c7119e232c4450b94524aa16081ac7d13c69021f315f40217ed2e71c18df7458cd91354435e2c39228bbb0409ed247dba5c2e13c44cbf3cf3d2a58f2bd2997988a67c71b997ec295fdced4bf9e2d697eed1af4f4870c7de7997f3c71a3d6becb4b70d9de9d615b2c5b2f6912f236feaaa813184059a17404f9831e185f8c179fde179f569b939f0a4c4cd2101b15b8491181210d24cafda270fd9d2df5df3e2dbbddbfb86eb1c66596f1d66c970cb6e5a3042680a6e8342d2349bb4d3a67c7137001c715bb3867ce9bceb4e4e6abc8d2fee58e39b675874d15058c7232c8af88e6bce0a29c24fbbae0aa92c16e16726321c4f2fbbbb6b77777795b643219b5397f4f46ddbab535b5b4eb8434e1c380ef11aa67e6ca1905048ca87fdd8b9f0acb4ce524af97ddf7f92254aa7f49359482a25a572d4dd524ad97226e622602d6ad05051a566a4a0648801e52423c6c93595489f37ea2cb7558b82f9842ff5c474ca16d7e48a3a6a3acfe001e70a99e364188b74867c23c70eea263624b94c2a8dd63fa74e6b6c60f26589cfed88b443b76d937dd1191ab0633abc9a89e1dcb163b275bd813a88575c636f7eee2f24d9febc86a3524221e68fb3a6b3a1f33771bd59d56fe8491b9eb8423e2f3291f020823bd21bfb22bb72490d62dfe42b6a1b24d772241fab9f3e8358a4bed240b285ba0d50dc912279ea42d88bccff7c6cb6793a56b74e85d41d1ef94292a25ed20edd3edba7d71b8a13d21c1adcb1719e521f2912566afa48bf3035c59ccf69f527e48a7a0eec0f9e7a154f9d8bd0364f695ae6a9673fb6b921f598f369ca47fbfc61f9f4c86a640b85815c51af91823ab95cd73069244e83ba456dc322751e4870c706ea20668ded3466096907922fd6a93713e40b119325edc03e5d8809a0679fb33bd5218bf81e4f9693abcbb70db33aa006aa3550ad816a0d54fb51ec9cbd76e10ff1d9a78b3f36d053677a59a4f451f4a702d83b14c522fcd5bbfa8a8e2fa86a28d2e91d7397273d534825a5a194f12490a2bb5d494f2e8b8d721dcc92be6d520716b7ce2b0ed569a5f3493a18f94a7360964c91a05cc902fce692524a29edaf1de8917a503ae27819e2e0663327b9cee9db6d4913b5cd7360d6e63aa0acedcd4f5de75be75f67a9cb19933983e0cd8f56721fba858ae1d43ede48f1d1864aca5d98e55da7de226122206fb45327d170aa724a3f277c46fc823f5ca73850ffe87c920e469e7acea37df8a1c30b52163fa701f2607355eeb98a8a5ff75440955f1595ca79f0fd545436956346385e94973c25fc0f1cef7fe068bfe45df22ee9f80fa4a41e38582cc90af270e48e9f973e901289df92bdf0857082fee5a5100eecbdf9e1c0e1a568f8e3f3cfa57c29429fe49ef58074e18e36457d4c5117ff732f45c31fe27fe2d31fad0fbc6a4785a3b528e1784fa18c3046781276d7a97bfef917a66ef843fc4c2105458f82d24724d05b797a83746f1cb2f2d239f7c0d48ffbd2efd3dfc0511c214047979e92bb37daaaf989c0ab3e56cfd2a31b714e59945274e7ca4d44585424dbc5f3063997eeadb05855b50677944537ccea418757d5adbd1755545b49ee981ab974d93e4e9da9f3d525088445e46fa5da18555ea2f06c05e991f785a33be18eaaaf2b1e1030ee288b64112c56778983f4be417a7b4b9fa41b8c1051844cd5d1483e1016ebfc19444a19a2eeb39da41ea08ee74aea8163ebc99bdca4d397e10882e7b05b947e7fba2ad4388a52557dc561b6b8d6bd39996df74b5b4f4b9a98f95116f968c7d357afa29440b0284f343b4947504a29a5dddd4d29a54da98e9f4b29a59452da82a21f59beca22226a1f539da5ba4b75c92c4ffa3338cef81983652bc80c52bdd250d6a86ca9ae038b5b5d3ebb0bb34416bf3a901ee4cb943cbbe4ea39fba69452f905a5b539eb82475ba1a9be3ed2de4b66de6867ea4913ad5b3236990963fd8bd4d076e4db3d69a9dde9bad3aba635c86533c990e29441ae8226ccb762458d9fa59f3ed6251fddecc704cf8f6acc5ac2846bc4844743cc924b98d0f9f61111b3ba8d441d4818ee48896812b2555ff55583fa4a525f3aa82f100cd9a24343340443b404437405439b16b24565b22d6451907d21538942b6680dade90115b4e60a5a33f356d76a7d44ad93a8d5a096e2856cb58f0f167cc0f0e910a8ac90ad8661a1056c8b8609a13873519113455114f5a0488602836cf16cc646cc1805333e6276d2e227e04c2fb0f03827766161854b8a679f3a902d76f5aa8162404e00cd25806030817ad54eba34b169440c0c18983359b4bacf250db5e3d2f0dcf2eca81499c3866cf9d0ab66aff505054e85d51a1f1fd932872a09aaaba87673235b263fa842655c00cda80f755197d31aca031aa338141614e420bf4a4a8daaa0a8777a47e533051ad0ac91a840fe149486f514bdd3b1c6e11ad75045fd827efdfca0407e1490df3b995d6188068483235b26ce10643b31966119d932f94f48ec6219700d8d7681ba501ba2f1f05c909f143b828f6c67d6cc9a6fcecc26e68b4911d932f93b1fc228aa0d0d01912dd3474339ba35f2c29b598217821918232cec58e2b28f2c13e4f7ea47bb21e66ee89b9dc2463232df1c3a773e3e74c687be7c9a74429dd03773878323844384c3a4ebe97abe99867337c33cf3edadd3dd7437dfcc7688d90e7d738a7327d3c97cf30c67ebc36c7dbe19e56c85acd037b3c561b638df8ce26c7b6ccf37c7e06c676666bef9e430f6c6de7c337343ccdcd0379f385b192bf3cd319c391f66cee73b8813e284be99391c660ee79b7dee703d5ccf37979cb919666ee69b3f67eee69bb96d88791bfae666c78084e1644cde8d9c7d7c5a9bcf26f4cdee43c26c42f346bbecc1d181f3cdc2ad0d47871ce48be7dcf3ed77e679eb99377af36d664a98ed66de68e73c04c310044307c11004573cf4951004c159486743dda24a4632138662413472091505d58e303ab2b212d29f191c04dd417710041d74d07d06077d06d0dd69ce0ce07c07698e4fb7684c68c250277c685406447766f40929806048716600f9431a2aee2a2aee2aeeeeaee22a2aa0bb83aea2a242676880f355403ad3e1748bd2f44c186a04bd91519b6e8722e962940442700fa94c0d958a8a4aa5e22a1515155751a9a854ee2aee2a2a954a68be0a6ca16ea65b3dd4dd4c987e027575b0a2aea6d6bdbae8985051099b5603e4a7312345a54a4951798a4aa572558a2a2545c555aea24a494969d9fc14b06543ddea1e5ecd09d35204752e25453fb59ea23ba25285cd9342a5a4a050298e4a4949f114540a0aa5f21457a5a050a8b64981f35160dbb0381b2634611a063bb41810ceac9190424a4ad835b265f2cf00f9bd18505028141494a3a0502847a1a05050521ce52928141494a218c0f9282017599c6e7113db3361780b8dc4cadac6ba2004142a6426329c50504e27143fa1a0a038ca09e57442398aa3504ea7931219c0f927909530d0cd84e12c6ab0215b43b3af2430818212f24c06903f0690df8b71723a9d9c9cfce4743af9e9e4747282e22747399d9c9cc46280f34f26eb589909c3497eacaba788a706853d723a859c235be63d39b9f7c4efc9c9899fdc937b4f7ee2a7937b2fd3c8601a16f9253461b8043834860171cd8c4f20859393c91f03e4f74aa47b49a4eba47baf5fd225914efcfac925914843f349e01cc2e9d624ea9930330a32b2263bdf730a9c10aef360398564cbfc48a4ef23f94722919cf491beef3ac92fe9fbbe1ed3ece166ba357d6e26cca442de984e8301d57c33f7fa2a98f8f629932df34b20bf37eabeafeb3eefbeaffbba8ee49f93beaeeb266c041bead6bce16426cc4c828773e914e5d4a60cb823df174e1bd9326dd759dbb9edbace76d676d6da22bc22a64b68c274a086f6029a99fd17a4f04d04c83f02f9bd8d5a4ba9756aada596524b290db205c1e916047a260c0398fc6cde76be8562bf04217cbbec41b67095d25aa9574a69a5b552b7b4d68a03c736d3ad1cdbcd842980bc31bd79abd95e6f00265c64cbf40de4f7beefe3d668a857ed27eb92c3ca4633f386ac7532bbe42e7e1c0d313b4f468daaf0ed3b6097ddf250b73e1ecd4c982a6f4c5ff15caaa2efda376782972d226a666634c323cee6b832948fcf467634c42b18598314a78f66ba6583b4132687bc31674714e1f5fd928394030512863b8e86beddab5b29e563fbead40b2706a278c1fef64ba72c258bd6a55dc21fa6670e8227775c97a7f23acf34bb6c3ea2a88f52356f509f4b8aae5ce2c4eca7f337be549fae0309772cc27f837d0ead75f6138a59732568c280f206f519640bf51afa0e9bdb2e4a5b8a9cab28dd7e6376a69c123cb9327eb1afeea17e7070cb0bdf479af5073232d3bf49d3c2ad5b9db5d65a278e398ff0e847ebb671b56e7623f5a094fbb8d3e984a27d96d4c3e2a8542a1f82e9a27eb68b6bdde3ef0362b18ef661bab8de07d3c5f5be8fd4e3927ae4a8b95efa60bab8b56ef59e9cc4f862907ad03927c7cdc97193ab5bad5bccce9492ee0633506b5e080e3cb97237671716b74fb66c4e83b0b87ddbc72cf245066171f3e910902ddb8e27eef8d9cde7e65366ce30ab7df349e315902fad1c3f4c40c2f4306f6cbeb90ff285f3cd375a8e6ee1e861c2b4c81bd37b7e6edb8d9f3e4a25fce6e2d45a499334ce7296abf2a57f9b2f56ad0e6e71abf3c6a1fd62e36a38d2b047f51af280c4e52a8cc079fed9a456c6e1d9f4763cb3b44812f88134c88e9b3b4e26efbdb30541a1b87768c8423bddb2c1081a5ec9b7c1881ec24f8e4d44c31cf6900d37b823c5b13ed29d51cb73d61c3bf6edb377983552ef7c0aa15e653d56744e77a895568e038f784cd79886898343876a6ab83563e6536790c2405a6333694dcdb6496eebd228f440ea621611b73c4a13e2d5f41d33b8e3d73ba0f4cacfb4b36196adf285d21a8e4a39e157574367cf3ba8695eb8b3b3b363c31357c8e645e64eebc47a68728cd27ab696052929f1907cac84a0b389c615661a16a710e945e6739426a49d5222f9f2857c611eb14ba73b9467e3dc9b3ff650d7589c4df4354863384c731814820ab34569bdf242be4c2a82d95ea0439d85f682d2ba457b2057d3a9f8e957d0dad32c6811dd912dd37560f18d74e7a75719668d14e7695468a8cecc1e922d138759354c71ef70a194c5284dfbe42ac8d5742d58fec21d417bf3b4d0cf955732a77ba68f8384660f9edeb1d699321e70ee0c4d9ff6d6789e714bc64c1e4a3099a4a88f2cf3bdeff350554a5925ad52aaaa1ce5157e76c19240036110167b72bb7c937a00315fb265caf849250d51d4575814a58a45294346dd594f5658c4a1b471be84442fe4cb9442b60cc997ee8145e91b088445595d4a981e9a3766bbb5f7d2175b7b6f0f4d1805c81becf308cfbe85433f7d06fbd441b6f0ac617182e394e2e7eba483e93cb21e9f9f19b394300bc80716e50f12022c4aafaf1107e0079eb5f78a62bbd76187ddde0c541557870963a7b715af4b8ea74c64ad24b7ba9297cd72322db9a420e39477cadb3a53954b6f9feeeeeeeeeeeeeeeeeeeeeeee6ef721a4f4076ef1e41ce8b9e99259299f918272197cc6807292e1317c9ef89c9e8359a6924f920e407a08c22df0a394ba0a15827ae71554713b0237f718a4e126b0e41734f909783d0678e232c0187e0265380a78f218401497018cc151a00c9e02a27c0698e2297086ab40e02232c37886c164cdd170954c12153fe231a0cf405571670fb726ac571c8d7c4939e78c02f9522348c5412a0e5205a9dc4791a6f291833c1cc5a74d7829707e0d904810aff24ada21e5ed94f423e59df2768fbf54eaa3a102b6ce0eaf38a73fc8954cbe584e88f92a5082d4b22855608ff614c8422c723e03e42116394f0199884519408e016414904f60cb003b06d8332760d35cb05f8da46bdaa6617dc38dd3391d63917310ec0f6c9e90839866c3ac4ef6581f58a4cf4ec573cc0a60b721aa73db7556c5cccccccc4153d6ba8c13e3dc099913b1cf4184cbbdf4b86f076ccaa68c631feeacf509ce9ece3a07c9978e16347bb6909c73ce5cc8975945c78df7e784b5b5f77ad44746389f3eccfab9349e431f69f6703eb9138b3de0780e088b1ccaed04c522efb0f371e4d0215fe40f6b5b7695cde094137270abdbe915e73b3eb3e73aa0e73ada0afbe8bd7471e2d46dc27cf2658ee69cfc91bca394569002f17c6f84c46362032e8857dc0d0e17d44a9e0bea9fe782bae7b9a0e6792ee839ceb98873d11d85ba97eb384886e4ec9e27fbe8c8474b6943d0ff9c88c902592e66b998e562d67231cb3596b77c85e52b2c5f61fd0aeb55b6f80a1c966449b623596b4dce3f56c90d7a8e237a9109c93d1f3bf738e7809825dd738ef483e45d38c47c5368493b90fc63666666666666e61e3cea76faa6b6af860d36ad83486ec1061a29cf73be23e756302a931fd49bc7915b1a933bd2645ae204ec05f072090e93f7ee77493e568ff281f23d2fd1ee92d74e726f73abf251d0e415dcbc0452f764ff6808fa2427627a926fa3d168f41acd8c5c5d5137d40dd5d168e4a51148647ea9bba1e77cf46216c9479f8f9c23edd04e0a8798b5c622131ad0cca736e1c175d94749e42d49a07c3a04fd911331fdc8379aed2ccdd22c8d46e315e72f101d44a59c7cb76a4dae38efb66ddbe4d64db6bbab16646bca7ac5b94ffd826c04402768c1731b12cfb95cc961c84b07683681f5f0104d4c4917511bcf493e564f8358e47424e196bc417ec99615c816ce3f9059306f3012ae611bd63181bcc32f902d9cf311f206e7d327ce8c0dd98298611189daacb59d4e97d3dd74361d4d47b3596bb7d1663b9ae7bcd3d9483f363bb295e4c37a937ccaa64c3665533665ed23cebb1966c9b7dee110f3bd70fcc271d68f72cd07e3b81d20614ca2f9c524922f76124da2493489ac1d79c9ed68c32f1cd92f8b9ef367ad1df94672ae4ed93dff9c3fb7351892f1b9a9e4241211bde2dcda7bd93d193162745ff735d08e9c3b32cf6645cfe561d6887b4ca41fd6d9b9d638b7f6de9aa544746b8484579c5b7b2f0a49912cb23e1af9384282c4e2d0cf2fd9c2014d18f9d415838483902f0609072f14420a8bd8300816b921926808d5610e69501166d198b417e562096489c568cc33c02704fda9a3e4391952252c72527a06f81ae47e8234467576e88c2aa1404f73205b38a751c81b94e7a7e7396edbdab7209a12a09fe7bca775deeaf08af36ea7ddb48ebcb7de7a73d2d6dd23ef50ea047da41fa390e208bd7f3b72ee2c3d0188593d256907923310b3243be74d932ff23927917e90c28a057983f31258b5205b38f7c01d2fb834265bb8e7bc3241b2d10f07b3ec0e1b2f77c81d72c77355b676481eb245631c051a721a0ae8ce9a34256d54cac83d25e5e404f5dc4b6a08faec444c3b9046e1fd6234466533ce037b708d49d1d8edf44ef5de6ac84828d784b3569980b58845ae36b1014232eb7c6450cc1ae76814f4e3a66434a23cb8aef54dc9736ea3beea4bbe6ccf7945c22dc97587593aa89c7b536d9ef3cac3ad5a93dc737f504a9eab4163156227f9586b5bcdbf483fd8bd7088f9a570b44e726f86cf82db0d8b3070b3d926588b9a6c2e508822b77ee139af60c81b9c93c021ecb77fe0103bddda70264eb7b68ee6e332d44eb7137b6ee7399ae73807400dac4c6cf09c531ab3ac734e75e44b3f17fb5aeb556cde18827ee7444ca8e99e4ad11def45b13839f69ce3cc503e97b9195e71ce146705a572519e9d96e0391f49cf5e658b9640ae38676779d94e2c7291959293bc14aa580c57c429929cd270236ec4b994dc88fbfcfa68679e731bb3a41f1f29a4318e63662e1c2b675ac961c84b07683681f5f0104d4c4917f15b7b437e9176f8dc8636483778a6b0c8fc2f64242c8695896ce17c04d6da1363ad8d16072124ceedeb85a48913e79c6b1801319c7312588a118a3c549b05e00300e9060e859442ee61910b59e61ec83c3c84e08eccf39c5b90e70b85a01d94b2e10ff1addb90ca00b1c8f9674f97b9d7b3b8b0ecfaa03891738f86cf03e58fdeb66f3eb2739c7734d28f0ebf7088f93664ef96e446b21163a0c9b66dde520ccd29c510eddbd9999991703d57374304afbed9edb8b9331bde1ab60db3bcae358b7ac58d9c764d51513b7f3ef2ecb9e54b750a063b29553f928ff62d4cd5f047edd67231f4ec2c2e1605c2893b5a6b6d15ace542e7d957363ba79feeb4155c6191c91d9d73b1be7ca95dbbe7afe08e936804896c75c11da7d064d2377744a15432b6d9783249a88b7ff2bbd7da17c195d75d32490d72e82bb38a60894c070c27168b4da1839323cbb9238de1c4bac535b09d199c1bfbe81325080214b600e2015150add603901f8080c115776a5f107ae985974ff0c2d02720071d4133cfce635a520fd46b58448ab400398a9131ab9c3bea7876d1b17ae28e3a64829cd04310a681fd86cdad4f5c9a16a26d42cc06b75701280287c13221c8256d0b18eea87a1a00d55e0b5b4a424b18402e285e80855a0d9a6084188dac82064f64a147660b1f9e25d03c3be5dcb6e542fa3d7be7e81c9d23475bc99ade8122e8c2a22cc7276364310be05217d75fb6625c0128054f30398212378861e7215b92468217bcb688c1172c308191233222e00193246eb4b022861d886c4100083647ccc2c0696282181a149e4c92f65be412216b44dce9411499615ff9d26175e28eb21644b7ae9b9cebb5a3cf2f18040d113c6e114128c1e6d98b9066c759ae8b6051e68623ea86a3fdbad190081675ee886308102cf20f4377c4c10385bab771e4a0b46302445ea1871cb4a03dbb0ed4fb88c7dc1e5c2953378c9e7f6a40beccb0e2dc51fa581fa01c07a801add123b4c8f9ac94524a49391b4dee686d0fb2a509ce6db7b8d01d65431f5a33b8e38c75ef0c91451fa48730e8fa306b016119040ec0c41d73e4d071022545cfeef335652bd544ed2a2575817d859d850ba984e6d95958c2b85232bb8d2189b285b391833b725648c2b4321c935df2853a3b0d92d552641cb2c56586344891bd75843b5a7025e4e2ce90ed73558a1cf8d914a45c48470fd0ccc9cc732281e8d9273771e7e43951376024bc98b85130eca1904bb2e089bdcc1adc91c260dd62be013500283e1a13c16c4809393882085078167f1ca503c7cafac8d9a9690d29ac5880441e81679b9734533324f2816fd30e50b8e042072f804d6166c6015940f103a48409c0700414242d50820cac086a6208928916684c684105284081847679f5c42b769924d2ab9f8e780c8a696029a370c72bc1211c74a58b620d4650f2eca7963dc3cfcedcf14e11751273dcaa84870ac3e68ef675306184d79c021638377efad1797654531d2eb8b6d2e08ef6062c45f871c2bd61cc134e60fd4484a067474dd6f4a6e00cee687f05f30a3a67cb1cc19939100802448704f0c0c13a3b3fb83a6240a7127985b3685de28231648a207ef0e9797620643a6eee38632c7f3ea11b82d870849db219ea23f3ec2cd2b2b8f4885494554ad92c0230e28ea2c8e1653101b4b8a328320ed6c1b2a7f2c01bad582649e7236f15b48a59b36d48577c6565088e6fe7ba1178c463569806d601c7157754713ec12138de5ad5b3a81ac2cfb33ba538dec26acfaef215971c2c2a954a65237647959067bdba1402ed2da54568380465553b3f8421d2e7678ea91ad25ae28e27ef0aefefcf9303e59fec3d490464e18ea7df7a5a2e2e354c7bc4639248c98539706cd5c6b3d31cd78559b3fd932dec3a90b8a38b0bb5c20ad90c1ab86c44317b64910f4fcf4c06802597886eb55c49974e44ba74208630abb6c3c40c803300d80c2f7d9c3529948c2bab989dcf894f8acf9c42b6567225bd00de01645091ba62862c06207d34c0c3fc38796c48508a726cc0036cfc940dba68aa671da2aae7f5ec4e4976ce21de3767adb57a3e3f8fe3baee44997bbe7b589cfdf4ad880fc43e90f3bd55eb2b5b5c76130f02b4704795c7db0fa8ea5671f3eca7138ad64073efbd4cd81b7e1a7a76548a115706246408e396e0648370f3ecdf46294727b759195cb8a3a561ea5d9a7047cbd2934e21a8ddc295da09eec8626fe4a4a2e6996683a7205a4bb8e32d422fcb287638e72c427390cf92070f1a0c1550a1f3ec1fbb943a78b8b0ac3877843b5a1e37b05a78dd8a659270de75380ee9c0231ed33558533ef8f9e779f6b5d2c0be81de076e7e067d7b0d2aaa0e399ce48f9fa8703d3b6acec9415f5fbe48000a8cd914341a5f4186e4d96d8da56e7eba75e3280b0d09dd91c6145d294589430d0b2aeba72966cf8e6afa59abc3e68ea739c3296c9efdd292121ffb895dc5bec22e493320a60c86f800049c67ff21c60bb7552b2c381af4a15d5c44d11d850a5d35bbe3e9848a022848189736a510f08176752c7183c85a18a61439cf7efb6b23dcf17b1d34b82d9578dc8a65926cced5eeda6c24e71ef19806bd22947ce77c7b0d215470f27477e7fc0cad123709f903cb1c27320decad2cee6875247147bb831fbc9efdd6577253d36d6a863798acb8fee387002677fc9e7be0cd18b9b21a820f7028900fb3c6cd67f3d9aed03f2d63f2ecddc3b95c1937966ed005c78ab3d8b5bbbbba048980e0e54ae8ddd33e5fb8e35d5d71c7cda7612057ec4bcc9c78e6289ed96fd7c816f6e915ed8ef6db6a9b11e4c97e38726813a8cb682d8b0e971eec3c3b0e1a0b4cb5a780c84c08802cdfe82bb41bf71b3b5246533f4c3f7dfa18c485c16c96801c3b3dcfae8337deb6132cee8c650c05202ba89dd7b3ab5e959e5670691577b43fa280a066a8196ae633ab282a4333839a019172d63e5fb48bf94939c1195f5ce96e841b27cb83d7b37ffd326710dd1800c92461f11dfc3cfbcadcc054fb7c6d60aa431933a38b2b4a5acf1620637acecc170d0bee2881820075187a4de224c78f3316432520c70e5ecfae6356376fe7ad864688e1c009db264e8e9324dc71c662ec8c7a194343d4c74c948c3999d1a01a56503a007a7695eccef0e24ab992a2f4130fa1a68622515d1dc09efd14534119e3cd8ff2381216b9c90b417fbc97dad09a1b4a29d2efe51c8ba0cd0597321ef2082cae33f4ec2bdc4a499731d453326c629b21853b7a4b6f1cfc2773bb0089cdeb250318b7a60ec3bee715fb2906976150f306fbecee30d5c48cc7541fb76fa2862038c59c9806f6fab03bf26bce30d77c483e2eee48ff7b760a32ac695ecd8182db3e8194ec7cdb08c39d618e13cd1dc010ae8beb9c686ef369b4d604777471c121a348c82639f07976ba79b5d6ca740389601ad80b6082bb1282ab0bee64b0d96caf20ea7265ec609b0d30eed833ab2aae7debd32dea74ec999def194aa34114a8ca7ad5333f6eaf99ef18eb63a309971d480f1d8ca6e03bc5e080065e59f97cd65c2e570a623e8919fe68a68b27c9f4231e4365669806f61a3d77fc1af5fc35091ee50305b77dbaa4f873ba129e4c923aae8cedfa19d3432272c0b9a32c9ab568e426cfde924ba290a973de12dced045910e18b673fb1fba0393d7b95c11d65d177cd2473674d82dd5276af827047c9e49b7a1153a83563e49218ecd989a0b4654b4f215783441451a40034779c4242eef69b35144c1a970aac00c5d0b3cf991923575654dc71ca34f9d1a2965c76a6124c39bf9af0e88a7de5ba3780f14ae2dc186ac765a28fcb4be006335ec91fad844287a9f064eb8a3fff89a167e1254fdc4c99ea72b95c2877946cdd5e718bafc4e5619677321221c7639ca2973f0a218759120a3db49737cc1f673be36c8759a9e7249e959ceff031ab3d1d21e05c080dbf6fbee0ca25354a9e7af7e8da5dbb76d79e9b4f9fbe518e528e72947294763b17a67e541a0a91d63bb43c29169e3dfddc5b6ba8f3eb56973046dc9fc11d7d2a819bb9b9999b39f52314f2d46bad5548ea070d85f8385d865286569ec0ae743e033584db4eea9c04525ed5cf1bb9ad6007d279e46e423a4e48a53e6266c26323aeaf6e648aa62e048faf6e4448a58e80a74e9b86d378761a35d0d2b30b714bcf5eaa21a5f33398923e8220040fa664e8835d557abb04e7332844a67e20e0d98548f940c0b3234086f11efd4666e6a4486d4e6df7f58e18dce9d647dba31a38d4a831ba4f64d6de3a9149fb0933e584e110b067c191b4d552a5a64f01d547de60e723108719c68f26a9bb8697a41f8d430d6f432235bc75ef7e3d47dcb4b401fe21b6b75cd8e18f6d899d5d37bbaeebba95ce4ff774c3cf47def73969340e61263cda521ba918a8446c3786454d19cd08000090005315000028100c064442c160340e74516e0f14000e8aa448684a9c49b33cc6814821420c020003000000020000049600ddc8d28454fce4bdf02afc9e01365ca06412df55df21386caeaf5301ca05f993804397b2f922e027a9df1a229085b2968a9dee2869e400eeb991418ee2c025f2f4a7f8018b335a3709fb0f9bb23c1351ac2b93c0f6b9730cfa5a10afd3942fa1f857073c30722b91800ce1f4edb1d74a4f2ea8d33051de1d3cf78d26c8a96002b9335d9231f94dfece84dbcfc06ae33d976d43a52fc35d91be92e09615661ddcfb5abcfcd838ed9c46973a09405e710afd6574d8604f7b05120b24f088f180092686b53cf5054c48b48b185690901ded9ab3cc42e1112872dd0bd162c0fc48850b9b10696853266f00c78b73562630e84a818b374328f3582699b74c50beef9ebb4cd6671281b428982f8e0a2af1ef4d371dd6daa44f967589114cec80d48b4c1bc8e5aeaf27217bfb3175e2a5dc9759d665a4d5ad8495cc171473da8ce533b410b00f0cd13f52723266d0cd0b06ec0b685cdc61e81821973baeb7e70f926a0f9efc9e411097f4650dc2b92f67897648c759436c5a5ef843f408303ebda2b99e6157eda591820637b46571ed550b3d1cc5dc581c50a4a8c97a3ed42f0468b06c56b02edd2b3afdc6609fc3151507ef74f3b8ffac1604b4d159ddd8b9fe463482767245b82d289aaa7efd652d005b82d544ec011e9da14fa45a546a8bc8f529d10320276f5fed735071fe236fe542cb9d40426be9516bb696a50829c15b3abdc519c4bd8c01d63c29b6c9f9c27cb03de10eac3b1b8175b6c2136b5056c14aafced42b0546f226f441e44c06027f542dfd54b4b84f081e4272e3dfad04c8fad20d15925ea42bf9862f47dcc10587bfaea71c7d8a8eb51e00af66fb5330f187d3b6cfa4d155704a37067a202bc7ac0c1831c6f03784f617c889e96b2987005a7afd32254c93e6e29798d343482f3c40022c70f0250893cc1cdf2dcd9dcc115b4fc2f1207e964c56b44db5a862426dc13c8920bc5a8e76f388242fd76d43fadc0b54cc540f0280d1bbf849785a73cebd6c0e81041779bfa4e66a3bd59da1d89808c6d126fa79ab90c66ce6b5c014797975de1e5ab82815d28aad8068044773c0c4db89bdaff77e9c5b4915c1e189c5c2911cbe650abb026a6bf279c7320f2850a01351f500c94928ee344946efad712b61849e098ca3bb4e71b2d0f2cf5d7c346e88c80ffa70d12294a91590d26cc5db21cf6a8bbcaeb49e4f8afcc92603949be033e4a5d60a0d59b6b37289795f3eb5e0d58f6c015b6d645aed53621f90f123df14ad8b26b43f9464f5695ae2f7dd75055623069b9b7c8bd0c0a1b7bfe6d55801811e4f0e435be2d197c9101ef929959640c0d6c7996a319490e28ae9e24c76681576ff8806dee3066db99d230deb573bc47e5f138f93f9adb4c47bc4ea968a98cc6cd67e90fa1976c001ad6797d98b24d78f6cedff0451f0f7f83ca93a2c6b552709673d1df11afafdebec3336b5129e5a8de49607973e87d29af3e4f3b9791a800de71b47e779db384c5b790c88b581478681d27001fb41d72c3039668cb93b4d4c38bb45c7b7bd88ca33ebb9ff65ad7465314a099a9d2182328e31cb12d0502c90b941773f98510b38b57dcbb3cfc7fde51ecdbd869115760de889b89c70835df68d178b17c1a0fe65195c91186726f5f3daf0dc72290329879ff40c5377db8bc8cfe0ce351458c2a615229f2291d847b14cc8f8e2212016fd404737e1126deb6ab33c1a5beade2d1bf74ac7078c9dd3c4619e4b9fb74592754dac5e47665b6842c85a04a2f45c3579cb61d60df6718def5b8eadc156d69634a1d5e647086f5a523ba868942debe261c39e4b0a33864d677e13c86e41bbbcc049082ed914b697bb0b59eaf0ee5ca681b3c757b6687758b26e98a5df915158267e5990d5a3b61843e07a2df46082b44ab980075a7e287e40c822ee6d7a785b610dff317db898a595541990fea402a3841f9f2cf78fcf70403e0d175ca611d74128df013644824caf87b613d430f37d42ae9505ba44f3029a26ec61a8fe4f6142a247ef7bb1ed35888113ab6f9fa04d3ba28afdc9dc4148b2eb0fc63e3b987de152ab2d81ec640198fde0c380da6ab87fa17db63ef44b96234ce48c0866ea30d5d0d2fd016ed5092b5b3dbcf8585cb5b872cd3d8803c47cf3e26b2ffd55704d1c8773bbed03b44cc1c3c52e9b84f4326d36276f24a14a754f54ff4a3204b20d0f8502935c4e415267530eff606b008425d9d739a6b28946edfdc0e88c5f6aac0521f8548746dbf01dcb92f6384d3ae8d4e27eb93f6062b4901827c07c0723a9e30ea9df275e2d6b13e43cdb88d85e48dc76074694cc25cb7aa1894924abff7380eeb6f5be49c0de9e1bf45a6803c92ecbf031b032ab4b642ba8bb46bdd5aefcf01d77b5221dbee618de0d62868ba65a2052f5e50d3b4386d95898e32c831528fd25050602654da753b01b0f338836e0041ef40b34a3c7631a3493f90382cd9a3d4a2b673f317c17560f6e343fa05e8ab4192037133c0bb8c5c7725dcaf06d0518510cdf3e153c134876133425381ae72378928b1704e5c2609c5e1036f38196e442887da138b631ad5d757ba4851140cfced70d93009e8b227289283183f58e88ca827f119ac5cbe4db72058ab4694bcb8713b90cc7437d19e59bab6abf3797494898038a4871d03bbd933e29fa91e212d78c4f9475738f9230e52c442f191373898219318b4a8eeae47201c0bd7888270895609a6619c2ae8eb454da6c87fb6d95cea0f3c87d960fdf93dd8b4b1bd377f37593c3721621530bc687140397689d3596f64ad045103399ae2269e5a08497d5769a9906c850732be3297d4e8b71818ac621d449081415b328f3b965190ee578eaf27dc22c7d931620905761e654e40cfd48fcf80dfb5e66888b342178851e9bb32d9a09e27416dc42228d10e60c5d9adf0d9e0389e8866412dbc747486b6625a603ec8ec66f821ac32f80fa7ebef8329bcbd7307bb191061ffa506d09b04f256a82289bb7fb04fa35f9d67b40384b7cd0862906a9ece292f589308efe89ff3faa19a8ec3b1a08effe06ae63a088103cfe5e881adc0edcf0c23b180a3a1d299f8107ba54f7e93eca6eed8ab2c7bdebb04511bc91b0227f95582b85fa0e19b33c179e7e2866345276bc87bfe5e147f865d51c0a1f2b91da66893cf13a81a66debe7ca0a605ce372d04efe80b7f760a82db5b9ee657a4fc987cf1f756bef14915febf594c64ea2b05e009f15b1dbf14426198e1a8e9de27880b5c188a079d450d519e82851536277a5129392f630c63040d449e065d545e371002617d8b122e20b4cee8ae9ec46d081df7bab33013168c9821761957a0cf74d07dfec038dc1f800f2b7121d91e4b05e53a75cc8c4e5f89eb0d240412cedb917ceea7553b8392da152fddaef59114a93a14b1efc550b141776474f3a2611b8819c400da8d57279b78ba83ac1c9623865e751ab9480772d00fb67b41b5dbc1ec311351d4d029ee7c616e6baf81f4e18ecbb881faa2ba73df6582685fd1c83d6263b1824468a6426ff217e73b2d33a67cbd0d4349dbbb077b94277e8c87d428457078a76de7a223a9d64abcb93751d130c3e7c4b6b1741930b053e48ef0089670b3ccc257e499d5d303682798e2db8d9072796cbca30100da4419aff01edf498163cc6efbe1a053a8aab16258dad3be10b4d16c28d47254621553e52ead42935740eb6414c3155b5737d37274813ffa1f1284089a740b3d18f363fb6556e4f01bc306cbda94dcaaafed66eec7ebc7d3cf8b0ccfecf6c0eaf5952ad98525e68a4663d22df3c76bde0113d8952ff304b7d90d7469e56a7f8d8307dbf0ffeaf98038b8c7587b0f866c6629d65a570ab8d938c8370110800fdb1d678ee36991ed148d5316ba14381f82a92e7b9b779ec06f01f2034af2fad74822d977d939d1b05a6161dfea40d210b48b2048c5e7e8bcfab20eef50fed1d6dabca6094484c873b50009f5e8f8bd9d7ba780fc0eba78ac9ac78d048cc8e9159d3966f92a6b4af6cc6053def4a20a4dfb5d3ae0a5b0abcfa8e1198c777c70972da2b0be23c6e387251bae95ecb22213581af104268ad26f2b0b70bed0571c8caa27285b3e54cba355d76e7ca35a29f27a358ea7836153068680dc8e147dc0aa880b0eb2f5953b06dbb5c36fe56382fe2511f7b93406eb82258e43cae398bd6a031d9ac2d00b8708040f0a005662e2077dd0f3f81fed095797292319ac4eae50eaa47a5bcad138e69ca7281c5347db7a9c763f9166b26ee062c404156cdf32ed5b0623c9aebd15769ee501eda993fcedf0d50b9ea1b0e81405569d4665326c6c5c416da343708340f85a5b43cb5d3f72cba99d6a08b51ed5e61d5848b891795ed85d556cf19184c541e71ca637451aa358f6f1c5c71d700799adc45a740b6b1e01c2c6153daabb6af27eb5351706f189d12415c12c0e7191a7b5eff99019df50126fc54219cbddd6e43a5374ed4a3b6ea721d983cefea13d2b13a73d864477f1fa68611a65a31ca0a42c0d32be8b88048c7ce9c7dec4380a610bfdd8a1a81119efe54f824728258b3ffd1c9231a90d9ede2ab15bd319b5b4163d4ed4b6500c89f094fc11532c2474d8799c0e726f3d7589d8fca82c8ed44e60bf2c28d42617a186ed695da6d8d68eb173e0ea7e910d9c6416aaf0e8625ae0ae28b240033954a8b18e98a47a22c4672d8b573892183372f42d320024322444ced76571883fa13c531a567b9c8ac755695c73272d4d19af7a5ba25071a570487f888757657acea98fc51e991c079b95317ae388683598fb1b4a36c015f53d399a1dfe82fb08751cf255275865b24ad4fb7bb7e34599d8c9834fbad0e4eaa945fcdf0678834efd0bab20df284b28cfb3e617e1c490d51a0b10ec573ea9f0437523ba5f6cc4d7fb236433a07b8db3fe410e7b5a82d5c32a9b8ff5951ca904c7909ea142095f1d3129bac2a000b044d9f03b4bd4b908af3e1acd2e67da21c1cb06f73b964710077219c41b3392063402f39017fd26eeee2dfc5ee41aa14e0b76c7601dab1773e2032864ff61e0aba817d9f07ee924c54fd9a70a3fbad1ba52884108af1e5ade4723b03af25c7c00dbf0ae45735d9b1325a69d219dcd628ec5e17419cd2137e972fef34583651c91faea403fe5786ee3c46675a37ae291caba2c8622b8e9c6bec1056e9ea5f0b1d2371b5c88fafa4b274dc00fe709edf8c8b4096cfdf2e8cf837f47e58bc4975e4fc4a2f194e6fe32679223019e4cd4da340e05a33cb4f12875f96cbb94da3bdd288ac80bc19552befcada7509bd7d3cbd06f8ebb3a918aea47526e00445499485e254df1f6a917186379b93ca0c6f77be78cc82d1d1a790f5d7596562a7432aac8fcd82f72c4173ee64bfea2e0a3e46e8bc4476f0788ee50ab8023a88aed979114081032ef443fd33a558ff71dcae330bca8b00735bfc0befa0840b9a6312ceb45d833029c601e3d6be0fcf7070b249f6dc608f5c82d94c5e7226ca0f91c819ede26c933707ed92406759cabdafa5cd5d44acc9780ffd4933b2cfd4e3275089a5b66c27dea84b58732ef60f4fdff1cae0c33baf34281b4d4951f47b1950a991ba6ca7181188b25b11c727d14d0b1afebd1fb9f23ce6c1617d6cc0f1e2f69e91ee9e1c563fc1be3451bf9c4d4d16b9c09922b759cd48eb2395be5b88fae5488e2f5cc8c25b126f101e5d46fe4122195f3d81e1c75e0a5789d8b771d540fa424197d10026b29be1698768c0b5290de074cdf81b620ba902fff80dbda07fcee30282fc8ed362492067f2fb19ec2d960631fd84110847cac33c1e08ecaeb2c71b408e9c21bfda184547c4d98f7bd94620d25d03ea6bb0136adf66dad2203aa58ca3e57e8fbbb9a9c9c15942a64143278e5f7534d56481db844b359b6f579caea4f19c458fede026942d30364bcdad7ecf44c6abdb2bc4fe0d0f56643e217ad4a4da5fedf86b9e89abd6999b90c4655330978937c3358696ebd84c3bd49420eb97835174d0facb90a1985827c4e129b5fcebb7c1d3f316664118f5a67bc5d9de4029f417842b331b43616685e855e472c77e5938f54908a62c61931184c3887a26708a105254ef4a016c07c152cb28986f44f85d6b450d801e3810db06841dc14854dda1c1d82990af719ebaf632f8cae0fc6297fc379b1dc2f069951c2e41f466d75510bb453ad1409b5c266b580905b55e470d64e19c6bbede506254ad4be29b99f16e224d2b7c092ab2bc5b6820ec9d2e586b7c9613172552765b425d24f978ae4c2dd7b28eacdd249261d8ee01bc7b63ffc6efb3ce17ba0fe244391c6da7acddb67fb4349cc4ef4cbba7883c2e1ecbbe63fbcfe7086bb920d82af66140bd9cc2693880d260f48108dcf2c43bd5ab61eb211622dc90dbeb59ce2d31211480da29c276d0adf1730b2c58d023e8e23e492527cb7f3a574abc28f4bbc7faa9b53429f9004ece5539e02d317019fe34a751c60681c54b2e7d2953f585b5ece76169c3cebe415d8cbfad3e279b83efe765b3961535164a110e3ebbb9ae7fdb8844829195c405637af0398e4d5cf24f4fcf2b156522ccce5ea4ca481162a750d60444d08192d5160a5360e8f788ecf7108c840b1724adc88352c9103b07cd9b019fbe130bd6354a2153ccc12084740c06afd3cb0caa73f51388dd8a044a3869d2db617afd2337a998b2b7621d713d25fb285431a0a6493d34365129fb847444ea9195857424add1b4e2c86d6d191086641a51056d6a11c6fe36439f2cb14498a65922967273f8da102e2d6a1a8fe1a6a88e243c2a9bd3ae499c46b16098d88c70327b58c893edafce8b6af10981c3f416ec3aa0249301c9c2fa730feea7c2be002fe4e9d50f5a82d1f04f9fb0326c8a740488c25542b666c8117d4fa2f35c71b1977d4304e3c4e67fe4da5d03680a57dd4971cb2b807cb7c64632fa66272cee33c4f8c48164a4a1625831a0f75251425486b7790dc2c8dc0345cc411b9ec2cbdca4e80cde25842bacd95a099fc64f78abb4eb55de47a18f4291c82db5952fc8b2c5a12a44e0daf90d97dea6905ec803a6cd7c77d3010f091f55691e39d00b947f78b040fcf6a687c6bf32f0ad0c8c8209e7e5267f36bd0fd77080ca732308d51fada00e76594f84e6ef4e7eafdaa8d5811a5dad83f4aca7f34b4e15d0c0a8d1c2fa1df651adc5404342e605675c39f06a21be8e0aec494f2d5654c03ab85742f793e5fbac03f982fe0e00306db278bab494828caf4165ee88000d05491000fdbe61597c2051c36d91082606ebda875f3801461e98a992acfd717aade6e07e90887e4d527cedaadf8c98ce3598b4a2b1edb9fa04dfe870140603f86691006efa68a18873aa6cbe73841c12fd839fc1b8229944b8465c03cab7052d03dd30c5de4fd3d900aa17d133e8e02d443e02e9175f98cdda0dc699a9234499c165bc71c9d3ce29f78b6dadd3874a78ad35cc9dfd489e223bbfcc604375cd74d22f28d9022fb40470b409cd70714e573d79653b38262506d2752d7f98135130c8b51d372ff3b9ef9f6b7ba3d9fae92ff4dacc5aca88694bde6e6752c6640d8484a90d4442fb81d3742bf93ed4b1bf9dc6462208961e27c0e0540224c422eb63f7ff6d7100b6119c5079010c91a0a856f10f8370b98189f2722a79cdcd5112dab448e01ea02c7c6147aba0141c79aa72119c5db1b2787af96679a2b0e93bfaafa7cfacb27595a68f5cd4592aa32d94238d2ebf9b15c8445168972fe10f7706da4c56916906554eb8cb32c86599f9378f4c1734027d515f8a9a0c54f3011752cc84d62332457721d1ac3499bc1b86668daf9ae15fc26ba9f34ef5ef2c022169d0b1abd089eed42c42a9d2adc9d8284005aa659fe5de05785c6c2333bd56f6ef209e72736d86fd6fed3a25e1c15a1101b1f82c54df56820183743c1530f109080eec38ebe3829bbf40ebceaeb16edb84b02f8b1305401d2f5fd20d1d48fcbbf7c4ca1021a6264f7283027aa6bf71ab160e6d5e84963ffe331402bec72880b0c1652241a8168ae891fa888082202f24f4315f2f756c078402bf8fa4137ad215dc7660d1f5815abd3f772e44b87ec9c55880faf1c6ad94a08b001605be05017c57fe7c80cdccd2034d2345b60484f6deca432460a110df8c078d271b1510ab955751a38d7d08f75ff905d0c593e5563eaff73eacbf672fc245457c3496c51d83b85bb8ef78d50d233663196c9e7d12d462ad3af66a4d8fc93fd91c75f569e048ada4a47639faddc5b65470659a286da958b4315f62b34238a8051e1d6fadc2b6d1e5bdd59106c06d6d46e4c5e8550878a7da71e5042dd06bc509741067883c22207853a8a260edcc9e3e4b966ae346a78ea62ff3df2bb501d38c9c5705a6e02b9ead276d4792ac37583eccc34281f4541985c33035d9bdfcfe29d49bfdddcef5ccf5dcee287aa60ab3897035adf9bbf3b2ddc12c3e34a7eea8dd603438441bb09a1a4e0eb0b78bfb2011e51bdaef438c94731b20a21a7e605e9f6432a24af26b9a048ef27e5a6940b946fb688b8341962cb9c690ad458c1b6e639d2fcf24702c53b6f24c7b9c9dad9412dbc6071189cc46eb3fd0f0deff56ee9b3e02e4b10d8618e6e45b06c7701a1fd36c543e7414e655488addc9cb62d64ddb7444db00bc2db09be8c3cb2ed971a2838e5bde3adfa9c45f1387b03b151d17e22a54e1567038b4e93f2b992d1d4d96ec6dd349f02826d52a68bc814622eb00ba4c76a9cf5676f3fd435d1a91d39bdba82688faee2d85145435bcf4d7a429f315123690c5aed07462482a4f4ca01512c6b1c98751fe1104ecc3614983895554226dcc36917aab318e42a087c1457707eea207690e88c372408f72da76994f315f5c1c59882d3821ea18bc4ace0a0b462d69b254e0dcf889f3ef595644822e10a4f745aae6d9a6670c9e50bd8b82772b3bbf2f293d00662c42223ca22564cbcc05364f86acf7b04464ba46078081c68bf543994792256ef1d4a9425f80ff62b1b6366aeb2ed4e598f107db6ddf2563f3d678f6ab54b4afe398a690b6e88d0a305c75b882980400a589d62ea152fd59521173a9c96932f882f84b94d22906258c5a7b6e734219c231e57b8bf6a335d3f403516b8e76fd554d46aa2df5f2d859d94c0b68125850331d33912ce69bb11157581ab8e4c968c643b1ffbfda320cc2250b325bbf68f866a83568c5c1f3800336eb7839175f75c2ba226fb599dc3f7d8f0591b31355df3a76f111a99b0d01ed2271c79b3e739ab6c771db07a5cf9abc417969312bce4833ed6dd1953882fa2ec5deb2943efb6a4de888ea0f959ea42ddf47fecdd2458cce8c5190fe412e238336635f3732af159329470a0aacc476415984d42167053f37af03bd3fe0a0e58a689d4fd9dcf0d86be3cd17de2fc9dd32ee879a0d2d2d934f8dd5be9cf71c56301964d42755bb592ae470aebbb09ef6d4bf8ae3b0c57f94a810b90c48e1aa84b0c6d1f9a41839cd03c71a19dd6ff0af437c6074dbc3d43cb136f5367b8adcf9acfc51e9af710150206e8204a8963aedbc4aa1cf0eedec9b8e912b1bf1d6bffb0f1a9a693e90293f2e18875d2801600201cbd45a743a9c6d775ebb3ba22b2b9adf2465347201d14d4b055ccf1c09f8507b835f00b3bf0a2f0ee4448c2f7dd22d006b71053f1aa58d904a76bf8e9b0c3ecb0a289d8d838f40bb6495478224a744ba5917950f28aa038b46515aac4cae662e9b503c5809efc2a944b4b53f2112a3dd8e466759e5a0df8e798d92413a72abd057a1e122f167482d927d0fa238fa5e1d2dc12907d0f9f6344ca15505daab8f3c89a51fffffbd8f8b5798a26742d46004aec41e096da0249f5eecd6ca91174fda594bbda26d17eabfadd0b9d48f936e92aa24a904fedcf4f7f90b9c97be7b5790d5f1d34d0c8f00c3aba90c85e436c2d1ed5c66a060e63eca44bc8264b932ed0a8bc06c9a2309d654933e03748a88dccbc9b0540bf46b1a014d531e274503117097372844a4a9682331dd42a079a3d496df1d26b8be6eecfa8ff7ed3ce581e7461a6c19212c7eaceb5db662ce6a84dc242222dffb2f9fbad3025e6c68d9dae59de5d5b8c77a69337cb2b49c1769e23bf172503df22d9accb514b7dfaa00baca9e4ad27d2fbce2ecbf5737c9524c63cd0c90dee7a0e9faf69c1eea48791ed24892539611023523160a4b6fb9ef218fb88149a78d8d8f255840f0031604347a31528fa68771b9e601fd9e25de810e7e5c2f50c953600c0192a2f6d7bf951cdbcab41c6bc2f03c796cb72a7643fd907d9b0271a82e0258c97115f3c373e0fac4c3ccd9432da54ced53f115b1fda5e270498fb3d3aa642d85ae0c0cb9bed904d58fbebbf9a9bc31c83853ae3a3c5420a082f04ae7bd17f0fecd7d4b0e114313fe5bfca44a7db26df46756657072c51e6fdb8aa4697997081de4e351184da116889e9a3c650aeff5284fa29f6e4fa0e1a98e5c3827f4856c233c4d99c438bdb6267e8d427c119a5632e5a2eb0c5bcda3fdf44bf9cc0c3669bb7190b3e90f5f8b36631e69a20072305307c390ba84d05394e8930bb0ed8f340d852ece69eb02dfb84624a04b7817859b6700b04c38516ecc009166a5f6cba6dce9b6356f9807b226c2e4af970effcef15b23101fad6a85f0feaa3cf5319e85c57b46fbb3abfdb5e4cab1386c687e86bf9e589d3f73f0854ed449038613a0fe165588763a9987151b558219ec69c8c2e12c4c821ffac7d92f2ba3148a5864ee40fa54a4f885e05d901ce860a2d3c3418d4a4b1fda872076d87798bc50c23131a87111f84efce2992613c96b0e6853546b2db31ecee38f17ffe4437cd07450181073126d17b3f4992555a9356d79f80ed3414c12c476e9ca8618afaa87835e65bff89c9c85205122cee49a9d374fa40bbf1b57bf6e93a0db251598632e633b17f0ed1ea3da90f14b1976bd48b9e2ca0b9e6b0e99ad74abe966050b3a62c59071d917a4474b230e726b286570a08cf3192684a7a04ecbafd8dfaf3213def68c98a43707970dc097871ca4c0a00ae3b23c54bc5ebdc7888761c1a71be3b16100961dd6f420f51813171c9b735e9c1cb2b625eba895611c91a293e226e69f8676b4f6ab5f3f293d0f2bf3b446fc52047a4a93efe2d82572af4e14348e03f39a7c3c770c9ec012f213f91d7101424952cebc3bfcf891e2507444a2ecdec194ec0cd45acdbfbfda38615b5af52fc8f63642e6806d932f14b811c2e61370cb2a0a667debb691a40ce386cf85cef7c30d7a4c180e393f2262685d023ab0ed731044a4d07a17a045c4a30527eea6ce6fedfe4f602b6e9eb759ae8094164beba86510e91e074f48400ee4341796a0f7862e9cf7f651695d3d1b28bcd786bb14d796628714f35170d423a2dbd42e38a7c03c4688e6004fba2ef8c19f8435dad2dba9f31cf4b928f0ac67d3c9bed01fb0c051f46a849ed93e949213799b8c87a880445ca3aff9715572dc800c6aee909a1f5ab58c5dc1b425c1914560fc0ec04048c8cfb46ad67d6b20bd7c51847e5b54769fd21fb72d3f513c8b00d9e0785e7fc54ccf210978804ce5ed5c606f2987d50db2d0e37bc222ae2ef1cfb5ebcf776eb06e8ce449769c04a5f012b30ef74a2ea75d4ddb10dcfcef208c32011dc967c0bdbf772f94f134a3a570879ddbfcdd77e81d259b78b82221ed9fa038124067919ff0bb944b750d0d3a3de2b305e7cd2a3f3297651146bceb41e6988eec9602fe7634994ea475258d481120676d7017236ef1a42c26575eaee4e4d6532caf34436be46ad6cdcd0a9fe02ee32da22be6f8714a750b4d9fe3aca522f0c7a65d602123de2b5d1c41967e1b30b3b1239ab89e242eb02495cc394ee90f15fafec6343830d9d6612e83ef006478abad04083c4622be3f18b2732f1a7760f297febc85129b1fc86d0a1c01faf01844906fd1d9f162ec30a5a1f5ae75430f4f80fb9baa25c16e168109362c14affcaa18c4570a5867a253b9342d039e5ce4550a358d1b730f261e901367c75e34c2c56187760b56fb577426c10294084e5d23ce7f82b6d000e9633d75db2820aeaee1661f13dc35a27bfc9f43472aa65a93eba4456658cebe0e8badb16f6d6b4c1231375175eb8c739d4e2c23d78c4c9b7cd7c6e8db362e72ce593f46ae250e9900a16c11dc27e732b136f5abee192f9f34ae4af6dd10cc0e1956d8bd0f412a44ef23be1657fcb987a6084b726488cf7af9a1a5797568db9b261009ee32367c328997f229f2f65c1b14b837ef0da6eccf0f2d2f0696e8e8dfe6cb05e9c220f3892fe58187194143c6647aae61c56fbd361a1f661946841e9b1c6769462280259e82d56a1f8ae1a6b380f7f4f0ee807ed78486afb6f63b63d63306c4383e3055e1cddd1c829231b2d6f0063586552d9594c70339ced1306e9c7d586be6beedb2b8c0da2e36675f687c6985a2fd1dd4038989245b082753d4294e00deebf9245866f2d116a65b74636b8b26ab903bbae3a632299c0dbdbb02268d9c044a043c416eb7edce3fd528a3eadbbe3db71a4a5f5289c02e2184a35dc70a28d4b570a0a66fad4ad62514eb53d5396eb42e40e7b5ec823360cb11113fa083819364a2cf6cc39009bc6db670702155f46f3edc06e7db64f62af05300ee800785b2233369f450addc1fb1ecd3c9990d676cdb01bcbb70ecade46031104568500004f76cb1ef9d8dea2f875fb8dfcb950e6e6dbf0809e72e5dbc7e840ca2b0118362e5ac82699e6b44b5dd7a22d17298d3f529cae297c59c655fcf811d8a93d81266672e5674b83ac22964a29f44623b0c31fb616bf6a1cd43dec1423358260cb901d5d0a5cd82685d70122be4b640adda39de9368e2aa007b6db20402129ae2539983dd8ff1bfcd0c80438f5cad3fad1a0657240586856faf80080493dbea771ce24f6818d20aabb511a8929e687d47aa3fbac669e3e8d4d759cc85ed99a1d30df00ea771626b990e01037af8db815cf9a6360985ef5d452248e1148e6190bc4d3798d584975c5a8df97540115b8ace349ac6c8a581e668971a5bc70b599eb21f1a1419a8c252ec21d92aa8cbb5c1e919f04cdbfd8ae7e9f74e2785a330d440fb15271f92f38f0d73679496dc751064bfca921938cf771ca99d040c9e5c004163303984d02df4bb00ae05fe60e41e6b47f50d030304d41d8e68d95a96de0635bda0b5e066a7c350b951538402a5825eb7aceebfb9af39bccd4a225997b572bcae853262e667b038473af6654d0421cbdc9e2bdb97246314b2dd1a1deb6be4c1a16ee5e3b37f3b0e5c5281145c44e8f0a7b8ade3abcfb105158c4e166b558f4880fb8059a7f08e4d680d8110f2ccacaee6e021fbaef1ae704408cd1b2f0673d4f1d8c921a770eeddba60c8a5c3ccbc5dbad71284dc46965c421abae0aaca4d0c5747a5c2c78350bd77d5022d5b9bf8939c74ae589f66e461e7a6837738df0804c7934d9abdf11327d212e4204f4683ba205dae8d8337e5bd0ddcd3f433d5bd365ecd78508957ba037b020353e932408baaf8473b6c685dc0a9f6f8112b4c911ac6e726be40043a382fdd9a7b76ab66a257037a3bc18352b5ded506a6ab511bbff3720598bdb6a80a8729743f173dc458c23db6702be746da9de394b2215d5d653028667dab66c509f4ddfffbf6c23b91176e1c11bf2a3809fadb7c4ed285cb832a70fd71f9f95b82085f3834c091671bc00508865509e30ce4a7564ebc6b219d77a4aa71026700eec990e9b2c860ed4015223f5cf3793435938359432ea00351205ef574708b507d7c0b033b4f51252cebeb08d51d2074d0166d8431209f6e459007dc7f0d1adc1ce1ec390827494493d7c1c6e545b1df9518cedca2e34b3b99c08a75161dbeb330ad8fbdb2646cfad2ec818009ed75e095f0f7d2179bf29a0416970577c1977074890688aeb6d3b493a071033e7b6a308b705c436131cb230dae8c59fe3be194da4004bf76f5bd121c2e86bb0c5b3eba370a7b8a35027a8100066d685452f2a3000eb7901bd85803271870eed92b5d603f2ed2a4b688738f07ec46d36fc09fcba670d577c5aa06c5852462018004869e8b6038af4dbc4a1c2ef4302fb63aef77956393a65d9496e86ed96200147eb6ae1e374965e0edf7683667558a6d9363c2716e16aee2e5e452b7e202fb8180d79cd5ea95331c6f1793f27d0cd5e115945147b7a86d101ffcd2bc9be146d9b7e9af887ab4157fb3e1144b0f986e267a2cf575eb554ef454320690e4048834929a4429a1dad10217b2b118e5af33665562c393bd1a5b047e3ed8df37c5290f41c693de60e0718a80621e20a31c38457ef2688662d2ef6fba06e0ca67ba352d2fdc6f6c3044b358c552df214f9450453cb8f4213d01ece1123e28ff11045db4397d1e3cb5e2a897b4cf80792c561d012fe739959554800082f40b734d84bdd72452902dcfe39e7a2db7c39a05aa822af9c2ab1245384a8342af5b418a1ec98fa2c99f4170f5754b7395bb0d79d8be3f628c44ba11a7306f8c1fe08cf8557f6d4b4134b818bfaa9176e49cc27020854a0979b5d4e407ccfbad616c6fa9e8a3eccd5f9826414fb9614030e8931668e39700e2021592d06a780f038fa77d01b6cbd494f21ee92d0ae79033d936dfbc0b3bac6ddc7d90d1823630a5964139a0bae069d93f0bc0c7c38b41ff6fce5b5e4ac223eca4886161a1bd32fe72e757a34d5b3f3fe1d8f28286c9297042be756e061d3ed7328c5bbdb5435b530510f4b16cd62209f93029fb94f7436b2f38751b8448c1141364e415df043931d745ec2696969234567ead03e214fe1b3adfe12cda4fa5fc045766fa1a503eb729e07ed852dca1c768e9133799c60df663297cefcec678e71ff6299430215beff0f56fecf7a567d1b4571ac5070f575d5dd1cc74951589b667d7cedb816f667cd30d66ae37a694c6cc118c95b814cf04078e6a4495b87daa57c86b28132e37f2f490b1488fad562810371aafae8b3cfa06dc5f6978d0413820b4215e0d45c3be916c6edece886540bb5df9904e237c8434e46d2e5cb1b571e9c27688a68717e1545a187ff37aa72cc5d1e1c7b7b7c43c1b0308701639ff4b5c102300e7c06c4bbdcdd001abbfe51947c951aefd1ec4fe1ddcb2dfb01fdbe1d30cc81f36d37077404b7fe4a130e68f19eb441391c36d2b4e1749417293df506a393b6012b049ad2566260b18151987529aa104b85df70065f7627a54b28fa1882c804aaddd97c8e38d2195d92c8422f883b30c060179bb6a5ae072ea8ae7d281c3cb7bc1ed2dc3e45d671abb692f9f594f942dd384153897ed807176be5b0a076b8edfb3ed88d5773c671fd6194b9aa791a03569f28fd102820a433580a560e6f3818795b16bf52b016df376121f5e691985d01edd994e007ece39b920a563cf66eca1bb67658835e1747649cbb9222d1d8bf350f7f774c95e79dbaf3e4a05c18068fbae6ed1401d8b7aa2c682c5b757a35245bdedfe231710885b22e10d1ccc258bb14d21a6d2d72447875650c8fa65c545e8fbfee0cf5cf8d05979976d2b07de09e9a18e8ab136dd36fdd330b33291e6f1c7f3ca2fe9958135efa5891767c3feb05013b64336370e9dead91e486f078f906589689b3a0e1ea1bb8439ce03ba57e28fc798fef115b54a9400a182805c65099554441aabcf264f590b2e16fa004aaa45dad80909fddc1c098a8838245bd4f6a92279606bcb3ad4525ce116c5dcecf021d70fa36895aad7e845e62af86f411b5bbb0b6dc7f0140b66d197d6a2f09d41b4a49dedf92c9ec095d6627652ba324a007115ed2759ada1585c27a27333d32136821d9305de52108dc0b462a4ff69ee18b7a1a819b18a2f1e2dcd8b12a02d83e1424c13bf519725e019959115463f88b113842b58ebf0c1cf4b499e01d869f7871b7cb5b1ba72e5edf0418d7822cc6297671328cf553a625312b893fa6b1a0ca01bb39c03cb22a57b15427c90a92272e5c115927280512581b06ee7413704a85a2ffdbe3c7caf9a0e6a4cdce53e3c2cb5a3eb68cc9401c17df13fd5a9f7bc2adbde3635dc57768ed24f787670fc94844723a6842b57c217257ad6e62919ad8d7c3ba2b80ef66e1f9b8bd89a280fe99d59ceb4f386194a81fe1284071116cb1ff5034ee7cca60a85a444a37f1851975451c0b316af2295615b33c20f9990458bfe5fc926738e21617682bcc2f207876dfec46b5087882022bf1667d3e552528aa10a43f5385a13820dd1906dd51f2a4112f10f65a264326bc1f313844a9bba97969879a71bb962ba9ef126b0e219351ab72ad3a73c3a8da69b2fba8f9357474b9e276ecd065d105248ea4a51fb9d0d94b3f5ce9ed4e275e06bf8c730a19ff6335e20fc68562dce53ef7e4ea3905595f654edc78c2f4522af5cbb0fc2b1364b3c647c37dc4014ca387ef67b7f7849135fda91452e2d22f163ca13af4f94571b7a7b84122aacfe759fc11303b90435a8fd0e14a784bb7967387f053a26af23740c342db162bc754366482959e9006b8fae438f263264010966a78b7912cf97f2d186a74332d707fd4eacc652f7bf260ded53a4a4bfa4e4fe3f2ecc9864aa3db254c565542b854035d5f95466c1a940a69aba5ef9991a099ceebaa870a1ff1a6722f4395452f5e7b55d4ca6c328f8adb4ebb5a2ea986c8be35f27350828908553d24f1e4f6915c27c1813ad697cd3c8416a4b5799819d284f9eca94e35b45829d5b5019cb61ff89cf2c583647f4ffea2ddff2099b64d64add96d5ad11947a561e5b6b2fea37c5ba326edd0c17aab8f8917417af16f9d33832cdf25872b719fcc0a91769302fe6218663f1e9c716e266b4223d1eb0547190f6b0bd3e95b13670d16d61c9c6dcfd22b728083158346c8c2df89dda7103498d69a675b23445b61637038e0f7d95f019584537267a340682e04543fb4c6514ae00fd91c70d661dbd21f20bc5c8e1c7541375842432daa7e68a873c074d7ee4a757e186aee2b4ab847db4f68d0fb1479c1296ec5c19f9a34759e60231e3f17ffbf6c87bcd807d78c6b3700d8f7f10ac51e8c62fe7c1ffc797a587d7f4d5471fe53f5f4e666e5200264b4f14bc0e66779f0a60c295babc78e7098e7e74694ff753ee56031059ad161ec58d710b88aeb78c4fa4c0066902b73dac0e8df904aa871017759b31bbfdba6ef7201a0ef34ce4cd5b9f3846c0d1a6e04a9e425ced20a9493cbba93c99c00034db62b8dd7b5de2eec893c793933d33d6aa2ceb345e8b24004a14fa35abb2077ea6951fd551f3d60982ce712d33b8bdd542bc1b23d3d4fa00fca7f5dfe12fb1fa87b2dbe863dd47906f0c9eaf06c449ca05895946948fa8ffb624bdee8595a779d9c138759688996a49d7f9dd8fd721504956a791d1ec0e050905d5a183eadee090a03b0b50395343fe6bcc1e5e0cf774cabc5fef5f427f2aaba3f4a5d98ee9bf45453ad7415f76d80b1ab89d187fcc26a7c8def22188f858778a0974dc0201d3f2c0968783961462e6e3988e10435fd784a128140b46e9dbce51d4f22ddf62b7722d08731a71e093c08a2e48e2f63b5df7a0b81e8417673c7ec4cdae5f4e825a08ff1d24d61dc2d368f0763321d723e8cf5c14b3ea17e75b6df6e2d477ffc893fc46e8db7c0a3d46c4cc362d972df5fb69c21da58c319e828ec38fb5aba439437b0b25875d6cd5dbdfe0b0a29a5877d781c320222e5186beebf075a68367188927f1e4523c66dde2ab85997dea14783480859299496fa69ddb378bd6db6f8a99e85176f408a4041f5003b52b52bccfd46fbbd9b2f2ecb44d726771a85d730b2878e6df90930038c4d77bd520d3a88c0075a1452f8a1d8925d68e4ba28e84c2119080e73c59d4cd90b191a377d63871618b0faa0d4d95127c35164cda9ac1448794694216bfe6527378142d094ff752a799196e02d5260d65dab92abcfd06a1f5fc514d6a3c29bfa232678902a846245e857f1026bda3db669df81d22f067673b048163602da9095e9440aa2076abff25cfe324538d4e332a61ab7720175c8d1b56f18adbcf65d77160b2a2576405c5dcc1e78ad9fd34b3811c5ffeccb59a6c1a35d79191c083d4b41067bdef1acfb5c06e0c4b13736264f226c1e535720b6b556ed62cbba7d0c69388a701570e3d84799eb6aa5d658959619c9d131fc7bce812dc7892e34ccd21274851713151fd1fefc1609042dc04689c2d326de24e047f5bcbaddd1a0cea89dfcf701993ed813bc3e339e1854852e7c89a431df29079f6e0b09ad19552365668f08d662d3a0df9d6fd4544178051cddf7ee203fc9c0b4cc83868f00a73323f51a886a75f55768ff18f156dd1480bd5d0be730248c1215c415a892b87f49a84757b60cb43dc4b2b84f5694b449b184039f452cea9ef62a3b474701ed3ff0157ca206b139198b4b1a667079e1191b0ae5185b0ada5afcea9098b5ee033aefe6cfbbb4e2e98fe353c39780c4f093beec87502ef93fba638364bad083cb40e9a3becebd93dfbd20bc0d6c3733f07d9d9450e21f14041e10113d2ca25cc5f770d3246bdb9676fb0100a8e026b3e6a1f24161097df5abf4bd1730f5925a9763b5a034ea9468eecc5057f944b47742131de870577bb922b2ef8726b08e8973ca03e3bf725e94587865a5f610728e4d8888a44aecb3f3baa3dc5b5fc66b48ba516e1adffd361c86bacd56ac20172f78e5fc865788ef0a6593d064db049c78bbc1c263b2346778f802d0aa3061b3a7718394c30c02b9d51e13eaa55a28a56eb13fd0cef0ba92b3377ef93e97728d0c13359e455c31b44c2a4012a77c67c8aea7da99154dd44fa59133eb120bee832df2f6a74cdef9692729a2012eeea2a33b6da74e72a188857677609ac016b6911da52a7625f1189f64d7852f5492dfabb4b9f6cbb8549072b51c6d7f320775691c7f4072a25bf3ba6dcfc925ef12a19ad47cf696d0e4f0454769328f37d590ace51e1f88c777e794ac798026ea029e86276aa61836e602cfe02c7ab84b2fdc5d2fa7d802378338c0a10cb568a40c15445b55078594a0731181af0dba620c4ebf94ec8af28ca878d6b2fffc50ab1e85879d15b8b98a5c0b2acd6e52a86600dc500b8e2274ec53e74cf0517b0dfd5fa3a31ccb8ed813c6d7d2e338187b4bed3417880a1c8cbc50dd8b87d8bf920785975dfcfe50c8fdb2923daf63debd20c22ca027032ebde5c680560a30c734f5e4cc3733aee520903095cb59216d2c30283c92fa30e85545a258cd131f64ccd85b138e14d5130fd4116489f650fb109caac3b953f2527c28939312539d66ad1dea429f3aaaba8b407d0bcb0495374629d620f2bf48a628be8aaab9fdcf9d38b8adce49e9c4d152424dcb52a094cd3d2a21f263ed427b8964df65548e5fd42928fdb3979df49c033a2c412be51f5a20ac4e20f41314579d974f8185e59343aba569f0bbede5c4f8fdb47cf077044f739e975c2cf85f989b0e5e590607737760ab8a2b1995094d2fa058b2e94419491c3e5e0f4e00af867dfffdce5e81a4ee76edcc1df295e1c8ebe8667630c23e31c239883411f9e6cd317f234a52834f44a18e7a954ec64abacd49da06b0401dd4ecdebd002dcad660bd106df7b3de2454429566fb2b82633782d82d346b9819aa8d4972dcb84b3ae1b46fb7db6c732a98dae76d7887f04e9158e2a311ecaaa9325aef4f9b25a634d97bd8a55e2f792774d8e51b6f3f71c650c3ad7e3a0a4bb80a23a48385bde28881f7cae1f41b16777282f355261d1ad0d77f0a1f00916b517eb514d870b1be2d9b4a4283a560411b961a9efd784289b984aa201da1fae7c5dd13b3aac9408ee446b12f34eef783225abe6e4ab596e6de4355369a55872c13ad9a20a80f0da2d1ec370bd3ff00d54db26d5eb86de420753d21893a893739536a30ef9fc0d0bcd363f79e57804dd5240609a7a06305aca5cd95b91756f0ff46fa91f88ff73555f52d2135fad329e1f52efd6d668bda9d1445bbf91d4344801c3b3fbb002cd5db11d5339aff109a36972b151bf9b728d9db57e8ce6fd2dc59ec7763ed3772abe1ebc085a64ec6e8013af560660fae9f7b882a8b4fdc557901afeae60bb1f049a689a787d32dc80d0c30e6f6c7b16e2d353e0f4dbe885a3452252b46d92e543000ae5022ad82b3f536f150e1bcff926c447754cd132d7a2c3d5972726b41a4f43fe33a4f31b860559f2a5d7b934229be002fbcfd7f4dcab89b03253bbd521f156f7aaa565417c06626e99a573540a93e0169383f7d6346056febde43f3f24cafe8195b776575e0f6017cc7a90292c561c10c3ab647ff8488f86fee0f58bc4075fd848e8c998c2c5aefaeecee9365c0ecf23eebe43a07ccb5be3a07de6d31c0be198e8c449f18d6695697c91bda4cf255c4619798c11ec876764cd1057312960fa12679ca70fba455d25e13d5516817fb540b26081f619517298b4bcd4321dcecaaedf7b8d0a1b2ea1501b35670db63657c3f9fc0a76a7dcf392650fc022a182c296fbd3deb7e1f9247d5856f364824c9b3c2a827674cb3123f90af346d3633b72409bd025ffe588ad54cc1a1f9e451f5add929f7656a647970542df56b659ebc48dc1ed4bf8d2027f3d6f01da955f09b238d07600a888c3c5ce4fca4abb402cf5f07e02b47a3cf3bfce78f0cd92b4d20a173dd9f06a5cfb33553c34915f38d4431043d915d75d3ebbf4f37d67ab6956ebe2108373db75c238cb37d315e3247decc80468803e6872123d637d045467943d3839e6539b9ab81944705576daf348325882b3dc084e079a220921c02907acf38a5012b8b4575477f5de904f20073d26c29b75fc880cd8d8125efd11883180bd1de7486acbcf8e5944d3929ba3611cdf7800e8a4705d0edd732642ebbea28eff65f562ae8040eca83c7f22f02c2ea28d32b866bb3097610ba567bbc893cdc86ee7613b22fea13ca9c69fd133d801902132ae4f1c1d546b283940e4f6885bb2a18664c6a851b8bd1b8c0ea18627b59823438d1ba334b2b708352a220a46b67eace37ba0c4d3645a7184aed1b72c96b85721aed6b2b6c0201b43b9d844e190ed8582ea61288290ff5a31c91a66cf2390b0bc884c145b8fb9a22a97ece41d24390ec813761a1758f49a43f31683d724cf0ae0301afca281d9a1342616e263a1f7da191e60e56350571a0c0e9b0fcdd63e804e97973e7e142b54104a83db1002d5409c45f6c2c801efde5858ea1fba05489782f1ed2c581a641b731039d378e13d45d2020e4efbdb31fe106424e359d4419888e5484f5d5321c97fbf004328c11d2a5ddb7f8331ce75df3649c744a26d1e89572bc026106a88889ae95b98a80caf7e9699bdfe630c9fbdd516e8cf5e1a8247d1b7c88b9b29d4bf2bd4b62285b0c9929c776d873e1f65b2ceec464352fcb8396f2d10f841aec596a0c6c23dc77f7c0a6aa60e7a7260a5ce81f3d041f050d04211140cb1c346fc1ca3cbbfbf9a3e455469d36e2bafe949f6db74b16899b4c5528a773aece66fa5e6f95af07446657afe5dad850108bc891cadf34f3510340c905eaf01ea73bb85e61318642dfb8d6166b64b23f4ace512f7550420bf9fa30703029f4216bfae78c92145e20ddac3896b0f02e69cf232b74abd6deb9c48947c10f685ea391b9399299d739daa72800e1b21d6d4aad7efa7d22764181f079302683af183a6ef0b3b4c29f22950af42241bda92efde7270eab20b7730afd04c27bcac20f12e860e125b11408540acafbb0d61dc0ed7bbf30903706c5ea3a82642ad5324503cc74a89c4c4cb9882b0b8246751a2a50ffe62f47454e7ab75075e2ce08d3f136c032710963d46194a9778beb1f3150851674ab9818427072884b3498e45e58c262f3c826174cf58e8f42c38c53a15107015ac588a923eff6ff8b0a4d4f38539b3cac57f5ab26c8ed1a635bebad941d73bf15213b05fd308450ce6e48854ddb5b876a4fb2fe41590f046ca85a232fa84990903fb9bba63a88673b7867f825bc587d40e8ec00af4934478b4750f8bcf7fe63e062284765552b5ae499bd6c237943948319ac0333b188a579252c3e5b5865fe5848060c46a753001317a2ea270e0b3701551ff0341a320d47ffb538df7f3188a61296f2b965ae16923b3098aa572bc372b4557187969159af4e30d990555fa4d86588794dae07cd91a2f43f4a1cdf33ff83d3c987015e5c8df3b41a7ce358be43234d875f8029a12b51729f35a1e337c2ab3a746c0583664eaad692454c68a837c67fff0eaca563f9e029c0d6be1930382e6cd9d1f52d0872d600261c239938f3ec8726e333cc6fdd1f5506e08975290cfe75b6b30b16fc307df24bbf4081a12595f5321197f07e2e628e05f29c2ba23f87369550ec9bb3c789fbceba266f9fa20ec2643d553b09aead48b3a59523143cc3ee2c1cc7b28f16152a01ebde30918d65d55594e98542c6253d90df0c870a772469d82f88692c27df502373ccd2aa6e2eebeb44592a313bf4309c4bc968af8069a29b53b9c863065caae2048296010a6b3e09e828c9bda5f73fb64ce0d2f5690fdddcecf213092906bd340f9263ad165c413ee173c2539177fbc3a8cde1bd8098f31417c8b454e8b6356567783dbcc4af43157848243a271280c1e11b1f0b42c314f04243a6003d65b9b0aa0fcd3ea5892b60f9ca75c6cc71a844ead4e35749f16a6dbf525f0973e9a5659d02e35ef9ad2170915600824429a31105f8c7c811f05715a6fcb5c599ecb7dc9daf1dbd75479293a25c5c3ee0369aed0e76c61e6bdbcb42f20f0d4d278a0c83935c4da83208151bca5dc669354c271c04db9ee93493a797b2700bd8e39383f3c45fc040c86f321045d8c85059d4d7c72f23cd93d2a386c53fd4c223dbce93a00c35628194781bef06d4d03e42779d3443982bf1e0cd57a245eecef8531f76137174e01ac2a22b9c47aba0ad828c97b6c4556e3a8b22510e9174259d9c1c1b701db70be3d5f176666a653343fae93da4481d8e9d6cf702014ec9e7e0b533b3fea3ec1c73eb965b4b397a78785de27dc1375a005995f646ab5f37af56b823c958d5a5abc02d8e28285c118c360113b60de19d028c77b6c20c3d66785b454d0b35205ddaded46fd6d9a5d705c28d29235e01ad799f38953ff1c7e552851c700a5bad2def344e7849ecee6d1351c5b5fef7ab451ec44807ebb676b9178085f848fd21a6ec06cd67f9c155decf22d3899aebade5a983d59ce16e9799a1f51d895b265cfda275a88ce1261fd23b881792b9695244c45d7704908bf25d81e781dc46b725cc50a23715c03203f747b563c3be5ad540e3e9442b174f0acc291627fe0db266e5ae410cd8be2753b27151100271befeba14cc263247aaffa450d298a0f4e501dcc3591a24ec4bf59f45093fdac2da1744d2b110af8e6c7fa34aee255a71627c689511c605b053595a669e8fbe8ba51c1d10d44df94f3257cd9e4f0a515c8f3a1540e3efee0d8d779544cc107408577ff5ea41e39200d52754258706b75963068f490ff751f9f0e58402d93904f2f3361f59dbd979f715383d3b1f460dfe715cb5970061cd3b39334f3ff7e73255b27672c592ac59508c7c037a5c157644f7eee3a721c05f88085574b2d16418b3093e54576018bf04b1272cd101e2bf0b7594041ad3fbbccb141a8414af42ef3ace9216ae152204499c0c6fea71186d5adafdd6d837d2c8742470a06d7359932d16934d5e0f7462a8837f8a0c3a854d3be013ca25138d53ce9897548f9803e19a1c4723c47ff809093b9a6bcd252000c860f506c517787dadca55ecb5814f06ffb076341c33a69402c264379d633c56e844b60b3cd0710fe68dedcd25fb99ea785501c3aed156f6c51a1e7b0cd40938217e236bb5865e4f04bcb129660a5b0489e60615295d0a9af0d1bd39a821e73eefea234bec3902db6e32786392a13f1e978d34fa5134b200e24731467f4e68381fd35d647937c7c35f0a2bdf909a8e3f0a50e7374aeb6e7d1fd1aaa5400c78062139588396ae642c80a3247aebf3e97643d7c3147813162e90ffa961f3bf460e688f807af95067364c84f0cfd8377ad2946573a53221573342c2520f53147de7f624c454d710bd6bd00f1136189ae4012e6287c4f29b80e02bb308498c09823a553446e94393afbd7420d7963fa9f586a0d9e11c803b11c11f313203ed06274fec9736731c752f909767fdf014c430852fdcc54648ec0a7d1ab2de6e8f4974ad57c1f334b9de4f0ab75d0fc4489e7689fcd1ccbfdf52aed35e205bd91f989a15836c99823228a2d72c073cc3193ddbe2b4a112a65319fb8f8057e6244f896a5398c85e5a8d16531c7bf07c27319abc84fb01f64c21cb7c99940b5ec192acc3e1574cbcb8205f8945b967fa75e70bd147018081d029e4401e2ac88f909b3e93882913e3f5c7324d41441ea7065f8bc21de7dc3caa62b25c058724fa032d913fd049cddfa95d51f8cb17f6ad0829b12836d10fc840cafeb09f560801445c461b525642b935075d4edf4e127c23c5b3d542d6d8c9524d4d1fa7c9e895ae5308e8f2a078df635a0471b97b143420b0329f72dab34ee838633878152af3e6b7db04ddddcee54cab058fadec59a8d6333607453a8709ed9d7c7ed96209541c95187b62cd5436f2e37eb0240ac7113c2b5b69e6cb33ddeb82b0ca04862efce2ee18cc45286c714c6cacb269ae284b3ba6bd2ba623d08a1c26543c1cc451cfeb8a8b0304ecdfddfa6b3255a195d1339364f9da01c1392ea86d7861cc4b00e27c9d57f3f380a4fc73b45bfce8943363fb5c21912ab0cbe290c8b274f54c609cb75c7dc4e4f362af895b93316a20ac3749f7c3190e97c0a5ed49f199059449c8c9f99afd115279fc18163bad5be866b357a769f4e2d0c633ff08adcfb0968edf5ade6c943f265c840f233a834d4cb2d8996b999779b92022c56cff6663e6073db7decd73a7c55749de29c494b54e6663652cb30255d4f7649b4668cbcd3958be058b9b68f0cc1e8968e75c57f2b0144dda2e97956eaaab4c8ef998736985bd82c444446d37cd76ad55318e24000ddd1ee998b6be5c328674748b70c34114e3b16cfaf9ef9f49e86deb5d7a1ffe7c86613b132fc66fc068798bc1c0f9eea963663bc23a5cd747a64585840cbec516213edbc44ef00b05b622c62796a8d6b011962d221262b3f9368917132ffb4daea1403381048779e2df371ce60267203331ff46c7f4ebc981d576503ad76c6ea151729d6878ee3ec191f4a5c689c0f045634bb0d5d39558a29c962cd0712e448c7f106e970fd8e79983ebab9e8e9bc14c836dd0bc7f1c9665c9c7fc7b31051194dd329a5f2ddd6d55945f67b151eef642cb8af2c8ad929a69e2a812aecd8f6e2c818f8556701af50574869bde0e5cd1af8b09f852ce50cdbc3c9a852520fb61aaf7dc2478b64b317fcc4978cc994a16e8ca18a2e88aab5b319632b96a8c66bf498f93887722b4e032b29963ab1390227d5e5b3ede133acd4d4856ccdc81881478f61b59c4eea6aebbfa6fbe22573b49182d269a58cf8bc1c6f894b386b99cc60991c7b0ad16d2bdf0738dfe6900bc4c7eaef2bbdf8e1264ef97ef04597ab7d2dccf1e39cddeace31a6c06026da3f886e7bb2e3ffdfabd347ec2ac6f277fcb08f1ead49f9b409ac51691487a09c9499f94f9a0418c227046cbcdd21cfbcdd5f01e4ce78543d1d3573d8b64209a9662e98d608f5a9bf9b193e61eb484f6cb947808b1fb3f535cbd3c30775239f228a66fdbfa58a4bb1d74a1ece05bacffeb205be509eb305701a5d99bc722b416591d5671feb9e5fd8115ce522b93452920bf1b9482f123e9e687346e2b37937d85dcdcfae6687106a88df06d79e9c7b9834c1c4302b784cf5b05050ed834c7dec6b9b7ba4d54b490c0a5805fdd96bd2ce15cc5816e1950f05a7692774d9036d65b6c8719c6f1ec436a90753f4d9b9ea4640930c89c54fa840515ac841c09d5f77b080a9754f057fa03138ecdd7e4a73477fafbf0cf67c23efae9d033507f49723710902194f9d09844c8848255e11710393979adc316fe0df9e7e9622b1adf9a07defd712f862252ee97b6902e8ab4b0161b24e940eab164a443db9c2390a6121ac6b28499017e9d06e5987ef8e72bc6577502a3444907360fff46546b580d052e86713259906274a4787fd7d7e9474b267e75196ec549673554c559d4dd52343e3537381a22b45c647f508433e990104d23ceb552f187a7f99e16b46a8737c385e29723f577fce2eb784ac8bc5d9945ce8a09a9eeae46491b34731e45632c7ae9209c3436b18527db920ec4c5470dc8bebafb73862974f58a51bb086fcde8c7fb53c53e5c00275bff2976b0c7e772dc5ee3b278e044f5de55ecae603536e0482bfb6b5dd14f2aa48574681bd81ca94acda9ea4c59d9d8290b99d01edca2021062e2528f41a81efe9e75cb44581083db5f8dd3973624e27b291ad8f454b3daf4632dac52482159a12c39a67f565102d12bb82f03c8c7e3dc5bce515a1e5ad430a54eef06c3ee384b2dc45de46612ebe23e83beeb563928d47d66865ea8ab6ab1166028ae92e686fc33b511fc08605ce96deec6c5bcbad1a75b86b7d6445a7113836007b9e89c6b1402092a1d4a816304d1e7b5acdec82572f30ac8aaaee055f3d1cbccd95143ce402f217a2b12674e825733ed3297ecec0709cc616743e974f1c6e1c1e00b81e6e1e25519803a632ddb553ab574f24d38d3f56dafb8dd91767a1b97e1a6415e32414261aa997f4076fb70cb190d130830dc57093ef0a9d890429a8b45051ed47b45ac0f19752697aead8fd19ea8f3818113af70484b2f2e6d6fb3c084c06e3c2a608a64d72cbc4cfb9cfcca7dc65f653ae66fa29d799f900b74cfbccbd4c3fcb65e69fe49a099f7091b9f9c43c5f5c265f0cd31b70519a4f91148ec69fbb0e894ac445ad10fbac31d9b15b1e01cfd95bbe6a1b4881666e970e64cedd396b2e3086c4aa7e57f347fe66ccb7c284bae76d99e1781387ed0f82d37eb59f1db50f96182e0b8fb9a9308ab8040e7209ba07f62e5dac9afc7dfc3435be18382278a0e4facabf00b2592618f0643f6d6636f05fdeee7f54e21fd1a0bd37d8eb6700ba636648ee4f6fc85faadc0fc996393313ccdf56c135330dff0bc3eb1fd5ed479649373353efbf750345c5ef3d8c186c4ca8f05cea40fc9d7066bc881fbbca6b6626fc1f56d74fc4db9f5cd6d936744170c0ed7d665afe5786d05faadc0f0d93373313ccbf558333330dff8bc2fb9fabeb47aa6a6e9aa03ef123c3d663c04d704c58f82fd310223a606648e49fbde49f190cef0ff6e537c3eb2fe4a1e919bf463c01d99a1935efaf4a4392d42f8f53c6cc04d69c7738dccc6c9d5dba1d7b56029b8a9921323b41d134560842dd9c67332ecc4c648cb7b5f32bcc672672cc85b34cf8b194cc0c09b4e52d6c6b9565a1097c570d20340332cde3d85c6ff51cd1213892578e89aecf8c3f18516c666cb383a9061e0bfd74a7645d3783e34bf5a0688933d3b3d8f91842fe5f99ed4479588f7aaec0c0ff9887e3a3b38171cf8d7b4fb124560b8eb4ad81a1f8bf828323cb10a4a2efffc83535520eeb5f48080a4e84061a7ce0d89021a01deb16a4d9ac95960025a93df79dea73ed966c5a3d0edb3070d63ba2e2c1806957f308345f237f2150f420011534f39711c33e2c83abbd62485a3a41e0ab187808b373dc455aea9970204ae75d0a50dac247626420cfcc3117a14ae04834beeaf33dff6e48133886e847d422832b19fe64a5c36b1870d47f852e217ba37f870821c363529e2bb92568d2a4cb2ff901bea9ae6c9e6bfd47e8171a225533dce02842e98e9519e6e2612afe15740bf1b05575c8424748e593c043d203e97cb211d698a0ff091d426d4455d141308e11d803971964a55db857f45072d80e4c9ffb9eae3ac84a657f9e0d0305b496f1248e75ab45219ae6ed4d17f00523d9220a167d33e6d07e6fa7b45c3040f439039ffa8e7587e70cedefe0da96b898d4a1c5ef0731e6105b6521d04e6f05e42f51396c717cb1f55693e112f15c90298bb04178e93f662a2a41832d9ddd1b2b238514b4e2f56c0cbe1efb0f0d60ac180ab4daedda1901a6bfba604b56aac0fd74263060606602240327f62e20568c896c5849698137a5b355766f2c0b9859f5978d4b36ba981ef8171ed8a73485e9d095fce958615096335d7cf16d43f7a59c080f402eb6374e0a54a8cbd981c889a30ac661072c6b84d005c97ed6595f22b78e33074dfb64676e9c0d642625ffde96ad91983351ded0caaf034155e426e38118fcd069f2091585338565c8a0df70852713bbb2f245a46f6b150048ee6a1c1014b66d71623d2a6a868bf733966ae70c0ef3d12488bb0d80b031267d2afa570f3eb56de529910fecd5ad1822d5161d170c21008b9e03a5b4166276430fcf712e7a94f24627154a6522d34c07926c7c9f28b21bccee4a1e4140cf9567de353c57f9e2461065d632ff9ff57e15b16252af493fab003de8b923c7230680b79868e464be8ac3253d8dc247c8e1fff23f28bcfe27ce94d9cc683a7b8bc5dba449b862e2df4cf90589c502312819c62395bc4a2ee8c0c8dc4fb874a3ec9ae6f89fffcefc7bbe72a60d3346e31074669ea30dc38d2e5e33cf6fa5281488a568388cca6c5b19702040c2cf3c8efeb9f51d129697cbcbdd218a25e8f10fa5ca0b075233f46318864a2a9abfa15632788c0680d50331b497a691eeba96cfcdbb7cb2848195888b1d99b6a8d5024193bea61f44c1c5ee61a2338feb6ffaabf0af5c7815eef5456aee33d22bb28e9e753f2cdd99786de1c66ab1b8e82d8b3ba4df894d971536e97855c7836b34a90253474da5e48236e09cb9942eae7f13991fc11ae1185b702e15f981d1e1565544967096cb550c814a4d61685a57cc919d403a365863078901704593e5d7f3c88151e0468135057346048d10c4f917317eebbed858690e51629b94388065cb7c2ce8b24d4a76f5c1298e129a4919ee5e7365565d0bfd7d83a9ee8dfb89f6ffd0752f71dcd941329a4052ebc6d4481cb3c2c465cf36764aa684ff670e7eb537191f4b3b8152eff31016e1632e42b0088fb17bd73d566c67cfed1fa11b90166524b8519689e400c98f360c976322bfac60927b5e8e042c9e0e1dd6afa23b22f178ab65759457c13f2400dd70ef38cea75aae4284a93de07101d74ee7bab6907f9ebb5fab4fc629c651bf6d89e65c4d3abedb598ba327296ed87a8949b45c4a3440dbf33e556d5498cebef33eaafa9148e0c47ad48f09caeab3b255f806e3fe3260d1bb10d34b9992d5c5686442b79712c39a5946391c883482a1c32766086ec1ab55524768db569c1d3783f0200829daeca0bbc47ea8df352f94ff8712f56fad621c95a0dc0cbca0ad2ea40bfd252471cca3fa2d67396c9d486e6b0d11686ee2d55ec62dd77511eab100b4a50ed802898d2837aa3c80de9e004c031d7f27f94b6b26b04d3646219264c01cd4c8d4cb0777838df749d10e7b65984393bf0ec10da9f2458d1718d8211d9a0d78fd4b2c914423adac99ec245db6d79d79fd4a972c6fb449155dc7e5aeb9b23951c2ce955a45a62cdad5ef2b769cd5c7066a605dab5ac2e2b53b8ced0256a5b0d005b41cb7cbc818f32af64b7961007e1a24b83ede67e6b53f166b448ec89b814d19f18196a5bf6603e375e7e606f119637d0c954d7d0b0e0abcd0b568c7ac1113957865dc579e95eba85d32356dc623bcbe721a73158650b4a8119a4fe1708704b7ae70c0a3485d3eb31d19ffaa152522461ed9e1b694d07d56bb317b5b2460758f61aaaeaa0fbc79da7eeea42df21c678be2d4eca595bfd8a4f86d75eb8ec2570a345952895073a69c3b623e7958fb6c9a7c9683488288df4c6e68f8c329d83a1b62bc796ec4f4c5f7704a6c5b24d77ed501d86bc94abc4676756646d86c0c16324a0c06e0cac6e4565c4060d145f7dc6e140bc3a0051616cff5ea5ba6ebcec7f460ac37ab3f914d72115ef95057f83708b34cd1a0bbaf642b6143a78def01ea4923f119f60e28f290e96b5bbe2ef2798cdc6ccfc8783c263cf9b29f136483b30be41bcfcd7efcbbce174de76aaed02c22820f5edc499d8efd35d1aa89ad04d59296004a5805f30705882314d9b58adefea6477726d4ff895084b20497b9bdd119b5967342eea58254e65565264b2a72c652edf747f6e4be5187f580ddb526011d21b3038a21edcd0b48402897f8e0c2edcf34c406a12ddcbad6ae50064bec5387125b52663e1b6a701d93898255b18f8aff4a311115dae30cf7dadbba95a431cb80877e7949569504b07d8773d0d834dd477251609f9db17d85c95138be0349c9d0a38ae6ec36b10e736c68e58083fe17394d541e251fd4aae37d6cdc967cf407d5097e67cc0ce612066b4850b2c69d732c23cd09ddea92c5eddd0ce41126ee00c60b9b1b3156f7c8a211dc5de625e51d42e6777a5dae752162e45a1f4400394d2817a761741c15574719556a2c004c2ebf5bd93be23f6b0c4d16b4b4e1ce05f62261a12598ff79a470832e3281b3649d351bfd16d3298e36443bbfb3341fad950d2a5599a0f21aea3276cfa93b6304d82036517a4e71bbce9b104a2a608c08b3f1faa2e57b84259d122a46a8751cfb353cdb0465f4fecf4aa523e3939a7bd7f76104c002bfead31083ad6f62d694e68a6dffb47af3695b72490b7ac00b46001d7bce3aa5aa0503b758a0e988e44374ae377810f8184d418d123011770574783bcba2e7a44faed96802c0c8fad13a8107e87e9d726bad1d23cd2f920617cc292b4075af3a2a59ffb33c1a826b970240e55fa20760a902450a89bc6c23dd28eb5ca99666b0f00c4158708c1cb947e315ec435e2b0e56029dd1e5cae3615e079520ad5207754e7fb422e07166259635d767b548f457d57a74a44a9276b0cd2b28fcd2e2aa916cedd18653d142eb92c15151e92b89a2517f02b38870b198ab00fe55ea7b89b02f23ce670ecb51ffd50db70993591d66203988336a3f23dc952d617109fde9a4a88aa9ae0bc9f04bbae443979e27926e9aa0c213b69f3a069ea5a5bfaa065e2c75dfe04b3060fcd506ae1cb480cb84dfe98518b2f2ab4471699f5f3083a2408495fa2e7580282d60e16ee8031c070b0952efdd50916912a3a4436f84120bba408328f4fc939e99288171df942d9a78c71d2267df0dc863e39062ea36311b0a06ee9918d73471044e1c09972ca78a70e3ed70a01ecb587b295e6d064b8320b61b0a88ec9d0348df851aca24cd7ae13ccbbb14d1c7ac6cef7f173387858d4107410c880e63a7871dd2513b98b16502bdde23195110bef88f100af0d494ca485628c16f704a4a9ebb8ce8a4f4adb88a28e6d25bb0ecc925750eeb8be299477813873cbc7279d90670dc2e55cb4913bf60346c85d87938dd62dfa6690d3123b7acec16f8617bf4983f68e9107d4a0c90e3d99524a257db781c0aa6848ec6a588c2fc57ef23f11430a3e3619ad91594f9dcd8a4397a0f23b4e8d855b48fc9c0a5f758c09fde03d2f774415a2617c41b4226b27a30f831c9c59b06c3bdda44edebca5e21a24dc61526cdf0edde51ec46c60612cf3609103c7d9e259ad8846b1d3ec9479c3cb713d6b47be1919498492490e7d16931c818b70ecedd27b8c52f4146d4eadcf6d2df5096b40e28df7b39f59c4dad6259c569d7a9948a0e781fc421e6695b2f5d288a5545bf7b543b2aace6b826eb2d9c3b0fe6d9acaefecf851c92c3d0f0744060c880a04a2bcfcd7b34f1456854add556a98f6017f0285e491ec696d53fee98746660b670f8622b9e840858c3593ccb32c7badd46b062a5f9f9199d309b100582ac2f2948b395ce34c82144032671457646958c7ef04fd0b27c3268a0073f6057091e9925f423b20ff721354c3565ea0592a825cb0792b24b3bac0adff59c27da1136039a792a60374994b75665df6a96542e8c4c78607bce14384bb03e19ff4478a50dd5e63e604257c8cfc59efe0c9d8ee4ac16047f379aa8e962e2691050473c18791894287762a5fd3d4af6acafae3c7bfdaf85ccb216593c5c7cb300d6bcdadb2449cf5262cc4686aae4d770723d29dab6342c92bddb8d1c7e44ed999f8e397fb4c0ba73001aba0951b1829c0418e1b9ca44f4d15512810fdb93f7a86fab7ae8ab0ef88ae12aea5bd9c976c87d391922daa6d1cef609405cefba03e260e598a2cd926aad51df1c5c4b22f5720549aee77b393cb7648611ac46bbca0dc044b3a89f4c3566436e6958b5af1c745ac336e040dcb7d882541a2306c32071df0c28d15197f6fd49485034ff9e318df6fdb33b2faf37f475e4aaa72a948d04489d21b01e9f2708f0e278e237b1cbfe3acaf450c7e2916c1300f5244238d2ddd305b1bc07ac9110d5850357d38d02042415469be7d247304c1f23a511d8a6c65f1a84f79e074bc1feb11c3cfacb6d17fd74545cb30e143c6ef2676c8a85717470280b59a343a06481a433e1ebb6991613a31034d8d5bb42330ac30bf6ed1823e7320fa9fe100bc008c340ed7e90a19b3108ed15d35cb3a5f60723e4b9065c0b812393a2530c0cabdccd53c937ae547cbe20948ac30aea7a71d13b5bea50e10c900de3d12bac6ce8de8aa5f961a5e0f14eee09c31c34980ad8ba9cae9933e7619ff94b50e789f2dffd2dfe92dfefb75fe3fec2e582b1af639a1c2238d387cf1072cede4f0054a7c897f8e57802c481dd912b7559c0f58d6f0833426ed07bdbc4cf0df208e72cbbec5bee75411f39ba1023625dd62102cf81321227713d178e77fd8adfe3d65052331454bca1256346582e19c210a256e6e77f200ab66f485b70cf25f2963f061e752aceca527abc0a542f90b1b9d9b86311cb5d33f94342d0caade32ad44567e2240cb970d66fcc7ffaa93a1f0c5f1582780eca9091f9f0b022fd9c01bace3c80cd2540d410ea757112ace696b6c2fa960c131c0bcb98ad40298d56ad212b9d5df340535c882e530d94b03714c52ce6a62de20cbf7fa2954216bd875518853ff10b911568178e3d65cfc7c684a2f7886296260d133299c4d44683a063bf21ddb5ceb0e04e2d7d15d73fd357813539b625e7c101d0c81ac1cab11d206f57bd91f8720052242b77d121989c22cccda1018c4c0306fcb5ad08322032350060dae6400c7590c9dcf8b12e340cdc9d0e6b1d97ac60b6640561f1b66540afaa88be2a5a6caec398cb5dc4cedac49ee7bd7ff50014259c008dbc5ff1b2df364673fbd5de89598aaf148f995f6747780e210c1d6418c199353093256707efb4c77e4bfdcf3f0ccb2683ce4fdaacfbbf7d9fabe40be18ed190ccc1889bf42488a0eac7b65c10148ee79a0af6a6df31a98bb0e3011382772670e5c55dceccb0e4126157b7f5db3ac5110bfcb20de8bf18ac69334b71326f73f12c36843905db4465d39897451d456446eecb6e3723a0b7281bf209ab1d84d803cf4509678b9c75e0926c4a2858690c69fef1454e876c83aa18baba95364ccdaa15e743f24a8f186946fd5cf5a507fa4ae822009e06df0903a9edca8bf3144f0a5c11768bfa4ac661b3230c0859207f60dd5db02b500f0156bd9ac383fed53634b84656a2f9578fc6ed8af4d4e45f13ea2ce3df1f2f5258d93aabe6b526fa146ee1f76289251e7b53daeb549085207930a5f7b5acee519844c8779e8de34532e177606a29a2100e76d8035133caa334e938b2eb261134a3003e54228dbc238c0cafba10dc4f53dbc4ab35827ee4d55c033c5c80ba50da58cc456bb1f193b32bdf30fbb9e5714fc1491f3f1ca775b80d8393b2d577153a7e6ada84f627ecfaec6cefe7fb4f398bfada85cc665c9742160ec7dc369887e12c1c6f846924dbc00b708f7c54acbeaeb6a08143d6f4d297ae29c14467226961b0793626961764d3f1f4ec1ab266219d7334511bf00d65a036274e053c1c96d084c910b2675affd5230433f1de5c6549a35ca1ddfcf2bb17209650485c7bb3e4fc9cfc33f7b0744dbceec659da4c1d701d7d15983047403348fc4780d0e6efee46c73d89bc706f3be915ecfd944dc463c7fbef97a54fffaab7e69470a253728580fd93233b79c02e0efabf2029e0f766ed0785fb12feebefcea5a591fcf2dbc1f938ac9bf35855a7474e72aaa74cf8d8281e046d8747a07b83494cf826ae57724869b61ddea433564e23338b3ae1fa324706c1d8c3be4761a481c2e8577098655ccb88597aea46512f560e4c07381f43b81acd5f2f876c0c7ac1d4ce54fde69560edb5921e1deb1460a641078345dfd86cade47837ceccedba671d63060302ade9815e57af82e5e4a9a1860283b1f5b62bea4790b69ef29da123e1f10e165895b0b40485c2b9e5762a429a44688335d19eb659c8fa614fa6ac3ea08b6ec39a40e2fe5722af0fc120c12413347c8ce436f9c3e51f1e0cb51fd4e18918f0c40fc9cd272a273b20fbe1b2fe9f1b357a4f506157d3ed67227b0dda224db045eee5bd27d06ef2bc1b0a32a34271573375cddb1ce3032df90dd0844b7a658f8ed824cce9a28dd6c12c1c850dab5f6458c601ef546569d589fc29e9f5874ab5a6c93d4fbd10646b92df8ef771444941fe74f093c9e22b4bf1b523d004df31d38bf2c5537ac53432e52aae5107878cd2258d904845f46ec8d23b2adb78688713ca7d45a33cdd4e96acc6b08617b6873ef56d61acb1a6488d93826bcffb2308c92e408eeedac07a223a6abaf92918e1a4189c8122ef363c7b62b32f519220041585eb89b045ea13c1ec343ef05ca46d5e57cb6747969ad74fada57c83acfb9600794c40cc62178b18c42226318a4d8c62154bb1c5284631940b05e944c426166289498c6212bb18273684f31fe8ec8135dd603379b0d40d17927c32ee8d1a0664f802ba21de705c300eca9a0ebd1e86e02ab5efc6be916ece3075fb1a08a30dbd1f7dba23a8fc63e6a9b654fd8f718b5d17cce5f30916087cd608051fef8ff3be5e2d54600402e858706bbc19b1cf22b091b54f16af34ca2114d2f6de7bcbbda59449ca58079306d80625083e2c873eecebd7c5eb9ef778dd0b43efc4a07bbd188f2cc623bb77d6638fe7f91443cf93c9783ca1f6013f31a849a18e85b9db31f61c63efbeb72fb69c779773fb5c7bbb0539cebba71cb29d61edd3b06f91aea80a2a207571ce1adec254f95b182d7f7f6e4103553b548a39f1d3a251ef9972f2d481bcd0a818a9cf793a66cd5357008e1c94ba05709e86b5a75bd0403d7d8a63bd49ceb59baa94af550e4e9aa6482085c48846fd9b3f1a746962891b6a57983c110578a70bd51f0ee68ef5184f3f6ffd83b7bec16f3061589fb513f71b3c951208525610deb176d59d9e8126973ad72726b3cdd9e5b16e9c754746cd8013d6cdaa2b4c965680e4083529d0865c2023c410431c11858234b4d9e6045980a64d260668da98a041be9c361e2e10512ac28514821801f972da644db4e37a021b9a4d3bee107cbbabb37c60a5062d4f9496a82ab36483e7a546f932168402922e5154502bc070832f95b1ced26474c56b1243448f40cdb7dbee2c2a7ede9e687952a2688a9a12679078005f00f5630a33456ef88186303888a96458393f6f24f051a1be9c36d914b3c40d9e1253d60a0f47343182124606249830911f2150f08282292d5469610352d0d48818f204940e533c08a142c5042e4082876e72e262c483020a9c6edcd5a0208205c5d40a6413040e5d103b7420c8e6490bdfdf99484d19205ca8010716d03a07304628e1c4c4080d6d40364f6078f1f3f6a4f6ac9f3727673a302f2ee023cc0f2550c185165e1882043c60810207246e487505331c119dcc54f930b903e8bbbbcb0c24c874e60aa2a2a90928b4aa73fd5095244b0c384871fab1c6071c42f0031036b71f68dd415069f3edaf2e3f5cf876d1bab16b461760030a4c4cb124082866a0000bbef8b0c3152292a09a87313f8042b4662e2e53204105040d0b310cf9410554cc9459014b12475c9b259f131917723a9207288aa4c94245ca07d983135349615e382303adad95a69a95316abe455a37c6b876e972647be2e9dba375e319c60a0b456478c110251b869cc0207525c89325280cd1f406441b7aab81c963fd63691bfcebe70d881c70d97977b3697242c50e797a1a924447430674339202306cbd6e4f86789c9fb727669e2352a316458c0a42aae8c043055c506363d3850c1419a8121b660f3288e932a5cd982b50ac141e282456963039819397aa9b2056a08c60b1e14914b419450b4492949972c282206abedd75c304e2cbd833a0caca90215532bca003ad1d37ae3fded216344b687861c90c432118c2d6029722be389165cdec07051913a1b35b11ba32d7dd1ef698c1297e7637c67a8792a52b94013591a6bbda371119fff4d2c4989f306a84b5d6626c2db6d8e239bd1ba788a77b6ec7395ab7de75d676a41d7b66d761db1584f9d6ab3501281291cb577b04a033e6d31edaf3b3bef7f3c8b2c753c76e7d8af44b8ac969fd8e2e1872f9c1b7d71b18cc70a16a017b72bdf722e088d67bafb52200a74f1973ba7eda9ad87c8b86b34e189444f222a6ca8b99628caa1726d07cab63b4896c9720fa76ec356c0fda030024f70b5fa594187d754c84e63a02834ca94eeb0b32b9f45a95db638439f2612d11d90754099bd00f972297e10c295cd8d6a6bc46cf9ae1fb6cdffe21b1942e93a2ea74341293ab57bff19a268cd6a0080d8464af69f5346104912db02364294151826846a347d60364a383c71dbb4837e9472e7107617eb0df99da064cd4080670126aff6c4c84146094690d25b967aca5af0eb4427e40dde996b2412d97f83b1093e99a8ed570fb17a2a9a22a34b64669b8f74bfa923e2cf78241faf68bf4d55ae7ac75ceca513abb2f52c7923ad6ae41965cdea3241bdafad4efd1456a1f6bb91d45cfa39f3aeea02a975fd2977489bea46fcfe01675ccc9dab82dee498cf9f69e0d80e452d6c1985cba670d8408bf2f2e630013467b17d92aa57ef3fd322ab9bc5137037aa3a292a8f294a7fe5caa296392e537e4cc8daae447f4c38d8a32baeb3a39b54f197b8af17c5f9a00834ca132307cfb93078934fd74cab020502dd70e546900442ef38e4bf4d3ad18347d9298d24b6481b6e432f3d432fc5a6b68454b93adc9666b6ab26999b3b67dd7da07ada254774ab6554af548608ba36c988a82b151d92898be456ac0ce27ac1b5b740a031d6855fd69a7534453067521ef412bbbd68dd887683d66ddd1a9a48e089d5bc7d1b9ed31a59238ac63b247acf698b50b0a21afc89229798d2e13f2169197a8ee4ce9f6ba94c1743a75449a6f6f89c9540427993a7d09554c9ee425a24f5fd6a5a957b250b9bc4497e81609ef51374782236cdffe6a9c3b879e6ae115303b82e8db6b546b079042d6c1d13e3a0d98b420b3ee9478a75d472704ce1b30695c8df3281cd95575a79d7e3b9d344b0490239e68934669e83283903149b51a6dd226ada34620d29009916542e472da6635fac7691c592c465f7247dc111624a3a7295d9d742c7fa5b37a548d8c72598d8e6ebe1e556bd43e94d409c1fad4e16f30d02197d5886accd48421c28a2c99e368a04d1a97745477fa3e4dc965352aea9891e56c57a9d66a548db85abf20714a15a977da6334c925fe155a722daa47b6bac3810f56a9870fd4756ee05aad6b6fbd76ced1a6d87554ec9c7624b6d6f3a883230bb507edd98768ee23ebe0b8711c1e901c4144eb71e3383e44131a7b8066966439a2816005d1192eb4d91e587aa4072b4e44b459cde3a4dd8c9366c79b71d2f23869fd050faddab3a187074596a04003816703cdf31e60130d0420cd23a7703e3dd319f4e7ed3a8c6f53551877d77a386b1bf65753d91ff720662989364b70610203861e7e2ca95a22451a5abb4c4a7755af691f164ebdd6a26c4f4b4d4f9574487f01ab41c6162dc6b1450b126853b91867c75cde49ddf4cb6ef2d0612f5cb868f10a5b38e9afd7cb5f3ebe68e11af8acba6831ced7801cedbb70e12d5a8c2f5ebcd0f1f185bbfbe8a08fd4471fbdc58b162f9f5517638eb778e9bc5e2ffb19b018ab511a22a9283063a698b438759234505290d65035d518a5b2a9b4d8a8a8a89c18d5a6fa1342ef508fc25ff2545311d9386d66140d7332c859b182f582e5c249a72eeb699fafa57e72f6ba0dea61b7415f5c792be3ac58b1a2d5e2e5cae17c8d2480e0733ea7c548022d12c149667976ca62b158ee620c9d0c5df49086a1afe6f81acbfc2f9df0e52c5c47474767fa7cf9b8c2e78833b2a07385cf9aaef0b9a205f91acbf05f3ebdb4efc2850bb29c9e81fbe8c25fbc7077f0c548dd5fd0172f2ada98aee3b3da62ccf1d7d8b24fc50c745c274767dc117e4e06a37d16a37dd753ef1445197d399a4aa252eaaaa55ad335ba4737e9db2d957dba44b766abec948db2b6765b54a96c923db24696c8d66a15538d6a293923ee98c519b32b8f2f1f61311e590f37d6e8989002e655ca53e004471dd83ba72bb2dcf1ab902b5b7814dd1b43c722b81a75ec687de7a1833deac0de6e57b87d74601a6a60e8b153912c77bcd87ab0f18ed6ebdc08bdf3d0bbd2731d3b5afff98ed65fd0ad970e923a3e52e78675dcd1bf4320b5434680001d72197b1ad5f2dcba7a7e9fd7ead92a86e0b51666ade7590f5b0bbe5cd873f0d3f1dd7aaf630f7b1ef6aee7e1d93b1e1976ace6f6f9ca0ff43e8f3ee87d2238c11ef63cec7ddee7dec7728f8cc2aa95abb7da2a361804f7d35dafae73efbaf2452fa5f45e0aabca65cc5a1fe2a9553bcff37a9e620f6320fcf9d5dac16aaddd53addfcb953bd66e6196272603ea7c00d3cdb6856e3376aff4c81c629f98fe37524f04275d872950cfb4cd6a788e3d4cba0b014f993a06973efa125f1db32ea73a28c7d1efe66acde1382d25316967992fbff3d34b992a6f6d75b0d6567edd2e1285c8692bbf649415697bc77abda28d17b5fed6fdcb96ad4eed5b6a31beb76322914f7450acd23e1ed94a2de503c766023b4976f97487b50f0e0b9f18f8147356acdce5d315508dfa27039f5e8fda07c46335ea09664e291cbd43312b6485212b0cc330c4d8b55a852159822e1729c41a6b748cfa8ab1a5b453531348361309ad65c2685bfb4cf07330646adb84d164d94cbf846f56fe39e8ded2ca5b8d1d918fe8a7e8f937ae4af8becf591fa90374fcac9c9622ba8fb87213eaafc8122449e83ec759a409f573481a1da3188cb2d6d8032482937c73e3dd78f4c5170b1cf71cc4c171d04110c4c1c1217962e058e6073f1c7e7e1d638c41073d1cb37f3cecfd8087fddc0ac30745b2049d73d628faca9de5e06af49cb5f2582beffb3087bfce71c7a8c5f58747a7c9415c453c49cc890ce929a50dd53bb4a98fe91a982a29aaa651df4fed44e99196a47c928e519aa677a84309512f72d4418cd6148da135305552544e5f9842e8a7158d411570c28abcb5e10ab2177622e88a3ce8952cc332fc5004411d8eebd1398fc7648975b0ebe89c3a26456892756e744ebd2379785e917219c35bf3d68a37c2b71f8981f033e0dc732f01e0db1de15f8ee7f1ca67b51bc9d0927307cf57124b7159ea6eaebb29a597ba28277b0ac4d5fbf5f55b390e731ee63a6cc2a59d5f1ffd857dda6857ff64f7486cc2fdeeb69909f1b81c16139ad508ede49273d8925106e776b96a4f61ab4b2e5b2f87dd984f98eea9a90e7faeba533bc7531c03224bead767d55d2059e28fac9cdf187239b9583bb18c5b6ea7fe6457502bac5e7fd5eec64da7d8b4fdf688a9d75d5a2dd99ae123b7c38073bf07cb38e4bceb590fb41ce7c5f03aaf476b42b73ad639b52f170aadd68b62135a66b9809f2b1d05d11e1c2620f4eb20846e873a920034060671985b9ee7799ef52cc7d97b4799b57835d20f738b6ead38eb1e731683b00dc756c7eed571ddf3f0de2bf66dcff35915451763b2062dc63a3c0ffd9bd56fd4d13d2575783e1f7318bb3786730c7d563bb2736ec44d9b22ae24e8206baec420d241b0e424877ed6a5157dfad7d672012c2f6f7eb2700e8fe209ed733363df1a108727d0221f25a2b58f16e93e168b95a978a6605060ee82fecde01186b89563704e6b0e1e60d27c60988307d5541a7185c5a09bb0e90c6ec6b83ef1095386bd1df8ead472dc0d0e8e8aa8e94568842a34829494d00851522a54a8681f20590d3a63d703df5cadb21a3db21ad306a4a515b6c420cf5bb34e0178e0c7436334be4d353d09f44db8de71792a32e0fb7b39a7fe7d253df073f174af9c32e444f1c638d22aba268dabfedcf0f465e50e03f0ab854d0015cc90c39f37149a7c2ce4efe70d85239f52f67ede5020ba4564f0e74d081bec238b3f6f42a85a8837be5cd8ce89b3901cbe7441d9b00ce35688f347432e71e9e17c02b06b2130b6284b4dc222249e50982f372121008596506af3a4060b2951750b4235655072290b4dd57a673ec6fd336d5330c738bb4a5f4991791e2e93593fbd3001864856d1a553ca2aae704e19d7c0e5c0c4942632f8d30b132578eab2f6be781ef79e172692bce7b9e325a031bd33b3a4c159d60429a22509961cfef4c2049127247b3fbd4cb5098f4c491181204bd83a9d38b7defebc0139f3a5cbeb2e058c5d2eb2ad8fb5b546c73076b9c8ae3d67ad967c970be3f12ba53a6834c6749f309aac4dbb592c70c82c9fab6fd6159076b597b35c576d67801f001ea977e3c34f227238a5d119d45d32081000fc39ce7472f6cc416374c7e57924c07b4be6a053c6c4d873d41cee7aeb20ae3f12983bed54396ec8d4ef839576af724c185fc7d5e7a039a68c89c3049c960d93a76ef112b9e886a75fd298b6273aa59ee6970c10cd34b3aa464493183d3d424ae2e9cf922a3da54b4fa98d363da5f4e9971f2aacf89282a153948a5665a2a7499e7a1b453dfdb29d3cf5d945344ac596063f4df0a2159af8e3f622102b2fba679cfb2987a2e87d830b58a8d142c7530c0a33d87a1074a281371f363c78fb41e441320f3a280681dfe7580cfab277ab2179cf3d31c80bc2b66be314d4e1e7ec2c5b7f5f7f617f67a05dcf6ca2feba0bcadf17b0f9eb6c62b8316bb36dfaa085563d17fd9aa7afeef4f5a7694f2f5231c8b5940ee160030ba27821f34212351831c429099528a0f8284108c488180014aa97295cf80e66dd9f43a8fee49aadbb1acb90d2095e6084510c51a480185a81e807a6228208428729c21f6f2b7651cb010801a5f79bbe24ea2205116fad541ff327473da17d5a7cf51eb529839af9eaf3c68c3213ab3b75f577482e67d509f567d6be4a19765390cb59c58113a60c4a7d7c3d92d164a98cbde3c6d718c4398d1b2d08d69b0675bf7e5dc77557c728c674744bbb5dfd93298d7787d1d9b36737d777eaeebc2053a3289994c96435842963f5d7634d995ea124a0d4a87d5afc75ea64ca7862bd05416c597d498d2895bf3e29ad21cb3a767108214c18d7c110ea0f35ea9deb4f3656d7b311f903533ea0c2b367a9fc812938b2abf00fdc388e7f20bb0aa73aa1e3c0f11bc7a1c2b34f51272445c0f11b77000e89a33a400539ab3b77ca0f4435da0d99e993292aa8d1266d8ae740d74b7f5189e800983368121ae33a8e0a17455731e28c37e3ac3b3b622f7a197bd1f3598b614f11d769123a831a9931aedf14fe7a49957ca52c6ef97e399faab88017ef59c08de6d4a823146d5867b938823a36a887238b2421f4923e38969401d659a4776ce5373e6739089fb348d884b162913a20cc6791533b62d88b925d763d93d8c8be05ea754ad43ed6afd3225346f52bbb97852577244fac63f73a02a458dc32fe49f313d82b2970c2ee0df519069833463b31d09431b36cfa706ebd67fa741e45d5dc991090a23677e68c9ff1b3b65867766ccc3fbd4431f5d7b97befbdf75e9fa2acac0e5429ad15dfeb72cd921b67748a37727c75a0eb40976cd5598d5a9760799202a7f592839f31003067843486f55cdb59c45c3d7446932408df4f07414a67f4d018d6c3eac562bc8551c91eecf601d749a06d7e8409c3fa14818030ceb9bb7147ccc6f7979c46581a3a1d09d431eb331696ec428054be05b11d20b39edaed08ed53626eca563cf598799a86eaa9d73043a34fdc9ee6a7699e9efa0372606abd737aa9191f3dcebfd5a7b8c228577f7a06f0742c05306c0fd4e4327caa73c3d66af706add5faab784304e11b7540b207e89f0fd13a0729a51de6e0380e8b415ce7dec8e33e75db964e7b57d43b9f75475aca857307b707942cebfccfda7c8fc0092bfb8b4e03266d8896491d1cd96ffc86ecd1f24ceae0b8f1ec99ec01026a14051123da94ce6f30f04c923843b4215afff415255c2761e5b3c680e3386fc5189b621d9c26d4fffca3340ea4327deb624799a896a931882e05d1a68eb553c7bad28bdf8e53c8d6646b7aeaa8d6088480a87cbd049a423f07414b964042f7a09370c2eba064751a4b720921c9a33e48eadcc04f1d3f254da86fe77f0148bca480f425ec4c132733fc58520356d264852f616ddcdd91ac9162b2e54b980743abd56af51845c9e0e716344fd63851814bcae5f2264d6069b55aad10f73401f2250c8d969c9c9c9c10fb943ea58f0f9d41bd5d85db971be4704040346640338eebe93367cce756a8f25ba8c64c612106180ce6e3b015a0846962c397b949121316ce4851e1c897b027882861e2a408264b28b170e54b581befc81a235688bd5c9773ce5dd785d8ca4a1912295f3a95972f736d336f4c8e42365f863f902cb1842c21d36abd506385d4dab5f6ad5dbbd65a6ba5d5696d6fb92a7dd5ae47727516aabe947d7d2285caa4840887c17ec21eb6c28f2ff31928befd0970525a2ba5611886b5f6ac8690100fcf0ab6708a2f43fb03490f523a3829e2925232054d0a70bdd5564aa9534a9654a846733d13b2b29efad6ebfbb45b8b5768aa4f2cf9325b14a481c218374e62e5cb580c2b2071971c19c2764b32c4a741f365be79364f49124b1bbc9cb596b3d7deb0b5345d2e970b68866713fd60c92d09972f632958c2da82868c544fcfcfd6d39eda5252e6cb8c6609a2db6d4990fe793b22856865de9228b94b6e4d9448f3a402135fc270ad5eab0a4f7c198b01bcb179adb6bf64bd193df9323b96db911d5a4f6d98b8c0d66abd5cadd6cbddfde56ab55cafd6cb83a59c9f3715b07c29f37e6ea14ae24baf54e6cd890d77c9bc29f181258489111654f0fddc92e6ca0d4917eee796278eea9a1296292b4bfe0088b551eb395d39d63757875a4adae8a76e4f10ea1f9c221ced0f68cfd13e81f61d3ef9db798c016a9fcdd88d5c7baa437ba60c4adaa06f73eddbdd7ae7dad77ed675b43b7c50b333a11a33a19c7316ead8b4cd6a08cd84426cab4d090cbf05cd97b7b717604a6ba5b4d56ab56aa5b5362573080444a3ece969636b02aa254be058e85ccba2391697e348d7b5d5b5a69fe66d891026740931da79b87ec684d109a8a40166acb601268c66c07debe0e5fa52a0f0ceefa66c62ba5f02bdb703590c74398ee33892e3e8e52847b9ca7177c5cf9b11145fc2d6cc2d4e08f9b23502ee08d879c771d517502b9d62256dff10476991a7d9a49d97732bbba8ffd090db69cf13f9febc19d1f2e5b48538e4fe7933b243396dd3d69579da6a286026945d6ec4e8c39f372345be8c3d7149420915989c72e072f485367dd2c0391d97795282100c51610d920b4a3431044c9318c60c5902024624f111859423aa5e3812a688ca152a5b9ae978033b8cf1728605518ec4cc352d3052664913212810429b3e3f182232c41666cc1322d84243112b00028851144b4d1071518419255e5c20830e3ed0a6bbe6cfd0101f86b4c0c8052f4537daf4f9679810404d4d1018502071e25664cdbc15a9fd1926445bbe16f0e508134d6a518278a2510fe78f095a9a785183a689688625c01d58686e1d3861866a07b0fedce2c410f18b19236265a8c83831a40e159549814a0c5a50502689900c0e6acc30890209cd84952b1b153565b88dba4af5e756f9d25acf2e8fa877aaa803113fbda22645db84515d031f72e979445e91f6493a6a9fa12adf4e54acf14bf5e73577284f533981951327472ba455d24a4a52ed41bff48a96986c49de47c557b74d69827c75afba8766cd57f792b4cf515d29712a806503750b37eddad5debe74de1a5a59c740ae393ab9bb824d18d3bb3af5a1076bdbea0abb07b92ea423753cf4137b439672571c7b94c30debece5bcbb35a87240267316cf3983e3a88c19de6b7d38ae9c73ced935a6d60599ce7a4bce3bee52b2acb5d6ef2d4939209367ad3854b56cee6f2dc7b73cede19b6cadad5e76adb2b61356ef5b5be2efee770db1f539e7b42c7b2653b7ed3a36bea713c6a439b46c2fdbd66aeb6aeaeb42cf8a95b3de4aec3e8c5db050493249a66e395f711cc881f57a2b0b8503390eac2c919c14dba03c2d1e940dca7b6af2a0b00dca7b6af2a0422f0cc5a0ce434ff4bcee0b939292ae30dddb7d6112139682996e12135e52c24cf77e610785092f29e14bdef0c3f80b3d8e03416b43ef8372c30fe32ff46e58f966cc2caef3ea71e05c137a1f140e043178c3cfe3ea17825e972e997a0c5b392e070f3069be3460087e5038cc71e2ea723e29773b7029ad17074745151a416884e92425253442d47c9252a14245cbcac21a94e4384e56a327043f281ce6387cc3cfbbf50b41172cdc5a2bc779edbcdaef69bde1e88de28c710ebadae78607735ebe78ba50bc818118821f140e631202acec719773b10b1043577bb96ece4f0caafe45358dfe6ec5313e660367502a1e1be775140a049f0492a99db11b46b54f9eb19614063ac0108b628daa3f79ee507da1fa1e23b06285e41483ac773628ac0543d9a0f0531386ea6c50f8a9094381d886a18758f430e7814949495798ace53c3089a993d231d924a66e49a963b2d603b924a66e49a963b2b8b3a228ae70112da2453020d122a42f490ef915d322a423a38f2289abeec3ab9518e4f94a04a1bf7356088bf1f40923f8f692035a84c6e89bc2a8444db844390bd1d4880000000093150000200c08074402a150304f345dcf1d14800e749c3c664c154ca4b1248b81184521839421840000002100800cc90c55054f7011bf44a72013f881b50b596e13831adcb0411bde1ba6d8a785dd7c0f3058d05e63cc3eaec41aff765ae540fe015a17e3b2c1cd10709f097f8000713e77655ae36eeb9c6ed538c75a99c80b4c567751b03a07a6421c4d061a36042460bbec963befa1c9e841c7fa4f1684bd482ee4b2b6ce5916e1a2e10bc51f8bfd11ca3ddc348266cce601fcc66ea421a538e8215b095fc4eb516aa7000d467231e04545746f2341e2449696f92c990e6e45fb567c1c7d6d7632068ef62497ee3b388e6ad8786d1a987354a1314c561a9561538d8bd0f5c088087bec2f806bceebb3b299ba11126ccaa5eda1db6df6ddc798dadfbbcd257a3f1bcc1b8d863951c42704a09c8bc249efd1f20db9efe48ce5c04254d7619e2914ca49787980898a5180cdc2ee501884fdc51078ef5464312776f02098bfdf6a231f65b688fe8dac3d9b38e79db41b6939de1ed2b287ede9546d5987984b6693d87f48b8302ec33867bd365ac39510fd11c685cfbeabbe878fdc5a21b2fb17791fb82d7bb387c452c44ebb12ddf1ffe7d603e2b4764a859e93fafe10a895266189e69822bfcc78c779d35ccc5e015bfb38b17e2e8b842d624130b5c0952b5feee006c83a3216c63eb1c1879ed4859bb7defb8b2f359beddae9af8eaddb32d0a9fff576d7a363a685106631cc75afd30a93ad9aff7263595db3a7974d91a558c9c1f91bdf6d946e6143d4b20deafad23bb68a2473178cae5dd524b77a110f5e23565a6e0c61aa9a557e2db51b7d471c70600f1f30b71a6f0c0bd1993277f4e46f01762620d7b8bff248be9e233bf3da21d8bc4df6286330521c8d22cb0eb5f2e1eca840fa3047947d90872be64c79f2db5102b62681dc579466967053aa041cafa58359d5b40040ed91aedf806eef4b149b0f92f8676fc44f325151e8e2ee7f781ceef27b7d0192ce546458155dfa886504e9b2ebcf51b8f09f32e6717b7d7a7d9a27fcd2febcb5e58fdf996ce6538c7361a64caaca139edb3ce69690ea81adf9fb8a060cf0e213f2847f06246994b12b440f5782d27c26a61edb51e7429a0d7762a1393d41f03de778629e3acab32f6d150e8c888cd0c9910aa99663d27320953eb6487c788b98e752b99e193770e529016edf416f467a85fb2ca5590c6dc2940f86822499878946e3b2420adf36cd69e40d52e602cd7a5a1a13339a5e06aea45ec47f210b2779d8fe108dc83a0cb308187fe854734b676b441f82d515d4451998b38509b8d78e6f4683440da8ed1afa4aaca010d2e3a0e22098896cc3584f97d1a708ba721093a86d0799d1db9fba4f41d40892cbc31de90266a3c96186d7579d087fa1b34d3008a133745c8f28a6e64d4548d2eb6d5d86642f4a3956932908c639178835cc3c74fe54a2eca1885669c30d183a03b0e4988560e8b4183eef38520197b3c41e07c73c0c32fee46e7d96d585428f77ca88a68a566dcc64c01632676332685850d2c468d01fbbe9c26fbae2bf18a9616d043460eabbb41b1cce9f7989fa4edf04d9fd5b2a576c6057b8b0a44a5ff205ce193c808d079fed7b0c2066c932de0c7ca199d6039f4d512ce93bc894df0c88b8020dd34c2fad4ded15ee4eea9d09ee971838bc8c253d4f8fe8a4daca8e73c64783e78dfd7a7246ff22a9789ea863703b485bb17117069760d153d1cf0affaa22f6dc3b79f1cd3d182b0031c758c4d3cca15cb47269755b6f7d32316dd2c98242265f5122c95cd71653acd3d358c008b72cf2786b31fd6aca0e6c0defd7401f07253243b6ca6212186f4d0dcd55859dfb33226b42e8204c7fc8ea74301c74a2e1309dbf204d4e07c0768626caecca08288c14145d5bc599a2568f044aa0ce899b318f22147a7ed11a850752d4583953428b3e0a15d2edd989bb09c8027004926ed205f38f568f20de3d467a420201c59f0d0a06cea453ec023cb6d109fb0de96acacfbcd7874842255cda2681437cfebc4265367c651c9608f3f60a457701fd8dbe4226d2757546850eb3eb7eb23bdf0a137855fc218d566dd91a364f8a5210ad87365b380011138c3da37ab0b1dbb2a30ee35f52f7b51297d8dac3d48e56548d8c6cfd81b589e1375b4fa137471ce1a330423473e48979d730a78d5fbd6eb85e50977cb85141d37df74b5c8e224519df739723c9fd50cb76c7ba37720324a7e795a046a05ac194b98a7f97be2ada15982f6dc2f7e13e769539f85f48b0a4d7e5591510d196cd43767da51c2d3f4182142eef1995d165c15a50f9554ae2ebb90c7d546529e5240bfe7a11d5b9c651133f332ad745bc15968613ac72af3ee13d692b33a8e9d0807be3518416b9827d329384b6461ef46ebbdd8db57cd88df24bcbe972db2fafed8bf89fc4ffbdd51d6bc9b6d9657bb1497895745925685fb1f2ad791a5c1161905e1747487f9f10c80b31c3384b87de8b7f1d39cf646f31c3fe3812ae89049894b39335d2426bfaaed5400c876529f15ad5a3218195e3db05049d7f3075ad6cc0d1bd7d030e0db9725861c2c8d33082644a36ae9a35f79364c6112aba140a13492c82909494e51954d0afa25655d313d25c513ba5ccc793f1f56ca253f3723506bbabcb49fa1bea997c228ab3a38ec4e406b1532a02547cf7b5ae7d567ee8d710952c1efbdb606e1781a8facfa88b2ffb4625e1f934652f13e0f31ffce6017f1361a8038ecea80dc7e21c9d6baec1e2483299452899ab19be71c3b7567f13ef816f41d65617e15adbb8b1e5c65521e0af0ab467f1b544e91919ca8cc2a4c94e4ead2fb001c58da6b52f3f7fa8c3cacc5e8c4dae9c47fdbb880496c459c0eef6d8b581d3246c806f642cdbf9f40f10464d49af8caeb2f383b9037de69c5af93de657561f0c2147ec4058160d9a0bf3936d214890485a4a0f0bdd28b2fd1b8d1ecc31cd1bc6fb24186af04af07970782cab21c6b1346f356a702d7f4c45c28cbc31e032f5a7c5a45b524a469302313db904121dc954f5ca5411531ac3de7acfaa2aae190041802bcf666ea3940a671d5be5a7219474c0d49dfbe5f345c20c4025b7c10c8973a2b02db1ec2146f21467baf251e072e5a063a032b70e61e1f1656ecad846662461220942f44e3a3d7c554f458d1ba3363bd44ab0bcb6624436f5b2007934569d32f3430ca217d4beb09f26016962fa338eaf08beaecee902cb027b7975cc319cc0468650bbb8e95c1d73ba7401980854dfe0ebafbc74c407dc4cf0643183e7e722d00429ee49b8d1092a8c7c3fc0e1b55da4a9735e923b84c0291524039d6589e914fb2df3ed30c2f27504e74ce1fbab3dc167d79ee8762a341e0caaac81073b448ba793a5525cc74ca8ac63148734b05352c9e05591e64af6962a54eaa5b88055686c4ee52e56682c6ddcbb96696ce2657542eac105a8ec273769494aff64ae3283e46c1e92ff3b414292bb979cdd0289948136ca15a49b6b3998b82ec78f60cfc5689164e22c1f0d5d8258382720e4d6e2636b822559ec74c9cdfc992ed9eb0dda152068939479c22c2e8e403d45e9ffd860b2cb28507cc5eb07efaace9618eac059e22b56c52ba13d99d4e4bbf17f624c18478b686a4185575800bdff0acacf06d9477293873ad8f09b32ab56bded5fcc58dcafebbac17423e6fd2656597f6592e06532f44b052c68efd0439c4275628bd547dd5a1f3eea380fdd52e3b16eb4cb2b3514e2d52c15f8a3017c860ee9ceb98a25cffedd765aa2535c138413a9eb30ef6b487139dc7209e842fb72ed0b84cdd01772bfa1635c2989c0da3a56ebacb225e387d0f06a7768c0730855f5519a8769dd41e85bae6a6a2dcff08269420df75ab7ee64abf1d1d2631f2a79bd6d6f3b1d9061a64a91b211313b84922d0dffa896784b7bb51306e2463b09b15376cecc5cba99997b2d96ffa2efdc2135fbb4d304d11cc40ebb49bfcc567c117faa3067818883b7b6fd4d20e055e8eec9344d7f4e061f166fec6f6cde1e9269b402ec1bfef421a632c437355f54020cdee4317a10400e17057f156373e604b5875e03979e927aa6e164c7ea6f86adc5e07babbda62fc146bd2fda2a186b3bac304bde7adde00a609fb4649fe358dad4e2d00192610cc4e54275383e4b59a8300e88c31547b0d1b35b837e9a6f8e35e774129c9d3c422fc320d8e825346939fdcd76eba922572f020b1946f5e1ab6808506129f11b53e8c5caa51e1c81d8dfffff1abde850914bc76ae28c4e0d542a27b69ed1a53ea456ab8bb5da82bbb7fc2409b5c472be92fedf9a64e48c311d77613b35f7117499f7f438645bbcff98173e12140b2f800c5dcb05d02945bdcae6a5e2d9c0b008f5008d08f0c3814864904660e5f31e49881e689ad1178346b9e4e4c2cc6b47475ddadc9ceaa3dc709ca9fcfa98da2b1de463bf09664444ed3c1043aad071be501d178e6842cb65b6afd778490fb51563843f2502a01e7e3192609608158939f390617b7c0127bc349d29c5a5db4fa951a0bd03ae2093c1b69a21beb450df464090e3fd23bcbf6c8be761f92ad585e38d4f336f3943a233a3b74a0134bc2924743a60aa90cac943e250b4b7b0c7611668889a254b1ed300898808616b0fed671afad37900701676018dae2cb2562296f94f63bc9f565e780b236548a57f8fafac42ff6208bfe616632710e760d90f2057618de08794ce3ef9ee75ee3b1344088d09a35ee549581cab96bc6c765e567e575060f936148f152455f237cd21b30416b58088c21d56aaf1672cdb3d88054241a618f1549e2fad9db736c40861713f1d6188566980b0f8cb0f98cc3911165434fdda7fc24d4d9a6adae3be5991e50e6a299032c468461561598b78ff09f60b1dd863bfbf04df31d47adbfdbcab331d59b99f5fa8d0a2acf169bc3c18ac4a0a000c82e56a1c2b1839fd48c2aec7732184d54d484c1955d68d7e1f243c2760009ba5ba0696d44eae3618400c669957860f069242babfdf713be3348c3381ab696f9581ce1cc4101c0660002633aba0ee599e67615bd4e3dba2a01818919a512b218fa26ac2871a3344f7f0bd9b15005ab30c29f5e0cdce301eee882add33c297df73220053205b1ab921e4531ce572736bcfb59219588231f5d898f0e1d9b3a99b2b1573a5706952d91fc437a29073b10dd142d07375b5000507227fca789f34107659819069f845daa539beacf2cced4e9bbfca631ff831d6e1fe8658a2dbb96d9eecfaceb117affb967d5ec63527285fbe17f8051fc235af5bc2102c472f27b07b132ae31ef82fd71467882c00cf18a239aa1c52b8acdb4bdf7879b92acbbe5df341154eb2b76d9a7ba8f00526c97f2ac94431fbb90544b4ccd9b9a4c73a6f25b3b3d2acc707b3cff6e0cc73edfb3ab0f0cd32c92f33552aefd83d900b3adf3559eec402ef5a8e4b226a6dfacb386b03a0e5f3e51830804a3569360c5a0eadcb82044b248659b0b4b806cc298e3f42660d1dce78aed2e6503ec1eee57b3e176363e3d8dbce1f1a342104225a14abb648d33bbb485aa01639262b810908b4506c05e862e761f4e29a6539a7d4153e5364d3378422dbad4990580717aa34e58b7e300a31f0f9f8003ff3e9802ac5500bbbfa34feb8f79602d0e8b7eefb3a451d23e34b4dd0a01ff3ad1dbfc10b90a3d668a402a006cd3f6ecd441c2d0d1fb48d647725ac78fc383e5e723fb69eb4e792809b9692cd4883f2185bd5f87095c5420366d0f3b2d9a8c6b998157ac821ff304c6cf1a2131a1e9a61fa84879895e2973a515f6d6e1569ba95f95db18721cc080864b274f665f92d03beeb41ec90721a7aafd942e5dd8929c0704b1ba849b1e1cea67ea9f7413d86f5ca6c60fcfab21f962323afea751af3c6053758287c462eb0a5d356e2c42b9099d9fd3e6bb0074f76d8844b264862e4fb615566be26c530cbb172dd2ab600f2215985e5915b567b19697119f566349d91d5ea32e3ded109408fb265d7c715e137d468ed620303b2662fc3895f44a32e7926aec4823f64beda528033a258f8f18d6f29577a96a2330d87cb338950eaadec67e3ab270d4d105cf92bc01356ff200c3c77264044906c50a1e5c8bead3473ea0621e416e146a86b7e5087ab24e1288ff43e251fe57dd43b85a4cda37e193ac8ce8648a37d7f82095c93be7412cf5e25a6354d28d1fe44a93c9de6a672ffa15db45ac9340a1029541c9f8da8a789efbdb69e9f117ac132f2fa1bb31c768ea62adea81a8490dc7329e188356d65c21ba3974b2b47e5ef341488b58daab986d8f4632bc6febe365d3ca40158984491041c3666a43a9a948b9d04d5da350f8938559517818628dd761f6a6d52682f60330a47888b2f51f4630c2f1f626317504f85b6555386a301e1e85ca39c93365bf9ea247b4a4c8665bbd14dc70c4b0d86f1b84184dc2e86e75a8835d8d3022cc09328efac3ff8a6e371c3de5bcf6feee844720deb8425c77e7d44231c9b351b3cb85c3c598031b2102863b7ac8b63398e5f11a3daebfe5a36abf733f6c9adfff7454d1ede7b2e1bdeb14f5af3eca7c521f89cc5e76b7e74ff3015b84071090c149b481b8527f8a3fbe7b143e43adeaf0c10e03ac8adf9108ae3b793d9b3efcf1f33bb52e8bb74b3897366034bc8d75a7869d606f45d4e65f1698b636bc1446ab71c00185be4415df2f28792e3df4698bc18b7d84b13da7fa9a18d75f0dc1777b32f9e80f07a198827a006a914106e4a338b07f863f06ea7361c2c390babcbb6aaba4947c12c671cbf8dd01a8ba2ee25435d7e6724a1be9e5389fbd43986010dd45c5d62f3ae3d7480cd38d37c0885ad1903cc22545eb95904e0b3288281e0fc124030a934dd5bb629b84afbed51ba5519467dee2e2ce7794eaf68453df44772264db3a0639933f48f5bfe35e48ad3d37e8d86725dedff2dfed596bc2b5bce8ea128ee66a605d47313910a9a451b7c0e2d26cc71ac1ff24ff3ff0aa37e6b9ad6bbc5245dc49f120eea7c3f467dfc58e45e953c996dc92e14ec8c6d4755557e9f0a7acd618116755f98ecff053273bbc12a8a3349c0e4fd2af82e238e613592dd5055e6d78a702d5ad22b9cd67bcfa95a7fa84f9474ae8143a56c7f414a3b8fc05fd601dcc1b30bdb2e1ca00ab712641882f991d3b70d788bbc3f69ec20bcac1ab2fa8f81bdea1ecbef4924b436d54d151b160e89a921cfec1e6f18b741f9e88af4424e4a5d71fe00b5216a1e1b567bb9521e6d0082a07a71ad55ea3fcf047f5abed3130f91809bf53e5c593dd7a8ded0272a23e1b8047c218ed7516ba5288396dea4d0ac5421fd5fb4523dd9a9c31867dce223de802567dcf54b3f1bee4739866d50ab6bcdfc15ed04624234307ca69035d773c2ee1b0930ca080a0c83b5df01bf1557f22ebb35e65820d50bd848af3878766ae2c1fc34dfc4782c4459d20b44ee44289e7a222be0157ddd0ec46f0e3c43ec3b8bff4a4fb085cf91e05c11ec7764d48c3c98851050c8bdbf9f290fcf1ea387dd59149f49cdb926062d5f2166905832163b688fc6c468f45d0b8aa566dffebaa560ba8f1e7f322ee42725c418b998255a4aba5df5889a01691b6d79e68bd64fd4c37c947e415ca98912a2640eca9b1c92a6e01345430e4ed3b3e8e7248ac9a5ae6054408508d03ded8bb093a655b0eef6b34d2b5cc9f18393ee332d8beed9a864d25a824c6eee66bf929376096a3ef211693381670e4fbabfcc9334e011aaa227a4b6c0d42bb41b9b6ad29f499c05f2a9c92c2bab02de76b96a955b9673f4561540cc183962fae40244dcee5a2f31996279fad85f3a6f9fa961496fd985cd91fccc17e1e447fa24fa82661622c038d3daeca08bea3c8b221d65a5cc59ba521c8a75ef3443734fabaf2cd05f2980ec88d7d4ca4e7f7f5ffbcc6ef60346cd61202fd6ada57a7dc3928d1fc73c345f9a21f70a867510b025b9efbb297aed861e9196abd502a610eabaa8ec109c2f1f9bd9580532f9a8e2036797d4b106cc4aee7bd83f219d847da5e47f1fcd7a19e2af66ac9dec239c154a39188d94d1c15a65fcb22da91816bda3e40616a4ab6cfeed40147fe3da98d1e7138289275fea470a123343eb708403280403b165c7d4c3e5a1db303c1eb20fe39c0284f5eaa74419c4cc8bef202c171dd9f41ddd025106989c5e169c441890809f5018678e033f24629cd2b4e08768837fe4d26671e162420319f8c30fdc48b414b448550713c83d39e67afb1ae0a94338dd892651c50166d43254fa9e922aafeb31c8caa83fb1139b37c12b33c7528567b1142e0fe6620c7ccf55d3927a01fac0ee12e8fa30f4b42d83797482e968925de88aa9451a68ac322c609e7fee33fc569232064b56d1f2db3b64ec76fa6ea37dae7c33b0b64fbda13d12a8afd3cb5a8dad083ea6392bd2d6ccf690c32b2a310e403a055d6273be158f7af8b995964b46a87a6c3dc6b34cd11dc4b57a52d73c26eb8a8e7432bbab16424302294789551c071268f58010805806cb2289a1995bf3a62fb10425b892aab16935be2eef37683a8179da71900d41e9d71b2409b057ec259c37bb080299c3df19151b833d157e35a18dc634b63016618800be06608f07a5107a90668a4646e823fec4ce86412ec4ed933589cd5c32a4e3799f1d44930d4359cfdd2b2d478aa26d4a734d2414cd05451238187f25e54cd29d5b21d473c87151041fefea22d1d2d53933bf00401a728ab2e1fba2d408ec81585f33ceeb25ada1a67a2772c622b0091cb4a15d6adaa938cf3fcd26fe14028e6afe590984dddc5a4c4e219157a52eae6d7bb8e7d1bfce1c1e5a732dfe24ff81bce35af558646a84e62e03c2aa0cc9e23a8d96c6f4bb8a0519227e5db40839654a23b9476451c81bc878c8c7895c9df6e4b8815a3bea8d0c7137784cc67b20ee79d8669cf1ae6475ed2f7590cd57ad3457064813e0b2a1e13e323b93e59334eee3eec61801e7ed2172acd20ccc3c7cfe4ab65b314feca34da125b5948acc806ec6c4301c57adbd02de3e0a1a006965d0c7c055497fed60e7084e8cdf5b4ef55fc095795dbdb798025f893300d434d7b3e237a18dd3b319bc05b9b293f6a398d86344402ce346bee221fc28411e49bac1b2ee7d376bb52077497140364fe356530d7c5b8753f20860ab62d65b04d0c6d87cee9094f9e736a6e994f0e2662145233f4e26c6bc785f14290f1bbbd0c9dc59f51acd244559eb0e4c0a34caeecd786947795662f320e34e1f8e1623aab520eb7e0d007652b03596d23f2ac1d14a882fdcffd2e928923d9f585f1822c9683793c7de7f0ec5019b75cc313b79b7e92fab61c1bae7a0a4ee3349c72a53a71320c14c9b9c945c24f0fbbff012ec8c35f67c261ea70d9a5dd59c343b587708843a5aa3ce426891a7415e9d6dd088b525d390d3f29eb56476f3bd5ba67bc97f2e45fda09d9ba3d5c2118ff0d4eb1a3a5a2cde7f294c69aa9357c1e03a4a2a58fdef80f1e3cf520bc7cc58bfe4a2869b17082442ee493ea8c3aef93854c922435afd20e5095eddc71093ac2361049b39b04dfa38d0d8c9b1bc1b7008985015705ac4d53b3f32191a221ed5b9276d3fbd22ff0ab80416c15fbf29fb99c2b056a1c5ee19bcea5353f4d3cbb0eb9312f25a8b78d62334ad6a9f64d4041d4ed51bf07e6d5a8c5c8a58070e27783b4ac59d5ce65f296f057871928662606c5301b707ae9e2743f35118ee1e26321cce24fc99f06a7ce642e8219b1d3e2e4b224aeafc6ce33131c878e61d921f2df0133265936220806f20d4d422abd25906908412d138eaf1654e1a04613daa0af6dce08bba37585ca560177a7513bbb1f753d94565d8f555b2e8479faadf87259421b3dff0355f2e3cc4cf8f3c1360d07d50bc5c51eccb69daad4eaff6cd0956f66bcea200bbe91f41f1c4ba6db2d6165e035660fc5979c1091aeca89f8b9ad91ffc25456fd01c61640ed8167303e68820257bcb2486225531500844613901c9b7f20c727520777911d09b87090f9faf246d0d018cd1d12cc63d1d3df7fa6f3d2f3e6cc3ec5409e5e43daf9431c25b45fc26ff9938513bca6124aeba0c8f0d72ee47d69965999fc696ea105c9e475746a3f6b472e4bdfe780afea386542b4b3269b5925d186ad0714930f12a5a8195dd7d75803faf8c52fa774cd1157718b655a8fa1c007065ce5c50d7d04085cfc2cc6096905ef50f597eb4cc190b17b065527f2b2b53ec368f9a8f79a5335636ee97a4a132366769690603b3210cc8d608608466b2a542ba511647be6ea84cebcde58089ba50fdc7ba0ec15f79208c52b6b6843408f70b9c0b639318971726888a0fa84f73d8af0afe658d82d09d1b2dc6c84b590d6d2ed69576c50b475428a421bc4fe4cb42326c3d1277a625f7e4147f3edaf1765177171884004744117f005801ea1267875a8ff7963ead521759f86edffc766fa866879d54d0a91778f1cc5b72489c4e6e10fd9807d416e13f461049f4ac3cdd8260e9c39f21b0197066e6f30b553e510f473588fad5bf9f897d4cc7e196a56cd72199e3019c5b538e349692a1a4a161647d5a7139dad4b9bb919e0b6a3c21b2f7442657f5c9bad161aae947133518e6201471000b1db4af19e0824365914a60d60b8799220a64314f58b8298aa49948b0959d899ab98e6e427cf697f13096c7384982fce44f336734e4f0bf32a270abbdd31767772fb81ba5024c4b689f647d53a19a6b3bd26eb7c12aeff716cb7a2f65dd07d7f52229977a0260ade11b91314c4e9da314c323fcb4dd28c335f19c38de1706067a897ce51c3b1ffec7332161e806c4f060c24ea9797129639df08dab543f1386976407ce3d1d463be74c780a33bd164416a4240672ec92075d255d0e12c544faf4f64a30ddf348be12aaa2f9c3282932932e49af4f1c3e17ceed07aee0dc849bfe3bcad7857eb33d129d199588742089e19a0e4033aebc66c17286e4c056e68c6a3006d35dae8b5318727382791d06424eec1db3db42284e96771334a24bea9e02a3626211739ff8dc346b4478d3befe3e269c5751a1dae3774cf3fdc0bdcd68f4dcc65e21d80604fc7c40f2810776c423f7129b96f6171269922e8abb529354fae22f0cdb9b27e1504fd865a4d1141b454cda9e9e9cf93c252d6149b0d569d212c0016763bdc794d7134d47839e13199917cb167cc994fcb762f9a9659dd5de44a31c36af588cc67ac8049b44ee406b2d05a50327d79502bfec28549416cf1c31f391b8e4360b250a5d2c47d147d59076975378c55072d528c74139bb2a8ed5926d9f226d54f0a50856657057150de5d430ba5e399d65949ae3a2467c814b070a19daaf6ae340f90412922442de08eca2b4ebd6fc53f03ced4f8570a6d6cbd40cc3cfb249f5f134d3d856661f8f5eb72221dac8f0a8887191a3f4293ef278fccbc70a07fa2d80747ceb0421957435090f1310be7bf3cdb823cd9e1a0d8fe4e8bf0db0e5fc4043772884234b16ca251d9934b299c8e27e6fce8c3829ba664d0be6ae8373aacaae27d70a22e51c68d9f04e417dd8e0b899f1b23ad845ec2451fa5031d48caf396a0a186ce2e7be09a02c339bf21bfa78585a95345c63f8c56f3b01b3ec3eba40981786c32361304a701cb69f072914e5412e08bfb7c6c46ead8db5b649e7a3530f49fcec29d5b4f380bf5c005d1081fed23394e1decb9669a603f5d4f83919580ca960886348e417c73f95a339cb7c00f31320cc0b3c50ebe54fcdba0e399a1fd54d048ef81818afdfd7beb0f65443bd4ca3b71b0b56f7a244012156b42cf34416547862152d32acf4cee51ff05b65503b4f7ec62963822762a9fe5de68b288e8a30b65be2ea8aaf367cc7368c2b7d3a18aa7b301707d4f311a8643990ae56a6748d13920e412fcecde1c2ba7977f9a1528e2765fe44457410ea491650071219f901c8b935132f10eedaca33b0d654c048897555b216225c7a5909fdf8ac243d039326592b19b97808a6c08315899d06fa474c607d5637575d262418f68f294d9933a9b041396a16f7dc23182107ccfcd02eb26acfc5b649437a486f8c320475db840c4ba54e0bcd92398f594421608403bd401b0eccfd9bfc82d5ac935c3740d0804efbaf24a843014dd6efa80524456a6719de331b53990e5e6cdf5a1b7f7a234bdc971f5d672508612f8b2bf739b76a8ee53259c94a6f88eb7f230316e0e5978651d490bf0cf492a1686f1c4cb87d06a0c0ba922034f8838d8d8e599f18f4ca5d349c65353ef57850d6b49a677a84daeebeb7b958772fd30b7b943042ef98a1021ea8daad50b4dd3e130cf94729d29183e394e4cb79f999f12e4f1709dbbc996a8e1890837eefd59c7963900dfed534be17ab7d294b7ee9f5c6ac2acecea48c1f47fadb5e6c903b5494c18ff6994f32daaf8f447953e1241fd4fb76e7e0d8b27feebdc01a1e01b240ac025973a8a0e49a46472b11b6f52a053524b4db5f8f9ab946e5af95bea9cb9755abf96ba891909c25995d8680032d70ab1aa1434f11d2603ca9cda577c9f5cec2ccc72b232121d8be502c7013f45e1cc72c2309c52a74ad0effcfad73624a2bcd9ef9711877bc7ca6cdec2bf763d09578c73cfd280deb3014a38510f4e2cb70e5536d856262df8d6ae46d08dfd376782adcc4440ffe9aef01b25293cc3ea812d2036850f1b2b31e5dd943d3a5b20a096357864bbe7f9c108e13864827913531e6f82509eab41cb5da40ee3b1755ab7fd8cfc7f62c46765a5a564985363f1676f29ade9b79d34417899d645338b110cba94cd2712cbd8ccc786a633a9362de11108fab57dee92f6219bbc51436cc7d3b20888c4f3cc872f1add4bce921319a9e1d706d83aea07715812560a2aec22575ff9b1eba05eb170dfe7581731b77eefe328a33f65a2d370fbaf9286cd3575280fc7a1cd1cd994be535d2e8f53f6f1bca449704cb40a0d1db84191ef52880c81b040bc87d927258ac03045c74a0ef4be063cce14b23bf3fc312e3589b2b6628d030660fa22a513826ad3e54216050ca6ab5751a4573050b9145be864ea330e851a7749e379294f597c65eeb9c71367cbd39318cb4f53862cc7bf55a8549b276e24fea29245fdda876318d93615ebdbcab75d18fa4ee3b9a6e14248a24a26854406bf00cb36883b9882858ee1f95ca9a52ca250e51c6d149f18451f16d1fe68d11596029915bba6f5caea824a49a44e5560cae0a7268d01464c4362b8c9ef06a38a97c12379e77888cd8a33d1fc4651db39feec4e5443d89f42d268343a3f6ab2e574e282b7c851d5331ee82842c0e43e434cc274383e538ad7d14c854400b66962fff3f26dad8060901795caffe7ecd4821a4e113dfe942c468562b5c69d483847bcc0800e20383ed40fe040a4035c0be053b94a2a5ea1105d58e0f3a1ac50b8dac7d67b42f047a8787fe6ca444314b7a0a41da95750f063d1952ac0f23c02193819eb10be6fabdf44ede7d0fec2f112d5b1382145d6270607f1a82a016348296fb5d1084585cd00e22ad4b7e03bc5749146772f6ec633758dc6c882ddd3176b6227652b09ff24d41e94a0fe37986009aef5db59f794eb9b6420be9017089b23743589ce368caa631ff6eac9a5bc8b2b33ff7dce9c5a6107017d0ecf3094352f52ec68b69c81e34a4f0d4b3d2776196c9de992c3513efa133c45fdc5d65fc4145aa7f61649f11a7d633e34af65d4227fc4358a5ab17ddfc42e0e598c0a8a3987373334f8b0c1f3b3b488945bdb75eea766f16748f9c9f5132dec5bc1a2a567a4ff60c6e3bb8e368ffc2d86c7738c28d9b092656b8a1640ffe0073971de7fa9b2d07713949e20550d47fd1cce1fe3c5e3bf21e9e64d17e4a3085a44eea166bec684972e10765e9cf514a66904364a0a0c9c248fa52c434888e7edc78f938f454a37d6eab01c53dc3c838dd7f2a89ab45513367da411b2154cd28e028dcde73c65f5801956d01416b263402ebbe84d98fa28fe6d0377f69d4aba0264681bb1c5fbc8cef461da1690295b6e1f58cee970d4d32e299014b20c264cc8029c0b5a9616c0028a0463bc2f8698e426ec422edc7d8cc8ce1327312e21281934514720c7fafff7f110a6401ef48039a15f36055f89f45fb3fe3fc630b4e75b5c0859137005615b964cdbb676aa7319c6f4716a03672d8b5097bc510bed435020be800972d7400a8da021d827a38cc0d863384e20ccd738d089b0c7733ebc7857b9db305c8beb243ace062682706bd378b5651a1230795df4449aba403aedc3b84347236b677d12aac5c2188ae2488c9a7c5db39ec77dfc16b58e0aa5bd085c14ef2394e9b16bde8612b1e3408ed61ad25d51f0e8e618e67b4a82966f473925b64ca253616d0950e91c21fdb16e01fbc4a5cea2d6b1e86319f0c3e3d3b63e77ba1c7900084f7016b0bdcba558010c78a1b604bd6a7e1cd149b54e9c478fe65614028aa6836e26cc0203c96b027201256ab2dfda454425a89c34a312ebaa5a63c092783fe8b4b30892a6f2a8ad7824a7a8a7e343c6f477106230f37be83835f215bb027d6257c43fd6ed8468fdf4fcda04cf4e2ea6e8e4d0ab5303b2e1986dd916cdec39766279bc1ba69dd59276a8cc1406a822cabd8bf9a93caf5d2573448d24932befda5e6918b60f063b1c1bcd30c9d7aa34a45c3e17d0aa9f7b4bbfad971264a5372101e5fe936c7b6bd01b14a069a87d64d924770723716141e3542efe4bf7cfef20ef5a1ecdb051c3c747c3384881c8d2f426fabec943a8d0e1f787f033622aef251cd1a742425ca919fcf5b86483eed69d2b39e08edc2725bf886b08a4e2f7ce4e87a269b5ad4892327d4f51430bf693cd989ab0b4f74799162c2e46c8b33bca4fb7d125828e2c6fe119b47bd9e53d1bc488cc4a3e4f95c47e6fdce4adeb70521049755b942224c4613790fa72f178a7ed724f6cbf26ca1566def1d35e6596dbb3c1694168f88ba66c230dd1224895987b7c1efde2bf569e2cfc004d0e7fe6d31b5b6810493360ed9519d4e328680ea9318757d184544fd09376307f67c1067f84d6cd8cb8caf9d7493afdf2fdaecbc850e691ca3d8985e53e64075987a2e04c41a3215b5aa7d61650eb998f61d8cb49417a515a29589d817b47bb99be0493ccd93355c0fc4f642c6a5f1839ac18ea157a8a528fb8d2b43d31afa2c7934aef104738621de110ad5a50cb3d2f4efaa41a6d2835b8ca306be103fd07375d385750ada321d69089c15803d1e52ac0cca7eca5d8914e0703aeefee59b16872da50604718bd1102aa2d50f83b534b8303b33c95569fb6e0669548d43d214630e47491e94c74d04759fb73bb8e0ea62c06abbb5d000b7a40a50f3438889e6437789ee409fd42d757f3d695ba3e5d54b488c5ee3a775ce34e141ef1081b2142732d7569cb9f9bd61c6665ce80d389d894e68c72ad0280bf719684b7f92d9bc07e3f9a86c0582414e91c32ddff37a7db7d0acadae07b78be18989e427f981adb5c978b55d77ff2cb7acd22eb81c58a0568f68334e181a92af633c3670902cdc32fc8dca1a63026b7132e8477055d86a296d1f47f3d9c0b7a64ff7b395915edd5fdb07e20becf1400003e2cbef90669badb49a1044c0783caa09b4a78f9011aea6d10697350e5b34e29361f23ecb503220f79bc26ceb1c74b9d0c36ae84cca5e7b27512e960a534e5ff8e5e73dc92a9f48a9a667db0404b3c642ed548e07b2bf94884a938953dfef7155cd053202adb98ef90fdddaac360285196df1b2ac306c08fbb6902b57ea2d706486f5094fd0098d18582cd8eaf023adc206af52a7297a4fb5104ea008b6bc1806dda32ef245c7869219884c1fd68dedbdb114f6bc2148560c22ca1985ee3e08ce4f1836c2b65430def556d09f199ca1174ea2d2162f94d79355f3f48d0e7af5d1c9691017195e0f5e78605e278c238a63fe42fb3f80abd398f02da41ce172577f12867197143fcf13e89a42daa7cd8dd1700dcfc73e23c9b382a132cbb23f3c8e61f4b3f5505bc9345d6ce11f03f55be56f84bc0158e8b52c64981cb1f3d804fc456c2c8950fa2dbacc241bc47b393c60d603228f7395964a1dd3dc5e3b456abdabb2d2cbfa36210f0c81a2a48e89d1b58e5827c13494887ccb88777bb4364d706ea9e51854f760292fbde265c5dfb35dcd767efcd6a56ce25a878cbda122006ac174505784f04f9140267fdb509df9457580e4ad910d00f3ecfa9130e34cf2192acefb311ef4ed8e330ff31bc155d59d7d201b076f8cb315f18662105edd372610be7f83a0ea179bc49360e9e3eaeecc493d2225032acf16b98449615e494b03c45d07e7d6c8e1c6137465b862ad5d07e25d97b813577520bcdfa5a0e71772b3a4b3a2eacbae87b2e73d0004f735e05ff5b6a53f71ea7c10a9f28d24b77e465da50175e6e07ee674ffa38d69e90387ffd0d25abc1e402eeccb7d3d99263d5216b7681b53cba06d3789af55bae571c8712a262c22bb3cb218806fe526e228c7a5f2e6e167714f30132d0d96a8ad2c7767fdfed1b967e209db6ddbf914a3de31ba16da7fdd92b71973b673e97a0be5e5e204aa8ed9d427e46caab6cee485b8364e23e0721b2f79241b71d88b368160a39843c0ae92084c419bd4cd62c27b7ee2d41629821aff0e0af973c05d51e25ce2e2a30653d4fafa24a5d963f00f364f92cefd675c2069cf82c2a5ddeb6e9d5a1aa88f515de8b1d64bb5354a1d1135b0314a471f9e5b19fc6cb902c3cae9dbdc2679021ec0cbc431a46ad8e4586b5f88372da951bf93e4c27057297a09ff60e6c6ac7a2818d6c683a5d62f12454e476eaa1412609a1de58c7e81395942b4beb43fb8a9cd68cd9430e7b6342509eae229ec7af612d10a9be8279a5feadb3bf0ed0c3659f1882291aada51e422cf8067db70a5eb4bd659a24a5f7b9b318347b40e872f19e79cbab1729b23492d6ba79743e850b8526a7d73d3026e812a77fe2ac49890a989de0696411f0e6c24bb9ac0940d3c9d43a67d18d4c31cf1dfb2badbcbc8a0ef34f4d64f12c4edeeb8ab0705b44d24d878349b180480d00e55ce0290661afc5e1a7a4ec849665b3aed5f95dbe0739783d0546de4fe65671bcbc64b76ce224576fe4e61a62fdbf60ffdcd975c8da2122f6ff4c643986c744c7bfb0dbdde4567c339a621df40e5bfe55f783b7323059de5521825c5ae146ec888dcb508206d8a82b69a6394c5b9668f671ce76e266bc5d5746bbdeeccf808d9a0740573b6007c5fa1cda6d4b99c427ec1908d1c59c0fa4a0640ef36d057d2a51c3013999884ac1c1aa89d3c32de07de4c3cb93972da899426eb0e905ad42d2fbd945af0cb57f973d550c5154b255f34e4ac6a6a359d27712b178f2bd07301cdddb8f0306be83a10726aac3e7a011052d01662764112fd14a157d9d180d28c7134c31110cc464e998b6755fc9cfa3614a497a67209d003cc625fa8f3492abbe9de7e0a32d9dcb2f0727af435bcfa1cee24b208659e08bb1de4d995fce497722c13ec4044f11da1867450ad5ec3ffaf8ffd70eae7fbd7b1e3720a9f94bdbd7ba970aa6f9bb9dd13d91db2a9d291d81165c264573327ee9e5da8725e1dcf1831e064e61f1c56293bc653d50810aefb0bf7b9eb1aa9f179fa03292f8f9ffa1196473290489d3c819cab8a329ada020701fc2d439b5a9b60eea6e264d6002aeb9757a075486c33e878aeb9fc4ef604398e513405ec4c4a2a485b07615356808a9ed3a56dec15054a268ee972e3c5d172b37a85296d37ae9c164fadc12d9b33f1107112da46174d00810f4cbb241b59b1190aa65b5ebed4a9f81164f28c497739b4116a5e6523171bd75a986ca1e0420863268769d99f089767b05f8997edb5e90121922a2ad9258df7e1921801d1dc4cd50a75d93f4570a46b0f24008e0cc512c16ce40f715245d33380365c4eb9dcaa78b19094cd10350f0390a233ed3f9f192fd222d3600269feed150db4fdbc13e3ea3e988a568a241f190b64df027a0ef6e8df4e8b4b73dc96293d96ac18b197737b0e828f113b1f4e7571f9a887f3e5b9e8f288d908cf3f801cd86acd3c6a0c4b815321eb77e7d6690a4aa793ad6651f5afc5b06d6c177c8fd6df3343a341599a980cd821ca3792a1ea80d41408061ec23faceacbe29bdac879d382bd061af9090032f3f4d0e0de715e4c975bb1a9928fbba8b51c3782fae7ea7b419cf2da5aad77a688be44b6ca06ccb6f76e7caa72f317d430952225e51a15894f50943a27bcd543d461752c9efb5d9cd6359c8d251d951329590d69305b0a6ed26432f041bf535bf6357fde49ebc0a19c01b44aa7ea99a9b93e63394ebbe010d17a06d5309524a24219f770477ecfa99a1bf1a7edc07dc2bb38c24e784ef0d12900aa7774087323b191da76e06b33d34406e6be3b6a56aab04a3219c56df71bb24c528d7ae776993aca5cf3642cc24a7f883ac040a87f5aca37f0f44742256319067955d006ec7576ad2ecd529641bb3a6b1968b260a1f4caad85ce0e6494ff65ea1eb5606755381862d34c47d220248d933d2f3b7c8f71224894dd95e5ea962b2b4a99aa6454b7e6e4fb6c185b90f07c65335f57b12eb810baa98454714810d80b93d748dcd51d7fc1c5cd8184212b5f82a69c8cfabad1fc7bcf775b05c16d6ef4a63647f7a09da79f88ace8ecfc1eaa4cda7951473d2890d6803c63bd7b2c85a3e722f300d6e3a55c4caa4c8e46fdfacacd9136904f95d11aaf6a82ec25040cf14288fef2d7dad921dcb3143055caed1f1a8bb19bd980e62ef2a00d43e7d10c9abfadd09d106bd2e8dd3133a2c5d6214f72347a8d720f83bd44d96c12a6c94555a168eb10885dd739db873b24218204e74505541102ec79b1d67887323618efa979482a78dfe02aa5d5bdbfcdad0864085314bcd82ad052fbba425d0cf85c905b4d590d2ea9df1270154c82c738fa372ee16887b5dedfe1d8365333e03b9b9d4a923912968cd0e09e68ae9737d8fa346dec50abafe69057a3f362017360cf6d6bbcd282b6447232c8e3a1404cd5282f8d025502e2b55c6292a4a82f02b12e70114a818f34c1a1f376fc717be28a54003ee699a5e69e27929f9bcde840ecd738177798f03511e75268f001cd2a04d60e3d058a217a2373bdb71e05656deeea7073d7b0907f649a60ccf935c685b6b373047ef141f216609b8a16b38341b6a9f57012addd8eb5b88e1e4b1809ec55a8e22148582ec1cd5dcde0ab1ed988f121beafd04e9031b80b07a72d6d31a471112e5806c34370aa3ee27bf3ef5885ac25b01c16037303078dd06b4f40ee243bd3718d66b7fbe164dd028d6ac3b4b03e6fa55ea6de9711e5d406521d5443b008481c81af333ad95b045a92f6091c949263735e0130b4a5ca7e3ed99cb64ebb8ad8198a639173d075f4d85a44d85d3684b1bef77f481dba7a5e6f2a7778ab129730562e19ac1434c03e585e211368d4d09f399074bcbba5e9050dbe4d265c8d94165291df127eeadd702d54f544e0ad2742eb9cb6e642016e5c38897fbc2db1692b2029ccae5aa8b7ddc6add7d25b0b9280bb0dc9801289ba1c1c7663d664853800a95d2f0e4b2da5d1b355840611aeeee5b8279482b4c4b49117a11bed78ed21579e32cea72b7949b9113d6dcf6aa2b5acdb5eb47bd7f300c4e90ecade0dedea5e0cb1af7536b138ff04a2500581449ce17b5e71709e0e3536af17b9acbc92b8e0b50f4b872bcef81b0f09b717234a5ceee979798fb547b71c3d4fff90f24f351b441fef2566240828cac3e6283b5604f2d21df7ebc6d23cac3b1afb37f7a1d2a5ca23f02701a7036263718ebd0075d7028c891c7b78c3c0f3316f3efce1b61b0ec77fa266e8c82a1470a46a4c3120f37e8e0e2db0aecb4a0f6921cc8a133411414ea04a46276ba409c00d851479071f770724dc20b98429be593a8fe764291a46d25549243054ed44f0348727a287bf5eb874a126a1bb4a393beec2e1b9dcde1cc95e6580cb2d7f35580a0b76b0b661db5124c422aedb5e2aec0011d7e9c8adfa5f3bbe40fbc4c3f6a525ed2489b41010c02ef9e753f73a82c9dd9e8faf97c8c2f4d23c93e966b9a5823fdc4b2a6428684c64744fae417114ac019b31e89bcedee394b94af08cb979cd6f0c194e095d94bfa8c171afb4cdc52454bea25afae9ebe8cb70bcafc6d78c3985e878647dd90c24f68756fa4aa21c1539247fcaa1db1c1f00acc81dc89705bc41aa801957439e370a3ae95c899d23411bb396c287131db82cf9a42359c1d81d57c7af01ad4325aeee2595a0c0f4c62de16a3d58b44d9ee887be70fc7392399f0b76837bf7e76932328c24de53c2e80e8afbdf2839d9c398d99e734a05f45d5b7d5b0efa77432451c1b523a945fc10d28a0b2a15930ce663516a285615f3d70dbe51b411cf39d59b5697c2c03c4ed16777ca7875ce0da4b72ae8336ea2926c03e51092264909fe98a2182c2e478be862445cf204fce6a1ecd7ab2938620be2b1bc9aefed68dc27101f45ccaca4ad40cb36558d78a87f8790386b8585ecadcad18328ff22391c7371cab5a4670d328afd8d19564d8c9879bbe362bbf5d03573cfa2041cd8ef07d2cf4aa5a7c0b4d09c40bb130c7e2af431294e97e74384045419ff3c2742c06aa27afa4645cba74fb23e862375a2ecf8ec085cf611ebf2439fc9e7a1dc8899a2268603642a186eabf7c8f3a291e79baea50dafcba07b2264570c268287970682932f5cea0b5959183c9dfff9f7d6b6e4276e3315cb592ab9fa9f7b4e8b437d0e346cdde61e48763df2be472ceac4b8f41d5e08a87306a34ea5865b780658c9f1d2cda61183f578916900c90e8b51a3b33c7cd4c074225f67322671bc74e73954a3fdfe652b2ef3b40a14235def828520931ed5ba5490b3ed174b475046ee01cc5a082f4e45083991c648e7dc3144d542150fa1ebcafb0ffb7da9204c30ca3895d81cccb674d2bb35a74a24c4906520fdaabd1252a1db6749f6d93eb17ff815bc3964461a5a9be88febfbfdf99d394c0d73d49972e64f97cb7d57e3d0dc5f9607a5a76df1b610d3011aa0e5a24c0f45d17cea73b968bc64f8ca9a06a35e3d1d53bb0f729702547b4fd423da50ae7ae3120b7be2541fe1bb699196201098d4fc19f79bd3ea91d314cc2e5515c134fe9064a67a513414cb71c1ac0756408e47c475e58f67ec9a10ba6838db38bc3dba7a65091e7532cad3768a46874a01fa3b0263b1f68c4740a8742a066d6cd888e618481e8b7c1f9fecee804d1190635cb53fe3072941f53589c0c749a3da8af6bc0b22cbf4581620845fff8e7b28d8160d58cac506697b9d637d0e84afa087a5674c9ca52fac180962a0c2404ff737fa363ece1669f3f72420f06219a2c8aa10e97c97cc24bd7a66a3c390ae5df08fcd14e338710c9b0cc5b8333ee855853a9b0c02a084ae6e32422a0828307b21073b19731cf749a3c28d2b13903ab3d2cb02835845ca144781d7fb5ea8821a1046c5b283603d1a55262548b39ed676da0bb87b8183381fc0c0a863086e1909bf68d3429f077008e077265ac92c8cb0319dd140eb7e13d297b78643c7005f57cf3881dfb14b82393efe75a3eddcb78aedab837d6e1115eb8248601e19176829e4a4df0b240ec12d2a5a5a29e683218f9de838c5d399c2901e7dad7c0edc133ee6bb18b6d03062c410e6198a0c2d50f599f94dd64d405160e2403c190983e71a04cb95ff6c0761d3ed2f5342ccf256bbc950013ba35511fac3fc2387c5beb485c333c069860bcd5ea118f0dc8d8f9ab8ffad9c727e05a5582077183d8f286b19b19f738a4e82a42d4088ed71a586676ecc3ee228be20c858a4df9fb8ed415baf715a4ac79749486148211e9cef5ac64a86dd62860f91c2e1e1ebb90c1f81c8e58251dc3c34228f9b2146a0caf2c301e904c5f17bfb558a39de5faefbfdd41b40a5d4ed0ca42757cc69ba114bac2f9989023c912a53207aa8c6eade9699bf29bf47ae8d4dc062dabf00fb18998638f78001735954065f3e37043b0e312054b1a2716e686d4cb9a8272abba0f074107e9837da8852f22e55f463bc0939372e006580a0b3aa6885c8fb7916faa77f7f2e1a3ece53e8380a8bdccbede9b92be98e547f20503082ac4d65ec59552c79b0b2f7d49fd61d37f3a5186e867b814edd83337bc7025049f0eae83edc78a77131f28ccd46c72e8e88347262e94514d257a5f299e98ab670d0cd6caba67f25cbc09479ac0e337d9812b0e0311f0960c82c1c706ab8a70dfb15b67cca1fe2b9e0ebffd61e4c69be07636f1f62da2ea62575da9f116061b18cc1e0a6aa2650f9ee24e835a278a9846f14fd625ad1d9734398a1d24cc8856b8d981d14ae5eed3c75b360a338d6f6578166dc7678970e166be64fc932cf7ab50386b4fb34294b4d9348b24f6b9a33e0dce5dce2a0ee8e06accb3c061fac802678abbf2d148dc97c21db01010881b508ae1b0fb5318a1974caa550ddd7b65143446c72bb721ed71c703d57fabaa95b125564f14ba9f41a8425e3af5c1d894a326e5819246cda531865489362a8fbe65476430ce79882231f9c8b0b9d66fa71fa5e5560f9a9fa06784506f7964fc0e883448a003d3157b05758b8ad980032dc89602a2dff71f3d3500f1c9ee67f738f30853deaaa207cb501980e73a43dc38a8f143392f78e6e3bba18e85e01b70d1da577e545f4b143007a16075955f4fd583988ed770a1b3147053e3bc8d37a4ef68671b121198cb9be5aa78883b06db57aef5b1cf5c56c0b061307eba10aa92d27063caecdbb3bcea8cc623637b02f832b88f76521e4847bdaa1e25eb2200bfa670630ef9fa3f5b4b1b15caa8c774e69cbd62010c9b95d65d2968d418326004f27d97e0618e8db275829471a7836de88755e3c570a621581a0596973d85ecdd434983b850a8d6ee15bd71e20e125206150da3113630276ea9775f727d1535bae8729a3424aef2cd52359ccdfa0042f5569e44d6584cec5cf3749cf9cbc8596d022b2d04a73c821ee08a14410cc3be8a8f39df7d02bb0be87c9a858af8b56093385e687e47336a25a21338c1dde6a7b06f9ca538fa322ba681da707ba06f1015f0298228d8a6bf213f9a685eb107480ee987fa4c2f3d1738c5e6f035e2c07fbefed13e231e205ea2783e64c36adb13b9e8d10f5b95351d2c20df3acf9d1c35d334fc10e2c9038140d5d17dec95e90a7dab53b67ea484e72b79155714ba49d86ad409a3cf31b46d541adeea041bb1364ca4c501103f01bb011d01c88405528d06e6c748c465b6a1d47c1545287c7b16856ba08176c2aa9770da047ac339a391fd0f00732294eb29bf08b2b99638b376102a622b3160b99acff61c77fd2bb2a14d9774c365257b2d4278f350e2f9b5cdfb09e80357361b560613247f40c80296a62ad70b6e317f64497be79dfa75db702030e71cfa9fa55b47d2f70b37840935a569a442bbf89e2c5ebce5bbd7a6130e92ab8585e62782eb0a26f11be5573b215555f6351a3bead8829da625a31781551c3ffe64cdf63e5b82e520485703b0ccf076ad41eed688d3a5563f1a144b183683abeae0bb7449f683abba031dc60f9c8d2624c06e91ac6943e67c5136e7a12bce5991110acd5af7f941555784aa83c3a0446458940cbdc157d435a4b14faf349a701ad6a06f2c6752ca1463d7ae37948506876b208aa0d236312ec0f63cf942fe1721aa0f8cb88e4e2ceb841250d8c3c404295e0dec4585404b73483cc5c9da8c205ad16d5604a78bb4cca8e350fe95e43cf2890e096e484932e02b828378dd3f019813392436111b3eb0ff14e03d7ba5607c7da4c4d10dfb73af93c3896969ffb9e95276772cee39b60b76a61eeeee0d2c823943859745754dbe9caa55ab3c902abe415fb7e0f7dc8341c2ecf737ac4fae8ef824ca64fc7cda78fdbc6bb5390c1370cc9a633210f6dfc740dbccebc14048b037905699b05228d4b0a3ba7fbfe41e8a1d6b9adb7dbf60a2c61c54cf24f6154a8812207d5985c9313e2622782678aa3b3ca2e3138b09948d1c88fd8f7cd2d9e38563e96c1790d85e2a117c791f93b219642df260feaea95a008f6fd2207ee475db2c2f61df70f00ed01627e334803dc68030a56a2785a2054b29a0e25c5f1f05f44054c84c008c0ba21cd98e562bce6d56b9b965abf52948578477e0267d72a4f15c2644bfb090f141604202ee2d0df7ca5b08a846eab4ab41705548022c1fbfaa0b8add045146a64b7b5bde59629a5144f0731072f07a63f79db8f7467a7ed6330a0e366a93c4016c77c7f096c0e0aebf2c7d91b7f53b79b28451bd76b86d66ebd0d216b548888688d880ac3508b1cf675095ded7efec847300bfbe8e2f0eacf3e634df570e41f971cebc7e981987eced040bdaef7a717e289eb352751c86e22dd1bffaf935492b15cc456b8c656b83747ed48cdcc10b20c95a673583e441a56ffb853d840e35a8d8bf8c81f642d5b5801a9baccb5212494941f1355d96f71482ca8a8febb4f547f6fea6091a9340f68d3eaff6dce6c61b95f0c0ce99c260f3a8c67ee01fec9b13867257e68341a0c56b6a8fecdfcd948a93a17335f92a2baaafaf310827c67ce75e2f8181852844330d5844bcc0fe3cccc404d75fde8a8734a689f1f5a03f954dfb625c6f639f2a1c0e9bda7c0f728d6960a591b6bb2a6a8fa20f457bf127b6a70528cc89aaa175243644d51caea7756e3e9fcce7484d459da15e47b989f6190d3a77e0b7f9c3e35bd46d8add7c084a9b047082054646d3d2a4efc44d6f6aad37b7f12599bc893fa81365267d109a2fd631f9dfefb23af498547467de5a8858e8a5ae8284b11a37a6ccf726db5e9a346f26f1f870d51f2711aed409aa4429f761c41cd11abe1c4fc707d3ac1efaa060dea6f030ccac33f1b5cd0fd95b23d75d8264a550aa88b9fd819d1fde7c143d23928e6259dd3324017faed724fd558777777f37c2ee6a550c5bd14aa984c26d36f0a556698d0d8def87b0260828ea71fbf6aaadfde60a05d7e1287f8406737e79c73ceded8e9246bae46a478cf8229e6304f44e235feb118045894b9724856a9804e11e765e3aedaedface992228d238a19b48bfd50fdda90430dc7d5236111a541e4b3dd2db7a5b727044d16bca963a826ef5fe7b224f64b5c86a91c724ebfebc89bca66ba926b483a0b4cb75aed0919716e0848e4d44d4a4fa3795cef1f76816eaefe2641d5f083264a034db071d4693c4ac84ea5c738ac6369a449d53eb4fb5807eeffdd8400e6b22b18188da4a37d186d2d11fed4ea21227798d7f77ad7596a0d374aa23772e65f34c6def31aae362397aa05d6b2ee814c726026766a05dc7afcb23590b8c52dd007c351e5bb70d86b64b0af752e6abd02e99c338f1d535af76f14bb6b3a3826ca7ebba6e87652aecc8766238fbaaae9d1576c32287272da06474e933ba7479e28c1c7270469ff1647bb77bb7b7b75b25c319527631194b96ccccdddbb6ac6366e61c543274ac5fd6728c55f9b11c29b264c9729331c772c8783726e315f37ed72d77f1f6755e40f7475921e09d7e5b232d61cacba65d2d6b33f96c2ad78e88d6363e0da0073ac155ea1423f60871fa1efaaa8711f7e9ab1e0805b2126b881bc362015dea75aedd1ae1c28434dc3df1acd7bc5e42bca6c5f1f436ed6a57ed4d888b9e78c4f9d8e7c4d71689d5f9f590ff42aabb42de6f48e4f444b63f7df746bc7236ed7a71bf85db338afbae0791ed1de0721892dec4a5cee530a6a9a6a0526c7dbb748ca0fbf464045552c1bdddbdb550fe71b730bf5e0ca4234ea9c3bca74814c9612c7e9ae4b0d4ab3e08eaa9d8e33dca7b14ea7bf87796fa9da53a165af2b99e66c1a6e770abecb3384eefcf342c8cc70423b437fe5fc8451e1b99443eda1b1e873110422b4675a1a3ea2becb050d7f38b6debb8b9cdc96d9de93b5a04e5678aec64a3207d900679a4f9c8dec8df72a4739809928649069abf301637394a61c41e98573d85a1a3abce39679dcf3b4fb8f9f11a796471a4aa4fbbb450bdff085a68d771b7c41607eae5276061a02f2a8ced8d7c5598128724e0248e26d47dc2b555aafcb94929cbf016464ff86227987e7475dfffee7d422c168bd12de8cefac7d89626b430a2cd4ce1ce40ef363f8542bcc6df140ed91b8fb983b1289f2c8291647777373f1acb54da7562a276715ccd1927f7aea6ad0be5de989e487e5dad063ae254d38f4c64922d4af15ed66cea9ec114aa38b34c3f7f6bf72cd373bf95439649746f852a15d04d5c51508c0f695bd2f39a25267388c3a6f8f21aff6e81c81c369f7b77200d646ffc47e8020b90ce617188908615f9bedaa81da93a646fbcc7f4dcf7749f34bffb1eee4ddf33bf7bd6c1ea07627aee8174ac167f989efb202691e37e06e9fc272752aff1b7c28fa3844b993fc46bfca7e856ea286bbfdc7fa09b68e34a9aa135e43dbfce9f1363edf2df81e2380f299d08ba0a66d014d111ac36ed72c9e0c0031d86d3388e93c242a5b8d2d982096f61290e42e8a3f0808e1ce5db1c18d5b3516d16ca49b193ced9e82c47f5299e1aa85ff74cbfce31509cf04f4a64a076358f2816892c6e75c76b524da8f42b435cac1a96c40b4d92aa49f6c6df1b410bdd509ffa7ed9e2f8debf2eecfd4b85a8d0b550aee37af14417f6c6fd4fe208abbe54547f228544a528ea44f9712b55e0f0e5862847e8e0c30a8670928592a10221a48f674e7082139ce07420463c40844c9fdce411323799d1188bad000823286750010bead8f2e20343971bead872f2451d5b397cd952c796971a33e030850a4aa003116e28a33e59a28eefc4255d524ae9dab2d4912a69a105e889285875bb58410e4e009560082f3069d4b10554833ab680b4e4c0833ab6bc74e98a3eb09d2555a525a69d5ed6330f7418070981429a2c0afca630367b3e5135c7fdf61cc7753e7c70cfcf5bbd961c4dbb9ce81ebc9f74ccfc4a2a7b48b372826ea2d4e9a18bf739b96e3e4759ab5bc345ca808c28ddb47c55b2c02f7fd9847e66fead1b00203c29546130f6862310c3a282c8d914939060b65e8363c5867305e5182c81b3729c2aff5dfbaaf21f47cad5d4e21ee504dffd717bee577bf34e292857b6b3bbbbbbbbdbeeee6e4374c7d768afe860f5ffbfb5ea7463bdb5ddd6650f9e6fbbc55ab0b9f422a08e1274b76cdbc65fc218748eac8d356bb048f276c676776573a7cf986c6e5d8eee16c8eded5ba2e357bd77569d2be8be73f3b9e713aa0c0f505f8b83397cd57589ac4edcd1d5ff00f5842a6b6e9e503dd4d1024a0efe77bf8889502e6fceef4d194e28e08bb72c9ef928d4adb2623f1a85aa53e3a4d66af55a1b57ab65e3da7597bbbbbb6b02b9522e0e125264edf02a65bd3b5cf1767777d7c5f08fadfb6ec772c8dc65b45ba682b7bbbb37113c4fc5edee1bca87a99190f6ddbbb9b99b37aeb9b99bbbbbbbb9b9bbbbbbb9b99bbbbbbbb9f943f970146a7b9b9b9bbbbbbbf7b76cd9b245a9694d53b262c5c8a866645473e244721007f10f63000c179416c905a51642c6c1f1e1eecd2ffaa55085ee539898981a2b99cf868cf70d79e38637dfb8d10b82281f3ef3813cc2c73d33d34b236968bc9926dcf764be0e6f7c366c487903b5e306ca87831f87fb8e728057173f30c23733c2076838529664b1bc99d5a5583d4c959f5b5c6e842ed546318bc5eb3aa7a5949dd7ecb3545191ae226ad77e008c2853aa52090dd57d146a4a9a04ddaea2824e9a8d03379951c7fac1b3ada66e3b59731ee85a648db85752b909812674b27a38574e1c2f5053a720568f91ab925a648d2acdfefc298ef3f79554cf652dac1b3ac0ca0e12aaa948070b5d19d40e3344a5f3c4622ffeff85c9749c9045ac52e072c115101d57adca340ba32e37e7e5ca4dce67f5f0c08a52a648027066d328f02ba904b8a106cbcb02e0b28dac1d5ef79f63a85c82ba5ed46d2b63c8133fe0e5dfb4b0144f03aee857820cac602a9e27a3828e9d2cac92880a3a6e3f755bca6de3cdbbdddd692a27c0093ad23c4d77ebdb45c371cc75ed9234901551a6b14141dbfcd08f26d1e52f76a607aa3305ddf0894e0c0ef056ca7f7f7f1d2464067e76b5e5baefbaafbbafbbbba7e0880d899e4bdab5d4613feecb9694ae2ce8f874a5bf94bd33cad5b12107ff2a2ee8bafb132d726e1e4b991474919d78533583900a06302832e40a185464b1e9c0f26fad36fc68c02a2a900a020f43a08a48a14186ea887ec1cd4c5ae045358415aeb242f9dd9dc950d1b0f9b779cbe6e66767671008ce6ee342829b04bceaaea3e9562810e305637431992c478cb7c993a7cfb9d960031bbe20e8f6a0fcbe4ecaef93ecf27b1a298bbece8816b5a2e88294d292442a8b552d61e433be2e253499f37bd3afa3adb46dabe402fdbaeea31d2d32847ff867a4dead5217cfb72e269b31de264f9e3ee7b67a81b7ad6efd64ea52a842797236b3d5b279bd5e2f1b576b722d1b1a706b2fd9c4db9614d36f98fa01dcd9787856d8e169b55a2d9e158a7656e061dfe1f9455a2b2ab48a5aaa1828332bfdf3ecc16f7a1492a0dc4befbb6bac734c3916c726cad416947bf9db389d9ddddddd65ee3347c6642ebf22f92e5f4ad7010d2ff116565adec2dd2fbba0b2b63772cdf95bd8b1122bf112cdc70864468ddd5619c543d6eaf589957889b75057eb5dcdf1568647db24487e1f4606b40587b178aed8029842838a940cba4fe32fb4a608af14970a61ab776f0949d7f88ed4ea7b625ee67b6afcea5994ae7a6712700f9b9c4ddebd80bd497555b8aae7d5d7f81e998f79d92e998ff920abaf11f3321f24e665647e55e35732aa1fa98c929afa8e12e1d43b6a87f7302a9887118df0979153cf2808780f233e8cc803f53014060686a6c491ff0555d83d778f0a45d7def489c7659b6893429656132a24d7cb068525e8b8a239c1f55a1ca6ea09a8eeeb45f51da3ba474fe16e0dffd8c1248247366e5362742a2479834d0b2ce488c5724ceefd778c3070a4c8902149b1c9420b1c176eff204881a0439c85162cb0390b8865c9b16314c379c56c989685515f6997fc16b9c84abba495ca573a67ab7cf73c5c2f180572a13c669d3fb917d2899d90a5798d9cf2412d463e2566a8fa33afd3bc2c6d7b592f2aff2c8e5e1c4bb49e93bbedf3b80d6584abc97402dae6446ac1fbfa9bf5d252e748ae5b3a5a3a5a3a5af2254beec49970281ddd895ee34fb3883980857609593a5a729afbf84f165ae3aae20f91c398c8c8db9c576edbc6a536d1b50ca1c658f70d82020414040485b981bac6818480823ae754fd3bcae6421ce6e5b0389ef1c19329ecc28f0b3ba00e28486808c8249a4c2693c964127bfe4f2275126c1034a327f1f539184dd1035c252f73cbd4d853798c66733af05a3cfe354bb4614b84e04ebf45b06e488d3b0ba63f7d4ff7def798fef4fdfa0e79809cdef43dde77df73fad39b583fbaf73e48f79e9824bf8023688e1350977959cb8860d7702f000925555599d0d5c77c8d9f43bb57ea0e55fe1934832a4f3a47579dd4f4410ed42e1e3130729d96da47adb7e24884d583feb8af7a2a82955ff534afd1358227a78d3875745a6599c36ff36a49150553f0ad7a86c1525cd155a3309b08ab7b27d2dce2685185bdf10f653c2c4cc710c782258a28eab8493bd21b2c80524a9326d3249677f872c45eed722782ae148e9bb3bf65041d9ffb57d3ae79d55ecbaf1a36a781fcb6ced9957bf78f1de8dc1b2ae8267eedf2b146f5d779d23dc8ed9814efbd708e477c07ffe97d10e17740f7fb025793c8cde7441a8e13c7291ef1ba4f5385f290e2bd27e2b4e8eeee27f89d51d940b7e7dd5d6666a64f38d1c2280a958b9a8bf8c140e22c4ce8c8592a0a287094c5d1a987bdbce687be4f61055482162144751af4bd2a343d0dbdf7789b72d2ef31bdea7bbca730dd47b3d01e217a546ffa1efade8fabe4c29c1fa358f381a8def440286b8a3f546ffa202a310815537f7aeee3a2c5c1bd3f3fb130dec294851339cbf7a8ef397dea7bbe47bdbf0b8e847bb99c0e4e078b7b20a93f3d10d47fbf281627fe48fde983a0fe7b59b3b450182f5a2283e965e05922434a3cbd0c2891a3ec8dbbc0a770bdc6053f6c650a25c02284084a69a19d4e122625b3bfa5da36cb963cb6cd060e28fb6e91c4094bd3b2a3e09eb059a857e4fac221485c26daaed6b76b5f7a8db7ae4a406998d06d975c02845105d06ca7a8434477e5b30f9a68ca100f31917c969299e9dcb2f81116c7e259b6ef39b73937de441ea2fc53932207c1423cc4a92dd4c52752e06d8bca78327ffaeeee6e232400ab0c18f381cedf62644ee2ab5da14de8a20ea371f5eb6bd5374a87115a4f9ee7799e5704f105594fe2e842257244d6d4376a87ea3f1edfab52de4a1c655dbd47d339b2c371013deda07eecfc24a3027f32326f231c95541b364e1ff33c4e1f23c6bc92ca31e1d82f73e3c197b5920a8647bade100fc026c8bccc6d84df2ec7a179987fc59c3ee66d88a0fe31e2cb01f24fe2861d8b2daa54617744badee6a5e32475be7cf9c2e11169fa9889a685d32e27824ef1c3e1815c241b7c1a420a5e24a3e16d6b57caefbc0b71622ec08979e79d77e20bf52e87a14450caee53ff7522eb070af53dea8b80b5e34662711fa2fefbbe144af5a9ff86a84491c57deabf4789230feabd0f9212bf47796764bf7c0939009ac29d7de1cec4eebf733a072b7beceeeeff3d8b4440aec89091792c9b707a591701ab3f11f7f7ae5b36614df23791ea107122c25b183d000faf52010d439ddf19d103d4584b71676f18a446a06a061d2d7ac9dbba7aedef023ae2e4686ee6d3c93bfdf77dfaef839cfe1383fc27ae3876cf3df5c0cabd7c0f0056d0110499619306c3104d88568259ffc7b0130d06251a11cd8659ff8a61941683126d8986c3ac9f8673d887f643ed5fce9134da8efd6513b8338545c0ca2d9bd00fbabf8a06746e4484f58bb70ba0eea44afe182291a7f0900e34a9c894679997222392a03543d228f42ba95c95b5ac6342aed487ec4d3fa5a80f224abb5a1c82031d77e42120ef3daf1f686c30aa73dfc00a406ad8ce9ca45ed63f2bd88def3fd230f0657eec6cfce9c15016c6bcc686d85f2ac52191984f3da3542fd6782535261c93d498df1ae1c89fa2a1921a13f6045518d16f6013c055bb70ba7530695c2f2333a95c393a44014bd0af7e538715e99a7eea4374b2303ac9208feaeeeeec7cb748277eedea1d501e5294627a31b6a2c398f684ce776e6e73db7c37df7c9bdbb65b9b3043b51f26081821188a06cc2672d2deccc43c4eea9c126a3f2bf196f756dc4fe2e2289e5251e87acd3e4c94da3051fa6184608240729a85d6747f8ff7a79fa6ef9e022b9e28601239484c11817222ceeb479b0f6668f321052ffecececb85152cf5bbe06209fe6ded78eb7ffb1288e8de7b9734ce63d07e0ff5dea7be7befb97067059ece31792b7ef4c72d4a42b9350248e76c175568a8e2ccbf059fa7d16867ccfc8ba4513d55bd8b1aadfa238179af03b882ee78d751eabbb37be39cc8a3c3834c8591eb48f32da9a970fcc4233e1ef1cadf5db1054bf59eb7b8024af51e05010f850abf47c99c373ce2d5fb45e9f0442127aeaeb8d32eaf824e11d4a981b6bcabe2710eabfb4470c515173409f3b694079456fe6f53f0f959f7bbbc2974bfbbe3fce3a4819c677e472908fef3168e4a96b52c050f906fc6df023f061a468ba82aff91a4ca8fa4615b635a336a4576d22e20e71f1a0f3fc7cc3b4b35a12eaec4a9c5dbd6f892dccc13bad1e410e19fbf1300455070bf13593e7c87bf49dc767573ced66c31e8b0ad6d4bb69a380d366741c8cc13ee3dfe8ef47ef7e37bebf567fa0d89b0c8eae1ef3dbf4964f9f0f7def4fbde91ae1b76cf9d48d3ae0667142b5ad74c782e7fe688e1549cd8b6815e7837d3ba5526c051a233828b0c69d7974044c718107f108c81b150084b3e0bed6ab05b0249f5806e8ccaa7438d7b0a952022180b7110cf54decf4d32fb309010afe1444a3f11044d521cff4fa2106fef42211e32b0bff3251e101e08ca38276a90c1e4e1ebbacea7d04e39b85243d7756fdf163c3cd1850c28362c3da008552cf1451062b0830e66bea48e7bb460d45ea5ba9b63830560f143141d7cac10028b232e385c61032c454d40e1537250fb6557d4fe1698f6459077c487545b1ac4a2488e7362076678dd9ce9b93789328f618aad2806271cc7715070a9a22b82e1c8c4895d278694da2f3bca4493a1dae0bb9a0035e9b800210970e80450e4d490832f404862e6012c184307196cb1a2061e68a088882bc040c20a1bc4207f3d6cee1576cca0cc2d026f5b6beae60331892cfed78cfb4e64b1c8e343291fd026127b8a19b49f0b77d66dd2dddddddddd9d9beeee2ea5bbbb4b771f92b3d930b287aa748601a0b602bf65f3c2910db1c6a0b37a40bad03bb443ee3fe33d94451d79490f79102e34c46fc60744eaa706200470018433bc00f1a9b870348871820f10b87051314105f9547999e08a1098f09fd2107fba30410f0640230845ac184434207400a221cb13099861049114376871c51092bc1efea508755422850aca88c3508f3407c6a87b658ada3850aafd643811420e1b8431360c2a60d0a00b1f6a7f1092968b34b204b158ac1448d48e628ac5628b2e7ae82246f9b0515d1c9524c14502bad891801a6af330410a6ece3927c7a5c61e09a0e1063f6c1452dc54e10a82f8456d1e3332ec809142f4428791ad4283a1c70e608189a2b694afd4e80213b59f8757c6dce6293582c0a882c04b0354351a0313a2a86d45ed3abe5083dacff100951a43804657c5b682ea44d2a57477e92ea5bb4b29a5cb0e2335d6e953bb01a7187a28a0b668c4bf7ce1ae055e3bcdb75c369fec563c059302cca008a0253decd0022282c27042882b5692a24062c6566411042026cc5001153fe8d25a1c4d3b70e5de6c3835fac289e5a05981ad7e720202547902c4133da481848f4f594ac20c31926aa065c6438855d7baf85fae6a2449ed27356c175a30a124c4165d24f1c40f7c40b3810f635c313262c6bf7e025a1b2674ec28925310410c4d39119da89c6a9c060d4a88a0010d473c61441453baac911736a02103172b57b6a461f44f77760e3147d76cbfe568170e74ec361772e490a9b0b3c2f6205dbdcb2c7cc2e841054d28d59a20e9306325acd0b2830f6e10032a8e9448e9628326b0a0a0a806276978dbfa9df1ba5c22a9338fbfed69bee5b2f964b79ab50c261882193b9c608b11547cba4051db02862660d0450621ccf8d70b123340000b248688f2640557e030632e68d480851726b8609145005a5c3084296ad0c40a2866325d40b1640b2b28b8818c216cef494953b75fe158828e5fafb6a7596ddbd3f6f964a8bf4ff7693abab00904f570b4a488216a00c48cafd862081484e103142638ccf8b7bb8e07ca82102c36e0f18f09a8a000fa7941722c874cb6a2cc32158a988bb7a1609be1e1861de090830976ad602cbb577c78dbea241f52524ae9d7bd6ab11c355ef2781907ff786c9dcfc4872ea14b98a4b0a473b8e7a73ebc9dab88d61f3b3c8bc3b1f0c0fec63194b0ebeee6ba7f88905cc214babd0459fea6efea0c59ee7d0953a8f7dc7b754f2617bf1369fc47b065a39a826ee28ab68cf85a096f6135faad104799ef2107051d09b1d0ae7e76b661638890cee10a864c81a00a8a132147413e4e828282827c7c689ebeac93740ecd9141c140d808366efce947085f5ed30f862eafb961a388d28781d9a732a13fa36056abd56af5a36b435fc5d45052b7460c7d99c3844fbf5da9542a950ae5a35c4765b4eab847455a0e3a8c05301e6c09e16616dfaa4d5320d1afc84aadb65494a466857d90740e5770099226e8fcd1058254a62059aa094da9d56a3521219a87d239a9af392bd80d9e9d21495bf434b29daea81b5775dc25284b209226e814c7551d5d2e97cbf5600bc98a2e7d485156ef8518443039f3228ca329b5f931df3135625ed636de86cc2f8a476762ee56a86766e6ba47c1c0ac6410ed9a52a85d5346810234802ae83e9fbc8f725e3a8736e7774b3a9f8ec9739c8e8feb0d34e80d3328fd2187bd68341a15137ca0dc6af52b118512574b0a7042c7225f85f9eebb1f574a33bf28233a540fae4678148b270c9f1584849fe1564442b8d5bc660e79cd4c3d9183104418220a8d360bff5f0820253c094f82984408d60f123e7c20247c2826112245820884847f31090925883b23e153bf33562ae635f3533fe81c416ffcb852f281fad40b5c39807a4aa3d12a0a254ea4553883c219a55df3b97006d1aef9aa700ecdad3375d5ad94564aab25199a8c8f52bbe60c2a85428923d4e042c76d68e65f59d0551975feaa8cce195749aba4ed1c8e4371aa9f0969de03b2b2dee30f6584eb6af55c286b4af58c5abdc78df0e0bbea53616a060028d4af7e455133bf427134e10f2894f5338f7acf84d2813a7d2bd5115955bf0a659595152e11ee57a970eb2adc3a13caaafa46f5e07e256e3353898e20ae96da351f14575bdaa50305bd21f691529def0d400bba95b5336e51eafc3eda88b6dafcad68a27ea67efe1644e7a87eda08b78609ba21b139e30b5e571ff3f3372556e2b8fa17bcd6f8f91bd1e2588946b85a4394533a27468c0265fee664feb6447a69b965ee7c8965ca20cac802469d3b9b5b9d5c93531ab6b3f95ee430b891c37836df8f1c66fa82369bef483309e96874a11fe5152b54eadc86da355da8ce77a1f93e34df89e67b6d3e17be3a1c1bd7d380dd37df9d740ef7731b62c01694678c1b72586f4345b5a19f53a9d63e454645753ef7e3b0065272182f19398c8fba867f684948899bf3f1316a1a120b719252d847430e63a2f9e33006da941c86848d66519d4535f6191212520a4afa39f231a28ddb90cc0fd88f026f5be3ac59099fb1a834ce96243dea10d10c0000401000d3140020181008060322b1582c1ed0c4697b14800d7d9c3e6a52984b446996e3304a31649021808021002000002230a37100104482ea0ea3393d7e2669365e92e6136d4ca35a3534b15c18c3f854c3bc64d79ed4f8585b0366ec244c66d6b89191ad222dd5fbb0f6aa6d1b72d82d38fb8ef4c912b82425eae4e6034037929d4aaa46f06f6269d869ba847474a10c169ab8d4134841e41ba7f2855bbbef98f810fa0484d9faf45845c8d8b57d5b0b1f305d3651fa9b56ba18b378d26c16d7cd3d0a6a4266b158af9fe45db804bd00b232dfe13d82af875ea9b89f779c966abedcfaa547066b9f517aa4024ab87fb87aa03ebbabbdfed619a4ec145f8b46dc606a027c3b83dc172873cc281f1ee49775d7d727ebc11b85c93af01fda3d2aaa3f259f3186a07aaaad13123fa3a6bf96d8b34f53f97783007a55dd7d098c0987108348627d72c096c55abd0863d5bde8b7a5a9e6603c75b2c1f8e8f3546ca868b77947a87aa27c0e6405f2473fdec1b16f1b09ebb6b29c9e1533b8d97195b77e16a6398ed7a1c75af2ce468fbfdcea681d64eaaeb7af8e1587cb5da8de4bb8c32b2ba0303944ab4e96e20e44354bdcb7456be8260c6d474a7780d49a312b208ec447e2d8666ada2ed4e89f0dd60addbdd2edd179f1b5673a700467a44b0a992b2f58a775c435c5c9a62034f3132fbb6df07298a4ce87d79b808669b06eae47c18e16f3651ab15c164fadd79ca609159fa7b3a905e23f273609effba9ba23d4e282e8af4e06eed994e620d4eec86d1b157a33a82477ddd8575a497aec625a8f80ca670be58f8c9492688abf692f078648bb14f5fccb7c732c5d63b9806ffccb643cb05300cc0cdc5f207549d79b6a0a7c650d8ffce5d06750d1f48cf2a45b79542de008eb3bcf8cdb10261eae0ec20f05a8fd3475e1ea248c362db4fe27f98b34455ce4060e90e7a0c7d48f73ca06c18f853d37d8a9831e5b893589cb929d985b96fa6a924d4c935040a70d222f23023caef65a0a12c4aed7b0949a6f7656aca873c248e94c89c7bd7d51bcc7f780cded9fbbc307f27ac4f6635c555473539a3f7bf80c1007f7d5d245ff9d76dff7844ce3489b4562ecf2752704bb686078bb0a13c0b973db07412623d37cc3c874c1526ef2c0344b175bc027b041a975b13cd228fd3254ceaa3dbcbce4e374d9024e12688fae04b4d3909c6130359af725b2ab4f24434fe448433146a5333f5c3ad0a2b29395fa8e6f95dc707c10b4bd15cef660eaaeaa51b5c7a42718799f1c2d4ed89127256799ae519a259276c8358757e853e4c88fdeb9e8596b3cf3901ee1d9e718baddc47ee53c14f168d4739bb293e4efb6e2b8796e928f54b2e422f6b14b5ed895716287336135f1c76665d89662791f49bde2f038de418593cb2ef0726ca839b1ad1d99cbba3c0c77cf9856f9b42deafb9f93fdf3ae50f52affad84ccbaf4454ca38f7b9cf4880eb6b10ca7945553c3996f786c39ee48cdddc2b68bda897a0da7fd5c12b96c72c7f4349ce25b07e040f45175133656d37f1d4e8d1d4e6a7938bdd56af2e92b90bb3cc9c7b8b4fcf66bf802ee5af5efeb57ff31e797ac246a8f86feb18490f482af8799d31c5955d35f18a3d674384ca6c4006038c4c7955e0d983231161f6889424e572dceb6827d2830af92b77fec637fe0eea65556ec4340208ff93db66efd1bee08fecb3b134ff4f177254fc278f4199a534e0437312fa91491ca93dbec1e736362e5f51492b973316a997ac5ca4edc534be2f7a52f4fbf4d8f9f32fed1d78545bfa63534b3cb4a5ea00416780dc4855d57ce58660c3f919f37a69b2355a196bc45acd614120d01fd8a19789813c7aed8617a014a269fc6bbc2b9f920524a6fde5c4893ed906c9c9951001a81fba5d69739f9d661554b7226272f3b131fc0bbbfa6e967f032f5f42d9eda545be7e70e7eb8f64fc607091ebf3e9f44575241600a62a15bbcefb01c1d6600281f373c8d91747c58534b0148572c98ca4224e62a72abed003b1b7f440ab71f3b3cdcb221f87a6c88ba6e0ed4d47703d5346f62bf0d13070eabc5664a37bd92482422377c1c740e1418006c153d5eb0cea425ad83468428756dbe88a4b2d1f615c949669adc7d9b20f0437736bca96e0372010984eb8c0278aa30a4736b2665153d7dcc05e90be09ebee70accba71c02b79162b213e412dc60f56601601d0a3f10acded00778331267b9e20e78fecf72778d9e02f4adc9cbd2514f75f294a1d170ccc506376a2ad8684b50710a9ed8846e4de1ed07498ada369a3f7022f8d0db5d1aa9c81708047e6deaac9e816f3daf27efc722c8b4de615d1d8b1e81142854bc2e4b7e37a114f7c669e0f4b0d8d915c07098c40a84575b023ed7a25b27b41e385970aa6e644a33f56a0531f13f91a622f351fda04c9570adbfc08bac1a065980fa25e9075636b3e536ceea63273752ae813262656a4d4dca03e44613b37653c7a283d93ea9b390f334e6a1a1c95f92d78a9c618ed68a36935f142f50694a23adff36e7af3d1d120c47f9667b62e712f0f00efb970055a0c58add7f3f2fcd597941c9a8a578abe230d11f2808aad0baf3f93be0c28e19ba755cd4274f7f4777bfa2fed4011a12c5e98e5622d1064d898706a6357a43784e305039f6593628aec4c9173e7d7e5c804e326f94146538b19ea4921028a067aa642876ddc91d9f39ffed027153981b83865179a0e3c2da0a045954eca5d77cfed79fc1af71ea3335ed58ff04e44f3cc0d1b17177cd1ced2e45af9d7e74813d795544054057f22c5d97c13fbcca50e345818b607404334d40ce23d1d7f242a75486a04ed48212787048262d0160644473d41b2d3ded63709f14af671cbf838b9b4360d94756cf31769f35f5166f226e791deaa7176ee40fe38865e3dd5610220fdbe77b986173aa086bed20be061c891c0d3e86c0c8eebc307e2e48e03280f80cb651bc52305f693899e12f0364fa3050a0e7b9c867f8c0bd600430f38e140766f278143abff6a2c6c719e2c9f4e585df1f8c21a3b39592d860940094057bb4cb4bd653d5af7d85db79d195789c0e42cbaff56981288026f6fd11599d073f43d40584bec020fdada065037984c1797e2cb0364960acba72dc6fb948b9a9fe85c18565854fcef5688ada332f4f9f2e9320376c3d30b562285ada619f3cefd3de8bc45fc6b7dfd39267331bf72834b7b044d9f89e95317913a04e4a5f44f5253939462e6c878e30f8a64ad3a5e30c341f65a91f2f1cbf8ea009193f21e7b674cbe8c2b1913119583ca4d57285ce061ff59c86a851ab81037968388c116d3333e17bb704e8f845808de63a182c9dd81fc0478d24150c3e82061a95e60e2ea3dca44082c54d5ec3dfa7f7224e75b28c80c18f56b5dd6de4369e23a6bbaf7c8756aa558f9c95cae72b6ef755cb6f7f85f93710323bc26f87c19809d566164ff90aa09ccc8e5f14e2f5653b5a9a35060c1b0ec512ca041c9eba125336cf56c74efd23932be051c20d111c4a32c39b373c9208f19a3530ec52999c0b8039e063f686a80e1f0ba501c5717a641bdbb003a96a76a12600bf164d92eb40ae1d53abab7a267ac3cbb5a75c6e745979ce925108b2ddb8521c8dfebdf0d6c712d17e38d7cd9cc2b2b24c1ff8f5d480c5a4c6f5abe2ec0dcbfc444edd6525d90a282f1fc972ed467cda2ba2d4cb613d487a91d9c9e01e582defba4dd617dfa52561908eaddc2f3a9d86ce0d748db0c096b2d2f0414fdc324f17f85e0506066988582b00a8603af1fe77c533812484b15d08dcacaf52cb63c0c011aa18998b08a820e175a1141224afa57eb86c2a7de19457e7ca7ad2214f8ba86c97ff3f590c3040df31c7e125019f1657628d0d550386267bfba5dffef463d1925e82d6e17e9e8c935cdb075cfba6ba68c84443b28a849c44fa0e78e6b966bafae00a4772d01a93beeff824fa34411a3321f6f54d47afe8d86f1556633a8a5544748c014b5fa32e66009ae44014ec4928bbe9b7efea82897eb0e7132199b98529bae6a77ec8597b78f1d33e02333765081d0f68a49a5b5147a9c39af8d3a3ed45134fb92d48b84147bcceb70622924e63b60ac4c70fad19d1c7e1cc96971232443f5771214222aefcfe6ff7866ca633f23b0cdcd0fa8571c3699dfb4b40d9d9e8b14ab65b8983eeefdc3c897be2601cf162c3ff090a51e664d9a5f049df477d1ee2be730f525f08f5e14181469ef70b70fe6e2caf77b76b3553985faab6598a5c258320102772d9d666df6ad0736ea48f0fc0127309ee84f2a4a52963b1ea088aa0f74a4b1e091962b7803b085ebfb7ab79890e375aabd537748c8d426f58e84d300d4b6e434174126f9c2a95a09411d2cc93081eed406338f4841cbd3d8b3becabde303e4f87a7630f4fa742373d50487b74eeb538a69aeb88088d9a6c41a3c4639478706d41c56a61c47a8e746714b7d3f1c372a93dc68ac946007284805c47dfc78b08973363220caa8ba57ac87040fa90ea2ff7e1be3ece7fa880c6c9201cdc9880cb636f92cdada48fcd90cb7c65ffc321c73f6a33c727941e71deb6ba10886b6166ebd7c7bb3fa7f062c4718b01615bf5b223b5687bd2598f779016dd86d9f18fcd11a26c23b3084c37d1f61c3592d789a78f7011135a43a2220e30eb7e20c197f9e7b30c81ecbd0b1a66c18229193bccca44370a702ef32be1f49c2ce7983e2c58015a3d7d3b95595aa5986879a0412fa7afc943dbeff4f013588d14d756d2e4a441d9d5befd2d1a29a2ba1d20317746e8937d426af4031139217db7d1ee15a659137b65d045bf731adbfb1d6389c7c20fd9f8a37e773f37f5af3495194213abe2cacdef89f0a68259d0969b1a9b038be224330fd10db1bfa5826a7b7e39be3c942b0d2b444bd795ae6d62f65b9c17d9db48f8b6d3aeabc56903b9911bf7fdb772160215776c60c42b17cd4dff3c8b3d37dc014797e9b786817a3164641998aafe33fe45286abda5c6337227e1c6c24a407121c1cc500366663e2ebc693bb04f9676fbc5a3c872b2252efee7904dc52c2bbb1e94fbb07bd7b36d127951596714d0ca4f7146726520589621e998a2c8f8a561b1110e41874972780a594704c64d9d0a07fb236a66b48b1f9abd8f413e45fe4b75d9b9c92475a4347151c1b64907cefe60eb8e2a4d2803776d83d311b7394de47e1e435399481867e11680b204e7e2906f198a0172e419f024863e4a92ffd782fab9b79738ec7f1fa4602dcef60f10d47b29ff2abc3ecce59ec00d3891878c73b1ccc8630a411a11d514f78fa2cf59031ee1e77ccc4933fe26a4775bf3a86a7d45497f853784ed7213c5b341eb54a56d2a48be2a5568b2b35173c1523997256c41c16d279976165ee9996d3b788863d7b0792da954ed72bfc7fbc9fd297b9cae65e628364b0e1ed4749c624a7f363eb79b08a0e616a94e40103ffd56df90aa12415c2efce4af38a420002d041f8f335c0e35a8ad91c53e9d6cbe01ee078fba34149c087c527cfca08d798d90790bfa1b078092207aeaeeed05c541f1acdc9fffc1a60e359b37efb45f86d6dd80ebfe2ccd0feb5d7908cf6b2545adf82caf5e9e8181780d7db9ef3ff54e2b1b4063c6fe3c003326eb2393a42583e26c3bc7acd39c7095c92d259b395b3bc8fc5ab0f1bb1a883d0a745430baa15a5658217050665cc8b969483830761d147c44b650f6c8aeb38a6ab56ea08fb838d715f9d43c30bde46886bb7e978e7ccf60b148e77fcb8691b6adbb63e19f367f1699f9263275e47405e1857cc34ca7f00375c8adddb4eb35cca3d83309b65fcad2dc59292a7704c354842f0eebc6eb3b2231870272d5d7bf812d1a332336e434c66219d3a1cbdcfd1d4c79bdb1dfc22abd54c6e120ecfb98de18a6f90d92139a0470d4e09c0f75cfb6aaf52f3e12072189093155dd57ec7ef7366cacb64643ab9b320e4aaeda96244a8f43b7c3a51f47e9b31a51dd2d4977c8a9f5380619efea5320717a2c6bce57cc456ae221122fd13a2ea8d19ec6426eaf7827dde8ab9dc4b4d230b884571fc79491933df141034aa92ddfafa7efa7ffca8a18c54baf734751c88a1271beedbe01b47f33ff8bc3c6f85b1301523d8936ee2febe9b8d1e64edbfd89302d095d12816a166d4854326ea0aaebeec909e94bfa7dc24a6b9da8614691b253183ef82ecf8454fca2c3f7716399c5406d952d2a56d31d46bb4d7dadedd2646b48b321aee81bea6b00df3810cdc6365ba45601845f96ecb983ca2ec83873a3fb38aa4cbbf690b5b5019eddfe8e453624711c8a18744f4de47e284e906c90f9e442282c5bf99b7904f0341e0f8a878a953d988d5c5c24cf54831730620bd46266a6bdc218837020928689ff5b22c27ca2cd1bd41f954c8c6cc5037f948421b09f2df9c7719a278ac47e54a84f35bb8e1aeb11152c8d8e44fd0d0448cb97d02af1dd2acf9e5f953491aeb18e27a84f621dd2f5d914e3e1251f916a206ed90b071df738fb7f94c03550b09a1f988201c1c479d5edec6e9cb96e2553995d671632bc850a32db39fbd76be2e6725266abc8a1e9b1e039f76e8f98fe56bea0e22f2bec94a3c7e920099a039f5bc531444759feb40cfdf65e0c1b8d9276023f5dd4f0c24366e695e85c9af1f1257ecb15871d34dc301949faa21c1b21143a848ff615c2dc8f21b73879c28524ba1dd5fed21c3a7fdf7d493e5c3dafe982c10edec2cf38957e77826faae06fdf174a468ccc9f11680bbb2a89db2fc45ff52dcf0f7279dbb68507b4fc19752b979d5df95774116561ce03cbb8bf40b65c43ba0b9d378be8a41277d1708a1fc8797b70730ea6a601c0e3bb272e2838f877044bf91cca402b3d9d67cd0d07a35c8475b857246dea4964f019b73ca08e15e211faa9463e08573932a42c611563adb5f9c71dc6a686ac79974cfef927a845639358cbfe90628438578afc43d97145591d3a7103fc8e5fb54e6d9fae822fb4f1e2c17736f418a84d5da80afe69d6e704a95c096a393e2919b52ccc063ba4278678e21d25ae92be647d6792706c523fda4e400fd9ee703ce652d517fcfbbe7b9372c836092bec4513ea6d158336b347a96f89bf5c4457766c317f7eb7f6a86f57a6e4948dbfa93df0020c4c279545ee4f0539a103c99230995330ed5b571f5383031800277c864b93c0c577c6e11e04c9971aa2d4434664fc206d0347f36d3825fe077d5bb5f211719c7c38a0a1f139b901cc47c3aa6fa0635ec8a984f9b87aaee960080d3a3905100c8c60b62708fdb89959f56988a892f5a132b70434d7aeac0f48b0cda25b2238088e98264634d4ee61831a1037c44cd072315a6950d826da7eeeab10aad847148f9e0eec28ecef32b2531d83433c969ada7bab4c1f39c17b4d1f0964fbef298eb3ad4709172d28099bc08dc553895ba3f7d667ae87075695161b6e8e5e3c86fc168eabf6923b9c8bd7839d2d23ccd13868e25a531a06f7d05e6bf0741f3f112c7dd07a047e4bf4185afa6fa7f0eb608920083d0114a3dc76034865e9f38645efc3448a008907f460084388e9baa73ca5f1c5e8ffae3f78f96a9a95c37a75d36900105b2b2d4ab4fa3893fb5b19403bf84004f41dceba48a10a9f1769c00bbefc02a99de6eca1c22c7235629c30d3af63aa56c68d9b0d2ef5438f4c1e3f41be182e7ac80294a49394e8d05ba85836fa2ca7b865d2a2f376f8c5365d32d5c7e83988e95a6b1b4c541bf5110015db96f6e965f6d9dcd4c0518aa0e8e3ca4a99e697c1bba95cc23ee6b8a75e07c5ec05f9bdc6200bc727a3994e5939046dd261beca9824bd53fafc37f95f8c058a7c60f3dd96df68c34323d91d59bf8e7d569a11b4a1938cf6403e6311075cf33f784fa69f522dd4fd0560ff30a78fb27f31f1276c2c1429e98395cb87c87e227be47a05457004e31d37fb7162313a17b5a280630d8f18419e75cd64f522b4c860ec5b3bdb6df300f66f6753d049426713698788722962613460fc6ddbafc9d87621b4723abd0ee0bd078a5904d876940afdf030feb9a52ec591781d986821810a9316696fba8b61206fad12842d58b45d1958f87fccbe90f8417a09161f07ba1f1550689290752bf22487208c3ef6233d1760658ff2e1ca615f1c365a5fecd972726d03a2817d68f98640698f2433cc7e78a094406dc0e070064c6ab36604c44680aa9c9f76598df4d4a597657104ff188098301b35b82e3664569a998a1f82cb3f2d8997a413d8d4ccfd29ae63573343ba41f5e52df596acb8b5596ac86ac12611d1058433c0ec872a024a90e9d396c8caa874e0832107bdbb7147c7298db5f987a21069a82340c1587b97feceedac52c04795d482500325d708f8a773464f41114e4652a8d66dbdd00001ccd4b6c9f802e8c28c084123b565d852b9ce452e8bebb9feab350dd7437c6344c1e247933db3fa53543b3a2c8cc7fc9512983f3bf61b0150d5a1a64b688f9c1ef145af9f000c797544e538d89139443be06193354b2b238998107eea5ebcfc8894784ad134da60ad8cdb8c6e288cfbf02d60204f1a8b257cc684ca2d4ee02acfbb90b5184c2a0137838d25495d6a1d81c53e27e62c3608b3dc7684211a6fa078ad3095ef1c460b449159bdfa83a981c7b7962513bd03023c836da9184d27da07d235ebfda98264903f19ef9f6552900d0235a051f66f485180dd4d238f27174358cdfcba35b45644b4316e64047d316362eda2846071c451b1d805f1150e2daf68e140502a055651acb5c78cd0126cca3de30bc8ca850a14ba9bfd8e350c8086aa6402f63685abf45ad2f42bb8b57e10f7834d2bd5ead292613448a8457cea421bf398c375e9eace040dd69bd1d811d961b4a03817a1277fb4a1e1de2412214deac8a148e3ebca18b9dba53cefccda9b100a0f5ce97bfd457fdfd9aec350a2d3e3119e8e2af7c75d7ae88587edd707e3d911a6930b75d19c77eb2ef8651bf9f005607edb9e22ef960065a0ec6d7fa5ab7736aa52d0641b6a939dee05315e8d8cf8ce254f87ddebb9e5201ff5823d1e1ac8f5d4b9a21106f3a4d06b93a34dd8e4447b1d60224d96163706c615e75759b73117a9484de854d8872f8ada96d7b03f817ee2fcda9d55b87ae6c31f8d69d142e75b26051c4d10788cbdc611320c87c104951d8b7e1db15399e81f5a3a9e4615ae30c3dc89155529c73dcb12d5c4c3be54ceb4b9fab2b804099666898135680262b23759a23a7eb2d797a2524bed116dbfb00186665a3d36ab3bc6547345c3018d8ba23beb692a42c63620c67227a264ae12ebb4664b30abc28f558adc30ba939157ede327185611a577b5e98d693386db91842455d89135cee0cfdda959dc00ab27643fb3f0ac37f518cb09077862f7218b707c4a0b7cc13794d7f97b815a4ae62a01b21d3ced9639e482de122e165af9f2bf7994ffb7202a06ab6582689c2427b05d8d352bbe24fc168796cd79bea25d26d552378437090b1d709525030b53a7fd4e8948c8c391c50c18e473727f7182d5694a4862914de11cb991e67d8207e4b2ed27e7661530bf1eb2318960c75b01a965d8ade7b915af7af7ff03d61b2a6f12361787ae851968c8c7eca04c2f7968cab902940dde5438893ba49179cf32043b4f7006cbc89338d88ffef42099b074d62f671a7d8e5b6e293c80675014e9f8ac7b6304419f909200544304555a225fb066dc325bb2e0c922ad5744c2b735376f641622a34e75673c30d80a4e1f65851c34deb78a86227837e3484fd1757b9e940cdc04cb8e1233a5d55c1d81bbbe9630e363d0c9bb1675f0924c27c2554054fb5f7bc0b1ac1758319f57a8db7a830dc871fa0724625b590b0ab0b09c6a9fe5cf8024418c8923dc6a661250b7bd7d2f0b1c6aaaaa9c0a92eb88045d050cc4666c227bcfe8211dec154ff86e2ae498c583279cbd8198a8c7612d6547686cdedcc81b12e52eae619ba2ebe6a7334e68869c058c3455c2415269c2c26827638bf60c18446d7d0d7915a7686a79d6623d2d8b0ccac8294ad78369433a0ad1b2eab28bb00a28680efe96d2f2e9679947f055f03a5705576f88af3bc526c32159eb318e5e5cd5633516e062622fb84ef9542d3355d3da455e54e57a288b13c6bb546970d1fea720d631597fae19f4a7d77f780dc2e52f2e03fc8c37d6830b55b11832c7fe91231a6b1fdf8b157a7ab5126831b91326eb169b03c8c84f84d42e68549320a7500739a7ab98bdacb87a385fb716a8ee412a71b109d9109eee824ca9babce86ac9cc4ebcec4ea428d6c5538a6c2bb6b52d9b9627e8d48486dfad775cee883f03db195258030691dfe78dfec59c6063dfab3a594d6efd4a7078cbe5808f1fda25a3025fda788c43cfe540f09b4e7ec4c3e452702761a081f20c0a72685ea3c5a603b9dae132b713845455e6ee6ffc5fd751d4713c5278dd2c7cc541895734e41b31467384a1fc3d00d42a545795f21d53ac7df828cf257717454e0ec41cd7113c51ac3cb0b9d7021237c90e4111bcc06c1356afe6e8129025d9d9714f4c92f69964c640353a7b554c8b9ecc487722b0194fdd23dd302122b2f8070ff1f0414ecfe76a0a2fad4d9dfbfdba1315b0a071ad1f72469391a0d790b3ef99125c59d2eea0ac416a7758991f552dd7b33f9a7fc61e4e16c1570c7ad33490ca338bae14829804c0a320bb1446b3242d33ec8cf299e7b3e85baf10228853fbbdb9855a4b68782ccfe4bf7aa0db2d6268f7b618d007be7f0c6c02548111a184f34858e25f3c1138ab81f9a4af1c3638ca7a6d190f17c30387e2483ae38ff9389d836820d7ccac83ec121c57ace2cdd2520c54b3778bc56470fdbb78621fc258fe3f4d73025ac133a14c02f048417085e920c975d1d932274e7ef11d835f8fb58a50a7fcca6fab57b1766868294295c09b32a0663493771199ca903155594f0a10875916e43d83ab8c70444fd34e894ac437101afb11ec03128d28d06d50941ecb3c388393706bc95291c39bdb4f76303602a959f11874c90b187adabad215d46377be26f62dcbbc44a70b717b195b061ce7e3b9c9a63055471816b8bf0ce6f440a336f461b9d85f044ed4cc6534a1ed6a2385811b868183c2764bcbd912dbb9adbb211dc04d1445e52d4ed802f511573c4940a49835939e7a324597dc7dda2721324ef96f83da69ff6977982e3173355ef8c56e6fb9d0712c6ea8945727f9ad295ba8c07ad64c002ba88c887e95eca5c0864d087f444e507a806184919857f3f2b09fd37053282cc048ec1b39013c778e520d9049771a3014d491f73c88f11f27aa44c33ada82239bbe9ab160e2eebf149848716303138f2459772b162bef7f2429bd24cee5ddd0316586a311860c416e1526be0accf12a616159e7e222242cd1ed53565a48a7aa6f6e361cc50345511e0409b8a09707530388b833de39f28c4a638060936dc827b61e9f7254a2222f9b980646bb9e70e019e6b900798cdef0eace49e4ed540544cfa72a3541d141562a6f69301a864b7d0c7ebaba946c9c212850943cfca85328af31a1ca461adc8908bad2e9582e4894423cbabbdfdd591b48b9ea666f0b896c40182183a5270f60a809b150175c4a6eba8c94f20d7b911e4e5b09ba1242c091f5b07dfb921a4ca68d179c3493b00bcd21832ee6dca1b0145770fb3238e01799602289e939967d16f08422a8662b97e50aefea211c5ce478fe521047ba7321dddfaa3bfd7ed413132a7c56a0a3a437e1be13b7f6ef03858496ccbf2a79c58d78ded7840eb712225b37c8e2842ea8277d75d7596c0840d42709a1e2256e620107f7e0ee91a8a8379bf3007c91053347417fbb6a52e76c11db92cfb95932afb94f072553129a28862d96be0095d49a761d5d54f8926709e8504fe3618b50965908ebd5ab9b4ebb617298e174eed76cc1059e8a901e59b9a209754f6b04234626521dc2ed4e093a596e44c782881a5902196447047a3b43b6fbdd3857802743ab1b21849c4e9e3bf08342cb9b2895d172b6a0b50df93cf4521aa92f75569943a76dfcc968a9159e30f2739d86e35d3516c7a9aeab6e6797b0e13dea481771d8e0ac6bedc8847116a084e1021fa21b5e1fb276a46821ddc81a2a32e808b1f8b2cf32ffa5f6c41ad48dc56c1a34c37fd4f324d263c12bfa3bf981f43d3550e3fb5ab3f7ca9ccb2461eb3f2a4cff6371810407d7111e553d8884ce1d7ee4337eb43c098ea4a1045ccf8e5811b349b01f84184170afbcd68a130ff10b4f3b99af20f43feede8c587b7fecfd20bccc372600fe0735f963d9194214194081e8c110e18f8745927e6e886de5072ab608df11fe7ddef0414167e0ec7bacbe31e7f56f77ce8f2de37451cd99a45ee53ee00167bab16438fa37ce0286e5e8348e7b681a659171dc6b9f42e7c5c1a8df8b9de8ccf08f9641e999e880c143db0ea64f8775cfd9be0f570824ca6ec8d1378c3cdd115173c6e26c67cddc441bfd6a306fb352f121721410e2fe7bf870e09b7788cdcec8ae41e9ec305c86093d20f7cf96faa527be327c2810ffcc540c7c5e44dc8a1338554dba8b8bd9b8fa2df4c83b2de58405c5aedde76c26c0cc1e2ace3b53ac40aee8add030c3ddf714b307a68f5f683dd8b3e44be2f14bdca5903b50d5df438a3cf5272eab26e1f672c3ecc73600669e905d82980f8e22ec69cb1ca6325aaad59082eb6b6d5fa03fa2c3386eb156118eeda7c0c1390dbd4c96ba343b77426b72fb64ffde92b9abb07a17d8f934399fc33dea97123938c7bcf1b285f3c68d84356025a2af5958cc92a48f40ceb20d823742dc45aad8a17dbd4b90735c99dde99252cc923e06bf952cc36a11b0b2fa17c5957471e9ace03ce05226ab70c66e8fa7ebf525ed1236413f9bfa6664382d0f004167cd4487c8e2c69848d4323c73450052131cb436dae3ed26e6f9b5c1c1925a2b1c94069fed0a0c5ad020fe76c38c72bf0c79035688733ea9d11d8c80d93a30cc56342b184a605338dff896dbf6332889d743c3b5b763ab820e1dd439a872c72887a51dad20e5f045b7f71064dce00e75ee3e8f166e3eb53fb787be3e9cbfd58c6dc495cec1abd674f145ab1faf55d1736412fd520877fcda714a647948b4412f9a6342193a52a5e009db1c26f121f4fa8fd22eb812a4d38dab8f7fff5b3686599105439fdf498d1634f3f89d2ec9f47318168465f017526004fb2d5d9150c4e9c1c273d173b722f99a8a373dc77a331d8011f21e6a1895a4acb3697f7dfe95db7072b5cc6ec6c8e055275895110a93b552a6b139a5fb2bbf275fd577a3a575c53ce902a22a27231cea70317f14e141bb82f0a5b9f3961e05ff669d73495d3e7ff41584bd7c96566ff2d8268b5744357cd2264c6387eb99261a6636fb3cb030fcc21bd1c9b90d9b83d569cbaa8048793e0bf2bf8cbf50103f0161184c534b5a8b1c4dd3113f565148791259b89cba085a38bde53be6a7cfd46a9af558ea6f4d5ed3dcbd5eab2d605503e6904ec4bf9489b07befb245f4ebdeb597d11eb87412f04267c0b73b521f0891b8d4b91aee49834eb154bbdd93fbf570ab378e2d0fdac56035ff4acffe63f70b6f1d2ffa340a45b60948239fbee668d06905ef4471202d831460f1f75c021f95bed7551871d1b3061e8bb8fde953203703b0d1f5f1bf450fd79c7cec3ba733b1591922c09f93721a5d5dc3d68afef81e0ffc8a4534c3fb93184e83a99d20d04e98d85313ea9868150212a0b8c41599bcce37ae38a9dcc2cfc37b430dff79c16fb01982334509b2e034568a7d748fd3a12d22ce36e04132c31cf9e9fa5ce073d7b45374d3643382e985d1163927a2d27e3699a0f790014407339bb8b87d2a14f96456179e144ba9bc75f60eb32eb0859711a007dbaf3251f193e0d0df8ce6d735a7a3bc507e193da4cbb20a8fbfae6627f5f8afbabd646e597296530376e2a6697a3bec0a213d838100664619a402f5ed2200358f24ec8b9c52e2d25b39d89ecac6dacb963d10cf6f5772f11b3c6555d7dc8222ac2239b7521a4305e78b0fb5291af2c6fd5656ec2ae6227857698741ebae02381b19eaf2c9d2d8198bfa7ce4535813f5a4b7994dc17c077e241c7c100c173717cf90a01753b98bae882f6180f96584128a9f38bead460d88cc24e2f4c00ff1a14a42205ce57516868c53dc4bdc6519e5cdbe3b65cdcdc9f2a64a0838a93c98154cb64612565f16e8f92114a2d36c4e4488c4c59d52dddeeafffffd0f0c49dfd9a35b174d4ff8774a021e2277108592cb6a4c770bc83c9421b4a08f6e6986bfbdafbc676e7ca3f6987202a04e9acd2c3efb5694981e73029519c45b2653f1481d661b0eb45c8536902dfbcb9b06c1cc1f48ebea227eb8b8b3a69d00e2afa61ba1b246811e0866954ee2aab4f914ea1deb479896846ac473727d6066c1fc38e9c9c4130678f06b395a6ce9ffbd12d28e9f0047d1ddd04b06e4634183bef91d7645b94f4f704931a720f91508ce472ba912f294308770df29f151d08c5a2adb4241818c3d34563559fd8a76ba6ed77b59d352005b42143cdffacb2a4e0a24e3d8c9183076640bccdaab33d50469e0de56b487a02126e3db429748f4631ef753cf77cc18e0372d06cf413aa7679d464c90681cd6df5cdaac7d68303cd22d411b814578b5d7ce7c6a3ed591b4d609a9f709201367f7104fdb33219f785ff2af7ab1706a219bbfa5e51d5dd93368360a946d1bdf1cb761f30730c49433243204d89ad55ea8265f3a92dfa6715b9e3da9672214864168ce86af437a9841286fa88fe792b258c5313848dd96cec6b46fe8bf46cd3dfa6902ffed2536e0ffb468b543b92a9ead6a3fd5d606e605c9d54b2013ee7b104fdb33219b6c95b8ea01ba7c7531476ea1b659ebfeef98498a838e751445a5520f9d32fd037713b8259d3b9de7b756b4b068f2b8d7d9e7f7fbb4eff2c3c7bbfc58b54d21de5af8575fdf887a9e9c1a341c6b190072ec5a6dff5c79b4d667ff759ddc36491cf9a25f94eb3e0dc55ed74de2a581272ac140c39b4713301fc09714f194083c8ab247764928b15b2e441c07dc3ae90f59135738a26f277dbba9683cecc919cf0190f6d4c2fb2f33167c779242abb6381dbbc7ba8159238cec63f1655cbe7816dda25940df23867c71e8f7acb32c06cea3eb41552bcf31f3786967d7cfbe36b0aa8275aeee1b3d2ff8e8b96fb851ffc24ac899dd996eb625dcfd45f3d68ff3169679efee83e938408282b15a388dd9f952bc95b7d9752ec245b24a4e4c44516d15eaccdaeb827cf123b68a14945badf0483139947b6880173e7c000664dd74956f2e0b883a69be8079959febd6fc9b3a85c4e9b6f804a5cd8074b6946f767cdddaee0667d0b1c5a9929fb8f1f3f0b8cfbb49c513087567383cf6d6fa6bd1372d4b9ce0eb60706d70cb92df7436f59679b95d2f5e7ca38cc6bf465640768a71073d383733b646c199e785f841b5103ef7b5beea6e93f4ad6bb833374f7ea1709e00c71900df7b97bb30731060aa837d73a10b58e190a80d73a4aee3235a36a5b2a56da2d4a27ed90d224910710eb93a3be32a3542c2cd4a9957a4f490796eb2f7bde6d1af00aa7156d1c1afca103e0cbbb978c1d7e096ba015fb91dd5a16fe0f7e95ea1dd77292725adda03b390d1cea2890807d6dd5633e17e4c2f958ab5da9100a7f9ee48c40a705ce06bcfedad85cbe285661d2167da57927f84b2c8328bcaf52ad53bb29014b98011bf16b99e32b1ae17cc1232c8c62b9ed1735a46c992fe714640bc612f4dc2884fd6947ca1c22061810bb9ed532d8342433b367143124a333b2f7e3c556c51f1200c7faba96ae1c58dd85afec15583f11cf46f4eb4cc16e75bd258280bad01531c9667b748cf9576f372012a5b60e1da3a3cc784be92e277c0db65ff8fb51a41a78d061ded453d70dda54db5c2adf7f44599aff0aa82ccdd0de2008d64c387f7a31cd5674a9c1c6174d320419e781d38d2cff41ed55c1031a15be656d855cb01c56c688456d3458f68096554c74d9fd7f91a92789729b70d77dc1c741a8714f59c18934196d2affaf52bdabef3d6581d80d1705835e8e65c8072733b3369777fc1bb2c9c31fa464df5458dad5ab9162fe3d5dc96ffe1f8aedadb1f019c1275dec140f540b4d3a34dd6d6f1873dd28f18f2b9459ccd30975f0ece189ab2937d528fbecf7634b6abc60a6918f01c2a943d1263571938569196341553fd910dba8bcfe4498eb98a38cc6a805c73cfcc6d1bde59be2e4268399b20d7de38a3fc529fa7c2700626eda5c1719ccbb39010d7e63d2d6d786c05ccea45450f04f82a272a45896448fa04410d2269ab44ddfd3b332ef68c7adeaada08ea08c6034a6f93d7eefeef7b88abd750c8a821aa23dff0de8a867b9019b5ab19a2f34e6b168537f9158064501c5913ba3d2844ad1b767161b217f1bd06a508409613979c38467cba46419c71b2cc533b5e81d5dcc931d13882af36d61fce686ee97c576cd6c7cea52f04daee69b083202558510d81272295bd28072075a9628764200ec4cb36b6a76329847b4396081f08a1ea318269a8fd3806b6c0acf7be6a498f391e4a74e9ecdb19460530e1d749b1eba7d2b4088056688324eec32c6a527a27f912ed0aaa7a3f05b9181a91309f4c6fe0f1a5483a4e8140b1f64cae4ee756869fa7f4ca41069afd4f3b08c2726867675a48b1ef6d900cd633d4d9829fc8c0118032299b1b189c9b8d1acc4791ba2c513e02f37f8c44e16bfb0530c36e62d1eb59895f385dcc5056677593661c5d675e56562781784442f174726bf3e1fdd1b05e49541b2dfa29b2d449ba83d6591d2515ce90eabd055c58625b3afb47fc31f26219ecfa9d09526dfdc16126d8712164e839754cafb8966087dceae93dd12da7e5cf73c438a55c5c213c7a5c47c743e804157cd32a481e6703f4733e4c12962a71ea6e4ca1abb95fbc60f92a2a297679bcfebba7292b94baf209b6999579d1bbdb1ee167cea5c50193365e508180958b6f9bcff641ea221ddd0ccddd27410f7780350b21a4f2dc673c9685565e8bb49c4b67b65c1e1b62b7edb708d7d37af7aeac51aac78ff8c58bac49e2e34749b74a555fa5fed5bfa3e195f043301f8d85028a6d2bc0e5d02cf4fb426f05b3c5c8c2ca6f824d142e7f62f6bf7547d915c2fadd741344efe0fca3272d7f5b91c1b92bb85c53d0a2af7a2c5a8c363c83c4df4a033aba4c8ca14a4fbd0bf53bb497fbd03dcaed69b0f3c945002fe65497c85d5e0c54e021624911891f2e108941f79010a796efaab785c13d42a8eb5a92571a8a2187058fc5a7c8108333ffc9a3436d4d9e2b7979332b59aac6a2feda5dc15bdef0682323a9622ba269d068a2478c01b5acb3d8031665f492a2881bfa2153081375b81ed13a19f8c1d95f48ad77f0c248f389ef384429fc081858a73c841eb27cc88d7c6936045bf4c048bf0b2d3190315fc84e7cd5fc688a4af1739f5b948c846f028fe1b1caffbfe9f0fb58dd197e8eedf115d23e98bd00ac6830765f4368163ac1d62535fc15ce13bdc64aae5257c00c8496cca8d4a920934c4cfc4292b201423289f213014a3c11653483fd9faeed3567bd817df800f348dd0046a9cb25185bf17860444b03907810585230b9c41611e3ca0e98762285e87d087413d78163a5b64e4b2fef5716c4fa2f46c6e9e38c1d53bcb40bd64fc6b79f407304fa20d502d3370a0beb4e9af54e3eb148a9a2298d8ffb53dc33e8bf35ccf98ab49beded03852d45c73294efbbd02538b26895d179f15136983cadf7ca7e3a5acfb9f7eccf92392d397198ddd48977ae10320edc97133c5c7cce3fc2c61bd2ff03af01db72e65a98fde3e4a8e68f8970b099f6a842f155fd05e7548a2677b8fa9b63fd4fb18f2eec0d9e2d4aec6bb751cd7a7d997183b9e61308ce959139bc514965db698030d8947b61445550d0f2ccbcbda55279ebe9a5411d830a7a84868413c2e7a1cc6af7df01fc4dd66e85a9ee00dc0d1f48c5067bd44e55aaf5646d416a03eb6585e61f5d5dbc8fb20c9826120b1a7b7f5cb75e053d3248d2d8e4d91cc884dfa2fd16ca09aa00aacc6bd92e6175de0e1cb64eb81f367cc327ce76f3d3d95cf15ecce98816787bd4b78c6e62bc34889be3034f1882f0cf335190e8396cabbee7971ac72c1dca4fd97229b2801176bbad12cb42037824da39cd906476a1e814117c52f5aec70067ebedfbae836b66b27ee0c0f37467c3ffef69c12e0057308e9bf82c44f91d53ca2cf4784184dcbe6dc832876fd004eefaad9f2cb9001fae9cc0196d2e0f077e9ffee1626fa9410b96f0da8268bee368a0525e0af9843e3a253f89ef0487d2dde7357c7a9e0ece4431eeb11ec281d5a4d43226bf4f7a03679bfb0f4368c454256dc1749161c3d5eaea9c5d05996e7051fc462b21bed90491fa0afdc5c4f093198e0b5a5661b0aa69478f897b07e4c8faa1a7db19239b687e0db4cf96f97cbf01168f34412d72060e3cadac8cfd8dc20b4301790a92ba6301d10002e2176f26b53cef1917279d9ad0453d394badc222ba617a388f5de6834e09151c1d5be277bcc19e08ff90071b13597b980ce0b17684e80920e8f5e3e93665399385d13babd083fc98b2ad94d4970dd7f68265701596901ddb91ec9b4f7b3e1d9dcc4a59e7823147c14e56743ff5bdadbc288a10851df420f71f8d0023ef5fa60ab649090ed8b038f593a8842c215c022292ac41fc087a88639d71ed936e47f7d6542bac9ad0f9a412a3441afdcf7892ccd9c4c334bbfcea7c5790a0ce8ebb018077b5b94158f5296ca50eeca6046b5a9452f69bb39e588d1d608e9e2b00e277abd88c2cafca9a168b1d9ba6055548e35149c66b7513697919f41ea9788cd669c85cfe33dc798f2ba701a1bf2cfc6134a22d7daf203f269eae68b3f0b3c7f3fea85c26585340219a6a45b8064a0f8a7344d1357f8d634768c301f8131951c2384670def607ab3a75c1d2d53ca226c2190da5d314e87087b512bea55ea3d181a0dc68f42b27e6c0d80ffa5886efa4e4b9f34ab53a7c3a968528d835e9722bbfd7c0acfbc4f3e4a7cdfe9885fdf6f86d81b9fd5304a39e541d5f7cf0469dfb5d13b28d2efd93303f4bd6af5e269a1d4292a10469884c040e83ba84cd5a410bbeda1ca9e216c54e69d61b241a377f8bc905b61b98e135a8c7930c1e4b704d4e901347ebe0974c577a8d55546c9a615f52fbb00fbb19a3dfc51acf0cbab52252ba373b1891c4508ada7b88452f7820508dd29f7b9ea61f3cab36f9426d127ff24acbaffc3c256fcdb4ca8ff21cecfdd3140ece011181072204c1b2885d48e3167dd980b716462df08a203ba4dec1378608b956d0231e0ca96fbc9c91a459ebab8eaba85bbbb62e2c6c4bef376de0a38b1dfab1661e532bcc0ce9da490dc6654f029e62e9376f4885c6de179b0193d034b54bd1935130259e0ce66144517021bf8e182fdd3b48567875fabc8646e2a93279a3a4785f75b5973b6ea84d8c9fca5d71d384fa909f6fbd4d5335e4b7b3827375667c5fed28682c552807a7b023348acf238548f73b885212c749a9f163e8ff5e95c77eb6d3ed12659fddd94696121246e8b996d62e30411cc40600b12cebdec8b9de1c110fe12b3bed37db11770e540c084783fbc19ae5c244068312c902abd56029c4a9e56bcca8429e6054fcd3e66523a9794a3c87a57b77a7b05877da4194d02caf1f6e30d0b06f049185136d544c94bc24e36273efb217d8aca234712b210e58b75206a8b30a31538ef2650f752d131b70bd59bdc84605b02026f00929d4b1acab1e95384104c95332c48598c6e1dd2509930f4df11f8cc5dfc07f87385ce3c92e4dccfe7da26d016bcf4e47780a7b71801061c66484c02b7f21c7d7193491095d85405850fddf430b00cf6c71dd7615cc009710359dbef588b3a1d3e6e1fd544148a5d18dd668ca786d3c3fd84d9a1f61a20fc31d3abd99e436b48669f94b3f647a1e87cd5da5acfc711a860bfaf36b44c8f45a045c0f9e8c34027709b40b4277162ae9e1db99231436122e39e95e4a8bb65d8e23c47dd8df4c7b44015049aa69abef9abace85a8a54e90278ae73e1956596954adfa477285cbdaccaefd4595a95a2047c78c85312654b1e6a0821c72e557683e40f0dd107b73f2878ae6b62ed13a8ceae62d321e7d0ca568eb2659f68145087238b9f6cdda89dd43d3ba5c23a4390fb74b388008c4fd9a0cda2a8f4d584217e300a7ab7a6c29495071dc9ab42b5c44bfaf4d8f2a96d8a53ae7453680ea7af5e2fc67f421813160c13cb86f3e3daccf2a7205f36fef1bce3ff8741f09215e9aac6ff11d52d0bb667a9bbd378c3e4b5ab7428c0f40856ea0a9fa9c214e23f67194d0d0d4e3adde36006ea171e45218417fd5345dd5a682008553cd6b23d1af7be39e316ae41c36417a1259537aef2e51bde283c00eff12e91e91dacac6e5fe59fe5299b3905ad9fe4e6778efc96e93bfa1020b2a279f1ffb3b5cfddc23f6e10bb90361d8cfbf96d92cce95d208b6e8523dff9d0a3040124c3bf37af57b8b158355f2bbecddb9e76ab2a1cdfe783b6f8c6c27d18544e65e562c01a31d4944af60b622574da4ae2aa895d3126961f86c26b17ca62187634ff60b37920211bdb9ce525f91bea896ea414f7558150a3b99839f1fbbaea580db040aaad79e2defacab865dbff050269bff66234f26e3a6c3716d0ebb85abcd3c84326ad16e1962d2433692ebd8aebee2c2c6b842aecf94764d5843b49f73dc2e622e6ea25176bd9cc7bac81ad1d867b36b3cf84af79fcf7a1d8ff01c558746ddd6b2d13c4095e6349706b1283870970fc5dd8f4786d5e3d2290e26fbadda0b24ce037bfc8e1fce46092876a07157eb2c9d1af5c4908507f4d173386e27197f5e1167f08091b36f4aee0b225d955700e9671351455bed2b8899957ab661e223848ef248e1ca123e36eaacb342a66965920e3014b08f6105ac33ee67008ce44fd0332ae287a7393a9b97ebf135f201b6ed3b721e7071c2abf4cba6b3e871b1a3bfa69bbc4fb875faec3fab93bf26e221ebdf09c1e558c16f4eee93854b5034f06847e4eb64a1ebca1ca69ca25dfa8d8407d0ef58707974e39881c4a166ae9537f65ba7fb80626282ede857a2e1444a08ebda7b80f17640eda3760ebf72cb0dc4b0866671898d9360b2aa1b817f780043d92d2f1aeefe8a4a1669dc64d742aff5eb2d2a630f36f2de5f260a994fe5020f026a459b2fd75b42a7372fe963a56067597602a0e8032db7eb332c83968caa2481b6edf61f3b2fd388db5783a7144eb6075e47e6b8520902750424ef99721aed3391081ab1a28e27e1466a409fa89eea5718b6230cc78dcb01db4ce6b7e637353934589624c6a8631e61b21f8c25bc3567ece40519a80b66650bb449dadf1d7c61a3f2dc4f9b4bca7374344c078fa44deb5d0b024a9091539d288d764a7dfa58f30a4cbbe9f588d293ae95f63130aefe7e24c58220e24ee04b4df7d7e8b40dd4cb6b23c529835a5c83dad7021aaa82e6a688c8a11da37b65cd69b4344cd8e231f4e93163c2a74224cdc070cf779211a707a2d7814deb251340b41f8d33b06a2e96c292b9660034343a93757a15dd9590e54939c00dac8d851206caef924f4ea454601b4c5e895452c2bc1a9ab935346e093cec590d3dce32500d04637e59309c8fc453ade9183fd094c94328a06c9b4f530af257a64171ccb305fda4250ae26dabd0b69c8a38b878becca7b202b7adc7ee5f96d609c4af4f80d9ab3c920559216169c078b2818a7bc68f85a5fba8bd86583dd9117ac569caa892a2420e03f8bd3db69ba6ce686bf4eaa58a27183186c6d8674a3bc2e42749f9f7d7716b58e20f2fa695aeae3411180642aff8b98c76afabd876c14faea4769e53843781249d6bcee098da314ad8b389c64dc2820726daf9ec650bc571db46671121f952f2f9fb3fa1390c452b0696c59ff7c99d1701937654e3ae503c69de226780b6fc39dabec76903801632350cae13ca6f0d74cc54b533ae86a8dca3fa641df840990c27bcb9cc424e809c8d3138d321f7d6c14ccfd95ccc7e58c431fc72c99a745f59e4128fe8f2b9680dc1e0417d5dd46d9092d76d7872cccc7eff727967d7299785546aab1e3006e18637b7cdf8a7ee41f65855be7f844c38004e0308b9f9deb4928205858c3b5dcfa5a29feef9e955a0a9940c776560a95e927e008dc4f96c087acaab8cbe65e5f85b90686617541b8dd186545aa2d2ce5c6eca3dae8931b49d744b5db6bb2744cda61d64502afa1cb85e25cc259c49e9631396742a982c9e1b59882bb8776292ef710f254328f951a999c1f083b2a5207033a952de0c0e01f26f4e32fd2b3136a796efd87220648adc1b7a9975cce587a687c40279c233093bcdb6172ba5b4019cc36786c376cc4fe022ec07bcfb4185068080a58065729de3f0fcc34408adb736a3c6714c51376653b398f55cc31c319679b02d66b697fc273ea2eb2b4314e1b134eb9d812797830ef0ef28b6059ea8ee865b4695c2b8351262baa9013149619bf6279864c8a1ebdb78457a33e07fdd741f368ffa9ff9501af760905f53c347532a6152013dd3884592046be6c12020a5352a3d79f5975fd8f3a0c2bd8e6f32c23b44f9cdfdaf952fccc338d3e4a2ee385e37789b0719b554fe1be910ab1bfa711081f8b240dddcb5c1eb371a97d1d4ac632abda4dee7d3d1bc7ce26f3b7ac896be97bf981b895c55fef2108a7e65406396a42792970241de91c45bfb7018ee50ddbcb51df5de5c2fd88776fb17ba67caacc72de98e73ae54c1f43263ccae5c1610add05f6ac2ee1b94b3344a5c154543ad8f2c23c9d04418caa8ec45b0359e3676f7980d3dfc358bc3e356e456d17a44ee47d580165ab87d7298c5077de9be59399417c474c57603e801cc288c04a706cd5c8569e06329eaa409344ee29238ce9eaffffe14f55fec51c3f325d3a626319de7f6c1f0dbb478e5a3d7e1b3178bc4eb14d1a7c86290b49456f658c2fa5d40c5ad9a7779a45d88a7550a65b3e44a3bbcb75877ecccee6b77d3bf5e87532a98cc45910995a7969a33206b7f232951e4b9003f231e07705976e196d04e34a76f5e1ba004a73a1657d9c8af78578a6c1c4cee9a145ac1919ca01e34fefb7a4cea2f57e7517396bd724224fc6bb5e1d53d8c7c727adcb58629efe610a64a3b167f70e1e048cf65da2f4dd4eb49ce13f3a7748c68788959f7484570d67074e4badeb06230bf21f3952f251273bd00591a5730fa43f3b1a952128d0783cfead0435d7c7a87d0f07413ca5b61fb4e58e9828b15d428780c1762e382c3d98e8637ee6cbc01bba261fb5f2f28abe44e7cc34243c3404f8f2f366a3b1bd66d64a2f365d75db706bb5eb28ae14bd580d15197032b0d77f6fda2b4bf6bcdceeddca560cf1606306211e0a7f302fe7866433401b02d1f21b8769232c812757fe7147ea26277942a0c87f4ef3d3ebc6eed19f2b3240b3495616d62458c6458d50f2912ec624b296e5f7c813c1b48ae6a01ffe99cf9004a78b01cba094597d8d2f669dcf84d333fc027741e1fcc51bee7315e5dfd53c920a115a5b0096ee5199e351fc3ca1f6eebc361b03c94bc9169470a533e55ce60d9b2a009e69233e9df3f6472213850c21c1e03104fed38968e8b1d16f320631834e76b874728bcbcfdd914d0c177746cf12470b82591af30b3784009aa90289d08dc728c766ff3b9d472c9c493f01b0d7bf4b50d2255ba2d1bd709573ed5a76309c7677d4981a0737f44f6d4a90326e4ec1036347b60a09e02a8dec1865b1e8d92db5da189287fbaea2a9d98efd64f955784823e8be8abc65d23c0d33825ed2e3ad2081db7b111f70fb47621d60700cda1fda86a318662886b0a85fe97a5f5953f7cf3e399c417b089cc66d12374aaf6c793799e084c62ccac7f532aeb07ec7d130737a8ff5b67ac5db313aad604d13047e32aa8bd6d0054f926278b8398649d6870192b1978c21d512e6c332e662a75c2da10c92d57c7f1c6538013e2b98bc2fba4b37e09b81f14573b47bdb9ab4c3573345aa00c46490d10dbab8b3d9f3347d9fda7310b0199f98fad49da23ce37acf80a1dc10ce37e463360f34a44918c75552a8d20e0c1249cd5fd49ca962b84f0b4639472c5ee31f346348019f9f836166b198e3ad56a94928c5a02a66dba42c533377cb82f6d8fbe78065eb34ec60df2f56985f404c6e4a520234b2ca447b657eac644c764f6006f6221fe3f2030912eb6db2c6bf591ad9a17f72dae1758749f10560491a4e1e4c092b080fe3c10ca6ee45ce29ac865a6b67f326e5e30ad72c2950eee348ef85a0244051ecbe7164b718df8696fc3121f5ccc040b0e5da07b0b4e6c1fff176b751e35ea3f8b9721ce4d8069003f952f9260bd93f173576f5d5a7fa40dd2efdcbf519a7d9236ea0096bff5f21ce3e9faf3e72f02ffc0bd510e08781398e9c43b712672b67ca3b3c3aa88e539d5eeb24083d940260a2e26f9a29ecfd8d14672b2bd4189e29fac3c62face818b5c9572c27760d0ec33d1b401b9f44d91898e6d5b8612988d1f78038ce1a525edc698d97e4da6b9fc263331cc60d077db4222289a20f3fce364e7f92a3dd912ce9988aff90444f3a4bd35ed5d1fc8cfaeb083a07259e258960023b43b351ef161b59fdb8692bb175869767b1893a1cc91f27d8a1003174ad5261a8364ba172a5c82e582c89e7ac6abc05273fcc68c99537a6bbc44550756f680d71e7eaea041e146cca43b102cfa3ceadfc150749cadf3196c3c47ebbb7221a032fe9703ebeb54a5a264acc86d2d6d24afa54237ee0db8428cfda2953749ef1978b265c26fa77543953f991fedaf34dd6320c264d74c7e91dc336164d2683b17f3a3720a40c9eb986d06f15f6b775772019c5e90c6df2c031872d9814b14cc9a093830974b6f76a91233111a3471c48fc24b3b4fcc0bf6c457e737f8a9d9132eb42b4aa45349e18fe594beca1c12134986bcd132ecfb1b5478cb2486fb02015a0ab0f0286b393b783934cec8dd54377e2e60a15b0b5d298298a87663cb17ae9ab588abd1b7cdf2d6ca3cc013740b220eaac124b0bb43c9f1bca1b023501c3d7554473da669f3ed41ecf0d6eb0b4a2c3543fa96df74cb49599348d93b2ad220651fd746f0889227a328c34dd82a2aab997b5f79029acc91ae31b7f2a6e4d94023c8f8639a874489e31c9f0613ec3f4b2385290b4acb302eb316c4ba1a861ee7a31fa76c67a62ed60a469c4b0152af8567ad4ffeaf903ea2eec87b22303b126716ecd222a52cc2caee66c6c99532a0febd7d7134627938034ee6be689d0369221e9105c74d598d52335922597cc0491e6f2feb8bf268ba10219df1a937aaa0c0a20c1574501385c0f5184965ad98f6e4f50a00a1d4203486f13e8b3e70cee14f6e7791b9e3d2209641fa75b58511ad6a7e8000689592ca03ec5f9cc6facffc72743a0353cac7bd2487877bf85161f9b80a233e13cbcdd791dde8ca436a3a2ba772df55068a9a95a06e27bbd98a022e9b96c1c0e0b3e802c3247fc2efbd279ae799dda8d1aa05277781b125688d07e11a4edff6af741bbe340c14ae9a1c7ed91c34dad7d754e9101ca08a009731e9c9dda70285cfa9147d4c3dafcb0491489e3d2a1df2a866ad317d1a967191afb0c4fed069ef0441873568c76c6ab0ac85d18150e072aa072536241960e85f43c67c551f45e1a5caf810ec0cf6c03108fde40bc8a8ee140277735fd1404cc1ea8b6e05a9718170849b2d2263a4551263167f238bce007019a048062f40e53e545a4320911eca4cbf9e4a723923b68e5539709d88fc00c2c5967003f37f0f439b907bbe44ea023074a709efaa8cb41b385e3a8233da3ece6114716ff13e104ab4e048b33b880641a60fed8a95c2f4679294ed4b7dbc41207c3387c25711e36cf2c229ba191602cebbea3a7c193bfcb42b375a7591b55249454eb88a27a486f10010abdba309db56f48cb912e2c45b327b92606b1c8e6445e7dcbcef19f5696f67f2e0d911807bf64a9691801d41cc850ca856bd285aec5bc0e1069568e848157d0ec006ef99269bf9a1aaf905f1fb67aed38f320115c492c6fde6a15ad70b9a18c028eba7eec3c48f79eb4aae89e3dfee1c097ee891c3fdc928520ca4bd9ce04b3a9374ad12071e7e0ad59f1993bf0b5226247ad9f73d7cfcebc26c6519ac41d54cb7e49450ffa542258ebf26eeb87e5f0cbdb9e4d11c1c9c1f09c3c4cf9417082a8442511b59b8c0f1c000a69317f686952c735369dd76e4134ad4b3be5f0f4040cd6b7c17b89ee589cf931af031352bbb8a591416759ba03c7e0b94aebf24e2cdac156cf24c6dc8e1016f43a023ca15d3a995ab520ca2213478b32b7f17f9b02b582a942d1aa472197ee7f0c0047c39d21b7727fd629191dee89e4d4cc5ae16cb2318344ce6eb56d164d7edafdc4288342f2fea33f9b7d42dba0ff313ed80584828c94242bc9eb02cb8167a0a48b3e9a539c92f6c5a7cd3ffe18490b6509e72aa7a125ae7c1ad909c9d85a766179970b7c7ccd6b639262d4863b95d936e9d43f03b96e862228ddf7372e52c1bc2bc0454bf86786973cfbbe0e1456392a13f14005141837d1f978b9aa8497d66e1d506f23fbe00692008441600c9f00da534f427f5ea139ccff38f86f41813dfa6a955412d64b9805c86e5218eb2db89ce254914781a6e2819f567a7000801f3cacbdebc0d79d3f506108c64c524736b5854666ac7e31fdcf2f97a5c7ce27981040e97f0ae09f7b46a363ae5e3cccdef6bf2cded58dca0d831e5a76e6256af953ec446b0bff6bbd0089c81c27021e62aec2ff667e26c8510f554626eb05070b252dcab26e99e17f66710de1b5ff4a66e57add0b0adfa76ef0889872fad922152b1097ce75470518da2fec105ce8021edaf372cff4f58cc2d44e76e2f516f860ae13ce97be06fcfc7870ba2e22704a128a2bee0345a01742fdb2b99c6c7d97e4cf61cfab2f99c8171cdd8578ff965f108835305d233ba81e89540c6eddaff14060123c9872369eb638bf88afbe8994d7c9f349ead7032cc1b2d2238ee421039cc3c92f1adcee6de801d0adf4b1fa0eeb6e1ef304070bf160fa2a3a060f6aa0e31872c0ad243b2dce2aa0dce561d4a230c0973a67277bac7b52421ce0f793302f5e8a2684765903eebd5c5080ba3a9de40b2ae45a6ce5a5f3a6e59347daec37aaef0e8b4a360c3763c256d31dc9f5ec9867d1aaa319e30d5df7f5d666528182a98395c60be58ec711b9224c1910626fead5d0cb75f4b02538e273d95c3742563c678e2b7353cdc3775e23187ae5347a97c84e24c23fafc49c2f9ba51702bd7e411f57a6d8f15cd00e4375ab153b3b6ff30a0f5575ccb778dd2d1a2f21690a202ef34ecf745de5b99f0e59f1796d934b2b18fadedbe8bb34711961ebe54dea428b400532ebcda55fbbec26dd8fd1d86b68cea5daf898b47600453ed282d2115f86a049e93316d4133313afd48ea9cb6e0bd803a925bb8121afa5fa468caaafaebadcbed859e54b830ec40ae9f288a389c52b9c4e2652379b7a2cf0c9f9d2b98f1d5fa14b1acadb6a86b93f1c6f4fddba0be973a497575906af0ea23eb727ec74c9a3cd012e4e273edf9438b48302bf4dc71bb4fb37c6e8d1c5e1a69a89947043c63872bd32fabcf9d0be93fbbd96c2e7808d12fd40b8909f055f4106d9808816df9a2768d4a810e11a159284036e26f33e59095ca702e2b7571b138e5d5c4d2e971d5adf344a34d3c5fd626c509caf7ddc5693b382abc3e86bace240f6df4d577bd26cc3b97cca50eff3fe55466cb23381c2170db1d241f426d8125f48a811e5616c7930564a6d97c93b95e68b9a11f2fe58bc4650f88e7857a38e18a4670c8079e71a25d0e94c997de648aec07b8ed8bdf4b4efa588b575d6513cee5c48a44ea072bfd56e5b0a5480a3da618409927db68365abb0d9592d6f6b075cb16b4b4ddfa2239ac5fbfcc6381842da88efeea63ecd66aea133d6f0d0db76754b81ec21461f2276dd0ed62fae789ac168fe30832abe3720c48053996eec12c68cf1e6acbbeb9897e63709b4bb32f26e579acc4978116223483c2d6f1841053bea3810aa4b2ed57203dd80942535dab29b6037ca2862df897ac65c1c7c81cdeaf697c8396eb43231c2f2fd758a93ca29bfffb7092369f752e09c3b55921dacbc2ea67eea14ed93a5d459d4d8c39db5beb74a8a413e81d0116b20bb8edbba4b6d4c6ec96ef88e4dfa0a336992df46a96ca6ec117bb610eeb95dd23a453658ace72d87906d67a27c830ad77812a16e582957a035e9c3dd2e3ece7bb9e9f781c2f54a702a5902a0fc7c1c1a7ef2df0801b0fa753a7a465cf3d8c8f2710268ec46adb1aadf2520211f116b6fb25220f5c7ed4d78a1734016099f0824d163c71c5bc5c33db6a206e8263a66f8f07e8174fdc82c1789bf5b5782f5e2f825aa48351e7d52a524b304ce1604af0d551028ed6c3ad5abc926b9dbf67420d9740268a6e1344b7ef7dcb0132dd39a9562df3e466d4aebfe6737460e636d1b0600c01043df8e6d2243a102410d9a002f75c070fe7ba9f1d1e5799ccb697b77dbddb694524a19960e7b0dfc0c8fdb3d14877b1cee4fdd714f71b61e7ef2c0f9fc93eda4d77f9ef69fd7b150f6cfabffe04e491fdc8fed3f4f499e9f3315f80f2af0f72d95fd40e877a47c2005ea953105262c699beb34f37c36ceb96fe4becefd25f77768694af396b551dc9ff49bbcd864672d5ebfbcb3f69ec7ed22b8ef60878f641f79279b833fb791a7c0be3d07f605be4ed91a7816b6ed27b0377809ec221f81adc1436013f907ec21ef809df30dd8b55f610b7906ec20bf809dc16f605be06b6e67e05fd82e3cd0c6c02360ff7814b6cd1f60fb78036cfe27ecfd05d8ff04d83dde846dc197b02b7812368f1fc0a6fd089b8217614ff021ecd90b604bf04cf68e5fb275bc925d7e922d7b9e9de341d8351f80ad7f67e3f8be63afb3c907c01eff832dbe071bf60ad8e627609b9fc2ce3c0b828e0e8e17c1ed9f0e280eee29c9837b1d6bc4da6ac7ed1f4a717a1ef7048acff7e028d9f33af6c93e75f77928fb04bb0fefd939608dcff73ceee963e0437d7c7a703eb467fbf4ec167a7af8cfab3be979284fc9117ab813dc831dca833d1bf79997b5acadc9dfcf5b4d9a509f77e1761f7ee2f8cfabff7828dc85db7fbc8eede12750ef79ba4f7d04ca536bf3f913771c95a7f4489357e1c53a42d91df754f6c579f4d9b86fc229c5c1f193fecdebd827af737bb6f94fc04e4915708f7bf3752c6e4bc1dd7cb18e2a98af639d6ccb746ebba3c0b64d2c6c1b35816da524b0ed5404b6a582c0b6550fd8d6ca01db623560dbac15b6e53160dbad056ccba5807d9154d8372901fbea9aecab84807d9752d89709857d7707d8b7c900fb3a9db0ef5301f68522c0be674cd837aa847da548d8776a00fb528db06f9508fb5a85b02f9600f6cd62b22f6fc9be4af6dd4ab22fcf7d10ee07e0fecec67d63a18d873626b2e6fd0f363eb2e67d0f3646da38c99af7eb949adbb6776fee03ed2b746fee7360d37b7f039bde9b172e11126e978e70b08ddc7607b60d8a6c0d880cc9a96d211b8a35efe304d919ec1780ec7ab3abb9eb5265b2e6fd1fbbeeac79ff825d9bac79df6657271f9befbdeb99da63570b769daa6057aa5dab68bb52b0eb04bb66edca936057ad2dae5e97cdd9a0a16d89b63db226924db2a6ce2a590d6c9d0c6060d70b6c0b6c7a6f5cb8ff3c7df2e8770716baa6857eedfb15d846a4ec25f6e6fecd4ae74eaf9476fdcce92fac1f4b001f7628517660677906ee38e9d3a6e723651c2943dbaf397fce31a2436f1b90d2826a37a50bad3376f22fa1370990d9c2db6167668dae1d7bbb2bdc9be57f6ff05f8e39c67688953e295615b2367b23a34f23dd0807f4487dfc47e8cd01f4063f0c9623473f8d186900c5a1808a5e61081b1aff89b15543a4551d53429fbaeb8066088621b7b161188620072b561297bc0d853242ed13fd23d3f105e10d0a1d2fa147382d671b8af3e55a5f9f0ae697cd88516ac74fc39af3092b6bd25ab513cc75ad21e7c167bd664ecb8bc17b037085c6f8928126d723d5eec42e05f86003172b29282d7a40c00862509ae2e929893246314940e02aff536878518c000aea8b31555ca0e3a10620c608238d326398a2a34af3cf9c7a7ef3ee928664c861b8b081656726004b68c1c418352ce165060c96ae2c4d4144154a9031eeb88841f4e5802108daeac20c0f4f1ea881e707377848234b1a4c1481e19206e4c1ce9ce06284156cc39f182e598c721811808009231c7268a2cb0d600c1921823486cc04818f66f870b82ada7d5a4c393531856b872780923003462bc8035698d1c4ab870314453824518fd49cbb84b101072d5cb00ddfa0c60ed8867f481901822d25c6a032430698aab6e8828b247cf032c40d6454f928c0028d1232a831c3154d9c81068c3264ec623063cc75e3063066f81ee7db8027cc80610aaa26bc44f12981049a2f623885e088f1cb16630f2298b8c1892c5d58114357105c60786380c4182d1d0146981eaf08a61b92109a723202337c10b242a607a8a8dd19564e3980c00d2876f0e8a5e317046816cd6261aa04ad039a39462eadf2536c4de90531a64c1135490c19ccb882828a2b216ec0e1e320cb17514a085104171b76309412416d3c7104a60a33f70b2432c0d81a6b0865b1c516174824e1bd1183d117425958c620909e78f5c06e7533269090b09277965a61060c0d555260d1f9e0a5c9869d97115c81c1877109a9cb91180a9081521aa2eb882992807c4873e445079e74e8ea61ec829445c8328144a5062018cc506515a551851730536270d2218d201bacf06104624b1bf548cd6270fea811dd1969b6d820452e0c1d2c66783504d1a40be3872d63e86ce4c4155a1768ba80420c2c5b4be49421041153c8d872860ea3d296315576148d25cc686289de97a8341540c3872fc0e480c503533e6cd9614b9899124f6c4953860c3e0c7186085a35a5082f7a289a1a02a9872d5588a8800b30426380814503193aca2c2d6145d5116764e5aa2d57c0192854cebd536a60acb8548979e38b2a3eb290317374258b23ab91072d6f645b2902b658e28b1235b861060e5282ae8461220886313f8c3aae1a7633ec0319327c6268870aea9529330230d0ece436d06802a20a089a4063072d59d050c3541368c8323283060b1562763217692cbdd1050b2a3040a0c51344360b71060e5cacf1834e698b9dcc4511565d8071b52509ec0354954fcb17230cb09e720883c4126986b0f28123be7491831a4549a30e40cc6073c00d4ce9220c6f0721c63863892ca4184a8a816b87440e5a6e207fc0418b0c4659cb9418c430712bf3813263bc0cd130c65613565c4d31031b6998e8228b174861b24861846d38ff2cdf5dcfba9c9928b4788309336610e209379a28e27a4243c49894256a062238c0c58d2f8ae0920a01578c8c941a4857434cf93272c9022564773c62d830a3b445c31834a513535cc1a5cb8c2018461cb2fc70258b0d483967263c1823088da6a4a525a82431018686307a88420a2ae30d475c566a188c81a6d090860f5fa420828b4b0178553d84e08c144b6946a4232f72e0a7606c81c40868e0a18aaa891dbc06192a2b2198a18a151ec62d475864ab05c70ba831b8d0c24ba202c84b99201ebe60c30a2f498c5aa4101263c68a7843cf6fe6cfb14e141126671d5ba8306143d019dd1318f420439820acc61862882c410ced2c082304911123b0a28a28681a4658c680608c327ac8e2e848298630f9674cd030c85cb12a0a538653160e58f0b29a98e10b520f46475aacd82a668527a2b698e232c5113900ed30845308c4a41122aba9ca702464e529fe19aecac2451526a92fb840c2090d209cbc3cfd80c50a26b29491086423ee3ce4608cf1cf6e97316b1461f4c3185d6e98c28a36a6aac69822c51a64c622a32b988d8d8d69c305a849061acc38dd50944619404090418510648421e3812a462c4656d09089c83fbb4d0918c30c1660b8bcd410e6052a2a2c6588c660438d5b8491125a2cb5688cbe14d51d054272a3cb93151359210062079f510412d14ecb8d1f884622a31ebe2c1704e2092c217ae8c017a19e356ab082072b9eb85862bc82a506489036f338e79cef9dc24c143cbc914607b8b0f04209082330586484218316a0952b232a38b84039916395e892a11ea9594cc60f4a21664a07a8bc78c28a1c1e20039207cc202aba2289d18a96ee38e707efcde62c3be6d40662f073107af626185cd85c7e1132c63a1b81f347f1e7d8368aa6c8f9f2a016e3239b93bf0ec070e771a78a988672fe1ccc54a42484ab3543d114e1d0f3834003b6e1fa0fcb18e3ab222c305899390c16725b825fe6e70cdf9b7f96fff39bd68cd51786e607479d7f96fff39bf7467947657041319444eecb4efe9c7be3e08a28c8c022c6145b5cb9515758b0880157f0083d92bbb5d58a1129e52776523f9a0068ff5edbdeab639fd22360ed02e78c5ff895716ee3c3dfd79befc78516c2fdd77f98562334bdc2a2ebb54eaf8868e8954bf9fa97ef4ffd2ca6d2a712daf1cdef82bdbc85d7ed9f1d3349cdef7529d681d6e6d80f14a1480c3b6aedfe2d6b8d3e95d271ad68d4d624a36fa14f5c6df5415bbf077d627cef593b8dc9a5e53b761e9446ad596d1bdff77df6fbc013822c71ff1c7b5051a5d4b0e81758c10ad2987cfffa173f6974b45cf4f7df077ef6fbbe0f5f8c6f0a66b6f28d63116b5aacc17c6faafd9fcdb4c6e5eef7bb93fb99dfabf5bd1967dc4918d2b398a7b5e0df1b109ccd5e5c8f999f389c392482e06c0682d7da5197f68952cac7f1c478bc389fb977f938076c7640bb017ddc75ecb5958cac95ffc4d876fce3586b39639c73ce18635ce21ddf747eb36f05fc7d570c08f429cda3571c0f332a88eb6875fdf3f5fafef5c2e087b8bec27f852ff0058ef4c3c881b378cc78ccbaec7cc2036f59cf418fd43ae533ae72c6c3862e7a4319602588ded07e824818606588d668d7b1b6b426e5b1186aad336bdef2669c5bc038aa527ed62e3afd9c459f63c7b319089ef9a92e5fb8da45e7bde8e3efc339e717d7b5fefdb694dcabb626b658d77a00468f3806cd41fcba78c49cc6047f5e62cd8a1fa8635c73a67dbc8490f71328d40ec8ffde54acc397376889a0b5516ac37736c3f7da7badd5a1471aba7eb6f75ecc39d3bd94f293fe8f90f3fad3dabefbf7e6e220e28ab1a638f75af0dedc3eb0639cf1bdc996c866c64397e0f866bfe0bfc01708fe77efc5ffe2dfc74f9c89f5d5f279a48f41f095f3d616dfefe3f5df34391400e8b594f2d0bf3793de502339391fb562ce792a04e9c3c49cf36316ee0dc52f5a1f43c9fffa709c413f185ffcb383961e81855f65ba150dddc07e1e5284fee9e3569be8a614134171d050d37e6da237b622a93b5ab36f2b185cd61dc87e5630b79f154c1fa25b3014c73e0f199a85aff232cffc4eb39bfccba6eee615fe1381b516bcb71ce55e16288983e2d8ef4be8fa278e4c6f307946e9f7ab062ebeb6de2d2fc4d9cc5a0b546b05441a135a398dc95981acbdf4613aba7ba540d7e69c60d72d54bda3ce141a86c309c793c5b1746fe153a10e8ab06d77c43ac276dd1177486f728d4f07294ede095f34e38caf8d92a237f7c17d2fc730a27ec290645314c77e113574b513dc372a38cef458d6d9952a9f7de971147325d7cf9c1c7ac33b56d6d0a36953ea918eba37963cac88d14f9b2f42308b335bc0f802451a345821a821464b07a4b8bcb81a6d58fad0604900c26068d408456b8d6c3699ac676d37fdbeac8b1ec9811e89527b162bd015d42a082b7811e729c993cb1c9775d5a0cf5057f5a1eeefeb2a9caff17386f39a9f1a4708188df3417ec686c65f4151ca9a578c12a1c427d189ec21894447603f654243f898137b629735efeb45e21fb2c34ec9107a6ed72df068203e8f9027a2754d0fa90dd14488d4b8ac279efa877860458f4e7d24d3c5a8332fbe069bec0d09096d8c75deb23247715ed6fbdad730d6b886bf855aeb0fa9dc897eb00f21c299805dc8ebd8ba754d146b620dbf0bb7637e6afef3ea427e0877e176215c7c129d840811229eb1e68db2e61db2bf72c89a4344918ab55ccb1dcbba860461dacb9caccb9a5cd613fff59fb29e884531575174b2e6d5b5fa60afe55d1fefca7f5e5dfc1a77e176918b4f637416969553d38e694929ea0c1429ebc97a4248d6863f4665cddb950b2a876c98c762524744433526140be2b11ccd0c7dde2ee59409759ac476591b14e77e0764741721186a6fe78b94db291491502e376567ec8008cdb3369af854d695b3369ac865bd32a8cc59b3cb9a1767818934ce0711b2369cc34fb0dfc29cbdb96fc1cededceff122de9586b97e7f274ae73fc51d8f90b7e40f4f4dcc19f2494a249e5698b3b61c0a893bb1c9da86d042a84fe48970273abe3eedfaf5967595b9213925517914f224b6e32a0ab9a27178107e06e9e39f64afdcc9bacaa052c89a43255179542695ba72a9a499a16d3f65429ccb7ae0e3bd02042816285b1aff8eff4f6f39fee64bbfcf59b94fdd4fd952bfdf63f32ad82de4ce639f397d9fb89755c9ac64581967d32bde65597295bdb24b479435efa660a7597dea2555756f58e5aefd56a38d795bf60d4a83c9a009c9aa635ed552b7708e7955cbde78ebded8ac6d8a88295b94b39d4c210bdd1b4a1e40c7669cb1ae77b4c58886bf1a3dd00e2cc3b28d48cc992c5ab4680975f7568b8a36ad7e2d7aa01dbc4fa85bbe1ac1328665bc814e0cd26b2ad4212121699ed17ea11e7dddc25938a16af95ac45ff830741621da016ad157a3af467c03f5e86b11cfb99a659744f7a6148aba3759efde5cd92baadfff347416ca6d1a8e1fbff61c9b86a3d621baab304ea21d9d6aad4fbc42d9a59a1fb928628cc110e387e59c2bedb01e82223f71397d7c3dda5d45a269691bc2b56412bbb326181cfbc51c3f7ceea2a3572beb59db19eafa7da69d92ce7e508dfefeab69673fa8457fff45646d48afa4d792b531599bd30b0a046b10161b5870d1f558586055953b71cbd6a0b23668398596556869032db1c87a14e796467fa7586009393d196d0b756fa2ac2955b4edd4bd91e5eccab22ccbb2eceaf7cb92ece59cd0fd9cbb57f3b0ac42dd18a1ceda6e662e979bb295cbed58a85cce42e5723d13d59e3291b87b8bd4eb9413ad721d50ba5eab3a99634cb01cbb09d1c562b1582c16db21f5fbb1a5d8cedeea0ea2207ab6a2633b961b37d945f69a20ef77913b96b3d12ef0424c07bad3d2628479f7e606d18171aa47b7167dcdf217e3ad7bab59f80bb588bff0257f2d7aa11af12c5fb5f09abb3777d70faab4183e087eaef92bc635f7cc5db8b7e65c411aeefae0e75a93b26c0e54a4356a40daf95279fd5a5424ebd90deed72259af1a6dda09f5a81a7d3d7aa01d59efa8d623a34d776ad1a63b94c4bceef0d4bd913db237454edd9baeba640f89fb3b98f4493af52e6bb3b653dcc582acedbc4ab2debd559ebdb9bf0596bb4fd6aba2923af3d4c4a454258583ac92fa1deaf7a8dfbfbafb17ebd64bc48b8272daddf376716df52bebd1f067712493956549f6ac796339b2cb9a4368d027d973ba37d91af4e6fe14a82a25166aa1ae8d92f5c85e2c1713ba1f23ba325c3259db49f63aae3959cfde30c805dd2f85ee9744f7cb237ba350f7cba4fba5ee7ea994d5ef974be57d71676d7647f6342f9789fe7e4c48dcf5fbb588efacc9b3b68b97ee0d1ccb25241fbb4e7d70e00554af587b45905869f5b6754cd5a93ed53357430475fb75cade68adba492051085ea51b5f02d36d063bf66f93fdeb646f6fff421d754beb965e7d19eab65211dd5bd09731b60a04b59ecdfe4db3eaaabaad3aebb4d3014dfb39eae811f06133f4931c7fa037f641920425e74d4a7a41ccead7823b5fa0577ac5f445ffeebf3650afbb7a516bf733d68b690d37f05f1d447af486ae94e2dc1bb4c6018a30d90b1c99a428b18d62eb1b625f29aca4c8ca3a47d7a41c7604413db5b337240f18be65aad2edf3a8dd8621d2096a2f13943005168c0958195ec4d0a0d32b1a90726e418c239d01e1b094441347a021021ac8f8618da32b392c369ef002091e9cf4ed91469f365e70e8788a8e3158f2708610c5faf4a805182afa190489209410e20621a28208eaf6e958c600e219d6e1b8f72b0204344021460d624c15ed5c2d63aed025b91145d1999d8b9fe8f79660eb37e63a64a98a6e6daeb662a02b5f6445756d2d5111b261cc90624a11111268ae9081bb8016d33bbb6fdedb8e07ccf0c28a0d6e18d1c5cebd0d1d19e5f005941a63ec5cfc43bff75afb026db64b5e468ad44ab51450a4c14028758c8180a2e32e38743cde7b7df8a2df8bff568ca17ec8ead6de6e7f8525b7fea5a2880a119401824c114c3bb7887ebd50d1cbab05971b573cb046196788d9b949bdd68a84b7c8a09fa55211dd3ebd52e2a2db1f8cd042e48b698dfdbb638b467245dbaf0580c298c7dd33cb411b5a2c20e68cb1b53cb476fcc268a5e4834d98d3e9959019a29b918ecf1812adbdaf5706c2f0e201358cd27059dac1afed2da7872ca8e8b282c24969073751f5d0811df7d21c2df419c4c6036361434e3f8b5cb1635ff75044b73ff361a8db377db8a1dbcff1010d1eae746cc53fc354bb1f3ac62f420eec983ea1c5cec9c32a4dd48e7dadc355b73fdb61a9db37a9f42b1d17ddf280840e5bbab59f08ee332d5da5db5499c45b7553d6bc52d6bc67ac79a1ac7991fce8424bc086c68fe46ff8f942bff926fbc4bdc9f7f4fc1059f3fefce9e3e3f33e8f7b1d9bb7accd879fdfa180bafba8e0a3bb37f77df809e57b5e84b2f356d6cabc9efde4334f0bca93ef79f1c9c67dcf131caee7c9ae3df37019c9064174e25ebf990bf79afc0f7e8251de54814fd0e915962e7a942dcab3560dbac923f928dbc9c63d29b6639e3537ce4243f380f295fce1e9d971c51905a83ff91eda9b7c1dc704ecf47d36d8a1fc257f787a3e49edb86fc2e4097f357d553efbb3c2f540a15876afcf8f1277e15e1252939e26dfd304c92d8b8c491e5c4f45a27f27699b4e71389d4ea7bbb8b7240f4e6783f2f7bf246bfb74519fd437f5517d559f95b5854dfe9683eccdfd9bfff9ce589b935701d713d4ef9f9fd0ec4937f5dbe4cf8fa9df17a98e2ee99876f6b6f3533e93a3b2549eca55df5197ce4447d6f6c4da7c388dbef849d646a33fee772084c65c5bd6bcdff3b83f7350a742db74fa39d765cdebe3f35443d934286fd2a03cf9b8e76daab069505e85a7bdc93eb1aedfaf517c72af5f91d2243d9f7347dec0bd273d9c06e5bfa71df7384e83a2c22d390df7f46ba7e172f08c03860978facc3c9db53df9c7420450fde7298c4cd2c39f84e0eba3dfe4bfc943e12708faf0739679f486e4a13ddfe431c9d304a74372849ea7ff64d342e879fa3d4f392d84284e3ecad3ee43290ec79b3ca594d226b89fda3f9dcffe3ea26f282867cdabf5644779da7b384dc774d0f7a36c8c23eb92b86fc648abfb2a7c39460550d312d116115d56867e00aa01045dce9441069518543bf77fecaccb4b59090bfdfd7edea237cad32224459a3155866aa0b70cca28918517445a658cd8b99f85f489b57a9326507e7c5ee736d937ef73f30365e33337371c47edaf0ac9feac3eac2febe37d4ef6abe9f564f70baa85fd3af38a7a49b5b069b7bbcaa846b2c1ee647f9df7b36be7e5a5ec84e3e70b1df774d772d0b7c95392a7498f2b2f59f37a4046f79c19c7b352902ff49979df7b2eeeefe72e6bfb3e1281ebc1f5e07a70dff396e4e9c1bda6372e861a66b620428a2e473b3833cea481868c1462c4b0b4837b8afb4af2e0e8c659b866c58f3458fdf2c052f6ef949afbfb57e8de80fe3e76ba37297f1feff0d2bd55e0efe3fbfadb81077f3ff80b80bf3afd6d3b7f03f01784bf3c7fff72595b92bf7fb7ac4dc9dfbf5ad6b6e4ef5f9eb531799b00fe86f05784bf23fc1dc0dfbf53d646c2dfbf52d656c2dfbf51d666c2db08f0b7007f4f70b236033459db0150f89bc25f04fcfdab64b9ac6d017fdf6e591b03febed55ae11bf00e78db031e02b608d824300116fe52e0ef5f277f91fcc554fd72e0ffbc44479e032337db6f50e435f8fb2b581b9121397f1f676d35217f5f8ab5e104f9fb2f585b067f81fc5db236f3ef57266bc3e06f93b55d60f3d7c7dfaf50d6c6ffeebf52d6d6e3efd7296bb3e0ef57aa5a656d3c9ef6595a75ab72d55eedb2391b6485ec9025b247d646fef8f76d92d559a58b646d0af8abc2dfbf3a6b4bc06b20037f31f017780bbc0b2fb69089eccdfdbbe3862850a2fcf5e12750f7e9c1f5fca93baee7cf59c7f5f093fe0f94f7d951fe49ed9484f2b3738f28b94789b2438bfef111a36c1c0db79579f6464e65ae18fafddcb3b7bd73ffcbddff82c8d8b9ff0d9dd1ef7f44dfd1a7b337bac3c446d9b8a76412fa389e91a26cfa4882f49975fdd2903c7d1a13274fdfc9d3f7f9ebf3b785bf3f7fbf85fdf302d04ea5f2d4da9e500ee59f6c6a4d2838eef39664422b0cdfd3a5c2c039f0858713ba5279fa405dca04708fe35d2a95d7b995cafef223f640e127508782db27ee389ccf5392070a05ea67cf3f09fc04fbcd531b017eea7ec3cf59bff9bc6dd503f83973003f7503f809f60c9eda15f83963003f75b7e0a95d003fc16e4109fc9c75da2b809f3312f8a93bed05c04fdd7f0c809f60a73d0138b5b7ea646fea67f0d45a40e33f9e02139234cee75ff2a238da5e24796ecfcbaa676cadb5565c6199c7412d2e6b7201c094603a5812ec8888868616e14f7d0667090eceeb5871094eade292a8a4c296ed34cf9a5acbde5c61f184459212dae34de99116a4fcbc3aae407e9b17e13db8a27b3cedf9cd17e17aa0e4cf0d72fec4b9a0820afed4d1817ca63759efc8f7515dbfd6aa8915b0a1795c6fbdb8644d8a537b4b922032d19b5aed71f0d348ed95dcf4dae7f0d3dcbdf642f859fb21bcf615d41ec85f3209ced75e14eb98c924b41f2ba964bff8590cf7597175e1621dba70bbf936fbe7d54dee02d845e0b2256be2a8998ef3b5dffb1cf258b6b41320f34271eecb82a0b5fbd97c2d0296ed9a7cf862933d7eb871bf649371e4381a15422cc9c98c2e3611b7386e0afc9443232f85f6d9e3c5a78018fe0e6d5edcd79e14a01467e467f8fb45dac59f17fa18ea71ec318eb48be20ef11886793445517c2d7227f9c1aec39d7fa499263fb3e62e5c263426e3e71f3f7391091461c3fa1b699cafbded3910992c96cdb26695f5645d47bac8d70bd89bfa650d077fca9670d6e259b3d7c5b3e61d45a5257a44d6457102f0e7ed3b4f03f03b5f9bd221701ed6bc958442a8e7f83194f321885e6111d4bb08fbd52989007e37b906c5b91467470a7dca7a53a10e9b90a4f1f3cf301e4c0bb605e382f5605d624e0c1285c42191483c12916051b025d8110cc9da887c0afc9ccd50e076a6354f87e6e93800effd435da8646d27fc1df2b70050d6d6e34c18154a8553215558155a8558a101b88fa7f6bb0fee83fbe027d8bb8fa250e7e34572eb80d2714647940e291d533aa846d83aaa7458e9c0d291a583a7434babdcd291d3a1fb000047fe7e205bfa40b6f4c1bf00f0007800fc913f61cbba7265508994a4dba552b9c454ee7076d9e464e9bd2175feea903d9de7a143eafca975fe043b0176ed266cdb4bd8b693b06d1fc0a67d844dbb089bf61076ed4b7625b269ff7276ed4276ed4336ed3d76ed369b4641d4699baa81c307721d67c7bacc90eb7be75edb7adb1eeeaf8f9b66f56ab46542f7de282f090fcf53cbc303765ede7487e7398fa7b774af26f759b40036cef3bde4752e937de26cafe7af3c5cb2e65db2432520529a7792bdaba7a59ee347bfaf7b515beead6ab9b79ae5925d178787ba9d28347eb04b141f061b61b0174511844d3b2c7f05a17e863d06e1eb86c11e8407a17ece20c060398300c2539207049eae649f3949f669761e7e6250eadcd967eea7a804f67dd22e1d007c20ebd1333ace507756a6eec13ebf82d7ee609fb84b404e40c6480ac819a901b98344b24f6a75e4949d148a62e52a06fbac50a7ac77dadc6f41a2aa6ad9415fe8d5154b1deceaf7b5e81c6c5afef06937b269a3dd02b9acadfe6dd3b26dd3f20659d6b6c1dfe7595bfe9a9fec8ae5641842ea1be0ec54df60dc6f232bcb12770d7575d4bd4ddd1bde00a4698d503ef8f5041f37669d334cc3f293f878c42f7edd4db526d6314ed529c360bb8252d604a76814ed7f862ef2ea814f4f7589536b363d292da1c2455b3a595b9212aa742ac79a1f3f6f5cc36339b25792d99130f1614b98825d2e1604c58fad2734c058c0c51693555a2a996a99149649d6a6ad6ec299c7729597ba72d32eeb2975e9b568077d398df453d61399e835cb520fbd1eeda02f3f7499ac2ccbb22c4b5afe4ecb4f4b9dadc9a97cb2361aeceb437591d3603cc99f29a5ac8d925d642f1614cb99a13f4776814f679ed6e7c15f642ba13d975a5db9761c1df3b2e495b49685fe7404a177a7946e9a414e206fea781d3b34f8fa9583a00e7770c99a19d78c6b145111a0ee887eff824b94e4b9e0756cadb5d65aab0cbaf20775f726ee74fd3e3f7ffcbdfdfd1d67acad9ed9bf236a87d48ea95dfeffbff8d6d44ed656fab8351b1ace536bb5c55a392b5b51f5fa59eaa9a9d7871df5fa49a0ae436350d7386acdb2b41558a97a7d506a469b7afdf045a74eadedffc5a622f429eec4ddefb3e6b9cd3e4b5db9d4efe3ecb3dcf5fb3ef6f9bdb6c37d964e6759559e3a904e1d4e5d47958e5ebfff433b49b15ddf1b85ba4b7dcb846443d6942d695d43a4878484748daea9a991ed644c55bde40973a1501824d4c1507c71e7fce063582c17d60fc350acb48f66873d1e772c778affb0ed24bf986b2c57b286b8a6f6e28c0a9dff3fa9e3fa7ac31e27195f847d7d71d77cde40bdd63cace6c7582e9fb0f2f376526b85bd8e8d09f5924c423285ba70e924bb6aee0a7d863add520d0bad63756c1df558038a3b68f4eb29c9c449cfede1872edc9ebf83303af3928897652ec89a42e591ac27843ec95e26f3933d50dcf13eb1f2191013088665dc04d11fd18a887a5555a3a3dfafaa7bf3c282650ccb983231d5d47554545434c235e2b413f80beb55453ba11e157d3de2afaa9dfb13d4a0836c700be4027bd6bc15909f013f71cfe0737a3c063d1e83a33087e32d902df5b33a61116945d2948b23a22edaf1c70f7e02f51f5feb51963e74ea2a59956eea375fb36c1d23bdf156b39418586925e39f46fa054fed4d06044890077b608d99350fe402b7fadd027b55f5de8cd89b7a6fa6bd89bab799adeaf7abfaadf1f37954bf27e5da9d606faaf9f4969c57c37959f6684bd8b6c9bb848b7475f5e8ac61ce9a1f065dd992b5e126a7a19b7938f4e3299904a8fea0248f0dec690ffbba6b8ff77995fe4518088389b0511c61200813619f1fe75c4510563928ee92977c975764c1d56d405ee99116a4fcbcf01b21a1036b865f39acd617c51a7117a935f847d8e7d45a7d8d8f77ad3f5ea008d8c7172bc6788f9f6b173fef8a491ebd7f2c5f6f25b4972f6eda33c9b33f933c65ae4ed604793b8a73655d65ae0cd202b5cad0a7b8dbd123b48ba0283eb84f20180cf64a72fdb102f55183bc12ac19fe47f2881cccb2667d1f1b7f6de37cb87d7c2593e0bc8faf248f8f17eb58dbf5c35d7fe7d7b9361b56fb1ffb5fe7d67c3cce16df070f83ceb1be388642d61c79b8693f7a1d1be6eead1e7159cf82c781c38aeef11888bb9c2deb59b37ecdf9fe0539481e3389c18bb05de630d843867c7e71c8c69f870cd9372d369944feca96644bd6565fd6a337f72de01770211fe429901792c1ebdc0c76051f649fba03d9e7ac9fb2b3dc27262b78da7672c133cdb6a8241ee11295fafdd0c9dac6a17e3fd4854ae152d8143e85bb2db0676d14c8ebd87ffc8fffdfe6ebeea153ddc9bfcd9515597d7ff84e1d8b61d545118dc679f0abe8638fbf376eec3172cbeec78f07b3409e919be6d99b5bc75424b5d7ff489eead4cbd7b19aa7b7c0ac7ecbf7b1f7f83e36ede229c5ee7d02f58deb167d8cb6fbe0754cad95e583fbb4e9e5ebdcbd41def8914a6cfe6b34fe496aaf959b8259e3830f6efaf3eaf8237960fc4c52f33ff50d25fa2becf10904dbb53f6b5fb37f5efde7d5f9bb703be718678fd6ac71bacfff0de47f03f9201b8ce2e014100e4a99e6d30e66599b16074dfa048f42a0cd973d068fae757a33b406b2aedfb165bd7b2b83eccd85f5fa7d0fc6e8739491b5e26c7afe4a61fc2c87623992471a355f2b9731599334370d872852f2439d0764740735e8daff7f2d2ae25af4c0087d8a3b276bdb3557a967d94ed613457ee62f5fb463cdc6bff759813a4cc6b4a4618fff942dc99674fdc47d04ff1c5f7c906bdec8f596d6aa799dfbf52aed44286bd3dc49f8fbef6b2e6b0b9fac2d6412fee69aabc6c3251e2a59f33e00b0e85dcb1cede5933ec95ea6bd626bcb5c098d0dc588acad1e21591bad7299906c48c624dbd5b256d3c4a5501944f10efd8a5475f4eb12fdba739addd7d48b79a4a49212677c71e7c7bbc2767e254d85aebd0f51ac6368793daced1f8fb7cde71a4e53423bec813adee70a267001ff29892f50c75b4aeecf2d086a2ddc5fb3f9d77dfed867edb507f749a9767e1bf12f99243ffefa361b3f6de7d75f7b6dbdb470fa45d8ebcffbd43c96cbe5d7ed04f6f92939028c3bc1dc098d49f9f8cba71df358f93121b2cb9a38fb24bbfa7ddc15e40bfc231117d4b8d6fab4ca84885e5a26d73c6b4ee9f288edb75e114673cee2cb7a17f69a9f20c8610f1b6b3e3f6c575353b35f240fd9d37a7199353c963b12863e71172ea7bfa65e522594bb761c63a6689a1bd0d8712981458b1967c07055660918a4e8828c9dfb3bba70170742e8f31525aba2fdc8451996b59dff278f72ff39ca96eecdb5e9f8655655fa9455c9aa6458d6bc3c3ff58d7e8f409565d944d5ef9725d933a2923d7aa4fe7d720d720415092ce31d13cc7648408195356f9535af8c865a930d11595376646f2a9709519cfbe19655a138f7459a855565cd4b65cd31277689bd21b558ae925d3db2e7e35f248fcdd7ea43acb5561f2fd65cf00383d7b1405ec766f094e4e15c5b5ab4caaad023e1df9709eda0d1b997820a3a9cb4aa83bd6e2eba94914be893bc57573c84470e91a7248f90cf190767874239480e120605e1610e67d34e648b552255121a14b5eccdbd62adb4079d55d6650374c70558c7e408768be2f8d686fffa5287ffaabb6ea551b7ce7c6fed87bb7e964c526b55a5f6c111fc4a55a7620fc678dd9aba370a45b908000fe84a472b5abbab1d58a9bb7babbbbbdb2a83ecd1eedeaa196b38d929b64a8daabbea54a16a54ddfac0ba654dfbb5674df0cfd7ebf567dd7a7ded59dbeb82a0d6754afc76ed55aed75ffa6dd5decb42d9a7ba55b7aced9ef74f7ba6d77bab5bf4e6daaf53969fbad7ad51d4c142a0bf7b32a5afd78bb7107e0bb5fb5266bd5641712ef8aa5350f37ef89f0da7a03817045f61c8eb14c5b94ffbad53fdfe3745d5efefcaf5edda3bad93750a21f3bae3764ab41260d10f5e8c31c65c963ac6a2c4eef57a658ba58b09ee7d7d339849437e82203f75c7339bfc98e4c93616f4231bf4b3c81365c874fbb3325b74fb5f668d248848828d2732bafd5c6b9513ba1dd2d0628aca11094b5aae288da1fb82caa6c1b2848e6e636373fedb98b9d6238a54710bd4604e9123a472919c1c235439f0883238704885958ff8a2ade0b2a20b1fb143cc0aa2abeb1145641551163c828abe51285ba75735784024f31efc1114609cadae18633cc51761aa0c31c315aa2925026046a88b1631a8a2a061078f663ac6b86ba14f1e3cccabc58e25238a8cd0720a01c614e3ac58e182e724f445991dbc851544595c81a00ad70e1ea13a4eda2d5106860fb821449b1842230821d018410e5d4adc1086ec31853e79e0225cc86c71e534a65b3250dd7e5758abad696dd7a2c6c60c9253918c6f9f484522beedb28dc38eb24d7b890346bb4e08f449a74ab83aa2f45944bc955e18995de7a0d3ab315c5da47548d3ab31595dbce3b86115098d09a73139c15a836592041d9fb90e2e7ee6b05acbf1981c61e450f28f998b60a884f630f6ea19bb931c0f7ee627c5b2e2628a8a933a61e4481021bce7b2e73f7780fb847d0e1084e51c9fc7fd7375fc08e6d7b939c7e3c60e1371dee096c202a785406bed54a1e7076b0d7cf0cf157a7e9dfb53c1cffb34d2733c6c1cfb29a5e3c6aee3c15acba123c70391d2f6292e4188cdbe0a5267fae77851c7eb5890e491fd2543807df9e536624d1d109688604dfbb948ce398339e79c7306cbad5fb6717c8e1d7bb19223c01e3fb86ba7387050f2dad9db98e4286e2234fce0186e7bf3ebfb3e3a65befdaf48119bf1052a6b8e2bc44ab1bd2f5ea0c8ae414275c89a94da1c7d2b44df12d1b748f4a90de54eacae5ab1a322b1b4163e0dc58c6b61f8124227612d4c04c15dc3f035866385556a824f730735d0f3bf1ef6e5235ea4905263095cd1a4e145ae3938a86618cb10be80e18a8a116b64d972059531a20893d405082e631255c0304e5571a5b4762c4345560e830220a633478469e20a1b6c6cc9a18d32443e48715443af831c2363c923d6e9d51827fa69f3d10065e445d29927a8b460d9f161b445962a53a64419edd8308a8a21b09811b40fde2e5478b9515f8471c7a7247e38e1a52a4cef872c65bcece0000318555b6210c24a0dc794018198ea31a3d19b0e487dcc6c78ccfeb3964786339d0fec7044910c53a8f8b0636d182200c5600ab1135353b4214e5121e4e3d5c5ca8633c0ecc02502202d4174490304115646500538ab2fa4d3ab2b56639a5e3a88df8b97368606299813c486e7041552b0e6f75d0b6dda1b2561fffd17ebdf8750516742a84a4fa054dff83d55a7d8ac298b158a1e31436f3adff7fdf7b13f717428f16374ab7f4f65cd6f8a077af3fd1744ff7638ba78adfed9bd695ea1eccdf720a86723af3a8af3d1c6d0b943591bfefc95aa4259a8582c168bc562b1c7244f2c168bc5622aacf08d40a434f8b456a82f47ffbe4659f54f48ffbe4e21f5effffbef29f7bd8dbdd99def6742b67fff655289ed979f60cdef6320d014aa877f52aa300cc3300cc3c7244f188661f897e409c5d868378e07499ef1696368dc1f077f52244772dbef1b390fa84e7eafd22449922449fe25794892246f08d34ff3fb5e056ba3fd7b08b0606de27f8fb3b6d793dfd3ef3f1dceacf9bded38bc680af5cd8ce81c507ff456a1be0783281554fffefbab4ef2532f91eb3fe0be9dc346b84be43ac9694cee1b6fd4da8bff73df78a39327b8499249eceb9564323e8e17c7c7316e6acd183f612f927b7c9d3b6eb162cd8ac64bd4edef4ca1edd34ec3b4a75f87acadf6a3fc60457297c8f59c7710496079d686e3ed5b2d1d6fdf72d99eedbab91b646d35fa2d681ed9db120b656db3b736f0ed0456dade4cfb64da2626dadbaf56f696c2bd49ea61018fa7e0c329aaf1ad8fb7b6d735e3d25add66f13f67126c8b15db36cbeed8564bc7b65be5b65cb6d7b56fcedea02b7487c06d27d896c8eab685ba377bc6ded8575a62df0aa402a540d326eddd6357ddae4a16eceab479ec0ab5eb995da3aa549db2f67deccaf70dca75bda5553a0ba4dd825d7b05d5760936adbddcb4db5eb32d8e4db37a6c7f9d1c77ee222cf4b1e45ad382415d5c5add5a13ecf4f24d775e9fed38b2a84a610516a0e04d972cd05bd2895b91e0299dd20e5e4c9899c23a12826187a24071f20391d2f969c7fda4553dbf94fcf95ff8d1f3d7a05ecfbf82b57db7bb93a5b07a7e15aced2e6df5fcf9ef8e62d133123dff67d128d023f533dfd1d2650ee761cd7b475a91fc944e83a038f9f36f7aab42d09bfc6672fe7348cf627afef3a66721f447f35792e72b921d533a75ea61843e3f7c85cf037e0954d6cc48d6cc49d6cc4bf9e664fbb35c97ac99753d5f5dfebb94ffeef25fa7fc3633d99bfc4de0933ed333ad48c6299d3e25eb52074cba76f5f27f17a037f752f04281156694eb57ebdfaf5f1f479530b4c51727c1e5c5586c19968aab343b5ca539ba4a43c3559a295957565c515756555756bb2b2ba82b2b1daeac8caeaca8685d6dd175b54517575b5871b505d4d51653f5c51d5c74fdfa01b0d2a719c4aca6b5ddf4fa41727e4791a65fe98fd6ac1be8e01833c7487d1d1c58154b6ce125b6f0aafd0acb29e80bbdc20aea1f2f419b23e5f6bad4315949a819933cf854423b0936e70322b5397decfafda4241dd352cdb5d6fa4cbbf245a7d1923c65c5e22bca9abae6a5f96baa092d13fa728bbf615fdb27f8348a4ee28e247ba7e6eddf3f3e41853af186147ceab7e6c5da86fd6fda6b6afef709f4af63c52b8a3058aec16a35353f6e9dfb1b84b2e6059fb60c676c291a5d8c76354629cb916cc9da4451ac2f7e2561484720129834c1142d9eb1a67d8dd70a24796e159514a69a92e9d8991bfa7c69f5fb55776faf2a7057c36bfb9ffe04456513398a1240f57a4aa02ba34aa69aa91aa75855ec8c8805f240abbcd52b7e0a38d63f96511d7cd8f7bae5ea26dca02d577f583e6befb1bd0ef27303425d739cede50ab2e85af45d6ad1c786ec0dfcb0d65d04fb0ae3676dd2a7ac87451a545dbc38b45c1dfcd7b1e0142805468154a055cdb5560e5681586fe813a4eaf779cdd7dffb25f58a7a4d5913d73c88656d98670e26fd7d90cada6aaaacad868348a095b5951c3cda3166d6a5b7d0a7b8d321469f64d552f6e63e55aedf333a0a8a923cb7d7b15acadec02ca87b03b73455df82ea77830d9e923c38af84490fe73156e129f9c363be8efd11656d2160bc83eaaa0ba52edb9211c9b8facdee60d9dec554e7d1e955174dfdea8aabd32b2eaa34e8f48a0b5ed73c6b1b3516311631e6f140be821fe15bf89f57f2508208bdcf0cdf23c33f89e17141ef04863f9fda0ba83c05a63c0bb99f40ce6320e4815e021cf8086ce021f05803ff800cbc0330f00d18f219fc0acf805fc0bf025e004f80ff61834d781b13de0657d99b0be4455d657596b5c57258487290e0be044812dc97e01e798a0444f2d422f9f24c19656da6d494b55580c813216b6416218b5feeee974d97003fb2b2ee91b5bdf018018f8d3c0ee1f10907f8935af5109f14eaf12fb136f3c70adc6455449e08f9b5c75fce78589b088fc5c76f56a27ae5313f7157090514f889c26b2c2b14b6ceaaea6914b8ce4a52258bb23777f314bee4e70c850ff9a9fb01f0cbb84228f1975ccaede35312eccbb6ac2d2499e8af582a96b2e432226bca84644346ba7c5df3a7acaa2c4b8dcb16cadf2fea5dd382d65a732758e3b012ed9c2b22ecf1f79602f6047cb97fea1b5d841ff338f23021498b8f3f8b59cc221673f927eee3388a5ffbb22ccb316ff2c54dfbaebd8edd7b4bc19dacf9135b1bfe919ff9ff6bf6f8e1d77c4d5813e2b17c9dab3791f2bf24821b8970d09ab8d736ee64ef5ae127d8f9d7d8c04fddf99743fc9c75fe6f007e7ee7cfa3067e9a9dbf0168e0674ee77fe6d42afc34d2393f8d9c64ef7b217e82e00c3b9e5a19f839eb1f3fad53af3b62e0e76c16c44fdd3580819f60c7c14f8bd4eb6b40859fb3d9147eea9ef3a7eeb31c3fc19ef327d8674f69edf5fab3a79402207e825dc89f60a780034228d8003f675d083f6b55a7e05fd81ae0e76c96017e6a8d017e827dc8531abb003f67330bf0536b17f809f6097af0094af87346c29f7a0012d05e8230f742e1e90dbf0238ac6813dee6439e942deb9d38fc537c9b17451b51fc2c8e356229be28f2737c9b17479b1c254719a3bcf862949d5f8c92b3182563aeb7b496d0ab035b4d055f8ef05fc128fe88cd805dd6e4d2b2b617df46d95b3d7a91e3ec54cf0ff2c82821b7ac2d7bf00148a38d5c204f2b18a1851f7e9a4aa070ebc34fb0879ffa093f673dc8538be3e7ac5fe0849fba5ff0d4f213ec17540af073c6023ff50430e8d99bfa183cb5374fad0402a646a8946b15b7c118554aa211010000a000d3140020280c08050462c1703c9e6792b23e14000e83ae546e4a9909c42486410819030c310000000000400648468638009e530490bb295378c0270f30305d5aae13efe30118fc513e8d0084e190e19aee0e73ae10a2b86033b034118fa312548686b3503e2e81ed182a4f1b2f8f4a5a44df06437ce04c205792a9821512a8f62c5bc8b0955227e85e2506cd5ce2cb83ca60817f9429df18aacfd563051a85f696dea31d9f6732ff0a3f3612e9672f873f108079d825c26da3105ab7bca3fd534db66e418921d07f579491a75882f26741a406d3502419d73cb5e187d889787572f0b94539a2afb44f2343c8d4c5bafcf7ef1ba51d3820bd0a04f3d460a92dc5a0d2be02a61b62055edefd7b20b415c6f80dd6b70b0e6fa0047feca14f7ca62c31c1d40eabf8878760b34ecb60880dfdc4ca898cfe6455ec9ae38047d5f44ea8968da4515acde51b0698605ac9c2631f7bb2bc482a2d56093ce8c873a61a355e0d50db3a2006a7e78d46401a7cdf475c77813faceaa71a024089f3de17ce4c57341edc8bd8228bede5c2182343c8d09997dc1a0572114642d76024fa604ce9b461931dcfa8fbb7697124380a22602684b6e5f1ab81f79f6bf58b7f1e20b27aaab4c88ca4da236d223a8456294b01a45391add4b785941f06f5d1e3bfcfc99c9d8c272af4e8f1160b43d5f0dfc9cafd8711bdcdcf013bc0cfc95288df35774dc1cd32410c29023635cdcdcde6cbeb40f164f4dc8d2014b1242022e83490ff2403450fa6ef4175c500d4728de187140961ee5a39c99446848c6ba56466d9d6f2bf88d56ac665765d46280d69d3b50920d8dcc35a7476a58a12052794cae31ae4ceba6d42898c629e0c35cbd75d9596aab034dc24e12e7081d084120a60e97277a865ae7848154e0918384566c584320ee30ff2e4866f149d11e82b783942c1ea80718e0757ae7e40c792f5929157bb2b5751f9fb8aee865d4768825551260b99bb1617819704a582aea1da8aadf4328d6004dd7824f4a5b20be6d37b7896a898c53408e7408d077a15e39e8511fad0437dfaa6043b39d437a5b45adabf7c0c90dd4c661dcd221c1f77d1bf9520836f350c7c959e00cd384fb9af99a2ea172df3fda54e1d659d8430ac21c19d72a9892c69697b15099bba76f89a739fe2538fabdb912c2ff745b0fa267933ad3b713c17d5cad89baa575633627cabb7c0b8106e8e4dcb7e68f8c3dfb1e3718441e6708dcea2101f9a5b60255716082b96f14d3bfdea39534c7c412951f824a043fa8eea9158552cb70c048ef911acedb5c4159a6f5f2af689263523438e2ca4fc2da31f8a8a7fc98b26c9b75d01515ba67d5573c9dda088fd7dd78ac52482db2e09be092a257a9160358794c8d76ce646ddbcc39993a6d3d9b77afd98738717707c0021a2298219328f4bd6f7749b28a5c22c32814e3b96113344fb34f5e01cfce0a3a66cb227a5de7e7b09c1e03895fe59ec97f0d38fddb89de806d848c7ab1f7a005b2cac0c32b843b61451e02215abe7fe8937dd5e65c3136fe9eb2523b8ecf4dace3872dbb23d7d58712a1bf9c66f1a6fbfb1dd8ca9d90b39e89909efa287ba553d16e88cf9103e3e7f9f10931350a4ca55779722f8a267a58fa80ffca27f74c0bb1b206e0bb269d788407616d1590a87080c4886b881f21ab9df7e8d282c6630d521429ee35d82fd8b6388da74d3fd189d39e6ba11653bd1266a427c8802e050da239b981e3436a1ec80e759cbc3324a412049fd845e91f2ddaba92d7e6d7c3cbda24b83351b5530aa28cb7531d6b42eb87236e1a08466c781bd53bd104f3a16e949678687ccc5d15413a56a0ece9ad6967a53c7beecf5ef8851715e8028fd62358369e8685b5bf7d52aff942fd9f3bf564158f1aa3897d110ef2753250de1e90b217384143dd1b8e3f5a645d8a30ce63a4e582cc9c1f6912e5cff4c72c5ff51c6743ba5c39a52aebd2a5e9118ff01d12e8bf2a6c4bdf2b3f6b1b42a46c98bb64d4ae9c90161a64039db983fe52fd463c94f3bb5116750d1284a913b240122780f40f518b380146fc8c20bdc6230eba139c4f38ca22decdfdc58890bf95cec015fb120571bf32f59ffcbbc6ad72d318c66aca049c0087cd0284f0de9893734569e60e57a1e4a8d07f38b9acb4ac9b13d1e8986d6ebc99791ca2155da1da246075fc73c66b947a099da3a0a6c4891518ba05a1337d08908a1a446af7490e6324b8c5fc7f254d2691f6e96965a621f262d7d6005807354f59a4be9e0db9ae7e6f74a4f6c6f748d955778999a11083c401fe43e065a1e2a8af6d50cb8466baca69b52e53d7dd3f91b2d6e1c34f9d600db513fa81901a4626c81038c0fdbd807118ac7e877bc9411ad139118a03ac891036a832fc5d717993235fe1be862da8906e4913a23bbf050290ee3e6fcea43062482e688e16e9368902bec1a40edf0b1dc932d05614a4ad3e4a3f45e67eefa592df5356e4f687a454aa4ae05e13c59aebef70e3f789b2bab69ff85f00b22ba4787a270b8922430a13f9ab9d0b35a192b5ee03aedec907301027cf2d9ce278f6b4550ad6fbca96e90babeb53ed998557bc275b3e585b5c656c1e6e8088011c3e12461bc648e90027b51ae9b7065a51651fb9ad32bebc4f7ef1abf32ede8c57da043f82f2a1521dc3cf76afc1c6c4238b1c9cf14d037b6eb4cedf4c55aa8d6040143577e1cf29c5315b9882de53a252363cc7175e51e8f1712075e1c04df457fa4bba84df9b7acf0433535689ea8a48e4a0aed4a89713ed1f78ab96f47df28308002e785e2f8e719bb0dd4a0393d50c596818432b3227af864abdb75f7ce3cf18c905c9f660ab76321b25da91f672c0bf3fbdf0955fbc00f8abc219dc7b2b94d47b24a335a046d00b297746a5a648be5f70cdba67d60b0f8814b247c2ed857a8b60f9d311d4439175a00758387bf8aca347c195379710eb68734df04884be502150444da28c88178e61926bd1cca0761ab32d426a8e170d412fc67cff238e809cee52778d9c4fdc32b0ca2e947e261fdeb3516ad4cf34d73239a4437f22bf4431f677b1eb7128698e709651438cc9dc06956cc32db3809f1f180c9128bf6f73a358e256828c30acdfd65b37592df5820841afe9fbb0da65db7f83a3c7c58da0ec5233598ee96292057b655266bf3020508c679dcce11e7ee7ec10e6a3f184b0d7d127869ddb07b50572451a01977a7bf89ace5b2bda66c4163dd5a80d1d3a347e260abb09f6a5b2eaf4a5e1aab08c882179840d69feac9b21e4df5cb9c5db7703116415585171febabb01b39bf4c685280038336a341057ea6da480fe4033241d5400d842ec41458a1eac7560d20d3d3977406616bf608838429c7d0467f815934bf36cb5c76a0ab3d0d2f49461d7dca89750fcc80aed0918f382d65d039c06ef3c2fa2e6018a45cea8e5321e908c5c9b013fa1d5f866c1e01afbbd56ee5111e1cfc3df3729906d640b678e4a2434a67753f2e43f86349c46a5cedd311997ace0ee531afe1a2026463249a3e1c43b169a210aa18cf215e34f98e1195b0223701a3c1c7ba04dbdf0422603e183300d10c7f7b5d482607a8126ec2472ecb4898e8aa6a51d6e21b9e4539acf5649dc8da193499ba20ea3ed7e98804e7528a4bca82bef7f1c13f2c8d18a414cc3aa2657682ff7cc08b45d2b69c4a294763d413cf189cc0082cdc871b2ec3286706e2ad71749330ab2cff81fe483152bf8ec744de1c15992180775777daeb9f8f98125661fdebe8ae2f22ac5acbe3e52fa07ec3bbc8e1e7d75e6dc24fc33399b4b6d690c7380828dc2fe6787f8d55c8f645af4be4bea5148ad2ae061d32b4e9f98c308d6617b048a65f98f33d138ffbbaaeea2c647270cb2a3ace0d9efe02feaf08a70b9556a6f7ea3b0616484cfdc271f7c817eb969ce2bafa343e6ea57b535cc3058800e2e3c1f2cfe4532511709810df978eb7fcfbdb7cb2586437f2b4052facc41c247cf874993031eeeb755567fac98cc7a5df83e9a9571dfdd71d009296f77d6ac24f82a1a466ad65cf5804ea83bddb7878c16496e8be8ee766af35ac57f0d2f94a9422e68a6934c7bc622e64a3bd81024c31a9daa5bd2728d73baed958eaa94c29211c60b682923f8941c449fba4ec41b51909e8a5f5c9cf272dd6b73b6b486ba8011ccea76d6cc98fe0343a37bb1546a32a48490f772f012faf302ffa6d31a81080da8ecf26ebfb2118ebe53f5565b1dd8de05f47f40751486f13b4e05615a3276bf106208864c7da71f1a9aad64b684e250eedd630204478df64dd36edf784238674d7de1299c88b639d27de5fe75b2aa9f2e572cdfe300046cea1caa329cc06aa80ea8afa1e1fb3e48f5eccdcef0ac8d9880980ed1a042e949b2805f10ad6be50a5a358213f04b17ada81aaad8e7f5aabc65868058e5a1066980630280c7be8623e046e4f44dd9b56df2bd44dfe5488a6ea34bd3985ebf97f79879c89e4f3a610baebce94c340ed27acf4864fde52104817d9d5404c31e388fc71e733ead2a775abdaa69117e525e4e05bb1906c08801fab38b23126a738c8aeed100401722fbd5b05033009a53aac7642f45793909b452a161d73af9cc9b22fc855bbf0407c7d3da46d67d5ba32c2f0180db102babccd1fd533fea811f4c16bf67ec079f9eeee625930d0a92561d559c7b4e2ef4b478e40e40cef62e00227327903bf0ba5e4915be4090d7cbc191220df6e0b2a73c356d3eb0abe4d9e8c098fe8fbb8788c88e813293dfe01fcf007c20363c01c72c201c7f46636c1c4bda02b07f6eb7cdc0c80ff73f7af46434d8601d355ed63bf3c2eac77db25d31448ee060ca602ec8b31ee9a7dc0f19916a49f835ef7421bf59781d1fb7d7c1bf96ae632ee41e85f0c6b952c07adc5d3152daf60b8c83d433efda7303cfae8fb46d8ce709228f5b526f83d4462995b6d4b9c760142bd05c86217dfa35e6615968c04213920166b27da945da701dcc6e62f650039cdd7f09be32f03301d5ac8d9565df49d214790997cfb1e27b13cd0aed0cd48450dc861ce07216ac4ba00372cbc6815cc790a0490c2685c014dc785828c7ff309c44511b88bb442bba37794291bddb0682cb97daa1ce013fb04b41157758e2713f178233192136c5dbae3b1f32c16044d233c1116e08e303aabc3e5ea31bdc8ee385caa84dc88fd515bb13f5531f647153cf6a7e4457deb219d959148168648a0574a3cdc81759f82386935ab1cddaa8f3cdf9163353c03a0a58238b20e8832dc9005c69365f2b972637504c2906c65733aac14d6e4ad8f82d861f412f650c71b10ce6299998d74d0eaf02ef52d90efedb087665bb28502f210d60bff758a55e114c7db19ddd24498d2b65e2cb5b88803b1258be06c1804228148c5a285acb184457c308545a9ca50b463d81233c01bbe0c3d10bff5c66f096bd32e439b4158722cd1ef9cfee5daa1252474787df4f26f4b0c3f3b96f4de1dd408599622ddbce88fc8d3fd4742ff2f1cde4ae45ae9ba2b241e368c14810f693ab7bc3b29082f674ab0a0954aa56e0776b754ea18ac2e33ba01ef31c04db4bc87f2555879945230dd0bb7bebb07883c66eab3d4932118f664363e2cc1a5ef0fce3a31ea2c704b62db82bb0456af8e30f85564429d359d7b13de3321287d8b0e562f61e559ed39fb1fde366c025d0cd7042976c415c4498d151b4090f61585a7c76ff2154a92eb3220de3bad7c118f4e0226ecf9b5e947aca5a282a284cf7b65f372236855fa8ea8f0d0a76fd4f67111c2353db7e38e3e38f7353071c314b795e302d0c18eac11467a646705225a3817d39000af9d98d691c21e3acf53e73b4be2c679ef75c01d55c7b71bbac144b588bd10c43844e13541497556ff390c729b19f07f7715a196fdc00d88afbd939c274a2f4a1fd05e8d1925833c2ba4a11eb31937b27a9e9a77b5856c694882b072c4f723a96705ae8141a082b81118d10cbab86e1828311e3a0ceab9351ad3c7814e60b3dc142f311f3a92d8f18d9e1e3fb44c650830e36aceb603a6db676e782ec5e7ecf757af14deb5b8eb835267fae6da89f2c21f83a874a4e6c7e026f3f07a17f1de334f9bc2e64d2c293ce6e34456b5cd175961a5467196da9916467fae195be11f057ce2126d0b2e206ce575873e1c3c3eefc2086395bea467028b44f6b86191d97b4072d922780e90c73d1248fd47d4a006703395b637399f600c93dfe0ea9d021b75ce60b47a7fb723821333e5769eadb0ca0c3f2ea09f48221bdc70053bad06bfd79dd206cd7b23e533653beba52d257e9c3dbf2ee32a3257f74ab556e62128616503da76351759d7562458b325e6d1ae5bb90e76f428481b28b0300601e9257d81a0560e4ee52946e54a4d2b825a059cbb2ceb8c6ef48ab5597d24c09def944142a5206779e34b8f16322b2a8187e60fa4d12280bc24c16f3b413bc6ca5cee336c3d7666f0d64c70860a1d5ea7f40992afc016dce04d5ecae49a4f694e17909ddea43141432668d64812fa8f0e709defd24afeaa17047c807e65285cb7d54267ee773244daddf2a75d83b4eb10c66eaa6cbb10f738846d996dbd20be929e34130463b4e6698eab830e5c7b2fca119e312937e3620981160a338cd3bc98a617597c146b1f3e168a058be9999e8e817e058bda44f9dc5a3902e5c864ac38596f49223b09ca11080ea4defb08160686b51bcaa58a08c3b3cf002565156d0aff5cd53ab98ae2fd21ebf6bfb0c95f29d2b0bca093bb9fe6d0138914f1ed07488144613b7c2e57966b38b2f977624bdb430a6e2ff3260eac2c50b5f187ad66664afbe51e944e16329f686163a9294319f17e7f62c196e43c09a216e541da2a2f300590c988362948b285eda8cacef59f189be0daee9791f8c52b6a3a2aeadc6751245dcf23727855d0c1484ed312679bf7fbdd346ba9224b90f05e479943c0933b8dc73d27de803ae1717474bf903fc6d0b86ba62256efec59de9428df12bbff59eeec692180a209cbeab47bcd2955e71afaf9ea91ed3eb27c13d883f73d50c2b9d2e2dd9f9581407012023d43d8e679853dde17d69e080b29484d7e7fa7eedf86a0a106a1da6a64cad01aa7fd4d601262e8db84b907090a0865fd21dce488ec2e1d7d57b7448d652564fbb5dd2e64f663937925f677eebd4727d3ee0a5d8040d94370f3d1a684e14eb53ea0e19466992fe1a961a16eaf6d9160cfcdbc8cf660fe88075a3c27f97502c08fd28fe0767d6ce9e11884a15cba8fc662d7bc26dfe012ca0ade7af959badb1db59ddaaa3c4d43e3dca4dc685826ba3c704bbb84ce0ef388124d15443bc1f089590e907753354234d0e9d8f3109f6821b0616e68c421d230519af22c82c53ff60d76e0bf255e623cc2b550168f24cb09363e212638ced23f4427a4bfc5a9a53c75ea50964253159a32be6b16dfa96d850e5b3dc4bf11fb75e0f4e96e6a8dc3e93320788a643e32a149fb0626ecec8097f8116b853d098e4a0d5695cf79b95ce538cc05ccd033dd7a1c18bdd732d0981f9db3855423172597f6d089b3bfd01bc2204e62d677cc8f4f66bb98f936a4d95b9ba3289f9c71d21398caf0c2e89c9857c7646196e17a632585e8efef8bbc822d2a27b85c3d9b048f849654e0538a7b4b948e09e9d1bfaefcff98ff8be3805d618d78fd92abfc6e4f80909f2fa32edfb09f0a0fce28f1ad08d332bc7e1827fdd4d971038bcbd56907029cb1980556e3069c9774cfa83422b397e834e1a76a033669c8d7f9952fb3d4aa6057a06337bbde8f6a51c76a02a8c411924a50fdb4f8f3330abfe87cf8d84974768fc8a053c31983101529dc9ea84229661f6aec7b3a29793f78eb57999f2b61cb65a082b93a02a5d0db8a7fac1b04b6c2f14269fb43c2f1efd211f1be9515a2d8556a102e2a0a551d0069cc2c3c08b5562440ad6d85b87347d80a8138e8988402cc3915d3f2bbf706a5f6d5b8ffb001a2573b3bbc751266f8b0abd70a4ed30413387240827f09eadc8718a777d7ed1009cdee6cc263b08278b14d79356d844d9a3f91750e60619c40a34088f8de8e6957020c0687ceae4247e3cfa31999202d6a22a5c20c4d0c3eafb322db592b79ad0070a5873d9959eb0065d438ef7099f760a6b285735e82d2363367d0114bc79d4337b93d9eda05087e598131d00c42802350e4922e882e76c0013cff6def1ce6cb079334d50533eeecb94e717b00fd8239ff460b0a36b13d649e9623c67165c997ac1eec07ebacf4413c1779b0a718d98f5f4435804a74177fb12a88764996a85b19445a493e8ff3875a74b8b708479125e85d9f67c44df634c1d9c3da1fb564a25d7b5bceee21ddaa151de76169067c7715ddc2d35bbdc2c511695c273b61caf0f7cda1c264ff4f214a99c0c241b2472e6bbafc3321690e449b499fc139dbd403693251886a228a465ab559e11a68e77898830ec2f070d89cc3c03b14e6436b0b17371627e2b4265e83e1a8371d76292c7451420c93fc07acda1b00d95e4c9e64b85c1d36cb977521b7de8d5b1af88fd3c58ab3d1bf6f70d20eaf074fd1c1d822ce0bb6de5ca683a52f2abb5c0e5d5ce9b0e06df66d11fcae3e1f2f237d1126bd1bf8fef1de200b5934137fb902920c63e10e0ec47efdfd66b0f1716aefc1d5baf7c8386c63950794905059f52bafe043ff55b74bfd58beffb6eb85f29a8cb6fa245b5206d8a22d5d356f92c0cee857da3362020f29b24f2d195871319616610e817fbd74330e2be15f71e27ba4c1c8b4b8c20160abc38367c9bee17fe12e830e7e3c8581bdfa32bd92cbb34d0c86f3a4baee6746b05fb7a90adf778cb6f9ad1e1d79ee4aa745199e171ef5b14a6c5b2b6ff1c9c35c27bc2635e475896e381de816d2c616e93518d0e93e5a16922e34858ef848bff73c35935a1b39909162a4e310477abc81d7c84f9e8f09433aacd61ed22fb1d651223dcfaa498f460ad1a55a917002043713ab4682c512d54cfa053099746ea6de9af4022388d0f0a2e8479248fa3f57928e22d168ad61a1750115d54ae9bfdf31ae42c5ee19a6748ef994ced9f4114ee9b55354ba300ef7c61db66f66a99961b53d74e0dd495cd72a60daad15ca3d5188852e5afe39fe83c234aebbc9a99a23d68150a098a625dffa997ac2a82f4e699deb2e8b42de5a5ba3776c1003421799a46f041f962cf32868b86ab593748a620288e538c2f5588dd7f385cef5aa34e5162180e3cea9f073c75695ff8123622db6932a8da8068fbde9b35d2a29907c3e3718a8b7dd14606032490c67139bed82c9adc30e337ec437703db2be1127a103eed47b0f9f11ff1dd394993bbbd260ee624568b4be3dc14b7c99cf8c454ec606fc5e8603b1c5f3b4cb96e51ea06bb158e460583f1371ead4a44e94a502abcd910e7380b8f45116ea90d7848b592190729d285cb59110d0a2e6cd3a53ff9783cae8cc7347399407ef4563c07cb5c0619cbd6d80efb6aad38f3f4c3dec90137879283a25539b9529ee21f0a45fec2fbd9a623b82d26f1744b6288d7347e78ed2e636ecd43281f3dc9d5bd171932df2b8f6c597af2dec37a4a9eac8ced1643f1268c174a991806cad457febbd889f2bde0ef81b490ce35d070e65279271c621e9031fd33e33740fea58d487755501556ff09f132ba22c4973411be0b05aea66f73d53d2c086cf5bd948feb89f78bfb465d53fc5259a134b30874dc9663c032dcb2e2f4eee7eaa22d2b3bccb439a5a00ae7cabf3ee464b56a8cc036c798442cd806a162dcc99f014d82d8f4c93cd6a4bd33c26496a7bba4879a1f3442738a2f241bfca72f55453388689cb6bd38bfd5322217d8d239369491183c13aed48cb048c7259a5358e8f2507ff6d17e01bd183d33f424e0fcca05bb2012260ef7a007bcf8041af5b2eec1ef720004e8d2bccc714d2735917e4cf332a6d030a9c84cc30b946db61cc2f31f90e3e09e6e49dfff7c9e01409b6b230ff0974609fc2275734bb1cd38d282ea701a02ddfbd1181fa92cf976ee73d077e96efbba3505331b452be1d264117bcadf5cb0bdd34638feef15b3a53b558546ca1f77865b66ae0707ed6694f5e0263e7468f878f76dc9ca03c902c233b23def69120cfc085e70100268c42abce9c6153cec93c009ba790b6b33a15b7fb423ca4dd6a6ee4e2f0911fccb0f0dd290f98734415875efdb5ce5321cf1e52b7929be59c61c01b0fef9fc2c7cfaff586786a8919c1f36ad167b6134bc650a25a09956180f8946a159fddb04f16bd7571ff75f7b29eae447932d293dbbe2f174073f3b297d5dfed5fef02dc17a92ff31d2fc709aeef163d5b187fe574b2455a576c07de3f9503c7d3f8c18de7b76b38b04234120217ae8934abf161f7e1a1e8b3c380d53839c47a7078eadcd0e2b1e16a53c3007b8cc81f5172c3cfe5315455f3a936f177ac1993b39e0c2e18b219bc5d1278ac10bbad7a20bef71d398c07e05e32058cd3aee4973b3a1a6feada8441cd215ee1bcd170ddc60d7da90e6066c5b8e9528802e69c5a0309a2de9e10f8991b33658341928be31dc6f33542656641ae213ef6b932462129d447fc3216c5427e4f71dc7dcd1065d9369e13fbd86aaa93d683cea87d4f0213ab51d60f4b2dc8c279429e5fa259fdc6213e6f2b4aeded266ceec646f6d11c424fbaa71d171c015928a89e83b48b9cffb90cb371f02d94ec7904f3123bd0d3ae5e3a6f076acc69181bc26507f12d4fe64913a2810ba8a5eb401931a48d4d3caf2be8a9171b1232258e39705e2ce273e3b0947964f12294c0bfc03030b9d3f7c5532b795437191d4e5c53d17b554c88987b1a5edc9131fdc0b264b8d05e650e11b91dcfc39d432bf83d92d731194c35bbe16a7fc7080e9c847012842514854973c98f5a385c6d5cd67fb084886cb8f493d87cb8a05f41ce281dea9681c3b9b441701d3e4a1dae14415d89901fd799f501d88f0a3acfea8b2d490c8ac96ee3ef504269619e6d3594ad31863774d46f0fb75f87fd4ab33fd47e9e24b1b37a3de15fc716e3008493bae500b22edccfc4cef416f173f6d88721f67236c845bacf97a94c4580f340d92f19a3c1d30c3480105801d83aea62fbb1de948c20c2eb0f4070f0ca92475f225c36dc888fcb99fb5b4f5a8fe56007a0880069fc435d1aba01b7b9974e68964565bc490ca39201f5f0ddb1063ab32a53bac11e0f753616313587891c460a001e69d9fe67d69d0db8eafa0643aad4dc3a6d3571703ec1d55a47177ae57005ef75ce95e7638cf7259a4938cac39d87df6f766ddd03af504c7bbd2940669f08d80de384476488400acd46f91af00e8ff604c33f0d1e724348ddbe29d848b1f80361b7ac2120b16eb7f8be3d51c9bc7cb5f8feebe8787604f4f8f34f2d987720fee381c4d478029a0ce569fbc37741e2690d56c0283369a121448bf238b498e2ffbf8f2c8861076c849599b05b722c029cdf47b45b86e651221bd701ea13e1b980142d4187a1a245769091021ac552339755e4befb95fd2775db9bf1cc75c7bdb2fa7ad986019d1b3636cc6f971a3b76af1879e7397d55fc8da7303e33c9ba45e03176013ac81286d3a13673167d5e6715d4cedd2b1364c4aec257283fc8068a3561681bcc52ac849712bdacc3fc9b0bfd5d43d3161b98ba890f3e69f9ec0ab2152bd0b56dc4f6b6271889de319a66c0737842de15e15b9d1816818985a41e4eda1cc36696c9e4b107c0e25418cef1f347783843eff4b9df2225fe5fb6338b79a1bd3e30acbfd729413a5ac8f855e21ae4e8737f165c78a8a4d466a694d3c62ca9f9f44b0f34c479bb8d325aa4ba647e6a087fde0ceb4737bd9bf464279e9b4a672d67026cf065f5eed1a15356f0c05c37fbec2b9352851998e48ac4defc561ea658deb9e09869ddd771b693591d864a7492d6f0b4f7a61b38197b233e22336da9888ed4c6d216208cb42e014f2a64c9abd97383bd755b78c5538cc0761d8129b92fca4b9ce9e544c581a6f384bdd8618990a80636df28e2f4a052f2be99cae05583b664113532280cdf4060aeeb03ef5ebe1ba3f4989d81d8f5fa442b2736edcc8d2c75021a09b7daf0990aa802e2375ee19c1afb7e0ae9b30c2c48ffff4b1601b580c1d46de6aa32b0ea10d0ddff2a4cd62baf8aba1deaa8037c80d8d395ede03eac0d55c5204c03d80641203018a98f793e2654545b498d6fd21d62408fab1737316b87293566c3f6850ecfb44b35055d2efde5ce886247e084b19534720524eb9c26c275a501cac414cb3bd618f850d9d6a34049b4417dbf829f26effd7a6d581a497d097576a8e723aef8d75e46209da7fce06f816b8b39838fc31a487402cc4effba944ae33b4f4177dc1f499cef632b2d0eae2cc6c371b9ceca12debfefa22bc87d6f627781f4ea7cf39831da81cd94f6a356b7e586d89feab06e278b2ccb7e5f4c0647ce49a2853d2db6b2fd55382abd5ed472675869fd0cb0173e6ad97842035a019f0a29cb82f97aa5ffc8c8a98ba5e894e82ad645d8df1a4456c8809560890a88de7a392c0b2a0d44dd68d04e3e0ea8070c1788f43f2327e8a5155028f0a24c467fdf6aff1d4835893fa030836352c3896c8fc77ddf062e4fbaa094fa5ae170b63f2aff88a1ceb42c2e1fc9849d5a1670591946bc77c8e538b62527ab75b127794752bcc67f11fa0ea16f6280f7b3fc13f58de4059234d25ce27152d22fb67172f31e7f4768d2ab50d6d7488932584f923c23d2e8c417d7280759d854de4fbb14ca0660c09d912603421288454de3a52743b9f2f0501756f5a320c83f6a54b34ff82b07943ef8283afa2ddd85e1e1da04b11d3b84166e7ee1af45ba43a8de2d45c5faef8e765e3b37876d3b844e72b850aee848279f614f16c85dd8bb9046a1158904dab103481d569b3d408c496758807a96533d9c5dee7d3ced526f78ed6fef72d74a94b29b5c9a2c4cf35bc6252720bd3cdfe07e8ec9382e90514f456aad2e605dda8889d0e62c71bfd1e14b792979e2885e62bce3495495235410d060effce9a81d60a29ab11e4e791636a3b9c4ee58d1fad4522334de1eed41e59c717e4a1a7eec7f922c870c323afb60a76b5a518ad1131cf4761c33633620f0e5f33ee345daa5a765e4fef4f96a4503c9e367839628c3f22f40c7688452cf02c785ac0be86e4334ddecb171a4f21d99f5f8169463e60e5deb317269bdfffc3bd2c03b18bd0bc1aaf7b3cc69cbf3d5b9b94eaea220298dd729da0395ca5194c01260a071c9edc659184d536f90729d0f6552370f6b2187ec3cd87a3b64bb4fd1988e02aaaf115771f16f643ee2d5700ff3eb64b59d6ae3b442ec2201278a70779010f1c4f8177381dabc464082b71a472be7a6bc04be37e394543b79d86cec507925147e59551a4219b161f0c97f73021d1fb278a1d87f5aa644629c3c0f443626b36b6c089cd0534d3ab890278933cec5f3807fd79689f22e5155cfea31fa529bff207c71feb39103de03d78c825f9b7c203438609852cc8ab2fe4e8acda5f7eb40582e7a871a4b42348c7d87bf24fc5a826be26e9dc9ea961fffd54632be025d82c2ab5e60c3c24891c020af56664710529c246426bfb9c498140f623d77aa8a97cff7eb1b687c02b3492b4f0ab72199f8fd24b6b173ada3fb6212eb43383f48d7e56fec97369f479ca398feda18e55ffe036c1fb7209c9f38cecd274f3272482a3363540681895ea86c2e1606d43f4f1f6209fe05b93f6be7d525dc5a2ec107cf937c8f1b1ae846770ee2c908e619aee4e7a52ac517afcd21b3fb5d52b70ff0895c5117e288338decd1000280cbe6c279d6704cee59387e5da6e504d2f1e26ca3a1c2b632f9f1a9ba149c1f9d47ef13016cf53b4d387ee4ab1974381999dccc1f35f9a74d4761813e30fb88f26888b032b21155a6851b7215e2503b890d994fc20e4f4bda9d3749c78d57b5ace2f73ce8e2ddaead65db5ed6d91719a9357614f5f8dfcaed91882fcc3e080901457902c33d6fc19ede52338f94f8ce0de7f3c82ce3bada98cb9f64ff850fbbf8a512ec9d3414efd87cad28c9d489735a4878a4867862ecf5774519daf8ba0d24ed8f02045b3c0a6e69bf0f53618390e919f23818508a7fc4372f131f0d68f6e980b634232b502619c53b73b065e657279269bf114dbd5b0e38efd1b44a8fa82391d26203d3ab7f9e08a6586b063fa22893e010a0a806bd26cd2415164c7c01da9ff03ec986a7f905088477d0109a3859695772fe5d4df6d7c34bff880408407192572d8377396ba1383c84b60cf7ab447a74bbe7a88ca8d1d86be7f1cb9170d2bbb266e9bea7456301c3a43c28212c2849f67c2f8bb9073f65398aae4d09310779395a1d517c8f3ac9e297aa88a332bfd905a56e7c188159a5c495175086c126189e80f5d610e28295ccb5cc292ed54d0299ebde21e02b2f039a36cd265d3a0faeabb73af3328992d016b4785e7cda43ff73582faca97383b40764f80a70b955e39c271667c2466e38799d17afe8525a0631376ef9b541e5b738e23f369e5e150dc9d125473539c604c8264053015bbfa8b4982b042bffb7d5f0a5b8b97a0d4378da9c8e2ae7af01a57eb7e973bcf177e5bb49ce100013f902b01f58a03231d27e4ac4255603295cb5f6137c3f1a3867e873c4365028725b88ea07afc832e3c872baf88e76a1356d990f1b445a72fbfb22ce391527fd89a9ef6e04fa874022d188425197316d284a6c40a9925704cccef640debd2d570668c1f4ddc8f512afbfa4fc7b9fa38d596557e0062fda22d824a22a8f51f9c595c3cda9f2cf94c0f2a89c26fb870b249647679b15b6b7f7b05f9c1f6ff5599d6f1dbf51c2415dea9af51f62839f7e21e0f437eecb0269265a173dc19eacc459233bd8128c928e94582c0ff815f8f9adcc6552e3e7cea061013be4c85614b4cb3a0b4f21f39c48c203029db5f0d416a4ad23560caaaf85254e6b903ca1c9ab2540944b8da605394d83b9a10549d4ddc8ababc513a03e75e868c716f829869b07d3631b0fb92304afcd548efb839cb743348cb480040020c8ff27076c5474df9aa955b72c1d099ea946c3a0d5c5660cde40d3c1f5a63340f6879d8c681cff11a614e89c851734e2985c1265669d948b3c3e5d49781ed78ce9da7859ae3dcde9d148c19f0290b58a7ca2cffa9673ae8b25f59dfa69bf180dcf06d16abab7cbcf3eb891b78607614ba304437886ed78fc1833442a0b851b35b7b98a10a810a19345649ab9d81ad2cf11553686da502ae02d138d4252d18db47c8867f7fea90e98bcdd7cb904ddcd2a1acc031c7f31d297944aa004ac3e272274d57d6e59ac39ab10110415e2545cdc57b2e84bb39f9ee1025162231af93e8771ec095811abc61bed4a3d36f13973bd1985be090014a0e5fbfb04548f4c88ae2680a0f34b973447853c2cf3ba408253953727bf4053aedd9944c877b256a96a4aec8f9218e44cd07b74a19b837205f6b278729036d69b9e24541fc750457937587bb37970adb1b07ae53ba349e3cf55f87912d0dfe7388e29293f5efae04a4d8c7f8318c43e8cbea0ac4d466c2cdaa2cc950346a7fdd2dc2969ca520c7cc5f13a81f3129eeaed245ef674ff7b2ae741549f8a70e684efca66779a71dbe71402dc5b2b7ba7b86fbf9f47cb0967ac74c0ac1ff09538247b15ce5d8027b97c12826e95ffdb08cae7195bcde7dc161da2e63b82288945fdcc27e27ced4a4171e401ec9a54cb6e248e08ba38416ab64145d3afcb692d44a37d866a0ea6491c09e9e69ef26ecc81703af7a407314885c814be808a1c484e0ef0672c1d85532f54f82eec16e1753079528d7e1696e881845e25a17f01ee5202f09396b63899e1d2d4592a1d51fc1b9f23243a417999ddd3671bc7f8d5ec7f75a4c5607ec62a8738d4ccc4c7383ef3d7a8077574009222fb1cba3b7aa81fac7c014680e11d16d9448ced9c3010fe65685529e63e0a3b596aa459df85302cc14ebf9b7c7e06d5f95d1cc0c5a48ab625f56763f1e354d3f4d5b0d8c0819b8aad4f7143aa8a9c5d1fc6c6b246666ef2b1b57d5887d9348b173bdd4ef2aefb21daa8ebac08008ce27ffab0838c70042a284efb354918c7605580f94e9d8b87aca6985cb6c86506472bae6a17f742871151440ed2d8a3cce9ceb55cdff330f43a38822654a861f20604a89ca57aad6f304499aae09dfadd6920f4f7d5c1a0e7e41748a8a35b7b700d3c9209cc66111907b4c40576fb52fd485553a7071417d57357d1d794fd4088f8a617766ddc03ca3b5274afe58e71ee4330dd74870410fd05cbb40bb3b57280d908a0c549d68b06ecb37fddef296a923016608df94798a73ff8b61a2dcc1e34a227ae96c96088d467e64d9f8290335730eb8c3c419ccd4f93ad2f5a9bbfc8b44acb8b737a487b67485a426b88636922972c8b2003c8683cb7b13a5d4b81f72fe60e0b2e9d98633c663e246187f716d7ff7c2b68abc0342163de22412e0a7be322fa13855893b69f21a2c6eedfbf50bc731243debf0441e1471f07c7d56546d4b39f768e93db37ad22c471eae884cd232786bf0a3224aa2027a68be73807138d012f5bae7e54b4c70abae38164930f5a17c3f57184e066d397da8824f029c06ada7229ea2ab368d53639211afd1047bc43cadf1bf07da1f96e691eaa3a2f4e4a751ef34ebb84b165d7e172c443045d290a64e31d50748891d2afcfd9be4007dac175645def5ffae719e59647990de0cb84d7772f614b701fd54bb0d00d72672064eb106a6a049a548acd9b5ff385687fa142e6e21a4b219a129ced97adc111b12ceca1d24d96801f501bb59f412be21aacd36761a80a01d09f50f2967247b62b29b255139408de2d00338bdc18df52b42ca682816e9f032a5aa68396f3bcfea7923dc4aa73a142ed5db3212392e9f0bfceacf9edfbe25dbf842f11314504a3d60f34ee1c1840f25e6e0537468d7fd8e7c2d27921001df1b609650ecfdacc4ca5932e4d93b81d839ce4e6ccfe8040f7c5796f0ce78fd4f0a86041eb9a6cbb8cfb3cd6c82c9112adb95f6498764d08f7a0127cbe8c53f1759c12b3c875c3ff41bb0208f2545d4bfc1330cdfba264719579963e6c7665df201916dae60311ca45d69ce28ed0dc42cb5eb19cb8f0c681171b9d350b340e301be98d311e9287d1ca0a04a9c36c49996a21123959e9d4befb8780825cba530d195e939021a3001aa1bb6d0cdff3029c9ccbd83838c49cd6090e813152d72551a4dcddf7dde0c9851664251c6dd1a803ad45c6bd6933313e4ccff3903a4a54b43d41dcc28295d38b49f5c69bfe7878fed0ed8ba06fce6d48984d3ad8429307ad483c3a5b7dd1e8a7933751f6546c138a49595cb8a32861f722a16ffdc45b3fccc7454f6205bdf2947623e2be7c52a2dbd67c4e4815c2c08423aa3f2653c6df4ad56706cc6036c472c2bcc2ea60125c3914f23555e4e1fdb13a94885f972b2fb0c4c3d4040e99808f4901cfdfa536128c275480389d968a8c2024c5236311b8e5be131b4fb17870f4f9652ad27b33baf696db187260d2951b1b6c9ce6fb08f1460d040d1f053769b57e6e95155abb910f5ea45d749a39955aeb5de79e05b2bd6311b4b2af6f1bea29a096148f48b8c1c1d788d9d63b551970e866569702aee20e166d25c755ea3e71486699c08b049971214824c32f5d5e0971b697900b8f34918d27e219fdf2da392ce8aeaafd1809e6d199cb820ec1218f480e247c2fb9f488196181c5a0e593c68571322f196eab1ebddefd60e671e62e0ec470d4ed2f320ce7bdbd8e9b95220dfcb1aa26831616008170d8ebc4ec454d054aa12d0e2b8915edbe4d7e129c003b014098ea30ff24a0385b0284125f293bd2a6e033312aed4edfbdcee22f45914afb744e16e7e3c68387bbcfa6792ea8b0cc359022c3c6ccf0703f6ef9c5a37d94ee60a08a182c8c3e366181b7f6eaded163b2a5ed8f57aece61a84e7795dc38b7fc3f98eea801a3493ca208dd380851188ba62ddda79c75afd579192874e43d640ae4f372fd3d33f6dece32e6000610735d888b01857cfe82d71028f3807f8a800bd0a7438f326958d860952a79a621771e77439c6ff0fdb59b152b9ce857e8eb6c52d80ec3e6d503a072337213cf12bc10cf9da0cadc169929dfe888e0aa6e9ef12d5f2ab75fb3b0813f1b7626deb7818899f1ca6a47bce05b672e2b47fc39122299e8fe1c16c31af681b1ac7ac1c7eca726c9b4f51d3de2a02ff209c46f6397fb90b6a640376f9b0253d85222baf85649e5b2c1900e56ba714dbae94bf98a4e49d66f53cba5f8c6fa552eaac153fbcd40f2413f7f5a2d7f129e5730e8cf1b48707b2ee8103fd12450efa2c4ba323b9583fb93610dbd194d9e300a4a9e0d12aec01ffb5ebe14cfb126fa3a833a38987c59cd47da85551f595c360b907bbddad4c94cb1182dc945683eb33732b74bfc176883cdd485e46362322c9bb5b9bd360c44b2fbe01092bff2b32c8a806e1bbffaee5c037248472121f3b1de2acd6145bc5d4eb9c6ea046022915cca8f19de8979cb85f9b45e4ccb3829619bc9d0c363c4e7b590823e8da44ec3050bc7465599d889c6fd19e0a8f08ee2ae54aca5545a188cb0d0717de954529246a1696bd478b41b9d67741de0668a9e9b60998b292db8d266eb4b276a72f3487b9897d0c7e18dcacd255da7f7de5003ebcba159a1ff5403a2ca621291d2e8d5574536ebf85e4401aa3048b12d1641042a45be0df4d5746625301c01178924f7a2d6f6d10ba9aa91bcd4f77d7e506e9fcb8b1c1f320d15d278dca57473fba24cf3eaf4949bf3ce78d90ee55475e418968a1f4c447590b5a894affb464b6c6a984442e947753bf9f9f1a925f1d45f637495c7ae286f4115eac6ec44814c88c783d6d0ef01214cf792efd116af9c6ec3dedd19c1a4dc194eb924d119692d99f26acbb6e8066450e5f97eb868492a331a2d3d74632578e92cbb413f6acc581630f2eb1f668ffe5f16324c73629d563c8f1e3e8b2852b76bb4c50a871838db52b41265366b3b805f5ecc38a868aa024a17e5f897fd1121ef755f96838713ed72afc5f4dbd1aa0737b45c96a3d545eee5d696a9c62d4e56f9f412fce7338ccd9c437ec523d82e66704cf1ca20b891eb576d5a6f2fd2afed9180680c29d07ade7ba75a3ef94958c4f3d1d3b18ecfce17ed05946349a4b886f717ea23b110235ca379cf702a54a1eec2d6b0295312f626cd6b252d6d1664849df987f143414111ce46817d16e3c4a1b223f7197dfe0da08521c0521cd66d4ca4247c9693262500a578d47bc88f1d1aae26b07226bebcca5fcdc5f0d8e7a8d8836ca5d42da3dd32040889b51b1c54646e20e28e41cd754155ab895a8191e1e70e05524e2716e5c62c4057be75ca58893703a778bcfe80c51f9f29118b477f15f192482b84a4fb2ea4908dafef2b532c164b88fe2b533d62aa88164af4941594afacf2c4b493b6f493c5397b6b79d811e6a5b0d9960d2b36066bbec474c62b71e205dc7aed91f365b7d42ac1e350c1cbe6fa12005566cdc339f0057687dd6b110a5e57c86e8c882205d98d86f65ecfdbd4a5cb839ca0325deae0b5792c1d313aa60a8ecdddfbdf1ffeaddcef6785a22224b69bfff3286eb586e623254e6b9c9eddca4ad9be37bf412ed20e1d132b8d548c02d28b377d55a401e19cab3f8ec3e75d6651d50d02c41b95a5834f7fd21852f11d5b87a850aa609832053ddff8a68b0c9367a2fd12944eb8b0f64b009cb0927b1c90ce1dcfa99cfa92eb9708bc4de2fd3783fa844e34e8e5ff4f9aecef5fff25b46ab91fdd7d4c1750e638ccbf0d605ba049059767d07e09d471e2c817fc12816274c43182b0615f62e382b9afcaa02f11c43219c9f9129b75b3d3c5f9f0039e56817c54144c7f9e2d2ac3438e2d6116cf0e3df168e96f4e97015455980076fb1c700e29a7575c81d977932ad2c69e2ade34b7a7bf4811c80a2e277e814b1317e513cfeaa5458caf3d8d35b61036a2d64d3b6d2d1c32f68114066b5d4394e7961e689df8240b1b27be94b642391a67e3bb59027371bf74842586fefb86bf98a97db90c6745a6cda4cf237304b3ac5c267bc3058db31bb3df63835ef24284e199c5f7ba4490a08b9aaf5e33df94354b7d301e0925038465f8c10261f83b4ba389be8fd6a824d9bff6ddb0b44fbb752b602780aa18a93d7ff0bcd8b704347349f6f11241866cb0f79e6dcfa505e70a6899c348eb117814a95cb213f811bfdac475099c709c9cf3c12d3b20d612c95cb64c00e756326bfe84ed2c34cdee9e0caec2030dabd7af74f27da50383d6ec934367b3a4f830009281cac46a4422567e44d9990d9f9c85461ac77a8232f181d3c39704966b2e6fe914026638d1a48a0a112e3d2cc728d592af53a0b960d4605044dc60521c129394d428e1435fec0e7604595956b98e3f28eb41182f156cf237310da4a080f6513b53ab337968c559e0ac3924258d5a39c5d63bacf082e75c1bc608c2a07afa5037389c4aae99e56969201878674085015c4b22603b44e481a3814e7bb01ab350e38d06868c2b00e7ca421f18b62158b3afc0ca7d9808f781c698be63f9874fe51ea0bc6b0d56fd68f7946f73c2c22672820d0d3610b1fa086aaeedb00c68e2c08eab88e66f6f963508975839387226da3dde8e1a1a78c38caffd6f901bab935e64a167595209af0814a6dc69f019197f49686988d2f2b226c80e8a63af871df8077355ce9e886f77adee1dd3858e03e4444a8ecc62299cae01b3e5328f9e51b724f18f46d08a6f07405e7d328f61f69527dfd5e058761cc0555bf14a40df71d7634cd419fa0665e71665add62e1ab9994bc5ff84f274503e40ce47eb62283e1f3c3f428ed76f055c524e26a86f140e97112f51c2e56ba5760883530bb1c7d6245ea8feb7def5aca5cbbed81687446de25a2a94c0c3b2bd8dce384a3f19fd21d65d2da0fcd5d87e67b7b10cd1fc42a0bd714ee4a479ecc33106fd2fa76bc84d79599b9a6699f297f418965e15a441a1a7eba662524fbcffd3e95a5da1d92104cb4b8d47ea38eb48035805624aca3d80b34d04385285f47407a329ab3f1f8b75032cad8d490488eb1303fcc7c2a876924c0be98a583cc2b5aed7fc3f6ffb021e57148a4d34aaf0a011e73ff8e14f3917af7c9813f67a4d791ac6a05917e4ba3a118d39fb79bd13b6c02f9815da72d77e53982f5f6793722a405cc7d71218f6090bd0204f5f2d5433059f31ceb74dc979d660f028078ff30a728006ba7f4659ef3803c068cd9f1a167f5b44f11a50f7bdca45e37f61955c9882553aecf2adca82d0c53b590455c4f700e7040264b595447d6ab4b4e9e1a7bb4979e85dd93fce2c5ce0af4f7b42c85ec8e228f142f287a214b094b666a20a0694ef6829d78ebeac8a837b3f85deda20679bcb71a2cc59db0aac082be8f5c7503aee73382942ad7562a5bb2f5a6d3530262400cfda0611aa5adcfa0182d2f5470c953350772c1beb3371101684a5e44071c4451da2c2a9b83cb8ca9e15d6852d5f90ff8a5e6deef3f8c3a092591b6982dcb5e76976c13d2e1d83d7ad9e0aacef2c49ec0c90b8040aab304b032620406320ce813f930a695fe506d27cdbc686df83e74acabda07b44c07e72ad465adcf7c17f485d92ead42b07e3f0227e9f060a1056b2b69aeefb06349a1d9add231788d571c84ab8d19b47e9dfee95e2f131b4c84e084b1d3ad3719d0cc460f8e29e9eab9f48a4f84d48497c597d60ee4905eb3c8c222f540c44261e8892da67251b00b76309e23cfa8c923c0afc3165df25b804ffd7a35c60e53e7ab0d9ea77c1f9eac5b10c3b5630f71f22af11fd364f7de0e0605e32d9dc760587a10d99e4276dddaacc0094591750148f51a34de0228fce4ba1476b995bb705a2178be9f62a682dad54a0e817b4b21e66e8d13f8dfbae2ef0832ae7227131ab67e2e9769d10707d459814c3c4d854d9854c10752a62252212d82e540f830640b2d35c915f0e0f03fbf62c78127ebbc00ea4402aad050966cfb47ff1004e56225479361924215fecd76af2815ca2c7e893856d400dadd6f695ae685b8d10bb3f678cea26abb17f6aff71f9720be60f0110c8bdc8f0053f532f53fe88a0d7d67802e9caf0e56ae2a3f211d3506a07cdf297e12a08200f96f825b3c61f61a3a193172b0894a7ba49af88811804ead5d1e653a8bc4da27badd910d8a28b3200783d7c007712b90167d0706b7a15bff853877a1a10b74c80100e0010b784e4537bf5e0aed74015770e589e3ba09c99aef34667320a49f2903625c870db559da2edaf530bde9f0249b7357192f9569a2c8fa2745e0854a222c8ae5dccd73de031d5b6d5dae89c720a56fe0481443a2b1c82ff070148672140844b2cca780e918d0ea00d2ab5ed5b886f2d989a4ac4bbc03f001ded72412befdc2b63aed0508a1720066c700ec884aa1f7023b1415ca1da1ec2c0c838980e02283af8bc9c45aaff0ef4d96583b4b2292b854e3e6327632015516f6e33d4e665c260d8188fc27ba6376c2350544a77c66dd01a4a3e5c2703b7779b88e23d2d0d1c1695a742dd2ff231c80286b290acc6116c47a99f3ebac2ef981ff2cabb539e2857415cd7d7733e124ea2ddbf249cee3c5b5a20f3a91cdfcc6ae135bf86ce3a72d102f6d13fc726d67e76d1395598a465441261ac886f7727d4301c9067f3f1d1d740ecded127df10238c37eb4e3d69bd77011c008e666b2601263dade68baa15d09213864eaced4aad0c430f892c5818db0131b5987d2ab06f4a58697b9539a4ed3e8bfdc8cf42cf10cf8a88911ef516687e85fa445515e2292587b04ef9a35ba35b903a3b8c40739b6289cb92b62104474f2b9c33e2bff0f8fd08e4c7c9ce2faa1138f23ed217f7dc28416194e8f1540da4254af5cb127daa10adcce4a000706d3102677fb86a49ec89e01d8cb76afd9ee6e9cb70a6a08c25b2b1a6b5a33a3122b8600743229f32fe720f36d2eff2a4b923fadbc52aa5c8ab78c2c53a4b5d4e4d9157065c5723cbc6dc565c13f43ee84d0c3be6f7c02db1fe32d3fbba5e24c2ab08af648e25f8b2f7a586be6131f7d173ad34f629455a80f38b2935e094be6560a0484c6931fd0e64706a9e4ca22ea2202293dea39bc08be476b92bab67f23ac5dd85074dd9d0fe7d49385033b102ade94ef21b22c3a00ff4b306eded9c6adea6f21ed588468f37860b788f89d129833ff25d1747f4d7fafec2a3ac2b8a01d1b2f3c5e79890f62d0c03326e1d9859a60f3311d1a5da42f2c5a76b0b0cb54bf18b2462a571955dd01bb2fd831804df41a8c7d28121585c9ad9ea9282423b2595482aff7e76a1fab25a40c474d984b79414fdee35828f328c7d674024644fd235fed9b5325242680a390bd40f3bbf3ae2c64488055fe456181d333c5070fce215a814d37bfe21a3528be8d54e70ddbeeb477a848c81e5a014400ff24020e9e1c07e4796a58ee68f83ce6781aa8284f7d1965f2b4f480160c653a6fb145e6f590620211a3bc291d63f7f919961fb0fb1ec059709f77808c81f6b6f0c8cc6ebf5f5b5fe58a58f39672ee0d026ae27c4a51e1e9a9cc2b2d822275177819883f903ec5868fc76565d1654f04036a7700e36e4c8803cdfb90e7bfc846bca6c7b735fc67f2add1cf9f6c8f89710a00ad08a21e43c8f5b7829f61017cccab911cc097885e7b8b4133bae39c16df65d90b609cee11dce485037871f86301108dff504f405545017e0638297866b3427e25d4c0c18f773bc69897c8e2f62c28071eee0fe5e857a42ecdec8e3d770c905f2787bd304eed2cb5d0ccd7e2db41a08b1b2cb4d4b10019f419dbe289195df70d53bcc387896cb6806bd9192675900540c4e47d4aef667f9f928728243543f336a6bb25c2e669cfa368b4aad409c0d0dc30e20e8aebaed1629fb675f1e5a42fa543f37df913515015aa5c2f4bedb4b71f5417413d19ceee8de0ca4f6769dedf3c27f1490dacda4a5aa26a1d02d82039af26a34d7d08253a287affa3d799986766af0d89e3b7472ca7764b80c0869a6cc8befbd9444d593b14cd8549025bf211a0e8257ec20998e95ebe16d6e4f953e3b1f5f4d92f110b892fd9ca6d3ae65d59b83ba03029bfd43d42b7a0170784a25550cb7542d71f2bf42192940934493372e849bf4cd44c828af42d4b95f05f2e00048510fd0aa3cda4b1c2bd0bcb8c8bfd32647bb19306d65ddc5a73e58a8379becd907515359f7cb3c0ade4dfb36736a078952add2f33e3c0a8f4b7feb336907520150adc8fa1f93471ebd26633439b1b31c81304e46b47abcdc6f762d40f269d9c8e317ac5845d9a40675901dfd045af04a60a70042ea4cc9c5e9915ec37eabeb1efd40a19519d466a5e69c460f30821bbfdee3f4db178fe9eead5c5db8e4b439b454a0873d5691f773211fb421085763b00da4fd8be7cc45896d2c81985d4d03ac8376ea340e64ed75490d112c5931a87057478513808a1973472159c3cee047e713d8241f7a8a7a3f1ad8040035fc0f6a3819740aaf3035ac6d634821a7d81a4caddb82a96d05a6560e606ac27fa9d53cfe434f5f6a9cf85203a724acf2f552a3d7e60ca45dbda69119a2ad1c4326f1dc3d9e03d870d5c99066ade527a6d10f1880144c1a5c990aaa7ee15f0284b3724d86419a2fef080b95fbe054d22fa0598c5a7ca0bef68bb70166fef9fe44de1fea015b1c9dc015e704fc6442d66cafc3919e8980c1bc8a39585f677caeb3e3945f0a05dae04dec4236ddd807be5c55a3252b26b849f46f3b7333f679b420cffdfc9033b3e3c65c9743aeb976b38c0f79c5a65b077cdd175acf79debbb47aeb237ff877ca6d1abe2582cf10274885a582a0344e952009405abe1dc9f6a0564d6c8bbcec9d3a2bce6b23efccb01f8627f0d97940e9b1d4124b390d87bfbc4c1eb01ea307c4114116e50d6aec9f1c5e730c4d032f8622f4bff20b92bee068eb881936ed83256c671cad2bf83e460c3f623cd582dacf624ee3bc5dd9c9946cb341842c71096b41208bdc2e8309f95def537f666cce7731bcbdfbf1e6bcb192be47663ba13da78822765b6899ba8ba9ad163b874865799e6d2acb64e4b24c832e318105d14766e06ec9619358f265c0ff496238561a157b7f434614699288fe18ce456933209b421997501faa2d777c2e780f28551bd2045cc64065272db16740246bdb02b9e61aca6898d36924fc7106478b287b00a1d6f4028a1958e4f8d5aca8b2dc02a83f6928dec019873bf5fab34a5e39a8569e41d0af5d76e77ab745a3ab212ec218d62a00a557a21d364f3e3e580e96ba789c0185f5df7256cb099d046e35d0f9fb0e20a84222eec126c0952cb2db4bcf87aadb8f64eb00100d84a7840392d546e8837e6638b8ff8e5d597b6a9e0fcb0e9c477c1a27bb2b616d435e9d14684223b949789f5efc71284dc719a7833961b0e02068a4d3db07054b17cab356dc8f7220331106da926e57110a14eeaf6d5d831cd8790e0409c9ac37deb9485abf3d0ed05021723aba4bbb33232453c1373a198713b9283f7212409fad83da0b568cd5b4e2466f4c5e582b6ef8b3d682a350fd9c9c5e46abbeb537b8f353fb188f68078147f64250419246ab4c5903ede1dc0d78064924d932eb5433487e31033966d6589146f8bd1806cb34d2378da40e93f8008b9010c4721b3a82d716983b6dca47ef0d9a59599c3a71891047828548a734cec91b40e7c7aff6014c4b661b96da1e8e23fbdc20dc282afd102cd8847833232aa14c0da22e2d191e12c06a634c7e06f7a9fd9456c8fdd49631e0568f2cb042f02a444b53e4beb6886d5ec8c14f857036cc3ef4cdd666ad707167cd4bfaa4ea0f86a32dc24efaa08ac71b0f1a3830e204d1d9afcf264a8938f663ef2073161d021e8d179e27d2d172d030a4e5e3646d4baea74bba2c17c495629eb4088e0942036c119c7f81ed45153b02bc32e1012b76deea68cb272c6732a1621c3b977ebe4123799f47c6a8b3c632ea0bf630e0a146d67974aef8f77455280ed28ffb5fa57946b8d0d0e33bb9c0f332352ba7b7c557d001e6ae26bd769dfc6375790595448ebdf7b0abc361b60075eb4a46ce887d31f90e17ec8d1c6702c4b6a2492f3e58cfc38a9094f52092c4d62f8dea7f8e1c0e3f5bc24073356d0d4429524055ce6560175b45d1a52211cb689d0dfba182ae548aa6ddd5ca718c77e6dfec98ea5521dfef0dae902ed0c4fe8a213c70cdd176607489fd4a3520e577a202bd17b8d5f6245f31a9b1f13bb888b43c683ff33460ab17f7cec12d8ec6f39a16d42a2ddf222e2a042d6304db35d723ad7dafe652776af2258e65d85452f54f471a82dbfbc5d24d095bf7d1b5f0a64bdc1ba4058b2f4815fd32539eafe46e2d4070d0a7e4eaa244020eec78cc6bfa4165f315e1570fd0e8914b9c03add84cb56cfa4b841654465a04fc614b9b7d0716e82fdbb0412d0bc7fe12267814961a00c724e1c1234c6434b7e89dfc900deef4f7f912d71ad2f7a4b4a8911d43413c5f875420e97a30f5805b9d6664e01bdc2c1002484055e72ea4dab8b5b8998a4953c1dec0bd0f426bf21103fb72bf1d915eafecd7fee689fd6e185233b351e13cb14d72887f4c7b6ba4dad4cb4bfb79cd1db98ff10561da364dda03ef3c1a4f55075aa808b5055039b5ca6d9d267a3f6425c16aeba982919ae9c33ce10d4a7bbc2f00219796b52abae8c07371e712074ad06af6f5c37b1bbc1acbbb67a2a2e8901c5c02d7c5c1a4831d7484bad13e57221d5212afe2ec23d085ce22ad7e96a8ab97eac2d62baf7fd94f4a8b56578d10ece0a2410c09a733daa698f2a36b6d6a1e80a918d446058427b4a75211dad8bdb6a361d8e8b13d9dcf51f10c73d0b77d8fff5b7dcb346bba1bcc5ba53137b449bdde2b7e2407f47f19ed9d4acab906256cd117146dc3ba5934792707d314f9b56a4013c895d6b40a8d3db7f3df4073baab7ab4ddf4f63167e8e342d3437f0603df13d89b7946570e1074bdce07adf20353893486eb1a69f807f7a92aa91aa0e73abf1b447747154ec9be042b7d4cbd1af9af5ec508938314f026eb2350a9dfeaa5dfb749e6ce956c9a7f3a6d07adb50db4d20464a58e091b025bbb8134115b10f6b9db19bbdd9c71e5cc04e67c8d5413373f8def32128253232b39f26a6542dcca2c6c5f946d13f0c35acbc245efb94e12a0e476e43ffdf23887ba09e18207c9b782e330ab36f945dd1b6f6e17b550960eb65384774aa1a0b00dfb7986b1fc45aeb23bc839c70b5f0953dcafa269f5411f9dcd1b0c63bc1bd37471b468c982b16a504d988cc99fa56b52419510e279a4515ed2a4edbe8dbb18490cf34207e701ad12493d5ac4ab559169ed7099821a7c2717f7dfb0ba200d084ba5e8329e940b1cbc40f59d48a06956d0f2b38ca45b8ea381672d41e1b3be1792d39f61b792fb0208f0c5e5785abac08d6e569afd45e1708cfb4dadc8e5beb15e16bd7bc235872a2b26d640d5e64a602fc268e538f8e9a44ce2e8c271120a7cbe6ce92f99c784cc330542c97ad3bf572812b3123c06a9036a4e42a32f3cbf57f7d822071a5f3930f8878c5407b610d0c8f72a2d27003a135aefb164df3a5461bdc07f8d72fcc7d38f1bb8f4b78bc21acda07b6d3da3c34a19f30231c919e978bd241437b47fdfa6ccb735182b188a3f7e878d559aa16411d54a8c2afa34a28b299ad45479602c83bce453bf9c2c0a5dcf4a94b32441a417732958ddf1228ad00215b08bb8f2b7a641a0f8fcfb09dc724bd095acedc3772bdca38e087402a4c1a5362ffce0b05c5565e80a74662abec04d40486d8397edc6ec2ff365dcc6bd55caab5db1cf7b2870356ab582ccb777d3e69d2f6fc64e090837d17d6eba5ef993bbf92669267ca2116f336e26e77a9be8e885c0126a3dd5d7f17e0afd6fc7e88c59f432e07aded7fb1199802b2b8107310eacb4a034772f6ce3b167e0090354d8aedcfc39ab870195c0e6cf87eed94c3c34288108884bccd123f1bf35bab3cf610fc134e5008c778066279c61f450d4cf3044bfc9991de0645466a3bb0b7654c164b91be5e249ed95d8577cf0c462db380cbd088ef2a0c7247b59663fd51e0ddcbd39997aa36a55714c9709736488afeca1e5c44c1d2056123a54a68d68468d9396380439e91fd0fa505cd504a1f7f1363287d02053b4c83f99aea04134961362d48682d97c6d11ce80fe75666c6166508ac6d952ea7eb61f3662c395019d9b693d12d633bb205b7ae7a8a8a1956996035a0ae77393ba4d14fb8480859959ac02178e270238852800a44e786b1c3a58f31d6b17781b738006333d9c602704b27c3d43f42753e3874dc5a1d19debd47dc766790aeaad6c0887f1dcec58ff178f6c50102dbd53e674a20453ddc1b330e2122ca7a308a0fd09013f75c82a7302150364dfda3a127fbad27929dc84009ca138d98c8a9a607fff7f44f72ffc3b2f822e5c13fffb8efba931a1391e1abab14ddb5bba36c53fc6ccb05b69c5e1c24d5610ea902ddd0ecc48045513cdc2faa7ffcdce10b7d766bc2052e9ace0322aa995ff833e24ebd3fa8ad21dfba616296b75d007514f19e58e28394035b34c52797b04ac2154baea784986ffcf26a5388a04876a05fb7e9b29b80676681b8ed6c02457f07b6ac510f0481d4e23dbcad9c4ebb7901b9ed1ac24a40d5832c7c5deb7f82b2c2b5cd637e130d0fd878d56d76b3d54972c97268baef17df1f2484433eab6c9b3d4456ade256d36ca364f9c386ec23a87da959c13469ba552be55bcf77a0c0e0fc23e57184bc917fd90ce797963ca79e54491d38d30419b09104bfb4c9d9d77ae421fde7924264882b56afb0c4808e443716c7899cdb63483656235ff0363c5e66bc7f0a701e39874ea1773c5b04a7caed47722fdc385cc8e2a843d0434f6fd9ad6141ce26cd89f01727da6ca1de8dc46d02b2fee8ebc5e0e36e7fd6014239ceb92a9e4f32c09e04d1e6bc99b0ddb45a84d38044c5b4d942967b5b6630e25a1b12cc1fddfea7d8a20d78fb16fcbea1f7bd83b96da75aa89a0555711232579769dc810d1e170c183deb1bef134b005559b5df1f9ecfabb5e60aed605d6cde54ca5fe0c0a0aa84b71ca3bf8f25e39e0f1fd264b6351ebcb696f320833931dee718c53b369698d0173ff1fc6d2fb8294147ad48a2faa843edf31d88d90bca78a5b667aed42edad032925432c7e6d18a0a6c4cc537abb6f99a340ccc02871a9c557a9a269474d95764f81a16208f65138fdd47d4293fe301e68125a3f5bc96268838d6fa5c5884c0c1c40ee586c2debf201ce29911e42c15ce7f277d9bc7e96b71707005e60f84dadb4ba610037bab90d2028dccbe30631a8845dda227d93ce54ac9c3762a0acb4d68de3625d0e64c8939f82eedad12f83b9913ca2798c5b587b6c7cf24b5bd57a4a9cc15954d6664e6c572bffa201a2942544750da9ff6817d229619856433b02613461e34e4d4df22233592f3ae50885e624b7f53db59c153e9344bd7493f18e907813ad82f44a467e74a363f2d27c523fef3a45c0f62d4736440d5d14572c96372837630708eae7bd2ad939ef43317406ccf3f9cca07f9a49e5875e51de7411de43dc6216ea90b9b654e37c3f2b2288ca8f34cf96f5caa0f3b29ceaebcfaa5a5d6f0ba97e20bec7c7455ee7333dc1cf00375e421a0d219be063eda19bc23058e9e02c0acfdd436a1cd28c0b78ec2457781bb306918ae60d9e4fef8b74fe60caaf944a6bd99fd4cd157064c3dbd1b5376b29489407a412dda4bd2db4d8f67219e80a8bd3453015584fcd0eadacb9553647529e5463c351e6ce46692eca5ac100561720b28ad207a3bb3e7e9417fa7c818e112dcc8a093db8e87eb2171d6ab7a2959003c93fbd61f9cef14acdc49cf03c2134c2b9835839c97872973f10b392077d47ac00f1df9d2d07b5ed7a9032faf887b26187f1ea3f426342eae7756730187db8dcfdcfc07b4032dfa1025b204f57ee6bbc01c6851e735ac310b036e84fbae1316369ee79097f05075cf5c0721885802026d254c37fc282741148f1be177e04125c0956f9bf96b10a7a3c151f3bd735c907b36b554dc29b5a2adc799bbc0db187887326f744c174a8fb9877a3ad55c554b4bc245c3198d5c48e572f859f572b521eb77231da2b1325f9992dd9556f0daea6700be845710fcb225b228cfb102c6ee337bcc2b44ede0d3a1cfaf1b2ee38635c2d99420935df9c63f865c56de111c64effb9bd177bac5c6343d90c0d3b2a37e52e1bbbbddec673bf23fa11ea38108d74c50007571344f39c128c45f2ba9961879173277e7b38ab1b348b292ee36dff54681ee4df914a69028438c92c9809ae2f4e6bd084d4be4fd77dc6dfbe1a1a96fa6c2f6ce00d7e7fbfc301d20d08e92d2f7f407f6b4c1abc31075245d6edf842567fcd2cd8e9b68cd72b94180d10359b851565fef5ef74ee9b3c86ead1259365a4feefa45e120001f71a2ec5e2d571306e44fe60041c5bc03a458570f05fe10588a4215048ad2e9271c7e22f30793d5324d35171c1c33d14d8f2eb3227e822d6d2a40894b1b9088fbd2f4afb3a4c9c786331bcee14871ba234676d50c74d82d334a2a906d50c9a48829a5b3abaa23ff82314bca70ed6079be384b370377c4b3e1f95fde196c85b4268ea1c677011bfecc99fc27860f925c20eeb4c03f503e79e014c5a4307208b34178d016ad28a7cc3d2078980979fb8d38ecb3944be214ee04f6df00ea667bbdb8ef94e91395f3ca8cabd7a98aaba43d63f4582c8e760bc352c8a77e66351cf2b0040e1091a54654d698cae0b60be8a7482780f9954460d961d2139fd1b7d0282be35eee07f6617c7135a2f2b7c7e8350d46d90a58d39ca3291b4dd08b0ee3b1ca355dad892217812b1c4cedc03439f6feb008f4e8f197b994ace5b43024b4fe04124d80c74fa3fe2f112e55751eb6616c903440b9455036dd9e6f9ee84ca7c25c1dd7bbd2225fba934d85a56f002d176ba184cebd727a90913593ff009e677f81baea320fa7d5140c261610fcfe87b5cb007809df63b7745147653aa5c01f9dc64754ca1863ad03b81b2cc0faef134fea498c6fe886aaca4ebaae9e43c8b86dfc65275511043fb93dbc151f700cc3053dcfc4efb46f428da3c2001dc48842d99dfb1b8018398f4d4edc79476e80e8f2937ae70b5c31afc479f9b2b767ac841a3140926ba64e5b35387c407af2bd0032dcdeea4a5c1571d6abd9a52885b8466aa1a4e9297b06f0cbd80a3e06ec97b00ddb5f4f47fb5e15926a3be0c459403934a4273fa695d04ae782bc34e92cfe9a58dfc3360ec5ce9ce97274a0ca1598bd265409ff81ec2d15588458387ef424833eee8aa2f47b04f712286642dfca9db40b4232a36049c6747364ef069fedbb84f591191d60157117ab2d61dc5cf4c2dce8122266c4380881cc6290f82ddf6d1dc97d377992d09d8b052f00e34d680724a6dbbc45c9444d36e23adca50afc2afed53fab6ae6a20dcb2459f3f8182b3fec5e27e6520a0c9603619964044dce9619508dc03edc9c92a0f86e32047998037db0f6483306788687f65ab1d5fa265615bc292afdfa9b4c5a5472aaa44de54822882e434bd15711d60cfeff5c2a23f4c3664fda182ed56418ac715272d9cb45b7ff41d2242b279a45d85bf2c9e7c349871a1f061111a96cec99dfa4f3695aec22ceb60d42a5466cd0fbce17d7d1eae3a32040cb340f9ca34e1193cad81998a435eb46f2d7e46c040a784a8ce2394923c0dead08484ce10743250b9a6f72727a9730c7bc4ae6e7a52e1ff8599b15077be26a836ef7e2ea751e684b0c675682b5dc7f4f9513900fb011d7a783dfa7cd3b6f49949d1cd140eca24f13e17a52915c2beaa3ffb16e373cc2d203aad6c232d0bed98cf144c7525d88b0b7cec29f371abcfa86986c4cf85833ea215cba8fb790e9305c7a5c93b64d9ebf821de7087df0982516940139a455b309d9e032a4dcef2da0e53b76067affa62727d10037be67fd61f36df5aba9fbb51800271a339421660f388c1d76a140a3139c6359aca6cf811c4878008ed26090d28f8ffa4e718d7b2868a8fcb736d633f3579eb70282b1b124447f2ac760a167ff6cce0f48dc3069ba306b24ed5f33261ddfa0f52b2a2c860d08a357dcd946582e12b39560f8edf65b7e436a3a7679566dca8f8c8c78d7568b78cc61478531ea64b6e1cef11a579d1f68da8766c0c178ce51e9f2cd6d385a00a37ba80805809ae61299e4ae394da79ca259c5452a66ba2cf28b179ff87dca9c830bd1baf3751992e65fb9af3d81f08cb0550daa25e20df1825a206b10becc92a2fcf0931227640ec5c109ba17d586f84327d16bfcfde18da94615be444312d3fc8661076b041b8a0c92029c95d2cbdeef1b6e8d0aab9a0380a89104d2e9051f3457c96603abe552fdae40a273296a2bf423f17c257b1641880044bead1984c54b72ad7e493c944dc245ffca47cbde572d15f76bb764d975bce618fc9376468d3565855b30d52a3c3d12e7498f8d608d426e2a11faaa5d418b8307ef16632462d119d7beeaf4c163c8fb9efb3c3b345e8b92c66c8ee1ba2fbbff78caa1cb8f94c40e90aa89e68133f1eb7bfcade7849d39482b0d50c7299edf563ba91b22a3b8694086cb40c427bbc4cc8b506912f080fdadbb72797d20268d46d9f5a243067f6869ed265cd9d089fa2fc60d11840db09fddae265865b034fe3269b7b7b1be178def57d88d196b813c81d1948a5ba30ede895412bc387dc3228869960a9d23ef7fbb9b68cdcc06342924a7ed1804c8d0f8836d106223f0de84892d65d968a1088085d816f3a16d9f00b5baeb2eb4affaf4d68a52af17a7f25ac8a44a33981b9a461adb139d0cc3e0a84beb7a2c742cf90ef35c9143ac4b51198b88b357f019bad1044da65840e2e82808155f46fd430c4a5cfa7c4eec3a276661d5b46a3c84794064b24ed0b12f094b736aeb5d65051ed17d9c912842340d5f47516ed10771e35b7b0743dfbb009ae26db2abea47111247950106731ab0c758463ca626a0e241a6f58c4f0062f510a8e065a26e743699e0c7d4d795035a81466c0cf486e19e53c7278c0c01ff71a15ec4fc8a00a544c988411d52e474be5e5a33dea86ca4c342dd13439f7deeafe1739945b6d190a6ab4adccb0ad207aa2ef964dedbcf71e80c0eff98853775664033247a09385d259710b288aab8529a54c13f3ed22057411f1e6fd64d0e265ed886bb66aad40592780ff80f92efe9db2e36e1a75fe510d0a703506053a2125c0d0b4dfa25d2ca74c204e2fce15bc3544b2dcccea6fb9efbbff7984688819716590e69b9158dc2079927cd72c4f61440038236880f460c64acd6c520e08a680a8469060882764a105c6e6586014bbaad36a99c71c1db9dc73b11c80d0ce9c8199f67437d9b2a6986d0a900cadbed1dd24eeb170f16be1e2ec606bd6b0572ba8d3282218c4b4c357ae907e41bd6bc88447a1bb389867101e2526de33dd088e7e9c9d94266a0f1f4dee65ca66bf2a573e4401918cca7c153c52ad6b9098358ad6b4d169cebc50675547e619dffbcc3b24e5c01b7f08d85c5509455c17073b25182c23f1da6dcd14cdc32258443cd92f34aaf58a21c1f2586dc91d4673f94448608f8d981ddaeec6a9945432445b67e3938eea238267500d63fe5502870144dd5f5754c9bf9cf413861896399dfc59dd5a5089b5c00e04f4e4318dd294f1eb09c86ecff112f148f6014e2bca387cc2af9bccdba933c08f79288f92de7220d2bbcacdb6385d3ed7bdf0263e2d9ca63f662fd3256768ee460cebf85817987f352b932410f43aa0fa1a920d8e51f85a945ef0f46487668d2fa59c281dfccc0891079c7b308668757491ea7bbe1856e75540da6311c5796de062e11041b6ed3b790891d7dbfc9ca635c0215e6e64d88be0f9e136788e0742b9e3a277c34eae7194116ead1826c0dd5a1292778903395f2db6e44cd642fceaf8fcb6993d23dca5d15f3230a7a69edfc026571edcbbc181ace743d6294c8a2a23d71be75d71f41f32e7cc45f30bb0215363ef95b3e9559b79f96c3ff347985d310cb1577f10ef14269b7c8be9ddf113b608aeb9cf4b6812ea82e3cfcf9a0cf2e43057495aba4b69ce3de1de7e2148091b9ef4a2aee302ea6f94d094ba9e6c0959ae5b265ef9abbee30ed607275c9888903ee78dbec0d61c40f181339367959c9b132e7973d5bd23b973a1d9e1b389df677ee1de30f3ea4ca6a63ba009e847ab047be35910c079fbaa09df02807691956f685fba08f6594acefae2ac8b0ccece6f6b13ca94440cba61ddb5f1fae6c5a11ab641a0afce6b9cc121a529d43cda1923321bca8259430163434eec65c33a58f773eb1bcd9662dfdc8f330011d5fbe6fab6977aee7d9afdf061ba4da62a4c14669310505e6610c19e98a3cfa0121ad4030f2f9708a11ebdf58de85be033ca4472e5e82565272ce2ca545ec76d68d1ef7e3a3a9731608e2ba9e5d201ebeedfbf6c3b49af1c01542c04ca9babbc58204cbb4a076fc4344031cbc3c21857dfbc0f0deea6b811f001fff145e118248ff24cfe89d2a7ab49fcc08d83163f1d2e17bcd33dd80aa976b3116ed27ef7cd4ab0450b74b6298fe0b1713d39f99b90bd3721724b29659232c80b300bf20b3a40b000f7f6d46a3c38c61d9f587b02e0ec5568157a82269890eac26589a82d4a24a10589238cc852041622ae0c2144105040fcf064c50713f420ab147901ca30a0f52e6669645d86017bc4d8238bae40f95956794a5b94faac02e8d85317fbc75ecbbd72bce50324893aaf4effc2d6abfaabf32ff45aedd4e3170409fd8a5b9ccb3f1feaea2d0ed3ae71fed5fe8a0f207574ce859d7778685a6bbf96d779fc0e2075789ee7757da4c8653fd3242c67b7c2228ee3388eb321f5e475c207280d98bd769e145ed635e923c6736632d0134127a5bc2374197431a78b3a59da6c9afacc9f08d493f583ba070d940111f521d445a03e428ea74e029aa75ee4a8812411759f5a03c9acaa7011d94b97d3861460de4067039d7052e9a2b5f1ba46bb262363e381619aa0f92c935d1b0f94d274e5479331363cb1428c95155e9cc92c47e6136bd27bf84823a46f1feaa7f10bc27dbb0f8fa10d76f8d4743e9df8d36bec41d7a29cc9c63f7266323046194517758a6600bdef05c1d9cc5db6d3accb219dfa87e20ee593fa5597b77a067ab5e5b7de74def7e2e2675474c3871a87680d9883fe830bfcfa3d5294e34645618e1c3860301accd22c2c070e1c34dc4e3d73f7d09bac44a946d523ed861d25f64c87392dec2861c6e117e470ea1c9da308030c7230c8c971cfed5469750fc23e722f36825d18f58a84c240c8d53760d4ee4e3790afc39a566bad385f875d5abd1e769559b801a39e723d7e457716e5db80514be928b0ead471780eaf396aa5386a8ea1ae51ea17e0f0fb1784383c070e6cc47de8176024f343cca3c9e9afe72e5e01733335ad81a46d4a95060a005116665e2883687a6b71fa19806fa22a2a8202e6f05c7b8ac333e8cd3481daa906da9ed33f93e6b322156812c382c89ff90d8bc42aa9e7666aa61cf12ff01f2b1388a77766e5b9c029c7bd38fc86d41fe6992787f75794e3fd19155de03de4e7083170ef213b8b4e8dc77f30a0449a16769496d253ba4a5b69a8be5269b2493ae1c0d7b36c0a27d36c329f4ca7198536f1e4df08e3db08e3e384f765a17c27d9e424a5c8a68a32a58a15a82b5aba16c5f3b27f2ce669a7ebb55315a89ca68f0050c24002808629baa8d37933cc428c291f7ecc228c27939b939bb431152627ba3e31958ba994d4a372461d1c36a08031c6ee88b2d462ef44a73a31e25c24e77da879d6801e6f1329acbe304383131dd4e0886206125841440e33e44024dd0614a014a38bd7bb9ccbc0eb928b947252524aa3383d69c2d459649371c9d8510d14b1b25aaaa79aaabfb498be595541fdf4ce6a29577e7a5799b16f88422d9f1e5b98880c58b10cc43ab59e55f9a49bf4924403148980c0ab2ba388f132c2940e9244ad31b6314f677e4ea9455e91567ece665ef3a9446850a82fbaca002840e9b1484a2245e694b72e41b83420d6394c4462e9d503e9cc99cd2fba08e46ab96cae8df464bd91b92cf4e91deb9ee72f97afd7eb265c7af2dcda3083ef755ed7755dad9ec76c62f32bbad6c6875a864754e681afd70b832f87c160a184490993d53b57abf36c77bb66a94fa0a3deb1d69f444599a2aa0265fb4bdce92b71c74ea07e1277ac9371ba6a12d34c5ece486569c18a3235653ee99a2d23bff408d69b64e9250985a60a19a7ab263192c9cb991cb3ac947896034aaf75ad3dcfa63f16baa853bdbe6c0073665480d2b3ecabb239739cbac5aec353730186293b064001e62273ca7ba00ca9944d75a7bc34cbfe42d53da9a4316c2f744ed5aeea5aec2fcd4d217bd2cacd39ef6db517aa2f5c0ef7cd66b6d572492bb31f08d6daf5547b99b5c9e8e8748dead4788200bdaeb54bcf3a977ed621f3edf4d3610276ffd08ff4a5a3a3c3a1a03b03b4f1d1ea0b149f7d3818b4b47c006d3e5a7df1c13601611fadbe44690204c11bef29c0802011574220424b0c4cc202181058365398e0e655c41438c50bb36f8828581a1c0f0bd5eb5261e1dd0e1f9f202cb68faa0b0e175415ef5211f16aedf0f1093ad351e57073cfb8a85cb0e1ae34b57ca86c36d6bb170ca22a88db95020c9c2a0499108428c3492106464318e276a59892cd1d3e3e412140515d29b280216481a2b2108a609a165cc97271805962038d5faa64cf1f29c39ef242e9c7ee2f5433721e7b8aaabfccd95596d6da55b2a538f564391348a7792eb8c1cc4b63c52f9d15dbcad415aaa5deb14d2079759b4052aa77a43f816a5285367d9959525113484e913281e452efc8097481de91aea5ea0ad5549627504daa44faa23799965a19447cb5c62f60d86149184b085186024fc270b20213605039e2042ea8d149809226837dd699a28b2a2a94a0c28a6f9fa520886ff72f24a83df5b498924a0ffaa781e40fb50c88e6f4a0e9433c7e94f9e9439af8e9b3db938ee9a35bad60cacb7cbacfa34e9650ef7947240648c2040221dfafdf0dc00be8797cfa200c116102fd93c17b3e8298f7b048f06204c99978cf3dd8200aa9f7de2790ac773cf73c9b8e325275946da5098a28cf4110c147aa3f68022d3d7d0eba17ddf33cefbaf8f485337e2ea3f48fe7517e464868206982db91e7480d940191e7d2e6b94483c873d9c48bbde7d24a0a29efb9f42691e7799ee7435dde7307a17f3ef73ccfbbe97de1f4a882133d519f6f133e7d21f7dce7c33e085df3fc0beddf300376eeb29f8ff937ce802d07bbe6b97794bd2c83d4cf957e7e41e8d0bc4ef2c9f52fc88769403ef70f2bbd0e29a0bcfe452f7e20d37c08fe236a9813a091c6459ac0ece333fd7bf9f7c19ac23aea7d61fcfe5edf57bfeffbbeaf7a7f41ea47a3af904661348a7bf874cdf3a0ae791e3d7f6581309c7d9e4642d75e9e5727c5068835cfe51764bebcc79ba17cfa7a619fd8e379d3a3feb9e7ed78cf6791ae794e43235df39c03163ccf41904c195881d2bf1e9ee751c7c3442414688607eadb8f5c378ad1795e3a8d3fb4203308f5ea15c7588b3fd1a1e24ecc72a3c0a9b8137f0416a8fc25cf87b2c9132b4592a9483a15c96ededbd4e424a5ca8ffd7e2aa6421bc223cb946ea72ade082c34c59de81477e24b893b710416aac49df62fbc7347ba17c6b903659b9852a2746d3afde85a741e5d8bbe410ca0f40dba16dd9b380ba06c4ac55c0da11384ae45afb66fee7a9f47a7e7d35a6aedabbee87cf98c13b4e99a56cb79d6b35fd18ddbcfa848d6f2823618f2e83ffa47e6d1c986479f52b2781a88667db6d3e99f1bcbdc207363888d90de407a1c973e0b63acddb0e1f1860d1c1cd94dcc0684b598a6f2f2e5d6b5abc62293953581ba4cef74a667be7d7a0a3489d61bd265d575ac59117cbb04423ff6d4296bb8ed73d2d9923e6fd894d6560b677a2f6edbb5bde9c457da2f92d2287bca09945bb3671885a447973429b1c79eee3aa9bb4fda72bedca91a2cd07eb47aa20b6f0830ad1640f0a3d5134ddcee7a4f5c89dda682e5c2e186e3e14ceb8917607687acfb84adeec08911a353a8eccd029c3b7c7c82a634f54ebc4e306141083c64b94efc7043b642d821aa77e275c2850b42a002e5b029b87642c98be3aeadb4e76316682cd1245e820b58c00abe1b7b05423cf52e68bfa2c985015227c032a5e4db67534c345106124ca0a089284f9d26d1495e004f99a8f25c7ea8948a7abac4d30bd22f39acf03449474fe25c291fba80f1dda0b43907a5676884d4809e759ec7344b6151167801e250a1516f8f419846f18b0ad03ffbf8040d49ffd156dc78305bb920b28fe5c25aef48afa18eac43d06b4f9643808f599861a513e6522e1da55246153491598205d40b61a62811c14213135e74d07282183c2e3e3cd900069e1dfd13bb507d77cf88741802862b4154a1e085889211b5e489ea0b18670c71b5831437f4045cae54d185c9b75759f7aca5b8a10bd0f3643a1b04054d9ecf5e137fb930c928ed61cb5318a4fc39694bf8a0a473a320d4a57720463abbe76c39e79c3da7cfe90dcaee4f2ca166932e7acb2c25a217084b5971ee54bff1a0b933dd939e86d838e8494f435e6ee3494f4362fef23904e63738a9e6209e611b5c4b8acd3c12c13c5f18a651b7c134eb32cfb517a6590cc21248e3302d022f87f9101b97e1240e0f7939cc6138e9e54a4491e806d328962f1c40896515074580d2266d30886d1cf4d7cb6d7cc8cb6d70d2537b128e73a7f190978338e90726a12a12bd3cc7a917965b00f1050f509418b1d98890e64e0853c035febc7c03a9c37a752e02cdf0060ec3af90c6daf4d9741b754cb72e9ce74fafd5a5945717e89fea32f7965f97be81d42028eab06e83de6ef0160fbde60ecc75012023209ed54f887fc545ba665bd7fed840dab56963cc9773ebdde1052600396f27e275e801e19c48fb8431d23ff6d27b3d9c9be37ca8c1ce6de7de0565c07cdf5eb06b52b65a9c91deb16e85ae00a52f8008300f490d3ac95be761e4a87f5a6edfc57131d34722bfbde9f35245a9534aa995174e73462b2f9a7efa02a22ceafcf4f8e35d8b37ce4867681484365b9d6d59ef235c5b79634fdbd9f77d9613590875d032bd0321cd8c9a9e772c3d799f5f9d1ac7b577a9c0fc0b675419f02dced287ffe75cec9febfd613ab5c4e9cd19e5a5ea2a6ba2617a22c54a16292a3158b44c079b5a5c68b7326479ebdd079c5f9cf177feaaded472ef57d4a25f918763d4913b976ec2776efbbb20f6764ebd5718ff06995970964d2dfd812900f3bc322d9e59ba86447e9e9271a8bda80204fc187bb896726a69c596b6beae91ec18e72b9bf017cfa8d833dd86536a2e117ba62fe00a98e7959fb2abd7d7066bbb6db7b53da5b5d6763845cd21a5bc5ccd21a5bc71a8ebe5fa02af31eaa83828eaa83904c01163962c7d1ca342d51815b07c3cc164d3665aa4e9bdbc97f7c96cf2bde9299bfa477ea9fa22c5c82a791333a5c8db9409155f5e750dea268c2fbd7be22b6f42f93613485ec59deab319084e2957d3ca94224494af3ea7f4cf37a126949c5013ca26b450b1582c76e5e6e6e6268b8d8d8d1fcddec6eb912354988288644e85a9462483c1a228a5544a4a29a7badb8f66efa57f8e1c4132fbe948ee4f3f72747ffad14c56e99f29fd23a5f40fc55464365e6fbcba6c82559756fa678e89a1eae39818ac7cbe6362d0f2770249acae9593b90d4e2ceca58ebdd3f3870b609e5abed678fb3cab3eafee152828299385b24cef54b709259aae75ad97ba86839518915050124a929185928cc49257524e7925b12419999585cc6536896649624932f20a4b665579d54ab0ce39a2a3ba69d9af57f76acdd79c734ecf9bde9c737a73ce39bdaf7ad736db646ad2e483dae8143a85ee10816c936da24f560a25c256a1497c752bc65ed92a7ba353daab4dccab4faf7b49295bced9724ad9dddddd7276777777cbd8b2adb6c0fa68b58596cfb6ca6a0b2fbf74fbfa04ebab5bf9f0a54b3ac9f44ef5324e138d94a74b5f3ddb2a2da99694ac83eaae8bca5d9696d47f6deb9e8da9dc380de9779c679b26506b4aef54b74dcf65f95abd35a5813827b953fdb6ac704ead2b5fa5534b4b967ed2b5ea36613775adcab047f02b7813724bdcd7b6af482e35e19c38202290ad9a3744208e69d2107fa673457ce5a87cf519f652ac55b75513a89d9a29724e52834e127554af51b52c0e05fa6dccf49583127baa83f004489beeb9fcc642706d5bef54bf3783b3ea9409b07a6e5ba32075c89f5eb22181daa9ad046aa6dea9de5005c8c0737cf528f1ab6d5247750c6800dbd651daa9a5f45233752ff54eeda67ed236aa57d3a86c3737b08934eb0d4c4a4e492f545fe80d7cbd5eafeff57ddff77d9ebfbc97f78a617c2b9fef15bd9db957f48a62754d0a951b8785f6eb57d4319f38873f9d4a9940f41677aad7190c046dfc47106076657d759de99f4ca53c9a38660818bebaab4cff74346aee5407dd28aa5a49718c3d360c63e194527deaabdbe07c2795945965b3549f120bcc34eaeaef6d2546285648b17a5cd19bf4dc4fc974adb6aeba56e9cd8718de4bd29bbcf1a1bef15748d174adfa17d233d5d6b54ab1e88d5e5132348b96b1e150a14599a68f5a9871a58519657a7cd13501c57cca8934bf6002cdf77cfc420a8da527fae26c3fccbbeeebbe56abd57279e7ddb35daef64f628fb395ce9ecd796ec4bd37b1ad7446a1281485e2e7f103725fcef09be157e445111760d74959d5dcb1377bab3a6801ac3e030ef7b37cad342a88afde4d7291f039afd75bcb7d79755903c5bcfa8d05dbc7db0a5faae3f8785be1eadb690259315752be5a325f2b9598bfc2aeaf54ef54f702f5258b9828eaa5c967ea657e0e70589606ba73a752cda63edb28eae5fbb3555840bf1328d6f9a212f39e3bd53348ab546fd926d015d33bd5afbe3a88f325f3d5613883b892f93cfbdc9af258bd53bf10a8ed062b3112b3c1f9beaabd85f6d63bd5ad1563ab42fb18c400e613fee5b99ff3b8afa89dfb82ccaf9a1dda1b8f1640daa44da7f9f7f2ce82fa1875f42be62195987fa12d63b3427bc68ab1375bd5b5ea564cefd82b6babff200168abbaa6af6f2c39a5740e41c6c3370b3076ed5ed7d2b5a4f27a4b0dfaedfcbbe3021bd146a03bb9fa428096dea823eac818fc6ca7edd52f0eeadac51b746d363ee279c773cf798dd75e2c630f752e6c8be707a49ba76bd381d40077542426ddf1a34a041f0f8678f48ff4913fa0acb5777e7de7d70b1677fad50114f0c7ebdbe3108fa8d33db830e686314fc6a4a0c5995aabe5b4c08a3627bd093b84270073fcc20030d7be7d74bc292b2d6edfcea32335b0de9e81d4e07a7bc785d4bbbcbfa39e0ce3cb28d4722a35e03cba95409e779e5f1f3d4a1bd2f305efe15a8767ae7dfffcaf479eb2491df18500af772e1bcaa8a3e55c38a38e96d726508d3b2def1c0e70bef57d2bfb3c0d2011eb9cbbb008d63f90efc213f8c10268f111ff96cbf65180378a6bd4fcf591f1b74249fb67864790d877f951fff5a3fb461cbc0bcbd823bd7ab6014aff81d91fcdfefa50f7c51183d0b596f2ebf1430d30c72f5353d6c22640e9f14615c68a2f1fc358e1f439288c15557e8b33dfdefdb26f4dda7b0518adae987ec78e59311018672fa5d36ffc830550bac43d9359db453d927e2389260a1d4172bffa917deab262a3b866cd129d071efcf0008421d3a7d65ccb493e31e2cd09caa61dc01ca54098d38dccf06c5625ce4a45b4c200c45abd1e77be7a3b85c04ba7595b03208197deb269068273025ca43c7e4059ab989506a3ccce059ac5121668c0b038cf7e45d65a6e621135a3ea88453ecd33e4370176d04b116890accdfc827da5cb2e12a9c0441cc403d89e7dbead5b9ca50c2f2522bdfaed7b6733db75c5b79fba2efe783a7b767ef20ce0278e342c1224d7ac59935b4a32a8846a9228844214b23ebd954421b914855288422f15a2106c4914029b49afd02c4421994f1c9fde248842367c7a3b8942377c7ab7108566ed42bf1085683ebd6188423951a8045128874fef18a210063ebd6588421e85429fded31b4a1402000d5148a76b681ba290007c7adf10856a2eb4e3138710056c9bfcf8f1e3c78f1fe90c140aa58146a135501be80d540ac581e64075a053e80e94074a8556a13d5013501f287da23f50205e88423b4e9dc210856a4e9d3e89420270eab404512803a74e6388420170ea548628a4e3d429753a4314c24e9d428942a153a7344421778a8153a73544a11c4e9dda10852e70eaf4862894e3d4a994284473ea14872884c3a9d31ca290054e9dea1085664e9d4e8942379c3add210ad970ea94872884e3d4299528248b42374e9df61085624e9d9a200ad93875ea4314029d3ab51285604e9d3e45a19753a73f5020a2509501f85077d3042221c8a7e66014504af94ca1a418505281310a0bcd0f209458b187fa4ed84cb1877a2dec2502085b85d8433d83b053883dd40310f652eca1ae13b692d8431d0061a3107ba8e3b093c41eea61d8b6d843dd43b926f650c720946a620ff51ca14c137bd0c41eea39a15c23f650a785528dd8431d4728d3883dd42d08e599d8437d164a34620ff51ba134137ba8db08e519b1873a4e28cb84d28cd843fd269465c41eeab15092117ba8db84322bf68c21c5883dd45fa10c23f690092518b1e78bd8b382d8439d840924abc41dea41413e1dce3e3517ce35ac388b71620d5000660a45c9884033264f6b92a7378da74eb328d4043280d3a00278be3a3c833e9e6704f0ec3d0ee55006c03eb3594c524ae21255fe7a6ba88babd572b95c2e57abe53ae19595b68c61bf22239c3fb22edf7e41e85b9c9f4ad7b95c9dcbe5ea18f0ca40d4e0404be492e47e3e42343d9c0757cbe56ab940f0ca1648c2478e26170cd12367085a180ba266533942dc786263eaaf775f0f59169ed77d3e6eac3ecffbe82b13814286c5ec0439b8701efd3eb8798bf391a8bfde759eebf3718df8eb5dacaf0c82a7bf5ed7755ee785af8cb4a453e15b1efd3ec0f116e7136e0de0cedc64f193c2df357fbdfbc0625a8feb48eedb2b24aefea8f3d5131493139dc041217a2ac1e22273851484e0e1af17090119589861c45fbffed73bdb5f7cc42866d96c7f147b97cf79e4bdcb8dfc75230ebe630fe747f65b7da4e547f647f8eb46181871f032f670597aa0c4c3b9cdad36801252ef7d4561cad73ede92a079cebb59ce07d42dced6baf53af3516799c547f589895821de53af148710056ce1a3898fa87761abe58373225688f79ce35c82d24b2c8da35472f554220999f7f9784b72c463fdfd9bcd0a08eb24c7712ec2e7e3faece2b75c4261693987f5451d8e1d4f11875ba12c9ce1843e77acdf9434f9047cbca1f0a576bbaeeb6287a56c719dc7715dc7751dd7f28eebba966389850bc1ae9b5c984df8ae73a18733f5f1397739bf534a522744fd75e999f09c7b58cb5f9c3bff42236e0d9aefe67738949c4b89e3d2a51699a516971cae6fbd0333c04c43f0d7e9fd96e7391766f0672721e5ceef0764fe27afcb2b5203e9576ae98ce667f99f27dbbb98b75af8f5c2f9e532cf362ec337f8687e0c13b96e838fbc935eacfabce5b47f3ce7fce657e72d7bf62b8fe0fafc8054fa1c7745eae05c4275e0bdd7c6f3cb6f3cc7fc06b4b1f1eb3986419bfcc247f35b3714ae7cf7f77ec7ddebd7459840d4af77eeba2fbf3ed4ae90c9e7e31141fd5a997c6c351e1180e1751816a9e3ba2bcc2178977daef32c9b700851c02e4832f9ec0881c42235a0f471841005bcf868fef55c7bcea5e38448de35cee927c4fb7b711ec14b2cde791e1872de796ef9cbb3e72f9c63d5731f3e9a4fc4e5d73bcf5e90eb1e6ee1a3f92e3a5d2e9750d5155e20dd5f2cb1481d1cb6b0c6b15a63c35d2303b7a609186acc5003c6bd71431c57c618581964bc388e0c355f3771068b335731b9742605f68c1594f3ab468a2d5dc0c97158be333c80679ccc66191c338ce7e68d185c48a2464b145227304a3303992b554130916405680801a2c185005868bc004303071b14a0b05459c9a0430d6288b82d6158a1028b8934553c2fc030938605ae7b995c199144082764c66892438521aee0a0c68a1da0bc2e8e78ce8c9400cc587971f77a5c9899a13333e57a5b9c21c6cc8c0a37ada199d7d448bd8d10618cc1450c5b9eacbce070b5648a327e5841152a809286b70538a9789a5cad9cf3c012347bccf71958763657e9eca8ceb56f9f20355cd474f95693c50ad58d27d2404101783f5aa981aa614c6c61492285861933847144098838bf13680059d0a050c39a282bc420e23c2dce70c175060dcf6940c4712ed7192b3c57060b5e10c89521c3739c55193b3cc7711c87735a371fadd4ac6085b869c6f8a2ab7376e5388ebb5f40fcd12a0d149f4170da34493cc7713fa64813c477908234397cef484f03e5ca403adb828f566992709145e8583459ecf0b168ac78eb39d6a3b52f1488d1c92274d0487118f4d00811460fcfa151b24277eb05c04c2767e645705987e3d63cc7713a2dce721c1a9c1ad91a633cc7711ca766b6c3c773663f866c7cb45ac38a7aeb6e3c589db3abb5d64e49f2058b14f4804616915d81091138380103941244d6bbe170df32bdb5d6f248826d19286f6d1915de5acb597b67afe105071797356258c308cfca0c2f30c89e8feca3d51a3ba0b0f3128856cbddc63b977a01883f9e2fe83ce37ccb2996d2855b58461a856831f6487a84113170a13b148c1dffc3f9701c758ea3393880d9e3e105bcce398f268ef396e7e960d79ae3b8c9f168aaad4babcfc3611a10ce5b8f65147bc5827a674a29e76a5d6b39dcba9e6d39f36efd4cf308ee2c9a3ff565fca15d9b3ed4f47eeb877aa8d3e8a8c0285b34304706ce8ab8f75eae032940eea3151a353aa002eb472b3467cc64608ece8f2170e6e0472b345c7cae514d2ea6e68c53aff4e44a1754a8000b8c304410359914a40005518011c20b2f8b9855266bccc7cf070f2c1cc7711cc7711ce77172184c02ead0c63c8800b38f8f951a6bd420230d0f1a3ce025aa4c933368ac200d29831bd168b618c30633bcacb9e2e5450d5959cc288304521e163c88902bdc64707a10fa6703313f6f2c3dddc049fde393e8164394f73cdfdbbaf77aad10c93c72349f88f5ea469ccd36fef21b1e013de6b030e338cc6fbc75e3b243723b0a2101671442327bcfafc7f843d30b5bfe85f9f3cef390dc6f39121a90bf32cf935dc0c84d78d4326a6112f005ba3647e8dafcfcbae730cff176a4731b0e864752caefcaa3f9327785dd17def891ef939ffcc2eb36b011f7378e8391ccbfc1f94a978544a4df38fd84f8f32053ff081223ee3f23ef8806e46598084672dfc345be45c2f58b7392cc5bf7b63c6c345fe6432df30f5fc0e8c848d7261223ee8d48b8c08747f8fc7a2bc71b4dbaff8d779f77c57b613c2b9e76e3d7f2a1f6aa3e7e1e10ff1bdc7d1f7c5ecc06e71636e2fe7a876940fc41f7bf7e7d68bec2e8b03077473877e1a319147ba6776dc7f556f7bd3ccf737feb3d0fe7ebf7267deb6bf9f516ae759e1bf9b43c3c5343cce73881a21a5f7efa055a98a76b53e61dbd6e14634f2df64c372a41e92f965ddce974cda3671dda75afea692ddce3be9154c17b609eebe20a7e3681dd3f48e6db60346899aac2028daa336b24c13545552eb0aa2c3146105c28d9d249a807949859e26a0b2eca10c3aba2cc99d808b02003872725b8620560c834950cacaf69a2184f6aa230d3a50b950ade97325216c431306401624d1161aeccac510aa28a159ce082021a50408697823258d0785ed8a20589244b5dc840a71a4b05165f541047c0e06407358c20aa6a9a5080228b93932459338dac678089a9012f9544b5efbd5586892f953699a66565b31cef404d78bd1bcf483171bef8e278a7f85ac9a0e26b4754af920d292cf1c40b1132404111a1c08a3448bc7084182c8c4154318f246096491b95cd32baa813f439e8e38db15aaeabd25ba3d53bba267da8d7e5a7cfcef8b13f5d67d2e97772614da76b636075a15cccdec24a8c33bd84158d4141c46b4b573ac5b88921c5c7cf07a57aab31b2701d6c99a14e589bf7773e5a8dd1c2df8f56632cf9ace3d358ba221dc09612927e1dd24094280c28325ba687f1d3751a881251a2d90112bd134615614c7da660934e7200bc628024511851df221cf1413d63539c80e167c5b420744a8fe338efbc8b9338bf32348173d94111e010cee565e25c89885ef72cc544a8703804d263d40f7574402472a16bef3a14417a521325a930fd0422251c1051ef66c8248926d1741a9a401b329dfaf419328520ba125127bd5904427c407469a462b17f34811ccdaf0d88df1eb9c4aacf3acec383fe89433cba26c1c8f2361fadc0e0e1c900f1d47370119da7944a81dd1938279dcd99cd86c82ce1e6d02c8deba97b4eac1c1e923f69194fa9bb7c1e1d5c01738c1a029ac9c018e3a9e778a47e3bb862c31dbde393e3a31518538031f5d9e72f5517753a1ce24e97b46bb1888e1ff503c9c942c655119db741aad32349df9de862ff50db6e8b2875e9923a6d4995a694575abeb0f1449dea51a89359d46cb9c2c3a59b28c3c9f4320409a84c21082928221af27021ea2a0755907022eaec17604011751c03c0a0e2055177bdaa22c21075774852941a226b0b51c59786b4213549670c51c5e0dc695722aa4f20bd33ea896908221aea8c21f20ee38a2ba8f79c9352cf327abb71575b2b8ef68a89b453c14261a88c525b1d8a9a9ace5d7ee6fd39ef6015e3ebf2cee296cbf0483a8723464dcee7ac91cc57afe1733e34efad606d650c6efc043dc37e389f369edbc6a773a0cf5a87daa704bf1ef327f6bc803bfe02fd93770c91b0811dfd43bb7198734ebbc1416a7fe33798a76b2f8ffd548fbd5e1c8d1ce71983a7d2de9f618c3df6887c1b0f1666fa2fecddcfc3d4dab6de9dc7ce3a91c63e61c0ea394655dae1dcb64a397fa877aab784c280d2174004d8ad6afd7a77afb597e3a8adde18d23dacf7bc83d9768ec3fd0591eeb9ec6688a43a171ec990733063f0d563bcf10130d85787b540e54699e55e4cfb9c48f5d77f38041a401a90d7577f7dc5d1955e86f9ca8cf4b293333c9a8fd4b5163eea5a5bb738de9aa0fe28a97fe2d7393e744620185ae181b726356c38eba0e7592c832289a917808802947dbc3575e1a585a8cf5e074e80b08fb716a87c075480af8fb7a6aacfde6c9f1796fcf7f1e6821a2a6410c6890c0040434d132ecc50620a2c35aa883da5808717942841165170684da1a6ebe8743979345d1a9504c04a949c2bd3c01c1938ebee6e5501d28f372730ec6881b604673230e7e6c4493bd804ce9ce9738daa2ab93909e3a561461330017cbcb5607bfbf1e68407973ebaa0ae35e83b1a281201a15203ea57ea68ac88b373497f7d86b30ac8742113e7cc89afd4d123880be9c71e918644a27398466f4da6fefa0e0edbeb9c87b39cae35d6d3bf97e21d415d98e30a9ca0f9a3e6e1d44d4f7ec1a5caf378f1051727cae3058f17d10b2962fe683e95c075c1c5930bae883c1c63d7e2517fe4220daa3fea222e0380ca1bc9f9e83c9cc08cb5f80ee43c9122d40b0f27f008b6bdc41da05ebae062e97144f1d1bbb82af3520887a930f910758e238a8f5f101c517cec7c50e9f019ac3f9a555e4012103d95c0c5c8e1e8d2b641ec69ef9f8869b82da59dabe0441ed247bf9ce7e8def42e7cbad3ef8cfd3f394af11debc738eb5ac4395df3e1235e9ff47a96741ecefb88f423fbd7eaa3cb969187a76bfd45d7acf37690c7e551a87abbcf56d77c78bae638b879392c8b1e182e458900da09883e14bddbe2dbb51db1273a0d75c25ad7a2479b32a294cd56af0dccf4fd48fef559ce5bcfc97197bd75992cf6f88d42b7e7ba751a7b38faf5eb118d52879c509a9c79ea9304679e3ea594e326c7711cad87cc3b59fff0f064ee3c6600a5941a0cb55d72b90a4ed4f9bc4f630fc599f38933527321ed045877854fd5e32724c69e8cf4d66d752b055a9cb7d5661ddf3ec18ca3d4113dfa740dc9fd39a54fe9d3d4c5aeb57aec5ab9aeeb3a9ce90c7375d9c53abbd55c8b9b97b6b4f8e64bb36bceee2cbfc39966ea72ee83a427728da64bdaa5eee6b811638c476407e1e0a3d29453852eeae47a4b125790faf06903c51ad540328adca97ea740aa599d524bd7aa67a9e5abcb212290085387082499e60df1477a7b96487c953e7c75194ea958ab2ec2049a55734a46911acc25e23c1367569c5171c629bb481b66d4a44d21f81bcfabaed519e5f3d567464d2e536a56cda99935b166d48c9a515247f5a12e03b6d79b65c2881b932a372635dc9838b931497263baba319599d289009411ecacecc2d80fe7f9a8853ecfb12e167a7fe35e78e3b1507e872384282011997b5dec86cf9cc39c2c16e6fb31998332e73c76c3bbf664e10d8f9f0d1fea1beeb9ccfbeb11734e880d079d730fc73d1c0cc4068eb18773107b3823bde71cce48cfb9051e3f213207b3e737700851401b4ef33ce61c6e1b98e6612032075de620087a3e929f917ccebb1218f047f2357044be4ce6318f11b1f1ee081704c4482412f9de8d679a6f705672f2d687e62ccc318f6e4198632d8f4a0852f0272248e409344fc2819f3a7fca5d17731e2980d5e3c758ccfd636ee347f26940627e3d468fc83f927f63c3654efb07c76532a558cc6d8431f6c46c5efda0cf3c1666f0632e0bb39197e1e0e07c3fe6363c1b36720912f41bfe796c201c1ef3d83f99be4ce638c2d83b321b0733d2e7a3f937fcf31978c3bb2f247234ff064622ffc66de4df388edf787713c6bcebfa137223dfb78979e32c3fdf077d7e406cb80cdb088de49a9b0cba2be637617ffc70301019beb1c72616bb1ec3443a97198c3848e7f23f172d463d878920912f5d22919f91702efd88c348e413d1c011f9d21d88277969c3e1491cac59b3660d0efc245dd61d0fd27b7e314e3a25a5a415c70f73ce6a6d38d55a2d775b927563b245cc3575d1c30f80f1b6e4f6f1c6e4e38dc99797dec70ebaf809093be79102689d731cefa28c018cb725595efaf7c160d15b618e390ce7f5bab9b979c5fc3a4e173fd80766a47735f8ba9d7f1dcc5d18f60271fc7bc1ba178e7f4e836121dd87f3cb3fa7e160211ded8585c40ef4ce3bd015dee01ca3b725553edfbf2d91f29c7b3eeb9f0fa4cb5b6146fa962bcb3cbbfcc65b612602f35698fd47f80fcd2c0d988fe69710f3dcae6ce3d761a151d2e3f88dc72f48d21391def950bb707042229dcbf0b75cf806765fdeb930ecc6a30391790b67cf38dec1705c388ff0c281bd70064980e1fcf2ce6938309c8dbccbbbd539ed85817c8ef42e6f1f9af11322a305b9c926fc4deb2686fd0bbb20d385802192f944a27b1ea390c7755e482b0108cc5bfe725a09406038c61e17900fb770c82309b0e51ec6168f26a0a519690b687d7af81c26e25f0f1c00a5c7db922929252622f1fd5af68b7a25989106c4957e8642da670b99dd0c7d7ed33ba401a9b489814ca74e843a384322d36fd7249d5e6322b22bd248e3683e41ebec4aa95f2d691c55b7d96c47b51b09065f82d27de9574b7d4a29964e4c29670769803dab4f5aa5f40ed2121fc9af38b6cb49bfdb6577fcdb1da0016f477d5d076bc0882ffdac37e21e49ec8375d393e1fc0f89fd23f2f648bc97defe8a4247a4ed8d3878e936db4bd0f6b2a7e86e2a34c9f8735d02797883de91b19f520317cc73ece519c747cfd8f33c001b2c2477a6832e10169bbd70f8873f07e1209f20a96376019b53c1f6f1b634f539aef9e9401f6f4b554690784001f3fd7b5b829ad58c20f54f90d46083211e3f3c0061489128247f560f426bf87cd464fbeb366c9d20f55788b75146004145ca09339cd0c2094b4e48f257f6d904314ca88ac2841398908409574cb0f2d74d7092f2768a242d39fccd4950fe2631d9f0760461444025822a229062a34290c4d2db336560f90bf5b7a9cc5b5b994b058229d70c922d7fa9de05e62d0f486c401243eb4c095994c042aceabb223744a86c80081b6248c09201232c780203582e30e502316f2dc0c24f54d19722aad8e722a9a22002f09907177fa37ce611e633d1cdc667221b56069ffff6591840f5dd99c721019fdf36f4c4df25868ee080ea5d4326b8f93ca4c39093a115866c7fc5fcdd02451496b75b8c50dad244698b6d0cdbdb5ec365a67a71fb9b049824a6504a020a2def4a0209aaacbf5c6eb72e50ba44f156ca0a1253282101c3df326fa5cebc65428dbf4c6fadbc8b89dbbb8e88e1ef0a9f958a90e243932a346fc17c56cac1f6774e6591c0cc0d4b6e68b8a07a02a36403152dc464251b98fccde2b3520d52bc3e2b451143298aed6fedb3120db7027c56a20188bf5cd8a2a23e2b41898222ca9b00e5e4af1467de8211f32e154cf96c42159b93cf494e6c2c807185d4e72416c07cf1398985156c6130d1e2fb9cc4044c12932933514c9220f33989c9117fc1f89cc4f4f4d7634e4a01eae773d29218494b4d494ab2fe52295c457c79170e7fa3a0f9e2ad9226b9e47392921592ac59c3c95b57961a2849ae707c4e4ab245cdd5dba424507a3e272569c186b749b69b126f14d7ac31f343928d87b9e69664a321c926c308b2d60ce0f308b2d21841561439fcf0d60a2246008689bf3e1cf1168b1cfe6624314c54f119a9ca7682cf482a30410f36bcbd028c0afe2281a1024c97b8c467243048a471cdf822e733521563aa60a28aa82ab07cf98c54c50f16542941c5142a96be78620aa8299aa8cc58f019890acc5f242a2d07f88c442504033e236da1b2bd8bb6465bb95470e55d730820fe7a44d2e18619fe7a46d2e1899832efc246114987253ad86cce9856f50a9bcf483954f13723d960c320cba96a88e12f52141bcf67241ab25a9f916888fa7b45f5161bc5356bd400717d46626afa8c2e14d312b3b73887a0c95fef96fcf56e7e46318b330754f0d785cefcf506b382bfde55b7a5a0002e2b24f923ebdcd783dba2a9070744977befe52ec75d09bc32920e6238207ae08060f2d7c7f8410a20987e20e28712acc1fd1005f77405f7b4c45f3741135c0f48fcf528ae871c84c8427b50a28723b827353820b814195dee0b62f316e71164d145abd56ab55a338c574e5a5aa23d2431cd28d1fa5e3989c9164546325b0af40b127b8b73120b597fdd4c948e22eb8aaae56adb2b2b49b13518acb9c61a3e221666f48858dcf0d7c38c5185182c6cf8d2c4892f948c50411557fc6ddd56ebb6eebdb7558157564202cd5f6fa24a17287e885d98fcf5aee5e2e095959250f3b74ba31aa8748b968d2335cb98a21908008002f314002030180e0745028138301cc9a2263f14800b8bb64a68549689b32088410819620c3180104000008800d00cd0500114e61442216ba501418aa5844d9848799d54471c585f1e4ea47cf91e4c130af3ce304c1e0d5dd2b26d0bd839a939b0484a83bde184254cceacd5610f4d78ccc48d188866e344431682779b7b044497351e7b97c948b9f124060c184fbac88db19393569cc2147793e17e7e246e760dab134e7592f5bb4719e5d6b23927c99cee590c8960346e8ea2ac172221f3af17045ce418b09d4f948bb32c398544078867e53cf39f72c4fb6ef62558c052f01d2392efb8b13953f9628873e3d3d470ff69cfa699f075807e8f8badeba1dd279e5c4222ec47ea9bc53e0ecb6d3c3c3883b552614fd4542f329e6d6444fc589919b2f4695a92d17e92135de5db5dbcd174b0369ff28f99ff16d09771d97c7ae4e83158f1d05e86e8a06833bfa7109b2ba50ef0b62d5d385e15a31293af05ddf16ed8fa14fe9d96480a27be65fd74ac295c175fd53bd821d43571462ba5db9db22cbce5701adecde661d74f00bb846b4ec1c88b9d94c21ef8eb55955fa5690a2cc97dbaf526dd157684a0e122bcbaa95f0b3e53f2f6e9ba793dc49db8b5e544b0d00079e58c41b97deb70f13b520b24bf8bd5b220acec4fa8f06317f99959566f52707f7c0a80685be9d5edbba4388803902d77e1a5d51b7061ef52bfb1a3ec981f35c7086d75440a5f8d4bc7c80b3984639cf4c4c37f5b2f83dde0aff431331959552b42e3f7c065c75898ad907398f402cd9675d8f269f784e6a05555e7516ae2ccc83bfb01711f2d8ae0860c7a84ea9faaa9f5bddc2bfd4eb3542bafadd7979e384e7b151dd782c80c4945e60ff415b620bc90150a212378e9e6ba3afc1215bee7fad05f0f5cfd43e941fe4738da3c02109134d52533ee00890c2201bdf17033f48feb701d595422646778b2f99667c108bbfd21b926104738108e39ce5d2757dbda6b5a94f8380cd11b01db7e2fddd7fd3cb205625dde8bc1bd7372adfb33318f1f555109736545848387519a2a7905b124544b0afe9c030517ca0ca6da5e591856eb371134e0baeab35c2aff5a3b52e7e60042bcfb4dc918837d410c508c0830eee1d5b63cb18880517ca245a77436b752bca12d8ea8751d8cf332766ec28037c76767b12764ccb474c727d3811417a3a0f607504f46e39e5eb7f4a4afa077aefdc916170ac111600e7336f59793477a7391041e02fd9a725df23f34db534ae1216c01ee848fae032ac713168a44a7e1f3159e3717b2b2c5918f464aca89c46f5e40998e13cd5d63a802773de047f1ffc21c22dcfc3400cc1099b6e76fe86748a5406fa70a8d6e08825df2d23b202023de120beb788ff03c8c90dedfd9519643c847c71ca7ee0022bb42c8431d253d454b1d9197f536a46fb82e0121fb938101246bcc1c7a836ee6209fdf88f4f32bf11e7b611af6fed7a0dca71be2351bfdf627a0a07b7d15e509888b7529c40eb138b3797bc0b31a1af67e64146076ce9e412b85847b6bcf731593ed8da1c5651f9f005b3c51a96684a41965dd9077ff899399fe3dcd9382fdbaa22ab5f2fe622870ee93e11daf332ad3351d708de47653d2b5740319a65c3085e18be29b95b813734009fd2551d561d7856ea94b439464802c7102b547c82f32a3477d334381885c38ee89818ac3b1bb895571a02a51671ba4fcd046163e8366dd8695728100b697f2461a65c1220ee7172bd3a34615e59eb3b80dd7f6ddf6ea2e3aa1427b27c057594dca2aaf0d448b2805855aa7d2f0b6b268990361c835b58f9ab89b35347513184f121d755eee5de0b4a0bdc146f818507171785e8f061df18e974264317746d936a681a2e7d87dd02804204ad6819537d08db1c73fe4b8793698abeb098a946cb7f8a2ba4be3152f62b1e69ec1ff922b8f1d18cf54ae97fcb1ffd0fb14b91d106aaa842396b993ceb3811b85a84cff4f3dee424fd0470d7d5df9b4f56e0152859a5e7cc3dfc3ac0f49f094a6e007244f56ee117c207fe62391d42afb15d1c08a18a16a4aa05ac3972f6729e64d6954bcd00d224fa554e358fb2c7fbcdc2fd33e6608af6e032c410ccd1e5e0e634e275b5e7d56ed3cf30144948d908222283c81f48111b4588b2188b768f2dfed409aeb1e9b8391460bcc8f3d774afabbbb8be900f49a2c4063e88239107d0b750356a0e60bfca23abe5b08cee0c22600209b9700974400ea80ffdc0c8de29f1620c50a4652c031be64d1a85ec520aa3cf965b440022dee5d3ceb62ff430349fba1db7aee011aff3092697715fc880720904f09c814647a956fcf75caded8f886bd215680802d938fd2df63cbf173cfa3c03c08a86ab3973b8f1bb4eb2161a0e44504857eb25fd3e2f4d08540b4a5fa2914894895325d7989188dcfd84e24512e2d12cac3bd591ab8c923ede427df378f928450b47f515152603d584ed8d7a28542fb68653dff74cb311e33b7554e78ce70ca8c0c29f149b7be5f31581a33be99787ce26f5dd5312934f73d207098c9deb351ba58da086fff22124fa18d8805d4cd066a17e6f0e7f173194a4d9c2b137ad6628034ab7b7892d284205315093796176be46910bfbb7c0e600c6921b8eb708b5fdca58d9aa17934c6b02d84f09b407b119a72e7963e3c095324e599c4059bcb3f1592e0461c502b0439dcb77fe8b38113bdfbb7af8185198c87a67f4d50f91d7a3dab14391f691b68600f83a76d43c3b50a8b9863d404b35d542fe7ff974694d45acc598586be705005c09baeb02ba3b93851ab00cc3ba1630188490f56444aece69bcef65502de35bdf9f85f7f28dbc0c44f37bb421cc0c6d6a3fc6ed23b3f066e0ea02e9d4cd186d8dedd5b82de890e209f1bb130df781030869ccdce9cc57d3b8a0f255b17789fde5ffb51a38402808198c1866abda1292ea15459ee2456c09c8349b8dc2cc7e6be81ebd25c91734079ea718a5132efe112559658e6ece500ac191fe0113bb7cf751b7300b50bb377dd5ee8ce2b949ce30d784db09d2a637ccd39bab43a3d5fee891737b1afee7330decf86f30600473dbb27d816c80b0acae2c62dad1b9b4c97bb0329e41d54fed18496363801028c7ff0a6a06d82ca8cac69606f5768e12008e52e03009bd0cf4f42304b2498dfc146d83654a13ce29ee674aaecbd055639b473f47bc57ffd8da0bdc4d2e0ca23a7b441a3f483f6835b00f882097ae17c645ee7449af081079e8f2e1dee75df0f030c856a844801c0fd13b51a11f6d7f20265f614ba178d9097e545d7aeca44552777a9e803695dcad25a6ce19d73f29a8fdbe2b228019f01db3f2f7f99743ab972ea99c60344a2cb8b9a406e3951167573802faaf7f8e56b35d191cd01a7721b8d128d3ce451fa07f9d37081183713c5ed86c4160b40969f7005b1d35367d58d1f4a19527f873a9fb5e600f4dc9184450d54b6ef429f5d343fff54c4e7f052ef1180eb75aef3fc22acfa438066f5e6e293ccb50bfad2248d21509eff743838b3b0b8afab40d3afd6ffc54783d12bd20c3db80c289b2b7ebc2825ae5391d15ddba864c61e8d74684579d40aefaa6667e06a494357d423dd0a0f51ebb1b3799b53a22ae69622c27fdc9f7b05680ec3fc9652cdd6e31a061ed8c4bc9e498b684bff8f3384a467c0ff341c8dd57e10248ec86c74d5f1d7f4b9416084de93b4ec0bdc33b6820565764fda2d82e7c96ab021c377ea9a4b54dd80ca5c5d5fde867919061b4f5ed0da3bcbe937f16f0174b88f43d14b72024142029a48f329ae096f88593049436178f87345d2d012076666a53246ef85cde758ccb1b1925d30f9cb24ac7bafade6cee5a55486af2414d90af86ae2d5e115df50e74b153ef252005feaf3521c688bda1590aadf6208af4c79f958763ee0401cab556ab52523c1f6022ff8ee91f8926fb59da3ceec0bec31f678da199ee858e92f71b2fdfb1e2fc31c7a1d0b04188e575e7c773fa7b2a7a14395aad40607fdc8d8ce6c331108a3057ae30ba80ff4ec78c1d85c3ba80f0b9d6a1f45455b9e2913664cfd25a8131468f32e00206442b42b629c64ee46ebea4d7f6abe844a3db2a69c5a815920be12e5834adbb2d0336ce8ff8dff2278258246d2123505f644e00ceaef190479fe16924ca62a18e94f63b03225fbf83d3b2160943f9df30d280faa2ce0101bd6b3b0a060f82f92d54c2577a5d09e0b23ec4672d81bc6a59f97c81e04ab338f441b6284496c928aaf1e90e0534885c7203b6c39c472cdca2239105b2573df20ea0606e556665a15db3176d9b0eaa9e0271a89e8e881f6933608cb5595703779c880bf2b481311fac49a1359978d66f14f269e820cea3c096ec2a72483d5d0c23f238114d1c13618b2d6a271f69c542bd0756683a296ae547adb76fd23d4c472a8491b8a7887581719e321a693233e7228c2530b36e5a51462f2f13475c9381665aaaf55fb987acbdc8ebb517de1cc7d59ae4a1a1300db2c2d1e5c43386627419b231d8d986b73b74b9c0fe25dfd33b8ea0bcc31c7e9f2ceadda80062467f111d18f74e37e3479340a9d0ea6e10d7908e5b5be34961ab5b1690cd2be937efaac449edbe35969adaf405668c6359166187b70100f5c3e22d6986ec0bb614652b74573c0c258db3762ad37234e16fbf0f165ed0f7e3e5a89cc3c5035c0b30e052539c7f53aa99c2fff17518dc42f45e68e6a3035508ec0c02171c2e6a02979fa96cbb7152b8835b6fcc30c441fce7193305aa1508f6560b7088cde56445e278d9118ea3d1cfa7b21c61e57ea283cbdebacfd3c431b32eaf74734ba816344dde2b3e1bc3e0cbff3034b2c664fc7d52e8cb73f0db723295bba177e9b8352d619236b5fc4e76515189e1010d9f23775b880318e739cb84b329b145a3b42dcbb959e5cbe287304d1d254b7cfbc7c9800e89ab5d0e898ed7094b5d9e1e41d3093964ab059567d020b2824703b8082a0cc52f24d13637a1784ce51421c732bbc802aa24ceebe90ccd5348b781a91c3ef2080ba9ce6b1bf8a91d5759d9df0a9c3d0f3d99ac774b583f2e6925a0befab08f1eb7c463868ec3371a0ec30b28cee256bb50eb39a89763cb1788c861625d322094986fd906324bfa8ed18a2871293c0b384f3d8b1d9184d0709db57a5ac814303fe8c19ba51955d8b0315e06306ca606a6b6d95e3680b60f57dce6f10eb205b286592d655305ed53adbd0feeec471d98e2629e3957ce533c9f31d379b722449f30054640e0982464203d34e0f8cd317b86af82adcbf4ec5d02c0a3801e0bc2ea2dbd2315c1e67c16c9bee04b3ae09a997d404f0a6e3dbd1599bf8b40a791f8d5cc8da3e32738c8a179736ce8d4c0df32629a097eba78e5638f5c23eaad5f7e269e4d5788583353d4493b06f1dd92cbb5c0bdfe55f40cff4d109b294cd6f066b1812bbae7abb4da9b4bf3423b81ce18ba857e88456574ef4f44f30725d718200c00d6501c407eef3ff07b468996e63385955505a52cc467c83f3d224dcb5c42a502095d7bf22d450d9cc049003e7104aeb6e296d6ed32559197c52e0568b87fba8f691a5aff80279d0b4e05976cacbe9db29d5ed3645bd9cc803a88dd1e311662f3b2ddc5c946929a620084d54d621552542a94c33a072b2adbf9ac983678719dbfb12552726305bb7d54808299c1eb4fb70edc6b5506d721ae2ca7e52380b6b9c70a078ed82dd11ae7c93c41cee319979904cee552bb36d6f3db1365dabd2df93615310b8ef9cc9ab0722bc7315611b6db5779e439207c56770005c1176b199bb2b2456c28c94e5d6cae327e898cc2aeaaa49215268b247b3905226a5a479043dc4c1a0870461ba9a42d4e91c4a44da9029a15364f6c0829cac64b89e94c371540a2479899d30add2de33f0c029b0b180c1a9a0ba0bf51e01fb60dbe675a38761672af7f44e91c52920336ee9121b1d9a0a005d0755d26d08a88840ab34a82bd1ab746556f81a61890f98816758d1471d741de90d4d96f89480c5ab5a13f25decb074f32b96279672cbab7d8333314b8aef62110694b36f7f647458a03cca554e47b9d41882935123e07fb704cf1e59a2d63183f21e770f57c1adb3e8570b38feb893e14f133bb7b31139f38c521a48c18cdee7128f2586ee609c2c9b92cf6a0f1e1843b89c9d5e57722aa4ba74aafb75fa4c96d710534d6050016a14271436fa55367c02c5e0978d412d43b782a4213a26f9e4c39ee99e32cb7fc7e7190fd552171096f59f881a7d9b2ecab639a6dbb148c58a16c90aab91677d4645bdc70959d8e87d395dfe1ea1c8e6ff3a9fd2f68510147161030e9faadc596daf7cc9d85ae2813e62a84c9c53436e38210df316e0cc08c5ebd6535f2cc6066d9b87daf6791f87a34b490209836a8c497f2b82f35344f1f6c5c209e0cbac9ed00dde91fb21d835c51036ce878043f48a307cdd2f228bf202b8219852f5bdd21332d78eef84134f95d2ff5f55d4f01a20efcf4de96363a97310c2bcc2bc6daf8d7b92fe5e5a5507e3cfc175dae0cea5290f5608c419ac642a023ea69a1f0cea7452cf342e1360b45baa5af0e195414c47bc411558a84341646bc6cf8bd59ae7ab3afc855740dcaa55cc6db8e9ab08e719063e13d83c43dcaf45ec10f2057e08ccaa941d9772f7fc128b51b0dc0226aa5f808f8d3f835ecdf311a2cd45f04d72b7024b5acc2422fb22c4ac27da244ed9a1fef286aaaa84fc88a669c82886618a5697f53cd832f235af93e2341ce2e2c2e1d20ae08276bad3893f71178dcb64d9a152922cfff08017b80c3c29b4a5759f60e83d1047d960bcd3c2b5d1802ae6e8edcd6ae974183e87b1a8103951cac9f8315792d19fd111aea8083ff4efa44a7cad9618b1b69580472dfcbf1597793b78d3193e9841e108f6a2d98bd94c49884a37753aa18e56daee845678281f8ba5ec34fa61ea482df6c0043f9b20dbfce16109f635ef35b92e9b4ea48ea8bb205ebca02858577c8009f3e36ac00849b84e43f768ac3d633fb1a6d0c46b33011dce16a7da2918efbaf185e0a5dd41a198d7da769eb183a8b20d947b1338498f086c521503b08e006b281c5c31ee560872bcb72b32b67056806183d27e0f66daaeaca5f3813c60d868b3cc7a1a1e822eec54e3193b694ac9235f1996cdd361647ec901d8f04c5dcb5c1604165ab9a4ef65b4cf5e7d5c9f5a901b9ec9e8b462c76be44b6ce92e48ff37733f1b059c4c39f25d8b63c1a75e9e6fd99d41b68fe649fef52d8d085fa79d2376678fd2301b3bc8970048e42055cdb03593ad6e9aeae8881629040bcd1974939d22c344232a4b880abaf9ce2cc4db5020eb3707fac1c3eb88f43bd35b942f5a5043cc703a4788e8341d8e0c87335e8d96f97ea395efed9b138be9330757ffcd6bab9ceb5a8ab52843de46aa402b9ab50dbdb303de7d139d976a307721411ee0480f2d6739ee5138b8ec8e1536f4a3b9644b385c26445cbe44429b2427d726dabdfe6a94c3d3b65d1eb97dcce5d47e5eeb6a59f539411a090b5e0fdc19c963596db30a024175db9d2f4d1f1d9454903a9804821959e02ef754c0fad45964273b6f1a16ef6c844c331cf6b8a8a8cb1b0ce94abe61049e8736664ab5ac3c147bba0fbee91b47d3f03631b66ffae44a9a0a8691613361b7f67ce297d6e2d877f3772ced52d5dfc36b8538197ee00acde4e05e46f61c8874e5b6080b66ed5c0d0a1cdca25d75defe51b730e146b35d0096b97867403093a9cb4b54ec20fdd5c2c555c00023c4dd4454ad2211460a212c9157f257e4240034a33316b1cbfd5132b1ae72584b1ae3038c4fac365a1608b81860ae1678ce31301478edded5acc8b05caa53bcc940788522871ea47674a55317a60bc8a965dd3de6902bde11006c459311ee7f24c7a0856b35eeee3e0688f4402c41edbb27af1135b936b247f9d19170a6ed139f458f45799467426f3b7222231169bcbd375aebe294e83edb403aa06efdc9225a65dfbf8005da9bcf3c0aa53099e9c9ae5dc01f716cddef752b60a7bfda288ad62baccabd47454f18bf86c3bd5955f28c55717a6a8cbe327869294b401047795f76027a36d005c8566e50b97bdd3e302b59e8a5d7afb7113d75d4b83538f6eecd1d295137f0d11a9125e3489c588d6a5f8305714a86db3d0b23dc9d493c5c492795b2b74525b75df41945ee9c4be4a8aed7071567d70e5b46969db038c02c13bfc532535ca345e28d3bde4349c7e28eeee1ad50b7c28e7f11c774caeff523102d0d6203b737e307d9e7abd4480ce6fc1cae8d233714fa0b577f211dbe793111c9ecc1093baa3e8f7adc072a6e594448676afea88a64a6a095f1630541f1a8640492c40082b601bfa87213e258c7daa69f38d4493fe77ae13c24cd219d868db33a70ff8b32d27d7604af00ab4b617fad5826a88a6bd6e8daac56d9c7478c428733392e33790e16be3434e06acaef3d690260593c14c5f376492f67d426dcd58c5cbc14c7d314807e3a24214b9df902d3ab4260e72f4ddd864f4cddf58eb4b61bbc9f41ea452cd6b4ef512af8f55bf36596f85898e809023bf175f2da35bb83df75da4f684518917b613165b72c67067584d6dd1d17ecb94cd9aa1961145a9a117c112850f392c9fa356d362cfad980bc68bc084d3b531ba6cbc80aa1a5726aa8c940317258d33d9f08d86e1e728eef6ca7fb6655b6a588d3bdb7f16ee18436a23cd5a1438da8ecad5b71f4deb4fb4207962b1a940df62c989efb5395b24538fcdee0f4481cf03a9b7525ae66816a216c185cd5f81e648a3bfd863aa54b855f6a4b85c318e9b4b163155e671542573bf3fe9d45b92bba930c4898df095b2311cf051157a8a89179860c95ef2c9f0af5429f0e75f2d3bc02c0ad77bda1cf04805fda1e7a65218ef9ec9c88251b6cb2b3727187528982cf7a1fc73041811fc94aa5d846b643e6bc5805a7c9689ced308abe278e93015329d1e5f76ce273f5801751cf10ddb97081999ee162b96e6240c9999037c052ac73e3517a5cdd684ff9c944933be4051951732f5e6904a8f9250b698a98996fdc8577d5a0b7e806a8bbbb6567998e81067214b0d3bb62bcf49dba9ff338ff21c45e9756538c9e8c531706ad2ede5cfe9bc8d692fe519003e7162085527bad58c41af12ef1d3ab2d9dd51ef314e47b86c554eef6a69c28bdb7c71ae7602a7d68594dff5cd6f5dff11ae706d4be4e1b6675408222cc2c70684f4aac7b8eb89c5461310c8e03de9595b14ab08cb2575ab85004088b05e3f9cc7c2c480769cd6b99143a9237161b904687076df859ecf578252108278554cb3672f48dac16a929532d79f3d6c8d5bab528df1c236490f35cdb095d73d6eb49b28d459c5279fb603ac501a5626a037bd7ed98f681d4c1b0aed40618b0b68acd0dc2de09e147a04abd70890ecd05e650108e4143d8c30937a98e34b50bace345181b07c02e3745bc45d96c7e06f1384ddf7060a2d1448c64abd21e5250931a4bc5441d31bb2957d04fe23cd397fee6fb7e0cd024e384dcc0703e9ea5b3c52382f178e043617f5632ab5a762c1e4f49cf54c1793ced5bc6529d98d0cd545f17308db1d38eeebf96d6b78684e3d07b5cfd9bb9f786d58a9344214fb2db223d9deec8fd043b6e0ce9d1e6468e8f2848afb8fedd8edad1abe7d409281c9b068dc0f4964cfd3110829024a5cbf9e25edf4e0b968d14a878f634847b141501d1bc154aa0366713c22cb612bb252a8bd5f14d56bd97a158ae585955e9323d104f305c6560be9db0681340003a688828970a35cd859845fe4d1ca74497523f10c8c33449ae9483d56006d77b2247fd9f355abf12ca7e432138e34286b8395043f2dc7386351837c494b1b35ed7248de078a9ef2a06bb6149ace093cc921f693b79d5ccf42ebb04ee50de58f1e103e44efc2b424968cd5b16882e2701ac3f46883899ff10b6b67995aff608cb22fce6f41407941e5a148342db02ca8bca954e9f740f6a0214c06881cee4e5247b89cacd1ba64e6aa29599d6c9d28017ba90a1f6130970757b2f9155a3cc96d940ced75b57651d65db2f91b8e1e4a3fcde8535412737a92a86e91371cb760aad149940af681b9bf2e1473be99b3bf05911579008f9d195db11a9641891cc096aa22d9fd23e0b70957b222128b5037e9b88bb31811ff2d84bd109299fb00f2284029b454a8fc6b4b61029fc8ddf7291fcceb609a46110d1ad07926fe8c3acd338979422a5965060eb879d74325d9c2f2722470f97df2f29d49db0f5a0673801651ca0fb21d42ac8ae738a32bd27b07323b8f72627428e60ac214fd436c547b4cee2e83fcea8e75785e18e19852e8e2962dbd0c9337e5316719cbbb9bf9c3211434c261efeea1c940844e86cca0bb1e164b00cf41e1f1e0785db2e847818120802feab8e79de048c0cd70e61782c09a59500f9dd23b4c73288b91a14feca13c4b62560aa4afb809e858b7531bf4ab1a2dc2e3702bc39d2f1ac0de12a1069c138e3a5aa139090c7dba667c57f2750ab57c5022288dd3e8ca4add434796437fa5de6f6bf9a1339a48754e17ac385335adbd5fd4d09cc5d4b9c983cc3cc2994940fee1de8bd2099f15309d448e6ae88299b7d6ce7e6c5e2dc6a8e1288fdb731fd4aabeb430f4b97277f2f02845d03a708f29c59545340ff2235b0a5df633beeedb6218bae75974588c214f3c76a7242f007037a4b02904ea8d91a91ddefe022d3045f44ba14266a457ddd80dcd5c0710661b76220f147341af6de06fb8a31bc1946137b90c3c3845377fe4c2ffa221ad69ccce93432a8dadd013275e95b6b1fdc17280cbf6f40e61ff6057ea7583a3549ddc99c8e07b32d08f982f2a2113d50d84e2b6344db1f4fe7e35f2a8be5176709dec8dce32fe017619328b4fe0a1b3577381a931832d20f04d0e0a94c4424d54f8d65e41a45db0c715c6b6b577084338715ea86c947e7762daa6a32b5f0f0ee4d9aae55f3cbd409cf56f1695b05eb3d51d19721c34af3761de1dbc8c9f813698856a5b8d707651a7b915817760739eb4490eca79920a4b0876cb741fcc506bddb20bedfa887710437068234e465416a4cf03cbd4630a05eac58b21cfa3e92b8d1956f420e162a3c69bdba91425847bca0cf9e5372d51f74d25e8391fe3d9e5fc114d8c8c5090f968aa50576ca06884d8f151b78d5e99d324047fe24b8ea1505c1e9fc4bd8ef8da95b368b553d7d15368383dc272c94167fef91d149a0b7263086e3b834884f7016a49c958bce3310d489b21fa72ec73b4a5e7601dbfbc79019f338dbe2cb111e49251b3c97f8de091ef3a84529ecf07c3dd5249e1c0557e2e4c613826463c9338b197fc28874df3065a67a0e28f93049389d2bc123f45a5921d5ec0c39c75a650054a86d7d834d51b62551eabdda0b42df6867709142d5ba1525f4cd41d5a6143b628217230654a73365070b0ba90c4c9f31086038b3c868a332240b77d0301ec7dd5cd03c78d7ab86d5df367f695879b86a0c8aae2ae4955d85f045b5a958006ee0f71dca326dc91efc349219e3dc715f696aa29bc2c1c26d017a6489afc1e2534a89c57a322159a067ddd1b3465fe9d2ce06ac49c3f88092b5dabec687270022c2b9d47a7c901e9e4ba5f2137bf5406c7b6dbca5c4a52d54a4ce355863402ee70b206240d088720c08646a03a890c36ae956da8b5ec1b7c1e8a1c42e03347b143053c5954b7ab397c994a0877169b19165ab77ee0c8a15d5dc4e60568fa1b5e31c68ed064443ac46c6a39cdcacc2b40672f3f4082bbf9d30583d5acce85b71599168dfc05e844f88f968fabbfaedadd587fbaa6e4a81d897990aaef465608f3264bee516ba722ae52b4d316ff57681bf8dc8d3de4e6afbe568f4504578f5a29476b6ab444ba8e97bc5198b898b8879d17f79409ddaf8d035b0abb2cf6527bb7fabfd4315358b2d7e5009a743551e9954e85d3f96d149a22f2dfc28a8abd0ee503861938c897c2fd4f469e0b906bda906b2e485be8df7cbda1222669f9f566d813d319be6350df3baefef5baf968f3035ac122d383fbf5cf019083bd22d6129dc0045cc3247a6fe402ae3d9d2c2198db8f48f83ea56f4dee6429060c8d323bafb6c1eb81ec925187bbd214ec539c7d3586288776918fa6122605c1c1420700c5b512ae5b1d3d761783f3e7e087682e5adadc62e5ae4f650858dadfe1b129f50f3729fb093278d99d56fb364d6798d70d9072bf2785de0e061172a4f001549eea97137c592fc2a688c1a184b9fa2f14e351118028d8aa3827cbde9b311ea9609c0fbb8736709cc8497e7529d62fdc755e580bdbc793018079093937b26cfa969d7dc9828c356c3d94916361d854298a79a26cdee14424e6a5a3104254b45d800c26024e1b5fa121a6172662322bb2da2a7fc5a290e48e4bd95b9f6c4ded85571799c10ddfa4b1ea11e60a35d0bf852da2ea37ad76712fce488cfbe123f7beacc63dceedb6805f070ed1970be00fcc189304ebc6471979b501cd0a9adc5591568dfd1f5e1429f532567912e56a425ca806e1ed263e954136dfc10ba52a2c6770046eeb0cc98cccd03546c9c107e176c5cdba8ccafe83b7d8be6a277487e146a6e947f640d0258f294252f9e8c3dd10de7f815910a50340f13fd0b33abfb0f6327dd16b417831fc02414b5c600b252c7312d20657ab46dee33a6c2ef06610dc87b0aac787edde153e0b6de1a6f567ab7060022e151be0b4d135807ac14232cde4f2675dae7b7e927bf2e9ea9bc24868dd9264b500e8c1fc59ac686178381dc83589de64f27ecb96b668534fa93216e666486c13ed6c69a29b051f1abf7bf499d1357b6df0e100bb48414695181900b5aa99e08889440930c9a0fc706eace70dd2205397a42240f6ecfae9e9f8856a62a4095beef866684eee7911202a4ffd75038267d3c204629de0a974dc1b4b150742003ac1484fc9833e528b064ad051d2bfb4bcf196561148e1e25fc8a0c7261eff3b3a32e31afcd612f136385a162958281ce8eb2a529325f26a9172630abb2d74a5c7ee6aae03606546df062ebeddb2e6a62854e3a923d51dab83771119551288e118fca19aef494ad9925af5d67163728158af7c04afcbc6b2cde75497c6e118d241c6e2852bc564763e34c9c700654ebaee398162d65a39498e04a8e1ba9c5f1e441b037c5e458d31b4965a1be96b5901b64c3070ea0a77f077e357d238ad302c378dec73eb6d7bf2f1ff6fcfd353ad33b2bf6bfe6f1979bf5780a4fa4b4f520d0f22414e2c566d952d61b03f8caa2de9b1205512aef55ef768c26a084b4e203b940d0c8dc671fd57f38c821d398ea1825e307507771a490c026b55ff1a5d55d26d8c890f51e8122743abcc2739ce12413522c05fbddc265f13029a0c620409de5b6485663d4cbbf971d4f6b63f30a23392c47e19dcee37b2cc35f3eefc3f2143d8f08e296971f953d7b0913e9aeac7862edf6dba96fea3be5fda7244009755842fc25cbe8cbb6d9552d07a9e366502d307ceed00d88c6bef6aeb20d104df6b7d469773d4d8f65f398a0378d9b23b85d19c0bdd856db008d38e5b31f4e518601901c4f774665c5d51cec78020f70374a72d5e43c5c97f403b00f35ae1766ca5dc50300efad073835290f32de12ab7b14bbf5f8baa838cd9c74b216c63262753cbda563ae3230e1d1ba35df1aafc3b7c865e6c08e013b03751e2c71eae026f43ec93747666e91d6815f7ae7c322e5e9315892c8b22d25d46d230a12f7050523c5b59eea9809676ac4d39f23d60d5a44616f839f01f8d65620d09c1b01441a3d4870864e34064b8fdc1510509f333e40da3b0c7bcfe1fad6bd22bde6653c1006fdfd45e684629d94b53454d9309d43f68967ffb091190c75e61dc08e22b3c0c5cda06a4a70c0ffd02bda51135da6ccf50b38588611218bbb4ef02401a48643ff894133e3cb26e2ef9745a6843828551813401676c9453590b7acbe424d23dc0a4d781ab4fc0d2f5473ff53fb7e210ab5d55da6312d9e7628d03db4314dee7b46b012bf6eec8f9f78934eab329795df28a9326f8cef63cd0606162af0a116fbb3487fe2fe07540bdb02196ad923cfc7976346ef4b8d2c8a8b76a253c83d4eab49cdf76411054985872206519b7c6718b21ccb7e270645e58efed7a5d498c6a4c487b8394d8694796578fbc2f64554876e94ed9ce00858476bcfd9b6e588eec5ac0f8d93f99a11afa771628154fc0247fd8f44277010e33f14b3a2453ea887f6f5ee441ba4e5ff01e05bb085f3c2ad75cfa30254e73980ccec024c8a944415b994bb8a6ce87e77b74dfe3428aaf1466adcef5a1ddb3977f0052ff8f4d4120d2c65e5330cc5ffbebc552483c69148f1ec7122192b6c19ca0337c483651e5e18599dc0f211744636abbef94e839c6aeb67c3ec7e9edd5b98b17e7b47bcde0859768a2b61b4a33975f494217bd6d54a8582bd3561953a33bdfd8f073ddeb24f30204f180410239116d59a3f77a1b02a6858720e6e27985fdb6e2062c8810205680f304a9f7b9376b546ffc83933d9f4836931ecbefc9240b09e805ef03991ee138d1b8c74af1e461a39110fd67f0a194019224693c1c22363043fa88d57084297e5c93507eada6824c9c838abb4bf6c1b3c6784106e05d6edb944cc3a56b3d7487f70772eb86c73504ee085075c6baf9c72946889718917eccc27c6065a94fdb3a265f7530210d2d90dbde25929b1075a963e4f9edde1f30075307580945f6c0083627acc50ceac1f8686323812c57a19e7d6d6f135080a3e345c3f1b74805a8739fca3b171b400ca72a050034024cb03af28b16c7b1a5e3824368fb1a1c4cc4d3a673d5af89ac29d2b73863272af16054dcd8a4de9455142b70d36b4093ee2ddf27141afa1a2e79640b748cf3f2953d2368823ad654ad32502712b353adc3856c87960084d67b10b940231f0ef0fd4233aafc78899122b0fa7fc50f0ab5143b43c04e4316d53ae8f227df110a5ce53a08649861f78bd8f96706f49c69c3fb9b50c37d60c4604a802c362f40d4f5308073d57bdd28c080b4d1ccbf4e2ff75621a3855373e55d92322fea862f87327aeac4b86f672c47922563241a3aa995e3c7f65584ab07a1fd5482742c45163aa2f4c5645942bf098c8a314f7c22f8ddd05afe025f02880c93476a63d1a0d0d6706706650c81f9a687710389035b6422f58bf42fdb9e9afea02f904a2d8b4b67f551eb4deffb7ac9d2acb24e1e57c41021b53f695709e5a2921d0018097ff4b1b11840c339091e4ae11df0713f120e31686344ae3a4560f305bcb41c73e872113f38d634fce18ae6b39e188211dfc2100edd41d13393406163dc8d06219cf0130d83d98394c6db6dc0531bc2d4d0430d078691190937588542274a59302f3430ccf417eb5af03b0394249cbafb749d875aa78c2023e458acb372f2393e0a4d10674171563ebfd36fa13a38d66f214007f0c53496474a18c0a28c414cd187be30ba431dcf2b89aeb2bcebaa8fd291b386b17fb97c6d3c69086429fa9b38b329deabe35dd20cf38a75c49b163c3991bc611e49bcd93864d3f171e958e53d6f1ab1e127dcd3fa5f093c4364a7b0118186081449700c02e13c6d0500207f3311f5d915c74acf2765df692df5dcc39d8c3a0ff0fb746e12c2c99566d04dc86275415004d256d74574ff5110f9f96b6ec404438499b6f579988d962fdf83c4b714002c3df49469a075d3f2c7910f52ef899d4012923e38e4e9f6ec508ad4e63ed891bf8ead91627f39a34865432c5d74b3c3530a38e20f1510d6aa3857e4933d78d6001361ad79d43f43c41d03cb17e1f03d8488e647efa4e80ce7da5dd98e3435f8ea4b61ccb3e4f5ecf68984aef5a2094defccced406f176fb3f2d129af3666a626ce102f788f3baf3d6b83bc2e1bc717a48c419ffb2bfc0f4ea15a27474574d3c61b79b48cda39394a62548613f57b15f0d29a891b8ea89f1a6d287267166eca3f446608afba813b2b67a4b4614ddc5d8cd8efb4895e77779affc78e5a2f5d935e6cf1797e58fdd8dcf5980f851ace61f029d33c4a2f824dcce16ffd55a867da1e973ed801e1038bb87701597ad1b5d7726ad2ab511b49ce69c73579f40f298b2f7ae075d8de69142399f82d42e1c36e217b40b041f826e1d6531ff115dded81f92923403f1b01474c241f84b9436c2a930f72a103409878446c456cea2d24d4575485a32b2f128544ee0cfa7ad7febb7e60256e1fa7c61fd613c40944f5fd1cdb8fa6fa3e21a26ad3ef09e2f3142be5932cb0db3f8c21fb4a91c7623812acc9ea271663db6e0674336c514e3b74a9951bc5da3f2646ec47f89861a523a7ad0ba85ddf8bdcdaea042ca4b09bcf92d5808794e6f598038ae483cc5dfabaef18c54ffd48c8ce6c81084f0728f102d663dd3ba8354efc42f34690ba2a7548f42a12ce37526c3a85557b3ec2990485f5085d6efa5228f991e285372e35cd27da29d34d7581586479c3ea9e057895a76ca11680d0f5e1902ba55c0c706f2087eedbcfe76217eb4ee635acedb365835d24a0bc03a2d2ae3504f4388736a17ea050fd9dec3b73d09c33536ab00ffab743d6e1bef78c47aaf30ae71edda21d2334c6f368519b4397fbf842d625e8792eb73a935cc992ceae6182aa3760fb6c4de1441a53d93af5003c6b9fbb5e7cee6ae0f822ef7263594e68215c6a2e455e176ee1d735e7ecc0131435a89c5d1790d0088cab7d07f3b22ecf782d297224244e52a359fe39134502299ea1eabcafe5f31c07e4938109ee9272ddc2259a6f966f947325897dcfbd0a4391987aabbb82ac13ee1e54243e8806d0d64eda94e9de773d94b5d2e004c1458ee3bf8f33076ca06fa04773b342982b0b14abbb7866d031a92ad20e86444e434e14f0811b09ba797af49e686738642b6f24aa4b4e106138128c871ac78b42adbf0f3ca601cbdce7826aae7b9cb2b08414bb9d553182829e94932d33b253930effc14789148316aeb250f307237774f8645ad93e468d54426d07553cb77c96fed2555f54381338e1390cdc0dcc7c766203fb1ace9d263cab597d5fc86c63584a999fce7c56ef13b433514b1999a40466a89ed81a04ac2052f06b50fea10e5625c6d9e8751c7a108790724247b058a58690d00805ab3988bc91d6d7e68ff28439a97231b492b684cde365e5073900272a576f38f9bd8efd3a8b2a060910b5a917696e3a19b8a97e002bc2f66f515de6cdd10a27d0a0477833f31aa4f76f05512706e9e07dcb1415e7ba78db0b415459a9370941e857b60bd08a538f45c54938a13873cc6b664c040ffab6110bea5f47cfdbc21169dd5daf17d2a4219615ca24219648587a3dcc63745a240891949aa0ac87bb9a1045dd139e1318a4f72914f8408568a994363ba4a715f312a08bf47b55243f7e60cf906f3d37fa65c4bed7df6006de941e28726dac229c5106d059263e22b75351a2b9e82cdc038d45133b575a787cc73b004ac22713ecb03363e582c2ec1139b4d661b034353eb1bc7c417347ce6de8d041c2879b3cf08cfd302c53db9e3fd58f3fb2d62649126d58b6d218681b7088a11ea280449a34a0106a6aadaa9c563259dd97be96d1e284eaaee2e3d0155d84123aa6741993212cd0bf1a9b0c587aa10339647f2c71198fc60e94bdeeb32d1c33325b0cf7c1598614a1dce57326b164f561786ada0a938dea353554bae54e7c23f70b8a2f52f744a59ca114684cda0d86ad0437bbbe3f6ed05228d4705da0f7ad0502d3c407a410548ceb9791896422500a40c9fb1bf68a71906c7a5ee11f86e5c3ad1469df5c548ce078fa765882868e317b040d06f0997125aa3a50aeffddbb5336aef501a72ed418033e7262d076b697eea95067503efd7c8633690d533f10ed825ce543e902b1e06a755825eac62b03b71d424c1416de6a1284fca47ab9a9e6d7c179f39346e7d8b79bf0a4f84097d622e44ad4adb3304b3c825a26402c0f65237755d70e3a7283a0707c976224f4a19b21418e657b194622438a74a0b503abaa41c29e393a382747610960e35698c06434801a7746298c0f3bfddb9b5af7c610dba467a3d131c263b66988fb3684460db0844848d6ad1d7ce2982c2de2247ac23d8c73eef3ef234e304ec49b936bc1aadcc4335df70eb77fb8ef669a0581e76eb4ff978eb78e347137564b5bc4d1be24b40fe346a72da392da5a522faaf229852220469e403df911d67e979e321be95507e07cfc6391b5e39e675081b75f5caac6aec024cf27b91d687757156f07709f0d9fec1b1457a32fcdb856597e6cd45ca41670cf6c1d42e19515cc4908c6e74ff90c622fc83d35d09d4872efa6ececa5212983a2d4b997242020478da91a51f1afeace48e5664bb224c0a6fb2f124522c7a949c8cbeac2f0c4761a2fca80aab967830f5ffe3022a619aff5d26d6748ed388dee30c5ed31ba56cf9357f1daac6aaacd299a75a0b7f8a68750481cb3a009a68a002f47dbb516a8fa6bd7a522717dd2356116766014f49905df37da3fed6fa60815a495016d196da9c0d0ef97c05979f3597799f1b93d59cb4aaf00065c007b45019350f28bb7aceabcdd5c1e68dddeac55211825b8759009a0997d01043bef44388cce86115bb18dd91a4769ac5e47655dda7492f34d424330fc8e6cde52aacae74835c2152f9447f44f31b2390bc8b34cae9b6c7a4ec87121cbda6a84b522855a08cc513cdc163d0e5956f6f8797fce99c034a47c9f30d0ee09f51867be6f14f499bd69c2d0f0da98765b3782359223efc5fb8acee4aa991a3e545e5efbe9085621e6e3eb7d9bc95e330a7aa3afbbafbcc878c765774e1030dfe2054d2fa6a22ec0c0a923208a49cb9501a24a08f17dcefb289ed129dbfb769d0aafbb05f71ae3bbbde1aa3a392d96871de8043dbf314e56078c841b47c232855f84a4fe5b570836a489acb9cb5dd4866a2a4d826c3a957c6e640773f077b79f96f1fe67736972c306badd7fe4fbf40e53c5d708c03df1a4758e761afb498f4f49d31783bd631b19ac4e94724dc55d79c843e7f27d1d369920c03012adc19f7255add88223404983a18380993bc323cc8165352bd337279a52fbe5e92659355cdc2c8414321340564941915192385711d148a1044c2ee7627732f8434d890ce640b08a6dd175f3d487fcc5efb16faae9a051f52501e08b80d26135a298be5684a6391e18c880ef0da1c000bc33344d4d0a8f444aa5f457ee9550acf125971254046b3e8e50031ab86250f0900a908214a3fb72af0b5d988df0eec0c31ae039a6aaf3e0cd32a372ea840167f042efef9a7f710c9ec0629c0bc21e03e815a5442f8679b1c2ddea700eec50fc11fc0caaf7214540945f85d8fbfb22bb684d15f85b249eded12c586302cb8c6a8ee84578a9b60a732f85a0fa40d643d1e1a37f404896d5dadd75913605453ec3d6218841a018ac91e19d4a643e5814b96ec5ec25580d872cceca30ab05f899062a415268bdd770c0793f81d748b496f5c0c5856549b3cd499a6adf151542944d99fb44d366bf29f0a167afb9103e2f405d8fc0ffa4feb0356850a59d68637c5d6f11f2694f43256a96d27905f89b8e2631aeabe4eb0bb8bef2772cec978d9aa175c26b6ee0daee0a1b15c5a645b6407d875b4b3d56dd9dfff844ae0fa6866775a55edabaa8be6a3de2c8eaff66f69ea8d96bcaf89142a36b7d3530d10e99fcc2d3a862d60a82c3521730fd7ba7a962349fdb2587a33c3c9f6a3ee378b0053495db3846067b42efd1bd34b45df16b090de85ad563dabe6a305d3b0b9558f6ebc4ed3f5c26ebb0d39b7708b34001b04dc548253bb5470265a13b998020ff2c7cef09aada9348a0be241bd195a788f7f06e65741ada4eeaaa381d0b42b545d081403a257480fadeb3840d2d6a9b91be7c8452d461ebfdfae152d92eea55950bd409b73db26049bc3d64b321019d8de82e90126619f1c2ac69df0dd42add7c9202d48b1bbfed8d7ece9ca9eb1bbbba60dd6e5e5dcdf6764f8bb5a49b791af37d08299b732be3c8329db8593d887b2206ff7346038b1ff8a2261176de167afcc47835985e16c368082f097ee06329e567257fdbd48c58e990ac5a8e4fbdecc99daf4e662b06c72f2fd8082085554623e733fb09ab9958b8b0ad0ab2cef593a014935980021d03a44376020d3c070d8dd04432ae3b8e2698a3fb8ef539a4fe48e1cf14073f9b5a7e0f1a0a5d908a6a05a6c11d62626e98a8699db6019d737afd902097a6f12b1f636e41a4054dc59c110245ee7ddd3b5022cc0b7331a58a247475b1e3f74609237938d6ea7e3a7892d8ab684057459e633b2b713671aff5876221e6ddfe406e478e8d831ba2dfe66026902ccec60de50f0fdfdad070c30adc5a3df2046b6347c915cdd177da9010af6115d51318cec03f01e7f08f455c6d60bbc8cc7bda8306919b3d2f08f285dc490ebd0b7a30c5476d02c5b601dbb859b5bbcf24162c13f58b155d44c5bb3008414b1a30c793a31755c527f2a69b5410125a3a3383c50b6ab73a098e2ae3d1d41719b043ba0360aee7cbff83e40bcb4091b194f8b0234430361f70db8b7e6384964ac919d3a50e8c5642473660d5aa56f4e07db67529c395be98f3308db5a481d11ccfff8e36dc5999717e0fb962e16658cbd4798e7728127f53a4e758b5673b7a2baa590d99138e07f8e1fc3ef09ae333a5f279a1828975bbd80996640524e0cddff623194d2cdc0c6fcc9ada3d9b0f19d727343bb0d25a57436ff5fd8194c0549e26569aa1fcd32e748962ddb498505fc0cb178de63f392839e671550606c3cc207dd88cb2d4e58eeb7af75d245f8d836ce0fddf4daf1782ff3e2ce0472422b37a2df2332bcd38711accca51df7f3b26500513abcc85b6b9f245b6b2118082b73ed9e99d7a85b92734624514e68e185f1cd5693021623ada7970580bc390690894f514bf4bd44df9d8417adadfab54ef60484b0327415b9bf830d84a332707d0234923dd8d08bcaf0dc0e81d4f24269b5c0da4e95a08c548cec7e60ce78ac780d2a8e7c04f0d4927e859d349753015a99cf858bb87bb08ee5abd7e9ae57bc92d77b14d9a43fe888e1351fca5216b87f074a255424ef1da82ab7fe0571a832150712ef4ac16ff4463df3405a76be57ac8bd0a3c562198a88aaed275e68692296b82b155dfba0c481ba3dcc9539acde064219d69c915b44f919f87330c5562ec6dc8db888e828bc5241bc24bd03e297ac2870c8a3cabbd16d7f1209a060f7c1cdd7658a2cb46faa98a516d4c35509baeccb533daf08bc831962c7bc21c3a0672c74bf76badd3963fb3f17ddb0743e30717242bc34039e83304c767d7d0b5d2d3193d0e23201a7a8a193dd678c8c8e3f1d233f30a0784449cc636e637b0c560cf09f5774671de4ccf074df8e87dfd5e4435b2df81ec07ce39a9f6eb81e331ccc93dddd8c39d80f9dcd4814bdc8b99d51abf9c9c7ea42e7046f486cff9461acc6d03aafbb8c232e095a9d1630066541ac683cc22aa122629e77918d02fd7134f6f5cfb5c04aef95c077cb131cba90b2593ccb349d3e17e6dd2abe2b636789ad09fab24605003c6fe98121c30f9716c7e219cd08803032e18e0c1015f8261d317c01982c71dca1dbb10982e3196dcc1a8c6ce423698f78ee47556470273d3d294891363a4a9a0a3c23dab6a87d27a68a5cc6889e9794ec8ac9a98da39ebfa6b4e59c7af7a48f47f9553d277fca70892059c86208773a7b7b92d186dae797f59083afabfb22fd93a8314dff2163a600581c64da625b63695b24105fa09e9b414f8700eed713860e48acca30b7393a924b874cbe63922d4beb8112e67f4738a4faa46ab6d5c87b681c09c1ab2533a67c395672d97a82b5319371d54ad77d070d0d5268a21fbbd5d1ed44db7f579da990f11b4ab518dbde3028cfa505e75a20dc54d82ebf467573813f8cd26251b6d707f31f7dfa9109594f110e7fbca124d1239b0ceaafd04a61922c6acb9f5382ae7465abc7600864174faa51f66df06536695aa312f2bcca3236086222914918bc7b8124088d7917e3340a84834c44608be095375a78995a4a9652e99c3e6ad7c38ac44cbc9c34a1bc78d1e351601561ff22f13cfda89e0df610245440cef8a8900154ab816161743aaf969c7dec864332a1948264ed143b8faf0719121841203cb04aea80b85769d5556cbbebbc7aeb7a4d0996d74379576ed268a05c4e189df80c4d0dada50b0480f266e8d4337346cfcc666450006324f0d1fd4a22004193cb9a3aadc4c1f8431b5e9cc802dd706a84f8eafa6a0157ce76d24be031d7256f68638761eb2897cc5c458245cca113b18c4f6088b69c957cdf226090cf04bc77646a55c89a4ba1692096b42844d8f8105719e2314e40bb318d1840115b1773191ec3810ce514fe4c9b8f7cebff2f43abf8373f65d3eee22c1032fb4521f1158271b241eeed23e5691218e981771d03070a9f9c81107456bf887300d2c8ecb47ac7a83ca19af1e0ba6742f8d53e9495cb30ca53988eb04b7140839afe6099187bf0aa9f15e6ede5860bdfeff175adb67729024b76ca81bd961960c5b123d324a600450f593fbede3e6eb8cfb6e2e6fa98ecca094b733506e730c56d23645979f5cb78d30752efd462d4ef6c0d5a70363f8377b23b310735ead28ce7574a40abc10a9c9508c59ed890c931285571b1dcda0d753ae6a19cece85d214588b6fceb760b92ad79536567fb741f9f9bdc008699dacf0623ee0b5649bb707fbb85b22c8f8bc2f496a3e97bb9cc2198c5abd178cb69b3d6bc47ae9c42529750d4c1c27ab3f518bcbf3fae8d0780aac4f041699f69b698720632e9c3c83ef81c15255c0461895b2ac901a46d4cfaf17465bd5b097c1164e5b62a3dcb4611ae2d6c695e1cd4f6dc81d1f43e041ddf75999eb50224ffea9522f001c2f9202db0608181fd2a31816d458cacdbb1dc6636d528108eb39c1d570d5568c619f58a55d56f7f101c77e6a39796d60918e282cc392a735c9537f47a723c6a78b9f8e4f9e265439c947d0531fa660ac7db58dd79a8835fc70b35892a5ffdddd0f159c42cf4ce539955293d4f07325c9990cc903dbe3e1eb4d088096586486d2ebd1f564123790d20000b99dec095f69c6e2e1c803793fa1a376dc03fd57fc9da3de1a239c5fb5bc01da1dab89192c6552d7c00ccde42c81f36c1e1d608d93897e4eec243649c7a95a00b4a9ab5e18616a16f18cfeab5cc789831868468df3f1761efba8d691379636dae0b60766a7bea17ef5c2c0838fb8bfceb4e3d0914c3160b00e8545591007e2ed9f19697c2603f4936784554c643fa909676269c82efaa4b2fde7bb743dc8c2952f7f3f9880fb1e4003ec770090bf16fab86c55373ac87eea08d28ecc8dbdd2d79c051ed18d1d01016929b5433e03da2edb96986e3e22c7ad987d08e8a80ecad721f809633bcc9de5ff271df8a9cb6dc9059e55317f00aebedb7862b8096974c2864bbe81e45032aabb8a75160e9b1781fe2fe54b4334376f7521f8d67c99b3807d35b28ed8965731c55d0268539441f9b84109fa53cd5f46edef92be713aac230c271c23a0af49e571cbb900e6bae4ac645a06d7ceea32b78ee59159b504349a13727c3984284693f0894edde5b3ea50d75368e5e9e671574fe44e747ebf0ba930284656eb2458196d7c4b3a91b844b4f8ad8cc9bca821e1f414cd6d81abd5e2972307294dd54842199d94c7b122a936eb88f11e8d1e41b072a2eaee993124e985edfc0d5fd655b2af60a5bcdf50de83dbe952635e78e76c0af27bd6e07d2aa906731fe5f74807c5a2abc444a23299048fa4f0e481d1d31db2a12cc28140aa074bfe42dd9b6fcda8bdf08d440efe1dd803e0e145f7f470bbcfc6b7c7b6e92aa40d002093f6592062879bbc2a3c95df069ad1a15055c7d4a2ae09c02c82ec1ba80762e19c1169f92b40834d481a7a045913ab3df6397f2fd2f0dbc4f0b8b8e5a9ed207cda1c13a26f2a2316e260beab5b7ef15a530ccc537b9f2d8ebc4318f2ea846b4e23fa66f64c6814194ea5517976847178609eca2ee1dfee58b06259b0155ab0c90a2c8b95c4e06a2f5469d0acb183430cfca95d20686bcf84d0afacca2b5624a30080c7d007b6755cf1dc70c750d5044b9b43157301c62e8680b6da7ab5ea0552f774bc218ae4185658fc92200d162b0a001eb7db4dfcbcdf55746f1b75ea15bd1db7816ddb8c04963155c474c91447ef7fef667bb06112d6ce3cf646ee4a72287c7852fb7165c855e55da8aee3bae054845cf923168fdf7f0b72e9bd6fd6baaa7a83a0a9214f15fe1aa6e09711a1a61351c0ce4eebd36bd98f545e6aca1237d60efa77713098422f2d6864f96bc5f04e03a015101bbcc5c30d05fa692c59eb706097c7a00fe0a5e965909138c7c50e87c74440184244717631709ac4a2d1a31495e85306c43fa8feb376a09129dff120da40930133f71e8a77eb86230e85c6ee2251164e36e95d82edc6c77bd404ddb2adbbb155e3c4e29819b0c410d15c3b4015ea647bb6882440a36f4cf3d2b9d74390be4b00a6f104f16468381ebec3ae66b41a4f2d9bda0cc1d28b954420b132b3b2515d922410c0b9a3f9eca148462570707fb901c1d5c2da9403c5e26a00b82e249d9ea4413073c6480237648b847a59796a50590e8138a4c229464c07afea7f45db1bd6d6180f20c18875429b2e6e85b39e61fbf31f05220753ec8536c59808e825a3621ca54ca50d0b0b56638005e86a310b809a549af2ff4fa7d014d8eb6fb820507a7cfb273803c5dec4f8be18da5c317e7e1311577cae25f7b6062fbf96fe043543d8295b7afb54d4e447910d6adb236b43ad384c39c1a5b4ba9652fd54ca3ea50c14b38f886b2565c6bdaeb89a07b5d84ba5f4faf023ed32a151124b4e2f90992bba7bc77f7a599d3728a89761f6a17572b04646196e1b6175571c5345b814e56263505c00dd589a4e0102c724549215aca0c2fa282dbaf91b67d0b04504a5887228a2547e03b44ab7d9416695d132aa607a97db15786468280209c708e334ddc9c751a579dfe8f47c6c94baacff9381f9385ee8c6a0b0b834aa591ec19974b2adc86355fa0548d1324cce14c76262fcaed82f79f5c4c5b1bae50a682a2259e06c7d99dc0899f4246cb5791f5b9bbb195f634c4e88cc0e9711472c41b850a9c310e5b784822fc74ab71282a941499421068e9a4485c6b2b1211d00b7d61ee352c3a588a71b60da9055b6bcc89c979887d431f9dc0680149c910246d9d6593968a7af7315915a2fcc13bf204c16b2cebdc3e0d8233437ffa555b6a492d8929d303bfd6d494a59101bbfda2c650085eb0ff5521f6cfe5f56c6febcc6f22ef5db41885d733ede66baac9ffc2ad8d7569f60a2e1d0f92d97862c48068b5872050b34ed713a29e63b19fe157acc07abcfb01b73122754d787732e8b403fb16491f793d5c17218045e84b6bd7d67b800caa8e845019bcac229f7eb1475caab9554a23b1c702be3471066168e09ea2d2d3da2ee5512f7ae380dd4ff14be6b02a6a506b9f4ce4d509df9337863a53d4010accc7e1e27bfabb5b0ee46799f255634eef30503867cf30a1b9d305e7c42138b964d36f78bfe89f3132be1fc0fa7f7724fbbe262a0045f1f627ffa7076c097a2f7abb107680bd4726ceda7c97d062c3c0e0dc49ad8531e1df5047318a8edf24e19e5f3bb8aae817f87a18ee356ac9c65549edfd583c70dc31b499e6ef8740450881b38f7a22bf8cd41867ef06c24941dac6202ed9db337d3c4de934412224284a616bcebd4429509818e2947aef249e925eb5c1001e854bd6814f5fe8b57b6d13c19232f8b1cbc0526cb7e895964dbcec8065fa123ba14745793dd53f8ca565a678aa0fb59d65f2f861369bb743b7aece8153f99257e735c787bb613d15c0b18ef739921df7d571cb1a23048af4849dcabdf0c2e9a66c0f0e7d725d48690afa8ba32205afbebc85d0e5a68b711961748f91bd1214f9831d2449bad688d6fcb15f1cff9d1b36860a6294512bf21b634a2588c2150d873717aaa71ed45e5f837c2757469c1b6c29a3380b9156ac8afa2024e5a1abe32d06ccccd69baf582287223eac6ecb986e7f5ff62feeac2de8b120489a39d85763edaa3a4251f5daa54db8ad98d99aebf14c56b1583052e8d6f186e11fb9c2d9f041a3bbe15db4846c2513851ab9980e90a88145bd01e0ff1d98d598243c86cfe3162425de63853f868fbab23682b8c21c1ce003349d355e3a3027c9a905640bc0239fdee25418670bb4c163e05c0d80db8fd12d79f9a8e848d45ab55974ebffb9bbd24496092e332833d56b314d6a978db6385165891e34785d5ac38db1e2039b6c3df233479df834c755e5a970d48e0267aafda0eb500a92e7afdc4e6dde3ec0ba298e2ca525078259f96cd2bc3861ae9e9451af60da25a5fdb1795b8597d875be6e2e6a44b56a0e8ff4e220db923fc8e6ae1ab983d90729897a7a2d0354e6bc3050dd34e65b827212ace039424598d95d2c4446b5ba3869bdd5d86bf3d4cf4973833b58f5dbf81382fd476bb553546fc0c714b8f19ffbf198eff1827d362f94ba1aa9964dc08876b1ef9110ed5325cc5554464ea46996c462dab9e7269835b9c8cb23ea196e928e58a0cb4c31e4ef7ab7cca52f55b54d54af66c47f97903df710fb773d217dd1b480d1aacc62b1a4430f40efd13ae03474501e5fe1d817740e7e3756b8f7a4434eebda99afa54a261e64b48b3f301b5b4962e46c59c32900ee9fcbd2f7d92baa796b17df30a31ded545f2cc1683aa29d3853f584303d0d3a381e17c682b004c08b9a1a5da21712be6099a3a53fb8cb6e0d9982a9aa1c2f747c393f5a3a05d49e0f37b6b54c03cf0a8d643974c88bdd19210801724e98b44ef5e2363b0f06e1f69dc6a5baf29de90cf622d7bab29912e9c1b5f053753d14d1aaa34a25280cf6b2f922a07fb1df836f2a729674e1431f6626be220c863bccbf41ae0cb71da6ebdb439cb4887d3d69614e76bbde6580402056fadbbebfb7a40e1eabf27726034132a159464f16b090a7a12e08e63b7caacc55d400ae599e332438a55e82f5cbe6ab40e5493c23d72ddbaed146036d867321cc5bf84a3d47e697331f24f9ebef7bb0255d5502059cd866b76a3f6a14cb4081dc223433d7f13f0532483517fb54b82b4ff12442c628e496604e760164816fa85b1917385a05c61b1e5b29b4c822e4a62b02c8f98281f721e140d314e8d8d1ddc992a8ee0053866c64d1feb4c9f115af48114b3cdfecc0d04856757c220488cf4ab5057756147cbd2e0cd9615c6a4d1a1cf874618cdabe52c94be3144d62efab81ef052cc32dc3fb70396b5a6cfc7a2fe28cb4e8deab902628e05f1f708fd6a2452250ea18e3a1e19ffd9caab8f6a771cd7dfaa1d467a7b6199bc8526bfe2dbb4d328ce670229ec472e46f2399dee0d75e42c958139cfb34d8573dd809e88ac58184b37770309b3c74497ae4171a00bb7dbe47ed618be8349ab0b2b32ceb0d773a4ba292de41b300b939088b8d574b904b58c56d7e59e864128ee9e14092227c1756f3320f67317ca183c738945c2e80c6e009c6a20ad811fbf80f4a7c9aeac97f399eb4e59237fb9ef3058219e810140abcf764189eb8704e6fe24aa54fb38c8211e06ed6628710f054e42722ade579587718c6687c2e5ab93e4b0c4a25e9ceddaa102ea84ab751c0176f48a7cd1707037fc8488e4ed519c2a98de489ac18f6138522d1ad3e4c0b156570a6f3679296f92f892e95baf3d6e43e482a1a0c751b07aed71213ac33a615830a572bf11cdd881dc98a88e1ea703ca9d2ff7d111e50503087690e876ba15b5e43b10f161d55e5e8b5212c5c7f64b94d5568d2f127e575ce9597b5523ba6d48f14bba13b5ef893529110bf5ada4cd239d60e803eb997e43447e6bcd47189ea89c64f8dff25e99fb066c58d30bad2a07d734c02bdc634a9f79cb180bb4091edd15a49cf852ea7b4745975c110d03bedb2ac1c514048eb14fc363327429684449f875ab48ca81c758245352962dc30d8f6cb000d0f07e89cd3f5d622e28954498e9e6871cbc44b50a7f25e5f092c3c168740e168a33322fcda75f343955bd0210dcf11d1612e9bdd9020b179cdac77eb9343f6c3d3c5d289eead6101c68e8752d72fbdec1120649bcb3abb47f8d508ccdcc7f41074ddb377b50133490dba609adee9a09ec5f29791ca41f4db54de3fb7c777deee6c8b37e1b45649472c92118138e9058b9703b286b708cadc88d92b0a2957a813a72973aaf47ddb5508a8f8285466700ce8ae354f21274e5659b21795d88f037a674a87a7cdcfb960b2a303275dd1dae4d22389cb11d9c65c945db6329f6e305f0401840fb29a10589e40d289ae0daea28408c1e35372d80345cd260136a0a10c98b7dbc31341f929e95c788f5e1ed5d2fa4fa6ed1d6c5c919acd6d96dcfb25e83790fc7a0815c8c780b6eca418a806af1552d18dc5b7d0cdc395249db3d27a4a3b50e3c5325fe8dda4da96a5ff202cc53cdd2cb3ad04529459f9c361326461ae2dd242339e41a3b555f2cd07fd7604ccc876aeec2a96afcbd876fd83f7318aa9deb7fa44c2d07dead8eb70974e1bc1d0eae31a150b9a448fb774d9e0e649fc0ee56b64785669ba656ed70e4c49f8202238d69df01b94ddc3a1b83cfc97229484fe281fd7d4c7e3f116bc9e229a1ef9d40286819c6579da31e009e94d52303580e6cdb195a28bd655554c660b0606e60aa90e2787497cb0d7289654db90b5b488d744b33bd923b60b4a7424c9561372b5cbf1638f991a0fc18cf74bfea6b53b2bc4e4c99e7bc7244a8c5c4f349a05f88b05902fa414d11d99d16f9af2864c80dbb9830cccf0ea5cb99dc7b76bd67ef1bdd2b8077b2ce08119f70e4e68ca8ca187daa9dc1f918b0c688675003e1d29d4a27989ca51b9aca90540b8aca45a9e1047f05d6f5f21964229d310bd2199bd1ba801f91e37db00900705c88dfd0106f7406e708031b0a4eed1459abd6da8c7fa74f7e10c345ab0b1164288e314c97908f2d70e68c29b31ac4f313ea749577f6966dce613c5d0729929d0d3d3c6371d3945358825a55365fb077fac211407d78bd49acf4ce21c38033389b959b4e307cb6260b55037c95f065382d743f00f2531cf20f0fcff1765bb64cb1304ae6a23de893e0440241f950836e3628bfbc336fccbac74fa42086646c99ca5614757d6b178dfd97b6a0a073ec8cfc4dc3f19cd6eb07160816c82f219c079af95f5d81058af512d316126b9450a05755ab146c895ecdc35348b71a8c95b7d3091f365c15a504e28774ab5363fb72c079edf092aff79fee48b80ad48248d03975eb5e2db7b81a5c383a15569b34a60e451d05f90309ac13276be2ac2e33757fde88d6631e8f4398478c64f60d110cc0273a897da2ef5bf2c051fe654a1af0835fcd89cb6d913e6bf32c615679365f026ed264755e9d91b4181e96c10516925cfba6db22a415763d6c49db873e405e6a07a7791b3d4c2ad803a68d0436d5f601888ee613db290ae34d9a8b6acc4fb51307019d38bec5b632035c5375744a41c2d3cec30109c780e40dc3a998d0d90ce4d146dc861f4d42d37def309d80c1d4a1b7f5d2c43ca2183a7a8e2ecb7060d61bff4dedbaa98fd60f4f5ac151e791adfb5bbb2bdc1dbe24b52b1cb9bf40ebe828f6ce260f559df0ce752f283a70c7b71fdf595c401d093251a4942e983383f4d181941a98b534ca5e1009f348f04505900969590bae3e70b34c983cdf0bc372b2640307260ad12e6c6e0a6472e41cfcf3ca5c1a7406c53c75310dc2eb69e05e680749c8d5da06db2f2b8f79017078b29494657c6b9df9536b06696d957f98b9baef8eff1fa16ece50fdca21556ff4b54865369133c89c5c4296cb01e8ea34fd4316ce596150254f1b88feb08c704403bca4b5975fd1a1a0b54c449ee6a3bc5ff2f70fe065ce3c39de7106250511913fc51392f119945aac620a4196bf087a64e4b4f69d1c0f722aa77f9860929a0393ec03b98796e4d488d670a7070d66f816a16ffd52d9815c7c9bd8d97087686d8d4d4313d85d0ce552b08d47783223d507992afd90ec1412bd6b2230d2c71bc5617363cb18748bdab6c7bf8a8207bb4323b8225c225bd116d77c10dda2ed6e22d83d0ae96a5b7b06dde84f8ccc2c52e1a1b623900aa830893127271cd876d4d347f8799b968acf796f6af8be6f1a5ccf4f92488201f24e4e8454401cfe2482f030483f16b3bcf96eef44b16dcca1cf20d303c6378c07329a3c50de010df690f97414680542abd74fc22f01b691cfe117000756a640601ded887291306dafbfdab6bcb4d9597cd85708d79d49fba83524d78391a2e06581c037125278a03e183963012531c0a1517762fcec6fc2c28b3b5e3750ace7c1882d2e01f460fa62463e54f9d2d97f9c814a986d261b03bc60e8fa45bb5dda7554fb6e3a2f2be7fea1e0ff2493bf60a895c81f97c64b4931f1193aeca96461ae4d67f5ecab5033f80b3311b1fb0f5c4a9ce27dd8af7a8251dda4310878a14a9c6c132361df95d840e0b483db52b49bf3b9e4dd2aebee339a4e0e25ebf5d8d9a0e767f7044aba6943cffed73186808186f483a9df34d6456b9cae7283d73aaa29f321e103a573ef2787a4b492b29f1cef5809c21a0e01faab28ca827299b14ae64044829cf1011e65fa331d1f2b7672e8bb06dd276b4d40f2c62d80fbe90cbd403666b513fa9524fb505b45f994fc8ab30725b90c095cf048f7ab0aac0c52ac2fdf9fae142ac4f4b4819448a1127269b29c69d1b9713d65e92724ab07cbe3fa41afd82183d9cfb158246f83706d3fa4bcba0c1f1ad2c82c4401424f46bd075e3725f7c74ce1cf47e99829163a93b258b000bd09f458b1a090e2774047f33e20a76025a2dce8af97f24c1ba50c47c8dae644a683aabbc90631135614870bf1a84049e5f846878e76c8beb448ec07ecc55bbd0880e24ef785ac181ad5fded846ae62653c5327d759b4b14b5f42fb6192cd9e0d4ff6b409ec50d63e3b295e2ea39597265e5a36704f55c51b5e8d1d490ab214ff5e034f70b569409ac540e9cff71992d7f7c03fd65706b8a6eeb925f507a8cfd566a74f3a2839e721ee3ff332db3658a65a85410db57edc5275e849c04cabb8fbf5920923a4a3a4ad3fb9dafde2d62f6e66df245a68836b4fdd616be3a65d3d19338dc0b7c13317fb0ed716d0ae07496dc0220a42200117a89dd67fa31571fe96abf67eef125ed179bb8bbe3cbd7a2df486b84104236d97befbd779d0c8c0b960b54c4a8e832bf19da33d3a9a183063a6b6b1366a3a2cec16ce490687e33d84061a2793a0b9585bc9f72089bd37b9cad99e3cdd49c170fb0d70a3a3265d2e011060b0cb06c51864703805cc0a2c5fc37b560b9e20629a7a45a989086b59605a018161e636089228c5ae4e0e8c158904cb1468738ca98f6a6fba608826a0a1d7c960b2344347ebc1e9208424bc2085c2b1967d0c82288335dfc1073552cc6b4a08c2445a0c11751d02e9c1c0195c4911365722246e7a48caeb5da2423be7091e40b2aae5a861161d4608a1e9058620a25ec15320d9d1a9be207d5ad550d1b16085dab4ed2175dab4e52ad57645093324b6bcda2d62b53d45a5f49b963ec8a10574e8095f8011242a4aac87e30e5544596d3c40850f0b006920d7cd8400e484b512081a50c0e1e0a9038c248e8d0a1b189d1b8c8e2eb827e3951ca758c4971662313e79dd5fecba966d536f9a2eb8266d666f1754181563f6832e55445d66405b5b3b6890f1a115dab14604811932bd8d7141de0e2a58022a3e8325b3f56c6e842dc6ae1f91f2b4134adb28a1693da564fad1e0f3d9fa30545989ec741e7b46970f198c6a0a831eae8187b620a09e5b5e4fbbe4ff50e54fdabc9fe3dc3b90dcebbef998dd33c7b0a64e164219a1c718e739c7fef7e74cf6ee3dfe7a37bf62ec3bafb779ad5a3f783e6368e935f60f27d99687676d6f7d4bb9ce5db38cd6dbc96d8a079eab58486e6a9d4504d4d0e6dd0a8543660f83d7e05865f269a370e637d7f2df9ee7dc7ff54aaa2ef349feade55399cadfa8a060c6b681a9c6ce335609c2d1b39a4aadbdcc6bfef3434aa1066f3934a886c9b7327708868b64d26223b752f95aa499d4b81df39ee07473b1b50f6090c6b7bdf81660a9c2d3bf5ef34a08dab40ea09d1dc46debea76ab2104daeb3e57ddf473431ecc65606970ac257ad3c11a54c1a9f2ae7cbf1c3c2978f768c3d01a5cc1338b44dc7580bc270f9e9186b419556b580c9fc563ba05205dda15fffb8e0435df39f979e5d577f805a3d573d9dd8a1e759983a68e3963dc5aac4c5a983e2db9a253e770e831bf67a84457abe6af81b384476cd44b2711e829f3d08e78cb30c89646b20cb473d3ece9d81d1460bca2eda24fda10c1a3c51c4c6f0a0c60bccf881b74384c10fa0f4908499213409e19a6558e8f999d265ce4e95b3758c4d99010fea9c53da9711ad36cbf1c3028f207c5ac7d8942d3afc56b129444c09a2c3d6cc81c9c69c23d1a56bed72562b206a835b2d90f574e88ac495ae4860d1b5565ba584691b1d635270d061cf105e3ce0170f74e25826499924465198316326a7be6ed079e1f03afa11228bf46a3d9de491c627df459d160e302f681e3ff8be8e312952f0e8811428623069faba8e31294a7cf0a9ccf00042103aec11c247d331d64497d804d3bd393cca7cb1267068db3116458d2d4c5041c30918f4deabdde33068dceb644bdfe76cf7de2848b61aa03182294630c101182467cca0480a1252bc98428c234ba49cc0c90abc28243851a200298cbe0001458c2328b932269820838c0d9270d1c4957949cc6c4e8e6cd44a67613a4382085a19a0d55b515280c64f13245af74262c111cc74f7d2c9041a4de813168c51e5c498e082892c35249a0ea0f1dab85a5df5d97a219139b3152518ae3ace2765622c1823c6822ed0c8baa02fa432b128517610c5114ea028034b1a5d9e78c0185c7471c316242d8e7848cae820cfc424ba44b924634289092877092e4b783195e8f2612d9b775a284c732706285de6cebd1fd66e76359cb9004a8cc652e1b418357b6c6bd0d609176d9ddc4043a2076d956c5addb62e9ad6592e624d9a7437af6a8d31dc30a5e98929427c51e2e500652b22020c952843e49046143aa0342b690c4f94d09dd8185f7925651143e289fb4292b10a0f2ff2c67c00a5a5d5114c4d6f2e22a53eba38e9bd105d4819038a8ac0a44020baec33995d883d330db388cda73bf40c286a1ae4e777e88370f07d43f534d43c02135a5e9ec6a5e92486f10f0b49b0f0d33f1968b6643d028422232327bcd0e18b253a506a05614907295178708613478020937499e10837448142832568fc5882254b1456ac6146193fd487c70f124d9ff3b883bac059104890d992ff82442621358298c205071514410c171f58c1428615a32d655cd44b5adaf20501a2a256307982634c9c4849a6966844a1a24b0aca78728220b8a81627a488f972032228a1c245f34af268c0d4d18323c624a908323ac4118b39400309104248c38c2e6820f92005464340224a12648c89524417297e4c41c510521ce9220425bc2326fc032094e460660c29a0f00003d531568496254c1feab4b4b327368493d8103e501aa529e5c1034a8b70d259fe78f0859d4eac882422c8502b2a2a39a9fa56769573aac9e8001d7c282891677e8372eaa2549be8211b1425a6c8135aa512ba82958a5187282a461dbda012ba26e600177ce10a45654be4997f401215152af34aef01368b3277d77a2e3c20b63dd64e35f2c84f798b24165d59bd6cb586972ad59c94d66aedbd5986b1d6f1d8c177af71119fea33a94dd1e1a7d0ba449e267a76f89dc8c38b4ffec61d57e20e137a76b3c69ba3b4469167951377d0774512b451b92f901dde7a77703cc2f82a4b482ab52542eb25923daba8715a9fec16c7ed7fa6cfe6c3ddde85e9f3edc49d98814480e9b0ebeab231228cdafecbb99d539ee1b4748053716086aee17d685f670bdb671c69c4f1b18af170204296ce6e3ac69630b9f7de5be3dd400415542210814209c8b8024a1660bad8f28378e68b242888804517256ab004055288331d1174e050669c562ba0ab0a42125a9a8059430d35320f987e100346872294e1199dc1453d830635dd99339ed0cea0e2db71041516e8a0431656ba105da9428a151958c9a18bae636c090e56dc7beff5eebdddd73126c4193ee8624278d9c08e3121a8e89a8e3121a0705cf45eabb51549a939dac9d831da2279455a19e78c119455a87c1e68ce18678ce09c1594b18e8172757901677c216e3b57dd6d0ebbcee7ab14e864779fdeabd3f14d1dae487deabba3c0c8d41c27bb3b3dcfcbacd387bcd37b99fef489717331acdde16b1d78cf15b5762f991bf1d8e19b178a5aaead37b0841280b4d4f23513912d6f54e566b5d21b03a3093147083165cb0ddd1a4894d11484114a4698c235c9c45280462c0562e2d20f3ea0b68774fb3cdde82798b17ed0dc637d11e4c0b086e6be2c4493bd8cbbd32d873424eaaed5d0ddd10c4646379c71d5ccd01b6ecc6d39e430d8d51cd7e494769ad33d90268714770a0ce98f2fb3f076fbfb0d249a4db947ea73e42e293a26889bc715dfe7c32b3e3a4ff1b557d74e8fef61ef5b66656775f7222bfbe6bd3bd5beeaafbddc651c79284ba394e6909e4e7c9a59dc59daf1e9b76799a59dc59d1e5fc3cf70de349c652d8f22229b7eb80bc745c9c3c7492f28c41de20e59743e9e66a19b85ac6d85f3bce55a5b16bab5ded2fb715948c3dc359f2c54b3cdac1ff7d53ecb610db8cb42dc9cf4f18785b3d045bda6fed3ab9e97f4f42ccb547df673ed3866a14efb7278563d8b755935cbb2c79e9fecadc8139fa1ee96bf73cfb2d0c6c2b71dc8ba67e1671b18234f8c3cd959370bb1ee575d4fcfba59e88b3cf1abc813fff5aae3add06f0e38160d42974583d015aa39c729adf8e833916d9a89501c30a5d4bed2acde5a71c7346e2bcdb5cea9e16c6feb90ae896cd334bc3869c53175aad78ad373818671a576d639eda49486b62595b481e6510a503c84f891b62ec0cc771f1d407f339054c55810b19fa923c680f0a29b36cd7fe5e0b03aa3a353a6c6259d10fcc8f0b3803442f0436417a04687a5ed9b87ec69eda113c34a0cccf050461641fc808a16115b948105054e5e6045a7865c72816ae502453a50e1c4114eb0044b0f9c681faa70726589124e80e8cc60400a81010de8c00506343881d20d8a90861961686a28c2072856dcc0083b6471ea1803020a2b68a6a062091d633e78e95067492add7bcd20a2afaa2fbdd70ca4bef752d7bdd9ed7c30a269744042d2c7e6945cb1d12ef858f431a684a9e9c9a8bad8a8f5de7abbaeebbaee36baeb945ca1d4da6e7bf46c51dbed9e826164aa4aa87092e3b25c83b4801225dd3dd21dfca13ade5a8d8c181b36ba4c31418e642ebac3ea1e633d3075b76ddb3390ab5dc7556da9bbe769d4e33a0cb2bc7be73cee9cd434cdf334bce1edde76cf8159ae018cb11eae74779574e16a0f4f50cd591fa8b0f582b2dfccf1d8e293ae54c7362565523d996c95f71ec6315c767b361880ce9c39b3860b56940575a0c96d91c7161fea710cb5206e099e7a8b6338540d39acd12109505dd7f1d8e293824f638233673a34c199338d4fa754aaed53653ccfeb546d43c9928e3125579a8b5cd4baaeeb32cb85d8dd7bc4ee326bfb5077f92ecb6ff72c18d6104fdc35b0a84f365ad51ec892b11eba748cf540a6394ea56a7b95121f6c98ee6cdb9256e70134ad474a1d371b5b1e2243ae903abd7968f3ccc6331c9de97496d359966599ea5976938966abf2d03dfef6d02613cd96576559966559b61da7e8655661b07a80b65aff6a152fc5588cbc6058c4a3bf2097c3da63fba5f7d41a15993152a4efb9314d7388df1ba6388752761d3375d05ce287754c4b79497188a397e845e4e2f3437728cd59beac7cddb54dc19fa6605cea0b8636f43ddeb8d309c3af61cc7448ef09d19e377b0d235790cf32bd6058c73415427be86ade0f2e8733ac623a249aa7e71ea28e4fc739ac629a1e874e8eca6289bf7c4354965dcc4b172f98b8581c59f8c9817328438edf83b3d2795fb75cc9a861a40adb31cd4f60b8eaf0678b3ff4e7a76da7d55c72c7d4c70374c71e7fe1b7fac1b4ba66ce39e7f49ec39a0f69f7beddcb3461ed9a7335586b6262d45c6f554cd7e6b29e564b5b69b26af2b292813a79341f883a7934b7d340db1feae46db6ef6940db60c29c5515edca8c75d972bf69392c4157c9902ad8d0da3fd4c9a3b99449cd01138606d1f71feae4ddd3d8e001fbb0b5aaf7c60b4c6854731a793fbade26d2dcb9b7f7a91cb6e697c34f540ebf7b2f6f1d58672becf99626c594e6213e1972f4a61d3f94214773c779cb431a3e97c38c67abf6d52e3da14a8698d6405cc9902a5c5b237776e0e41443622af163dc9142c5b90e994dc484bea7c74dc404ad1940c121fbfbb03e34d22c06d0bea73d1bdb21fbd931ae10bd50699c4287f62f0cf1d9df4cb7d8940e69beefe9b03ea40fb0af27be903eacf7d47321f6cd4366d8d34fb6d31e74283d217b536d1f5e160c9a6bbbec19c5a01d3d18b21fb8b65318e20c7a706da7305c1e8e706da7302400294b56bf34813b7a30a880032d5a470f06ea4508406c1d3d18505072e205dc982c764083aea30703093c2411c411de4402890831c872eae8c16003460b8ec09c3983eae8c130c49933aeed1e0ca926309458e30806342998ea0b86161ce2a3b2eeed5941b685c8332c2047d2b509190281e8ea828634d44f280ef44edb493ef14e434f388fdb8e3add82de2f28e47585040d3d413db60c44fa0997bfe30351efdce6427dcb46db1d62ff82057d5422fd643b173d18f2c96873799902a76cb4b9be73d96873713e08d0e113ef321431e9279be79da3307ca873d9288ee13a1d68d290f613242db8b6c7b863034bce883cb1c3b9c2069688892ac496db06c2b62715b95245a4fcc84e7f0a52c5c571403aef474601030cc1c5b565230df001144370f1011443c8c055d4d1eb31f4647b6c194cd04f8cac6bb3e9ec273086d84377bc0c03a23b738b91e99b1f2a95a5d86f57a34322352d438c811234e8ec43f4d961f35f86cd901f5d9e182e0b307d8788d0b40c158c96a61702a42bd2fdf402729454e43a22e5bec8b5bd7a3f5ab828502a01e512dde17e3a659864e2624b1b534c2a29914ab0a4229714fbf91788f868a6212eb59078a6c368a68788d4b40c2658c9410b3afb3d4c0a2ac3a611dd99f7f2a3ebc43433d2746d8f2e2e47ba33443351ed2c87f4370ff5286a7a22aa9621024d929a3ec6c8d842338b9e045c3a2401171d78245ddc37f0c874719945cf1d0973b7e010a1d9f410882e8e7217823ad3f45cdcc15381e8da9e20c9e1dace8147d996ad889fb8084fd5189c7c68a4a8b59697393412d67a09d257d0870a38d0722684f51c9221da9a4379198a5a20a6690ec1cc4fb2c7318c94608c21192e9b84802264863803255d7308e20c9434cd4f60f146504c50ae307265d948051c6061e48a9f8f9e053ea628b57c3196c596c6cf22d6ece5c417e2ed19fec680a22c1d238e707b46b90dac71c710a27a03e5384a2dc775aab8438bec52ca719672c7d3d62b3b146afcb06889c6af191ea20fb31ccae9bda6e783da2cbb42aa9111104d842f7b036f1ae79004422490231adfa22c8d71e80e4bc14919c3a24bab664b3ad1586ca1534eb9f7769ee8b6a543ecbdf5365619bf8869318a2d2961a18c1a57a4e0480b0b9a18c245c9ec8054450a17643146898b0241832e2cfca0c5092da6e5ca4d9321c304468a1af0c0cb0f29c09cc104c50e8e60c6ab092d46c4b42879c15b2d67afa4943d728b283152a318a96cf231a03c7941a12f25545d1632597288d587ae4b485e495cf145d78eb12c475b38fa6842097dda3196c5a8eb6594f35da4299bbbd99259c554b998464d8b8a8a5cb5433d7e452b188b481912647b7d7489b937c36c86c1624d9f3d0877fbfd7e5bdaee652966cbb08a0fcb1ec47bbdb5df1e84e6f61c151be7ae6519834909a2fafda7fd7beacbb08b332ccb30d8f65acf3d48f67a4f2925994ea7c9b02ba9d01d7a55eeb1afc9309a0c3b6598c7e47d3bce31d09d20f8dcb30ccb7e7a2a4ba5d7a332ecb465180c084c4a10fc2ec3b80cdb3250fe66a097467487de6a592a11b3a464d513a3228d3093eb3ebaea23ceab58963fa647d7cd78c9e6e8aa344572e2232eea84d4a8082ff996ac706bc6c29f19a33b12443a72237766aca90f3a41da16ac0d442528fb063c6ac135c9dc885981c1394562c259ac8c836b7fe7b6ee21cda782ef48baa4cc47ba930255330f0952c2711e0485df3ce23c07859700f35e734fe55d75efaaed2544f66d429a8752b6910986df0d28a5e621416e9ef32025fc46ca9020acdfbc841ce90e2e7293613767e164a97d82e1ccc021212d9c39b346b3846acebde6dce3412192bbeadc55598844fdf41a50084b88bb3c7749935b2d3d1fb6bfcf2ed427c614c39619e80efd4d86490972739c539c0c93465762f92b970e7703e25c82416e8e9361377ef315082b72ad2e3dd60b38bf390c3859e916904aac8752a9e981681149e50527ab2c97e8ce8ddf1c475a61bba8650eefb74fcf02377e938968914be6d0fb96e5bf3c743f8f3a6522b4c3960e289940994119a33bf42078037c0d1d12a1e1905cb26489144386fae09cde9c457d724eef39160863fdc8510bae95d48e03c2707e64f5ff0684ddfcc82a17593dba6eb4d048568f74a7fe0644b2fa73a43bf22c10c9ea440db2826a6f99c86d7b24ab2cc5e621fcb8d4378f2ec90412b93dcf1db5e0ba71d663e68ef31c18921bb908098faed54b7837753862c26f9c763fa7315ee1535db12bb8481db13bf52912e90e4ece6f1e63098fae88938f73d6c32f0788eed0e71ce7618f939bd58b1859bd846cb4facd6f9e933fba8343bd17a2ab0735013c6ac145c223f529211f21e14366cf1f21e1380fb5cf2b39f908095f7dcbe1cc446ee3fc84846c43ceedaa734022b7c32226ea839329a5350f3dc1798d4b2dbda0b8d4363fb121d29d39f4c486d5ad05e5d2346aae8271a971401b22ddc1016d589d931e9055c646bdcadf5247ef05e4e640f326afc069d4a822d55c89c1492e8712045ff8cd639d4f2534d5758c5de145774ee4911dedb82c24bb4fd0fb76d68fec1a186a8f6008d22e874433c3b0269a99d6f4dac6713f69a86fe0f71318d2d3ec6516778b7ac70d5da2d9281488fb65c4179ee332d17c193151a0ec591bb3ba93f6eeacedf8d9bd738ff4a8d3133d0ad373dabb6bd9296fb86b4cf3143afdf4c19d9ecbaceedcb36fa75d16ea4ecf3afed4b2107da7d1aeb1277113b56bd34f4a27656db7d66fbf5745e3278d9fac5b5f33cb074b087f66d68f86b16a16ca7e9ffdc85051de2c94bdcab87539cc09572ceddd2faba2f2cdacedf1b666212e6b99b56521ad3e6e5fe5d477425bb69975717ef7edf39565b310d77db2ec3dcbb25948eb1a4fdcdd2cf2e45562a9ab41c6c58a2c65d298e25e2baadc7bcb58d1831546f234c896a7b9f2a0a267ea08bb1c3d3fadfd8522ae6122db59ace20bbbbef7072d4a5afaf6d01e2a1700c617f6f4501f19814c1df357c33775713cac7da9b0eb7bce763ca6f8c29e035080005187c541063f68d1f73d32e8bb45df04541bcb98c49e2fc6aa10d35bb76ab56a9c2d6e6ad77204a39df2bd6f454b3a3cc910c1f4963d3084b53d77399003b32d87467a0bc243f8178343db69731918736b2fd25a86f3d0f639b43d66f65beeba0c6f388736dbb467568d2f4435fdedaafc95f67a2fcd4a29e366f1337b6fa69dd4905e4b3e2ac4a050f39ba14f5d6b78c2ea44d5d33dcec6b76c637e7386c94dee94e343586f7306584e7d7ae88efdb95bbb03e518295082993bdc7ba80fd0dcb9b7138b5c819b582696c985b76b2d0fe150868e93dd8671f584ecc432abc0d9c4d2cd9c26b878535f0c4aa171d42b3d9a6d9db7a7f4d6d67b3367c31ae8b5954e799aa58ff96bbda0143e5487e4ebccc2452696fa06cd4d2356f3d88809263e87b65761107ce1cafe38234909551e939ed7696282a967f5224d65b99bad1bc5a82d3dd55c63c0e5784d5182e88a88b2437b1c2812137964398a67ce44ba7346bea069092c4b4459e288a6258aa01d9b965822c1a62594b46ab624d8b4040e5a67840d4a98a6273c685547c41872fad4e971396104b4bc21a8f4c47400f11cca5bf2ed008a925427371f343d19d338457382c92239b326b84853dd6cad668e3b86f488d506c9dfcb5924f3101b92200d35ce340dd38c2b5ea64c0ed5f4844ac707a5d0f75a5b2ba573cac8e3d51c944247cfc7cd610d4d7b5c2f28858e9127b4b7330b8181b1a99c9d95740d215fb6115f40f862d313a52625b67403f9c857103e21b269286a49a50e3e21f452075fbd903aa584c1b714633c038ada8488431e088e1e4157f0551417a39473525aabb5f76619c69ab66d1cd7759e773aa150df974ad1d0d4d4a854366cd8d8dcdcac563838376eb058393924905042dc314488095d42e48927b226c41d4468cb6c42e491d2a2c1a16cc42625ae58043cc61809b0038cbf6fb5faa3f4f24dc9f449251905d7820212c0c20a3b10f0e3a3e300390c500002f4a890020f8e010860a7150000a0a07342066f420924e4b06ee0ac6e6c6ca86a68521feae475dca6e1ecda4aa7a4589810770889675a3e893cf431861249fc639665d9ff16c618638cf1e37b344dd3344d7bfc4fdcb66ddbb6ed477e5cdbe35f42f8428924ee1022c9f49327425ae82747f28ceb1e090989cb487e5c1cc7711cc7fdc88f4be9de7bef8febbeebbaaeebba1ff97175485ecbe5ad5c1e12ecf2ee79de8ffcb8bc2c9764a984ee2821914ba0bc22a9502e3b0d27530739f149a6e8939d7611d3b1839cf0816a1aa2987e7741d21e46c70e251ab181e6bd475aae235ac6c87533d23472dd6bf71988847404bb8e50648c8eac5c479919a4232d579691b4673ff2e3d232121dae9be516100909c98f2bcb4736d7fd115dc3c885a404d73dd25166c6c8c885e4e4ba3f4291313232721dd121632b4aa3c6b20b7d6c034990a13bb169741961241f922534944894a840b9d21b50820add89ed013a63aca3dcd232c6287f7ac4f769048ca516df115f5c9a63a20b7fabb77ac2b9824f0c35e2fb3a362541698cce6f875713d06cc596fd5d659ad4728871cde1f7ad725cb239873db11c5d7030e96cc951f55ce5f470334ba52a5f5ca23e128ac5b4096eb6ec8ba8f7e2ee7bd0e7e8303eeb115f8b3a124d586707a2ab8ed25be94c1fa964c96b065fac327766f67ac1174a25a914e33f25972a57a6acd2f3dc943b48a4d9aa411aa5bed9aa5e3ea62fc00bd2fa6aba3733d219cd322dd66b20ada7b456aededf6760b5f23e82f76adab6692010ddb22623c25c8ce3162318b9f8ec178cd9bd37cb2e28c1ccd6dd34f07eaf2bbe773d228ed895f66c5d70392b10c7ab75bf0e6bd356906699b5662bd2259d574967ad32daa8c90a06177d3ed4e5b255ce75421c1de39c559b567b774e6633ee4021f2d0d7ae4dbd4eced9b3b6ed992d9fd6dcb95da59f99ac0277f145c517b6baea441efaefd4e5703efb09c4734723aacdf5e43ab0aa6eaf4d6d7e82317e370a2a4e1d33b473e267389bd69ece3ae7ab183abba243515f5b7cb2036577ddf63a5b419b4e145fa8d3aa1fa69d7d3715301580e42eaa00ca81e15830d0a30e017a542eea5366c1308f3a04e6512f6a2c67e88da8b626a9f487b9598de0a489ce7e3944e3f45c00eae8651a64bf2878ae9e3b8194496767f9a8cf5e73e66487ce9030d35b47bd97cd29185ff39d7a3fb0f7b279056d9c82b71ef58ab7d7ec75149cdfbc1ed955c7a0ea34e0d0b6fdfb0964d93cf649ab60ea1ac8ead5cd5737df7e93593667f9383d65f30aaae8ef710e34f16dc0a0a23edd061872c75781e176fc1a7088e6b1650e3da08903e221fc54fe66ebf728f047a70387b8bc9a2d7b9c7366eb15a441b676ee86908c55eee2c0bfde8fecb40a911d946130b4a7c8636dab3e0c4e4a1ca5d735296de9ac6313124631363529a3554d4d62464d4d989a06d1d4459b9ae84c397b669dd62bcb1762dc7d72e2a0a49b3e39315b75b6a23b594e867397bfd9ca54b39559f185abce56393174c003331065af219346629a9a18756c52f2d205e8d8a414a627ddb18fb89fdc5ce78ead5c7d71b1dd6cd9a52ffc2858e50ab2e5bcbd7442a94bd78b09838b7147155a9dba0ddf241f2eca15ac0e7b292995df0e19795cb0c29f3a5e627c7f71d14d1df615832f8c4b2f187cf2b49b2d0964b34ee2b8c463ea68400c1df0800cf4412880b1bcd14b0784523c7764939293a6239e78e1e0f33a36295de9dab149a98a74f20979d15f211a1022cf3c046223284179a11bb5462f2886d135e66e07dfecd874049522463c17627d09d91ac25841f1f543f1350b81756da0393d213520e1708351c7d88a130a2e3fbb97524a2935a9e9e8687262c17d5dd88af2198e31c618a510237d1f411d9d1e9a9797e0d4828b3a3d409da62ad4f1dce9fec2f2853870f4b090811804e3234fb693fd04ae66a7d39906c68be3523d5d011e5d9dc0893137e94fd347bb448f70c74dda81ab4d7b3d142e5e30acf7f5455bb2876cd2822b6da1b854b5fcd0388101103ff5a585d26a25118dc1d5d1c111c25af5455d35ad6ab5d65a6bbda0ea0b7bbe584b9d168e7b7bba87ebe921ad8d40666b355bf3f2e1ca2aa9934e5ae91ca219773c7433cf4f323492a12d4ae769f765f12d25c1d441ddad1754438eae642e70af67edbdd66ef4db8f1a663b0537203554315b151316f5f64d06012f305b714c4f20b3cb8ef1f7ad567faba7c355cfc72c93e1e7afd8577578f0c957c91ec6d7950f672a8fc5278398ad9c9e9741c82064103ae6259234ca69e1e8708e60b0d45e1a6e75685b5c6beae811fb02f775c11eb12f305b125360b6ee9d21fceae3eb6cddf8baf285f86ac1451d5a31d6d1e9ac5bb596c3ec35ab54a7d3efbd9377eabcd97ae491bf20159fbc562d9541a7e9319dc249f076dc1651e00b4c3ed4eb4fa813ea144f5e576d95b59ee44c837b6df9c2472bbf2c2b72e6cc992df721f8699b876a9e47b4b840207d1777d020fbdc0da1183a935dbb1924c86c5920606873e6315b2e08c51d39f433a7c0791deffb0463af404c6f9f4a9a9ee5639e9ee6b4e908a3a6b7e1fcd0e917bfe6d3fb71bf4fd07b4e8c3cd4fbe1fdd83e7358a443e3051535ead9e919185ba3790d18ded76be0769accfacef291fae9a99f7ebaf209921809a04a81a87f605051a3b2ce09f4c0a1ee67b6b8cc026d3a42a9e93be935a028cbbcf7eaecb569474fe8339a6d41d99927449ec9b453edf89ee80ec15a26c4846ea13d0614e1b81268be06d199abbcf44e91479e66621c6447e14e76dcb72cbbb6e230f635b3bf9fa166f30b4c3e30524c776c0e89ea0656f9f2e50bd5329734469d625fb28c0b53bb5a635f96f4acb5d399ad7b15d8a23bf735600fddb9e7c09fd56cdd73b5d65a6359ad59966535ab79a5a2b10a66725c8d91291a63444c8c0b536b57eb17792cabc83061c454f94f66d55f527c61b7ea3e15e66aacc66aacc6c67458b3aec6c2d42ef37e705de8bda6aed180e97a4dc35555f3554e5543e4d503cd9854a1aba8638cc2d8f38ebf1ccadebaade3b40e772830fbe94bcdaa74f63cb411d5e68e02f117b94228f1d481abfcf245ae603b9c3baebbfc2257e8bee02f1d689b4b6c0b902e254081de4ff28b54c1bb4c5e16c32506ba931d8c0d5b27bfc815ea962a8db3ab40205abb068c74e77ef92255c82ee7350760a2fa2503f365c9c60a25ddf57631ddead854c496c6cfd1c2719d1c15108f8abfe550087ffbf6ed71dbe4187bf350f67abad99fec34b43df087b61c4af9b37dbea7d5fab79c5dc359c6f63229e24af7746c2ae2485ba5a621c83487b235b1e5bdf7be8e993ae465f7dcd71bfbbe8a993ab052471a50fee7b4817232914b40c934a517b3d5c4a44b1fa06313932e1b27649808c2f0418c185854c185182814eab024147e9484c2bba3746ea352a90e33e130140dcd93b4e0a2e9800c74706588236c91021b74dd9314c0d51d96a4f3a3249da3f02ec34eb739ec84df645812924b5d354fc2e3aa39ac84c3ba2721c95ca82725f971a19ea405178ae3b8968199295cd27022832050400185c3924ef851d209d7390a3787e15ca552a9542a954a956bb8c9b0a222c8b8c18b33a6307162454747e7b0249c1f25e1fc84eb64d867f39a1952a9549151194d6411a38b0ea4b4e084134e382cc9e6474936c7f9091996baeab09b670fc41d19cf084388293400828c1fcac0c1c1b1394e8679604d4d4d4d4d4d4d4d8ee106478eb86285136b00e18b8d8d8d4d869d4e019d254d528c71841f7ab0036702101a2d5fc48288a2258c2bbe125c883b32954a51e028085d9c60c90e4858a448008a3bd2f3bc28281042073ce8220a1c967837cff9f9ce713f9d4ea7a21f8e88791103323d38a2889b1f25dd9c5467f5a4fefd2829f5ef1cc771310764b4b8a2082a42280da1fa5192ea37afc930ee3887d5fc868d8d8d8d8d8dcd8ffcb86c722bee48efa91f25794ffdfbbe27d1717d19869361088842858b2c443409c2959b9b9bc3926a7e945473d56f326cbbcd61ab9b9b9b9b9b9b9b9bfcef74ef4749a77b4fa5524fa2e34a65984d867d40074618d36587275254a152a90e4bfa7e94f4bde6aa0cd3ae3acc462a954aa552a91ff971a5f20a9674c4fdf423cff3bc0c5365589195d81568acf1a58a119ca8a9799202b86a0e4bba3f4abaff5e9361f8a9c368f26739eea7d3e949745ca70c4b655834a3881afcf0c31156702103d7f73d49015cdf6149f647491996dd3b0c954fa7d3e9743afdc88feb9471dc9147dbb51f256d1cf7243a2e2ec3bc0c8b586ca103117898a28997262e5897919090322ca9fee83ec9be1e9694e4c6759f942405d77d9202b8eee9614949705cdb939294e0da9e44c7b53de9483bfed1f624ed9828eb4831ddb9e05b7427be823de00fdd893772829c000a829a8839096349479a18a59c93d64869a4f4d22e895cd0932fac2f6b6faed642d11486d1053128a9d42cc3d92395250dc6184dbd17c5d85eef453ff18b1e3fbbcc7096e1ac72f614230fcef0d5346dd32e7eb518dfda79a57a2f8c27961aeecd9e1de3fb1a8f8de0e213d4635ea1f15120ead3dd9cfbfaeb83caf9f4f9248fb95379b830757407e2a1695a9665c72f6aa2e67eba1d57d4b24a5b4fda80e9368767afd03447f4893e1fdda13ac2169abe569ac657fb41427c618ecec142adb34a15481b7768ae9147fa7451d5728b042795754e29df4553c2b82026beb0b60ccac1316b8d74ca5a6511f0313e873f2318258e20a659ad927a3fb296c7d3da59b1b5d6e28ab1b597929351256bbc3fb09c72ce3925119e8d3f7136a448452f0b6850119f3c8e3de821f7629d56ca78fb6825f57ed8d7e3891f6a1ac6bf5db30cd71e2974d65967f9da5aa190f7e4a79272de87b856aaf2a1d1ec03fff82298132518440447eb6d8f9ece8eb38778852144b83115229764169b69136e76345ae0ca53084417b6132645dec8e6b2f247aae78b84687a5a6ae79da7591f79684e8b0e9143bf9c4ad7a832bf74aa8c9fad19c120157cb4de0b764df33f15edbaaafad44173ccf9a963ba4077a6acf26dfd335bf33a3d8386f858e0f9e6675942f2f5ef82967cb283783abb01173bd597c4cd479d54d3261830e93ba78f0531dd01834ef04d4c1150ff492a6fc079d1d3d1748599a6af9f1d8df5f3320f8932051a79e4874499c28c3cf244b847f035d1d743b2d8a1896453961d9a48b68c3cdfd4515f72d2d3571faac4ddfc8d200eefd5922ac80701f1757595a3cd3ae9ccb22c0b720a3350e7476d988e9688a6bf43809ac8edbee090189a48d7f4b2561ca394cf78a86a37b785a37573573975c5dd4ff5755ebdce0d7faa3d39666bc69e4f87aae7c4b315bf2e822ccc5604bb2672637d4884a6e983a484d5c8a86f1e524fb4312d1975ad3d62117e783da2972cc71f167b42948c5118b71805d12b462d8492316a9a774815e63c105fd450c071dfd4315f55b4959f6a7e590cebb3c9a5e90a2f5d573fd4f5f9993bf472e993d6624ddb3c6eeb3a0f9f5440452f5f973bac4153541d8df7b239c8874fd55dc7dae8e2c97b5909b670cc4d6a524a2c3329e595555a49839cc20c68b3edefb56b37b6875a9094af5efbd096c33aa4652c74fa28eee6ef33ed51cb9cd77dd182318887cfde3e36d1f7f736d71c84824f764705771c6bcd32021c67b949a9949752cae9054d3a349f7d5ec1a45178ea086de8f0490934205a3e2a325a5252820409871b8c5c4748d1cb142174d8e28b1957bcb8b423c13450c611d250638d3359622eed302367b28451c611d250e38c2b29fb80448b263e20d1a2894b7b52914bcb1815d4c3178f2fbd59480d3d54add0db3a004f4a2fe9f47ce01cd61602b35fccb8e2a5e5f127585f7d40a245131a8a3c4a6f6e59876aae0db043767a41d14bdb5b2f28b79daf5e10cdd512c1d5a963c83eca2b76e8796b85999ea795ce3008d6b4c3a20eed8f3c24e7c5a7a1a871068635e01c5e1770df9c1d886a4d2fe42f2191094a1027e8ec34b44258df03cd18793c07c890ba20e9eb952a4b548079123ddf452abaf47c8df5b4591464d50c248d66d12c8122d77d6c02e3081d9bc018d32f28beb0d53a8a67c8586133a603882f227cb2156394f61416e9187960b288d2f9022e3e08c9d7434f9d347d0b89494510d10a97ae6775adb8ce3bb9f4f4d2f45b187a0d94d65aa9c24a928e1e03ece9f584ece9867f2fc618e3df8bef8d9bdcacd8a169ba79ba79a83bcd69e80cbbcfee34af9e10fe939b67df6a56bd2748eebac946369794ecda6bd34219b60a7a3eb4c6390492fdd0b62accf476eef433fb066a1928b4f5d663001d3d8512d0a2374f5b1ee2be851ce542c9fd7a42294f88fe9e06bc97e6de7bdfe5cd83c0a52862ca176258e10225d7e609e11eda4edf793db6d373deac9793deebd175d26340fdace772a8b53d676d1e5281b58a17a9db675af4e9dd187dfaad32a6b3570f1cb271efd29c7ba86190e523f5fad46b66d95cf5d3b9e9559bd7a1fba1d4379437696ced37b36c7250517f6709a99ebaaaa8bf7ba07d054f47fd86de8098eeac5a6151d3e49fac0275c09e1f79e8943d230c282aea9a43af014559ecedb5c3ba8811ada8e7c69de8f610212d7477a21b79505d91c6da2367a4f196b5a2c639b4dccd3afb1cd8a34e7c5ac7262c4a9a669ca5cd4c2de1e2c1a02471822f30f96294314a057cf1616d19bb40b1d4b1e909241dc6327adea763d3134b7a9a74e9c9c2dc994ffa2ee00290a61688e9f99ef7000b3ca458b1a0e71f691396a0a44f76b315f310dc8a4c8e971a189ca8d0e9d8348510388490438aa62b4828a00737b8a8b9c2c48949a7440a1c4e639a6a66d06181b34453143db03a365919d3aa262b5efa4650944f3eac717563634355438373aa828b09f8545d54fd0449099ad2640549490cefc308a6ed907d005a7a4101084007a0ad2db2f6363f910f2b6c4e2ba59472a59c727ece0c9373ca39e79c734a29b54a435a2b1da294e28714638c339c3db34091ec4959cea105973ca5a2075755d75a4fe595d22aebb5353bd0fc6182b4aa5a7e485ec5d3a19440910b4b2aa9142925a5dc9c45ee936ecea105173e96bf6076095ed944058aadbf39a4aa7b33a63bb2e595f705c517e201c803cd3ab31b4ca9a2bbc653984819d354e65cc83e7b965de1326e697bb5c77962993e3dd90b4ce8edd6c37dfe5c0e89aa468f656291542696a59a83939431a43cd161ba36e1a4b19c4b13cbed41cf7dc6f8303de53f0af4e4001b0064b6ec9d409ac2050c325bf674ce3989a49c57e89d73cb58e40adeef455dd4bda889caeef426ead67f5e99b38a6de37e2597a22d462495edf3ca3697e6e4e69c4b13cbd442d22529af4c9f94cc41ca7cf66d6d4fd0f605739aea3405431b9a3e6e924e18a5734b8793cbb22957905fea9028e3b61c8653fb0c89e6aca2e725fd7d26ef6544d9ebf4493dbba732a393d2ece68945aa302fe54079da6549e5a33ef1c3a79fe6d3c93b7d3f719c873af7791c2a0ba16098435925c3539a68aeb959c509e4b873dc101aa769138b67bd890583b639db374269468c1c83817027909b58a40a9c068a9948cc4ca318c0f4bd3603a86ba8e46c3695452b1553342200000000c314000028140e084402914834a2cab2da3b14800c98ae42644816cac224c7510a19638c310418000000030032b44d0375163b491ca61d9e8fbea0c12558b7eb7a864b83014bf4fe38891ed59a51b73564d0144801a0cf357b5b34b921fbd254eb622db827c518dd8211b24b876d58131f232fd0336de990d1d8dea805b684316c7180a82432048ae32fc50244d8d594fdc4a401d785a677b8d6fd7e3bc87e2c7ad16cb9cf180f94bd8898a3b3452d103483611187b7170141d1d992369832cb3a2e1ebc79430390cb9c9809bad4704676b70bd9c1e80f1d0291977afa8cec46bbe9a02157d00121d73c48d779432926c5e2562198dc8b29e1264a909c6ec49ed62681fd7188e0779650c5254a56306cca34ba78136158bd9f079a736d992a06103f516648ad68915d81b50cd0e31ffeeed040c95d1d8be5f8f29de97386d65c6ff2390b7898efadbd07deeba4c60a7f99c5d9cf45e857fc4d043ecf41edea4751e6f7323c84bb8fa28c5d12d475083438d08bf411413907f51a0fc0e8bbc76c44bd626c1743cac666fc8ce9357eab8c44d88a78ec62e0962b6af486c54e691a8637a2eef47a1cbb6692bb25531b2345425f718d3422886d25c08ebedf1b0fa998f246b03342b8396c992e7ca9f5054ebe195d261faa2cbccef1c89171609bc2c5e9e4551efa6e4bb8eb1c2eab8efd7fc78a6282bb93e63fb14210e18be14d4823f211bb6a6e64aee9fd56708368d0ed931d51eab07d655b2e149346462f5587fdc2da0bdf484d570fadac7bca8b8aa211d4f19f4b052f2efa7602fda27c63a1c920247473192945dc659efc611ce9d8a70c89dd3edb0ed5c0575508ae3860cbb48873318ee78c333bf4a504c60ce4ccff1b930e88a24a81bc6b212978aa85a6809f879e6f835268296afefbb130c9fb5d2411699ba3965d6b4017d30118fdb3423c12713ebac899efc1d97bda79dea632dfc3b55a178ab818aa2cf86b0ab9d4c801f9a435e563a66c97e106d12396f1f24e6ea72992521fdedb9021525d944d8fa67a5531ae659657cfeb7d6272a6445069fba82f600c928e14089dc8d8ac26005db496b746352c0274383d81616e6e8c75c184a135bfc39eff7f604effcbc858ad88bb540230dee5b50309dd6943949cace4b379fe5cf06c36e0c003c8b9614d18a64bbe5f58bf1bb016d84cb35e2337a2bbf8778963b4cd94673d9478b0110ac4fd15556cc77f015be3279fce630c657fb07b8812463f7652bd86268f7685091113157913d6e9190830d9b38113ea824347f024d306dc6ab1f3315e7f26fe196880cd9a72b80f3a9ba19caa40ac7a138ac76699322eb1bda7a2299cd4c765a579c4f0d9f652509dd0a186603c9bb8721013270d675acf443b018ebe5372a36612f3d298c4f01ecd1562472b02afc55fb2b26d5ceb55a6114ddd0312b88db1bbf246b91041523e66248308e39a6d0bd67e68951a1d55ccc567433122844f004fc26be16ef750b076c109615d85d90bcdcb6b5e28c8b3d777094ca43a689949aacf6deea656ee2cc61ab457a9725758a745da89e0e6a1cd645117018dabf8a1df541460a44d53295d3513cee323dee11abe250cb45989c13405641aa306d4e12514fa483611a2feebb3e9bd5fb546e9e5c1fe8c3c87ca0768292c9422c754d0bd685a1d88082812ff620de32819fdcdefd7d6432f6d88f2b224150910ef640542cb11b8d12e486cdbc18f6f7c47417c6249c16725a8a04c8d5dc1e1460bcae456c00057d9a5658942522131f7a50f36ddb3c2111011e2eb29ebab1775c11e5a01f24531c2320378902d49caf49e8f86d6b9fc48e181be045e0a3486b7ec10dc3a73f1869474fb80971c937122523fa029a4accaa86aff95c57d62c650f1bd9810f1d9cb480e01483779ad5e8483668769be421d3fd6e1f056ac9ede35d77945b5a91bba5fe46b296d4e93674b2e7ecf92b360e06306a326d6ab1e2f1e2dcc87333f177ae0929449c3a17e24e6689b9a9aaabb94022625d60769ad72d52b396a421f731df0308975334345fd9e2d705a4316e6590cc00d52cccc8b0138d36e2e7875b0b0a9cf8bbc6cbcc17bcddb1fac586ef94439434e2f6ad1e3d20065826ed29c7d56759aa8d3eef853fb0e718b0d4a1c9026539fb5597fcfff1521d9342bb382d597d4cedd3618e01cc914e0498292cf6c6afa3e2ffff0e31077c3f7db094bee79401d143603ce51555615b6d6b7a48062691b2a1b739c40b9c2fa94631e17edf37f00ae7134793c24d4d2d3f229b83aa8b000982946db663ebc432088eeade7b330f64315da0b724f78da750c0a9696150aab8dacbdb1af10cf8a19ad844a7f74eae4a1bac23420b67e2202940ae254055b9942288088891614985a8654d65cfb85d5233d26984267e8a5770fb00a4df57c80af600c28c5656679967f5086a41cc0d73d714a7300d5de75c5d49a535a4bf810ff714366ccd5bdd02e13068776d2e4435a8206d2cca1408f87d42367b575a7f0c65da9c5fd84b846966a3d0f68f097fffa003928c19c62bb2e2c65d090df573b03f5dc861da82dea0b79bfebd4e843c18484a3eec10f1ed64f143a52e642081a79a57758900b9d399a3100d9038b1e852009eea94e3878b3e8f895eb08c407449b9d51042617c112c454ac7f2acce1931ea7409d163cd4677194491690af4a2f026453d6af69805642c863ec0f272065891c9332006ee12c0a1fded0642e781df3c6929092ed1360368d257f2acff3b6d968ef176be857767edd9394fc05e8421ee315088f3725fee3b8258b5c534326a28037a0508adca130237e9eec37a4b201b660d94e9af56b5aa11017ff4cb1dcc683817ec0f92a817ae7761bce081a14b01726303b82349dc4aa3bb95a63c2b8be19bd1033c03800b03a1141a69dc23486abeb135e6ea2278deae87bc8466ba66fc21c373732481a2a2df683b0e7662b8f7dfb618b88d99b4a0bcdcc295f602b2eecdf30d67a39a05557c4c37579d911537b656a1536ada6e8609a9d0f4d520ca61d1974722dc545a22b48bfe857b497cfefec4b1731db633196e2a06755db5e7db8bf7f840f5c7a8b2ef69b81f0988cef0276af5c42f6a6acbd049ad76d9b9a97ef8c01c6cd86f6d0b1e9d594e89d002d82fede1b3e70750c59aa3563ae59692004772700153fdf01b7dc6ae23ccc1940181924e64a2ed2f3edbf92dd025b0eabf6b4a57506958fa9ef4c4edb66fdbfa0f8ce8822bf5be712414522df1066d043895d949c28e5241380712cce4ee3cd1a62db6d4f1e53a0dd3cbfe70871af60f0778bc7afb8bfea062d391604116aff686e0543a30c5a5824ba31712d9e1431a48a81b9f80e6db88f32fa6b75c16f7b10315053f070f32ca96f15874d25e28115145e990474be0bb1628c32f0a42b90231a0d24753fdb73d85384f18e8b2a00b5261682e77ca61c018b4d07e90269d8af809a6e4615a86d264fcb9ac70707533090304db5b6f63575247c60e61dfd30e49c8271952ae7f431a5860b1bef31647f70020b7d322b9b74ef0a9ed6c7a6d40cfd310d028424aa7e1217c89329619fee28a3e93112921ec633143f2403e01aea013f1f9cac4f04b1915823ac0bb27bcc730708ae091e9a481da86ce5836cca045a13c32f9c7c2ce3e35025201a1b00c83593d05fa83d611262680f7fda41cc5d631f486dc32065059e2f4af128f13da95130d21743f2ab254350c202ed3dc9aa702f4748ea1fe84c73025a32673dd952e2bb25605972d682011775a6f340eaf3007bd2745ac270b3dee0a88d75b2c20e0ecc37e00c71aec9ad23d31714f368be5358ebdbe2d3fb6bcce6ed0cc116415339c8984e3f258deeb4c6be2f211cf3a2f3294d442b574a4295c6a6674a571460096569ef24bd23806fb16b15f2bff4366a3810aa71b114d2faa016cecacb05456c7bc106b6955d0c721ba272e928d8e6b7b3f91b9e8c6dd0ffaba64f72c3451b01809c6430622144a82389229c41b5bd16d7118c91fb297500108e84437d1fdc788828aa288712305b3e89252afdf8640108670f4376a0685255e270aa6d12e70f08b3289dd0bcf0ae369833a331d593303ab357950c3f23949af912e5bdaa77a6a4f6d1e9af0fecfaf3a8c345ee059790dcae65ba6f2c4680a4c0115ff68f2b384d66786dca0a7cf0980618d361fcdadef1c4ed3cf0e368a33b6a0c863daf7ed1e96ba9a4e2a09d7cf4e1759b385a2cbf9d5908dfc16052812e9d5debffab6e11df8f4b38d14c39f73f24e13ddaaf16b2a4fd838ec6042697b90493f297004952970638496dad7f1248fb6ca03f212a65676cb3e7bdea5b4349baafd6c73ca35da35add67f94ef5dfd9e521a51c6b08363b9f6490590532e93d7039d4cde6ea0f7652466efd3cdc394086f0e55afbd8bd33894089b64ad7429bc4e313a2a26e3a6b62cd5f63280b426357f838ec83aeb61f3260d2d3456328009aa240a904a48a804c942f203285d006ea67652727e9665e9cf753274de14210e7bb5294ad085d782157c11e387a95ae09a5fe5596d03f9672531f976be38cc91c0400e238437e194cc9bb6ba3e031e2a149bf85bb95382cd501133111f037f37e73e081fe833f10473a594673317937110e69648237978c948cf35733c244185b9651a44f7cbbda63c6408e82b9aa4fdf466df56c30f002df392b287a7834f28f2346b433100f75fab426c213a5c00d6280b812a01b0118cc213e05d712742e40e763b3ef27c67132e6801f8aaad04ca31222913ad0c0132fbe9f4b7638e61be54be783d91fa01d26e798d39e84bc192c420154abcafa8547026f9e829be3c20a4b9365ce14181258167aab87b7ad15bf0e1474b13f7627c73cc4249898ec8faa6eb663b793bef0d6d053746cdd3c474d6db42669a5ce6cae37901e6be591403769fbc0237849579015335d072f77821ebade468d0b7dc2d57aaffa41c85944ce21055be0c20561841472a6ef26198bfd1b852d56e89415c796bbbc52b9b5833a8326eeb7b4db93f097c3a0869ffc3d5bfd4fce1901a8d357dfd3ab947be77866123f802362f8f4607d2368e2cb27e1653a6b104913717992508a59e6a3944e4d902d61771226d3c0a68c145c0b8c04d8a36fd4a3e4976160fe958b9c76fdf8942182cf3d2702da282facd7e8941ab449227a442362cc84736cb89e3225a3972307b91851a15532c73d59c1d5623db0c1e287bf3191137622bf33e8771e10869b0d48905bc2d3c3357cfe5022accc398182420853e1e4f5f403d2f7e84b7f6106e33b4fbd87c1ce4e0bf612ad82d4f885c5d807ff635adcea440651025ee2489cc7654a8dc94d4c5ec760861ff5bd062bfbe5db1f383c34b3fc58240362978f9ed66dd05759d1d68ffbba3488774d12b88aaffa5a51c062c3c37f128cc84423b1334cbdba21a400345673d9a44edfd65241f645e5e6747d84703da3064621c71fe39002dbdda57032926b3397f844fbd1997817333fe42201565635169aec92b60840036a819251bcd52ae86ee5c236bd2b63884bdece31b92226fb1caa4626a231da14c886943d2cc60f675a4071339c42706381efeda5fc5950ec2d148050d2b71f2b821318a17c7facb4351e93b624f18815eae7ef9be269d20498f4ba6adcb4917e815c4c19a0f8d4aa46dabef694e6770830f104b2a3b4e3037916df6623c055acf041b92930dce0378adcaf3aa98422d3ab61a14a71c45aa9b305299eccf2d6aaf819d8c6fef30321a42f8b21d6e816686c3a6b0256d54747d01bcc7dedfe6dc89fdf312c9ecc01febeb9226005aba7f54376d9718ec2e248a3fd25dd087dc3d4484e5a78a0a6eac0e17d5f35c5ae9331b272c47c4ae24047022d594602402442156bf25fdcdd6111d038b31668c32b05caa22b56ebd014f33b4088614c804b3ad07e08b3c9947153e0a2aefa8e50b1bee23428443806e3e89dfb763fb1d20256c2cf8fea30be7436110a23f8d92e4aee4733d2d731c05d6facdd376b697aded0ac77be239e4d7cb4f68c064c90a4b59a20a8d87a0736059087b55f66bd95168de134c633edea0d2865b930736423eb5db52c8a3112fc300406eedb8801c34acc7b1fa6212dbb2edb20fce7f9ad8c952ce5eb92001518c8987efa00cd04ae78ff20a4eaae06fa97e715e57a99b26a9704a28392ad4f075fc0639d2162cca91799d2d63fa8486a25578e75855d062e20f35e5962fe37031e282cf70236fdad352607ff5f4f9d78cd87c13e3f107ad85d3072853d772ef6f7adda8306183a4d5499c125284da708ab10668c5bd3ad3bdcda7ecbb09b7214dfa9cb7983d83603745a982b77d5339cb9408c56cf0c1ee0b0339a5e96413a07dc72f49891b14616c7a3d128872a92d5e56159f3fa2349a30cfc710d888e9ae46c9d37e47355484dd1728eadc1c170282684ad33e4c5e2bb580afa27f2d0a210db35be6ffbb19932a17adc97b143f7a6368f8c2f3a02a0ef42900ec8cfbe866b4f9a4213dee8cd961e6c5d7b47f3834129062e36e48184884ab28070797336677bbf16a0d2d8b834b45c80edcd63418106461f47359206f079f346eaf8602404defc50eba71f22cd90688d68d3a3faa8887fcd6dcb6f43a276a8905f3163ea493603a3f087da844c1d6d3c36495e15caf9440bb318d630f81fe1f65f7dbdf5339c4c511f4ff2d38fd0fb1299c58e35d7cc0eee9479a6cb501d03b618c2bad004981e40751fb80678f3971ea03400b6e7cd3f5a01569df400b8afbbff7401a485a80a3279bdac74a7593082641b2f0473d710ac0db26a00c9c41df49f73131a241a9aa93f0ccb52ca414dfce02375a880b208849a98ae471a14aa2eb16e4ba15f9c2edf9e67da0ae064c873af6df9c1f5316ae0e8fd9107f6142768d233c9f0945cdb28085962e7dddb71a89b46ceb365c648570d204c22a0818b35a09a377669e33d339a124d6439978efbec9f63351546c029a92f04c9bd26c527e8ab4c8d2297c11fa33f010d50ee9646051d13782b6cff19e8eddc1fb8b0948dfafeb10d20632a2845e96896dc492a8be76893c696563ca0fe14c20a4bb4af049d422f70033738fe33406247ad6bdb7a24a48aa720b941b9e8035201aa2bec4260c896402c0f125b4b4002a30717977bfd62acd38440f91404a46fba6c3727e5ac4a90e4358c2c9e1cb84c66cd5e7b6c6fbbd21742539258ac7e737f4e7a1e68a39611d184fb3574f3ebd80ffa4b15e287de279b319e18d242971c20de256605bd4eeceb70f4a4eb75569c44c11728744fb7e8833bf80234d5cea473c20c56f2e8e07a8bc3a1bc9d7aab842df4f7f493b5a778fb8a09fdd22b65d1860acb02256e7cf42867a69136dc77d40088c3327e0f0152ad7b33578af93a45b9e29c2a9d82926576e396e7d006345bb44856219978b51a491c55093bb48106e1784c9259ed276c0bc73ff9b1a7fb19eb969faef4848b59ef1b5bf94a085c4c02a92308428c70ce745d03b4875a84213de20797f4a1002179740c16203db44fca6088c6169ea9b7d8255ab88d96d800fdfacd189b609742097b4e7d8e05952143130130cfe6890c25209bc4f22b2716942f8a1b7e21e7f09671ca060dadec4e688c38cfd02b494602b435b4e038d1283f107cb966f5ce790a3c946b8dab7847009326832050b7998f00fc753d77e62edf564fdaa1353f89218d3dd917a591230128fdb98bed1a871acdf6fd2a4ae6bf3d088520f84129cf4c4e808f445d480276d3f180ffeeef2e55f14a2cd01ae03be05e560409093ad165a86a40c096ad889f6612a306bc5a547d3e2013f80392aad5026ac399105efeb6324546211ff6501b4dddf5dbec65bd1209d6b01d06a6d9818047cb1f6404fe7c805aeb5d5a071bc28a4ab4b8f511fb371df40544d0f20fd8f1c8a97a73a3ad909c57f76644007cff06b1e2bb5451f2ba868949f3fcabc1c74102feef370b3ee5787cf8041ab7708868672ef14d75dc2d26b0284f484ccd00e3daf691236540266bfc6b9a0f5abc1cb6f488b9cf92a54e42840a234d0cd419c61f1f96335f566d0686c224c74142120f040c5415c63cc6c04a76e71e41b73c7e454a53ed4b88de1f5fca7e21d4cb74e032817f8ca07f3edff7af31f0ca9845f3339a04e79114bcd970ae48043412ad6e88470d932750131e405925a8b7b113d17c9afa1729a8040538e1289d3f3525f067302529cdabe044b319ae498fdd2452340e942033e3f8a3d7ff822c2d681cc5708a7ce215f17304bef44c91d82f504635f28b1ad811e395ba18aa361a7cdafff20cf1ad3853bd57100a9afdf90abae2b9e9b9b1ce195b292d5a2050cf57c31ca839565f70297db86aada8bb6fc6ee2ce83b769027b020dc97dfe0d862bb16fa15b49b1b772cddfa3a9de0e59eef9925583897be33d47a5fc101f1e74a88a54fb892a6c286712b6f2a03e0d66b9d55e052fbe6e15aa64613ce323f64840aabd4fa590cf043886a1a60ef008301ce05b50e6ee61c7a5e3c8aeb69131ed81f09920490567dec69f0e847af0f457b83f41a08cd0fb78b54ee4321a4137c49d4d961f76e30477ca534fe72adcaed807fa2bf70e36414748d82f1fc20349b1e9116a1577b02dcbdf34be0811511487d2103f691e87fc651f818fb36036ad8e24f717112c11488ff682cfae824c2c1eec05c851068eb28c7812b4ac047883dfb5fd0703481707d609aae43f30739a121a580c4b62d5460d2f11d048008cdb3945efaa1b87be18c4b9e0763444341ad85c70eaf2020900aff542ffed5d672d8f766a4b9976460fd60179ccb2909147ccbaeaa80fce530f34b85b70823a9bc70abd9aa3456dc9c56060358417bf32c36a74102ac44df030b6695698bf9f46a6bb750688dc21572135a1da7e1377c7bbb80013c8a488c8cd8e37cdf60461ac0d0df30205db5be484e4f05cc6d6e9b0a82cd6007419c9c1132eaed71f152b10936b9db32b54d15e43dcf299d3207d3313bca1b11dbe3d7959132ff5886e9f2c3bbef1d963a590bb37c98c31bb03964f8566662df30b5c08e06a47d0eb185c140a7c37161cdd749f83f8860ed497719d330ac7de002a5de1b14c4395a5048479ad990147060b80f19f9e0cfbdc3c11edb0ebb684697284ad740a15b2797d4641dc3aeb69add869d1da42fecaacdcb0d8588b1c3d6da6406d03127164b24406c7d4ac8e75e3885e234a09d1cc59e6ad6fe10d88f739ab12d04ea33ab16c0dc243780b2fd43b53315beeb855b84489dda7b488f94aa8f50937c516b45d9b1341358d669352cea1444e306302a45c707f190fa016f48c503b98c6e86ea9fc777096fb51bd4ca0f1b81f0b2140e3dd14fe530a8f762bee0cf7094d6c0a91c73e90b1a6f8840661e368c792fd6a2dc31c5cb48d606a762d6da0547b8b5b071ed74cd9a8316fadb4614817a89b741c419f4c9f43e18dc20084101fe8545815d4edd409dc6a493cd0b9cc9355374f5be5e7164271ec08f431bfe3dccd8167d935f9b2559955e8077dc110138d65558ebad286cc636769ff3473432fe2589544060e951876fc4f187a07f4fa0912749326c797bf020e5838190da7af2f883b9510b3d2c93d757251cebd827a2b37cb369f6915db8414e2133eff9d1552eafaf5e8d9d9c684e14fc73aca6be1c32075647f04da70bca1993831e6b23f1be2fdeef4fc2f6ad488755e343c2fd4c660d872019ba4c30894ef45b80ed962addd082c8fd7b6ca1b19722524e98d08a46a52e82a557dfd5aff20b67942934552a0acb3b69d04de0bb8dee8591bf4a86b25e87fb6de862d013ae8c71665752b2305129609ace01395d336c8c9fbb2ed3091c7ca81159af57221b6d77176d4704b43d7c70d0b8ab45c943ee3978e2d224c0143fa99bbdca52814076d6c9292182e922394162ec76f0e5d155f0873aa91a101959622c41b5dd86eff8f0d2fb13162194517efa23a524b6d8351ca19fb749764e06413ce896497865b9424488edb3efe6be7f14a6b1f28046023f91158a8f991cd0ac348d9ed95fc5d678ccaef544d3b720e4dda23489ab25f9ccc7bcf1f8f8deaa2937864f2864d61c81b4197222293e5a6da542654c0488a2bdd4275eae236521a5259e2eae1d0084aead14324ffc19db9368e6caf0642de640a56e66c1646d0681646d6681646d66c1242d26c1496d4cc1c92d0c41c9ed4c41c9ad4c4149ad0c4149ad4cc1c96d4c01496d4c0bbc3650792131925cb7022cd135e7d87e0bd1bf37c3fb16ba5c07c5eb18aea9693e7542423ad6586347fd121a931c3651321ab1cb3940d8736288a347c640003eed0b603121c5ffd3c65c68a90d57df6473cf8c5be13f9a65c15c3ceabb215e0f3ef9ee488744f3a314693ee11ab076e80aad6459b17a70eeaef11eb5cf5b5f957f6273d094d36f8be3fa48ee0ee26d88e2568bf63ce24ed65173aaa93c6648d66f986f57c5cb62ad47352b738d75a982da758cf424f27cbc612cf9f43f858db04aa8ca27b0c49748d403b0f6df01a29b4d3662c37da957e5cf1c8c705c4194ba0002083104625d0c5e749a8f296ef4116de9d8e996b87d63591569d2be5c9a5a16998cb8fb750794d96b03358555e6a0d9a278bce53bf767dfd9d48eadb98c28696d7f45cc69f2e5cee4d6908744537b06fe52ac266a38e9a53d3a195573dc057b7fd72fdd6345d16f808120d23baab763130263917015999524060c334d33e2786ac9f2710fa3251b90d7f468046e2375350a0e61b66c60738894470278b7b0ca36b55ff1ce75e8e35a110ff1fcec158f459e3b35b570ae713fd6ed849f028788b781ff541e6f76fb08bec4224491bc67612c0035b77ad654893e2559966091ad93d4faad1fe515e558f6ad03d05edf84af327ec49c81ab3768c8838c39acfb4409308f1f044c37a5a93a5e1c063090df7a0874949f38b16d8e6ce515ace0674a3a1062f8a6a9f24ec81e33f2af2bc955acdcf144d721c63d6732925fadf7f416a1216b0965db8ffd282d85ad6e0eaaf4064d7d7a7d469cdcac37aab3439e0a8b413183582e8e6a2dad5e1bee60603611e4fd99e349faf7c57c742f9a53d345e3228fadf6e67f4316528e5110cfbfb8cba6b805d473f30863c8111b273e65c49bcd85552a09daff1375eddd21073881fade3db19f784d490c8d3216d24b5e43745263c91c6444670e3a049184d8db6389511a750212fe0fcf64cbc119c4144dcca70c1ef76bb8e7cc49698b708324f9f96b151d6c14d7b993d0bb890ab0e1b84f2238909bb9e48048b9adb0a9ca05190c7dd94ca465ec16c7275e85d9dde0eca25a4f7c5927401e39c5e6d2f394f2b0c8a6cbbdfaeb87de197c043880e046da1811d18635665a689aaf8553a20e3d9b4c6630b0252af164929d9daa15f33c1ebec2787c367f6986d46455b116c28b9cf14b0c1d089cdb7ee976c6b4068dd6f58f1ccc8c5202c43bdaceb48c8e3f233546860ee9887916d3afed7f66a733d129e837af1a5643a2c145a908bb7ad59679a22a5e3f01e44f9ef85c9f8927b6115e6d98b3b659f40d4b5b5d509ae410c508f9a6bf699ac3a7eb4bdc6096f60f83c1ad0bbbac0d9a43fb5220f0a111895cc3cc138d79cc6ed4a031306aa403a709917e93223b3ec48ca5b730db4189701b4bb2bdc636f11edd89e4b323cee0cb0ef2b4292d05d4899f57aac39b177a990a12dc2d28f70aca1544ecb38df86942396bd091aaf8952b10a7c1324e1fd15ffbc7605d7b0712672a7044b1218fd9a43f67d78e2ad0f85b0a263c09e8ee7c83362637620872526f375e9883ae168f0645b0d2b212aad1888793afda1e42693201f89035095ced84e8391055ba3889833be972b1b9024e47df7d6729dfb013966cc2e8a7ae07da5cd9b5061b8882540b89bcc64f7625272cbc950357b73088ca61dcec6eb221d449be83990f8ca6af3ae2ac26fb778371df8797d46cdd5aeec9529a6cc61b9ae3ec9146dedb866ff78f15ac6e6aa3883b656fbd448bcb742438ae0958c02165f997b9f9aff6384473069019679e1f5913c957a013bb468f7c6f69b259dde66e46fcff03d6f913970091fbaae570fe24aff70962e96d4757854d36546f43247ffd05612055dcfe50886a1241890a9666e75ad22fa923a439d40d608a86db2236eb7c96df4c2b84825ce7a6f56d1f8727f8bf140901bf43540cffa2cc3a140e36328b6a32a73e90b275e3a5e6a4a9afb5a93beec54cb4e91d35186f8b31d0a720202afa4405da0b7fe9db63300c5498d5b27128e2775a5163267002212d1b4eeef4e8a62e55629eb33fef19a4671868f7f548d310b07879975243ad33ff403d4fd88629b2df8837ab6c0a442148bc0496372e33ab221d8c43178c4319bd6ed499e1ceb52b2b697a5ca84b3d1ee8b069b10850228f034e59e11dca6579a6f10d1e3554939e84f989df6be4b11f041ef8e2f7978f33189ec60a3115256e8eaa83762ba2e57d9ffe31deeae211a8e8eec0a5c7e9aedc8437303731daea0fb48a0954bccc2b835c8f25a7ee5aa503fdad99531ba6de7d43cbcc5059ad557435fcbb05b586a7f319dbd578c64b9231aa5f889c0b493b0e08fa289c8603438ee8f348165725f1a02ba35af968fffd123bfdaadf66e484b369ae4f5cc0e2c1a52480f370c7792ce07c0f7657ae78f07f4e03ab8299525f8464dc96a27882b0f1eab818a2b610879c7f8ee278daaf49c9cb94a45fd61bc2e7492617db41cd75141fd8aa228bfaad7768a2ac1cb2477056373d561f882da346a40cd8a1d227bf230a1d6c414ced3c9a83069c22251158d7dcc485537a876ce50a0f12032279ce182430bb109629cf7974d656e3f038da6f86ef2e66ab01672ada498fdedcb258ece5568ea52f5e7c956e6f7de095f456e3a8a4e74987055e1d923c10a4c8132659b5f1c02228d93d4aee3dc56f6a8b7995dec6b1f5b227723f2fe33189d4032a72f15b9710a3a71a8c0269300d108746be4bd14783a50da02106bc429042349bd4e84321ad318257a41d79ee401baf84731dee7718e671e44938a1de27164540fe4b35c6e7c689c9a4954190cd538b54120ba814c60b3be58435b19c92422652f5cbba449bf766685db3c187c5c314f302da8ebfcb3b754d5fd2e2410ab17b9733eececc62d3b29910e6c7dcedbc34ced18432b3ef10e4f5a33c748d8fc3ec6191c220b1943732112929e58beb611650fa61718997119f5d2123368b32e2455184100beeafb56520ba56b5c221e7c302aa5063b1b5a2a4697552928e60ab717dbf1dad16140449bb2cd88e8ca43913d6d181a7849a24595319caa053f0de8a13614eb9e146a1154a18935caad6e8e8a129819ddcc892e9d68338775d8e7f0ef47cad364da0cac58ca45797b3e0738d4d037eeafc7d09be8b1569106b115b320d218a8965eb2f4f0e3d9d6013bd5fc43108ff46db5fb529af42404e0fc86c7eb886afab4b38751da332a54b24ed58571795e0e6283acc97f1660bab5c91dea21d737bb1994a929489540bb116a9d97723b502a0b98580b64144d390c25cda708d38cc8e1b45f1513140b2f958799fc5f42a472bbc99ad0e8c2e6b2623996f752096c40e832801c67e4404d99b421c2a3890744814f48c35709f4c0bfe5f00dc893766c48abb13d34804626e6051d504b5d000511a269a880d802dbcb8496978c560f336b748ac6de468b37df053ca07036484616010573829baf290abbdb7d2fde91c02366f4ccbb98746e04ed6149948353bfa07413270a9fcd233c32d2597c7f341a47e564f154c3a8927158b18f737505dbe90364fe363022b8cfcda3b937826e573eaf4c88c91ab4bf1c3232eb8ce58ce69104653b7353ecd1ddd6734e64120c04e5237d38d12b5479556a26eccaa76c5f5e7137a049c75004a3d1cd36d1405b18d5c0e2e09ca7b6bb4ef5a9184c995fa06df99e4ad442722077d592642f635ab72fa68f52b303530849fc821b486e84095cb063fc1b85110325b0c1243197b994ec275d9378415341884cefec9b26c83d59c6e8c7d1ec63d14072f736c99f94964e14b0e8860e8e3ba00bd70f931a461c42a773d80f9a113026cbcb0d6ced96f53153aebfb48b800028d8d2fc27215d6b607c79df163afe02ea7af4b9e27e2c6c4d28f54b8e56ec46a753391e0612769fbb7b0ef8016aaa4a16c21ee8f88e0c2c2d792c90f8f63685b96a009f7782ed504da8e6f4cf1b2f13965103cd0c33aa138bd7851d8390e05f4afbfc112f078df72838e0a92d62f84150b413a7acdc55f04dc58a086c3d842d3f6954b799cb44c5fcca5fe167896fb30af323f2da19ac7ca482e95a3011efaa321231a9414fbf5f5e4a59021c5457e79ba7949370436313e7b31448fd5450acab2381e0b287127978fee2f5a02894242ab600b46e8f1ff2fb2cede092bb6d3d87aa8122588cb3dc2dfcb83360c09df0c9bb186ac54cf1b3d46146fa27ff11a835836a072b08ff9057c23343e3f386c0586f6a4776313aeecdae188695ca5b3bc5c146a10e0bd5e0676557453a5d72642cc4e16427d448174852b74589253df6e782b49131a95aa5b62979daa45844f87f59e6678a181d189a3eb162deb101c9d79c5aac1fa98c140aeadd0b81f0aae2daab5ac18f0cad282157b453fa9af82bca3b8bdaabd8b7b9d5d082faa0369a7f7940573db0243eb5d85bc20bcbf8c8b118f8f31fdba0276bd6979d9b09aeb5b5c07a801eccc06ea788d3539d0516e25b570488fe917e36aa1ea48ff07fb29ed4ac90ad8c8885df7d712a6c4fcc4dec22593e03bf29e18b4a08c5a4a575b91ec402315d0082585590bdeec2abe6c583fb100821f4ca431add018e0e788bc0116029450731016b35a549e591296449a054782670b4659d99baa4c42ffa3c3f7bfd341e4114b2ef4ba4899f9693f473bb964fa2230053945ee4002211f82566e5d43660f0906383eef2927de96de6a4d9bbc100edf325de1263accb4d421e82e637b222e08c8684eb366a07aa2a8a8946f71908580633de34f4a98afe0b4225bf9ed3620ba721d05be8796440383bb9d5ddb1e0d912fb892374a1f3127e4a29b66726231202214214e4d482f96ef5dd21f852c4e9b81288784109cc858344b49ff178bd2a5358cc8c20a0b551acfd87a6510ff0c58949aa60653266bb37f87fc8a408a177b5e567015b8e1463fdfaf2a21506c2547df9cd3c311260e923f160637a198fa72126ab16d0b18218c0fcd533c8e1dd17f131a0d3cd5212aad6016acbed5abf1ed3081419c0de9226ae28495abbf235648eda10200cbd8c4626845b2d641b939ba01f6f394586d6b19906302195bc8a683d6d888ab13dc8787804bd946a0f638f0d5247f3f570506f5269d9c61313d928564e1ae13455904dd4aaa85e9a20da9b5f1e56af1a0c314e73aaf9b2471423777013ead378553d301c9bb2e389b3b7e42e764310bca0cb71977dc55e5f6a3e4cec52efc1c2783b03086dffb545fd8622bb01381cf1be9a40386f8886b98b884d54ba395e313280d486f2c699f0da67789f071a64016971098eff95cf34c2250009c9246414c9cea1c6f7e4cd75bacd4db247ed4aae2bcee659bdfe6b97bbc623d3080cb5c413417f53f43d009126a330b9620e8d6cc6a2c2dad55454855b86a3a0bf6c63c7c658596775ddef9f88b987a4d652529b3ff4ac17f31497ae5a246b42b3b018c5b4d618f16514713b91bdebeae4f45a77683cd22685047302470ca04282fb5db32381c5807c9f2e52ed50a2359d873cc8f17db81b5d0534c1409cd2c4a6d60973af2748cc98e554dcd42b7ec9e6869e291f5077184862c4faf549e73524182f1c6c815857a51e033a2359e02555f522b808088d08a45460e79f4e6643dcd626f13858b209ee96ef5bf188e7fc6eaebdbdb81448e1eb3f0720055bebdc79d7d8a5b6760728f73d04885a0273d84257e2adb0d734a4b42f7eaca6b0bb5f86cda6efb06e49debbfc889cdf222f5fffbd67ad8a2a33d5acc4a70bc7348f056e8675e7e5973f8b61f4d65519eade4cd1684e5dca07b6ee616c5ca95e0c5643043aef9af306d7f10ff15905a1bdda42608c942c34acdb14abc463ae03ef55b1a5d7f792475083932a151292aada22e48c751ad240a003a9b669a3fa3b417a4c2c8642ff330d1b084d315222ec551ad0c97ba769f6fea756089b57e245a011a678af9d41bc02d49b7dca252aa2eec207ad64b2ceda9de23fb87e57bb090c46fc11b0c4f6e4fa42841dddcecf0a31a17156ea56693b174aa8306485ad32691ede7444777517e435df2107d8b72dbc6376e070d24ad3f4664c7023f2f688d5d9f4dbbe1d94aaa32a2ce931100108b31e83edb9c13631f1c9b8c7fca27bfccd06d0e38cd442a13c8306f1e683d35005f3bdf8189bf0aa022fec12c93d36c96cadf514dd75993c704a245c0d432fb14d76f14288bd95e040d242bd159e50c05ffe87b453c90910a976c870b71f02258e3b9e3e982612a247839824c3232abc929576df97dbcbb881f9c82df7d1eca0ff5ee9e0a4866147a6e823b53a766e96638759d0ef42636818c20a6f9120b3399c2778c8b59dc055036f38c6bfd1711ed36d20942872aa77818a178da13477daf2ad88cb3ef8d880329e4bfae09b774c913f7f1c9b62af1b4419ac9ed261c8875b903801b477aea5923e7277870e4c0cdcae84bb8bc1a82680c60c828224a382de21146956f678ce80caa96fc55c4b0a95d7c70e9a59f892405a236f880d3d39cc1354e338fb4d1f395ab8619d27f4440b88a50e06c3c1130c8bed852d5671d731682afc67465950a1339a77f3dc37aca96599f0a24cb83d6f27d0171b65468ab9e7017d348c9883f49e3dc10fe5a26b36422dc5c5ba8a4bfdd5dd8c98a4541fe6ecf6ad7b4c3d58c5071758f2102bf54625c7092765fc42d008fceeae93f810ac3d3c57bf7f663072bada2b56d963a46ec54cf2d9dcd807c4d859000f3fd29f28ea2ae2a32e6a9701e82919be1c8f642f394c34a6ba6acd39a58791a5b7a1b9e4c904298f3603a38ba281e207bf504adc59e298cbd56f75099419088bc6462667bd87241db588ab0c93a001c01fc81f8e81705e472d2eefeb18d02da274cac22115ef77b850f1802583cdb7cb43e5713234e4d72d0c2542fd27180aa3574c38e38747d9c1ea461cebf0747b5a1e57255e4046f698997fc14018c601c472f3e9c0de7295611a349ba593e0b5f0527b51de5d2bb91197a0cadd046d564cb242a2245d7f45e97d150a426fcd140c96e4b4cbdcae48c9603d5dda6f6eea74e33d3a54f30bb7bbf236e645bb314790ee4aa26829c7bc1af8b7f7aa05908548ea35f0569413e905cd00fda2cb22388bb694d93a7b87088f6a91412acc29fbc22950429e3aa1fa600e18de157a52bf29725c40354c963335ef18ed2e09c1bd45b7be52597fef67481d85ed2ddccbcb04fead872a54c52ab7f17659a8abc4a0f119a28bdf34497665030c8e80c7dc8c80f7a0981d7303d594f6af07768a49c90b2d6d7003cd7c15f5d067dd55f41f3bd94d7a10b3258016d5478b72b0eaf513188111b6addc8ab3e949742cfac947cf48a3096e6387b234927102f8dc4db2277a89946eeddf6c6d9157e18bac8a6de0b452178232daa5612cc8127c98ca48ab37d2616dc521f2dcea3bf5ac7014768fcad80452fe444fdfd33ecb480798577dbdc4e50c594c26e6bda6f2e0f982dc58d674197ef9bcb36e72ad3966531132a692beda58c40cc7f207c6d3af9b63491b568222a6f229be52534911830e2e50a97c5d344460c5e70c0855b3491f4407b0660fae077abae8b92846963caa676c35084a553cdfdf8f10c53b8af34d0bcd22b21017a6aa2134569510cbaea1713894b26d2802f13301710123028534853e8e54c3f224fe3d4abab607203edc1d4970a9f8fe5115903e69dfa626758724b9085df051bd93c7cd952343c22ab744264da57d0f2e2de2361c0de396aa1a100859c8e7e075c95d356aaf3ae2e55c08f89ec0d9d517900a4cb8ac792b96267f703e0abbb8f9a082f68915fa2839479c77a29918ea4c54f29cd0de3b9bbd3b012b984301da5a35dbc208184d0201a4d51d6d94b2e7425920f489f2dd6fd6d8c90e97e97ab5780243b2b91e9dd2144d186d62c84c946a43bafe86f19cdbd57e267761fd4992d873c8fb4b44a64d794f878af29b6ce1b6bfb0095c86db761ff321ec4e78c6f542b8564d6eae282ad565d0609f31acaa012b9b547ecf0d7b3fa18a9d8e3543ca545650db9ed607e021e99e452458e7048d6097af21fd824725149cc3ad2a432b7cb81eb42f0099f414624f291bc9f070d49a41bc84e78cc8b44baa48ab2ea9c60ce9b44161d6c80dff7ee5cad27adee7e3041feb730d658ee6d1185edf580ce7e34e7514a7d3b06bbf2c8c56983841a9fe4df23bbeba1322ff8922fccd54a2539cefc71c50e0422f6e89df879c1a88277f8f4ec4b803391aa3c82e8b8ad1386879ac2b85412d2296921683ca43a26bf7df5cdb905bc9c3467919074b592b255db49b7f5db5c92b0c6435e4fa70b4a1d2197a502a9fb04dd0142a3731610c16757da00b208d97680292b6bf78074ec9e0708f4594d8114155ba483a320545e10d62278e3dfe31a938739c9821aa490c1230226440899b55d19a5c9ecd83a6775bf7a16b7760907415bbc175c1b5242538f1b1c768fd618072131150001f8ba40df3f01a9a577246b01b5179a62db622d8b09bb743e4f329def78057cf2285fc1538eecbb2da2db08c6bb03675f1ab0668df360a0f63314700fa1605c5c18d13cf488a3cfa2dd0643cc231aa19831c842486eeb12b6cb037af57cce9f496f0b6e5bf575656ee8b5dc521e022b15e90a151ce044b00f14452e2021937e1e7289065a7b065691c5dac35b2febf012424275538cda07bb911ddc09b3d4ee6ae312c171b9befc352e2300b18e8133e238774b4ad398c7f72e86410dd8ce3d8f0ab12d5efe079c94828e742ed7003444ba2d682391190271262680b08e3d2fabc773929a6ef1259ac928b409227b9e52a0b4d6aec3aba814568fc43a550e347868cf045a46f864b83784735b3e738beee596a83873e269f89733896524c7a58e2bf42add71159c0a874637acedaf71822c4153c20fd573f1c79edb3f9d7e21408df5ffb08d8181ea536219359e0d9dc493f3d49abb59d68f567bb909ee621d01920f387f36c9df7e3c4a6c48ce92bc32280dc4340a8a09dd46ad081b47b6f8534c80e9e9d21fa66584871a1fa221e4c69cefbfe83c11324ec4c932e0fab20ef47f91b5a1b5d294582eefa515d9ecf8bc158126274213259a5d1282daa8c567688012683131899c443841b9dd2cec2d20198323ea5e035b815bebaf31523d0f117af431cffaa14d757bb3f9092e24c4871a49abcfd93c2d7e1efd2dddc7539d185a1ed42228cc98fc23d407120926af2014bba6f8c1731061897663c9a5c04b9572ff061f97464607153f99f9dbe81e2341d24f25bfabaf96b89e809010734ad7d49cfd8ff252971cddd0f505d6ade24f4d8b80ec46cb3cd2c8c252eb1a5a934ea1102860e8ff7876894a222448544937676ab3700a73472a0950b1459f0d475f85460ad6f238c0c45a025726dc02bd5acf6c00e5583a3904c217c493987b390f21aba03be3f3b2b2b90e610dc93438914168881f4f0d8a6b2d07557b4d24c147103a1aaaa254d5662c2187d57fff194c5e14a89de9f4b00fc5feeb3215c065ff79300e109d01fa61ed3244bc91a85d8f5a72b66320c957c300bc9a1b01260282e7e75e589b5c5cd415a99b52c8970cb5ea1c1541c0b12596c53967b74deb6bb4b210d15dcecc4f94d02ad5e847d7d2811ccf0462f01f5ffe2d62a518142e379d7861590a5b16c1aa734899f21d7d50ce54afbec9087db413846606cec9528e767880b156a5ab6de531aaa153d866319e5073ffb7b20fc532c58d698c84e800260a13a1f6d5c8e07b619b18b56135e016bb07175e326d7d10293a802096eb370277b4049699f2e47f8e7acbf28b57f70ce28c2079c94a832d83a32f25771b3d32056b30177c3e880377b424bb8db80b224caf0d8b4a5acca7fc64400413226866cab373e7e290b74f430c973c48e4109e996d1c0b8f029e8ae1d3ed47a844846a6d6e0ed5d2d70a8119d41915438bfd53751e10af30984cdad041db21b465d47f39e7478cc3c452de397737ede297384ffefd07575f83828e9d26096220d8d4449ac2b9a93150b11c44c4e172fa7c4f2e404dcff0ba3eba9c0a07fb7011197956a6644bd8161591c3cd6a048e771def73ffa1c1acd8e3164c84304f15824b905c6496e4263298e587d2d1799ff7e13d43cc3e92fabf602de7ca4deddb11194418845d9808854af18373431256219d5e08a556126045523be02d59ab14f79ad26d3ddc95fb393d2e4a0d8eade61a895d77e00b0ec9ae9c3149859a45502051b52ac07e2aeeb9d2a95aaa1f9d34f6627ea611f45cf43cae54b943fbe9cb165a27ff3f58266ba7594ead7f3a053d4083792aef1635de58fe70ff4592c52e4abfc32a69a99b6234d02d130b1dddc9d005bfd08abf0a9a578d52a9604a7d88cd990ab03d3a976a1b0d075c9b9dcdc9db95ecd4b81acc18c32d030eacf38cbf952088e6196a18560253fa879b52d1d26781d88cac84ea66d3f7477f3b34e547433604950718d0d4fafee3bf93e5328bb62cd95de15268ac459c23735ed9bec4d2e694dea5aea2adb5e3e800f9c2701d0ce56be5cdaea539e7054972af0da22979f816611a864a9ec0fccf36a8cf855362aa49c8ea56f6c23771fb7d1df48fb04a1956f6d8c7700415d7d1dc8afce96e77d176854243257f7576712fa675b86522451349ab3dd98492bb3d02645347f7aa632678f127f7c662728e124761a139be44ee0a9ff134d0c826a13d8c54c4a038f95a835eff83c4780e91d4554571e50b354b13e5b3e2d885d002f9fd0f1f07f7e17ce9dfd2307d372a0ed9b3075afba3a02b14a5e6d8cf8b25dd2bf72829d2e64b57f41cefd01afcdf83397a255007f785be866e86bc392a1ae5a803f814760da36c56c79929f5fcab38ed3fb28fe8d1bd39c558699cf40133085bd613c22eecbd3b45c490d1d1b5e7af50b77533d9386a95a38f9005ccb0132016add306264587575028048358158bdbd5a95d45ed8b1eda134af0f4e2f5ae04e0abee9b89cdb70b09c201901aebb0e52797c20511c10e475d15e3dbd3d4aec932689cc40c1a5073f392e015a4e0f6d884395738c467d989c62fe9c9c9d7ad2b7e5ddeb62849720a4cf598d54eb4367a51f0b782cdcd06122804dbc09fa7e4317a1f5512b4078c3d7864120d83813d39d0be7a74306b33ff9b476be1d2d4bfc35cca5be8bce03473efbe8aa6ba069f5523504092754217cc6795bd0a32ff37c15777dda9ce30be6eb2c93e6f36bfa7648602bf5e72ad8ebe8fd4102c5b691a8040d9d4feeea07703985bb4c7e904d37fca12b4a78f72a90115281e9d5f07776e995d775e2dbca64d02c34cae9f0390a50e5f5040953e22d36a50cf463e2949491554fa34abec62be7383ba796ac90a7da0cbf5f84c935b4a45ac819b3a7c68d6e6c03aa116ce44c9ce7f5c90be758646f6f9c4c6ff9cd0691927490ac626d55358dc24097c66347d6d9dfe2810108e046aa17126f0a4a74c07c4341f78736c29a5d91038127d1081d34380449c3e685ca93a264833efa2afe41b258ac5fdf5a0bdfb09d21c7f092334c0521f378ea07b759b1d8126369e8fd9a3c4bd1e337c2c4bc47049ea3bbf2abe2e777c6aaa8494c5375f9878de1e3bca10ac2d8136ba8e0533daee181a4a02071ddbf49295ae82be893c01dc4891e7e7981eca2325d48a41c4433c4034f2f9959b06c013152f5b5b751b7152d35de4cfa363de30e06945cfe189756895f41c6531ec99c612061e72e5774b6c4083df8774ca1a10b34a23e5e396081ca7dbae1ddd6d7887b9ed1a383bda905979983b4f95104576f18de3d58835c69e15f87ec2d4f5ab982816e21f9834d0d414d53c298a448f2fc18d10d519a07c8b98aa80663ea339c29ae6d4dfd2139deb0f9991f0d514f95413407ea8fb195bfdaff1f505e8a5e72fa12f23c0ac6b1892b0a48e04fa07a99d4e82369edcfd997a12d1d82d2c9add7ec286581129d341fff9bbe9a6ede264e705c6bfa4c73da44969edb7d9178bcb4ce78c0e23c6064d0558fe26ba9ce3d903ff2733d625ce0c8f4bd1d740fe5fb5da42df4a4cdcfc284ac9f31fdf08d916f1e78aab3f8cf1349b735c79d309032ca33d5162a8da5c185db1229310c36d162b1e0b26422198e3c9ac2fb229aca76a2c3e56d955cb6c1abd6a16331c551974bf1bb6a189a9d881a82a73aae8025ee6d45114481dfdcbffcac93b3d6dc04f1c613cb0442d9d2a0b49ec0ddfb948815ac745859df8f9e373606b4f14c59d62312ba01b8524cef02528a24997d1224ede0904035a0ba4a039ad65d0be9a7613c09795b216f534dd3d2380f57b773302f84e7007cb2eb607e0b4045532b63db54b0081b2fe88fbad617f9d5ba3731e80d1970e68dccf691f919b3e81d42e4e085b76cff3cec3ce5344dc9adfb45e992526a83f57c20d52814a0f881df10bea2dc79b668b877eeb02fc08d2b2277d31b92f605eef55ef384e8224c6a5baa08b502b34923157c7e58b58bf0b20188c02ed796ddfca3c2db2e21578de2879f311bf80e156a46d708be15e587a56e96c51c450fc10f19970cf8579b1e2a219b73a335c9e82dda963391850bb69c500b30d928658e8c31f4854ad8aef478752cf0b01bf92422281c2b0bc72a1636a55a3bbbda7d960bc715b78b707ad6616c34ea24eb1c7e47b107cfd8c589845cdd623839b8b9410c2bccaee0f2e7774dad640a898c43d3e43a7d22ba700ce0e38b02c6df5bd2c0dd610c020d1c86205cee8a8ae10eb224558ca67f55888af455bfe4f91b9895f1ad910f255d144c3fe3552b198e15b7396b54805e24c9cdbd91b5632a2082a77cf2a76cbc5d181fe730ef534cfed1b10f73966b5401682d56df199a4c3a71ba902390e4e810793ad050a7fc2e8fabbcaf2a5217a2a83300454a625994986645f040dc57ddc8882d8dcc5bf51c821e1d57130c1f0e4c100a2f628e81e8baaf98ed6028be801788cd76ee7ea52e448300a67a984aa1a227887755ccfcf5f26cca96d1c2cd50e6369401c424c7ea43cea41bedaf5c93ca963b26fb726f12df6e945607d103032d6769ebda8155868d9da2e64b03371042b7e663efcdacace8248cecdca913db08bd9fe1d8d695ef38f380dc6e6252ff366db02ea8f4c7887aa90fcbd9f3653cbc072b04de41eef35be4a088e26120a93d2f314d41cf8aa097460cc3cf798986b32078e7a43dac66ea12ef6241df1daeff7a086b83268df07e1159ed509fc0137415dc15abf72f1a2b99570fd724b5e6800e7a642e1c9c980ad1cf308399aa1a42777c84dff81255d898cff66b97887e55d4905908213a19c0fa685b6a7b4c4de99e17f8ad1ac7f6a38657e386321c64717665f6a6403d9b6336962ce929015a5f9da7a77fbb78d9119cc313a025041ab44c5843eefc6d92d1cd718b702185b07a4e1ab8ca4d1370a3defacb2c48ba5d5dbb25619b97e09124f53a90e19760af3a991f1fddf2177eb3c042c6697dac8919a20ba6bbee2d427f2da21328be01ca5164fbbfcd97c85f3ae5098efaab00df352a50084dc6c9a51714bd4a4539c24a26a0c63dff004166a9cb9e88b000a335b0e781e6ba4c33c150418c3587dea1f66a3360a66fcf326b25108abb852663dcae56b429c011335750f4057f2364bae4231b498da08cd35a26e8eb7216c5616286dda77219cfcdaacb82cadf008b082cc76f45dc6fed0a467d8876ca17f9ba3a10e48dc86d1577e9aada0a688c474824e5ae0fc74af86b5a0c4137f3f5a7f744a677bfb09e564631d06001dceeaaa7f617d3ff5a28a838bc4163792ffd850ec40604a9abaf8b979551a92132f395eeec9b8707989c7abacae211728ee4b1a2e6f06ffb7f0d11dc711c95543b2b4af55e062a322b117086c4c78524273b59760f76c0130fbb33d396b53b38f99c565134e67d903b735ae616dc7bc17ebcdc6878e08179302875c9c278e27f2fe4878d856b5c18e617f9ee3c9978042460d9a226bc7f3f114b1c9e082ba86b72d8bfdd6f2e622c9880da48a67e089180ec3cca1c55ead21e0e3b85ba388efe32fb987039e60ecdfaa271748512b3e5d9d8c696bee04693e5d9c08b32c46f3cb68bb9a33eab833a27285492c21e7308336e7239f9569a4fecb1e60af0783049191afa10c8a13379e929b598606a1994c106cdfffe6247be6add8202289f66a59b57d23043acf8b79961ffceaa430cd6fd1fcb67c6e796d108395e56d37f856e2fc780fc88b22c793c432e6abe34cfff5c675756133d772e72514d80e30dc5a9bd9c09449bf3e8416b70d176e567d5ba9e5558e17a2a7dead9e0153f2c5bb0bac2a48696b3628bddede9f980ed715c262ae9499aa5f60cfc03e95a13aacff1420632535805f0f2cfbf4c2f8e6e38c2ada8d0e972377b5b3b745df1c5f3cbed03a8a0d8c969014cf4ea73a2c81559fb7d839050912b80b8d533c4131079d8587600403d56968605044f0b4e4e18532f0d43787f04fcc0cf36ae57036bd7290f459520ff92896d0effc85fed8a4fca3f38942b8e0079ba63bad6a23d357cd93cc27b8a19621ef04f4e0aaff1c1a87ef3d44ed1b3927f8895a17f74a1e428430d50cb3234282755c5fdfb0d590e1d7338aaa5222e0cdd6ee1030eb5638a657df4235e71f713ce30f6f5777c47d85339a6888a8f150cc865437c2bff21e9efc12c03f343c1720fc9e57962b36a602993c472cfe20e9d203d6624450919efc5eec940308b74ccc041e20f2b33dee8d12c02c4e852cd502d5963e5181ef36c1147b4709d6cfbd96ef79b2605caa2558cdd2f89350c004cb7c3c34c1e25f177e5c74a2fbb387eabd11f5bf3cefa68592c22cf52914eb2034c66e0f8f5540df86183b27553077c48c22b71de16d13fe91d01aabee615144a82e229047dd4eb042eb7891690ec1202612f4034e28f551ba58340c67f17d16ae52e8e4dfbb2476633655e417b0b2926d07f91e5c4c8c45037525591bc221b8ed8c6a54597a8225632d89be2efbcea86031ca6fd9a2d3a982a50072d778d72b1b49076228c30943c674ab5d775c0850f5559da30a31a23c091df81b216be406bd600d319cdfc593b45f026ebcac8a197728add32c9dc943cf197beb5dfc78650b308ee2d631fa5c61079e9a90aa554ec4da17b6976335e19c354b717997158807091a94899891d979f768beff84753ac30b542b534c09705cf3c356fd8d1d553100ce3edc364217644b4c20ca798c0188cf368add8c1a0001cebb54bd1cb72f4b1f8539ab2816b3e604c95cd0730cba1b032d01f7e28239a990cb47be0c2a2318982ab1144bd567f62522280130e6301c9f8b1f5e56c063c1885529c664489b995d6dc43ac1da0ac2087edfd6b2774d03f6efe6a70f85835bf19e14a8a1ad73b22eaaa7f734e106b60ec9e9767a3bb67ba1c842c5e9bb92a03416cac984b2fda74ebf05c32617eef57f4db755015974ddd1ff2f98801babfb80f4935e1e3857c00181cf0671f0859e97cfd85ff21899327e62f84a58af93e1c6a5fa6cf76d0ba3e4bfed310246703c3567089ae1c897a3826758284c15899da5c5b5ebb7ae17c077a76bdc203955b561f1d94f873d8082db8dcb48a4b6f53c8904267bfd8717b341ec69f082881a0570b3562a72458924426f9f6aa0c2324af32944935e67c12b73f0e12c83072d9d91e7266e8a6858795a46abb9bc3a0c246423aec78621dfa55d9f330e2014bbfc3d5cd30a225f1592ccbe863cce16d9ba90fcf17e931c4a40ede3a3ece78b056ad93507a90838cc0786007659b7602e1e9e601680e625011adc30fc4c78e75a4a7627991ead1ec3004ffb2150f05b0e8d0614fb4f52abe4941f10e8fbf8a94c2f3c890025f667f9c08a506ce83bcc8ea887408c0b019d0a0c0c66c272c619cb48b306d989f2836355d317ba79dab7109c6294162bf4d594231037478d319021855a6c74a23d1d4572922e8e17e4470a2fc0c4818e841a751420511284f8314534ba3046a4e78546a4a6cc9f5ec3d8e514a8885a4c59e1260603d98e6c3d195527d6de392675519fb14318c176b616604dda2cb0586a44711a56d658fa9ec882d91c1cf86bd881620ba2f4c0c97ca5bfe4844a8ac5837f8d8e5c6f07e8e1392e50c85c02c0fb059690024aab98807fbf4af17fcf9dd5bd1f07b21b782bae1de738cc0ee232f0e2fbba0315fc6a87bce163b03137a9dff0e507f86fa5a141c81d1bc2ba0e7924c3a33021378ba064afcd1a6a10340f3bd8b7955213f40d811f76a1df0fed47c6b538054fdb81330541ea1cf226608dd4dfa2607c950467149a0f8609cf75e8d9cc472a40d5ebe4cb9fe7a35f9bf989ad83b7998f6768331f5719357122af966df5fd1906ac4a83663eced7344d2585aa1455daafce76f18f6cac403e2cfe7da55d9a7ff61abfc1268eafa4aaf932505f65c0e63ff54a6dad3c1c2fe4dbe32b9cd72abd47be56b9df2a8da333708992ecee67fe8ba803e7db29b102575f1ce0724392199ccf8608fb6dc0feb6127bc08c3e5fe968a4d700dcd8ed5706ce0fdbfd2717e1101a04ce6f3dc355469eb157bd16cec741a7af756d026e20e75b460188916275d58d92ff64c5ac7ea3b54fe8228c39ff3b80da64848602bdce673847ff9ecff353c77ecfaf30e123a20c1fac4603fa33fe0846fc48b70911ea050d529b0104f43dcf55c087c7ed73332df520d93f9e1c8012d2488289b32b566576c62a862935f67654be16236d70bc875bee29cd912ca6e18ec220f32e3d555856a3978a4ef0d81ab31af5c54403ad3d3733445165191b5889b348386b23a8fa63f038c75aa043c73db76392d2c5555dab828d61450a761c343f3fdc660ecf3d6b999863f814f0ebe1ec10aa7dfcc93b9ef697467694f90dd42e1ffa83bc786fa634268baadc23ecfaeb19ce373c3aad998b3df397fc1f864168b4d267e66f173749fab8cec354ff4f5fd73bfd0508978c0a64badf4cb3cec48579c30effa90512651f6bd2142c349d01013e43d54079fc80475a414393b6556b0753471ab742fe4bce6a63f27643d2d75a9a314c98b81e098f685adbb5b4675cc5342ff3bb30b216bee82466e43cba5b8ed02c5b42dce24e14334078242f8f4269a71238c1d3409512982a853e3c7920012a82e6dab2e0fe0c33382b04a402a9e93ab5a95ae65865b9585f20fcdaf82a07e04fabed6bd61b72ab39a69b34f0f84ab1da2bd5a734666b764d9b24731f3f3655478e6fca861598750db0e0043506a40fc1b918b19866251916fda1fd4eaa480fa8a6dc94a9953dbd4012ef5e257834e6e0ba0ca62ffbe1266c7ed0357fd065ddd15e3f3b406b11d52fb6231362cba94eebdb0c92e727537aa886b1d0d66e06ff00176aa59e7081b9be3a47ba262e9b5071ec401c23791a36751a38b440e1ea4920de031fb66b1fe3b210538a388ddfd42d865e79af6ebd3544948beff6faaf1d2d6fddbab1814bb27e8f9eb0b918d62241b32e3dda140741b83ac7dd5bfbc91abba6bb2359df416ff887c67ec377303eabdfdb93f9dc8a2f88b35b97cdac03e2c09b8ac3b21be252c551d37acade8422cf38bfa99c8c554b6206b819011d43e4e01fd59ab5fa6c4c7b4846adc4e5b9d7439d06e7087cb185bbb6602a6062b03f2ace86e261e417feb4d71eb83337f7e851fdb568f494411dec582208728e2162e0598f4c815abb97a18c9e5b0f0b271e17a2416d10fdb0cc78db7d66dc1fe813ad9a76677387c789d9f63ba33b4c4e33a99b60375ee8c0f1212107051e8e61c2826f8962e44f62a2622ad6b7da2aedb2cab76ffa8313ebf9198e889025622d5fa6b307aa74829f059c31d35f58cc1141af19af66d644d014942a2bf2e8f42db4b90c1a96b9a1594c044dc90d17338446b7ea6731ed5152855adc93087af718ab73ab0b11f421bba9c2a53bc3950403fe77b2eb4b136e7bfae6950448e02ca33ea66490bb5d1ed5836c8c7c3e45916a20e09b0e9dcc8978f1f5633058982f6b79cc49b5881c541159ce5fe8ea04e67075797d40388b1c54a623513379e86d3dbd3968c690fecd5dd704f588cf639c1c25f0ad5cb96d5d45072d9209bbc79cda030bd4e9a0ff94234fa9ccf34ec20dce0eea391b5d1719314beeef9274c276dd33f6d1a85710b98895dee9443adf0e6a11c2ec14ea182061018eba5f8e2bf546116488d57cbc000c2e124404d820ad0fffb1536642301353be921cbcacf8363b36445f3de01c087af7d40042981f0bd73a16480917d66b3b09095e13a825fd3f15a8a7c12048c97c3b6f9b0376e59e4f1bf723b94a3f81fc6977c96427eb804692f21e7224b662eb7bbabbec8775c4b36e47da81a764486020f7c71429f233d7a81a17003a7d66c255021e03bac7472b057e20c547ba1bbc0099e343628485935cc0a4606c627c9ca3511adf97656cc3529b4552e5105abd465e35354bb0199b8458582d1f86fc65cfcc57416fbd2f73704e26c5437f082f7ba376842923c068d49f1846b3000b415d4d68018f81aac6fcf8a10615345f1b469b0532d5788b92192abd2da30751c178983ac8898d19f8597efb40bedb2122044f31bf6fcedc31552e4a3c102cbfa53d933cc7fbf4eb8ca7bf8c52ee1a6ac20d3aeb6036ec9d01f21a6a1cb29daccdb547a03bd0b239be9acf36e2a4e60ad8b5531b8fcc5aeb75d4d9eb6d8a6578f37493ad91b3981c7775c5a3bbdeef3c74eea8b2f2d76e06985a4be15231bbd36d741d37241c8058febd8a7db6ab8fc8467e848a1a04602eccb736f12f51ba946321a350792c57fbccf749133104510f684d3c97889122c8aedb8f91efeabba1d9a00a11e1e2aa6cdf4c408b04b3931f548519042b4cb7af20545215798ccb7f32c109d85368e79b55b812e3e74075b2ba63396d46032f4a675e33a1ee547486a9d66609238eed38ae55ce641ef40d08d2c0f187e8c3835dd5822f8498332829e61d2f5a62e4bf56831b94614986410745e17c4ca91394d0fe1e43b1c5aeebd4f8bca15f843ae4edbd3a4319f15cb83775cb01f3a9797a59ee02bab96156bd1428d46d4a4f3e935d7d156fc6500845f1badd1d9907fdb99c5e17834ca44e1e274469907188653023ff918fd46642d02659fb7fafda0210a776e4e19ac773c64523360ac8267f492a4c59df0f0b4ead3d448d14f8db48109c3a90456507dac15c15fb852e883ebe795b1e425306f26f43c2eda4f3f318702ddf767a8ec01c5497573144ee0fc939b127c4a6598c7c89c97e28053f9962015ab69abb13dc82d629fb75fafae5c24969db4ab860bf061626316e7d231fbb238628fc00c2961371c1a35cc6261918b11446e6eabdadba3715df7663541f918179f606db2fc5a648b4aa374ab3ba19bebe17fa8925c4054aaa0c31ccd0f7a8287d34fa191c3d17500d9ed710a8fe75fc565dc390abceaeb9bdb817b83737b8980d7a0254f79f85a28cac149361c67036714c3c8b0821fd89bf36052f8f47e7326a28b6264742dcef7775afde0724764577a47a54ea5e0fff0562f271130e0b5425df6aa3afb1bb3c82973a7f953ddfe4a9ead418fe3a147445141f29b0e30f39517374c632ef8922ecfd13df954fd392a3c1c35daad75809750cf5dfe012c16f13de0a046fa9a79a1954af2f25aa52652b55e82ddf15a734fff3017b89945dedfeecacdb2cd359fc5461b3b155aee813a2b1b0d2be11b34b49a1f08adb14866ea4e024d50497782e471545f6fa258cdb05031af7462895a46d3ed6645128081bfa45775e0273c3636d5595e82fb7f98f05e16dd8ec441156c958595274eb0dd93914ce70f932e177628212bc4c248b1f69fdd2565d406df34be86d182f481f1fc9f2077fdf7ab85b63be7caa3d42ec8b942e21a76b79cb91496136a03858c6214be8e5cd9e434db00310bb9864044fbbd1c9bdfc6cc28138629785eb2a656e4b6cd11c46655677d93fbbd04475f4e531186bd02cce6d340a72d02a1a9f99256e34f6ef49ef911ea477fa8693bd4f68eafd7da358b3ff14d6a03eaf1b8225f16fe15bf54dde58d7de6714e8207951472eae2435ae3bc26cc13b07190c34acbed4d4e478df874cc08143fc9becff226b9fb0a605b00ec51e5df286833b2b49d63e69aba0f335b03a09de280f8a3d001fc1058da7f6ddc6e83c529daa0a76743baac4a9c0870a68765000d5672c4517d9ebe9d30bf58c41aabd15167654c2bd00e3c27949781b74c350e25411f06c2f30d9b9217cf4b8e5b9715064c8f1da3fe4a030187be4c3ac11be15912bac846baa7d006b55b40e8a1443b90c45f521303c9840e3eb29167ebf984f05bb124b1e57f8ec71fe76617530b4275585f5e1674e419a287420929e2adfd2d724b0947f039002da50c9c289748185c3dab5ea4a3624e52b65510ae0463c2d8793412e6f405d3e93757b7b468c5edf0dbd312018dd3f5de6a8f1eb73468c1298e3d1737a2f3301631fd21698993cff671f1acfb54e823e22d1592fe207f6db4ddf007a804d61de0d99dee13cbf0c5ac09d52707239148afda683d6c5883e709eabacf405a924df13ba6369d5bd0b64397fd88ee92c485ff49cec1fe7f657acce417e02b8a736f20f241e2b391f3ca05248d13b226ba6dc430282be646b29b0b96cdcac9d9dd8cf96efa200cf3c00ad40f78ffa623d5b4eef80d3530001235a3957774bf10382b16d6e791405db7c198219893e22ad51b1dde3ec501956ff6d9467758602b624b650391550101b210e16fba5c403c46aa50cc44a71d6d012791142de6edf386dbe7527231a29efb2b0d086a4c9cbc5286cc0acfbba40b44633bf2035d79cce465544f4400f048bb7f9373c508a056bca0a00b05c2c47b986c75d90c53002cb6b9d37c42398161a1e4bf3b0034e40203514e90510f8233dc50487c8814678096654435fcac7c185b38dd497fd048d26729a404f7157f685e491db40eac37abe591d377176244b9804dd44277a528e770b01844e2e22d4cae3e180e51b57ca9deba13e7c90e4dd1ca5dd62563ce783bd97c78990dc00e8a3307e425a7dd1a9a150274313af18899acec9b57f00b25f0136f783875f916891a9300456a14cd2de42c66d40b0a5cf779790c5741ae3ab33e50133ff5ecfdce29782a189549c709c709d1d3901e4abb1dac33c13edaf63412b3e0b8709daba54c0711553023b4b63d0b8e4d0ef0b3c8a96e4a1e75d4968467f246f7e030e4c508b54925b92b987f482e10b2fc89c893e2063f7c6b626107236d0ed41e5d6c0b94721d1f6eef8d8f3776bc7857195dc40b42aba17ca9ea4c7f277188661e10139a9408481c4eb89e8edec53c83512a5035a523700c69c0a9c3dd64872085df43d62592c6cc32fcc4a1938e6d779c0fbe72f00a2f3ea1782e31b48beb9b6436ceecdef4a12aaf7effca663736f34920e49fdf1fc08438c5ee46be98c0ba7201d17073b579cfbb9808265c5aa6f5c26a616c9e4deadc2136a95a429166487ce89f6b9ff3f84c213815022fb1dc1429074b43c742bcfcad407ff121d021fae9ef99449183d5ec9b117b35a4acbe4dc06ab4a231a5b128ca5db64049a0e92546647ac5736c40121f624bd5ff470f4ddd0cbd2f72cf421401622aff470ffe2504c1437e1fe62b5b7a7085d42cfa8f8ef9a835393642106ca9f7ad5ca25ed15ab7012ff5a3fb6802e28da41036d4e2614bd1c427e0499ea35f3cd7120c5a85e8c7cb83b36bc1c627d9223ff0228198f9dbffaf22815d34d8b9f7bd30b293432390225b0ee80c1249bd5cc1d5e4612ba27995091eef426d823da2db1634c87f07622f596319b4566890d8edfe9631f8ff39d18554fa7380f5187377011f2128428615ea4dbe92a9daa6deac41a818ffc36025c1c1ce60660805c0645eb1a392a430fa0f94899a9d90f400e7f8134577262a65427574e6766f368013906427861bf6e62b846c3919c38977f3dceae26da66e6aa93a7e02c984d5111029b13768691dad7138058e8a34d86342614da493f149cdbb9b5124ad5e6a50765a2e8647a8d8e17f182b257493dd888e2384275531278df7e74e3010cc8c0d3bc9fd22f797e0fa8cf993a032cbc91999e3c73209799cbef3cf194bebfafa39d2a38111832623a5b66dad50e2e851c55a8776b14c887d2a8f59c9a8a0e9d15681e0f64a34746a99bcb9762a9ef45a50256b6e472b11b66e0d625b404222cb1c16b1d96ce54d606349b5e72f0c83287198f1493b55db9d1cb4a8976a4816b23ae8889bd53993f3e7a72ddb93d06ccaf29f8ded6276db4598b8ec608d13f39e3354a3f5ab31299df84261a980f2f97e2afed3a7aba995e7b34b887839f1f3a1845ea66ed76e832ae9a7eeb090f4a75334b48f8cd1d8cf3fc0cf19b891b7d4f152c214d894675b302562fd1caae15353da3d4826637ebf77253a59e27df12e5f0d31a8b18b7373ba9c430d110845b96bfdc95c3b0c90cb8311b38d78b00590786a79e3462bde3bf0586e9ed3628febab26a95076c7d2be8506c0b5584eb40e60ba379d55686391566bf0249b004e0f05dfab204dd84818269bc9027f198bcaaea56b57d8e681c0cb5372773c3fcee09bf8b5dac9ac21220fc42ae0c03e3b62c5eb9c4c380dbb62e5eea01303c29c654bf2f0502c6f08f156fcbfc5a62d81bf9e065712c255f267f83f53826c39fd4718bd87da5452e5eb1b619c9ac7ed9409563e4d3a63383f43d53ee688dfc55204b27067ae595c55babfee045d6046c3ca2f373c2eeff2b72d1939ed4b3487ae63b34048ae8967abca57c41a3c04ea43d03e602c00df2807b57ff8495da2c3991449c580e1e3aac098a8feda40fe1b012d926211452f08268cfe50f66a1d82d6968288cebe94ec64e45d253ef0df9b82fb6cbed830282e63afaab589cc704004a4c86f947b44a302b9aaf90e734de8f9c59d10e2433bb368322bd67f14641e191cdf9abd706670216a47c0f5eb30988963e0002af79cd64a21364d5d069e1790878a50b44980c87d1092d22022a937272f8d436780cda6882c5a73b84704d27961d918384b0e25edb560d44ffa6ee0681ae3de93d396ecdd766c2edc987bb3dcc853ad0bf3a5602253c6885aa8e6d0012edd8b4a13f702c8e6d00d03b556d6e9fe88307adc6b1710158d3480dc4ef105015f4723f9aa509c8ffbc26a01f16fa790089ee3dbbed7af6e2ed94a8b4cbc9702b2c2dd9f3a600e4a994a64e44f29988732fe7d41ec0824e9481f2bb1f08351bbfae869c39759acfe01304e5169e8979cc7ee9f208df11adaa98c0017b40b64aff24a61a0650f717f099d0de7bc760390a1666ce524d242f41aa37d50c5536da8bfc033886479e873424aa731cc69997caf2c217303075cf303155551da86f4ddfcb51f6b7d44c21f88153f69d4d335de886fc6ced0e392844d53fec9193f7cbe65d114cf5a1add2ec8e34a62bf715e6d891bb52582ca7da9c1a6cfec3ec459d6b7c8044237f1627c348d5469b4a7113043d3875fb13d6b56226ce2c8096cc9f53423280df08bc4a2bcf38f5752d75ae50f8e99556e2ef5412dd931c7f2ca51809e33171cac4a8ba1e9c870392ae1c68fe50985b06e0e1830e861a7a1575401a1ced7fbb99426a7485255c3658783ec3fa892c0e1ef5c63bf446de8ec846f46927b64f91eb0eb4fefedb495fd35f8197ada003c8120e2ce5a9e6f4dbc94ed980d95377b7b910e09de22f759f2831abfda2354273e8d0403ef01680cfcd0c05ca1bd33001e0903d3c8f87202ec1a35afa9dad6e4eede98aa6c293ba9d6274cba9d2c764188be9a74cfb8f34cf274e79983a73d053b9255ccddd0c61ad395b4f1d55a88b2d3b5ff81d0c68649b2bc99acb008fe8ffeb01d87c30d15fb1559a471f2a5984aa7945f0a394edbe13cd4dad1767dda2ed1ffd32eb77ed2e35f42317c8607ca36c942485c0277278b4d37294a1a0b4da373dd33c6020e1fbcd3ba5f4a880118116128d09ca2b506ddc48fd04dc6f407ece544b39f9af134ce01d7850504b74140490f07960f12d50d9af684ac7a9425c41878fc90d789623cbd51863ea07900310fe07fd2f42fa7c0f60c27b73c28998b322512ef672b4c178b00d9216c6baf039a728b4438d3130f02ea644700cde8c7c262db9568f183679c6189a7bf22c88498a82beca8bdfbb1185c74754969ce5aeb780db45f539a22bbc8fb11132cb0fc8edaf5a9d27621c1c2b77c0d1566f847d1e119365de8cc8399a5b1b62e7cce715a81f770ae76367b922a8ef89bec5da3427cf66461286176c6736ca8081227a6ba32c1a8e413f34e1ee5965b3d7c2817bc2c93348665b7fa36463da4fbb290eb9ea87df568a3d27f7d6a787386080c9c933bf0090ab473de63ebe5dc9dc2afbe41732037332cc0541a87b618235796a8b6e2f17379ead1f04d5163a411d8299f723cc65105d2ea3eeae29acac19ee8c847ce2861d905fdb2fd25382b327700511f569e81edc3f23b70ed21df839a7f6add4bbf7f402d2c6451cbe1504cad3e42654ddea638304d871c548493f7ae5f4c0d5cfea63293cf0aab02c1874f2deffea15b1c3f28dff6674c0cbffa188f0576d42f71a4b7e8390d61df1d5218196fe7e0cfccf4edde0f9b88accd56afbae892384631b46581342ea3c68c372c02d552e96d70db5aee4444e64d4c5849e0ec0b41aa89905b6bc4bbe164fe2cf73cb1d8e3c35213d4846ceeccdfd711ed4f929798248b050c3c4592d0639488cc4f97ac141ed27ee3837ee9bb80097d540d158084261b33611d7367afc34f50c7ced5bc4b0aea20df0102f2cb7b428bcde815e895c36ba2775d9cbf7c7cd0d2668ad9a29df28fca0e6967223c64f95cc1343952bf8f19a1b34e376b080e3069093bea7930ac5613bdc5d01d1289ad4de01ad9b81d518bb0ef36cb79ccb4b8937485474b3eb0a926c991aab0ad163b73ec1befdbb50ecae1b8c258cee712b8a096068d4ef376384725cdb4b4f687ae42dc3aa7e95a7d7c4eff6e91b4996571c1bfedab115894e2620d7efdd1464884aa91b8c891db52d8668637b159efab4a0827623eb29787e8a1e0566e24c98858df82119fd148448059c41726641ee2bb5579954ef82c46e58916de650cf92fe3c65fa29f62bb2261a6ee7dc42a74c42ad1e0612010cb9c85506d5ca9f9feeb44e93642b592513b2204a9590a9966799c8641992196df68db2fc6df4a67e75fb3a69ad2e5cd120a7b5961d7d9af442d2416f862d5a8ae239b8be40759e1ec95516706db3ce6fb93441c0047c3da7f96d243502063f6718be376cadf087cd15c8817a9b1ce45969bba01e5f0fd081ac39f76f63b159305848bfefba07856508c05f5bf964ef66dc245bca97ed1374616d2adc265cf6a4fa94f2848f853cadc1cd2c24a50827ac753a307e26ae703330907c4bdf6a65dcba194140933ecd7f4035b8547502041803a24821cf0145ca6159415e863ba5ecef226fd6c89f280edd898ecebff09930c3c7b7849df57ef31f08d7708d0d28117704ce0e6c1c016ae8ac60dbc9d290051a8e65eb8a247ad4bc3df545b2cfdca51055b0831f7c3e8552205185e3505346f105e13082edfb6585cb769fb4c79a08b823df31c1dc28a9d711c381a1ab50f6b84125b65c6f53251f1a19cf33d498434249c46671742fadc99815172588844bb8f2e38556e99d93ebe2632163a96b65ac07423a88ec6a6ea541ca916bf5ba803d2759e5a7dd0d84fce048e2eabd4c73a0413f9067ddb328cf4195f201f05818215632e84e6b95a8f325d7e8ec4d60e31eaccbe7ae2d456b95ca2982c4a2a85cce90b426d22ca208b475fae1d986b57a1fd02ad444004a6024154a909aadc60a05c0482551c2be00ae0aa918a1d96815800b0c232782865d0e1a22d1c6b00f2b58d5e155d5040000007011336e3c2fc82b9f052cf52bb77db8e5f6f789ccc87617a0a8fa03190138016801ef7736b8f7bb6eafabdbbb7fe30da224497ed7be5f1886d578e778307a888ac4f4986cb8aefb5db3d7d5ecdbbbe8f7fa330cc3eff4db7ddf178d778c4c5856cfc7335203a96dbfb3c1b5dff57a5dbd9e7d1b6ff5244dd3dfb4efd675bfbbe1dc581529444a505c469479c2b2dfd9e0d8ef5abdae562f9efc461fcef3fc3dfb66dbf6bb1bae25e31d7bfa11c367e8abf7d3adebfa5da3d7d5e8d5afe1f7795a96e56fd9f7cab26c18ef0663a074be7e3770be5455fdaecfebeaf3e8d57883a7bfc9cfb55aed3bfe56d7f5bb1b6ea5e33de7f87c2059d291b485a2dfd9e0d0ef9abcae2677f9f93bbc9ca6e9b7ed1b55d5ef6e38758e37899525494b95231b48e7797ed7e1757578f267bccdcbdff46b341aedfbdf278a7e770b2a7c98e07132830417a5923ccfd334cddc8d151d34b49878546131439224455124832422cad115ab2d9f4887e177375c388ee356ed828b53d51212abb1fd9e699a8e49b9d009f9e09aca7205b2dff23ccf31253f3d2623533c50bacaf5bb26cbdfdd70b2699a0e749c6ad4567a2a864cf53badd5bebbe16aa2282aa06a6af28487d35598887ed3d2349df53cddf8d2c447952fff7e3f6bdbf6fbfc9ed1683410040b6cf1b8bc08b183e305fedfee652ccb7e93dfb2d9ecbb1b6e5696e506292d9f191ed1121aff86dfaeebfa1d7ec73299ecf1b6f045849aa32e21184df07535dc7ebf675555fda6bf6d711cb7f1ce31ddb8024353064890d67b5dfd1ebecb7ebb5f5114fd9ebf6fb3d9d878e78c6e7e667648b89a986018feaeddeb6af7efe1f5bbbd7a9ee7b7fc0dff5fe39df3f1c02889ea6aa2c5f3061b4410292f35629484c0c4dbbedfbbffe7791ec7b143178c1f5c5ebaa917e36ddfee6159964110cc40a4881766478733224dd334dee06ddff05fabd56cf1c6b082c9142f4e8088b8b09064f5a2a8f71bb2e1d268b45c90302d6ad0fc0085f18167b3596e86af17b434a6049a2daf4c26e3b9625a23d43b01c4e7b66d7be28a902137523c62b860966571b45e887842d13415e65dd735061625a56b0caf8a15566c0c12acaa2daf205b61312d2c7a6a96909ec0c888512dd1f12ba384e28898d8122ea25f518b1c1f28380cc3093bba1f204534765c79699a862005c78fd589ae14be799e15cc08daa2244c290a902ccb6f8feaa62e913325558b3212ea72042a865389e4dbd1f978c948fa3042c7088a521121441c920c2962c4c64f144f9be1f74317d46369068f6ddbf6028f9e1d463aa2c28ccc9565591c8d2c2f3a23b270a410d5755dc771f4e900fd94b24860dd8ca8aaaa2008e684aecef4f4642992a3059e288a9665990b1a3ca815580471a981161f88d90ce9d16b48631a183ca81073025006287540010b1e48101021c41670f1036c7bc0cd1bb06d031f4fc0b609bcfc01db3ef0f4056c7bf65de0e011d83682cb9ec0c6259493a3485490110b51fe3ccf32d977334ef69de0697ad9d516d5d7d114d51797699ae2cd789b0fbf6ba7695a96a6691a9bc2f474c4e48a4f1891288a62bcc5a3dfe9e7799e6532d9388e49b2be58704d3153f3188f7ecba7dbb6054190c8ce14b01f96901649c0bbdfb5cf2ccbbaf1a6c004c790184543698094eeb7baaeab699a365b445e3b725cfc5698284992a8aaaaa2282ee8aa5213c54b8106473cc3304451741c4736a9098b131e989dde789e270882260c2c21a0ca68f58ac0bfdf324992655926c8719544e54728c750f9f7bbe6ba6e1886a669160003faaac15375f5234dd334dee6dfef1486619aa6df38823ca8a2e10a314421924a9b54da0c320d898008906396d548940e1220136bc410428484090811122210832291c08642d77f03dddac041e5b4c4ed34b5ecf0d4ee3b8ed78b7622e74ed8cd9be8305bf11d62e5b30f02d7046bec31e90862000f648dd05bc207a61688f8e1e758d96873bdaa2d480ea8ff447c57e31fd3aed1881f86e9b2855616d1c49673f2d156b9a8715468df554c1034960f99b417fa980c6df6f06eb0a537fc051733ef072f20d42f07fd3332a439d708c51bd39af41da11a63cebe02485eaf9e3cf4b3c4fc7f50dfc339a09af114110cc5c71afbbaff7bbe06347128198815f3d784efc7cd0d7fe0a2d9e669d7a85f13be1f3737203fd202c030becfaf6884f9719d8c5000c30f937c59f312b7e82b1238011e79c4ccf574b2f2b373291c000c29fcd7ef603f1127bc444024c7bf5067176f77a412285cce9beb8801447698ebbfc363cb7bf73b11b4934a81c56e3bc1f54fef81c9bce1ab186d98d1dcffe35ba1e34e77250801e6dec68ad56e8d74ffb1e9431d71f9b5a095d5b30037bcb5fef9bdc3b1a3443b345215eeedb25eff8b9c14834e85bdf72ce8ef338923d056aff7a1f5fe2f8f58fcdc6a7a7badf4f77988c78faa30efdf7afe0f9d54fc7445de7f2bfc37e6b20c5ae980362a39b08dca0e6ca39203da4015bcad16f05f0852f2a98abc3d56f96fccb2f25996b3fe64cd92dee5b5df5f7e0668efc723b459ef8c36658ed1a3c8096dea392587a7eecefd55463abed769c145f3df504a25a8ee1e04ba7f8e6c72d06040d8e16046fdeb394480326e091b832bef3fe54cfd73ba051518a471ff1b13d1a0ae4541f0c1c8fb473d92041d46c06b47fd5b37831bb5098311c00106288831c3bfc31616406941a0cbeafd8f1e58fea4010023abf5770708b85925dc1225a10cd07f8705ac567b3109154ec09231fa0f0ccf4476c08df233001dbab76027143c52055248db4881a7aecf822950f048056585ec09f6b017f45df1f0276b0e02b936e8383ec8049e2608464bc1d70d4f646067fa41b4311c40c02bc5e20cce57381634eb244ea6e622996b8152c060207640bbdf00e702a40137c98380cc37f2080eaca1919ed83eba6812209de5f6417fbbf288708c7b3f335e18d6609a24e0346b953706203a4234d64a0892049c66dd72be10ac41308980f20005ac8601ea4ae14460500cbada8c018bc643e1c3b812be30a31facb8c67402e955e0af23622585fd1ffd06e2e1840eb8b3a7ec3f82d644c7760399ee48fd3870984c0ebf2331f4dc149c0559cdc34d3628a50001bbb49d4b3266f3b0aa99d9aed9ee5ed9ddbda59432d803f0030f04e04dcff9df17e6308739c7dce4812acfbbfd8ab5738ab5c37fdfa751321441d09442e9d73b93c573e2293f9b9e1f9af40bf06c328220a3fd3a00e414b2c2a9d1b6cfe338a24cd74093e9a97154a954a6a3c6712cd1100411ecb7069620d89c6f5fc53c96f9bb60cedfa749150e0ea94d204aa361b669d1d3946873dfdf6ddef1c6c38c5a759b9d4d4767b6e78520c21e2f7a5eccc7130822a0a8af0e53ae4afbfc22f50f1577ce1a25555ac67432857abd77f063296af4f4cf92c79139a971c893bac33461086a0f585b46bdf7ea953277a938ebf96408e48d8a9377a920553c6bf286bccc5da496d12e15fa74528fac8fb3861827909af1823fce21e3388e630ceadc78ae94194710e446504646e6a873251a638f1acd618d1c27ea7a67468dc6d82327ca70e04790139fba38c60c1145700808c68c311a1547956ac55fe410954a64417ec502660573124654c1b0aa12e685ea302acdba33e36b569430925c5d0f8a53c8388ea3f81106e40e9631e73407821fc711e4400e0441d40d4f52759c1597394e056771eeaba3522098d2e44a932a7db3e2322e94e6341a63734f5d852a51d463f40d0f1145a23e9ed3a02651fa45eaaaa7ae82f967c153089ac3daa953482a0583aa52a2a8a244c751e7b04e212914ea318789d168b7a2ac9866c4a8af561a15f7385e85c6108ffa279676a7cabb513244ad018be6b0b006aae38b83b3519729597c4559c1c51287e48dcc59dc2573165abc6b85a8a93479c3e23277b19019573c8785418cabba208eef210e4130c4209af35b92304c1fbf83203ed6a4a85f98f4a82f8a5d77d22f3c5df57d0886e1434f8fe34f27555e3dbc3319044de0bbeffbc2723c589ebe2abbb286306250ddc5fdb44aa3bc9bc6d2a451ccdaa830fc52dffe851abdbb43c3108738d4a477f0e16b30d064f7d347716663d4c58f3f1d7ff8fb8e2aeb9d1935994f7a0f4f9af43a94fcb2ae9f7e517367f037b833f8a1f77d24e81d6b123c991f1effbba7c9ac5f906026c117ac3bf3a26606e4e1abac0de6c3f07e6b97593b069ac3dae1771c99ab38499e70569c04636cafd3a4a8c99376b174cc0a4d6a2fe36f251363e32ec6ce61a13436fdd3a71265edd3c3128db1c3554c0d5777a113004b34c606c5d7b0d5795e8c7cf027157903a357c7f9c0c505575a1453dfc5eda752d42866ed5489629dc3dae0ab2641d4b5ed77a3b8db6f1cc628f80ad60d2a93d3b35157d369b27bc85a1de6df438c3529be3ba851d3ef61425659b1264f27c58331e5a74971e5224fab8cef796456816b76e7618c356ad2391b68327c57933d96263f9cefcaa1f7acc95093a0ab038f03f3d571588f797d2dda35bbfe8220f969f246e62aee92d12a74763b75b080d321cbbba6528af6124902d8f51f4ee6ba67da95b37e8901d7f64ebf444c83591b57be865c5c768efb76ccc128f7cd5ee87d6f05802db6d935dd637cb18eecdacf2703137499ee3269fb857a046b82f77eb7e8bbef981686693afd01a6c9be639e4588d53c3dffe51dac39e997e9599bf4cb46574c1382fa558369b2ec6855aac94caeada606b69bdc26c302f8dfb9aca615d26e660548cdced2256e6c7b41d55ead7e0dd9e897356f76fc0964dac79ad9b19e00cf081998d97dac896f8369344ca3dd9e45d8771f727177ebb45ffd9b1ef5e8035f772ae1388e2b5f48428a287e6a48431a522788601a6cf851a204a30ef440c3894466d7540a0bbbdb359582c3fc6e69c39bbb8512b0a6ed7aba7320d8f074efb9e50e0c76431b9e4ebf866cecbb5bfdb2a60dcf7d266f3ccd8106e48da75f432ef0df7dace9fddef5e917a87946c8c0f4ee63cdef39bb99497b2e6d304d963d7b0da6c97e16217aff865cddefefbdbdebdeead710feeb6ad77dd6af4ea335bb33ab998f7e679fbdd9a7851a6c56db2e87b36a3b530812a8a63de77df7de6b7e5d496adf4006b924357db3c3691dfb6aeec06012a86635cd1fe1bbd1489df0913a117406e1844989f3c8937c1e399784bba6484bf669d71449070688e13b257c681ac8760eefbd0b41f860e767d35d5c94b5c3ee9d0b1c7acf616daf1eedafc60883992eecc4eedec5d2b35d4012027683b71bb49bbee277eabc875a2c2bdeae49d778c0dae710a88faf1d73b4198f124595a8754e2afdda395594bc49fd740e541c9fecfebdc30fff8da54e36e4cabeba8ef8d7906bfc4abf581fff521d755c92dba93c07d9b1d63a78c7b6d7613dfba9d4c13f8977a92e7e7b58e27268d32ed6b353a9a3baa8aff75479917e5224d8b6ef78505a67287c29ead78e393e2c6dc6544a4ce9d7908df8d4c39735c51bdeec98355230ac0d0fea4842bb82ad01199eca31f5f1a87fa54bfce96179237ada75faa85f297df2c47f5df9c13d6ac99bd3c5e3e067e2c3500922dbbe53da00d83555a268db5003f22675f1aed445fd1adafe523da52b7689cff48b75517bdd0d491b98d7ed8af9ea5853c26767b06b1af36167a17d0dc97c5776f12efc938ecc5747953ae4557c7a2b51d6defebdebfe7daebbbaa71e7e7733bbdb6a48e2a0f488f3c1fe9e4259dbbb5d57def010bb6ed7d07b478468ef06da013010424417b0c972c825a3575751eac03c20e62acdd2c7345a8c1eba87d13a432ed5535f691dd4c7a3b7e1e95169d24b69b2eb4169d2d364becb356af2467c760e4eaf6657d67d42376d1fee7837752488770e5179a8ef0377b246572711044d2653f81408822bb04455ef2e7aab93e7d55369efe9fb3ccffb60d43b93c51358a634aacadebd7ff9cb5f0c0c182d1a445d7aa45842ead2a535638b932d49764db5dcd0c2a3b54296252e5c80e0c2c5828ccb0fe796340b529ac5499a45c939e5b4725601e2ca15edcab9e5dc726e39b79c4aa7521ac54fba2414e6906209b2b3330bb96b8a2508cbcfa925c5023bad9c56849c53ce29e7141a2712e91527a7910ba9959fd44a4f5a050b136915256915284b4b58442b332ca5569ca456522b480e3002485a2528ad024b958c52a5248e48ced947ce39a5b26377cf39e79c89e49cf31925e79c73ce39e79c733ea3e4334ace39e79c73cef271ce39e79c73ce39e7cc7165e6388ee33297532a45a952d1a9e584e27ca2fb39a338974e2c29143d522880764da74049a74c399348a72421dadc67bd52a7d4197279a7ebdcd27acfeebd63fdb2071fde74b528621aee3fdd8f8f39ccefadfd7797fdf7dd3e6b17eb27fd3a9da56db4e53e3e468fdced8be39e9537956176efaeec9e7e0de5bfc467cfda850fea97fdc1349c15b9df7b1e4cffdcf057bf4c5c8a43bd9a964bad5e4dcba95e4d5b4d5c5693fbaa7c0dd9a8c6a74a9defdea7ad10a6e1ee5d671439ee3741e2b6bd9a9ed6d15e4dd402d9dca99a215856738a9073604d8d085fee470d359c23b0328c4013c1b62c2b02d50c39b6bd6a861c453eeedd5ddeb763ee597469f226bfbb2beb8ed34e9c38293a9b9c4d9a88f8a8a673ac8f9c7ac4a389e0c94444c1cd6e39678de35ecfd9cd560d36cd6a195893f8a4b66d76eb3acdf35eaf79653d4d20a21658303300cdf3baeef59875ffe1570d342d23d324de77db9d6d9aaecf740c3e37c1d783b701e0abb8c1b2965fb6f78e246ff2b9bbbcf3f4703d9eae7a67db6d394f57dcd3e9fa2ecbf71ab2d936fdb266f65c0e4560c7ac819f6d9a03f266d3daa669f7b6fb5853bb7d2eade9e25a332b6dca0e304d775c5e9aee6711e26b304d777c9b1d675f774cd3dd6a9ce99777ef33fb6ae2ed16745a4655c22968c2c7c6d6ea96ddd95a8966bb869a7cb169ac6568c76f6d4765e09d2ffb3b856077767b37db71b71ac6d94dbf1d4df8eced1cbaa37d1573f919c876781b201ecd80b67d077df9dc145f6f0344fd12a15e04985e2f02ee5ff52240bb0863bbde357c11cd9ec1af445f1bed9eddf810b9d7ad71b799087627bc598daf6affea963de3b272ef6ef16db99dab5a77bb6dc343409361081998ecec5c0e6b6bdb969a0c9de58b6127d16904837387da815c0936c771df8e191fc65965c2c7464704ed9c46c333390dd3deb93c73bb56c23c73e3b24eeb88b0dddada711ab7d8346c4ca3c0e0850706c3178fc0042c7b49b4b5344969cbc8c121ec1dee3ef076a73db0c7cf2f3c0fbc5d6343b00158bb6b9a24656b32723057c30b889b6669187479014944b6f6208b0dc1eee5e2034e4ab2ed9a26a575090d2da0706408148a38a2c591ab05318482121a263cb1848a5dd3a4a2cded9a261981e91055b464d9b2a5b5e5872f5fbe7cc18265e9c9ceb2ac8513d810eb00508c478f2bb1168eb4a688b51082580b1fe8d2028f162d55aa54b91422291b0fa05dee8b745b58a14ba3bd9b222e6da12ebbb6d8ce69ad29619a241823551646b249ee8cf6a24ba35d53b24249b6767b436dd1410cb585fdb920bbdde1874df2424d00920e700b6b54246415608d5cd891d57264958e2cd1913dc218ac04d0eee262602dd29dd1baee12653c1029c05e602bb02dacc9b6b0f6025b000b000b635b31f17e836d5c58108aad00538aa970046b2525b5925a4999cb2bfcb0f0d3e54a972b56b8482185971d537640d935a6a3870e214ce8b861802f4f624b25647902839414902a0832f44342961380e8a186581095cded1a0b4aea6aa924530ae2b1cbddc256d016a9dcd62c918d5e23ac84b564b0cc67c726ca7e8a643c84643f1b4a92dbe21edd221b08b950aed23dba46e01d15ff54ec538db27bc435ba5dae91d135ba46f7c9857295ee910fec1a5da31bae51a6c415c93124478f1c2ae4b0013405d01190120f3c1001f5c0a10547141c45388470000102022a02a4a475249682937ba408cb0d3f5e860c11e4288550498f1b27a81244141bd8a62889a18014fbb1d20a224c22868386d832d25212fb5112fb41f245082184f061c94f8f1fa09f1b42f0e0436b87960e42377cecf08283505a83f8c1c816139800f1c01451422458444d10e98004c7160e78312d941c4018d1d2b3744495104a0f3df4b064c9922527c44c38010912244890204102e58498092734691d6902a555a4482b07a2d80d25b11b45768d95c0132b0128898d29524ce1252482029aa6691aa8699aa77100efb010e40812d89832c3d28e214880ad4e5003931c786c016a02862f7713a2810a1615966c8139612286092686a2e89124e9c7112f16e987911a48bc30c30f1bc2264688444794dc10848d2845442d1ab1118a5a354010eb018af59010e3e1f2448c87498ce7a8e52356a348acc60cb11a3d5a31b47e5a40ad185a31b46288f500e9d223c66323566329564349ac0694180f51aca728d66384bec3a11544bcbbc66800b154e20a51b56b8c06cc044cc4212d2022b86b6cc6d26efd104dbbc6662cd1a241e4768dcd4822ef1a9b41c49695916ddbb62ddbb66d15b36b6c860c2e70498a708005247ed8300215938302881f45302401c5051e2617fe40142e01398e08d7751dd0e67c3eb072c1fa4c6cc6cf16778dcd806d438e98a45f888e5a41ada0561097b9ebbdc32d72d7655e79efd576de30ae261a6eb426d1418d512b500970dfca21daa335897ddf65e8ceceb0a95dacd4fa69fd7c518ac194beb45068e988a285a385e38b971e2d1f2d1f2d1f2d1f6111095a3678c1c18b90960d2d9fa07dcfdab9a1099594070e3a8018916309277a18e5e0c44b093a263684d86c388109808d1e3aac692b5e78a2248a2e29e8584a89b8515444450512a0dc286c14f17c8a6436827cdaaee9144752f0d58a2f20f10a31f3616732ec2ccb32adb230d68c560ea0c6ec9a4e21828dce905031c638c3187b35186b51ab30bba65db46cd402a221ad35040741629d63c1ce60dbb32da381450b967679016cc13470d7b44b5013311f9ed806acb4842cf1c295a42e3c3c71648a2dc5ca93285a707c59d2835038049e071b419e0d216f05cb851446964882e289078400a226f90182821d9aeca0232809d24725000fa8442e58aa1d68d4d0840e2517563033214448a0a143cc88044fcc2c4492c306794660a6b568689a96a2180943ec2ccbb28d10a8440c7517364b153a1a0c0010002316002020100e09048271188a325d17e3031480097a8a405e46260f8622a1301485410c043110c23000c0300c43510c436120469d62ab049bdcf32e655d29475f61c232c14cf0b73348249925f1fd21590d402f8c0c86c9bdd2c61452467ec6ff038210c576534d1389d409afe87dc42d04ee5365defd3f0eab7ebb83bf4b67a12f5647075151a5d1e9b218f9630b864d145da0293ff11862e44f832b5e554a7f2def07619123cd11c4f2dfc6ba1db6a771f4b85a0c0788912a1c993d0485785503d1941f3d6002b6c5718ab9a6ddd27d4733cb396a20834fccc9062621141e973068b1e07958eaf62caa392c824bce9a11e171ea1a9196cff276848b6651086fba4c343461a2febfc506cc62e8935690b48f9fe8ca8d26b61ed7fb1faf0b0ff00d3bc47bf1802f877edf681d1dda37601fe1ce0b03dffa79e913bbad6aa30f81f7b9e026fd413cde6ccc0ad4b5ecaf1eead88a06c2d2800b71e4460936784031cf63b1747be6a2a90a2689d290eabe138b758827fd74a6cfb0ad650d097d68e5039645f1e51f0d4143fc11247f02df21bd0c50320827071e80a928d987dca8d74eb53fabce3328590463899b51a88fd446158072a825dad0da2b3fbf5876850c1c8e8af92acdaef360f9a06bf3b67771d9455ec9077c66d726da7f38a6f8a694889e1c53f450633b92680141ae6c3a142b89bee3bdb12f3c0673e773d6bc816bb3b6eace65b8fae40c6835cd07c94a38e0ac38f3e31cd52c05ac2f9ea4c8810d89077e0227200f52dc817bd8a8e1755116be898bb164e99d572d42c60d61e66bc1bd8556df0d06a7ae0454b98b784fc83f0dbc98e21d25ab61d4a1e0115286cb5bb48f1ad9cd7408142b90223f3130468b37448ddd81ed6996658038a3dd0b0631d7f1243b17e826560a8d02fe0da6b1d0252e0b7eb5c3a85d797c2d3974dd6e5990e1113523e3d3ce85cbcd00fdc629dd7d75341b52af1f157bdd8438618650354b1aa23d2e903473af860bfb8fa79b4b36e019772cc89a2c4ee2ed8a69d30560713cc4892fc4435c4b0a4ed42b5cea28be812ff145bcb5bd59b5bc0d2146f83cc145a11f93cea70b9ca8f956b961c8f22fab36e8c08b70e8d0b2a2c26de811eb9b185d607d319d971ee30c064c92e77770ba0683ae9416ecb3b54927e718cb04c06d78fd7a16b9cbb3db31af78375fd84a2c738804011dbd182bebceb93e023acb31cc85b3533e69aa7f4a5cbc05944ebbffb8665db6c50ed94152dbaaf6796e3fae9e54d67a949bc3a2889e6f769cbe51042e98982b5e9ee68692d931ff28e427181b64f0fc05f1d32317281249d43e569bb74d6e04fc83f7adb86c9b8e44e53c522f34eb2995bc1e206371b3a6b988d565edb49c3165758b6d253457ef2359b74de723054348af5bb03718a8f42b5d8a9aae6a16403b580f67a52f075fa5df8fbe37d4c6870b7c7249e2e0e1680a752a0ffd822020b86bf8c9649cede18a88fb884e4158773365177b406aeff70c3586ea24162d288ae19ad538751fca1f679d4cd092bf5f5f7ac06deef931706075eecf39687442cb39539c2c6616deecad8583383e469cf143b3a7a38782cf945b29b4720b88154d0cc00c38d4d2e8e972a694a3a83d4d6e803679e0a785a2236d93264721e4ec41749429739ac62580250ff610516389742bc8ddd4e8795883f58d40ed8117d2fb312b25c6f406448b41ef2b22093a99ae0eab2892c2bd8d3cd6e9bd1843f13b8251466482dc7be323f5b9f7f173ffcfb54bae5faa7186a773d9fe2345e3e49842b5aa5c0e74f6c4386f86948a523fce9b580fd97c9cfa642e522a511550291a9189eb501900fb0fb64733393c666fbc6b19c3dfb4bc71fda4824a399ea319a9158f7ecf4b1ae32a1072658ac20935f1e3de67da9f974a283d78a0875402df88a4b2ce564001c787092d479f54d7263853041ad509fbe8476af101d4d277a4bcce187fc967312bee53136d75ba785d03f4fcf4ec6acaaafaed2be78b564e33b20bf2aeeb85dcee7c8150a8175fe47a38dd31a2d6a5954e55adeffc6f3010c746d39b632ebe64773b7cbd7ca6069be07ec9085193a593d286761016cd1de2ebec85b85f2f3bc49b8ffeedfc1cdbf59cba9b00072024db89954fb2e8d34332d235e6b0d9da17b52d1aec8deeaf0608ccd8a437737be508ece05cd534156dc93c282d8c89c9d949d13e9f74bf31481b3b2155d89f0b072b97de923bb409a679a535bfbbe7a418cb5c13e784f81b9accb7a7ca3aba16433071c0cfa0f4b5ca484d5ca60a1e045ca3d935f1ee7360ef8163e33677ecce00a84701f66fb9ae02a231544f952de84e45a73507da51a80ae6758948c94bef481bc0d19c54653e67c781ec4de611e130f469b4fd44b6c0b189c1a851c18004b27ff73a9a8b46c7a113724c0e8989e6ab7aa900ca44aa98bc9e9c39c30b551e10c348e07eddefe7c7978e2b4dc6144b8e2dfd9a1b8085c49e530fe7d9a0d9aa70869a995468e593225eb6b97791b37e3f096e93a32b8576ac6bb935ccc11321ff6c529a45c96bd8ebd093d89983829f6fb9f7a95fdcb68244ec1a964442aa6bc42b3b66c3c85e61e79f92a9f41f6b2974f8003fd95a41f74b685b57462217363d538b6989d59916f50fb015bdfd28996245141d2ec1a53b62991ef9331b838bd2a36937c90cb334a46462e9766d30e67daa71d77c2dc19405812b9ae6be35edbe13ea0ba9a6311b6ed9e7c2836d7e7854bc1804340f5e801335e3e7e54c46603d9e49c552f8b3cb6e3c9d802e53a4750e5a4501e1dbcb706ad0e58b201a034863228f9adac7cc79694f4a9572b67df835be82a1dcc6173e5718f138d6b0a8504cf8f9029bf5db0d1bb6af4f28dad6eddca61786d085590924eac8eeadf6fcc39208bb649c8042133c4443b19c285b944d2ab1a46cf95a8dcef07ed00ba20e9050a31cb20ce73aa9398ce71a443d02ae06bd3310a1bd12c1e4244613da57a00d83a0905067c936fbac64066fe601be3ad1024319d781b27f83dca071b309f16d2bc1096a0f5a81977b3d19b89910e487c1332f9197bc8a9af3fdc60b250d60aa1757ac1e45ee4e27caae9e18549ed9a01b67c8ab7221585d63164153490ce09e269bdeb4d10484392e0cd1fb48daaef103dbdb1f6f7fe2da1de25d043a52b442f8604b26fbbac113949e12ddaea67be131a1c0daa0245d892a416626a127f9254690e20d633201c8ec078ea383be523960d3715176f2241adaef75ee71e1885ab2112f960abb822a0bc876edb0ce8c0f628d9cbb155cbc12dea73587282ba675a453aa3229c0e246f8dd494c0c38ef6cbeffa18eaa48f874cb44a7da8803937c16c8f9b78e0261dde62d9d2b8c70c264a7c38ed4a5b54014e10f8205282d9c31ada8e124e416bcf2586edd8a3def20d22035a2d68ff326d2c3378fa923242272843f2596ed14b358dd773aac1391a476e35a21c46f99108c740a4ada2926055f4c3d62d5760c480493ed6fc72eee225ec0ea6674994e5cddd1be7a33f266bfe853bc9bf6f588c960bab393d457d4081b6d0aba30779b2ed684818be94235f651d1a7db2c64474c3f1e8c52ddc88de8c2ea39163e83a96077f16bf8b3a2b9a84a92697df4e8c0dbf11ab97b69a5b868460259dd16c66422c7219476ad8e29a615cd59719ca447d3125be8de755f022830332e83af4f3e58ad8b784451d2616680bb03da3dd151045fd8735a2d255c2b4c2a6c339f47847678583f682e9bd15fac79af7f2c055b7330a7c45cce8b108a67d89abee55aeca8c42c63322ba1264c8eb92be298d1621b62b6cf073f02e7c1c3c225673ecebbddbd6dbc0d733f2bbf4af3692a104a405440e6acea48572b305236b421d1027b143f39ae9e31f2541878fd7e001e14f4aff11f1cc8f49c29343765a15b3dd071c2105451dc158c507c2a0c76520b5304258595e04b7add5019f188c955a5844a8a5361b695b33cff2c361e7a2872865380c0ffb13a44ccbf3f1aa8a4a788fa122b76c912bbf1b95a3472aa70ce091d467592f06759e6b5833148c031a703044035f64f48d592fb6973561009cd0ae71cf59767aa979af5b2b0b4efe39b73d33eab5267aa1e6a44c19cfa446339bb17393b9e0f056353f84d50723aa23e686c0ace033fe9b86a67d7d51e4c66da3d01496df943df8046585ae551c4b0a818e2152b2dd95754d50825980d7f176fa6de9b7cc5fafc1d53821117840e3c0c6cf1dea0407e8134282f91f645c9ae7125818fe255328498bb4584a6ef128c214b6082e0c0fd9b3f472c03c98353c9bfaa0856d18ce24675c31da070011207d2a5d4052ca6c54466bda8f7a350468d67ee5bbd4c01437322f30972e8ac8929f9ade8187ce2ef468f7b6de8327b8aaba64a7c8c3ebf7d9b541832f889d594f765afe20fa199daf5f05dba1280e8fddd559ad0fa0137f7bd0a947dc7d5f4be6b944e844f0b807c14fe15f55698aab07bc93182df0d2dc6848286f298fddde39660c57d342ea589327b5f359af59663f93cf034b954c728f430241413a206e135be63b4f3856ce9670e5689d5e717f006da8a74d4cc17499e0afb47e733c3b9df807d6d2cb20ee3f255fb038370479f4adbb39a0faf6b1c69687b0b14cfc07479b4bd30646f599e816c6c94663feca292ff1c49a2cda9554f288a3f46356bd91b33c7efdc6348117e1c847a22812514114f088f9b771f36199a511797e7eb0a6466cdafc0f65d909264ec6a735db6de0d751232999ce128aedf23814c6a7dbce8147d6076200a1175f72e210fda24a9a6099461192ae33495d86b880d789b98909fdfacc52fafc9c6a44c4450758a99cd8932c5deed80aff5a16e1a26298160ee8b91dcad9c2438d2b205a1e3bc50170a3af88f686af439e3add0ed210cccb6c33a08412a1df8d6fcab4b431fc455f58b0f7556144adfe975c3015cabd06dcde6014f373991150448d4393fdf651d1728c93c86191e6b4fd99229b503ec96ccbb229fbe0b324781b988fbf1a19841d5618c8f9d2d3bad8efe3e08084e3b4e33e8668001d95f0269d510662f0ae30527989736591804093eb8b70a8f9d49cdfb342878a12ed359df08dbf0231789c96fdcd795e9021ec0fddb48393dbc007bbc78788dbdb01617865546731021d4a85c937d0fc11ea016e6314b4a85f843c100f1014406547282bc55b634dae0ae8691258d260e45090c499f707512ee4d540a9662fb3489b26559f84f5b5a4092d5e57e64bcf5504e36b83a84feba01aac8c11bfab673c69fd835be171b95f9049c6348db08c588d005cda69c52ba62dbd4f344748be98666e83b2579f44cefa47282b06f9c67dd43ff77cd12fa468136e74aa4ad3684d224c98d57f9f30de991835c10b341053d663a01a3be89e220a454e8c3111a3a2f1211324bb7169037731b8986b234415a52b63ce8ff2a16440650071abd2fd539df999066a631f1c55279959524920659bd36db5bcf7d8dba94be62853f59b5a41d821e7a76e220ef3bef530b06a931584559066a2f96b2c777c24edd748e3275c47e18e0428f5d2852199ac5ff1319b46c10a56ee195b80d4aed18f03794b17af0cc997e64f28e146821fd71b62257ba54ff55baf3d82567f03004dab8839b3f57508a0b51be4d94ec269e6922713fcf54d9901416ba2cb2c8f1077999894ee499677d8ab530aa239487a5b97b04ab147d5e3c6553381b0fa22a630a4944cd1cc6a6589163983f83701b1280fb20f577890173576233744683757e751eb1a472139cc325bd729b0dd28232903f3577c06b6a6fbefb3d8c5b39f1dc63a81f5a048a2a38b1d0d5f58ae26c355e42c300b12ed905d739a390dc250d244b77de907ed44c3ef35505b8ff6d3f4c952e4534508f25aebd852136826b8698d058732496ce2ba247ff1be78ccfae01ef688b442ec38350176b7cc83048d5609ee919e4019e389d8d9a427a000efe6d199fbc30197c4c86ae4bb12ca3290aa7816861a27808911a416d9c13318fdd1878923013e84baa8feb8e473642403317e174f13552016205a35a7e52c3c4d8c27e39f12c29fda6c8614d5d10bad1549bb1e85324092d22541109557a7776c12afe7a52ed024e8ee9e286d8c341e05ca6d3f9b70a65e109ebb3709760726aea71e234d63c0f8a5d7921ee98ab8f4ae339f4000cf53f8d24e9dbf3e07ac0af1970bfb458cb2cd63f15c0409d384e8ca720092be1b9bcfc7b56017d501c098e58a95c0e1ce99cbcc504b69bf8adca0c91b6368e3b1ac3fc82e675461459828bf809b7ea5ea4b501cdfddae8063628c1f53c567087dc6249097712609c1854fe06069f8b7eec8523bbe37dd6bfbadaef030475e40ff6ae9d186246e1d3481558b4eb8408ea72fb193b5380397f9e7e5519588e10fad5d5205093c32f02dc97251bcfb45860f42b7f3f669b7460b636ca88ac0a662d8218bf2b98e8a051d8e24e4e3d42b22a18f09690500537db238c5224a770e557f2510564a18be511dc6c7ff56701c9da95e0a6a000e548119419afd053429aa3108d69e7a4fa7c32b5983e803338bd634a3b312b3ed12720e48d127290bf406d3d2f91df056fcd2d478208ecdeec2d562d5f2db1f261ea00dba7612d22db59238a55cfcb3eab75445e92b9e484efbf13de83ae5ea98f036e6e4e084cd5b0227ff7dd791cd2f3652856899d1680a9b4331dd6e4efbd32fe8326c545ee8fd56a11a363f6f4dc2d5a0f78b4291c0816487a7360aab8b4b056bf80d2a6f95dd0a6e2ad10783bb87b117273523f304e7479fec4521b5e68f1956ec0086df3f51748c9891c1c1047750f52df541e6c8ab99d768a50d985ab07aca8279a7b57afe6385a8fe0b14ac09fda004fc04653d423f1a2c519613c0b062551aa29cf77101a4dae7abe6750c4daac14d9c5169efccbddc9e5150abb2e03cc443b975e470901ba711c9a91d6325f6ffd829adacdd79e679bad385c9c0b040583b8e2fbe0de81039b6a1e599ccdee7c2dbe1b4499464553ee0b1e1e102afff17e7f507ff601a2f163d9ea1342abe7ac4cb6c92b03877d22d1ba925d34c44809de8e7cd4ef65ab20cc5737c6e4c5d00b94e2a25a1ea615a0d1bf72887ba0392f0dfeccec6c6bada479b61ea536dd048ad524afb825135f43cbb075dbaf42d6d985a178919e0acb85f5235bb3a01b340babe6fbe808061a89de61e81e194b0dce9efc2b8afa33ab2e7f2c743c3b10f242ce7e4107acb051e19cfe35a62fee84bcf534a807484fa8d19e148417c68d7767fbb7c57f0dd42bb4cd9ecd982ee44ae28eaa2425af3375ae41039dc3b0e6d5105020fa420107001a8176534afe8dbbb58b5213de6cff799a702947cc16c9116a5be9658cc016aa44d9022afdb3ed9b1f53926a8653a59c5f9d27d2500ad10dbcf9bfa65dd538b05c67c61663376e6010023ac69610c369dbb462ba42eccb4e6ee31f271f5d69a94cfefb2988ea6dd325c7b209754d61a27fa7952afc8d5fe61ef912a7eba8a745a126e57dfb65b4836f384ac21bb88e31810f4d55d2debce2ba092a6b029de2dc0dc255494b74b01d8fe6873c2c3252503ad18881df1e229442ca2e4f65aa1f555c3716aa5653c78a4d3a8fa8721df5894081aedc903d3d6f35976922854eddab82393b444246ed82065cc24a4507aa98f5ed47c5c9ba5b32a27f5bf10392c0adac49b34f7f64631ac18ddbe4aed27e6fcf143885131dfb7d389890bf4999689cb66b77673d1c2d55faaca444e828a145b56789c5c024b8a6d97650d8b42023272367ec674e6584377ef4c6c5d6b63b271802b78483ad66c0a282fcb5300e0813c21bf47371c020139e7d398f483dcf0591ddc91bb1295aa3360ade7ed05d4e969f97f016469a7b126e0cc37534b4526abc3151245bc75d7aebfc44ae46e95326c165c4b8426dfa3ab7d0deec56ae012c44b6e00213653815bff237581a8de7ffc22bc40d021c2e0e81830879ea039e42cf7a28c17cf1c008b09cdb782b780f1d89a567f89a3b2be73a23b11f041bbc9f958443997604e0a6e05c736c5cdf7a59b21b0a2a279d831f27b6064530caef6b044f76e139221683536620fa9ba06887a53bcfd36733ccecef1ed7c6d543f7061ed5182cf81004eadea1d385d5b7d15751d54a52783143687c111915042ddf3c79e2616380a881a807545e043f824ce29208d143a2c228273cc6e75ac82d1d81e98429cb7ba774dc40904b61df6cc566ad78784b0b96540068542a4af5206d4c9acd72ee0a3bec5a406377414d8d0a9347db1752090578b4b6bc5df1d5c93161234f415394035f8e6960eceea02d7b795462fdf070f70df066069aea1d37cace527ce6800128a78aa60cbfcdc49e309344a011cdb2e31d27aeb82a5d53f094227f95d49973a2cf33aee2a8c06e9d4f23157fe614e8102eed81aebd56aaeb22d2af6e9b108e7f9d602104219e32cf916162f81187e1d71345b7a9fbd0b1354f5ec2170c80bce9f006a40451de3859976b22c3cd13c03af1c1d4275b08af52067b19d0a068e1ca3889eeff10166be1965ee9134f919c4e210c194e8eb52d394d8d3a96ac1bd0fe1de9c70471053d6c3ad09cfc4a9e7eb598f2c22d034d098b6bbc53758240bc81fc7622e4eaa9d863ecec0dc036d2de542fea2e7a65f63b0bd7a665237eda685d957406bcc1a193067e416befa66ed12c79261512b66c51e60c7728edf15eefea7091fea19fa8c806a6b70327c6c4c1a47f968730bfcda1acf8f2718cef13f4b0918dc4fda32565d6b711e4c7fa4e59c546a746be4d10f691b5f5a022a05f5469f07ce1916a71b6b61afeba77cc7b955683be99a12ce52185ab26f0a97ec7159796de47657badad324882a4b6c64a53dd8628a317a62d96b496b6ef70a38179724b4d330f5a33ab85d7f88354be5362115b05b73944bb538d503e82d526d807ae5a765f000dbc495b85c064d2a1b43fbd4a9f9233d958d31dd5466f44573f3e3354ec09d9ecbf641bdff3ca2e6f798cca69ab8c6a71eb9991b0dfd4989ef691843a6606261b9660026444f2b74ac38626aad19f4cc2926234dd403049d32e074f21a15c307d2d80655437cf7c04da9931723193b733b3edb052ec2d0aa69ef9877256745b85f853fe6515649f8645dc3ba5dc0c98496ba0f9864468eedc511cb805aa563831dc4700f157b971d70748ca542b0f97b3890e6798b0c33327ab3767276d7f5b8103dea5ea79e2e1a6646feed9110ab4d5f3dc0c7f2d8312f92096675f2c0643dd5f476fba26de4deba8b2db1a2ae3e65096132baa0b14e8c9299dcfd456837ea15f4d69517dc98a8baba26d464988412daef4e80d069a268fa2b518ec9c440f836d83ae78b0655d9fec85bae1a4c672c11a2b7b0460c582e252b8d783d91f70fceb67d1eaf02971bc18b03eba58f99eb94504eceb7584ae703beb2a048a08c5be8ffa7cc0f3772c634116f3f33c52b7d45dfc3c8a117280f57d1e4e696d04074933e2110bac959fc7198c3831b0500b95bcd54232aabdcc9c66c4a0e55cbcbcc3289cd0acddaccf37009429348036b6e99097a6ce798ca82177a6cd6ff399a6693dc30b3a9c18937b389162b267111a26c2a45635704f88e6c62c6618420fa2fbfa6f327e4c71f0217e7d459ebb58a8129d7fd516f45687911c8b99cc22a0f887a0a9cd76288bf15db0a7f0cbf70a6bb1b4af3c63099ac59477354cf1f4262945640a9a6f603ab668fcb2fe8dc5f07ee88cf291d289c8cc32d5315fa15c1d57e738572409a8a0925347b5de62d2dc5ad6a01a6efcd91fe0286046985b427da4e2ea9a464c05ff749e2e1c64c31281357b2780cfe0c2ffc001f8e2f5e00aa69801ac74b8eed1507e29f46950ed8b1962b9fb1b29994606bcf915786f66cdb0754831d63b0fd3da0642ccc32e53158e43f1e9890a934d3fd948788a69e42be71f390fd33a0df3816405b580e01d348cad12a937e935b8d2c6b6e06608317e60a3e626136ba460aa9afcf32cd54b3e4ad075351d9becdfb23242974ede1419c648248680243132b653bbb11631fa5365d8288999b11c1c71e84ddea529a845d08d1858274c492eceac6195a5e81b26295f34aacb2b9ed23669ca146224b792affb797a5d754c14ce9c04e8dad68c3f25bdc748bc3bbe7940094acad01fb305a34e683d6fa71797109ab8604848f9758f813af1514a92bbdca18453a3c0d03b21f7b6cecb6325cee59126ef1254822802328cedae80ba228f7d49181122406ab15957505ae37b4ad977935b8f8c4c67c77a309aaec9591a64f6263ceb2c98fff9ec5908401305070e45b8c86881dc98b893f6715123f614abd4786a8612b28ce09d269bfb3a711ce07d44d769c1f2b2025c0c6e552009e6bddc3bb0c3f571e92bdc9f327d9a73e5aa12e6ba4c736c3e5b2ea3a0b5f0e50be8b656bd4c89612d5638925d7be496446017586fae40d3d5783e646301a2cf82df5a89c75575ddc30b0936d06558b26910b696f50cc0bba3a7cd6dd5cf4cdf4694bdc88d0aec73b5e2805d9de0caf06cc6bb564c0230fa3c806cc8ee6682837d78de2b904cb684b58d3d484ead2c68dda7053c45d5cf74844c5b872fef43c9f216500eea3eb470052e1e60d63358e920154273bf5e03e03876934092a21ee556ce81f853be0e9332aff202a2920a445b12b9cfa7fb4df0e0af0827042757fb43fe71247e23fb1748a2a9114a5d7164bf50bd8becce9cbcfe8714801fe8ecc63ec862dac9f81a06c202f3b4d9c527488fd30ca91f7cf99fd0ed705d1b74a0600a6842f0458a987e4f7d3381659c47aea24480a3158d701f56e9d3700011b40084fbd62c15699701dcbef914f38d235e023d75e8611fdaab4f2922dffe67d1df8fcb12e6e7ebae9b100527c6c6dd3777e84a29fd404034b90044ec44247af1e9adea379d23c5c88a8518048ef0f46a1658857b175ddb0daa71d5f8568d667ba88f50378009a3a03ba8c62aef66be56a17ad360347691b027e229621ad67521907d2897b6779f1dfe0b91df67b8325d73981ddf840c714aed6b8e38a8e7e3487dc3db92a882148748525dbcb489122a24613b1f1d8cd25ed590411bc433ed83a13cb9af258680b1b052d7517546a5371982e970e667e29db287a8df278a3add491ac5ea20dfbf46f8b08bd5b456bc7e45e4d270f02044d06f10badb5f30d13fe89299ef19498c3686a3c13fcb155e62376bd4c8b0e4d5139e8e846e1b5ef642be441cea4a2e62f2abd0c658ccdcc66a20f4944a3d17db769087905dad4e997f38982ce9731e0884102eb2ca65058afa9e427053126ba596c7251f82db3a1f74bb3519fa9d7cb63aa004f29b95f1b19e105367889cb5b3f67555929ee1fd5f70d411147bf5a4797fbfc612df169c9f01ea3d4d415c404ec24a07ba1e4e416584a21ddeaffee319326d0dc8545f7fd056ff0f8adcaf80c53adc115286e260a4420f79210f51a71e007bb2c0427fc494b6a48af02b04a87ef7b598c04701969dfb828e982cbcfd91bff72644ee2da54c290508040304040444bf39c76fe3d14f1d5ce1bbba81157ef3e81c0f07d66ed3d8bbadbf21067ff04f8ed2cde50841bf81bb3c514ee7be4a29942bdbd61c57ead14673b7cbc33919142e2f9d76be120afa95d30d4421e8a90deaab0dacdd6d75e53ee8eff26cd4b74ff3dda0a11d41bf025108eab1721f513a8d94270b9aca247da5df34e6570a0ca11423f9656ec0e8235b8ccd6db434d5913b2e2f8d592a136594aadf70098cf61b2e25b144849c72d2255b96accc6c664b52968a7ce5dfa52654b594c3664fb6885ff8648af8248ac7695714f36489f8a40b101d4d47f324368255130d1769f0585ef8848857e3d594f97e62b49b19a9e1bc314f5cb8b0b9e1a28a2e09f3553a49f2dc6fe8e408193a81da6eb8f8e910432735dcd8e0d41421c57251e8c4880b36e6dde55d7642a58918fa1b36c1a28997aff4b7891561932960c0cc377683b08953c8c4c2864b5c44507a8c9c79b61b6e99f3afcfb9d9b71d90a28f5f0d959a9e8b7ec14e03de74f75089cab7e3e8ac473662aa5c0c6890955063867ca51f2e59e297090b4bca705728c57e432645bec6f8c924878fe13aae6e00055dcec9dbc678f2342e8be745b0a7af706bc4d391a8135aec31e5e5a5944e9712a624c7844ba076779750f90d954c7ddd334b8e9e3bf628bf2ddf94f41b4631f34d451ed61b331aad8cf6cdc3c6434912d108ac8439e20a94198c62a005130c1a1318c29813624c30c31225324c3109a1302ca192a2df7ec32458a826e57cbfefae1cd72e78cc5fb6754ffe7efa34626a4a9b52ca39ed1b2669faf67038a77d89b0313f9ce8fcb913d723b70893143dfd2848bf21143007f80da190e95d2e30f8f61ea02cc22449dfb1bb41e9cac87cddeb321cbc0d7970faba5c32af0b158208b0f6d90f80be66108887a59738f825d8f3829779f46eb53c6fc10a8260e4f9672d3d4a8f31c621dbead055cbb31e6d9f62ec8963f12702f5643156bd57c5e20f10052b504f8d512ea9eaad568c227ab557fe32c4ce5cf4490f8489c198b43cd1db88f4a87d6b3e8bbe8b8070d18b860fedb39c762e02876a34c863cf7cfb0f8d487d80b7afa2575c2d9e7db7f86e9f0cf490c57ef45d9f0cf4a0c5baf6eb9660b5f8fdba487c94c2480b2f67400083235c5e318b0f2df80266899323b2bc40b0e2444594324a483d2152c2840b264aa6cab8c08a57748f3f9b04112424b6a8e2062149bc706821cc0c4238a105981d38d89245152d61866cd182577c42ca871e66c0614a082d5ed169c49f8dd250c033cba8cc344d935926339be9d9a7c1d6fc78dc711a71a7613e78af72aa9ab3b366ca7c85d52ba3d2f98b362fb3f9b1d04d6db96534a3aea99aa612cdf86ccaac35a7a7264b4a4eb02b583021c18e9014f134bf21122c4582c8186141901889c5620c91fc10612c844892bcfc0d91c46080cd3130381333122bda610a0c955f3409c9c02908e3e9257f795904e3cbc0e6e358dc9952f3791febfba17147feb45afbe32ed7fef4c41d091477f68746dc9141d3d743e029cbc35488085e70e4e86534c45facd40a60371ad27a7194ed80dd28089f79314d9087782f86b21db04bf7e28f108eb5e28f106ee204b00be1a29ef823848f80e28f90f8238493dca583ccb41db0cb15d1aa29918d3ddf1a96d3f816b92efe18e10cd178fb56297a95f377bed232efbecc571f95b27395aa83d1785e19abae866adab44fd6aa1eeabc7d57ceb54fcc288c880ae454aebae9ecbbb9b9d9b8aef3ade3b883c0772c5fd1745dd7b168c0ca4436aef2cde66b577dfcb3b3e9baac8300a5d1b466068bc562d580b557c87c9b9daac68cdfe5b1b15044f98da94cf1d3f76d565d070e4da7f1edcb61393fcbbd2f87c5753a6b765dd7cd8f065465ce026bfc95672a7ce7f2abdd0470f0e2af7c432a66bef38da97da3dcf6ed73de5d070ec995731ff77ed52a9196147ccde12a1fca5c9b992a9b992ac381015596b567ecb30629f4610ae60466b43a730356aadccfd9650867810df9316142da79273ae5702a908e8a7947f30f7eb600fb53c28c8f2e80f5c9dc77c7556075b1e649d615d7e5a4b4fc0123d919d1e3c67af8e815fc18ab4185c75e39160000c4c8d94083168c0c5ee0dcd8d478341db7ad54fc53428ca173e4c12f08632ac7a0f6898c1918fb036377f627ae8b3f881c70b02cd6c796e2ce463f511d628cddbdf1a7b3297d10d2147ff6459ba698f9ba4f6d245ec11ba7f4a80399e8edf3af7ec329507cdd279cdf708a115ff7a973d856a7ce88fac87dac498a3bd15b4c5b313c1a7955c6478f2f78fcd575e8a415e2f7abebf0d125abe86b4d922bf6a43d7df52457cc1573c55c3157cc1573c5322ef38b0413a39a0c4bedd4102f98f9ea511fe96c238d7dea379492e42bb35c17bb46575ce6a970d6c5ad753118635d5c63e5872a547c9822a5290a14a6a5274e9a283159a224490f3c2089eda0830872c0e186106cd06e5057a307f51ed37ba8bc47e63d56de43f31e4378fe02c2c44937889e476bda2a4996430126d552bba2e7508069e608a9c082132d6c790a8235455e5b175d808021cb6bb5050f4f4e51bc3626b26059c18bc53a73e6cc1916e4c73fd45e9314698dd2ac49bad192fe3dc3a687b8b1e6990ad4d91d50679d17346179da614034521f750d37b49106012f58d7e5093b76b42b85144e6829a594b2650d1b47f18397dfb00ad2d796e1db757ec32a443cbd20f5fbf4dc46582cd60dffddf20c8e0003c2e32f52dc05fb740b1bc4ed3301258f63cf5c6cd0ea2021070d5edd2f3974442917ea651be922739a1798a44ca61f28ec88c605261c564c4ab82c9b52e5b9df704a131896a626c22624c226219a9ce46c526aba922314bf82519c60e34f52faa0df7c93dc56371073cee8bae15c6c36f837f3ddf62b4096b9a684177d75321a3602dcb819808e7f5d7d5ced8e8c958c1e9809bc2a63f5d165f47800048200bc28db96dff5f2715b9e9803768457d7cb471721870e122a007aed1c25c56683fff3a2bf60e6960be1bb1bc88167c4345b013025bcf63d81177fa694dc87d32e1f38eecd0fa75dd1e70838d1f9934e234a6e9817977107f72db50500009e11930463cc39e78435e1cd39e79c59e778dec2b681530bbf72dbde762a62240ef896adee9df63ec2ab2dded63ec5009533411efcd17bf04767f7eea2814e8b52181e64b0db6abdd0b1518ae3c18d4d4d365b2d7d7e3c56003daf7de34ecdc940fade570a8b8137c38de5addc68bce8ad4db64f0e3b3f9306bb159877362ecbbc56e63026bc2c6b45a6d19163839b37ddcfc476c19af0e6d783bfbd412699d3680657ded406abc25379379b0d7e5ab369deca19a57ec32c4d08f80db33ce1b46b3a18afa76c8a2013fa1403d46f982507269967c4a4b9caf7cbfa48d732d5e76d5074fa81391ebb55b04d8f66dba467c4c4ad807623a65d9f9e5d04a26b59c66994b76fd876694d35826259e2f9614b78f29969943c33162fef3c381c1c5817afa32528eac842ec70c4ce46104df339c39c4ef41b4bf3a4c70e87077ebaf6d539343dbaf4c470b7c7e85b8c721be0b12f73dcf4708618e6a53df0d28bc7bf5f392f7238ed2381adf369bbaed8d8374b91df108b98f7e037c432c533183d1abd3a4b636bcf8829ba1113efb7b1b7bed9027a3a70ed1069d92dfb0445559315c4f119c491d990de1e81acc37101f0fb21b9549b616374a2973610fda671f49b1d8ec6e18197eef4139245453fbac70c50c5ae62b047e63ea8f4d99d907c1c405eae3aa1ee08b447d73a1b441dd7fc5bc755af6b472b746ce07c6271faee3362a2b1b3b149228ef8f2d2b9a1d5e6d379e555e594135af9f4211c9baba811f471da87faf783835fa97c05e608f190ca55fcca7c6872f99275910844418819a2882f4f4061a60914bc50031720a092a8618b1ec19523322b517019134a87d8240cea4a1679458bd4ae30994cf4c0e2c8144e982c91a2e225696c7869a58b97575a180007a2f0c0c414151bac38f292575889420b0dad78097f10c351860013617edc922ba80479424a114658f18a34357c8cf1c6152c555470451527407a451894e49eef31df2edb3d1aa4d08a0a422b62beea5431040d08889c2ced50258c15494f5010c990448a234856bc10698206a935068b12541424a800f3221a72e686a922904c614593170d0d16a892a40a952a46a29e8b9e2547311996e2a92eeaa336d249ecc4f2c830cb237db9c41d29b91b8159780619ccf248e7a8285d3299979c9452b2f4f8d5f0a2371fb13c371ae2bd6adc88be685c3a83d9207682c36cd0131bc4c5d7c63b706f9c93be1bb838be02031b1564b980c2003446845ba4685d38c12100a8602bbd4bd0b00d0cd861a495e2a9a0e5d205173270939935825d188383cac431a5c8a396a52c535cf414c3573ee2226c849138878f9e42ff727912f275c17c64bdea8a018a11a3161668c9e223eb158542e0f58e1630dffd865a4af0957a16022d4e49737f7a5922f6b5c5bce8311fbda1542f41552b75131046bef6958fb59d3a46691b7591335f1be963ed1ccc681a473199177c6529aef214982c738272c157f6f29597a0322727712c2a46362265193361beb2d1c7e83b625c304a7cdd28ed2bacfbb9caf8f85a24be82f0f139ba0e08e40108a193160f049ac1ab1e3c08edb34fe4ab4bd5855524882441d02069ba044145e848e804e56f7e43271c325f9d237e01616a57c5c840885e0b02d17cbdfa88ffa930bf0758694a3f95ef741955be4faf823601cd37089f79d1ee4f47bf34a79f0a393a34a7aef9bea8d388f4a803bb4ea3bb892e424618e0a99cfec64261a77e28738dd2dfb1533fbd46e642471ed79d7a2156edd44bd087f611a45d74642bc1ab32642c2c0710037d05fa317f4852ba623312e4a9769551923ea5abbcbd973628f3764aa3cf6fdb2ad053e93ce2afe20e20efa3f8c3491cfbc21f47a9b2a2a70af45f805c55e803de0fed87a4539742475ef55e731cb072d106959f845cf0565ef9494eb0529731da47fb094a2923a8626d8562f0d8c77ce57644e7867c74a1221eb7a669ddddddda6a5906864c96699aa67577776bab6939daa5797777b70e908476e56897066652447abc544603979931c6d8f312ac3ee66b6c86a75c483f8cd43bfdc3473542afb2122bb5e7c531be5c908820695a46bd85789595bebbeed8a9e7a23481032a708cc368684ebddd3d840d9a1e3dc64d03faa8a97cfb78f0eadb01c41ac862c62c0fbb900c5ef5a40fed59aa5d1c419e82cc97156b6538051c2681d4776c2d900d5af97a083bda0705a01fba711c5f3fa17d6e7cdd84f679e136ee01599e9d4a816122e4d04142054a681f0d06482383efc56782cd2723ea85e37cd5c66f78c4df6efcc567f3ed00fa0ddcd12ebe014f6817b7e20e3be8627d282c991fa2aed2c15a79091b04c357eead1c167d5ef8ca57ab4abd96d796065e7d03afae1caf3dbfaa40bff214e20f37c59df6b671a00ad49303d61ed7066075b90660f556df80d5fba64adffb1bfa377e03d61b87f19d20020ce7e3fce673bdcdc7cf4eedc31cce47e3371f7d1b4ae6575ee3359ff7ad98ea7df734fd8e25f324b48b29a8a3841cb04f04a21c56416dcccccc193333333373c6918a8f1426d0093be6b6444be6d7c1ec2e0939da35fb873639feb019c05bc9daacc999fee235c878f0191ec9792a15b8e31931f53216524a29a594d2c369c98da0a8246d74a64d6c992a1a012080004314002020100a878442814028184623e3dc0114000989a646704a99c992344951104441c618000c228010420c014086666a5a08944b0556ac71951442bf92d39fae6fd1f81b7eb72c0853ca2024a23f43ef6ae20f0c5131909b3e0c7d4a0871ab7ef477f14b5a69a1f42e38fae8ef83ae1f6f2503dd5aed534a00f765be2582dd94fb9414d8cdeaeb7eae9274d758f60d4cdf9752e5dcc5f792e9e7cebfbb7f1afd75fca0dff746ffbb970a4c5fee13fbb460311e9044aff17ab438f0f2e170a89855e0c5f811a797d174150ae9939065f454e65601bfad728a42fd7fcee4141480ae4f0b835a56231f05f6b37d1f57e055ca93b013aabf16b518d86186b31446cdd24cb03ad061ee853df4392b0dbd723c700037a8ec0686a100403d44cfa5c2403a10d6830b73d7d3ea97151ecc61f3f530afadabf3227299e6306078381bebf7b67e62c7e5d36cc8da6440e74cedeabd771155f69a62d401cd304a7541cc51d25b4a2d860733a10203dc8cb9e5ae395b17595c7c2ec59dd8ec3a2719ed88d4d2d3e800666a3b29b556a55764a3e6136ab8a3a6383f479145b0b64d11d666973e400e2664fcf82b7c16e02930f564a17bd42533ab82c220fe44cf3006ecacdac0cd41a2b4ac9c1f7baa4867ae01b8955433265a7daba60d070af2724d590f8c83708b12198dc8e6a84e7a6e4c23d4d262a827683a80d833748478a32dfee48e03626ad8252361a3226292929150d79510e1f7d851a24e2943741685e2e9cda5205b939e0bf1269df6a418774942c1bb94febb999fc636a8f2892da58362d0b94f30e63400c58d825103a3a916d7485b1e317c691e4285a2a7868099a3bddeace2112b19426a1bffd67940afa05f92418670c4fdbc8444d16305f08cca12b36fd27a049811ded8d5f372e2b9adcc754e2021a77865cd7920a24abc90beef9db14221c418840e5e77940461dc823ccecfbafd447eea9db1282056e775c6fca626db27417d624628c8ac5f6dad33d6744aea6a6a5e5b41914a8e3ab1ec5deb60ec67b4a4d1c37b0184a3591673e43d2eacbc7766699bb02bb19406c17184d81ab8e732e9364b94a3d31f27dca85804c93067f2aba2bc4ca65052277b63ce5f345d2ae2448d8de721cb17ba8f585881b049ee21ce2777199c135189c88825910e9dca423455d4e43113f12f13a6241c1933688bb93454fe1bb9b8dc35b3c524baef4dc4e36ba819a97d65b19e63bf541d00a8eece4a2575522c7653c497f93a1702b5f4973fa61b5cab8704769f549facc0a6af347591fe1220fa22c5295e29178694ee75e0dbacb540a43c761b8f8bb799e643d543a14b21afe01af541d025d38fa48043178e7c4c8a249060780f846be352f4dee56a7c209bb8c0af31f8684fa8895ba2814b25dbbfa9432295a397ab3a129ae7b243f0c1b5f37f48f411778fbd8925b892c934f67e7c00ffbc2165615b575a5757e143b2ee61b20a135261e4a9ac427476adcee9262161914c5b13861999b0189047f8cacb0b030f5425c8606e464097cc40a0428e2cdb803e856c84eaa346a9f8844bb7d5799c15ab833aaacfca59f004d0823e93c4553b2eb2c10b3ee408ab719c0807a563072c9c63d9cac57b2cbc9b26314dfcdf6c510d1c47e346675ee4497e1012e22087432861581807a60bf3f17c75e646a40a0a085714439651e75f5f5fceb239e2a11bfa5fe3a21d636b60bc4c51c7bea1c2735f7a3f4a7feb48ebf89eebd1bd9b505148c6f752f05327cd4f32c020e9cdaf49eceb0099ef8f211f9071576472a8c2158f911eab3c1be15d9f33707cf7802812a4f8534873faa9dc54042f8c448ffb8e950af8de668455690752054fce72b455deb6401027e678964cf81c8d5fadd06b6424cafacf96c0fddedeaa1c2d7e9cc0ce230f07af3b12b0636b3e80db931380fec864246d89c4eccf57291b931acd4a0c21ccef7435abc6d5c025bb5d693ab519f5f944e29408c2fdbf8a37dd657056dd9f806811b49293d6c29ab52848297a2ac676c28c3f3d310f0883fbb4167395b61d74ad1d73a81203fa872f79883d7a8ac534c425cab44926614ca779d413af10ff0e4932bc0f74be2a499734a210a3a8e321418b7a29cced8a205b7c5dcdae13ae0de61efcb95ee2376048591af0395034b3cea41678c9b0e66d625f0690c0296710b951518ad7c38a44c374fe0b3f60d7a037bad721613f65d0caa6f5b1fe83cac99efdac22d236a2c266819588dc778d5adc9a0becc074c35e64ecc5c47b265b4ab0c9a2633f6911620ee0bb7d2fa918a7d0bc62b37bc043b0cb0c24db34e8cbe16bc6123c34d107757042f2bc4d0eded6044626705a02b126b4ec239009931642c40e9ba669dbdb051c806c3f73324414a5d777406d3653975a053ab9e83a51a65ef39d07b7e830a827bc748efd0c43cbfb8c91e24aae659b7dbb2110bddb7f2b0e0eb39b181d2c79390274d0268afa96685ea64585b9a774fbf3a2c690cbdbcd96f7bad919a0a543c7fcc55af5296d6ced7023357dfba62e38a137a051524d0525c7e04886e56babde5b2b94b130fd44e09d6324452740f0f2a3068c690f37efe28d0e33bbbd0b39a92f3bc4f36961a77c631b59b6e80fa61632178d06d3890d57504eb8fae63b22a650a74781bc8c42a12cc85bf9c5881f18dd47a95bd34000f57ee3a3be8fae93bd3c2a07f7ade36d8079f28020884b4c60946574c6e9a6c78f37a90d0a1a1d3c78ca5f4c0097e223ff6228026c7737d4a77dee4ac990a9e0665b51740f0474361c88ead656890f576c4395d368e9d20636e929b7c82026cf7d8769cc23ff0081ae02f7f4dbcf8b01edfe7b82b2db190fc356abd78e4390d8fe16e311dad3d46192e3445e3d631a69dce7ab3061df2fc55a7bdb48220f27dbeafea0430c57338f1c835e07528bc869ba47bc2924c639f35bf5d430f6bd432eaecfc4a72c05a814e98f822b0254c965f4db08650fab7d8f04195fd15814c398b1f496a0ca0010326b36babdb69280e3f4647f382ed3cb81bb0bb63fd5885ad91f997cd7d9cc3ec0e8c9bc76d6b0d528d5eb1ee69b7a16b5cbdf211d8255881b4f75ded081013b9e76de1e135db59282189f2a04bb7cae20583e356bbfc689bacd79f65402dc3a9577555efae36ce6841a821a0bdd6468f4f827c9608ab6b61c0ad032a855b6bfec3c378436f31462adc5a27c6e079947f93d98ecc19e3d7f1208efc248a37fdd53c442cf9e0ca5e4f1e10231428881da4c2cada2b0443f5fad9821218e20d749c0ec137443e2abc85ec255ecee068ecfe17496e289343519862be9ce465c136b8d19f330ac568ab59b1bc6aa38e09b3eb87b9396c726609e6d8a2d185cf768b8cb0ea9d2a108307d64d4e12ac46df4d5a399852c314c6cd79e7e1c69bbd58bd37ac63f9ead9a136b5b03e05640b38044b8de03e4f888c877166982d3521f10daf592163d48b35941c63aa1e0e99ca835c29f2d4aaf2154aafba2638d6c60c1bf9583d4e92334efda44031607846c38af362839707c72daf244d6d342221e791defabcfa206601fbf328617a6c020397eb3bccfd1e66ee96887ce0a18d57859bb7cd4b5c8cb70164befcae6eeac5cbcc18c2451b293d3f3536b9d729fbf068ab615cff055928dac8203929f5932b78aefb2e4fe0352804ef551c5b5836c3480c10d519a52da6bc71fbb58015d8a2d90bbcb7bd71b272444fa0888acb417555b5f6a5b8aaa2b206370b0ae8b0307fcbed9509c8ae0466d54a54093cb8eb490b2e848480073c5e83968c62dd7a9315b04990c03059a434c1689c7767540717ce826114c431e736dc0017575b742a1ba835871d52eabb90130f3d3e8a1ae93ca8bc050ec50dac0386666decd85eb2e2ffd78b7780b889f15c665c894bd2a5e250bdb51e2ee804aa020639be2f48b0eb8afee97f806b0d11b32dee3a637c6fd884d9a6cb9979c3aacab4aec738b89842be4b07252085370acfedd4615e7599de1b0cf2f8c924f9d60fd231a5e39c40fa0cb07cd033e01b9c5eb31ad91ab05be88dd1e0a960ea3a412ae5e15baa2224d68b4d5d8c67ab448d0b0964acca55b466049e9535c2d182df81c43a1e73637bba61b3407a0afc21e5461d64aa6901026f991db9bf2be9531eafd161ccb8c47d24739dcdb4f24235a61736ea2721d752e36f77b8d1c323f06da2e5b536fefae3c7dd0fe5f18a74d802c53a183f01948c98e741698ad6c4323a36b362535c680c9b3f465048ee6439322e5a51bff180ee19be553bf98907ab8307e5bfdc311d5733c1eca61f39ae301442961e53f43bcf7c3bed1a175c9e38b13b304e9513ebf31acf4a2e938562608e064905902ec440a72be1b0aeaafdf9ec25d75ad714ef8a9dffeef8270601a4bfd2284827f63760e113c20fe4d366b8aad535d99dac652711e8cf3901b8335e28239c78ba36f12acc6be80bd05391f24ff22cee52fdc080c4ae7628f2d8ed5e56b8cbfe361b9f3eb572a765332ba5911778c19be99665b398370bc0da875bdef618d31372e5826e117b29cdbcd3493780dc00fd175f95b2795c1fc40049753120545973270d3e59e889a9a0dc2a23233834925f24647194425f2c67b4fe7d9bc55c4d0d530d0043e5b216ef11061e24c61889e136fa7ded2b2a298e1ba9cb912fb6af635bbb122d6d37fdcad8033c0c4154d7a408fd22bbdd79456c548f1b29ed34ce0bfafcf304aa375012ffab7a636ad75a9324bff4295b1d9ab60f0b5800b83bb7ae3e16df7347dbce6e88805480f1e9ab0dc03bd9b247d5545a17186cbfe51fc248dd8f01635f611370a476b44c33013123abda9bcd127446c8fe39cf549b4b6c7f2e0e6ecd61d41162daea1a7483bde29588ba57e565b89b0430a2115524c8c2280ee8801b65734e337f4d72531bc6248fd46547fad12eb6fcaa1d7fc2645d974bc8c8c81a636455c70d3267c4ae2ddf73ee0a8859d42762eff48fdd905b74e2a1dc0843a58cbdeb2d498ab472b54f3d4c989f1635f13d532b56146143a31a9ae187497d564c5134ec34752d87d902ab0f854bf97d08430f99c11a5febe48690813fe3f2f2807871c9dc29a48f84fee2761116eb5720f14523408637d7d942fae59d92ad8e0af8f54eacf928ec198b088c7d3a712eaa66abc2cac096e49e10ba96bde8f118500a956842c764da3cc024d463b1950cd545b2e8bc4f2ed555f4a868c039ac5ac9e2821b0b0e28dd361867cea42a12a4ac6a6d93c7071f55c1c060e9b2e0d91b700267d65be0e8e2d4d3874473c91aab6cf7f51e03320b3f5d110c98bad2b7365305773b9807c966b996f534e534472f8054a11dbe669955e07c96aa51ff20609a7c83aa0dfefaee0172e56b59d635b0f3a7e0e3e5a9d641504d57c1ee1dee2c96c42584faf7324cc87e9d5711a919c5d1a98ab4835d38f9e926058d3a6c10b97039ee18b233981dd3b51dcd5bb19befcfb87e209bbd6113be62897c8966dd47f891b8016907b7787be9d36c2ae679fc6b40aede84befbe815899fed38c784fdc18478a63f4d4f5ccb80ce26a932b3cb819ba8a92f2f44646f527f0404f31220442984268b7e1680b2efa8ff7811fd57a37e0a60000a90b1006cc1d3655676ca471c7141779a946a2888bfcb955bd4dc8b4ce817d4a0cbb22c2e5f5161e85ea68da1955eee5f55060b13c890e9de7953b421c2ceb5e447cd9b2bf80daad626d56dc2f5d10bd863fdaa34955349a3c2711661000c4c95ef48c2e4dda02204ac1114ea5491f1b17023ca725d62b62608cca9327f9ccc3fd5463af742746b024c1b9101a315fd45a7d4d6e397e7ac3602446b091bdbefc076a188442b5f8d7f5626bc54f0a543bfb14aef3edccb02499f3720bd25a259d753691be26fad9ae8114a4d9b54500f627220135e9a74a1e60a6d623580d0e2a1719e9ad24261967db1321fa73f94228de7c8d00053593a86d4b4542568e45b35cecf977b044ce5fd62d0acc2df7326e3c5b7f8733c759f095d2fa911cf00ab9c937dd1f09908eba2f67d8cc611d518a3e8518c6de76589d78b38de38047c78a9c4db641e7eaa0be3cc95109468c68c0d35c107cf72c1f409e349c1b5f6ee9ba5ad0ebe136a34a99420366f10cc3edecfbaa589197d2f47aaa0eddc8f6083193cd8ef5835f1f6fda1aa854683d5af72e36e46bf0da335789f8c872b9c7d187ef85f31f06cad917500a8b642c5c95f63c0703da2ccf86b88c2e1b258b492d0effa38019767aa2431d4467d29efe0d97f6fa6d59cccd65857f4230698596197914f89d1b7aafb3259b4fb7e2770d612b67489faa8d7ed99cba4b5445d612d06f4637035c5b8ee83ab2063adb85d48ec718242cd0351be6a59d281f44037e880a1b32ab42d74f287d070d684134447e0c82600e08ab3df3cb2e15df81571e05d7fa4b53bdc5e209834b8223170bd5e2c6ba5d13d60f36515add9cbca5e3adda7b6915e17dd90b2af8f22b431cf53de75dfa7a585630f04df6c76119bcec09eb9f2376d22e506ff6d999ed1fda84eb70d026ac5660c56468dd6cb92ce50628f0a5d82d023cd7edf5d5ae59127ac4dbc5c7c7587402934054d9f1e8495f43b17ef379ae06cf7ee6abd7c12a7eea005a7048a5873184a4eb8f18c02aa88d35b78d3d0dcbdd09952647ef6e144a248d37166c3e60bda2c31e82546c543d1f44365e76950f3fca779bb552f532c21a65a83a689aaed0982a8c55796751e5bdc0fa3ed561b4cc8aaa55932e7f53bdfc1c73e7e214c14a7a36229cc36be9931b240a8df502e9b41ce13e4779807616858e454f69225221416c0a6a8f6db3ffca80ab664baa70f8c39f08c3c850e8b5ef378e9251b1403c2cc82bc4d0494995dd6482dbd9898074ccb3417ef8106a39d97ebd3d2a249b9fac15b324ac3a9d430213a172d47a3faa88469802a8c3b39549ec8b92f43727a38ba685a2de2921ae8468333d5732bf7d6a6946a4eb5ed2d2988a584202530f2e74b56d5cf02ce49595b2fc9fc11b2bc483cfc525de125cc20e602948e408df8b06409e65bf3ea27dc3b46d616b516c01c10deffcdb6de5637262076fc4c93db85632253820456410f4160c3942281e1d50bf92c5674d74bc3b1dd75d5e2226afb311a19816d6110c5c07812666b6e6504370c8f0179667b717781ba46aae5d309be195224d1ede2b0b60e855711ddd435d9d29c8e03fe300478b616844f22a2665537b3f64d675af6c6ca4e891631a8c201f85659d29411fda2c642393ee93f689abd0b21f928088ad6a40d4c2d306361358522a547f20721253a689fcaede889de2bdb6f48888e31fe0ff943127e2ab23168403b997292d3abbccfc4dd6e974b44f54d366f5971c5b236b0e7f5202e9db89c2d0c87e055f21e8368bc23463c454d513524415f1d237284c8969a1e30a3fd7ce6c98326b186046dfc141674017154e844223a8a729316dc4e6eb23bd310b9a31337e92f0a8144a464129f5bb618860bafd1f58978c6437948c6bf2298d1edbe7d60c34c28499239b3ca43634793f70de0d8288000d38c59d1e25624cf3f45254e0567a8c88ec5091873fa70bd219e46c42da82e6719545254e26873dc11b9123372af3c924ed576afd801e0ac2a92fa180b50be0f16abe73f0728b85768e3755048a3930bb7278b58a9d40e503ec971fd005891cbbdd498b96a96a848790e2fefa002c4eccdc7c0bfc67e2381758f44d425d5b75344ced3d325da6f6cc2091683dc4d58079f7a14711fa49d31322ba3278aa3df4287dda84e3c98029dfc6e817d8900e14a7ff8fa8d5d912f26c2c34be987e255a4598133fd70fbab1bbb97a040e19ecfe7036ca184256d15d6dc466a3c8aa6b718f0bccfa0a5cf0f3a91837675909eafe5ea7d1aff9c36aa31101ccaa8dc71b4e44d546802f2727f624ee06c89d85cec04b257af91b2a823539d4dc224a0cd25071e1c5f958e26e69305ce2e68c90df60e2b86dbd2840461a1c8a66108268fc4cdc68703142a8608afe51cb3a6756bc6b3b1a08417201c41df796eb67540158438900e2f2e4ba2d91033ac136422f4a0d99829ffd43fc684a36326039a293d330b4bee16486ea560e86b4821ab11c65c602f1cce5ee2d14e8f90abdec9d4548187315ff5fab1314d14a3070b0815fc1b28936bf1981b7f40de3869bf7fe209f2600c1806c819d0ac11612ffdd703670ec6914ea100f4e93c6758f1c417ada55bd7604383e9cb3891b95969f40b4db276e790cdf7301b70122df2ddd6d41608f0a2b38f56de9219131745edde8080aa8006c213b184e3b874069f498e15db471172fedfd177e65ebb148ab00f04b4951fe3ec36389e40a2af5931d5c569f86af19c017e423b814c3fe549fc4e99e769cf49a4ecf789f81aab6e4b1955b3e6a2d99d6dbda2ad83c88f5ad929dca1509a12bbdcfefde6f493d5ad5aebf942bf9acc9d46c16a5a3d33578cf0398dbe881894d20478d73a3dc7a2c4db0c9402d19d81e31a82e6f06ccdce6dbb7239f6a495001eec2435e776e2e3a4867337cafcf2090baa22699cfe0bd3e0600eab59ae434ca6649e5afe25b4f61cd999d6621ba892c2fe08e4971d2716d612ee1da7316e237aa203737d3a8deeab27cf7e7235931f1c613500542ceb3005971871080963e4916898bd0d76492a47ea26675bca7427c5f58f39df57fd235601f096d2fda1a27826c2cd057d871716479f999f78407e537d62314998dc5e0c309155a33bd0f0972c86e6d7bb00122808ae03f3a7c530fabb395bd9adaf04b87df98c77edd8124069e6eeecbf4d1ced20c2e7ac2ffc3ec7472139fd67f181790d4fcc79eafab1e8e447881129eec8cd0b9eb3e0b7449f234b3bca53e0630449e0ab5d5143f76a5c1792ed567b68b3946e04df33b68a8ed9412952a6f1054691d40a7621d8c3b3b0e80b64a755ca222ec7bc101c1032b80dac77fe4fc80d7ee469862288d3da6f2d3434a87a3a1bf7216d88ccccd790591261b90cb3390ac6cff754bcf0e298d2742635136d71996181af3b089c469318e39268ff06e00bd27193c782102b0a910105afe9aa9c017a0129bcd89572f44b40f606d4d3b588e3006fae86957ef86a33a0c7c886e90d9c62afaa8e8aa2022419cdac6acb4b56945c6ff7b52a412838964bfac82888f0d6d8fd6e324818dcb8008032acfdc86ae5c05d1af4307b1984c20bcf7796355e9dcf65959c8be622c6e7c62bd88b77599ff97888bf9eca64a95939008896f5bdb3bfbb4056eeb83fd5c508f431506afa6295316593a57ed97bd9e98c4611aa23643cf1393c053d88ef64d3262b5caa0772cfe75888a4530f360485ce02cdc3282464990f42e597d18ba616f97708c9b00e373bba538aff60b0972ca00390faed887f375833928be64cf29bdd1cc59b65c7720c9c772b85631f0fda35e174085e3a2df410b1b1dbefef22e4c60ca1581abaebb8446208fdcfe42cd65d8ea550efebf826491c1f06a2217133d399d659b6fbc1a695ef36151ae3f3619480120a32e85a4e8071ee3fdf9bacbaab589e617537d849a466b290d05664a475c9684088ed9161c91c77d67af2ec6d0d5fd9ddce048aa60c79f20c569518532eed6940608fc1d2502f7a1e95b15b3a8f2b090a57a69baa2804d126dc41cfd10a053d5f313e410290fe47ae010517967ce4f56ad24aa1e810ae1c8a0175357b8bbb6896798325cf855eb46b543b83e7c3aaabcbed617b9ccdfcb107d977f8447b4527e3cd5fdcb56578d7eff6407e9c6621db0d3b45f437f6adf2fb95a7e28392e3c7b21cf4cf441eb1da1ec48a8f93ba775e9373af16f3dca32002be0b99e034348e352ceb0226146d735d066ef08c57eedd0be5b10e69540b0653325003c119405d2c2d1c95fa06e5fc294eb86af4256b242adf0551b5e8ef14dcbcc1f0b5e7bb83985f055d3fe733356f82ad73878f23263bb00d63e9e3faa3d9ccddcca4584f8d312c6bb744f064448265014ee5e4a7862581e975386097a14567f3260747f7bc181085a7ce97ad502a88597c8c916955f26b7293cbf0dcbc298a7647a2d1b57e7895d990b33a5fd6fab4d4a963379636fb950f29be4a44b037bf187eaf3d7ed8d2c54e41d733fc14f3efbde48dbd8d69080c3a71a4306c5749851c50c6a3fd5dad1dce8f5dd2af9e87253cf4616e20c5c006ea03e15a0b286a32a2a188e84d59f4dca8813b6422c059d4244c119413dc48c61b3abc5fe9a8c3173a20208031803b27fe043350c0d1267d16471b780652b59203965f6deb03ed22df5f5833c0cac89caf944bbc150fa37982fbb7fa8a03f79759dd86f26543ec3e5eac2f2331580ce1ac3314ac5dce417d87adfa73e4b7c40df0085d6b31debfe988120d7833d8b2afee7e1ce8b85123492cf3270481cff0e41a160448f251abaa776ec073f572f6aefe8936a7147d7ddc53fd57f9c0b3632f83baf4160fcc877c94cfe015c6a26a626220a3e9acfae5ddbc83d97f540fb4cda9315ab04a7c243c84aae58d161164d5dadbf596ac3ddacbcd513827788800c65a1c855960b4510b20b06996e3ccbd9191224e0daf802a49b6fa647132816c93aa329e76c78fb0b50f403e632f6d910b5ce12a581b0cb8708744139a9d7dc9869040089ef553038d049fc7b42b25e1981b18e3e3be1b1f030a859769ec1fe462bf96b31cf404ea9706c3b0f4ed5b5eceadeb612d611741e9798716055e066a2ad4e2c8ec27c2960b568ef726fa83844bd6136cf6524ea339bc975c36c3a4919322c358e4c8ca1e9d6b84e0837427bcd0e07449da2e68169a4270e6b4234348bd9c0518c8745efd3abd6fd28eac40b7d86911e6efed8e772339db44d825676f3562a036f4c5add6b73633c554d80749e62cab1007fc01cb1b27010db979b3363cf7fd26fe947fa5a40f5ef3bc24300f547f399c357761d2360266dc6ab0c2cc956a0c756a99044c5940e4ddb31d2c0e199d1ee04ed4b0b906b65381400a40c44b4918abbfe1388d13cefee63881efeecc371d6332e816f5fcf957a7c0da899a8d6ff51d5f7cc236ad544a14b9f28318f546b170582ff0efd368d4d140d62258511338f6090b116a854eb30a90863a4de32b00d748ce23cf361839b4685c9d6071c80cf21d3cfc959a80fc5e867555815604f48027de03a09a44a59b55670617561a309877c1aaa750e98419cabaa708f293e80862cf1255b0003dbb2d13742e78aac6f52dac8d412ff559a2996190b53b3384841b0ea2ac41cedb458788ec69207a957fd0284144afbea83b235ca00eec0e7d723d2c4c5a57ed2e49db4b087c92150083baacaf1f5cb8c784991dd842873035099d0561add3d02fff1c3f4cd0879d7e389dde80bd387e62e41db52645df2b18639aa1af741627ef00c93b3c6121e59e5057ba918dc7e707f928ac62a6620524d33bb7870d25e85217a92900479696c475cf8866eba8a856123a91c0359b0f2dfdd9106af9b366b6fd8f75f64d2144d8bbae174b622611421dff5c6d92474121deb7c02754dbbd845b1eef2ff98661d122f01c1f3b3fd38fa5a45a677e90cf87a173f35ca5febcc2faed9eaae164202d0765807260bd7609aa3d5f81884317262bc0ebec0742c5b06456cd0f10699d8f9256be0f6522b82282ef8a7e84a0079f0faf5c98562fbd71c1eb77c83835c9972851364fdadcf73341959d76c7fa32493f1fa3374a8da791d4c6d158a8596768550e5b12e5a23a10c7a2d4c67c9be7120e24a8ddb60621b588ba8800cbe5a8c042c242a5e08eea508350eaf9e3ce2e45003d8ad55c1ea3320196c3495e1854c5c193209a90e37b88fcb8acc665ccb480bda9001ddc785b7d439c76f6b6b75e6c9511b19f30742656b766eaff476a70b1b0b3ab76ad940502b864041197b5b87d4e851113a896066826fdba455651306aa6fe8551821e8b954e4823dc41c0192c04e06fd0b6de673b496d22bec969be6ecc449f7d4118590fce9a7babcd26ec674b9222d3fc4f21e37a814974a06b70a239b7779f904af9faeeec3bea9960116fc38a09cd5b66f2b81b044bcf301dd2236ad63801fcb946e01aa0be6b875d39e7383374dfe21f2537361cecdb4eba7e43493d2d569657effec547cd185862479c0578e02ba18b191ddb30f9ba3cbd024eaaf35ca07113ab421dbcb3e892b49617a7ef038098d9cb9670727d79cfebbe22806c178ca88774e7689211bd80267910057a53fc1cb9159a51496e08ea42e85f73b543532416b7b4c21b6dbbabfc2e94ae0059e103bfc10e33db85161ddc67b47df566e6cb2cc7bf4fd91a35e39f4045881962bf0ff98d1689464c70d0871f96fc1372ceedb2d65a42d942bf564d4548177bd36d92d9ceb6dca61efeb3b56fbc53c575c95b616dc31745922af22d2c2bb0f5d69f3a24a61a8c27429273ac0d3da92316927df58e905d218de777b141519e1976cca337628a63141298badd9ee7bb2553e92828556b16bc6f43799514ec98b3a02337915f897435c7c8d1262632f7d4afafb4c6669aba939b3ee9266972278293d755524dd6b285d4489a5b6ed2249eb2381e76d3675afd1a9ad640cd6e30f2de12c1a87b3dde545716211a33eb0cd3d1f9a8333ab43676d389e4e6e968c109a1572602508acbb10019a15272238c94686d03e10d94485ac276343235b62df13b10465e515a531e7f5e2bf8b1408cf64ae26989c344aff3d61107d2eaa8c1c41cb41a73d44ea0ddd0c2288e547b99fc413902892ff6243e7475474c329888cce8de022991b35d5da50a298b6447053333e6a92e73b8b260de865a54ac405d4da34a30271a675111b4066bdc8e9438db8fa2ddbf581ff7b94fab20275bd763b04f45b0026fce74b70d6520723c029214208b008d37bd0f8174eb626dc941d91541611bef6d410ca44175e4f26b431c57c72a0646da0aa64cdf78582ee0c70870421849bb45f7ca6990bdd5abb92ecbdb74c01dd00da00cd00c106bb69c7edbb0bdff77ad7eda22b2b56f2cd1926ca539b512cd0fdf4713bd2b4ac7006b284bf374b3291224220a52d41356b628bdb8194632a263cd176a42e09130e971dcf54b4cee5bc6b69d4f2b2893d836068db308ecb29fb655fdd66ec4be4eaefdb5ceaeffb5a793523750b19007c2bf8cfaa74403da0c021091a5319d0fed95b4da121504090aaae1f3a9caaab9673c78504d5eaa43444e7e3b499627a7cc1565678a7847f5b9221f93c1ccfb5e7f693bcadb465f8b0da3deaaadc86dce2ac4d33b2f65c6e8eac596a647b7370d503cfdc5f70efb597aeb001321b0cc21e427db617516b54c6e4b6da57f150631beda09214a82a37f57a0263f6fcd6550e28ca07c7e3f3f258002cbc8cbe8d05a58d7eba1fbfc5b2857ecd0691abb05d6d778c7773d970c5c9437e30f8a6c86e89adea8ac68c1c5f6f2cc164920ef379c6835764828387e23647e5f7f6d0dbde8a10fd265cffdcd946ded712f04fa2142dd940ecc2d85de5c976d20c8d5f5225605fa2577fdf6693febe2f8147db38d202313fa5f8d3ede4a16fa5d3797f2c43d05e80dd7cbc9e8dd4f2761fae30d89cc59b5e0c2753537bd56b10492b4d07c832a8671fed699cf32715e7bc6eaaa568e4f9f8247af208f3605e032482b0061521be1fbf1fdfc19e9fee32cc7c53f3334d03679aa6dd18244c2bf3d966d8eb2346143f633126d81a09dbd9ada762e470ef3d8de76fd91d1706882713c26769f6b8e739458c943b8b1c7699be670e443127de70f7777f96ceab5aedc7b2fbf03510d925b796aa91d44cb511fac9976c4ea96259493b2cc9011ae24c3baa86fd1c4b5bb7c23269c55747c5722ce36c720ae9c8630f12a6885f5c2c9b2205212d359b223bff723894ba7591b655d0e26e4bbfeb17f1dbff1a45ebc8f8cc5a27a3d468f4e9a366f480cd1c57c9b919504a714609f6a25c9123a7e4e90dc7545a43acda09118939c1ddd570a2158ac9e15a09c3cc226652e79cc3bc5646873a32c2d60d38eaf34675b82ccf47e85d1d24278209658b637996fb5fa1d4be2684db9673ce7f23c6a0542f718b61118e63798612e9c8e3b468d7503412372261a30dddb94c3343932f40f6077d3184616479d68b7ffdafcfbe8e7c2b0c726b846bf995b5bc4118feea1cee3c08c3cfaece39876b1a19ebc706e11fe7ccce790f8395a8328bcd99244907920c8ac018a59432c418edda011280b0701446311002311082200c428020088220088210108418428841881070f801300930e2e70e8ba1a86736725bd75cd5ea5dfe150f8ba15f0f91e4a3f73bcf01b8b31cad384dd0b147d1eeed788a3a12f5aa3f9d476b9fc92776a5cedb88ea272b0e70ead893429022a00e6de02eb807bb3b8008cf08100bf390e543d425ada66d80d07848649cba1e0b4f89deac055168446541ccf43bda44d03d087693a48c33c08db87dd6bfce8399f9cfcc4239adf51e20c08251ee869f204d14018d4b2abcedad6042e01eeeea0a93554584498d9c409a2443a4d0decc728b1794501740d8a92bc41b2fdea4a0233600d9b8ed4511ce8694fb14a72b51060cb81855ce86392e2dd2fb76894330a69eb2e0fa60e6b7ad790b3a71415bf339a113bac90c7758363c7ea7b349edfd28e007170a6db50960e4b6f5cf412edb7a64e2230c651223222464a157fa8bcb81571629fa9541b7c618b8267c8b290fdb0a92ccc1af3f8804d1f89c2cf6ccf7ee17457aa4e7226ad71e9c77edf23b021d333abd68c224af79558598027af2dc6dc52c2f115e93145c62181710f2e1b1cb0b46984f8ec156f3910daad3f71d225e56e65526feb38937752f86cfad9052605d5ad3cdb5cbbdc6bbb9ded9700dd536b043948c9f0950f1faed2d2fef0def8e035be1bc5c97bc06f82a6b9204be13e9616fafc81a12c068118a3dbda097b75d75bd45b156dfdadb644f3c136c3b2bde9920b3ae0ad977c8c696478bca6f4843bb8d49f827bc0c3c44c5e49ef228d58bd1fbac6eedd05daffb7bb1786879f0f49d322be01a68e1663ca55afae5dffee5c878c6d82d2bb9613461e8d0c26d6489fb243d163c8f27f4f0d89591c4478fd3a4cd63c4eb1c37b7b9d61d4dbf4d05e843928bef0285244678e8469ac4aea1b761d1a27ed6d8b8b93b51ee2c7ae0a9b1674dcb1433f30300d5e1858ed76863d21a2a21bd32ac4507ad66348d1002aab2efa802b23b9b38f3d924fc0ce5592847d84ccee2b29ba2c6ef44bf55701bb7a83bfcda0f684c4246b31fa70823fa65d40a9bceb7dfe1ea20721737db8b443bba80b74a998f463131cdbe8b928431ffa8feb5b63d4d6c66e932724008d637b811a46ea9d119d0409a0bef9027d5bd1862795bf29f3b24e0451a262c0776894dd06e8025b2612c1dafda3022674a927f9ce90d5c62a4dfc80ac9978db4c16288d0eda7b1fa968431508a0d1a67feed898b443f8cf647a160f43519c11f8e2dfe3f8c64c69299ebd713321b56d0e34a35f6e65f8366d995c645ad1eca3b43bcb4e9b27c86b430e2106f820b70e86435c9f201184a439256b5ee87de37cfa90ce9a945bda6a067dacd73ad3a27a25b4ab4f5bbb3570fecf6e1f1cdc88912b19f1e96e49c08b4f42845c68653d897a96dccece27ca2d9d62ef21a5f240cb7ccd51213ab23958b4ba49d34711e471e74d7495872bdeb7fa08a4963cbe32f49a397c037a2d620064f4e0277e785b0e7ddc98cbc9c5017a89d1bc9297c4a13abd69678e79d75c975cae919a13ba9b8edfa2b91a93acc6e61ec218cb77e8a95ba987ae63f0da5044bfdaae12564a6cf8962777e6466e6418a3a61d85b133dcdbd6c4a069e45fbd84a1a0ccafaed3ef517fffdcdfffdd55ff6f54a05eda5b2644054b11202c4244b05e1e25d32f815449ae19cc4753a4568d5df9201661554ea805cf34b04ad14951422e5c972b150930550eb2f3fe8672a29f056e98ffdd1ef2f490053ed3ef487fffca9e48dd49f7ecb2584ee2a2c15c44a75e9a05b852582504a93b905647e3c222c62614a0a799b7ea86f7d19df976648dd9eef099d19f365f88634b8a5047cfd96086271ba14028a0a7fd15243bd8d1fea1ffdf0135b82f852d56fffd21ffcae1ffdfa4a13e1cafbcc960cb44afa184b175c4afaa1dffb53bfb9d20163ee6f5532b8ca012182628915d62695cade0f2e15586bf6d203dc1501049d7217523bf5cbeffbb28dc259ded07fd7b6c70b28261ed0b51a49a0d65c4901bf3e970ea4cafdd79618b4fa512288c5b5944075853ed5affbe24b0b354bee6b3ff0e764685a276a01ea6a7f5f09616eeeeffac1258686daf5c74a05c9385b1a295445bfb064a0a5641fb7c43018d9a7beec47d5c98cd491b3b7790aaa3198b2c42a75f4a57f569248bb467feec3fbecbbfb773ffa5bbfada4803649a58d2776fed6a7564268adea5f5f72c982ae0a3ff58717ba20ff5d5031ad4bb6fdd94512aa76ee9bfefb99dff883940a789b2d210446f5674a06642b534ac04a56892014572507f74a7e26a582c6544b0ba2d17eedfb597280cfb22f60eecc0e3099a0eeff533d970c2f2d6c29616fea877e73a57ef084680168d0fccd52abd8fa5a98426f29f4527bd220684e70ffb9f6a0636ac3528fbb1db18ea6ae830583929e1742a8877a80a0e47c8f855ffd0f4a05a8d5972e4c7d11c02c432acedf01e040ea63dfa3f490c0b71ad1e893a7f791b36950b0305eac69aa39397010faa572d24ece32f4fdee0f7dd762c60534065eb2de1cc6fed8bf2b2144664ca9005113a583b04c2f11b89a28190094a92505ae3e4a0d024af5bbdfb354f099d2124565499f7d8900adba9245794b7ef4fffefbd33eef1b1ec2147eaf3436a717b1cf8018c3b44ebf4befe05ca62748a86fc886cba5d27899940aa6295f62900cf42d4b07dbd2fab26fa064005d65258a5899b44422a83a7fef6fbfd777bfdb2ff4814a13b0d6eab7fdb4fffce9f7f7dd1fa844211e348c82dc4f01dc6e98543f4b27d5acd107feeba33fd37f7e8938f6df3c6f02cadaad675a300ea99d03ff33333f7757f699f0f0006848a0390120600a0c4e885d3e1a68872c9d965a35a1904db9524ef79030cafd853042016110c087267d04c964b0b05271335d5afcc2cc964af6e8dffc984b192b576e99524a29a59402fd06b106eb0531d8030ead7a739f6dcece7ce2b7bfbb08e9b9c78e21584149b25c7cd8be630fbe173b969eccaea031f9b0d198d3732df64a1ad51235295c6c5859951950382be1f6c5a52474bb63549a88f5189526e25cc5f656544567c7d6111c048c074ed7e4c56354a69564855b3d00902c45414f3676b2c4b88cd98421361d2d33a8408922e556a53a115018d1d08a254739ba30138c60785d49b9e2ea2a821997b8db45a1e3add8a60415a38aeeeb4a4c3d92794db5782283287371b9d8ab0a6bd1deab0a6be9ba2e2ea8cb25d5755eb884702f3e2c741005a3ebc81725c7af11422340da86dc9e985801420a4f1894275aa23cc14eba08cb1f692d82883c2d91d2e27635b0603201556664880f5d172fa10b57495a0e1b199727516dd6689cc1b18d59972f9dcd99990ead4373c191b970d979eafa16b77e8a5a43980b091ce6fad8efd03ef618b6de3ec638f7e07104e9c9c90dcdea03eeea22c2daa2e3c32978c6b78a5b564f656a2d0925c09f0805d893bf9a23645efed51cc1e2e07cf8d51ca13e7dc068b53fa7acc5ad24ff7a60d763ce5a27985a366e085d6b91b8c0c21536276b65c72a2ac82631221368435628e9b8a0e535de95ebfd2ad7bb549694852cabacbf8e98c1af27594764d60fb332c9a1c4f5e30b0a2aac520daf608511d17276946523eba73c51ccc229167b76d6dcf6eccf9cf34ccdc12f8be22c1f0a789902c2395bf241f5e19af0b393444b51c70aae1b1fee96c7bf16b37a88bca4745a4a886404c578c2c133e45395b4583284ac040a27c47459412e5ad8b4ac90ba7a02739545a72b5e31e1ae8ee42c96bac2c1af8e7241adaba0ab9d9f6096d517d872e3c58749db970a2554d06119718231a108598d185bc4a008a5c8e2262c73897d7aa6b99f79f85b5ebf39e7accdf507d53edd77f372bf8cd17f6b6d2fee26081182ce9a6a5f4b5c6e7b2da450326eaf66f1f2af59e3b3b567bdadbdeacbaad3d5f415b1ea540426503d84e0415aabea540522c0009a3a35c2ed10b39bf960f76b318b948f7f2d6681f2d3ddffb124e6c6909f8da5322320111b5750f84165e9f9e5c872c2c8ed8a99951750270b98044b0a517e52c36050912320bf241e3f43c0afa02f2e7e6d56288024ac708233d08231c094b6805856401854419ea89f0f23514c40262a64e50092c2d9cf6f4b958aa92a124119693f2531e0095cc0115a8224a8047134f91541e2b44270448fdf5851128da117462c2bbcb0e8bc5803baf80274d225c8022b9863a5c4932025384ec03525a0d38eaa1a51807e4aaeb0f879b96282aa0d68a20cb8d315a451fc19af00634cad60f2538188961fc01a47401e37b4625421b6f841210a85deb6ce7ec52fe099964e559394e00da89fd8d3308815a4df1b8e2c3282297c8042aca400f6b032e2b7e4187c1106bce2a222cb2fc9143029a0da11209090e089a42e443fa3194e4e0016a9b2f32baa9283a5162c31766504f25cfd6a5409c270b24212e089262a3e7e29e800721142028309151ee01b95126c6c4121b21f9317e0932d401cc4a01194159600750cf90559fad1300286d92842e1f7644a0fb069ca89e00eb7200a66c0205e3f2459411558806251c6863fa22240148000a378fc880cfda40401dd5caca04211ac4185133481f6230303a2d84ae124ad7e324e928a4c0a4884644b93102528465d375804fdd27c88525418919203ecb2a684ec87a50b5895053c56f1a0fa0d91faa121b1d1041c2a1519fd9adc08a2080266f9006f445131234a4ed067ed3744e6a50bb8248bab6a0a9590d41392294dbf2f252010a320d08ddf8ea02d1fb629153f1c5339c0a7b52a643fb72ee08eac608baa1f152a2e5266487e544dc02ea5e090d18feb46595030870f10098a8a1f50727e3ad6d6c8804b5d3f2b59c1a3aae00e9514a9df1724524d401a4ac014463f23377e3d8266f8f83c51d1e4490e706a2d8dec17d655cc020ea982a20afe48b521013235016d28098d8e6eb808cae2d342850a4e72c0d87e5e663f2218b0870ba88575bc12c491f2d33af54392fac01c4d92fcb4fb6213275483bf1e8bc350b7d643b7d6e3dce97346cfde777e778f76ac710e5a6dee2f8a9c33df3ee6cc452d3a31e4c768ee2dc5b5a224d42ca7f6a7e6e5300fff9a3b3746ef5dd27b09c1aa332d2126e64a69672a02aa070d376b5800cdcc860f188067686e510ae9fafb5b3ab50ee09133e300e69ce4af4529193fd51024927241733b5410564e995f8b5168515f3fdde12f4d9c73cea38a5154cca8a199c1afc5281f5d53bb28234e723ec3ec513c278fca2977dbd663b9bc95c318ea4a0eca09d490134ae90b8410a070e84ca818650e0a57429d207156a7f96b71a806443b71bf1687623fdd017d9cfad7e2b06b5875eea5de8753a51e16b19081c2a1903a1c2691c3a1dc90860661e77b4c8e7242807871b8935b9ac9c56060a2b6b711291a0997007890ba7b26178321eca71a9eac0d6094a00ea00c265a3fedb1fdcc02fffa521bd55fbdae0bc8600d707deda07de55df9d567623d96b6630f35dd7dcdd3455c17dddee5bcfaa167b00bd047d600d75f8d94f5b515e7cc75d8eba2dbc1d6fd71cfbc0cff04d8832eaa1baeefbaea7afcd8fb5f7f8a2dffed5fabb7e68ff7317aa5c892c4225c910e97848b2a077b8f1bacc4be841191668f67c7d86394c7ab1c76ef643fcf8e37e00ddadaca21efcdb1043a4a8337589e769e7beea6ef623c83511168a759439abef2e372e7ea4df8dd0c817deb9ccc5ec68737aad18a1bc1bf5dcaec4b18996cbff5d6f4e9f39abedcb1e9c3befa332a42d0997f6a7f367d579b3ebbb70e636fcd8ccafc50181919114c9f1ba1f43813cd9d25da7168477dfbfbac25127ff5d65a6badb5c9c22cbcf75e8c99aac71863ecdbd9f86df539e7ac4d9fd6d56badb7e9cbdb0ebfad7e6f6efa304fc4d7898af83abb277d377d97e73343d4bf5111824e9f711d47eab4dfbeff9da69ffb943433eadba82e424de8f5ba97d9de84df511164b426c3e7e8466b327c8d6662f9f7dbe7b5209bd06f8976fc691efb1133feb4f7abbfbf16c75cd81c6db3164ab2d6ea1d26e4401863bcb958180ecf69ad790723821939e71c77b35a0b3655c182e84cb60813ea446bedc54f7d0a5395f6da2b261403b2d65e5c047b12ab98ca18d058d14d914ba8c8b573b334002317665e988e6260c822020232442426f918af4abe6dce36df7b739bb39b1f33c4d3fe5a0c1b866d8d09c927d28d631a384e98b1a0726502c68597da85073461f2a5840a51cf58db26e1058b151e2e395ce4c0b4f0ba404218c5c71610aa2a3f6fd57cc35cd54d9b7023931a614464b2421ed1358583218a220c1f445e38dc2c6054824a57514f9b891e9dce489b91968f204bbeda78383103db6a9b32118585c9d326234691b61429946080dd3216243a429c34c1509b81b5bea8e470a4f0044708d00d2e5aba501c55d8b202e8ea041e33c8d31a96a3229cb2183c862b7ff928ddf2de7d73e9681d13da5a3df604eb27c631859f1ca3881137b2a29229372cd5d8645eadb5ee7a0c7b55612dbd0149d090d882f8083101b3e26be702d29a949621274d50b4b9f53e246be80895945049920aa320406a4e60f8c0ecc0a878f263c4da327182d8e5838611a4ea080ca904958bed257bc9dd8317249bcbd5b6b769bdef094252384e30e182c1238f7d0dc99520c794264a8a8655c87ea450b474144341844ac173217542968693c5c7eae986286a0a53cb99c262c24cbe6ce82e4c74e50a6bb162ede8c50a2bf64913222330a711418cc0a0f02a415a404dd8e6e3c516a815167f1195168c058cbe0007c9c59011432a3b3042af2a1776c422485d514a5d503b6fe11ddcfb6125044a8b15a080f08e2fa89c4d1509284042a30ea25da2c41ea3d244dc933510e3ca8e0a455f3a514e7825b9108295a7b2210c1b405bf74dc3c57ae776e084994f8f33ab13ca604cc49c70736204094e171c16860715db90151d2c2ce1078d01249d24288c3b52547cd025bed65a6badb9c67befbd71edc98266e6e6d42466fcb03d9014a46d0d8b4a951e1f368ccedf7b6fd3c4df7bf3dde276415da9be53c7b40c7140b118a3e195631c9a1b80989dd0c4c689e155bdb82e2f4238a9eee52747241a3991b4267645028644171f1d07cc5c04e1596a4162caad0bea4af1d8265803bddd74ccee52cbbc8b5804497e8ef04831b6150633c2cbc785125dd496dc52f4f00266f118952662181c0b1b200a3bcbb2029a0f281f340ab12337a2844c80f0d8aeb7ed767b07e1760dd63396ac618691eccdc6891149ba37e351e7fd2ac8d0d15bce961e206d6e279ac86063eaf226d545d6b4e9a0421484882828432113e063c5150928482972ac08844e43212b64015bc24f5f5b2cc0600d8bba5020d2224a66418aa815564e8c9e50b50da000422a4051594d663db20682a7689cd6250abe398a971d65355e40a122faa0d9ba9006e00029623b7afc80c194e5d6d78470ae2712ad6b860a5daeba7c9480d1e34953901a0e152a2acf12204798c0b6e05821e06b86917d6283a04cab2c6ac60a2a286a5c5e5ec417d79a121fa332146dbacd1e7b02b6908e50792919d29606043f208994901d366ec4a881bbf41993c5bdecf89a88afb0eb8e25caa62c2d4189a5592051c3cb4a0e63900f32aba3b9c82fba0a5054e972b125e7c5073d23460ea6145488e44033bac8c6176750d7b8b3679a74c8a01184ed054e0488f4d011abd1a3096d47633ce4eb8b05180fa24c018999b09a81c5c11910b21a634c3d397466462b6c4c8329a352d99ec2b6302912ad547dd06e498e6533a49078acd393d10a624b3476ccc8ba5404a02acad4978e2b571b7f31e2e0186c064cb628c07272bbdf0e3b0c5b6b5e254934d793e718632c555e34a5f95747ee3ee93fd9fb24e94b9224d1344426354992244992244992248af35e87a63d3d7368ba4b3dc7683a73fdddfcc6e92449bfb1b68cb2fa927712d78aa621beadb5d65a6bade8f5be97687a76124d7df67f77df2f4dbdaad9fe06eab4bef3ecbf713a7dbd199ed56bdf71d4693d2e81a6629cd5c4b28429f7de1e9b3e8ea63465f7f6cdacb9bdffb4738e4d1fbf7b63ad73ce1ae37d2fe7dd909df6e3784dff7cfb9eccaf7bee7d1dad95034771885f024dd89d99e9f5fcee0c71f21b29a73e791fa0f969889fcbce13bd993ad38c733be8dc0ed75ba1ddb91d7a3fcfddcefb8d6ba7f9a42f2bee7aa77b5f57add134c43ffde941b8fde91c6aad359a9e7e9f3cd25b1c1834ed3a343d4d34dd719f4353cf7d89a6bd3ff3ab0d8b330df1b9e73ea581008933b5453ece5d53e7e085212817ba049a277228e71b27bce3c5d878e9a42f65d550da1ba8f37a1b9e13fbde8dd3e9f5cdf0cc1a4dbfbf3d6c1375de17e58dd9d97be5dcee7db5c639678c35be31eb3598d455efef095de2c85e7a5c8923bbeeddf2ffd3eee377ef8db5fe69cf39ffb4fbb2c678df9ff6b4fbeedf375d4efbd3de4d1f49ea3cf06db4d7cbd9fb343a33b395cad206cc06cc86e7acbe72342c3431b4211a112d09ed090d08ad08ade70c2d4d282d294d272de8589686c271e8b88486738c71b43a7aed74243fcd5fde7bafbdf5f674fdf62a4f333943b24080b3a00b068061b703e1ec870b4044d379e1d7e219096f16764100ccb6e850331ccf4c2ae7cd8e901d9831e13298f9d800301bd2613043a194312b11c341d9970b3628e3b22b23ea34281b9e1988b02a4bc2948bd971418cf342d98ece42194eee3cc3c17c913a2b19984730c8255d28c96ac0e0c8763020dfcc2e06c3b9c82d0503bd2497bff0d8007f3961f745687ec1f91c849def9d4d7d0d7e2d9e61fd350d2adcfcb8a1c24ceebde204c445b492e30b97438715241e618923344c1c75befeb598f66323e77abfd76ebd77c639b48ca1198d859163575b9c93228a8c51299d504c6349c68ce0312529752f01c1f1d6f363ec698711e6c7e805a6015eae9e94ce7c720c3f709d4d2a393bb138c5b19e58ab95c44a319c9e9bc9c56080f9b528863426e2c749e2246ffcb43775f78d12e79c8b78718ab071a23845049de929a2e83cc182706e6386bb01e1dcf930e24f7b6fa5ccef7aec7dd7d76b2fbef7de6cd6e48aeb6d51e69a2dee3da3f7632ff3bb3e7bdf4533cefaf2f8f2bdb70515e77c9e236cafbd04b6b639fb125f8c31c6b6769d8cef02469131d6d6d8f2cdc31f63610fbd076fd87e0bfded77171afff636e7bd33ce0941f137c6ea42bc61e7982a879dbb30edc2bf2d3c550e7b6f9f779eba1da65c0f77cad561632b2bf3f2d2d2fa1b1541c679a7eedde6cfdd60f6fcdcdeedb9bdde816e872bdce93db7c34ff6dbfb8df1deb5625c2bbe1972e2ea7b3fa377eaf62ceeb9d0f3653971635b7be6e56c0f8b43d43898ecd9b81eec21dfdcfd9997f1ad16e37e33c638161a07c70247e776c019c722f7b15054cfbfbe14f2abcf154b2b207b5c625e86af79f667007bd03d58a85621b9e8a7ba074b0b99b4d0f63cf5e0602fac1cac0f6b9cc5f5dcdead1caed7c29e7fbd06bac21ddda37faa02607c8cdea99e17a5cccf7aed7d16ab6918bedb61f43c2f495e5feaabb5d6dad6aed3fe5eafbdefa268ff5d7fd19898dbab25e8e06baf2ddc9a9babbdba135b9bb5d698fbed47207de7fb24d1def1866dfa74e5d8dade35a975c7dc6f2f01be4952e3b426b1b5389c59537eedf1dbc7e1ea7db696660df94360df6a37753af717650983cd9afd6be5c045789d1c4d75d2bffecafcfa2f7988fadfbe2f713ecdc45a49a62cb4b6346226e305ba650732628c331fe69cf551eb9dee5da222c878aee48920234d9ffda52f71396e06f92f7d59923a995fffdcf7cf79252af3cbf9d2fb7228f15f5fa2b572c0197838e1bffe127ff63c132b878ce6144cfd127492354d282d095584c6088ead1c6e889c2986ab212d01277debb3bfbfe29e7049b8222238276b80eb71de2416ae88e39cb4bf3fc5397d8cb72efb7f8d903df5e9268533c501f5fceb714042b827b1a49a8d24c98aab6d53dab42ae64d919deb286d4e6d4dda98ca2965b517671b9c192074fd07bd191a9ca45fbdb5d666fdc18c0f3cd8f9de0c0dd6af95c30d118288cac1030d1862fa13908c9fe6106c428890f1afefd7e76230683877be37f36fcfaf2710fb35c67d32019058095e7ceb732541d6089d5f7fbef5d9da2c1cb19fd62459237042a8bc2c1caf9386cd98669f270446e4dc558fb6a5a5b6a336193b6d303e68fb693351c4f6b3b6c686e6e24412172bbc1131b22a5a805b0a5da4087941a586179693c41a8db793ea5c2b5bf35a9bb2a62525c5a976aaa9a9a9a5958170eefcda914fb5bde71aec63003de9d0ccf4fcee7a05ec9ac403d75677c3f55ebeacc736b37568f6cec53b19d5c41d67da6db5d5661de6bc6ed6e411678a85f8277bdd733be41d25f6dafb2cbe58577cadd63a8d66ebbb5e6b6bfaae357d16c5c9544fc2e69bec1b5bcbf1c9752ed73b597db877bca1efdd2e2606476acdaf2741fbb4bfbe347fda5f8f6dc5993e8b31f665cee4a44ee396648c392749ce49d2d77a7bd80461c3e3b4e171a6f8da189d249ae2a4cf3d277d597a12c5e2deea73efcbf9b27bdc71683432d57a1c7eeeadb5d6da3bfc9cfb7befbd58037dee31c6381b3fcf59337dcebdd69bfb9d43c91ccfc6c799f32649963ec74b31f1735fcd1c2af3337dcefbcc4dfcdce770d1e7a4af25ba8b3e4f5730f54bc0491ffbdc778f903277330446f45cfd8af2783b6ca10db491f6d1eefa6fa02df4f7debcfa611fe5bc8fb0b7b567bdfefc735ee7592cfc5563ddde0eec545e5fd6e470cebede2d8c083926069bbeddeee60c03c2bcbe5a53c24440a704de90b9e95b224d9f084167264d5faea4bd38ebcd499df6bead3336415b0d54665f35a4d846c7997653fb7cbcf75ea4ead35b74340e31c63e8e2f907198b36f67105afbb44e2d1088bdf3b642101689db209d1aeb1a995fffd67732991f59b6de83db9b394b9dfbda04516d749cd69795dbabebfa38e7720d2e126a8f4d115ce23d5a5959696979799595a57dcaace1ff4ee11e5c5989616c7e9c69fef7ee76313118f599bf8dc6c4bc559b71b89ef3c63866ef5caef79cb5e9c3bde30d9cef76313167dda6efe672be10f5635466fb8d8a10745abd7d59498dd6dbfb913d0519eb2d2a4250f615cded8b73cedaf4dd5c89232dd73ce74b3f42ce97b91247726e8f47a39189c99a36c3e1bd17638c71b63967cda4f5b642e1de3647675a89449ba333fb6edf7e49e6ee49d83efb8e8a1074ee99cecbbcb4f76def641873f41ed11a8ddee3ed55cf39e737e7a4ac1a52cde6cbaed7d5aafe4eb918a72ac0837ff7f696c781ad53d5df0da2da8b7f35b1defc579377f25793c49539530773fe6a9e167e352d5cf8d5bc70c1afe60531bf9a3118fc6a6290c1af66061afc6a6ab0fbd5dc6df0abb90107bf9a1cc8fc6aca60f8d5c400805f4d0064f8d5ccc0ebe057b383cac17aec4137e9534e2bada5bdfe65fbd7a71e5cb1dbbb478beaa7dbbb1e023ba7d82e2a4b987aa7dc29d85ab19c71ce38679c33c6b6c7f6e48c73c639e30ce09c71ce38679c31bef85a7b35b7d75e6bafb5d6dadb496badbdf65a7badb5d6da6bafb5d6566f565b2f084f78c65e7badb5d6da6bcbcacaca2e8e58922453534ff7e72788ad9015b23d1bd0028158c502815806aebdf65e7b75668db5d75e7bedbdd65e7bedb5f65a0d6cdd20b7b37e672b69dae06f5111709081061b6c30549630363ace3af5019b0edb8fdada1acf6d5bad553bae09adb5164b0c638cd5866a44adb5eea45a92da13e79c93383520b5225c8e24491257aae1a8f59469653830362b362f36273622db115b951c1256acfca85dc1197ae0cb070b068a2a3c4188f69a8c35216c4d70586b73ce3b676ce385c16be8c1607cab161aa68961a519d3b204498b92c6a44ada91b422380d089403b4307e1999221c1226f47997198e880809aaadb7ac2a46def5d58f4bc71833b9180cc728b02c27792cb2758606c2b9f368686c274ee34e567b3b981ebaaf3c1d1edc5b5e08ec1baffc99976330464f8efb3c6b61e5c05439605eee779e86ed393741f81e880e2a87eb3df81d7830f3014d07b95e6cb3d691bfaaac0d38697eafdec6e74c33c6389899a8942c198f5188cce4480040000318000020100c47812089822c4a72940f14000a53ca6c947848281a8b62611c45511408210cc0400c033000033110632c8990563cd600762a267070469de863739c7b11290b7e55f9f138f31d722ae046a8d25be32c76d8c825620a58c8079ea81d1a67399bfa6bb970ea82168a327360a71097a925567e76afe014ef209ca46ba2ffbefee217eb6122efec134882282dbe11be7e8e8874af1ba179f04288760c089801505071e3f09685a8af537e6a7d57630cb86526d787126b1fbb1c1b5c04843ba31810e40598882b5603f28c042beade1ae2cac5909db0a0020c039b798af7c610704836bc839dbaed4cc24e0974d4f2da2c17f4c5012eeb781d98821d882322c3371bb243ace00987613528285a4bd39c99516c8257b260ba290ebc814cc003af60b4f137f15e0500318b80881e10641a08992c2636bfa2260f36060ff289624240b37004643f3c362a2e72d3db09f6e81c77f1a6c7f17f4ddd80030189cc882a29768b32e895e9e7af7070993664589f1b2f2fc62659c5692f55a926f691333856484fc7e0359cad9c8bb09a4958f4cd5c629c91a937e9aec279e15ea7d1120befd82582743b032b317749401a5ef19f2a7f2705f8ed14fb9c910f40eb33164ff232d4599bd48d52f3add2a13d701a96817d7480c0877df7b5011108be4a68f157a7587d33305fe5d92bf08ea3386166b23e894aed2c082f86a594e7605becff41bd11d31dec4ec4b955d8faba88f68991636f9f2205afd0d03fee052c41ea9ace3a16f85cc5da2b5ed402a4d99b780be06135e7914714549cb20a96c046d90add68699c2e9ab7630dd50dd263167dc0129f56a8de45cbb3d1c55e9731400947e299886b0236a94dad23468c300af3909ad75423c89e80eaa1501352ec27b79d0e733229ee3489a81817012d500dfa44c251b68001b021e5738cc96c588580d0e4858355b59aadd1c9bb350519c973d435ec435b42fdf9fccd1d7cec1a9039abb50793d4e6c0e86f92e9742fabe570865b3287a089ba4321b52ced4431eeaebba37c876b5eece949064c14004a37d6d77cb9fadc28bb66d2156ac487f23fb4b800f22d720ed3576f6d3a50c6207ac6c96903160b2bca18779b36de2b2678d6746a2efc829a993dd032efcb40221da92af1ed4cb6d4a1528f16fdc307305bd5a2ad2f5ce1507d8570b1368449bedaafedb1911de7049df3b59b36a78d22979952cdadb8660f20a10bdbbc116f88605d75be74331822749152a7c56f6fb2872e3f7cadaf3bb72d3bb1163e25b25b540b7ec25fa18a8a9dd5b6714f0b5e0826e085984877ef74954b77c0ed7eb02f1fb19729d77b6e029806f6e8b2611cbe6547f856441a1a9ce322f0d0ce67a88a71e5de94d71c01007890661e8c3e58558f1e42d2026fe397050ab694f6e04fbb5729dbd4c8697c33f2e3d2b6f6d69064bc085e40e581429e9f56722e97e0f60afea04db697d02e921e22d225808d5519379c3744774d11e1b30fd0dc7d1e8d124f3ddd737ced8f995560c26286c46759981047921e358a11f7c0ba908a65254ebc1405d0225203dc6c485546e26a38cca776aa0fd2e5660549bf814c9c99100e4dd7aba5933856ae6360320fb6f41ef7dfe4370f7613bae641115368738ffb8adfe89e78199eeee8168a367b3d93baef9ba95e9c406b2cb0a06fa3eb6cca71fa0980ff6a1b648b9154a246737a6260ed6ea5138a3437e1e93e14ab3aa299f884e9f09ee0993e2495284286c3e64cd80232f3e0b806b1654996243d42c2f37f1c0224b27d38ac854acb121001898c7864356165cb46fe6be4b25400f2b67a04e800451baa6767bc2c293e04890de450e0209e11a8c7c7f107cd404eb1d6d01c08f68bb4b619a52e7b676f950a3eded88a1618fdc4e45afbed15df66769fa92785157faafe4ef5a43709a4f6430f4e43193854626538edebb871410d83807aab2e85f5e66f5a063e6e32b20d59385d2757e7db27b5e57b78b4605587745999ecf83d054550d812e958aa0f162ed8a70ea505f60e3dd6cd4ee37025187b2469f09f83665535f312d1dffd6ff68510036554b4774689632e4d5dfd832b9fba3bb027ab68c8c62e0281698e19ade202416f0f035511219134234f833a97ca38fb33a2dd54877baadc1c8de26442b3dafe4eb0e0d02a47d76e9dc4acb59bce16af2ab209e965ae9182a87500c0700e1ece2086716ad4da746db48a46ac2a2c8ffce87545c37743c5632cdbac4ced191ce2456e911042b852e4005bccad82d8345c95a210540667b1b3a46cea71ba8e01d1715a3afa23451a09760cde302aa6f13e92a68b6dc6ebd4e47aaf6301480cb0593ed6dbbd4288a6bf8033baa518d7dc589b48988e6f36a9d1f67d5fabe20bbda2724a8d7634c7bd825e2a6a5c94919d1da9551d2e9fd661a270af8612e9fffa0af76047b64aa4f08166d802eca81bfa0542dec501f0df4a9f6e8a7089c8f9acda3e266f8d1d4c241ade95afb7337ee4c6c81906794e80d6764a2c65b9e57a4a8a4a26aa71c6f7bee369c7856125f1eb455b6e7953cb3467703f3f18e285ca0c588e04aa634a279be5e6a5005076a3e0373acb4cbe2ed9d58d2a79c9827b94456156e61865574a11e399678fa1eb0da0d3e2b0a6e5f866b37d473849ae4d4452da15a54259d9346e8f818e46b104afb4775e559109aa000cf55c5e51f60060c89500adb0f5de6f81f96dcfa84b82eb0bd2b232ea4a451ad62007349efd5f2c2526225f1967b260e3e4978376c518b315f1237d7641b23924026968ba9e1b58d9d641cb3da480bc1c6ea5b73e7a0f18fa455a6621d549af45cac46c53470c1809f4f8fd4464ab7c1d58a4da76ad5a5eb9041d1eb1bc3e7d1d9b85601ccbed8eb0846c63a3edb0b99cfbd168f338337884490fbf60ce359ebec180d8fb90dea777fec65582114b43d3444e54ae9aeddc02b94e0eb9ef4c0a395947527a68d232987a573f08cd3b55800a1f10138871b4372594e7d826a13767b21a9fb3292d82d199645cfa6d2d03fd3e142a1075d4a176c6e2aeb3da0cf3d282f5a0556523f5cfc49e433b9a258200a33ee5dd32db60af38441978602c48fa5e4a6a152bd2171060473d17e033ed260cb89b51341d0229bc6d1eb72bf4c3f96c64689262df5c56655cea32fd257d973dfcbdd83fee3103ef34f6cb76da26fc2e16b8823d5f56cf03cefcfbd09d79ad68de3483e2bb8b26b76a291daa7894db1afacfa9cd29acccf9b080b88a5117e483c91dcccc3be5c283481a26cefc92f26a96054864c306f1caedccc839ad3280ee56721d4f05abd65dc386cc9a6b10e23c8826c152a0af1de3c2351f99c134c0e21d63e2a808dcfe02e34da88676164f488732bd2dc4d67027686a010a1a6d675ecd95ad96b8bfb3022a7fa601c829c25e99e8c6fe75ef934fe991db5ef747d407cbc662e202b09e56281169cc8b650c45a6f1689e23d27931c9b2474f9e0406b2924696ed1779424c746e198bfddd1a00f43bbaa9e2e29807c5a9b25d79b9e26e6e7f5386156c9fbd97f91d5474ca24b2beb7e5d9b52af3204c234aa524b3ff5c99ff90843dce72010c5aae2f42cf37e32670664b6aa668eb7c4c726af3b0763bd31f2722e4629c5b59e8e819617a3f9628cd1e9c6590504ba33476ea87d07c9c58e0fd3c32bc1b0b7cf2935e213045576e1a372eb4a75a125901d4a14cc20af936e3a69b22b3444794d3fbd634007eab94cd537e6ba3c28cfd56a2047f2baf5c5448b1f56f1de100b88266035cfbdb4e7902f1530f71b902f3571f31f98198fbf6d45529369e57d737d55f94b2f4874fddec3e19f5111c778797d8e3c34f48153469fab67fef0830ca12a908074e417611056f582873e3e9b2833f642afec5e5c8e8b62fcb97710e15f5a417290d102041b041572d033647f75534ba918b44a0ef02f57d711a1cf78a7eb60f8d866324533aade47d2c52e429feb56a92457663184224a268c460623442550276deaa154d41c8444e3d226512c283fa1cb4789b8e1bef86e2e89665c958c72d21920f161fcec0cc6693440f530a81b63fd01ddb174b60d5a0bae253f73565a8fdb8713060967696f69602b4828807c2591a2518209f2999a7a4a3354793018a3c001c8e415b7403dab27a6b80322ce4b7deb26606bb20d40a36a7088f5c40e762e0d52a507d3edb5a29cb2205994a30480d03d65a9a79bfa5805a2045590b82109542b19babac4b3afa986d0b71aaad55320d03dbc04a6199390c9b2acb2269ca132f9e303a5deb15be8967d4ac7310cdb381df6b18488c27d9d3c54b2fe3cd576a5c642cb4a46d639bbc0fe7b65551a8cede4e29c056905269a9a22a292d48aedaad56e9ef0d76245816e904a695c358e46dd2370c28d5331f4f2484837b023daa47afea10aa654b322e13ece21fc7b2482c2c758d253412e56811ad9bf3ff3e9d13c2b2c8029d58388e1ed90dd2054acb0950e3015f317c1d45fa0bdb8f2131d2956ccf2b7fd37d15db8d553b23f614e2301b89664559c1dd4c462da56a9b01e3b13418f88e451e80fcb58e89974e78e2715d52eb8399036d23111a1b2c01ff1322c3c6031590039b73a00e02f9274c86ad0f2a28073b67c0ce0cf44f980c5b1f74500eb6ce811c08f0971019363ea8801cecc0b9d5c904a313401da35209a944d853b78d7bd9607645c3aee55bceb3a3f957159a2c326a33125b2be6b85f6401ffe34b9880102e8acd8a6143562d74b1a85043e54977da8df4334729aff353b19797be729b452261ab1bb275ba7c7fd87ab548e44bbd069b1f812da4599e8c14985fde7a75962e16065d62e7d95fd1b36f02d4807ef9858cdafd2e7438ef1fa03043377ac951a4fa6301685cefaebfa46dee2cc911c77a680404e6a35ff566b70f98f8911bc045fd0ede68b9bb1e3b862a31f08da96b40f73a3670008805bf074516038b0fd412811f6a89c678db8440b7e9e4247c183fecb062d99143ca211fe842b9e8786d3bcbb9369faf9bf87045b1502d93e221dc93b9830c29373e8a07417b2b86e78018a93ab12b61f3da2d09199f8969a8699881a7abfb35935020bf7a7e9d4f74e9da0c847578edf5173fe62e8b1a7f568c3257514b890e0a3db14553c6949ee61390271add9f397ccdcb50a19b68652ebd0b9a12913ca98d736d62acc2084fdbdf8da776cea50c387725b2d2b4b89ed0ebe78442669556e281ac02ae63e7c374fc882966f229c08a911412ce8fd1c0ff1a549ce6dc02087f31a7a21f54e917002ed2676df8d9a5c8d441552ae6e2355aecf9152cc955c4b795c695d48706e5eee255c027c892e77b2e049557315d1c22fb25af0cd040205933c7fc546ef5ca1e5c25d22aacf43d9a15b8f95a8964a8e757b9a29b11ee0761a1082bc694c4238871d38185679350e454f9a00e5a40078d6258c0291aebc5ec61e1c5273b2f4406dbcb89c6a10b44ad86c90b510705827df51c109a7f46a869439a7fc11df80140627de94523d2c8cc1028956e3000cc63d2ae32459758a90e44cdbd000dc4472fbce320457bd7cc0b462395be6b41ac5bdd31f31cfcf5ed992b05ac5d2d8908513fd1f6980ab1e35103dc98237b55cffda0bddcce46c427a2dbe95dfb070ee97b9e647cca99d5cfe85c4724e4dc6d372fc57131acacebfb18ba48f6751bc9eee8cfc04db746f5eaaeb170651b311291a0727d8e942f7078655ea635766cd6ac5d1eda0748f1bb1a6ddc06c5d79c8064e1b3c08d680e6416c54f0c91f15ac63f8980acd72cce5a9d0f9c03e76485749c90515bada5d090d07f3a8fd5f7a253b9847dfae17445d34f9c3dbf6c3c45912eeecf88baec7dc4267f477ae5b532526853d728c55dcdb20ac5a576ed6e302036f2f1299c9ade62560d289ced1746298bcfe823c318694d0555369321b795664f297a97427cefc01e177284ef42ed6f38f8068d6f074d6525518f090d088a952c3d7e2076474155a41d8a9bdcbe6900430ad2c7537cb204561bcf3161ac68c943f5cde0c6766e3167ee7917ca39a6fd7ab15b52507ea5d60dc9d7551728c134ffbacbb42ed15668ee27e8decf7a9a023d23cff56ce060b40787fb3290f6e02a246cc3d844c63ed527020edff8ae3eca33e18ef42b3b433434e7ba24565a5a741a19bee91b73364b523c1c7857925d801a823b9e48e713c88c464fab0ddb4c88d5108c40df0312e028ee1a8acb54d6296d666c5bceb7a097b9fd72e43158cc3c1602c558322918496dc93536788c3bdb05e087c0d18fa5b059ed2799fd463d282c02ba3eb47b69a9539386d3ca92bc00988a06ea979471e44e025355dfb593e5cf3d6c03587419d836c72643eab8136374bb8049dc091d03f3db18dd5183a1a246d76faf33a03233fc51a820badb43fef07b0c89b9043fc524c5062faf45a38c24453731d12b575f27650589697a2accda34485f3a26fe7be3f03acb82b3f0c1aeb5f514f88f65a53e2588be8ff150d4aebbc41900894398435c39c15b1936b9ac830d7be69d0c694fd1ed3be5b9fef4bfcc952d3616311ab5f1a3bf042a7b7473862640d1f393735d82100b355bccc4cc02f3c11a750337abc986ebf5e1ebac1ad55093e8acfaf34eb4f0a0d9c034d6b99f1768d15a27f7669da686e3a4e52047a7f85499b738be4b148036aa5acb1f0284a80f4cc5a09ee04393e1f108f759a73a81bdcebb14d9cf838a01d9ccfd12779c3dce0d5744b1e273e7791ba9f64a90181665c47343b6015461e3e6110a67a5a894a94f4f1ef64832eb704b513642edaf0b32549a1629660d200335bcbb95763ade5b64e0eee2986c8ed4f97a9deaab16248b18a114b729b1f900116231439b37ee9d006119ffa44f5b0311ddb6703bb2794791199156510066033c0de8ba9a458348a294513711d0740ef80de91f5c34c7c723c1ab68f49c2e26c0ef52ac00cd5c97d339c1d2c82353e35c1a27ce90c843bba41b3617f958fd42539628d0af95744f48d751a5c1391db599e476b5bb8d3f07a1f27e86cf9915609db8e711006337e5297429eb554538f705eb5b1a988838f3d127441e911a9914d3061a0e42804de16bcee0d06771f723cdc0cd0d84ce8916816c63307c406939404654046ac5d84d86a3d1d13f5e00b464fa55220ecbe34a6de5c92f03916524645a1e8626704cd133f364647141db559037cfaf7561c95bb1af56c7d87f1bf0c6cca10aad21cccb33a871d89dc813a7aa0b3ff562258dfbf23e4a3681c0a8481d6aed1d1fbd6da1bd0602cfc55c04e8c5d1913103f0fcc22f60186325ae3f102154382446a8f28008ba320466ce37ede080eb84866dd9b0780f4bc850fc22b530340ce7805ea039117abe8c7a33e3c2f6f685466fd32ae08d105b5c4037ac7e412c70de43b8020583fcdbb00eddd8712350de9480283da29dcb32d2b740608b33480fb2b3003160e58784adddb9cd237f4b78b4dcc904b3a60458353a1dc70c13cdd3f0c22289ef8e1b07c031e17d6885411ac3f126bbf8c1cb40233a12b43803e8acbd9b64131a66d5e072d1caf3712200374c31d9f6a7ea37a6dd5027c05d60f4e9f453e95393a7d2ed53080d4e02ca350b1c2b0ce8cb76869784632886730c4bb0a58fdf7cc32990f4c80031a68673ecc2a2658ab27074072c4cbd466119ab09ae0b247a674bb0c5e03d06566dd848a3f83a01130ab8acaad495a7902b4ea14268a72a840c325fa33083d1a69089245bb99879df83fccd250ea82aa340b4b34d0f15d686b2047a590e6c48799b526fc7dfe150626804014cfc2f065f82dedad99899e86676f67389e61f6c979640b9604dafa119699d306d4e52acb28c1b08076b5c9126ac766550d2e02c16109400852dbce9eb265bcc84bca38d8089ac5e83261f2423cc04e67119c48942b2029437e046d818a3334b61350c0ec4819d2bd284d5ae0c4a87dd982d637062e9ac96c9918083301b28d8b6c5b66405c36e90c1d17261fd3b39c5c30190b9f21e9b0be01fa8c478f33cebf920b07867990103a11a0b79df9d8f1413789c16a1e8f0d90300022dc4050ea890fe4627bfd0da1891f030cf3d1c22c5c7faa3b0a67570a64271aadd86e85d248b47da5de9bbd810ad80e7a97369f4c00318bf3194837d4f480c42487a36b22a54e828d450585cd4d652faad9aa0a7155d77feec5023859c67e5f22c5569f32023a8c02a74e0987a5f731d21ee8beb3195bb2627a9dbb377646f42e8683a681341cdc7d1318ae408570a5f46a4961b3e2aa8283303bc23548a40b7d4016a80524ffe7e33d26e9a1dacf49474591cca476038ba3328be892ac67d61a28a342425b8f91ddd919c60ee1a24f365e25f810d1213112f9a8b154680a3062c17b0f69a089084a05fa783d51d0060a4106f4d26d7bb32e5a53d70563909f6b50c60637934aedebd62ce70e8eaf0cad719442cf52e3c5da393380e65e011bbe68f3fae0b6acf8abbfac71dddbf73cd8cb1db600e951e2967ac61c27cc0dc2e4f44c1923ff2c15325767e8151eb0a84c4a3f3136fc03c18840f940cd820e3b0fbb33f2a74eba8539ab15052b65f7fcb0a9b8eb473af1371ac76eb1c122571b7315d4fdfddcd1835935445e1da25073dcb105eea1aa392feabe86ba97e5e0e21214abb47bbeaee23e14681ed02854be76a7829dd1705ff045861c92e3bf4f1712339df2491943d49c66402a5391c725905871c632f0b1998c3b91ac9fb9d84c6176d3301850741b4c0594c58e3818188ad94c928fd73d44e24f8e23f94780394226f50671346cb7f92043e969844236eb1589feac8d74a69c6e1a175252bc0c8b850233842ec01a12072015b3d15cbe261c224970daa51305585dad29ab328ac566bdec574446faa941a4631b118f8dd56b093687aa7ea6ba71b74f70c156abe03736752a4aa4ca9fe2021409a382b73ff9973df3cd4b8f0d3a77403cd294f4325012a0658a0d9fb0732cca4d50860c5ecd5bf08cd32c6f8eff4083a76ec4719fbbce4a347fad78935b470e83b213c470412edb21e6ff0a3242d62aba987f30f0dfcc211d6402f6f66dd03d5166297c75be0b438d1f1d1489091c7186c84168dc7abf3f86720be80bd690a1266a58209bda0458b7b7146195450d2849a001530a49f7f6d92e3e2f89f39e4699ba2018dc96906a48c20a33e135d51e21fdc31034c497c17e4e3fb94377b672034181a263690c89769deaf558157dafa0e2f00b8686a1e250e34b108ed727d70f9f6c7dc83e2a192d0118a94f85ce295749ef80d14bd0b2277bb545824015984c0e62bfa074dd0ab746e06333bd7c647a7953732ea186eef412cd2c14219f1ed0c59844be971ecff7774bdc43cb9698a34f83a005090c5c87597722b7d9c25870eeb59e6b9c830f0b28449d7947c35fd1b138831df322051aff5d9317d0d88860d12c5398a7952ea25a1acc778000120afcd374a3b8dc2988c49cea44609401f4892ef0be29d453b0a80222249a85afb6536ccab1c273c5215ab6ad107aea503ddff736f13d66e35887c6bd101a6ebb5ad3352e356182876a94a85ac780bdd329551abf914c3cd1bf20ee22422e568eb78dc5a9c28230551148a09c14a532a4c0726bec86e5c3306168e1e9727eaba264ce15d8adaa41b342abb5657a573408ed721695aa23698e8f1e1d68633ec8265a774c02c1f34fb3881d6d7c4279c496782dacdb68068c27f779b97f659706bd5d022d21e8d20503cf06cf0e35e03f0ebe5cc16eeea2927a570d9c720a3cbe52f56344f3772f87e288c1a85eb665ee25d5f7fef7c20cb6616cb0f2b8e8134fa78e1f978688d8d8f2be314e863c533f5cdfe0890f284cc93a4f8a9450c2ea837fdd9e521b13bbe42cc220d158ec2fd02921b8ecaa2b75818c40d81c5dab8ed8c613104ef1510b8aa0948a984bd13e78d346533750f1f3f85d8969bbf18a1bc8f1bc5bf76502a636a5cf0948103c3f9a235ea97f74b0a0612ed0de5d2760aec5effa4eaafc8de4cc3430450a262300ca9d44a159050182c4671308051fea81751933af71a81d629107c756aa44e1817d015bc8be2ffd3d28edb115450b98b04f9b4bc186509a0b3bb2b94954973c8d81a162cab5c5ea86df2ef07af199bf534f60261afd76bd2cc99ef5f75daa8910fbcfc2b0eca595a11a6e679508cdc677e01a75a71aac1bf5d0825125c8f537396d7faa1326396447ef16b1e6af6a6b4aab3cfe18fb7e0b00c22a74434d22ecb3043461538279075273c7e940245b87a8e91d01e83096f24f189f06baecd49dedaa098a32590f6ac4382ab673c8ae482a7a8cce343ede4826dbd1b61d4ce5763e78d1970ff40d8d674c8efaefb6cdb4431a291e57da602731afc4a70a7b785989143c0e79d1b81a9bd4daf1378b0d4893fade8c6268913718cfcba825e02f32905c9b2fde7cc119453bdef57f5de7de209cef593aadcf55ad1d970e472f89936af3d91902496f0aae6a581b410847778ffaf4fae19a25daf21da73aa727b619a2760bfb375a6b6b03c7e3517ac41bfbefdb40ef569c0bb02a337eb482df86f81ebd2a5c3d79cc2777589badaa62a5634d7edeaf755f559d47f69efcdd282b71a5cc6a83774cf7074e3af507c93f6bb8533852edaee29ff32aabad0ecfddafb0aca5daca5cc6991b90d02b698f5d3a5c1b232107101f224acc18d260a4a75a0ae76960124ee270113f519646725b131bf7480731a5b5fd0a4df1fd3a38a2a0f044450d81a5361f19e990de8d8f78eb81637c27ef8e0d7cb3b2e3eb3d6831b4de1c19964ee3dab401ef5df622e109278f7c065e9ec58d0be1a76065f63f87016f2316d46aa282dc9dc3d29d73cc50e45aa3f823986f9959c7a19c59cd1698e389881b7c147b551c6295809b939fe01b837ef12ec55291364fe57a9965e5ca79fa5d81c97f93a1397a4712066b76f548fd891bdbba04115e7233c0cb48c300bb76c9fc57a201ed585794c9d36d7c2c67a13d29373af4d5323ec0d7dad0873af8b0743f1245f3a5a882226ea3b4cbb7d0713defaef1d012637c6e49bfa42b6c4957a17ba9100779be44098955ca53f21bddcdb06ec751936ecc52fb25ed77336e0ebfc736ba192b65ebf4186c03553e0046ec4c50095364d5ec10963aa67c0b85c205a0a7bf06375883635315804a19997a496cd86694740e88df7163cfad84429b35dbbacf6eb89a690ad8411b34a85804dfbcd21350d989f1f3b215882ef18de91b7f23704321e168a2cf373c2dabb0d06a6c6c0df4316708a19458e37689f237077adf1c5a518d259b04103bb5d973f366312a4db56d55685e40ec9f7662a015ea2cd5a02d4dedd05dc91b0cbe259c6fed9d51a34091a432b30eb35ce5afc0d702e1913ce5178f179f3c6b413027e9a79bbc6520b35c5e2c885917f645eb259a26ebc1e975cc199587145c9e33d84d27e7a67933c21b2e058e3955b0c2da7495f824a1c8932f3b0045ebaafdf1734911212a4eda7cea720cc2802b3c2c821652bb6ed7c63e42cb8c0a191e252b6184c8b40936725f891f50539608371929d433b829ed7220fd08684c6125cdb1b371e0c1345b412757deb8a8b5beca19d67126df21c9c6f3095588d40e3f2c0ff0a984a9abdc945b698aacf25826883073494b3d5de45875132e427fc5877d518f8d640b06b23cc962141920f057b37a6d4b86ba8bc765d007bb3c518205e105216193336e19a7fe55083f78d226ffe35284f8ec6f846e16c995ffe4778ec022fdfb58748f8aad8560209c48e12baaf4d42103f5267a40c9ab00701849d444b3ab2f4134d874dad11a3261f7b708055c477391f15416a2f6a51fce66200c3bc2725f5e89e6d5ac90d7f0c94230ddccb5945bd88b4213502a1b08728a6f9fdd061b50c1ce51c9982c8b550bede81d905d4adc6ac400d2ba4b93a06f979360b448eeab9d5889e7766fa7134dded8c0027d5ff50e354c4d69cef338b5a5c38cec9674f62065b8cf22fce382ce17b09171cb75b5f9cc5bce694affeff181a169c315531f5b4a51ba90869168dff23bab1c6f0c27e8298cf517741c2312db80af163c812c28951eeeaab785ccae875a85259cc42e83cd5afd73ec016ad1133693a19a989e46e6ddfe96718d0d6c75eed45f48a2ece9c0072b6d60f8e8c8a7f057e8cd2dd64f3ca933f8767f46dfb84d3dc26a3be38353d86fa481c3d73b3cf837c963e920100ec727374f21d1923844a0301023f60e3e5b29e92280cfa0b35a60cb6f471d61d69f2eaea3ff8a7b1406a5faec200b6165830e16b934dea2c23aea506a6a21f6b861a4ae7e95b96b9583eb250d86e1778b02c4e3973a5b9b3c70c310749abdb5aaaf62274af342fe13c2c87fef30d2c7fb8d58b942e0a2a2be3fec329c72c46881c59de5e4ee1a27bf8497ee39a6b528d7713a21384370cabd884f726b16a1f40577c913774b1438a469bb6a986ab730842fc349693abeed826504c922e5290bc420745b7e8646204044c53f6157c9736792a3f202ada4aeaf3754bea5bc0058fad7294a1fd106eadc49d82998c2815433a05f85cdf76bb12548f2190345686625644b4b1bb46a74312a9824c4bca90040aea0f6904916e9af7bd0b54d90700dad4dde42b92c3389c4682f3df506431ffa65c24d284dc2d75adc9fbd6b25c8e5af009407124bc5a5a9ad4c26283580aa7d69742250e3957ea92664ad120d674c5defb27dad2ca2a17113b7749eb33d637de224242d0716f0bc11f699d26b7ca900c6e4adf234d87025e656a962a52320d636aab6f42cb0c47972a4abf51bc243a119c6557d3ba0c1d82e2fdda979f28e9c0c49580b2ee54edc0aad77787082af84dd6c3aa101ca8cc4b550cf4448b08f28dfde4a06f3b00601b006cbc6c90e581faac607016da895b198267843925360dc33539d94c1410612a4d505c9beb0325d9a9e95da94c620c1b73a341e043140fd2e915151ea99c90342ca34ae95ad048b546a25a8fb04a96a811c7e70ada390c8915eff478c02fde52d0d74496179de95ad039a261aee887025a07a519eb4e9859fc37c181018490d4028a3b60667fd1cb2f0fb026745d4b3113b8656a14b630db9bee0b5363ed0a12665f9445fae1ca78005fce9459f72cd34114e90c54a38affb04f8a2d4a0e3b3067edb078f3f4e172f4c5de06e73520077f42446a7528ec43e6576b8d8b04d52a0c2481ffa5ebe961706909e4046a18464fcdc81793dfae643eba4d8e458933e38147fe5796efc65f370bec4b1ac6d90af067ab87e6065aeba16a29becae4aa75a99c0b8bf72a26ee33c41473c6aaa79e65150868c281e73850e35a848112ae591613ad0b86e8bd614449bed56cb4d21faa2afc26146a550096a7e51b700f011a5189f3143518e78d648f30a634b19144b6bdcb9cbb87546eebd5a847b2ed2002675c32c985966a0134ba17cd46ad0c3d4103e68bfacc2b2ac44d903a899a2d9e82b15dae89ecfece28bad7424dbb61a28c49cc2bc5a637cb52100a4ca3c5a2c274fca0b7f44f9050fa22794bfb0d4d68f15be9c3cfba0f083433904ed6a564fa30577a286c58825f75650a0ec5835b4fb3ea8efbafda260400ab71268ddeaf4fb6228a5c2df4776a464ff9a09cf40a7f79d819534ede90203238b6e817632744931a6eb0f43a10cf7d9d68c6f31cb638111a91fc7207f379fb31a4dbd40d275883cab7957d69d1b0126504f992ef2b6b612499ff7ca740db92fbc1d80fea0d7cafd80ad8a96de6c20666d28790d1a4d7501a2dd253011695313bedfa9b5b36954b60ea59faed1be96e8860299b5b70abfcfc8d334c6f842e29a771a9c91765f52a481667c31671fa5a88b19c9734faf9648658fa0f22a8b92a13b600c063c2a29780e71513f47d3ed7dfcc01127d2280dd1b528fe2d9eeacd4401df4517e7077c48170a33ea78d137f2798af7b78734a4973a88815e544779be92bd808bfbb8333b1b68bd9d7aa31a9700df5bc6f292610aa5e00f0dbb5e2a725c628ba3fb348b504066037de520475a0dd5179ae5a443b19979dc0038552055742fe4718eb222e53295acdcdee36fd09236832ebaf9393f5211cc1b75e7a858d43b158c5036b744656e79d09bc28cdb13433671656741f2f9bd118ba1b3bc77004395ef8a5e8d13804349a2b3147b6505007d453e1bfbada53c9e57cf4ba8ad646a1663bb6d57f9bb2637b4732c07f75b280e15d8e81245b051e2830bfe8118d055d854bc06e02376541fe647cb26e84035154baf4e2049a6edfe5223b386a56fa7a3183dba93e028a026ab187a92926866587f9e2baa12b295307fab95d3f65a50923b7c597b642e1dca67c42fd775f9f9e882b84fdfeed10ebdae9c671386b5f65b10f2726aaca36b9cfa20555694a87c1a500f00bc695e33d885bdbc23dde77d9c8c60f15f0fac45ea3b19416edfcd6fa6f715e607179aeeeec992ac552cff5a4980d649c067309c115386ef9f78c7df35d73d0ce0c377cbcbb8aa15f1666152db77a6152c4c73d3bf220de5c5da233c17b73a184a35f2a33185c5be1e615473fe7807882dc2db29105770688298e300cc9d2d707d4173fc13eb125c94ff027074038cec9a40ca08601330a001a5f11307b281c2c1abcafb1a782274afdf84104dfea886a6e7dd8d5fb072eefde2a00d912c3028f40645310877e2cdf93411324c185be9d6a64f601bdcc182100f87957936dda3b59d1c2beb320e04f7ace95f3e6d482c8f3e7f16eb981f8ac9c482583e8864685ede21ae61408e3cb89bcd345af8637d6ada96bc49ba55c6c034a102c89962e1cec5eaf25b68017972ecac291020cab82e1d4b25e25b05df77c346fed0d8007a6ec04ec02fcc3edbdad3b04c79b7882864dff7cb20c5f888ea27a5951bdfc2edc5b7b95c840ce4cce6ee4790f1aca407fe0f44d496c15c7d5296b630c4e9f552915d1f017cf335d3c3326eb122917f53bf14ec25e93c32069139e24c64d60d348c7fa610921112120a398fc1b195a70e692b78e3905c40a10ca049eb483bf313dcae779c7ee9c67126cd1868693452409278f8645144ec00ab0b00983470ab2a929301dc3a14016c4f7287cce51e6b9150dd8998b589479c53d1b814cbf4e01099d6d6be6a1916af5203f8f2a3b1914a3d49b5e52accab21a2b95476a8fc80444949614b6303b1295284649e27e70e1335aa4ab908cc01262bb8e4cda70e3eeb74de53d9e806b5218da7b632fcdeb56cdc9b058aa55eb2e0d50d836c100a1217f53888b94409581ddd86e2b46a6c5eb60fc5d5768a50da494954d26b0426c2f1f7fe3de978f115b51e2857be8d1873b51b986d6ad888bc8fa86c2e728858cf084114dc02ac70ce218c860db835fd90049f86ef535980832197e061430f5bf28e6a13fecdb3651e95fd46fd920bb288b44558a7ccdcc5561dc6a544449c18435b9578291ec11203e003eb8fab68b31e83295c018cc31060e1a80d3b9f4c004f3a47d1e9275fe9ac51f57b6d7111d09400beeff5b551613d9276c5f162d17b5be404f3df603364b94ee76adef30975e99520d417178494659e300f458f732329e2e0c5327e5b20125184263112e03c486fdf04de2164e9d69570be7c9a758ca2d16c28710c75351b8b179842b1b2ed5dd64b7d5e9f94fdce759b0a801831bab2c7964e6195881b3350d90284b0e6361999694313e1e567aeb9096ef1cff81d36b00db65b78b05e2ded415a7dd56462335582226b64d4bf8409d394715227f6b0cb84a5f4a017d25ea601c3fb606ded6d227d02907b256b02c4c397188425828d84cc66a1166dba602f173d53c4c46d84fcc9134d0d734570481ad09ad813977c02c3cc21df80245899eb262e76564cd2cb5eed3af01a0ad556de171045821527b9a17ad70fa8a1d2d4b2c9e36f71e26ce624b452ecf2fba5cab8d4149cc261c5990b8a0e10bd30583ae79061f544ac5e84ea3f2aad250249d9422faeaf9d7be7a662bd22fa5e49302820b489a896f258053bec19d80e27f26a31593dcb5e8ab53521c4375b626d7bc565a55256160bd3f279dd7933b9e8f2054ea0771b3aea51380b1f3ba7d7967cdd95e1b2bb3142e2fda6b1d9330eb45b71575a3187a205f25bc6660700bb0915a9fd1a8be867a917a15ffea1239d1637d158ce1d7da7476d11e5247c2545a1adffda5617bbab528f6dd7b43753877a62bf1c62db589a12d538ba3194d5727b6521ed57e62a7c5759fb8363cadd13ec517040c1d257aac4c9430d13cd83f4bf816bfe63a6003943a3fa604ab535cf3c75f29b642f68f27b07ebc58f1b14f6edfd9bfc14506cb17c50300c6e2e6cf6ab7c2bdd3fee5d5ead71740670ac5f0bc3fe99730d4fe594902981360086154fbf7bda086f6fc975c02dc8593c0cc53e5b989673984c39e94cb7c031dc12de9469c99936de8193599dce8d058961d47e8731e96b28699515ca0f8109c0626a08108250e002d6bb54c3ae97cbeae92f73e876ad22fc41bd93d9c4121a415739fa4878c697cb5a72a406c6787252f6a6dff549dcef2d0026ce326e0684ce0ff9ff86800ab0b11a2ca72aa5b0b501d1bcbda7757bb3462fe42119595137db0b312340dc28dc5b081ee3ad196380833bc935d4336fe5f07ef587ca4541f8d6cc0c1e9c0bd68310c9e3a5071f6b651b071e36181f1bbb63eda82462895c69b7f91059fd59cf2dda2651e8e44a2c4dcad9d0637b3a1d8f6676229737cacd0f50b257d8dbe22c2828f7dc2ee3d9745e56a5ac480fb79c5936e6553372a862ee9eb97e2069a3103d08862278d7d31fdc430eb7275830bc8ea03efb37fefb8c34f0ce219b4958d08c1477ebc69dc021d1e35a6e0a14129160cba98115397e5f232a0415b190648dc9ff1cab001046e36ce798a940444129260904cfd1baf0c0324d90815008ca2a96f8260443c2de3abd41d8f848464c828d629bfa5c1c206876a1ce7a3a80342083008647453839b9b0c886b389d15275879a45c402183a8dbf80835c317840441a084bae129890010e16235508b2e562f0e09918c629df2a91792b15fcf23829341087848920c4001c2098aa94342bd51c92904c3d149aa244c8e851606ea195e42712600478d8d37a11a93a18037653fc627c020696e10f584df6832e16e442b060c52142786aebda67433b448803108218580ee8c967030b459685bceca23a218872012c740a216d9098805101849c5a921b02140e09b682919743c121292c9b7e5917003846e6cd4f30848249b3431cda554d3613b01b3000221a93804443606b48c87a09889a78c3347c6a80863180eb5d88d822446a68f52f2dc123201d0b56fc425512a370b70292aba6d7a6025201b0cdc7a5de16068e2a0b3d114a68fa4a8d061039de2319a724004214eb4a1a58a9daf92128177490bc3f39570ccabaad8b2a0a866be1d5b35e01c2610b6541dec92190311e05936fcb79c3f690e00049c356f35940bebff64ceed959c28d0f25c86cfeee9be4329f382a7a1d37ce85ebeac571d17a6eb290281f52a755e66d63192d4a932d1b29393b641b9619d109e4507c3ef563067f4326ddaa27d685d91fbcb28cf47448423f074bb68cb680c2721a3a1f34631aa9f27d0cdb12be7b2181d43804c7e1c89d0681ad7f73102652d2fbfd726ffc1b98b7b2005ac3e88fe54244dcbd129f2017a260d376fe2a1bdfc7ea56a247b2acf49be455a973e8551100b290cacee0f0a6c20ca68df9c9363647fecaa1c704a842c18ea0a7cd0253aec0e8e546af4f116bea74780d10a75ddcc4387d1b2fb2f5db498217e6daf62fb569494588c9df67cbdd910fab59d4013153c0b681dbf6849b49d060798138282b52f5a6b1a2021a5b7d75c237ee9084e8f6c3c668cffae2ef91445245513976298a0b61ba3e11cb10c93f4f8cffbc7b0388b9ccf59dc0a2ddedddc069129126bde3de64601e873890a65e1439333e01478b65e870e2e8915a786b9c7f499118ecf80919c510a344323098482d4c657619b18c4b372f3e0d401f40115b97e363d447a3a57d0ddc8e5b7925f5c6ddd26b0288a800208dc8cecf7db1e72a2fab22c6df2260c0465e4aecae71e346e71c4aa86872db0e153a38ba25311d976ba852e6f381bdc380421a5057a9319c6e6d87a4bceb7c4060cc9005ad459f0b25b26c500273e59a00556123b7882980210ef96e2bc92e425b48d15d839fef81b256b061523098b3d9b3bcd5fa6ad0c0b437895585d030401fe60b66fff250d93dae46e6937e622f34da22adfefa30715e10628c1af9dcb8e1228a28de1d6bce76bbfa5ab0e0c5e10ce108b83b2964f1f874110c3ef0b49600fc68d47749a711014e488356a9d0233696a359a2d8ce303b913f19eda5d1606b6b2122b6a6846d8196272e12616e833ad480b6c30780178c1091e44e6a78fdade08160b0404eb9fdeb26b70b00191e671167ab2de0fb6748d2450837c2671a96d309249b438eb20513e09562055b107920bf334d3c68981be6e83f39d2495fc44dbca8b3e6f36201dd3a20a8290fb13b8e5a414d58e458ed58a6a47bc778e707949c7d46335f69628bab94c5f2a062b69ccfe53dbab74585f8d8258243eb5a4ba4e5b8f4fbd23ab0531a5c4874b7a4c1f4e215442a7da9c542db984df8b9fe26b3111d5be6472b1282fa9b3acd6b3f221227980216909cae1f486dab8b685137eed64d4bb91d8a03a9c22d49d2ee8235409457423e884decc61fa02b45ba3605fcb58aa17d0da879361900a1edcbff0aff1f2870a352317670c53da7f097afc0501c45f022ad4e95f5e4090324e07ae10ffbb7c63309f3758908e4644d7035e903aad4a73831600b80c4136be293aa4ecb81f39c9be3023f63d6f56e72c0f9a3b613921bdd2e4db20ae711c30507ad402ba4eacd6bdc16663d0101189496b7b65db724b29939432bd05d70513060cf82e1da2b1cee5b761b952f459eb1d7485e4754e79eb938873bac5a8d692c95b9742f386096624a31529ad3fa0c842404eb17ee70d935bf7bc1c9663002d39cda91e67ab76ef75d12b9cb21a6cf6d573a464eaf3abc06c51979f048cc8d3234d7ba4a614607abffafc7daecb91c2793cb60f7d3c9d2d5a7d361ab345571a5667f3eb9a918ccdc73957f4a4f9f1765d687d7555d0a12b1d34898cfefead7d3b8e5b8dc6e850eddb2f4c4a5b74659bcd59fbd5419bab9b1a4dd924b2314abb66548b6a9d5288caac95b1ca532c1b957dfb4665ab8fd26fadd48363959273a4e4fc8d47b01c29e74cc924af17a03f3ceaefc481bd3d474a0eef0fb43dc788dc55eec3e9f3eddb8782b4b256eab448093cc352cea655c61bbd2c4076a494f27245b5ee6e15a658a9b556121e22dab66dc3dd92271cc7719da7c20b8631c65e698b0a3f9ee7799e34753246da8f2b46a64efea0c5d92a09e158238431fb761c67d3eeeeee864255244504ca869312a71e4a8754507cbb5415f9769922e2db252acbb74b940ddf2e4f4a7cbb3cf57cbbac55467777b482fb8a8b931c4536628252aa41e9066b63babbe508481de42de1f9743fe02a30926d83e9ee965d7093883485bb01b7c37de2de18dd53ca9546f7b50961b5e038fabd34950edaa490adc1562a5c373fd6e318bb7b0a1babb45fdce108e371ce15393cb9be7d15fbee552cd224c9e12a765ddf7e72f9ea61cc64a2e058237c895266a975965ab3356ab7cb912889d453926a965a965a2dca286394565a4a6db5b5ab5badb756ae5652ad168a0c8a6c3693cd66b2cd5a6badb5d6da6db3db66b7cd6e9bb5d64a5174a528e26a355211aed53ada753d6557b4dd6ddbb66ddbb66dbb77bb77bb77bb77db364f87a723d6c56e27b7cd524a29a5945a7a2fbd97de4befa594520ed71dafba4ab5be48949e9e9c6294d2538cd293ec243bc5565fb79314a7a253d1a976aa9d8a360bf4a214e845290c46e98b5218ec255150a4ec4291b2db1725fb795133942c87d421bd1e8dca82027daea9cbf573abdb467b6ea8da6c4dec3762ee46c94dce23c7dd48a3cb8fd7766df1179f6eb7c31c5675d1692cde74b4024551bcc12368221fbd5ff18624bb98427cf4298b375c74598b37b783947c74098b375b4fb1005a0289594e604401c3c80a8aaa06aa1b524b78e8fd74aea9872f2e09b29c44f1d33752ad6118a92b289caa06adbae1a7cf2db5847c4929a5140ce72c36242372b95c2e970b86299f246adb3ef9325c9cfccc5164232628a51a946eb078c25c9ce4287e3acd467e7a9ba0946a50ba61c2a6506c48462493c96432d92b168bc56231d6a9b35f4c7552be8df9253c9fee075c054632bd926ade123fbd390f3d9f9f4eb9ee075c054652339aaee9f392c9643299ec752a3a159d8a4e45a7a253d14b4ad5e1150c77036e87fb84ece2a7534eca48537e7a7337f8e993dbe1a7cbfb848c6856a5e88a4c2693c964afd7ebf57ac55875303afac5b8af4d08abc59472e56bbadc3cdc84f8e9accd6af153be64506c482693c964321816ebe525460c984e06c655ee3da5c780818989992143462523d353cabcbcade12795b9d91aa848a067a45fa9a56046299874750b55bbb24cc49a7988aac57c333a199e0e195e8f5e82027d996e86a76386d7a3633232d5bbcfbd1edc575003a9d86cc5400a823d2518c1146cb6a6b37e852974acde822f2e2439ac790ad61552b0c651d333d261b218d1d0cb3e45f4d3b18c8ec6e2cd8c8f30fe8847417ef8e22ac1cfafe08b0b49961ebeb87eae7e66421635642533f024297244872028f292dc828c85d27ec43ec647da0f29cf7da4fd909d008734268b66bf7aca68adfa786c3bf9c1f000431d1db2047dbc8e0e394a30ac5c74ddd1a6349713b4d22a8b41ecc3fc919bd15c4b36bbc13ea43497ebed479aeb4837cdf5a294d2188fa4c862adb5978b4750a8488ec49196fcf496754f4898848f5c3f8f66086f14472f1b2b517c11c51753a2f8a20663dc79918813e4d1e724f3a2a04b4de876c317337c6124c8173f3a369619b09e693a8301689bf1b8071c83c16030184c35abd566fb575885b5158289e03b45b315aa9da783fb0dbc4ce43a67fcfc68ecb1ec54b319c31569da0a09451ad6bc5183264cbc5191849f6af67da36e115bd5a867daefcd990573587b059220d8259f8a4835452505c7a4cc322411cab710a62c4a442559e955825212a204a4053543c90f1554b7404d414941254141b13014103608f5c4be504cac0f6a8975652a562813e52979166932121906377cbbf574ccf809a68ca2e4fb956491a62768aa7142d7a8078ec9b73797c3ddb284884bc2010d713fdc8e907d62852c131bb34e6c0fb633918a28d2b4875846a463c69b6ad5a81a358e6854618da3043467da93082d8931192a3d917d0908a26f3c658665180a26aa4910b09468a3bd8dd0e2db69e9f59385224d53e0495584de28e7704192334663f1e6fb1833960e4d64590ed9881d97cb47da8e0a5b682b047d0a13e66de4e7f4e4d64f9fadd8318d028d99ad684b0dc2f0b013851a2369ac16f8f93e5af64e6a463be7f64d9cd83858cdca1f6e1d8100966f29be8fe43a02937c531d53d333069833dd506cfc046d6ce60d1b3561cd036a6a466092a78735ac9ea9d12e2333b3f136238c20f791bc80eec6db7673a4388e23912429524a6965c57c74cc752916e430f5242f476ab67480c8d143681ac38a61e548c5d975b2ab25181e160c1df0b271a2a45e932a394aa601297afc910664f6f9230d484d4e4e4e19109f9a2d29394967cb0f0893c8d19bc3a766edf89be7bbee481b3d659e04244940b1d804ab0f901118beeb47f2913d4b2105be2b50f599ad76fbd59ffa8a349548b4d1de7228d23490cfb7934210a7f57652927853bd49404f9d345d5277baeebccc6fe08d34dc739165fce374d291a3d9b4d25aadb5a69ca31cd2d851bffa35655356ab49988485717694b3591abef8e20b2f8050c7b46737f576d04a29dd516badd6db61adb5d2b79c2e72e47451abc9645d70912b75ac57f06c0634614664ad888c887cbd86b8f0d173b4e4163e3a8e971a79317feae621fd2e9677deb8b7a705e96cd55a6bad977ef5a3548788d894d614a5ac94aa9331356efd769ab4db4a63ccd6ce47c73162904a303c481fd309f9e8584610596b773783858f8e653a1a6fa8cfc925a7682e795da6a58ec4dd8e966078d04c0ae2d4b99c50a8946ad5c158b1288bd553b2564aae8d4d0e164108a102136a4c1aa1c3b57eb1fb7d2cbbda03c76f6e824dfd6a066c7e036fa492c3140d694c177398adc780f5c0d0c77b5e6bd551bd2f03adc7806cbdc7859d5bf7b003c3d6777e637e4bfdd6e138f906badc9b3d2f810f9021d798ad5695eede7a270af439b0f362c78075b0d0e20a9d9a0f3d570ad18c0c7dd8753c30c03a59e478b275d22b5b67022bd032040f33d8620549f8d06a80c5043e3ce90127f2b07d1118b1e7fee9f7410c5645446e1e82336d615a524aa2c4435a41f1d3238d915c88fc3cc5f2103f3d9ab6f8e9d1b4e4a7c752123f3d96787e7af44cf0d3e3a4df00aae4f0145bbde28dbcc27532585c04c90b1213ce8915919f2ebba83bc53a197ebac445fc7449f2e2a74b12939f2e39277ebaa45f8d2572788aa964f146ba0bf6aa60db6a9b92ab12e2a7cf7e5dce859f3e4fb1ab829f3eb7da4f9f9b929f3eed0b7efa7cfac528c1aa01d9ea93a632c8e2a7f79459203fbd4fb1fae4a73795c14f6f0ac34fef4abf541299053d8d6c4a49cd360b7e3a9db5a7536ae9d751c9a859bc918efaf1d351ae78534f1385c44faf92899f5eab14f2d32b9d47c4183cf507c41be9d4005c910ce3ec14b3a7987cca7939a84b51cca5c8a5e8a783d261c45656dccd165db95269cb393d7a73845996a246b34204910252f02487ac251791693f6854841032cbe353204380f098004fc7f323e1de12ee6ddf003649c9d21341c76e9452ce8b7d5150bbd24144469476cdc8480a6d5b4d4d4bd761b189041b9bae363639725e90a9b7434aff220d123b5c624bba4b6ccd9c49207925e49ec9d1755dd7793b6ea4b951922ea9543d8469530062929d2325b7637c823c2a951ce7cf741f85d59f0002d7678b73a4e4305279ea31db1538e2c82ad90b25717876b1ab65f99d5719eda4b783e3acbcaa59cc03b38ed1cde53957c9425216ddad93440e5bdf19e8587b60b6e33ee724f8cd4352163f3930c322cd74055c913b96613fdd62e0c595a5c85091253ebc44a614991521f2401bf1e92019a63446908a6044c8a6051da8b422467596a345ce163959d468b22588278690c2c28f25405c38a1c4075a121470417ff8410b2b86a0a24585294c10b9420b1eaa18d1c4911fda0511f0916468851a78563064c9143851c8cf0c9a68d224054e66323e38990d59d1f34217481c195a810c4ed0b0633ac201465382a4e0c90c57b4002701b01f4e0004e3e20824384fb8f8f0a38b9d2572d8a20a1c7b444f0e4dc45e98e245104d051542978a181705154ade5a6b692d08bd0268c861940dc9f287c966ad0bb20b5b7adcc00a12b903e2865c820c94c39c59ad9e3f593e6ccdaec03a4a7248ed57d30d0dc8fc8cf193f513c6ea008f4d94520a3e96f8e79cb80330042880f73878afc67b1e0db088c7b973f17ac4a3a32ca993fe444ff4e4e59e91338f55dd3da594524615c6aa2e2555728561c808a34b52f58197608e34f17b6c0ae557f74094e170803a07aabb50aaf26022b8804ae52a954aa14ea7d3e9e4a2ea4af7533dce2e2693a9e4799ee775b92b75c7c21893388ee3b8db75a5e92f53c64b2a6d3e46f9095a0f1245d07a86a0f59860871e1b60b420b420b49e243a64d2b605a101734180f0259259a081b59cb553d8ca62a168a396b3b6c7b6b51cc89ad6de692d0f59013f32ebb258de7af9480b72821ad213d3e290877cc0020f87bdd8a1071779c3f2c10fd9e4448f2eb2fd48f359c20706748b24709c38624e9285c827c83be4292a2967961b4185ece93d668c3973d2ae3de3e6f1902ed7fccde31165b5634f5c6edb9028dd22b66d886b4d80eb0e1cb581eb1e32ec43168bd59384c240e241723d84d75ef0839ace82dbd17c9b159044ae1f693c5dbcb55c3457d3a5627a5af8b0860cb2745bc13591693c495816abc5c38427ca933ed2788098e1a8139463cc61c1b4d65a6badb5d65a6badadae19031cb1890339333d6c75a0c4e15e49b56ddb667aefdb69d2ce73713cefbe1d1f1b1ccf792e8e8bcbe773713af7be1d20716787c7714ace538363f28c3b883766624b06e02d8dfeeb53b6ee47651c481c5182b2a78c347896da37cfc3f9f4f9e475b894eab0c7a15424ae2bb142f0a5638f0707de48933f2e1640bae98bd183d0f4d24b1fdeb8d5ddba12f5fe38f94d6943bafd68febe9ab6596d1646a597ce0f0335188b48143d84fe6a6c1a07c9b3ed3ca6defb76b0eff05c1c20dbd1d1114e93ed9338f7eb6903e77edde9b9cfbf2fd288ade9ddd7418c7126b4f138e2ccf48980ba6dd5bfdf687eeea39186853f0e07db0e7f1767c3c1b7c39fc5c15c87bf8a437130eef0d738b8db3ace2575f9cefbb8bb6da64c4a9db043becdb1797fa5f7be88436a0273411ef42da801fc27488c49de093b481fe94bcd19e93ce86f8e7f0329f45367f9c020e463e388b9b67a1bb53d6544dd795db4e6f89cfaf6727454525aaa9e8e003cbd127b5d8cb8c1544e652f47a7fa12f7f703623a3a3a3ac2b98ee9bcf2de7be35d7db967e4e69ba7c3deefce1907bf3ce3b72f4e6f47ebe9d7ed08c053bff386ccc7e668a9569f5fc1d0014f41988f35a693201acf8e6bcea9c4165a0bb00f6f6c41065a0b3f46b4203ad01004284af91364a7d2600a168a7a7a9ee7284ac982121fd27fc242113416a07c6ab648248f4492384ac98250247177b33804341e9f1f19fc10fd40f133f453e587c98fd08fcf8f087e82b0d0846cb1d65e4ec8142b92237124214c7e7a13754090300967f9e9f586f0d28404d15808a209818116240b4dc8109a901d5a0f2d8815a414946029a33cfd20a79c2e42b367d7f0e17d1f9fff48f381d17c823e459bd27ab0f800a1f56ca1f54cf1757302c4078ae9236d051fa3bed255fac91481cc01d2b771a452a920b2745c697773d0a651f4b430031414e69b10671f234c741f3f820b39863a3f32dda1e3aa2e57a4b941961ea983b1c9ecd93b4fbae9ce92ee6e5a7780387a7788c0119b6ed36a374aa96c57ce96dcae48236d1063166fc0c456f4fa23de605557bcb91ebfe931d67c7e2289adee1ff1c60c9a445b645986bea3143d031f694970008225a121490c49882411926407c917486c80040bd01524454898e8ee8e9d0c322448cca0a3f324879d94738ad89c3a1228043fe79c8166c4e84b1f6946883eac21e39942888d46e8c8008912244047ae1ca172a40447847a6c39e2b32383143dbc906126c30d488690c4ac88c106a8971903161bebde26313851048a164394133049e2022d06158cb08801141e6a708106c30f2da8382246102e36b4407bc1450332a20505d1829ad08284584b765e7821092226808e48616ac2887845490d5a80e861e288e7051faadd717d3379fb00e68d7c5372181efab3bc3ddcbebd461052de1ee38d93afbcbdca1a070bac55ba529120a4c05a51608c3454be3aae556a7855aad9a9be88b35a79c52241a8a48ae5ab8b4b6c55677db1673c1730671398c344c67528d2549757224dadb1dfdc2654792d4f6a059d73ba77ab713c0cff60def8368f11042a6d50dfe68ceb31de90892dea323cc61b3173921ce30fc64f9fcac10f004ee3e3c0bf2fc66b7c1d389594454188ad95b7c7cdc30fbe7a48bf7a50c3abd7c41becd559b5ba8c34564e73b2e41578755e902f7519ea322687e20d76eaa1e701c0415f8103a7e12677210149ce6f729712381067a87f9ca11c882dea1f5bd471ed2923adb624e32ee331be837876a7cfbece0b328d0edc070e083a0d6700e834bc3a0d1ade01e8010e40f781731b47073718e5e1fcce6304a186b441bd73ba39955e0e1d24f2ca6378f51777a99239790813870efce5c3a186af3af05ac3a5ab7170e0d445681c349cde2f953c7ad86ff2186780397b8c375c3cca00c37ecec37e97548ea92141f020daa84eaba39cce1ba14d07df571369aab71aa4200be400009fcd8401861284151852d5173b85fac2f9a72f469a99bf90f55abc1857e36b7d351fc80a3df8e99df531636221f06d80ecd2f84e64716203a315a2d88043001a1069c18f1a0a706082d314c977374769777737eda61579e29f289243919f223610d952240991da663722583ea4446640c40a91181119911711d8ab46e487888b844978ca4faf558497f6b222447b15417b05d15e44d05e43b4d79057cf102d43b41852c59027862831a405438686100d810d890da19d6cd956708c3a40e40bb262662ac708d66c3721ce52f18662ea89a07339d2d6e1e6aa00431f1fad3c224bb71e3d49824dcf48af6909779b32ded2ddae8e1d57467a6b89829db723355bd225b6da5f624bfab681ac48236ffb4ca491be809d1556d021234d3b676f099cc4b8e33ace23a1e495c0ea19aee3bce33a6fe3c01c69220de9db43eeb14782a9eb3c935702f6649cb7e4793b36bfee793af06f20c65dc9db81bff37450e971be8394c2934098cd4313e2ec414fe12f7837904783b49d827172929301c71a21eb9b36e4e723cd05220f3ed25ca8f25a24118efd5cfde6a4a8e5a7d01c2959ced6940b4a22d98a379bb7cb9863bd7a8d109a7e28c8e724d10f7d38dd8498eadd8d5a3ddec0f08823ccdfdc7e303d36b7be81f1a7df6e16697a761fc2f4b0d56d8ffbe105617a54df70c07ec109ab2cc052de0bc85c5c3cec259da481fa67860ce71695872db4f2701abdec0f6078d81ac0cbb006a4e121eb4f2e653ccc07f83c942f3f0febcb8d066863201842cf4cbf33c0f0ca00c3fc53c6fa967f3b4d62f80b8ce3183c2c9c26301224214986f1181ee3312e1dc77c302e6360603c8429636040396363317a105b1de38b91e6fb622440585f3a4f0d4e8c1e84db4b7ff9e27f5f8c0508e5c37c2fdf0920707d0cd056ba954efef29d1ccbce3f991318318c0f85f293b37cf5b17ce598f5a17cc542ad58a8101ac7bd39b358ee979b0ee3eb583f99ade9a8af87569f7545c92727b904225a7d3a51a477de45aeac3e9d28b9e4ab4f274a36f9ead38992b3af3e9d2839e528bf8f42f9ea537d28309c462e5fe72f465f54f6b3566175165ad74fe73a3649f0a4485b998c6982a2e90935b196572275d8963cec02f00986d637b7dc53198410417cd7d89ddcec590b535ab0d24294d5abebb81451ee3a2d44225879b35016ca4259280b65a12c94858a44786ad3e5d48b96179d17e4f610da7a7fa18d085a8ab0c895e8de9c592cf756ab2b912c1261f50a9661a814cdb557314919d108008000931640002014100a044231924389a025dd0114800a61943654503018c96381402406821045411046210c031863983288298318d10d02dc136231f5dfe88256201cc8406ad37e750849c6edab29cd7974a0cdc6649b0980996ece1cc90ec29f85af92d0f5e575d05783ab37f2e8e0a6b5981df567833ca8feb92ea0b8150fd6374409883ec44d7163391a69cd6c0a1eab2dc3114908ca8c6a9e13906a31d319fc44d602b078f1a1fa2aa3c5a50ba84cafff1eacca69d4c0d7e09928a6ff79a405ea31eeebe781fa47817401a5d89d2eb489f28f17a8d4664b2677288f93c349819c9656c141d0ef86d4a5eca8deb1c66426eb9da82a84832d74a666efa92a530005295396870fd1af32643b39d063db2a5a08ff13dc982d77d8bb78ff4373302abde6b942218a6c79d0132c82e682e7e4760434979f30ce752f24d42d5ff7c27c31fbe74e98cd663814fb3d77a2d90ca9e2971accf3258416cb75b4d10c2f3b74f1dcd30dcc78e94211cbb9d0c08c5fca12f70e663f49278b99bd7e607e928ad420c6be2029373fb3f0e04a6d04b1ec59fb79550303080305d55086ae4e530dd0fd6099fcaa5243d527f3253b4db577490d243e64536923ccc2afd234ac47e1a9163854026c8fa7fa7b40047e403ca1a5caba892025e9c2597276a4839579d8d5acaab611f5b8395e0e751f549c37402949395bf8a674d6fe1fb5e897d39938c63f77e8989e991ce135a441e2807caaa7d164ce2a8cb0653d9ec25bf8318d331f9dc4f2da2e082f31c52659ffccc6e5d8f21af20aefe9226921cd93828d3510d543a4795445527242a4ad71e10c8d5bf8bd6d88334df3302d824f02b2948d6f26c5db811003913d2af9c2f82a599326f9e67ca48554c6a5072eddd8e89246839398bf13461fc56e1118bab0718899d0f4403110a15fc0e961aedfd4023bf8885987f0945346b28e5ed33749f518d09155138da949fc470496d738885e2ddcd98adcd7ccffe95a8db91338cfae5a467ab5deca214186d323c9019bc8b39ce071ba47a5fd4e9846edfad279c00c43fe4aaa91b2718f7541f559ce33601fc1c5b8cf6f3ecad27dd71e0669febd951415d29691d15e4a6129b4875e038a10bd188668de85d2011c74199780249e205fea20c59afc06f7c97b80924b9e4a5392d4cb60683935682297d671c920e1110a73bd9c84e298d2c2fef283464d1a85ef3c47ca3c24740ebc956cb40b9b1317a12e17fad1e18545ebbd90204b780578e8a76470183ee2f96b9fbaf4f4519dc66aebbf6622a5d232efa1caddca3a322783c6fa7e7c3a2d44dd133d6d1560d7cb75fa5c1e550e684bb60f2b41144fa8caf7e99d79b6e82ec9f41c6d6dc67a8eab4cdab5fa388b6f3e4fb71f3cab64b484a628297eeaed1e6fbcdd52062b8642d3d97ce68cab66f4ec57b5a5e9e4e90b34c14cc39174be99080e766159b8309cf61ff0b5cb427c077dc25d344a5e926097261f8b2dab03ba00f9a4aa16b3fbcd25b6d15e47cfed2a16c50aa9f66b8c62470565eeb0c47e75732c10b53d2f38ea7b4f0e68bb7eebc224852761c02f8208f4ab5a64e4adf4583d15543131012a2df64aeb1492f9589992ecc099e84a1fb258b1bf869e7ec51ddbd5b56d216bc93eda43e12c12cbb6abd7f5c8ecf3b39456d0239263429198bf25165f11ed4280e957103086b91c3877b534292a4095627fe7e8fd56719120d29b2665cdf1d3cd3b9623f6881133d288ed24af3b7db3eaeac3471e4bf707fee5c04b68b11203f1b50bc14a90c1f02da88fb0851da974245cb945480ac124e8fdc264b0fceae0b6258efb87d0ea282546b0ecc6b8b4c2f19d698655d79f47eed2197883a01df006d5c5858c04df86ba46c305ce32ee91a8b5649f23142cbe21127e22ea1521739eb95305763995b237ca4e292122d42c44d62084e54e330e58687f137bc9c49a182a2f116495f60c08f1433a942e08848cb9ec75e5874d9fb8ee67b8cb688845acd34f6984ac7804c59050e2f7072143b019fc021b1baa353a63113ce61ca7a8cef83b411881e3738a1a2503652a93d71db461b967ea8691a324960cec80c3e05d2e0a6aed0b83b61fd6c37864da770a9bf94b9c512899e65a94dd91c9acb6a4f14e0d0573e1cb601b14e6044acd600a0cdc94d1ac9811c17e33a147ce1c10969111bda588000b95f4de4d65c609e898ab8c6f63ca9288caa353b4060691976e7633722b09b1a99a81b0886d9a079477e385dc07871ac529a9cec7fad786db53e04c503013914829211ef110892a77576aad80b39f72f76fa253de4dd0103ec4b94ba9c9608147d8823140c697b0de63a0cd9a82a0354df1e53ab4df48796471ce420006ee6ad9b084c2462aad618031348b60b7a8bd582272d397b7827a7a48726af72d94ad12cd9880019496e1d9bd59415aa1baa15f3a74280aebd729c8154976343c16dbd0b2c08afb80bcc94ee22572b5c07dbc33cb45f0b39c3597001f05a443bed0a0e5f2019fbd5a4181aee79a4a7fb8b76811da90123e56045fc41e15ad71ac8edfd5149286ebafa032d56f354e015350d993e48886d5a1d19a06479b2ba62bf28361442fdba156a4973c97ca34fac42cb66ec02718970664fbe44222cca6d2fa4a05f37ba8319cc1c244d89c09b20608ed5ebb7e246709dcf5de036a62b4f1f19a7ed39df07bec47c8a0e0c279838191f198ea971d922f7981cb7ff226f54dc2cc567a41aa356cfce0053346a8e84c15f0f29da2d3248e23026d4708a7264e5553cd91c4002628936a28bf60e25bf97104834c6aa42bfa25d7e5b5c6e1c8ea6f1ee8b2a676d415664786c44342c14bf8f653ff7dcd22e322a4a3dde49250d22100168ea488f4ed103409cf3b864ff9ff4103ee614140bcf565d621c58994a73a8760beda075f658d93118443e7b660d65973ad389294a4cc5806cf2ec846f48cb2d322d3233a5c9408a75defbd88843f9eb77e30effbe910135fea1ff000ede637566d25d4999fe9433386770e6c1a91eb4aa70b3bb08b4e104a2c5cf80010bce73da156ab4e8abd50c8ac5ca0ef1ca9306a8cac3c05fe5087d4fb890cc1d6828a1f51e1a3873069a7a2d171bd15056d2e91a50bda96aff9d1bb9cd51ff8593456c503fc85f5f84fd72eed241d5821459cfd273a77fea79b7ba6a75793c1abb2f3121458c89315928c9640d4eeb57b4d75ce18b45469a436f5130a5395a45df0e846ece23b3eb02e5c3b3ff2903ba43992d83a2c407717b85ed400727a0e5d71eb85de533444fbe0af19b318c4f8c7b445e42a03d0155c70f6dfbd19fa2a0b258b6c90102540c470d7b0ad7693980ec5b349211ca7c8f71f6b18cd3cdc96441c05ed6fca039b062e1675c0a431a67372c76d6f431b0ac8aef12dc3c3ee60d1cecec656e3c36b517b9e20d8f6e984255c6f5ec0cdea234f367fd5200239099c8fc3181d89a9aecced3477345c0a050ee380be2f3b3735f486f66e7a0b21e982991eafe3e266589e3a7d108725ae75f2fe0c47872e8cdd6a55cedf5e7614c0080210a36ebc39b10ee552b5a45c63e410250e68398fee828004f91873f74c284189bab93a8c65c88852bba13ad3ab7c5b9f2032822baa0ee8a46a662d0fb9f8e7c2580aa327ac61b0fc77a1e0e2c664b5c41081af13a72715b4adb9c7c53d2918da863be3a3392e8bf0ccf8807c58caea50ffe9d1d82966b9495cbbed0acfdda18ff4af824a1e7085947157b0b15f5efbeb644434bddd7a37b2da177a3f92d118f31a8ee1428d35ecc70cdbd993c654ad538ef3ba483e2dd167e0cf8137852ec4cc94f2b4ef1db379ab95f2740062815b2befa1c05a7d1c90d878dd432a6b43c37f9f2c7b44d329e19b0607177a7d533bc4707fc700f8e55187ef8d9ec0320c21261c93059c5dc0399feda695fe208e15408841c72c26fec27c8405bca8315e33ad17d1e33b688ed618c211bc8dad0da54c4a195f53dbfc77555e2d8862423bd2adf9f932f58ed54e80033f77a242f4a400f4eabebcb2a0b222e712ce8348c0c1c2dace6e7b077b4f20db534a74535fbe6e07812ef76f2316c2bda759a506cd3904a85749caa7f5b8703e7cdc4a37a68942575b63c27a8d0ca01c4c395ee88306524380d30deff694bca18a390b099af2eef85890d7d3973d2f7b42692d672a448a7568e28795209f0470b7e67403135a65087c61504fd951f07d511ba97e8c8d298ba3581f6a83a9a870a21159af913542589f8d56e14716ae14b888160ac3784581ef9f936671e1d21fa0baea86f76a84b7c36936f76d3b8435af4aa380e9c096a2ba2e2a8518e30c1836601a205e73fb37dc17ec04c5ac0186f7e64d1bf720e8275872df985e2fcf98e6a277479850a03d80dc53459c8f7202d642e75866201cf3f32249fd650bd3b395f36969376b8255037381654dc45ae423841395cdd1505228cf1c69e1936bc39e6e66f6c015ecbf96ba1300937e09628f9c78fbdd9735d171c4b2d70bf8d4353d4189a64d326942baf70010612998f9b5ad2c46b96d1344b829e5a6f2ab7b7254bdfd7a59cb70fc0849f0a02d06ccaa51bba5af6ad5a9dc540c591f459474543350411757c4500f0ca4f7095fa49f16b3d8cb46d8eea4a0f79828b8c7742a5e138ee95f089e57428f75d63c5a50f0c58b2ebb0d5ac20ba29664885e03a8c5dccd4c964d6aac51c37644320077530af99edaa8c8e6471a628b6c2c820628aa5d4a70abd57eb16cf6d4fa6480724a61c5465dc7e29b70411c94ffeaaa9a285942995d05316fa3bec310b00c0b9b9d0f8773d6ad1d5004045d112e2c8545eb60359c4cef32337f2c381d9a915001ab60e2d3e59e9f43666cb523e3851778a1bdc31098ad3d4dce2081b0b1768db2e718a6762f0e1256c3d42424f835e1f39366c36d0ca92cf115733738cec459d866692af0ce219f8f809801db740386dcdd591106a04f269a204c25e36e97a0153d90d818caa0b8f1dfce11829d4e3a014209c8aeeb9e6e375881972209d41a156ba147aef0db56e97ab96e53ac7ce46292aec4a3c1b98abdda12d8c75d8d509f9d355072d1d9451b20be600274dff13f21f555bdc8e0b463535038fe5ec526e5d4856aad73a50deab79565faa6ef0d791ed7a69c99b6d25fb269f30567e4ccd4db15a4fc78e289ccbf531caac1347477e6a4e99a0e4083fdf00e85b07f64495b78279b5035db2c4ec3fd6fb2cddce87a371fc46e1fbf5c53797f9eca8c1bc458402c6fc73e57ad8a480b1240f88f73f741ff37fe9c804a767d51b637944e9cbe6a03e806ebce6b663dead31184fba84943a00ddcf3d85887752960897342ed4b55f38945cdc841ab5b3d3e4c5d0925390c62763e4c4d86b438e80bb801671665ae7845b53f638c3b6a8d6890575f92275542eb8bca7d54fef9f4a91831559c47082dcb4793168caf599f3db0a28d63b33d195e639f9c560f507d497c09b563806ca289b3d2d350b27e5555e49f612de1fd29e11431cb5383bbc1074f08264a1314582067bdb328f3440b9eae717c1657d78ea02b9b47622822f1c00b56e44f80c7fee5d4a6f47d88c2ca3d6318dca742b8bb071efb5051cab470cbd19065a78573a72cb191c1a43f55dcb0133879fd1444b17b26b5e8335dc1c7c3072f5e9af9d1c9e8fd9e925eaa192803797ad7047e9d2b6c06aebc1b4b6294eb7f99b710eb2649dde82f025c5a0aefcb1e51065f7b83104a3c3b5d375bcbe7fd368670c0df23e67e374d9cfb8c9da8fd89fed4472c23a8011313d2a9b622015cf7290d78c40fb1a70c3cbadf8fb414700789b6fcdac447acb43726706f6e4ecdd7b4caef654e53e3a32ce42c56d1175e7ef12fa49cd6fb3fa4b9d90915cfd80d08e249665991f7d315e0c3caa7a8031d1c4ce9a3daba5b4981b00106f048a4d9fd8c31abb49b382584874be37854c7ea814392dd71b4654d10098e2cc85adbcded4a6ea1c92a6c95c20355501ef51b626af35cbb42c85e25e20845d692055d263fcb6106b48e951bc14fb5c2b4d16102d7af837ff8b102473fa8d850420e127d7a2345279d1a1c989435e2e418a7686b1e63c8fd8e5387adf2e761c554358a448e785978318308e260e8ded09523735da8779d02af2e9ad59a53a7399713889e65beecf3b428c0dae3e265e96d76e26ffca5b26db83f6a3a7c21be3dceaeffc021a21dfba348c0da21384c27accf1857411d75b0d49e611fe098d706e091c70ea883ef0681ec9a46a44f91fdaebd80048b12da9a6838e221eacc48fac981e777999fb667396331f54a9ff855a72c8d37d932e30820e36a7e59a7eef189d540c991223ad42ddedb9e07629eadfe02a19e215bd1d844d1fc1ebc2182ffda9e473c921db43735978af4d2ae9a948525bb12e651fa2d0538a8addbc6e8d9e37fca04bb622a87230a87557a27a0e01da04f09d832dfde91fe7db60c731d8fa14208b962debcccafaade579cfb91eb52e48165e8994fe20124cdc7b286b66da47e58f8b5f7fdbcf480a033749598e6aa7975888370556c6c9a7a95eede004f24e0ea65935aea0716663a7c82b1cc228629e741a03417aeb11829fa7240edbfe054d365277be3ac037e9e221dcbd235ae20bcfdf9a8327ca5cc4d7013b3416b7c5ab6b84093a70618ca70d80f0bd0a00e1414be5bc51371b11205635cc494c12b65c925b7c208f23ef30d5f581696fc499f37584357516116a6081dcdb5aceb4f2c70794cbf58b6900760c0f667be473122994ab948e8b2122b64543e452cd54485288e937eaee05e682aca8f18bf627f40e5649028ed328d0078826d77f5bb6a24487bfcd24fcd76e3cdc1cfd5a3292c9556e0b9b47b5a7db384e221b2a126f24896fd569819beaa4b875a3210cc0a47751763cdaa97c703a5fb1334847aff6e000467e6c4efdec56cc868069a3c8a9233454bc313f617ea71a284510603865b8c3f0a486f5b6f645fbd1358f9387579ebcce2fa546eebf2b8bab156ff08f86a698a33ccba2c2a089d86c459d8db1d3e73ebf190bb6b555f16444dbe3875b19585ae112bd0c378f997f9827651f175b62d5f8c61e643055c552af506d44385e104a74a6ef5da227215d71b92de406cb993d0898fab32a018a4130d409a7c7e53659a68599a8c84c101b30255a7bbb3af1c7e470fefad5554de12bc54d57466d4db072843ff5ecf8367a3c2050063b88c629e83d30c39608dbdbaa422ee44fde81af78b0bc30cb0c3321e8bd03fef8f778dd6e5052314eb3d3610d4ff3905198532f01aa581f7003195b27819c37e873200bad47409d65696931672dd930f07b337604fcf8fd5082792480f459e1238e853d1571697f8821251626b5e18b7a713f4dbe3c94a97328cecd1afc1070f5ab191c52c3f5b6d9122093d1fdc0205845b6c8acd257b515c0e8f1ed4f47053dd10daa02a340b1a0cfb4c8026af12259d0df736c5c2a1c7164171639dab0e79e9ca22800f67f614add448686510ff528440cac14ce8ffe62e6014a34e83d93fd457d429b5693a52e8d552883244e5b9966948261a7f20acec6751422926f2e4b25e9f2a46c371fa89c28a8d261de996460df490c149c55c7b81149cd473006c081d9ac57f463fd1fd1d05963b1cad093de0d3504a1968689047ac42371c6ccfec410f976c4c7ce7d7df382202b098c19850a0ea9de01f2e978c03212bac4ff65889daaa9011f1c45957bf9d4235cdcdeacbfcc01c65d2732a260094fa5ddac91447a1297640d3bf57cd5eb3dc0df726b283a67fe744ecc0e937e73c97048f4638d2fd60299fdf2b5ce0c45d150c6e193cfaa3cbc0caf232711444794cf0b29a1308e9cc28e0a4622e941e534bbccff6051863b8eb296603bb04742a4e40bc1dc81e29bc1a6d2171fe11d01f102d02f367069ab6621b80d989b375d02f81e405f692fcd9411a27ccd4f7fee32a85212864323ab05c32ad544e66193fd7345fe50c6f379e1b4d83544183a44ae1886ae079b03f824be03c0a83031301b1a439c4b6a5b6093e4c2322c8c92e2615b3b3a9d88bda33e670a916236ac433f1873362427a2ff0ecab1af08cec09399b8724312e0ed91d483252b48b7ccf9fc66955fab0f2018aa421404dcea1e71dbbeb23fc35add3473d241181c31d52bb0bc90474fb862a14be59080dfbb94cff0a076e09a7919bca81976dcadfa694eed947451635e776f1ea8787e8a6adb91757e35f855c099b84e6417a5198a390d07dc2fdc0c11ac53b0a22c2aadf075d788873c331fa68f46c8388d2409576c0dee6fa4cf613b049bb930ff4e717e52009df0f88163b11e8881283e86d4c51dc335f05d8f4ef3da67876fd4cb9e28035384ff1711ef6f431caece501c38bef375c2865a9b66952bff6bc07da1b9c22068448cb4791615dd97c50d278f70ae96042601c2cd02629556628c61c0900bbe231d662ec0b7785c4b8db6f3a00857cf6ae3ac683e599e98394d8ffeecf2ee81be1338cbf8dda4b7d31339eda4ca2e715b5edd5e21c450d98b965008166f26ac64c646ea448c7c30c5e19a81df831f6a4e3513d2b2b490db5038892971630ca966d96cc83474ad128fe7304b3f8efda59d21211ad1f9e03cb2618eecf2b450e56746542fcb7c522f3b2a477b4763870ce7d4e4f63b19019ca86cb4089c2e7890d3b76dcf370e0a2e582724a705855d8b22ab084902d7337058f5451f6052c43e90c0d2ec8ce0dce681b0605e402e42ea29c62f3ac28d5a133811b7328684e79d2c725980d02d59e8dc1210cc82836b6fb65f52eebbd246a3b2ffbd2571416b45be76e76ca2414e850a135ae2f302c9b5c784c305346e725914b0fccd75d5e952de66e9874e0c26c8644eb0d3922b5d3c666bf3cf844481a2acab795fef1c685476a1d6abbb64510c90e696dd5bda583d37a7a5a0ed1411e6efc56f2db789b4b421bfb1212e903b0f1d4fd4e63db64705b429bc11019c294e4115a2d84ce2a247636e33ff1b777763325d03c5a70fd4380b34e724f69d8194005aa450974f5b08f15097a596a734fe97342f7d5665a9507c5f874a41f6e83371549ccdb9a64f083f460389298a647f56ed8c056807552a9c60d17e0d7387e484c943b6cbf482279c4f870fd8fec9202723bb24950d8ec73d60898e9edee312df4afb752a4cda8b4ee6665c8c2093e3168a6a38cedecc2ea9e2aa64e5c944cee5513620dab0283744d28df507f5a99bf79cd9c516cb85279fc3af08a4bd0b2ee1546d0069df999092f5d7c10e8880b893f6be15912dd233e81ad78733ec14985777c89cfa5cf4b23003d0a97a84842968a8597e9508895eddcf66d23f70f1ac5904b59f4f7918d4abe115ceb97ac3d6389686fb55861497b8d97409e2bb4a01962c53d9cfbb677070af188b3a1b7b688153666b1b2753db1f72df6f318e350135ef80ad76cbecb9ad8f76e971cbe86f376d01da4b860dd3c6380d87fdf4bbce328583cafe9950baee0394e2974e1b3078e4e54c3e3418f58e5777206e4e536adefaa01499cbdf6e6a7c0e989871fe85b9c8e26897388853f7e905c2fcb75724ad3f8a2241cb92ca191e9fdb921f802692c35e50cdd43d651708cb42e9e836e8310aea360027fe6754ac41b3f87becd7d414e5b08b2ba7e124244c520331e95788aa70588556e65995962e6303301eb03e0ae6b8af2aafb76ab62a96a1d8ee7f05b15334e887464145e485e3e90b7fb87946abb55290753fb2e748172a5ef3714f9ab2671b2c80d751592693b45b282cdc382d5e8fb5d6e919c837e27bcde246f1c57a724f0953122e13593c6328933404ba5f8f021347aa0104eeb05e725d7d61842eaf3d47492cecb9d9b361df994c75f56467c2ff2b3026db6d22a98b983f3e176c2104a1b1ebe2654f6a6c8cb3878a65ba4d76a03db3e3ba01e3ec38bb428441aa967701a03d7531b0760d71ff2edfc0da40ff83f9190991d263fad2f8d79f92dda3e2dd8122eaa3c23d090175a2108d89a3caf61830c30a34e5b5c3fcecceb01f230bb2aa4ae2f4b26cd596b430d5932b774c24b20c494b3fff966e7e199a4f0fd381c40e0a29697003430127bd6c9241b74dab7c8a11cce2f52720f8871cf59bc625cc36ea75ee0d67cb9a163ce8da1221f7715ae74b99c678d77b659421c2a6e71e062931705d6df9747a15a44cef64ef5ac953894f77fa813bc904c696554c03a8511f895ab6863af6c4b7da2aa003a0fb586263bad3db780f7d0afcdfe08ddf5ebe57635884502681d1ee1475f7a7512b0ab164cdb1729585b0f59f94a57a308db493bda53076bbabc050af1b3f32f6162b8204258de0a4283eb6d03b527acf6741c379028decb690b40114acb9f975c5916d81129f6a7b2aee743ae415bd4b6a8bb8074c1dccca6d261a032112686dfa58955943575028703c20d95b353c24c6d0ca3e1124e7addfeca71efdff289f81e3041d584e821b8841b48774e5a5bb8d8a65a0b96bf1243cc5bf9fed74e1c65102e799be43c7b08c56185639d21739946821a9a1c1672e22e86ce57ff0255f33b788ed29db892ff7fb2c6a6509c1c63d02b754297adacbcb60588c90c2d7f2fd5970ca6007a7c20fa027693068e744abe345201881c9424211cda0e9fd041bcbf05757e642705c18d4b3ead81476133a2396d340fe07134a26fa4e060c36355fd9c04a8392266bec3c480e044f5573bc4a7856eec6ef260c08e255c0838e9a09d322bedb4af84821981f9b935a4f1fcf1c1321baf3d551a7e9cfc12e802d76442985099c3d785b425846b4879c0774b14fb98ffe23834787830d76bd06145fb8238ee856d71f01c01ec43c9dbd34b4a1ad2a0ce8c00b7109720eca5488c5935976a517de273750e86fac5e68ecf7f8064a9ee47a7f927be43ce6c98237639d8596a8db4741f74023384bf7c82cc53923f3004027074cfff8e735ff2dccbb301875138b857c86c5e5ea4a302ce31b98617cc97114a2d0cfea4eb266cd11b1416a53ba712839458d5456cc892752a5e068374e75e1274f480aed0c508b01346a058e708fe4d72a589820d3d764daaec89d2d03a669dfb1b4762868319eab411ffb34e3ab0d1a15e1d1262783b30ea7b3d2698f43361902ce7866949877aa49e68c1fc07eaa0489fb35e827ba67c452290529a1dc6da8a84bbb020126f359c339c41dd9123b18762a0e3b6bbc29099aae79bafd45326fb473083c3572c958a52d9a23161ddcd2eed6566b24bf30ec2b69ab4c125e203ef24d673051f8eed286a471dbe706d4b8ebf47a22894da10ef03d7fde76cc51c4a7c458f2bca3eb2b7d776a635b88434927fb6c9621109828139bea2ca496235a32ef9a9b1b53fd1b9765e7570218442aa39e43cc735259537c10c9b0de05aa54a5d296a7b584cb2ade05ab306c57dd5db697df59e236895d6e4e151146574ada15490212056be47d29a13aede9bb28bd405fbbd5f6aad666eed739459f6644e86a7c3138b50e5790d4c2f1fe05f32ffcaabb2af35dea0147b095de038c5ab922bc07fe7c05dcee4319fa274b000816527246082d0d2283665f0e36219dea26364e4b0c98d55b3ca3a2b4ecfbef1406edd5b06308dd3289f6180e44b4519912df24268dcd8fcef8310102a714742dfae8a540ad611abe00dfdb39160f16040d938f337a121fe17ca6b0467bcac03137486365f2ae5e21ebdca58dd4b0332bfa6e1d5797a45f43b5867e48d987bb92ee69de787348cf08e6766ef68c9ba31d0331c1277f649c8d5797611c920bb4d796f143a3ae530562c25ccc8eddadc4848c93216f997f132b384d914ffda6389f3d4fa7c196247a8573ad33b40f5363c317ce136e6832247f282827d2e1dda5ba8b9cb0629a572c4fe44c200e8410e64e4574fe8222cf9e7fb80c86db92998bb9cf714c4065823b6d027d4a367ce36d2575067b6c82046404bd302429b4d8662e8f21feee5629619953e8451e01ba4c353bd8c7252bf0bfab0e8a3d2795d2d9e009224bb21ad7a8e8abb036bccd21c89e0cefcfea0d3b726b8851d78f4717bf67a6de38bc09041bd31f1961fe13128c4059e225090c3243b8ef281ec18b8b9860af531f3eb2c9fabf5bbf6f5c6086bf9ce11a21b3afc425c194155b082620d69275a73246ecd7750822362b57013389ed7e477540d2de62e023308455e0b4b1f5e498997e398c5bb8234ce7d4991bc674c84538c01ecf54514848c7eec00c9155b27e853e5d57eb37d68094cb1b0157df255d5956117dfaa2e1254e709cb4d3a031d48da7ba431ef92309de91d48b6c775a970f3b42051e037a07548bd109f0cae02524706a211d443631e1d512b1a002f20edb4c149ea29a416fea2b2fd3a2d13c0ee5d5809f0531dc8480f0cccd13b559fe679cf319c1c150f8f3e830ef483385c0f8e0fd7c160353316d30fd741f1d16eed95d5abe41d89d811ebc01800105befbad735bbcef621d120dd20af42dc420c0d7281bea5c43f33c0acd996b54cb76e940c8a30809998541153c5a5437933ab6cc23f4a82d4f282a3d127fe65d9dc9ac5f15f748d5b1d276dd99e3db8cab69148c494c571cdb5c6b18dce9a359c7791b207e81619d74e42325fdf3413c1a219c883807e632f7899c637ee5da07a71a77fdcbd75ba7d34c99f5e494b5d719d21420d7900527b41c269e67ebe6f93e910eaae7174cc2941d12cc8838036a3cac9c20e77f5ed82ed3db8af0345b832c8673c8683ec79cd2ee827f1b55658c703e47d6498184cf40126dc6b3133e86945c17e5d84dde7604ae820a32040748245d2a745a6ced22d13eaa7a6c470a1bb5fc0dd78446960c64fa06cc05f4d1b4020774b161c904902e2ddb8b893707eaf6bc66b895035230200e1c5cdcca6620dd336b78e10c7402321a33d8f384302fe629ecdb5b134d8e8873cc874e61cd4c90395a54cdc15ddcef24fb9890289eafd8b7eb4c199973c818128e1be3e277d591bec97fb52ae9e910f0496db5bf6a533457ecaddc08be0c8efc068271f869daefaab292527d729d176212b2a7a0710b3297ac4aeb6759cb890ce58a0057faa6fd1d3800eb55a7f2a7993a9f3b91053465671bab34e4a4e177f6c87b531411154cb8e7e463c9e67e31d9427ab9179413c87e791c22ac85bf4dc230e5202ccefb4d6919c776f900f45640c56377b76a8f15a7c5bc345f0076a10222c2ace6e023add672ba379897e80aa4149211eab8b95f664294d24b765ed06a993f2995a4a3d231a2ca1b350310cf490f46efa9802dab59bd6e3ba1ef7c3013f675a1ba7f5b0df05d9a95fafe82cad949355fc47602faea206053ad7049aa81065183c53318504a74d24a1d7d776b81886b9159942980f557f5aff247e890949bb8d2528c70e48106d4e472a7769b9ad53b65041d31d645c17873fedbb77eb73341767cc1af09c8f59032b188f59fca503a90ab3063939bc15472e503b503c306a84aa3ad4521f189658b86b44d79628387be4bd819e4fa70a30bc5be0bdb8711aaec80a68c5fa7c2f2b8b3305780f64ca17c653ad597d38793e53d5bc46d0f61e3de7aef230f05edc3815a7c8cc77f7993e9f4f04d2f665a544c075a268808dd3fbd4e7a39781726db3c17b438c5106dae1c5256441590f24bc41b0152b13cf68c0b7290eefb18e14480cdeb328be404419c722e09910441bde4bc77c12997fc96115010d3c247ca64f05455cdeda2f8b9f586f82e851b50b0d337358fd846bd012c581349d2e80ca80808324a055996c72b1035256ab32a947acf667b201d04aae8122aa3adbd640098965ccbef93f0ed4ade9a3e80b6a083549aee009554201628aaebad494eae7f7d3e562f1ea600a543d1ddc274e9675d8dbc47f891b1dbb32ca7eea4bfaa9d31a3a554a447556b53b7c12f35213e4f013ea31f4bbe57da73fe0bd631605e451e3ffb8e020317557db1a2ed1ed0962a3a793cb136c1b39a3fe550d6c2abae5e037f2080e67686e85ada64e24b49b566da199e23d1b636d035e1c80b6f8e5668173aa4fd293c994ad9e706c73f3b10f0d5d75ee8b9e5963dfb45dcee90da100c24be303df948447f10b6b4d52586a5028b1e6fe7fe8ba030725b6287e4a94ead91623a53b331ada059f5bbe887f8162a4ea4355c9fd1be11df203e9da07ae2f8cf9bfcaec3086eba0898d917e864fd7a5ea7ff51731dc9ba05d585b85f4d9cb5ad3cdb735e106e2104770d75085594ca8dc9c92de8db48edde9f826cf1a5e8f58684216f0e25eda9cab28dabadafac300d091900db9d2ba06a814c986a3739408737bc8e4ca2dd62060112360e8df7f0ec9fb895d6196c1076497d9820eae9fc4b92a369ab09a4f067d3326ae107c59a9d80c3c82f0e838aa02b967437af3494636c7834a7babc773b415cf97241d7834bf29ab8c5e6dbc408a941017717a952e79097b613fa1e452571d049f64104e9816a339170f1b8d3d8bba555de4383ef130ea9d03fe8529b5f3ba754b5f1cdfe2d7381d0861d0c4ca0e31e4799ab9911bb50e27f671641e76003190d24695cc4071377f7f7667b763a549330b87321c0b7a2489ff19d1a3a0a77f803cdf5ae0f0975b1114f4bff410e14dcfa95e1a091bba093a8e6cfbccd1f0b3e942e056795c9345810dec7175c28477b063803f95a632abd2f0780a67489243caaa2d40f142fe8866b8bca7ff0cc83dfc359f5734cc7ef1cbcae383a133a201e9e65b1f92b90c1593cea54397f70ebc404055fa0652c460b682029d0ebb1b6ba905461a80509a1d692bdf3948034093d83c1d8bb1ee110d6af7c1322f2ef9d939a4cef68a3ae10aaa425a2708d8b4a97bd53149396a1aba45362c10025ee9239aebcc555586fcb49e9b5d54a2f9c02a3f29d90ee663deef1a773de9e2a14b630a72cbb4843cdc959312792d28bae679e0aba99e8764df9ae61d88eabe1dd6cd5e891336403355ccaaf4264384a7eeb1b24f7d30491a0f82a42cd85c7006b44adc154ae8dd0093c6cea6fefa2519ecbc1b82080f493de93443681150462594bcae8764d2dd78870e12868ac329ba310309578577371b745ae73ba283f12511253ab8e080d3a8ef67aed96882ceabb052cf76608982f1272568db79cefe6cd6790c00661070ebd60dd322aa5f5ffc4c3ba338c1aaf30319b67adc845a9d9bccf4d307e641dfad15f70c052de36e2e4a400586279e368cb78a43503e3f3c22d13ce8046cb9d77048e8899bc3a744c01e18dc1ffefdbea8a017688b8afc07086a9d0a43f9f06ecc7f8eef48016f3f5ff49d8d2ab433618e69c8e40374cd9d0f939a3f1fcdcd34282d8c0a714b009d841045b166bea77a2505d0f4e71d45ad29374ebe92066afe0afd667576f3082b78e608f8765e208a10f3ae2d15495df8725e205a88f25ecdb6fd460332f9f73abbbea9992efaf71ba8c1f7bb45116a7efe9b45b116b6630690bacac0cf596b5eac56b092c71bf0365fcf7fa82d4ca7220be73bd092117e774c6ed9159e957e192ca0f0ffd6d75220174756689ce4a2dc379046a006804b66e181ec5c8280c7dc4260773a51dbdced94f9d7024ca00f7a9b5f04dec4d7418be8dd4d04dbc5355e35403dcc82eeee5940981412dfcda7e9bdf71098c53121a2ba504a00a962d1bdb9cae7184d16070b68a332645d84871365b1e544a52f4989e14b284d479120709d8c485f165a37cbbd6e831b16f0d3964c63f2860d17d74a01c889a46f49e9f044f9190cb86306a4273cec0af8f2163907ceacb01673f399784810250f82f81bc29f9eb9906b62c41b358acaad9b73ca82166f80db6dad0c50dec4d688bf0ccdc77e796c9d891f6d8e8ccfb815d49da6d9212b0333ac61db23bcc0ecae9bb0a2b9a91f259305bd71820f53a43747479fe847e68afe64e72608c63ccd81f4606b34fb2edfca6611854611942e84e85f1756bb9e9ec7f0fdc93250144d4cd28f5450654858a18aac24c32a231e623ab329e4ad09bd3c9e97f91c1d5b963b1d6aa1b821ca72a598a0e06063617f5c2afc018551fede812a6d76acd56046524096850c05891af2d0b8afae2113c604f928c6956ee6fb8a4c95122579561cb75120b68ff29499f130dc8b309d7b89896e2846007c8526d8cfa6410d64dbf5bcce7a2efdaa106c339bae7a67770a1dcfb4f48171674ee997ab8cf1379eeac070baf735987e37a07c34a9920e20d3c44ecec2e2a44bdd025b1f21f3c26e01b0993c02b7314d5482926c289da436af84a533012a4bac12477821496e21f96ccd9658cf034ee53accbcc225e44358b20733489eb098955f0d0f0a2d0038f68c91f2cb4da6adc418ac3b69690f1ccdfc5a240c17fac19c92aee9c58d96f9ea9ed44b8cd7516ee1e699184ac16f96e4b9a05018ccb1738a3c7c6ebdbe46652c39ded796906ac21d4b83f842aa9dc513dd19ee0839f535bfbf60c891b71672e2decbacaa0113c50421a1c359696147590902f74c10645657fa90934ca316f742e63910ef0e1ebacc090c3bbe7b75fcd188ec723bb076c4351fd2734532cdb1f01ee67fed59e03ff49153b8883b16818fa3f98fcc0918eb8d30c4355a2c7cab0528c908d8d708e8b60c722c012e67722a410772d5a0f07d7169d78fd02b6a743439f4653f90b4d41b412e7a8a76ea417cc3c3d571c7e2816ad3f8fa90869980b6406e88c467719c6913584cb31bfdf2330492f812ccc86ea36919c1ed2324732edc27850aef6321fc7e9aff1300a9dd7ee7db60bea6ddc561b0ccc99a396ea97453c01774f1a056f3bd9980a2a3ef2c621101dfe32b703da2c85df7a0d11126000dc725d2bf380d2c7c9cc6ca00e81ad5adbd55f8c1cbc0e81c0ea59d44206ab9dfc9f09db32b49b40b59f535c2a4a4a69cb27540cfa19f4c017eab336e1c236e478de4f474cf4ba5c9d12598392ac24df934fcc4ae12574cc377ecb46b757e9bf8e2e8a8bc0e9f25eb8f5666d353db14834af620b26e437c1172db6aad6cfeea1e338b9c447d1aa7c88591f2596a0e3940b949d36a09c546fc6dcbb4eb28cebd99b77debde92d34f3ef080547755273de0da483b0881011e688789ca0e567083c3a65b6e4ddf61a72e90b094359ae07b9678c10f9ffc310736254cfa30d99118323fa11e615628f847ee6a9bcd5d5b9061fe91beec1d4a3de12f399c0709a0486be7c75319685e76622e55055d4b48f6df5f9c0131aec2481541bb2ec5487314b4cedd536037d8efefc1320a62ae1ddd1dd35fd4ba47a27f885954397c84b90e254d08b0762a97c191b1f61b896d2208b3ab95432c623c553713c31719e0c2ea62c0ca78bed8da49691c0288a12347c90974ba55f3811a935bd1a87430d0314b0fbef58f2f18c4a639bd701ead245939ca27240b3faa43bb4e34076dace36566566936c93002121f0c2a8b832fdb7e86c04a0af056aa3845e60ef7c80e791cfe76a02dd6370859880a247235841fe0ec147e860322f1cf8bedcfbe3dc264a3023e20b407826f3672113f00c90499520b04a6667b5e917afbfa56d62848ae22834960d4e737c6522dd244be18ea54ae170e3dd9840256acb00e71a76fdc0384bb9e665d3dfa15d6b52800f03ef09e444c42c5c2e16c9854eb8edc180f346689f1b9a901ee03bec9cb36768da60380b7e95108cd2827f547eea5f8386a44168e7626229ee2c1d26eb37766f2a63585bc2e1250c8afc6a7ccb4bba800a017f27c25c4e4f0ddf271911fde7bc80df61e086d5280efe0d94a4b169f6f0692ace2eac3c64ab27b2a1c61191a22c19223c8b80e345cfc778a710c0d236d017ca3d001f924354660f596a4c2d13d53324436cd6d7b3d7c6fb657a11831fb27bf38e6d122b17596eba80a515b9e9cac6b787dd9b19f14eb4dffe68fbf4ada1b737049ad428ffeb9ddd950504bb9e3885028f31d691614cc9c76f7b599f7cf2918b7272f9705d3aa54e145642136cc42daa77f22b4a1d09b0fb0b234ac64b2d4117985801f05b322b0d1478654551b2ea4db8222472370a1c1383fc3b19e32547a7e81cb1e8a11c2832df988a513f2b91e8efef5a2e210ce18cd847f1d45e5163f6b3ad0a83097f31f4c4af6750bdad23246742c44a83229517705a7d763a7eb440c22818a36a3e1d7020ed2ed65e94a4833fc42adf1c748e02928a75a5b85652fb1c0941f5aaebe1a2c07817e8da1dbb05025efd6e6b1d0580ab5c50597f1d521ab7d8d63255758d5977b3b048334d6359ae6e0130b25b232844b00362f431eaec7962b1b0a444079277348e7f7fbe43998218deedf0382c4e00102d314a0a141f7713ffc61439de202344990460c4f6d95dae9621b6449df729ae0f09cba699d282aaab3c8921dfa0f23a9b18be53e3518b76129ae12a130dac2238eb985439f4f10ceb873004f64ba105d624ff276d1fdf86fb047fa87c9441d75fe5f2609853ebbf669a18413beb728fc772e703f9605011d70613e26a8084ca1f14fba0093822d91fdf809a415d0eb3ec27618973b67ef187022e3b948576336d3155ee7631ca4fb037f1c9e8053357b0ed4535c78efdc5c2cdd36cf2024ef9f23ba84dc7767890370ff762577ca21fe77b40bccdc0a6afeb22fa81033d38b90de4168b88e4e27a00be7f569f781caff2544e7e1be08ae3d06f8f8e517f1dc508d99c2f95ef5a1e176a153eafc6d145cf0930715dcfc8faf011dc44c575393d8a6c29ebf76215d05e7c6e61d30e2b40f02b97abbbd35e320bb5f41e808a57aec1e1130df774edf3daac1774c7b4798f0bd12e0ef41bee5c2aa8e7bf292472b6a1b53765a443bb20a9f0e0404fc8803ca78ae7c5a409815a70df97566ba71c8e9de20637b1d328b40d46c7657be67814191be3f237225b3a8d952ca9a01713fa430538c8cbe0fa4dde8df75cbee108ade30493b601b95b74b10358c49a5aa3084d4ddddddb21122924864776f6e193a088e076b07f8af0b8b98e8f3f643a02b025d50be712128941261176a632c27919e412304faf797f659eac66c3fbf6edbb66d9ba6339062b99ffde500f6ef337d554360e4a10aa2a3a1baa92008ea410425fc98c21fcb228cb029c33f38bbd386524a49438311d8400649a50a90275c508181c5ee50473cc004b1ca2b4650ab169e44063c56edc27d2c6a2dc313766004164b7822c3073db011e28404530862890ca90524482d48f1588461cb898527a2dc010bca83441090c8b9826d12b71d59a130ad14f40ea142b1474088ec51adf5c28034715d17767980d8a00a408400f911a3045203040658586128f008820996d8f104fc02bc040c036c630510216672e0032249c0508426e46007334ec8e009126280c1108c64e10a17ad94524a69a5d4b26423159b9c3dc37e3c364876a703ddc65b9125e16abe1d1513b8635131a162a2053d1e91e4882a8e307204159713ee4eeb113547dc482965b529463c3942084aa9bd8ca082c91ec90bbb3023db3f2a9159128c5dec1a51b3fde7131d36e2c6fe7062440c7e2c316208237664dacdb41f487e2879d6c8739792526b312c7bdb078342a28c54327128383b2959a48938a76cdbe1a8cf47d3217e3e3420505cc51528d2582a9804b14b1861f123efdd063a71971e9eecf88e1d17c27bbc1df7d1f2167bc45de06a956435c58a8ad592d57bc8823ddc05b258d0070b0661c12558445846f6fb0ab88b65829d3c812d21f67bb8a2e2a7e092b80d0e11bb8e0dae1359dc9d850587e6d1d0d0d0d060ee3f4a9c6bd3b22ba99dac232c168b25573d56abd56a3a0e111c1c1c1c48b383868686866686172bd68ae388a0a0b058282838a7138b75ea61e7edecb056382c383838381187655e71c756d611168bc55af558ad562b0c87080e0e0e0ece8b67b572dc59a5a4c425a793a6433c9de28e0b17b1155b2ee20e5cad56ab156b1577e24adc893b3b71c7eea0b6b47155b31b2f495947582c168bb5eab15aad56abb81397c49db81377e24edcf9bc62a9a8f470e1c2c6c6858bd58b1736362f5690c562b158acd56ab55aad56abd56a15abb3a84fd611168bc562ad7aac56abd52ab7a6cd0c33c8232f5ebc60e52c75a44e66b560c3166cb1582c168bc562b1584e5b335eb64a4cb2e411c9922cc9922cc9d2994a05b893adedaf5201fe974e72a6a1c959b60000001a1a00c896db38d4b2055bb2255bb2255bb2458585add61338a10d367db4bbe92abb9b2e5bd2896cc9966cc9966c0120d35ad32106711400029001000002c802a0cd08c01c4000063080e87000ef3a6e139fe3b0ed707d989e36de22df654ee12bfe596675371ae94e4505068c18fe9bd41346e63adee23ad1655a8b31c7fd4f1d9da9a30486df4d9d483578811e17c627df94ef0b51bf1987370049c1a358528fa5b325dc414e161e36c4e01ec502c4042c2b88b91f39364c606b071012ac3a96fd80d0bc9d1f39fb956143161b26364f6cac30e2089b2398ec2edad8d0ab083f9cd81d4ef2e306d7f0fcb0b97ea060d7fd787e90200c3b10813bbb772002bf77f78f2b5cf62ee9169e728812d848b8aa9a2c06a5cf7289147ad18742200d127d28cb5d6a6735ab59cd6a56b39a55502854455f734763c7c02d36fed08b462f0255500555500555d069a467c02d36d6a117bd48943b1a5b0442098972277a9348e34889443a87d0e30f915435a91d52d584422452a8f45d568a0187927af13a5e5553d2ddcc2e3d2877a90dfa9092b8423f744279cef4a37f33b838713bf428bf43cfa176e84d2c3bf4a37725ef427778d31da735dd3d6a839ea43b14cb063d76259bd2d8a3bfa31ba5946b31a55286bb94f147adf45877a95d2a4992ee523b95a2f122d3bc78115728aef1a8827845500541e714927a46b054a060c3b754a04001d8be3f08674b0821bc17c27b410f7f826ed0874f1ff4aec180e48362135be2883820507ed75b8bb3bbb84417836cf0bbd823fb2e0ae14fa01610a46d4e1318f4dd645150e6c107c63a16d4bebfddbfbab346b63f46e196b685e1b471775782064a9e48820cb2e801144b80b4ae18728528ae204211ae041ea5252011c207449c18a2890f8f0d9ab88215852d88e024f941e3fe63043c3e767c38e10423fb58fa80c287133e86f868810f15f8d8318332cc000b8e7b940f245071638c46ac8840010f1123e0a9c1620b3c354bde7bb0a60ad775419e1a243c354a786a8e3041cee7e1c59509533309816a6d36ed3503d362303db519a80eb427a6c55c19bdb4988c95c06a3368c832aa65d56e59a66dd9a5f18069301f0d022f62d835ef96611acc27bb1a0f38cb3418ac41806edaa6cdb81bd3f7669f6b86f58d5d566374c698f8b0c26b08f0c1253d74de0baaae3906be8c2e239c553aad104a79a5ac94e32000a1f599c3fddb8117725a48afcf86557b6fddaeac5e99ad57bdea55af0fa655ad5ef5aa57bd30ec63e463d2628bdd2d833906669adcdedb0a64894d5c5141821be37b71c75936cf7d7055209475729c94d7751f3aa594d23833258d35cba8752bfdce1879fd7d0745fd1e0d33746a50c7e4bcabf6d997e0f3db3fedc483f6d9dbf86c533ed4efd1705d36cb5e2a855d185f8ec3f85ed7952fefd5ee8580f6d9639a8dea17d4270868d9ccf698c187fa927fa54b29a5844fbefd18f9f603b7c42076ed3bc362d8265f7eccbdb4d498cc8e709f744c04c9e0aa84d0e01f8c0efad300be215fbe879a0e90a69bd9fede0d2e27fa79070f2b23f3b03280d88f4686fd2b9b2025a3ee30010e32eaf39032ec47dd01b1e3bb76a2ba46fdb76d601943ec773330ef3b480369b6cd35fb80e1c39d446a514e31831d33f85184931e45f414b1a488234550414a596d0f9c2728a5f62aa286082d8ae8f19e173a9b82ef117185ddc98d43841458eebd37d35e0f9690295c1512aa24e0833dbbcb5ea064d3a882c4e8030a1f4edc2fcebc08c48bf0468efd72e74972887bd20989c09ddc1dd432f1a90643b1cdf6adeeea8bde7ef6970dbdb5db6b1d34b23fa2fc7c056fdabe7c3f9441b4ea2bf3e003671a47b6eb7738684c377303931fa3fcebe1c71bf0ebc3af5446fd71fac3b63c43c5781897d2232cfa2226427174c1ad07e2ad4dabf59f1ff12290c8e8dd7a116f598803dfb36bec28faa33c72161b1c45dd5ab7ef3936c9b5d673aaadb5d66aebdb8fa5a2fcf9c5155085ceaa57cd6ace742763eed7b719e2b84e12cf71dd597bed155d427e047a36f22c1b79f594a3e8ab7c803bb9a9a59f51aff977cda8edb903c153774fb23b7bafcb767ec4fa653f6ff1e5ceda56148258dff0afa2d05fde92fd75bd7fb075bfaaf5faf041d9dd667fb7edb3817eb3f683df82b0c7f63fdbdfcb595ec45a8b619fcd1d2c3fc9aa17d9814fa093560d25d5bee6459c87d33ce9a1c77a119800b9eba7ec1611d8e32bf5b3faa21cca5ec48b6cb9be16e5bbbe17fbfaf5ea1bd8dbbfb22bc32e4c5b2f329de54532e77ed0048f9dedeb063d1bb51fcf0d589b85c55f181053385cd75f97bdaecb5ed376f1e7f52c2cb24746dd9a3dad2d2f1e267af02cb164daf02c11645f99d92bf46f3e7cc964ce39277cd762e883fec99eb7ebcb9e395f4ed0859fe2b4edf33443268e9258c31b47c99ff26b864b1c259fa7099d8d80fd789aa87982d58aabe81d8ee61ce91b73ce39a7684af903e8dddddd6b952d116cfcf769da730cf6d3e7fba4997902440f9e8f35c4e2f61c7157dd3dfc279d780bf6d0fd471b420dba43ad3282e5cb9953723e1c5dc7076a75d0dfae4732a1d20905cd4eb640575f7d83fe4cf5d8b01343090c29f1d7a774faa45886ffc92078d3f3ba542ab5e5157af82fba58cc8174f75477a8dd0a514a29a53484859e82f2fc2b579e1b68b1efa694524a29e829a5dfa53648bfb8965dcc4e2dbb98058560d3b28bd939778aebd4f8f024478c105922c89e6f4310caf42fd904d640372dbbd8471eaee353ccdfe66b5377dc923d1f9b0f02c10fd105deb0a0beb3723e28cb9dda348b2e7089afcc972c9bee503e5fd3dcfc2be763745eb5d65a6bd5a97d0347aa9bb247b7503ab8b7c61035869030fa74e8ee17b45e2395734a9a45d50eb04bf911da9804cbd7547aac31e2f8002078e6530e92eeb99fb6c37c12ce27af149e96da83710ce028c10325709410526badb5d65a2badb5d65a6bb5d6d69e1e54cbaa1cf728257ae4d05a6bbd6ecaf0e3e60b374c6ea650024c9fc004a904098ce01da800cffd786e9cb8b141b515c398fb1b21fce0c6881b18dc9460c81643ac184285213a438a300408439e18c2c49020438e183283213018b282213c86944007db07cc5a6b55024e820532c04888c03ec04de0e818739f04932496ec0ea5a3e4c21d5ff42d390a1f95d8ebe4ce1cf55e4af948a71cbaa93b941dff492965cc5c03fc4f335e9f7208c07e76934d08b0df67f2af1df5afcdf36fcd41fc30298c416bad35ce29e7698b6f51bb3e47008e2bdeb2b29f7c0bece8d1a3902d4c4969119fe39fbcae0b7665f9c18b09e91f6dceb29571af2ccb56c6cd6ea66513bc0cedafcc17676fd3b28b6d7373d9f1584cc0f705f0b032b420a42f80c7cbd0fcad860dd1b4bd302d621a8c7c9b4fbfe55b81ef303f1a640e6532db0c3351762fb4594ec51706f8e8ba2e66b59ca217a5b6625b078496591c01f0b36c83afbcd0882b705a2db96afa9ad4c6aeef54efbdf79ebededf6a35066eb1356cfbb769ec9bf2ec9ba61f7bec51dd8dbaabbb34e8294dd1d819fe6c9ca96445f7bed51ecb19c69ca914c29f0d238944ba1bbd7f9653fb6652ee462ad0d3fbeabd31c6e833ab4923652dc61cf78f42b1b0d0709befe733ddbd4877a890ee5822d61fdde18cc571a43628dfa80fffb2b0a050ff1cd75dff7ea3502c2c57bce215af78dd646f7fb8e215af78c5ebbef65bbce215af78c52b5ef1d2a7fb31c61863d427fa778721f0a64f14fbebde981cf1eddbdc9d6cb4afb5b1bcc310984589ce2361e5d89bebedfbff609f169886e3f170056bfef53c259b4392c2f40cb8c53b46a158b08fdfb1ec3004d6f4e9fe89befd78a2f6af3fdd19708b8dc5b7d7f5f066bfd6e9d2dd6b6d78b3c310f8cd114c51e29e3890554354435443220fd884cfa66517bb6ca5b3464201ad3071f06206172aa71414ce54228d6a6a6a6aec0ae295c44d124048a226899c245820c449123ba41025427a84e408412285d41091426eb010177458c88e203a41bc108415e48a203b41820421a281506badb5d65a2b566dadb5d65aabc5acadb5d65abb703f0246e0400a1d8c40e705429051df461705d00421065138d1a30c2390516badb5566b6dadb5da5a5fb8472531c590d60d90eb0932055476210b63b041d42bae606510174c28629d514a29ab80c4932290e802125ad0a10c580a4230dd8f0789266024a49841528082cb05e36226c0c632cdd25d302cd6b8ffe234ec47afb45707f1c1348e2bde52c38e29c09612420861a6ef0a4a5134c6be32ab3229a592d2089f6619dd56f611eecd2a0cf718eb2707036ceb28875e50dda86a40df8d7890b8d9509581b62769db2612894422910844fa6d9491b42c7bf80f677067ae65591673fdf6f76a7f334877238d2395e5b71f0f1235fb25e52d8f0789d5ae8f030d6ce612f995bbd79a596d8ca507b5937159c60120b6e8037f5d3647dd57f6d866af7dcdd96b1026d31047d3325daf3ab3b34cab1f7daaffb6cd1d24b23b1cd9963b19b9b38ff9febd18a6e90e62d8bf44ed9fb6bd8dc58ff97e165ffba9c1dc5804d6103fd24b29a531d32c270b880717d7a0a9f39fe5dd2049ff36f85a267f24476fa3f4231da32fd9283de9495a07e94b57c504c78002633f7ad277cf89cc077448201b7d4032460be8fd51f84d9f411ffd3283320c47f99bba991d825125017ff71b76d9868f45796683328e6c8b70e6a821a597a57f1a7e6ff9bcbfff2b914628bd35dd19e0b11e92ed8f7db6657c6db14ac8ad108ee2a20b8a25fed39f9101a3a65fad0daba3bed53332a0ee64243402212a0685e1d26313dec7f87f6a441145841e45841e45841e45841e45841e45841e4584d7b595a0c6106a0c412505c656ae6d8aaa0bcf4507788b7d2c17b803ee60c11df13f105d5e585abc448be27c355fe06faa5a2e05ee529b8b9cdf0718c1d1c586bf296c382afe039070294fa51c151d1559a28bfc08a1472045b0dd9dad95d239a79431bad72882e1eeacdb47030b429ff7fac3885ddafbf34afc1ad5b4b6f39258bc9ecdab69749b3f3f26d3972a09183e962d96af1a67de321765ee403b7e19a0b518739fc2e145f4f11f16c2f2334cfb90924c641309f4400147c5f721babcc51ceaf514413669150162b73ab80f46c46038cb51d5598e9ad2e9cbc7e467ba93910f1a71a9b1e23467d71d7c2a1f4a98e53f4da55f1890bf6a9511b07f37d2618297e145e001463a748471523a8d8031a537a587818aa6aa7dea477771c3af9f6a8fbc7d18c33e9fcf5b0ceb1bf041ffe2df7db40d3de8eb965d4f7a2c777847d7f1f97c644415bb1e63ec539ff42f2efa3ce949a2c7445a5f1aca87de6294cc5d9b86893ef4f5f3246cf470351269d0dbbf5806e56e7b180202beb13d273fc037b69f1b86b6af80b7d8cf5fd727d320fe507d9b3590ee70d57ec451d7c7f81fd0f1c96f431ab8aa59c2c7aa0756b5e7c01ab44cd3d7c39c65b9d341e2c807040cbd480d3f82030d0778cbbd370adcbdb5f007d06a2f12c35b1e3503c38694b75c1d4bd0c87cc08b5cda73ec8538b74e53a9bbb417796cebc7ec2303f9ecbb1ef61e0bb743e9472f1269a3d14824128946a3d16b2292be51bf04fa6ea4657c57eda31673c3f4a510feb878d168341a89fe258ab8d1486ed14b12493f4789fe25de80efe25f9c1bbd0b1733905ea449a3ffe048bda8724a41e14cafcda03b0eccecd1bbd022c88a27dde114dd7128ba7b4e77a8cf9374c7527aedaf2897721732fda5992a084176fc5b33150bdf08fd34691f7ad8c35bb4d1f3f096cfb78cb0b7806cbca58632e94d39f4a00c5fcba092ee483af4302708bc797b431c6f2152459209ac01f42f9e73c42d40faf335e37f89187e3e381bb2603f1e276cf6f56ccb9955058149d590c65ba0964e1c05a1f6f1e78ed111dc3d9d4e87fa54c5c2705708b5a66ddb47269eec0e3ed911b2bce5f130e1e4691f2d996cb2c75153ee1c718b2d36add334076636fd2ec5451616ac2d5481988afb60740fc2786bd060da81b96fd0c7b07ff139e79c106ad9ddb4ec6e73facc36f84a7c2dbfdc1a3d6abc00c7ef58ae3dff6957fdeb677e2abb8e76cd5a688cf63bbbe5e75e61646c7ebd62382ac60dc81d638cf1722d8884d006548c8791edcaa36a08e19c3f279c73cec983cb78715516b87b4bf67c551618d3d63aceb3ccc71e27ceeb8abae3a0eefebae663de135da0b51873dc3f0ac5f2357ce0f91d7cb20139218f68f3a9c1a5d99005651308258410ca26b0f3c07ea91747c11a34587e0652fb86d4387c8c3146295bd662cc71ff28946c62affae20a122448902099b5094c951acca4514a09235d368135c8a7510306184224b2c95522c812449eb7400821c530156bdb2d2ba5f425460d6652e92d503ff9a4ac2fa34b76bfea4e7712c65fd50ff00dfa73471bac94d0625fcf326ff91af5bbaa22b8b358601516b843a9ee96f0ca4458b4060dece12b36f98a3fe45e6b718c5fe307eee0cd8e9a071ff8b5369459bfc4e945600df2e5cc11f7940fea58c78c70e7bcf3de6ddbb63bff6eb2255bb2c968347ac964249f8c46b24732914e4623e944b62284210882187ea006533004f127259bc826b2490d430e986c02ecc79303d6f637cfb9cd6ddbee4719af7fef9cdbfced6aecefdfbb618cf1f62f71bb1f8cb7edbeb675bee5881bff8ba7f04004d634ddc9f8defe46083f048277fee70363977da0de5efbf8997ebadb5e714c54f64826262a7be813d7c209952d52a4d209a5cff494729907224a4f9f5465cd4c8fbd0bd3ab98fe6442c92fae70b9a471a436c9e25d31b72bf7bb3e562fd9649495fc828113ab5ae9cbf8aed5091a1c28d93c38e8913bbcdf7bf55f7dff76cc32479c31b32d94ba8bbb3e4ce2488eb03ecaf805a5ecfc88cc112ffd7b2fcdd4debff453ee77dabb1673a3ea0e5e2439d25ed5dd561f573c02e1cf7689f2d31da6e928b32990f5638c9acee8a8f121ac1676b2a56b8cd1469208f4d1b0afffbef4a30f3dfe2d7b957cca29f94594cce517574cd68eb448775877dce674f728961dafee5836a671a452f1924d6413d984e475080e76e050b1ef2776ce12c18649f600f6e3c109b2717aec03ecc7d3c4ceee64d7dbd883df6cf6602dc61c27336526ce37acc598e37ab8e215e37d485298c5bec47f6b31e6389515374695152f337be8794ab07f4858f68bff5b8b31c7a9ac909932f3edecc7525981bbc77a3bacfd765456fc049101c330ccfecd3e63588c31c6e88fbd3f86d90fc6acb598f6f6834da50fb698b59b968942d87b1518866118c658151f8c596bb1aa0a6b1ffb13bd16c330adaa425505b6595515aa2a30a6aa0263aa2a5455a014d152898164fa9d6559561ff4b5d6500f31708bd0e8439c680b0cfad08372d7c3069964a6cc1483ccdc223188443253542aa1c84c318466f8d0089b46243c32e119b4a618f43dec4e66de9099bb34ff554b70f75b667e0fa74c9392d21af9bd4218462453a96635ab59cd6a56b34a2291380077a954d2aa275c8954fad09746612895c2301ae9ae84b1890bc3a66ddaa6719b4983515941650595159eb839f8636963075e6cff686a838b2b70c67c748b38c6187f6b6ba4d4b39c594e39e59453baa4024fce2ac7862787e6be0b3355eb011a8d9b7d5ccb413e894422914cf56e1a8d4f06b50760504834aa19e9794bf5eb63a8d6b438aa23d228c73c98921ec16761ee6660e0351a693025ed2ab2b345230d66347ad7a5924f3925a398a848a331ca2029f352164d99e4b28992d114d23f6fa126dde1485d8e245b8ee2de9d943b20768526084d2693cb9e089f42084d2613dca51a71ccdbfe210dc6b5063352d9ef1cd0c2298ff2918e4825138792724ac9284f047982c8fec0762e87baa589e372d40dc4367533dbc465fa57a65ffd4d396a3054439c7a6d7f4aafcb04b93765273d27634aafcac2dd016f7b6d714d8301383a5705068c1d9565a391ca09968efa08b3920ef6bbd28fe0931b7d1b3fe5230883fe0371e00e6fe1e12d42f4f4cc193ebedf1970a2ee2125fb1057227d94944741f914aa6d9c3ee553b48e943f99a01128f08daf05d6d9140e11128139dc534a4dffe2d088b744ee4d1f1f1e7117171fff9aaa4e41228e8aef829a4c0f21ac158766a61237b3b99209074799f2db5c8639269d3ad13fbdcaa3e413d5271e4eaf52618e4ab671e5ba55a37133392957394e2505c6341888137ad1d7b021817703fdd1a8b37b347a957cca2919255facd1f0512649d92c65d494559349bfebba9e5eef57293f47959e94bb994dfa8f0643e238ee69e6b22a09983e7c53ae5556597a5a7a53ee7ed8a57f89a5ec61d63418edaf1785404fa703a124c449a56cb66f7c3046b9517df2c0a6f4c501be32800aee83f15452e08e537dc17ec7c9bf2359634709b4df44c084bf08b2ff7cd57e7b6c23fb8f6b1bda6f7a4e97eeeef36daef92566f9c9a723a3bd7cf0e9fe2fd143a1c73f438ff1873c07a2708ff236b84771f11ca7f25c74f12adf419d0895401ae962fe7cf1c2736aec70f12a7f555ec070be04b83fbd04503e45044cd850f99417818be7fef42250d1a7a84f53f3707aee6d9cdec6a37c8ad6b40759ab7397a9928067d7c96c9fd98e693f35508e1b7125ef06243bfe5ddca62f99b89f91e1271e509e7b1b28cf691d4cccd7c13d8ab691f2288fa275a07c8a9e91e12a26d3a7800293de73208d10990f38dc05138139d0881799c25b64b4d56586976fe547edafc793cc30aba66931c69841d667b6cd381c2591440d771e0df2614f5c91cf65d517b0e85fdcee2d07ea78cb14ee92f2f2e1cebba127baa0bc3cc243c9f7ebf3f008fe1e8a9339e0161ec357fc51b27d716a940eddffe42b77a0dd419d0e54ca1d8a34ca48b2fb38df2cdce7cc3a3c7a74fd0119473992987f7094ac1587a3e44b1f1c257f7aa69202ef6cf9ae24aec8a7b3059c633e0cf65260e7a16d566b09e9bc1b3e73825e023c07d6003515dc41e328f9a1c76f5dc7751e0df243d993e4803acfc13907e4f16890ef8ea43a924dd38ec479380f17c257dec36bdc87db7810bfa932ca912a8b0d486d468ca6ea02a6ef4892b88b8b97ff1c0775a28bcacbef6c873beebb77913d89afa8e8873afda7709cebe72f71ca291c4916946c1977f01022ea98b77bc01ae8e3e4afc202df7faa16e61ee54f3960dffde028f93a1c251f7e97da3a3a28f27aa8a305ec4894d4ec4974a6702abc656789b73c0ee5df5b949cf98aafc0d1e83bd716dbfb9806937d0d21d8061bacc598e362b88b3b712471c55b52c0f2af1629f47be5b7e767fbfa83ee728bbacafdb419d9ee32f93efce03a22cdc809e0c47df763332d2a06cbbb21a2a00fa211e9614be2b8d1bf48eb6b6b271e441f7a1b22fd791b36ae7cac0f8e8ad877af07bb1d17ef7d521e65510ee5d768b89cf4f3d10fc592e76f5bd560b4078140efb9cb5449c0fed97f7287f747664308f1f69e3b48e407d49edbdfd472ce7c1c53c17df713df6e981725e0b7ef062cc5dd7fb6b23c1a2630011b57a08c1a4c5625015b99fddecc7e1947b62f6d7fd873633e7fdc07238b1a2e70b719b623f94f850566515d813bb925a7f20f031523feb3e1c9f858aa2c628c1b47316a8c61ef5b8505ceee6319de3b5235c199ee32151730fcf73a58f10027d3b49006ca3772d40dfad03f2d47dd217d43fbb7aba6caaed7b205d5eb41d976f06dfc309fbf4fd321dfb9c598e91c75c70e889de97a9fe65a69a432cbf16ba673665755136afd984c576d1f0db766559f781089eaeb10e9aa6d887488f48c0cd514f8fe73d47d34686f1f0d9ffc12b5af6fb57b5df66fcd37eadb0705a377a8542d9865b9643523008020002316000028140a8643629128cbb23c10d30714000d7a984a60429c08a4a128cc511404611452c618038031604464686086045d1851ae99a14ccd48ff39807c5ccd7cc9cdf7cb6b275c3c186baf87328c211166c522978a1f0c23c38506c5cccc18adf16107ace80fb90b0432de669e48a74cc6fd512a473a31e20c98b0768360df788865f86867f4d1ae07aa6b66644673e1b2f63cb1729bf2049bfb7277a3156e0b260f431e320dfc2b33a0ea3fe3ddcbfce577a92e1073bc5b99fab74e461be474add67b0356e9052f1ad278aa01c05fbf56273e410eb4330d11ed6ee0dd6a68a03ec7b671617ef1749df04d60efebca8dd9337439d9969846d8b37e310dafcaacd14fb4e6fbffae5ca03b6ce25a4da757cc1eed172d37495e779aa79ef835da19a09e51d9a7051b39fe8c2904296d17dfddd24b373c29397d1272acc0e90d4f5fa8766ca07d76835c21157d1556bcba81429176f55f0531b187270322e451481cbe1bc4c36b85770a8deedefa672a5c7a832b218376881e34bec139eec5ddca78a647bacdeef806e7a34134323a596ac991baf1d5bd5e0df11b341a01ffc3d82a8cb8f026d90537258c80c59e2dbf0be57a49220038b8a8ce7a0c8d665aba8fd0db0ee2c30d2bd3bd0387083a0616df89084638c4805376a9c4c1215d50140e8d6702f6102c0e23a391896c8c81dbd5f41f8dc347a386169ab8813a8061acfa3808cac801f0c82d40520e2035709424cbc171408023cc2189f5535aefb74b10b8fe3ffea26bb167542b9496f280dd40920d14814d3154d4364068115cae124e4cabac541621b64c3ba451f40c96ffa3882c9d8dd4f3d8ff35f17dabb2204f6fe9dc5c4502620fb285b520e254aef8af91035caa341413a95af4965ddbdc8e2d1a12633e297a41955614a4b77472ff21a1bdcd4c4007e45decfe76a81c070ee31f976c97d30a50bac43f5f23edaf362c35043ebe03cb6a90a4e67399b85dd6a4d041245c15d539495e2adc7cc154c0e40a57abdd7cde6d56e5e5f84e1970b13f7d62a9cd962876eefa1a0c30f6a98843a1737dcdff66cc18eab09040d3698f85dce84ab1eca210525d407eb948bd1ce99ae2e92ee42b724de285cc2df2300c8dd2a59f04051495bf595effb1bd99974a63c8152300ad01401d3650ece9564b59fd629865036348d0bb6a867cfe5d0dd944d8ed866424bb9f04092dafd624c06f5f5f54aada96f68aaaad4b54522d979d7507915bce9d5d9ecbfa430c4abb01a46a25ad8feb41fbb285fbf4418db29bb38c43ca104e548baa9655ac8657690446abb1c292dec276730772d934344b35ce346b19be1467bd535e5b861fc0cc1ae7470c6b381ba7ac5be9529e6add94833cb9f0d46d4d5193cb1d3408a029852d2cc46e24b04c29f5503d39d554a07ed8f25bb14482fefdee3230bb5a810a8c5e478c07a396d7ca9f857973d51889a1044f5e81b5b2c36a2c394b78d1ed8d10b083d2eb5c096f7409f949de5c707643cb6a24634b959021c70d06b359bb36975ee0e74f56236f9dfae1e325e6962fac1e0edacfa149603db9515b63d75308d04c4c5926c70140e6c5e9ebc1d3649971666f9719664684996166a4cc0c6a4e1c88c87e12d83e7c2ce58fcd00f2a6c083e8c2c4aaad09e1df1fa92d09be04191ba9694f0f96a2d2b8d05d4c71778acd804d0f429b575bed6f2e81688066a290e57819af172b968b66fe89a5d35c3cbf73913f202c3082ae78097c32165bc3c2f6836954ce042621a601f364734e146beb49ad02e685dae4bbaab7480087d21fdcb3d313fd3fb1ae152aadf474841fe76514ae847447708b5705bb89ca42026b8b3a9a4970af1181c252654a42b17b666d05389d9db4cd0c2f1463a4de9da320f8cba4408bfeae058d04bdc7ccbc52c3b39b0975d6aeb7d66d8951355ee17291c04681c94ab17e905430828e6483886b6b665693e9e135ad6a01966f9a45e9a2ec8bf384bc02b5124e79034891f19eb6d262d937912b0ba75dde789a508e7e99963e79f0922fb64fdac7d019ba08a12761c5540a52975aa37970208055cbf5fdb40d390226e2df7978f5a147aa1fcf69367b0a8ccc9c3355e99dd4c265885b6c3962a9e8aa417d1552e1bb4ae8c372d882bde639f5d4740ca5f75972c6212ac1b3ac280451db9e6f1ea9411c647a5b4e53bea69041b0947f40942df8b43a6736fd55b3dcf194634deb5ce2ec251a6fea281af9d9fccd12411f8e549cfa6cfd4b46f0aef8467b0ece72a64de1aa3c65817567f98dd89a3cba1feabf86560d51bb6f986c62d4e225183615b67d08a6f6cf39e295921bc43a769a294892c9e4eaa49e8a0afc73e4b72bf779146e39644c003e13c9efabc90e5b66255d137dac4e2cffd1770b4c686f9e06f506010acb95a93b491808924d0ea960a9b4c6bba88df75d1e621509da7b684c70139e0590095f3c9b5b8e7d1047048fe4fba227e56ed273a85700047df8078c8d0620ee4c3556bf03b3caa28c4c6f907c382cb3af4d17e98a89b0e160e5b001cdb426c391954344fd0b560d30cf4a9ceea2a691c7bb05bd9339e00d83584eadc601ecf4a04a3d35a11b205dd39324cabd51f2e71ea2735a0b7971b803ab4adf06a23cb42228fa5802c53651f0e6421c0425fe59cf959e6c3d0302ff38d9e352f1933f8e46602b2e7c73a41cfe3c6ecf19ee3cb8acf67b933122008ccc9542caad917fe456171aa86bc7f03f707846e81e18c47d95f4ae51a0958e29538ffb0d662e224855659f7b86f472bf5371fdaa7ae4974fce5a9186df21e355b3198aab0c6722862ed980761131bf7318919410c1cd0bae72e3ff878de65ff42533c503ee68678d25b6b8321d9445788ce75576cc523b902221f0ca2a308967f4e84c6857c5bb53765f0dda77ff36d111908becde03cf1e1553fa542b7e9baa26630a4568a54e96e9a6b08c793385f869e32473eb9bc2331d29136053e744403b69fb211342ad1c27bfd55ca99a73a25460c1b5906e77bc6715d4342c5139df9c3ec9f083c269f6972619b97dad499d9be92a1b03e7af6b606ee5c4bed004936bab5e6fb862bf0c1f3b417dad89533bdef448be359cf936a870e6679fb66dfb49d3410477d772bcff04861e4cda5278a28074eb5dd7efb70886343aedbd592567fb6a2f2612a67a4fcffdf3ad712aec0b7ce2b466579f5b993bf571f8ee49105bb0ef5e552e09c00d3e3f31351d3b7d7bca3670cd4409225a662527b78f2fd29cd98f3af39127af4958eb98f6a7bfd1668936d0aacda8de39d99261e9934fcf43f81cd542da3de7a57e543f1117bd3ac5373a6c84b06b88afbb2155be2de25170de266cb53c7e899e5b4b2c7f961ee0e1fd8a08d9196136b2547928f990b2ff4dd0c1c4cb8e062aca2ce186b5f5ada669c89be3009fb634efece0803736e7b97b62949a710a596682efb1ede145ffaa1d121e80a652d854d56b981266f04c08b9834f3269e3b1ea376fb8cda4d3f744f87e54597d041b0288285c7aa9f911eeea12a8eb893423207ef7ac7ad677cf8d32e2025d4eb3d073eec30d0e741f2a56095303b670d623b61d57758bf8bb2e2e0ae16c4f80b2666ee8d61673ffff8c0327441d97d097138d19b803c675cfa52cd316e415d7fc53f497d14eb57846010bc91e9f4f39718a9b609ee2fd1192de0291f5bae0111dc8827df901a9e517d856eeb07eb4af53c2da35e74b3f73aa7b761515312e78abd260892f856334350b88b8a8ff62012a7dbf274d4a095a88285a3e10cef3b74fe451488a442290392a9c8b4ee426955e72a7c9e2aad83cf9b3cfc445cd4926b54596986e200068b658f1bb6b80a46033d1110fefe9b90b66e6892d418f4f602aaadbfe06bba5cd94c3a020bb740ad44ba55ba2da4b752a6f898318d2bafebd11b35f8ac0e586ef154fd267ca074dc0d2e66d591ad30f12a72f52097063d8e03f558ec62a9c2431bc1bf778a1d9fdd8c8538bec3ab7985894a05c2bf397db8fdc1bc2fb34ee558f59465b2745160962a7993ecf5f347b83a6bf7e5bca6d1984aa508b0382906a5de2f2c86ac3148ade9969e32c46c5d7218e932b69c57bc59c3c39d9ecf3b3165108ec737fba47c192861b06b3c3aa0c8060ada91b5847efd748addbf9984396cfb2c750c9e465dd7844c22cdb2cf8cfee40147e63d37d60ff09872134e67ff8495d0f21eb74340fa772a37fc54b8fd141050d5c0cb30ab7b1457b8836267aa71d64a57676a51e77da34fc9fd4242b77b2b1fa59d9e594c7ba584b0890bd5f77861f19081ffc4ec8e3f48d6abb2ba1b4b01b0271afcfb1689d41bea9fbb76a80dd7c5d4cfbbf307614bbd26676df7c56072162fbc17e9f7cb31892d48d0a67d3068de9f692f35434a3e4f7f4718e1a2a316df1a30ac95da1fff9e0cdbc4fab8cb48ca39aa0ab62ae71a59fc95562f242b67d0f55b420ff7609157f6be97574225e5fe1e891b3dfd4b633eeca88e380401d3a9822e5a950736144e04353f43770c7bc3f217154f2cedfba56896612bcebbf94d6cac19043f84103fffb455cb20680c37eda13a197e321275add4d5fff4868cde896b08485a49d17a706f22bd909c984807f33ac29053c00f173c09e6245d29d3523928d96aee781ffd047b68774bfa33b6eb05a65530e63b05a60530eac606a60489440106c9572289a33a2538fea4599d40325532099331df9d631b297934b0cf73c3b642c3bd020f7337a9f2a07e7c46ae121ac0a7ac8d53483b37a3b352ac511741f3ab0782c33ecca572f723a02083c75f70ab5a04836e71500a5008563ea301c507ab5226825a97c9be30cf907e132e9fc24d485127491acbde4b85aebad63f76d6088269657c8f42988003007e393d51ee4b49484957ecda6516fe41797afa6c45fd51aa0492bb3f9e1590e09e96c124c547c8789e619bf01d2c8cdf1fbb3c9933c7dc7559a8e915d1277656581f419520b7e5ad203b802de9377814cc9a69971f9594eeafb4183c3d571fb4f6c61822daddb570bd35bdfaa78fea159c8d07e78fbf127a85a2ae3948f91987ce9d0c367992be337ca74ab8cc8f42590c5e76e10f3fffcc30c8dfd7468fb19db0b5d0777f0f4f3e324fa834f6743a21abff41fc174fb5c2857295542df7f9cd5775b0dc7952310da51a1424a3a5c09d491655b82250da8a16f4babfe183db50755713ec8fdf3860ea2d70c0a4d4c4cf017241c2d7b942897bdd8b07efd6f46e2a3aa1c70cda469623f4a19a145b72a5f220c20b410670ccb128b2cc2d084397d10b489b4cb84b42e091278ba920bed93bbc20e25fff8d5526d72d7704004b682cfc4bec7519d17d11c0ccf575e225333c316cfcd9b96545de07438d9bce001362e298efd724b19418be2bcf4a61ac478d7c5b20a91196caac51fc640cbe9b199f525dcc0db6bd90bace5f3d2d426e15f5b282d9e292148368326a7aad054c4da0f2032f5f1ed90447e0f140c731d40d3d7a280ff1765ecb80d5a03543f3fd38798bb4e1fc7fe57aaaf9df314789451b8257030106d5e8c3c867cace7459435560973e5765855f3571ea519bdeef9c94741ae9f482c5a479bc92add1bf8db208f2138cb2da0657105dd163be7f43d7e2058126a9cb2b36974504162c43fcbec9adf54f1e779f01d38212a66893539a2f1fb15c6f483ef1e32226a074a90d63df7eac536301390276c02f910cb2777bc133a89c893950e98d893ad9305860b336903b7ded772d0bd770a976c7897409c43359d60bba87cdefcd9041096b53179de20b44e634b0342d2ffcec116a1b7f13003e484d6dbda99cc8bfaf28eaeb7b5210105405574bb36e1c2036a0146f6020f1f30456931ca7cfb83d2071970d7e9e0a91f581e1d1737c2270aa7536ec91fe369fe5a9560e5f7d3acc98f299b3db072a49b142c76a24f987ff362a48851f305fb44a1d49c1f97b8b455d2ed868e64c006489356891f170e04cad794f92136ba3149762094ca4810f3d30e2acd37efedeb723a20ca866ac05d1f48a53c272338f00ae68387e68a745d6c846dc9b62b6ca0a72e55234dd613db2e704f2126c462609c7e1323f583d150ddb365b8b55343790f42df1fe3052a680bd21170317279bfa7eb6192c42aad50d7056717a23ca8e2b8603c225ba868817ac51779e0ffb0479225cb1b00cb1402aebbd1167b50c889c08df7fd0632383ec323af8867e560e56a5fb7aaa93d708e27ace6587c9642c0e66a72c3b680f6ef849490e64020eedd15c918772ae8419455c50fb6d00ae7cd48ebadce9063cea841957257f68dd50d63905d6be7d9443e1d20efc25506b9a96f841380af0de6e27d59933494548771a69d1df0c4e89c1c65ba362923588a403c896b298f53e78ce6f41d7324e93932d9230145aef1096d4aee2429a94b8e9a8e8a95387d4c14964b09c8f74041b9043a2c657b7a6d228f478d405022f1c614a0ded9fc837fed5f22590e48447d802e1ac2feb9173e102db9d8adecb94607ed1bbf0c37d02e79efa84f5ace9bc612dd43df05a57787bba4f91ffa438f85e6d708e9ffe5a2b0cc8f62559475d218cbfc75d5fda7754f9fc523544c90dcb2ba44a37d218f605eff16dabff5e2f030d08b61c99dbec83126eafb38c8bf97e8956186e01413c92557afb7a52837a2d95c7b71508fbc49ca46dd048bda268724fcbe0c061be6328abebf14398be0f99e9f9bbcd97188def134ba9c2eea007fc6e1d828ea95c849e9dc3a4158c6f5dafa4d2a1ba54d36d8c1b3aeab12927e4b57712a828b3bd4f47f4966f9baf47036da6e696f7610dafb239eb3e4293f32f1fa0cc93fdc4d59ac621a71085df4840c5a8514966a832cbe1b3dd045b7b4047363f33ed3be14a419c35119d5b10556a6b1e548cea3b609d0ab60c6c43bff5e7fc7d034857354a5b9ddd8b00f5f365cef206e6c5a5d3d643c4e441a34b4cab55675aa88f2530a850bbc2bca8f5299dffdb6bd4340fcfc1b19cf62980d4fc311a3ec17cde7a1d98b4e46ec6135bb5c362832f93b0c047e72f1dbb2594aa1a8098a91c2f21af3fdba8c5093611944372852ec491b576cbd82271ebb2009886e0c52bca8a1ddf1ca5c20db93261d5b8e1ce6240e2875fcbf80c87c99a85a78c7bb18e9ab95ca87612dc498cc638d315dc21cd51cede498364f4f1ea4f165725c8ebaaa03b45dbebeb668b86cc7191fe77fadbeb6c9ba21e72283ce107635ed00585cd1a9ae9966a5bd4d396046361c35955a64c35ca79b9459d52be77466fbb2082f573f981e4124067dbc430f91c330f9be183c533255fd5da5a52dd4a1d58efd008753ab2944ec59d7082618481c63c15deb3dab02b8b04e5180a32c50c22fc1c43512a2b5bb629f7bf33d45295d015695f7d65694d647c96d2581a0ebf614c2b364f99974e54d601c1c19df1aa73cf522c01c306701765daa97ec12b67385cb3af2988858f7759d79b292f5c7bc499eace5715c581ab80d7de7ca3fe0570d998791fe52bd360baca35b2dfe334406f5652bdf3bb77aad362584b168bf2fd13ba3339b73e683431019a1306770a0cda37bbb5a25139499b74d2b2c33d096038a5e7cb584c39ac802bd1293cea022f62a701c041cd45e0667200ef676630c5abd969afad374a933d5019e830f0b9deca01250b7e9f8d35c3db4bb158a645e13ceb6f39fe646790cfedef1d98a1b2f2298aab6413836218e4378ab3eb4be231d5e7d8e55b1254c0151d3962e3fbe4a738e31fd80cec0023c3803e1ae4a6ccdc3a09bd6345629fe818292d905fb110b0afce5b5ca6c53a0210be576deabcdba8546493d18fd9a4c03256fe6a050a954de7424f58ba9ac1409f63b84ca09e16e4bd652674d1130998d0e9331b4cabbf529538f4b04029077b9f7f5d0a6f66f8cb3df274ab7f881eecf40afaee69e34dc82f0efd90b3e9a927adafb945ee0990455b64f0ded1dfa414aceb1d7dbf4a57b61b99f1a018613d680da62b505dd16a81c17d14e54a0942cd135208f9190a740887e02e963f0febf347ee700849a30577d9a0f86535568dac81705a65834ab91325a23a23bca1930e3deac9f295ec171a321e7cc08dedd9e223d0dc33b74c435557fca9929200d91cad4b7f0479261b253a4176d163bbf5d800736cb077f97de8e8314213c6ede7c79394a0ed0372da57e862eb500b94067710591f8a87db5fb6d361879b724eccc3476c9f31159177de5c3afa361eef06b1266fa7828cf5f4f961941bd391849d545d2a196a73184a92f47c2062cfabad70bd5c084150242cb5c2a6b5feefb882d6a3be8ca3e55766fa39aa600b7d4f9f3d43aee7560a474b2fb1047de3358aa0f8fb485f16d7dfcec2ba6c1c83128ab0578a4f0d75ef790fa44b8d2b45fdf92dae8398c4e514b935dadb68fad3ef3a231ccc0fe2e48f7b6fb50a4608a4a41b794e2bdc74bada7c216d7967c8d2deba884253180348eb38ed7267e7b48c68e56d83e9c0edd72981bb9b70f39dc9e803b4af95117fa25106dd022003d908fb9ea5dda1c9340e695bae9e3f517c26e9e3af54c457b2082f8e21e06149d3e17110faff566057df3dd2f17d9d276ebc98eeabdd7defe457515fdb65e9d7df7b19aa357fd9fad6e81956d9e3b199442eeaa24aacbe0c74294be49a1c3731a6c46403a44c3cc2ac82207ea0b1d3745dfc86e8b44162f1c44e032cef3ab81f400dd5a0f8ccd8e127260e954d0c6302b685520f0ab51bdc1c239ad0d90badde107be23b830145650f22d69f99493d5b470f300c8b6196ce9995e291e816ee96411d682539e2cbae19a617953db6909d8003884868ddcd0d470c255a403e9b2c58dfae4e951be959d359f5e042e996cca84c0c26798d8446e14d79a0baa501a09f8f9b5c484453f81d3e3c78f86e6d7caf871ba96db2c43ce480f85707a25d0722a1a88a79e2f0f9f3389e13cff3f7cb96d6f3bf96a1df34a11f7da7984272f29e6b1966f6d4e580f6a541464f52e8dc0219d29f4bc4d991e028cee525b8a2a9f771ef67915180e6ca4b53a647f7f0e8b2945ae34ed0e4060e0146931f3600dc53e9c2edbd4cc6a85e68a76660bad73c21660c6978954e53d86cd76385e613ed22daa578312946f91b54b3c2d1832bb10ba31265a48e75370cde8fd448b6e35b38ef379132060db04429f8599d5910914b05623526a370365b55730b397238539c39b99f58e976e94f5aa3a505bd807ba00a2816bbb1680ed7277811d87c2e65926e6805cd8511db62a4ed0d259a408f3584d73eb61e014f24bb07dbb0fbd504ceef42419bd3b4bdb15eb8afb0220604e89e955072b46deb78990ff25c3a0d5df64f6d22a23e4f83058c95daf0af5d014decf28dde156dbe81c48f433b961de3292c6a0f8b441b968f0ef0a208dec4cb21cbeed74920111b745b8ed1274dfddf4ba2a59494bf5b77e8b54c382f5f76608a88f2416e0299321addd2f3a650ec0395c2a096266c115362eefbd78a4e42ab7b1d1ab8a44a6e51cb2393831c5a5cdb2c77ba9ca8a831b7c40388a602068fa68e9cb32f2a7efe7915cd74306c6b2c9414f40ad5fcf206a2c172bb1322d722b7368b91a6446429f549e4f847085d29aa6b21bc071851d6d443f4a85225b4f2ee05fbd5b89a355a1ab6ce4135bcc1b5d0d912214a5f511d79c9b520a90c9fa9f04117b6b7aa3770262ac8072198779f96ce14bd3bf8346dab7e167950ce3f883c4105fab4b57b8a05c9ca2517e8fcd0ac527a0a6c7c020438a67f6f274969b749c7c1ee7b73ee67fb79fc4412b0e74e64c67303facb3c9b358ec17ed0c34463029f521d6fd09ba0737e2494d64222f3f889127e8e49922c520b6a957f28845232db02494ba2c59e47acefd57c01cf398384e3220fd2c99307544cdb3865e2a3320b109b5162f03574d80581b141feb2b4004e1d729a372adb4ee338b4f0f1a42d5e3aba16a4026c932d0dd30c1492396e100be000061ec4c03f9f3498d8f0aed3991140af995267a66d1a3eebace05e6785460a2fde4f62eceb0283afc8965375e9291e59f8b5c6786da7ca94d03964eb70786c30f7960623061cf5ae0c3df01da228eddf6e94ac797f8b87236a880d69d03c50afd78617108c8a4e2f3f407c7a5504fa9716d25d813d6bb871ad3a9ee1ac1b44a9bd052b086a0179a0516f6a07532a895000a5e5f05d34c966c31eca42a617e269de80c6a4fd02c178d746201849efe6ceb4ec1709e92330a205d15c04c504690ce1267cfa310678cad678594f09e262224c713b95b0570d0b2885beeb582a6b320a41e4f716e592df0e0b6a91a1ad7e782603c80ed5dded71c600dffb1cbfd278cbd598758bae19b0068e9dd4c48534322c94e8d416921888c2a559360ac1fc0cf39a3c834ad7c8c535d051cc15aa75ef8883016f6af531ce06b70b00f00ca7d2dafe1a400d6eb9286e775252fc8427b9aa60056c4fa905dd4f371713683b62722da5d09d02680882938a8f694d053b139d6d735ea3db15c5443cee5e06fcb2a26eccd7d987f09114844e250ce2597fe76e24aad53e4d22c88533cc9563058198f432adef204b1de1b8b6e6c49f27d3a7c93246d87d2145d89744288412714a844881322966549e3b6816822700c137546dc4d203936629c74c12383035b016c87096eb7bd044eea4860e5b9847c55e78d6cc98d5802eb34a9ae847e042c55c2a5070544f2c235a3ee7ae9f94fbb945c49216efce16fb89885de58c774a3cc53855b6386e1ff845e80809a7a9eb033f5e9349df656da092b08a0f235beee4a9543f34cb5aa7e41d372ad1e4b5171a248c3abd2fda8f089b40b3be3adc912950a66407f5d1a7b7308c8530cace3b930254bfc17cdb1fd5e32b7e2b032381bffe77c8a790e434327875914c8b4c1b0831b8532b5a9a58a27c363d558b67073638f555345bdaf34859868537a4c7d48d126a0e18a6004e04ebd1e438fe2c06eb8d1730d2b18cebeb3112fb3eac00fd7255842dcd41b3269aa49c24e8af26c07903da4fdc247c5ec6cb1a7c3e8a10d6a9d818f25e6b000807a56552be0e0465e06f7a3a5b97bab903d46f29e2f4ec95f2459fcaf4c6f88286b2ecd0a1daceca64009cabb4625b62d7aff1100259d22fbf90e804b073c0061d0a2dc8d8e5a8a5736fc9995a86319b37ddff36b0d2decf8bdaa6a55f28a78442d605c16ce5a882a9c6dd94bb95d8f7af9c9f73d3456005f656561a9a5516e92d381d85268fb49881e461a51956571fc15c7903e186637d7b10b8a28e505b0cd61fed3e0b9f0626d1f46f15841dfef59308dbe9a4b44a565e59166164fd6e42a6e32e7ed9f40252d7bf3bcf75399c05af0a57b147ee0fc0822d71bb96f882650fb3a98b846f58ca0139ac0c76ca23e5050c5838dd91e880d1680fc66585e13348cfa1d200008960f027451afe53c31cf67521f3ecd6281968ec0e86c63cf7a1c77c5041535259d2f818e9f99ad81b811b98f3777462c2da999e37347ab4e800c227dc793f06f27830fa34a83cfba4b5e9692f2cf965cc570b2f5e1519bedfc2a159868849b243aa7a99ea34c228f3dac6ba10a940acc044c10ace2c1f8da0b8a2f31cd08005a8cfbde2f3abd57eba86697a2add90906038eb39e26629b8abb59b1633c274242ff953176f66da61a0307d752302885d70d895eeb60466bf09b10495d676cb6c58657863e499133dab107aaf2c8402edabd41064b30d0dab0131612040d51826678f043e6301d3783767c129e7294eaa1a3b57291b65e29e80713c180de61ae7903318a1824e91d103a860a9930da0b8b0447305f88159b6e597c52c1a8bcefdf514221f1872860f83c7b65bd9c6e22b28c4c6d84218f2070e51ce40e71c48a408ed065493615fa20098c108a392b3de31745960840882302450cfd50d7f4fdee4dbae610104f9cc3e4c30e08a8f7cc2b63d966e77a15b5c2d64109fc2ee200d70028c17fd53ea5156aeb4793cb018be92194c0d7cc1f47476b312d96c9850b0baa3c321396141ddb76e68790e915b3700dd2777538f6a6b41bf80fbedd6c6b6a7af07db475789d5d941e6b3fd33c2de427ef224d3462c01a74f7b702190b91a8450d42f6c6873a60116c098736f4b61b1647a56f0d673bb930a4c7e0bf7d5f7a8584285ae22426a4d4a42adff6e511105d61d7a1b2f93618c07ace167cfdd8e49bf6f4d40f826ecf217eb0bc53ec8617b8da8984bbf75090c6be44f46d84d94eaf7833b9021adaddf85f2525676bb7f54af12e4e4ec21407db5f1eca253b790af7a27d6eb4ca6725b259ea4646a1b86694e24b57521e3959174df6c3a8e448cdad443b48c17295c5a1ed5e57d708321daa990a3e2ca731d8c3cb8e1343332f0499372ec91146d57f34c8e0f5a9096eb496b4b9d45f6650f0205be7d529bc7b482b3e91430241868457b7ae2e496e04665ae79f05782ad00d3d8e1251ec1bb29220340fde23d45806a225d2a0b0e75198bc52d4ece6743f35ee32c1a8e47a83397503bbfe42f61d9d2df912910efd82c2e232e8cf8516fac48baf2cc9a01a7cd5718e2d0ffa5e4261c895e006468e60ea0bb34c658d2478ea64ad25321ddc557e913aa5a483bcfd34ab45c3e2a17cbcafb8c1132f85ceac1bd6632290f7fab9e30cb5557dbae9c281413ecc617a11a2d9cd2dbca6718070bb1d7685b9473373aab727925d97089774b5c08103a4e3756ef8a42fa7a6b4c23804c1b93ce0c514f541ecab3f0971e3911ded50e358e2310c035eb592e0234d86d75f4d967627ebc2f9397c14fe426280edb407921aab26cde800f77620ad28b7a23b63b321831682bc70404e3ea7dbbd0955c46d80274c97b3485a43dd5430ae56484c3ca4158ca35e80bc359e422ab78d395e83debaa549969da253a0a458eb1dddf29a2af7cb3047f40f239d15ed7387cf4f3b6f94af78d378073fdca66ab63d7ede7ee2cf3634ae7bb4cc04e9d50bdc8677f548d7f56d0247e5dfd758ae596175a3acef9175e565e34ff1adf86d68ca3cdb08d901576c89d66e03133b44756a56d04e56933fb7f457d2e3fefbfa3c15d81ff917f4e483a1202d6cb7746ed3958c412b25c0ba8039ed77fc7863c27881a54d61466b7155ff824e6af9b5244d60154c6fe1d50b3973034c8dd590d1086a107bd08e727a1ddf3c039bd85f796c4a17b2b922c35fa11a638022b09f9137818601c8ea1b8d73581b36010d828ff7218d25dbf5767f18d5a5b9deab33e2a7f47fdfdd849f220d7e8077f759debe1c133651337b1da6ed5a0f8268113e927acd6035e11db058743d3583afc312095dca03066e017bed59ace8e180791399cee222fcef6ce3c6a412865b85b0fd3164bc5a45020d0619f9c0b1c712568617c11c3ac2fa96fda235326c40f07442208c2b4a1b533cf7549d4d2af302977eef04fb77c73bcfde62603e062b5ac03a73b126f9c44c3e0edc8c69f28de97091d259a8300af8862a772e065bab37e0bbe72e59de430ef119dca0dc5c90b22531146f0a6261b2d669a5633e3dc0147e09226bd2c10688fc7f596384373ec32d58fda4f73004ce467d8d06f5aac08d02b90ad37c74617970e56f13173b9a548127c77cfec4b68b8e9968f3d8e913ccc8583aacba29931f2a89901069960d8856e4d783d58e8ec3c80e4962754d504a92f634313c532cf79d41186c378dca55ad5de18bbf07033ce79f09dee4520d192fbe3705484528bd175064520e9dc0b33a4a60ef0c925912c3fc1d720b1f9977c48198a1ed3379d9277e68a9c1a2de7a056ce1b609d5ffc7eaf9256d23135048627fa7ed505e702e3c9962e69f4a88643743645ff2d143043277694b44fae2baf78a18a53fe0d526aed497489518027a458283e2bd79ea8b5dd0cc910e8c287a18293f32c1a145324f38b0ee19690cbe5b317991246704e3ee26d5f0767b570b01b0ab876e7656d49b0ce12e0be185182bb5030122d6f018753185548679025b3652a66627b342cc75b3eed8510382199d7dc91b79906a6032552f551d9fe8ac868062eac9d28e7ccc6a5854eef4e27117c465359978dc2506513b12855ddd8c4406ae8e80f6daa433082b8d3bc3c33a0303650cd90e6cfac44743dcc52138016282a19d10890e38f989de35302361ff84981bd3d16d0d57e6c96bd903a632e774eb76f32aa010d368ef2a0d365da123a2fa154e5993c4b636e91edb48e12aca2e265f65118873a4245ff52d0fa25eceae9c19c2fb5e4a146bd8f93fb34e7d201ada72f12ece81710162e0f0d823d736f1d101f94d225034c868c23e00cd1463a58c538951d01000c343d8253419c4de3ef58312911815884f75530d39f6f8380fc5798c953e715ae9fa8acf26d42d9b58febfceb2be769a5a174db73d4661190592837ed4cb60e4d236b28bc1d70cd87f52ae0eeaa36bbefa8a206b2c80b124750baac039c4b1ee665b0306717f4aaf436d675e93544b236f7c29c02de76cb55a0d9250652e62e8538c698685ab15519e3e9b67a36aa130fbad2cc45014442732a5b02ac76c242fa9b3afc48e01a9ba60a500cd86a073cc84393f1c42ceab493fd53412389f0f745bc575507dfadc71d91f958588d4ef2224d1c0464db1d335330f6332ceb8b58fd82530c3829ba614d0f7d256e1f49eab18468a47cfebe3002c39a401667431dfdfc78301090e2cf4d1456e3bdd9e422a9a0ce27296d2c758981ab960fa1e849fda9151183f0b4437cad330b8f9ee22027666ee0ece221b4616649842b622c242ff59e3f2ea1a289c03a2cc1b1ef147f2caa476a1c5a82f1e7553dc47ac6c46aaa828fa2b8e5ee34ee713932a9a164d8094c3d6cfd5a0c9129f7a25b69388dbd0723e98324cd5f9430d760a7e85b135f23a2e55953a071e94d1b9a8e85b8a04661a0004918868842bf6e7e71aa5d5f5c26d2465888ede278d4a13ab708193486639094635d0e07b6be91d4ca5edb87d0666b6684836df0c71a1308467f86ae1d4879839256bfddb1a498a21357dae96d18c1da18b81ac5e307c3b24ae2030271714f692dbd9aa05d3cc28ad714a232f5cf9f5e6332fa0ee8cf9cea32a8840839a9b50dcc7fd70b66d088115d784c2ebe80e6f9e23beec1cd633b744766a5734f822d35a6e7db114aca3e15f7259d4d5136be65fa80a99c527a81c000e9f9eb4cf19d412ae9c7a364667b623a829527807fef694c19d316ae9ff9c5148832a54fdaf5c249d39422ff760d011e39f3a35dd27ae06a16a89414789804e67667e8459d807a53c238dc3218f312de80889b30d0781d4472463e4923a939cce1403faa0441d1facc20835c3524e1f6f526790e0016af27d20818678ede76bff12ba66315ddd4747a56f14dce3e53c45fa5f0027721de8a0f033805be13ee04718477c4a1f4e15a909fa5847d21295461674308297e89f4d0e30509ac9828e47cb8a8227dddf41051320dbf4270fcdb8ae87010e84a1bfe12a3f511950f3119e87579c85eec72df87121d5f3437bcbf42206846e63080fab39f20f3712809926b8895f6cce68e1adf7d5e1b91f4eb4f8127b991605e7afe6a7c8af4a2bcc810664674cd440d0318da0c526231d2659d11bdee3b1ad9d39bbd4836834108920c0356c098692f8dbb90de5a6e07cb733e5a63cc2c3681c2406bb3316e9cc7ec761dc63205282886b76cf51820832aa5a33b533d0d185d11decdb6e958bd53ed215bc108f373ca259edd1d063980473baf125334bf5272742b2115219fd58dd9998ed0c74bc215a65185e24a14e511d17a307273811adb207e1a002f8f185d1c1a4c9d81ef8efe000e7890775c07d2139f0709f2de2c0cf17b118e8c540972cc4d3f039d4d3f1d3da4ef0e73bb33610e864fd560729109dd67d14e808065a1cde06424bb659a54af8227ab5fde778d040632a216b8ef8bb0a40804e9e66ec2aa25dda6a296a0497e9e77f5cded67f52001d8d013af1b2b8078d2b5f936cb9d3383b478362de1557225768440a85e61cb082d0f228e7d7323b7b383db88b6862634d13e91286ec976c49cf8c2beef2e7361476b41badd13062bb795dcf6818f57eaeba8019153d4d7782f42003fd79740564647c8a7be6d452e7730cf73c48d44b01b5a6db9947c28118839009b6eca41fba0aaef2de02d432423fb78cc1674ec8012ff4130047e7e2e8731996b839441ca5c0111fca9d0a2b97c14b174aae49a4058bde0ca1cfef1f1bcc8537243e53910ce8858842562951cd7ebe4707f13e950e5225d8b5a89ab5c098b99de6cba70e1d93ee6fd7b102e1be46aa6e5b8374affb4a042acc33b277c2b2b595eb958a66082f1ba1578e99ce62d6996c54189df0e317e4d06e3179819b0e22d196e365ba877e522807bac50ef285438a1848c624aba1dc8798a11e63cffe2b23f629ebb97f2122c0653dc33c1372fa80706d283bc8c4c90e52e8245af8acdced0337143b466bc4f372d3d512a2f68e29a10707b5199f1abc17393632b15e4d1ba056300297b86e063aa46a3883195cda5b7ee77b98e87ea0986eeccc54ddb35d71a496a0542cb25cd0f8f5541da4dd7a69f18c4e50aa3a086760d7c6d44799363ce375b43c8ed64593a8c123dc31f6b645476758323350286f14a07914a64490e237ad4aea377e40d44bfb2685a2689119483d90efde52b596be56ab40602adc6f35a656ce3f30ab96a083f6804577811b590d74375a033d0c66587c74bd2596852f76bcb9ec8ecb3c70d5e9c671bcc36b0e0fe757072bec586a6cab0af4c41c37507f5b1758dd7b72c269c19a6671c57cc2ca18d6dcf4cccfcaf8f0e65daea52ab7eadefc93ea2360fbc9812a18969ed437752e363ddf5daa3d21e9cf4b2a3c860f1124696ca37d901f9a28f2a596691693627b6b25422292c6554f84f99743c127e4720196bfba0fbeb278bb06271997a374d0748c9bd7db773459b045df2a48bd23c6c8a337fe3b48ebc9439f75d8c6994d2b0ca4c917df8a0e625ac8392fa87bed50d39115af0dd500946b68840764db4e187a8ebd1aefcfaea0a9b621652c82ccebb42454b82dc068d50d3157b6272851671ed75d5d69e6c158def5f066f895f18b211fd6414280584dc23ac805f2373203bc0bfc9a7456cd9d10ac23bc45f2bf813c80c7ea20849459b5289cb1a9c13f9d8cbbc58f83000f6dd13dfc6250535fe017037ba2da62cb11d53a6148c04bf08bf9b5aec295434664a797d7b8dfa0a84cd090aaa208853fed5d0c4bb6fd43703862564f675c04a59a0b9c5367d766e03620703aeebc4c5351e54a299ec889d6c9faed09fbeb58de41fcda0ea23ed9d740723e79db2c3b483137fd2d866537e356263fd4652b1b7338b59575d7d286c6da6ddac19d18d795352b1f1595883ea1696ebbe0a6e7e8419d9bf6d5f84e2d938969a909165360a955bc4950f14db3c2028f31094a4433292fce5785b00ec0904feea71bf5d789c118e3358e638ddd9170ac237bf38d750d93994c9feccb70cfcde1027d05216e95facb78deacbd8f65e706ca26f2832fe94386b672d49f3145ebb8cf95ac41736892028dc96f0fca28bceea0358a7102c474f27fce74791f40b688ecd8b35b783bb7ddba9a4d65eeeeb6e60a49917a6d5da84436c553d9887ec275566bc1716afe1ffe98f7c4188f027dfa9b52e3284bfd84e46a36c22df0cdd88ae1529a7b29a2981b293f8989243ddadc8f508e7ef72611f1f7bc3681d7104c88f0e174f351c9fb98ab387990c295a43c795002c674e89b4e957e2d3ae60e31a1ee90aa92d45025c03f58e237926c8974ee6e9325c7da5ecb4474903c30c85a32f5fcd7a9fc21198876d0ebdb59520a0ebd8d34591b2766cd6614a7d539544bcb81a84417e25a03f102712125b98dc6e500ed208fb9db2ac196a825eb20afdbaab822c961719906947d9593feed6b079d0a43c12d3819e27ec4096081f0bcb065e1a082912494948739866cf4bf1ea1f37f3295159a9460d0da0f63f0ef3498193d51c341fb6154e928b7e9ba894230b62db7218d93a1589f4cf64589f50a5300f633cc97e17f86791bce8b0d8ffc8304b22c2a16fb63e2c4cf0a3ead3877c1eaffc8c477b85e129737049e23465330aca0c4c9428c7038d98ab238da9d304878a287a182435e53dc3d930ad64ccb63a793f647aa47cbeff9de127ca17f784e9d8ed4f1883a1ca9c721a67eda41827d2159a9b48d5a4ed91ec9fdd1260dfa879189541071318db79cbe9e67582f19cea8f7dd9e45b0fc800cc92b56bf63b6013dc2f16899f7e21ef2e9f64b6a6712b0848415139ebeb31577f5e2f8cd8b67e6a9468e4622e4f0e4caccad88e6901358ddd2a26bdabdb48339ed0c950a0881f2485d05653090e43fc86a50c7d56f6f0a4a54771c8d15dbd3d07c6b7dd7e14e76cff946175f62effe9d98dc99ebaa7cf1796fa7f910c6b2dd594af43fa547b67e24728131f921082f6fa4496f002763a5b11607a29850a4292b4f5a9f04cf069f85397f31934b3044525345a92f6455c97efa962a8092e4baf794cecf6f66f0cb4bf8dd401133c37dc6e100d23824318f3082506644e00549940491508caa1d00034454d97f808bc3cae94c7c51e656870a68496437121c79d0efe5f3f14f5f3f828c5b38740ff10136b8a5a4809dba63733bb97a13067d55ecb212ddf5e5123c9d08a5593c28b639e0a994fc346ec212595a669be021e5aff8c08d8ffbc2aa9562f63369e529390b9f47d0eabb8035614088101dfc321dcc11736666cf4356601470e2808712488318f65d716b406f7fc522b7d13e66daf46dda5f09e88a0669600da20135a68626e88590118fcc44754380acbc813c7c83bad85ab9c44274664e0bfc24afa936866280ad9648c0f98a033aa06c3e7ffc89e9d26c46760aaf223ac47f652675d491c2298913ad3293fa4097864eb36e537f6bf3fea2ed63aded2f434640d62ee299495598a9e194827901f8cae23a16a9013690471637b42af49536268d3460ecc9a5be33be01de4b3a0a3b9bb34482693eca29abd4eb993a52e360d2d45f7704f888ce5420bb90a0ebdccf32393a2d2a1933f51f26aa5c7797e9dbdd002f1d94224a53528e09b3cf92f41e8d85736e54bf4bed023f4daaadf3bef8265141da67ed4eab7d68643d02f0bc11fa14d317354f5d1eb7ba5fc8afea2980abe58e7e8aa919f1c0a5e61f4c8b6354e62e72f352598c024362eb10f93de5b097e7bc1fab85a91413ced79aa4768c0df6494d5343d1bc1cad89a9f2a3b2d61aa81bbec7a926b76b05f74e3f18a146bc5705ff31f3f2b8f7d6ed29fd86dedc07c05a7fb194daf491cfdbef2b465b3902c13ac15e63c3e623787885d43253fd9ae2d544b175dcf6ef823e9679bfc3a6ec8624c71c12f56fb3edbbd79925dbeb31b477c8c8ab6fcb38a74be0cbda0d44ef30236b29b38e09112e8e499c8969d91100e01a709b25a9ab7471dd78d926cd5e16364a425c9b88e918bf78cb8426d8f2c56b2eb652217f0c3942c962009ff7c0948aea2b55d826c48dfa30c5d1cfc07e20d6807822b26af1b52ded9f35b1253624abd744d0c166bb3d026302cbce1889bab954254bbee76ce2b26396d814ba6e9c10288b6836fb3796292336c40d90a5a0218212fdcfc7faabddebd0b4438e1919845aabd235251fbdf89cfc39ec2ace3493da42425b90aeae442dd003d7eb3251931d617839b9dca4be0a6326eaeed5c43017c37c7b8de15325c0f30f8e29fd5482c8b922893ffe13bb842a45fb95082ba896482216c23b3d662da2e72ed002fc665ffc2e195029302a2284ed875ea6d015f14f385602806f2ef76eeccde08e754f579b2a0a11fcdf51a1ac031d246443f82bdc9d2cf4fb539ee0c9d98840a7a280632d2379074b042b33f8ee2b446c53258021777a28ca063dc575085c6497a41df93b7d1d5eeacb68a57d32e0ca0a15f7629a871ee07f803443a1c122eabd2ec82fea283697051aa52d498e371e856e164174379929deeb48e02dee06b84432fcc09c2123fc1290627d516e3ce135188f3c1e6f3041494f1a4e9ad9aa6f01ccd3df9d3215358e69d98fb6d7bbcde792bf4429cac082a285c7bc32562703020b7b99e3b55a6e53362d4bd8d95261f1828d2b8fbee6825a7f5648b6b8e414fb8fba3de2bd7274f5dda521091a77976f38a909b6a73f8235c6f9640549c039732a64f153c38b9642cb8a2550f6e67059d6570ca396699681ebf5a5a109fe5d88fde77ed824429bb472d7a8c268b02b8fe17ce5d612721ff32ef1ecc822c764d5c7dd451eed70abc6382ad00254661103edb237003a6f9535c46112c666b37780d6200c6de152dfaaaf94285625ed3272cdff708f187bd7157408cb354da78f23609090180875b4b1c458146bfeed6c64579f362eb4eae863548ce1511b217fabd2c29f1b55501aaa5c833f871d75ab547f7781374114d7fe022315a492f91c36d7fd12ad57bc4ac835dc8e7be5b39515c6180c0b157e96eeb9d0e5d15581d512d069a9e22df35db2d76f1affeadc056a3891ecfd67714e509784f9206b1c221f2d4f6f7569e7c26c09269bc0b7f04fbc2cc7e2244282004c82d8e6c4e2ba821a301b3f5dcfbdbba2a5bb34fc793b3678a0f85d0e958a68f850760cfaa6d22554f3b6e97f86013093205b4d7a59c2d0161c39b87ffae46553da6ddd08225e10cdb151fb2be75676964c428f31b38e03f691d95014135292e74df5da7c0634bee3247599b8285c1a45a2288ab77fa126a5fb916bf6880f6a9b697dcae0858a1684bf3822b92af9ca9c423075ef1af90bf40391921e7b0b31ade265b68a27d32f5a0b3c28bc2d0f1b9d19d2712be9759da00381cd825068f3a5caa053ceeb4fd4e744b3fd4b821018dcf819a40d2fe752a2d22e3ed16684eb4409005067c4f504b0493968a20edb34d8f4af93bb7dfe0b755cf34acab598103a379d1e984b1642a6bf4e5b1a694e439a6990665ad3100a20d29cea7d2f1e882b1672bbd98459fec6b6e244f29180f5bdd686153e4dd024939ac0649335c9e42632c11009176e49bc515c734c63cca678a3b8e698c6a80dd1e622cd11cd639ba2a5093c71dc356d1279730dc42b1238b4f9662361b047eb1f7e33ce88e5e3f8ae134eb6ec75bb3d8fd4c69b893b85be074e731b6e565df48b5c2cd23a43bd637698770e9b48ba6ed9d4cb2bcbb81bf0c8fef7a45c0f9a460d2a385cf6fbd228427ac1584dd58d1f86ba1a53bcd25c38aaa15d418ee142ccff5d85d7a3fd114302a8e59484f164c3f738a74ded6c88411b972c697e61eaf501c0bd20c9a726d396774634a1e014107221c71d77a0bb7c3203d009313482c4dd16ad6fef431768cc96958556ad62580ad2b67ba4335ef3815e34039e66bd7998f108c500a6e99e9110bf448664a3ee45d8211eaf647c37dc5c90a5536280f69bb6e35e74b9aadc1729ea0256da7124421d8e122100b10276a3e2d4dbcb871c34e1cff32ae51bb4d8ebedb55e5291e81a746b6941e7db5ebbc72ee5a3153a1feca027d2e2b1980fb456d8eb819ae5e08055f664e98ef1580636d7d6f6ff8c5b8deda4cbed4d5b5babda16323426600c4b5d6a0b0a043c8d0c9bdd05d5dfe046094686c125009d582c110938738f84a1444dcec29355e8cbfef54c64c1774704e5a2257f6718eb42003b5b34ff03f9d28d887206b9aa48763063d513216b286e9a18784642e9d5af4f4578809921fe8bba264cc037078117ab21e9cf69145b9dc6c006cbb0ce294a251a1687c304642144d5c50c867820fe996670741ead59d0639d7d69b2c370e1b6cc9b16ed54b9f43612ffab445546859d75c493c1142dff35b72f0420eefc4cb9bd44662bd14db2c87acb4c207a5a2240a2d907cd76a895480d1568605d67269c6a6968f724495aa0401379a813f5e1a95a03c98b468b235c2a4b3082eac4dfc0d31a418b63798102a08d314bd296958d512cb4535c5ad1712d2e9bd86e190a2117bfd4b917d45bde0fcc3e733dd47a215f3a191839d279dd55030389fa4c33593f8089f5d4ff64823af35db559d8a8f901238dd260904a8ec1a3e20744a3a561942a8da42fbc8088c8fc58bc2bcd4d620b6f60b04461c257c5be93f0e98c1442b9c1c42b784d5df6e03e4c261ac2761e4a41e2081fdf810e51dc2cdd8be3a1df4b188b4cd261a879a26089780a9585de6254a17e5e7c72bd09b726e5d8141f4af4fe01825f533ad27a333da8d9cd409d2037f39ff8b903dcfb9b25c6e0dd0fb671f9b983a5a12556115a3764f6cdd029db302d550183402c53d174a06e4750827e9869aa6f0f15c847d058810485d0054322e28560f772a190a7e4c1bb76209870ea01e98154221f3657efda4111f404864672f43d2c6208cd3bdbacf73641e952aa20c973b7e1ecd06acce6f70289748658f42b6deae1959809debdec6507fe02ed25281400aaaae5a0bd001bd805cb76f0be1d8ad80e2bbcb70f1d24e8a1f94bc050cf7084dea4423b5159e6ff3879a5c0e919e235f201e99ada1ee0022e20b15657ed8b8f68a273e064f4e4d20b47c0217ce043787365c10557b0783324c037a33669126c45e9b2179c7880653073c9cce8fa6d06bc47a0df8b8e35983920d958174cc58c669866c4e63d53e749cc79793e13ebb5c332c19d694da14b33842b73f73731b96f24c0752506cac073d0753e3a341e7db213ba0eba3194bddb27ca2a88fba24abd361c1f734047a55f888960d05fd965bf207a4dee3193b445046e462e2f4462ca02e76e0a85452642ec1a81d81e8221417460507abaf7e8e006a3dfb9966874ce7642d731b36097770dd2ef82902e537df685c2d98c4112bc50c71af744304ae8f48dc617579e9cfcd1afba17253cfa4836baeb9ae92167f1cab2fd45f6de646fb8223b946c33bf9270d0bfeec4f8e9405c62060ebcfa1cca9fb3307e408e1140478abbcd29d8392eee17a207d35c6806efbb891e343824a642aeb0283f122fd7d40faaed56934028699138fe5b95a9d674dff2659f3bce959da70bbefb6b5062f8e3ea9b85d477f540cbe283735cb28210bd31b989a19107c4a2c184b6d9586e430b5570094d4661659f4e9b18662bf4e5b469dddf02a2426952dd5425f7c3a212f96578473e722f715a797c14a2b213b434b1a48534c5b65a44b524bf7156e9585db89b223ebd2e2eb1b80d7b23097d1b230e7a21dfb4c8d49e5189f8d9b90d6987011e57d41de9be476c92c7dd14324c1250c6585670b673b5acb8905eb48b1fe18004b7c95f347592a0e6d4fb8690c23dda49ca259338145d1d17c6297fa4fc3dd89f2cde0c930e428f9994804d9c5d4a6418a617aa48f419e223ea3084e4bc37e4268404fe1b2a32828f47ca386e171952c6eb9a87590a21ecfd8489187beecb07d458696f71f8baac15a8842411e357c1e969c82f1b68409650d08dbfbe33cdfde06aebbd0de0b73180055e703584589d9bb1acad81e9fa88356f3b25bc838e5dee4bcc8386168c08b495509017a41fa30e5fa55d7c7505bd00722dc412a2058310b8ec3dc9e8c3f74e3b00e543c71e76ddcd854b92008925d5eb11de473e7af017e762c86f4ef1e85ffdf60cb3efcdb51779de1ac8e0442a674488f44700be6087656dfd9f39f35c1ad7fb7c7e43b1673f4e5c52df623c6e7d1f1bc59531b6667c2117f531803f0de80345779ad5b1f8396c372dbc54d3e0ac4e7b51bacf89531ef2b46fb8d273f8b8206f9d91d6a0937fcbaf87c37fd93f12621caf07bf8e5ac5af8e33358885fa47c5221aa045af363c1a75bef3da81bb99f34255b71b8913ca049c2e2934a1df030b2ae1cee3f0764a15e282bc7d52a291f231585a54b64c343a3b3c2523c22cedccf67a103a9f05bbe029ecf6682287015196f30b2bea4cc8b1ac720488d154097a3d3f74195c78ce95cd0fe70946f9c0caf870963e4d841561630e7a4db7c3e866e6cf3c38e09c7ba8d4cde157d1e1e0b75a8673912aea93290b481c16e340641041244182c8de4d8091956d86b1b619c6ba11526c0b829b7432c41a210d2da79c3956061ea5d6a8501063838c280f7c661cffa11c9965818251bc030d7c23a8ff9cbcfe8aab7855c9784cbd50565255bd15b0a00fc1a1b6a90932b4ea76e428875112f3ed45d9b896054a318ad6df4d08cf5d4431f629e2e71f500299184b96432960fe99c255386d0790aa5dabc98c3e8ae8181543028910e50f64a5af38ad9e3ed86b2e96089e2ff196979663c0bf47dba2c4ce645bbfa1886ad0a5aa101e53d4b663f40df1a7225b1b4c7af37642e3d03cfea771195a89a07d64f849b159ae8f0e1937e958a8eecfd9cd8b5f764efd713fa1f067a81697e86ccd8cfc37540cd6cc37cf2583d54cf73775254575d500194105a3887cb7636415042e22daab84b6e48f2a23174556bd92849fe59ff926b7e538475f59c639468b1e451afc252cfd9a0a33af5d40d3dd0ce32fdf107282078883bb96682754bf03c7398e43b6635526dd5bbf67f1e0505d23b0866f9b4728f496157a95d1e25dfb698a072a67bdfd67c1d7f4693fbeb80f5148cf5c2af5c6f858322e889ede3628b150e382c04ccaa76591635099c06eb76a35a9769eb48686964788d1421c352e82d384d2140d177d873c27fbccaee4299471da2c2311a8d6640b421f257ad113b3682d80b572ea522a3d2fa92a7ed1d50b2654ed30b0e8c5e0b2a1a70c51a313354a031f739a7c2b687398d5a4f6d1e92f45bb941089457ff9565bbbac8c9ca456a9230e5e6a7114c213ffc7d2d352760ab8521e6e459cb78674b05205576571a1c40ba0ce0a167983d246acdbaaa1e4ce49ee1c7d6fb3776d62105873e0e2243c3203f04e2251131825ad17bfcd194ae79c4e859217a91afc05fda26894c71fcf9bf6a95ecd17515fe44e66d4a3448b512bda65235c864682669d0afdd7f2e22c7a9d98bf36e42d715e9e5c8eeb86fc471d34a287ca34ce7755c71a8c7af9cfaea7f473f658761d8c9397d1982eff104a7a43e59e436e64e6a8c587bfec0b61e68bf7a80f77c6016e56fe2a5638018269afe58d1ddc4348ff73e2b52bafe915f5d9d8c7bce8c4e1338cffe040fd9707ea7f4150ff1761f4a22f466421e32f8b7c7910198bcc8eb94b96bde698b6f357b9cfc224a560737ce500848aef5a1b6da27990681c6782162e2756e1edecf2313ac1acd078b6a489f006b52401e7cdd532dcce963a9b3a43d9687a2844ee5232dae413a2e05406b684e8c02edcf6d35e8589127e74c0612132c2aa2eb924d5ea57efda5b48e54193330ea97e9449ce0383afbf558c2547045a7ca9a3a8755df278dd12dda9b32c7cf79a00a736be90a1163a6e7ad984702482cbae1f3a1d949bbc1d1c031de9aa721aceee2ac22566a660759528bea8656e9ba03936e07401bd6340353eb38a032fd97043d14c8e48ba6123d0e81db0b538c8720f60370a649f952dc91c6425da52b77b9f79e4ea2636b2b9ea7a696b07db5cd16e5f14a1d6cefd6492757ca4f2a06566a8e94b98c98dc5948f3dc4547b10507dfba54f75b6f6f16a8b67ef1660c32b3df04ed4e1a8caa2929618824f01b3a8aaefda790d734c878731db640c9ea7baa9c5890d3eb549871213f58d42e09682f9589dc3fb3610fba74d8180cc125d1dc946e316f99a1c752e48f025b5b2595f1111856beee41fe1402e411b9e1811202176f459c51ab33cdaaae4d05183a86d1dfe67fca4ab62b67abf5ec44f8db6e765ca5dc6933c944cbda5be0947c409af985d7f3f6b94e8e48ab14286c0ed7a35f1b5c497a5170d66a70b3d845d0f8ba39d773eaf7ab5d45174efcf5741a7a282164cf3f3713298882a68cb3f16beed416d9d76ce6734c0e2f5f72b871f2259617bb8629a977627d5437c94cbfeae34c146884be461e8e68a0980c70bec2003eca5d415f39d094297c1da0a3dd476c564d1e7072fd52fd9121c65e115a3207d73729c6236731b7c987ca229420849e9156302c09bc88f8eb9d0cdf93c2ec253c4cd6e77a67ec002a19583295290579dfa31bafccd4e404d35486b6c1fbc3e836646d0afca6bbc7604750f5475fcd7b4e1c5fb663c8e7e08596d6d791fd3a6062d737a90005dc119e6827904ecf9a00f74f7d4b5f875bec914e9403078352825b244f28392a603e254fbe8cb097d646822221c0fa0483632033bfb2f5095c4b59e015f0cca8638ab02b8d592fee965c70409b02120736b03abad17e91ed87e3c70969d7abad5108558d39eece9cba0300fb265be9bef6e968f40911b793a223090c35d89597ac50376b105b47ba1e354fd9dabeeaaf80b29b55c3bafb91a4ea256c6cb6d8f98c60f327012a97c54743f6de36bdde249caa6aa808270d7a224410644afbba631da03e20740590195db04729003796c1268fd8d8a07a9e18184c4e6f5801cceb28e076c0b475a37cbacd73599947d40b4655f4b621cc206f2bdac921de64b7d204f7262eec02ceb56741e00071ee2d81def40a96ff180ac222e437d0784a83b80728c81a8008e628207367f35c1c049b8a7c85e6a850778575dcdc29f7ca2f4cd4514714e0e0c5844b0024b7a36e57386e5cb4da22e8c4549a07fb0c8c03618f90dcbbb404ebc96593cde41ae4793c324902c7d2781b9aa42f3b8a491013003c45694e8e099d50c1ada178d014a92f6b489c030d032dd412bf84f878011bdc56ed3c2ff3147f7a00663b70c5d35d938aa025b700550545bf0f715eb672f2b0374c1a8ec070173bd2085a6a1e49a8687d206a00888dad4b4eeadb6d63d570a961974c78697eb1329b70ae25e61c172c9b6dcf251f690e931e4991f7069aa2620c3f5405e87164413e5c07f6d43c1d5c8fb3ead35bc114864c63e13a4d53201f73a4e7314ca34c6a16a926620ac2ec7c3911448ea934233e5335db3da40ac89b95f050c946776ebb02624f472a166315013d7d4d955f23a80321945629bf3f7b116bde16e648cdc4a3465ce53be3fc86bf2f4621da2aa3ae007064844fd65f29ec7f751fb7436a8dda64f08f7f7a1fde27ad0f3c1cde3f6c6321b90c82a626c4c8d838e3f155b218cfbb1babba467db343ee5a618a4dd5be896c466ed86718e3b2a1c180e6adde1bd95600d399aaf218c307fc5bb40a2004a5687d1b816656d399e1e57ba936b876fabb09f191c0c2fb54604e01545cefcdb680b4c22b21141d53b5bfc6db4d71f0eb1d3427e0d69af96aab970e84c29efb73111d58766f5fc309940e63d1905a4814c44b3c8b06a088b24103155304e697d09eaa687eb4fb70ef1cba6db6d98061aeafaa2c8401262ba7521f51b29c50ecd8a64bed1037da40a54768bfe36bb492758d2df87ac7e9e44cb9549ffd049b34ab960b56764510ab36c2213567d56d5d2fcc2056090f82eb66b48e8e78b46fbb428b4c4c2a10fcb7b46dd152bed02c9a27921f8565048a450985188842539ec6833beeebc44519e3adf1e4c305fc2807904522b11e5090714f26697f9cbcfd3f43f42a1cb237ea5ec502d170e44e67f0f182c620ff82eaf37c0bc8013603e5250902b64680fe000c65614754cf731a7a4bdd3dac77aba2293d0d5be9f1a3d90f1a3d999f079e8ca144e454294604d7b058b953c12c1d94680b4748335641c3b1d43261492dff62eeae18c473220ff57ac1016da6cff2585e7ba9553d661412a41acedd2e35f0964bb83c10abdddabf1e4d247df391bffd3b2553d7af1171288c2bc493902e5ae999fb465755512452c645f7cde89c70c11587bc70f1cf83e467fc1bd6f8a82e9c557ec2f63c48147a246f2f1a63ae7658cfab8d97453171ec2d49c1c5ed232cc3445727a3129c81ae0871896195820168f84a0d9805b44ec52f80bb3a2e1b39236b3e7aa2f0a60d24ee4b1390a0857f1c762c209b6f7a17c075cf746085ba8a29d3ad14fa59506d77e41dec827c5a289f778832c0bd95382168f0765f13cd1c82a3b1a38112466c8e314932f81ff497522555c79820389e012324a00b37bb852c2713ff9a626f952626d34f234e9047195477310205c3f11e5e07db8933bb92d2537fbd1898d55826d252d2cd009372085d84d54d55b914098924264bfe007989799698be9fcce69285c2974b2f9fa08c352ea6be7a30f7874c2e3c4aafb1fd5de68a4854a7e7633280c9a4e9030b515652620062d8823b6799831cdb544d49a62d2f1a2047b0c7fe982c9b20179590b9c04e813fb71fd0a206021b8f908374365e2f89dce6a945d274485c70a1bf51ef6330dc2cd51c2373e729415e64ef5e60331619d435e06533f3184ef9ce6ffe83244bcdef345166af758e21559ae2aec534f09339f51a8670138285d561668a784356061e02388d80d167f5aefae60457101dcfd54c1f6613faa960d6170edd820df24f9bab0db96fee50b6e3ae6c29d5e6285a91f4cf240655c5e1f81b5e53ff5e8a691898bd6ec6247efae385ad7f20b06af5ce269a345f1d6c7f93ccd081f4001d083ebbe6381d50b49895e503472e79b5ee49d4e8b841ff0929b14c8ebcc8694da12d88c40f008eb2a798772ddf04764a283a9ead43d069c19adb940075e757385f5db9e2efaf4f88ee15809914fc76b7e5f06724f390e23d98293bd574174e420631dd51d044caf691739c18d2ee770348bb63bb56dae1d639d752d9712d3eb564295833b79706a803dd73e115ac85ed764ddb45265436472ea24ce7db37fc749201b6dd45e58996fe45754185ff02da03095585c17ce29fcb6139ec85eaf0c1c75758b6540c59ae82f9a352a6d8e6bbb14458cbfe8468632eda7483dbbda3501356d499d63baca820c6eee8a062856cbd289bf39621b931419661c3281f1be522f106710e083907529b7e8ddf7716f8b9a7a46a27994c5806b57dc8d3e910eccf4ac037626a444cd3890a9572f88cae995ca4c000f7b8ffaabeb9721663cedbcabb0f2e522c621739d58912dca796370b68da06ffd0588181910f892b3c3c8ac6674afccaedb36b9842077fd44e27402fde911106ba59ccb57b7904f7ed33d675fcaf5a50ad45a4ae8592454a1a466a4da5f1e3f12c847964ed89683ec4e7fe015be9fa0eece23dc020d27de2f12b0b3c36617371c0bd603884b1a6ee2d7da3d28933fb04d587a905090a370fde0159e6bee5082a25e4e97a45b8ef18e28abbf06b81ba4e68722f0dc38f7bde6d23b9d4b0a6c3bcec1733d84f0c45c006afc6ed434d3218d496cd8ed5369bc4b92c58ba752e024269c59f1df879cc7468e1610ba35da204f19a39830a49438bb450aea10f5a41b08de41cfc25875f91d5805ba118cf27399e997a1cfaf012d804d39745f17c508d8e5459479daa926befdbf906263fc5cd4d9a588d294504454b70925a7fdeaf2dee8106b8d09c5462e7232d6a9f7280473be27ced5019eff534e0ac157324154ad5039da9e60a84209d55a3b5d307340c3f3382a78aa037d9cf4185f3b2310250d8f819bd6b3f081467e750df91cc62ce628cc8967221af40765c1c4377a4ab4cfd83f928114314e9f7f5e48699b7d3eeea0b52e81342463b8412f11398297a234ff88becd271d43905df435ee7ce8eb69c024b50754c94bbb431432a9c881b09f2c9ceecafe24d73f215c301975db5f7a10f43101dabee02652705e713ab39011d248aa2d0a1f006784877224132378010802cc77b82e897fe5db453e3d2189e53e8559a3acacb995f3a22f2f0d05698167c94764ce407497da92fc2f0c15fddf42dade7b6fb9b794324919430255025c02de67bdd1e7436af75aa45c407bcf44ea5eabf347dd6b9ea8eb44a6ede3e1f95ac15fdeb5e63d3beb79efe59d75aa4e779df7f9f8bc29f27ce451ec55926759bcac85cbb44eeb445b7f16e7a8a0414b660b4af8643a994ce60705d5212a6928f5ead6339f261a1a3397f8c9a1680f9d686772438682b7bce24703a9c387e7f5774a3b8c6b332bc1ebe68c4a087f261a7aa2ef014951ba14a1f17e77b93c5154322017103dbc00d41bb5a118d0f4f70b032f0f13aeec0ea3f912664f0f9ae02d875aabd6bd1883e07f18a25a56340a1586ff609da91a9bf5694c16237dc484a917024729c543fa732e993c7e7295109e2fbfd96202cfaf369c0ae809a4d5606724fd68f8bc73ed5540e00d6abb1bb0de8b9cb19aa669f6b5ffb218d1db29b2ff69f67d788eeeb3ecefbd9ea799b6b70de1aef655328cc0325400d540ea01991d3e28102fc020031a201b74305dfec35018538504f6190ac40b30f0cf8006c806b44688082b9bbd0f60ffab4c2b371c9736694925071380e8d9de5f1ede6dbb59ca1b57869ee8df2ddfac5a02ef1b37a40ea9b7ca71db356deffe104f6739fb749d9882ea8793d9e1395c7e32fe1db7cdd733effa5dde349e9a597b90cbfb6ed6be55036faf7afe4e03be176310fc0fa14c17b64cb4e73ed3e53ff82b874edad1f4e1d5c34a3ba594ba7d6b2ba5b556eacd9f34bb7b36c5bfbebf75efbfa9e8fb4bc96dafb97b9fa3d1dc6fa6adc63e8da6b4fbfb57769b466fb7c6e2a7d19e4ba985e647f7620c82342ea5967b31064196d1286fd2ebce54b3499864aab113832ea3e9db23ab8ab88365489f24c36f041e3f94643c7e28c1ff83247dca4ab34c84e57c9cb15cc0a78dafb8ee77f91dea8adf86a9fa09bf8b097fc984bfc5849f05cf073c07fe791f8f5ce49f7b8eb29fa2a25a5334a68a3e3b1ff01c7872f3778adb0142257938497a8efca610e45e39356d7a9639b596d65aaba5d466eed911533a1143a59723f07ee174a50122d2b46f7ab39bdcdce69da2bc7d68d1ef9f2991c8a4fd7fef7d18da0e52a934f0965e7817f7e0fdffffffda332834f12512210e210a216123ce4d149d18841745d6b042861a70186246a6d1730692348a2801e88a19f93277528b2b2c5f5c491b9dfc4e8a444496c8125944c4226211b14890d612535051992a2a5a7eb6c64e22231770f4fc910b383c4c99f28a998147186fd9e5f3bc96969616ef5e8c41d0c3de08638cfdc318f7e86a2c46850aa4eec518044735f625a3398c43bd0581608d35d4d02d3ffafdf7620c82a21afb7afb7b3106c1086834aeb1d834ca5b946bec19d87bf9dedf7b31de441bdc8945342a34b1d747248b329cec0499bae53d6f7bd1bb13561334545726a03f555744223d442222119135250b1cabb10e5255a80e49e15e5daa84b24ccb326d3ea5ee533f1ef5a5bf4f7fbf968acec359337dcb6639d108070e1c3870b05412976dfd7a74ff7d5763d906198887b4837bef652155a95d33791e3e50adec3a54653240bfba7fa65bc5c05ede436aad82fa1368c20174bfc9982a4ff4bbaeab226b02bad3b456f1a800e94ed21ba268a4bca726655ff2d96cbcfd4b635cdee64eea60792ee32def693f55a76dae5f0fff7838582a995ebee462eab8cfc767010de38ecf8eeb460104bc0c2040002000365c4a2d2c243c127d5ec76d57cbecd4803ad125a9cf16957b65768c47589aa4e5686448af32ed27181fdd215f32f425b3400d29829802860d4aa0a02cbd062907b1f8b6d1285584a18e47a0d45a4518ee7864477b5a8e475ed9aad3827e447334e79c42e889fb8e335d2174cb375fd1b2bc12ea175d91d6666b5d31f9d3e50d732fc620f8ffc3711c8cc65d6ee3388e0b9a427ef2f74a2f20cc9eb130abc8c050e03d5df24aacd65a41a8babaf28ccd17229a5c0eabaa1a03bf94dcd3f6ab4b2abe80a7a65bbe79be80f09e3cee535713083c289e2828140a859a759732bcd2d81f85d2fe428302c2281a0f7dc3ccac49561a7d8dae4274bdb991f474336bded96fdf6da20b26160d4b068887f3e65d37de434fae220377969b3077f7d8bd18c776cc97f809c884c9780e973a329bbde5a17c5121dd99b61c5d314c21ed2fc08f25787bdfb650018ff97efb06366d0009ea0e0fa7acd9d70c8a87dea2adfa5efd3b5106bcfdd581346632a1c04ffed3355d2ea18701b77cb976f8a93e8c9e5b4b35069e53660b3cdfb5f4ce453b35968a3c94c254a083b727ce807ba46a8e9a41c9c389b2b9d64a85cd139b2830ff4af0fedf02ca87ffffaf3d7cd5172a16063d0c04c23fd2ff9da2c2f01f0431cedb137730fd6e5ad3ccf47cced4d436ab8b58c03b951a75574deeeefed2d5e49f4a51951678d293126ff1fc7ad45baf36429641909eea639c4525787a139b9b2c80465690cf0fcfc8728dacd6c84ac1cac8628d3652461ba1ac67b41162b469d90031daf88c4656a3111c213460b127515caf25378c70d31a5956c6115801929e5a7ed28cc64c98b5f1dbbab4b596475bdbd2d65a6f551f6deb8fb6bf2b5085ddf8a0ff5d63da3ef80ea33134850adf82a6ff32a9c56100049077cabe002b98b61f9a2a0f3dd947c044791e80bc294c5b97bc53a827e51d8e72cbd4d2f60f307140f464df0093b7680c0d82d1180ee7f34e6d5401798704e4fd2f798303e48d05c8fbea540a65236f944bde6129eff07f831b1ce58d718669fb34a8f2743988cb5b9e3967291ae4720bfb1c0e8d01a2428b9ea4b6cf01d19839c3d3eae171f5f8b85e3e3f2f6d5500e27eb4e560dafe4a3bf5ec83e4a879bb8804f6b75faa6fb3ac7ef61c64ef953c4796a930a9828931b84822a58b995df2d0da1793c0d70ad1557b2dcb347ba58e0fe80458772c43de777c21fe4ccda3be3ffd78f85b17ec06e11838f47e255ca16e5299e2d0536d559eeab23cb6a7baec4bbda7ae41e41ada33cb089de13e7b230ecc701907a72d87d5bc3dd71eb9004c4f98de7305d3d49fee0f86acb447a003b63f1f4812180e3687a069ffa09b18ce502bc9159e55cf0d101570e48fde73358968e9ffa307cf9596d6d50161c398d3820a288c3936668c385f8c38424f469c28af27a69c4e469c1e242e5c31cf58e18687ea0aa238fe1abae1b9b971a285858447a2cfebb86deadc30eee4583941ef3ab274605aa6e944d1bb9ab4d46942df8d7b326bada34e4ba7e7665996ddada5734497e6c66d5c4cbb0ecbbbc2755c67a7ec3b2289322221026744d26444e21a911c7162cc1163cc19af18739e8c3952c69c28238e1421c61c9f3187874a4327a5cdc445b88f29090ed556fb44bb0c63921656c8199390302661a131ee800134ee6031ee048d4878c61d247678461d26018ba8a8b44ef6b4395433030882200053150000300c0a08c4018138202c99e4387d14000b7b964866509d87a3912485611086300cc2800c21861002101200a59419b2a200cee1af7d563019efb869e0d56db45fc4eaa0bbff31044fa0d3c7a0e55c98fa0afb1e47d15aec7c04d0b6a32587e1b552535bfd061004a22b4c765cb4014c4ba4d7bc06922f56597dfcf1b2e97fe8fd51a2962f2aa848028300478dd9fd555390c9bc27622b3df9914600d0a76fccd56d7bff4a13928454ce8509693b0aa73b2724d2b3e3f8fb46cc42f1663ce9c5f75e6a0e01caa50d1a9993a674fede06a9b5c604ff6afb697fcb5a6d5732bc232d9abe25679cdaddfcb297c30c0cec2b64adacc887ce81efdf350736c6c6282656c18cd6bdd60c9b405ee5f4437cd33102ad09bad35924db61e7901c71544242d2743fee151aa7eae46f3c9be932cde50592bcd69f1a55bb75caff60d6708dff4260a6589fcdf28ea8c1f0ee10c12bde9a0f5bcaa1b5f08451a2e0c59c1ddb9ef5d974c362ca7c1ea196620ec8d85618e53431a84cb113ef18aaf4b0e30f831a491844db04b1e14210d4371ee0c870437114e02c022f557f57204bb95bdbf9a204c76954049a3711f3a68d3490865e11ba185d2f5c4c8b40f086cbf0e16955e740dd22deda420207187aac42218182fb1bac2cde97b1daa32e327221f086c73cbdac3f85bb2a5b4634ee99dcdf8e252747f9ede2b02f0727a6debbeaee08ad2b0bdc639b81215f48ab0207062cb0b453006416e014c703cd6ab289b92390f0f5f6987719c46045d3ef1594764f5ce7be8c789734801057e9a31f6adb4950a219351d28048e3d3573716bc6dbd5e5b01471e34cdbea8c066f45cc012d75aec6196adbf2c5d6ea1134683fac90c668941c4f2009e68dd553dcc3b69c9707c4d4ec050f83cb016282b409cee9ba4e180806674c5f9072ad2583f2889de968487a76cdc5f18473da56b169242d3cbb963f10120f9b760d733353f8c0184031a27a6b457764292dbb668f3c125fb66bd76e5feced678829b917d5ad7044778fe0a5b203277f119622903db1fb407279d5aecd9b296233bce2114fbc5842f8f2386b3d68d77cf8603e64d1a35f284835cc3acdef7f0a350dbb05d1adb7fc69c06d3c164315aa7e4f125db8462429b38100af58f5e260563ffdacc54d77be02aa511b93d5a25851d85f13859559b3115ec1ee3648dc2c6bfca02340a7ee1d6cd8bb90c61c04e468e6ff5b560c829e48feb5218308e4fb54f02a00065654e8c0218ef8a20387c0f950455761452bb3262dcb76bcf7c0eaea6c871ca73eb60dd3720b570e677d523115fedfe3067eb0157030f98ac2ad0201257aa3e83afd8dd9c3ec89e7c75de1ae4fd8e9dac95287d3dbf624533d766519163a7b35ccf0e823d3364f2bc955b9e14a2b85fea8aee02974eb0478b63f5519e1b9e11399b286786ecc4151b653e98c2f273c0206174c233013cccfe8351306cbe80369979c80f8a961b82e8687f55fc317a70653b85b7994e1d8828d34d9ef13221e64afaa3e54c43aa967b94b0261e2bc00b53592a0aa3604293349413f2d656c2ba7b7787f22af59b463f05105c7cb7cbb016e7bc43f26393bb360c0b825865399c0f0db971b2a095a1f8eb8c05275d097668cc363017d0e69e23bddf0519e253848ec217c972566f8f2083e9f4f3895ceb4a4d2b7c13846ec27c455ed7319d0d40504a60b9bd23424055626ab7d2036ef05d101e871105a6c0a52657f0067d74da779d0ff6b946dec9934c8cf53699f8963662ca2708e1407406f146f1f11eed7c0266e81ae5d4ff34d36c9c2b1cf1aac26a6e55bfad7383506063a00987651cd4308212239adca43292472ccc68088c5c3a573d8d35b9256018737edc8aa83e965aba46ac27aa70d297570bd6a5988023a40f21e9d1948d4eee89a4be63ae2204f70204e14cbd791dcb8640ed0f730018733ed0a33bc4da79e849d8f361da6e03639408d810b3aa1ae490f3877dbf1b73f2bc5222e2fcb0c1dde43e3a05cbc84cf4fffa35cee226d43cf78ef276ede69a1d8f827d66522882057e6e936e729c95ad16ce751463c0887de453c2a52bd4c754c31ae827f81fead0222c8c54f6b84089dc2241d292c0182c58f40772a98f8f48da3128f1fb8a4f6d613241277bd7490f598d597eecd136538d8deeedca90bc18ff3bee624a59a647cf88cd425feeb427c7b32812366683af2faa3b67f0029468492d19bbc4c8b135ccc840f6c724d2654e610861520a4666b74fe2270ac9f9e4f2b56ae34508c64e34b4231237b34b5e547db091d595efca9b4f1cbc27ed4ab7e3d23e0a0712170e92947249438008766a1a04baefd1447ddb7e563b1f077c918839d68b380e7f65bdb14d8c92f841630d4eef902a4d41fac6d2e385a36024edef72f5849a42a028ff9145cb850488a20239efad637a2f1f69ba2f81676f9d8d840c9634bebb0d6c455ab2a88ec0c5ce2c5e2ca47c474e949b6bc2bf928db01c39cec1d2a30945715fbc1a9cdb8e51f62213a30c4a2b29d6d3957b20e0a2b4560824b1c30ef90569d84a91a308acf20d0e7670b5ae773287fa54fb65d720ecf24c33fcc96c345ff90469dbd40790b7d1690aebcbf526288688b38c04b8c860d8e932dab3ccbdd9fabef4db1e228b14092d4aeeaf4e3152c17ced53a06c48cacad7f428149242a7e21d0d1092d75bca3000867e14b1836820e88c71d9d85b1f165e306bd49b1185fc3c62186d898b9a9f3cd5f6629339061df8613c93315cd224257ac4432f0ff654cc98751edfe9b9eb8ab7cc2be8548a5391fcc45fdda018dce79b0082382864f3aee16b9ac73537374f3a73f3b560ea773ca73cb935dd778b5d18e4190d72d86a3bd60c5e0f0417911f4a9dcc3ba6cc56f440247763b0205484cc56795052f228f47d2f96fd46deb960e1df1651da0201cb8323c5f22bea909ec032df419767c1ca2414964234066a68bcca8a195009206e279768b4d0d047e16642e31c6da8cd50b0462093cb3804f97b4ce87e8c519ede6bbec79704eac0f61cbbbe52c88c3f710f62f5a9de9fcb682d3f659ae827dac09eeb442bdc46e4341369eb20a1a08384c3c039fb6082bfc9819d952283f3c32f40057a04799a24636becb660b139fb21d18c87463d775025e905afb266d568fa751c6449db3bf79524752b07bab4204c3ee4188a1133e607450f69b27a93308c4844a5ec98facde61ead33590d62776df87ce8fda316dea91b92c057c5ff2057ef72f0c22ada3fb40e8f0e7761b85fe63e43f13547c9f449431dfa8890077e1e4887f57affd889823e4619b71c28a7d35eae52eb93bece3c12417a114da16a91c49b6c4ae23c239211409ae14838996da5d968b3ac4779a250f0a03fcacdff973c45582dcc0e2e90a2efaea2e5754d98d3d281d6e5eb12b36782e6c90296a3d172dc5da4b098d20ed266e45e1cff42b54da68c92a1e718757032f2715aad034f941a082660c27a179d769b454659b6d61df539827996888f19f5cd98165cf08b9c7a6cb31a2f31fb78a3246f4c829d14606ed8c82d5acfe635a1ad3d7bee435049d2fe640683854904a6253917f1f007c34d16c0ccb4454ab8d79daf647e7994bbc1c4661d4ed32b5cb59cc0388d4b7ab079ded09f3b1a2f524d9e28947882e8676c789f895d7a410acc3c55527d44397ed8a0526639c4116b1ae4de3d469eaf2022244c7084840e535529d3e2e1dfc6ad3f0861c0298e98f3fcec1addd45cbdfb043001092d89b54b4819cb384d36c086fc30e7ef04eedc5b3473f1dbc5195402f0a7a9a29eecfaa03222da258e5c7fe8b7f70049d4ec7dd4555d25a356ecb1b1088c1b1cd7323823f582fd81ab027162fc9ca7a2a7c6faef88d199550a15eec8e06c773bff37d56212fb50555ba4e2d03045ab800a99c865a22427bbc48cc5a9592778ef2f2df14620d87e963271600a61d9ae4e1217ce32627d6c204a52930d3e8a515191d6e46c13055b31ffa8e5c284186f8f591770d3b22ea1caa0ab29ebdfe39bb368460020ecc95a1f5972c8a065451928888ea648e71b0050a7001353638c041777174af9f05f9116a96a284946f5aa22e382d0f0108729a93253a74779368c8e907b9f06856bcef8a96e839d51389b5f7789e9e05583fb2925d04353c056ab47ba60d785554ae86debb4510f2613065cd5ecce187fd66155d90ce8f7790d4bad88031bdf9c8ccb2132e0661c4ad4a0f41343c91cb40b001b7b2d98999742ebed610b03da7deefc655ec0fc88e25e8138e9d5908fb600c27d0c3eaf2dbc0132de47e2604c1d1236732c6536ff8045ccfdf9dd0858cb73a193232b5f7a07bddf642cbcc77efdabf573b98c0344829d90a211a2bce4dfbb262a79c0e87258bd8089c099b5fd0756ee611e4fa5540d33ac8f0517e44d83f8cf4343afddcf374dc6f5f123c37accaeb162e95a7a1ad81d4d74b137263204c7f309fadb9e3e0d3665a8f9c97d20c68a72764ab27e8892eaac327a99d5cce12f79c5c9562ebc9bcd2a337f6a5e36b133d25b6ec6459da535f3f9400002b68a69250f375169f5681eabc0ad34b1b16555d62bf071df7e5fe44a9df2c627db497469f2e2ce15ff5f35d178eabe2d540fce62e18ec7e5cf2fac40e92e82156c6d3b535a980fb9e09603c0e3316622fb5f50b78f361151f715c66be8cc8400b1b8023b6d69b7f9358acd1a59f9a3073b6abdfba2013b7bb5f753153a7bbdf3562666ed77e6be2ccf91cfaad5f013778534b0dfb5f80ea0ea435abeef6e8ab3c6bd32f44c4a69ed03f09d4051747f4ef7da4f06f3edf0ffc2f4158e99c787803b408a04e57741c565ce603d1d881edf79419f5e496db6e6e2ca5707c47dc3056b27d4f0bfb9c24027e98ea249685db5ff1d6875b81953d2c684cc93e3d5028cc9557bbd61a7fc7f4aefe8cbee41b88351424b7171359911d27cd90044a6508a738a157693a1ef259f5309d7cea99ef80660d44c1855195dbe9482496f9114119255224c15b783e3af4d23aaf457aba7cb88728bc7c9e75a152b1ee1ee1eea777b958d949d1cd785eda652bf8a877e3dc00a33e9806002084a154226e39c236ad0306ff38d7f60cc4a9d823e6f627dde5d270c104ebf80f2eb9d6c3682d6be774ef75ec09223698f6f79ec4d2473ff764bc6e24a8508f01e48c3b965903bbcc933499f3003140946e2f23e21609edd4928c706175edb55ddca0204f27b9e4376655e24672d30a3f631fb051a8df85a77c117fa31ea9f3949b4bd1409b1147a855d1629fbebd3f5f28fd683a6707bf56c9bf35ec802387e265274deb1103df129bc6a005b0f3f759b4cc476607b7bc3b3931e1a71fbcf3ac4278d78ea7ea3ec096f8404a38960d8318f04171c3727d6e80794f214c4f7ec35b2c6ce563b66781ca17cadf3ea66edfc070c7bb4b956ef60e5f4107fac32a984c882b6782ed0c8de042fc58ad95a31870501eee2f36c63b36c8f27f1b0b087c4311d7a93afa516414809f550deb739ddd6e9a0ca3731df6b975e4c11b37405d2301b36300c3291badf896c8393c76e06f3321e0fadd67e49b0c64f42f49285bed858e9dca9bf050cdc6f00ec48dd573b034a6757167abb504afc63cc55dcef6e14cd3dc934bc8a5669cfce554d9c9ed376a0e9de5ea6d970a5efec2fa9fbf1655e287c5f20c4921c1dd74a6ea00c3d6659443bcb2e1dd120ddf7ef327b2f5be96e1a688d8031d10e044dbcb6a62c16273c8144ba1cda4688b587b49536fccaaaf9b4fb71f6ef3086e910fbbfdd57e297768a6e366c3cf45b44f67ac9f1f17dc148afcf8799c3a29ef82452963592d4d4ee4960c9964c1d97ee1d228a781660eb7ff16ccfa0ffd2e9262bd3f55153abbb80c7dd85e0250d235e872210827e4519282eaabf87c5540c370f3a4241a5f9236b71f2673ac7acbf673e2a140cfbe5ea9873319128e50a62f450d139adff5d8e7331343be50583a0dd9833a11bc86e6289e74a8a372235c6e4ea8abc76c8f0191645ea0e70088798b42bdf101a043e6569959156d8304e79f0d450cc135aa7f056893a6e687ea413b54af10fb5294a2ba1983540b0f93e5c2d4190b2f0ee06686284291d16925b1f711a6a25dd88b34431fefbe55c3193d771bdac84adfc38c13c9349e3d0c0256d80bc8e4e35c33027c60389e54aa7047331e036820ffec0e9f877c043cfa0b3fbb689d7b26d9065ab886552eb065925c5f3dd83c54d7665d9f947b5c204a42bcebeb5effebb3a9ccf755986571bd18f6657c1dfb246bd957b1b5848f82883cfbca812e68c6bd6663452c3b760ff02f6863650ebcea2a06419193a6fae8cd980491a11a6a44799b05fbba7917c0d55c6fb7c3fcb9c36b64797e94fa2e1c7f7e0e759ee7be3e87d58629e4bce9a58033078ccf3ac104e78187bc67eb3a8d6f0218dbb800b69352af6f9a903336468f9aa04515d2401a061a0de613da0d416238194cee21bc7f8d2bd2f9cd458205d252a4e45d52dc58cfb409b481ce0bc7667d6bbf798b30832593c8933f913990c4ebe6a3efd71ca30a69975e42b10e703787a58cd025d80defbae83e14e1f0fc61bb5b09b91499cb25459679ab67825797e20328a78407b707632311918656ad4779aa920eacd53263bc2ef39b1d6ed17a4f07a099ce3bd8638f1d9f295c53e2c34a98f8cfc892f21bd7dd8efece49c0999c7dd17d10bb4ba601bca302a0cfcba59448f026a727047371447e2d3a075cadc595cc9e41e760369bc861dcdad0ef43e4449b317afad3fb8868ad88bac40c03f8faeba5268e1050aab6b16055ac65100dc6d0661da4ccd31049dee5e0a2c93b5843662a7646b36ad94422b638e3c1ab62565fa0d9308d262c0c60bfd0776066c3bd80df380756148a7533fbdf30de90e584cfc2632b8fa32238e84b2d52dec22b4d363e01475066a8b5dc86a7429a1fb9ea2927efe74cdb2a0c434371ad47175b19d4c48421ec544cf7440e13f29faf17eaab687c5087937aa09ed0f1e09558b7fae8bcfa64b3e708d84a2c8453e879978b7ac614f87c84fd9bae3ee56feb6a96114a53df991b4ef124bf54c268804041b7c3fa21bd146ee65ebd68223cf07f5a72386a9657de8ad2395ddfa1b61c69354b88a2ab6d846cc35e80a4ce10ed5d8be7b6ba517286d215b25ab55699d9265b4b0e87ca9fd93f0afa261e0a5cbd5ebdb73fe236173bd4948557915da682e247e7bbd89e13821a56475ef54371876c70e08c4cd577d2adf0f0408f861e86a3f96c1e9fc507d831d2fec5cf8927d2519c543598d980f211e5b39f4162b0598528c6b6dbce3e1c1dbce8a44e732a2722db59698ad971e0494d74c7f044735db38a955c015eb9f4512fdb3f5ef77d04fb634a8848e4b90533b1eb68fc7e4e322b523d229bd2987299229c4fa83f2e2229ee1dcdda875a3eb56585041e8803babfa8b5d71feb7c9b7caf0deef6288bc6991e46cc47776f3eedf5d12204136d779b6dbe4b7c6d62c69108b2d9125939503cc14da0096982ad09d8744ffafc951e7504f262975df3fe1a6eace1f6595cc5dcd42c0c5fb7abc2da33da0f8f9694fc190c45a72aca8efdb1e1f095217d0a6c7fa263ce0c9e0fdc81ed0e63dbdc87fc83e8fc9a4b77b6e8f600d77b26c4dcd7ce56480974dfe36daa46ba7abc84b421d880d88fc94c177dbdf1a144ede1180e6053d6fc708cf32ea22bad865a0913287d88632ae9aa967f7a7bc67a9f1d369f8790c7920b9e9384546c04fd35113eff450c01e6f8bdd8910d0bbd310e65560000a89ae24c7b05197fdc5ff768ac28d383fc6845a3eeaab213882e716e0c4694f39b5917c069885271656316848a813f1abd8cc126090069b500a6c13d04856948e96c72904a801e0c34ae2ab19cabdd6e7afc70d8245b132330ff5442681da3d421551eb2ad81f6401cd95f611781145b4484c6ccbb16d7fc5c52e7b6532d272b4e4769600e806786f868bfc3f4b5a8fa14d591d173cc8bac9be839182d6b0ca23f292fc2cdefd4840f3cb58f855acd11566ed77ca558a34dc6a7df60aed3031db86ced49fa75a47ec3ddb2dab915c1d93ce249fc66e59311ae4f1f63c16380986a1622858fd6f8809753d6887c3c3c66eac90a7fc3ef98135a16124e0c7f8bf295589cb513295a495aa79d63da3b30ed0020692e5a1469a9933362d96cf6d03f5118313b96fb1d4bb6df35af1b1fc8d66b3da578b8278e4915a3a95f22c337d9b76a3673720535a121e5aec0e4f65cf4175dfc45de0aac33ad20295e787b254f5a654e37322958d10ddd5ec830f45ff06a7d9883d3326b103c6b03553b7fd3b0f5f7bb68385ee8512db0c111e0dedc4589722fbf25f4a8a63dd85a0a2c0ab2c075dcd00e217f40ddda0b1cd6358fd5501622200e1203974515c035ee818f9a8a1e170381edbfe6f47510102358bfa2edd155ba4d1299c2c7f6d64b12622e784d56bd89bbc32484c59b08bcc65e9351c4386dc5f79ef64910a9b87c765177faa5e838f0877f93e7d8165e555e3b4c8681e7e4cdd4e9159ee8eabac130a7889dd118f575fea917cdb905d98e71404859050bdc41dbed475ae33e0389bdbf5a6c0e5add8a16456b4b01a03361693d4d35ed059a590a47a75b377253d4e9a889f8d72af25f19a77185cb45eac2276dd96f090a375b246f0c4f445e79137ece3727587ee256eb7d5ebc5f582f55f90ad72678bd7618933c1ca69cbf822b9c2d02bef560e4506bc221286b1c495b4bc53d71562c02d1e57e65b48f7345e223ac40e1280822130eb4453edd7be313c04b3f4f195cc454b52c8305893c42b50f3e13d2c34c5b830ac7c3d76cbb78678034e349a4f58b1105983db87abdd61cb802aaa3c5d50efea1201fd485f2a8f1f4cfbd9a0e351d0090fec3861bea5ad9e2cbd150d53cf1c0aeb42d70b969b6f95165fa4a85bd604b90fc9075de80b3f48dec37c28c994f320da33a8a6f73413e9624325a5e6ed69c135da70bacb9b7b85e434d4434888eb08535b1cb4d5730913225a54b53332b60b0f5543ed0a91baf9e0baa7899875133518d2c1171a455e9da3284b45912f2b5ab27ccee341e484db1eb6be4f2547c0d50cdad3ae3c157277461e4270c98c6cfce3cb88849ea7e4e7d2675a0bcfca553419f2d7b31039371197482a1f0cc55cb07d83bd3d11d00aca17189c5d47e5531ffc86f93ab04af61b20d5a0bbcba46d95ada3baa1147cd7638def7329247bae40a7723657a587439ccc8a5f8586322ac7e23b36594a483ddce7d443ea900260fad28fc710418a51845fc06d24138e9001ada1e93222916cd8028ec63a5e02e2423b8c025d011a04b849e084d69878e48808ed06e024e4895ab822120860603f80f40a287b2fe7a8bcb48a34b11647dc4f5da81d6524474286db944ffd0adb848e350b69b60e0d5236c40f2b1ebad67b5be73140ed22c69ce4d1b063557c0a37641781467afe939828242b799f7baa1f0c6640f4c9c92022ad6488c23c369b79897e999c2d376a21abb528ef278685c07b8665e77cd5ddd706ec0e2e9e24a9822f99866b2e99d2469482dd53d9ecdb53eda223c3e544c5e5159ebb8ba5a861ff59f50d2e744c5dcc4694509a3beb885a26092c6f81736c021e76c3095382544d982eebeafcb84cf82dc92acbdd0907151514ee67b06507ca30c63220d007c26b6c1a9e17b42840fdd4fed79f7285081bd72d13f9bc360ab9192969177620dfb2e2f94ce1c7d88cea931478e12a0945cfe376e00a8e2f658b72c86a7e03a550f2802b7062251d3c4e22b1817d6c8d636109eed95a8008c89654b2583550e48b2ca9807480ce3ad9ee2197ea8193d964a98c33cce3f0ecb09c6a7844644bd9ff875956695b312592a06ae617bca4254af551d54f639f5e16affaab9d3e0cb53bfee76338a8a1d01e18d66fc240c981298e2db2e58aa428833d43edd9bab9cf0fcef267e448030984995a2a0c48d7026d52647287688895b7729eb39b1ac69d62337a68bd52cc753b3c4749d54cc3dd73766991c6bd365a909bf43a56416c896a62976a43f1bcf2063780f8dc0c578dd5a11fc0c0217f54cc2a42203097c15ac2a73519d77e670ef23e81401e72e6a3b1294d3885d00afd19eac024132f586ce20aeccae00e74bb03fc42e808619517f255e489b51a380181a2fa49dbdcf2100434aa0f74233a3f2184600d0d61e1c98a66fac7d717c48935b99c932189d1c9ed7e1c34c3daa23b6b1b1dd693e9b4a14fdfc128651a8e2f5efb66b47a0b128268e3d04e217afc702648205ee13ca0a253310784f3af8c07bb3886c621bc1c9742222c391be6d5f493d2d4c2107f99ebeb4bfc05d228830272f8b3b61f68410b2b794290560243a25422529c2a47ad84edb4779baa1b59876fc51a10dade9c1897e9bd225477d01e8392b3539150996cfc2a24d9cd496a739b99a62371947dceccce7db78a3c5c90037e838a7491f333dd37894407a5250d0bec3faf1402990e8350f0edd4c972c4f5235fa2e279e5b2592703439215f5708c299ca4a789aa82d7f1c2e3607cccf6f70a28d16904ac91be9f8c97ee112d41540bbb2822c24b85a16ede168bf3f3624cc167098f54237f068143d88f815091ebe0765e6978256390bb0d9cb28dd68059c9c5e47cfdd4b49527a84283cbb6cc70f37b2a14f338aa0f33d4fcb3de7720ea242d87bb9c6f13b1d6abc8196217a8691963600a1011dc631864ca7924a1f693dd35d5faf5e12b3f39e73669e83e8e31944e6870d6bed3a5d72cf2490c8bbd970e95367267e08231a9ff2b2ea560fcc1c36cfa12fc672dd05db1e6f7266c1372970f0c3550fee0997e84ff2383d881eda1d41ebc8479a45bedfd191f71463106b2d5170553c68d934177bde4713fc2d38955e862b6b0c2a0b3916423dad87fbe2fd3c556838532bbcd38b9523c638f5385fd83e0f0ef3bb6546379bd989ffa4a2e4ab70f9e0375425b86284d267837b723c99dd7fa0a5d45ddbdeded52a68bfdd40f50679a25c8f15f0b356007b213584f652a757aef16fff7d593117b0fb96675a7f1841f505a58a62379c588f2450cb06b006ee09017f5731933f0160967f9173f89a562defba7df41b546a7e8506bb1fd52241f3b1d0f41b45006ca21f5c9ef0eb86261b8d3d2f517e17a972fe47a1ab7d64a9f17b58473b8fa5956712656eb769bd792d5aad39242d7a8f2a8f1a080f063b2cb669931d6ef922686df48737a7fee387c11b41e3e61954c0f4157d9ebf0496e09b591afd2c126f6bb8e1f700e618f9a81191ce3687d4932471f90810dc3d6775835b8190b796c4182ef455dc0b4a94690365e12d23c18367fb24237fb265e904664976191b10fd05e6ee9538d5d94d708ac89863883e0aa4e9b19e025f06fca721d95cfceb16502f05baf3aebf471f71d4e22b9f58d1429e3a622b77077b77cb87fb1e225e863d3009a5be673218fb2cce64ed058d195c4e2a966f48088e2540012d1546c3d340c3d53ce054881fc40bba18508827c45c5d2dc144442b443c413cbdc42c2baeaa40b020de5e555856579716781151516f283636d6c01e30e180c6acbea10d5ccc24bcc44dd486a78dcbf1e0d251db1201374d12c4576c3620216e890ca0e06b8280ccc7044b01948c7eec5a1479b7ad809c52b40269ba50f8e691150274aeb4f197b32011c3895970897f73d6bb594cdd2ca42e969c2e16abdfcd7c8573d40c35cfe0bdbf44c2bf39f16f0effcd638d887888787e7a33dedf1c6eccc36a821504ab47176bc6dddddc47f8a7f72798183527209ba11290d55959595d708fb7f60fefb9cf62dd2bb3eed5d49592cf623eb358980f2c38cf3e7761bfbe3fc4790ef38105efc00998122470f72a2b305dab22ee73e29f5f38f16ff60b83090bddee66c2c2bfb0e15bd0d056da4620e34cc8982d2b35bf964e649706a42c03699fbc44c630b26223a0cfd02c08c8988d3bc087c09107486e85d8c25efa096781b6695bb0accf1e3bf291a3406e492103d04572bfb68b383f6320e56e64921648a0b0d70824f748486bc7e42bd9c4a5801f244ec91813728869886957115d6d8f886225e5a92d98966c0f6db2ed27e46ecbbacafa644521f74f3629a6fac9da1f03c5543e69f294b6423629eb9305040a0014807bc41da0adb0f7486693b60e49d909a413603c38db391588c58086b244f1efaacd20860332ca6aed04ad92d64d1620f4d99f2dc7407b6fbdb57bbbb93e04e2ad8da02d1a82f321d266b5bfb531577c15ff16692b45720dc8a19042a29144d958697b26198f91f4dacd1e0b9ba60b97d42a4f9c28f6c995208166a620c15721a1ab9b2b04dda1adf6828537b7d82958ac181881d5c9b9c0558cd942a5c991203940afac9e502886472422d281f3064c162c4c7e3c76c0406781c29b5b8334034b46038a1079cc31da81835d010285840684c688391c848c85b55387ee82d100a22d4d4e4d8f0401b26384880f76182a4c78735ba332e5544a69a7da172f549a30396284c667084a0f70de6cc972c448111e9390e0bd3534a2a0376854c73c614264880f1b2532c17b7618e82e4c58431b138b220aa232e5498b152526c17b181caca5a18d391a552a53a09c1219e263870d4d1193750ed6128c897d7165451511c51e8b46550c9427a74c880cd96143b38488cc49337675740aaeacf4bcb23d18120a43800466080a13b06264866864c4c18dddb07a8ffcaaf36c43e31bda86067d2d9d1563bdd54fd59edaf300039ac02b699336d21fc5463f800ba0a86877e32120a16e501210d20f011f22ae769bd5ea6c5696f77b76d2c7290aa496abe5c6425b2f2d7717009a8b74f36ea1b23e5bb01868e863a0ac5d9c61076da2988b0715905921ade5c6544105c046217d2400edc55442919a4b498e107f962c096402b633220f3af689d9a2ec40ae4a4a55897c598cc8c082481d27ed2ac3672a93a7b24066b306e026050c9951ee0691969048dc094001800268481360b84df4a9034916e636b8d3ec6ab93b480e8c3f60466e63a16c811fda8a4c13832ba565727b875348ffc80b88b461f103f0051d920064289f349fa72c5d2ca50d931402a381e48d1103ba5893417a6c209640fe28f2adf010a435f41208ec312d9257a48f362cebb315da5f6b0d76019fb43a903edab520b9ad9a125a9a0f570d486e8f4c08a4514ce5e59315031094f5f941f362a001e9b3555bca0b0129efaefcd9b8ac8f3c96952a33fb51e422d8aa657db4484167dca6d88d6b1480c053d200a9edd403084f913e5b2bed56d0d6d71a9c1628d626c962db8b0b1423981768b95a9ff84a7e10832d78596933c903b0b85bbd1d863676b4f519c0fd8a64e0f6c3b5858a9be2a6ec0d4829a1f84c9e9297b84d3181a1ac5d4012d2eaea37dfae8ab7ece8c5b069a49030c76815243a72dcf804f1c8813131900fac778781ce02050911e4e0d81ca889816d413d391d98e35326b1aead69149439799390b49e52504169c4a129102b2000e827bba4c8101c35403f65c0f06c11010ac195d50a157372b17ae6e459707573c4ae904873c41f5fd9988fb64609125fdc2e5c6cd4100bf3320af0e3b3d512500a02840ebcf7e6e6602d0d4d8c2b2baa884828287621e283651199aed21ca3371e2748f8f23a0a10a7569123a12c8117579bdd513984470c149b211c5fb87031e2cdad6c0c01d0bfee3cfa4efc6676a359e334ba8c4ce6bde82d5a0b370b10169daaa9e8227ac7cea10363c06f7a03db02328120246da4057c002200729126fa6e2ca47f641fcddd6eb5562bebf8f77fd6dd7d3ca90b1526fc4334cc6a0473061509bb0874cc7b848a857c73d57c57e7b53553695db8fb9bc17f827338517170160b13fed931feede121da218613ed060b11f9fcfd5d6bfdbf7738318b062543707744ef3ab5122282c3613cc32bc470a29b4f7741bcbf30229ea15fe21fe15f67d789cebd111c382786ff663062211f386fc69b7db3b97ba2779bb82082f704ff14f3aec2837c69de6dba74071316ce898a857f8b6044c319ec07160c2b1636228609c1b321dee09c014c38e3cd847f7de0bcba0b8e3e51543e50501c660e3e543e8ef32c3653cd8ef33ccfb3bb4721703777ae7bd8bb078ee0150af2d935feed61cd09ca66bcb020780f3c97cd8860bf702116d74c362786fffafe0a09ffd0bb5e5477effbcbf3119bc378f31e3850ef8f10cfd0ca4a46d7cb22ca0be9625d2f1b58c35fa2e23ca838f8c788373817866743c5c2f0bc07f67a8f7c8f103c8715f3e6398c37277699eeec1182bb4ca73ef80a110bf910f1c28933b88f100fb1cb44c205f3f0c28a834c8a3e8bed81f3e6c63d3c30a2205e1b622122225a864244c442335407eedad5cd5d9fd182da4b6fbd98300f4614c7820ff2c91195e5359391cd595033d93c4f8d86deb0c1c1dd23bdbba498f887d8c7160fb141718470c8980c5dce361d17485f347d9c51b241b6bd60d9326ac10293f4cbb59188e8637185e12c7604d59e71844975c1160d53d5b443409e3dc0a001940a25816d280a3577c91b9b1315604748d35df10a8305500ba03db6a2fb89464d89aca88ff75cc5806b97c684492a3d3b1b2254842b90052c92e668364416d9d8403fcfbaadbacaeb8a0d5d3e41cfc85435901a5d52e5e8cef4400146af30e3f9030ca7012c312c3ab2738005398e4c726350351fea3c65c5153ac6194b34dba51e394671bc5f33457456103047e4e6d41899e2430fa873aa025146e70b3ad1d733634512ae2f61984e9f5f464cda8bd2149e7667587c9313523ee8f2707af630f1a24ebae4983841519700f3352b2f546a5e58c124c9e467f031a70aa331cc51860d4f1787cbe8e883432065f8cd620cca48a1c2358303c147e0e5ddec251966aed9fb20cdb63f2a1a4a6928b8c7595257008fd961011573cec54393ad88a450f017f7521d62c060984e70d438f3186df462646159f28ac0fdf2c51b822723155e342e1fcc6205ec33540da41f95cb8de8a035c5710d9da13b1812ce298e4fb4027ab82f452a0863bc63823be9be7130b261229a0714cbca8a654637760a8b057a627ba40631a26006094c352736056611546e21dc256a6b6c872268b67b9a44496c5463f5f658fe88e3c1a10881895dbbd1d494e22f51f30a96582b55baee12a9a9b12c6a6c80140acc9c56717c145d028b478a0ea708e0ac2c204560c780d8beb973644840a00fd82542ce0c3747d458414514d6c61d1b76542ec31c4c7cc28ea031a6f405291ad2112c60c363f06468328cea506a02d6020a374acc12439e2260c22a785224f68ecb144b6e12d6c932cf4e16dce020c406589f1f3f70d4b8110b491adee32ac7cc9d4d314ae03c09eec92223948f42909d973a7b7b867c11156ce2903763926e8fe766e08b29449c9ea098db43c924cc1982a42b5286b0ed099c7482658c95530563677be07880f5bd4a75f11041b6a7cb95cba7d3484a140dd71e25cf4a2a52388f70cea1dae35bc294519c24c59a34e9592581624d21985ae71b013d5192744d78b5bd4af80aa06787245951631d90291380f4a018455d2bb180516e3036d6e3b8868537c3013721a2e8d183d7e25074040e1a4f7eccd19376258e0e2a2b820a0fad7aa832ab18c041e2510f99aa1e2223124ab87e03b5008179ad139b61871e2345c0bc617905136a086bd444c52914777758d457d3d5242a3b4112da988de188026261a2a020de60e2d51e1811cf2ff12a8c589878c5e6dda37816c40b178667bcb95130ac0746442cd4d32354e49b090b13ff10f10c070bf5e63df0dedf6221a26115223851d1ddc3bc6b8484af70462c4cc49bfdc27f196644f01ee11fde2018111cc61354d413c4d3eb1ab170f74244b086b9316f06effd2dfeedcd85e1396c38080e87f1ba4697b3987e24040b32e20dea0b58685858602c205909c8662c2b3b3df0de0f1f587c847f6e786e5355807f5568556034b09715969511aec430229e6129022c047973d95c8775814f31af4857c0907b145463d870106c97f867c5a798c7f406f2ceb5835a8f3d4ef0aef5fc3d99e8b53ef4f28017faad56fce5db44bca4d5dbad1cef7f37d256aefde36205efda31d987b2efff2fcb5cfa47fbff6fadf6af7dfdbfb31af4ebd7ea0110feb3af75fd41565b67b3503ef3c75ac7243efed73e4f473fd7e58ff506ff03ea7fbd8da095f4eb6cac9f8dfecfea8f7ba3ffadb74ae4ad15fa01ffff3a4c0bd8ee6ff1fab3fa5f6fbbd7b10f974b037dd9f6e5a69de0b55ac759db47eb8f1af27ac738eb276dc3698f5dcff87843c5b2feedf28937f3aebddbedbe7e37bfd552ff5ad67aff6ffdd56f1f486badb30c1e81d6b17eac6df583b47dfaa0a224cdf9b246faf8f7bb86d3b3cfc7aeffb23edf7de6762625ef0b4ef5feecc7da0ffadda9f5566c3fd87eade3590371a15efed762c55906b05efb64b75aecb5feb2b3cfd5f15e7caf56fcdf55cffdd1bfd5be5ea097f4922eb07dfb0f7d56eb0f8abb3bd6485aebcf7eccf7dca6ff91f5cb2ff4f5ffff4a7a4dfbc3d59fb705d2ea8ffbedffd61fbfda17d0619a80fed15a2dff7efdfac5be80fed1daf8b7bcffbf7e3fd4731fe8ffc77e49fb6ced6fe3d7ff62ffd9013ac0c7fae5f8c3f4cf6fbdf47b6b1debf8c3b4fe24edf3dcdfc6faffc5be80f6d1ee8fb7f1ff7fcd7f24b525db53f2efe77e7cf45caed8cf05a5a53f10bfd659ad057f5700d68fdabf7efdff55ae7543b7f0f86f2ab8f1b9020cd62a1598545b27e099198d50868ccf3179713918a960393c2a0e0146911610980adfe26000be81c3e35ac00663498e1a1e01ac30184757617842a15f65829abe987cdeabcceff1ba8b75e135c3bad5ddeb52d55d0d4d45864621d58c2535e549e56ae06e0632301b15b927803abf934bf81c7b70df4ee70ee5ee70eeeee85da2234f44b4c20be3edd981f70af5fe08158384fec1833df82f36b9ff21d0cffb3042edede135464181070b13ed12ffaca2a0f21413edf6c0817a603f3dab3021de7f1e530d72736b0dd6ceec1aacc9d951f8b6cd09cae6282842b0a0159f625e0641c3c54445c23f57747749ef0a09ba63cd657398106fd06a2f11d18ab0b00f0f71efaab10f1cc6430c275ee981f7b4c2827c57838a84b29c1d3b30ae53e610b6010309a6899d0845a0e280f1b81aa1464844a2173b27446676c54201015e4d384ef9743cf13824cc7282cb10150784868162e04e8b045c5972e9f202d1c815cb0b9d561bde4d8d81a74d63eb11a988141d5e96c460b657a8d0693d1056bd1a1200b6678f49c1b53a51f6476f5b8d023c73bc8072b621046bb37704d0c07beca66af07b8152d435f240659c4253f70c5d26fc874d12ffac2af7a54948df410bdcdd66776d157777a2c7544071994e19f74e14903e64b6c0bfd2d31d41d77db3bafb5e1bd01277433cbd44301f784f2f0f2f0ceccbab8b6b4b2b0b0ba8d3dda7bc0b340844c1dd09ffc289e0bdd94f2f8c3738870b09e74470e1de1c05350bce60bd3fc1c419ac87a85898c845f1e4cecdfc117577b02262189c2888c7e7ee07f60a07b174372c6b2e9b111115f5a466b144bcb030b0b0af30afb0ae30aeb0ad30adb0ac30acb0303030b02f302fb02e302eb02d302db02c302cb0b02fb0afaf2fafafae2faeafad2fadafac2facaf302f30af2f2f2faf2e2f2eaf2d2f2daf2c2f2cafb02eb0aeaf2eafaeae2eaeaead2eadaeac2eacae302e30ae2f2e2fae2e2e2eae2d2e2dae2c2e2caeb02db0adaf2dafadae2daeadad2dadadac2dacad302d30ad2f2d2fad2e2d2ead2d2d2dad2c2d2cadb02cb0acaf2cafacae2caeacad2cadacac2cacac302c30ac2f2c2fac2e2c2eac2d2c2dac2c2c2cac3c2cffeb72e3b8336225225a0d2a125e8507f9c088857a677d847f827f788873897a885fbf3ec54242b470a19b5fb88f10ccd618361c4413c4530cebe1ed81c37a604346b4f05fdfdf99bb7bc1b4b2c08978667d7f668585737a885f3d44bcbd3f41bc45c2353dc4afbb33b97b6ce5fedc3a2e9b7b141422f88fef2f4c08de5b0beb8101f3de6ab8bb05ef6ec90c0e2216f209e20dce676b6fee3e3b99fb95fb05ef6eb93c11d12a510f11cfcb2acc0aab6aefafb02a9c4858a847e8ee13bcab9582589887e7ee06dc7dc9dd0bb83b01775772f735775982ac968464e40200b813692b77afe0dd6c67168ebb1f79374bc7dd67b1c43d42c5c2bc99af700e2b16ce8561bb04647322a21556965556552238dcd875f7210f72f7d9fd45ddfdc7fd91b83b05ef66f70af5c07b59565d565855605d89dacd1f8dff14ff1bee5ee75df9cef3fe04dd51b87b9e77e356b0601e5e18b1d070cb0acb2aab6a6ff02fd12e4f0b1c8827c8c4b41b9792ba3b5e186f2f31fc97b78707f64304ef2116c2e8c62cdcfdc27b7f19dc0fb8bb9e7763045e5d5a787e8958565b595658558960bf443c3f3bc2bf42bdf05fde155f16165657165e5e9e96d6de57169f5755e19f5522388c87a867d588184efceb03235e15f621e2e9413262b9bb96fb17babba07737286163225851106f71be434444bb9b09f166c2c2f92e0aca100f3103a1a29858585031110ce16ede030b0ae2e9b9bb8f90bb7e74f740ef6a37e141be7021e1bcf7b7370fe28111c389731fe15fa32022788f507106fb856742b05f8619b11011113c13e2cd7b604244c53018314c081e040b1a0efecde13f3cc4f0dc47f8170ee30d2216f2cd78eece75f7dfbabb361b562c6cc463432c4444447377d9dd91dcbdd0bb4f06bc6897010f91c8bbbfc4dd33140af22182170be7c6f09f1e9e219e5e0cff4f771ff4ee73b97b22a2d55523221e62de9fe0951e62e255de9f60385111f12aef4ff04a91b0af8a5191f04fb08a3043216120a1621597979d171863159655169855d65522e11f9e9f9e606161f8ca50319ca88868752508dec3bb020f16fa5db97b90775fc0bbfb1e58f00f8f6f4e04871bf3e699af104faf5050106f6e442c1c040f0af0ae57f1f09fa061e27c17c6bb2bf2ae7fba0be21979d7c3ee1ec0bb7ee709080bffc288e044c23f777feffa9995bb0ff0ae1fb93b215870269bc179f39ea062a15fe21c3527fe41cd8ce03dc2bf19bc58380846b433c4cb90b8dd63770772f7973ac5fc712490905fdf52555a7f7ee2621c756717649c2d02e539466bb01ff73ff8f1c3ed887a0e77bfda8ba8e7f0f6abf5ace31dc7fbc88fff3f06fe1ce833fb377bb8bfdc388e639f59bb8db53ef1e66af7fc3e5b6fe08ee338de3bd6803f73e78f17f72c87b5b33c676799c91f70c357f61e6e383cfabe37bcd51e6dab9902b373565eb001f5fc815aef866fec3ffb911f07dccefbab9d7f7ed4febb95bd88e145bd60c74c8747dfc0ecec5f1faf663a3cfa66bde1adf6dec30d5f3dcbf2bcbd623ebb7fb54e02cae4663f3f4c7aef9f1ffda33deb1308eae36dd43328d7dbb86705b2a43683d4b39669329e21f7fcb3d6db5907c16de798699283cffcdbd887a95281d99eb94c93976fb6e7ad05fa91649a049a2f67339f59cb3409b9e7f74e4aee993b57ce663e5ec83d73bd9395b3d9cfec41129820b7e49e379c9eb94c976fc69db74c976fb69d7d98262b1598717f34d3cf1cfffc7839f8ccda79fbe3fd990377d6b33c7399b2f39bc5cde81e7aec37eb0d046dd43368633c77e1f4fc414a7170f1ec41707b5ea067adb31e7eb6fb6bc3860e7ade73879fe379038e39edec336f98bc9ccde40edc79ebe3dd50399bc9de0d1db85e79ce7a3b64e7adf77236dbb3d6db21fbb3bc679f3b649ff027ce334ec636aeb32bf61307a3abe79f9fedfed2b3d9335d5ec6939795669aa9b2329ebcc471a8e01b3857c65e1c870abe7bdeb3071d3a92ef9eff2730c5d1e8c63359d6478ea510583204c05180354b3eb39c4b388390605faf5152638d121468903681354abc7cf78ed3742405bebe4649e957fefa1a25a45fc0edaccbc495d09f95915c9af83a92cad62fe010924a3ddfa1efd641721ceb376d6c6c2c1d35ffeab90bf9dda26fbedbf3eb330e125f9f011fbf2f5ae5bb1795b697c9dd991ebcfbec6d3f67bd808f4adbfb60fff6fafc5926b7e362e1581bd416cf3e6f2a391c6783da7edeb34f501be0e3374be5ff85da3220d5dbffac671946e8997fede7b39e8fb69a5f3dcf54db125f3d032161f2f9d55fca25aaa16254437d847a09c5f23304a567cdfd01fc995feb3d6f7f7438fe72e72c97fb16cf5cefe27fb3aef4e05ffb50facbb1f617edcc44a5bdb65649ebd55aabd5d9ad760e94e738cb2e60fc05d272e778967fb259a62c57de505abfd95906f3f5affc09f95dfabaaa0c33dfa1f07ff7cc9d01b35ced9cd5c659a01950e6ce72d667e6663f1bc404f4e3057c445c8cbf87ff26a84d9eb3f2acf400ea9b05dc73768e0301f7ac242bc95ab46c5667b3d93868ede7ac1770cf813f2b6d67a86ff6bd4a5bef03a86f76ce7aa1b83f542e86989dfde79765a5ecec4ad9f9b37276fb3ef47daffaed899f1f2aed05a8672ad46f76cece45befef5af0dd1ed0cb8e51feebcb94133d0bc3f680ec7df78efbde79fbd0199007f069ab3416841ffe60b74f85f403d6feecc6d9bb9db79bbffb94a3f6767f967a8dfaeb4a1a834947ba91e815ec6f2e32e76f86f66a51f2aa57886d250defaf5d8fb804a7bc9dbf9bd5aad6ba8404079d6f31630f15149fb5f796b2fd5a6fc99b9da6c3868deceda20ef03a80d95b675079a9582b83e0771bd8bf30e7a8b67ef83ecec5ec07725eebc55e27a1f407db75e282a2fd0eb2b35487c7de69ff967282d2eb20b182bed593bffcc4a5b09883b2b2dc65f9f0f87beee9db77150db8f8f7b177f96b737ed957cd6ceb1927b1f4079164a43bd37500e7f572ba1c1fa8d6739f0e738c8c5f67c38f4d56ff1bcb9ecbd67a6c5b7f1e38f821485131a35be7b8e696467ede79baf2ccf81da79adfb4dfc190294e7f0ffccdbfbe30dfc99f5ac65d25f6702fc997ddede3868ed70e8fb13cffeb6bdf1fc23332dfee26f1bfc6867eeacb4187f7f3e1caa8a83deb2b3d6bbf8df1f2fe096e7f72efe66525af306c673f8bf596f1ca8e7f07fe5b4c3ffc63e1fdf90672d8dcbaf76cefe579e716768bbed768f8ea05ce901d497eabbfdee11ddc3ffea79ef9909ea9b14536db3d9b5a8afec0d0c7a93e7ed2c07ad65b7dfa43816b2f6dafb813c6befe253c5b1e8ea792d2a3bc70fe4b5a0c35ffcaf36cbb4f8df0f7c2cf9cdd03fd83250800054545f9f632aed0c18cff2ac24cf4af2ec3373e519eabbe7787bbff1173066f2f81bf5fd99b34c8013d2a2bedb599ec3b1d74e17306642e0553ff307ad457db73395f6d25ff9fb7376060c4adbce7b231e0e7d17e3aff6e79f391c7fe3f865ff02c52eb6187fb7579e7f8e9564d90ba5a99abe3a00101c9d2ea0927696e75849eb7d00f5950101a1622aaf0ae15ceefcdcf997c4410ffebbb96d6b3f73e7d76ae7d7cebfddcedc2a40b3c7ff410f9e55fef16aae37d66ae7ac76ce3a212d71e7bb9db99cdb99cb453506976f76d61205a5151111cd4d041e092a17d537afe7d284a728e9922a6058f59c06fa9bf5c61aea8be4bbf502027de36f76f61f20a6491c80d9590776831ebc563b14b4969db3b38f37eb05dccefabb60031d356191a9cddd09324e92d0dacbc7cf11d00fe9cf568b0414407b0172673d0772e76da076ce3e78d518acdf798dcb7db0e7ecbc83d6b43f495bbf27c941387e3ca17c1090a7a8e7127755cf229e2cf62049537d51e3ebaeeac2c717c9d76720d517a45fffb6b150f564fdbaaa2717545518a2aa3030553defc0d981ab13f4a6e7c0ac57c9ab94f5fa7e4244a5a1b244501acafdb75bb5850fd5169f4d72986789b2b387f18a420101faac7d59958567d7c857cf409ef5763594ec3dfaf28d7fa3f871ad7f76290e33cf1ec6291d097109e486934a15667b8e7bf41c21e2069d2c637c8c31d3b3cf523faebdb83fbea3feebf14ff6c763a259c0c7f8d9ba98d2bfd76727f0e37072baaebac2c70c186fb597abaa7012f97bf6af529afeee9f0f6aa0bf2ea6d374567f7fb68e99361a601524697b06ac824443f9d78336d7c594f6fcdfede57ad35fc1d3b975f27dad94061e068a898034d4569593cc17702b7bf736f62aff8e92d1d9599e03688fb6b3d64b098e2bcf4dfa6bb27236f399b95ef20cb7bf267164f9ca33053a177b30dde55d3e6f99b0749777f99ca5d25b3079263393e7d72fe6476789f421e317f0f1bb05ac5203b08a281360151d1a4a75c592af6672551624be80555035943ffe6760b29d957cdece1c36e080e066da793bbb99927be5dc6cebd5ce1cb45e37638df06816cf1ce49952f65a2a308be7d8bb9a2502d250017e0ebbf1d79174ee38ecca5f47d229fa3d40fa05dc6ed5883bbff18cc579f9051c1a72b13bac5f7b566d61e2abe7fdcfc9e51bcf0166a8ff6d024ccfbeb77e266d16ab768aeaef066bf18d67ac2e0bd77e5db5f3f3bb67df7bf637dd7531af72a098c58f37c1a1765d150597303d53cd5c39ec7b94cd6ab372bcb53ed4c6c6c6def9c6b3f61b07a9c5deac1c6f177331ff7a76d602c6da98a90bf9f5592a303b81d995664f9a1d69f6a34b129d9e35749022019a83bc80505a4cdb1a3baad3775477b662aa62a2629a6292628a62eaf29a8100c1bedb262f2082035ec099c90b78347b01bb06bc80db2ff76adece5533d5f6ca9be5c2655b637bc7cabbdd5679bb5d2a025ec0a3a329ef3c4b797d472579b3515e2cb0af913bf9f13a176de776db3d3a9aa1a0b0b0c0c0b0b0a0a0e6f9e8a8dbfdfe6fbb47b3ee04f401f481f43201722149bfdc275f79f6627a7a7a8a7a9abb989c9c9c9c9ee61f0f52e20574254992987eb36efad55e05e848be592f603c7b01e505df2c173231ab7e23cfd93b5ac8bfd492f0cab30f09a9acacac396a96f256fa9865792fbdccb42ea3a2a2a2a2a2a2a2484849494949494949754e4d4d4d4d4d4d4d795251515151515151d5a8aaaaaaaaaaaaaad26165656565656565457a757575757575355782995dcdf2cc45b2b1b0b0b0662c2cacb912cc0c6b9667ee13e73a91679fcb2d2d2dad998b6bd60369c6e59d8c21cdb6bc953e665a33a00fe41b3565ba7ccd00b9a95ade6d0db0d766759ce5d5f195672c26ed1593d6c98e92672b266d1593967447c93315935687568a491bc5a4ede4ded95f52b31c3503fa407e651f123f90fe2535cb5133e0cfe557dec6514c935473d42cc53439354bcd9b0950cbfa95b33a1b151515553547cd956366555e1cf14c15354b4949497927a966a9b912cc8cca7be96516e5d54e494545454569c9787d2ee724406d2760ecb5858484fc02c6f3cfe4379e355cd4acf57a06c6f3437e01b59ddf1850dbe97a3ab5d7b68a8bc5b3fc0628dea6e5d88063ee698e9a3df7579477038eac7751fbddce4fb30cf9ddce809b4cfc667f41cdf2d38c60068cef7c6540d989fef109425c7af6851372fc686bd6153c64fe6258de43e9eabff2b9433e029bf33764f490e53a946e2a3fabb196163a4f892634fef2468e1f5986700e5bf10f4dce0e2a6788b39189da579bc097b1e0aaa754397d113827f7a24972c33902b66215372e25ced17f7154973c83c2f1580a3dd7d4d4b70c93dc849a1c1e4586035d060bd6063258f4508068ea1f6f3fdf843b22eed01a42b39e40a31deae2432b55d1ca8148d2dc108ba4ee5ab3f78ba637b6a680366fc0f488864212fd2d438b2e6718ebb069ae7c1ba6c80d6038dcac46429d09c8a03e02f2e566a464db09a295879104db77a934de829337fb0a168fbd340656760aa34083a8801aa3da01d13f4b4cfeeed54c37b621e258f2ec795537a63b07e702df68fe97c82cf01a857f0fb8aac61d5cb6eacdc027ae0683c6071985e2a68b90fb8b1d340f181ee24912c5fcef450fbd45eedf558cd64c16d4f00a49500fa6c9caab1d70da91db37fd28e43576d8ac5b6a496839514c7895b337798d8d2eadf52a158bf13d7a4f66784b2d06f82825a03c969c017f04039b0fb3dac3bb3cf07ac342588701e561fba8aa7b37a0521c42e5e5c77535694d3d958e20cba7cb937b5ecc8887974198fb485822ee219be74dc09e6ad02c14daf31fb5a087052ff96ac29700797a344354b35e6663b4d780123192c90a3a74cf83983330d11f8b6cee1afec6f1f2bcbe4ec9073732e2ee702791ff08a04fa501869fb01fff4d1d8aa71a5be14c4c4678e798155eba57e7271d136c502c446ee735722732faf9699012af0088c5533678390f80a487a2e6445cc44b0add0aea222bc8e7fa6f6c60c96ac699b385ea38e355bf351e602cea9fe254bf8901269fa435d40f39e9fc699c3ce732a5a529f8643d61853c1a8f18931f9263f1455214bca707790ca136dcce96185742a9c4034039db418674fadce4d5475754342454e33e233967ef3e00bbc0a680ff904db2858a34d809a25aecb19f1a9f83c84c7f6e71f3758e9ffad3f3c8af9922e10b55b0799729c583f7a23c0090ca2785b3f19c4250ec018ead2e943566fba919b9560b50cd8882f2bbf62075170d89476ae3604b2080e84226163556d01ced78a5f52b3490f5a086365a4b16eb6fe7c2b19464d52b39b2634b6160d48e77503a8b99962f15ae791d969a2eb9084793c664fecd079f36b542f29670e297c1a6d23368ca712939a77f60c8e0aedcf4f4198b94db877b79cc2b58ba6e8814afd1e0e991e264f1ee9bb677636089c6ec80e18b14aad0803c8e64175f05b4ab9aacf732f8c4716451955be5335ef405a61f8cf6702e79f83e4c17c797b15447177e2b38131e96de94c12fd8e2ec15eba8380e21ac0fa5e3f0ed1ad4f049490d7f7599c1f11892fe08b431ff62c6e94c5e84ed273d585f8581f7640c079ff454c79d401a3c8f22343291085e7455d6447cdae7f33d906cd0fa643a3e911c9cf1e47ef0926f895e240aee514700b9c6fbe04cc258be1626d5ef7c1cdc561c53f81d31997f76e6e14be871f0250462afc5d338e31a254fd266c775ccc8f1161c7fe80c3ba03cc498209bd450cfb71665d050b2531a16f4cacb5a8a9e4ea8cb57a831f68e7266bca5628d0ee503f2724c43f85e25e6078e96ba53f1d748281f87962e4ee3aef3b93fdbf76a7bf27620d1bece0534aec74ac72e710580434e08eb3aae6b4e97618fc69c50f78d6716dd4d14988f79ac7a109e146f56ca4673718047770f64c96929e4de09208e3de70ca096e32dcb6a5548ad65cb30cef0b9e2a10c503a1ad6138e07d353a7606b7d3842379b4a74cd65a020f32caae887c973b8bb80f11e700490ef62e180d3a5c6792f91563e410fc20f04c1ea7580693ea044d97ff344f8d4961c4d08fb2476ebb4f336bc54d811b0747c104fafac61871357a12a288f9ec5d1524604e32011dcf8e42a984319d0e58fa2651ecaa9052f356bdd5480027c9c3d7f7a6c40936fd026f75184a7ef41cdab46b187f1592990f98b6fd70fba9a1d850dab4716c974234608b88aa9a3071df37953b6a23d4207d721c45093a988907127a9b13bd54699ae82c5189b69bdf81e3946e5b62d535f770782e632c2ea9c9e689a40fcfaa86cac7c56d00c17154366d7c0fbe0887863f48caacf4fddb143a77269fa316a541d0f1a0f9fb847e84dc010f837380cec34c93d5f054c896786496aa7357736a693264fe6c880f793f2a153a4d1c56547c6ec23caa5aca38e041a294ba8acc42af4117c207a96d416ffb27141c39dd9fbc0b4494db5e5d53f318ff4860323de829b2b5bc3840cff02020f57c2408d2fbe94c65423e3a50879d9557f515e2307a1d7287cfb0329a4f6fbb5eea21e1e6b7d9768b33c8071110d233b8dc458d6869e8ca7f1d9a4557aa88700468666521c7a3d773e9c70839997731bdb8654f43c8d14af9b0250d06b41a37b2a3114ff945aa9eb381a712c8c6b5f4442e79b7248b077a0f17e820815f69f030ebe37abd859753e3c9a0a07ef85ca0d5d9a4967af2d0deaed1be907e951a3e140cef216dfb1c7a4ca68d1c2342d803253af681be268926a8e42809aff3c21f01081585e8715b9ede6aaededfcb8f180835ca7b31863c30182f6422200fc1332171e08022ffbeab28e7bd9947c4457da0b40d3e685ac405ec60bcd472265a47f0240d83c622cea3b5e3662130c867c509714ed9d134fcde6424e4ce0a9efabceb0681f5c63be0b063fed42b2ca75983cda8ef18667295ca30fc30cf8d54bbd29cdaebe4e94345da782c51fa129dc607074f15340352fd9d5c3475811b3b5d830700b5db47618220f5fe5936850065a349a352c4ff828e2af3865d6406b815df7d7a7b7287dd90d9222b55982123682ca27d96fa111ef1671ba678e217f270c43172013e145ec3edd411b102e2129d55d241578798d6ba3484bf070245c3d81c2bd17ca33f591611c9e879511da890ac6af03a6cc7fc4d6fe708ed2361037d87f3704b74f56db93606cf26ab8804fc7e446dc05e4fb6ddea8fe671de9cf1092bef44fcbb16a1c7a112f502fc48bc1666402ea1600ec69cfefcfa379cf9eb1f3d431cc71e25a6caa7f574aa415ab6878873462dc0b16eccb7210f86e843b7f5503ef5dbb747e159c369ad080064d27d47d1139f89ecd24ebde92674c1721edc54ab8a4d09b4f59fa08229517209616436041fa5471403baf4aa39b7a4efa00ba385731844adb2802f5546e10dd0a5ea9e7e0e0b4d90e98ba10305dbe81368fd7d152f4b1891a9e865a76af3133e633cc98f3316f0ec7acd0dd5f5c5c2d208832f61410ab1de80190c5d48471330502b3975d7b3e0472342efbf1404392cae93a3c840e84c0eba7c931f8726cb28f0416872f4e6ef8bab09d779234a3b91e5d3d0ecbc8d570cef12d6c52bfa2ad82638d1aed302850fccd27921f73b1e4d3f4d9edba47fca7a5a6c773335d00c84d96acc7e63b8239b0c7802e7f4de3e966cc6cf38172386c2455263c5b5caa5c3464c7d58ea6ecb506541e4a8b06bad4c09da77118c50144ceb911d03cafadf6fc1b111ddb9589063f322583a654b3f331532cde7403067f5252631f70fae2567952ff644cbf14553d9a8f099df6aa99a17f646579c76c61ace6e1ce570948fc03444a75061b793b8bf2886b5953a5933c39f17a8e78ba88b1d5cb5c49b5cf671b0f0245762758107f5451c496f043e89c78a7af95c281075ecad142eea8f890a4187ec6b2f03fc2976d43b0d3bf5a645bc7d71a476109623f7152aa952809b373a65fb6568cf1e33267b422601edd84707eb22861b406a0ec07c9d244bee236e153c347b60d24549c6ce871575210e3595d3a34d2e997c7bbe4b20dbb08dc2a4503bf30d5e05b88767a88cc2adfab0bfb0b0f938e06d77d4a0978aee6439ecf8400fb674cc03ec6ca8abdbd9aa21b7d1cf84c258b9bc116b19722e3228b16264353e8748d9f4c56690c4a186c394548fff173f9db35589c4c949b5f7d2be22e46f5b8012f596e26e44f7730d3f14630296c3fbd24ef9b49f48f16819e464bd11b1e85f90b8371b4d28bce0f8592b185c8f8f91921f2e81d369c7c8a33747489ad1cbfd38071bfe6816ac32c1d1b124d1b6d64e76cbb2a01da133601c4b04528fc4aabcd9692aa7451ac32ff2581d54dc47537578e228ec996e4b58ce06fcb8c7401464b3f7544c10e92b41dcac6e009e4d74fc5b04577c952f4a195869b91c8a5a768bddb6e4d133e418b0d32d68114ff6a45679fc99a77d1689e6fa3b3f60d14e4d87962b9bceb76d2ca85943e45c7f93c5c44f1090d18bc8610599cc3a700f712a7c52fd0ccfc195a575ec87f9f6e15864ffed4d931780439946ff20442a4af018e9077b303f4b7a91c5a06a0d7cfec38f37574c0fe09a6333e8413f5152c7aed166206bd4816cd437842d3641c20c44b619f3a4563989d4a4780b71d9969c0205ebc55ae7b1127b69cb0d5c8a96098f1335f52ffe3158f13c948fba70da4ee83d351f390b0c3d39c79f02d62b6270911c67718c0742596903b2e4a079fe020eca74e01b50029cd9d1508f64462188819450fe86f4cfc2661ece81a5bde5c0f16b92743562106128bfc337e0a1c4fabc03918bafeeb1f98ff1483e02b497b7c1c964b1de36fe881c865ff6a5585abdd19db819bdaf11074d9706421bc078aafcf3caaf13f984a7808b70b0f2634caaf2890c02b8cb1c53b22ef34190de61164c5bd199d9d95ab6cdc807a2cf7960a52fa70475d6c0904875be881e10f29b37ed4896ba0d22bafc274d3939001f13e4f00788eae318f51834de72d8d7105a479fcb0cca53fd1160d030611a752c48ac7b102e749b0bc7cd4802e1f4343d562fa9468ae70e87e01eb63c74885d2aea8a93f4449548601a5481f21b012c7b92cd3dba7f4efd05170cd56cc974a01c14b6c31fa9737271eacc4811d43d2703253155afef1c6577443682fef9c471254a4b1a4a4f8513008fe0d1296cf76d1dacecd942795b1d8228844b853189d0da68d946eb24680ce6b52d2704bdec82086bafc151106f498523c9b87689bec17162636a61b071e2885e96555ca6fd2f5f9ac0a00ec3582555cf58bd587ce6a1e8cc112f73244f67b5c85b89a943d272ddba1bdc2d45c93c7ea93c1d3e3c9aca0dba442f2bc032f2d9d252aeae000087661ab90865266724702ca3d8b2290b1a961f6299df4e42a26886809447ac45710c4dee905a1b7e9e0afe467d141710c703078e878d611a093ad49d84952c35e4ea90c0fe009e1ddc717ed03c9867b6d695dadc8807fb319eb7760c7f81f2909cf52aac527ed64691c5ea1cf3a0442a76ee5bc45e615397143dc76008568574dd13e0c2d2467f89ba3ebfc546d472de92fc93a6d38a2413e334be18b7116ba642194fe1007cc4550a66a3c1a8e0fea57c4c904c4f990222a3a89e705378b63b88b50f57c04bc27fa8702e06341d1d1a6a36a6fe44d8596f10dfcbc42a1bd27049c5752e724ce5c01d66d4aede8798a4eaf59ed90011498a1bdcc38209f208c351cc3173e3a48f41e0210d17188a87016965974ddeaa7bf91e8db6c94d23c3c658bc63cc3e099d6986eb720227e09419c173e31f2340877dea7a6c0c3c5a9fa273c761c2c50c4db5013c5d5e4eebc0914491a07008fbd3274d9694420e5d82c24de8fb1843ee3a8f81e18b86a3a34438ef74082bc61079d7fa404e16a53983e4fe2eba68238e23119c13c9d0a0a9f4461c04ec100d117adecbd8fa91e8f2670f6d4237b7f8961d2cb9872fe193035eda3b8f59ac6962bc2a0e29bae6c6ee749e44d0700ca41bcd0d16c5ae4658ba81671024d54652a8f4f4f6329486ef51a7c164a46e20d5c937e9880caa6029cf0652e747ea291cfefd202e819105d7f85971fbef15eb80526b0d64382c2b7087261a3e2987c0cab5dfbcce49f2f194dd130089cf00a874cde445017979182d367b068b2f566315a4f56d0ef0a33a2c13448a1f3328466c1da346f40c34fbc20898bb79c7018b37142fe0140145f28a4e923d8b170421af30f6da1dd868a876fab02e7e0cf3dbf0430450bd0fbfae523044fa4b2f5c0b5353a56c98a5bc6c1ed3d6eca381e801c7ea0cbe951f79cb604b61abf030d2abb75d6e41cc436633d6b363e4ce984ac0a3d72ae8308a5bbe042b207eb5069100d529dc9e9137d034e9bd7fce6f8cfa6ba6fb0c1f39de0f07b3677105d727188bf9983b73941dcf91a0412b51169f621f162fc95c4ad332d25d09263799e9533b3b35c0cdf458491c6511540bb19e8c606b06cdd3629418e8dc2a035355cd1a62334789d03ad710839a1ce6201dcc6d220e8dbcaa0ef1ac97c4e34b8dd0aa1cc13a100c2c9ba58796bace9471a88faaf56bf2d97a6fe96309fef20eb8387b170465fae68f287a2a64ec242eb3759f24203c0a1f63a08b3e86d0436de7604f0e75061f8bca200f189af88a7521722eba678445b9af8da70c264d16a3806b5ea81d3b76164f5d9bcc1f255525dd7604ae09b8a1675082e8d5ee5148433f190c779bc056d56cb42df8b5dd4373a34f8b30b8e1becc4ebbb011af33bb668792d10bf253d2cfdebd69be760e08936032b17fb5ce2793a415cf6973cb15d62b1541e45bbfc049453b232c065feebd1291e8154f7595d4536570701ff03bebce1f7c70f117046c352c0faa23a8b7e80acd2b34e8bfcce11a46fd17e348b29021e67cafa3960b1bc9d0ab01be92ecd47e0e0e364a8427ec5ea94970352403f6a87dd64c4e566b069a8ed7274f127464e7c0318ac8ea7cba96ca6809a8fd012ed3138257f6a44c5af2012e0450869bc1684e9ab3e7a1dd34ceeb9eed8ed18fef4758e15f6fbc0fa3ba4610ef703f5998c8cbc4c102fcfa32c8d8fd271fae1e67c225d927ca915384f16204b67e2a9b3c9c8688fd8812b772d2fbca797a6edc836e433b272c479aebc6e1055aeec342156dff30bdd61041d3e29829e6dd426e8279009d5730c703a6013efeff964f1aed73c6feaa5c3bb2acf6c461ea17ea793cb4e3c1d7240ba23dba84dcc0b89226473b080e722e8506e1e98945b169dfb50c33f2d1603ef7d72947133a077768f3535fb000731b22658c1bb162d77396bf35848f46c6dacbf59aba92fc5f278c63b025e6c849713250e7e24952f2e85cb4c0f2931f6a29f175c3ec37430386d5ef314c9a55018d040c252f81eb017e73b24e27348b176105017ad8046812dc926c645bc5de90a0eb84f474a564c44049be7d39ca2ad920af30306773c4646848778f4fa28b02efcca8913fa6e1be3dbc4ac7dea9c24df9a03c67740a23e0e34353b6ec7d82f36d2691c9440be4c6dcc997c193ce208ab4d67cd8a4bca45f844d634fe68c0abc92c11b9191d60b903183b7fd3a2427ce5ad4e57c0c38b952c6879042260c474ab5beda593e5417f907891352a5b008a06ee18a1c9ef86b45e286af84718063fdb65ec1b0fbfaee526a54d8128ffcbcf0e379461c0ef2c7d7c192a255e8f2601ed037cf8172f333c4ecbf5c41808f64f1923ade489892de54f87a6dbb3454620c66c2bf0348d67223f6da5a17087bdfc6dca390ffb881edcc3e241784cb9c8c30540d3674711bcce0bd0de7c94e12f0a64f9318cae0f2755514bc132e22a2460d06c5895386090bb9d2593ecbd6c574d878194ffcdd34f0145c1cf38e86e0c58003c9d8ecf784e53893f1eb1e3ad5ed06c045eeac4651ff0de2b94753b6ed9d20c363f6bd824e72c56813c338616df900ae2a5aa6cfc1e22a95b4e0fe843ad9aec0a3cccfcf489534faa007d9f2b065a4b01a05fa308e6775e38bcdf69064d3a47c7273f8bdc888889271142e99f6223ade52d2a5643fad96a27bad93a0cb0f48f97a3ed45fa5f254ba72cb785f74c59a47d870af972becc9c81a5a7dfd959f06e12469d0090d166f0bdfb594b88cda6a7e533ea2469c72fbf0767097a5647c58f3392fa4662827e2f5269a41d32fc2994c53633a6ee9ba8f8a003a1fecb12d1e44129985ac59ba32db462d604b028eca5ec079d3a6719ff681cdd46871b761212269e0eac1c0d3b6b3d6d91eba3ccc8f1627b483b00e7d62774397bbb6e92ef71a17c8b01291ee483a20fd143fb0d556bb6df8d393e828e87b64166e943b8aa5f65908ab7a9f1a767088aafc5666da3d0bba1998aec683338e4fc9c3651bb8c0fbdcf616826e63044e8bd9c2ae3d1b0820fe0a57535d9d75fa0c1d5912cb470bebfd47c5263fc429e976ec251e391a069d09549801cb588960f70e7f5bd2892791333ab3e6ae6c1d71013f81d8c24d034eef25e737d793dc447ed9a35b03f3b906e250254ba6e0c856631e04a166ccd8237430aeb24a0aa0fc00111bd05c2cf2f3ea2fd1d318fae2979a6d3d41a9f0803d817492dfd8eeb1a6d020a093fe3f0b947e1163d041a0ffa34cf1057d3e8b8011c18e0017298d029fe583c944b36fa4ee7025781f6a6b5c03ed06ac2e469b64a28fa52f58e262206c4fdc42c68270b6068b4342e9eaa46124d49886557d94ade6c2bb767844bbdeb51c3abb9d1f25ee4341df34b9f03a4bc3df6ecb548d1f8276c98fe56e5826b6990e7606e80ea4f0a57dfd434628f00f5172025e966447f3c33c608ede24e942d9f6e3e5805cc978019b979d029f952391ab2aa0fc41ece0ca9878252a041edf069c23d293cc4aa7b28d214775be0c1b1b8e07402b01e9e6b8114ffc1b572a30d68dc4c872d9db519c6e91ed0edb4cb0fbf0d50c0339bac7d05471bba0e5c988fa323a3134dd0f936b9ce4e6386c5e63cf290455482414771618c271d0c701a7060b32582c4d942b1be9dc4b4b4951bb19aeb38c5d33cd9dc5804f8eb8159f518b3d3cbca3ee8a32700afd6e5ca6e4ad1ea8b7c25fec78f3dfec8648caf1920e6357c5dd990dd294e41b54e3f41f5fdd21e2a5ec3869f9388e2d586937974012508b4a41bd256801520fb4846ec6f08d8233f2ae83a6cd6f7838076d0587440f659075257c3e5a2b54491fccb0d3b1f86cdc88fcea13f040990efa2f2e3a46e825ec466f3176542f8d590992339c8fa1f790f9e060daebbb962e127dce9176144f0c6404c7f2219dee285935fec7aed3aa7751cce6205fd4a305e4e970ed96d50e4cb09e0aa25da82db0bca72e80c5943dc12d18cbe03947c0d57616f41d3e0a1df165b8d130edf8e4e693a1aaabc75cb8a4e83c372cf335ed72b45f2508e5abfe5869ff0cefd06518d3f61e5f7a0e906ff1b50c72df300d1af484c6c1e3ca4bc81356b62166e29fece898bfcb3d7439bae1a893584513f9142928bce21f3722c6cb71c15581714c3e49dba155e95c8d009185ef92935ea682a212fee6190c533f280e09099519bd18594773174c65fa0a0e1538638b81d64e94fa8c3b041b43e3d8c2c367490a89d56c3c187ace473e7a958b6c58946847e6b68c51f316da1318440db12e0d8ec4150319b9249165f94f7b4969f2b7ff4658b171e60fad4221cb4e7659f2bfdb0fa0891dcb752c25fc676cffb7051d06242616e0132f66ba471f13f23b0fca08cef07613c7c55a5352ff0374303fd60ea0a951cf4970930b41a8e3a720c351afe099620b1119225fd7d35924db0d5694db5acf844800e6f8447c98683c0c0835a203992932f9e1607c10ec4a33d8b90c08f215bfa0f162f8fb706f64a392e37178debb30e21d028b6587d684511479087f343dc95ed49a5ad875b2cb3dd3e64ea391035b6512609bfccf146be03066e7b067eea0c1dbee858cc8b4d6387a05b613cd5554f4e3f4982cbfebe09e15e059b9a348993e7c139f9af67951f134ef358b0683ea56b423fe8faf9920a7034e9d8985f42a64187839cf8b70b016df8c580cb111ad3426063fc8ad40efb0df254073a557eec9e0aa762d842932173f9907694c885571f348305622fb7e4897e3005f415115938aa5fde33a5387c372f415f267384c7f0d0636be131f823a6d0f8324a43bf8867e2c5ae401d330d9bd6f2adbee519da5ea326c40b6078da976b2abdb0edc1b63a3d72b6263d5ea1028f0733e89a6a49493bb09b1393d9f0dd35f664d1292ae13eebba95315ce93784851303684ce368e2acf1caa63b271cf2f95a0a46eef459c3f39838fdfc43c67dcc0d7fe12589ef1671ff75c14303410de346f4787d2c680f5f2d40e85bca5a7807a5a21de0c1006fa2f7c5c71c1d69c80d51e43055093a28494d6f2e18a0879ebeec115d1f5a5e741143068877b749d4a3a0f2df18d9aae34030f038475d3688b98853a9e3e70cbe423e4fb6cd21cba8bd9a68908da4c902d76c11c4d78060e31c90b86bf2887433ae19f60b240b7caf0498c7c349f57703d47cc9860fbac883d7cdc624f487dca8f1194208e902ab491ac9060697930349a66ab0413fee28e269de84fd60e4a13778a3f5f1e2562fd922c30964113d9230667e148dcff6916df3935654755c51995f53e3d30dc2647f33446fc3b671f2063d1e5f4e91d8671c80d562ecc8f828a9a5ee05968afebc6318af2e89f14de4fce2a22d24bd678d95ccf4d5d4441de46c851549fbad3145d60652d7d3888bb1bf74097cc5552d5f22a2f91dece071d3d6f82b19f3f6d015d39f16c0b0e53e39388530e7b6a1b7c60f3d479df204ddcf5558b28762d97ce7d7dd0f7855e36391583495296eae63088b969044873b8e8565363a87df45fb428bc1c2c2170370e3c44f3d97210049ccc880ecab7c45e92c23843c8941fc3ac6a47c9606860e4087a5efd842d175a654ce01098e869267c4d9d490712d98cfeb10dce217be103c1244afdf8323eea790461deb4a8efb003b701e6c499e708ce01fc83ebebc29632f6191f032b6e46d24ada717e086700bc10ab29b9c9cc9691aa5beb04e806379d82fc4059e97c1e1c791744dd9462b0ef806d3030f4748944769c3db6e4c207877c8c75781d2f74cb8debc55ebcfb5673c1d8a80370f96eab08bd6b43e4cac9bae427ddca8567bf29021053d4430f29f7eae769439169e8265a11ed352e11dcd48d95c33657e4dab924be669f01766c24ee10a99cfc40272d13aa9ff040ecdb51ae801ade29c4bd1801bed01790a4530349823347e8a26857770d7e91b8208ecc3adf894670e680e7c45ff34e9d517a860d149952a62a8cab09e42e47a1b8e503f418f8d8ef24a7a3eaa6fccea0d7d0a32b49ac504a547b0c5cdfe4411e5b7a4c9b123c8c1fc9f1b4d9bf283dbcbd8fe7820b1349ffc71d36c345ddd0e2411df50c3ce3712ba391299377f43e0f2c168d09c8edd8b2f91e6f44a1accee63459ef70e2688fbb6eb38c139deaeb8d32fe436bb0427e76701ca8b3d5cf1d28260f8b4473fea7e6ff0c5af886d7da3a0a91dc00395df981ae10f8eacfad39fe3ee5cd2f2a802503e09b8e83c8e5add270f1dd7c023c5eb80dce31080f0694b56ac67c104694b1895e039b64c7e939994965168d16aae4f3409aa4f7d77c28076213527ae8ce145abf5797f55c7012d1709647301677c0c20ec576a4eddb5cfeb36d4487c0b32081aab12829779b5df1cd0e52ab4677c338ccf63a3b03e9b2c5f5e4308132e46c0d9e31dcd7d125fd1dbf1317f04282cdf54eae2b9de20d02e148c6a2c6bd4e8af2d3c3125901efbae06a67c2148c006d320853ca4c7c14719c3a755152d38842d2d7e85cdc593104aa0b3b6009c48e4041dc663c5b18090f1692c5fdd877c40bfd142c6dde43a1dd558e4a40d363dcae8132f6309453b05343fb3a5b0b3b818e2271a11680e5a823c1d03499aeaf552670318d05e09c179792abc39955875140265622fac1db48b3832f192e291bfb240e271fcea1c3352d4b5c001fa2c2ec85eca28e95b11b3c6d9b2773ec8076117f9f0e1c5c0c8f0223d5fde88abe5a301c1fdd85d992b1e08744f1c367eaf4601371057c019a419d1520432c486a7365e09910bf25e65d23bc8b32a6b7ac3cf3a57a5530c29d15706d8395f89159f75c3b4833ca5ba598756a7b0618467bb846db0046abecc8100db2b72800f6639e04977de7c53d6c63e228bf3b23b352d5475e68f55acb8659c214f9419a85d513fbc8428cd875d3afb388ceaf3c1863e535b67bc152cd0404c6cb1e836ec3f5d9c6ed30646dc07a861dce486e60ac6627fb3a45d8aaacb630b763c36906fc7990d3ed34ed3de3cc0c64b23a7348d51f9ad0c7ed9285e8b3c28cf021d8615fb504cf07eca2af7eb0a556c0ea3655e06c749eb39d3f6a579dce2b951d0ed1059c66e64c49e40882472d50ab64f92bc207b1d55f518ee0db97049d31d6cb9a3f3c4221e48160b9b554f152f1187d2336830e0593e85ec1f6da6ab4501eb045fb81c16326aa70120f92d8660ba9233bb2fa39da2cbf45a38990e79361b1404ff2a9944b78060427b9d9bfc624396ddf901434cf404e9a2920eb60c33101e5307d9aea0c5fb484e0aec2b0ca9ce554bdc7d34bade8194351f08a6cd63a8807324fdf8a55a0ab8abe99c1743c6f8df0b20bc439e135ac98e11bf0525f877a27cfecdd8a8462550e13704a1a16334769cc6239ca7e2e8f239b42c9013b9da2fb1791afb6419ec6e91bb5d440d4e3b101f4d43b44f3b212e899bc0241c4c9816ae781af7642ac31ac317cb1b893ce1562288f0bebf2e1a4995d3a9d898d039c484f1237d041e8d1d0a6e9568aaad74b8704ad610bf2315ec2921286a1fb1ac2ea68cd30e732289367ae32646ebd2b20bb7b4ead03e3e5de00d72a7b8b0f850e4035acf1ed9278962257bd83ac321f824ea1a0a98781be59dc77321c1e30158fa3d3c1afcc96d81fba451f1a9942a9ed20e169f5257e8335a9538910328741ded917fb4f245c709bbe038cec43808efe9ab4190c64db75c5ace0de7e66a14d3686dff8733d84e7243e1779038fb099d3ce23b61031b0ec6a1b67055fa157e94d15c14081dcdc480bd5467d58bfce87c291e9507c788a2473431e3771c6c3905bed8393b11b5112d856fca84c40b550f38161a094fa158f67e52023716364d87c31df346ecc4682158424d070ed2c3b8c1d47f570a3c511b305f83ced42ba56a572b63e241d498378526719c4112dd17b1eefde200114f0502d7b72978da6dde2c786c2270b7a9ba7c22d9c967559bb892ba1ffa4d822c0f8205430fcdc1f166a94b340cce22bf8381cb1bd4853a972c457f230ec307699b13ab70379f46eac2fef2e38ad6d330416e60d645f7f0a196f5cee8f25f0c3af7158b02aee20be793b42e792ba2829a0b64e940a4b4b4994c26bf0403d8f3e8b9e31c16113f4689245fb340530398c9381878727b6af972b203af9a021d2fae0dbab10d90cdfd16c70d5b93ab8b6e9ad0426795a6f88c3a4ef294ad2befa2c42bf34005da470230d07288aeada542a48729dbf06b3ab4fea9271e0fb0464ecf61a83c030e391a3588838345d1f14d0c58fe05d19fb4470c5724a2f856d064b91e00a53f86e0892351893d0f484a0f30ce707717a9e62309ed704c4a199b726d820c363ae5b5d81892011528f8abd00f7b8912d72286d06cb42358fe48103af203c3550f930362038dc93a162ea4b74004c7cf10aa7ed30cae7f62be6939a007aea5e4bb3f28d2f9ad961ffbce88c14b5991a163789dbccc94951d3621e4b1b402e8202a479e4925e9e9fe82b4d0ab6116ef08dd4ff87ac9b1ab4dbe4af28bde7672d1a009946228413f5ed3c4dfde90e7f2dbbc627d0b1a41ee0508736fd8f0c4f566d5063f0697d3814bffb8f97b3d0c4bfc8e82a87701cfd118662071044054f787c1016f27870ddfae997ac422656ea5809e5b018ed913d04e7d4f8e0bd9ba4f35daa9c7de2b46f16c38b32d990d13e4afd9c56e3258226c2f522a398e800a5f503a65ef21c3c03d2c98733b4312fd6dbc398eaaad6b7aadba6685ba77b106b929b8905dc49b4917032d7bc2473ada4c1f9423baca1a0c88e0b73cf1eebf2a4e5ea34b411b7a833411153607b118f68d68c8f69e601e9d660687382929699f86cd88a56a0c692332aabec997bd1f6d4a7a1e3e1abe4c8d8f27b91afd1e17345ec5e8fb670e4db74b35793e0734fe829a95a3c616d04d3e857c460d245a861a948fbbb26353bebdf1b5c8199bb2c80adf3201746f079cbfe64635a631c5ca960303d801882c3567112b596f6ce4979ad2e92c79a068bab71d3bece189abf999ee439f188e228b5693f521ba0caa0f6ee083d89f1952b8e92c1e70b517583af30290dffa72f9950d927c6928d637a66e3f428ec53d5865836319a1f4d319405e75cc9e8d0741122d2083d0031103e3cd0409c458e12b5a0a8d5037a221cee7a5e2d8968d6876650fb798402302af116562077065f16e374035a283a22723f2ba0ec13a7ed917b7adbcfdf800a781fac09aa69feeb179cd55b07f5282d251b744fd6b97d38da746f6a86d843bb295edadb80ad89158561afc33247610606d0be912c94d5418ffd304387bc5c546af8eb17b0b6ec034d1109b0c21059b4f9007f12bc872de91713f0a1e15de2be6d280810e7c461ee0d3f93c3fb5fdf2118c44bfaa85ccd3a093f10bb056dff00ed807505ca1317030e3691db6dbcc8125f7a2c3e653b31c6d7014d038ae828f27e1b0a9af287dd04e0e4675951ca24e65c18398b48cf499e400d3561ed878db1c8d9d3726e4592eb879b1cb045e07fcf77073ca3eed2dcf4bb5597949b63c1b2f0e0ff7db7bbfc351ce2309d4e28a51663880a0bbaf73e0c6cff0f4e24344447ccf0d13fb4c86d5678101b8d10c31dba224c2d9a4a63fed44e2c1961369b4e53075649f5099b45d09a7f8c2ab879feadcdb965c423d08ded08f694d710f4d961fe98dbd4e519eedc557c6b3ae65baf1cb08a71403abbdc00471047a417ecd8c125fc3c8e4fe60d7c455c37d1a840028f7c981fa6f8f30b6a1e19496c3c4b4c7d400c6a0a55cb6508a0959d13612ba478fee9f2259d97219f2f4e399d41f90bae301e04579b7096ff66681c89f00e2c00635747c3ca737ed440a84bbd231b1bd88e873069c6e7b110e947f7282cb164387e77e792af78f10493c13286b13b9d2fec62f877f4225d063871c9e8d99a006fa51e23d00c7b4863a696200957abecd698d0c011ce495da08713270f61c0990073fcb69fae08e770947735f074cf60bb010f9341682b4910130de46add3997451f42c636576950e73be0d003f7f4166c6bb8946d125a632780c1471da09ac12b7eb86d09d8d317eec8e84b6c5000e1f47b441cc2527d9606aa0f122788a5e11a3705bf97245cb8023958d1312f6b53712fcc8108cdf22c6c2ee0019bf1b58029feac8e8539044fc6b5599df70d83661538bff9e29f0ee1bdc6b296afdc89fd30335883f0ed1cc730f50b99ac238ce408e01dd2507ac9e7a0bf15c52dabce5901cda001a9abfb3a68e6c4555845e1a126073455ad063a44cd8464e881c562bc249ed04b9900dedaf7526bf449532df8403e56930b1f32730d157825137106e9e4f6152d97e103238e00932ee03448337f391e14b44397c0dab903b489ccf67b930e6405d4cf80537498f2481158dc049577e11e7e77a9aa4ed262a84bca7d29af6b2c180c3a135d18c4edec7a1f8c58d7c063edf8baf8f10d1fa4b75ba78a5df0737e420c5d712cc792f8c0c8f2648c53b81556aab001a1ecfda983f40bae44c08bcd8451cd2f8b6cfce4e3c0cfb82fdb3bfa74cb4cf68855888f5caef5dcac8862638f0952c74d68bb149c77b892c078caa561463dd5dce42bf14f06f6b49417119a5528e2535c41b756e710682771fa5c152177ac27a571e53678db2731dae593b0021e85f49b1461ffd9dbb2e86f0b8f3d3abf64c799d97bb8f02c8c32d87fc3c1c1a72f6a251580f49c4a077048dd02decbae22e14730ed6f6210b1516f94173975ee62ccb09fccd71d1321e3c5384d4ee635af29f750d74922b5e3e6b038ba7cdd0e2746a48d81ca2903c0a2c6827606c7b2f4909da7385862751bab5e32e4a7c86933dafd4e57b2e117efb0700d6d7a48124ce4222a8c5683937ea0d23dfe6c26a3cbb68d2869a52569222f75a3d48311dcb21bf6775bbf12809fa195ddcdcaba2823f91b5c7800ac6dd20ea7920d8d89f6601bef64c977f0503f97d1450dde90e184fd393e1e7c61dbba94cf041d4496a401d3c3e458a3ce7d04589139591792e55702fc7a4aa15d423fe00870471962f481a4a9c0c9b470837edc3b9d596711ebd9dee9d5d97e4866f0873a327b17cb91937a97b4a1b0aff4360f997b0677cb49b44cf65de8b0c9ed9a101c43e00182cdd1a1a7ec843103a4d91101fc64ed2b92e4f1fcd15194e6114cc63b0e0f33f3d5ee8222305b228cec8f02c619cf69baa99173c13d55b8ac27c0ed828f185ab3827820583530e91fc9fa72dfa4bb8f08d5688ee099a093ccd19d3fd356bfb35550c2f006d82cf8183f3440820ff0b4f8a9713467b4fc32f5da68e8de7557170a31f16ff814fc46e228da1bf9ce1783148fa1e8f9933b1a659a6ce766588d3b48cf493afc32c2c06527d4481884ca591cd7d3675bce652928fe1d9d99a89fb6763495a4b61c7bf068dfe609fe81f1922d55c3dbde7b48165c3f90c6e04a6c6894aacfa646c88bff383cc73812de8c005dc0fc2047b3c6a4eda8bca0bed515e3f14aca83570f79c0ae95b7c0236ca9b518be56e90a8a64bb510ab3812e2d9baa4dc4a07e3cb8121d02932937806433d2deae28d0be121f1232818fa9a2ddf272596fa01d4330f44e9c64f9c887c3b1be0bfd3a5c11e31e18cebbd01b213012cbde0dbe15ea305fa5b5eccec1fc3a3177c83968d2b22623b3a7e6e1f973bb6a302a2e71296ea22193edccb1e8c6f1a5cf1ad4154becd04cb57d382f51fdbfef490069a6f4433769762687b4c1b5cb69b24abd7ca8d7028cf415763f8e6f1e39763e628d35b883cff46eb02bdc4608f372578fcac69f621ecc1c82636c9d170032ec45a85595af3ced97e00a6823edc412a63b1c4f3ac111e5fce0fa56f82356dd90c8a6322363991189f0f27c9ee8f4cd9bcaaa9efab80eb3e4eb2c843b1a29f4213c7f7c20ac71b7b6c5f4ae5fed00f34ef8b43f5751e3d6cb6ed9203150e795ddee78bc5a012838d41a0d5c2d034941c395ec30b333b499ca03da8d5f4557230f5011ca01af58fb82b1497fe4037e38f984ad17920797c0aadd69f40e0ccfd7424fd892d9a9e359cd2423cad5c4a0d4e6b24293e28884a632a68f26b2a327861a10bcf5099f73d58fcb85c5a115db4d5631fcdcd7117010a3f365542cbd904d379be535a3282937fb0e5b41be59cd84e4d52c4a40d12b8120676b41534007c480a922e7244f5547a615a828c083eaa36f446c4e8f91242133e01e48f2779c80d817080b335d1f3397ce0bc6d2bc2d3c0a078e79e0b3fc149924fcd5dd8030a0fbc1e35a0720d2e5e3b0f4f447c25c3816670e4297653a34a4792f5c597acaa9a0d171ad90b5bce952cb97e0c698deb9185d19b4df6be4f8ccceb55b8fb45184ef69113a0ef26473405c431bf78c0759f90f1c5e338c0736e1be96b79b5b15d9861e3545e4d2f4263f03f7db207ff89a673e593c1a828f06856386a0bfc0ca710239b7dd127ae228cd91e34f5f3037d2cf6dc8f3d3f9523cbe73ab4f8ac156d7a72edf045f3c67cb50acedba8c0f69574821e4f04a4dd054ae45f9980fa8f59881f6621a8aff4bcfe7bb1b0bf0c06bd13380e8e029386cbf1e1da8c6320dd10958b2ecadbb1fb6280d823e818f8b53794bb0e568266fce1c18d0899f1838ba1b21d0c74be09851c8f055ce633e7207c963608cec329714bf07cf3d70239f618d2b6275275b7ffb6badc8a19181e6799e2247878706fe9918352017c2b044d2fe724540b3181e02ee65eb71d201e3fdab9428614dba05f417cb54a7a4336d868610c2bbaf49e181c77591542cd6288a466028b711a565b1a84abd3c31ec2d8427b5c9fcb871af7138bf1a2994ebe952d87038101f82436587035a11fbc0524e0db6da13d5fd7d4b186fa5ef0d1cab3850df5de6b7ed495aa1f7221412f7e08ed621180be9162cb5e5229647ba823b3e5dc797d4a370cfa9589a90e2d0160cfd170e346f4c0bc13a5e60ff1def9279314ff072abb1a32b0af5b42f82c808cf1279489eef3e2c921a45eea1e24145d90f3e8b328bdf0336c2f5e2e49ce51cf48d8248424fcd0052b5fa108fb828a5a7b09d795a740eaf7aa5374f413432a310e225d2f224f102d5311b8a76138637f702dfaad3674768f98d45d15f3369da23bff4af444bb129178b0c4bd37df60f104ac48ce98618cfb8466399e1c8017a223f54f84715f4647781f8012fa53cea0f14c11723ca80c81e6f2a5c80ed0c34e3ce36e4ac338411a1b3291a09b544011efc843f456c312f2621827eda8c53136435df46dd69a06a520c7bb7060d5421648fd269b041e4308c7438165f34fc3adff01c4c6ab48f8b988413a0d0a47eb7f2c29f08806a2bc1dd6ec69c6d6f887c2075fd520cac708f25e0037ee1f4fd364097860e80e590ae50833d48b99432736c1618a2ee18347fe796a7c5420a8b8936f870f96a9ed005d2a5cab79f00052876f27e7c433c24173b944161f7177f42d56c3fbabc29bc3495a3ea71f038f7c55f00eec087906d453dd6505d1cb7ccded1377187d6c94c466838a423fd85b12474102e91da6a7414bff5f9f9891975454f9034d11349e277b5e57254d56f00694ff2cdceef245860761913a8e24046fa1a9efd336da131dd8a2aff04e7894ae08dad275c77fa55aec3e4e2f4790a3f5195475beeb01cc9fcbe0f59c72986e78a3877bd0c2e0524162f48a2c79b2ac8c9e5b6cc5e6564149e535abd8883f252cfe0a166c9b480f49ada00c331b67bac31e39783e2786fe36e8760d2cc53f5d92632739cbf086db175e091aeb806524f592441fbe26e085b7e6e87c2b76b19b8c1b9943aacab926063a0f3520f6b9d684b91b95f78f5c3d3a09b424f1d4e8d8860134f98e3476e83232d2986d8c9576dba3114319a3dcde541d5732097a059fe611806e7998b006d7d114c0a72cc8d940a4a0b9676a9da33895e0596b60df8645d2db44b0a0bf7c1cfe95b10c3b039eb2c723054f5b9201fe9d55ecbf693c72a31e5cbaadc61ecd048c5f4cd987e57abcb8bc5b650afdc3c922760207e311915ee84617b03bea6749678994f401a83af48e28033cce7e3d2381ab47f96d7953ce366fc354c4967c52c35d4541e86e5e977fd4bba25b145df92773ad7a02931c6f935af574583cddf5f3ec3c554dbe47c1935e5de27ca43b07b1e4a2a9660273b2e5343a6937895bfb0e89a00ee3d0249643a847eb793260f3e0e2f3a237cc341c1afa1310697433f3dfbb5111f9b3bcf6795aad76e2d814ef4a50a5676088f25d7699cea0c8a2373978dd2cd4907a5c6098f6a2dde04b7a1c69026864be75a7ef4f3012783b21663c9e8d3a5a881714ff238d809f037a23ae626089cefbc9b229cb48f5184a1cf2946d953f0e355fec11fbd90a5c1bc7833bee9647d63702203e5d193bdd35f3e3559cc17cb5167e9ec6b5ded4abf37b2cca3acb96b5ff914a668f1d39f0693ed4ed2b4e3827221ae559ac59f8336428643027cc7f42a252f790d3f04ec694c8ca99b5365fa48778ac2bc8bb89b38da9d0e0dc6872869ecc3b7ca8218e5bb532d2a136b71ee574d0052f20e92e377eeda1ab061212e6409eac7b55c3965fca9bfa023a36bc8f14de8d02768cabb012e017d8383d8d2f4eb724a1e59dccb0a339c461eab3289b3bb21280ffb9bdc55c90d2386a9390fda8e8e4b9a58dd94b224faed54c7933a3615e844bec8e63b5fdd529c61738a0f5cb3b185e60898a970492a14fc837fe91c301a76044e01bc5c63cab9c905feca6d0a32ce45c48e30a8f0384858fa912606b696cea0d9a3be20830e43490a509711886cebf6ab1645318b0d510348490ddc8e8f1836e36c4635140de0965024d764ae75854e9fe0b8a25a7e1de3d27d6844f1942420735c17ae8e96f0565802e59e6cc4f7054f42c246c6f8706842b7115e00f729cf1286f8aadda24d4e3ac80f711140b6df7a0c1bb787365fff05aed1f53c0746cdc0fed370e910f1434b35b476968b842141aedcd05373383a8efcc3ef8a2ea8edd16e1c043d12d78299987cf9854b15d5891f2235c08f61a0e1b9e0842915e4374753a6125bb0bc50acf8c3b9f03dca15f2639f26d2e395f9404d847dde6746a1af8e39870fb2a55ad2e85059e0732e0c3ee1410664f20636247162dd95e0d06f71810a72733e2c3890249781259dabf207afd0a92277eeb01bfe392c756811ae0b1f8c25bcbb5c60fbc51e3a719b2fcaaa58d6d2552f1d5b42df1208f087ec6092a2731e0c47fe11ab059e0add01c6ae0f9b72712ae65c993068d25d45b2c5564f55cb13e421f8c388023a283c588933308cd70b42f70b49931ab5ea4c5a8362323ea90971e36d8d6ccd30856f99a46d2df7384a123b5a0beaa9936db8c1304cf64f0f7302249bc9eece4871715dd137b7c01414b4fe3a080ae83c0b51554542d5090568d418cd3fe5260f45e6e6ef68c17af1af44cce32e99cf01f527088a78cf8f2b28b4d1dc864d3d55270ba91259783be723a11bf158f4674ea2d139bbc5c458f2e8219c02fcf00e81e72bede31898477dac8fa080c8eec2159b4c730c6c9c31893c17f1c80dd13661cbacb8fee97a072e557383111338ec9d47e5b48681108893ea95c896d27abf469d099f03b8c7c713142c4bde3ccd50b647af50f9e51f76ea66d1862544fa448c03f465a7e12b8d50d69a1cb49b51cec57300b9e0315d97b18cae34566b0d860bed3c370aa7e8854d1a9cac21c4fb0cd3b892a74991be1a1342d692f252268b7bb2c5922a8a4bd3503766fd894e10980d8b91153008f64038aad034aab67bdd9f04a442e7c0beac57e00c9c55558107d2bbe33f712667f5ae3f2ebb880ba83c7ef9f8ae13a0eca31fe15241f2ec888e3212247632965fa1e6bce7c9a32bf0f55fd92fd52fa78a16c139975ea6fff8809d14cb64c7c92ac3b19c107409de2ea8b2c24a5ceeb4101dcb08d71fe0491007d4a20ed2b5018d2aa4844be348ce18edd103e2bc69716f542f91e617074ac8f072f8a18d65f02bdfe9822cfa9ac3874bc2537be06c4974b9930c391d25cecc514dcbdaa95a6012d9888b7f278bc860c53f1e4d9950d2289f529b9881a485669aca725f2443218f5962461dc8ae377bf89d5f38da73efe8650f4f55848db300a01b8cca542836101eb6c0040f5611e07bf311f7d9cce181f464cb1c7d428e39f8a6ddce8278db7a030642730d240e3887bca526033f68a687a9baa8007dd65e225a61166e8177cda7d3784d64dafd6c438448c7820a160f4560a213fe4334a374893ea9d2f489d8d4cf189dc097d8cc4c09741a5c9c7b06ae2615ad4d09f5dbaf82a511bada449999f43c0abd31492f12ea8128ee1469cef55b1f25c5a18fc2b93d2f6a230e53ff800930dbbc4b27f9800236f197af6d89e86584bd0c9e3e050609ba1d4f214209778945211cfc2b583e33000c019b7b4be6d83e3c157e8ec1d5c1a1c8a0c4d9f2011e59a7ba01bd549e34f2171e323b9ec1c48aaa5ff3c967e5f8fbb6de7c4a1470053a5bbc0c4f94ad6b39db400d055f767364e40a3d7210ccb26b8a3c593c4eed026201144d3e812208761a5399b45afa6dba0c5317df4ecd5b63b7f42114f136ae9bc8be1cc257012781b5dee31e056fc9bb613fb8d1480bfa8f3a7c150107a12d54b27da3afcd0dfa2bd3644bf8f6df45b381974c7274f6d1305259ff50684ae5327a45dbbe6c830962cd1545898886707725cc81b5abc43d1c75749ebf4b93b9fde47a74a6b5d3975116d1c77981a526f821bb6ada4f9f32d271834a32490479681e14b3c90b996cad09d4153823760e3b33b5ded9cc926d01be95a70202de274e392a3dfa1a2cab1b8b16944fda98538e9fb32573de4cd9f459d81316913a96ad073536ec861fac91320434387edd4398d3a3174dfeae87fd002de4c2502bcbe60b63f0dd73e439d0a17b3a68a6b33843e61efefc75cb4fe5de68157721ab8c90c60f26ed8f2360e28501f000d986f7d53f3037920f5944cb50fd54363df5064d249ac643e448fa2a76c0140eb6560c373ce65c5707c3ade80108127b243d1493d688dc584eaef48ede2643f243f0d0c532d17a0840f38ccee47412d2f238c379364abe77ddbde4c250797d3506e147500381570017d143ef329b60af82691398f452f748b90a57e871432db885d8b1f5550b5812c08d26d5c846533ae3b5fdc91258b9978e4590897e8d027231773228cdb6991f4265a26fca907295ee553fbb15c520f41266fa7d1dd7977f340632161f93a1ff468a121440ee451bb6dd491f9635da17fb374f959c2805f61c14f03702cb9ad001e3d78a0c44eb307ecab46c468c9af7fec911c3b2bdafa70b83ce3c5affb1887a6ede4c29dcf81c9f313f02638e21e24171d65e09fb1075de24ac39b81a93e110c252f82f06d6f2627aec3ecf5eb9c18f3371852bbc00100fe5be2789a38f1677cd0cec2c7ea5f35ef1e2cba43c7656e9b096cdf83515bec3b49566cb08ffe1e77885ecc012a9bd1ca87d7cab1b4c528c172340fba7c42e51e8fb3a9e2c96257fcd10e2f1a4b8cc4fb1044d47bc89c7a03234d2d4a97fa41986bdb2abce185b8d8daf237ceb956077e5b2ae69661b0b6153b893a818926b1ebaf781edc00f11b9b150ee5d02fe683e2ba559310c970be90be171dd98938c8be8955492f3137e96cb224b52300040e423083bfa2e1f26486598ea74df391368afc1631844f19d7b64d8069389c2d90bf53b6c34fc19474dd02a0379094a60588be782a36990e46c814cdd94591adcbcbd356808e680311aafc8a126df60941aa2f4186b959847d3d860427b690a80037d358c59fd898e2624f4eecb16e8e9f4cdaa0050466fe601a22cda4f6f62c96e27c85e8f7a9c809ff8343244ee685c1c76c44f81ab239bec2c613f7c129fa7258cebc1c14a4bac969d24d7fc4b212049cf8553505deb3ed8e0e7ca3b14b5460a23b4cb88bf3560978e7051d718b9fc24f7015e660568b3c08abd5ffbcb0f4ba479c9f0256f773c884ea2f5c619c9baafd33568ba761c9722961b29e8b7444339a413a19a222b7d365c3cbb040661fc29af853e7dc3bec4ebc148525b1b74ce84f1d7568331e66fa838b38fa0d90fb1e30b931ec19a76efd04d47e493df82835641aef4389b77006c58e7f523c570c4d9f21a7e17d0c5aed19a154de102dc897fec8e25e7f6ffad574f11514c9db517e603d6c75eaed26f51cb49bbaa57439f24ea4c8ecbc3c0e34800a725bab40900d20c40e2d98de9c2d440093e6d236e8a963865ec51350635d89f4395d22ceb41dfb2c7ac63881185e362c6189bff0a9ba4c4f8f8f1c1045f7a129b90c05cec508de703b559c7a0616d657283dda200468fd0fa7bcbd054de9eb58d5e16d96633cf34514072240519338e420172063a4a50c5d69150728d19f4fbaf681156efe6c83a44e3ae0f43722986dd2a6067e4249eb6f4050c295b482eaa5a3263f4897f55a9a22781636517f8aa45f880a9bb3d1d1f88532b2de5013d4a3a056682b2649b712478cf3883338a192c6cde8a0cc15b05970386dfa742419687648c7e136020436fe27423dc799b03f73a4d06bf8c474952ea9cdc73927fb0807cebf567474e482b57fd353db6c75395e50d3e9202eea5e144fe8834d61bd8891c5975046cd41bfd234982d08b7b2d4e5f21a34ee33a580d6d3be0f611af0668e6feff3a4c2f6cbb2a94db5495b879b954fdc1392fd313a420fe04ab23d455fdf75c8902dc44b979fe3b8658741f2e1a5a6447d1742941fd300c4e6c164cf2fedbcf1322a16bf8aaff3c98874bd5928eade92abe2df1a439fc4020adf3246cecf686c2fdd75ba0524e45fbd18db4ba0592fb9e5fde14b0b0d2a371843f101fac12e0f7b33bc4233162d6e29e11aef05094b13201ba253f3c41bc889aa7fac82b79f1028f99ca92a0f014492af4a05e9bf3ad867f5b4daa65b8c9bc9b1dd6f58764fc66acb15c4f8741371a6e86d931a4f2270f97153642e2193efd93c9dfa2498ed8642e6e7eb3e8c713164903407066e7483ae26ef00820259010b2f6de674b5eda40c69bf2f06cfa448d507c422d15a2088fc10ab4e7317b8bd87b20faffa4ae565cc5cf66a0652570a12a5f138a9f10f597074238c2c9ec7b9e97f70c23865a7ab6b6d80e30ff03c6d41316e6fb4008a8e8545da667fd958abc2dbc600254756042c9eaf902865c751abe0a63004779340d1070501b80b5ca1f4532daf0f1353f1431ac81e8857884f5108e966c2a7be346786c770381f0575d1c3d210785889bdf722d971b094291e03c6e77b8142e8381c42fd8088c02db963ce1b8005da79451c34ab1a00711db12b2dc4c88667f286caa7e1dcf074b640f5880941f18623088f07f2e3214e2c3d438412dec0698fff4045e105f0343fc8180a7782e58ee780cc7c47aaa06f23f3458f2943f42bc868bd989ea32339a3c095b416fd871020fbcd5bd6cb147cd8ad500d9c330e85ee5146c89bd961da60445cf838cf0939fc05e368e4c0db3147d1ce23b5f25b0a2bbecc0be787a802e96f4541ba9105857fb029f45ba6e6e75a8c732427307c98b132fa0c04cb5781c5c85b3c697d157f27349ae1071763a1e646583e38133b506d15667ac0c94fdf0a31e46731d227494041ff5d70a3694cbdd04f1974bc8843191b809b79d3ad59d5ae6453bef23468e3601cf3743015fc04320d3b2f0b9ce7b1e1a00d6704f9233f058f40338137ae91f80b457b3c6b09a8ce4ebdbd2417577d040e84a33972f77f9cab3e4494ee2fb1b0b88e73eab384117ed5e083b748e5f4269eadf180025a0d26a6180f3659d1816220c83504b5361b0f2eb9045f8b1ffde22aa35aa8e270919efbcb9ceaaba0e36ebe02ae8f600c83c7e17475283e6edc0e00d1a702bb6477faedbd1450155a734dccbfe418d133b6668733247d034f5e5f359bd4a871805c94d4eb93188b388a273376e953874d96191b4321b2f8959eabb2811f8a7a872a82cdb7c1808e0bf28a994069f3342af5f41e9c296ec674c196c3e5cd7b5880f586ad41fc07ac9cab6140f9446b19f61c34c13fcbb87aaadb8f671592e057f0801f0d14301ee6e8e75b1f91face8fedd71cfbf4123478f41745a886e382ea41f648c478a7523a6aca907fd398679b3ea920fb4c2278251b7a7e2db2ea95126479a297371ec6caf9870b2cbfce12c94d4533d45978b57915af8b3e01cf813e3ad2f096728a68f00826af6556fa4de064ffd151e8e1f060f42c0b353415014d2f424ab579c4687a1834b6715d5795d6029993e7d2463c101a583b3302a2c37ebe90c542a0f9cbcadf77e8607e6b062b3bf1c39057568973115b09dcc49b397ac636d20f98e8f30e5309be4707b7ff2953c5797461b2dfeaf8f89518b45d980ae2e950b0e063dee8fe8a9895cd8128fc43e434d8413b2ef5e51c50767349e23daeca642acdadbd650b6e45283c4e44ae4b965061c67393e88813fc7dddc58ad955a0b9e292479b5ac31a109764f0618766213996923e8731c084474084e2a99971fc49e404a7c363f11925c8dae810cb13acd9d2928edf77f393aa7b1409f52695794ea49188f6b93241374529d8549071fa9270cdbf9de0cbcae159f2588e213b422f4abfe579894f00887ba12796ff64d4c7ff64257d91a9d073bb36ec48a3d0979cb1f71e5cb4f8029a0a369629063cac094373f9faba1e00d3ed1325f4162220fa1401323c54f1c9ae9165e2a38c7bbe6b8b8d16aab144d69641e36b4668ca499cb079186f17e2231ba34f8488806ff1e269ae2f57728bb1176fa14e110df665c19fc014e32daec8f9275980db421c1c171367443fb0cb7e010403768c139e3f7409b75f4dc33c123498bf9aa5e52b51e3365913c1af23b6f73f24a4784b3a5f3fa4048bffa0439d4d0ec46f939cb21f68a1a223f160c549734434584d9f6c5956e9212a9488f12c10e24d00be9b3443e347d172e807c428fe82a2bbf79047ca2fe8b5be1c5b035f7c43c0a5a4a2782dac6d36679e25eeaf4a7495a18e27b26752cb3de1be073033b7e104c799107edf3086091d8282f755e4517812587ae8512b1ffc4eca99fd18e04f1fbef0ec2a53900670a031764d8df23c0a3c7715ad37fe44678ec38e9af9ef1303fd056af5011b0add5231fb3290887017764e5e849809bb090e2d0f9521627b100cf135f06c759caacacfb301816e0457fd9ac33eb75a22462f55ce3d0432273ed5c295368a14753daa7659ce34c75df90762291a78e8a3343b1b464789171365c496afa8f9ae5733be22af805fe854a03b00b6f91b1269deae8ce99d44c7ec3144ac9c0dafc85e0a8b72214646dac76608d7a3fca2c35eec790bdeba8d02708dfb5899b203acc5e9073414c495aa7ab4a50dbf58cf27068d65874636cbed526f2041a69db29e3c6e0d946de4d3ecd18818bf0d4c16c7d089a631b8f1fac0277fd975ca9345f9b211b550fc87c60d1fc1b4c707d161a4b9445ffc5d3687c328827ad23566fa3513c8e574affcf3cef3898421799ec2d86f2143cb8946a45fc172531b6600cf2b716d900d0c03e307b92065d3340ad93de6aee22c5524f892219d974e8ef9e106fc366459272adab3e50c89f1280faa9f8937c39db8269c8f35c84dd8d8a05997b8bc1b24ae2d80bbe5dc011a1efc86d5638482b9558b165f83c8968fa1a1cc3bdd1dc5ac6411fecdbec427728cf10b964e7178d085db11c2e73be2b8a79a6ac52da09ab884a1baedc134cabf3185b07d08d47d9c19571de52de89396347e132e46df046ce666361eb81ba0e09ca5621e04f3733729f1780a4b589a818d031eee92dee561e8c6c390471c27040bce65f3dedf60a0de9fe2e195c7d0464d8a60b9eb0a3ba0c2787d7f8b78729830a162a1de9ca06c26040bda85f9c082767b8285daab70e2de9c20811e62a2ee51616e8dc117eecb60269b19f7fec0eedec1bb39ecb8135e81c188e1bcab44b0a060a11ed65c3613820567b13db0e01f1edf4c58f81746042726e259ed81f7c0603d46f09cb847a85898378b25ee112a16e6cd8988e070e1e20c46544c2444bb40460a12800e4c8d063c74097dfd9606ae90fd30a7ca040dc4094178c4b12a993ae38d8e985d012f3864847210614ddc9922d2374a390905740c90bbda27a7c893adbbbbbbbbbbbfbbbf7747c9b8bbf66e0e08ee9ef56e0eb6598c110baa0f6fcedddfbba364dc7d7b77348cbb73bd9b03cadd2fcc68735f096b10e0dcfdbd3b4ac6ddb77747c3b87b917747f5b85f9819aca5ad31408393ab9aa38036e7f6c6c0dddfbba364dc7d7b77348cbb077977b48abb4741cd751766b7b7b5b92f83353638b8afbbff7877f487bb73bd3b2aba070eeb29228613090bf5c08b7fe1bfc13f44c33ec23fc4b01c5c9b591fe11f62580e2c98f797f827013cf837b707d6f027888708260437000ffecd31988bd047f8871896ebfaaef511fe2186e518c1e142f0de9f843ec23fc4b01c23380c1604cff511fe2186e5c082797861c23f44b83ec23fc4b09cde1f227850d16d0e4d0e8d811b5a843834b93ec23fc4b01c58da5c8433b4b92f04b4b6086e686c5f340810d0d6d2d6e6dcd0ced6e63906680eccded8d822b835705b83302737cfa1cd31786be0b606614e6e9e5b338380d6006dce6dcded8bc6f6f666e6eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeef613e4f771c52ae1710994677d8eb7c3aa97bb4914530bffb924473e6b0f27b6a14bda395d2836348d939f892b85ad40afdc769c357b8b1d90e1aa11e0cf9666f3d75bd841b25bc4ddbec3e5f283ac4549927c9d1d211dc8c71c331aace233bf9a78070340c3d6faf0dc16e67baf8b1b1b13b3636f6636363776c6cecc7c6c6eed8d8d88f8d8dddb1b1b11f1b1bbb63635bbf0c8f26a7cb13fb26ccb87c0227b1fe5c16e870110a3ec4ca8f9e7025cc15007a7add82353e0aa4e9b19e025f06fca721d95cfceb16502f05baf3aebf471f71d4e22b9f58d1429e3a5e2da887360324f6a71c766e4f3222dfc8dae98f24ca017d84b600c252bf8238b92b30ca70777777777777777777777777777777777777f7770546ce1ea9c09d9f52f5fc2aac5affc929648f1681b9e31d287a04184557e5ea6a27667c9eb665c3833843f51a1ce67c5a1aac3b718bdab144ee3c93f36b5bd813be29d4ca33e1b272b0940ef263a0a90e00e66d9f09b2fa6d6ea8e92c43345fe487601c68e446bb314342db50d4e32c2e4b7c5113314fb642898e1281e565984cbd12372097913cffcce7902f0272b14f6461e05574169d869200ff8304a59bd460bedde6d3a4dd22dfc22bea64ac49dcb4358a6e53b6f50078a0d052e1d227b34ab33910c1a2c5b418f8334932df9271de119cd874e81a14d9ae0e21af0409a8a60214e97aaaaa8f27c8068fa2436cabe5903f2bd1c18fd983e79c7a477b8f14944fd281c46e1325cabb10c0793267469e84090aba8c823b9a93829d42d0c90bef7cfd861ea7f38862f474d0043c9aa011bd7658bab912e5649f8a44d1563308dd4a243b8f3cb1af119078709d87bf0037c279a40172c13b5f3e4dd9014f1246fa4ea57e1e6939e0b51814d95b9274bd8705395ac18e2fdeaaa8f54c576f5eac01e0be3046e665d889753cb7b117ba53e6ab443c3f468f21ba4be9027de0cda2be12a2d1bd0869fc273f4e7d089a466b247b4fa704d93ea060e9a1d0586aaa12205cca43968701d6ea5a685d749a20237c802988cdd5599fd6d4fd3355283c2bfae02968cfb85999b3ddb763c343f91057046dfb2e291b7b8409374e460cd5663397c5d5f2a4c86ecd953a8cd46cdc40440e8d67462c2e5054e95c8ec4b43bf1523735eed156f8f6bc04c5afdba913e437689ed13e404cf8c93b2caf9505ca99c451b6852216bc10e9d361c3de4fd4a1b9998d570794c2da821492fccf40a84b821d3a0a1edd8f0303cd9fe834d1719dc51f5dc38defa0e0dc5b8d9c6fe4faf44a689cb441504d765887c0580fe2d48fd953a7e130813a2765ac6e831375047a4f3e65acd155e80875d225d9bd4b14bc7ec2f96d626f1a44570e572565e337302bdf89db0b0da40c884f6178adfd12c3af84c9d2ac5d80ef5454a69dd029fb1d6d89b2023b8a5a4c48363e1301f5c18881a33dc3af6f988645765593e64f980e69c737e11d582b7d748ecffbd9719d8a13cc9fcb23c2251164bfd18ad36b06708fcd41f84624df785926a5cbd901c5b7b0f9d4a078a23c6425a38ea3f5ea884f1c743889c247565d6a130962b70b90e51d568868a8a03afb85549e8f01c2b5d33c41fea8509618889459fb2889116f022670c332c897a177e89563b63cde9f8317cb233fa2901a9fc708866f5580e291f214f5985d98270891c6b7a6663888cb38ff4003d01bd358e9202ac0def36ccc6f41b5f34fb6d4702c6243cf15c270afb2616a21263cdd078be35394b688ddd8c8fcd40677b615d1051fc605b67b3095f9b841bc4f6df3e2452e04ec1e5c508fc1a8c5d336f1bc9c336bdb95d2c16b8918ba803b4a7ea9460bed511c7fd529f3b960d9790ba1523c098b916fa0d0e6efc000f4c624483e6f3ed49aa8e178b184934782da647b8130a80918d94fcab7a8f3eea2b6d380285a2eacaba778817e8e72dc45009879212c36351c161b1ecd15290e428e8f370ef9f2236124be8397e3ebe901e850c4286e223d189ebae3ea09f7f478aeef1c1d0ec0e9578aa4f04526d97fcae075034e5b4f624456b6b08753b72949d2260237e8ad3d29f295a61c9d19e02b0ba7489b66c215e351a91eb8b774704faa0ef9522d8d9dc1b58ca71134e0108048789e2ad95b0fdfb3344ad04e5a4439e483acbfd1acfa19a523b488aba637fd21e3b1f2d0b99d1286fee6c2f1a37411d28c4878e86c9aa59db70a46e36de0931353ff342c5cd75642e0a9a53a11b38566653ba90205f9300e9217b592e78b6c89ba1134cebdd940864341ddf1741180fc5b609b772f117c25a59c5f8d04e172946f9a08042b7f1aa2c546e276791f2b89eff646f55b85a71fcb08733e3309be831635ba80649b38f5048ed7b145120f4153e43d45a026026ca091b82ce415e0287bae93516faee9f13108097aca32cf07a608b1737432399d07c5579a83e617e21f1f35bce151e69a36570f1f2fc7893e815989930003f80f30ef5ccb5ea2a65229f9d92fa98d7a25e30b50b0d27964252f2587db937802fcd34d3ab10d195df497eb23fb161940136892615f0ef0a0e97a283e8ad252e7b3cc7c321f331fe6e8ab3b5fbc784525388d622efb5abccc69edd29b3f50a0f1050071e04536c07a0736321e8feb815e4285729f0f4634d799415f63c5a0372b4ffc9cd6dca658385e6b891b397184e12eb311b7550000db8b8242340f554a4d28e5247644a3bacd14bf59d23878fc800ab18fcd9be2750fbaee2cb4ffa3fae3575ce970ef0d170fa38ba0877a81b1f9dc68f01d491ab5a9a98f0fb912e13f7805ffc51c413f5994f39f68ea7c1f88322f223ab3c1c28a6f4774c1af3571d24caf767a8c89dd63010040ae5a4bf3b118e46434165eafe7938b4edc1e5c45ead6978863e9aea31a761920830f630c02ddfa08c1dfb4bed1388cc4f94a45563d0809c251ab269feba9ca390badf4ea1639178541c10d18f67d38b3caceacb3f44c9b666e02849bd78eed98334d160f525866474540d2a2991af490324b1cb64c519b7844a5af9a603f8a19a2bf39bdf33dfee0bc0bd21d7f073ae69fc8bd6e343334f80e0a62aeba29ff9132f12385dd1cf52a6a67a661e026d6e0e8c8104e0f850b976b1d60fca6532bbb8e17ea63254d79077a0475903d4773b1aaf3594090d9719462f58f19af16b581e45b7ac88ceb540d6ea9ce1ada538bc511ad68d17d232c3f46179ed7b0a4eaab96a0683332497f728ba01f43cc70596a550b4198e018bebcd87ea18caf408b4b87d7a43e66d3805dc0703f00045134102348cfd4b0f52b0508769b1415ff6440578ba03016c39d39d2437a1ab5015278eaa659824c2503cafb6082279ebb7f0f23a886f3d1b1f014a33e2fa543f141f450f11c44087822696234618fcfcf5a82476f2270f3571b219c430ec65f93e04dbb9ae2076aa9730c5d1a0f098e7a30549e4f87c8e0ff51f9d2ab9f38b27940b73815360231072e339b0b4ee6463552fa2d030cc804006470144417b2738e5e9f3907b5b962ccbd111468deca0ef35948427615163cdcc165dcfe15635e83dbe357a8bce2bfa9bc89b9ef2bd8bca29fba783ee6170bfe7865e7b94d2a9c8616087f74e54e3fa1b34153c6bdfe0c2229af92ba26960b33e25764b2885da978fc99a0b0dca5c3d7df282b238721a2c2c1c4f1b163dc95f8094fcaf86a19a96fc40b3b4d11e34340bbe1704c08f01b29187c1eba34bf3505ea61937c71d31e261c86991d0f8526e03b0fa83e1338199ce80ad38bf95163972d31f3649c4ae33457a61e2dd4896c6594fa6d9d28e254b6297d6ae6e5afc73cefa08a823df877c30d95343c1a0c5e9e0437ca160124f67ec0f3155481ba1ba9943d6741946fd1e1e4d12081e26f7c19b6e10036ff4c52d2185a7dfc9eb6ec35651efe0316f4c548261f00d2cb3692d4b33da49aed4baa2b7f79a7954580478a1b31511913e0bcf30d6ca0e423589c7e0f10b7eda587cfb7e0f0a5018019f9e68dd51d8b6ac1b96971fec35411472bc06197a9c4f260ac44ecc4d2ed8bcae9b155c4307c4c3417fe8152fe1e9d65f696a2c5357cc8fb139d4fbe7ab7e7c70811d9111c5765027b3c3e86aa649cdd585e851f66ec41ceeaced520f94fca4f07925d91add680f10167845fc775830f2942b2651036f153c4bc4d630ed0678e30d3098658f8b93352ed05d0c9eff044e05db0ed51767a1ea1cda8a38922edaf2500d742757d9303a2cf8282d39b68bd69d6d4d28d08e7c4d6c65fb42690cc9cedc0567c2838e19134918a715868fd13450ee529a3343c31688f737d793c9d2b9b9a4eb4e9df58b1e1af48f6338e0d7a08205d9cac28c8ce9381c43ba590f927d7d58b10d86ab9a1bbaf1249f7f2210687143bf30a7370ff5ab4e57fae88bc681286ac02360c7e0160976d044a060f51ba2a17b688b1371a522d8a1f2b365b8ed4cf442ce33f04ae36042022fe036596f76257f6581abb68470674bc0b82750fdd59e0983dfcb40f3473ae369ab90b27df3e875f9b27f42678015380de890c0337f1d6624b52eaf80e5ba4f6a48e3d1d0eba74d82daa2e8401ab9f08d2782b77e6e81a18be2e268fd1b65c43b9b350be5e2e06946fd344e7da367c0e812fd07fa0fd9f1d0d6e100770bc09284a5a2f8d1a2f920ab8053909fcd10b507765a3e51f9ca0e03e8544eeaa2ac3ef5c3d784157ca6de48df12fc8387c0e2ae87c6a29e6167cf2e72006e41703f3e820146db11da69e6e40c245fc985df06a083cd996a8633c4a1c1b5ad54f830f466a9f42aad4af5961f34c77b0cec168cdb9803bdded0a8ade92e938d765186df963ce1331bbdbae166c7c9c0020362c90da631a01b285b02ef929e111bb44630c5fb3791927bd0a6a04b2d31b2951a6e94840e3572422680c53c2622265143c2a9a8b6c5c13148f0016dda313ba5ee67ddb9a09c85f1c80b0c380a4bf2a638e2eb290e0b338a0d29d8d51fe8811d6eb0072f56449585c0e1ed41fa1e1c2c3c923e07f3e9c69a1a9d6575d91b84fdc21dba060793bc3e682d74355cb527600f340daa4d8ae66791aae308f1c81cdf17d68b98e7287c343a685be9eb90aeec1c6a47b4101f52e8e60d94a84487e9c2e6d3653210c7fd4b3a055b8ae79e4131d8d4612c27faf50f88f273c4f04acdc8a58087c451926da46150f8fc533dd44437dafa6548ffe50e04fbbf0d2aaa72c48f29c20aee24db531ba0c14c85d0546f1100c50ee2a8131bc87994dfda10086cf16d1da204265388ad2530d7ad6fa03403d7c967376306820de714ee64f69cbe3910fa67888d3093a8be6c2bfc1dad9ac672e785ba2dd06224cfc3ca2bb7d35e5cbe670d4f50f996a5e495d0bf90b99242d66cf85b6870818da326b460765003fa4169a3c6629e86f9fef3540fd1cb572c6d3f876f81f4ef6fe4700d807c6e8ee18056ef89e100fae3d7bfbb8bc2ada0c9aa457f336657f0a8ef10c3752b50fc233cfd383d535bc317c037034de08809dbe71827157e946ee01de2db2e10ecbbd1561321b0052f0f7101a89cf4cd16a450a54d91249dc78295f9ced24b081079014dc9a2d2cf804d1a8cf828af428c234fa06204cbfa64085cb9d51de14fb44a3a96ce02aa27e7c239bd9f599344f8290f69772b1afb548e47f324071b450aab74307fb778874da894081d88cca999bcdacfab5030cff000446364a1a4b7d847354bb1945c43fa229d027440cf15207425e8c04abb370f3fa5783238e970aaae964d97a1d5a4d76d053f9b9a21a5a134cc1ff4863e3534b697eab09f531c5043ce5cf95dd216cea6aaab4d061323eda01298df8e88588df423b74314834bc0cd069768114337a154a358be786501be1a38c45e77c7c8329543fd513e66734485acd0124ef438da256a3cbfbd13eab7d65e4ee6d38d1f2697050df2dc9e0878153e2f33458ee5346b8ffd98bba0ea30307c371e71f9cf9e0732aa06e336a729e06e2a1ec54583e8a26ab059028e45dc0f98a5baddcf89f0cf08b60863fe6682b9be64c1c5ff57ad3746c78bf66effff202836bb1004777d528fe56d5a2668143f2b5c4c07e3917e191e429f43570acbc1a3a3cf60031a7afe7c2975fd553e38e319f165287ce1b6a08e0721268fedb9a415de1089d6d57458ab6d3a2a2a3f0808c2fb4f9e2661cc6d6f341a3a56001f75b69f26d8250783619a45eea934ef3c8427d2290461a4f8b268e2186d30f9a1a395607bbadb9b9e2c102b1e8c32b4a5ef423a4db74e1f9a1000df6a908318fa494e8274bf1f8da66f74b10785de5858ddc230f076d69e04df6fcaafc1588653acca8ec2a86ccd922c45c7d2662d3c37052e01cb838f693ee3d6b89d19d664fc2eb7dd0d29a6f7f5f56f5bb8ba716d76076b401b0e8f160b288d8a7a074bf9a58b61d8720707973f646a40b9e7a0484fe4422e102c006be42a7d65391d34316a1e68526cb51469ef382c3ce6226cf852cc9e16e2e15c8a50892f6946fc9634c847a07cb05cf050fcdc788b1e64b74e8fc3848e0f891b9089e5505d6151419fa2b318668a3299ebeb7c2f24f172cb9813c20f490382d0f5fe9e29803a8fc1922a5aec3cac34b2861a903f1687156068f1a0095994d02b45436f06ac5870035d875b1648e00c49b8c8588dfc38010b815f0117a0a081db41b6c82dffc22dd4c3068f1146f2adc6868c3332152f424d906bf631b7f51af8a1fc082e68c2a325f7180a69379e3e3a86583ffd417c4eb4050b3a77855fd5129de46b3f9aa4df37cc4098ec07c89518c58738c89eee2c9d8ad5890345b823d6d83d5bb2f53d2b9b379432f8471893ba170f18230acdc4a161cee9a15f652040edc2802d9db90a3e68d6cf93eabf08e3bb5c8d2424a6cdf30d6ab5310297a6dd4e5b69b323f890b38b45ddae0bf9d9d790d42232d549547ab758dd0877218c43e22cf34154dd7ece715e8d3d9622473866abd85cd369623c2f52fe8037b49ccfc6e1d44352a6217978ca1e3552c727e8fb3517d4435c7812010f324461c7c8eabe1ef8da1e11dd610d967dfefe3b1aba1cb30f9f20aa7509c0aa9d6df01b0e49c7d5074cc1722367bf5d2288aee62d5cb49ad7997292702f9f0604e2c6431cc05f12680629cca0d4abf22278c37988bfcd60d5bfa910aa4dba900eb126eff39febcdec58515fee3cac42bad69e2549b567cb203967760474f47890ce2517d3f7e37c280ef3103aa9360b7b8172684ae8d4243abf9aba385cab1f7e1b3ac386d40e853b16cfc11a64cf456308f8c600219fd78a641069a34f19840fc7ec6661ccfccdaea0e61647c8ddbe1666d13f06fa868761712387e8dcc8e57e45ce0670ce76d68418a1b0085d3586280701b643f3c6c21c13fd07ee910320cb8991612fe80cfa656920a20db268ae90b9686c9863bcebc8f3a595a4a079bfaf35ed656d87e063516e4d5c228beaa9df26840bc3d06b42c4fc704cc57d1866cca23fd7c4416bfd54dd72d7450e26629e6fecbc9e4315f5871a836915a2b409c17a24172af89107a0669698ec861d1b3c025e9aca7249ad0f32cbe1385b2b32970e83a6ed73eb3e36621a184f8530e5c5e7bd1d2768132f48b44bc5f5d75b35b74a9fb2f91533c84a4cf0b4952d931c8f87e821639bfa387051f9d7bd590101c7f4885c79fd4d0c661719cf9140ba4beac75ef017446fd01920b6f2448f8456d8ffb8b13df0b8ad0a1c740f6bd2366e1f632b84227b1c1dd43883e759baf481d7ba287867255e67a12c7bce517733f29e2f930a0b26c27699b4e86c9a851f4a8f30e92d674acd4e13f2256f93340116fc602d03b40f2c007efe07c9fb9e3774e087021431b4f87c7a8f17a5cf80d9ba8313079f08e2f5a77a60703fa08590d190ed0d17b862965e7356bbe0897b27d5616d627583f6c144402b89d421f0d8080fca19017dc6bbcf81326a66c3505eede040c77b727fd106d955a2bcb8b0be9537d152806df680a89dff3a3fb40b6c377baccf2ac8b6e741eb2d2c730d7f902a6127ce5d91c592b41efe5fccc6521b598d15830d6e4c72e0d3e45451b9be0b1e0a104856e2050e10fc103cabe91c186470600a2ff1abfdcf4c515ffc224d3b9f65879020e4dbc0b1d429f8220f5107c6069d555017fe38dde9f08fbe0965d717b682fd6e5f418723121cade34ca73dfc5c6fa2b481af9a7e9cc331480dcabe00abae8c5f61bb73b74e792a27cc2c608ad37224b2fa2b9f2ce01de2fe2637a25c12327a100c44f18cda3f1d0fdc7796ad37d5e73de758e9976cb3cfd3fc71c0ee955f517ac787825ad1fefad3a7dac106b7e4023a343a9c27ac7bb73b42d537a0f95313d238be086ca6ec56e22dae838d289dc57c8d527d68c891181987e890f5b1b758797370ab5e306da0cbff308cf1e4026c80b50f1b95bb409fa2b7036e8ba998553c8363a1a0ba3de7512f8735a28be19bd0eefd7f9f92e10139d0b4393df11456c7319c97c2220f6ecba2e5cf61e388f5eab8bf37861c2c44b2c6668430776b4414271e8b03957642d27277a8fea4e773a25f13a593035ac8c07bff925eee91eb0fdab9c449d604fd55d6411eda313683e018f349a7229fb7f32e85efe71e56628839c8e4e164f63b4e013ec94f1b43b8fdbce9d39bf0542aae66472f652b6545a4b6cd0971995c90228b37f4ab34cde72e8e0a918ce69b50604d9555008651785e43c8ea1394e20758f9ba5f1f29b57675c4a034b470451f4550bbcdc4562048f0b7d3d8774ca3b54b1e34b588cfe5d19011ee4a48a4719407532774dbe88669a0d6743ebb3e501691d4318fdcd4fc54b72c4d07c0fa4685f38ba6eb301a819f5347993274d6dc8a4c9d3fd6cd109ba08b90abd28dd5504e857247fb481194dff2a608f3f0b2e2f0422b0b789ff564264d9b165501d089b0ffea02c88d7b1d0a0ddae8afbb084e26b6428398ad035dac312fec912af4f6b3aa1a3a4c4661ff55ab8651e167b2ec09667bd6125fbe5838be6c2c2d540a92b7453dea98c0726f2ffb468e930203b8760e8407761657cd71442fb946be6d338353a150963fe020723da4558ca37e9c2713a43c83c4e9c27dbd54cfea7e3fb1aaeebf7fd38fa00108efc275f0b777dc3a189a41190bd20c38376b2c858eb4f8036e0d624def341eb51f068da46413c7ce95504ad210d8a479a03f94732ad3c101a2d7fdd53ea68bc583904acb52f12828b2efdc1c65d2b89ecb813a02e06e56af721413d0b4b01daa706a5ab1191ba992f47673c93e73d4de91c469c99ab4853c4331c49d257a626e8394cb6e2236ca2fc9796a64e102574c7cde1c55d6c673e4f11243e0701e293f962a15b3313bc9558ad5d16d9e1574db8782637761fd4cda22190f9793ce2f183f050f18d7001b69f8c3c2774b3dc5786b8f885c14c7fa202c3b964444fa60e955703f2a6a794b2be9129c71794c1b82dc554fe4f1bb01d5657f8764678d0892f5e6827bbc8932471cb3e408272b02aab3ec773cfb96a987b2c490e871b6bf02a98b68f05cb828d2708143f8313e189a8d87ecc92af2f7174fb099bdf570a93c79196b63c0c9a16ceca45634f01b2f1d84ffd43a6c74fe244c0d305d9da5e745e6c175a446c17a57b9eb042df5be9c1a32750d9a1a77c43ec6d8fb26f74d2e59b1821f308be40f8a40b65be0d5b9e5ba251e260a4d8d05b25376e1784fb3cb6d079c3313bfa419339179d23d4929c83efa0326b338d66f93db8bbfd05b1f63e7d59afb239a8e5a0f8c960614c3a3bc773832da07a3b48097607216cf4083b0db21f4675bc225784b6a321ea43cc5d7e103c690ee78c8e473c83e037ef6e6c295cc47c8d96071a4ace85c72024dc3318b8f12481595ad193ca510f90f0571661af3608e4957fdae7ead6bd9916928f60d8b6d5e2ab2f22458dd9e6ba7e11cc42761d11d69a61835bc78f9b8db42540aef441a067230f5b71b4808b1941b21b8520f85517e47faac17a1884a4bf7646899fd9ae693d3ebe78920313f49dc69fc7cb91662721d9fd9a36632fc6459a4b0689f0784b6a3c5cb684fe7401f69449303d6dd56e070013181b3eebf39dae6591fcb62fa9a3f49bb0cd7a6cd24fdf2548a31d9c756653f0a8f2352c5738963d18fe6b4be80b6e50f22730a2678144d131a5703705edd08f3025f234ca6c79171a5d9ef02cd52b5d90f9076b207891cf0e5b811819b75183501f9568752489601c4602a21fca64a3abea9474994dc08f3c2bd555ad59d92d43535aeb7514036d5a79105cac4e838190ffebc0b459bdc2ff77d7a8b1bab1cea3c29d2fee28fd145bcc7d4543e49fcebdd93fbc2cfe111ae08681058c0ff853e1746a58f9981a51f407cd0d4f39a1cd2728e0ea5b59c82528d2f83a9267b6df96d5fd23ac47c633c6c17fd972aa314426be679725712516299f88e030064a42f22cd0c0d869b40effc062861d00cfc9d79d96d9739443ef06c20e2d57a5e95d9a45ba8116928fa100c51e9157e85f7210d19853a88ea168c483f8e2c32f4be13417aa146f33aafb460f5ade4e59774f5980410b4d5a89db7c10a39da890a3b7a459b2830810d0731704fc9383bd98ac50f507cc47b4002e2d0f3ae5ce9e7a8bf22032107e4e2383afeb93db5973f81e4068da66b5a3c5659489e303ecc0de04943b6ec5858de33111442f158e70bfbc54eff4caf0762848e86c9e00dd618f4ace3083c613796225e38501d16a328cd8971d8eb81045365a0576e1ef62f421bbc9867e014f8d13c52872334e597779cab9e993c2cd99a1f255c1b4bcb762791b5caa1a426a85e7c430f73d64f4f8ec55ac4f228a713c62f4689f2a1b1f3be78d36e04f1fa4e355db3903672f4961d1575a2c690c2b32f5804a338de684461799c0d24c6c6ef6172b3d7aae0e994c2692d01bd3506d0a47239ccd8db7ddf6c77d31855bfa48e8992b00c2aabfc4b0f9832d4a1b80e006df234b6a4ca549c7b264cbbe7ccbf2138446e8c2200f9e15aa4b8b6970e472b428be012748740cd7d4f8015e994ef2c4e7e5c01ebd071099f19a2d374f0a7663bfb2a8d20458f1642ba980f82e145cf809213cbfe7c0d95f56567cd937f655e8157d0e3d53cf3127cb39c9606e2c1ff2dc34a8bb7d107d792437d30d6a23c26382c13d8a0f45bc0d0910db0c97ca9ff38bb36b90ba793cbf0f9b83a5074da4469ad60358527b0da7b49e57264fba66639fc1faf12410d2c85ace703daa00efee1abd7c3676ec3cd76a181fb55b72bfadfb29dde6871689e074346078aacb0e1e6402f763b89eaf7085cb0959c33eca0a0f9a46d5d75fe03ad9753eb89ccb051ee7e22844831576d1a738867c08d3b016825ea25e0a858ac94697741e2d8ed8820f5577930cd45aa9a4feea83e3494061fa9c0b2abe2d09e1e78991bd81ad1f7f8aedfa914d2b6fb143f3a780123c8631c5fda667ea8e0e60b898700acfa639e9051f40389eba28be1839f827d062ff4869540f3569d17a1e686d40d4311bc248e1dedce4215bd930f20972c0d9a6b2cf9e6bea93ab78197bba4a276d454df5155cbafb3c1570338fe7a65cae23711342077092f05d6298d875da007a8fc7472da54e765f12769f1773fe33ce8e0f1325eabfc0b8fb6d06b27fca50aa9f1eeb3cd409d31d630bf13429b217fca5df9220490cea45a88fb274c43e946ae8be2ecb2da7728153c8cc3e00af2befe8f7f53e05e147b14dec2669954e84a871a7d531fd27420c7ce8eae1f34971dd7457e0d7ded9fa011f5f9e0dd5993eca12c72fac39b32590e0f0850ea6bcce28833f60d663cfd810469f2d16c90e44bdff83e74cd38db969367ead1b6f91f0757862c5ab434ebf9588c9e32992fbbdd4d9bd415d2761638b4310c5f21c8620e8280b48bc3395e9473822bd04b0a6ef5853e2bd8258ea283a46389e231eb49162956fde05711f5a38f837f6d27cb02f1e68c38e5d076c470fb821a89b6c766ad53a3232946df4638c8ec437d45ebd8ed06f1b06b13ea686527f1a92c671200d693f2b753e44f34c9bd194f30b5676683c61bc7e4657d5cb4a64f9855d45ab701a7c137522e80e7f8d2fa749f3a932243e32c5ab5ebd01f99a873b5e756980cb0992104721414393cd3dee0b898abace0cc298008e04cfa58abb2b1cce782d2eacd84b85d5a9b099d33cbc4038d018bdb9ba24f1345325f6670eb16fe2a689ae72a73d120b9b5d7ac0cad91479fd00d62ed77345f74c580070116d87afb8453822a18e1fd2e0f5599586f6a920d08fe0f3ea2a28381d27e18a098fa0ea463e1c3bbbc7893693e4c4c66106e52dbd58d03ea074eef1a03bc83af245ee9cdc5dfc6fa628fe09a5c30b4275d1248cccfe13f54d578904e35c1dbc3615116dbe8390462f6c05fd343228ddc5c28bc739f23a1b64f624355c3d0740a10eaff9ee30ad169e90c6816d4408e35bff26e8c72f663e3503a97ca51bde0802e9362280ccd773357f505cdb83d99cb011d4893d6b67ddee4221e7292150fd207882efd9d474c328419f8234eab9bca6b99aefd88770d3c2d5b4a9ed395c327c8b0aa8746c71059a9a2529c640320234036980800633144030401c1089c5a2216194e3b11a950f148009a0a2567048994a498e5246194208308800000002200000002257014f2b986ed086b381a5d9d0d4ff138ad8d0c05a310ff8b51baaf8389b2a66b07e6fb00b0bb840fded72c2c4694c11c27900d2a47cffc2b1fd6761ebeac8d13c0621e83e9450f9684dc7f4c3d75444fe8588e24054a74084310487d15d18bb8a5e2ec98fed2b50b4a59ff05c4a5869f6cf8a8176c8d4abca0d3f91ad887efd0dad414e35f29e2c56fa62e9d2e8b0bd051155207359634fae3708b24382ed65f0c9a5f69861080fd9e19c7d73d50cbc051e28f512e46ba7565c3e0a10e749729695765f44627300aa6b86e46d0b3affe4503c3e7837990ecfdadfc237f8b3b699131cf6ee9c0e963f9ec9c031f19377e1d152ea3d209ea839ec233b6802a987a32a8836ccc17d68240c60ae3e45f70ecb4f73adbd774c0a899d5662a9d09ce8c2c7e7f19f159c5d2daa06c90afb0eeb4bff5d79ed3cc6fc67e78b74d3208a6ee860e9d739c43080ed1c62f3c28cbbc408505870d8cca0e0bb52900a14df917087b180a637c1b45a548e927a2df864ef1c20fc554329a31fbccf84111761fcd0cee722f81b2cc0e8c46c2f22ea8a43efdea642e5584c181b8c721d74a0529016cc982706f2972395161924de390457a4942f2e73f515fc98f55816fa3c24c2e22c4f112635d7767616fbbd21faaecf003411da46c7cffddafc9d6d3361c1d10e16ca333158eabb017336961a64c818dff1fad1fb82de2856a8e21afad11fa5d846e8b3fbf052819ad6d66f7d65c250d5de72974a78a8916f209c1d3ffeab8c145525f516667563d101d8bf6aa9be81c9ddc334b89f488b08ff5d72d2335429cbe77996f5caef98d70de37e72763cd8cb4bbfaa74f15baab98afa37ccda729c22c03bff7fc4ead5d0171879fe3ae14e912a888f2804f79da286ff7dd06bd39207b5246b7d0357be9f7acfa795d94d30a7bf83ece7b09040bf9352ef098f563b6f12c5541322e4e5773fac7334b676ec6edbbab779dbf70afdb0b9af0f6fde7e3c7979f1ebe1e3dbd7ab37fff80c6ac509fe3bcf24b565793056cdf03fdf479af952cbf2f1b4c375c2e20489cb60f0f169235efe3d7a79f1ebe1e3dbd7ab373f8fdebdfc78f0f7f5e5dddb9f272faf7ee9a35a089cd78ec9c4b32ae039e74b6e135654436c52ef511f331c2e6b39c2149155bbeeda592f4ef41e02580cec3b2841390fc9e3f6d0e351dc87d73f2e94f791261cb5d61b12f4719b1d307c814e85180015ef4c3f9b59c5dff72c3bfc402f7edf71e4e1f015b46b61430e3e3cf643bc5937bbe080ea7cdcea9cddb8f984a47f1aafad5976b0d2e096891974a6024a8595d0ab561f3d81538add10f62a0b05a3f58201a1b7de440e532f9834cf374162cdbc152ff50f57f870d601c831f39f17201354ac732cdd9f382683b89c2f31f58d7e3d2cdf48f91a3d00e262d653efff4cc4c082e7e9c3e841fe53609c272f8f628a5cd4e437d7d6ffca90b0def2b30d48159af160705bffceb6d6c7b6c73bad5c9ce5fad435202cbfeb663253205eea5a79d7d7eb650532a773e75c0f1d5cb0e676536b6183cd3d0a757bdbb86e66bae9a8b12985721e90ee602c5dfbcadb508109564aefd30d88130ff177dd2b7d11dc03335c587bc952ffa311d1e6c5877a70f7e1ef6cfdd735246d71f34482895a7cefdf670e30748d97d787ba1af279aeebfdc6734d3231be97156c66d1c4736fb4847c26ab86afe0f82e2975c86a1007f8c1e0e0c36e4af2a0f781b6e776e53a98b6b72a782acd9e17914d360eb8d1b8230aa06d69a75b406207b993b31304965a5084cf387fc340f4e021f4a887cff83736c32b3b8ac6e326e613404687e97e698e2febd89d2d763c1a593ede63798c1beaffde4bae2990d2ab62811e41e365121ea6842824580acc3c00d1f13e2eb8e0e977d681246bd8ae3f8421d18be2e7aafc8d00c7ccb1b46e27e2d88a4babbc7e300f0676a05513f5cd2de2fdae9edeeb1fdd56a0c37e567ec819a2cd828c0249013ae36131c59e4b4d6cf4194be929797da2f302a15741a7d5742bd8001b735fad28e318af7bbd8c4dbf95acb20fdf8a54a086736c6d089a5ea972e063371e241820e99820a5c6f40142b4e22d1fe79cf3c7016bca808adffe09571fc0c5336df4670ace687ff86705e3948074fd4d3c44a9a4b4df8c368f5a6a4e66c37e3a0e9c6f9c052b1fb143a6b13390103f6483bfdb155e4b6cc8c1bcffe90630b393de330a13b443cf129fad0d6ee55cf47afec3c01361faaf5dc29a9012c51aa3927aaee41e61adfe74163c24504797e6d399c7a572a04980dc648f7c23fd9521a54db272a83a03d450d1daf599fc20e665690ffc7147b53066818107b1e51b63b64cab84e63180d69e0b9f74203129e4639823acb2d243cbf655bdf8ca387fca1929705c3902aee73a92a4d27b5c9616c3597b4282ee22b8e828162dfa0a81c3adf19d68b33ff8b1aeb4b6b4ae26f69a6d379712801272dc07b887f91b796702c480ed79a13f54f440a5968b484ac3ec263dbc74229c2984e4b7e230d888745b35d26d31130f3d3d508626779a56014aa263dbbc5eeb8938bf36bf10ac23e04a3d1616af0effbfa60c285ad4c9840c0fc2150599487cdf39ac0e23f2dd1618d3ed3b342ad19beb6ffdda5db72b2d2af026ba7ab58a93d7f196001a679e51c2352ff97a85593042f86bcc7cb16042d348b84270214a9f37c6f9b0091f9b3ec7a7bf8e66d7a4300d8860a30b0c17d251b2362790ed5409841953590aafbaac5d19ffb67a8c6483316a18e57f6e227e99dd3f5548613201e698ba8351bd1f2ee3a823baf34ddd85cabbc5499d25bc6407fbc441a07064bd2d79316267492123b9a7347e105820717c248dbedc51c3370ded6df0b4fc40a9c204ae5b5293bcb261757b6780dd8ec03ae6c5b6c807b0122d5b408b9cba62032d66cb2ec5ee8842b2ccbaca7ade6818383681a631a31c141e2afe3dd711e5d85e6db9829bf8fd31ec86e265399d56010f0941d9f90da4a8575bd42ce907b2179533aa8237854e1a1fa6a4d295ddf94c45839039ffa185f878a1eabcbf1312dd2ed283559d38e8276e7fc40dd5b8ec2d9b3844e1ece11e7ad2bbfa0474a56218bce1104fec130675e0c887113a38c453278cbe41b7510b77231e343fec62c021b84c6df166e63c6e1ec7ebbf89b44e969bc10ebab3e3617eaf25f087f1d77fea14574c3343b2991c21e6b8b3dc43751a62603648cc7207679a183584a82233f855f1010a0652ef2ab62f675fbffac9418510d8a4c097d3526501442a0cfe73f6ab78ee93bc6b63215a7d2f31802bc98b18afaff44b59a33fdfbee4ec9749509e6923e3f4978f2b96fc30566d0cca0d25aca99b535193fb274ddc4bed3320101727ad8da23e16f0cd497400f29a6d19e4b14212e6c31904f6c8e0690a19a69af0b15309513a4296b288d2906600b85ce8f0552d7d38ef1c63f40785f0ee12bd0960656f623564de7cd69ef26ce97e495ab60bc853e12bb21fc03bf230356aa1e29a4401a0b453ed91e2fd3ce8590d3f4843e96a5ff95eaa59c408d6d7ac8733a6726f3ea75db3f5e63c5198b04fc8e1206824480ed7c96237ade3bd2bee5988550e9b6a13045732b4be7883c15c91acd32f1ddc5ca5a5ead06ee2faa184e15b6db2e4fdfd63e76e4f82f7fc48f9e2ec3eba2d3e45ab19b850cf82d7c2442526f3c79b8c8898ebac7c82e908eff2503e9d6061890284a9272aba9738dfb02b6fb3b9fb21c1dbb973e831f62bcb405a173e11e46a544714ee40b00c567de3961425fbf28c4a2ca7a82ca55a1540e96c3c6cb06fc8955fb40a09075d9d37f44fc9e9eba07df844f0879a67e96c5fd7a4689cc7094b460b1d66e110918328bc460505752c5f1da4579b164bbcb172adc0d0e1be9c14d357537a8f6502da80121c3b95e8101aae0676f5f5e7273fde4aa7c7a8ae79342dc23d973687ec683e7187525d2f6450e44aa44d658e166d27c8f81550437af551855c2b37e78d59008427bdf4e4e78ac80e5fa553b4a762950d89eaee9086e6da74c0da40e3ccacc095eb8e6c1a477d158ca7727072453d860f4e6eb4ca868f8c7a31468913c5fbbfc1ecafe269203c544e162e2289172f8b1028275aa47ebfc9c118f011d7d46d0bad3679fbf3fe224ff544a6993e76d1cd9a5d24422e49ebeb0625606aeb61afc9815e06babaff666484d6dbb39ca31b462336a42d3484b969046993f1cb6020fa84bb5270fe9a3dc7a134a201969c39e19ec7ba7793a153d612e45f0660053ab441cb89a76d0e6708014a1ce0706ee3afcc2e2c478a751379cda3b3e4a780ccb2c3862aa54dd960d5660d8cb65db5b90bc6360905c4e2a91ecfef0bf45002d5dd5b22957658b23185e31cc068d6c90b99b12015b77cfc5bfc8d4d2018079ae3488dca9292fd921b4659f1e7e0ea320f112cc5c7040d5d179103f4264a266ef676eb01ea52cf5bbceb0cb63976b1ccb4745860b984859c23772df421369c2530c76bcc86c6117d4073e75716732ff21c8151e3de8131366c9d787621d17292277dde34736c1acfa94ea42fcaf78d27c34110bfaa38f8ed4c0f79c8c88c8113d12cdc5027ba15f9c9044dfedf0cce0b498eb5f679816fb23c7b9de5d56ade6238ac6c794882b2daa83afd04fd8190a38a6dca4c3b4b7f47a784a99f38679cbccf16ccdd0b31b3c693f56a6eead5add70e5f008931a4e427e794b36e0c70464c5c84ac4a180f6343c5d2f488f0aeae74d1db5b0d2240685ad66d0f983b34f8ffec6057a584dc4b89a4f017df62105fa2f3994e968117cceaaa1cf76817e0653e41b087ba1fb200f7c1c3ba778e23ee2c72e59c712a9731b3d9ab38ebd660128722d050de36d0b785fa605b735cb7b571126ec7e460d8fa1e357956badbb7e5ecb49bdf0968db1dc5a0a6fbd3e853615f1ac76d9c91ff00067c477a184ad399f57947f05f276ca6bf0c6f7d879bb98711ec1063e062b2baa4593a0d00d33d9771c6096eb4ac0374d16d419f5d4ffc42c8ad8d1c073a06372eb52391eea37682b0975de910c5ee79af03c06d134e2b1f69fdf57dfd486f2f19f3e083547b4f4718d7321c42ad869e8856ad1f6dfaf54fd5b1c160658e2a23a764ba26b4a0d139598086fa87024c615cc8d0f3d3666a1f311c4b4562a444828bc7f049d3c0f8531f9a3fb9f6fb215e07918de831902cd53086235347a6f0f309beb7ad7aae7a559c7b4a5505a36b00371090d2c03d24ff53879077f138ee466181767fe5723456310485322a483b0a42aa2e7a66ca03257d8a2a97ed12d044481ab0c7d69f7ac8128b5a2ce9af30fb99723c945cf24c5ce130324204589184df83294b37e31a474d01325fade30492fa75a2fc0b5913ac368b61814b6db994ad7e00fe3082e75a9adb3799c234d8fee1795080f4ef85f1b042fc21d494512ab6fb3d8ef7d7768da05df75f9cc1ab30ce15cb6faf6840f82483d0bed91988800ff9beecac10a51d1254c00f78957d4b0db9627038d37ecabd3fe28de4be2e03d720c3208b0dec1839cdbf2576e6da1aff9f0553281584be9388eeab7c1eb08fb87de9e8a1574184ce798b8c637f91e129b0ce3ea8ee7b601760b9ed7251e15e506992729bf5c4847dbd52e050c79efc3041ee7fadfe8092d396274a443d5e9cfd312a827c0c6b3586ed6e3e96258878101bb71caed63f7baf37f6ded9e79c4a3524af89d7867c87e2e1763f5b2c653ca616a6861cf5259845412e3741c2a7136216667804a989133eeda152035fd4868a2a2663b84b5e9f5ab0b848ed600eb2fcacc3d7153c3127ac73277ecab23062d82792724a875f4ec4e3640db719ab16f54b571fda32c0e8a69d28960877e8b60826c2657ec1b7e2b6f3fd57f983d04670812ceab4e846e9017e327ffa869ecf61c7f3edda6145249666b6e9233318245f4cf48b701bcf4e833fbcc63a4a99c22e4306d5bf977036cb2179c0ad78cfb82583e8dfb1df5f72324099324f25a162e3fde454f104ebf420b4ca7d5117e790f095df64981f06a61bea6cbd21b35672ca53256051ebf2033de112b5a4555958f57f69adb757fe469453c19c452821d5954f542b98c50e1e0abbc4dd101822dea885248e37a89583159d8f058dff0f8aaa8ef665beff14e62484bc7048a352d4017096779aabce7e004b046a928d624023fdc5279dc633c33f2ce58724399da87dbf72b27ba0741cc3bc587d70958bb88a5389fbb28dbab2bb84dd64e482f128d28ba227c025da18e13269be819951bf354756c09a7a5efe4106a95d70c05e8d1ca671176a3bea04a7fe738741c6060648de25763b0468090cb651d2b8dd8eed0f485973b071dffed343b2b626cdc2a811c18a15b8ef9452a0800c91210ee89d15293cfc54608274ad8e7bf5528aacc798d834cbae5af6352f7982cb1942966bf199bb5ddaf711ed3e7e04fb65857c808b18789206cf1c1ccd6b6387cdf0a77d75725732c8da7d75efabefb2c4e008ce338c795111116b1f249092bfd4d6b2bf2ef366c3ddd43dc4323c02f6127963338284416f282366d5a51d745bf456a10f3359e661263f2116969cf4f462f81d5ccf4451a6c5d1164d1c17f2b0dc03783f05f9dc1fd34830db3bae4690c0226020a96d4edca18b8bc6cec4dd7990782c061b86434fb42ecd9e2d2667986c6405e0ef6fcaaf0207e6a3e5ae6fe648141889b60e40aacff5a6e567244ebb2dc75188ee9053c88ef5a63226e101c68cf2673487f1624b5286df58f5d1b01772e27ceff9a97ed62a2e894ede00d6f21d7c2024fdb400d0618486808a58965db617bed61f98dcaa48f18499e7c4528a758a98d38dbe8454f74b0ed713120de4e82a3e92f775b6fa7a15b262b525684bc394f07a8de5b1128cf60a928f98cdc949d19c7567a21eaa1ab3567820032f5ce9c740e08745695456b1b8e3db199ca63bc12c572d65b0b22780cf04dd43cca3e2b2fc09054e5d6224b96b7cb76214274d64e828067b2790159d0797d88e3ebab2dd4cef6f2e5ba431c8b1836dbdd8921ba937c705b7f74ca6463f0ce6420244045a509960e5996aac52db838b926be911353b93d472df5ef39739b0f2fb424961c69d20a0ccbb0b75a2e2501b2ce5f056b7dea16e9725f2bf89db0a54775f113b6af2cb315afa3835f11b9fcd4ec150dcc2e879afe9fc57a0c1a767b61b61f502e42bb05a1d2bf382d42929aa20f4f3b2c634cd77fc51c2c2b8c3b33ebc68362e3f59f4368ffd93d1096d10a037e431c73697276e06af7ab55cd5eeca7225e915233ce0256d4eb42e73017e0b99aa5aefcdbdceaa0ae5339e912340cae7a65ced37b4407c9e0109424493f2076fd1e2efd9add402d28904e01f931cefb29906114f29092c6ea19c55523b4ec8c962a69ca198cf38e0bd2fc17f0c48285f1c9254b63a18a27fba72bc430d81ba0a5ca800eaae9b6f9a4bafa8c6a136a0272dcd63db0934e4463a421390721c41bddb520cf640f83676a59f1f37ddd02387e1749a8ae2a028046f1b8c3fc0594af8614f3f6bc62ef7ebe1462d7fdd8ee13ec44149e33be7fe9b34e692730d423d097aaacbaf0a4bbf04c483a66aafb7ff080149baba59d26bfa872ed84ee6b276fd686a0971e8b73eeca5b723c46c13a3ed5f59628a404ee3cf6a5bacfae00df990411ae2285de89761fb8201d3e32160130e2f93b96e88360ead6d6b10c0ddaac28354d2f12b7188303539232e4c7c6b5049bc4d7e1d9fdfc318a98fc18b3583d5edfad900285f75f3fce8f5a1f799a12c23751c400dc9e3dd90922142d91cf6eabb70cf6952c7f503ccb56ecf9e15e0455f2a4e32167f92054ad98636136cf7807063101c98ba75fb3c77d97da3f3390378f942e03e9e3884dee8d1c662ebab860e5be0e2bb047a29b474c5d7f941b38889f2940066ac240a7c9d0f2f32eb431bdc7f57f77b381f34cd6bea2c4c89f4ad5dc933be615ed2f80b2cc7291b010608eb9a31a8997a46aadcf24443cda46f988a1059b7d9f729880c9fc1fe9c5651a5bb4a46c6e588dc7be03e874c798f44860658959fc46a4d1b10b86d3e9e09e0c85c711506f2f6c1aefc1d959728e4a57abd691ca47ec55b6be084bfdb480562df7b01af7b1698815ca39fb14d9b1fc045bd05afc531628d016fd4f44a547a7ab94c1045d1edfdc9455aee52d5cbe1f19180848eb7f18b1cbfaa748aa24903b461500de7e2baa025fc247adcafb76254aeed5a290d5ffed0a33dd4d403429ca08922675b14720b53cda1a7f03725a6311b2c1ba77ef0bdf1898a4ec26c2c810f763176832e7c3f1480336290d13f462d58c65feda1e8761bbf32543227feea1d1a37b4342f181b24cc9ade8da8b6f1d1a92d25c0914ec671ee2a6e0a8e440d713b72a94c4e5c51bd680918540ce59e6e5e2c8db4683e6f92132b79dd10cad679b6eaf81e7be1aad59b8a59b000e1e5d298b21a6a41c6a65a123f3f774fbd11c225b6ee6dc60154f2b64c40c5f630d83e31dc3b53286625e4d76b0b282df7ecbc36ddd2a09b58531174cc4e2926f45212117f7cd0305f670ca23c15779f04753d961365d521c2c0b265831f128da0afe05805e9c87b799b18f4733f72036e39df3726aa63b05854071f029cc286144a698ae99a6b18bef799fb4c781b9f714e9479a0a7fc2f044e8a57905dfa295ec001263b2a73ade1f40f6720910d50c4e7901bf71d604ef2ec8f7fcb0272acca6175077e351d07e1c88591d99c2d8bf6a83d98f262f4b84e4976a453ccfc79ace16769307f5b114e665619fc5050f636abb25c7f5222a6376e9da89974705cd77d75c475a4ec4797be2ae75cb67841f744bc6041d38721e8ee83cadaad5e5d7c94e5a5d89aafb0724ab38636ad62ac65c02f6432d9a655e1f63c7a94a6f804f4c173cd2d24f017c1ce9158628c0333a632f0de90dbb5075eeb75e64d141ed3b5eb5112c929a10845dd8683808098ce408510d6fa9c9ac97aede0031484a2a1a4cc695b5541f9dadaaa0ddcf4561c036657ce4d3aea0910a3ccf645d6a77ea82a9e8d8f03b80cd7d27b51c5ffe77ddd0943ce1b5ab0e1399671cbfab85ea873d3b7afe285c2c274f894fb7d61ac506a62d65faab4cdf9bb9d6c13db69e7ddc9aca7a0865826957688f6d4dbe6e38d1efbe7a68a4058bbdc5244d085e4da19b2b439f73e18a2896e80b0798aebff8e94c4e9a1c98a20e66869ea8ae03f73ae58ff9afc6ef1814a76b20f800bb53fc9c58d60081249ebb1b4094c0932801a5dd12456f0c7d037e6f1ddc8ac264bf6bf64652c9a4f74e9ab9da929f3343682929f948e23583ca8ce917726b7b2378022e5761e48c322ec6631645f635af42878c293f74009b3ddee940d1b45f836933d173c470f9a2868c2acaab6bc9210b3dd6842e0c6852bcae0eb48f2ea453e4c637bd7211e3b6cf1df5aa299533eaaca28b35c6be1865995d51385d803883d39ac241ecec2579f1c3d5fa6611a28ddc802cfd0e37d1587832e9f111d3532d242e63812a2f88321e80ed065d60a94199115f04db1a6247c1e4838c4a7a0cb551390e2e6826cc3ed263c538e1a1ae921701e099962e17ce30b7d42c036c560d55bcd532a2122028beb86e84d42b7cd1c44b5ff630c4c3634f70ac2b0abcab961fe468c309b5eaad1b336520d95908fc6c463f2702e748973a672fe30680238133d66afedf0518f36ae7690aec7e7d3b970b46fa6f68c4f77206f9227f32829c060a91cf7d036d82fd8bb6517237e8e304c4f1cd66c05d7c0f2de3e39fd363ea66dd583fe52890728a1e5efb2ee7bdb397a94fea12f88d0a33a5e47c48f9b6d9f65289407699fa2a6ad2728703cd4e71cf7d8571841c4317362faf6aa678816340e030275363a4a0fc5d3649e14f989ac18aa9dbac65bd6b50d0f2cd54d10f1e2b2355fd19990189538cc4bc0146363eec80f81155d423515ac63ce10606d1a98c4d009ff47592d0ab1bfc0bf1a7967f9129e64af9d3c583e46eae53a89749316c980503a3c10dbbbca071546f9ff6491990a2f1bedd77b734ff9608b64d9ba0865d8e8965ae7cde2c92b3c6b3060283144a6012a46e38d3c202a4d920e3fed320320439c28f1145036c08c640711dbda9622ff967b6ffb921092f6a68c043a6f02019e1fba3ff3c77a03a83e53825401ee331009540a5c089e078f6018469bf211c61385154a44f10286c75abf30524cf0b46cde74288e52283ca2b59e43399fe268197ef0e146b7676a407ab8d1ed2c4267723642f100f64e1f61bc274966ed07648dafb18ac693cce4b96d020a0f24cec4c9bef844001886e13fe6fca279fc0594de5f304d3c9a07753e5f7cf1835d374469c62f475181fafe7972fbfb1405976aa3ce34b5e00463bc16ac20dd8dd55c67a2fb244d5b2fe342c7b867a02bd2895b24a51be6a28523bc2c206f7ab990a755349e9669150d76be4456db0d755a1ad809083774459e9627572d8d4e949470e20f0c8fe63fcf634a434f32ca5dd4486994436d8243cddeb34839d4a75c2ea40827a0c00a8689faec386a72728231d2503f4934563ba1a3349755fbcaa7555dce5ad9ec896cc2040b93aecb7436d49d7b17795a2ebea51aa8daf7ced7b22f08913fc8f2eb34f1836156918704dd10d57206aa65a52413739464620c259918c2f0d8810e5a179b40b5ace440073cf810e3628a52bfea76cb299c90110a8fd6c594b36cca08523a99ee78876a5911816a4879c3e4fc46df3984286fa896953728ed967c2857ef55f7a5501a523829df4346869464028cbba8297cc7514c508101d22a04625c45a2c5be44d4d7ca19408c5d445d352d83972a91e615518b175522aa69d3da68693ca12b62496e776e46cb35962a9127f9178da765a4db7c33dadd9037f65a402eb80aeaac417bea980661fe52e7a5ea4c9836933d1196b88258e20c968802c3300efef8b18c31b68c915189391886f2c3842b78c7304c0f4a2ae10686c75662083c5cb7efbe20cda946d46793924aac80e1a19ecb39a4b4bfa13042943e5322a45c2e841279608fcf863a3f24c2cfce55a81f90cb85300ca301a6841217867194c25e3be58d3728878ca0530df7b19cc1944ce2114cc9240ec1944cc20f048823624ae2584c491c3a604ae2a0015312c70c9892385cc094c41106531247089892382cc094c4710086610650c2080001fb08d55021bac7415446d3e4b4a419175d8e6a6da85f742d20ad425a958da689d0c919cd1535c230cc32ab1036f6ec71d320485a3eb9431496e15e45558d3dd443d653ea9461181d5f0daaa642d4d218b427d145a3cf0ca4f11ba4b5350cc21ecb966b5c74bd0c22d16a4358b58746d320eaaa3d2dc388fa26df8ca8e11aaa462eaa86aa9137bfedd6866a4fd9584d45deea06b636ba3d0db26f2d6bf034dd1a70ff596c1f613ccb9364911d12a5f667cfcea8246cd64234da506f4f166989509036c4c4644d9e631a646f595a8477750d1562642d0cf29616515fed222a845592aab1a2ce954d321e8d0a57d2a16fd3e61559aa44be1a5c891620ad8d56881db6220cc31c3983d509f9f163df728def686fc71921b7237b3df645d4b9e818864944304dd38c22156c36516f7cbeae96c6e011258e78023386182708c3c7490ff54a523582bcd5f2e3c7d3b2d59296a6e9ad6ebca910954685d1482388506134b254897ca9349ed0d9774b93b3ecafa61f3ff615dd6e6740be1ae4050c651933899c3f0561ec58c67644cedfece8c19430a21986d900f35729a4c4c0c819146d4af419a45ccd2342b9011a679c5106a5f716327cf4788b48057333cef84d2d8d4d33ba9d35bf230a083fb8d0c0ed9333d6029238d7f8d1e0bba87ffc606eca7836547b8a46ab902b15f260196758a4a5d12a649f167c0c5a8570ae1f3f9a7399f0838d89e35443118c601877dec1542541115250c40943d1a6b0fad3104a4e297f2dbb69ca6dcad31b48812951c4051826040d39a1a64029a10bc5040f2e8762449d1fe5e90d7cb090090f12f1860f1e60f0e86139a38c216c1829f2860e46c71974f0f278a3db1cc68e966bcf1c8669528188286cc08890368604313143481b43d83041c3640640820439630694865053f6ed693251ede95280f0f268c4e0d18307183b2a98d22b04d001071c4280c30070300c1c70305dc0c1780107a3043818263081610cc0148061982430cc12e0600a00071c4280030e26c0c130702c018e21e01b263cd8810e7280831bd8c0048578a3066e0881410ddc506910bd862eb01107178c81111ac041253e718b0b2ab8408633c071075b3c811029f8032718518892393480088c5882080c208801f409d824ae8833b0e00d6e9820101c680001d6e0855708601010402207362c21104140028a2040884387029220023512043418800fa00004184778c406cc10898a2248b1a2008a2914e1141060411a96f00024a4384410484105ca16ceb8841b7aacc73280071c745182fb80b900903b746146640a2f1290801f3aba30471a3a22318338182de8c0015de4c00017d061051da960184607d386115ce0810d9810451b62100615f0e1113c684223c60002a414810083e1e5e1238cabbc7c917d06752e9e600c317c5422dc45ca2a8547d0da28ab14f51d276050a0d6460414344209202601883e501a2926a0fcd877c293434f4be664144eca493a5f473901230564302d38418f2f46f08734308c0f0a094a40e941b17c7fb5e71dcbb13c01430706fe5002c68efe53e287426c6003cc6f4c55c3a550f89b0fc997d2083525ea5c787e409e96db454c1c9f61eb848e69901f3fd295268b8f305e0b4cf6ee045925e96a76616b9b9c203b41769333362df011c65bc10932d68c681fdad813e11f3f2a4957190cc3440099123e90c1300c53284e52d43b1d324251c11b26ab266fa897c1cb833b592e30789011c60e36ae701fd7061bcda84676b63492e4c29668a4e496db276744cb3920eccd112344644f640350c2b3d1c9528d4ac22ea2d6f3067bcb10f5d6061a0acb60f60799bf06f3932e1175cb9ecfc6bf68244ef6e307b757b47ffce0d7d8459e1a2e2c8361181dcd4a449d9646b4daa81aaeb170ef862c64ab42144748a405eacee536ff608c9715a810fe0dda9789b6897b263180c14237c870ba0d8661d0785a2a6c7c478d18ad8d078d300c7306c3303af60d7b421e3472a56b3c6864aff06cec2d43863c2df76a87f48bbc31e572cf8c7e1195da86ca210cc398b186ca210b53366d989a0a79b0198609f2ce96ce554ba37db52f93bfa5c130cc1865a0719646de6806c330409a6627ab532d2b2f7001c330002001c3e820820f1d3df0500886611886050ca343013a02800732185e1e5f200162847efc4800c3bcc194dca1ef100986e9558829aa0d3142941fe7bde54be1e501314267d9ed2d2f0fd59e1d00618736300ce5c71b6f501a296f6ca6a8b77bbb1ae4048c853f7efc88811d00b0f08b3fb8da3e789011c68e1d2575f802c3f0e0c12304fd6582c6ef43691542e1c194854fcb8b2e6791f21afc58b77c992037dcfeb1ba7b46d3e4bd1b4f4ba5a99dd12d9588b68b36488fc640188651c1071886f1031d22c13cd8941f27e89628e001c68e1ee93b2083a202325e0e5ab002138e90c8ef9870848e19571028353a4e339871a51a34f4e42f7428804aa3bf16126118660c04a0600e8ab1880100200cc3983025720005c3cb231d9abcd192eb4c4c50e083c7097880b1e3d12587287c5fe31dca1b96ca1bfc28a7bc510d292bf7eee4abce3dde11bdc2a8200eb660defc66b2ef344977fc45ba250e9f38d3226f2ac4483b437d35c86946d3e4f63eb909362aec3393335ce74ad78003c3303c604ae2e00146bd3dc90c3512e1e5d1a3070f1f3bd469b9e30b13c78009cdb9da233dd2fed4106a7fcba7fd0f3eed4fab4e7bf4ecdb23f6f6f3aa6a67fe52edaa7d7f51c71ee972ec4db395fd4fb80d7ba4b461af2c36ece7f577aeaf365a20f7f5774bb97bb57ed1667d0f75fe79deab8ef337a6a7dea9fe473d62da343d5da1f488f1cdf86825e3a15e7c5b7cb416fff5e0f70f3e25c3162967f1a2a27e0a4afd54f37beaeda9863d55494f45abd85be57495cb559596abd6ca55ede42a865f75c155299b7115325cd50eaeba45d557f3549d55adaa5a6daaa2579aaa373655d512724bd55aaa1e5549d56a2755519224a99e562da97a6f49f554112ec7a9381573324e0571722a4ec5a97a53a97dc8da522964ec2b55d4d99e540bf78e93aa9f6a9d9fea2955b4984a3565986a612a86fb602af594962ba7eb96ab4eefab95d857916ea2e3ab0a5fb527f9aaf77cf52637f1d52db957513f7705b5bb52edeeaa17dd55d4ae9a1766bb3a27bb520dd9d5de92eb2ac275f5ef73153957fffeeaabe9ea2d57a6ab7dc39eaeae305d716e73f5c6e66ae15584aa5d50ed15c4a89e968b4a3d35548ea1fa830c9542f57e8969f34b4d13e2976ed9f752e2a7b92fb997dc4bdfd7eba5372f2d6c8e36459b207e9ba0d4dea6af86bd4de77c9bd6dfa68599de2675d1dde47453cace4d8e73d3596eea57526eba7c53e5dfd4a9be89e137454970d3bae0a6851837bde126869bdac14d5f0a3755126e7a6ba4696fd1d4929fa6f33e4d5fee698a164a4f53d36e4dcd9ada6afa6a5ab89a22a769ef9ca6a59a2aaae9a92ddd56c96f4d13f3f7699ad8a6d334757aaa69ea7d6a9aa286ca98a6944c53af3a4c53cb86696aec2d4dab4b534b4d2b35fd8ea3fd9a264dcda8094afd56da37bf951c7b2b356fa576d195d4d395a0d695cebad2a32b5592aee472a5942d576a58aee438b952b7e74a95942bed2d5fa9b25fa9e1578a70a50bae1439b9b892c39558e24a2b2d99a2ced49e243bd357da4c4d19b69669f1c9d4f641a9d21e94be2ae9412965d385d259154a4fa9508ade584249ad8492f384527b2525949a0fa568f750720ea5f30f258787522394ce08a53f6f8750624528354dc7104a958550da44689f167e9fa27ddd9ef8717b4ad17e3d3ddd82095343cfc394a2d5e78d094a8de9d1858da9312d7c8ce9ab1993b6644c10633a63eac514ed62eabbc5a41653d366312da696d80ed3c24ee730358d1a26464bc3f4d63045aa615a4f0dd3c286a961720c13ee1926b630ad85e995c4af13a6af0653cb06d31f6c1a4c4992bc661fbdd744fc1ae6b7e4d7f06b9a9f7d4dbbdad7ec2bed355faabda6bfd66b2aeb35cd7a8d2e749cd7f41ff59a48a9d77c35cd6b207edbb48b6eb30d53dde6499a6ed372694aba4d85739bc6796ef347e5369594db340abfcd2db80d336ea31a6ed312b7e957126e136973a24dc3b45b1b666d9e96ab4dd3acda54541b7e4d9b376d1aa6cd4a6d22a54da3366a511b88df6af6ade66f35e7a7ab61caacab51aaab512d57c3fcd554f0ab69c6d5f42b0d577386abb9c2d55412ae6ca0de6cd466938d6ad9bc928dcae62b45291bd5347ad3fe4bbfd977bf8970fb4df39b4ee7ed0d94da9b5e6f2ebadedcf25c6f544be8cd2d08bd71fee64cd39bf3c3f426ea876f1abe8112bef9eac6a65f616c523236676cd677b16989cf6213ad2f368bcdbe356cb061c346b5614dd4342d6c1e6cfe286c9a266c56d7a1844dd460c379826af152b9e07ace05cf947fc1082ff8c50bbe821754a9165485492df807f7166cecf543ed87dd1e36bfe761a77af81aaf5e6737aaf66eac24ec46a68def2fa81119d48c678f199b9319fbccd8eb213376ba63ac3056562fd98b9dd0792ff6e22db98bcddfc5458cd8e22a5b54678b6cf1ef59c4f645fc62ca4e8b505a5cb90e6fd1750ebf9cc3c53b87d1a34b1df6a2c3a861d4cf93867f48b21b626bef86fb0b376cb8f0b5864fed696bf85569b89065c3689f865f4fc3fdd31057a1d4b0395ad8509d1fc36e4f193e2d9320c37d6f6488fb5ea8bc1021b7f04d17362b5b78d1b530fa5ab816b6e7c2de2f5c0a695ac85eb3902d2efce2dcc44d64890a0fe1bf0f76fb837fb0253ea812d741b5ea38b8898e83291bdde3535a143e35b428ecf514763285d8299542a5b01d2a5cf87a3b612764d64d983065f3d3842a13def28452c29490f929e1f935a8f671839db059e506bb9d1bbc451beca70d7e35884d55c30689cca26178f8d89182305c364d1d9f0d966cb086a806e411ab9017f9835dc40d57c88208b2b880014ac6400129629188582847300ca3238c1e62f8c0442c2e50028b5cc0220b051004c3303ad6c264d2de9a44ab7efc4807a43d36a235a3071862f868c42be6e0c0183ec81088925714a1e415455c21c7001ef08a1365dfbdf37ee927f7d1838c1e3f5c21c4152bb0c3055a818b92566481310ca3c315137085039aaf543b8b3146183fd6c00a39c200238c30b0a20aac98800898c08a22985cdea2574cd4d231525085552c1d12601846470a50e02309b69863e92899438e3946d189392e31072538eddb45f795a4abdb5386d12b2810c307aae8032cc638815305948a39406100a644153a506992900c1f3e542acca804c3303a50d0c3870d5021072a1cc3305de800052a307179536912ed1f9214a48061181d7220a2440e373025726481a9c018d490038e12394a50720a3ee8011b151418867902c3304e90234be478e478836118a592a513136d1313964ec820a3c70f5e1e3e7880c103053d76b074b2438d16b4808cb782743756d004269c62008c1c8ec030ccc39498a2010cc3b080293145c430ea48282a60dd27a13c2da3d594a2f08ba24de1ce86928ef39c849897472714f00863c78e1e6e80e1c66329c549175e0080005e74e1c500ba10c0000ec040d4d93b0df64e833b6b1044fdddd22085190cc3f4db3da332e40c233b0a52300c0f75c60b652d4c142025a3c842c92862801005292dd93b295f4f4ba60029194509c3303cf83525a208b96e5dd4fd75ddce5ff745f775ae53aaaf3b27ae7bca4eb86eaf2eeaa2de5bd4396d6c75cdeabe9a6456f79cbaa5eaa2a64e35754fb9d47da95b5ceabaa5babe3a76757fda5bee79cb55d25bee8ffa72112ef7c6e596eb375c0e93244907a54eb7b439dd5dbafd9ba6abb474ad2bdd5ae99afe49f7a47b7abaefeb942e654be9b461ba85293982dc191772da0ab937855cdf35e5bdeb647bd7e9cedeed9dbbfb727ab732b5bba817b6bb76d730e5baeb868c778b77fd1ade3de1dd2de8966e67a3831a1da38b7ad1b5eea2ab2cba6ec745b777e8f6503774eb0d1daa868e2d744fb8d06da2fb83ee4b29749dd0bd6912d5f6273ad176d1b5e8428b5e25f7d37eae9feefbe9aaaa7e0aa5dc666d08b9d585daedb9daf0598d165baa55a59dcdaaea599d4ba7ed4ea3d5f42d57d3a6d9f44d9f9a76324de958b4f4965caa964658d195dade8e3ea5e3e8de71d4717455e9bed14edaf049f7a5a48db6c46eb4d1ef4bdce89f5c8d6af4462ba8fdda795f4baf5db4ad5bb4b5a725d4dadedab49db541bddabe946afbcfa9edabd1f694ad4fdef8f2b6b7bc2ddc7e6f6ffdd6fc76cbbe5d0eb9b7d6e9eb79bba5a9bf55526b5133b6d6b2e2b09d61bb25b1411db168df1c31679d23b6f0f563cd8fa5e4c798ea42fc187be7c7be123f162df7f5584bc7790c4a8f3d2dcaf8296b89dd9e32a69d0f092b7b5ab655f655b6709535550675d3a68cad763665ddce94316591934ad9ba52f6958db2efeb9364ea27c94e92bd82cdc99893457b4eb6ba9bec2be1267bbf968ca9962c254bd634d74a5659d954b22fa59229c53e83f82cda3debdcb328edd96b674db3db19eb7516295d6798ea6ca13a4bd9104a678d67dfc778d6f0eca20acf9e0459233bc96d6450235b98fb4606a546b66f46c68cacc2b98bac5fd945d6f25964506a16d99743b6f03564c8f469c8def86043c690bd826cf508b296c856225389acdf1e64291f640ad95b420919a7dc6845fb4ede82527b6bb1bdb5fee0f3bc1555d25b0b235db7e8fad39e2ef57445fb6e5d4e753d4d57b4de74a57c745592ae7d73a3aba12e85bad462925cab3b57732e950f49aea6b92a2d57c372bd92ab9d5c77729ddb53aea8f74daec55cabe9a2d32f6e5f503f6d35659c5feaf96ae7ebfb2cf8d516bf1cfc5a51125cfb0857e7e30bae76c175c185165cd1aaf67041cfc3d5b271ed1bd79fc5e5b41dae3ff89e86cb315cafe08a14aebd52b8561b5ceb0dae06d7455ba592b455ee64abfcad9297acb47767e59d95762875563a2bcc5961aa9e9615d5b212bda9aca8ac545256a257dc8352bfe2fe4afb2baa8b4fc34af33b5269efc86ab677e4eb69ef8863efc853be237fd43b12e991e86d9f1e79458fb4d4238d1e59bffc48b4d68f70c31fe1a70b7f2449123cb27864f13d78e448b46a49f6ce372ee5540d1767d3cd96efb4b4d46ed9dc722d6c6ef94dc72daf92b9e51b72cb68f32169d9cfb5ecf6a4ade5beb196d1be232d3bfd48cbce3dd4f20ba1966cd569d92997d3b21b3a2da36d7eaae5aaaa96aa659e696ad9124a2dcfeb39962ccfea58e6db632ccfed8ce51b3b5932bfad950b9faf956be557db935f2a2327f12a9ba67c4a95db44906ad8f0837a1f14ed3ee84bed83ba3d28daa73d487d557bd02a7b10d4903de8cf839a07ed2d0aed5368bd156a5688153aaf42abbb0ab555e84e21a50a456f0a9d290445a87229f4a5905a0a45af2485a2a651285a6d4ee89b904ba85b426b25043d09b52b9590eea176c8ad437db60ee95a87a047a13fea506481a05e7848e121b59804a1ca05a15b106a849a6f5984205e84d422b4da2c42917308a986d0be9921b4670c216721b489506783108b9ef69ec5cef7f4caf75ce57b98ff1eb5f89e6e6f9f8beee39eee13ed93eed3b98ff3dc47e53eeddf27eab4e03eccb8cf1deed30df76989fb3ce13e0deed32efab4bd451f97ccfaac3bd607d7cad5e7acfa28d5472d7d98af943e8dfafcade7a2ebb945d713adae87a9aee78daee7ec58aee72ad7c38cebf9e27a1e85ebb9259fb5f9fc79be9e279f76f2e986f9342bc47fdef2b53f5fddfe7cdb1f7ed9fe2cdcb73f4f82cf9f87cff3c6c7313e8c4fb7b3c527e55a7cda55b3f8fcc1c5c7e173864fb45f0b9fe804173e2df1e93f0a9fefebe744fb9c276cfb9ca8b5e7b4e7ac3fa7f3add39e44d769175da759d7e9a6eb3cbace9f96eba8f65c07e2afd3ed0fc9d759f9e03a27eaec9bd559c9ac8e5abcac3aecad3a6faf579dcaaad37f569de6af3aadea2855e7a26ba9a3963a2bd579d4e197d461a84eb41c88df7254bee5ec2fba9c4ad2e534ea725c2ea7a12797f32f67d582cb695c0ec4b89c335cce83cb394987f9add3696761e274d8a6f34d07e27c5a3a6fe9a896cec296cebe573a6ca5f395cef73de9a8f5749c7d93cee5cede72074a7d67a1259bef7c21bbb37e47fdceef2cdcab3bd1e2dbe6ce3b572de8f47ae8fc3dd9e8eca1466761a3d3e8a0c3169d88b11b3a516ae83474f82943275ac9d03943672d74a04e74ba253a57e844bd5e42e7099d94dba073d16d1efdd171fb64ddc9cfea4ede12973bf937dd494377f294ad27ef3c79739efc2b4fded92474f273a6fdc9cf2f9dfceaad74f277a6939f9cf9e9e45f8ee1c93be1c96f596af92b6af94acb9fda555ace29a1fec2b6efff2942e6bf69b2eeaf747fc63dee5d3e245ff890fc4a39dddf1e6d76fbbedbbf8fdbd7d26d87526efb030c030086015eb05bea0d1c1819328333ca60811729f0220c137811020a05bc68801706f062005e30b6780503ba60052a46c1094b4862118600c41ef0208736a4610c60d84215a0b004230421c943b21ccc811b446460060bc8f0c1a38b107440035d5420025d9420a00b0274c1cc6215a6d0e1894b44421183e8431ee4e006348ce10b58a002149460042044dd9e86073730324406680061010a7cec080107745c40023a1aa0001d06d0e1452e68f18a559802149898c4231431083edc210e6b308318b870852834e10842f0c109330773c000a6889034ca5881185f8ca003176000330106300c600083000130806164d10a394af1894c4c02128c40c420fa90873abc810d66088316a8e084240ce10797d5ca7107376863482e64908b3372d1821f627c918b12e4a203b9a0e4c2021058400172e1c52d66f18a394af1094d5002128b20c41ff4800b3ae0820d6820c317b440852724810840885a71011d178d0edc60430d345ea00214f8e041021070200314c0c5034a7081005c082017b478c51ca710c5262c2189461c42107ec0031de0d0863388810b568002138a10841e5834130f6c6044080c80b0800c1f26b845086ed1010cdc2202b748c0006ea1a316b198a314a2e8042622d1884408a20f7798831bd450063064610a4f48421180106d25eda006b628a2061a2ff821060f117cc01619b0c5046c51628b04d88200b6e8c216af50c52944d1094d5422128d38c420fc808739b4e10c63a84518b430052618010827b57095bf91033786a451c60ac6e841820ed4020313a8c5036a910002d4c28b5bc8a215739c42149bb084241a61884100620f7790c31bd65086306c810a4e3882107c60d17430074686a4410b345e90821eb4d801020a2d28400b061c801602a005330b59cc8215b390631425b3f0c42c343189593442354912dce649a07e1a3ded69f434bae85a8f161fa9c5e869ba9777eea539f7f2d5fcbd54d2f7e2702f50af5ea25dbda8b57aa9ac5ed4ea65a95e94ea65af9a5e1a32bd384b2f1788f372ce0b53c579f9e6e572a9b4bc3c2d2f6f79b9a86a796979592b2f6ae5e54e5ea05679b9cacbde71421797d0e57be8d20e5dd60f5d1aa1cb174297fea5f997334deb17b5f98b6aaffc975f9a5f7e5967fc65f197a60e7fb94478b9052ffbc6cb9bf1e2182f10e3653577f1c2d059bc74c34bbfb6f0b2165e2a0b2f9d78697af983915ad85b6ad18669a945a55a9e522d0b935a545ad2b2b0392d9d9c16e4b4f0dbb42c7cbd6969b9342d7fb05b5a6eb93c2dd16aa7b4f0d34c69e986dba4e5abc1b434dc33df12ed2d4d2327f796666ff96bb7dc62e95b5642b7f47a6869460b5a561d5a20ce869686965b165a2c7f0f5ad87b092ddd30a185f9ebfcd673ce4f9ddff9fdd9d7b0d9d767f7f6cebda6eea9a5907bef8dcabd95b7b4b7f0f16b6f65b75749bada7b7b9dedfd21c9f6d8aa93edb5a7963aed6da2d39eaaf6de576aafbd876b7d1bf6a2f5bc85295dd47751eba59bf3d22d2ffd94978ebafdd2b7ac5ffaabf775dbd7d12bfb7abdb5d7d85ebf7ef33ada86fa6df71d7bdbd17adb7fdb95f4b6b723c8e9b6cb6d96db9594db6f727b616eabf68d707bdd82db10e3b6c3ed960f6ea7741cdcbec2ed4ac2ed48bb5db4f7176db578d16ece7dda0b5b9b59fb9cdaabad0adb6a7f39a79dd2693b6da8557ba9b6f6dfd3b4dfb499b6f6576aefa1fea37dedfd524a3b42a5ad2961a3dd8cda5f9dddea9bedb2a3967d96bd6f5876afecfd937d95dd5037ec417dd185fa965ca8ff85baa1e729d49c504787fa7ba8a3d543dd0ef5d9a16e84bad210ea3e7937bf5b7b77c35eebcdf00d257ce709b66a37f69bb12b8c7d875d69d89585dded0b7b25f683fd5549d8ee6dc44cdbb18897362c62b57a6128755ef869796196176e272fdcff85177f61b678618717760c2f176e89cd8f1f47b7ece37d7cce75fbf8cf3e7efc7d7cf6758fa3e5dce3bd7bdce7f6386aed717bbc67ec71e7e3c5e7f1de711eb72bf5184a8f1f4778691e77b2e6f1e3afa8b9d9715e73b7abd7fcf53c6f9b9f56c96dee7f9ba3e7166d5eaacd6fda0c2564da5c49dafcb46c5e2b9b2b299bf5fb66f766f6e60abe39c2e65e6c560d9b1dc366dec4e63fd8ec38d8cc5e2a6c5edfcd87849fe47f48f88b0f09478e9f96eb58e1d77184ebb8d571af3a6eaa8e5757aae34ec7afa4e3bd4ac74f093956ed8ed7ba63f5bb3b6e1774bc301b1d7fd1f1133a86fa29bba7acda535e4fb95739da556eaafc34e537b52c6556b994f7a996f2e2526e4719957225292fcca4bc4f49d9a1f2451b3b4e3676d8f8156c5c49d8186a55c6af28e3af64dc8b0ce2b7f8a28b5b17377c7431cbc57c958bf7aa7db1fb17335cdce0e2b55e857bb3c22d2bbc5656382bcc6facf093249f24bff175f2be39b97df9a925f3e24ab692a3b5922b2bb9db57727b92ff3cf92ab992929f96ab498e20fe729c07f1f31662c77221bec529c4ad0af115e24a5288f79684d825c46f09b15a4f881d27f710af7588d521fe22c410b783105f5421c4ed96b37b7dfeea3e3fa565cffcdc733baf663b2fb664e7b5cedcedec39577e563fa773d3fea6b36a9ace8d6786d2e219cfcddbc4ed7213b77f133bdcc4fd3471d374ab8979953953265eaa50e2b34389df9e38f11713374c1c21df82fc07f9213f3de484581b3972381b5935643e437ebf85dc0bb9295bc80a17f24ae43bc8cc6f0a9915f2c27d1be1a5bd6d6fbfde3e6fafdeee9be6edc248b5a70b3dd8ba675da6bacf8aea3aaafbd490e9f62b49b7f935baada8ab50776fc95df83ab7c2b95f9afbb45c954f6e434fee97937b950ba5dca7dca64d93dbe432a82368f7f2b458dafb367eb3bffb6d4efe7e35ecfcfd4bfcfd36de7db7dde9b7dbf7f2f6bd6ac9bedf8dd6d779aeef9ee03af25d5ceff9f6f7f936cde77b7ece97ad3adf4e5fcef7e9a9efaabb4cdf5bf2e9bbdff5e6db94bfab49702fb8ed16dc7de37e71553a5c28358cd6c26d89bb125753e15612ee136e534d09b7b36970dffa9024c987a4f321699acd7f48f6bdf890b0d70d1f92874425c38ddc579224cff573103f77dee7ceeaf63db7cf45ce3db7d23d07a5f65ccb8a63cfb9f5dc5acf3d2d957acea9d7ba6eef58d7e93a4775dd5b99aeebf423ba8ee13ebaaed3d1754f4fe93ac7be1a5df724b9ce459dd122cb7557018728a80333b56994a4388ca29041c830a40c91d5ea331240e088641e91c80392262af50d13c000d28a181d8418618e1012884820221289880422818844c9030b3e1503c500b5d0d5fce2b19ef68787615636aa5bd48cc82de77bb32a836943e991649cb44531b927bfc10d971ff027a4eded72e6fcda177303bc34d710b8cdd2f37b3ee7f11a7fc8d8946f798df67d56342067b5e1e7b725c28467f0fe1d928f8f3db4ebf6743ea99b6808ac3d8649ff6fae6c392eb1f60dbd9afb1e69c1edee00ec3afe203ac2476be4b86bba83a7265f9ade1eabfbc9b62d19ff35301b5fa64057e84fc9c5feb49187816cc909b0ed659f3ee1f76364533b21837fe203b89af78dd6e07133dbfaf45f3eb83b7c7113dd40a571f48db906238d95eaf9e218cc2df35fe2de6077c768b7df7f20b3c63798dff8063c01577e53368d72a25af03e593e59d5b23ba898979c7b8f58ab0979a2cf3b80d52fc8dd6b4d9755da36260fc67d70694db015be9d79589ef3a3999694835ef807f4c4d1355e5e91c98130fc9a4ee3e586bbdfc49c1dc728b960c959aee9c39a6e351ba131753668bdd7eaade6653050374cc433323b4cc8dbd5068e8c7cea07f8ea3cd49c5be7e6ade1c0338ef93a9b69996334f0dbfc28f7f87a73b5bd632a232ff6aa17626d6d75795aefac4c4e9f4b0ca6d4daf6f2bf6be04e3b6e0f4fc0ef8bf5c8b7b2613803bed61b94bdd57037ec06c4c75f1df4ab2dd2846b9ad7c3c3b361c600965d66e987fb73cb63c34ce8ebcc567176ca0692ed490334f936f11b5b5718c6b3afe9dc7890b2cd6ed83a5ed29bdf2c7f39a461cd773bf3fec096d6e0d9f534a327e52dee31c4d73fb84d41bbff2d05a7b9e1759edce7b57ec30b1b8de111fba5bd696c35a6bedd4ff03adef5c38c3bd629c2fd251557962d3b37e3251ffea37be398912e13bfc0b2224cd1161cd10db6899990acc3a7ee9f2d2b54744f9a0d61987aa0d5c8367462970a3ed7c0852ab4bc0eae3fa20d6d69e942a477245abf980b4c0f9d9b976abeb23e3573e04100d4859b21802f28563c4c89dfd96e0884b11fe01e0ecbcfb481a56b98285ed5bf4b71cc48b131c88d8da83918b2c0e0ccb07c1130e5af3e1a2d948995f8c8ec213f975626c11b35c3e360bb84e2c36672fd5f23dd651cb56d584736f83b4f48b5b49d78a0fc10f3ba767cbda1419e403298da3ceff88cf1a37b3e44d92e40a821a075e4a8b5bc7b0bfd5a884b813967b8ff3a5321921a299700501cc62fa26e51ad63abdc47eaea5e52aeb51134d5d576bd90da64e5d06c9917c03ffcf4235fdc0a544b01061281dd26bb43faba3c1e501b29e5a834d3aba8b3f249c45bce3274cb04e37e78a79d171f66b871d9c31b32b74424fdcd81a7f59ff31e979410f1f1ba0e0cce339112b5e48400aec30e5779e1e0eabcc8722e390be1e9b3847997a20fadf8afd05cf6209cf0388a5b5d07c2d25f2d0efc5908450b8d44914b8948cfef7e6199e1ddc90862ae6f8ce83353b83c99d4765c303469fb97500377ab75d876e490a63812c9d8f7f1d7c312524d672a4b473e70dfbf6fb6de6a69795c581b27f33792e34d52f120570455c1ab840bc40d3deb3d28af11f8a954c1627e51381637360c46d98f7283de60befdc956b5a624b7622fb13d009dffc7ef936c4e2cb1a0b0009cf4b6acbc4fa08060228f467c808d5bc5b49b84e6ff8e620f43106f3f942afc0100d7779cfe2680a2c5e198ebe8b9b766f60086305aa46566f5a2e79a26a1f7dd4b4968052226a5a0f2d2529b609ab2cb6c8460f79c937ae3ed9607283f82be55ec3b9baa0588d128c799ac9d2a830b1dc636d3d9fa279349429310227d1193c2a198e525a579aed7437030b9cf724808ce7c617fa5a0088ab5ad18c42db5e8fed5ba571828b9a1aba9f824a918a0d3c2366bd630fca8d13d7aea0507de462c43788b7d4889a826e21d874bc32f0e1732c426a29640c6c3c8f220cb38e5a0948c9087ccd43ae6874158f550ad86a3ffb81cb10aacceafa0999c825eefe9d00a2da2623584f6f3bf635c240c862d0d1658258e53141d2ec1e2e85c5b3bb3d0281e7115c8c271606c7417695fe8ac1dbd03e865f97916e8fe3ca86f7989347011dea9c314bab6858b9d4cd8a21b5814632323ff8fde82c0d0fa59914e202f491837f8f7b5669c430d00f7d9b2db0dc8626b643763c9f07214ef3b7910f4b1f41c6f7962788ee525ec4108f4fc72e6155dc7917c84c3375928116d6519180ebca136a907247e6f033e504bbc60d318717d73c6b3b9e2cfd9ece04ca9edd41142aa4e6dae130d54d3d4c88728d70c0640257d5d459de531da1ac225aadfb1ed416029c418dc8c7dc06d81a8b1f65f461245b0125b08a2b0c954002469995ae17c8766f2dfe19e180f72a48018aeb6f1fbae128462e1088dbdc28221c2a69a1a7bc808ef630cb40608e653aed88f83e906e19c860ab7892c05104fe27efd09dcd8175c2e543586a04134870e2f383e6a0c5cf0e0a1b87f8ef69a3c9935f42d8ba98de072956004b57b36fdb1e0e6da91d3ba7644707e79d3d86c6615963f1baeb7b2c145c4a7bc1b91bb4647062239d24da6ce18cdcbb79a62e74da8887d5580e792faf529d62c7e8b86da49aa62c0ace3428cf5c275f1a06a55a526ae4fd7d55dc1dd9fee1c4705ac4d83049fed4683f8aa653ff6049f9f7347073f4ccb074f9dc7e0772a06995808d8a046603d19341a21becf667af23b3e2233f4faa8b60f065932f8f128d2f00071ccd3d63e1da9cdbcf6cce16efb4ef2b9e5e19076bcbba463cc146bdf4d5b2e6e54bae5c5054f80ee236efb150cfb172086b432d72919d2077bf5bff30faf45b1ed67974bd8d38b0ff29a253055027b0b7d99f443c03ad6c3530fd37f637cceb1bfe26e70c2c7e8093ac663c87b03dc985b5b4a63b8858fb2c745bebabe86f916da8445aa0131d4d5e68deba3c3281daf2266bfb87115e809b06844c0d5ffdb200db99788b1d0b417c1baa450befa1381ffd55bc94faf120372894d75e54ee33a99cf3f31ec86d41f0f148a5b0ccfe32f7857845ccf5182968e0cfc7f7fd2cfeb462a374460e02e107cd0ae04561f82af8fc35bb62f7e79a0be59f08b5b6a7e68b95ea0a7f35a26e08fcae7186ec3fe917bd538967fc2e38c2f92d2d188e5fb55eede2364a3e549cc463a5d27570ac4012a149ee507a15522b196b23dbc00f857a07130d4784d4c3d4077cfbcd76082fffd71ac7a95d9edef0668ac460ae95ca620c9f9bb782c17e02a658c31c80a78599e672195ce96ff979dc79fe1dae5280d262548beec3c23024992f33a844a4591b1bb3b676cf851bcabe83f2ce79db9d9440af8c16aa6a6cddee83b51c8fb31d9031e06db92c750bdacce6ae5aaa144b136743cb0b0372e2707628a874d7fab641181aed9b86f186325f949268a4372d74f69787d8e90fdd532db7df026b4bbaaf91c0b86c2b3b684fe23f876705b79d7f3b2df032ebf8b6306047d3a6d8e1dc796ebb362b6348f77162c42e30354776f9d4c056af22b9580017144e1d6aba7adc6bae7cd1ab421dc98b37e876f39dbe82f1c8c0c96ba04358dfe36d01a1208c2dee66a9366abed61f94af61fdff13633612a6811dbf37d04fd5f23e07ac6bc629c1fe5fbff5ebc28bc484d5399213feae91844b285107c5cef7f2daf58e4df7ea8d3d925f5264d00b2c9b0e68184451d778073aee1b325d6f0c6278b0479abd5d4a8d0a555031ed102b653aabbc830c9a0ba7354d280abb284eb8b3ed3709d39704a22c5da8efabe9f65c3faf244b0a37ed5206608fbf6364bac67d7571f383ccaeb14a7babd5efb3e9e7115b6576e52f2f1d379846bb6d7f92dcc961afa1d6690a6ae2a6ef02526942d7d6b3ddd8000b52fe5d5a4b1f4bd250eb7640a3ed4f39e02e495e2719c8c79c553ab9b2e203020811f6d0200bc5dc7ccc0b093f20b81a955762a54dec5127558db425f3c99e3565c5f4399e717230c3921f7cb09bc85a04291576d44c335679519353844b2765a9d3361bdd99ab994628da71fff2fd12b7b5e36bb4466ef4fa1dcfd6f1dd56c9c14f78a3c31367f4f79d66b69d7140969f650099082463ae2a946a3c35dd89b866e58229613eaee494de91369bdd2d41b5eea41fc8a764a179008d992fb635dcb3b521c3cfe33c725a2f82e4b23d94e8eceee3fb8f10311767425847504b1056a9510ef12ef4211849d5417f5d1f83b076d93278947428c21b287aad843a0d8f8da2a1c571cfcd3ac0328de79955712e6fe83bbd22385a4be1ae1872d075c5d800340c35112afb74e9c12b8d528d16193d75067d3a8250913bb46b27bf67827711925a062c532eef8d8c83bcbb9a0b79b441d85d85f87610ea61807279e162c77385582bdc41647c414ee1d2a43ccfee6bce812b793181630c2833b706a21d86872fadf33cd18586299a463c287f58f07fe419f5d81a37538cc4afd3a828f0aa8dc6b7c0934977841470fe0cc0399827ccefa6eafd04bcebdd2a1f685b776b6ed41cf6e8fac3ff71b7fd85cd9562ed79684f9d512cfab9016a1e542e60e3a7d074fac012e13d81cfea9f23dda8e4bceadd80a4b754f47b6e9b81b0a6ced14e5c79bcfa763ca9a7103b1f2dc31a24ce79f01fff277bf1cb8f922464e6269f0d6184ba47f660ecce90679f71f0e510af73f9f3bc1fda08f582cf4a8c2b2f0a1a3784cd4faa15097b3923a4c11ccdc26e6939d3481bd40161409023d268e19a16803da79252825082661ea08fee064d0073e32719c88485bac66cfe19e21fb338b4b6839c9ddc2d8d89784c05f1d51f4f5feb05e733c73994e0f7182365f83183606703d53f3b222fefceaddec775622cea528b5c0000c6a6638f2308b2e6663fa1908be704ffd49529a1c8e5348eab56180765e28b29711f04fcf48a47d6e368c935b2aae85c064a32836c8d752d150663b6a42df08c83c852125861d8e3691ae0bde87e0357f60c5e40a66c6e4a1c3c17b43156564c48f0dfa09359ddd3a73bff771e92001fa3d337166ee3cea859c4ba0bf160b86b9fba0381c018dedfee4f49af0ed495afb183d17a60c97c1098dc1760fc9d244ab415bc79efed2cdb3e81426b3ce29b9cf1cd2428013ed2fb78b6726ad5f14f088a355ebaf99f23963cb1e13e53e2513bc086fcea1eeb1d43e39737351559f71c42a175dcbcf6447947ec00a0e05abdf718426400160357e1395f0e777d1e689a06e93f50cfecfd1c122a5afb4844b73c8c2a1ba2fb1bf0488535df9b9087c1e78944d6067940b434d96a718422e222d8a0342db07401ce8b352e8ea89dad922ce6b4e8071cb615ecff1adf7167872a0b1a567f25302a235627d73c6b9728d9e43fc9b2aa6fd7d48568536e350119949c485507a4b3afd7a7e085af1cd4a79ee1c2e58a64eb2c9a866fb9500e0084c69467c3edcbee4f50056929e647142d3fa5310379e2ee2d768ee2e333dd1c7a9ccea008ed7a3ed496a4a8d4f3b26f4f2e157a6a2b1acdf582f9cf27a39a4627fc17cc62eb934dcb1992128f5dccded3c653a42075d3af63c068ea4234431062be7f682c2814bd311facf8299f4875aa08f1adcdbad59f2ec06ca00799a4fb6bb2d231205c6031625355356bb49c27e483ce0325742ac3d3149c1b036ac237395d3d45618b8abfa9a582548a7ef561057fc3d6d58eb537913561ba6259e2629606583f6656526dbd79b711e5cd1da6dfd9b55fe10af478b787274cfc085ef2bf057d259a1a58e604f87c68a199a98cebd85e05f87153ab60c6b0b9eefefd66395aa4847f65f0c05e5b9fa8c2b078fa75e245ebe76bbdd898aff0fbb8d5ed6c7dab72f90c89eaf99bb4011be6ba6d1a8e0bdd93aea07edc8dec23e1f7404a72e5b76e01931e43360a085043306da27a165719fbfd9b9b7675a32ea574aef666dfec179f2826c6fce2f45dd3c75a752c4264e1c57d0bf670bcd2972b03301a76fb46f2ad0d037b8306e8584eb54da559fc8f78f62ef23e0759a6666a6d94cbcb6e6f9e4b5816d417edb0cb72dba51ac18d9780c31dd4ec2bba63b3d4d82b2b32c25fa702e9c02437737566a4f5a756e98e82f840e67a28c024169591d6dea3b10e17c5e916486256a3c72f62502b2a4f4d2d733e2ef1fb391e5808d9007c1c100545793b7e6c1e8a397416ba10fd92e1a11190052c196483f2dbdc2707c05a393026f8f8311ea55342ebb001477a33e8b8aaa100c7c65043a7d4fbf4810106f371daf9168a6b90251844ca3a85efc12319503e183b4a9525a8f979add5289b6c8de06d9d6d2ee2677b584ff656ba2f17bbb2c86809271755b2f0dba48e940464a09c1fe14d70c3b0c320b3807451a7ef9c36cc732049f0eb535f70f7387d3dcce31bdd356af3db91c2f16bbefc579720ea6d7d67995863ffd6d7e8d2113e680af765d0efad3dce950bfb6f677d239fa8be6fad98eae9bfd5eae9a75c79ee7e0d728f8b7591d4671de3d7907520fa45ea54a59a4240da4b63a6c7ac6e4adba9477983af56bbd8633393a58a7289235a53350b229343ebd669d825ed649b322cdd9445131e0d3b3d15ab54d693cf76af104749479d43defeaef0852cf8f413acb8f6733ab6b6b2f6f56de8cffab2eab6b6b3e73cf8f67394f4cf1d7b781dfa5e26abf2e7ff37ec6f8c519f8d431f59a55f297539bbfc67edef43cff3057eafeb789fd67e8f8bd365fb4230e3f12637f5af898a4b48cdd38feabf9e263f18c775ef5a6a0a060deabbafe66a9dc8c87e9bdb6360505359b65fc343cabcd1767f776c335ebb37bbb75a1b5d7a7a0a0fc699369369b7539f7b9daafd21ae5dd0bbc33744c5da063eab64a6bd43b5bf70ec3229d359cf1fcc0692fcd9f66abeb69609d2fcf73f9f49baf1db3cfcab7cad8568785197c4ca2f1ae5aff2b2a5af1f3742febf4ee3beab01cdaa8add2a7b9638a1d9c9ff1c48eff36ef1c1d4ff7b215b16735b33f49c93c76a62a8a8d77f88a9273feefc4356baf94775e665abed5b4599c1f054512b437af321f69886bd6a7639aad885fa09762093a9e3897e7beded9ac0b3f3be629766798644ca4ad93e37971fcc3fc778638c74f61f9e2c736cc5e9fbcc3f36f3091ce1a866a82e3d73679e758febe1a2cfe3498632e7f9fbcc38205cbedcb61f1f09bef7f6f5fce612ec72f8e64cedf5ff914454bfbfa365ba5b59257a9bce0edcb3954139cdb97ebc0b8f14a5e2faf93e3db979b6591c47494dd3e381df898f4a7799d9f7b749489e26c92aa967a0ea32ec78bc5c89b717d8ac5442f8e5f5bc35fe9ed7e7ed06d95771f6607ed07ab9626392cc963b64abb272959cdca66f8bff6360cba97f3e638d7a89377d6e6d8d3a1d8dd3af878d2fcefc4f6e65edeaf0ecbf5b13fcd45914b9e61f60fab68eeb04add1f7b9ed7c7f8bfe6a5e74ff35f9bd93cf3fc451acd31cf039f3c07ffbfe6d36dae7476fb72deed8303bee731cff324efa09ae0f874dc6cd679ccf33cc9b1ccb37887f3633cdd5fa4cd3cfef7cd494799ad02eb846a82e38ebf2729d9eceb3cf049e6b9cdee798e73d3745ba57e6d8d8ed33dabcf8a4c9e7f5835c39dcd7eb3b7e6e59d572e8a14e7334f30d77f3ab443e3a5388eb3c314a48e9fd6fe66bf4c5aaf966252fc2af53a4b711c654e47d9bd4195b57fa60efb93946c96735fc1279f9cd325e7becef2e35937bd149f6cadd259b57436ebbcd24fe9af5feb302570fe759bdde6f7afac830fd6bfddecf7d74b31b4d1d03175c7993a0ce3af968d770890c9d28466ca6bd6bdd2e9e05bdd79734c5dac558a3fcf1bcdf89d8eb237511d1da7dfb7ba1637abd56c67856776a55acdfa87d9a9fc3e383fc4e537d0d1715279f9565e80e3e6c554c4e55b81f67b275cbed5ec73e7e083f6abef67d6c89aa81cfc3cebe7f955fb4d79e791a965d2739ffe34f0bfe67ed22b07bd7cab6b33eec07f5c8ae2c4e55bd5ecf4cf691cfcc715f8f7a06deaee57f71120564d513788348855abd3ddb567d59cbadbcd94718f799e673c47af27e4b991993295a3bdb99e01271378ed1bf0da37a0096b3069491ba5dd64dd5d0292022444213d7db4dadbd71bd29b268e0e6d19b2e5c796a33be67863511a668cf1c516571482a289240001d167871b667061cf0921e0d1e0020a486b65fbb4c881c0cd149ba7334b3103bec0b864a9a2458a96274ab414d1e2038f3ae060230d32c0c8d28516019882d0134914f1830f38d0c0a7053d7942c093419d1cae1494e08136524f4d650cf89205b6a5ca13561622597c64693ae058a40619606c61a8d0a0404708f1430f37c8e0829e123cd0c0821c968c658e187e123cd0264a0d531903b07849ca82450a9627585844b0f4c0630e38da4043005e644145144d2871c4103ff470430c2ce829e1030e0040e7ea0aae9426e7812aa8344d0a5c2113a67b6971294faeb0ae18b922e44adb21471b699431061888ae280445134600e1030e33f061410f091e6c60410edffc6971dc4431704681981f10a6cb6b8bfb1477e24988f88f02d401c72235ce18c38b2daea8220a414c245104103de860830c2ea89047040feed8a993bbd58ad57b10b461a3a6c98a193262ba246d712b53ac3c5132c40ad21d710c008d445f646185144f2c510589217ed8c1063e2ba430029e0ceae0462b300237525518a8c264864c953055ba2a5cb054a152054a9525558e0ca9f2a34adb31c71b6c2822030c44584c0105152588f843c5071c647041851346e820030b72d952508207aaa2d4342d5139008c928b0a962a519ab0a8181142c5071e8da6305aa30c31bcd8020b2a0639b1841143fce1c186185ad06342087834b8800272b4026771de4c413d39c9121803664a1717962954a64499c2640a922941a61cddd1e88d36d22823d1175948b9a21014818e00c2071d6a88a185144c08a1030c28b8bab7da8ce3c681069ccc1c20a58b94242d52a84889226589142342a4f8b8438e4569982106175a04a090a040470031c00e34bcb0270f081c64600105b8d10a94f30055d4d3990562067c511a8000a7320094015a498a0c2064001f79d011c72235ca48f48516571412b4841142fce1e186185cd09367040f34b01385021c8e6269949a0741159b34b298988e802a51a04451128548941e781080911a6524f2220b2ba280c2c41144fcd1a10618f69800c206764a2cd6bc07a8a0ac49233343260c142f056cb94205ca122847a00881e2a3007510e00d36149591880b2caa90020a268af861071a5cd0f3e404123eb863c1d51cd1e6c579f3846a0d1a056261604fb43cb10285f584c8131f781060911a64809185a1289e5802d00f3bd0f0829e12f0dcb100374e5093c0899b28276a9c162833068c924b8b0fe0c409ab88931f4e8eee9063911a6624ea420b2b0a41d104124504d143931b9ac8d064851346f080030050906b488bd3048e030ca0592001315e0ad0d2a44a93274b903421d2e44701ec9063911a6484c1c521435240d104128080e8e106196060414f1e103600001db2861e046d9840a9919519e3258949962a033861a284491126427c30693ae270830d35cc10a38b2db0986250134708e1c30d31b0a0e7841240d8e0823ab83913d46671dc4831d0b48480182f305796294b9a2c692d41b264c8921e77c8c1461a668ce1451686a47822d01144f8d181063e2ce40981830b2820e788e117c78d14032da6040e688169752f2c535a4d92b48cb480b48eec8883b588350033c6f0228b2a08398104202078c081cf0a278cd0c19d0be890a3f8b307da443170c60c0260581dcbc5d2c2a2c27ac262b18eb07eb0ba0e02bca1448d32c240840515849a3862883e39d8c0a7053d7946f840033b4a2ab81a27780f022a364f671448408c17180157945051024509eb8892214a7a14800e3916ad818600c2e8228b005001c5128082e893c30c2dec3141043c18d4c1e59182b3386d1c58734696642996244cf7d292c44a9228495847920c49f2a30075c8f1461b699491e80b2dae2844e889248a00c20f0f39c8f0c20a484c10c1833b16d021c75b8d26411c370eac392343b244068cd20b89162a4f902c4162040892be238e36d048d4c5a12a06356184107d7298a1051446c083419d5c6bf3c803546b8ea891c5c474475c570638d204c99120477ce451c71b6da881c6185d6811804283983042883e3ad830c30b2ba050029e3b16d0b9ba37fa4500a78acd9311a6a5040e08d3e5b5c508162355a02c3172c4c80f236d871c6eac81061989b83864480a414c1811841f1e6ea0a1480c2ca45002081c606041792b7d2f4e551403671648e080304a5c8a5c19a0481356912345801441caa30e3918ad7186185d6461480a289a5082883f3bdc20830b298c80e78e05385c43d093e3468a812633b1315d5e5bac1089d284081222438800218284c71c6fb0a1a88c30100dc162482128964082883f3bd000c39e1344e820830b2820e7dc26f829c103556c9e9c1448c0802f0570c13284ca9028439c0c4932c4c810214390f0a0438e45699831c6175a5c51052127902022883e3ac8e0829e3c2380a0410557422aa545f0a60aea894988192131315dd2962b53843c5922c48810214290ec6804071b6724e2020b2a06319104202078a8c1851448c093010564a59f0441200832b5e68c0264828409a2e40a9225c89427415a41921009f2230f02b8b1c61989ba38540521279018c24f0e33bca08784103ac0a082ab917e11b89102b2268d02077801f2027265ca13202c2046800c01d2e38e4671b0718600c2e8e2901585a060020921fcf070c30c2ea88042092278b001002ac8e14a41ef812a364f671448e0801f606004f88f283f9afc68fd20f2c347011abd318032c0c8a20a299c3802883e39c4c0c209216c60a7ced5bdd56871da44a9612a63808fce4792962a3e9cf850e283888f1f79347aa30d34c6f0228b2aa2706289227ef0c18617f4948027830a701d5f48873db9ca7cefe66f348bd6d266983e7e91211d46867495359a6db5faacc894e7fd25f0ef6cf6b472de8804111264481b201b72044b162d595c59801021d243b6fce8ded2640271b4eaee2b5fae4c39f06508ebc790233f16e8eee145b62690970c12757707d9c281c79a024af8830032889a8cf963c8015caebb3cd1c6bbbb0980400442b9fe559328ce2625fef899b1d0dd439a15c884402204c24312c10a4407271181d5037e5c530db0022110e84ba0243f5a0269c98db71baec0f27383b396a8d3eecd32397a6d584b5ce9afd64987a1612911064b0921ba41afb6c2fc6f96ca8224a68d34c4b38cb391397b478a6906451a92b38c670dbce078bba1ad553aab76761f5f3cbfd9bc33dccc82249e5990bc7dc625d5d326d3df68d5135653de2a375338632a7ea6e11b6c73d3a6ccd92b65a3183fcd95b44ca048c3a6c73394a25924a1ee67eba6b6c978a2019ba89eee78731a6f578dad39e179a794538dbaf3664c6d3f85b315a9b00c676f13bd559f67a6ca2f8a9fe7d40daa367fcdfd719cf78d0549aa79a7940549aa1a6a389a4186a3188ef8c0d07df4c2910b2c2250e8f6580dd371ce6e5f2e16bb7d391611b5bbbd348b88a5bee231908275869574258fd9c7538a4a26e5e5942a8019747472b0f00abb0a3d814610c022445d440a5a042a61026f1b00e5f962e646a346411038b36c00a837f8200e53a00400750e8c17beb8a190d7629e32b438e2082f3df1d891238978bf816166a48929e0349b21ba98b2c2182d349a21bad4b45061a815d0608a3c4c7a20a0115072478a1198e0d3619aa6a6a228b9d3dd912a1a58e1b57e493002066e4ca4def2ea8291d515a7be4273c113130396a6828710013023c94e0fe0861635ec5072d450c22cbad34015377413257c1820060703f4920eb2e45973819c667d20c51579dc84d1499cf01756a001b283c445c61785caf06923802208b324901b768adcd6781037a98934956147d10e49f41032454cbd208018ec085143040d627408ed04993345830ddc3cd040fa8866d88084080de4a83a3d31f1d43fdeafc41123c9023e100df164ce9012da0704268cc0c3057916e89186ac001c28d9403d32b892617ca08f9d1e2e1f32fcc9d22810521661d8d0e4c4033b4820b48418e7b002213d0dba541aa8830f121204f46ca0a6fa11a2228e70d2c6202f4738e890a6883dac44471554d0830f767c2175e42608265230408f1f8501e30c174b826074c4848415943c262474a31b4203775061a7c5f002f5e5151835a10b32015972d8d3415029a0065bc5d5315041b30850845d020466ac30b2a4a631c823c608243c186a72cda0351734b1a6e9cc8b32072af8b404394895b1431076bacd1015e89d0482e835600449708cdd4e7cb02c119100a1cdd840048b579eda074c3c16dcea8ce92f815c3f30e88051c3fe481dc2f2c414ed22804aa32c7ba6b4169692027696e8a0bd969b428334043415296176906389113dc0161d7ca0a1c218fda4022d776040e0876e12a58a1fba78c0a55b71c0100615133f342b081aab0d4478ea246b9a7ca93a82511f49e28d27a0b431d246e03060bf30a2eb224ef23042c90d307a0801e4343121a38e1602c7923140d083d4428810e0851c2540e820641449214107391a489d455079401840ff38d41274a806da3fca4c2c6c64d1a07d0421e504159850d03e10f043440c5c96e81e858898a38440b37b846c8434a431a87b28e98ed81000071a2950b6a00bfc35522e0b454763cc1a89cc05553e7c31d2477900c13406a017fa488a41398c08c6f4510b58ec00e2890afae896c9842ac8a28fd6ec21bbb8eae8a3244255ac1472f591119b16353a4fbadda8b2e5479d14ba11ad90830e4ea0d0dd040a5d18956eba7d98a28b3e5189ba5d080232a212eb0e41c915033eaa745b508410205ea8a07b8e16611cf9f0a1bbe6d4e30ad091ee3861d090dc40a37b8a83070e0df0a69b812ca19619ee7433a9a005183d75ba133834e62420dd062c71060c195d747b5143a788624c770133416ddc3cba092040194939f4e8ced2833e2eaae8b632e7093c7978d03d4501af4cec84ee285e17457650e976524809960d43ba99d099e31160a5bbf5574e8cace856b2810e5ee899a31b092210bae8618dee236e5e0f0c1abb8bd881c48c2102ba893861c69910a27bc80e56442840876e217deacc31e34f77102aaa0a859ce80e82144117821add401a5844844cd2fd0387235b8080d4fd83491689d060eaf641020a77b2e0d3ed23caa0035c98a2bb479f23429cd8d0dd230ab6e78c18ba91e8288281084add483bf0b0048520ba916a490fe5a41b894b114864b0a7fb68910cdd0548dd47492c652003a2fb68843ad89411a4fbc82655c6a642f71113a13b7700ea3eba32c7080634751ff9a8f3439324ba5b8d2328b327dd7dc598405294d0dd486cb1074d5577e740c30e22f8e8ee3d7f5bc281eeee000d16215a77d3b1230e41b9eeae143c416148777f0ad8e06482ee7ec0e5419f06ba5b0a8a11442374771a38ca3cb4bb1790e1d0136c74774c89092484dd2de6f526d19ceeeebc60e24ba2bb93a078691345776f31d4421d3bdd7da5d10458c4e9ee2a77d44c30a6bba54c30840800ba1b0a1f3c0b88d0dd4eace4198fe8ee25620ccac1d5ddac2e34505445772b19d2050b68743792f0c644d6dd46dcb05158d1dd45f898608092ee2632278e287eba7b086d00298aba5bc88d0c0bf2e8ee2026d8696388ee06428548064f770399e27d81a6bb7f54d0460232ddeda30d328d94eef651a50462aaa30a24f2c45ae0d2dd3dc6744f2774379200f4fcc1a1bb91f4d879018eee46aa2a524677c15dbae0315ff237edc866369f360748e20019fda4593e2062f940e847b37c70c24e1f69b128cd1645e004d9d1dd472d6841e60608a4ec80a1bb914c58c3f5fd21f4a784ee3e4a42d01970147572d8eeeef1c038b543164c0a00070e32e420b5e408420774f7910226c48922018f0b4874f7d1076b5879dd1f6576e8eea3267a5c80050387e884dd8dc44116263090b1458a42dddd430e3624f88107412ab0d1dd47de0b08b44163820449dd8d04c78a2bfc4011238b12fc18f1a04a4a1f359ebabb8899db920c7a90607dba1b69cd1905ccf880cb077374778f2623186a43cf1e24aee8eea3f1060a869801ce2228dd7d04840fb43e82840d4f5640a1d1d1a1581e0b74375219729450e70e3d64b0e00551212c348118dd7d248511390ad4e1861541dd9d95ece3394241799ee7629ea01c0fc76235f1a9a87bddb54d1d9597f7afdefb6b9bbceeafe87b77e6c3eea316ba4c8ede3f1a5bf55fb3e2fc447136795f8379cd01ffafcdfe6bb656697d31e7483acad8746eabdc56298d5eff10041f568a2259c3339cfe5f8df240b7d95fa2389b6cf6e2f8e336debdeed7aceee3c019be62b1fbb1984b8ef75633537d76f2e2b89292577f1c67e881d4f330dbea399df1bedccf6c9ed566b8af339b67e2bca2e41c90ce446bc7eeda9adb104747d97fd5b2e96cfeaaad74946170d6cdfb36ea4fded9dbe638c3f7f1bcdfcdfb9e5fb266dddf36c739efcf3a3b2d39c7311d654ea5ec7a4a5d3c3ace123fcd95574f6f9aae146b350bd619fadb4fb49fcdf68e1f25a75718b6fabc66670ce7c76eab59c764f758a9a4d9dabe5290629a97f973a54f523207e9a729bb2f4ae2e34c9da9eb3a87812980c9615f0a6072e53ac1fa1f7ed0dd667a33751853fdf08d77e0631c3a097ef8e1f1bfdc3ba532292736b2a9345ded7eae3df9a403e0db6cb3ca9bfd7df05af7f269efa2b5e3fd72ded8e08929f6bccf66ff4b627fab79c35e6f2e676cd54875b8bcb65685e787fdccccb138c57965ef38ca1ccf1eb4b5c30fda7a6d87457176b9fe14ff3a266d2df1f4ff2ae6d2cd3bc79a9dcd665730e86f9dfc8aad52dbccd867cd929666435c57be956875ff36c3b34a76068075669cb11567d762519c7fc7d90cd7aec62e3fbeb6a461346ea466b3dad5285a3b7a9e4a7f4747e346ca6d14e75bc6b606c63d631b3aa6305bab147fb657b359b51d06df56a9d537690efb4c8e9882fee3bc1f55499be14c67e3ed86b3ce6271de6c6df20e8b5feb0cbf9ac5b9cee6dcc0ceefc4559c0569957aa69f7d3c9b75d6f3fe66a9bcd13f4f9082757e3e47fadfdf59b5d403a3bc9bc3a697b4fc6866d7d6669dd764abb4da289547739d194fcf7336e9fd4cef87e78833693bbf5cca0f73f9d5bad7097b729fcdc0ff8bc6734cefcf3b6bf42f2ec57927f898f43aad38dd039fe69d52decc13bc7f23319e209dcd3bc75977c3f3ceb1ceefffa2f10e7c3a92df67ffd6dcff367957e7d58b7f1d4fc77fede776e6d95a7d9a1a497bd3781ece56cff3b4b2571ef48e9fa7383ffc4d60bccc39084e5f1af3850cf154238ab3a9eacb112f83bc68e045d6a5519718ba78dd9d27cebfd8563c99bc6bf337d1c83cafd9d97db5797a52b909f5977e16e3e90e2a85b87ba2716746898e96120e9d6dc1dca001f60676a4802bee1430a60056d211ad241f9222682589c99e6533cbb99f9e2b5dcf956c163f2cabcccbdcadb839e2d6eb8717d97ac15c875c387477e7e587f9e5792e7c699e2ff069ceded1e5ae285c98e0a287cb075cc83495c766d895ebdf70e781e0f408888100090898da72c79644ddddd394ba9af59a38c3a779b556f3264ea86eaab5c5494b0b232d2db4b4e8d1e2a4454c1630b2e0c96295050a9627b0e48065022c53baabf4c242cf13e944d3d9fb74404bef8f5e3c7f4c4e40dad2ff72216de96dbc7b795ea50ecb3d48da28ed3631053d57ea722fd66cf6f73cffaba77d38a7729d7792369f5e7173a4ba82c29533ad2b503a29a9cbd88a5814654949debd48abb49235eaf7af1e674387797fc9d1f392e6a2e82174f753b7dca9bb8b74cb11687992eeeec0ef70ee5dcf73a518be9fff56e66a9b1fcbaa104f35a2383f71feb5c2a765454d771546ddb22a27c896604bb058ccf124727f145f8decda25d8128c2a165b921a47199e44cac0c0a7b2f6cf148b5539ac4c999c659a52a75b53beb4a4a021654f77bb94a496942c034cd1dd17cf78bee879ce30e6613af33c4fda546b003c8001ad288da20cf161f6fbd95e5d7befdb5a7d8a1276c7bc056451a0c81a8df3af0c0aa26e41c1a1bb5b06a546b5a078960d145cad63aa246b3d01d4ddcd7e788620fd2849d57a72a79f78b9cdeae490ed92e387f63e1da56aab3bc1b59c94e9eececdb5eed9be33b947d37202a5d5845057d56aa241e7fae55b2d95df4099efdd94df408ed6ecd76272c7878eb9e44bafea7b8965b47fe3638bc9154c2c683121d37de5fb5129db5ac9ebd9d6ceb320946e2dd962499e25665a4b7ab45a7f5aad08ba035f14659ddb8c7b0a7a396fde83b6293f558df21c73b1efd48178869584597dffd4812f9acba55a2c30581cb0bcccbcc7a4fbf7232e7359e70ce9c4d2b0796233257bd352d228d3db47e99612430f5adc572a2529b494d4e94a5a53775b4a88b49220d14a92ebeeae143fcf4b7edfe36824c6a4976f3c292929a9c3a2385b49c6b49278692141d4ddd9da29f0a9e73d1d7a2d956e21f1238ab48116123cb7cff4a9acbe0f63b1aa10cf70a9ea0cbe334fa7992758fb293cef9958acaa4edcb595ce2abd2d89f3f6c19931003eb199653ac1cb6160c23c689b68e584b2b5faf4b759c14aad68062b6d00cf72f336cbcddb5f51dbb5f47eae4f19dbdb2ccfd9edcb891943e6e60dcd19a7a74331983057656e1f9c584ccc559103ba4171a98c685b44e2e8ee5eb9465d55b1588bc89fee0e83f336d522d222e2a5fb158bb9e4e0198788900e1c5b431259599b2790b58604d1dded1f66aaaa32b528dcd79c6512c5f9b58658e9ee06ba25e450f798740b92541f6617c5d912b28490b0bbf2ad705f5f1eeeabe7f2961023d9daa930dd0a42442bc80dad2055dddd6c76b3b7e6814fca5a41aeb482745252f7d5824a95b42089fdafec2dd7aff3765f0a889feeee80c091b580b872eb87153d6795ddafb8a8f21b88c5aaaecda353ce3d9ba5a5a5aa32d7a22973a64cce32b57e0c69f900a2e563d6f221a4ac0fceb0d6298e6eab14aabb9f6bb35a6fe6b9ad0f5efb4d51aad54389b2d5438c1b2d24335a4832b490667733750bc94a77f36934fc48fcf2da78a558ed474591e26057a00df35f4baf66f8344c6f5dcaa5fb53f7c1fbe0dba654c5591be296961c069639234e12a45714ac4f4e19bf8d8251b15888a79afbe07c354bd8d6ea53c676cc3d58e5780123074c184f800c19a7d570a2fe36c600306a423cc3596ede96f00cffd7728fed77fbe05c7befdb2a2de74886cc3da8e6f6c10129f854002179409147aebbab13c4435177e301080f3a7868b9c35077decb61e013cce5f9d50c4930817947ee559fca73d589ffd1dc91c60e46b6cede6a660f9c76f8e939650708ddf5edb05207a1ae23d751858e294412e7b78124a6745c3aa6644c6f54d665ea3624c3466134eaa0bb4b5ab7d9667770863256a335e353b11a3d99a38939c4eefe46f3b50e9b993acc56e99c649a3547140218eaeeeef5f55a9acb33ad3202904080181a72e891c3290e46dd810fbeb5369abd570ee51df8e3682f5862d2bec0f9d7d5d1b7cd6b41561c49c4117617667ae350d21d581f0e387090c181e1a8f206a1eeaeda9174f0f3379f66330c7667a5f3d6dd489af5460e6f78dd614ce2d1664ccef9fb6fde20c00d431d9ea15f610a5eb9414277e0e7fb5795b2dc80d3dd7f6e787777980b2346ddb118f96916a3903252f2778adf836eb3d2df4584babb7bdacc53b6a8cf2238dd5db35e4e9cdbea13f6226d56d2f1c4817fe922216498691b5f741b7bda50d3ddd56a24cdea9be30cef4b55ea2f5ba599b4d7828e278e0d46950d427fa1348b0d3e6c48752fa82638a06b008df2ffb519a473fc01ecb1faac087ed500c8e0ffda1a88baff6961ae5aa3830efcfc77bcb4aa35bc74d55ad02dcecb97284e97579cfdb06a0d21dd9d1a863aeb659d37b736ab414729372d2d814f4b4ba2389b961c4faf2a532667996e1f9ca5a597abcced8303260cb966e9c7b2aa4cce322de13239cb94f1832c4531289a622962428351777f297e1083a5782754131c2febbc6fab56f429346e68a43983d11982ce18bbbb3077a92a71dfccfd575b5659b534d7c07c8612330299415966cccc305206a2ee1e9c37b7d56ae63ac35cbddcbc59365d298af35a2f45cf866f9e87b82aeb60e0c3c432686530e9308dc48fb33953b719acf3524c7a59a379ba15960980910058e8ee069a250029016819c3d0182c8ce194880d56222e126590a80056a201068991bb1bd62c31d484c1881546116150561853c050d4bd5c5fe0bc5c60e0b8d7dcbd73b9bf3c8ce7f5ffea872ec75fe0c0f282092fee7477e7398cbcd9f398073ee8b95217e6ea36bfb60b04b8b883062ed6209a03110d88dab0101dd0dd6f9ab545a2ee86b9db6c2b58274cbc748b272d08a0c5172c2d86d062b2b458a385952c0665815959c00e29ea7039c7db679b2b8d7560c2885eb3328f2975dd5bcd2c8a1356c9db673afbaf7935fbe0a3494aeabcd90c7c2f067e9edfdff1c1a424d621cb3ac484c500babb836a82e3b952f79ab9fef717aa094e6d62aa2ba23811805b00a418c2c2d01d96a1292bee6059b144774735cb8ad10a28ddfdd4ac2aace86e069a5585066b9a5505025498c1a2020a16151cb0a838600a31b8346b0a4053d8babb5953cca61852e84fa138ac424ba4508225c51d96146158522089a2085614338a2284d43881d052774b6916a12cdd4dd5ac41865883eab006c95850acd1ddcd822200dddda65950d4e9eea09ae0c0ca3a418a95943a3c7e16a72b79f8bff6ff35ca634a9d875fa5cb2d589fa6d4d9ef693e7dfaebd5750e7b759dab499c342ba671390c8cc7b02b4e7d2ce7d5752e7758ae7fa7541ccf9f965d14e99b9c7b8fd92a5867cdfafd305ff2412b2afadf2cfe1ce6bde454e00e7bbd5ce08ba2cc058af48dc7288873e5fb2bd7ed83e3b9c7f074c7d34bd1bbf133f6e978568bddcbf8f6e5be5a30fce65f2f3fcc8e2fcecbce9b79609d7fbdb3c2f47a9eb8ce10d36b6fb339bacd5dcd664c45a8ce03e90cffd73cb02469367b674a92c973181e6de8e5bd659d8ea7c36a54975ce9cdbd8a46aa71c7f4b3752fc52a77988c4a46e5367bb0976beaf6617607ebc45c30fdabfb38cfdd66b15e92e6d479e59df4f33c57eab37ab5d1bf7f65b1db1cf3a6c4f9d935b1d88f6595e74a1e1bcb3c9b5debfed7c31dae65fa5171ccbd654101a4bbc7344b90a1ee3ea059825410e4812032dd1d866a82e31f5629759e2b7595de4099d709e531cf73a50eaa094e256f37fbdd29929fcdb93364c07c2197706e4239ec45064c4f82fe83206bf35fb06a66f1c11fc01f8c747707c33377e60f9f3fb53f6cfc34eab288b71c765d2cd7890002dd94e347909f0dfcc0e93ee3593a6fe6ab594e9cdb6a9e58e607a9cf0f7de4f441a0cf943eddbdea253fcca2ff1b9777206d8b972fa238c1363e1ce10309dd79d9daeb39a63db4d1c39e1ecef0b08887413ce8e181031ec6ec20c60e1cecf04507464ddeecf230bf5c0e3e6d7e0ec33374519c33d15aa5aeebbefc0ec3307cbfacb3a491b684595dd8cbe538cf30cf5ea44dd7e1ea804607a41c84c8c14e77d77a1ebd600df37c7036f370c803071d700871b07243221263fa9160bd24cd83fd6d562f499bc1aea83867e3bf9577c991f44b32dda0c30d16747757151535f51fad8dd567d74cfddf1ab64db16643a3eee444102702af321b5ab0410df8566498c12773475d246b6824ab01871a7235b068b0b9c9bbaf16c41ec633a4014f9551c5624b1fcd3353399e1e8b5595b1b5fa340303332891a151f795214a063231dc11431431f8e9eebcf09b39cf1890f049d4dd7ca8f8c46038030640dd79605537af6090c190e40546dda0c73ca51788b860c8053a2e8071c15bc0a205402dc0d0421a16e660a108167c60e10d0b472bf0b0429beebe0fa6007fb9f29c75310f0c58bdd70c0c08ebbeb8e0c8a03c8f799fa7438175da2ab5ddbf610f8c1933fec5f3dad3d34ac2705ff38798cebf9a5f02607d9863b7b8ec6fbb0f65ab146cade0a4bbbf77b38463313c5518bbe7926eeda1620f9d3d5bf470a1e78ee7b9283e38619ef761aed3615ffd2efd5c14a755542b053152089482980213149c40e1041414404148e74d305f925ccafb32c353894662fb37d789236d49dab2f6d4ddca6a41f2f1e8e09f90c30939f0f31c9107e721f3dfa489a2bda20d71b70ff3cde669420b264c13909410a8045a4209424848a36b6af2f0648ac56cb4e6cdb1a439c634ac727997adbdb65297cfc08f59cfb6d2ca3af348decca55a8c493b03e91cc19ff76d9582f6566d2df760eec15988a74802948c4750d48d47a86104a9c6d49568fe794720c0507b9e87f95a9c082d7487a9b37111ae44709ff7614fc76b4360d4ddd9fcefe4826f2b0440dddd59854042bb09610110b600e10e0852ddbdd5ccb092cd9cf4eaefcb890016270207c1bb3bfa01a3ee0e3f00f401091f80f6f6019a0fbae737efcf2af3c04f77b4d7b52e9907753a0f0cc093a81b8f9f8bc7c3740a8f77cb3a68d4dde10efc808fdb74404247d541d88154071c24eaee38e8a0bb89ab960338b3698346dddd9534b2b581a1cec1fab4010eddbd4107dddd06216d032f1de84f1b28e9eece968d06586860a7c33efe5bd92ab59a69bcd36081ceab14caeb7056746b9bee28eaee7038d73b846efe374b758787dc1da80cf2c80087eeaecb74cce5abf56a29fdf0057bd15ecf60f46b6b192cd05db66c3250025e0cd0e8de86af65b3b44464e97e15c9ab4adf364751a4b4a56aa9537dc24bb9fe775f0a4c98a5255cfb3b2e8109439619a3ec3cb9c08d0ba6e84e147dde8f814dad0bc0589088b4f4e5b2f96998cadc82d2826abf82312a00a2823815f8e8ae51ff3cc3896b97d649a18e53ab8e8f692b6c522084ce157492a093e95029ab28cb724b592447472e88dc0e39373923dd9d8395c439ccd23beb7fd84591662a2a575407fbb1cc72a8bc387ebb3cc539eb7cd1bdab99debffa3c43dcad5dd2facd5ecf2b2bcee9aad1d51057f36a0829e80ed99407d05db5f8a7babfb9e7399e4f9d0762f2730213df8ba987e9eedb40d8b5de81e91c67c5f7ba2fb1bfd3332641cfc17f5a973bc99bb12866127204990b66d4dd953477a535b0d71a5794c7ca4c73b4ca95baefa73004d8c7fd73bdeeee60385b1d065e5c295e287306cd31624eaefb6bdf66f79887eb1cf14cc9b3dca8c3402fc511d198c1e8c57e610dd9dccb8be392e3c5a96d3ab05a1a694bd2965ea98b139cb41b490f94553aaaa1ea4d9cf772d9ec5e532ce6e439e652b1d425b72f6e22dcd4b46e0adc98c42c1b57ea1e93f5f17ce359ba52c4f3bead620b621af189d51356207477b85a3a6d764cda129762b550344c431bbed501138c31c19eeeaef362b12af0b1e7753a9ee104496811b4d6148aa2a1ad16ed111e118ea194ad51771993a0e399dfe6c5e5b39f79cd3d127c9fddbffa3a7b79ffe51c1de6b2b82afcf4e6facee4e4f3efeb8b2b0ab4509de7795e97a963d1de3cc39a75efc991acb2fd609bd992d406d5ee74577e30c713d3cb05e3fc95b48cc90940d90bfa20bebe835680178061401f1f109fd507a321eaeefea9ba36977e68b3c39e3cffafffaa5139b1589cbfd18c95eccbfbc72ec79eeb937f656f5e8ae0cf3cd29698e6aeba62b1f28bc5aa2606eb83d5d26ae0df29c6f460d299047856783b786dbc9efde9ee6ecd7c98d96671663e24a842829c042e3936c481a2f5c7fd9d35ea22591bc50f41bf79b6b5745c29582d53a538cf4d28cfb39dd2d73abfc739bed6b1e7e6edb1153fc7d9d0f1e32a51a46193e7324f8add28d07e6f439c159362f96f18acf6f3d0c37f2d9e23fde86833f67cca11232748047e229020022852de93d77925cd9b6eabfcaba4287a1f66db1cbd15c78d382ac451d3ddb536c44db7198232ba1b82b1fb01141e30a3084e0a70646fe67883c39b0fde8c7943440937d70d993603e872de77391e9d1f1d6da651b7e2677c6d0df6d5ba9c0e7cdbedc32cc78b8367f8d4d11a75181d4af5b629e55d6637b27aee2593b666c7b74d4fcebc3f4b60562af9bc71bc79dfcb3abd79df73a5ce9b5dabd4bd6d8ef8ce724ab501d4e684d7175754d726a98a8eaa43552c54a15025ab62d24a5df9566f5ca9c3e0fc0bfe6c72a5aecc34579fbcc3a3d2eb8b2bca95ba9775bd947eca4505041509546bbabb93931f4faacec36f72132a167b3c99ae57b3d7e66fd6c4f9a0383faad694a0a93b5308386046cb813e0e88dd8edf32b952f77279d513d4d39a580ce76fe6e9df8b8dcb5e2e4addbc9fc5af9de93c7f2707c038d053afb24e290ca46051875a51214439451db151c4e60f9bb1bbcb8f9f5edcfd2beb257db5c44999a4257dd573ed452b7aad27003ea69e1413edf599f14f41cd00e5066acb1a436b726bc034f005070dcc068c38c1001d06a2ba0361581ced8f6ef5512bb7b9eba2ba5a6d9ef1cefb52a4f3866d768fd6ae75d186f86f9867a248c3cff3a46af37ffe98cccddcb43407aba5cdaeadf4e67952e7b8cdd238a1fe6f1513cd95cefbbf14e6f19dca59f94ddb8b4bb84d6e4295b1aa64d8d4c65669a5337024f112fedecdd26b5cfade8d1a43e0abf1d3b91aafbbcb5c607f45c56f408dab9d4bb7d2c4d1dd964d9a14d22c90c6480b8d20342074e38c3b0f976f458506c81922ce987066c9090d27139c684e5e3af073b4e6bd5c18a4b3f2ad6231ecc9bca31ee299f16bd6f937977fe8f4e44f73ec2adfaaac4d8a9c9e9afc74f772f9487a5307dddde1644d6abac5f93509e9eeee02fedf1a6542d44c7c9aa9ecee2ee3720f565922990b32350bb8b1c014fd1567ab6c24fdff2ea0a6806e2d406501240578682940830255dd952a555be79210ad250b96e07477a59ec7ba4a9a71c14c36d36466489920aec5b08f7935cf955e4a7f5db36cedd42569375ac50fffbb164d1906ca98291325812612285b0934108ba33beff5c515e5b9529969ceb364e944b286f17fe07b8e33bd9de9ee8b939c53a33e5a255b7d3aa63157ea94fede52fc5aed1d535ba7c78a88e5babb17f857548c95e9c653acd662b738e6038140ddcb052250867969c96164846891b943e6cb015f1cd0c1015fc688c1c1982e2d03127557d244717edd87b9c320eeabcd5e2deeabd7af4fb3d9a6587116c49fa7172f5ebe582551fc1b89bf36f1d37e82ff795e2a93315d033eb8c4864d9e33f02b15eb537d514d2c86067c02e95f729c5dfb2d318ac44c21468f18afbb309734991857772d31421a04a70c50776d552b4c88b98459208c686d8689221844d95607b3870a8c9aeeeef0db5ea45701a668a8642fafb7510a159a11000000808004e31000705840208e076462c15ce3e60014800160c4a00d9d30cf922cc59031861018000000000000000000b537d0cefbb173e51a6d5b26c18ac665ac40066f00036cba5e447088409cfd823ddec7e2717350d3078f9c91bcc4235946c57e10b46ea815b7c2fa123c1be697a728945440be1f424df4781ed934fe67afb9f2e25ffd568c05be6e819f753097c0c44bf15395c0671d040a9668bba919d393a3c94ac52a5257492d9efcb2d808b5ba6a81b2d4eb5f95a9cfbbbe7371a78bd4a1d88033dfbc64b7f6dd922bf5ec410f399241de2b424e1c6231a508bd0ac26fd46191ca51b7db67f4ed35d5f116aab11c96e763a7775af0d193a63d931860fbe05130e4df54ad4686163f351c390babb8898bd9664eabec090947d9c816287b1b92eeaa7cca0335493709cf8008bd45456d9f6a4e19de507fc9d930fd3c2da41149539ba1096a5939026821bbc0d69109adc699ff1b08ad1933602998ec6858fb8b89d9a8c197db93c455cf82554f2e01ff4def30c75dbdbbb5a7a197f6449b99b131b2b1282810a9abdc7aba1866506950d0d45e95ac24a3159b8a3787fd9c549986483e4d4e484c4cb61824200d8f3825c55f7984fa82d5e3b549215717c8400935dd85137bcfdf09e72a47f7c289415a99714e8bc2f63e4213745f76f9e82971029442b5554f0f8a71032ac50d87fcd80e2b6919718c8f38c66965ec9c35dbef4a21842c28353425968709564c84a2372ac5d8459865c8d87ee737dc016814d35b4f8a5a599b46968fdd12bb9391d59d90894822dc2f98ead0f984e1a726dda4f8fbe0355d619d3c631c780ba28a9728594f20a50ad208d9a673ce3b6b7913036d4cc908e1b0f13b94394a830085c191e25b0eaa69e00c776a02346fdeead280a5753fd477530d8c7a18d65e9e460056370b1331de29d68ca420dfcd5dcad34500c2020c30ac09169dc9694cbf461bcfe97c854ef1c4761132e16c2ceb0dec7ff059c198fa961634905a463e89394117c8092d32f8c10729bc8e17d2880e639b5fc5abe0fdf3d19dfdb2f218819c32994b70942e0b9a3b780b84b8e38002026153e69d57076f7e3b2878a9fd07a6d87bd178204196f02b348b75e066f9760e303b1575d878eec456c06da30d3e0f0f2da1798f45e22a340aac4d169881d6dd0ef402f8046ff242b93131c5b2c590292c4e447498602f77d84ee130bb2319d920ff39d61d709806d1454cf68e23dc1071b88c5f38abb466cc66f2427331c0caee9c8c7c6dbd3c07299727086fd2c68b03630545dca6197c83d4df8c56af5dba698c5787381a35fa4690d5e7258309aeeae3d940f84b6f6bb8ad321bb0b32e62ab8ebdb287db17792768f9d4a87e7be82d3f59ddb46ae3678b4b7009e6cbf8be4ce8586d311122870cee43690b746d0fcd245ece36133b83f6e9b9df0073d4f223f0b71002591e8ca0c0ae1de7f8e360b8e6b6145b15c09b1eb20b46de0faad409c1bf2368c7413f14a2434aea30fa5d540257ef923e2d23cd69dd0b1e6f7501fb0f667b1a9c5a20ea72c8bada91952ed8f5aa0fc1b3a7f990b6b70724dc062ecd755bcb82a495bf66af843d18adbfc1d0077bd4319b08d2cb51c8238d05a908136715b79cf2956cf84f2851920fd045ef7e70b9be7e4df7b5b2ee68c9e2afcc67e2e3016ef82265acb78c6c684ad7469fba71182ef87c4c49fe6e942147589ee10f3346df88fd1fae805e48c6876be7719f6c828c68e02a635e2e846daea46fb466204689dc970ca1798e4565ba4e41700e5f522203577b33a2e31cc1d5399578c1ad8ff459224398bf4dd4665d2b397cfd91e1d33ea7694ad04492d53f1fb69103a3749e946c554e46e75142a021ba67edd033d6737cd3e99d2acedf7064afd3d2e059890d948d72f6f3c30910fbb6d0c702b813ba7afa4671ad3eaaab2f0378090a382fea798422f4b3cea82d773e00bbc564963d62933cbffd3e9637b5057c46824f9a61bbae0e3064ad3e96678309724c68411587b0600cf22c8702ccc838a7cc3bb5b5706c38573e0e40aa581cd5faf2ae113a2468427c99c3c6201168cc4b174e50e123a1d044c226ae246f5ed4bc7b3b8cdba7c432db7247d01db762ed0cc6c97444040903603810d5471cf2ec192ac70c1cf050db4bd54bc1c4e31f92480c1d53d4dc0e1a9f5202f5bf88a3af8785b34d5d61331384ed2618ad89c7196bc521b0ac5fda9cffecdb363c6dc87cec462f919e818991fcb1795904016488bcff7f8098c56487695942a4ff4e69ed3c3761220d8f92269600c65d75c191c0c014823a123343363462fbdb4a058ecd3b49b7352c76c07dd6fc0d0dccec3fe8f9a11a64d07b361f2a86783df6d54a0c653286b5a2160bb607a2c990de8a8210dd392385998dab0fb11196e183d1ff42bb9fdefc39b7dc2553482a00f47c86a40124d1e5abdade94074fd0c3c0fa03cbf6bef632cf87aa267441ef606510ec16cdfd45c12385135866dd70a870b0068832c999f7a64d869291be392999959c9612137c3acb4cae2cf7b59d2dc700b75b02919cbe33218dc03c253afef73130cd93a1ebbd90caa63c5e146240711de9ef41e4751e87dd918bff8d62029e5bc39ac23d9ee50ba98fd07b92e43719ecf1b8f77d51f19b7a36f43d1a71c88525e25000edba34e643d0a6ff84bde41917a45dbd893fb7237988b4a27661769accc119935435755a4b4ecc4add39f29753db0b827517bf27b646fe627eb5014af6470981f6a5358fcb40d8faf9826e9280d90cd74a54236494c38109517cdd904e1aab9bba846a6fe516bb409c81c275956d300631787e2ae3de12c4150f2a08a61e1fedb6fd44c38450fe674e3e7dab55a7a6415346174449a00e48d1cdf84a8f3bd57d37025fa2b6c9b6f955fff4b36f69c0b4512f173160c95ae7c74568638524557485dc2458b841a3e4b64c40fdd9032d3944b26ea7d7f6d5802ce95ec4c10efb019b923cefaa98f304a4d7517e1105a6a78590c3f0a52a8bae3b89e35d4429182f9994ca274cdd4decbef8c78ef7ff1a3bcb8d699d6cdac625fb85fb1c1ba8cd653fc2a7453c9fee0afe0a2548912d78251e189b9eee785383a172411d8e794b573e827bbf44d6b4308d2105134d85e1048f672eea810447d8819a492e2a62155da6a101a091be5133ea649b96d7e49ec55599d9ef80f85e6107aaf96594df824bcbeab33c0efccdf9b74a3b9b50643694ad268969e517cc5ec0320c9a677fcf2a238260133cd5bd8df221b83887a8f847e3e86c177b9bf48bd367fc24385bcb92b1ab1b117a176fb8785c77f1babea52a1163891d39746e57deb777643ed919d358326a9b8d6198a0081c6c0446f1a843d90c0270307bbdc55427e1f7531025966288c1bae93b5e6ce954ce1d4f7ecca7028f8213a19884388608c9038912c2651094b911c2f1916bbd12385cb8546404f589aa2cf964227ac2722221d1e0683e8386bb66b1d789d33b06feb8cee92a64625748ee679a79504f17ae857093b4a47b2586196ebae2c59fdf5556d397dec1b0c75b99e649464e2307e26cc0f2826f37390650e4aaac920db1c65f39df8c7bf9219d5080c3b98a385c02b62d8f283aa66b402f67468242fafa0f71400c2f668e67be403a5600470a26c183db5f24d33a82f4f2903e31ed599f763662cab9bcf3893557d18727429c8c58a2e35db2a8393da0499f5d3bffe2b4dcf1ec00c3f056c73f189f2c5fff4f59b90c96dc6bbb739347901d1eca583eea0e1efb72f4260b1edf342263682336031931ca97fcbc019d2c27ca4b1f5c01625db1648495c8840e8c6c0ea03d498b484dc90bf764dcfb6c60e09bf6e3d02452751a230e6f683c9ed1f30c119b1715260c5b870093d09d44830235b38c1f27bd7906f69846b518abf2604bf6d9841a34044f8edec389299fb07bb6a8fd78ec5860fd911bda90d72d3ec15bad63a89f3ef35f400dae0017655c968b708b95af654c5d1ded665e3fd814a14640e3921c0d72ea4dadccf0011ec340dba778d007d5246187aaced33bf8c05508ea77b8ee1cd03d60627af4b1b056c65821678247f2a7e3afc861d40fe166856bf168ccc2a0349f1d73eda60286f8d3bd5b8878fc7846db2da3fc8dbefb6d427f6334a5a19d04f6e965b228fefa45109bba1caa5bee91ccc1c5628758fe798fbc70507c03725ccf8c86df409bddbb875b0e083ceee802b6617e25f45610d6712a05ec1e51353694bfd7e5ba14c610fe3f214f2e257ca26fc15d90adff934e42d8313ae20ca43f89da019616327bde26f3deb65199f6aa746f758b7508fa2d51ab8d990c7f93ff45d267bba34cc9199b98ad26ce9dc63abce56b67d7c8d9c7dad28768390a89fd00b8b5855eb9eccdf1599e7d7bd2a9bfbbe1d592e379c9e6ad9916414b8a17a828809ec9d1645b59c80f58f71cb6edf0c2e5483b3346af5fb6850a00d4fee40f52178f52d3c632ba4709ea0b7d54657dd2b45a2d279ecd36623289dec50c785bf0774918fe3390da149df00e0ba2cf929920c60ec0cd99d8b30d0c1cc4ad428d998763c0baa5963cb7dfc0a46d240947f1fe6151fbe6f904aa1a1a62719f9d8cc5e993036d440f85a222a73cea0f5419e40ce1a096aad6027e4b7877b6cf155bfdf24322b01330db201cc6e83ba0a9d82292642043a09b59f533319734c4563a8a934dacc920a3c00b3a7819231e47c1c702588bca3585b7b177fa5a7a611647021a12e7c7f0e7022cb0cf0a47e6dd07d158e52c9795ff197a8b4cea6baf3fe518cb4645a6334bc07eb7ea770e0534044f110b692df8963f2c9fff57abe80294fcb5827940e71979ac73061d9393072b95a3f85894f480ff7e1fc4f6280875b958d84d66ea2a05404194001a34d63fb79ebaef2006eecdebacc9654c0658e27b227ecd00e653e847d668b5df7b7317388bde67d85ee500d8748d91aa442b8ded3e5bf4fac22d1261d7e5e2325049d1463e065eefde1fc9d590c25957e01d634a7262011aeb2674f797eb30f4ae8afb2b2c7dd6b89799dc8d06bea0f49e447f5d540b64796e0d73709f0056f9cf0dae3ab1e937cc67f3496e5ef6d714c7ebe8fd10941a608ceeae0fa226a555a0b76de06110efcdbe44f6c039003608d675513b390e56bd533547622c2c9b796f28523f7c1632db01c39a9ea6d404b2a660214db519fa5e0771ae72dd1e136aabab406e707ecda810d4bd6fa82b63b8607ba340cb3cab793b659251e7f637f5b4265c99e659623b7a7f7934f67e6a37d68141d6a61e04ca5409ed38bfac8bcd6ce1d456ea96be346ff0f435ac9df571644771c8bf111e24f261ae5a6979fff24e71f3a63804f395e76e9cb449bf0fbed780e114713f99d60257fecfa4dd6ef2ad061fc7d951746dce91827a51c012ab63e943e8cb6772167882e06902c438edb81cb6ed144ae3658335a655a93d45b7245b52e2a0d5dc633156a871e4c43905487c3fdff9e4da9ff6fc44c146d255aa8b80961784cfc79e839b7ce146b52aafa1049a8fd0054c85ab59cba8dad0c06e827014b0c26441c195fc07feea59d31b8d40aaa66e8b22771331dd158f526aadcc0f1417eb2839b0569942add4acecb55e47d8b83d388849d3cbaef3e1b8eb8272321b3882523d6e8fb207be6958e84770e4f54b46885f16c106d0fe4072b82f9ac4d1c0b28ccba11c54722769e306128b31047354d6485efd35bf7f25693c6faafb4cd09ffc333edd6178581b05fb3624744dee59948caa77ab4f619b1142cf84027d87094d7dc5668ca803cb9d0795ce36ed89364ca0a000d5b90f98ecac056a1aa4cd158d14f7146001359ae69a64131cf4cc6d131e5c7f546c039a377a548bdc9df1bafb999e486aad8ba69a35eb01c4f2bed7c357b02a824c4a867b810fc533e1c28ec2f8d4019b3bed44ed51bd35f57c1e344c5e96b82da0fc26b1366802c17ec7f242b9e1d0ff35a1f790b5e85012defd05eed905ff297b0d5bf38dac3f1c38545f449913f0c313bf4377ff69e181f454ab06032c3952d2621b20745578a17e1cd7bc4c51b6da37d34932b3afcd0d4dc178a89913a11b89a078fe5a6644dc50e921671e9f33f9de9c6b3cdea66a582207e718ca05446c319599c1e8e3cf2f816b17b7ecc0eca4718599e42a57351b1ca482daeceb07109d3c30f81011844551ec16cbe8fecbc7e1f1d84db615f041ac11f1b576959eb6838ea62e259288cd7dae9fd8637ff2e4cb5f79203e060a3e3e1f376d60125067f5286110a018a294bc07d95dd3e8da58c52abfc5a7691058e37b18a1fd00f3b1297ef834a6aa60e20f30393a69d49b900e664c7a61d8fdbe8d8b31001c98b17d2cd51bb23d22e40dd768d795cc4b80e755de82ad6a668e5066711dcb176473116ef533302ad8a604ee1dbd84145a07e0b02c0253c722c3f41505ad58e4b240eea684c63dac20c812984808c693a2befbab929cfa00b2e6ef2d9174330a6d8f586c979081ca01673bb5d9e7cc426ee5e1fc5f54aefc65fc44731ffabf14f1bee97cd438973ef738e20498df67bdad9802e577bf1cf0a2b95081054b33fef7abf12b1100553c86057ca1fa477a236bc03e886475178322f70e602bc0e7ed29e802e80ec0c0e98b0e17b84336590228e7900a42154b1a11621a6fd515b1357b5bb597a6a18112c7702ba4f3dd56bf77c599d582024c0c10971596650376682d31e3f3855997408b44e7587bbc96d0d6a4fe85a04476d694030149a3dd1119ebfb501aef373e955153eced9ec3fef0d8fc232f3c2a9e7ee384690575ab9a473ad2e7b578e586c5a39f104eb941419b9de5e65a69f6cd702479d16a1a7367b859361ec3ae25a58500899a8ad8b8b40183d05fc8f7a7e2aa8bf043c9640bb0e81df614518ed4ca3c08dd35d3c35acb243b953f12de6465c573a1f33956e72e15769c510f09a2f685052e63813240602976bb24ad9bfcf63c235a97725034b14409808101cc0e1f6f34ec5d887d4d5278bd03905ea01a9f9554f34bb1e946909c4d8485c7e45171bcb2e83ea5eaf408d9e3e3df9cfe57f6bf45aa09c77ba67ea0cf639289bdc49173b18829606c0d73d5e5bd0ec961a8b6789347d12aab80640e957ab0f1dd846a3f1bba0adef8694c70f1eebce48b73a48ed68d38a09ba947e77519d7a5ee1b6ab8b32d5c044b89ab51a0b38b324d230c9ec6713198f05b28cacc4ca2c6bbb422a24fa66c48698bb923106de16392c7ab1bf51a1e0f4e817f4f5a1c08d4ed8a3ebfdda3a7df7ebbd967823dc8e7cd29c2396f68c4967bbcc8268d8cf395e2012a95210659845e699a31caa6a489379b0b540176c97e89256b4c7501f15cb79488bc83659085d65d456e96d5c55614545e51fdfffa1257da561d578f1753fc3f1da02f9b941402a3454262cdb62d7b0b3c6b20e839bd48ee3ba879c74d73f9be5dc0d40dd3d7812301f121cfdf85d61d0a3cc9ee4b1763ffc45a044e7f3fe146cdf656f041de5c2d0d7e3010a7c3e1318b69e4da1b0aa3f1fa85e82a1ce4403fed869a57a2189f140c8202281bde2c48ae8b8073daebfa7283056c32602a90dad9f6fb00416ffcfc2be85cb18f18b84b95a847163cb99c8ab8915f12b3f89c7eb323e194bc5a5efcefa01c3bb956e94176c59bfd1d578e96b7291bda1ac324eebc03323282c238ba994d0b84057ab44502581360e47e97ddc1023dd455ae646bba197404f25c217661df6c1a334aad20a979b9f6b912e94f80b0b6a6a94f6e28644f06cf9e955d8d8854b6ee366b216fbe6df976b9a1e32a4a68b9eeb66e4984d2746c85767e8eb5e05fa566237fcecb23da7d1ce61446e18be9294e866818d0573651fa4b792986c6f8daba801e1f90f78770a359b6b283411e91e4b37647eb4c9fe1eba4145bc7c20839dd199e1114905976255d9ee57a44a17ca98513ba6e200c20a7c46120d4c297dba5059f72118f0be9cd941edceb34605f5701fe2b3fbe4a0f609ca8a04d61902a7168ec057e25c442384c284e02c0921801b2dff2b8b08857747f38fda707e4200dbb59544ffa4ba11a3f1987c10a2c0cef061c0e733cce277cd6355e71fbaedaff0bbf2d07b714e7cfec893d06061f1f56a5e85dfaf880684cab8ee9b8888a2b213004b97bdeb38188965c87f497a766892951a61eb754a91f7a290995d3ca7d7d4e2302aa36353cd6b2f68808411a76c5a98402d40985cae75d762271260d6e9c282fcfe88dd52f8d10d234c858f64c117318119c2684804860dfce686e0c564dc060851258b071bb27cbabd3e111863731b64b95e3dea86b7069711a6caf72c0912d15dd5603baae48ada4c93c2fd3f59ef15a896b8b2eaa8a8ea6c694fe02660de7828854e7e63f9fb2495e59dbeac3900b4486bd0855bdc2b67e9e84e2c62df07c0c87491a15acf1493d10877323361bbfb170251ead32da005f272fc29d4ae55bddc2614313115924424bdc80cabf89726150c07ef1ce8091d454dd4d1db923a984e1136cfb893be3827f1900857f4833500d975e0b2728bd6ffb6ba3252e2170ad47b09bba97bcb169f3e2a6931dff81292b78575eb9b8c84ddd4bcff9751632bbf686195dbfe33e540c9a16e363ca0b2c7cb0eceee91abc0fbdab5a19808b75dcc893cf44befce05328b52f447e6a8d1215f7e97e124038f6ead853011292046f90976a79f50f1c87c8fc0db4a9c4c847a5cefcd0929670086c97fcc532ae8af79ccb55086c8f0fdfa34d239ddb7e6c2de15ef1b8430acb0ec73eea90c30fb6959180bb689c5e43fa600d24bc787aa5dfafd93579bce4c5d079cb8df7f889a4daad61e15dfee19b6dae7cf1c7905b8cf5aa481244ef0c63e8af53a8afa0a3e7c714c866183d8bda4b986f1238cd36f19ef40551f1a1e9292ca0a59196228357797e23fa7a8d77dbeaf4736ac2184eb575a46bbc9109eb4443d3cc4e8d7f75212367bf8cf3548acb6436efa1e03efb1108c428cc16684b1fe30a26e4aa7b1da0ec9d945886187966e18bf8e0126aa6652ae4304b54b30ea07b45808d46786f6faf58b436e148fac2d118477a6ed6dc3862d71d7a3096e68ed3b1c22c2e4d71a3fca680e24fe24e45cbfbdbcdef2444a286344e23f964481d6e7b060cbfdf622756d432796ef3879d6238c58968dc96e1e57d3c7f213df937c77f579899abe656cec8fdadf4bbdd8d3ae24191adfefa3ee204ff6bbb3599aa49a29765e73037df05e3c190b9e5c418269570a5ba817d5e4aa0e0b24cfd5cc6b7470c1f39d44332cdba06f3831f211458361f455f82349e6cbfe67e90875919e628835d5c067011cac2dbdc465b545632405a382c2ddeaec50617858a5aa8bb4170f477a66d2d2355598589bfd8777a454c501fe2b22c4bf074257d80b0c5a6182567ed13555fba824be2fa5993743a167d8cd2f293adf41cda4e1601af5a22f316b1af059c52484d184c2014bfda7b7bc4ba27f46ce4345819ca4564ceb132b41481e44568674eaa8130bbda5c663ae096c7117ad998b354b0bd9cd936952e9d61fa90db08e49f7a9397c2051697dbcd5d78086bd086c8411dfbc20b49be2a7ed8253cd2208068cdf0248020cae3e0524222ace74da8808f3003d01544d5ba360c9d40fd899457db8964026fdf79f0fc84f1b3d10bbee516cb701a2726590c87c0448db37fae92e031483995a688e395a0180d843a4a11fb6865980a1b195caa272116e00d037e3db896abf07df32c4c19722e0ba31eecca0a5b373931970ffd03fff3f756c8b0086508295bc18ca95887f5ffe184b4a2c6427a27e187fa6e837a76096cf6418cbe8ac862125372abf3e9e3d87f0fbb1efec2b47f2a0262f6042bbe0efaed6e9b2b0c1f42b21096b5159af030919769bd3325dc0883fae3a18f0f60b3e38d9d87ee3d7d5adf0219a4c320dad0bed79fac6a69bcb222f6104410908cb354611916e1baf5b09e86ff0fa21fff7d0875f51c7beda50798a0cf26be6b1d07b5f650d31c703bb04c81062925658482ef4c4d9dc279f5b1ee94f2abcb84643644fac69c025b74be6739580ce651ea8575038f301f474eb45fc892089b7eba334b1490995617919818c522e8d02b59a6932cf6d83225d0291580115b79c35ef03683c609f56b3a353a66665fa123c7a06024977cdcbcdd917047aea5dd9d273aec9ef58690b3dd445d3788003a7b9bf336cc6457ac891f13d062bf6f38fd3341a085454a143cd78c710e17c0e10f9f759f53d89d847d7ce750ad998ee7f1c301830ef64ef9f901bf43a018197e3c379694805ed9f153c6a34408120daa3ba911431e1d64cdda1478a500a4ed869a5696ad4daa2c29e6495fc2e03f710779338d28c2d5b44aeaec20215762412fd028d8305c8c505125344ff4c7055083a2b45cf069d943c4e2047062dd87212ea9bf1e27128983f0364957577fe13abc1864ebdd7d9e373a5a0e9d44225dcecfbafb8c5f8cc5fb144c6786626eac4953ef909da0b3d644cb426182d897c55b9ccf2e55b8e800f0164e8e3d5be7116cf81897c74a7208b62b98cff56618f7b772afa856c60a711330e1f5443c6a9b6126865fc3fc1ee4ea30290bb8f40dfce9c0735dff99874b4c7e7bb2ff473f42f1add8782e964279422e81380e8f766787e545a1773e6db0ee51a27e55ed46f4cdd34685f705474cb106c3e62178ecef3c37a34635f221d2e25525b7d445b22e9c3ad706f1a6a8b55f52c2f4464a5df411ded949e44b89d3f8144c2ebcd4022cf9a401480664a86c92efff4ce38c2757c9b0edbb7d33a76b1b4665f35bff2edebf4ecbe2f94a75f058bf300bf6868869e3a2959d36b24b02092f04667cbeb35a4b10194a08f4f736fc2b83ad6b2489d849d54311644ce66067392514786d22fad524ea7817b96378659e358890c472c726165da955e3aa26e4d6ffdb72f79efb8ccd435fd8ac8b28dea5086e9c6a9aac2abc12e168f68b32e829e7ea84f83fd295c68393f53987d2d781ca27b52db58c757b4ca562dde619d4207b6866083eedac2ded444299b82b7c3fb2c1f6d0f347251d02584ff6c9cd34bfa976838f9c1d86a00c6a7fc9202669e1fa48afc57452231855091baa61a8e6f3a99d86b3f9443de35f7f5486a23be7b134e972d310ac53537a4dcdc8c38787972d9168e279eccf2f28fc796f9c09cd553461795baabd247d7e86a864e077ee6abf2345c49df25802d2317e5e56ea11fb18ea1e3f23d82e6f7cd144e2ec95774a7739c107d37df679594bee49fd7c52f89d3a5f02d2f232980aca6a198ffcb153cdc34d19243ea206baf1e3760138437f369c7b5a0be530b02d84dcb1400e49bc6323d01db94faabf476bab1b14c718e5e3ce8a30a63d881c24cb3d6953da94c8213cf215233fbbb180e9d7173b73e1b5eefdd395a55efc1e8235c696f7674e350d93e9d004fa24bbbe944c06ad8ea37da3ac24fdf6b934b298b5e3bcc4ca634a4125d73d926fcfbfc55a44a931e299327005ff21c142137b111d799e9f452945932143cd4f9e085b11b5ec81425a3129a8bd07b6c4403b177ca3871a4166c7e9038f29ef2f4e27210d2ccebcd4555e34140175dcd09fc86c6285a7003525ec7ea0fb4373e715cca60d6ee8d475784730a5f9aa6e4d823bc8e8a651cb6c0befddb890c27ab650b704b70dd92cb5360986a4ded1ea9924c5a59ef6cef9faa4fc5e5634b4aab6bd13d70568a5fa05e9f13e13af40a9b7e1f078cced0abccf759372ceb679cab9d6a7cbc2a2673c6a5f68bf00fcf2684d4c2947422c1176ce251fb235a2af146d4d1847a507ff1b9b9a193956e77932ed9f8c78414659456698acb3aadf04bcb652fa656015c73531ffdaeecb75023e362668b771a0ca369a2ef32fd83218922009a72fb2fca19a27d383fb032e60be6903d5a9e011424f277e5f40adc9d52e165c584bd6099557678f39ff310d73f5645cc09f6004e95b741caa2ed33f23f5e526d4c58953aeb40f57f024f6bd58bd18a06ba1e40b7967d5f966c8b8907317e14cde31dfddb25a6c136d1e8634a67cd89abcb227b57008a47616eea17310b4bea7b79f2f0bfe72c6281bbb8309783424abd46254a7a67dd30ec9d756ba1df0464c2b842166504cd1732ea58d2b42ac4220f6af59bfddaa82a10bb42737f1c4322f8b0af7b99c5f4e4096d0d1f77eb5f6e3bc25d4b71d8e203a21ca0dbecf2564966b5787ca7253c73bb417558e3f07a77bab080e1e9aa307e3093fb32f4a0d0714ba30eea442b0c0eeda23906d047e0b5be1c8fd9c16f70a8e2af60fe3e03ea82bbf68808e88c52189263bad7af90c2e2dd9af4a6585a42d2186ec39238ac1a6bcfabb91f7c48997d8344cea4106b5dc716b8544fabc6047d1c64ff290c979746525739d08b36641d70dcb660b4b1866855a9babdaefc60845dd21a55f1d07907b2c352fce4a8a53e1f4c6a6d3fbafdae4b6d016ddb8af3e8472734b1ae1d0ca0e9a0ffa62c76e6daec0a642e77e96bf6c79c3b6d14978cfdd8c4d2fed5b9bb8d8a057b683283929b212ba939098d08050eac80891d4182ec5a498885e2ac062c85ea1cc7aaa342fe4b1eaa88595720373b5fc0471d955451721836dd1016e2b3fd48da9bbea9cd50c418b4b36a0128baaabdd99be05f73de4cdc9c304609db184f2c47ca514f8e612d98528ce81e03fe77e5ecf7303031caccab09c8c9104e31f79622c78ae8ea62c36aac6b5deb5f49c5e6f5db6dd90563cbeec0fc9fd2a0c33b7ae07c9ba2bb8b93d4b0c8c74c9af574a7eb6ac533dc5edfd4f438921e00cdfeba71702b1a4ccad4905c342f929d2354bd3a727fe9c8dced70c1e33d3eb8df4d79cced606463b5a2d785b365998a769a429d3ac48753d2d90d6c3df2cd2119803dbe0cfa803f24fcc070c3f65e46d4efdcb414576c61415fe05e4ac50eac33e28ad0a101fdb846aac54e60637892a75fda5a16841421b055cf399eeb954b6c0bfe122c77407609b1362b30382c8594cd572a04568ef7470f5717136003e3584e87fd56cc0182fb40ba4199f85343fe1e1386ca687c799bf32623ffbcab35c0a67767ee4275352ff58346ae81f873cc6bb1b745128e915180f0b183e1cbc4a6728633de5a562901aa9ac92d88a7e70aa1bcd0f14ae4f71c1cd2baf7fee63550af265ed5804cc0a8a2c39331ba81323ebf43dd623832b9aeef50dbd3b28ee14b02e2adf462704761dc8eb79fecdbd954620bcfc9b3b8774307716096cd33846ea8efa7ae1cf71560af271317d2809d6f8c72efeb3b7566c1535500dabddc1de6f36a31d1737545ce7ada446ca6f9739a065ae2ec944c123f2f062d5946457f2f1958ab18174c9c352bfcbe827014f8ab3f2de2f4fe4022f981f161c1453d7d9f9eed3b488c8fd50fc88787151c0523632cc9d833442c64b66a84bf57e3260ad2d711749a1b0488bcdd20919d9d371aeae785d3894c5e1e9586924ca484e567be333238044a1b8aa0459028cc7a8bdca3aa2062538b3f2e2e7bed0f51cadb6d7e2f9cd3ce1e8cb6d11f929625a095edbf21b82b0d9fb0af4b22d3f4286c9f2e1406b7c1aebb0e794b3ec40beb240a29fb889538728ae6910f696d214ac052f46fc4b54803aa94217e97051002723f73a71914a860cb9804240efaca27d8b7f52c9ba81ae1bef011dde16d5a806cb26bb0170437acd51a80778da4224ddb4e1f7019f0880c7ae8d3f1cb86507123391d05ea6460deffc984870672f9f8e93664040f5065899b008be52c473901fa896aaa4890ec1c428d553d73404f0578aa5b0c8c7345cd47abeca4d8827bd38535383d211c57dfba60354a4c78def15f0fa6a36efe3fe97040fdc0bec416f83dc501da74fb2b06c6371d66c0fcc07e00b93217c09ed6fd9a50aeedb78663e2c4170c52e7c8cff961551469c50139155a9301cfed75cff7e7cf081e4a4515b5142ae1ada62b0359b3eefb69c2b2c1511bec09e9c96fe7507a287e2c408518a506f5dc10b48133a18a078c0c21edac4262086519f736d9cddc39b3d6d03bedf4fb7355d0156b4527172ae3f08f401eb9485eb88fbe1ce6c86c9f752c08d32246162482f035498a8b0746a1c9c33abac705a3df2847682745282cc55286da52c2db36d7970a4c534311a8357e41c3f93f26238a427dafcea9398f65bb23e268b06b92a5ab369da1e35cb966bcadd44aa67d9dade79265ed7aa9833667b2d303d416686d198c999658dd023142208067466ccc54425cf5e76d4d70aa9a1aa49c42ecf5dd20288d2d3143be35c89ba36019c271f936aef9c36d64604aca2c3c8df54af31f59f937bf1f467eafe1eaabcd9be2003f62ced41a97b1d21c4f981dc5c7a167239fae7f2effc1fa7cae5c2c0ded2049bb95c86cf9e1c82d104ca9543771f1740ed98f5eef26e3ac9dc764d1178d557cde496ab6af5145af308d8cefb9f1f08e2afca9ed69ee04eff865d03b2ecc1198f4d6f3ca7cc5cbf5765b16e0cda0dcb9162c048c5508fe5cdecd28f5f6bdeceb8950174bd518be4ee9ef1a427defd5fdc4874014bb268295ae5be30e19ed4520ace87074aa647d6d011dcb4f9edee29da7947de46c7260eff55dff2673e72c9c4e1a84578d42e275a2fe21b220080a1b9c3ba91a56d53b78e6c8d92d7376f86aca1ad04df9b621b4c1a7e8f6ade0cefb78856178534fb813e095cdb21291cf8c91a9602e8c28ca783b0f32ea9bb269095d73526c32a461e10421b0bf52fa6a5d3af26915f1f3c6f059e082829009e3a4619a1cddbb2299635232412873101f5c4c2151d0278efd089ddc7b271c49cc28f0166dc6b66083dc1171e0c267bac672b5482580354c4a9d04b0407a783780e3e0a707770d883317a67c876f4283e2befda16165acab54e76192d6fee9002438945499042815f81b6f103b83aa9e851a09be27b365b7583967d219d7ee351461b491b248ab19f28ddbb8dc12b783dc57a3feda43380a160dabd07e747d4c030b7a1c5039118c1e7074040c085f7734c730e3974fcd526177d04cb53ae7d4237d8c9a514fa1d9cac5021a5d20a50224d0617c3eff08269cb6c7a648bea7d0f569faeeb5bf85ae27d9ca5ef34f911d07ca42c77cdb0a35ae6f79ac1905494911381aa9727d056643fa55c99ee82c189a371bafb7bba6558fbfcb46464d3b2a632fb27cb166f41e0d9b69a56638e949dd42b8a4a7653f6e012e29260f050b65a14abea4549123b9b35370b9cea23bfaa8ce0f98e721600ec8d2f5cfc033b72ee3db1630b3383e76afa0cff0fc5742eebe431734eaa4893d80c8b71abb410511bf3d8e7e6132085c2761ec1ab09c481e972e9ad3ba5d1c498cce50f2cc0af5d0e3f4d080e5a52c28d86dde660765f66346d0b02c59cb19adfc859428782cd51b45d9170ee6f1ed8ad884a4efc3d990480621ce799eb9eed3d78e4e18b25e2f3986ce632f0c261fff67cc94846a424057ddb9ce31ff72ff2432e5a6f90661847c97d9354754e116d8f2aab1853f03b6b1aee849350e62728412120836a5fe74374744773650f27534f8b5d7aff9a31f738b3c055041020a81783be495fcee5813f4e80e6dc82b44ff4332625f9ab2642ed6f24d6f801408b0bde3c4ea22ee167c81c1864dbf21c43a8b65d86a0ec0c63da943ce7bf1aa6f373dc25f886e733d9ad3a1cbe37b0fbcc3f4b80bc2ec343c7128c4b2d8a5f67e14b39db7690b05bf7754ed5c0d2835ca9eb1c00ced43962778f9a7a70cf4f4c39e64611929c702cebbbf3cbeac4e43ed0ad190c2eee88239fcb5bafca0ff9f36f412c10a326340db4e70808a9b230b2f4cb4189e87e321d540cb37e12f2551822dc10411da98bf14fe5dabaec97e53dc30d820016c4b6123b090e86792efe7ccf369485fffb3034fb57ccf6c56a7f30c8c09d8e3458dd1d6d0150226c4851e1f704ce64ff58d9a6fdc3d2bfba025ec4f0065b4a5bdb1936be86ad5467d551bb53e93a078f8967abd07a583f7429ff5b818107a2ba388d3cb0a307c653a8f022e4fd511496ba0ac333d6b4bb5fd2345fbc3011dc525d743287e14653e6b072cd061600ae6c22407ed18ce0f2bbfcdf3ffe69f11da175906f55ffecef05dc5aff43aa6a721c9a34fc3d9d31b54c17813c23ab444dff06d90a46f198f7a78543155237ad6080b0ed2a4f79a2549bf44d60fe57868aff90447df6bc6b04f09a2d7fbdcb2643c71f848c24b3365047cc3fb835fb337c13f1cdc53f955b6e056f2d4cfecb61184f0f042fb40eae79bad8e9b9ea95b93f48da0608dd9db888d54d694ed2afc8f521033bb26fe4f1eb9be05d2f72e6468cb28e21278675b3c084028f9bb9b9e5b04c277ebd66df3d1a49632aa23827b78962526e1a3dd0077404cf85aed28df5af5cafc450e250e35378fd77636345b3faa61de8859313a448c4b0bd1e1bf391095e24fbf9567cc0e2ed7906dd47c318762f38f9fc5642721582641486f32a035a01d3df1c9c648f26370340b88700164503a5f3114b355457c756df64804a0ad7667ae87e42cb6b883827254e6326648204daf3d3644beb2ad67b29717c54a5bfef864056070fc01da68307a2c9d91b7e1d66caf7f1b5e940532a016b59aeff115be56747818f9acf3efeeff34ded8e397461bb03bbf1feff3d36747fa3177565a818a45c868504ad40ee65251e777bbd450418d7109b2f04e72720e2acf9f3a8f028fc0194e80349c47b01c8e2c2807258ed93a971ac4a3af1a41442ec8ed12a01f2c34efcace5ee4fd5e1a2bcca45b81394c85d4de600242f1401e8747689a3cc81ca262335392159e9e9ea591c752e5582359b517263c9d9393a192d293cca3c3b79c0a61914dde8c50b1ea7a05f715601f70d6a3f7478372d337d21b8def739df4f03a27ae4553808044c69ad440374788fe77d10df3dc4fefbf09ddb03225b5b3174c9aa86e5e6bb27e4d94733931c38f36551f4227b1edd9e090cb3b71eeb54a0249f1c2576afdcfa09def62c435b0a8a171896e651a852839aa18a7e1d7e53c2d81e87f46de3090308736ab0718bbb5e84884045fb3837532c5abeb157bb76d6add28c6a688a949ca425105b77f156cf2cc366f151db67912898afb6e455ecb10adcae369eeeb51204e27feba19162336ae37cfecd9311a18ec0ea453c06b84f5155dfc2113628ea4378d0f0afbf07a87a43ba3a401046dccac5d67d589dc23bad0557bb16048beca77f2dbb6ab4b289b3a24a8305253a8b04d1eafeffc01fd5894a9677f01c8147d6356eee33bc12674e6e0c81ef2c45bf56589e87314e24d78cbbe2234812c97b5ff04dc6f873a0e5299482464778ae6e440a84db65d58cc4dc309db6879345f4b4526266a20c8c6f34eeb0e8eee5d2823838fe9adbcb7b8c66b4d22fb31b146d1e68ed300052be8b46e6fe5abc8d7279971c1f3b971933fc9185d88a3e046f880e4476287e766267170d0942df415177bc80f7c15870ece9c1f4a3cb4079faa9151b80713ed773acfd774b60007e3f70963978c104e0ab617e341cae16dd6afff1dbf139adedff651eeea40cf246db0a4bfbfd14d1c6dd023c36fbbe1ac202a544b9c65c8c203149ffd4d7755cfc6b453ae8fff9d8781f57b0631a9e0900cdf8db9a424f132bb1771c42a6302a263fc04ee4270d38a7511b4a46b7ec8cee9e31fac43ac4acf7afa2eef8686fb7e40ea26ab2ef876ee0d91450a12b09086f309424c87fe75e35c48d504b463b9d60458ee13239ebf3abf4ce1e68af11f44c894f8562730e300316ff10e0eceb99eef84253909b28fe08be299c60a2b10cdeb8f7b1033284b5e4cf4b2d438ce41cc08e5c0bcdc2e5ba2179157c74989de2865bd4235042fe417637e32d0f72a55d576175659db64e8a64ad00b147d9e593e58719603b0240446330397f10ed2c9fcf3b9899c3f7cff3d1aa8d41b5bc97bd1de051f1fbd0a90152d8fba1ec5c95152199bc59b70c9be5f564b874746df204f6ebafdad36970e1a3597ef9fcb82636829204305f6dd8c73ea2b05888404ed6a7dfc9193b63bc1884a339a3bda361c6aca828f4ad18315632a0db9615dbafe28ad1f4c529070b25232e1c1a017eaf0d7ffa7c05dffe45b7972802cce8891c87a9804a8be1e3895afaa54563dfc4de778b69ecd604a9fe8d9c35dc3ee48ccc83af0fa81e180c1b7fdd088d8bd0167e3b2fe8a8d5cd1298e0b0b0fd07e9b787c8363495472248b38a849c0bb57a5d2ecbf5841c9769c533a3b213f6a0915acd677cbe617f7a11281aa0a929c220dec908027d7b4085741c7df9595a045cda2e2dbbb00b5809b02121a04f9741d04d4c2d9fe567838d4e46d1fa900ac1bd0eeddc90a2b7225f16731da2a36fb8741cec31eff6d52fa964873f481b691c58d273a81f439cebc64c22f4bd496084edb8d89acf1214203358a5cd307a22c13cc5a6f30bb326568770da144f037d77dd830e59e36b69b5efd21410889379e66ad225e4b6d1bd5fe4a0b201c348ef3a9f2d5ae21e0791fa19c46f8a987376ee4d33cd2d3f1a48bda633c80c2d13145f0e64f2208c3ad5d169d900b249f52efbcfceb1c68fac56667de61d085227ecd43263c31e09d1e7c65aeefef0ce0837b6c75206d2a95545f917fa68c593eaec2609e04ce3c936512e6ca1e6331f3a1f335cd491655c727941b9d5defcdafb224a80d1d9e011b2914420ff0fda2400a982cbe82cd9cb3110a7d4ca8767b35c7e8866cf0ad827bb616addc2efa8847941302d2aa7accb69ef1a3d1b77db9021ef31b40a732df609811dcaf921f80d1705af6e2d170c4ace7ea0ca7ab3921c483099cdd5504e6003a6061db9a94606f725d2b29b58b35634f876e281613dd30a8b63b9c33012481ccaf4f8635a31446b07dc7d03aea24ae4dbd90c0bda7b6fc27b95d3955ce5d3c4787901603c64f82b25202e5b1784319ce0d9e3779cc968c2d9f1b407e97f6be476f1072831fcc9306bb23d8e3dcf0f88eeaaf603a6b142c693e179eb2f47556a8a3ce81f0af61c5e458d241e29fad1837f2ac0d03bf93199c05da1c93a33f9087da8eeebb81ef9bd4da8c83a399f566d1237e83aa705848176b8ac871e26b0d8b09d853a83320103943664403274d9014c4523e1647b9ad1a253172e5c3be84500e9a4c72586a5d5de50149a1a7ed851ddd641a5ce9257610d219c93c789587e42121526d6bb67e2a90c18d10dc685bcf455c6a523a55e845113b41719a16797ed937d56b22451eb8994ec74b397b792c36d3fe07d71f1658860cb40f507a99786afd35e8bed47aefed4177af574fe4a7ec16880f80a978050266580f08aa1db08c3f74557a0f860ed0a12b6e799cf83f9746f241045e845f8674f04bcfd7371f3981e42283aa1029da200f5265c7f5612a9906748d33f32546096e2886801ba77abc4f5df7eb3bd84f61412e79941210b87f09dc1128a37b11070447e5198f8e5cf8ef19f75a3037df13a12469691411c8c7e5f323b2668f28b2b41eadcbaf88f320a5edd2e6792cb50e449a26f408819cb1ead2529820e40782dc7e07755ea66ae38b161f2d5b01ecb504e9d0c24825d4ba200a81523c09a81c7cec25293eb38960348f9fff294ee16b4a394fc373e65624ca3f0ef933f4b07b1ada78395b0deeb8ee0f91242ab70b9cc018a4bb9621bc6e04367db2f5936d4860d5a6386e99b6295a5aac8ee3bf0a0d2d333c4c770c9264c90e8b0700100167348a22d6ff395275aaf176e7f3a8a1948e124f036b9b71f067ea617f1877a1f3d08405e6d0d3aae34ef8fe8cee451d07f8ee0330cb26afc1a3052f0fb577ee08387bc87e028ef7ac69b421cbd0e093f1bce6e34e17cfb95d74aa0e1983c477aa8890208f21c44e1b7c8c14dc30192ff9739aecc077e3437b2ba89e68b8b69fef2016105806aa5f22b7dfc62d9949f1b3d52153d7efcac8896095fb765c0476d82a96b6d6fbacd672f13fed821b4ecdd8f764cb27270b28e4956286f37ec31bac9186938c8a27774a18a1596b2429731bbe5062af99e825c95d25d8b3f80679464ec45217c314aca3fc0fb81621a8b0072fe803d7086f70a7489e6f5a0a7f316c2621160da303b4ea87b73bdf482c176e7d65f9ea03b53cae19992e48b623952ada1bf0d33f730ad779fe4fa32767f4e523e2d10f80357110194ba90149ec2c9e76747a05b43245133f06dfa00df080cede4590120ecf0f29379dc379739e8d9271afd0c77fb7329cce58cad7ceacd76e4db0210f2510a4680eb5cef795f7e16aa1c972edca24936a16b0fd30d349ff7db80b30ebbfc8329866acd008434c2bb46e24061f01064cb379b4c6c2093d4e23e8a27d181b53a6549434dc39e9b15ee195fa0d58fce25950a2156373a95188bc51131d10d3aac582417834c3503a7a57131a98131fdb670cc1841e3b182bbcc200fa6a5175a3cfda9488f7dbc3c7b72729d3731f92ab30b4e4ef84fddf2c36b6ad607b8cfae28cfa33e80df5c3afd965d24c96f600bd6605494c7ff4457351dd52b44ee4a175f73697a27de9422da289737d39b9399270f6e760ae57117cbdf637ac7d901e2cec20e4abc57c79e8048d3caf1bee50a7519325ad4d08ad8764def73a22c382ccd71ecd2896b06df259a44428379f5c0ea988ea4a17d03eecc85e00ed09ce2910db9c571d62bfaeb5617acdaedce5a7dee477a3e0b022cea4a1f93760700b3627176982a3a9d57d873593532d50456e7c9bab3b48bed5c7a9fcab4cd885e1bc89504d0b6f05fcdb62633412f72de17f661157f83aaec7e86a4d411f74504e8ea0c52e119b25e7b7d6235681f7464c140891d0354504ad2994ea1c67c402a33861b75311b2ca4e12d83bb57761b9355f81d7df6b2d8415f74d992752b07e3250caafc06973f88db25e4899157ca248e6caf96697c581cb1d67773b0588dc274a7be62ad6e1894bb2153acf459ed58584fd2dff76563117f51a895fa1299dc75233128d8673b2f1d7b2702d9119e8b9102e40dacc0629ba548054b0bb34ecc01d00e7af85bd5f699a10474a13eb91ae994c6b70432c29c3adf44d04518e12a2c0f0466d2353e3360f29d15be6b4065aae76856b8a499cb58c17a6f1ab97921e664582d6cddba4a70fd2248064679829b4582b93ec3b0914da536c93f122506fb9b022ace0953633a93e77bfcf1ae4f5afa9258c46b31a24a9f7a34515e170c40becf8bf616767a970db6882683648e080c9dde50074b5937b53609acaec11e5d2c220d806c1bb6147834857b65c0bee17af50132b383c75b044e8322ad18fd96e89193f8b5363b247900f80e3ce19df08ef094c2b4d9bd68b2a9cb43328da657305ce6d22cc7d6969edfd212c778858dcd0cf501d4bbf8593a6a830cf57be818dc6945db70b7f93ddc0fb7a458becc9a0da4aca7fbe1904005f0b4a882e2cd578f43fbd1d5715f80e96a2527b33aa10e78d0941fb8c810319c71bfd1f01fbecc67e3bfa59198c11452c292cffce9a8487dc15aaaaeedba16ec09e0e23b7082dabc4d9fb7ec07b30645859be46dbaf9b87bfdc33add92a5deaed6418147efe83cf5ece0f1c3496dd869911b3c07385ecde43e36b51c62424524c4b73c4d997f333e1bb338a71922002434891bacb3176f5dadd3b1c9e7e9bfe14eba55d02e62df2aae215069b0c66fbd96e6fa2db6ba2d898c080ac2df68ab572501dc476cdca40cff0131eb4f9777a8ab14f913ff4d7228818fa9f523cb304225a9c9d0bf5df6b971f2d4d0ec50f0b4794c77255e81a864dd94b0c419b00f6f560555e30ad2f20975dabb43075e7aa2133f21a37892fb3aa0f0190a28a18eb688067812901d0aa1638d838bb9bc648f23d640c57f58659b0703a8006bc19c20bebff2ea0314e855e5db0d091e8db36861fc541ef4ca1dce5f98477108f29dd7786d634cb8ffc1fa0260530d537a9ebe823d98e5ec404d18d4c0c5129ec6544acecc8907f7eb40c19929bf3b9458b39f25f2d4f934c6df76be78fd4bcbe434904fd5972279a54c3bd0cce1982c79ef76b402befc6afc62dbb73df7f0d29bd6c7faa68ac4db6a4c70fd99af3adc09ca70e269e5d2afe8f4a096d6f8c2a557d055f4178e88598c66793e09e78d2e03f210a82582ada63754ff87184720071c04b85c903341d75233c24fd4fbdb68e011a4b71194a8cd9c4b3658d0dc75e47b73dbf277cfe2b625e02b2bcb4a40ce2d0d6da1474c7dad8a5c55810be91542afca05539484510b46cf3a65b12a6e387b4f0681dcb3b66feb5a99b06bb231ed006be9077c86b1e5adf2b4d6d27904e4539e8f56d6477b41bb6359ef6dc568f74768c636eda9efaa018286be68a567afcf5fcad93f6e75a3f547bafdd68b0538501badee9000c3bff1f1a0971543e7258a74ed4983fb19e061f0ff677e984ec9701f3eea9fdd917cc640d5cdcebc55381174a3fdbe00e806300010cff95d1a1d8b947bb594d87b040146ab3c7bc7c277d75dba44d30ce3c0aedac0119ae4aae6f949304f4458c79fa5d6868975ee1bcb4c6cbebd32c2973e04f65beb70a919e6364c80e87c4a0b24cdb17c4a461df21297e117471f42939611caacad03f47c6b9253cd203eaec83214c76c4be32fd8f5db34c5e776aa6b3c4d6608cdd436100c66412cad9d8b9318131340f2534b6535fbab72b84ec183a37d00228e00fa9d81024cdc0a62b0e26fe5eaa5fc7181ee8065caef0f5074e91dcbeef65ebd32efd76cd2054d6993c548b366351dea939e24f1d2131515f7e2e67f32026003fdf0f7cee7b70f8a9fefab61c4fff9c3486a3b480088b1bbae85e833ca7b0e2325f0e09108c11d78911656517b10e83651275c78a5e380c3467234cb85e9858838768b03d42b843af99d241d1dbdef6fd593d2a1add54b7f47c4ed592d54519e5e80d14a427d577e1f30f528af15faf173d29dbb62de8927177c4173740f933e2d914cbab3d9648744a15b1e24769433545ab80b7b8acd331f71854daec7a82903e9576c04655932a9a32839da274d3269360fad999c23b837c3bd67894396c53c187c53a146a5688deda326a3d50edd66dda9c5b5152f607587d5006618ccb87fea16e405e698aa85706a43f20e122ba86b0fb230e8ddad76cbdc94a3c9f6be00bde110d1939d5f7e74b306ba89f8052fd0381f390bfd454547356f3dd16c74d00f5b72810a9c923c3c51d2884b5d2cc506f333e00242986d625a2f69a26fcdb06c17ec645c680b60e0096f1e76983f088ae6aedfa6564f11b298dcd2a2ac365d8b282c5c39817a0d21cb1de4056b97eb5a2e0b4aec1ace9087ae84578370bfb5250a1283a6d4b8752a662e5c327b2f947ef1225549cc03211a5bf2b7fd7dced6ef7e3542aaa64bb6cebfbd7ae1ec0f7723821f895e54d2c5a10042436652fbb1207ea0fff57d030927c4f25280144965caf4386f89c4ba4a25b8f5c60a125bc3d123217eb222a6c83678e0230d69862b2e0a84595bf545aae6c8366f36bb4563a5891dbeb683b88293a0f3f96ffef738bc6554d8b4589f09a7f1711ca902f190d7961540e5d387ac1f25e97338349fb0a1f939fd1f7383c31b488e0bcc1e035b850465ae7033f0a1a118b826e96c659de9e342a5b10a9a3dd08df767e3aa69fd02785815a73274febd358b54e58a7e91d695c7b784d105e85a6d2ce85233be5642247d011e37051730ac5ef19f7270d98b42927b7dac9d52c919b19cffb8e5e9499e19cc86d64c1f74621b641fe425c92e8b917514c8e92382d305402e3e26651138ba525e0091478c6f7e1b524ffc4a7c72e74b3fd62e0563795b8f36db7807ff1c8caa346e32bce0b5075998a78906c971115fe5f9c5033f20a16b566c06a9ef7dd71fa7cec61f0d2a4ba755a26d99048c79d08ad5c75bc7b58b91fac102608dde1156812603a0a814fea31549d1fdd26de4ca98e992dec0b37a7f2ffddfd7da8a4df5b32c79b892e23e3ba65b03fd421a233bb9e0b467e20122829d69b49ca08ad6ae25e4778bec5a181b3bc2d627d89f08ebca56616d25233195ea588fbcdb3a9b3c2f3534bb9c62a072a53e218ffd967d07c938fcad716011b1216c16e51804ba9b451f9ac3af95d73483102b3b65cb8a2fd970f0fc8a1cbd63937c0f1ca09c7db539496bfdd9fea1d8e7dc746954a52e30a32741edbfa4cd0640c671774443bb8cb0569ae932e58dea1294d3293fd811d0ddee3160d290f326bb0731b993c43435a9a3a45dd95cf7345a29b9681e83ba9aea0d125dcbaef6fe790c65ac86895d5d3d52cfc6daa29cbf774d879a6884753a7a4a96bd9e012d1d1052e0ef9c491a70e84188b3add473b3dd64e6b1581a0dcc8f8a5850bb10bcf5cc44dc7a6a427c9207c6203d97aa27586fe26f4e3a2142664b900dd68c878f14d2ea4377da11d79b55d2920aa9361fe5e029f03e5afe42e9203f677a55c77602a82f79e329442e5413297d72b09e35fbad8ea5667fddcc6d55bee318d71dc69d3da62df85fae0a77526f73ce3432421f46f196ffa25c6da060764fc80b242d64e98063aa7a7c34fa278fc0daaf101c0a8628708d1d138d198ddd507dea5e00e4a3cb0553b4d047d8bfadfc23c8fc79d0018fd20947913a4e53aededddf515cec61900653fc6a3470580f81f8ce7c715d9ceaf404e2de766aeab8693583c97192988a3a2dee79073341a389ee70115789508ec9ec6d8a199f51844d6d533dfa389754da743ced9a93dd31b60fb6b373c2856eef58982da9d71f21fd93fda131f8822cda6f2be85841ca49aa91a2804ece0d846068868de00c4e11a4cbc04f9a1955d08e8e01231c1931a43b9e7a7cc7309e45470850baaa409a68d240cca8541b0c90e0182daa342a214a8eae1cf1b50ed1aaa413043c891c2f7504384f163c19be42f94a18771128262142cc3d8c0eb29faff6f06d507fe831840315bcb162bbf2132b6ea86d6a0a5cb6bfaaa2d32fd5b514d7ccfa1147a4c546c23c364764a300ffe2c34dcdf8b3efa43170fb85246940a04f86e64d9ebd8d90a7eff2c8d72d6b14fe585a511ee7f1e897b6cf3bba6f5be48dbf198cb58829587f965f4cb955699041fd8eb9cf1b6b05228bd30a2717828e4205ec8ce9dd3c23ec75205190eb710f47330a9187ad9f8a6a1688662adb9f124cd1632a8c005e4e7b2d284446ab5e1d9c73b05ea2a8f26a98628530a8ec19e8c16b916cad48b92feaab14991648d1c14b84523c32ad6e2e05c389c05b5fd976199a0c62cd6572439545544688c8d21308ec6b81e213f80f9f0bb012fc3334f16659376d6cb0c13f993a9b07758e429a7033aa0c7dccd6d7e085f88849c3f7af83919d8d91f19909702c4e402db4bd39d82aa6a1600c8ebfb9ecfab48df216ff9de4709f4f01863e25047845ab3adf95db68e57582bca12fed0c14ce5e92bfe7fec46610f03d6d43ff304e923952c96f0b92e03dcb266a6d344c64c1bf2aa4eb4c83a2146acedb9b836fee74e1b36c8a6e5f4e65033b8464a6c6887e4119f54488e8070a8d3fa7801f3f802fb25924fc306564a67e04b213732be09fb7f3474db4a6d7a42215b539d5f83c3215e600d16250af0c7178179e5d25a2b62036be691807413c7cad291f0cecacbaaecd20f5157b5feb836cb5028745ee55255fd13f1a1dfa8e6eb7dc96386e5b68a42ca9383d7ad0f404fed68e920dab41df3998d680a469d2c881e4d6860cfd158f5bf02e9e6d5a685e9df0d5f4ecc1b6f7607b8b1fdc983a8454f1e6e4f8b9a486660b908c90219f5e8d6388309b821872a817e8c78739391274e09a8f4bce1166da58621cb5cca0522529c0362897601b27b0118440ada9802d7d3301afa62996b466634fb54df1cca88240a1cdb76df2e57ea4cd7a72566a0301aac7181927b66dd21dad26f43449d74c49b4f9db2d7f0853655749c3ce5e877dcbd70be7001daa569ea0477daa7b27c6caabf0b25e3e82ca2190ad28575c284f5b45f31bc97487c4d4df3ebd423788e06959c34373d74010766a0b730e788867bb74a830005340feba5d891fb3b5088dcb6416ba6eaa87d7b8a60b61c8b0b86eb94be7cfebdc0f326cefc010215b87ebd4eafe86ce84d8007eb41a9e785c62bd3b58da15db6bd80ee64c8151ab70b9444dc7a8936fb511897a909273fd366aaac8f43c7a1f51a771a1f99582bc586a1b257148939bd341282894832e24727aaf59a307e6d9be8eccb2e940a1f1394f640c95f4fffc22b48c52a80f364299785a6ea2f3baad209a5d178331d930422eb777cdc8b1ad14ae8593e849f55b615792f140c68e54c536fa4d88d64f27277e0942f059ce3bc1ddbcc4e52e8c2448ab7338a31524da09c9fd2a68b98200368b74560253fa1834f2a43df61d0290878510681d2d0dbd6980db2dd51f0e831b8916780fea733a063ffea1d673f9b1d72f189c63fcb362cf5d1ab44cd1b058a75d4ca0644ec39da133b5448b5f67db2e5582ef82c815b3f5245e08cc49a6e35af68d2981508b05b90257e5c9d13f0b0a374d2b1dfb914a30ec9aa859cbfafa69ba22da555d23cace57aaf86d94b9cdaa0c366ec968051a7e2a12dffcf5c4bc355cde85a79ac552d4f43924bce1e383b9a71d26162e2559e7b27aa61dbd4e5eb03a42ed90c390ec9ea56b93cfe4ae9a4e9b234789a94cc6d7628eb294611718a9aa35ca66eb4f1f892f19012b9d124d7d0465db8936c339b11d13d35576cb13dc2ed0bb576137665cbd6d5840573c09335b712b529af6373295f60b74f3591ac4106e995784f05d3eb0722fc127d4cf371101095023d20d0b8aef5a4c93043ac1d70d1681478c74a9f8c201c8d24111fe817a64bd68010639b5b8b5012f676ef473566fcae1a65ed724bd42393c3d3b2aebe57c6207c96814a603940bd8fa58cb0fcd6193abf8ddd5828c15fb2b235188d6114e32e4cc21967325a1f147440e4e1e61a0c3d2082ab03287254b977799767c4a9bf2864f10df8fc335eb05e5b3c5064c9281c767e964c670c53cc95f330628d138b5b737d3da69af515259f9f9bc9d84dcf7b148e880c73e925dfb167b204d992aca5fafa821a4b128c70b968ff2122800cbf35596d5d0fe81e5211bd1fa0e3a9a2c305beb7413ba89b72ff4097b8f049247d0d2ab35d27ee110ec2f2317bd557df7ceae7fea6d59b69b1a8defa08c35b1a64c87e52365914f957e88302de85089cf91b472ab61701a737844c6c3966205af9c6a63df79025c303ebbddc98c6eba7a2cba0ccbcc5362ea864b0f861dd461a8587e021e4da90c99ba407c2bb2df69662ccc0ba254af3a00b516188c6f77d214bd51d4e6633720a3833e43daa5f0777065102ba16425e9d3e88a06f239365a3bef0b1378c425efd3f7d2ea538bf8038a5d67f977f322e1d43b0a98c54034da83f5c249ebecd0f5e6e30ea220413d2bb2c2fdfff17bb4967822697e78a1851475a8aaf82d8d539d1c56f490bd5c427b92524e6500ee3e836767987e2c1a6e67e622f5f3173c81a2b7028fd0b4c63fcb97580fba6160a87314044826888912a07985ee57d55517daf56fcc3da839a394c1a3ceee541ccaffab0929d23d2688fed313e158ee22e5cd8030f7e97d814d0d92c8dcf37b53aac4542e05a7169b176299ec0e742e3cab2e17fedc6b11b6ee4081aff087dfc39176371421672f374b890cc54f06192486c6ab97747c4ef49abe6a5640bbe58e5525131de1989ace06fd10852a9425b6396682ddecc2d64af41038097d0b422dc21f6a35b786cbf4737c8d3e7ae803d6610663017e56a746c4ef73ef01eb49b008831e196b6642c14ce3a62a2d461c93427197a2a55a63ce17b4d272711b3ce66035153bafdf46295f0e3b25e8834585f9e7c94554806cbe96f351d49a2b51b777d6e7b73dc0e003568515c607d3932ef2d9cc4ed4616c5520c2f64cff8e0267c1930ff3837a1175e1d664eb04095a8fc784a5ab19a2ca2ea9c3e4e5c9a7cf700184a7cd1713e5687fda14e6b1f4f9b8d775fa39906cf8bbeba25d7bdc9cb3d4000c2070e8a6b76979974dcb873e7348c56b35d7a33e003b16ab8c385d50da7faf0b5f35704f7ea4cfe1d3e041c754542de33d6996fa1d14a2c5be304b2bb44cf76e9c9af192a424479be25e2b00d9c198d7628da8bd8f62b4a252f91072ae09a83694b69b2afc425a5cd337f4515ff87b1afc83b4eb3a4e61bbe7d5a9eb6eab057df4940df60b1c40b1d7ecd6734586f414f3b4dd02b4bd2f36ddc1526c7c73c908f9c3fcc13167556421af3fefb9d66f9f75ed1dee1412014a10ebb5373bdda881608bec926620f00118ed76ee0b5020cbdc3c581560e545174b3fbb93c3fef3023933ad08cd4986c91682152d5a5892c32c683963e41746acc1fa546a7e5004ebf4568f345ee901513492d0379d529140748147b580e47f50469458bfb43230f24a1783d1792f879ac37dc90eb1c8513d873cf8a3948e096e4581a3ef20790509b157288dd4457480f5d20ccc312184172bcac1a864e84e75992962ed7ab6d2b8a41462633b87ac91678cc362aae80f37e85432ad433ea9a1ff0285caad1c9cfd79fcc3b2b8067f8ed3a6c27c37871944d4df0ef9bc8742ed62aee684ed5eaf3ce1bb3b4b203774e20a5c010b31b2c3ad7e7074679d082938db39e95d0f5570ae8990bf96fee3ef6907595566057b15906b133f10997c0e102f4e18ef135cea462870c0551f99bd5acfe4af009c2c1c2d8216e24b0c9181403eb8bf5ba6458c73eb4028b798779889294b1799c89d4a8cca4f20eca2515a5f26dbf362638336edaedee9c0b98cbc4cd8ab6346de3b9253d2ddf80c0f9c56f99767b946785cb815b9885a04f21adc4977d5aa5158aace8dfd3fca52b0b4195939e88fa2b8f7f3aec2d6a87815b9cb5e8d746ef4f8b84fdd03dc03e9583bfdd24892690e3f10902edd2d26ecff0678f3d19b4cd8cb4400a4ea8d801da62f51983d33c82a738188239f1574dbb5240159f54640503da3412568f134a5b4fcb5918f79bb8c7d5c296a84ac25528a2d0c07b71f8b0e0588acd415e00a49559e48ab263bb155b52c497b60e77468237aad20d302e46a068baf924e01b20bee50d2bf0adb800008be1060d88e30d28995be44d35cbd7db5c59aec0b33b006290897ac50504dc1f7a4adfb7750eb107551af185a5044826f98bf66f99a4cd1d966daa3be0961c21553cbeb584637e5009f2599603071cdfc3acda9f89c917c0303f4165207dd165ee7a5c1fe4f63f7fd84e6b6404f0cc48eb9cd82b20c59953502ec2de7c5de063ce5a49bdb0c2042f840390da85d297d84d89a9ec91dd150c1a9cf0cadc055013cf5ef71a5ef4f7e2bb5e353d55ab7a34fb1e8f2b4fc1ff12b2bf37d2a5dd8c86cf89e037629e55eda39f056204eec64012240a20a45520277de2e59d550643c6acb322efda331aaedbc2a9defc95043b8f343f9356fad5467fb70dc1a13069413ca0af3acc4ccd8ce9f5a035a2152052d541fab7d7573badea02b22bc57c36e0223cc7fb254755ce87392fb04438aa4249bb47748d4c6027bf355c47bfae84bc50dfd379af43e25e0b15c0c9441dffa083770e5387bcde3c7e6ee50eed678b6e6a5062660f008dd08e8f701650f43f6333d6ed6b2d419ba7191743f8395e1089b62068607b146862d3875e5672e3d9a25fd4c73e256ce3d49678158f469ba10ebe22ff3d6fb1c32500ec73e9cf7c1b932c085ba13b6b4ca8128df9d12b2cb2fa27368002af8cac64682642c15a0b54ea310095228ad07cf2d98943350c303f0ca51a60014961414b324cf4e723bf04f8c8e42a6e99611d1a644250063331a24ad71d0887e2e883502a3fe6606a980323192cd53fc33b75ee4f2ddc972fe45ed65bdca6d3b5a680777b0ebd3977f36e521af79c3b2dda59cfce3fef7d12129e3203b2c411c3975987e90c2b71f67a38ed160d83ad88caeb9a6125c5fcd391e102bfc1abf748cc88186c97344fc8540057ae988ea76788fcd4a4f6b944d43ea6f40063eeb85bf07d5a0f70c279e496bb1c0d6bcdbc303f0b3df016bf71b2601d0a9c08877717fdf8c1ef401aea91e83cfacedc6dce06c5ebc81c506c75c36352d3c823f4bed8e19a92d1dfd8d960e3a87f3739bdb0267e91cd9caa7d6e87d409bba1b0a6f8e19d9a06fa4da9377adec7819cc2f09777ec02cf9fb074d2bbc550dac8b3cd2edd8915e2ac33ff454647e58bb39fb3bc8b8496de0bb0cca70b028aec29ec2106328ee95b570791edc4cb76287eabd7caaeb6b0946677196dfc18f5c0b88747d3c588eb5d5fb6eae95d178976a971bce94b267110fdb196d189b2ad3786f35c4decc88ea75dcce1cf099bb41933ea8c3ca2474c13294b758e23798d78ffc526be41eab76586e843537b1bb7ea359bae7f26d9bbb06fa581c36c3733b0fa7cd5abb9ce0e714fb18d4ccc378e2ea6fba6bbfc1eb8a7168fac8f6371c99f17bb5167f6b190e3034dbcff63fb84f4093b2311e99967fb3b76f77897165f2580fcb4da933e4ec1d34ebd24d9fb7156b9eda52b9d8198d771361a41e960c1046271ab412bbe036de991a014f4b63718932fc424f056ffc6c66b07fb7968579f9269acf2b3775cd4c1b2ce3bfd47768c40cf55bdd7d918a93606e65ad4553363b3a34f9bbc454ef34e059cb447b2cf06e7d846d96ec601dbfcd1c04d6e1e041e2dbbfebfdc13021de2d8189fa42b47968b774cd0c1b2cf2cff7a1e9cdf00f6ef6edb0347b780da40d7852632d4a2cd033634d36f1d60166b47b61e4c5f7669f7f23c8d42f84be97d29dfb4bddd41923dc5d0f8b0bf0bebd1364af3b543c2db5937e3323ff7b1bb4d2194a88fd597247f7d866dd26d9b3abcb6699e5497b6e9af58d6b7bf8dc356efcb47e53cfa881efaabbb1814ec1b8935c1c23acdd03b729fe52ee6002bb39e64676ea5e30d8f8627825f43f64abd94c93056fc81cc8dbc02ffd132627c038bea9959dbdc62373cdc71607369331b12fff076950bcb19b9bf13d69d9fe1968a89b3287c6531ca0a5b47c60879ab939d6ed6da87171d2effc63d7dc336305ce6462b89967b7f06d5a0bef4903bb068cb64d6c9a526fb0cf95f667ebeccc882c6a59f31b36d0b2b9cf6ee29e7a73e06ccca135cc1ce0ae7064999ac365f10fa849f2ee6ef086b59bdfdc46347a046fe1e833b80bccbc35a57bbedda7655c5e6d6756a06019ce0bb08c08ac4c2613af6a82b4d1adddc4d87573c6b4e25ae643c9fbb363c80c3f063dbfe904f05467cfdce0dea42069f0cc93da249b46569c8235ff6b28870d05cde2e69ffd49cbde753156cb6bf1d7c2ff25576e632ee0e9dfa565e994fae44776ef97daa4d56481312573f87daf154018d696069bbacb0f43b3bf8e33ecd49963cfeb4a16b653bc86cdc249b66775acf70acd00ecda766445cfd0c23c4563f6c734b04b26c2cf97b94d87f1831ad5f9adcf1b57a67fcb13dc543797f16a4d26eecc98166e7a53274fd3b85d876763c032306e0dcf6033b7c0f409663613fdc0de0afe583905abb78359f478d7b30730cb11af45cbbf7d776bf6e746167b0be5d43c3346541980513ac919fc2cbb906ca9035f696dda3c8e1fddb72f03c052e18cfe68bebd8667e066b77027fec9bd1787f5f07866387416de6533d91afbe3f5ae61dd0dce0e073a3f1d463889063cd38dbcf3df67b01136d8d3a445e72bb1188e9bcb3163f37f43c97e5de14e26bb610daf9c55afd91bdacc102ecf839fb5d6ddfe184f877f209fb7e3c81bec487ff7f2086c0aacc6d1cefc5df15b6bd84e1c7a7e2656ff01cd66e137031b15ef70c0b63a23c16bd80ced9dec8a7b33454792111d6a0fb5916962bb76cf780450ac2d63a0b33a9b5c8c27724bcf967ffc9668d46660029219dc057ec85ad8a6ee4c3d143f6b7de399c1ce1c8cebf10132467a6fea3438dca9c0d95ae1166ff09cc100e9000f4a038e2cf8ef296ad2378a5806c1fc0ef3bbdece5ac1ad3e16ef45e64666283b15a375fa7f5083d2e5fd1bcfe4b07363e1c6dc64d02deb46faa9c5f8b69079bf107043243c7bdfd999f40db7619d4dda7e1d0f3df54e18defce4768df91c8c900772c61bcdfe62fdce1ad98f5bca1a8e07d33fd8a19e5d86a5dc3afbda695e510bcd00324c38905debb692a7643d64c43fc51667003c5973796437bc8bcde4667dac67c9efd0bec0bffe9d0f9915eec08a355b9bb6f6adbc6660009766cd4e1d9bcc229b8171287573df80ce359051dcfbd05ccc67a2779e831799a7fdd44016bd4c0c70a5e7dbcf0d76d75ec3536a349a1e1677c10c6907f60636eced3e073c921f5963ddd60c3f878741350c3ca09dca1de5c17aec179703bced3a6bf7035cca7d0e91591f97a461bbb9d766c393b908acebf17c929bdc8ef31b3daada446f10b3f0907fb3bf79677e07594640b68eb1de6883a19e9d00cfd6c4dc40961d9b19ed70813669c7e62d437536d7801d1b4d536dce1857cdf426c80deec8e1973360ab0ec7406bddd235cf3d5ec9b71f83c33783cb3fde4dac51d182da79f7a4baf2989581b8cf205a556fde7cb48a9e9a3baece194fdaf9ac0e171bdc958dd5041df36f2ccfe07f6de669a71fcb23c8aa50c5c95f9ee5fdd67aa99afb4d6e6031bb67fec6d9957b0310073c163220f3df94be961b5d6f609d7c534687a523be655d4bb837720be9563485616d9d33197846886918fcad1b3dd3ffe2da9727b02938114c3db3630fc9ee01243346fa6d98bfab10e79ae103b3d4ffbe843615c692c2cf6e633b1573e49d75db0b1975d8acec3e4b7b81d901cfed30c81400b0f5c35fc0cf720159e68298d1403bf14fcd9c5fca9ea101f2011c0946f66788db29577c5367a5def0e6ac39bfe50e66d61c03536d62683c61c82ff29bc9be77acbb696ee534b965097affad50b2073df2cfcb6f6e3300d1b8d52ebe2607f523954d2c06e3b3de5f5f0d56767fddda16afb85f9f814c1aeb2c7da0bde07fe916f3b8663af1ec1804f6cbf98b6ef398b9f4c681b19421bc8f9c5efdd93bcdd6e69ad581cb54afef7a6663ae793b5afe1acc75f9c81f4a9aa54963bbec4c6b37f7a46961337084b7fe568ec185313414fc5c12b314ffc6d1f4e85653b9d04eb1a1b684013cccd9081f7a64cd9c75bcd98998daa31f5ec37fb01be3e15aa683060667bf4133f0b37a2435e5430e85b5d6866fbf9dd83361839b1b7013d3b829677117488ac61f06a8f235b03b8de55870bb04f3767e6f768a804e755b8c0d70a4e79e0f6da4b53191bb64ce1dba67b4809bbd1dfff5bf9c09e8c5c311d87a673f81337a3b87cf9acd3cf30610388cf1ce8fbc1fc65126e98f4ddc18d664a3af7d3aabc18f4c3edb4198a967eca6079311fdda9368653f7c1766667773182d231de059803ff7cd627aa0230fe77a188f1bb42bbf7486f7f279a066e28babfb0dfccaca7e26905dfaef5c3d57ed0a67c2cd3dba1a1fa983c5388effe17483daa503fdefdda0796e9fc16e3a6c4ef0a26c052d0aeb17f864611959716731304e79038999afb37f12cc59ac77bf7bebe743b266803acc1ed0c863bbbe97d7e75f2b3515c6da8dcfec6efe88ad15daaa066ff81cc5ce3be4d8046a9ef28c521028d2381d23bc96111a338ef428cb22e3a56cbbd37ba0acf8a75a3914104000630d2845207f4b126f91fd5dba915cd2e43526a18ff5af1d87800ef6f8ca673f5fa392dd41424c4634810bd8b0f97033410add08a208e60896c954a51e768b4254fdf7d9161c02a7b6e05f4c040ee564f365f5fe477b92d58d40c6bd1bc1c947b8d28d108e50e32eb3e96a13e10b119a44102a82c6a9b6938bbbdf3aeb8a5c712ada2249de15b111df288431aa8b751902059cb4138a5ed235b6a4ebfe5b255ad23516428d5f1040d081200308dd075ddca9b61f6071ef3e08c08d97eee676f381071e14e181140f7e0660c700b4d0300ceb385e8c93adfe6e2eefd1da703337ceaf8af76b55bc53b6a46b8c6af1b70d43f1c3ba7603b00d40c7e7006a72a32ef12d77f16d0920977727005d779d1acc6dcb5aad6696f5b76a3b01d4b8771e196cc3795dbca6ceebd1341c5bad625d19f7544ed6755ddcbdebb2d0aec7bdab99b323e2443b22579c1279392572d3ea004d074f4ef7eb0eb474100e75306d6cc06ca1b7b2b309dddd3b1b1d8a896c6aca2e000120dd9de67817809d00d43cf58e8331ee54b495d438b792032e1d0721cdcf345f7c0ee6ad14bb0dd2b86fb0457faed959bb0d6a9e6dbadac6b1fe688083064a9d063de39033dd9026dcdd04ef8664e98654a1212cb4516e9701215d067c6450449741aecb40499781d35063726a3bb7c6d138378d5f1d06477418187518d400d558e96a56a8e9ba0bbe741708e14e69cd9836eb50c6dd052d7417a0d059a086bbe37867815367c1e8ee3414df56c43b0b6aba0aaaa8c04a574192ae02093a0a9ea82ae3e924f5178f753e537d946a35f7e7c270e6c73d0dd7ea2860a2804a4781e754cc8d353cb6ba09a0e826d8dd0430741370d04d20412741129d04579c8621b8efdf5474863711cf5b29b252b971acfb6f36b634ab795fcb628d63fd61b532f872e35863f3fbe6b734ab39762bb79e1a27c9b537f0da5bed5ab0a90e81b31741dcdfce750af9c31f0f15c2c4acd25ab6423c28e402429a20e4123203210318e489ea8f86c592cedca57ff1adb2dc987fea6d73e3fcf4db3d56acad180ec233880783602048208274409024419084e1acaaaf566522beaa55c6b8dcc4351a9ea22b7f684517131e0aa48c407cf07f423fa5908641f05a7097e4673cd3bbe9ef673c83ad5631b056654c9fc9d1d62dd6b7a560f3434289b7c45928e767c2e388b3e85aad58b9fa9abace9c6841b0762d080809880e204c7f3ce1f0fd83873f7a9c669c1bb76bfe1f3769cc782e65b9c49386d33c394db3250de9ad343bee4efd28939f093ba936981f384c3faa1f36b70f33de07979bee83f48cbf3e7a9cf6518369353b5a3ec65c3eb8f061f31cbe7c34d99f63b9e6c7d3847d5c2c3d94d003093d90f4b0c9438a3c1e9087501e4af008038f1bf09082c60f345db2cdab15a9751d6773666976666bf8f9695429ccafc50fef1d84dcf1c41d5a448b917253b498898a1623d9b1861d48d831c58e2880d471471d44d44166d9ed5fd4e4ff924acc78f604162ad1b078cf2871a6863349e8c0830e212040c715776aeb2bd465f85d170d43a5f0f5fa8b5b93eab1664cde7e8b778e2f738c73dcc8b1851c53c8b1831c38c851458e4f8e21669e9cdab1cefc2985e26f4ca4d2478e1cd1adb0852a3a1253a271c0110797382a10070e7130c5e1040e39e0c80011382a004716380c00070aeef44595c2d58a8a9e478e5032d74fff4cdb6cc9bc3f03cd2347e69123547c9ab5f7c56ba354f059a28be777ddb0379cdec872dfb0bd51e3ee51a41cf98041402d2328af235008d61202935a43e1901b4f4eb775230bc5d58da48daf1b3ef16da34bedda5de2561b368fb5a1c4dda966b1c101366c200026a7ea333996416c78b08619771a82e1246a09c5262c68c8159b4146454393a86802054991d2fa99413e3356443463b0a3a1097309ad915b034919319c6af156dbb6b97ac3a35119a6322aa8e1871a4f94863fffb4cdcadbac3f8693e6fa5143280d3dd218c3dde927a658bf34633539a1fc31b57f696663a8dab563ed5a34d0381a4f6864296b6884de42e3c61ddf1618d919596e67f4c8e6c6b94e66ec0c33c08ca3195a68cc0ca1dcfcccb871aa539ff10d3573b78ee308caf8887bdac478c7b0545c6b043a65a02152c6978c6713323a9059223344461f64644106495517cfaf76ed1861c608620c2a6368200227a73f53bc35065411fd5c55758af162882006066180114601c2c001630d308000a3090c29341cc73a53d1fba3aa2986188a94cc18a692094315856150f8555cc696493873a39db47ee0874721f0c65831a68931b8313e63ba2fbe7ca1bfe8f962052fe6f0e2092f10e005154346cc14626e626ec40c01811710d0008213ba48c37de6cca964beae3e4fb3e3d4dbcaca156caa68799b4c98cc55d112570a36954c580d8fa8a21035270d27990fa313167e9fd69554d1acbaf808368e56bc1535ad6b15eea14953f951535f55c65687ba1cc9f985fa6dc61a0c994c55386934bbb59d2c3dd6a63ac4fa9b8dddb7e132eec2e63fbb5da09c74e15c9421e2a28be7645c701172a1e3ee940b1b6dc398711aa68b3bad61ae8c556392288cce9c61c094c98179f2a78109f72d7196880fa6c7c1dcb8e3e42dcec4b608628b2bee4ebf186d6d616465f3625d7d58aef969f1a4054e0b1e77fa93851bee9e85065830818512163657407145bd42005fb4f872802fa13b5d9a597276bf66472bce2f459cdbdac8d4d67eb93145c57acb76f619876f532625cb991b6bd7caf00c33dbda9a74ac376d67475678618502462ba81502b0e2e9f694e4feb4af7cdad332fe5c9386e1dc399ffcafba2b5048dad8ab8a2f556ca962872a786ed886ab958a2fa818828a19a828e24e67b39fe18d56ab5828de3a5b33e329aa98a29ce2e5b4457fc479e6a50e2f577819dd6928de2761ab552cccd521da6e4d3a56290a91e20c292620c5e84ee72abcbf815c33b757a168c1dcbe656e370581f9352669acdc2e3796ed0a7e298219df70a6e912ef28b8b8d3285265143df4be958a8be266bf86a20c145ea0d0504c77d763bdf68993190f5d21112730547422dd652f3ae9f81364dc43dc134e547c5cb5ed27b038ddd7de9e08fd099b2c5ad474020c4d398185a644d414614ed8de89159a30a3f1387789bf5dca2aae092d4e53fa9f769bb0396d62c7dd7d491336ce0418fa221126b6f83011b698b871a7212bc6432b4212476c5bc2cc67d267892e4b5c71a7a17e2b7528d4444bf46cab441a0f78e76ebd3b18b1c3cbfde2db0e5802633426ca3fc3fdc5fdc5fd6545408d083845a088084489c084401a0870e920a083bbcf3973569fe601453c60ca036cdc95421cc62a1de8d0a1071db603ae033cc8a18a1c10d0e52094839106a8d1001e1af04203701a20002c4f4e9542d0324dfd5f6edbb17e66c2b7fd63de5a56e6c67b6dc5170b6500200ce0d23100060600600149b853234626fda5d74cb3ee9a67ae1f4b598b67302a42653b624c6adb5a80d202565080204e5be154e5d0f00ca7aea255c00d0a68a2802138408183cd2938ff613e5429a4f28de5ad9ccd2abeb5684ebcd827015b24804c802d0103e812a00102a4e81020c40db4655cc51f31266f4073031537dc1b766ea8e00a14576e57540768e3004a1ca08af8d7e219ee9345ab550eb553c90ca7387336be3915cf3037be3387eafcbd2e95427df1ee0c605480400a604401886c4863c3056c50b2a1a606386a10a3862c3534a00614acf861850e2b3d58b156422b1be4f22822f772773ad6d9273469aa7c8ba2d971acae98152b5ea52ff5f99be2d2cc2ecd9f61fa338fd0995fdcf66919d3fe8635d6e388673337deec764d8a0382b56b7113029a729a9074b8377016c0dd702c30c9c18406530e4c2930dd84a092e9e4ba8e50a5d52aa4327555e5d0252b6552d5cca1e28b73c4343ceb9ed5b28c328732bcc94afde59dc6ce6157d91be817f1b6250dae239add2efa65fc7db7d3a04e9207c967e42e194b26f374aa0465c4f895ff35624c824db5a95e8b5db87628a432f7c3a66a5e8b675092d1a0001a5220d3f8e7d2e4074825b202dc040e69ee6d3b0cff757e5d6a8cba66dc07dcd934c7a9a2f9c371b4b2dcad4df5365557841b98ee86c5697de1e8db06dde8c4584720dc5f15dd39fccfd54a97ee589ac092683403a223c64b216031c3ad9b219629a6a17827b54d58192c4e67f3c33687cd075b9353bcef9318fc25bcff36634544f7493c624c9b7c23c618e72fff2c27a34c56bfb7c57786ae5a1db5206a506868685bd00c40ab42bf546ed4fa47f133868554564fe6360db7422acfc60ff152ba0f12f5e8c43a442dee341cc756a8ed04f7eb7286b42f64a1041ab2c0c2d462de98ce6cc39a77d387e212b103d182991d3321dc5533cca13f34553387663ceb0c898c8c0c07d9926a4625f1cec9aacecfa4fa1950d0bc172868e6a77d9602054dad7fd6f4228963e26b31579ce81a317ee5af38164bd7fc200b64fdae463fbb66f0c7bd71b66d5653bdb152a89a1fc497c58af11c7dac18cfb6b83abec8c238ebfcac188ffe111b8d18bff48f38cb40c65d062719b2b8bbcb90e4de9241b44a643a250678a8df56e9a28a0e55a2544942850d2a59e040c545a5c65a31c9146d257f26ad303c01430e861592f6481293e48024179278a6a47162ca9e72c214254866909040223b249620475e8e0c7004e5a8825819a7b6966290b694fc5cdf4e9919cf2f5601ec0b0c07980c86d3c1403042a333eae2b7f5b45929bea8ad6dbf30c50b147841e905105e82bcaa7831f16aea5eb4179222428abc1435b9fbcc45337e32e9f7842699fa0bb50dc35c275106880a4094d31119196263c8cbd00e4345dd100a52f290f20129563a294e3a294868d32359bca768cbadd46aaa43b5cf75924774fcf9a992ccdc6844145b517051c6282817e070214ce7420e9d0b525c40d1b90a33766557900b04a13a3a213484841082a1138a75423650c44039c27d15e64455385563493322fe189978dbd99ad488f8a2d83232affdf9ecbeafca80e73766fae697c1eb135d4f86e8e1ee3ad7547f2d6d523cf35350027058487c5d824149413b9404a203480b50949f3f7ec87077aa6baeb317867272e38f58e74cf9d9e2eea10a2934017f9aba9f2077fab54ade7e6edcc78c0f169c6fa81966ece3b3e34fd6961bb4d54a40d712527d9eb95bb7156f6d79daf698e9d9c1e6eeb7117f1bdf6c9b95b05bf6e8b87b0b66680b3dccabed05deb55043d742ca9d8a23ae647dbd150b5bad62ac2d4e7fac5bcfd9b11048c7c21c2cf4c082110b13743c4ef014c143d4f1e8d09492892a9a2bbd74df479c35d74ae24c7e8c8af7592c1e229d4b2cb3d5ec5f3027d6cfb5fa7a2b56b3e6f7562c8cac2fc4d3e48423bcaf6b7e3b2559dff6562cace98d8084787caacc08c847fc7bb4ad2ce39f5d4111cf32a6810f7ec6fa56de7f1af8bacaec2e9bea0dd4bbc4e3de4b188f2cdcdf23b2d44263dd176b1014c10c52ac146a3f0c26ba66a265c2a458df96f1aee3887f36c619cc9f9b81648933941f6516dc15dc2506599ff14f8941902c5917dbbd5bb96d75645aca6ab55acd9e695bd9fc764aeba35f886793e26f96104fc6365d85b45eca150712f1fc684d343f219ed60fcfec918c40264c824df5d6546f20d38bf807697e44282b565f57dd1548ac2f44b2525acaf8f756db0f79cb42bb2c9a9fe842f1cc1e6997b804cb0b92b7928867f64820791359bae647e1c6fd042f27d44ee871a793da66bb8af773bdcd2f9c7aea8a6b5246b7ba2659dca9ae5ddb35c1e13bc5a279bb263621be1d9327b1bed0bc36ab6ed931219dda8ec98eeb78a76347a7f3e44e751ae0782f31d32dd1b2e4a85b8289e84dacf9957e1c69148aea0e95165504543ddd77c717c457c38744c9184ab2d5789cb94fbcdfb5f5a3b9ecdbbe9cd7a669ae59e29b718e1a394b28e55cd0a53cd0a574ca4887fac3dd696e164e5229fc9286d79a8ad7de6cc5d987656ccbd139aaad2b6dd2c6d77ff17c20d65bb1b0148a67f6482c568ca7766d531d125f7c16d2fca26c3cc2361e3508eed56ab562b17e58a26b7ea26b7e3c18e937666289ae9758f198ab644c74ed87898f9958299bae42f343418512b5549f7c1113d1ea4be1993d12cfec9192e8bcc633498d3bed4c38c2815c73a70993a3df359bf0b93b1230de21a951bc6fb32690959a3dd2fc50ac7d9f09dc1abf6cdb4e69e2dd912bde1d49c2b73ba2e37ec42959a4c244d389f89d1129dc29b85ac570f896e0a52b218912a69430a49b73fc307dbad94147821f1d09487424641244e848a8710ff76b30ff085e1cceb954f76a255aa070d2f00c352f0e1540e15530a339d9f74f9b216977f885ff34309cad7f1a38d67f1af823eb9fb89e06927603d5f46d5770dfd7acd56af64cab15178f029b1f7914f4781478ee29f72678f22638c29b60076f02b2c9c433c5e445f7df3ef726d8f126b0f12418e3f4c893208bbb034d4f82240976289027418dbbbb9d330f0063dc7de601608b7b00b0b987fb7ead157a0018c19d8ef596fb7eadbafb07eef9937bbe85c9f38b3daf71a52a1fb6e1a854995d2164805c8534b95311876f2149f855c88d7f295e42cce04b88132159860849ba84d838adb1419cdc0729c0202877a7560b0288bb3b4beb3afe0452063203a100102500c90172e40f317f10f147ed8fef8f9a3479a409228d953441692cf0c38c1f5ff8b144e74717fc4c4519d3ecd4968673729e29576f4c38d76a3557f1d6ad126fa5b9e8ad53bcf5c719a5b43e2671c62b9aab0f38fa80a28fda47077c78e143083e82f6d8638d3db2eca1f728a2c71c7af8a0470d7aa06828fed665d6a24c35f538d64fbfd675c4c1a939e7dc5686633389b32d2a8f20f2b09287501e20e02106c69be29286ea2485fa5c05b50d2b46c2830a1e2a3c2a4053081a2eee94868da66ddb8b97dcd1c61d40dcb1803b5cb823053bdcb0c3027644a9238d3bade3d4a178c39956bb2fab318ac3f7a88e16ced87146cc991fcee87006853312d071061d3cd02134071f739cb131939e935e4c1a19cd1a1ea79269842a0ae76a1c31a955748e2366723262f2137f6326f0c35db39849e7ead59fabacf9d51f96fe8d9152bf31d237e2178a67f6484b332c45eb8b65f5733557ef6f8c2447163942a719bf1c4fe4b0713a8e2d3368f0ed3b33b63363ab7834b3e366c28803cbad789c6f8bc5d1e3eed4c651e3ee4f8c90e68b51bc83a38b3e018e108e1b296fbcd1bd61f337befb7a6ef10d01b8f144eb6bd2ce8d2b9d1bd3bf0d306e6bb136b8781baff9edcfb5da4051f13fd746ae6c8061e3caf76cbcdcbd63c3ddcb13d6f002dffec65a63a70c9a324e3af751429d5f971ae856dc8a955143278d3dd288238d1dd28092c64d1a43d07042430268b4708619a733b05c6ce70ea7c6116f49cb783a09c5fb73a5fa4c036534ac72a25a7d39d7e6ccff74c6b33308704611fada5658f8da5623dc1385bf845f668ca1560c326374affbb319a8118460045d8ca0c9dd77fd6ab692b73a9bb56b47d053c699327af05b56dbc4343c563dbf0c4a460f77a7b08b6f7f6365bbc772e82deba77c724b1a59676247c6920108195cdce9a4a2959141bad3b135c9b80995a8844fc628630c1c9c8a78b4338b838d71c7b871a764bd8553c87ad3d8367b4dc389e08b0848a7e28f6499c55ad280f7bcb6d6f4a27d4dda12818e6b2b82322e8613ddba8a91c55d8c26a79d1848eeee61288531040c29c0c8818103c606218822044484c035069031171803c41821a7b8295ad9db76b5b2d7341a9e9facbe6d679dc170aa683803ccca26dee154a572391979c3b38c3f20974a566a59a9ab285a9f4953cf647549d6313f1316456bffd63d9637ab7378245f4ca1aafd828b2f6ef842f5c50d153f97981686e1a4fb569ceb451a5e3ca9ae9dd70b2cde7991e4eedef26202b9c4a41133023158dca14c2ce6f56292902914ac6a711604b2c46ba374d1a50bdd45aa0b0fb80841c7450fe1bc7862b186350caaf3f32b9cfa5ad7fcc28011264b18a5302584a9bb6e9d316e0a7dfd6038553a5604d481a9608b33b678620ba62da816346841458b2259a0918508b20893450d59d82c886071461258c480450e163657e071051257f070450cee4b78f48be5389b42af65f1d03d27782b3f9c2a5abb3b0c679842a52a2a859aacd514ff56064dd68a86f587b5b5a2b1222010fc62c79721bebcdc294ce33ca1e5b51b3775edbe4c25908a155650e1197c5d5f4a670512a75a8f63fd79d2e289014f28ac56b1704ebce7cf362edc2506c33dfbab4b17aad8a28a24aa90a18a0da8c0c29d7e7edb6dbc75562fa6620b152fbb71ee6b08880a9b29ca389dc28992e51457ba2976dca99734eeb4f3f2e4a507d66d96b45ad572abe6faf262e3527821a5d8521871779877517c11850e7496b6d8a43f53e7c6b16ed7242a72c57e8e808a8c5ef3422172c56041b19246e103851d508071a7210d3f93130a0540a1e384c69dd69c6c86dbae56e42d0b85f3d6f16fddfa9f387101122de81402b966e754233e21c61357dcbde64ace2573e3513f91f4848ebb3b91c6690a359d2043ab135d805c4e5c712abaa6b64e844edf8ad54eec386d82869bf8d204e9eeba24edadb7268adcfde745dc5f50acb9924c608089a225d218b10491127f2871863b1d717fb545c2af99bb357f6fdbf35fa4611a0dcf9410e103777cc009363f5720974a56ea0fecfa368df3019f2e68ba78d145076dad07def080160fb83a90470784e800500728e080201c48c29dce2f85c3342346e658ef2dff56d52e1ee7c5f3d699fe5bbde5329e1f596f539315279b64c5650ce340ace3c0054960e135931557270dd75c97ba247636c0c60680d840960d38d900110d78d180a8810e327086be2e33a64d2057aeaf89fbbb247fad5e9f79dfb6bf8d47d8d1c47b8621eeaf51069ac840cdc074775a2fae92e157b9b8b848804417481c0009191201c080180c4c81818d0114dc3d8a7747c87104144770e008ec4e6d3873b7155aa9faffc9125d3fdbf6126db58a2e11ffe230904be59a35d7d7ccac1163d9efba2f90a66af12fe0e41e5e60bc0008466861c416771a8aa9b176ab48536345cd5caefb962366aa4634b9f8b55b6d6fc49111ee4e331e7167010b68b1c076b7c004457429824a1146b6e4b1a5882d522a404805c8507b7b5df3975aabc44fa1b4aa024354004a474421449071ca4486374cdbd0da5a4470b9b56c180305cdfb56c8324604ca89a8a1ad21c0b4866872771f42c8dd85e8c369184ebcc39a3f9c4238517c85b8e2373b319110424ae17d2941a4a1db355b418c690581a5a97641ecf8cd8ef53310698880c07be30b841677b74008016101053c408118286043270e8ffacba9a58c532d5c9ce25e5aaeb8bb6bd199401a77aa772d6978b14e608bd3d4a7ea0472a97f4073897e78b229d40f5a7eb0e972c90fd30734ee83077cc053a9e5434deddafdba87a71e9a9cf620e4b7a9878f873254675b79d052bb3cbcdc9f876e072cbe99e765d587e7655536c3312453d7c9f3341064fa4cb268004303992d0d45c82bc82ea5ad1b13d1db2243774a76f809e3700957ccdd7231c65916e66433e3f0afbdcd2f4ca174eb36dd796dfc5666caedc9bb6171c7f8261482b79bfb7a2ce34e73253f935ddca9375e718b537dc6f571e3cb7d664c9bf253344e77a72d15e13ee738969ac562ad56311e5a110fae1af134611f1057332b63b069861c6688cd8072a77bac34b4626cce96e0d9c6d83a604b729ad2b98c6f7f43cdd1d639cbe5b62e336de63e5cad64b530d9abc950bb8016062d09f78ce7f74d6ab54893c07b331ecb37f1de88d885c824e2ccf89881c09d5a4c946d497eb98a9bb9d1e296c4684aa326d6b77ed0a439393939f36d1be7461af8175f10c434d82c37c3995de020f8e07e8df76a1552a14bb32a8bb1eaae40b0d4f599df88b10cf5221e6211f1e4f2be41bae6fa023726b5cc733250fcfc624ed6aa587835882ae4dbc6aa046138bffca2170a81689cceea48d669db20088249e00ea844863c64a043062e3220c950e32939a12401f7fc622e6aaa43b7da62423fb3f9b531090ba72a1cc7f2493855ab90664c6bd5a67ac5a7915524f526957aaaa471a7559c96b857e58a874af30b27f5aaecb87bc6dfe772cb505584a88c4951c9e251499251a9f1bfb81503165e0c3ec4d0e34eebdbc2186edc290c669c5eebc100e66bb9c26043993d188e2499a156acb819a4cad5316988a4a4d5673c4bd221e7cf1434de940e5c0b8aa09eb23365229571778ad48562bc3da4d0dd43d2f1903238c2c15da90a952a938abf8fa01c79a15215db275a2a55c21c532296634b606870f82eed3ada52e6436d30a77b04bbe2b01eaa6b1a13197946609ce6598db4dc96119e3a37de96d14d49be80e6052ead1792a8ae2f10e065e6be0d171abdbaf84bc969adca44fb19cf8a2a503443110a4518105941e4045178dfa6e7cb84e62a0c5534545131e359a8a22aaa6deddaa2fc4b38fb04854c441b0cc5e10d95d16168c7dd57aa1fbcafd516b69249d943ca1629ae2878b83b2dc170d6b934ab325dc7aa6dba0aa178bea4e181668fe445698af28a62e3eed40530f809d2cb73418b7be9c2cb73c1c6455719a7dad268d8c5c5dd5d3617ca1342e355c88bbbd37ddbda135a120a014a161e141be6be2f8aa57e11cf68503e788285bb53a6b7b659dd63a96fad2eef49104f6478323def1cce148a53be82c638ad41383810184006f080680022e147cc8f951f233e5e783e3ff8f4f8dc5015deb9f15a5ccde02f6132dc757cdbd64bf547bdbff622536e56693a45dae6c649f77d2d8aadd69816aee22a8ba5cbfa43637ad5aaf501770577057705c5bf6526592c229e591d7b42cbe4f5f4f4dcb46006a785a7166c2de838bd15c722e3b1bab8c7bae2eeb13c560dc66d8f85314e59209de6642cf44c6da7c782e3cdb3c5dde9b5dbe3093d9e1df79c9871ea39c992af139be76487ea4c6d9dd438f5565d7ed544bd150f789fc4b7f28a2e7b2b2f0154d85963c769a7e6edb4563833c7d938da5bae806505246f851a0a8263b5b2a9c20254103d1538f05270038fb3d7b87a29e8e0a5f0aa1e0a5f501802852827ece14e279d7d26a2e5adef9d10c409504e98c06be2d444e63599d284823a63aa5c1d5fab6628befeed62929988e0e9f0a1334627071d14ca2cd1c19dd2641ab46d2c03e9c4b81db4c4048ff2412de0d12cb44765260f85f36dfbd356d47f318a6a9c300cc39c6ce2b1356b91a70a4215e4a95040c3fb26f0f5505d672adcda4ad1e3df278bc4dffaf1d558d3643325623c2549288180a704074f4992120adc5b5f3855ab30cc3993a3e5621aee736ceeee3935ee7e6b9da931b79cb194114ea7f82c1611cf52c6539632c6b15844ac14f95b6b4cb2523a3a2aac9002ad48ef5c5ff343ed6b6da078df4371f1500f40ed50f199aad61ece190fa70b9ca6fb2d0f478a66d55d81b49764cc9cf30625c9c13d898eaeb2246335610cd5266ca9c03d131c60c20efdd9c59e0948c8dc798f9620f1900839d548f0ecd66c11f78e9099fb6147b42015bde6117d9fc447c4729c19d9624448fc7a3352e3f4da12d094a085961065fa3141e0257caeb889c377e9338d7a730333a97c7d4475fedc0cefedcd39e7dea547821912b2b8d35d924bf5498f84704e127a3209372ad50860acf6462047e8a9b936d59b08683c1198985395b10810f04478b93b65b2f1a835eeeab827c20d9dffb4224ffbde22a13f89a75764de6c1df79e298d9a1787f074ed0cc1c80b810510cce0fe8ae3db9fd5917cdb9e2068a18160a3d303c1a6243fe832c3a1274648b93abe91f7c1953967cbbd0f74f0ccbb2173d3f41a32129a3763da4d13bc71d8a6417cf15bb1da677673baa5413c9622be81b4cc046efc197c31ebfbe4454cc4d2377dd32006c18bad062f0e8b23c6338d3456ad694ca46d8b1607be6d66db38bf15106f902c3def07cff3e9f670a7621dc72ab3b38c5dac9d1224f1267fba2455c65ec722828686b31017a63e126f5448c4c97de31acc23826549d7b27a44422a7e531df28848d0c107bc0e6c07299b373c1b2777aa14e63ecad655ca6a258eb59646544aeea354f1d6a9148654f6586d13e7d9841be6d9ec68fdb7fad8dc50b1fa04600ea7354b23f106352bc6b3a46b0cd4fa057a1c3c716083d3d6061af03698e26d8081a741161a604f83e90d09e30d69f286c0dcddc8bd2100c86003eefe722f032a194c0cc2781840207c2b56876fdbe1d4bb4ead2b39f1c5e092aeb1ea43f568ebadd66d2dee6d7b6b71e6f4fcaa9db98ceb06c31c8ef573182ee91adb55bfad6655ff3415ed65a22a3f137e5bec3bfab67dd9d89adb4e0a0b4272c588827e885c1306a3562c88a8686816114d5d6dfa0703245e0d183535783546de058078171ce15d40e45d50c4fdf348dad9b599bc754696e2eb3237924d3f6d3b5ccdd6a4db4ed22e69f266b56d5bdc6e7a5d67d77a1648e15940f32c40e24e6ba56ce66e4d2985432115d4cc1fcbc9e6d36a77db999391780f7915cce14ebdada9a8b45406dc9cba19000000010043100000307090583420948b46d331690714000058ba945cd9a02e101419540819233200000000000000009344429cca5e15a6e74c1046f819a2bfeaa652ad7de0c80f5a2e842bea858451e1b07160dfade16506e38679778754a18b9a3618e537cffaa178434425f85166e0ed4dc239e62a99b34b84b6fd82eb09fd2bd33c9c52798d035640e9f6c3a80d3ab8722cffaf351d4c95f674f15d996fe53b7465dbdec2175cf73df12f92f172ce822e2171d0d46f745fda7b58ab662b548b14a18f2f9468aada00afde7dd4586e75f00cddd7195382d3846168db25e3568dd5552443f0398e826bd3dfd2f111e53ee0e96f77b33e2ad2d5acdad874686117eda1f746cf956110a70de5a3b71892add42aabbdd4d207116e12b2b2b3bb49a4b1b24b4c31552eb1d60e7e3080fe8d571e42f7b981b0c24e42a7571c16f382265db11fbd1f6789afc41692b3978b6cbd363333f6329a52ba41ac46dbec62bdc0257b868cf680f72f0eebb05168ac54642fe03b51b29325e91a0a057c450e0be6361ad4032632a5263773ab638914b420c36e76da78ef0b44223c5d0a9faa13dff5eafb09ca4a828bd880b1c8be8c8f4104089df8e3f686004179a0322c6808a71db0c35438213ac22c8e3f700aa09b14e17ab9cd1b8bd118d5bafd09be0f1b379233968e79d97085148918da83978cd56c4bdc7926ed24b3e4cae0b7e27336a7c6887798f4be7a9852d36c5a29acf64d315a8fa4c1077f799f0a4275aa82c6ce793cf9017241402308b8a477b804c42fb1a8a9e7e7f33dc3620be7dc52b3a393016b182de4a6989668217ed2f262833e68a1f2ae632c820b283789a9f111ee9dc44b443ccca6d699ad5cb44bd7c9b4257cd46e436c9f3b59f674581f3625c852427e42f0bce5e58e49d10db975469b5d34e5e3cd665f4859b40b0a2889c847b9eb474940141577dbcd5f6eeeacafc064faff876c833108ff9ebd7139985d1b58d965c5a655a991ba0c4726c954f4e0b7674d27b3b20aa7fade756a84d6bbd2e6f19c5a04af35c551f974c42747ebc77f1dd898837174ad2069b91da922bd6af04f385fd70d82b5b7358911c705582efedaf525fc1c9dad0441d2ce8e7cd8546742d9ab633dee49d8896938f8a075be1d75ef37f26588d93bc1636dd5d89a8582cb3f893a56481529d57fe1328367e8675d4c8b2a2500e078794a39ff9c84ab77a685a19a782550f746d16010f9363f1d762bac12944826407f37ebdd6b4e34527437af8ae22b415fd05813d39e6e4cc59a13f212c6a9ef15d770effeb86f5f667c3f65acb6b9e4c9b4f08fa3fe293d9e1deeff42c13d87c03d660c0d94d920aa71df69119121618d51d7a938342303fc507b58a7b5ad550b5530e72440ba1f5a57f5e9368e874d0bc3c74c2bd4b3b76e75b5330b3bc21092b4ab0c9ab493f28a0e6ead902e4de25f6658293d65f613f2baa81b7e2f0b1d58789c6b0c1beac4a718cf5706eb9ce60fea26bae8272923a4a530d3fc23700c4894394723cfb6f4d46d8002c78f1b16938da6a0a81f9fff3ecd1b533c16eef0c62e085302ce636bcff713833e84db241f7ac216902874b5535855b94ece0ffb902bf7fba0a77e1f0d23af3896f7ad7f1fa51c33aeafd1869942f8633a29fbac11c65d8eb171712a9fdb128e4b16a7f2fe1b0f50ffa2502757b7a5703290aa355940379bf463ec445ccba30737a8a71bbcd386c5771e454e3a140fb8217695f1f578300b76f649f4d8a2dd5714b1f28afedf58c8b692b9b4f3a840adc9c5414775f59c56b6256a22db24458bd33fe69c51ac8479bd7c15f018c2b7478f90f8e9d2f7e1fb851397359ebfb70a3cc18cd76f9be6bacba90c5225df3d52f21e948f0ccc003e98aaa8b80b61cf911e1da0d987968baa6619e128aaf2f402563019a1fadaec4ea85719e2f01039c8a7b4e3359a1dfdda5ea5381c1be2bb7d275b089549d0be1934e045167b428bc502fa71667ccff2979abe1722bf84681fbb9f9f75f0427cdec7f72e81642f2a52a4a92b70b67a575471e58e1b2e94f80dae59027c16a9fb6887889267bb51cacee6a165164f5e6f183a77cc43bbf1201551b835b1a2088410fb1ae07594096d92ac7bf016f38d99f5f3763296570e88c9868e86a45bd82aebf1b7af393bff24d19d0de05b7111908804d2c699fd211ac7eb62f73b5d51fc0c89ee1e8701a4cde19851822f72d644c5742cdb0dc771d35c7523915034c9e347305e16d29284bab6e4976b491e0d888b0e6234167f3668b1007712c01d52c84f4ee5fc6cf93333462919fac8f6a7d511518f6f91b5c491f9d157fc130140ac7edd8eb4c36a6cbea45d60498a97462f4993f6d1028d33559670618266db2700fd90ac881752ecc9dd9969af3c08861d7fa24a56093f16d299bc0cf34d6365557350ef08c6821b3e192f4040b253bad34399e891bed39db73c7e18d1356e5b1b6879035c861d068cbb69213308aa4bdd3dbac1c14bb373376218405a3ac564a9c589899f94a937e3efc8fbefb197211dc79a4188f0dc1378de3c51c2c8bda2775fc27912b118c7a6b5ef1fe24042cac6489c792f69314cab511058946b6cda286121646292885c40391a61f1dbfb22c3c2b81ac9f317fdf85d1af5d6a4a05f028b74c4ff1236f0158559517085ee709d94808313827c57089e4d657aa33ea89505cb8389f1bcec63c3374bde4dcbfb4699d4b1d20f29971d5a2481cb708b899ed55d6dcd3dab16dc7bcdd8dfad9b0d069250c3540da453ef18c5276133bb67ec8fddef4bd73037896f86b2eae57d977bff93c99cad6e8045268383e4859b44c374115a00cb1cbf1200ca4978f507426cdc30663951fb24af2e61c0f154234f7f4517e8bdb5ee9f97e373c9cb1df1ddb5c8ee6ce35be2b14fc878ea58cd96ff560f716b8268a4ef3a74459da2eb38a2bddaab62ab4f640d0a9756425d118afde0cf21320a26616d0c1b56079b7f02436915674d01bf059ffffed3297fcc482e854d9e942a723a50fb7bf91677d33144e860de90fef8253c19484b7f2f93bfd7fcf1860c0e230e18faa32caab82a87b8fd20f5891faf6006590914e54a86814a488df11e640ed52c88b6a479c5df8eb257ecc7481371f0c9d7b72f7f289a2d77f563c071ac9653ab727d2a237b67e24aae096986fe4a45e4d9efc73a73467e6519c6d17b48bf76aea34f262ecde1c09eac89073e3bd276c611e7a91a297a0f7bd4765c3404894c0d885d824a05c719b4ca03a066e16bb0fcbd5cc68d720ee7ef5b65ad427175e10a6f00cbf702ed9dad32376ce43d6579c43c0207ab31dd0e88bedb5f995bc098579785d6da522ec1c4537dc948a905c6a199011259c2ece83fe36c5443596cdd6f1f7c2ac6c0e9217d4524219b8aca8b7749ffca79a7218e0477897e928ea99c56c61dd8ef639ba4e7329a47d8da52dcb2dd031643387cacde3673d0b5c59a4bc31e153b37183cd11694f935709abe775bdf6bb0db3cc4045316e7758ea0c408ef371e450772d8e6eb08b337a9277d151c0838c9c3ad752a4e4f6593ff9aeec2f720c157ecf2dcbda40f34ff7109d4f2456c1547f920be537e9f5d43d30443e5d5f4e4ce3559515e6ee3f01b42de00e52cb6ff9578f3426d46c847746bfc98c6f0f6cfa88994cad34a7ba84d3dc502567ed37d6bdd6a596f35abf297854a88a3797588099263f433c7068302b99719bc32f8a263359130e66b4026f242c2f6f63b5b8af68066f6cef75e48b9e495e524e10e20cc297c7e69f0bbd26a0c4a316f09aa81582f62d6393cb9b41a2a80cec7f65d9efea99b4b37e5287945013d23f0b34736ae450bfa23f646c86caaa0b54dd2941a5df4f9dbad6f9d395e5fb5886876ac57a3e30ee63529484e3ed95190ff8111312e586c79d22048049b200e4c8011313a28f9604ad565bba6ab0a06c2110fb5476316a3422889ce51eb8c3fa4976230e2ed455150c8a2e8804fcaf6fd1a19bc2aeeda7da7a89b29be206bcb569a1234922e9df2157a1238626966ccc0007edef8061365ff7fc288ca8499012222a1808cba5c2f07c0208223891ed792a47a9f99b82231766d0bc9786147eaad6399fb81266cee3676671771e6c60ad430e18bece7a68ce602fac783ab48417f035728bdf1c2a9c889f294e583da1253d6a20cbf625dfcce6d9b9e9ef3e991570742957720dccda22b709a5fa1e0789e397bf720c985982402b2c7806b36a28afabac7c8852ce1862838abedf157cad92c0dd8aadbef8e339921b2938b4e57e659fe4c449ada62a0b59598e3d14584df08a959a4127c4bb4c347f3b3d77ff9d3671a8e1898187c01292a00309d3096cbc6349e41a7ab5150e3b7d3499e594fa76283b831c183e337fa366bb92e3b4abd817cd048fd0fe23045a1080e252e3b83fcc1b595690403f04e0a09e521254a4f21b19c6352d3fc33d60927fed64e68ba5b33f63f5192332257002b63005223c4f8ad2396dfc5374d008519ad404e6392b76123e75fca3adef12f863bc53a89c185592b4e36d4d6bc09791e4712a86c20c6f8da3be159f5a08324244b0c07c630bbeb5560f610e8724197d7ecd3b9bcde44510a945a79d9649ae14df3e568ec9f20b54e546bcfc558048073afef6f7b0d158740f3a3cfb0cdfeb0cc04f3fd06c257a3f4fd0a3f00ecffc493fce4379999e3268a191b20f86de07516305e0b7a6a8aa58f4ae4b340e758df61068d3b134e7c3f22190aab94e98d31d01564f00e11558b6ef658d39ad35504c6e6741674642ab17991a840b5a37df115d928475fe4edf0f2e3601cd053874704cffa5a4c855e17e0af154ec49eaaa7f86ca78a0f7004ae49d1b6734fc4eb1f9ed63de3b930223e4530310716b9e12a4f2cd2030305ed43977aac18add7a7963f464164d2fcc956c0f8c57a988d3cceb177d1dcedbbcdbb16b72f0f62feda00b6271bdebda66ba0fef61a3aeea048f8a1f2aef8407a92cf91ef2a890b4a93892c0408044fd9a1e9e769e37c63c7532cad36d4c0573fdb4eee92e75ca987ef29d1ddad5ac9195fca43457d90d8bbe097d89dae20dc3b6ca255951c339c9e8c583f2d6ab9c12898cda4f0ec46e10d799718d3c439daeea6c241d2de7e757d739b7a71117854c8595811343fc850cd35a590a23e5a941b032be63eaab8f1b093363df37b9c03f54cbf1bc4d64ee838103a9bf5f30ef12b7793675c37e2b3ec162ec5235700c42c180c4c5781edeb99297e5792db71771782a167aa2a3b968cbb7d526773929a46501bcc6e5bfcde3bef981af990387e315fc547eabcb0f71c49f9ba1e39123b672f5b2ab70f83664498e290693b5c163ed4b44a78912c3b22ef18ca316e8ac03910c2833ac1c8c3c30ba7629dc446e2e6de3fb183a9c7a203712637d5c09b0ca5760d0deb82e4b8d8e4cb369a4540d16591dca06301e4f4be8984bd489f75bd0c8fa9bad7093176a97decf66d6c523acb15f1e2738cecd297abe23322c360ed672e0f8182ab55e8b875b4873c5679efab37bdfe0cf184ffba6cf4c22c927b52ccd984810d9ef07c97f5baab67a525add7427306baf7148452d295cdbecd78d8fa94cdc10be242f35153d7e220c941232e51e7863dcda79e2dcbdb6a9b6f1ffa3a5bb94dde826b98653bdb89cbaa55eb0dbac74379b696556960124baed72a243625a2b5f1e1dc9531f839029e62aaf18d7876d8df0c88fd670d2dd6f84a8bde17956df84165f2dcc47a8b003e0cd3bbd5b7976e2e5a8e6d24bc10454faf8d90b4f6580fbb6d1dfe594238830a18429164dfa4d1db00434837bd95b862ba010051a067d53c2fea3bd838d882e75e67ed3eaa4dfe2909bdb5dbdfabb464fa9f51ecad4e39fdc2e0d4f7f091bf87d0a2006b1502f0b5a11ee24a6cc0a48ca3d68081dd6974986ef2f81a0862f8f22e729bdcb53fe25c4ffcf9a0b3ef40b0dfc2bf259dcb2b948f03ee6c91bfaa1ebfd06de9ed0963b703272b05ecb1187e696e2d37a34543e8b226543f11244cfaef7dd782ee5fe3eee5943245d7751fa4b60ccc8c8117f18812d8610abd178a4e0f150cdf72058cc5d71a6b8ba4d1e529dda772881c0bd5150f1c111cf0471ad2f5aef59e77a2a93c223b8b794176e2727ff8dd982453ef560e8924717ad3812eb92537e4b82dcfc799d58738371c9cf41569de730f8126c7847bd56b614b1cf34448d7a24014c2d0e76aa9c8946a80320830a63a49c9f686580bdbc7ce998abc6f491660c6f72f2315b25b67a26ab665713c8aa5806d21a2b4805e89a9913263ba84831f541777cdfde6309dc719a3c33e6473d344b4fc4f3b175ced0acb593b487f20e6b7deb99bf18f63a193006f56bf90714f275aa68999f1796cc9a838bac89b8015f26e5fe11b0a787cc825f75244a490d2952eb9031a67e21d66b10bddad4fcf4e5e4d3a011e797f98f1554f9fd29078570f3c6cfc185e68ae8bc5af77fb857f94a7c3c25987ed5a413cae6cd35bf05d64c7e5697f83ceb89b59ffb6380f14f47da6326f7f0d2bdc092fe7fb1087aedaa71dab1866fbf36558e769a22bad4a2540764fb5e55f7283a9b87b044f5176e45f945d8d501def1180c06d0acbcd96f24925a529cc13c23959e7274417b7e5d4a1fae0820fd48afcd48013254b9b4314b020651b10bceb4d20a1254a3c96e03f052b072e7f2fe2ffeca3d26d9ea012f2d5952b4bbf95b6e9ab521478001fa56d730fcc797f9c4d0e2f375d2bbfbc7055e24e238115b70af651c349f227b0a94b18e1ef81bc1a465263b4c959799379f29815a6604cf81145b80f80bdaac3451fb7126bc55e2f0cde0cef64ac435ad6bf71bc1881db1abd05a1bb28e2d3100ede2bf5d39feebebe712558b33b2e6c45e169601812ab85c5a9b483b84fc0db887c0c38d7a6275387de928c6527ae31d4797bcba25807a5c653921f845099d2a7bd29e7333625f1a530290a983883b576537ca34793fa0cc7b97a2e803db3430d8e25a99f80a9edb474f82f61dab223f84f2f1ba00468e5156f396aaf226bfe9c6b32fe6cf4273435e0a33e3683484287d85b8eb656c7172f29480f93c3a22bbc9d235f27505b3f693f7f7ac337288c3be8e8ff338e7f86fd641cd7109314d9c0cf555401a497f2d25df1f483399366ae0b343c024ea73d861a6d6e343cf348ac8a065b9716807d9cae6379859c2140f965edca248abaf821b9b8a17f96e189b8393b823ec45ab745788640649c316a9874016e0a136093eaab8fb907bfbc92dc65d12442850c52c848b9fc5e1b0d8ace1e02c4848b0aefc6f66c16d599e962438b09c0bbfbdc22164614b1f3b913cfeaae9a83841f79c5b5a3216530e8d9cd97a0c757d234afc0443b9d607d51e42cbf7aeee24b13e1111e3377c0b56edbb91eb1475690b11622bea53bba3d187838116b464b7ca1250c08741a1c1326eb036dcfa24af51c7328ff08a1769f39cb92125f49388425daf5ab628eac631e9b5193f0b4d7794a8b4592c48e64236719801dfa6a5256b3e30e8a54f77b5f728be87cb7964c5d31b9b556b0e80915bb3ca357de0af8f40f9bf9978968ee4ebc4a8b164f96b033ce0149652444b28989057d5b63386174bfd37701ce69ccdb4b49021a23b8f116c16d3d93f2466a9792af4d63326482cd5ce2814e21aa94cf9cfd30376b51e522dbce08e4841830d8bc264ded6b6e2b063b33ffec577fde2437464bfd4fe83a77dfd807ee280969455abe1a1903599bb99eacbe00a3ce47de189d69592f0186c416854e5c939d248e767b89ab4d86ce153fe62d13ae771a0c691cc87ebe3788a31501622656bfb25aad6b77714c1c121862834e312f2394c623c407250501b956bbd769fdf07a1deed4fa85b80802f56fef2a7c6efe5f9c36a294dbae64af236296839b3e05cad901ba0b4a1f177272643af37ee21bd0980ae79527d37499e00aa4b2ca0c5a05ad1047d49156edf1492660dcb85b53adc162c19306a43647ddd382366afc26daab6c2fe44521bd1f9b00f5a83ff02c27f305891ee96b61947e5caa34eb883481a7a2188b20c2f7a6043c068f5303f84e2726b5c1a239db0fd15fbf1b704db2738e2fff9133a0ec0093c08e91483509be2af02e24088ea47da5c68a733ad7743ae430fe09281054e8c32e710241a3c6298ba8d2751be912315caba13b19c168fdb0f762c616b59e13a29b350d3053578bd584b1acac6ce978ff36fb23b6634aeeb287ec3f006999721ffd44af98d44d7130a87eec2462487a333530f548695e1c1734fe7e2621e33e4f0a19df0d850ecec4db63361dac4703351b8beeda3a6156d8fd481c837671a9a8f1f2775035255cfa72da0e9a028f7023fb0862ea188d2280bbf06db2cedeef8a53186626c479b38fb5a6badcf3a73b37313a433f609fe11104ca202b96d91f4a0d015517f9b7c0c4d0dad08e1d15893a6128192cbf65623616b5e3294489d7bceb1fa9eb7d239b10f2421c923c33c76f47200e006f3cc03c6a3c9bfc367e6c9ccd0f683f8ac9db2137ffa2799767066795aee8314c4b696317ff75380b739ce5dc8b7e7d79171e20a4a61f7fc27201b62b47ed59b3b277b4fc9a10576b842de857870404da956b50674ccdf48c2320e637f6ec94d55ed729b142793a20f710a35f5d1a889e3443f56e9908df204f04d02e852d3457c58ca709debedfd71486962a7f7cab8e9840c3252bf3856f35aa94ac254d9e7129cc9c4cca7ea4d095fa7fdb8f5db7075ebee5b4bbe16273f261ce161007b4f1abf0beedbecf2377aa9c87a1f7b7a5da296549cf58f3d458c396182288e23ae0704886031955a5ac7bdb0e2de773a40f2ecb7714b4a4b08f1cff2362788a35e8aa48cbcd13c6b5fece8df4a2a811694e364d59844c023450c25eb924959e56ccecc0ebab049f55ac1ace2307ad24c7cf583966c1fc53a0c68e7a0effffa808810a1d53b8e8cdf915e9cb3b3c35075fcfdf09ddd6c014dc17324e26a590ceb1e0643cb240b799fb80bf1ffce8beeef76a51eae8d73335532bff117440a8d773e1276b951cce89bf663f2dca839f7ceda71da5069b9adda46f0864ff2a749ded736fad4e036a25669fcb7393033d063f66e63edd6c6e9f5b8c3ae8616a60df7984fdead0db3db485a537efe51edee3b488c3a2e75da8903aa5d7ba497e67c15bbeb73d2c16e4971b0a7ed5f77bf7642d2cd472275f5f7c8ebe888f1aff6403c12e714a6acf2dcafe8a8cea2c47b5385cfe80cdf2e25280a0859b671986111d996914d96d6b8542bbde16c30915fe49d2ee883abbd4432470f01a570234805fb910fb48841ff2821b8882b415286d8ab6fc2cc2c390b45e186880b3ddc0d28f07911052beba5e89b621eadbdede16c6777a9ca40a8b01062743496f9ac64ae06aaa3d8520ba140233fd9910e8066dfef66001456f586f042c27a0f228b232ad2001af80824d4d56027a542bc89c9bd48013389194bc44bee427f9759bbde05654e629a66ac1a5b3b0869d1e94ce6a9ed1ce296f4b092c812a991863d354ed2fa74720752282a6a101d7114fd22a2515a49a9fc9d54e0068cb37e5a7a5be281d245433cc2096f11bce3c8a76ce9a4c3e1f6cdd7b1672417f216167f1b4cc9a1fa7bb218cde5af7ef0f3735fe9043446be3b093e8b1edc74e7872211752530057822ec30174cbd6183be9a3aa56a8e883c1ee0702eddecac621a29be860c77b797ae76684f344156eb21867b9d5c77d6f13c82142ee709d68a9ea966f2b5c2bdf266d25fbc4dcdbbb74b4fd6537c916edddf2f4f0b8a7a14fa9d34597fa0747deb7639eec65c7bd0e606e177e9f8dd0b4fe37ee775124af005d1297d0c8630a0c1bd40a36b1c1885ab68d3d784ac8c452be88e68ac81bdcb87f77a64aa96dad3b7612ca78e77f11130634e984b9772ec18c0c04d9e29bff36f08f0216583e0b0b27af12476ef858c3f88ea0aba71a3a1085a81e5977405f276f9f1308ee8d2a5f909e61a68d02b83fd3490801acdc00b517d46cd0d9e1b7d0ba8b687c591e8de8708eac45cc22a2cc15a71072a70b30ed9a806f01c65776be2ce9b53390b54b1237d8e45fd3c93bcce77621f0197cf73f425cf926388ee86e30f3a50dff63fc93b2f4cdd8cb44d55b01322f9773e18e160266e25136a467bc01c05db0db3f2493c51da4fbf6cd0033aee2637fcb8701a7cb2c4f74168feafe03c247cfa730b27771fda86bf16e1e202100dd5cf830c5ea56544f724f9b6555f21663550f1851dd45f3bbc2d067cca80b2a794ba9551225fc3627a54b3b2452af484ecaa0bf1f7dff9c0d21475af5d4305a66c05c0fd79cac53ba4d37a7d659cd19801c9ee28305e38fb3f31caaf8eeda0ab6f82650f5515c8564293d318d196d1944f78af32bae40b0f8030fe243065d0266344d2ea00a65fa3ee6e9c167ee78a4970bad2e3ab85309ea5f9a8baea61f504826128afb0dc0ecdc5e6836bef623584ee4ad90fec62a20a89cd3a4880639e5c00625ce87002a940e9e534785564cc1c303084b46675a8daca6c0b2a26be0fcc2c346bfd97930921d711454e4f8ed31919c06c01c1a4520c75e56162aedd8de7ae3e2b4c0bcec15e4779e361e1a6e798facac157a3059781cefb27b07f0bcb12cf237f8d4b5c7e003887ded14f601ba27e8ea5b3c6e7cb7bf990ee4ad0ade0dde128aabc7e250b6010b5c2294fd0bb6ed35a88d06a3eaf307ffdce67303b5a58d6724eee088ab3b35e1186b9593cd15695dc0ffd8c2d1ba57a8d1254c05b1ef622d6e5000a3ae8040f244e9185f41a88b00a58935ebfecb7af9fdc39f2e073f9e3d582028fab9c060f8022504ec5d9561d0f15ae0c5d9b1b52b77f28f8cf5d50c7c8306e30198f525d119690d24cb0823595bcffb0c8cf599389abd4f2abc9310ddae429ab9ea9dcd91da1214163ed508ba521d952bfc0f7304992619707ad9d7abcbc9d5d5bbbe3d2157d0f55abd6c6befdbc07957e5b936e067aa374a36e28b53b059f994c615468b49084b663fa891c5fa62088fb10e1c966fe6ca7444af2890e9fd35184baf39f84febb93d16864988c6fa99d6c09fb84ee5f9df9b15d305185a6760fe2b4e3e853478bdf69b78829a0a0b7b1a9479fd1dc5de1f3e9310fc94e345b57dfa5c07738c66ea9d27eb7ab13d0df3cfd89f0028f45086c5635512d9edcf66242318004e73f600156118b91cf32b2d3371d372a1e4b40fb8e8af8d91b925a8b8fd84199c4b59b1bc7a92ad8d8cb57173f639b988b8ca7feeb7591cb707356f92eb6981dc1e7e49a89e08e581bf1a01ff053b1349a02aadf339f8c2554b8fcfe425762d1ac1f2a1d3525e391128b0092a81a0cd390974169aa3d32291f9d41f27ac7cfa89313d95c115f7d10fc146d1e4a334fc9772a0c0e14db9ff2e8c734d10c75805e7cf93ed7f76614ec7b7911e0ce29f67f2d83413ddc3f2da1b529c3851c82b3e8312f28d76c2a934173e0cb3b9e5cd16c95dde5393e8d44828e26be8ccdf0327645acfde03816e282befc8d96befaa21f292331ebea2471a6e868c654ddf565d60e9b16144378a4964fe7d22219b7ed4c0f36f0f6317eec635e0223d5954df5dd55eae14be3503683cb9cd4bcdbea1d911dfba2375c59d3b6fbedd0184d27f281fcb4fe06b9f96526822352c6e0e1164d1923623dd6d76102b1ccfd4750176fb143d207279fcb2e6b4975fc6781a4a74eac25de29a301b96394d880ffa5698c135104c4a32dcdf972d25f6eecd746d75a0674b1742dc3306265bbda333a450af3e4bb4f21c63e6e97a9da0418f02770c51029f92145c75476ae6a95db56c1bd1bdd5269c37816aa12f2e1cb7f695e366546b08ff8570a5a5d3a643ff7b3926c656701342c06d8643f38593139df661f58a30d6d09ceaf9e00bc20744b9dfe9d0c4bdc8767ebee98c349c9af00e08f021efa7f974c42ab0ab295fae537cfe0f97f431c17ee5fa5171fb87c6fecfd47e0af2e730bf96b6cfd2e6df4cfccbd27f4ebea7cc4efff1829934c58f2db1981fb0574db9024605553482759453a0d85b1f277f34f30810a474e8f877525c9958d5f4c218b0f293c12ecbd1fb4a4d718dc2d2404fa688b336c873452d563adc60ea9caa79689d01fb3fa6e02b07f8e87fd11be85dc03812862e2022527c5a4dc4ae4d47fe45349bc53fa77786f3244a2aaa86e5ff3784fe730f5e4d34c26dd7190e39e85dd61cd8534d3366ddef49cafde4e7b85d5683ae9a870b05ad6358d09d7b110e181518d1eb7ec177d36411714e7a6ed02e98ce15d3c7eba8b523f0817e0b3d2b03f42a61d3445355019156b43099a958fdc6f88227ae222bb115a2eafb8c6fa6b3eaebc1c79ba43f784494c8357c14417205dc54f27c636c6068548341ca43a688c8d295f86470ce5302c64337c78bbff9b49f8a2dc84d5bd27be1f93f2e16ee8ca8ede6d3e0b871abb641739a2fe632007f38fe6d5b6858af7c46732338ba8fbb7c53d1b0e55b4849d49ec2a58da882b0eccfe546c82fc5585f2b3c0a3a7594a0761cded823ed7d0ac210ec7ea30e084c665662f0244aa99a2e7f2b7908703caf4b0e40d9c34b260a93a7c4dbbec2106999a7c8bedeb622794294691ae199310abdddb6a2479203a5a0e2850c1ae53f8a6681d80d49700d5a069d124364bf5dc187507d69b1ccfecf82884a5768d65af67814cf95f38da0a18c059e5f449e9b8f80a598f1deb3ced2c72df8f314c73d124ccc6452fa18ba73652f3bb9a14ee7680df9ba979de449545696613cc0db62c39c60f6ad65481b170ac1e179d05953b743b98dc19f865fa91b890a3628f8bfd394b54495702ad64c82edb67289841fe2188a498667c0278ff7a8d13b8dd361bdabf17e415f17e249db10cc2d502bd51f613674138930109813248b76e4d4c703be717f00ff68566fcb9b48356a8448ba23a23db9bb34066b4f8a17e9461419bf95b78280e4355de2ea1e8711afc99ff1591b430f629a039fdaff70dd37cf2593c823f0da4ff99504a35124f127d68d7800ae2efca09d7fe5d5f76b0c7eb22b1a8fe79fb0577f91f94f80ad366e8ada4eae00e78fb81f143e0a37b25e19287ab7ea3954e00581de12a8d21e22fe17b559682e0cbb2a2b60f2eb31246f2dc41ce42e5b0960ffe9a729103bbca9050889150db2e4d82c29967c0268e1a946f3153526c80ac61f609b5933e607c92004a4de555fb096839a1d4a74f946a5cab65c3dbb5004161a8049aa7acaa343a54c7bdb488ca5d5ea169568c3277ff0698ce82da90831dcdde5a9f3783c9ae3f99347860d6c5579191b7247213339aa2e6afe29f7917dc1051f2830e5448145cc9f4bc37f07e153913fa3a58f4de47b13eebf99ec638dfb64ecdb8dfc8fc0741cf85065c5fb37bd6f83118e385386f4bb5ce6859d4d944a89ba7f75c0a29fd3d25b0c8f1e14b2e93ee0fdbefa605934a92fd55a1257abd46955a8af5a71eee301212dcc34a68c84f0760358170a6fbeca034731add894d259dca72ceb7e1d81aa810cf27c8534fe1c1619a4a599fa268156cd26a48f21f50a0196d146662480dbfa6a8a6a659735517e5a9e7a8247b20692e85feee642e134ad6f056550d6b224f08a8ef8ebec51076e0f6bb7bac89bbb507a32946982641d5207b5a562b61895e279c5562647e6a5f24f7e2d7b5288500ae60a9d1a1eee4af52d5ac2220b2b59ba8e508a6648d526a92de5b1eb4fd87020782563bf2049d32ef539ba09c4ca0cdfbc00a5e7801514147de58e9ab84ecdf9310fb34dde9b55c76b8637cdfcee5427b3000696185e14b121cfb18a62c66b2617aa83df93f67d0ec619aaa1041bb0ce2bfd98ad8f7aedde53233bd4298e4187945072b864c9909c65491ed8e16eb746ca7a1ac96640408f39cbbd531e07dcee56ba69d5a67aa1b69fcf3202a64c00abe72f879246baad60c3e8a5758f5fdf4e4a56b268faaf451202372e63e2491fc5011f616c88b02c61907a0eae139986409538eed9dbe4b190913079b02650a3aefe5a262b98e783fc26f439255fc3572d2525bf29e9e6fc17fbf95079f2360030e9a5e171b7ee82fc3ab1ce7c68c58b270dc3cdf1bd0dc3fe9f9c5aee26cb235fb87eaf5e43c09ffc7be05eb5374e7f248641be2db4ca0bc6d3525868be85fb32ed7dffb835364bbe388af66378d89e4170164beada2d4c07a9b5bb0518790e272f10181776f8f79d790c1581191314e451058fc132fc8fe5ebf7125dd754afd76b5b5db21c512453b0665aefae243e509995d1567c66eff414489f71a2188e0380a8cac54c1b9a4b127b258e8f2cb126172a11ed7f6fcfaa85cd56cfed7eb434e2ce34d28a7bde0c9dda0dd2d321912e4cc3f9632c732674d889db551649b81d344e30755e3604d7a02e3ec23833489a25c32807a7696a125e12a0ddcc23cf13da1c8ecf441c7509bbd35a026931215eb22f14e7f6f676ac7d2a4d7ac2eccbafef3e9e492ce1010198dd9360de97de509f695ad3e8a214e9cd11cbc64426b8f347830a45c57edaf804ed1a98fffafb54fa2bb6b71dc5a12314c8100c0ec78209e05dcfcf7209b41689633d0e08026820a4fde282eb1503d7acd99ccd433e2bc0ed1b49aae3eeefecaf66b7bc1f9e7078e1b393de97da3638cf3743a24c0edf0284755497c7a966c974cfe4b42a8e9c7ecba26f1aff9fcbc7a1f2711d7702b9850bfa11c144d37f0c46fd8df5d140ffe4f87f18ef3e64b9c5cd6deea4dcfa1c6089d46564cffad550ee0d0f7128da40edd75e299da66d35001b2df570ebca5259db5fd50877667bec2829e7762927ddecba12c9048fb5579272d190002a55833ced61c2cd2d5b78b2a5660bce6b6b4e88df117b1118f9997f3103020b7ca20cae008ad9fa8de64c5f21cc8545bbbb87342ccf24538b9a1b4b0ff740b9ff03bf0c031468e30076d8b9c67d885e3e5e71ae142cfb649d1cf822b900d948af3cf899f8b5504bc8bdaaa897fbc59d7cf03360dbf49cf00c50632d76ac71b66cb995833b4fcb13f175aafada7e360a8b5344e2331afcb2b805d7f14776bd04ef601d74d3bfa66078794faad216b9723274e62e86218abbe894669db8a725c4bb8637874d212f9d301be133bf9b54eaaadbbc24288e51ca161e4ebbdb242d928b63331fe7201b8aa1ce01f0344a7831b92babd9ea22c0a718193f7706b14f474fd011eda28b19a86d4f7bd628bfa860bdb3430d2cb7ea7f6ce7c773cb8ece3e28490616c4d3a6301514fef1be1c475ff6452a80dc8102875807bce2a73accee0ed829fd546d877fd07a862c7e93f45e10c960e728634e4ce7c5862b55176bc0c9109be92608dd07a6ddadfd9a480abbdb59a5103b74ec6d64815a5abffaa2d07787d368cc6270be4b757a35c426f11dd2df2b1a406b046778ca4f7a41e935a34f681711e565941f0d80be051004e2180e75ecfb2a054c1db05d8f3e11773a0d3cdd7fcf2a371b92d6bc4ca4e1d0d3310959a46207fcc40b860eea7f28e20998bc5b5c525356a97589f2a146ba49d639205ba310ced996369e01738fe1e8303ee14ab504e30945dc6fa7cdd4c2760ce0ff34d7539c5eb839968877e95c055512be54f48363316cef60083647b46c56445f9d3278da60c2b6b14562ac5d20b0ec92c036fcff7082683d3b7da81570514b0a1b532c8589eb933a0a880d7fd9ed27bf2d63d5bce07b8fed7aaa2ff217589645a936cb62321a082a1e983e7f6e988b0b2e818b0a08658c7ea1bb7b8a3b534f7bd1918fe50ba3e1e10b06aacda26eb0ad4a54a8afb6c0b542384a4aa5022e8ac8547c0965070ed57bc3a2ae3c735a3f4661f9ff2834fab0e740f47b1437dd54c08f91611da0024f5a58ba8064cfb5b618faaa235d7cb55ee7c0346c7e6ae865ca39999ea9e8967cee31cf0baade9185e2daf05d9c53b9daa613063417a72477fc326307541003ed9b1c583a361803627c90560aeb58a5df63323cccd52d397b568880bcf76e450ed9e1167a2e3ebbe2ed5e50cfc9c89f267961e14c28c86e7f0692698eb5c441a9a49faac5fb5578ec84d1648206c8b0a0e55ad94a8b1f66d72e8327f06e58006eb6018490f9bdbe01d024428422b404c3927f8637f8aafa0691dd14aae90215afb70c5980034194ccac3fc380da5f8f44305e124d5081a21e108c49378475f224668e9223483838c0690be10dbb54188887619caa3f248668a6cebab64a90e4ec85290dcc6962ec2a6af0da4623fdb296348314363e51675f1c2ef256a86f1eeaeeb26f6b67c809df23d8c791fd034defa0c89f8eb0e28d77a5298d1e041e79e3da73a51339cb5d0cd30b9042c11fc53e86e5040881d855120ade7912b17016b86dfe3a223b1f58d78820dcfba4cf4b077b199302e545686b438a94fd91dc4febb9ab7c3f7346f98da1cfeccaca0f542dfdb6c29c47e0fafd64099ab0969aac74c4ee9ef36423194b4e3a32c70e57e07365173a191f2f301fdb46a0531dd700e0bf26ce5a10c877b3cb76eb5bbabed86e6ad41c11d6fefaaf4406234df23e01419533ac0246ddd3ea0d01ca2c8af75eecacc5f027218fcb93f8155466eb24487249fde91b5871ee8f46e106824ba506ca968ea06c0536e53597a0dd7b83f959dc020866191905f3cecdb3f70acac3cec12618347cb2119a8367bada97cbbb96e77b2d6607507d26837e90c6207bac54401a6b2d7c34df7bd90cd9e96759e22e557ace8a60e2f5faeb8649d2d0b1519c238c20d16cdf38f7bde677736dcf7eb9d124a86cd87c62cc0fb83d6b40dba8df2ccd6f53f5bf49d9f82b1e1e283e0b81d3d39ea4a141ca91820d160dedada9ab91ac9adabbd0fc4b543c8623232a7054df2f853f9a10e7211a4648e6d97c9c736f46bc2ce3eb8a7984af4486876ee6f262e681866247f6a62a1e2fc41051d7809fda6de444856deacfac047ce930e9ed0331273a99767d3cae647bb3cde4237a603d6366ad75d1c5f507400fa7f484eb3ebeea8f6cbedf5fdcf0de3eb1f8dbeaa75b33c7eb7db76f027ec61f5767aff70b37f941a6f9254fbeb2cbed331dd2b9aafef3c6ebe53b0862c5c5476c9fb7bfaf08e3fbc6dfd9d43704fc38e0071f8de266bc32fe6c721a5e08f74f05e6870cfb2e27dd2271462ccc2b0484412911d63e37778f6b58a8e41ace14ca0c8bf159c31bfbc9c6089bf5dcba346d5f27414ebe4b2cb09251ef9d9a0822425e7537b046fb97745f751c77e78d9f5d0ad96fa226f87d0c2238223972426205ab3e3a8218b3b84ce42e9b216392b5b0f9d9de27fa0e1fa94f19a514a015ababdea7cdd7709314d5d48202760c8c4b1b376854809e3479b546255e2e2a6c2080f58e65ac1989527d57d2fc9f3c63f4d904805c5eebcf70a92515c361a5521e7cfd6402306ca1ad88f821acccafbec4695ad4613707e9b556f965641280025d7b63670d52013789fbcc2a8f4a0680e07679afbabb1cf5c100c3546fc1f4ea450190f6c6540e4e40b3c15ef5e3c365394be9238c8cf00ac069e2cf18d8687a46455021aea1ef0353b70eecba0260f37887cc3aa455a0d98c8569c5af1b41d14c3561d884fd6546ae60f19934f65987f91881968af9b4f1360c301b8418cb71883c6cd4afebf5a2476004910215fdc4d19585b50ecc8f25aeb8652f8dd140d5acaaf9674bcf88da79bab17fa2359047137321a5a5c44b815d3843f54270573ffecd72b695bb6e4d6ea1f2c9ab1383ff1cf0472e02b7d63c884f068e3087ed34a9df0fdf637983b485a78076f62c20e8c444975bc2da8f6ec6b100cef7a4adfa6a9f7edc275643bfb61c0d2504151606563d6e8537ba43045876dba1c2b3281b308edbe0ee0186cce97a8ec5d540b4f51e5a6eccf07415b8300ce3d6f65bf19403c71a8b764415cdad98326dca31101aaf391c52c6e267740fedc57ec3cdb6086c576ce1d65ddf6778e5b7fe39f482f6743a7671794378fb3f99ca849f933bd7dfc488294da38e173f31877791b7a7bb9e5661d14adff518353a3529632eac2796b8808c98344d61b6224b9dcc094f202e1e916f675b8d94a2f5c740f400611942528cd9074b6c0ea6dbb16fe3118585eeac665bf0563600a92684bcda2c78af54e431c636cc1197f5547afaf8e3112e35fb4c459d658a9d43b1caf0ea98f5544e5d93789aadef0585d25aa6929168a6f7eb7b8d6937cc23668339bc30504d17087a3016363def617aa53918caece5bc1e6fb0bde24eeacc7e186a6198d95e10334cff8601fa6578e3d85170df39f1836f82a3a2ffaa200b00ba8790fc2bb926824628b5b53096a659df26fcb74d173529e5fe6f74c88c91e3babc43aa173e4020029df27b715bf2ed8ed8c475225c2f75476cd551ba81ed603236ad80b33338edffcc1ebe4b79e9339b133012cdc9ed1280bc418fdf39b386b206d46301addf126a185c50bc84d2a4539323afc4421b9c62d71ff0b916903a4ca2fe70bb73b4c86741225b4fc457286e27ed483f84206229d174f7511867233c98101402960a7301ca5342ede142882c502d20fa881222812662ff38e6fb446190950e17e73511ec5a4eead1b239ff6eceb33d7848e404adf890462746560032d80d67342f316e1f4d41eb449d810c7456c8ba8264cd84fcb0ab666e2de5b720dfd512311a6d959ec906ef0a334513181d0a83201b2ddb079a516ce50451f91b9d7bacfc57611f16571b3ac618ec9e09089fe6dc801c0913ca4a1e283ca1b18ad338bf2540484f909ff1dd65ec7d050cdd1ea531da9833f6e36d4b16bd5d3a615a836a9dc5d1f63987a53cce643aa30e06774034210fb2d9978637a7c733491100b39dee25fbf4e67525910f4eb553778b92c760657a4e3675a6331053062a2a6ea0c56302534dbea53ed83f3648c290400e0e80ea6e2e83790ed9899b67bcf733be8a9a394d169fe373a0fe00fa3c2da19679dff73b22a9f294e534126fdcee4def9356064a682da334ebac15a6f98da936aa248419ec42171dfce66d9e52a5f42d6aeaf803872a48697c84dffa5f35e07af38a0cc5cb8c504d332624bffbabbd75d3c6e52d05ae561c122ce5aa00cff436c0f9c00c401777f60cb4c396ca72d0086cea850044c0085f443b1e0082951556a82df904d20ad286cc813fd0e6fd5df6d25f079ddf5c86fc381cd720cd1cf4d974406c2f2a17dff8506f32034f45feb3755db1c221ca49f24c1bb8afb4b388bd9a92708786f1876df8aebe1229dd13e10e7cd56d99111fc73d7a0ca54a1dae32593272c1f5c6251ebfc4fc49427e08dca9f334e70c448cff82418aa1f1f514db76061088f1ccb8ad79c9d79468f5375fe4b69afb6b64d51f47799df421d27d63c9e50760780324e83f0898ff356007004f7a82ca6a5864cc467de68459c8af6a132cfd820ac5c54c0ee13843d3f78035edb5dff909d4b43236425f1806d58e005aeac80da924f0b33252054a8592892c7fd30c1044d9920a9b9d7917b005a34952d2d6e3f471cdc45c200f88a298584249088e55eb674a49f24d317d148c2b00f297bc2d4cb0aa3ed01b1979ce9b0d98f14720ed58033165d688b24e739e34b0189ccfa2083485388bbf4627b696c56178322695f897dede97d1e18471dc9a440b50f42dbbf10028e1e7a3a654f3e51c67e78889e6eb9c52849dc4fb6fc03674a565c8c8cee94b5a767b4e862871c76374fca3e5dc5994d691c4ad630d62b527aee8f3a3106da39f9be59cc475219fa1832fd23dafa743fdc025ddf7ffffbbf9e70e3aeb79755a387e5485fc2a4333f392f48c47ce15f5f1faae782e016bf4ad841796a09b324740c31961df7ecfaf97eb06b015f6be2ec43baec2fdfb8e6b0e8ed8d81e561a96214cdc4515e86797493485c148f2df0d05f98be8298ecc2275ac23381ee6c7ba8cd79cb7c84e709a78f6767bdb4386f2581be15925c81354559e55c3bbc9fa521a392ca9705bdefcc582d04fe2e939a3faab19e3ded5a69dbba06d5e9a0c37ad8aacdae579f358eccf7b0a565f35a8c04da35585c481f9e34e34e836f3ad889817a7540007362678c51df3abd01977a8cd92a00d18cb9d429c8a520d50c6ec0c76584b92f7271da7e871cd36c33dba65241ec1ecbb5016a4163563e2783d6f2313e2ec1c928f687b9317c481ebc9f01ea44a0d7797907efe70c408b88f8050cee3bb72157aab898e25274281d2d8bdfccb2f447774d9f1a2ceefd78a56ad6eccca1ebab91eb4b998fd944e868816192b2c86324e534a4e926f4c01c22dece9919e4ceb362290fd1551a33d0923d2c111b05e9ca50f1a97e332aa97080ce211f8e65f2ade6efdeb2fb536c28efddd996a910ba68a02b78ef88a200199d560819e2564ec398cc207e16eb085ed90b72594c1070dbf9f7ea74556ab0126cbfc8cdb9b0d8b033824fb1918ce56754aa3806f4e5aaa6262e4eb4f33f16466c192db7b8c3f4cd23ac5927348e98dbac955ef208bc244dc6938d6f11ae73db347225c9c0fb25c3523a4e0ae0013ef8074a9fc63a2c97604b08189331331d10c94ccca230747d2bf0adc00487ca053998965314f46b2401631fc955466331641009ea2391d15a86a86bac8f6bce602a618dd411801583085275fbcb1b665fff93b691ef23ad9631e9eb6a63f8b02d7547a51b4c612b4654698d7225c6c53df4f3cd8a730bc641315eac53ed3cfba17d391f7261045f0df226263671ff6cd5145a48f8d3722790ef2c7d47941df39cd47a9f1204b7b67403e97756dbfd201ee9bb30a714330c0d240247d069fe90018f7bab038b4aa7a0ea3f6a782fc5bac99dcf2f5be5be9e5ebab25f8056e0e1636a9272bc88f407d56e962e2cb0c3f99b8510cd180cf3f0ce547aabeda0d8fa860682ad1be2d2c9fe1669522fe41da153b0d26a1e2110f8413660b7f7598673284070b751a96508336d3ba128069ec78b6d699ca018a434b42658c127890782b858a18283abbdad62ea6bf39c8b4e75cf304d176d300934a4e65df3416816300e355da6002e8915965b5c0cd9c4e604ca21788c664c630a524f00c764c2ad3cdaf05631add76e5ae0552f60c94beb1a802b7d9fb6829d58f7bd60b5269b743c9c8d6fb45285470c6dc1145a3dea10d39acbfde31faa31e7a3402f5851ee71954573ce61010b03f3e4f06b9ef92408eea8428c99eef1952475fa3a2e0efe885572ea5f661e5b999e0c29dc4d43f08e46542d8bb812d8d1252bdfaac65d71864cacd8749433fd239a75577604bcdf228c20e175535812b9f3f1d423c69e3ac382161eef0b9cc6d57ff08e16b3bf16006d4c9d9015f5468793682050180e9c33ce0b34d679aa1ed38b86f67bf7ac43b1b85329b1f065f00c9f05450e688606574a4ac2e90143b00d55b42fe040d13a99a1e5677fdf7ccd5855e3b6e9068f50ec47f916d8f201e306cf8b0c2c645564017a0da6db5f3045ca7e02d8be4a0e6d3831b8066953a09cc4742fa18629d3c80fe6fdc72976c15b3eafac2b1c70c52686402c22c1355a95b581e97ccbc1d00a13b701cd6d56686887395472cf4686eb7f6948fe42417a00077a1884844180254fd45e2b4fc7de37832e19be2e98f48ef5f45618909037947f725b7917b725854cd192eb7b0bfb778f94423f2b075b31228eb9cb9b364348bf86b4fd7e05432978b17676d69358b7cc604e786edb2a333d66fc42ed34998b1fb3364af582de3600cb49a2538ed66677097fe55d0076de65eba74aed86118c2863685c9123885cba105c09a03910d6b18bc8c01c1c5af76f6b213149a2e719cb0f400df8ca67bc814bc804dc1cc7db97e8e593fc60346e0af1f1353e2142385375de2c2fdab044b93472bde8f33026789001b12b5b9b9eb0b58dbd3ad53cdda441b45533f08d309ce9c0f612d98ec95d41dabe5d30f3a27372bd0a53c8cc3684fd63b391460ebec694d16ff7bcebe462ef990d8e25b194f836149e5e4642948033258fa2f7207970f6a234e06640f509787a7ed67dee35cf6811886cb6cfea8edcfc8cca2cf0d5cb54e1e84f6d1212585bf0c31474a35b6a2919ecd8db80593942dcf31cbea41713beb63d64c9074f947015392a2b84536ef66fdfaa6462936e4a9f8585bf982a2f09ba5e5026fe4bbc1edc3d2d75018be4cbb324cf6a6ea524defe1cde1b3caa0f7429ded82c63f1acf274c54c8ff6b32d2630ace61f87ada5c2cb3f1db32ae54d6ba94e0acd8e74be15c3583c9fc19f8d6ba6286d4bd2cf9f4e51187da196ab8e4ee6e9f23d8706b38b4d43ab58f21ae0d2adf513167cd5f47f4dd368f19858f5613fdc2f6e628c7cf7009584a8760fb8c40f95f0d9c53738615f83ed2360c1e172362acf8dd8f6920ab315a77fc75713408ff3ebf053056c12715217f571d7e0a8aae145cd9c63af62d00c4678f87ca48296eb32876071fccba6d1573d1561f4f2bc1213f28ecd9cde02beda6a9bf256c2fdb353b7cab8fef4b1670a686574ab3bac55807aef8943e2d067f7e5cf11b7cf88c680e1a0acebdb1cfa4e551023906893d956cbedf5fa33b80f9077866ee33fcb941920afb44c19db2e2a00f64fdee80ac69e1159b1a3bdd42e23a6e3323f1707469caea8c0ba8e2dfae31ee9f4a3eae6e32e67d905aa04badae0a3f3bdb6588bd6cfcad754ab0a8335efb4e130c71d7ab55ee5b0b490e44d12b8755e1c6565e7062c27c9a2103431557feace1712ed95ff0c8387b3997b35ff046b1b4602ef7f35982a2d22574634c69b35f17a206e9ec092a058d2ab461bbddf3089b19325845db77bce1affe2c87f9ff08a722102ed0c1fc5aff6b38bc0322ff63c48a0ad16d94d76621fa1fc7bce07deb8566e195c0361c9826c49eff52d156bb7b9d38ef6849973053b761f84de3cc06e8bce3bd8e45f89068cb066eb6a99cd0fea142651f37806c2e1a0df76fc8f045e75c8530e638297583b6a559577abc9c47d822065e86e9e67bb6a3eac4c903afbc0a319080c5d701d8ec79d3cc0468d4d6cb2261bc3e0635670e90d9959731bf92cd2eb3384ab7e70b86bf26a75b2093837c7989a08f0029bb7a856afa2008a92270aba8fcc80ca9e113687121c7c6f5c6039f33b2457dffb9a1540fec5a67f5ad76507a6625e78f136100fec40f66e63f5eed60bc92ba144cc3508c2d809af926b38a7d23fa36f9809ef1f0f153655aec28a9648792a945614df610d44a6f90262d8b46dbc86205865522e8d8c5c6be90ebbf5abe2708232ce4787b45eac4d5efb43fe329485e615769697ae6fafa07cc7ddb1bb385c9ffece611191d12c8fc97e50b2988122e26a0cb5d1d1073f3d9f8d5518b3c552a0f4a2578ab198020b71fff73c5c970e104902cc60f21622108d351032372b5a395e2bd98c4cab9b4e18f74ddb7856337464c5410aee9811b79e0b08de6a77a259ad9ba50333f5d8e9d13bd044433a4065a698a3d3c2d27e7b7dfcbbad0e94abeb7ce1900cdca5d0dbdbfa1e62627c1549dfb291e22ec2f383f36f964f6273eb67e921b24b0f70a60e000683c0a057e97dd0747f25b9a40594bbba5f4afbfd12e0b2241708792ff0f558c4f429d40443687be03343a2579eabd5870046447c75053fc4a87e7150dd539f27d3093a9ef43517fbebded2465437a6179f3e536eafaca4edad77dae5d2f4b6a41e83409f43a055b02a6333a457470815f37851dfcd35eae34e99da84fa30a3a92348d07c5c54f75d55cde60680717d919b7144234cc43b85e8b2f789ca2e1440ad9955f18340ad5c31529b86ab830387fd9f668469cb2cdefae3d89659cb2654dadc7bcfe32ec20fea7f81deef9fd8ff53f6fde5765ae422a9ee073a11af962628bb242948a8ace99943a23a46420a6c659d2a9552dc7afa14b7482adbb47083ebbacd5642840b498a7959b6538b4c2a7e26055ce986665312368073a724abb8bb5d6e412b4a69b31197f80a7cc6802ce8403412b404a158537719e03db4b6a1a513bd85c4ee218ec0dae624c6293ab72c078b8e3193e670d5ef77606becaac296da06b87f3e96e558719fde4141a20fd158694ae958a1442735b0a8a94989d9341b15c796d624c88b49eae75d04a23967c50f1fae8e503fd1d22ce78612f9a7d0ea1ce633eba9739b641fcb2f92b02f19bb8ff1dfce7ecfe5bf39ff8fee02cfed3e7f96581fe1218e0e60e4630fe16c4e2f6078535d72d3c27243dc12a1611e66cc03517c8af0a691bc8cc5acffb177c29732f543302ca11d885d3b1e1524d756192f68b730cc6e3b62734db0b44f08841f19c0b90062a28095f9ce9ab90866b7a165e03be7766bd1f1005a88f704d67a1155c3ce5720b4882252bbbd70b0adeb438b1b94df0d7757001cd2ab07a9fce5217c2c9cbff0c3d46a489142a35fe4af91825c1115b6964ed982cff79a5bd474940cb4883d139bbc95a54ed97f0199e3f74a28845aea0451cbad50f3a3d02387f575df94125cb2e407661513ab39416c102f798f47bcf8a0bd5c05ae16d25a8db4dfbc76290994d044dde483cfe7dcd98ebdac9f5a40dc735b3de6e1536cdbfb15cb95b1403a49871354794851383a1e6a67199ba7a34d314f8196ac7020f449d87e09a45338d208212a3d1ed0ad849dcbcd3ea7e3eef6eab4035d6b34ad3b5636d098c2697bdb1dbfecc09972c6bee4e23a094e809d504da32ffb0bc0b6136778ce1fb17f3f5cb53115661faa3e5fe6dcd67fbff79a8cfadfa08fe1ea3c7192d58205d586bc3319787459b239166eeb66a977ddc0643be218d303cce28dd4a178ef7ed03120141258654c26325711b427d182100cdf0d3b0e64a190ccb46aec44ebf36d37f48ae43ae393c6b0964f42e09bd337f70746c669d8913710a77ccf51a48cf71ff2db023e1b9e977c4af6ff97e966c2a0bcd6c0e8c5b35741a4fa935425b33e82133bd685b3883cc5e427a0324ad686b58d47770d6e6970abe70d0e416214dd0aad9443bfaac40829cf709c2f18fb869614d82ee6b874de37450afc042255b741d352503e009b8e19fd9fed5eabfc097a82d06d264f4bfa4942634163ec5509257e4a0cf46efb4efdfd857c4df24b606b246880097ecc64e264c1c4dbdf1baf697eaa5a5de46fd134d7a253ee8eacf688f5b7a6db0670db898082e7d9d7013b4ada20521ba010f124825aba41ddf0c602295aa155afa6c9ad0fb8a5c56598e0304e55659cb7c4532309636a2d410bc388b2ca19d62615667340a6c851c27a48ccf82cb3e71264bc73ef2b9787e8c509f5040e73bff1c93978044e7daeafdf2ac7eb4c8ab306fd0978491f2b0ba7f0aa385d42dc88c80c7e7cc6d48ae80e8c718155364cb5c33f5049e2a2ac04d1a121a8e97ea9c5943c3874fbe4e98bcda39f850d0e006091f1b3ac0bc1e0764128581c845268320386fc37636507f1bb8eb6cb4df8c39470e26ddcd84d0dbf0308d2b83362303fd25578cb417e104d2ea099e8c4170214f286d63c687f95009ba61defcae2630d2cd0c9e433026f0cb84605d848eafcc390474a7f03b47215441646a39dc5ee84d762ab8a0b5e046a490ca26a1c86eeaf3e7f5ecbc531d17a2b12d9c65861cabc05827f8fda0e2884bf012968c5e6c97a0125e6d48fdd4bf10595de9d0e3706822a50403c51754b39144a14269cace8128677ae70a7161f89ec13f0d9f51e4ff41f31322ecb209ec0875a8d410876980da9a12d5dda592413482a39a80230953492e3a6a42c41fe4414e46ca65917b4e429642961776a765d4c708a7bf80cf669d0c6527c2669ee4f9b3ee31aea60bb3ebc697be003142db10140960f5e9c948fb367960d7816c9aa813e99f6987f85847516b72a7bb1ddda163e277c4affc3bccba57437e150acb1e70f0078487d8a1f5f0a6373f0acab618f7c85215f165f7483dfbc7a73d50e1bd2f73338208d9e85908dbf81ddbdcb1104a08f943b5dcfe532fa31e4a00803d9f360d7fe245c53c359d1907b570f085f3a7817520906e3a26f8bfc5390c7532034b61ddc3185194de60aacc339e32172265868303e24a31341035c0fc287dbe10b14359a9716650312ef53632999b6f16f2f619604cd52eb6a8a9cae30139dc4eb87e59864a33edebef802b6af14bba9b810f76f56edde51f5ccef030f5785766651770798935791c2eb3bfc9ba1b86d34db5f7acfb4bf0fc88bdfd16e20398be7b320f121f7b2dae87b41aae50ab708df162d8973328ef3f64465c52bc0567a09aa323b94c85b8e861d3b795aaf3dd1ef37480092f2866b07d36d992a1d53a93d8e1549ae5a67e7ad2a8ff54a08b7b83c749a8309d2bc17611e09080977d461c4317a8cb76760eb73464e04c9aba7d70b599e5c8a84afea13a26683896697dd257970572be3ba287240ba91ce42430a9bfa104e21dac6889a705767127b7635c58198a741f009295c36bb057d87701f25885dfe7f4c507d2657aa2387c5aa47e5cb82236d88b700f536a41b834363a6b98904f256c0507e7447de8d7dab43e453e00ac8f63d825609f8bbe98e580de15e0c7eddbc841ed9bd8eda879a033bfe9ce8112ba814a3e30217129c27ea14fb0fad2e27d9815e45ac9b8cf59fc6bb52edb14ce7e9eaeffee53249634390eefe93a41a54728478e9914222498bc3d9499899ea7d6d6c080df2ee299d70a207a1fc3bbd2dbc90f0a6a41f1fd239c604ce5840dacf59a2bfd2254de91a58afd9cf12660dfcae03447779ee8bc5f3bbb70ffc52517485933c8fabdacc699b787bbe626c18ca07f32f0bfe0c19befda8045fd9d4f38341d92d57ba1d734594420d4d4e3ed752df5f55556a566c63a57d060f8cbf43276f1ee888038f76724e954a19082ab575baa0e5d449ba3e6cf097e85639e543fc1e22b45b66f529fcfa6a93ce8ba6f1da22965a59e7352302d6213380880f795bac607e8fc011fef788722f6bb12ee46b35f6a662f1bf32d52f3aa0ef998a4a7bfc2c578f55c2c96dbc47a7f31382ee5a9c127f482ccaeb2f747807388ebc5282a4821995a092c252c0fcb6fa34fc6745b6c4e935ab8af032d4efddd930de938324a14c13252195ac4ade7aa1c940a0c596370590ef0ee1bfdb7dd1488492a142629bd8da04aee625b23885efebc72d7ecfff605560b30003b15fa3cb1fc441451cbfaad0667c4cb56247d402ede85b8a315724d80b3d5733b3d00a094a8c013eebd73c2153788b17c5c578a9fe814935d52c1f93056ee46b5aeeed450b29f2b4779c6d7672cb4d186005b035607cd942b3e612e89830c74f34c0df8209497da64a344c112e608df75d902a1ddddf8e1db416b936107d59c3721761673ce024c5be34a642f6e2efa01b6194399fc0bedc1545b01dc1ccfcc22a2fb3272836d16f619398fa1342e67f84f39e3480adf8d10bb8c555f2bc02f9907a424da54a2398d5006d45f975988462d055c0d6ca860bf9b1ca4f17b29492e42914be9df8b6cee11f99e22de33d63265cb4d8034732ee6780a4b35f0f9b29f1fc2ffb6d21ea7f18599031308b7e03e45e84c6cae404644a762af344a5925508f6c06303204c8f25684b02c0f055f0cf0e930d0e07adfd7810d3992880da58e82a60de5d6d3a7abde80dbcf2b3f295c833142f404b2b66acab8715de13385ecbf9bbcbb542f89f734e37598778d8ecd3d7701b657fccde71e9aef66158f6f4f6cf76a732fede4ede81e28a279093d7a9ccdc8b13195a60a14e789a9439bf8f777c0b35a18f5882c23178213faad38c3d4e6c3bf3f49b8a298b168001765adee54456d5184b8ac6d7e2d3f5192dd4868be6b2c7c8b665c553722cbbb236de3e1bb8f123c5323c6f187f8c94dd73ad8eaef819f281884f2b5f8c936d8f8dfac7dc69bf7c9c3287c0b7d92d04ef1783e0103b41f369f0835aa414f53a1f804e8d5ffa17a325e29baf4344602c4d67af2e3398bc4a1489e04f2395c46ebc64f60ebe41d22650bee78f6df4941272a5a227ec611a6fd4e624fbde484c478b56fd8f3879f84bdccb48368d790f92e562574c2198cbb123834deac4f69a5c265671961c0b3494b854dbba465249d9cad85bbe2a0c47bcd906393d42502eb18d7fe06c3cf1df8943afe5b606341d6f72523a771e072aeedc63d26ac93b5092fb71b1476bbffc702cab6e614d74fc77248172467c1a56366889013c94bd7ab4aab8e398804ff0d1d8f40aec9dc4aa57267796d056d3b931cbc5474440ca8c90dc62ad8bf897d0cf5ca6ff5db120d6dc61102db9d3a3a92e0bb39dd53ebfb2d2f6d0364df8d3c386224f76e100856558c272195ff6972d252239d4b801250ca56b4b47ec8b809dc7a8a4ac41c2bf985fca01b9a830d68d821dd421cc862d6335f40ae09cca87705caaa652f37ec0e1c4f8b55e69365dafb389209d04e9715c572678a1423b9ac6e2c867c3f7869e120ebacd91062c4d65d463cf3fc922e0dc1da1e59bf80447c88af88608e06686ffa1e1677d46cbe1da48d1c5b6b06cfb4e5186a5d6753f29c047523d24e0b032ad56db0aca126a057afd5657dc47befcd402dce1767d1084f594b9eba9a55e33e03caeb4e0993b06e18027bdc055d225009136d63b51ecdd015e628f0870a9df5e1a009c05ac8eb56c69d83630c72d05c8374b9e377cbcdc68871922675121e2a19840194cd3cd7b157294b793538b8f5f47b2412d0ab16282c4629353bda8cfdc9c4905110f0a76fe2bc47834713bb206c6c81d0dafe8eaf181a6783350c855a161f311561228e8183d675b4db231224ea1537105a8e417d29861007d02bec7bc0387b040e8fe7bbee9b03aefdf207399ea9c825bddb1f49e05177023ac4f099b1c4d8a3fb1bdd1c19f25125a27834edb18d1548e3772d392ecea49e958c57439d112a30c505d08f835de137fd1f414eef5da177851530e9a7417ff958ce81d0eff50bd22ae515124c7739cff39809534b5c34c271c0e5e174a38aa3996b49498608f5278798081c7217407bac4f038128fb17e487b9b06f8e89413598ed6a9ff9f14cc2ff6499f420a2d1eb4974b89a04b5a77f79277660347d12ab74d7d0e7d6d40b8f7fc5c44cfe3984193a1c28d78607b4598174fa81bf510658e50ae688d6f4b08d74cd3674be1c868beec27c00a0211db54ef91f4a412a568c60e446f98117cfe2976e97813ffe4c1b8e0354cad1f84e2fc4ab0aed01f5e7333b8f9bdce4781eaaf45125095264c902acfd8cee734b6f6e0ddf4aa9275463dda73e7280b668018ffd1f09fddd9f11527bd129390c5ea477cb0eae5b3c539b48b27c6871815db30cdd98f1f717498b44257eed972640b93c6bf063d8d6cafc71a3878231a02dc6535c8d4fde2cac6ebbb871911f97fbaecd2f437b5935292ed93608b82101fb9cc864d8bffa5a39e063b4948a859ab7e9512895d5125803814cfd1b84a8b828bcf8cd4d2fa114a820a0ffe8342c78f0b13605ddbf20292160435c7ac12cd807cc457d26982afc43f668f5e2fa7ab9bc9d72731495273c94cf67d3cde48e9cc21864c4078d30769a4391db5d97543205dbad09633dd633681195cd072ded8932e158f75b79b948ccfe9788c4f8b0ed648b8b224761fb91612836fd8cb026d086fec179a97c6346cdd92dd3583583e6238bce4408f8b2fa1ec065119e765a89ddadcc29b1c9e3fff12ef14b91e01e963237a16bb91755099a508f3d905de6b07c02b139b1d2cbb9248e6f0976826fd63ae81ff961b0be594885ff6b4e5a893fe0fa79a2c16aa5c31dc32b0cdf095a845bc7c9e73282447412dbadfb1270225c1e72ff79895cf6db68135fe014549ec518da2c77f02a253aec2dc0dcef0c9dad7a5128a2782fe478a6d43174de1dba11df74870ef76188d630839527b3ac8ee589532e467682c4c0993640c474e1e573e7a79cdca7f9166aae6fcb8d4a2254974612654add9a1dd2ccc603563fe5c2a7e0f85e48b8c395039d8601a50f6a4d43844fa921d3cad58acdd1f8fa5773d8862d3ff3d3e395b198cd9187b93d294e3708fe4977e216116c794683496c6255379e4825be0ec0e67a9757782019f6f791c48359ed598426afc53404b8e328d6178b344d82f2cf31e2c452f318eca19981b49a912b09d6b1586991993d355021ce0a1ae96ac8f2b0c43e239e24f6cf3457b9a339f15bb337a0d0674d31ad4033689c885e1a5968487a70b142ac5e87a891f954a4d04232dfce0fe4a7bdd5a02a48a0aa66c7360b7741bdba6ef19acd950801b8d5e1e6f2f217b46eaad3c4bc8447a9342b9214c9ba1724a1d7aac84cd903b7ae88952c3646fe9ad5262576d99a1c0e0bb64ed12cd809076066f3dd429245fdd24cb7000bc21e5adac5f55da4c74be480247b2cd7d20d7ce4196183b416373b607b8e909aa3f7b3351f193494ee6cabb62e2b7b11896c883faf6da6483b52543822a1dc57b9a33062bf813e3aa35b90e36b7f349a1ee4bfd622e738ba03f39863aeb7abb516ff98d8735b78ba7cd84db950486f02d204c03c136fcf8b6e0bf5be0f0d6aa2e4f74a57e5a868855fec114a237ac20cbc2661725e90f13885513f4b9f1bc18f31d62c2d947fca661233a074f2cda4c9564a7b4fd451856794c818bd9480191df25d85ceef692427aaaea2c6907f401e776d98cf8217285620057e7ee0c2ffd03d7faa1b51e30fa434d0eb6ca2c6d2dc7f8d6cbc938f65b86812f3a64a13ef92c2339063234ec0959c78ea170a8629db82c79972078e43bd49bf66317f36c6fb8ad5390330e34ae9e48faed1dcfee2c28b779749ca8852bae98a05d0d23c91eb48e0164a345fb213ba2c9c323444e183980a36d7d49b499116bb740c93c7bd688203511bd7821def4a89ab675e8cfdd75261968e301fecc0e216b012460884d1c434e47752b3d8b7bfa5dee80c9b7482d8af616e80c12d414fc0844e4b78c0467956f31ccc3a69cd443839c667fad3b4b9846c3c300ac9c2b30ed0b88b989cc99cc1e3a8483306adeb5061a7cb0a4c0e89d8427e58f0af1ee1a28142174bed4545082ebfa70a06c669ba68b3f7e4a0eb0fccde24e8dcef4a5da6b8de45a997f1381fc8fbc5ce10cefb28719984cca801dc8690877bac56578b5d3e1b4ad57bc03c3a28137427f4d4880fc5cc1926b8f4b41b6846a32c48fa394fcca384fbf1f21a3d33bfc2f28866c24865625a48929cebc0530bcf2dc826bdbf3501f1bf4368578e7630f88c5511baebfd743ad63833cdf27132c74f12063ddeb0f0763fef1524f4e48ef49acd52a1120bff4688ed3cbf15a4c679c90f579dce69e4cb0bdeb42707909261a0ef7e41c66eb0e812c2fbc03faf585970be799e6dddf4aeb4ec90132cb25e0b41722c1b2ef2f84ff625b5e6fe9cbed43dd402cac11dd3ef352c3fd146d37895574884bef06d1cfe17180d95741593ce39c3c8f3313e0c397a4e8a90a36c3597c44694536deac9bb5ee49e5c87012b0b88b7f2c323007ecb3b132359af0b1c782164bb0a698bd316ba6d2f9cf89d5e8088a238a610a35fc332a150d3fdab9d0b112bfebac5806623306f16da4837d1090821057235f3906cd934eafe6e4da943f9fa65c597ebcf96e5a311f75700e6cb98b9f5afe71cbb10ff3770e4fe3cafc3f067f3e6e071bd467ed26481e7b095c6de8d636be463be2d5f97d21d1a5b527afaaecbb1629baeac02d87cf05010c96ed8e2a9bee66fb5d528cfbefd984736c56d81fbcef4fa69231035ac5e1990efecea06f712e467bf107499c41fcc0c218bb5931a83a9fb90c27c0859e30e376ff5082490f12bfd4ab46b81e6f27db656378d04d96d3397ba1dda0d34e76667ec7d78e40806092f504b0c8c2830a6e4cf84a0907e65fbf52c5a0906257050389575082a3993689f97b892523020cfd4a08b83dfc60cbd2df3ad4fbcfeec0fc762c97be002e6f01981cca92b89a5cb33313b37352c64ec7e095fefb5f0e17dcb6e65f674cba278790d6f88061d1ed6b18c7c124e39de6c4a9e27e8cc9bb1308470c4fe339768f8aa33d3ed4773669ca77ca883843601e239ba0d7027b0ec04ae3ee89d0df5eccbf0e19bb55889979ccd9e7420cd617f41d913b1ebd12142c4edf08dd34f8426319bc2b5ffb398f1eb409e639b701d16aeda1060ad81d3f5db755ca131570291367ee5949a46c9e303398d74f85428dd7085686b3cbc1543c01b451464deed45df82426fa56e61861ccd7b43b56b759c642e6e6664c05c0553e2c0fb13cab45ee546b9f32bfc9c095fb9afbc29f16e8816c3e6847b684667de4fc101ef28a6f4f8775c361c248d9b851c947ac2e680673141104d085e892912a0c9fe6a8a68f4ebc242621253aa8cc7dd2816409c00add7fc321678931de3234c2e47e34ae5a8de99fb01550906a361cdc3754b061224ea23480adfea6e83503526215477ddd3a9bc7bc9418516c7f5c6bc9d300718f8dea794cf4b83d395a3557120b24923e8ab6261b199ba574f4c2e7ca8099a6d8ddd289ea63209c23c0938822e53767778fff33fff61d3cec1592ba16c250869888b605f5c8422795d598aeddba0f7ff7f3ad26ab9a73f5b3c741882024ca0bdd15264d4dfb5d7d5d37de5c54dcd6d67aceecd52f1cb3feb6552a72d106e3b6b430b31ceb7fdafcc533f6051e767a7ec6425162f0791e4bcc9a4374665bdd0a52d9296853c76b8203947500e09f9cd88845f114052e8f6a614fd0a6d6141da604aa65ef2f48771d843d0549aeb2f0d980181aa3a545cef4937c76e896fcd7ef85449ec16792d831dc9ea5b01e6e887c1e2ee1132cea7febbeb00b196b0c59563a68a7f37dd5b931a71667b2885fbfd3d730115ef922c6af034ebf347d05742f01b1b73a739778fda3a923eabb708b2f30bb278a9a57bef17b961da43cb70c3911356a152c7400090811b330acb75d255c2c7241f6f61ee014acede1bd1cd9343b1b56c6509dbf3a68d063280db0b06e2616ba6f44560a890259c75bcda22fccaa8a8205c1f21494d6962fe2199157c80e64abe92814a69b2efdc3dc409caef3dc8f123301060c6e8d723d8e015a04c3305bfe0256753bcf780397273b8fbd261371715191b7726fb48ca795472820dbafd29d0a04a62731665d4604b8271500ffe34f01fefd461518913a5034558ca0897b7021ab411202c2086d04fbe9dca57c3cc9bd181c1e143a6fd1474c6bcfc914683119557bd8ce491613102704660d30dbad4a63d3894cff4408e62b18010396c83ca4f84116bcf29e45ba3d376c2c72458b3127fca1e989ca535d7bddf88204f1226812c92e2f7bd84a9ff7b5b4da85c7ba170e4ea557430c8e169777938f51be46dab9ad3614a2b707954221466be604f632e197d28fd5d14610af5465546ba248d336c9ebce943341aa746a6c326226c9b2f8f1d02e010e8edfe1177310cbc20c69b1476b11de4eb74f27e9750944e32b5d2976c80d915ac310d6eb1000e5b37d3bdbcefa2e1368bff30e166ed4d1e14662ade538ccc2277c4dff70afe9ce8a4038b9f7b666b28864b2c47d73a55fc5a29ca6e85939c44445a61f2fa97b5570e541940f0435d0d630bd58e3bbcf025abea44c6033e0b7ba40f2994a2cc0d19a5d8ae06e54e214ecac211b6e68fd49f8e66eb6f6e9be6876f7905c2b6e4a0606033406748011890373e9b94ed7151bf579e3a3ed803965d7aa96f77ae939b97f88f8063e0f063deb8b0366d36de97ef36e8eaa9a253305f2b623d6711eb5566ef4756d13643064b6fda3da35b681f2b8e6d12a85676dd278526895dd0ea15a246fd5b70bc8bd356b9840015c78418077b944c496d6dededdeb19e4c207b7e29fc09402b84ab6b12704accf3de67c120494684f4d7bc2420a2b8fc4729982415d7f4b685800306a4001327e1adbbf52ed033145b85fc385995fbb91a739034bde02b1b2bf344eaa2fbdbe3a514e1a0ee99a04c31d0bedcd84a228db0d6ef9bd655e44fa3b9287c51ee2e61eb11d8c94204284b0a14e0322e62ab94a9ba4571c1378b33ae62e91d37463222157b2d908f7562ec97b7c7f41a5eeb4d65a299f3fb3af068050aa0843ca3d1a6a9feff7766ca04228a6802d85624175d4ba0dcaebf481badff233dbdb5f9fb82534bb1d40107b5173e537a4ab642099cfcfb863918032388cf26f4eec128b7d8a66a7ccfcc00831184ee13ece3f4e08bd7ee13abf97f77b3f7b1e19c8738038839e423b95b3be02c0f5ebb1961513e467eddf62979425d552470e0e4c6230723535920981c14acd3f6f6dedb1e6368e179b4a50abf4a3fac9103cb9ad103713fb03c69f1eea4c6e3bc392ee0868aec8770b12340c4bae1848346889f7a1e75201b74cbe24fa7be483d9c635b6462d72f30e72ea1cc514e90a8772bfa10cdfd29909ba23b1fe2dd1a8d35754edef687b956a43773b3d44d86d62e1cb0196f2ceb4e67c6f75a660d1920d27e941f65d73460047ef2cb732b86fd98fd82e3ebb54041bfbb814e097f1e4231d62b0ea31bc010ac0c91417158ce0e229613d9c5d15cb001378dd8c42f6fc49034a89ccd246837516826cc2e487a8bf8cc1871a6f2032c00db625a3b60baf2e14103a8d3885b591dbc69089d724609f42058082d0af14f4d21cb8301d3a8ca71bf904e442788b0659caa31ca8a672185b9f398ea246481f1aa1505aa7b4a2963b4652cf9e1025d41bae6603da2c798a36c5c962ceae028ed475eda4c089149312262a444328b3f77f2475f6b2a9d67889d551744560d742336b369ed5b2fdcc2f9f56334ab802699421ca1d7d258c2c15a39dd6b09cf9c1bc385c7b8cc01d2bbf4e209e7d4860f9441161f4d6dae8f8d606813f0843c87f25bf5469bb1b72f2e147f9c814e70dc86b5ba166283f46ff16fcaeefc793e76310d07db2d9987c4098e43238966ac47b371975e2d709db99d1e1b73b66e6e227f0d9773d7028f2102f9b738dfc59e9b44c51546c209584c71e39646cfd50f68f63ff3bef41ce549b3b29f5a517a0b3869bdc706e5982f6229e97be0f6f76a4d450017118d9476044916893607bec3b903452a13ba1debfb9ce018a08dee3970fd9878f0d2efb76bd806951d8212aaa40881b01e69c49851f38a75cb45e5aa5402c099db66f37b9baf8b0277bdba4ad99b7887668f3c0edf741f76b2d1469bc23c1af8a7f5f67a040097827f1f50bd53fd3966f0ccdee5324d6874842f6d8dda4917ad72478759f34e74dc03914f676fb9ccfa1a7b8b8bd1fc56ae47c3c258a37b0845737c01f82c2fd8ec744806dc91ee70041c6804f2a316763a4fc281eb31e250ae1ce6805af726a00e8f32859ef3dee90fc5322c1beb46a3cd0bbe0168a4e6e362d49ac380c0f1d90efb3ed2dc628401deffaf15b3804c7d717c1663e23bccafbb33d4d4a3e13b50f37170b3e502f63461436d9057053046295bb94df8c4fca942dba96f5d3259a7a620ab66f9cf19e1b6632ce22fdc045bd63d215cd46a5272f8080e2821242d82ae988a0d5efb5b54e6ce1c09e4dcba98995e4fa3106c500a1095a2b14e2a9abf5eff140d8731c66bd571b89f7561074646f40d382bbbea54a3a7b32e168d941084224ad345f4ae45c9fa1e239c8a8dd7c717e241ebfaf753de11893a794ad7b5a2da915b089df0f5641131b32359f409b48cf514d18bfabb67dc712b186b02ecd8e512983baba6e12e2206aff2857e91261f00b0f249cb9ce6f45f37fb210ae0a934ad274fd98525802fa4c2dca02e5ef784ff6434f984919d0daa8ef28ce469bbaae068681b1ed823b7363dace3d445d0bf119155e245447f658274a9f39a07c1e0594b88ebc949a2d48b37a024a7cc90432c2c4d54bab34b7a177558433cb0a0e3f014a43346cd065420ea1ec12a2bc13f0d8e6250d2b0784a12a55390d9414eb651c02963ef124306e16e958de16339c720bd20ad90a4acc19284fca1c124f480ae2086683ad2f9fd31ed1739e38f6d681ea753b9f2ebaa1fa05cca752102fdf6952c1fb053730fc083259f0e3c78007a26fd7b9eeeb244db4966149a723c70a7c36c7c2ed45f91bbb1be5a44aae8429b91626b73f3eff9c5a6c307d67e4797a529dce00746343063ef35c3921be1c03d1a23e8c1530668313900836f30118881dbcdf9dd9a18f49259a1ce0d8e083f91fe4babfdbf95db4de7e342f2efab7d16ddda437166c97081b70085ee5663ec456c8ec1ac4e307ecf6f9c68a81eedf4e53bd4d19c180e4603147801f1266df957747f8159b63bc63a412f8c72a55b1332f7d2f9381c0109b2a378e0e3f686cbb1932a4130ac23aee258a10b4d647290907393224424464136555a0b390f8eedfdeb583cb7a6977b527717209e2ec41392d9598ec5c6a70537b236686fb4fb404e1ce76cab3d57d8780117dfaa01d8a80fc2e6b845d6ae72230a4ce087ce1f801103a90a1a8e329fc00b8cb6f49f1a6099097402b347a488e305b03450c8b63d0bda0eae01a2732bc5a3d2a0be48aeea7287384a4b2d146fd4ce739209aa1ed48e28eb8b25c7b3cce29392e527895f4af68b7af0766802561f90fdd76f5e0e08865b81d1f2fc3a638be12662d04b0c80d6db0c6bee4fa71d22ec4264326991aed313a943a9fea1b34895d8565ee734341eb7d90c2cae864c97dabbf02aacb6da215d977d639d015876dac21b528d01c4798e653aa8a09baa256425dcb2f37289347d26737cec97f5fc253a35d156bddbd801f03950a405328e790892731bd0b4cb713a0b2eb415036a42ff12b35c42fa6002af4021a97440f899f77dbfcf8af4896452f32ed32170199087978085aff3ed42f2445fccc087597e7684ff45a16543f39c21e6ddc1f2745a49f46a4cfbed2a7a316c03520b392e91df552d10e6d0d0bc5eb39d9f0251b4031c0a5251b4b628c19bd8b84a9cde6b0d61c9f142eea5ce71955b97b94ff923f98b463e902cb1216548086766da7286d62115a78eef799d3a09fa6107239433867c8f8b21eea41ca99e805f4048810587d64ecf21d51be997704b961344b6d64f89f4ffbc18cb77041245ca3463083c1bcf79d467c4b4d1896772cd8ac0ca86e17420f700e46cbe115586cfc6d5f07b4bc52106c57d0341d65aa097646a3904bf51e75639df76918159e40a4356d9a5a7920f2d041f3c7a463544ebac4a0930d533924919da0da6acf76b5686244be59990d23c95e43abbb9ee3c4d354978bad0cd38db426cf663f4f81a9bfc6daec116b221ee1a1db361ad69dca740f523869c588b5e4578d15f5e6d5d24fec1f24335af6fe2940e071d61c7abef63567e250bcf25f8f27c798defcb26fddff62699dfa0f6b41ec87446ed39d40175b6bdb61496f5609256bbe59def958a9bac28887e777e30050088a7754f9263095833f0d30aadcadf77b446f26d2def467c0c36635059b57afeb5fa1990e2330f92ffda736881cfb56169894718756edc8c4c034d8494e6ad8556415ee17ce55e4a1ff56173c55e7cca3fd7a64a3969ac5f52b3dcb895e618aac5c7280584f70f825e9e7a7bbd65a7d6eed4cfeb84b0fe697bc1adf6032ee6e10d9d4f17ed1531e87add0c4bf1cdc51194c5635ff146eeeea983b5c348d643850c5514f7a89399cc621e5adceb07cb05da6abc9fe36bd56e6bf31d602c939e0f360b0d5c1f19011015ae0e59404afaf81de3e435185bd52f2c7ef36205caef7e3554cc7179fed75f8cd672c47a86fcb5b564b7a16cbc238ebf03ea862f3e448bdb462bd1dfea099004775151ae939f0f93308e63bb69d10af6ef8ca2bc59d72d3a5d552064196a936a07e752cf2219163b1ffa66bea0183e2569cd3f2900fb4f3450e68b4d3586cf2dbe5e64ac64f3002d029200b8ee280155856b71ff1340a61e3f346fbea911e77f6eb483c383e9ece26e03171fc91787ef5f67ed8e0283e386cb0312866576d884b24131707b6633ae42271af678a570439a6795231971505b502b6812c7069d62875638da78f18f4c6e53f852bbb53243c4422d0874f20bf9901eef9a727c1f4ea057202a19ef01e4bbb852ed454a21d65d1eac21bbaafa1ed0600c8981fc7e54e043e6c543967a8b6a3f65ca035b7cf2a47879bce043181590617e9c81f470bd65161b590544d8b5ba0c2f18ee5167df928f22aba782bd7cb02ff50e07d3803c0683fc8237cbf0ddbe75214631c1cca140e107ed212cc46a5dbe3a751c73719b21e8e846b5310ce129140f6b2091695b786070ae6c15c03183a20b7891eb62172de8f31a652141975a86804ad0914b5db90a1bfdfd903432508e05a7f4c8446354f323ebdd985cae475a7ee8f4bfeb84807b44efdadcc8724b9c78b970e1147c68e73e5ea77d80babc8700f9322c5fa4449f6e642604c8ba6fb7f396651f3faa369194a0701a76b77f57495460997a627fd8fdfe67da4a982108ab79a49b07c27305be72981c5bb3d8a2749a4bf60c5c6fee23deb02b2a89bdcd537d8975fe473c040d380259913a6774fd83c1ce8d5a3dbeed82481810358810cee727620ec45c6f3f39529b537c1704539d4e7782c68234b1a65caf274f0f813bc39b3cb57649f881460c12c6d7b853cfb382578ab1437403f0c7ada141c9a7ba799c886432d6b4198b6c8c2a53b52180cd22b23a1ddd091db9169020409e346d9d4f670485e5aae40a2ef229196d14dcd0efdabca06e5f3ee55b833b00afef5ee5e28040639c0eb7fc3eeed93632f00caa11b8275a141cd841e664ea279adf78b774e8eb712db7d5c23cc43b291a8b9e64577df3dda81c0749553ca930a7acfd6e314370a4da827fee385c54b7fe1014ac9ebf34575b6087dad8bb5f5c7e3a4ccf56815a0e3c0bbc9ea29eeef91412a49edb890d851d0a42fb0783523b371099bb5302910e0ef78834d2a14de3a695479a13b596767ff254b3926cbba66816b2347f2f889ed428f907c2e28c90821231aecf94184ddcaaf33f1452bf52eed4e425193a81c1c9a0e2d930541e41807c26b9ffcd3eb394ab8c0f81c9ee7e9e1cd3edb6cfe0e634c65371bbdc326a8056447c300323ba8b1afd4b65c68b86380da3dbd5b067be53e9ff054c2013e279ba8b243acca4bc73e1149c1054c8fb63fb191a106abfa317f80b1fe2dc254db3767231e712b11b008516c3fdcb85c790fefa91bbb31503b584b0b334881570f67fa1d5c57d3347389392f101a5a02db2d0243041ed5cfd8690bc4c39e05286fa295c5ba2aed8f2501e0884bcd43c1a98a5a432f197391b175ada2bbcece4591ee1d464ae7e21eec52deb26666a9f08a77c8b2a5ab97e2f086a2226422ca916cc28e41154a8612f874f9fbdb21973ae72712b879f8f29b02f3876666a091179e7fe632884fe5eda97a92829b9170bfdfe33f2ba91f2e2203d1a0ba95508cc7efc0e0d2d48f08439d494b9c18ae736191539c6dfbbb976c57b06ea88dcda6a13e49277781d3dee65da870def853ff9156ef4dc6869d05f84278db2f33fc3c43b7d3527fabfdd38a34112a331e4c8fe0bca962f84b61b20410de376b6eea6551ab353529941f69896e5d767971b5865a68e76df1952b3cbb5e95d49351a652b0145af5f30828b42203d3ba21ed10a7f1e43aa177963cae106a6f43ae7c3207bcaf48bd768ee0e2fab33cf7ae92a3d32a1359a2105ddfdcab5983777a15ee0907eb8858d19c9205b976e850fc0dc68b01f7120ed322bb3560fe76793432139503789ede44b877ab50b8416fcbe6aee5229d40517b77e84bff40b75bc56490d34e4dcd4f20840200d7c27de2b76942dd6d59b39880087cfd2fe5605fd1bad6ab1414b2fbd0d3bfc346ea99b0da8bc081297ec655f598eefe07aedc5a6abb09ecc79174e6f86b7bf1cfba32398a8f2cc0d7f708c7a394fadbd0ba03dddfbfdffa45f12714e70304dd33dc4290d9f8601f40df1c3051607fcb9a5a0218209b7417191ab8c5b6b06754802fcc74370a6f19571a7de7b63fd2afb2cf19cf0d283668a1d8c3340c593a8fa98ab1ac70e898d0acc83dc9d4410d09f436079294380951791fcdd42d2724c43e3549f41bc19926689d2d21e68cd6dfd00b0b02858e6ea641360f4fb59eace01a248aef9dbb01fdd505e42e20da462dedef2de4b38fb672f54a8451913fbd7089e787a767edc85fe750a7f7d9f1f1811ef9b5d194e72ad9d8c84a39f3917fd92b72b2bfd8704209e603fa776131cd246e9d7c897aa79cdda96de4b5de0c9e1969890e3c20e68ba5a6043c4018fee260c234ae5b06d10c06329cffce3675dda4a1525395c8daf4d9d88738d968eee8327033ddd251cbace3f64012a6349ce438f410381e198c8450bf10be04d095e721a4f4fb74f5447f17a3626a65a2a459838090ad759218c857db5fc846d591fa4f7240a3e09592f97bd695ed7bbbf22f6e4cf73f343988c50db8668fb06a4457f97d33fdcc6a5ed68390b9a58d0387c50e0b3e33140f04f095e45c783f1ea239c5efe607b9fd0582579a5d60ae1a8fa65f7f540a9aa68492d0e0778be00ecae49c24a06565df2bed188f8d1dffb52969d875756e53fa4cb4de2230fd5dccc3156baf1ee959e5e4efcfeab65af7bf053f0787c33a607725c0abb0d11c288e1568543a052d5613613fb8a30d276337af36baac7d8cc4591dd71793aed76d58d5fae6e9ea17e51cf678f4d0f8bf40b0389083b0e542fcc2075ca54bc73988bc860a219d283d9873d392e2767ff367b2c552df5db88a69205ab611a104a8085e3e6eed526457a9e4b1e63d2fa746a4d506668e8ef9ddcf712ee5d92456a6b68d3baf30f41eae73c93adbaa45c6d80db4a8416f6e463cb93b68e0623d577b2429004b32233f9158fc2d5a76654e468545148e53a8b599ddea7e26ee91be3e31533b4095373426afa849d6d8d7d3d08e552f21f8a6fa4c56f8c84f3fecb6a0e6c4dea299527ae999e9f793f587bf3df66f180064a5d3929512a318084bbd5deff2c1c4251b90642b9980e2d556d33817e960c709d5db3474a083d01d9c3b78f1880b4f6c5c840c275408b15071bab202ed1db8481b7f72d33ab7fcd9e76029655ff5488d8ebf34c25b5d32da8780ee9a8243116ff35920937c3cebbc399f0a68975226f4d45a062eb774ded367c4bc7097e06258f0c1cec7a3c70b46a7d5b53bf0363d540899257bdcfa7cff784d1fe22ab3fd503c3f42dc0601689ac45bea2623158d888c08057f69116be8203eb28010a44fdd3d2c97eb64e18b2dc0842b0c456c05e34077e6c8d8699e9b88b41e78b654aa84d328d844e8e0a3758221c9d9e8f2c0eccd4fa00686d77bf664c8742400f751e4cef96e056afea1c24d8d3ffaa0175926ea48858f87ddd91cf5407ba24faf1d40c204ca5851938ce7ecd11c540963e616d47b671812afcb73b3cdf48306ee05d7f4cdfe38d64e9228ad6d3e49003c0652a08bfeebaaa0f16bc13c7c73040ec962d9872a702093d8b0c4241bb1d6e4077c0bede62c20521a1f67ad6bc26bc50bc8057231b55a8bba2aeb70c4abbb859b4cf1384eb21e15c0a8f3638645cbccea2e3f33b6040d1cf01b2d6e45f2493e675067ac7ef755bfc40f136155aa7492424e5c7dc7b2ce5b77668f3f38119ec10471f739ddd46b293dfe9605c8fae4b97867ef0e69d1018508dc56197cf023af1454b04cfb8a5a207780762c2be9092799d8e7dd67c3ca41eb4b8c3fe7d67b90d1fcba3fea01cc19fa0d501201973ead98a38b4144c9b4d3bed88196997514a79710e6587499cc57dd778e8483f5769cbf450ba20affae3be21cd7c106395970e107e9f91362f4030165b4ed4a5777377a44d27c83e525920ec5ad1780e9ce2491a81f0d62dfed5c4ca85aa5af12c96d1281adb8836715e4d1e971c22e8435a2535b1d49d53f17f4256aa4637a9d4b4171f8c217cad57c2d1b8acbc5468f09ea43a54b16f0134a930ff288838e98fd990436904cf52ec07340e10fa6484719bc57af934fac4c5b99dc50ce6be5b9f182a28711f8ac1aa4e2ebc3385d2c51a4e959ef8877a78ecb9d8d10477f06c506bf9794a113c7750b4965e47dd589d4d3a5f6d64563e9bce5b92885adbca90409606664215bb22cf02e0c25bcd24a9ff885f8b062b91070e9ab812af0768a2c5e0404060850caf0f9afd80ebc514413ed03e510e2016d910d90f617d67c29e962fdeb71973303a7fb17626ee7c133f7f5b16a9c9e750b0b016837ff3ea3802cf4772c7d9951a68286e1e236a9addabe62460e08abf1b9d572d93de28b8ee09d31a77adecf68bebc5fd627e7e98bdc03235710879f1a90fcb25a8d70b4002b30e1818a1006867495f0560191301ae6f3fec8f9e8e9bb21050ca22ab912589a67cd579faf973ef322a58f45b713c0802aaeb7f36be9241ae09bbd5c99dc6b4f7352da6c87e8c623e1c6666eee6add21bc479e7c79bb476292b6edc65a5c9b81d71a91815dda6c68c2b6cf112d10d8115aefd66ea7bb505c07c03b91728bf542792ed85eead49862b171de102048f1e226c0ac7bb54d12d427403411c060cc74f0be147c47e45fb704d24eefc88b811705c8743eb5b610abb7e50c9915d0b428c25815a65d903dec0e9eeb0223df61d42f774b642f14aab45c9efb6ea2706b321b7202473304019d007f3e904fed63e6369c0711567a7c582a2dfda1432855b8bf37df74a0b0f60268d7c3afc6cc76fc8d5f38a22fb90cc9f3219f2de1d707b49d2f0fa0c44ad3a772c1aef6a071e560b54a668078cbbe2d4d353922326a4975d893d5bebfeb52e41fec9fc74a16e06354399c52f990672e6300e906c513b6ffd3cab0d8c8206c1cddc085830230da92558876b322317daf5e63ad66ef6fbf3970680e2c812a29d69f6f92caff9e9902d43e2af3854cc83d3deeb06d572fe57647d24ababfdc1f51606fcbfba676898c6b685aa51ea19f86a15add8838f2c5ec35ebba4be15fd8143c5f43d99dd1d96230a7e11de4ef7dd3b94e9742ae59275dabaad758e2e73f066b72f1c444fc00830cf1575e2b4e4e5f6068804d310621001ccdca6282c0f9f79a4a5e8aa74a98828393d3a4b8e8dccab84f6816bb6d1c2c9042a73c7a22100a30a83eea4372327644e9369af880056d885b92844f9c5bb53f3798df3c69e21040691fcb2396153d795225bba4169ba239666f86c428e889cf1899c5143e686bd57590f8be4f6a243eb283ca49918866c1080bf29558f84ff921c1b15bebc2deb840824482c9200cbb19ff04734981b6be0b35ccccaa4c7b791a4aeb6cde46ff59ff7e6a5b5afb5d07a5c51c46a9f2600af3dd1475466154c8e17086ff8a43c9431efa412495ab1139bac252fae2dc761c127d9577a9ef26f769c89ff1b488dd4d11030e05d54409d58ed64113e6dbc733ad0da6b5a9a1e4beef75f7090ac973b92e06c1d2efe7a230e006c9d226945a96049fcca47b2b4050c6d0067b9c5c300c000cb005f131f5c9ad52ca5880521b8051a780567b0c0a364de1f33288e7802344ec11d4e8107645e81921fcab8fb8bf8aec49fab253cc064aa5860817e4d7c09264083bb27c03d1f40e03ad35cdef79790f5e61754c0dd0be09e0f3c64bd793d748035ef8f73b5ef3361b1d4a0b6814cbe9ad575eb975559d62c2c96b09f5c332c0bd5907485b964d587c593f19371ac3f3fab5506abd56ab5672508de17456b032d594152af56ab950a4c983061c284890e1302ecaca0420a289cd08409eddf87078887c706429c31c209bfd1ae2b3f1306c1fd7a5c9ad9259bae9f411004f7e3fe7eae8ee2c53207000eee5ec5bd2d2e6c1944fc5a7d55e16d71c2dd29706f8b12443f8a2e585681d42e527fadbe0aa0026f2e777329dbba9c41ac7a1c2b480412775780106cf80471784368c09968503fd3d6cf940487c7dd73a3bb044a380058f082b8d121ebd637bb9b10e004d50a27a8b60a0810b8fbcb4070ae9878405450717f2be8400132f83e16582ccc549368519bf6525646b968d35eca9c736650c36c122d181bc0b281700328dc3a92de0638987a52f169984ef448deec6ae569c0060d48f1eb65208cce54ef785cba08e101086172a932378632690a442d152961bdae3e53d7b95ac57858e09929d4feda6ac58af1ac56137880440f8e840c48b080048ffb64b130e7ca69870aa0994a54266882012fbe71740a26c080e8ee744b7093422de102cc144a5cad80289d5f0db3ee0a34e7c4361c4a820edcbdba17849523bab8d36ba7774492e900f08ec0c0dd4bf72ed0c3057070a7b8279a4764a9001a3d2e0024e26c6b09a1007040bcb6d844d2e22d9f882f65e3fb431b1389b7c43ebafa68b1fafc7c4983bd47e26dc13626d2b4221cab39e80926122fd6e2675b5fad8d893626ea824797d9e502daea2ee3ecf2d38576f93ce0466aea4f7cd47409c4707f0f28798067d63c69784ea081978110e72e410e1de8e22e41131230d181b103533ae0eac0cea73326ef9ca2c70126dc0bd0c2aa86b90ac379ed2a08c905230a7a1204c4019232d125ad5b9303354990a1353f2c09dc8b26719344061b1064036cf8bc1665c2a4e159f3efd7ab8407a823cb49cf6a244941321d531168c0b0541489c44291705c2c6b3f138040098a45757992e4208a328838431422321288488c880422230f62dbe765b2d9bb8fb9618e54ba94be585660c4760070f62253f0bf576431beb5ef0b2b73d74208d15eaa66a0c8bf2157bea46f1f3e32b8b69517c95673e3b86f5b7a5dc96f28785d0a548861b1849e3879a5e293b18cd47791a2fc028465f9dbd133aba309bd6a251e9372bad3c0a6173949242894538a93a2101c90724f65bab0ca77593a71272f4f390e66129299e86e16cce630db00b59f57327685feb609a9bd25e4c2b4b009385f7661106ac2953b7ba1c2ba1c847ad3d92b86e1fa876ce8367f9d5e1a0d7f76580c8fe97cfe9313d09efb547a2e544c150cfebe1c9bd9c938108ce0596a9a59164b0b363475e4b3842ecdd35ca96d3474f5bdac889f2751edd8b3dbe8007aeec1d08ef2f946bf0138efe7afe2280441ea5b5c0c22c6225ef2c0450c3ce09757544ad9de0e9383ff88a14d0a032143b8469394cd94e9b7e8d05542c7f8b19418df8a29645e78ec828651a31fc39857355a10bedf7be674054833a59f5d8071e76efd3c445540ddd2965133448caf3eb3fe12fef8387aabdc026fed3af67d065fb5ff86ccd234e0815192642a25efdf7c19473f78fcb92f00c9ffaff080bdf182d1659b85cc1173b2c6040cd7734af043d2cb85e4dbc37eca987ebfb91f085869c2660dc17e20629adc98992cdd8e2c2c1abe0551e5c71f257a4e1174a7bf156c3e5218fcffbc25925cd72211607a1c396c26e943746b02f5e1e0ce157e3f9982c890bf6d37514727333278d5600aec82bbf2840561217e49ca063ee5b1f8229862809ce691ba01d5b0938f17ce2b01f149dad3bd9d7439f39fd543c7c1ec618f4e37fa78f760ec1eee38015cc92f0589c229a039b2aa9f3785ca9fb7fcf6241b9bd76fc3bb882ade83828f3a0e389a89604e3e6a1fc0530a303f1fb529e0f4a3cfbad8e29d477c1fbf01c23f14803d57adb914257bd8966cbb97e4b83f5cea5c13c606e15e09eda31c481c4c3fa8e163e397b6f9aa76227acfd911783cf9e4fd3d85a7388ef77d6a18be45eaeaa7b40f30d967fd7f005ee0df4b361f9c86dfa7ba0330f7e6401e393817a0f2924a47f91595204fac9631b3d855d66f0efdc655f001f989e50e3350c0080a94a43567f2e918f8c10717f1af0d45f17dfbab097e3451b825a4ef13823eb9d2a65f95aba28dc0f5ddbe124eb155c6265bc664a7411ce926858d2cedcd35204058760b0e38f142234a1ef7b5bf9d0c48a700ab1b9c0c160116975bbb714d9018189cecb492c0ab53b2b42cc7b638dff58f3ee32be9a23c8f894700549fcff8de3b88c971e62f1691d1c3d3d35c9d6d96bd6c2ef459efc24c59b61569fae543c72ee4e22bc6504825e0207dafb8c3eac6576e5aa69e28a418694a2a569f1f7f77d34bfdf489b3206ad76e51002274c8d80e298e06dacbcfb793f3214c238e0268ce4a3dd47ca80744615d4db7f50698d787709d2129cf2c39619bae8cef33b4e81ac36ca6209d49499e77ca97b1bc69940c86f96098e9b1f5d10db463fda40fb8985df02e6ffbeeccbd415e8872e61a0455071eebf7940bb3863a1a65a83727c1f3bc423b97b5d9b5c9aaa3e135ba7911662e466fcc515c1213b460d98d1e82efc6c923c4f3b6a00e8893e8a4ec8a28fa1673abfb7b10b4ad059f9d1d44435574905dadb951e70e08b9bb41148ad82f5a2322cf337f2c8b7fd711263f249f7c2dfa03c5845340eaf020f038e3421973d8ca6ef2dfea26cd8f31839bc08f62b807a3e241d4a6556ca3f27a0ac4f9134b924f5930a7fd275bec46123af0c8fa4e386914750cce936765795a604a12e4372818222bfb2bbc22b7c183cf0d75aa96734ddc24b0e69712ca2740a8a3be59ad8595803684ede0ea6365c3d0cc53654944860bc4a8ff1d2e7baef12ed9736b1d66aaedb768ba7ee4d2aee716b1783e317ef315fe20254279dc4d61c8334cbaee20f7e46bde83f9c2bc9455b30a9c2c33ce972eb9832d2d5db77bc438ba6b35779327c7672074537f7dbd46e37524fd61727ece6d500659208dc4603eb8f966fbe77eee470c0b97b986b3ec1193b5d2bf4dd8d0f76a62bfe06ab92a05276786ba6051911e5cf6a9d5f7bfc0201c9f9b40206f2d7ddea1302a5655cbac0b6f711f8242144fd926e7a1752927b292c820ac18dc2f2d8ef98e2efbd706d017e8e8c02df55b4473cadd83d12a30fbac78f606532d12f97f8856259ea2a9847c430b91115c372d7ae9da4b9570de027e97f19b814d6e4b45740815c90e2bf523dfdfd0839ab08a61203d91f045b2e5e940b66e68a6cc9372b58b98cf62da784937b279fbf47e3ab3dbe7d9446f9742127cf43e6a9ca37b79400ffff8e1263f00037ddbfdd9acedaddd360b9d213f3cb4ee21f22a6ef8c878ec3c65d9714df539e0d43c2f51e7a980c52a85031b392d80f30820d3a51bb13e06fbd276823ff0096631de43dd9a9fb7f1f56f757f78e8ce2111a61abf26b1db317e83a1854fb9b06ee88ad31b7d782afc3fe2139248e123388788378012c4f225694aeb583886fd5793b6cb2b66e7f7e16cfba114c26fe9f43d1cd1df5c42a69189f2963cd5b523634f1c2f79c81df1405ac61d9587a3c97c3c238d9ee7ab312a8be8cbf4e097c7f68f712f74fe25a8032cd9a295b1394cd21018685598c737827d699ab13f6f2e8de015d46405f69c74dd5790ebf13be685a78f5e6dc3c175979b4241d03bbf19b1ac98bb0a4dfa5fea462ff080cfc01fdb4ca1bd07738f7058ae13e6144b20c86c0c8b502418eac21aa652a000789734a5f031819f30f579b4ad2bebb9622bff805fbb80858bdb839da1ddd6179ef17a2785b64a6a74f8f4bbad34b1835043d3c9191a0c2f55af2ef1d48fae514c507a2d4a9b0bc20780e76d49549bae4d4c53fa1d75e1508a070ab8d5388ff24b69dc3c899aa7d09b8dba731907952a94123bcc4fc931888b1d70adccdf3981c30ee82d132b767286ecd985b31cac213839440a8d4087d892ca78d0f1d41323e40baa2330c1d3ebe87364a27b07f706cab71d33734b04490273d996b56a38cb881fe24365bf6b555f9979edcc660771be74eb274d7d791ca367f13ebe4eecb05a831c755c43e42ce06a5ba24ec7eaa12407477a6a3b0021e86d658a4fdd4541026c9abdbc73b1e20e657674c794a25e75bea7554ad0470561684260a8553e579c12aa024c4aa8eb65dbb2cbcea93eae569d224c0e4564ebe246440d5ab7683103529d88476fcf4209daabde19878823f79c91859ea8fd661a0163e15377467cd9178891803b24b373a26dc96f3441c4230e5cb0801336127e300f06f2f3a9ef8828231d09ecb28beee94ce77344eac5d014332c18d5e7208c22335b668ead11b5ff612a80984319c620173749c3b073c6228788f58e623b0a81a592d8d95e5df8cb49a51ec5bfac24d8e3b0d5024e9a839e10ad224db28cc837c2544cbc2e37e401126ea54fc2282e6f60eb21e2b68c4db6c0772aa44b036499805fd92f74e234a88160f438ce22bca9f5199c08d8bfeab555bc16dbecbb897874b76a3d061b8b80a744d8ee228e767c5d78bac7e873ff24552151dcf1087b9775974c0e61afa802338a6781ead1391362f364c31ace5e66ef229c6694bc602e147ae2afdf428e1160aaa8aef546312ba2660058983468a98f640eea3ebdcc5c6e9abb3fbc68eceb98facee37a01559b8df6862c53d35aa6901e4332a7f63aba16498ba7698c8002148a029a84694e5620dad5aa035d8a706401004a0824f23d004400e61a805ffa626c5193e0c3a602d84cfb1cc3b62d25eb4e72fbd2ed8f9ad5b668351adb168bf5f1c8f81824d2f42b3c871161ddfac933a3d01f283c02eadce703f9db14b704e804c0049774335130b3100b16dd6770b529e1e1a3f3e078217b88cd80847ae3b2d3120276776ce0b59fd9af1d6dbadbfb53821c6608c20c3a9871c628e31765488efc8a3224a92bc10c238ccc68628668c6c98c21446428248948d775d12543d8a5cc562e5ab29b494751810878d14fb61881901629922e213ea85f51c64dcb6c2d8102da8a06820d7a8bee4ee9ee027cc820027c3beba16cde9998f22143142ab20614181bd6300e181c30383ce0f080b383e67cf13270ca8f747a7129c1b890545e0b89253a8d0627baf392e9cc527742275a48ac3f6260097bf67dc8a000be12e02ca0395560177ed1bac4ee041975a7e51306167437901f228c5fb42211e30e67709cb1d7e862bbe31f911d1ef3ecd183f63f93a62853e86691a310eba6dad668f48902810344b9516651be90944a92482d2ed0a941778706dd9d19747764e08533ba5b365fa410d97c397d8f0c2f7cbabb93cd97ccb88238e30a8ab06c7601090dd6d9d168f58a5f7377bbcb8b0acf92bb8c8fe054d5977f16aeb1d1caae136bf67cb3f56682f37aed3e5b27eaa376bac758291c53a76dfaed265d288bfa893ab515865d45295dbda0689ea2ab28cd9ef19f321e63a8db9e5ad25f473233e83131984e8fc1f6abe90a3fe8ee2cec66a26e26aab35f63483bdc3e6dc6c891db0aca97ecb2db1cffb6fa18797f89388e68b85ef998baebaf3771d9fac9bfde44f6e8b183464542223d97124baa482c1792ca09497a2979f25b694962091f2d2b20388adff8b5197b6a43f806dabf1fbedd79b395d9073f1c8bfd8bfcbe23f2fb3e39859432244343c23a5b891345444a290da0920e56317cd8dbeffba4ec3ef6b9da310a5888c207babb9494108ef995b3fe440188ee8969b03f49d3cc33464583fd090a2ae8c6319a3cd2d8fe945df27b50b051632baafbbe6b73cf243f666b67a7b892a14ef2267555937d455d66c652bf1e43411aea5e676a5e92184abac510757777ff5e28615c174170c2d0a0207902ca08ca0f280380e203941a619c210c2c84214618862196995d5238665f89ff1e4ba471d92ac79149b5636d4a1c9bd48e624864dfae624f9b6e4b5917391ab1bed85f8f79cc0c4f70d57d88457e96a1db2be6bef47949d753d8c5ce96c5f1bea64b662b6ca4fe8dddd77ddf28fdfbfc5563b488fce6f5ce3b93a4f964e8bb719a9f85475f082623bb5b951de8eb7133519f8a047d3deecb7c2a7245e2fbffbdd7ee2bf926ae315f123caf63db5b9a4866d169327334fa92cc979d22a6f761d2fea7440a71c96c7557924f8e5c66e7c518250affbac86e04ddee9c37df7c18573aaf0b000cf3ac535142825d7f148be59662bd362fc963e2954dd94cfd4a0559db7f2ab40f365225df678ce72585dff7223afd8640189bd7daf5dae3fa59bcdd1986e34a76f863405a6a37663239e8947a954ae625854aac1429c6754445c35a994aa49c047469b07bbf24df59793f5b199ad725f5fa6115a7b43d78aba476de9cc69260ed62797bada492ef96f13cc9eefa68f44917670852e9402ad7731d8dbe50da42a2fc565607dd9ce6bad5f19df94728be2412a748718637b0e2d1d65f22da3a90bfa6b5d3a6124a9f91dded85b3fd1eac550bd5e363b6f290201516d3b32449c66525b2a131c283c78b13253b0cb2a94870cef07498d7c829714a36c9ee36439a2d4a7601aff163800491a31f72a4e413c951e7a32509896b8dce0c4ebfb28b953e70ce8af80012a4a56505fb88711d2247d865f67bc0a4543d6e609dddee55f2891395448ed92fccfecd69b4b0decc98e9adf4f09cb1ec7c7d88f1cd6992d6997297b15fb9233cd0dd61b1826238bf4f0cc7577659e857b27b0cda8480909042c0d9432221bf622252acd9951d1402126b56818113e622f20eaeacc81aca78bcdff7c92e04126b966fb1e806daf18a3e39b1db176ba6139c527e96dff7c95b9f8758b3e4f181f37391ddb98247159dc40f9187b2cf9087871c3c8c682c723bcee80eb91d3de8be81a30c7d831365071b3b58589c3176d8683952d1a85424b963c78e2d74e8d4f0e420b968190e570cf0e02067ddd83dd6097203278da0ddb78df83562521736703ab2086f7d0bd440434714dd7dbb190b1da1164e4777bf9742a3882e663c34603c9d22583d72b82272747b404f734404a13bdf4c94c795068e0808740d1a884835084ed81267e088e0a13bd5c1c112b8218a4043c1f18dc86c1d718830bee6105f776315a706670c91a3bbfdca0e680633844002675686323821725f16a7e6e5c2ee317c3b977b8c0b420b2e882ab820a2e8ee2647ee3139bec84efafdafbb43862080a4610c6200628ceeb65fef9d2f5de8901106307c21070744ee6e285c0e31ba412abea2a0579916f7e925bc5ae159ca0fae4cf8e6333484d93c484d7e1d14eb653deb46a9cc563bde94d3149d5e7258ad5d5fe17aca2b14c66e3dcf130c4ff1f632c3b3e42ab1a542c526b6187c9ca2ee323b5537eeadee3b9eb3265e9b7e8add9a9bcf504fe13cba9830be9928ea565657d805e35b76fc208c18de928a843d36573e7eb49e456f3e836130f6fb302e5885f38d7b5e6fb624f72b83bd827792ae87309b95a7fc84f14b2ae379c23713459d7eccf65ebe710fdf7c0635c331e37af2fcb15a0acf4b4a399eb3d40cf6222984d950c75ef38d7bf8becc8a9a4a8ec793477dd43effa88180bbc1858f1b09b88180eef651fbbed1c85d37db3a6a421f8645fa98e5764000b7c3e3db89e19d894407b0a1a3575eeb09978d0beaad0b9c364a77e3b002a4e6a303d2625b2bf14674c9be2af90a8fa078c755c9448a990ec2c0581769606cee89e12db9d7a8fba88d4621cc86ab51e26a10e9107613c26e5cfe9a2f7fcd1797c30ab81cace07290a2bb93374e5f846101221279bd59e443c4e1a0c202ee060d8c46b0fa52337302ce8631aecf607902b98e0306381b6c7200d1e207193c84111c5577b78e2cb462dddd40602025a6bbfb871c6aa6ee6e1eb8200393cf0b38fd791286fe3c09a33f4f7cd09f274efaf3648bfe3cc1a23f4f1ad09f27b93f4f687f9e24e9cf13547f9e90faf364a53f4f82e8cf131cfd79c2e98f132ff4c7c912fae3048cfe3899417f9ca4a03f4e40d01f2715e88f9329fae3e4fbe304d61f2735fd7162ea8f1397fe3801d2dd3f08f1e18187be11001d7cf061871bdd6d835617f69a53dd1d1fb4a0562f5ee2727a1d1bd1dde94177078cee0e0f68dc4beaeeec8046d3ddd101758523066777e70b0af0a82185f3e4001d16f3dbddf1228beec6813ac963ba3b54e0ee4e0e70d0b90148857306c77942e3db8944a22b709c2cda3ec749b5fc2c394ea8bb9d4811aeb7d030ae67d0dd4524be5d1222916834b2ff74d2c0173f66c519529f5ecaef81e02893dfebec28ed4d715ba7e4a3d34b4a3eeaa3511229b3f5f69257c9e720ad2efb794a25dff5d4b3f00cef51f7debbc00c87ed3d6bb2b9cc3fcb7bafbf8839a15d08dd5374f76c8ea2a09b03802a80003663b1dcb4d1df16b80f0bf8e63337fb16df9cf67d71739a0bdffcabe9ee3e6af299cf65ff33e1144c7dbcb0ca925d873d7cf399f76e3e43a9c9e5bd4e11ad844624699e25dd9eea99b5d7dbdd1e59b727d6edf16e0fedf6c0ba3daf6ecfec6e1a9eafbbb9244d68398afd7bf9bdfc5e97918409ecbffa67c9ecfc010909babb83c401487a6079d41d7c4ddbcaef75528ed4b40e6ca4e8a6ee591a4c833df8523338a260ec7b24c7f35998bac35c5c79383d988b2bcf11ce88abbb45b87100c1e972da8b1f7ae8a274e64add697db96c6e9f8e2b8e4c0b8ba723a611eb0cb70bba5b4973ac23b4ada12b63109cae150f2b1bf28af044194d23e6fe92e139af9d57c68241b1899bd060473c95134b7eb6c425df8c5ee3489450a2cad420a936b425aa1fac26a9274ab3d86ca268241bd04ad78d4eaa96f4595691ddcd0b12fbf172a14148313316c90931d532d29ac12a92db52556ff9103d234bfc580561313962d3020ba190b80649c287c8a5145ecfb79789deccd0e5cab4dafa4b1cf6d791d8f762d634054b9c5e7ac12d6b7ab1e591860673ba7a6fbecc17f0356d8bbadf11ac53865a5fb5ba3d0550d2a9c1cd50f104144e2481e6444c9a13c99a131d694e44d39ca889eeb6d13838a7e6a49aab1145734d9c9a6b6248734d04e96e8f0d3a6c681c5cd0cd71417773ec8dbaec8dda1b153f777b9408d21c1ddd6670251c70a515b41cb1dc65605e4ca249c51e20dd9e1f1e1fdd9e16194bb767c59b54ece9ba3da250c64ebb3d48e06e4f8fee4e0f402a04b051c226884d1236406c7ed8f8b0e9f6a4b4d8747b8ef0eb255b5ffc3ecc0bad2e230f7bd8aba8f58cddc80c271e6752b4fb32b7976ecf00ba1b87db8b2b84dddcef3041f41821807ca7784730d5ede1b103b434334f7af3198f347577bee8f6e860f171f399228004b971eae3071143b0c02a1d9f007195f9099cb06a67306791aed3aa7d54b747885c6d0bc60b0e460423d0f30aa60a185b374885baadd85dc6e9a3b0bb4cb7270831f400615b34d89fb0c7bca7ba21cd607986b8a23c9c9e6370ca9048ff2cec2e23b3f566a2dcc1d7cce35fdbcaf7c59b89c214fc9283aff9ac0e182038ca50b72d3bc668cdf1832700dd1eeee3014077c70bdbba8ec7ebe2b85a792afb1e1f3c3d80e0e8d93963f97d94fd9aaf4bf8d669f8b6bb730558770707b0fa354c8898e881091b8a8ca1c337a785b0a4f761459cc01545a3654e180d96eeb6cdd908a38704811bf245777729a3510a15c35ba2694ddbca16fbc750f72675f5d791c0fc7524aa18e8ab67d1806ead0b6387d9e920ccd5497b7be11aceae0835c1bce693d2672c3c6746e4c87ecd18db392546c94e64dfca51d7d9fa22c9508a044ac99049e5939fe94b7d232c412f15d9615b2568aae0f715dbc9940aaea3d147a3a94f8a5a2e3edefc7d201b1972a97c9fcdf7815c3264a3f2493c67b05a03472619b3530c336619c2b1d0585182ccd6eeaf37e15660c0ad588157b815d188725d940e09dd855c97ea384944de9ce6123fbb4237a74991fab36878b244585cb7d694ff55f385ce1799bdf9cc448972889ffdf3385de05f98e6422d2ec4098db030419115987845b3d64422d983afdaa4ded7ccd63667b8b3d96cee5826c81260dd399a6b2da0b916d85c8bd55c6bc88d1b1c47e42418a0891a4368ca0153080209c2b0820a1788d2dd435ab0d28020ec88418f19480b48b840882a5250fa8258812eba8625747792213890c577c4123480c00e1c183ce0d0610303405c0040193f30c01aa30553d0a023f0e388bde9c6d182ee5690ee0770476280e86e5c2108150e754573280734879a3587f29a43999a4311690ef5a339946c0ef5690e55a3b91319cd9da8d0dc6909cd9d86d0dc4907cd9d5ed0dc698be64e593477ca407327033477aacd9d6673a79ae64e3338ba868d00d4d8a1061f74c8f143003800f8d0030f386eec6043876ecf8a141e033471fa5eeb76632ba2e30511b5db3cbd77b32e1e8fc7d3ed113dcf09bb9bc3ad804627892e9878dd7da4391558c1c431013a1611b5f37ac0eebea19b8ae652f019824341021adf2edfc7e2f4d98a832f8e8b227028f0b860a2e725c9ec5f1b8c66061b51ffac99a24dbf8177926854b1c50a3a06274043cf3b53b8a28c88e12dcdf02ccd3c636cee715c4c60849a4a5d9460e2dbad5c14755a572b1f74f76d8e04237c3dc64577d79a1bc102e8c33838f3aa130211c474e9030e30d1eb351abc85ee4640735a6ca0a96dc56098eb373b510be86e299af3c0066cee49ce035889ee0e9beb0001badb7303073cd0adfbd9baacc5c8e28a9e2f2af730b5a34cf623d7f3d7c080db80162291ccbae40a8aabaf5197cf959232585f9c82a00bf594cd3b9404e7fc403ca81d63b0959bc8e3d543c5746bc674cee47bb15b634d1f3a2ae659373a3d191a5a5faed768ec5771c2d070f5cfb2244b7a99276bba53e69f856f95f18163d9d0510075262d12892a87c8259f14f2ad52a9931c22ebd7dd9100ad2f18863ab8ba9ec2f9c1158ebd140011f9adc8ef93dddfdc7d2d52243f16bc12b1489f659c22b2b48044af11ab489f651ed4bae411c3d9be87c03cd250d27befcd3b53ab2cba6b00d119618f7aaafb2c4358e43725bb2c3b89f3a7dec3b37473c041d1811fa8cdbd0980d14d737bc9cf1dce78822fb0ce9ba9287af5c87eeb21a9df1993f8be8ac4a08c2b3855a4a40e52c15202ddfdcd41814463bf0f93edbc33357b3ca00771da5674de99caefb9ecced33fcbe9c3e0b835d70029d0f9c2d86137a45c61953af89fa20efea7a88ac6e49186d699a24e4548e2a828d23d0b675bbb01b02c31838d2bd9b58c585a64ec5b1cb3b4486769f90cabd9e7f7e10ace141ad6cfbaf89fb457f459843b2abecc15d79838de19938f25f55a2389c23967b049925deca5ecf05585ff7db2c8eb755dc495da51fa58c329a3611eb7fa6c14533ef03ff589beeffb9264100cc7557ecff4de7b2c4fc5583f796d963e26bf67278c7591065667f27bf769b8aafee5665d5ae07fea59f805fc4fdde03d2172352b24573bd5687477d734379aa01ba4f2d79b8c467f1d490d224424080452e9c2bfb1d108fc4fa9b84623d6f88d43e8a09bcb5274b348224424e81ea19259183b48ad35a970aa3111e20cf31d83bb5cb8aabc2af706140368ec35bfd75a306175658283490d22199cb8054e9482a8846ed9cd0cc330a41ee3b58aef0873f00556eab96ca6de7355c7c85ba105884874c6b374376745c0d994ee30eb8621f62b3850099ee715797e0f9b407082e08491cdd0e437d53134bc97f14c59d3129a8767b91ac9b8be675bef7dccb3e87c01c15186e259caef6160494cb708d713578de0356bba91a875d14e1447013ce81c96b9a8843478d2a874880606000000000093100030381c148bc582e180583a29b03b148001619c62aa66421b8a591443c818420c21400000020000000099c2003b07b08761e11413d6f400ca242b0219be83beb29d6c1f498cbd1a71b7545bd0eb50d5a15b9f1c2c3225d1af80c5ff0dc5b77d75f8e08adb2bfe7dd990604627b0d3832b9e4c314f439dee79b676e5df1a85b54698f1883f4cb23c84119da0f937de6dc233bf5798ed9bdb086bc4f3cafed2c5f1ebead1bf95f54fd54c9daef075e0f498608ab55da33d8467e529eba297b01baaf63fd00837d4fe6bcaa1a16aa2efd9fd46f8d57774600d2359fb185cb0e21f563ccbc75add093dfa92d54b3ff04ca3e34fac41666c28e7d5351391be431243564c3c3facb093a6971eed13855c292926991148b1dd5de3de66656c06540250197ba0c67137aed1b7616b8e2c417987a13727cd7faeda7db8eb8ee05b62b0b674ff38eaf6e339e13c54540b4e094e72fe4c8f23b94729e8abb946f979d391435db71eba8b916b00388a1234cd96f187d63deae9684cf15cb106b41899457b3df59ececb14634ba77fbcd9793b9157ab0224b875bd512684003ee0efcb9eaacdbc9e3bc8d66d099779025c1a6205cf4ced6626b06c95966908bf9e0701b6f03a12693ae3b534fed7af521bd70bb0414579a090a2899dadd3662e754dfadaedf35991e2e398628dd2b90c344e25d27fff7372f51ecd05da2be54862004dd36316bc7401c5c2093549cdb30ce8b38ee0ba8e7c9121ab13fd0e13a11551659d8e8ce41d3f3ae114b8d884224ecf108fa342c2e2de18d6c386d0a25688d45382de481f95be38ab8c30710aa59e1f03d5c0b3faaf4d720aaabfdeecf5a87b189cfd9da6737449442ee321d0085b99be7b55f0608424cfee992c4e67c3f4701ea42b3c2ad674b8b7f168944f0e8f8cc584c03cee15ca79b6cbfc30b479449c52a6b2d57dd47c028e926bbb4584f8a4ba7f266b039cc92129a17b7a31adb1a082635b7d9d9908ca404d6a507335867017a7f4e1b4927c17463fafe68338f64139c114967be5a8b7967d4029673f9b88472cd4f676dc5ba8a6eec7a9f4e43660d984219eef15433a8594e51d66591b56ea515d758b667077b056ef568a40c719e9b50ad104bdadf13971ea9260edd58505c9578718f179a9f0b0532c24a6217274e4ba337af84eced52f3910586164c4c6817430e55d9c94258f27431830830dd3a0b2020f5c860c40aa97eca599c61dcc886fe200f130ffdcb0ef462f7fc6ec4cd326667d13c046da88779d4e51e09789daa10a201ac8f8607c9beff9f6c0181d3f259eeca05b3a01f2091d05a993d462f5122bd1d662febdb6bfe54bc1e829e2c0456e541268d4678d76135c4810b8dbab89d0e068cac45bb3de2ab23fddbcda94f01bba907adfa64008ab1dadadefb4e1fc03988e4e57788f6a997d169f1eb4ef36e24615405a215684d8167132619a2c6f28765975e2635fa829a27732895d20720c4da8ae54dcc5e43468f4665e696392d7c549ee0fb3d1f8dccec605ce88a193634d48e7801c841794243b4240d17b04ad1f6dcdd274b4b6034a6659eb429dad92f880d99d0beae18ff431e05f3bdff8867274d69a0225db4a76bea289c686fe8834defb72de84838d66d8103c9d265c6c9df9eef8ef63896afdb62cdd03e6586147ec956a87741f1e3c4c4be5f1ce3e2a8f17406618e33af53ee1a0e92ac43887d8a37cd8e4fddf274606f98e89dd69eb899d7154bea19384dd0cd50a73284a0de8e81d8b382cac2631ab80ff0e03f69721c5c5ca7db6d2685301b202f61f2414a240f9ef54bd24b34db8912ea9989ecb52040124f916a34cc8f1184256d62754685f0996652710a355b605e45458d4cb7adeaa44d80bb80aeabc1516350d0f5eb0cdb113d3141b98e2a71598ea87a39fbdc8c0c1ac83fc52b6b75978fa55b2988c91657a8a9352f8a93b2ee12a0fc9b5286ab0abbe268cbdf3446cb13870c8b08f47636e3d5f1bb39185ec0d70de6efd9a99b41a5a6c6a90a57e1ba75a1a4f32657517c7dccbfbc3a6e5861b9f6266d80bb8887bb2e1701732e21dce1cab9097d2e8cf0d16ad7a095cd1c40738220223e9e6efbf89df703efcf33cbc5e12c68523314eb493cd4fdb24a846e236179fe7c84c863d79356394384fe4b263835ef99e5caea1538845d644dc3243b11046669e4d12a2d3cb8d7a3572f75a0e61dc3960c5d125d1dfff09ad0a8de04e2c05d4fae221ea6a6ea3d74e81f22aa5ade57810f268d68e5f7a753b2441751f5b15d4f2631668c1f4f7156df2edad1a54f1437111ae79c2dfd9b930f2f183cbb1ee6761423576800c6577a0a0568785ac3d3f87bb3aeef181e646660edd723d84d9c4bc26ce3437a66fa81100e2797cf668a4885d1e6d0bab3e6a4dc1097202d3c02cb890be684b7fc737cf95a0ca411117a4482c689be518af77c095bf5a52715a2556c422d73212704bb57259fbf7be614c2593fe5b5d8e1478151bd81951a8e22b90292910d7e1a581dcc03efba76231082568283fcadfe852e627ce7c808b569f6f8b8572756d78939a74601d6958d7f55c712ac5e1991c6208732331d05af2b78918b98cca806d4974330023cfe7d5c2aed28b81610ff149d7ac3b05983a9eededc88b5e6a443d7c6e5fac4b1370457978dd1e70822ca0dcced67d6dcf8cb4528d71f2d737f983bc693f68bf2e82597f194ecad96873d1a91430c897b296d779179e1d4a8b8be9dd2468e72eb0b337b0538d2a0c99d8997a3d4b3ef48ee2d5067a8d9ffd65af94ed242d3623245dc3fa37e25cd551082a83bcf0ece8b2e6eb174243e4893864842c3cc9a0f9863ab072c61c868feb3978d0ec92d6e047cb8f8993e78869ac5a37cab1f071146ba2c3f1b034c8cc68840f9d362de4ea9e05271a56f31ca570e50eda1bd0130d7beea9b2a18a7b35fd0f0e72d45949c820976e5da426cce4e3e3a0b902d9b428f521c1354be45304e98b4729acd97807bb27a24b068458e329944db3fa8e1bf364579e9bc99174a9a1923d2e5414c3a7926c27d0c8aa425120ac8c1c98cbc7213513ab7423858e117f3c20b81c45db9631a584aa7a022a17e8379292d0ac8b96a81e9d30ea7f41e4c9c2165fd8c042f306062375c8691ed2ad21042e8e5a5d9b379a5c07103e16d93915af56edbe53e2a56f9749867c0a714289559f651ef4bd0a608cb5a506ee7e9429900a8ba61eb6b36b84c1aef56ebf967a44bcc077bac8f73f43843ddd9879f832a64609f2d61761f1b282c8e31986d5916f2a11599cf99e5fd26e84d7457765a6fbc06682cd7314b8469947baa64b17c43bd5d660b46e334cd1893f43863bb8a59ccf8e1448e1fdb542108b013a8819b0c4e8f3dba01c29766cc697a9e88f9dfc0dc617287e30527598dd3a4f9beadebc6db5e42e52f2d461b19b9e20676b42fb318f2ed68391600737a7b21bfce6dc39e5452e2876543a124164d4d68f13aa8947a1f23c7386b3c539f8aa0a1ca2150eae365a56ca50b39205bda1b5c2fc3ce39c4001e037c8aa83db1184837d67300a4ce0831e082a19c2ca805d96ea3869c98ed4692f4785765b5d3814dd26e9d2fe584fb936678127fc00e7391fa19c21c8efc74639d7c7b940a954e15ee7d8cc5a35092a0db3a001452ce689c5726ac1862c357e51855b911a08a06c0aba54443d250a732026ef2272f6cc86f9efe785b09b10823f6ce72925d8db24c7918490bde2b7128deb229f17090a7f7038959125ff8cac6182b05d3d1b8db23eddfae1eabea7fa9a3cd0ecde4293a2071107184e068fd335dc93689963dd40df9778903c4aa05c736385dde17a9554e160dc46e3877fc8df4a0a14343244804fb80ea0160bfa1e393ec5b1d3c31d9d7ef624e5ee4718f1cc66dd7438fb111d257c19d377d08aedf9a5e9ccd3fcd05d5c4266ec126490cbe971e11012ce09ae63d3c7d756ab9a60195bb3a7c6123328b8ddd3dcbc2214df533826005105682191315c5e5f38938a62a9fb93ccb6d50449888cdc55b2caf8e31151fa246767bdd9ec12722ad5fc914564af2940122b935c0a1eabba0f6b115fc05a6b7eb73200fc2003109ce6674c557c07a2e14d307300793f7132af5101c5e1d9b9a38451d441bc434c6603b6132fba226d734df5982b327ee6456b13a0c1e0177a94784fdb80ce6cca2c25a490591b646a16a2e3a44afe80e2fa3d89e213cdb6fdcbaaf1a2f0c730d7967fdb195531f41424dc03c2da1d48144ca9f87a1610131246a223b920838b6b2376d3042f60c13ab40d22efe6a0d47b2f356c79cec764b95761a5615965e3ad916bcdacf8011216b2af261d7ed16b49441283761331396feb2453c86675d92d84dd757f2aa3c0b0066d7be2f2cbad3b69413669ff08a41a0709c1e465d58e85c6a57a1d96ca01f40ed57fc425d7b41141530e063ac2d8f4dc7ea7d5929c56c4282afd08b6589f6cf954f5fd0203576aab80328a59c59fd7cb5878286dd189775a369b8ee05f3349e9174f76fee55c2f6b25ee481361a38be8a00cefe8b68c5b4682bbae9f855179717c1683f11bd7af49c5ba998e3e681e07ae2a04308b0366017e7cd54f1500e776a1ddb5f834e8c08e36f5387738b2a3ff6a6d1c45d71b5af0d871b15051200ae06de12305a2b1fc617c4e34c959672a4e69ec5256d0497926bc6cbf032a054b91eb0babfa8c2285088781e337bcf084335ec8861812a563a8a95594649177c004143af1c305e056053c9c512d97d45f76a05c563f23637c03dfea2a5ffe3d5f4a2831630e1e3a063d92b3262963ca52f8b71bf67b4e645a5db577a989150805507625785367c64bfa6541d8fc27d6f4fb1733110b27b940605413e02b9e4532dad546306249fa882be3c4e7adccd54d19d8d9b998a14d131a4737a0f299ed0cf70e77ff7580634044dae486a0015a2297c8d52dadb619cafce5a1b80b622e652c0b62b14665cd4cbea343c0f07d2449f71b89e68cc1838137dbe23613c7a9999ae18dece1e8f1ed18b1ed0fe4eb43b15bb100b987442b30ef247d3955c2cb55db1d1f0143cb7e4fa2630dae83d84d66ecafbd774f8d6a8f502457368ac0cc0ffbcb242f0a243e4f1d57ccbc43db36904d9bcc699313f93bd87cb2a73fc5c08ceb4a40a11fb3447c4a9020f9e521841404c40f9d148f58d7949ca9c97624b2e0c477d97e6c442d6723ef75a073a0684da4a5278314f0fc9e3381f4adc129497720642b743e3fc8ead1e91a944956fd19ebf603d4c18d7f87bf9320ede5a8db834b9fe5256769c56614f5b3d6c67482d81560e18da1bb9580d3d8a64d3f5e0264c71ddd462c81fe2467dfc563e65dfbed7b7abe70349a7ce2341ee5cec8fee4d46858fb0debef6f84e1abb21a7f6d883d03020426bac38cdb0ed7a2ed3c4583ebbf5e97d68dcdad5931467e94217f85eb780adb691def3aac17ddbd1642dc04075a312209c2e186c0e0b71c33fd6911723798cdde01a03ac1ca4373fda9699acd15bb97559e645cb429146df9cda7a77ed56af19f4db84a8383a8a8ceb8b41840257a85563c71231f14307bad549f312067cd2e7460a277ab644262010a10de7c106370e88eac0aa5f20b95031bff22d9a25ab15fb9a0ee66ba8754d94eca629f0a57e6054d08f7b83026447831712eff120b39c3dd7e31257a98a6e426009b991fd0059dedffd2cce3239a55a542a9f613c0eb07ef10a24c8e5f560450870b5b227493faf77a8013a149e8db46ab7ede97bf35e178296909f5389cb4e7165587752507134cca95d1344e93ff7997e63f77d19753c087cce42aef7c175b8e6ca0d947d9700eb29e5811dfa375dcfc7e78625edd5b410eb93393a29d3f25a2b511f7d9c598f404215066cdaf577a1918b5f200cf001ec55df02cfef9bfd1615c562bb6f012692b6ba6acdba357cdd4265086cd7a647b0fcd9e1f66746bab3d242fe2184b1ee8fdb041dc09ee550f705b620318dd8010eb6291d5b76a1cf025dcdac575c371615e220472c4788171392b48081848e13bc646f9e1ae1f1a2d75ef3062309fea9db9369ffe948db841a4cb306962e6ee3a25ab45451573f35fbe9a6b838e8c5c6e74323e92e7e393f5a911bb81249ff30dcb57a9f98f0935f273f796e12b93bc2dbe821192f4cac7a1a84cfe03c57de37fd04fbbbdafbc1011167005e8fac5202d08252d77f4851bc3a76017107e6c58df8fb1cdeb6d7d6a1d9bfedac73f71c7262944fd09abac96c7d90e24549d0eca4c7aeade20da02f57419e721028ad05dc040ea60f0687b5cf91736d42b875f6a84aa0aa6daa1dae091c467c1b6d987f9c92acffe2c933f9b9e8a2e48c2bc1ebda21e12661e4ef3a32f83108469c803d41f2190651db124138ca126210dafb0de906083433dd0ca7c1ff27bf51e57c57853b7328cea4bdb5be2792bd216919bb412809ffc6bc8f347ff4ce983aa04121a21843f0f6af580042e3cfeaa98a54258f828d0309d22dc8b9ea85f4c04b080acc533a0283cfc1a5cc730e614800fd1d825ea05be63a76c073cc4e54c595827b43611eab0176f0e489fef14f59d925e89a422450b43ae2d578d5b1e30470af7de4f3245d3dac4d0b18180b5c0a26500b08908237b9ea0df4d7a102824f170d12e177a561b2f4189848ec6e5a6b4987503a65605b400fdad7e7c75e6ce4653d57d43bbfe316b477ee451337da6a4411e82a8a26e63a7bebd5029801fecc21f19935d0e3211570e316ba216b1d9892d3d910dff4b8662e00828c09a95097eb9b43add0e24fa1734e74e2b9e6348005dbe0f2f7f4e43ef83e1415ab06eb291eaa9934224b6c5ecfa67893349a98b2f275eb9fec72d6a67829950c0ce6ee15730dcd9eba7ef0734bf8cc8c56744ca5a7a6d176450bcf2efa14c8b57a2d88682a95001a7bd47168cf16840e8487a7780be761e63392d28986fd0ee23300827ec37fd707b0ef54bcd79fb11108d3ba89443bbcc0df9ef4197a72c881838bb73b3d8506588fc51e46a2bf619262318bcb3c8c6d924fb530c61918d92e6db60dc7332687183a2c1142f046dc2fcd934e22c73f78759b62848414719e97143628f9e870425b890445ac295b94fb8f7072c7584ad5d4f7883b22de7d35c3771faf35a8b22df688c7b4a624e5818cf66c7789956b9ccad278e781f88345ddeeb53818d91c00632ee804400735466501d7b272dceeeec2c1dc81b7a05bc164180ec2c13594f846fb5b756662ecf9c4a5eae4de8d72cd8089db2486d08aea0eb89b16812893c8227b28749aeb758a897f94680f1892da3e5143a6ca37a527764ed6a6f480c26c2308b860ce0b15bcf8d73676b928f949d4478d942ede5b70a95f81f76f8b3d495bb6726b048cdf6c90132aad538ffbd4781b7490aa357d61a3121b3634be4d0563649b73e35060dc6bb77cacedf20e1a84229f69833479d2a1fd956ce06f15614e0a134ac07adfaf21852c92f12011145c0f308fdffe9cee87c029edb312e5083ab505d0fab52905b8797c64cdf25500757824a3c32fcc98e65fdb821a97a1755c070aaad899f8ae35a9a8f0cba0ae9682f963b86bbf577beadc6eb19e1c656bdd1a3213098e0723280d768c1e74f2195214849c34aa69a5bb7b29780e8ecb6ad49bef8249fb34c34d7dc76d17b3c814b61ae361e6203aac584117bfb29d618504fa4eff0d387b9c8b1fbcaf37a7d65c9ac1ba053c7b156897b7be3d65cadd804a4f1d72e4b21a4f85a773688ff60379cbcb18cbbf5617ffdf827356d7820bc1d4a36da159c6988cd24a9fe5ef0f179693a18f62028f100d619616643d4aaa9d9d53f1628f7c48cdca1e4d6b756358248a7b3d77c52c6b9d5c8431369eef32737bf41ec46a35eafbd94fc0b396558d51995e120fc051d7553f025822e7e2aa4519b00a4ce062ed03e33c5e5462b8415cc8faa77b5f7c168f83d39171e85bb50796b6c18899c7fa9093d543de60f8f2964c40fe052962eff9f56fb23873c192365253017b786557ace30da570d2662bc22bac7ce6914f6f668327770c600b412f46e5d9edd145f525560c95dda48f0245c480e4f9c098563f7ba695eb427b288f077857d16f274464bdac3a1cfed141d0c759c88fea9839e12cadad99c6fbf7bd94901c51d5df59d47932a8b779b10189af782ab5d8d07ea5f6ddebf9d7d8ffac93a0bbce3cd6832763f413868a7baf59e99b26b5db0ebccf89ececc63beda1ec323aa9ba1a3e6393d6461afeb53a9e9015639a041744554c72f5fa38ec6c7ddf3fca87886f94e4ed874c461655df09e5f1cd4c9b1e01c78e476cb469c5f199a9a8250d8c3ba5e19f6b6f187f4897b1132e06f1e565c8d2d0c498fb79d3f7c7e8c06a6439b904871eba6ee77aef7774de79b82edcffe46a8255df9d7e5c05311430b7227dc7532878ba887164f874d12293a64f3684bff067a5c67c330814668474e191bfe99cb83d89c0819a055b172055e246aa377b603c2a2989e770f902f13bbdca747b802fa807d88b21cd676c98078c1b4a3a4f401d0a9761f438b7172466d3631766e6d705abdae6b971f7bfb4c90b099997b01bb2f213a7dcafa43d523f13813932aad648d23ff9f9587ea3106b5ac6a3d6937830f87ec479da386a68145e279d619ff43f179adf9410dce8888e79291cef2b23b0427c597b25c54d646468b6ae68b455f01134a3f67b35cf6406a28e39443df368839be91a7fbed8c3801b0ca68befcc0d72b1bf5ae9206e2b19c6b81152aaded6ad79f847016ac2cca70a4b280e07106e04a0d3b46fa56ad1c3aa8efb21d1cd4d5aa36aeac1975d802572b9602e5e5f51f045be2e5b1eb262432e0fa693c4ef691fae6a53e180ddf9c945d0747c49f0cfe0f2a41644413a90ac9dc2424e209216fdc5723f446fbd007280f9e0122f07db503268f91e337a3a666ef074f5303b288ab4efa58902b603080f1fad188e6e802b0781d5d86f42fae90af81dac203daa3cf5c4e4dc00e523be323bb02ced57bb273fbab4d82b78f5056efbe4952142a34d0058b14b259e22382515fa914b3454dc96f3105375154b71edf6d5fca475c1f58cf3dd11e18137a589a10cd7f78f7acb4065ce428ceeb2d0606a3dc2369230d5391269e028ead062c4e4c3685cef03b030283d6bbe182f88b43889fe187ec412eeb9f4ce127d047a7b104665a4bb676c103e56f1dede5c809c1b7ecefc9c795243b9524575d542858342e7b78e304e690a7a19a3e81a1f25fe492addd5d922cdf8d8d1db0ff86a72e1ba9a9eb4d9f3aa677b6e3a834ddee0e09e3e31e7d7f08ae11a5f1f2a21dae05ee53ae97ef09c0466f47f53fc8f3e22031bc01d89218563fc46d544a44aa0121cf6fb5992430fab4687fba428b815b7009ebf0d042fb5503a315018831b43b96c7e35bad9e741e54fbaf88e0b1f8ba7c660226925bf349782c13493b793701f6ea7c36fdf751625d4aff3f5f01750f0ed1c13f6db3adb87f3ebdec51b48a33a7e1f1df342d1f31e2668231f9aa29112ee288e33b5bc2867f1e32a64ffa37c358d341259f30467763e63c25025223cdcf21edbb6d896ae4b02d56234182ae3db4b2097f560d0018e80169ead7b8f2881169fcec0c9b7c49d5eef4e22be410afb22a3226b202c81bd0d0ed308c43663bf0e798bd2748b201d9f15fdbbb1eccf03152600a1ede5d8ff0cbc85b582fcb7fb41cc879da24c4af36dd1d335f84c50313b742ae0b2de28a32a130b51532d22abccf431b28f20f1952724cdc050d62a1ff7b8ec11e114aa5e97fe2a82363c32a85ff2b165ce16c3ce9261df21405ae1a53badfcd193d480205bcd3cf914b95b6d8815905588a8a8f154d09367154160fa0de3a52c8f3177cacdd03447f9a39e15e37764695b7630db10704c47073cc58d41b119fc6016e9498d0ffc31619f60c5aa141e89ad7128d67bb0f34daa19b3de6fa8418adc11082e140cf49a3b260121532ba2b541d0d0603bc376f9b79eb49c66ac4fa8b341d327eefc609968f59f8422939009f422236e098fe801c20da08f7c84dfb8268d5c0468d3afc3aa1eda5aaf7ed16857dbbd2e9ab88295f84ff70e6a98b789260a16f09d5917034e47ad091f3cdf0337f01203780d45322d507fe7df8e2f99727e20ad82b7e0b9c98433e6f9f5e8bb5deb9b8f2f606b26145651a45a964e0cdce2c85c8be3db6663fddd1cce0cbe4716ac54100799bb678a7e3d31deec2530aed82b72f7295659cb7b5fabb18ca4b34a993ab58672af024e584ed5feb5348ab8198aa0245c4991c8f646befe2ca757956eb31bbf4105e67de3227daaed6fe19e2b6d2f8bab4e9eb976f9ba6dcd5c0bf11ba666074784a166580fdd9c6743f1037c1b616d15a5b3fc74474a373e44f9ca1be8ccb7e648eefc5f7f4f88f19b4f5e4595b10c2c480f66753ccc70a2728c6fa9c1fb80f57e6c7b1f2119627e3fb63a9c31107521cd940a8232edcd29fb839d832cd1dc11b96e26047d51685138784ddad8a0492ce9acaec43a28f3fff535c90e40ba41bc46adfb81ad2ca80be112bb151eba88fcb2537121c9ac911ba55ee95c408dd2651743d9ac4e8b78c6a814bf52d3f68fc1da269fada5a3dbe26cbf641637e58a7dc25feabe3fa112ed39f0ce260ee280079d2aa42cfd838634b43382a15f9d149a5c325b71bf0477c77808c14029416ab61588993b63f3cb6180a62fe578c5e27878e09f74f213044dbe02431a22d6413c11712ae0e942141451bafb29ac01cf135ccdfcdafdb6a3609aae99b80b115f68430d242127b718df6161e49b26efd7edc91dedc0878908d4f15b0a1066907ca6f331dcf60503105f90708ef747cd351f71bb68d176c73679fbb0d1731e4beeed47a207b9d0caa845c5ab2eb9681ad40cf147a8cc3da7be5972b1fb244dceb12c770791a625532922265d96360609b50564777a7ca598465e6e4c1ab4470046faf295dcfaf748d9f5db07a1cb858119c1855043a923c7d9989f19526403098181ccec15324ef915f04b70524ce1982718b3b1fd9ebc5f955280bbba6e222e22cef2492252edc2fced7d0152c5ace9d4d1ac7c4a7e73db815ab47414491e731c4b4d14c3020a8859a138bacdd0d9a66a7da6ccb56df09d8451ab2eaf1fa9671bf6cd9ea943168912545107ac82c37d286414a14bc02f9dd1edd58662673a715a43ab6f49438ab52427ad87c9d5b3853111e96e35cbdedefe326d362511d0c03c62ec446420cdf1cc5c2be66f7f07de4a42baa410cb5894199ccf124b698c8f9c4be7069419f0a3c32705c8fe211d5267611e050736878ccccefd109bdf58b0bf68f0d398ce2198a9d6e7e439e1a7944799e0101d3cd7a64c86e568283b50846095bfe5e7b0a39ea498741db569f605d2605fadf750363247de5b5d37d1cfdc32047a96a67bd1af3fe00fbbd0c6a7752561766617df92c425da053f2478d41931dddf7dd957b188ed4d9bd4ef173059e118375973089e672a726451b6c19709448587210c1c46fb36ae5deb7e3aa8c29da509030e899faf96cd155e58c36462126d1cc2da30378fec0e9c243ef0321ed465cac1e616381de1b5c7c95c1442a3ef17f93de566a5507d8e67d15c110495f141602ad0bd2bfddcbbd2eca9221181d2fcb775995f80ed2a6016ddeddf0263f928e64137acfb83b1a53e6b4ce949f39fd96077ee014e2e28c2801979840d532886efb92008c502c153d092b84984e05c291f28ece202da41c1b741079cd88c1de19ff8cb55beed79d7c1e725ec01bfeeb5e548188fd0991fd5e5bec399d794a24660f7e0fe5e3ae1ef5ef8268cd84beac97713081112edfbaf6cb392b36cb078f7a989135f676fa54ca9590a72145c470327f1ef26f6fa7208e9226041d7845f47fec91cd4c131bb0eb7e91b714461562aa0a7bc16bde5847d07d2c1d5af46183c036eb69c5d5f5138fcb4dc1f91c780a01d3021882a5acc108deb70fe57b24816d2905e48277f617908ba6171d0eb4c84e7441aba493d1f610270057c6e26639066e486a7c26c30f6886a20f06c8ec9f3ecb7875845cf0d61601fb3f2635da88e9b64d8ac1c959e4fff88dffefc67f0aac51ed65529b6d27982e67b6eb665653c36ad6e65e9c5a6b5061afe6c0c7e6a5f27eb93f4d911fa9ab33e2443232773337789f34151b75efc9ca8fa16ddce756ecfef1e793967e46d3c029a143fbc010da00a2ecb13ff13bd7a502ea8fad6c4f1cac5e7c3c02798362dc3a4bf65bc501cba1a9ec546d57594b38e8b3e373282b139a77730254df9fbb5ef97945e0dab80e830bbc1315d736e44999cb80c071ae1e97d373785f09f9e14820cffbacc3acd7edaa1cf84fb3f6c242be29432685a853ccd8fcf278d007c62078b4860cc3cbda80ba9481826c6ef1a2d21469edbff8d3f5e118fb85084e458bf590bcc5ff3fcfd3b1f455bbe4aee9d3df15975e988bf05e6e30a327b40761b34f3ac7764297f43c765d01f37cc19b113519fe11c623e53f9f5457a2f4a549f95b338ed208857a3c74af78a20b8ef2c6549664b5b6d68268d73042a07aef6533f8340333573151303792bfc3b316a37490459cff902de28ad02b51fac70054f9d4f5bd728596b794731fdba89f9058e4299674ad1f961848a8a31eadfa737f1a84a769476ed87b05fecf7290bdccf5b61b6afae232cc678aec25c2b4d5e3c0151ff869ed6a097e5e8743ce192b49beee8f15290d3da72ff1be9a7a762b18523ed4c9a6c0819ed35788269d3203f879d7a84a0a5a417f274f71f8941971850329fd3716417a8d94e608ecb5a68dee6366bbbcb29dba54c880f115377bcb8944bc0031473852f4c394a2da451be7633f56cb66e38e0768c9274bd9440d2d50a5468732ea8f4ed4ab1ef5c779148d49324d150d08d231e7f33f337a40186a38414a2fc2b0dc81e2c3aa638676b46fc7222fc88903f351e8f5e7b5883fa46c0f6e7e2c838f072f29696d860fd1ac74a4bbff8d4805e3cdac86ce9c0164c066ac9cd569bbe076c385d6b9566c165f0f54d8aa7a9b025427cd3f1d4392bd4b6167cd7d740b0399547f286478a62fc7e755147713d3418403175453924a6202b7da32343d44c5ae8f476ccf475252ba343341f28f3cc86ed5f4950ccd4332ac203829f797544a5e4bb725bd661f8ce08f2b651c6873f83c6ec22bbe1da005535be8154c2fa8436c4e261ac3525fa4ba462c772e432156a1a39e2c9322c786cfe5dce613db7b3dcd73a8c6801ff0e73824a01a4c3e7a2b8f3fc5e78152dc6715a2a78ea8c018ae28f69c2c45f6c2fa82b7692e3c42720ebb9097a4078067902dc13b7b2d776c7c80ac15e3ceaefda7fe2fbde4c91f5173be6456cd1d3ac88914643be638f3d6ce968a420911c16adba236c5c2511ed94ad55f8cd5bea8e9a90f70e33546a42f8ec40228814e326806e57d16df483b8244e0b84270981513dd20c93872d00c549caa53296901d020428a1a86234b62458eba0e1904830c37d886c8c251d4b5e18ade862e74742bbcfa5f4861512dcc3e35aea6686b79275fc78cf56d6efd42afeac3cc9491e3d68c399cbac880db0cda095de95fe561a81debae7d0d857eaa3a467e5b9ef86f250ff5bc624061935a448d9d418c9be208853f5bf73e81f704ee28a7fd8403d5e73101566025f8490881f9d0590924d31a5bef2f7059b05d85f892dca8ed4573b0dc8e43d73d44dbf3d7f99403d8660695a760a18aa3dadd55572d8e9cb6dbecbc913d269694477e1e854b4d878d8550ff041cc45c01c974812682de726fe3d3e5b4a1617a26940ba279c74a28fd01b42ca012045097f534f8c1510947bd81e559b68858e591b04ccd657d986686883edb267916f9126684ba2d4807bc39bfce8093eda718964462e49aada0b4f6fbbfa26fbe170e2c80e00a52b1bf4322efcf9a587e6f8677dd797a3b48e0ebd2837410ccdcecf1c160581957e1245e120baa53342e0ac59973fc4412da0189a0bffe796ea23322a75ca49b02b954e9c9b75a02b922bd2e29d4e253a57ff7ef94e2fdd893fe6babb782569595f87338d59b49cae655791b1b183a50897d06a03f1ede5aa9f31f2ffe81b02812970446281bf576326ebf4550776e90afa78078111731926b9e1ca39d6cf01c2af61f1b1c35b8a520ce40cfcb7c460f2f1fbb94739f77ff86d65b0ca5d3361883602369533ba8e9406f0ff47f18f2fcaf9af147475668d3414b395bd57e73f153c8dfe3f94455018f7cd2c2995e82bb3eb4dbbb7c4e56b630a76f26baaff74d911ab078c15d9c703b2146726d8ccae20129cacd85481f2566589d8ee3d6b4d0b246dcc2e09cdfa2d6fc73aab8ca4125f24771c87ccb6ee2c909955dfd93981fa091ed3f26bc1cdb2a9de6189c2b3f5f06fa986279709a920f993c8f3ae7d918b2de8ed67491c8441413c3fc77213e450225e938d8a114f391a5605ac2dec1046bbdb8c72589b6edbffb964f49dd59cdbf9f9d04e750284625217ccb3a51a2fd542bb0e988e91a4db694d3e911ce8152f26d48c1d3f2163ef0147f0084991e4ade7ffa142b05109edd8d6f3e175715def79b044d652118cc4a4ea49d100f8d57464ce9ee4ec602e3f70a064ab578d2f9a970eb4f0c4b71ee9f56ff2f3944ad28fe0b172eedd976e35b062161b9ad5bedf5ddc40410f57311dc13b28b3e75ffc112e80b2dd10824a359605db13e4bc825628bcbd7c73054f15e48071b39aab845ace7169e8ce2880b7c68dbe184fee5c81ce30a57790607ba6bdd9a70acf843bda9614143e3a3e6ab5cea0624044d06c8a05f82a4a17b4f7e4bbe0a7d7102f67722634b61547dd3ab1fc81dbb363fe327efdc72faeb0b107001bf527293e232bc63149d4b38cf5141cbdaca9992a41224628cb0daff43db03b53e49b06e98cda5556b497f6cd13d7eb7849f00bc0106cc293da9c682363ab4d26cbc46104b84091f1b7e861f06d9527173d042acdcc92640ed5bf2c2e30d69f344a569ae9a52e6b18092a97228297727b0fbc82959cb27c4b97dfeafbd723eb76bdc7bf2fe2b75913a69a20b7a1845392951a062c4cf2258d7f18fe24779286022aa87f2a21f2a1a8ea1e97cff99941e0e6d1caf9093ccfcae7cdd49b10a8baefee15a0330c9283e3d28ead29c9cc9ec53c3adab5013e3ec5734046b12f2db9841908560849d2f3ceb63b8e500d571da66022d6abf3d950f0d1d818b23d8769e3ad3a7e0cab6f7a6afd9f044a41fab3cc4f217fd9dbe36fc8c74a612025f53362090a7e91db7c00191db6fa0750eeaee3f3991eab2b3ecb603165c60fb92a13bf921665c8a29605bc99f188b829aed6093125a8255f328f29f3d59e1edfe42447eeee6e771bbb2e156009441c0b94953ae1dedefd934fcf418e788e60a76859599303d66d22bc898b5d723694b8b9799fc88e1b9f12735b8842ddd2cc06d09ffcd3d4fd69ff970912cb2530709c112786b7146b9d1329586f9fd22f3fd1181e8a4884e863d4f208cf7ca838584ce898273027d992d919d2f469aadbe3e0994594e22f822c1019a38f32cd0344b5b9b4338ce897d697bad8e7b106e4001200b3f4f4697cf45360fef805c7a8369df6758629c1099ad970f287bddb41ca9ef23c0dc07130f801160644430c0f17a34b6576536bd31fb72170119c0fe75e899667d5ec9393548757cd13f6a64f0cf76df91633d997a0ac4cd0942f3ba21330db9e6ce5d5d45a10b5c25a261cb5e1a9b9893ace5a067dc9fb5329ba1a0f5f86604c7f185d28d6bf2fc2c39e7c5777e664d6c53201004eaf463ff8522e8b435ba23762105b808f20210cbe5bead624972ef42b5a4d0c180a556bb20c950777bde6090d5d1825afba66e9f909479e88cf4ee30fb53736dcc6162d1a75de0a6c259ee126ff2a32b19b546cb1fc6917d6726954a46dced47f350bab8321a92389c7421cd89143a23868c5ad16fb00d70c548a075ac424f4dc3b30d6bb0187d5b699de5222b05f8020e0d89092d9128c97f1ab22b64463f34486f7433a1a0471184679a7116a712d5e48b00d8abc570d330dd090c856145d73fd45b61de1cb2721524ba96ec1a800f8be68a58a13996e54d7b03a3b1f2a21ecf5222c8543dd33bc6b453295a43d506aadb390e54d3211f00e8532f9095029e0e3e70972b6cff7b39be265c26591f7f5fdb5ba0611f599c7aec1313914a22c8c94d218d39e5c579f70e4ef2757624bf6e003c6183941207a6f2b96d50493e7a258fcedb02c52fbadc9e7c90cde85ce7a6b668568c7f09f6ec834f74ca78cfd10a665650859426678fe683f23cf9b3e1a14b6f2aa5465102f4d03a4c322a73943e220d3ce2de282a7ed89c312aba028c0d02d8866ed1eacae3882f0211046d06b9aeb2f98940ca936a8f866c31eee0b821154ba1b02b099ee69fed09c6a41ec3da9c13778eba7d4c0f78495cf714c8c665e3ced1c437fd720e81babe7b29d212b57f2b890b524cbb2f5fa1151955d25c1cb8f90b7cf73e19096a081cdcb3bd0b28a5b0b712568cc120560ac3ddfd2c5e99eebfd0320c31093dd4bd3204b5e7f7bef5e03e87b888fb3d09446c5938db93752354556fbf97cfc5409e41ce8e659d9a2ba83aec19f419fc16863916b715bdca3ad51c45108bb963612320c30e2686a534912792b5bab28410758ac0a5e7100b0cfcc833a54c091070edbd0560dd4c66a00c9b11b5a041c281ea24be5906a6a441f907f2fa98014622ded0a268a0d7857c1c316703797bb4617859f745054604625da7c46c3536893cf450c01c982578feff22d0b29bb29a0d2005068fc5a410b169a9ddc1c34ffcdbf3ac42dbc0cc889f24d7da10afccf88c6756413b005acb64a443fe4d410b74b8b98fce9acf5d8dfd0a093237c2c59323a82b02f140c6285e0040ecf9a1162c579353f608abd65c50fa3b024f2b8a267c0ff4158cc1dbeabaf58ec1a65026fea68408bb1dd45752112bad8351a270b31a4999f06ab549fa10f233a051a1e58616e1d6fc69e74549168c01c8a7964c8134ef9cd9052a1af1a60d929ace1886129a0c5142300cf1b42c0e5b42cf8baf228e01d2d0a270700a9d6848a5ca307885e7a2f3f5efbef5bdaa90b1e1796944c79bf69090e343936f77db1985805a308fae3850a140aba2330806a16e50c2f34fdd7e0094ccb8ab44a4dd1524b84c5c242c5fe3902fb33825342224b261ea2a44d92ce5d9c958887fcc1d005b50e3b1124032e6c22a16ea37eef553070db1b08646f5480bc7ab509f16a9f22eaf65b369f7c2caafbbefe4f069f06040b4be7d182f87a7408abe796f444ff1fccb55cf331faabccba0a1f192f69cda77e4aa78cd8e016954aef04d19a24438d44cfa59c06a812fd7b39c9e134e3532cacdd8c5782067f885e36412a8c19b7bf403579cec405fefeed7f086e603b4786765a88545587f2b660bef068339216a6529d7911f3ad17a49320b7f2941953b2d7f2a3d45e3b3c0ddd5b352af1ebcf45ef0ab606a491c37d05cdcbdc8bf806bc0fa4135bda0401efcbf5e98143a2f8edfc7903d445b30f728003e6b503039609553b810a186e68fe65d94a0e7d71cc05e8844f89418ddb30e7741ae7472ee0a41dd01d99da9dd93e3548fed92e746c28a942a0ca3aec5704f1e64c5550b58d03e30bb9d38e226258939c38c307fa02dde6a2642f376a1ccd89492799de8733905f6bf1052096b804c294275d11e0dfe00f89e91eaaee6701a8baaab46a74edf7ba9e3d6ce67883400faa13d7cac930ef664fcea58f9c654724ee1a024015824b780f8b357a1db9fb5b34b50eeffe7015c8a9f23eb4cad4bde1845c236a3530c0240ed6fc2e5e08a85cb5d9c21803148bc5b91425aed9952110eed52d719682da02847c15521cfdf84fda3299fd34eb769ead4af267de0b6920fcca8e390279d8eef640c81903266e9c1ea0aea44a8e250e8630d19ef140c53b935fcfb58b49f5b3ff9f9e515b2b51024d8fccaacedf340af504778b2ac876098b9ad5cb9a3b8212e861914c89c9ae972cd6cc09138585f7b49011307ae198211cdc6677c5d202d056a9f3ef88833a3473c5b0cf87ffffc97b8e46a21be1cb06f7612fc3d42879ec7f2b913d4b935fa0f6dddea20c2ddd4b78103ccbc662dfe3e385ffb5af3db83aa3210af880c8eb10b719b6aee3e5f5d49858d79eb318b13d2a8accaeaa4ecea2b788e6c0db0be589a3ba0e8930eafa3162d3040ba8b34170bc16c6ad6280fa6f2d86100c1dc0343ef2a4170bd4bd8f54261be5e87423e2fb8d6917c6a5028ab36a35817cb0a27b38fded7ac0c0b6af680636c6721c874dfef49059dc5ef9ee8a74f8d5bcbcbaff81aa4c9c1e52724ee746c98f2f57300af2aa4980c4b1b0b48a7eeb268489096b14830702d1a9f435876e901e83253ea82ad4fedb490e70610902d44fe1caeed3b2a437385d5ac96059d534cf0d9f1837d628c0a0a6d6f43f6af5aaaad4fc7987aceb3dd0a6313c55dde32b586beae1af74a2ca83fd750975ac743963e5556cc45156177c5bb311dcb0a978884fef98f3733a41d01f431e18227d5c1f89ae4b6c1b21290e156640a86d4bad2f86007489fa18f622a28aacb197d760fdd9afa463715b94c2cea2c76600e1813222d78176b7c034b4e0b50c8b58a67b092889f2c684a932b77cad0b112a8edd7a3bc5ec068e142afcf4735256aaa116a5c9d54b5ed81827b81b131f2b978b900af1256437d9a53db4601c6035175b1b625978f5a82460adf18eeb392e06579e2dd69dc8342692324d676c9f97f52d2d9a91f637d83bcbe5bbc64d86723623d1347cee5f44370cc7106bf53dbdc30b7ee1cb733138d6fb0ba0bcbf476c67a13a98160a9242fa339b43fa52e9a3c3615a51e51611abb2ca6a4b0670672b46e727bbf5910f771eb24992452b9d06db56dac07157a7bc392cf56ab842778493438d32b9595f47936f45b2401559ba0ab2d863b180c438de29f59487f87299666e923023a2906fac8216a455384da5a8a40d1287cc5cf15548df44cced33b3e8f0d37ffc5d2fe8a15131ffd98bae62c5fe2d49cde9281d3049918479c915eca8c0e89ce84c1e0098a81e4becfebc8de2a1cfc31dbe179829d4369ebb591b6b243542cf1eb956683caf1de1063b8a72aedf3c40653178f6aa6d927b8cd436a80271e4bb66da5ae3538bafc39781ada43ccaec816a9a69b8931fa64655b060be9716303e3803a6cc92b85498c411ecae6dff5bd66a5cc1b3f7506ac1d205c50fb1b1f4990c02fc472c5627e27f7cca58696d400222d4c3216500cbf38627a3cad4a5ede172653ae922d893e8d42b1e6a9ea3daf05404ea60e70143e50d7baeb2976acdcfd02a91543551b4b19411f9f3911772798414258edb9d719f7414e27c464326cbd8a7a09f9014a0595810c28a3a451b3b23388324eb24a75e654c5a62bbc89fc4fb6fdd5379c4663ec9f2d879c2f5d692389ff5211d14aeb77f918a064635163518132f74df2f78c2e3cd880b1a36e93352dcc8552d9152dd9c2ccd0c61c33bd5fde276e5da9f6770584f699e4f11ae619e7bec14c3191da73963038b2570d63a02c43a65897aaf4fea8415d889f5d3970187c3a0271b110b580f30d4ad1d1b6cd8aeeb5635a5626826a5768deb9cf7655d953e9589267c668d2ec994201b60428a6f58ea794e33df9553911e7224301b9d0d2070c6c2042753b1497e5e0e66575f6f2326fa77e64f958af35abcfde841be3c5df351af58d1d67d3b983bca0fa897d6f4b1ecf123a0a5977e8f19d948091ef706c3f508ef358f9d152ae4e47b5e97dc329acfbc0a1283fdb69190870a2067bf0678086d15d4e849fdccff95ea2c283436d939db23f59a75e35c6336e978a03d96a837512ce92abdc772b2d075fe2230c4565355337b6c75ab4764b1936b52966cfdcf2793e36207303ff2971a62526be4c22083f18428f31eb724ed3599f3681ebafcad850df1a8e998aef2e9c446608dcd6a68c7be6079178df73b143c696b5de933c32c99338f3e9cf13360315e9421115c77a314aa0fb389bc5aa88ed722f595820340c74e7d8e318c568a4c0c8c94e8ed16816500edcad4d54b95e3706fdf7d831b9e247e11b8c7ecfaca5cc31299ab57834880b21780008d5309a07a315141a2419d4c58289799b5585776c45195cbfee7c7f2973637dfe7b6ff361d1754304af0e5e5262c13167e6346ce9e405eb8300dd09f56fa46aab9e1beaed9cc8a66f8c8fbf0b1f97fcd411eeeb095b3618ad5324288abe0bc081b8c8508e584b99cf6f6aa63355a53c22627154dfb0ad0dfc64051d817ecca9a8be25b731f2bd87954ba730646d4944c055d66e6ca887fb2d919d91659e3c3a5431bb5500444bb59604b0384720599e977b8637975637c3de58019cce7ff1f4881e0185b0639cd56c13c5c2dfc32ad583b108684b987840bba4ab578ebb269b2548e59e02515ffcce6f4999791c60680329273fe6c7c958cfb019412fabc326681ddadae2e18cb7829b99ac6d11328b418a009ba9f1a8cb994454456dd05af8a63c624bfcdd0ceeb0b0d8816eb09152a5b583429941d404d284775e08a9c933d0fa1e125a86465cb95303f943a64ac3224df8c48f17f2f00f074ffb9d320828e576cbfb54f0976994d9f7718bea8653b1e979c02e43988476dfbbab07e09401d8448523964e998e3406fad4c399d3aa446dbf6c838ce0a85a16b0a569345967f1cdfc411636262ccb1efd80c76460065365a54bc3ef8e6be8f67104bfdf98e30b7e8a8831bad6f24c3ab936b85b7fc2aad37785380d0d45cc022878f76cd34190c6a69c5e7611e32862c6f02643286458d3e50ec4d0c981c702859a010476d49264d88c2de07c32ceee3e2bae966044340dabcd6d7afa3411574c7884f4b186de10e29d18de726e9179282283a4b11b6e4f6b24a5545d85c3bcd590003d070b5a6081e42052602d7fce949207d0584887b5c03cf871654090e84b5a64166588ed24b593f0087d8caa22d4a26bc8da28b5dd3cbb0e8ad8940bf18cbfcd44d954e3296d778d612fd1688acdd1b39c09ceea785cf2683001a2ce1b33b6ac01a7da9964d018643040f0045870a5ec40194c034c9b34bfeb305e307ec32b84066f1549bd4b5c6cf3aafeb553a082d6b6f0e668ef404b22874333ae03a57aac2574f83da25af1bd575d2377b482262c550fc67a356ab88a7de5a2d35bbaff5480ea17e3eb5021483c9e0b53b2c2c8b34a963f7cc813513c67da5e1d5608bc279be38dd7bc40d2f15268f95679e347998c7ec44a6d5a1349df07a4d919bc2745a9d5c7a1ccf3012c5b4306efeab30713c23c363d7562c0083042e89619388245ca9cdc406531484e4f223756201894e1d270b32ae323d85eb24778d7a97363994a0f25474d9316951052bd677a9df140450bada9289fd92ad22571eb174f28dce373b612f6cc46779a1608a05f91d4042e376e412b5a4bfd3d77528cd2c869d171acea703ca87e2934778e2757c01fa9544fe895ff0d95b3c4a2575445758cf072f4167295ca4ae17133ed71d5d64c106a11c602190622a325949d4747675968ac8f1daeb4b3a5403201a7ad33a6aa28efeb340c8cf3210e655a791d1114d4008559f04ef01cbd37ac417723072b80f8ac043ded45c19e7667097084518df6896d3214b1d21233663bb90ac6da2f852f76812c3133431e08e46f57d456fa045bcd9e963ee74792c21fd3ca9432ae2e43bda2ab6aa1075a74a89c64a3c8cdd4037e248b8fbf728963a3833ba3ec83f3528538f906e714a93dfe35fe3157c8eebec19c29a9b92955821559cff310f3cdb8c35b5fac376ecb7e992e6f59bae64ccab6ce8ad1e1d185cd1d9d1681f0da848347bc344a5f6a161780185136bcce2c3d0a0931e24fc23727cfb2d3cd816d7cfe7d0b721c428186a0c352baf92929608e7141f035134ad6df2ac4ac5426a4753557182539e77b149c52c832e067a88658203c2b426c9abdf7c08583c492f60fc1eb68a8e9f0f6e1c69c01a98d0fe9ddbb02f3bee1b22bb28a7917a311c15235081ec131879cadcad765eda2ca370d5193a4a674e64cd6b120558cd6b71db513adfa0ed623b0c80fa2910db50409981c488ce6b8090ab88f0539598dce6251480774495343069b22337275600e9c039a645eadab87b18648c6c68f90faf7562dc7ba5608545dd53844b60fd9d08f37e111100afa82b7bc5f3b99ead4942760e00a191a002c4cfe2cc0792298734b3d05c3e5349ecc2da7f5c12efb868406ac61021a8c19535a204c429b74555555755e07fdfee2cee0db2693ea356596ff57e45ee5e7f6990d6c53d535dc7001e705794cbddb8d1a191164896199bab525db3b22fb800e15e27f3701bef603bffe2722550b71e2f648eb747c62f9d45a9b8152e3043c052905cd830aba1d92d881840a9cbc75c84297c3b4127abb3fc784a850149f9a3049452951894a23184535999212c5b027f5ee25bd7b497a3ede3d1a6f1e186f5e156f1e126fde0f6f1e9a37af85372fbf79566f5ed29bf7e3cddb79efc678ef4ef0dead79efd4bc773dbc7739bc775bef9d02de3b2defdd95f7aeca7b277bef9abc7746efddebbde3f1de59f0bec2e27d15c58d1a1c70304447031d9d86ca3b8d94771aa7779aa3771aa2779a9f771a20ef343cde6974de3280614347830c70f4e83342de67789cb9600b8bf79612ef2d21de5b38bcb7b6de5b2dbcb7aebcb7c8f7d6d37bcbc8ff1bad29de5a46bcb578786ba1796bbdf0d6d2bdb5acde5a4e6fadf0add5f3d6e2f1d6ca799bc1e26d86cd1bcb05326d76f4063b7a6787c70e3322bccdbcde6676bccb8cf12ea3234706659abccb10bdcbc4de657abccbd020d3e64d66cd9b4c0e1f99216f3218bcc9ccc040074f0c55de3158bd63607ac700f48e21c77b4c17ef314f8c31e23de6871ef37a8ff1f11613c65bcc136f313cbcc594798b59e12da67c8b797a8b89bdc560f00e93c53b4c08de616e7887e1f20e73f50e23f50e33f40ea3c13b8cebbf8f0e787a70e0a303211e74b063a3c1a06f30b43718a93718a53798a1379817cf8e2f29bcbfccde5fa0de5f8ade5f8078c1e2ed0589b71722bc6ce0ed8502376ef0e8de947797fcee157977b95da0bcbb7411e1dde5f5eeb2c1bb4b8e1a3366641de09d75e59d95df59b877d6947796d33b4b847796cf3bab66f1682e51de5c96bcb920797329f2e6d2e3cd85c67b8b17ef2d53bcb72cf1de52c41b8bcc160bbcb7d0f0dea2f5ded2c21614de5baabcb740796f51f2de12e4bdc5068e1a3566f0d0a0b538e0ad85cc5b4bd65b0b96b796abb796fbd6d25978ef2cb7771612de599ade5988de5980d8b881011626de586ac86021e28d2587371619de58befcbf00032c32de5860bcb1aa786399e08d358237969a37160e6f2c07bcb1c8bcb15c78636161e9de58b743fd87d2a08a17ef2a4dbcab045123c7b9c3fb94c0fb0cf33eb3bc4facf779f53e73efd3f63e49a8d1f888370ee28d7b78e308bcf199b755e1e6c646eebe7355efdc92ff5f9717789768dea50bef32857779feafe01934ae8b37ce046fdc10381dfef3d0a871c105b8d81bf7e38ddb79e36ae06ede54bc7853a1e24dc589371511bca980e04d258837151ede5428b02347933bbcc908bc49346fd2cb9b64e14da6f026736f32ca9b4c7a93467e0b68e8dc72e8db0cefdbd6fb26e67d73e17dc37adf50f86fe3860e1c379cb7ed8ab78dcddbf681b76d036f2b1c6c36bc6d62deb603bc6d56de36dcdb46c2dbd6b4634327874e4d8877ed86770d02ef9a9977cdcbbba6e55d43e15d3bdfb5f15dab7ad78876e0c84047f7d5e17d1bf0be62de77cb5de17dabbceff8be51ef1bc2fb12795f1f3c7ae4f21eadbcc7fc1ea7bcc7a9374d006f1ad29bf67ad3fa4dbb79cfb478cf4af09e19f19ef9f09ed9f09ec9f09e8179cf5e78cf4e78cfa8bc67e27b2680f72c84f72cc87bb6e33d93f1b65ebced146fbbc4db76e06d31f0b635bced02deb6cbdbb6f0b62a64d05284784bf9e12d0587b714336f295935665809f1b6eac10a87b7d50c326a10590dbdad8abcad3a785bed5ca746140bde50be7843a1e20da5046f2848bca114f186a2e60dc5871f5090bca16cf086e27a5749f176328581ce8e6fd055e7bb4a7c5725bdab86de553defaaeffda48bf71326de4f86f802b36ab4c365cd34ca656f96753393bc3372d43d39b14726a0a812ae89d214789454ebbda5d9de334739813daf7b4ba39c9c2a987337ade19486e672df8c2646d1d499ba9b62f39301c5733765cae1d4b4372851ace12703c86701999fc60c1916d4a8918373f37f39ef31ba788fd1a6c390f20ec3c93b8c261a15e05197bf0ab27e82be0a60396cd698408935252001144cac19c1134eb06982cd124a30b1841249ac4162cd08d688e08810180182223e40c4101e10424d078250a3464dcf10decf902023b586ed519614be07f15d879ff7f3fdcccf5ebabbe6f72d7534492616b550404c7b4ae500a1005c1314bd2207d68cc141be237a33ed52e5887911566f31aa7c70a6c4081263e77f55526b38de584ace3a18638c31fe17a97a87b165de1f7236f01c0d64c0879c1e78c8f9b14307398c2efd393a80c104c6ceff2fb688e2af5f0451655f94e1f23febbe48e18b5426ab6379c95c7b318417a38f2e9888c5ae1394eb082e90e0e2871f1c6f8d8b15321724341707b748c11643fc3e352c6736a7bbc233a32d6480bdb748eb59b750b2058f3fc5685205b548e2d7e2ccaf899f420807d024e5ad8590163e2acce22c923809268bf40761350b9f2c1a0b305e6758fc50c3c68286c5d40845e52495eb4856700ff40ac62bd85ce1c31539d470242d6aa1fa8af3bf0903a823698faea0ea2b7854580daf894536afbc91b4215931c68a16acc8d58aa9e7949c89453ce2188ee0e4c88a222b5e3cb586b7d466ded2ceba0a30fe1ae6b1ab30411539bc1629a935ac22ebafc24a15bdff1fbcab48fadf5389ea8ba74cb199b3412f3d73392c458a6d40f01ab6b9a1cd026e0964aea2186bf3fa8fa3e132e7d8786f8ee18c800a2bb1585301fbd36ccf4ae27a0a28fef31cfd277a4f31a68699e93dc58ddb4c72bc752cb199493045717a33281bc320a30ac2a0a4a05d9e120ace7ceabc2854ed0a2a0c51b0fb4028e325398a32ffcddc51f4a048207895eb215510a74d8222cc5b8a220908f0234d029c67202c372a4c51f38262c66f62f2b4f756438c8faa58a827b2fc59a89f907aa2e969cd4a45edb87a30d14ef440bb57b47b95923399fd73a638213af182d55a54cd5b8a61ce091cdd4412350c4f60134513343411a609da6b2d224570e80a28c6a603cd86cb6b5185e51a2245252dc99153e3bde8d2886224a8324dc77b5a9426f5742e19ba0a433247a2e755beb6dec52d01803f07d9f2255b8925b2120af80f44cbb7b4988681ff37af7a28a856428612ff9f7381246e782e6f0dba337b34de1db68005fedfcc6e541202e8247e34121d006f59da2a4b33d924aba97d52c1f18e253e31adda0acb1e549096de0a030a82fdd4802a8aeb4f35a508555850850159c96aae43468240a01cc9c3e879da9f9fa02054375e5a95193962b3339b3d92d54cfae4924c753ee83d4b194e56cbd2f600d5223c9b037b4422550aceea558b8aaa14a05aa4e2ac6034124d6f0e5f5bb52952f5a082bd129bb867daec9dd92a23a7301c6b6a5af4deb3a63a5cc3a1182373378b3593b5c2c64b663b43ad6d24ab69946d769647a67c4bd2a6f6c86667363bab19679265bde4884da3fa81aaf330bce915c5f46631bdb94713cb3415d39bc5f46631bdf9bc594cc5f4e6dcb3e51d2fb020881d9ae6d296f6cfc1e1863fa7027f0e0526801300355aaec606105940ac10c39901081a0f028fc4623d8ba2760aa3374a09a414466f94a6a9a9dc04954a20c53ceb94d39939dd13cf3a8d97679d3293bd4de57c9b4c4c5ef1ac136a97dc1123f12c2ea576f826859f307aa360f44659c2e88d426660ea26fc3911b021a786bb12e01ae3030b370204fe8040b11e6a77e3686d7646c3ff19391008379a54aac3b11a7a6592b11a7ab5144575cb76c95214159028d68e66dffde2729af202cede27f7a2b5dd1d6f09e25996242ed5e17cdafb45c1f12f4ace3f285dfc83f235957f54b77f5455ffa8a2fee7e4b0e1c33f1b0df867e3850c6ca4ff6c30fdb3b1e39f8e14ff743ef04f87867f3a5dfee9ccfee918fdd38115195291f48bf7f3e76821f5d91a3219d251493ef95d46f726fd3918a40086338550ad8908ff6fc6109a94a512a3192e8f82848e00b98a867e1c0b18e959143572118160444c7384b8425712d71029a6a6dddd2bd2f6bb901cf900e7322294d14bba825c40f9c7c44fbfcbc705c6743517acc80abf8b082d27037966f4bb7a90fe9c222fd710d225e4d2484c95ef5dca51ae20382bb8807880a3c3ef02008f0e9dfa5db5831c0d70ede6acf9bb38f8f1dfe523bb7ab83670696042ce0618f8a6905e439b896b53207a491457f0a229c663ed29d2a482f9e25d79cbd2a2f6eca5a449d66ab666d22471b28ad3ea543fa81b1833491fd4684904d17bca2af835018262a42729f2697752b227209e6a7f0d712dc55035c56765023fa715fe1ad6ae3ea7a4f3a4996cfa9ab8f86fbfa61c7eeaead7c4fb8f674615ccd926a8bfa2b8966b176d12f2f36362c56f4e1f1303bcdeb2bdc148995585a5b937b33b6bb357368f36d4563b9a3b5b9e39ef6a8f7d99f7eeaa7956d0a2e455cdbd592d2f8c1c62546fb494dc559cea46dccb4991c9ac48abab352c4bad28ab454a6c12933d47f356da1539565b61753c514c666bc79ba12a98839d5264b76c97f48eee88147bf56ab1d1e624a65acbd2925264f746b3485966d5a44905b3ecb44e32b224793aa30adab234aa371e00e10b108ef87f4168ab215d50c38c977c20a89075682ef78150f5473939851984375830a1230d11492ac080242c243921099a84098424b1243c92d018926288030e7861e884a17268c9908f8ea9a11edf8e9ca1235902c90d1f923248b47c48789f8e1e0cc478eda250e8bdba4f4750f07f2765cf8bd67a409c2b1e62879878b4f91302e3bf50129f1005fe23e0ff27c41b5f437cdb098950c334dfb1a63a2c344448c761a269694041b13308ab1e891f90003e20a60fa8c86b88d30aab610ea3357bdb89e253180e5d89e7f7030453e183848f0daf210b3e2a7c3eb2bf86b01ac27aba5918662421be1e693e9faea0087e30cd07de7e1e598e56158677d4955726bbe0cf2fe50365c44400a382b1f9622dfc353c611580a5f973b42aa40f96c9eaa4c80a5f11a29f08184cd9e82362432e4b4ba4976d595a51ccf6eb29c12f82b92ced4c97c9de598e3827eabe57d65f435c33995e55ff86782016ebd1aced362dc9e33d9792a2968c4c5d2d0c91c6122f414151889690147e1e738747254341403a22170f57062f0f78be20366414ec5d9c585a1abe0c0b7061cabf203b8c80402050acb4395570c0e4be1c57fefbfc03d2f421a220212769ce15d6a3a4272f55989291290c45a2912925696479f294c250ccd17819a6a48712e530ba0455deabdb74e2a917d14d7529f9240c6d2669238222cae60e9b4c7e1c2d5c3bffaacbc9f5b56bc7b5e35f07281871a045188ab1d8f7c30c388e46397c38be1fe5f743049a696368fafdb8e047f59182cfc710a3bdb771b4381a2ec5d3ee729e59e961f698f2f550fa6b185e9c15cfbb629a714e1c479b8ef6deee88691f8f2f7762c9d288469e98469e782abd52e995bae5ccde143fa5282ead13d4de1209d51d0999628ec6fb76d67c3b1ef87676f8796a98a3f14223544254415461f8eddcbe1d29cfd1783952e4e0e2e6cbe1e4c3c1e6c331048e1a7ed1e7bbd1e61fe3bb61c29f46d5d2f602b721c47f83c62fc48c1f40e408e1433c01a5feff8d13a490e3ff651ca183ecdf560dffb6b4fe6dc1f06fcb00ffb60af06f4bf76f2bf76f4bfcb7f5f46febc8bfadd7bf2d0e50bc74cbe413d4461ee574e4789dd06b238fd07b9ee4148a9ee4ed2ea197cc8d61e8f3cd90e542830381177e1703cefcaead05fc1ffa204bd132f9802aff6d26b974668c03ace85914b5497a26990e69213173a4cc07648cc42054f5bbc60455fd2e31ff5dae302e3036b2b4b7043237fdae2f292ea57e9c0b7c0df0e0672c67c66ae8551a28fe17b914f0ffe6a60241fc86889b213e19c478cfeb9321cb27c3d087264d14ff7bffd0d4c372f77779f91970634008ffc18c4b7957d7c4645a8aa2ba337b249ef97206cb2d937a46e73fcfc8a42c67f87b97c97895c0d456a60aca64152565155b9b95d5d14c9fd4f0a6d894c92a1bad29ada16bedfca3896766da1ca7625151169c0f335f7a65a9abddcc9cf0bfa828df14535d148b34de289e3a271e541f19249e7b1747c5e423232386274e4cbb5722cede9d14ed5e852153ef1b33f58941a22c2d5256cad1aa7aa28c6669600d4343183461b2ee2d37dedd7dcae3192424ab99ccb8a7e755c345aa1159cda4b5d8bc277615f1b2f38f97a75ab152c75b8b94542b566acf2b93e0bd68ad4b14076b17ade5714ae8c2e5bfad3855bac8baf4e49cceac4545358b595264954ab260494b30b49999984cfa6098e1080c44ff631f0c1f9f1230c57ff396802fba74b313930934f113c6513b1be5f3c27d21e9f7a9a9ad268944cb646e6432319933e2a2c3b34e77c6542f9a65b01e59cf4bf6ea1d55b0c4231359734a1221c204654949e928ebd23b92e9cd3866b4d8d0abddab25052d685aebbd51b72cc9dd7d3ac01498e584a10fa4a4c05c236b057b00486d0ec54b431fe40c80a10fa4a46c159c25811787af4c7266533bdeb25d3296f8058659480547f026bb28aea5b8e7552b280b12d2c96435b5e3ddc9d26ca635590f8a975eb27bbbe84d49f49664498bd14893469e98a8866dcf2ddb256138557bb35aad4cc914516eb4351c4b75b8621e3eaa60cc24ebb5a1d6526128a69a2b08aba04c567bb3da63533b0e396dee55710a4b75674f12938c116620b8657b7375f97fd3c2950198e51528579aae285d21ba32e44a902b407ee2da13e4d513a45658901a9eb8c282d457ad212c57295677c4b40250510023fe1af6bc6e8ec9ff01a01002f15e349d05813fb1d8783f147ab8264eca4678d4498dbdcb64ec5d262339eaa450e0a170f4ff78d449f52e2e5b118f3a3cea3268c409409cb0746da62d4f9100354c95a5057bac8c5663154826a3c92a7945a269492a1d191d55a434db1256611697e24ba615a7b6de5dcce8e70728cb2a4e5f1596f6505c4f5dcd3d3435734a82992c734f467b27ae611ced890c28f624abbd120633c99e57eda136352f7a4ffbaa5757c19ec56199ece7c9952d991ae149a9499c7a52721a41494a8c9a927a6a82244629253d39c9b1fba48299b4b51a8eddd1a269b5f7497daa3b6ce262268969b18a8e76bc3df765e64c236fa7456d383d7ba8495628464e65cd2473d656515c93aa1e549008911f907739a8c2838787c43993dad4c8912941f546b317a5917766bf930884020705e0add98cd28c1cd1d51a5941c81939a2ab990c83acb2b22471e8bd0201cd777330872e4b712915865feee98fc5be52c8cfc287d3ba63100804fec46277c434d2d4e1406be2367246bb57f5860a07a84c51490ab360f85d09c061d84bb1d34f5090d0ce4659322d75bd8b8bc52ecdc4662c8949d212d346e62426494b709a5e34cd64148a62339413a864d4486541ca149a110100000000a310003038241409c582c17848362058f614800157985cac68449789a3344729458c31c81802040400040000a00a03603040bb1f1e0e1e7298cff8e3be9cb60770082dff75a03ffbcd522cfd62be14458a8af2d1dd570da90da9c9a93dc6e91b8f6d095172bbc70cfdd908b235624557dc0c8cf0f51de38a7df63419145f406dd40187cc60f66b038a38af6905e2ea746a77e4295f7acaa367b920cf5220805c3e81ff5c21c4e85b94b86558b05ee0d32abf15cf0e32ad232d2aeb18fcfdf55d9e34f51d8042cf3f5fdb9570a24ea9ad54f905e21884888c6d8daf2e182bcfa761e8743f6bbcb226b1c06102e576a5d5137665eabdbcd23718e22301d89d6610c62f818dbbd6e1761a5b9d387910c8005af5c7e9d9fb49e308bb93ef2f0a70617379450ff9e56484458065c9cb9f3e985bcd3ec01c1f57b271a856b2eaed51eef478190079b3a36dd3a9a346c9e7fa0fc5b62faf9eeff37374439be316f8544f83e573bbf718e5966bb95a2ed8a89ad02e81f22fa45eaeda77d4e2da69d4dfddd378eb0a7eb393ff483c80983a4285bd60248ef7ab95b73a475ac14f3d09c623287a681e4f9c81e311303e3f53e8ca2e87dbc1f3559b7160190f4ad73f6b6038953ebe2da8792e62a4ce083082cbec28dfcceb5e5b2acbd12598539502a1d30aea6785fcbe5e18274f6f90b12d560eb476d9814c4bc2f303ffb5f4a87e1f1ca99618da8639955377931b92a16cd43c2914107031c3f3bb7b336bdff5ee07b7aa1e2df2e8a009e5ca9ae0206e4dbd209ecf53232474813ccd7431dd5bbc0a27960b87a3cc497fc0beb97c9f38307eea671f0e9c01b9c403b91b27f2448483e8de76f49a277ef1951a1f5e26f448185b36cb87f741c723971efd69412e3d675e70e852e1f4bda4d4d049d05374310c804c79274f17421aca87880999ada4561144ae063be5327250e27a109db42a0ea50478c6a77a82fa57422b1503968261a4cb4f447590fcf8505e63fc36837e06c9e43fbf25da60de66e588501a037b5f104196a472e877e50165670f1fae669b99b793a4b0726bd49092f7385505fc0c319aed3c20fb9b0d70bca14d2b211d2ea794033d83ad72fd8fe6f505e4b4a7686ddede35619e0fc1b24cf8fc9c0ad9594703e56402c1160732d9a7320ba4015367e95a2a73a356b5cc471d127c5b75ad8e66218503ce6eeef1765acbf9e4dc5275e4d726273142652ec7aae25cc4c0447efcca41cfa723835a4b820776e1c4edd0440d254b86efcfd73320cca7a3deeadafaa66581e9320c42f8e165bdd2bf8386fb4bcbd0099f5921fc2d1357f30bdaa8ae4f5389a6daab7bc1fa1a169876c24e2760344c49a6fcfe8b548aa08c0df822e11697007bc447c844eea8bcd8214e92b3bcc871a6581924500f1607f35e149b5745427ad4f6d109521cd70bcb740f9b221adcb04c36bd6e63387e951ba8693fb7a8099e2fe8d8a3dc0172a884cc705f35df4e4374e21da65a5eeed671526689acc4e0ee8d342ddea9551ee97e8a34afd9612b8eda396f5aef0830aeee157ada39711b55fc06a83ddeee5572c3cc7385c63cb7428f3098e70e98736c48a49a8165187eb10a2457f8fc6386a921390363d9a6533d22279b25d0492122c268231bd5724d60fc90a1d5d4152615dfef821bffed75b787dba0ef64b5172c2fd9881c24bd60a693d71737abc7b1715a59c4c3615d03fe382438bf888b0736e794344cb05c9e074ac49697f5938e6dcc3f7b48f3675f1be3a67180a379485c02bcaeb2b9c5ae069d83086bc5b3dcb999b0095a57178dc50e5261c30128833a056fc0dcb7a526f5c7e358b30948a9e132aba2fde6c878d7690b210ee24af51252766a37e066320055f57bdf69d0d42f1a5f20cd00553d5fa3f76e3fdd6a2c1e142dec66f7e55471491915a869464fdca541f1a9303f4cd0945b8023049e4108133e576ceb1d8ea66e352e1ade72b705dfaf8f8077a3f5365ffadcba0e213df795523ffb3697360eefd0bf974a028f381bb9c8fbffc91dd90c7da0ef5aa3f33c77ecbb93ead9d6397fa166b1da327eff922831e44b034142ed36551f1ca2e73ba0b71c4943357567d5c6f10c51bc4f416212ca94d88de15b69db9876b75226e6b645b1440042be0cf3f9af12498a9579c8b5ca90b89348d13f6c49425522b93a08611ebbd8b6b7e5c8dd77eece3f1be98c6c3c6bbeb03740e1fc5a09de1103533ea2af1c7b0989f502d9bc6a2187055fa72cf33a194683b28c329cbc2d83016f8585ab914fb0ac098b351ba54516489d18c4f574975edf8774afb51fb8a490b29b0546cb8e9ce651542e592ab6b7e3e831f345b43904d89d2349388ef422dd4ac9ed5c88ee344eed8e5adb267c600bd50d56387331710b183b7729c402e2b21a22ed025df27de8c39612c3eb7dba463a47dfb18ceedb613ae5671d10e6a2e3d16a566787cebcb5d8ff5c1df26a68360cc460d5594e286117309a15aa692c6fef46c92defacb9c08819430831fba390fbd8d002acb96de269603da0d9c47cf77f04e1cb54685a4438d1d851de0f5d0cee212203be774e1bef561dd374d4300f26b7d2c1f53a7693b03effdf3a98870a2be4748a0ed85227c0593c7bb1d732f308dd3f758a13780b16a7e717fbdda9f1c6780c81f0ec23c851ff7895f416239a960d1075c5526a43bdcc2234b928dec52e850de480090a485071523aca49a8749cc778720cd15c427596d90ed41b21477318c3ae654718c0b5480831863e6d2d9b5ffb994cdced25fa5b8bbd854095a12c6904e529ef0a06a959830e8462e4551654c6885978a1a9d363ee9dfb938d3dc68d705ff892e3f8df6ccf1a17ed5a109b95ef5382b119ac1a3d3d60e83bbe5dbe03b2e419f02b507a5888ee72cc0b31771ac03f2db81fc95d55521241d243d2e963d199f6daee244b5079d3d1c646d319fb107f634a6a37b44d3393e6490f49c1cf80e1ad221588b026d5dfeaf4af3c51119527032c191fa143375324cbbbf69a5bb4d3feab29abc1cf671b685133c8ae4b7c3e307d2804d4defd8edc4d1279c86086832dfc66b3caa71671c0665ae1ba6368808c370de2a4bd45e7eac1492e0cddd58c28ec9fb38147c9737fe4036b3e615c9287cde481fbc0b6b5d165bd1fb54439f8f30659d32c2a2eff9351a9290713d4b441a5851dad0a2d99b35552bd650ed34d82548554a0ad7645c44e84fff4e7d1bdda2ebbf8bc422fe82b41143b4df3622697c6324892824ad729daf9a50f636bc6592d5960d4d17d2a8eaf385198f6eaa0c177d6970ac3b68fc6a33974247c798e4ecc5f8bc58e660e7a1156d20c9795d9e9a65ee58319b6303afe84d453e5a0e067c759f5c5d173c7517410ddaaad313d4459cf7d3c67af1888444dc4e74b0fc40df263ed9f0de77938a7a73b6e9f7455ac4637132e0a634de1510ef66f0d6bd039a6926d596c437af5bbf5f73e787ea10c0774c854a1e25568a3af882ec3fc5404c7df064d1033e4b675110321ec5bdf6c5d866324909b8301c9e3dd67e4e20d8ec57a8b6a47671c36e687f17a546110b4980e632beaa28ed714d0ca888683ada7b325a7915b5b0842193ad0583d7855de122aa4deb49c3a3ffa6525cd90186bcb5a8707bf44394055161a28859dd80275c2ddb60b1b0cdde102ef0e87307e69fae9bea46104f5016c3fa8d573ff43b3ee6040da3505f1e53b63c64a5296539638d0246d019acc36bd81d7eb00140bc2bc5f685d91dcc74ec94f024acf010289ead2893e9cd013a2880c88877c9cac89bb24fe28e310bd3feb21ecaf53f67349344f4ffcabd4d10009ad8b6181c95c506496a4827736db3acf074bc50f2313aa8fd6d18ca2d84dbb5c5e7cb98037f8ce96fe4ae6e3550dc4d604b9ca13b49e40b536e15ce0f938df22dbfc3df8771c265ad1d5131164c168d992707cc52941f30a7ae73169aa35efda96eeaba99218b601efc440643c1bdb55e1164968709ae2a00d1964f82a450f621c8350ba21861344b3fe2e68e7ff6b8ab1f5cb4389ea177c8143f914a9ea3dac4210622aefc4a427fdd79a64f5f6f03490dcb69fa66f10fbae0f050f9e749754b1e619c8613d42ffdf2555a49385bf3d93f44a29668068975df329051d4d651a11a2051de49a388932da7db3e1e6a4bb84c03f8b8da22bc46ab96d2eafe608847df0c41ea57abb5edc081d2fd53f814acedcde8e5f53026705f5e487798393a05725e9b6615b06739042edcebb340b1e5c2fa85944b7bdab012a9f2150d5ce548e7fadc85039568d1b7e3043d7635bf82150412eac164d7be27b2eeba85bdd2f79c1d6872764abba7e3882432f046d23372aa1411a1bf4e3d3c1f2bc024d3dfa2902b4b6632429a8b0366e211ac4cb145b9f4053c7d14d43a9418382bbe58eca8c6696dfcffaaf2ebc93d030e7f3b03b8168806392f1895af17a62fa827ecb04e74d037a75986d46eefaf9f30e52da672157ddcc46eed52d8d3ccd40b4609c4993001bf5274fea7cf5fac4409314cedce5253f96b62176491625455811855f70525be2f71d95a44e449c0e30215d76779fce07add4188a734c7e1978e1af1ebb42e74b42d8c7d28af023edb6c516a4b0b282b8fc6289e8d5eb86bf3ded746818d22b41545ff385d32013a4e446dc25d1af62699fcc3395a2a782c9fbe6c47dee4b5401113b023deb4d6ee727122721a999b6ae4d42270985abb5270866d7450c0155ed39eb3a6599a79a607094b9026eba9c008aa554d5db8821ce90b833275b047d848d2e4622379ade7b9d9be85805ba0fc3c7e5191e803ccc6fce5b136931a71c2dfe1a00576b2c236415f52627e9f28bc86e41a0a42bdc0d7ffe57e2c00fdd7c18d1763e8e971dc720e0f14a04ea28cc63a0bd274e4accbba6a19ff88d7ac8f86f9a02a6d3af5cacd773f500c757f83cf6d62f59c548b122dc3ecfd91aa3534c80753f04fd717c7c887d4b967ef81e8b1fd05802828dc123d9cf5f6739f540a7920c145bc39df572f41553b28f5cc36657cd31c04552f9aea503fa3c490633d01c2928607a7cc06e67d64183493e8783b3931a0860353e91ad18e47a4348abb447da7354acfdb729208dace50c0d760be92091f6c83d3836e29a9e63900b76babfaf0c05d27bf012597b09169bb616e8ced7f65a2c73e0105aa3d64795c40333397189299146b8eb02d8c61dfc624aaa2027d4742ad48dc7896bb4eb578d81b3c2061d94db4e2d38251c06ce98c85ba6807d04334de0ae266961608559997c62fa2fed1643e0acc85d75ccd1690f0f8a75de8946062ca5312966121bb448df9722365cf58ba71cc7300150633cda7f6fb8e8296bbe12dbada10b3800177c9dcf49ab6b02664504b2488f91ade514f4cad5f2d639c0e196213f38a0fe0d7c4fa4281846da7d2a7834e88df8ccd254031e1f603098f917309b355078a98630cc1a30a18581d58033d66a6248a385fecaa439588b82423386ff7c2ec0ec51d83e1adb5f30755f5652da628b438742796e42d987237b0e72ecfd928bc640f5d069320c9e7ac3dcf54fdb587ccb205838f6e1da45f08d9ea19ea0b72a669dfd981dba60021cd4a66a4d2696ee2fa948dfb8153b10e535fdaee03f39e9cc1bb0dc5f14bfc213f084325ef7e62a62cf32ea842dafa4eb9b69d6bedd2b760086104391e7a6e38e34efbf3ea5726f32e1e334499774ce3a528952fe7817ee7cda5384d599ce99081969b788f35cefdd8dc6d8294db9dc47bc95e75b5d44646ed59afc3b6a4f6af3434a4b0c61200d26d9cdd222f33789b464a9a36d4006f3dff899abf45cb015f475ac399a06d8ea68b7b1b6123c8d0090674a6679384d8e05297c6b63593c389cb8671be87be802b1403a9aa4348df4e5954c3c3040fd0f9bb0b3f7c8fb96b953cd98561538d6e18ecb0f03ba80cba09e66d59c776a7c62791cc47f32eca067dfaacf2395054e07ffd1294d1360cc1387884862b3dab6970104f26885d54d68fdfd8cd609544bd89043bea2338afea8face21a261a2cff7a21303295ef7411e20e7418d0091faf227a3144c63daa9003d9bd1a4073017a1ea1a6af26bc54cb5ab3ceb9be7d38e791e605740ab3918bd6d40a6bfb2ec5c7d0f13dea3a4fe7f76c508618a64f10f639054f04219b64b0dd8391d2e3fe1c6ec19752006d9cd9bb5aa47c097f9e5edbe03ce36d5c3d4a57794cd0ab2fae1c7d02fbd4f3dd87c7e2ba649717ffb50bf7ebe126001a5cdb8cf7daf0dd6b06004cd7be252d31920800102423473a67df3c9f2553133c8e89d6b4a5683b39151e8dadddd988d5dcf66a4b768fb94c1e9081598de1a3b9576854fa84458863e37ccd63e51519af7682dc39fabbab55964cb864855d95a5c21e3ac7e60b00afcbcc29df6c144ecde0b74b14f26adf8d6a09ff1af74ce90d7db09a340f29dc95ee53a27c413718bab3b9d124a414c67417f093425a729512d5d56ed4397e802b2a9ef6424dfea34299ca9790fb946db1004c74a944c9962c925aa925e313c79fb414e49ab97b009533dc04c5b13d25c033dac30c1ebf507bb8cc1951cf97fadafa511900a56bf3610a4bb5c11a44e30f6843686f898a0f8b8c12743d8816d9e3c0a8f2f4f887cad1571d91bedb0131544d98cafcc5670c643a0fa4b6fe4ae4b4d3c8a8b85e371cd28b8aaa04c906d0ce8a0400799b8ad09d1400bcd40cfbf63920e9c2227fb4bf20a7a0ca7d087538d9c8db1445d96b2b807b2c7a1ca38814e5a43b485e95f0808df260da6282f696e4eaa95a076824c59482c8820ad736c5f6c15ff2f638b6695f53905be314192a7a0d1165a5850e5c280175ac2cd9c1692379eb43ccd6157a04aed4ef5066083b16287a3e31f0c7b075c7bf5c7acdc1825def2eca0f5107121c7b69fa5d1feeeff97378ee0bfbbc58f0a73862f609441dbbb6b07d6992693c04573af29823c8aa9aff4336b481fef54c878be0912e8c35eb078b7e4f2186c6b67e7a8db1ea42222b41150010f5dd7f3971ea4d03092113dce98396be392ddb62a20198241c64fab6d8e1a4aa94f665720791e417295e3186d40b102c0673e7b591eb9247e2c8193f57ccac040051b791145c70229dc697b6b19f065173f09dd1b5f073409d43690c48b627ce7b6a8a3b75a4411892b8aab622e4acc488e89af5a1859be810bceed51439db9c1abab2474daf31fb2570bca41c75101d40e05f54851957f2d94b65365f494035b20661df39cb778c4f4610b2f6a02ab33f0a81b070e8d7dc75b65be64d9de276aa3ea85a8c3a2c1188b9e178e7459e2c98007d8be2e331707838416f4a545277d223831ea7b206796e7cb96cb16e9e727e9168791bccabbcf166f6f2393660b0ad2f00a180d877954fd718b90d2a64890d9a036086d90a35e10727be66f2b141cbf7c1e7d733ff15191902466c8ad1911b993319cbbfc75e4f1ffb1401f473a2c334807b47883b7bce2758c0fd7a7b288ce2ae9702c7791ea11150fa7198969eb5a957390f94f2016a17f92b1a8dc0815eb7fe70056982f111159f03f6eb238957ecdf740c5bf36ae7f051adcbdfafbb2d09847c0f90f39170998abcfc791849f4095736559bcdd0b5c980f8b737928f3fe7728e23229cf22d6f88a9814f18d5744ddad20bc82fc784f4dc7cc815b8059214b5251c11699017709e4ffcf13bbde4119608e9a85f78287c44f6d3d17d31f480ab987a6afe9b19eba6a3fd26622aaf18de49b456968025ca879609b285ea8e4fb69dd30939ca84c30d37a62cc848d66b09c867963c7053d02bf542b32f1a88fa6634a99c6de52fac854cd7a2e5664927fe26bc1b1bf5cbf66db246b03d5c89b50bd593224920718dea01e89ab9abaf2b9d67a1e199949ee3d1e833457f6e7a65164082c88b0cdb1736370be88c871f78711eecf0d6965530ff1284743de62cf47c48c2b2d17065900541d667cfac6ca69ca97bad82bf815933b66281df160ff98c9203e3ed16bbd815f4996036088724c7f561dd5e33dee61e7999820af506ccf19de4600100bb3507536f55ea40c40dd3ca25126c641e9576a2459bc06ee0a896f6717485a2748253fc376bb5ec706eb08784f9474cde04b967de9694f664c67051650c1afece72e25e7c9d4b0e8272980d363379c8ec2f3b63c2604ea458eae9e93fb66b2165ebdb647277ee8e717f2ea5eab7b05e0659fb77aaf2af32ed943a8d3adf1a8155eb71573fa78fa91cb9f3fa9e6ddd01e21a01a926bd8228347bf961aab6010b037864c0e2cb50848030655c2f8d0f2eb7a476a7f608d8de07ac9a0270c5a440f027948905e999f4e0749c5508142a16b6f6b0d1f4626d2fbf9d88211c6ebb1bcb98b615eed5b8789446d806c47faa9be824e78b3d1e75d9079277a96917f2aed44858d72d0d31a23e9b6ea2267a08f8ce460a2b4482fa57aef3176fdf6bd867afc8982cf797551e942880cc9ba0715b374b9b1f8001c1d7bce0137425fcabd164c542fbc816b3fbc23be9478e46118453da883600984c605d4e24d40d3b4790dcc84325d65f50fdbdbfbf90352df09618815a13105d5171dfff36b76bd1c92ddce479173a6f6c31c41ab8abc1bf5ebdbb7bbb256d3b7fa7e0a1374b06c372272d56b717891f37b01712e5223add938dc724932cc43d90293c6c7a7db34ff9996f748e387fac8ee566db96467149b1a38b56654b32a3ef74b2b34267df45e607d509ed3117c7b1118833a717c3546a0e18bf49b7f480df296882611e0b78cc605ce174c1fd3c8114dec488e81cbcef6582440996c8bb6d78ca086de7ce3001d3360a7fc89e0252c9e87dc448ba92f1dfe0a2149da16dcc68dcfcccca491544ca178e07467660a084b41f84ae6e6e0488a15efe3e7671febaf6ce5248fc9de5fe99493f4a5a41046dfdf57661ffdc1ae23d7501dd754fa373d3174ec0ae295bb882fc9e3dd3d664a133dcb7565efcb004c13e1465e767cb97d13486314c8d9a6ccb10eab8fbc1af30624379326bd2dce814097b6c08c3b9f64953c89228ad71a0814269bb59089757345f7779bfdbe64871d57cc924064fb8a92afea8ac812e58e155fb25511900ef8ed9d6e5482bd48671aa10dea8f1d4f2b7e1771069093f1ad8607913692c67b1187dfc4fb64aa5ac0d6c43423b778c8d9e2be4b78d154104c828438d101d6ab3e847edacf22e8a512f79bda9ee2a882fe8e694938b1556602accdbc283a12c680ff530e02bd3aaa9a3fac1eefef81fa4f862284b6bae3d9633a940b06c1e1676f7121e30befd97464dfc838f52742487baafb4c26c4cc502ea26b812ff639fdbf5c7b23535eb5559921ab6c0311bcc32bd3b87ee6447a4ca353112cdb1053341d9105b34e9dabed498f82208fcb670bbd051dad3c346990608c84246359b432004bb85ce221b2e40db0eec55ca8adf24b1bc3acf8d48f15ef2bf2cecc2acf090b9afc9fac4ddf815c5f654cd10297d272214ea838d0f7e766ff65e2e7941e2ed2da1d34add2f47fd1957ebe15a663cfad633a5d04727d01051ccc9d8757b96facb69afc7c07950e02797b63b902e24063cfda94e59ca0e377253e7de86b17e72abad9e6e74392b032f4701529999c0155140b3aa6dea1b9a889c1c47e12b54a987c9d24c9d08b57c218dafdc872314920e0056288981a57a1237ef339712bba8d3b255e22aa8fe8dbf82a4b60fde47002bf02c9c5646847494df6e5311ac0790dc9cf4f9bc01fbdd0be881c7341688849a52a6f45cda2341a51a2e4e0b630d1c5c69225b66f12ae2dd404654e46d1891555af357085383c916b083075eef11fcd3bb69422552ad7d89456577dc9d0f2fe2f8b4357303d2c451c581c00f5c9f1babd217e1980899d534fc6b2fb8f3a9025fd64610a611929cda54727b738d02a2a585f04880bb05c57e0c7122acd8d4a1c5bef6d8f78fff4e77a204256b0b2d7d1bdeb0878bca1e4aa405d29552827805ff14906d7232dcbfa55ef481f54305e529030047e101822d4b5cb957845bd1ac8d4de2ae4963229c28c083458c9c0e793867f84a01d000c8904d2a20678c86fe883a072b222b214338e5b6ff4908c46c2c9518af7cf0551af821bb9b00b75efdfab5ec4329a5554522bb731ccf3d0ec54de977f6dcfb1972e391ea4b823b24ef3659a8bc94997432030253ad3a1f8cebb7c1a0e6c8168a1df55e12c3df363ef02801b2c1b62be8db507a0df993edabb3975409c3f986dc36ced1dcb6cd7ae2f6e91e382466c8d61b5d7d82c743cf83ddebdac0c60ff76efdd7bd7557e5cdf152a88991dfb1c70dd4a915748bf1373ff9388d9d53966abed2ed4acf318e71042316a702e2120b3da4a4924e2eeab4af201587d2c4e0a758477c417e53198bcd0bdb1e598e55002b8266d232d25609d4db0ae66b8af6a445402ba308f22f09ef6a0b0af2c9ea75bb293e44041b2c65273fea4f250426d2ceeb3b51f1db3468d09d70fabac71428615f00d677884d15bfb194023983069277dee9b08fc2db5ed5709f73ccc74be622f5fba29aa3e70b91daf5af5b020faee76dee6400da1c2f352fce2359b7b4003922c2149d4c8aa7128f6b1b0c337a6556b69fd0b0bb9ea8e7d3b3f1bb11cbd184d650e26b9e228d59e15c1295389d66f9e84953984f4fc89c126e283394b56cf5bcbd3fc6db671456dca2d1736750ecffddafc67bc4a3b96b0ee7480dcc90cfba72c91d64b450662bfeb9ca482a1a8c6d2b7e1dd963d4b6fd09f0d24637475dd09ac50172244cf27149eaec55c8da73b2014c9faee433384237091152f423664c19f19e85b9652d93f45c2b1852bc79f801350e64422bd6ff0b9608d1da55c92573f89704b95747ddda20769601dc918c0e3bddd2812fa4e5d9252ea18c53e2e1970c8007e0eab6271f86959b93bd2daea832e4625f5b953d61565ae8477dbd5325368b1bb9e8b5e51fa6945e645079900949c341cd43c60ceb5ffc38c7dde4a856111d2f57d0777a803bae68b69c2d05c6073eeec6c775cce46421c678a788e64059956816d2e0420125268f07db274a1a8879b5a82f714bb192fa3257bdaab68b6239c353ce48ba8a7537023f30427636f03920febf4e8812be3ef420e893db7fd5331b0768a0107a6e8b30ae616e49ba146badbd3c4a600cf27ed65f627ca25310775a6682eca616f608d6bad1386c6f522b318af95a8c47ad8092c58731072e19aecc16a1f6e7aa987841704274ea0bf625ebd7042e2722e2c97332ce4df4ef16a452f9585760334a500622e55d0ed02e13bf1b8d0d32c5187139bf0bcdaf94e177dba106820681a6a8449977e0d54f7d3626b814c82937d7b22b94b6efc50029e4d131e10f19bc18d3df473e9393a7798f3c58b336b6299276e98fc34b78e242967928433228004dfc62c72f09b7be78bf731f55406600b6b0877ec0b6718573d1455eada101ab994171dcdcdbe3b33d10087c354872d348a46c6d440bfb4ec2deb27a015494746401c4d91ca325a67ab347bb93c7c8b8d5748fa9079e3f69b159bb0dc3939808b0d7800584f416a52ca443d4dcebc2cfcea4da7ae1f74640f622ed500ee9d3dbe0b638e36c8c057d51037b88cb43cc4ccb043440f05da8c0bfdc59a458cb64ef2dbb5eddc7619d544699dda62ce4033e1e12feba153bac05e0a5fa9b44c9cf237ccc78fcacd733fafb79075c5b5cca09b01c6267ef9eff89813765351b7e4c9c694fcb235a77c29593dd2dfc22404cbc3be2f340adbd1896434f065568c0f035a806465cf4a0c22803b7723800d74fb94dbaea7fe1aa763f5874de80b04c253104b38c1664bfa3705cfd26ca366539ecb1b0bb0737232018b7e0490f8cf7375ba1ffdd32ba9e45a41bb7730721ceb77acb7f514a3cc2cc2dc3a99c31c29fdcc77bc1f5957a5b2fa71eded461a44c8095e1e64dded49444bd1351c977af0a912effab1a886d6d9db008867a0e4e56c05f44657be3c57de9edb70904450bf141ecca679afd4348a7a60bd946a0b166f59e69e44aaa74b23a14a3041e446a4059f38720623d80c7ab26f28780ab8e450183229c496f7811ac57870b2df43dc2a9886a34dc5ef95a6d80e300838f4c9cf7c54fa6e997a7d9a40f1554022922371a41ad63cae018c54d2fb813d8d89efdaf08a94843930b89c0acb9f41a0385077e988eef617e0fbf5e7ff00cdc155487288aee58701263b7dd5b474f63ffacb02b307c1c447211717c393e73d208763e8a172ea677827d583ec30fb4dc47a6d14b42d3071343f2ccdd98c6368fc8696d6070d10a32fbcfe585ad783ce84f8869fefac2ec580365f2d0af40526f54e60c90d2f5e87512e5b70cf965d84fe7d42fd6693e9e7dbd329780b9018b90e82780802cf2eddd73378c60449559dd7019cc03906da6037d1a2cd05c50b62fc5f6ecd3eb1deeb42ffd1117280065880151c60390e10a0f3cb87fc0df0e622f0e833054f77ed4b37a144dbe761cb385180f0c0e9540b6c1988de2695b8553248feef803cf1ee24cda2100c3c6517a8685479fe27a1e21e3c7fa2e629996cb3aaaabceaac299771ed1713fd62166d2265ea395374e6a9e04f0243d4f1a237136cab2a5bd661ce2dcf471366d3584bee6af8710e444f025c3df693d11e37e2dc711f035e51e0d91d330c26991e921c544c2f49703eca16ca445f04f36d4551e89819671277fff37ae8d5a9fdbcb5af0a8e8c84a52493d3d9a6fb8d41bbab708adfb9153a2ba9d4f2daf4f432d2e2bc5b9e529a27c42e4f06786f62ac479f420b8c139ceee98182221be25932b1bc6349a34830dda05545a5c6bcb64148fe4ea9475c5850d304a972a1b050bac1734e18a59cdb0c2c628116cc772a81f0e81a7af5f87bf593817d29cf498d6732f9a0fbf22b4860a9110588a549450a1074f0b007e4158984f8f9acea7280881185153847fd75e46753f395d2323d19c726c53959bdb92cd4ee474a6a340862480a5db20604be0479c34960b73d7741f0bebe27a2be11146fdafd59c0aea49daaef71225761a9d8fb4779c62ed488bb3f8538c5fa319d46b96fae629c4427efb02d50e684f31eeccd0740763bf68c33d7e85f31b24f0eff2d8db6f45450f4c6e3dcd0e9030eec8b6ce32312034871260a1000eb9c87e1c14368df9b8c08eb5ee974b3781e4550b01d0f94e5814c517fba7200dc5eebed5da4f535dd5b2f773f8100e7690e741ef55ee5080abb6a6fae6084810be2fd40499a865c61c2b29eec223d7f82831756da2f25b07befd7abc8e373428ca55e9c99247ee603adf24f7592fa84864354fc54e81e45f30d22572ee3f67ad430b7398930fc79c8f763275406a8d14b2a8c11c12465f7871599e855fa0cc501c712c1ce80ef9acba2bfe1616651056abd3146b0991b81a63a31c109f115b46f00c7302f583d64644016d9fc032d92cbdfc211a57608263d45d96165453567607516646ea6bac14a1b9b2ef7ee84f1ad0bd09f02065e4b81ece882b78d48944bc8a0916b3fcdff71705de3a16bca7f16f6b052223e6f3a41407d0a019255137878429150b74d6a52e5cb097ea62fa9d5d3bc3fe63f4e544c141127db857204c908c2a6c24c64df22568c78f4d3537c9844034d8546ede2d92a40fbb0efd2d58f8c0ec89b20079b209d20c570c4be5090990c454a5a1599cc152820f1951cb7de01f82701f65709d5a0f554d1018712a78a3fa94c53c56f03818a5a02f2cee7e0684b0510dfd73e0a53ef76e6ead87e7c751a09304e6dc8d110dbf7658898d159c455127754a9745f148e239c45d09e5f0d7a417a3fb86927ca8d476a574410bba9425a1b929b5792d5dcb15bcecc24a7b2faccb87a7dce8f3d2c9a7b7e8fc11278911b06d3b4a26af23e36b5f2bc134024b158935143cf6977c0aecd4f053ce40e8365da5039791ddb15ce6b00a5f4c4f60c3c6c4deac343dd7fb0a015cb2ba666bcf5217a6acb2bbe88faf4d7264cba20151de20ee1005da4796777697ee2aeb760770a9b6f1c3ca9476b5eb690beac0bde74e4e5dbd7f92dfde3823aecadab5425ea838af708889f4dcc13c1c1ee3e8387bb7b6bcfea9177e90e8d9075bbbb863d13c684bb6fbac4b10e1d80cf0ebba7ddf72346d02bfc69d89dd8665460741ae1ec6e1237de19922c9e24c9a2c14a3366a905ec85b2f2d39feec89e1feeb7e8593d33fcef411610fc9e4b0ab530f7a72dda75cf90d9bfac88eeb2396542f921a2e8f490a8353d919e7efb12910bae7a9fae302eb6fa18d08f4ad3c0d65e567b732c29334f509e5d3d9875ef114895144c35419a588c19ad811efecf41f2e22975b179605c956c0559fdc9debd4cf4d99ac3ae3dc63fff8628b2fa49b155c2ef9e76d96c5e9784e6039ac7c478893a2dc137d3d11a35c793f0d7684ef69f9b47bdf9d3c8f18f17ca54468727472c2eaf77cf1e81e9e1d7777706786e40deb60aa6a3123348cbb81ca6eff82df15c3be35f84f0fff7de3fb394cde95d666a3bbc5354ecba1ff75db6906169261c56442e8b6fe318859b448629a1e3d20488cfdaf17a94ee87b3124bf545848009a13817ddbec1c05bf451b7e083ed379a095606683c0479a0cf6692ec144e91dcf085ac38c732dd25a679388705c467fe450dcbdbbb03ffcdf750e3dd9e014d88f11a9cd58c7b1961ae6e2af42842627df926d161a3d21dfb18977d7269d54136e152a77f204302fa77143faf6520e5c4b7deea7f8d975139fafb7a1e3757900fb0fefacb603dcc91032c5b1016b313189eec6d9c79a1d002f30284812895fa6349187fde7e7171745f504f5b1e9ad6df72c63a15ffe99a5ee0e019de8d636d0f2ef2568f52a62aaa6a0dff54ad13f415c73a0a751f699fe1dc90285382054c844c182149eaa6702de0c9eb5a4bca6ff15777430933756688de396edc43feb53d2f377e44b1f4dedd53203098bd58e3ed41cc7a7ea6590a073f44a47be7a8a60405ee32c80a73ae07968e6bd85121d333f9caedab537331a79abd8ab85df6acc3b1f87cf507368b5cb15958e11a43959ae07666a6b1e523a5e6854bcacd5b0c96fca71c146d13df6b17ad3dc1249b2096e316c9de3b2c3ecc6af29e8688976297c6d89ed8d2db7b7cb287a76bce398e47eda63af7846edc56f91204d398d76d047af2e1ce6d75968d4438201ca000274dcf6c3be4f8ba3cf6e7f9333ffc2056953b879ac1ae3329a3f9b857cbd6d97a60e566dbcc53a72df0ce188bae7942e844e18c38f591d623576bb8ea35bcf81775f635382e6fc5f41cbead17db8c25b4bd88a57f2c662f2dacd2ec8db7f42d0cf4b086e3f1621af852a61afb04ad7b5f25a6255914c0f8a83f0021cfdf46bc39af1da322ad603292fdfd54f0f325652e8667fb0f921e2ed2fc5e5327c2702b799cd8047e182c60d15ce2f0b979ccf55c8b2526e6760e5c784815dc685dc51e08e3d85ab821130e5623ac240440a182bb2e7213879de7e66c0fc775910c10c03703dd9afd416bb033ace3b7ffb6b4c51234fd7c7a83e8d3e41f1541684f4af2835174ac6fcd6625ee386721c337bdca176add60615ef607b206df69fdb465ecd5acb026d5f3ef80b8ece35ac8396905fe4d0b7ef5c94070d41c328e370bd3f1906ebfe9dfa81555e345d835dd873ba3a11af9f6c72e40549c0b5bc8748c4fe8491e9b5fe54409999f1ab0327cd250aaf087950c35f7f7a25c07f99d3365753b7b96c5c5fb092a96f517f951d16e436ae29436cfd80a82628d8ffa2b3a70f828351c6b4a45c73aa43024bb5f5c77e48a0e6dca14cdfcb9856cc5427294a7a4ee66fb9e2be6a2d37ee3b71fadb92694b1145662b049ac3b19022c92ca449f443470c2ba2b24594bd637da79b805786a6e23f0715b67745af534ee125f4b83e8ce11fb3a4e12a7bd716a9e76fd42385ae24fb3b22900ea8327331274998cd4c5aa997f6d91f5a3429c107b8011339f126fc27f3a0b29f66c56cc7b289b163f2dd918a3e9fc76256e662881a1a9d19b7038292d19f8104b944a63a4c131599a288465e55f6f8698d06e3a7e9a377a88cf2bbe0252104c94ac3a9e086f964ccad09302e00400436627bb564ebb98d1e4d99cc4743b069e664b04513a1a8444f3e33f55dc7a8c0527e4cf49842b4b0756f258aa92f31f91c7237b43869208a25ddd7b8608c6f4333884a48fd7856aefbbbdac23840a3defd965f8fd896ba2eff591f6a700a013d28d72f563188c8e9021df385b8935c9e4db9f4d244daa62302c2955408d67747fa3d4535cba02204e0a74df4c74cfb7a158fe679256a53c95f47782f178aae8abfa886f771c47eb06c5549bcaa487d155da0c4e683062ae84f30cd881911251524fc7513ca63212ffc28cf5353b7d81037e4fec176d5e07d732937d69c765624be2029b61c21b7f501c3a194fc2e71a5fe773bc1e03155fc5d7377122e0fe29197752ede1d94c785041389f689b035c25d57bf633eab8c8d8c76c395e4ef08d2d8f669bc82a17225e1466fc259deb7e3e493c100c8d9971748c76adf74d505c846967dc8d5cefe519fab358be1b9c56a8473d923ff2f8e38c3d6b16e11f1afd14b62d41a790648611f1561cf7e4abe147e57b1295ffed2745d6185db340e3d299ce5f8deab0f033abee7184f98035cbcb9a0488e6c71c2a53bfbf77e88b7ebe9bdf22ad7df1bf3758d4ea205481443695987515e48345685ea7ef59c80f66fefb85fb0976a426e599ec12663abe8b60f7cbde0564e58873f0762262e8df44e364c085dd747402c2170c1d1d0ae9a9eb3eff14f0d0e87e4ace87fbbaac1792269772b2556abd17bd57b19cce712640860fdd7a0fac54f160f253a814f3525554ad5d83dc8e536aab059dd68e7cc862f58e141548151da88cdb21847e92f24954b2351ae59bf47e8810d88b306356554206cba10bdeda9823a05c506849cd3da70421853f9414bb63e756fa60504dfc83d8bffcf8dff392fcf48ad421ce7879918fb9e4c0cfdf64d467d7d4b3201eb8cf7c1b818029784a4d674d65fecde99002d4c316c46d45e53549702d77612aa41fda4639933890a90ae1f23a2a9263f91560276b86d20f5c17214bec3e206f7103fd3d51ce07f00ef8018990d7655adcab60d1025f40ab64dfad48e93dbd1cf4ad015241ce18ca28a2d27f7d4f81366e9d643d609f95b89ab9a374f1245f63cb323ffeb0a3151a45a7367d9779347597d4d6822d65a27dd939eaf64b07947c1d7255df21a35a859f75141a768db2cd2047e35d0656e0e8809edefc5c6f75173f75439ffb65b8e07b20ed2077cef5bb145a986242f7bc4639f27228e96206c61a3de89875bc13396ec286de8454d46a4cdf0bfb173182096d2dc970e31c4cd9b7e296cc9b50aa4fe20a75ce2af7d321d9e42902cb6883eeaae20ded6aca8bb5cda1a0b38eb7472e636aea6844954a02e70330e42441d3dca88d0f133f70333be62449089589300b519ac5b5309e1d698e39484e4ca2848a86720ca3427d4f6ea6083ef9f621bfef0e35ae12fb73c766093441ae67775883c0cdeac6bbc7e14e6af8ced773b18b270f926e43d68af6cb6baf5ee5a112e484af5e15e472fccad24e677b12aeb7014da2a0b2bfd95d9b40cd56a2890433e41f73f58676a19d559bb697a4ce78ed3ed68e77970883104993018203d1016eecc94ce47634d9122c4599073b43cf08649c76ece242a2cf6f39dbe96260cfa192ab7fc9912290fbb49644055ddf469d4a0b46d078f4c7a4b67bf87d27e5513592d2b40851c9dbefb8b5780ca2b8e73e7790b7c364a7f0fc238a75963e78b6c5428047add473fecfc8d52d1948959385ea89d6d8cb2d2ba627f9ac822c5570fc1943993a3efbd1a7a03a8b4ad6a1cff1dfd45af1f9aa1fc0073147aabc4b4b4f6b6faf50866c4b829ad8b599e9aad9ab55b2ae55c38cb064eaa8b86dc1e1316904fdeaef7dae312d557b5f55a2dec7653955e1865e687daa0cedc9074a7433f42228d62530e1fc29618eda16e1d5d83607dcc3b19e6a12634bd6638eb6e8fd63840bee05178bb6383cc1f6b3bcfc18005bc8cfd5a2d7b0475cab4324ef2d3478990bdb15c8d70df617f77551127a44a0bf31194edda5fe3c6e7197421cd490bcc4e0d9fc7d5908ab52d941ceb672df1c5449b7a16c1728ccce5cc6d245fa985ab4d6559c8580db75461f7a29fb8eb1ce2574e5142d5e96247d554dd9ea2227b2d5e11a054bc6dab75ec9ea8aa55b10707e41bcd2d79fb8ca0cb3b5ca2f2bb120290457d61f7894ba52fcb619f045068bce64304dc425cd37b2d9dc2fc76f11dd0a71802edcab958dd2dc8d1fdd72b3b708a8857cd936850eaede175c931d4e7b35747a272d9e4443707fc481248f0a2d0f27b99f6bbad2f50b19f37e5e89eb3d69d22299b81cbd687be8829ad4f198840950a543da1d96f0d32a528fb1b5cc8c8f3f85bb70cbc74f26bd1572db2e2dee1d4a07d472d412c0f4f259b84fe75fdb29967e11cbdcef1e056d4f242e370b9f8b6dbdbf8087ee64916e24dc9c1fd4c8736af4469bafe758ab9c5e89f38f9e2e4edc145611067dba7817f780b76d85ee2d6f297732c6f6a1ff1d8e57bdc1b6eaf2754a1b76313134fb221c63a4f80bc4421e190948533db340f0e3eca6adae51de0c1033e4e61ba32a3c6a1a306a945c147ce61d3291547c0cd8d8206c4bb5ba35c95162d5f933eea3a3e0a8696bd7f0c58c2a2a21757bde1c3f8d4de84fdd1513661a27c7dad4aceb0daee8893d3dae5e56bc35b0cf9c400599ba60cc3e4987276e4c21d6627e81b49607dc4ced041be33f28fea651e7aed8e0ffe16c018387ececacdd4d9321d3e4f22ff57bd49d03a7f041b14d7e61b5d160113481151b440812d6835bbbb650830f28cd7a2471fcf4ef1be98744f622485c3772db84187bf7b08b5399e9b41594e5212ff47fd69e93307503ac99059ba534a7dcb16c1a3d1ce9c8e14fca41d59e4509d1d449ee30937ccf4dc2c5c80d4016d419956eaa031995bcf3024df760e4be19b4f0e8f7d1631b64df4af31bbb27be2a0200a96cba569bf299ea0c24a231e64dd04b467cd2b6e5d4ffea6eff8e250d65fc309912bfc9625b97afe25eb78d14b41235fdc037cef785de6099f6f8a0894e71c9ffb4aaec2cd4df29919e3f53f97f8176442def742d79cf573416da0671637af07bd237d741ab1b9f118b5da71c5fcc5d7b3a0f7ca47be54384ef42ef00e04e9ef36f721afea4d7168bf4d40e1ee3ed5d73c06e7d38e5c71869684ce0bf3f138e778a5c92f52366d57fd6a139753ffa5b68754c5769858b58b078cbf6a7ed38ff99f88fd6f1596b3fecb96d8f2af54e2f5d68d7a81aa61467d2cec6bca6f7c725ed2f62f30ce1edf5e47eb808fefc87dae1da2caea2dea38ad4e10ef04773274ec319db6ac487107417a73bcfb78453c61c5f914ebfd6c501b1758838cc21068c43876716668321574f8c916f71f1e3def681f2de663596d6ce385afe6329ebdc118cc4a3fec3b4c0e75535f0febb29cdb97710be6ec2f9e92f636b5120eef0bafe48b0feef11e0fafd99ad6b923e83ca3758afd46a9bf867f72ff4eaa20cab976963d7d0647e1edc5bbea8dd7a9b383211c42fabcd94d76dd2c0f3608672a4654f8a30567707eb2f7fab69dfdfac7da8f2863d08fd2af5c761e6fb285fee819f6fd3b8c27df7b14ef0a7b032d4201a3c86d899f5b1bd9b991300fdd71861d21ba21fddccc678a9beb2f876618bd1f1d49dbfa902f185b6d78fe5774db61ad37c03dddf0fd34bc7816e0f48ffdaed6ec5711e437d1527e7e1038f2c3fb607507232bff273b0f84bac08bc3226aed23fcda5a7e4be8921ecd8abd4fcee7287bb7bd35dee63e6449a7d049ff46c837745e1356ca9fbaa3a36f921c0982661f6777e115330f75e8d5c1d37c4d8f1bb97f5921a5d195afef1a21af78ee213eec320d3d853f8dfea166adf5d529d1b3e7b9bf16f03d6349c7f56a7c3d3007770c371eab1bab95d378276b3abd1f32927bd525c5a366ff03838ec770601b694dd020a8c955458208cc2da8c01c58e8456bf58ffc6741c5dcb5d835737f826c3eae83b1ddac7b71816eaa6599fe59f81376b617b5db5b23b3b326db2d664fbbcf402247141a1fcef2c60b0ad5ca0984d3bb23a8923bb95fb412f8383061b53160542053c053c6e9507e6110546ce70f665c57c160a78cee00941e5295379b2a08207ccbb2375479bca4383fdea0e3175c715754714b7df573158f36f10979a4c413c25a6e538665bd5512f48e3600f1742def326ea3d6f92bce70d519b1c4e0e8edb9dd58a867f25f4e388e0c769c08f7344448e9b526f02588d82e3c5a4a9477cc362119d91aec8ff1cb63deff3ff916e37894c1be12c9e3809df90f0ed26c1793c6fed48a68df02c8f453507172221d41c4efbf4363acb6827d405d51cf53f910ee8e7ef88b0f13a581bddab2b61888f0e2e211d0923881042900e049613fb81071d0019a2eab8b6a6adc070b0228197d3c19fa3c18f9fe5b35243e61fdd06ad225ded7a34f88f93840ff48a184361284db5f775caa0070f9e7f15c50e31832b2b3a0cfee37417e8f8df59f0b39040691aaa865e27f1bc4afbdeb3e654c68eba0ad0da547efa5768d030d38f93a5cbd1ed34e1260a2b04302078a2608c05a97469a54011e385f97f9ffa8889a777cca928a47ae59dceaecb8ea226d1d0cbc986586bbfad710d1522245b6c6d3f4016bddfa659b4147f7e80ec2bf784c33b7f62996a230cb3e12ebdad69650ce3249cc4266543fe76e3bd9f4e9d345566543bb92752192b9bec13e72c9ba1b218ce4f78ea3a219da82ef598d246d143331ec5580825dcdfb74b344fe1112c75288e1715f12b9df96c6d69da9312d29a94982984429e196b3d657d5c3d686cf93dac87bc070df4f7d060caa5ed49cd1879ea9a3d6ab4fcbf54a19af2cf8977ac6d7c26a9d9999a7d67e07046d41922dc0c2ecce05266db3ebd2233a132b81c872c63aa8c256510fd494f4eca7c472728b12c721a73272ae2aa2f212cbca4cc0ad968896d095e919bc530a322374b04b342377bea2426ebd9f6cd4fd62bf52b669f58e2e7f606ddbfc3a1d3b172561d4ef7372960bdf1b3dcfc2c14fc2c37feb3c47c9dc4129b4f6879a64645382c96b11e119089e9ecd1b2b576e39c93c4d09728e44c8dca339539795b2c6f796f27b1bc50220dc539d16ad49a58bca4a6c1d0587961efeb44cea4be6f1789c193593d20086362f4fc4f44e49313b5d14f500e2f8d77a75149583654eaacb4732d2a48488c7d1f3eedeb66275b1c73ede86627df07e6b0ce8c71293d67c27d7a2f28d6fb596dfcac36ff59ac139831e2b7346d83a07807c9625966cf074fa1d7653f8b334f07aaac7a2cc1001036cedf5914e08010255f1de6459418315e84c57ad2bd2b610b15fefbb8b6d0f1dfa2d7d6a3450d3d5aa0c7f97fdea3051b1b0803660332acdcd8c08f1936d8f46431c6c3ad01d69a35b2a8f2707f8c1c1c2c357ab2b0385884f9410873d8065ed75969f46081bb0d77d824d48345f77d7ae63da9c268b9794f2aab511c4687efebb4314e12f10ab9dc19807c9336b6dd28bc73b49c1373e2454b0c754517b7e2fbff12d750502c2f08e640b1c49b8a2d448c8a173f9dd89b8921144b8b5929e1a9b178b7ddb91c732a2a337971a94511bb9458afd4e7c55342d02c622a5ddaa83c9ab62495dd1b9fa9de986997b8663d9f71bc40d927dc37138c04d9206cbba36cc97abbc41b4c136090b0df6b835a14c79ccaca300305161b04a140edc76431cd962b402182fdd206878f9c1c262841cf972a4d475238827c717d01f293331c38bec027b4b8fd7476d8a0169f907a82c913484f00e0e7099f5b8b13330c639a7dbdeccbbeac17347fd39194cde185172dc7d9f1ce34530e2bbc48b19f17d67f4bcea47e16092cb005dba40a78fe47790f135cfe9fc5c5092eff9db8e2440cff6d0edb4e50ccfab653734431133ba01bc4a82e0324099a3b8c0a6d890387e58637d3a2d34f80e30304a7e73ff83abbfac453803c13826030735759954c8bff6894334a1985164516254a942051a0e85cb093c20e936c3592d7d65be23cc841b8fd07f7e01adcc7757cc731f805b7e015bc0a01797dd2c1ab908f57210c5e9ff4fccfa1c33aeb3ca44cc0011a58ae044b0ad8984f982913449512191803c87f1e2bd61ca0e91341511039443c5951c18d376fdebc4901f602494a8ad365a8284808ee850496d84ba91972c5e21ce105063c7079fcb08103e5ff413065c811fe0f7ad5982278c4b02b29f14ab7aa4b7d31459111bce000232934c91fe0e4204518292cd2b060036a1ad2fad28606b105c43cd011f22b30f03453e1525e34c0c9418a9c2a292d3eaeec40c01b4b6c5e67f32162b566081630909a728194d681938314395a4cce202e45eb600b1c9501088e9e5c4044a68a053876723820b1976221879a02d0f0aab4940eb6c017e1e7088bff1554d00419768d0c975af28ba200d6e099a2c2a58eac72b2133e20038c1f831e444e301a7ae2c20857d4fc880ad7e952a58aa080258ba92c234f3c956528789e780469689949f182b59da94e8c6a7dfedd12aaffae86262b314eacfca7e2758530cf9557a3a51e657f47c3df1920b642925126cb65aefc3e1197544db038eb64488a52daa7770393da33e6bfa8cb32070975c0410c1d0cdd0bdd4e57801598ce85ffac8f63d179227503e059452135e5ef721d6ea5436d1a83a6365929335946939357e64cf5812656174c3c68eb2313efa62e895297c2f0969e58e2c16672c909864f7369c852674f4dab4b74dc5815184d4db2c664a831259fd7980e149f42af4a619058eb89b36bbfa84a32c0f0697251958adceae49cf1bfc7ab12335589144aae54253240296141c9eb6553a84965bc57120f34242f9084f8449c241ea1b16546024fec84bb4d27f6717d5f54188668eec44ea7a65181dfe7b2b48dbb4dde2c97d77c81e84e49d0a63ae785445143af5d5269d1ee9b65b8a827cfbc233662c4ee6ce2d3c8830a726214c5b220765fb222192104d17c51f40a4985a0424a14cabc4f18adb4384d15653d5ba678dc6194f5b625f12535aa67990aa3396d012a2c7318863eaed0d2344eb7dde66dda38976f0d0d438b773afb6972c7f4a270caa484e793108a58a6da5a2f27b35ea9cdf4f50aad995e8ccf5d4edd2cd260f6395898728ae86cb508982184c801a2fad0e2bf779a58d4a709457565e378a9b8fd6775298dd6a4340ae242ee1a046477162f16edcb36d32311a0300752001008d4a4029d70fb592fd49936a6345b665d6e9b0cd5b752cf72a676e2c41bf3454b9c4fbc357aca621efe6eda16d9d9ce396aef3bca66a88c0322bc0e11638814d70c834288c3f05fb5a93e6e7ed43c537d68f82f2b5d542edb1146ef53e8f36487806568bd290fc96a118fe33d7a328ef748870419764668a29250ff130de54e7493978978846228f2ac22185143f8a28630c31fdbde8ed9f1de4e8c9631f2bc639157a644b678f189b1ed528de54d0340a6624e26e26e9347a6503e2e1b86294ddb3b661a549253cc9eda9a642a3a85e178edf87da1886139997dcdd2f25edbb5af9edf839f25ab17f85cc4e35393dc385e51d3ca98a695319d272057fc1548d47fcfb359ac1c50e07fc1055b7facf99144fd51c48f07fcb0f2a30624af158fda634d0b337cdb24eed0fd6fa4a8bac1101bf8b0c10236b8e13f2e6b8b8dff65546d85696df99ffe2fe1b585bed63519cabcb8f6952704793f3099587b96f45cf03f7dd5a087aa010ebf577dd8e0a306bbc41508a461a5840005a3fa066254e39a811b5b3300a366c00491b5f7c4358313c5fb7b62bd1ca93db8a83db6f86bfb2a7533f04840d682a0179797ceee9bb51f4ecc768613b36892220cf6c2357a162ddda93ad1c44f0484d189294e744db08942315413363481e4d789fdefa84852169de9999ae0c619e770fa348beaed8bd79b95d71bd4ff8ac249a827dc865e53365e53285ed32cafe9f99a32bda6b0d7b4e7152dc12beac42bea80255c4ab4b9fdc2d84f892a4a844abc925863bf24c0245180df7e491c01bbb8b9fd36d8258cfdaad8af8b5417fbdb0f89346e3f2490a8c17e4828e5b0ad02682a80fb5f011e0a04f183143852b98cc105772e3b7502562620024de78ea8bafd8e60e208196ebf237cfc27494aa0cb2580daaf4aa055b754f12fbd6e316fbf2dafff6015464431a25523d0250243ff8b1853847850cb9a6b0173fb6961d2a26324628cfd88a8a544b03e4498bf3684d410addb4f082ebf10a6fd8478dd7e6d820063bf4d0681032d082028bc42a0cced07012df6ab10f839106900c10410e86fbf0a04ebaf0fe8e1013f59dcd8efc459a4a8596ab05f16a6df7e17d5690b60965618f5871eec577f88faedf7430b0b9adb0fdcf2db0f8bf9db6fc87e1bcb8efdb60f62ece783f8df871ffbf550450f0ab05f0fae2b69fc0a98df7e57a45e1da0a3f2f046e5a18d8e1a1eb8541e86dc435353975f6a1a5949e37f3a84136368360a579b9641ce076c72d8064e9519042b2c37feae8d1d1c4f72a5a8bb367f77022d0d602af3e804030dd8f9ed5719208557de190e184938f74c15037c705117a08615af1eff23f97178f02c20e7aa64f977ed5b39d101aa624f2505954a1b2a60feef0d43b32c67762cbc5271a232029516954a85a7d46896c1ecb575072d7587a11d74fc1d1b7f17c6c5b5bf63f31fe714c5fb776b7ad0e18a0e56fe130da1d9e848ba020e49ecd6c0a4ee981220e67fda0216c119bed504bc2a02deb8fd2a0254f8df6d41454e9ac303be4fcfb39d9ae6893924f99f83eba70e55ff2a56bb01071cb0541c60c001a5bdf638de1911d80d4b6e50ba779f2479c3ebf6db241ef11b1bdabc5e3674c08630367879a93f99686d98fd170f801ec07600155c3e2e1fd70b3d0e921a2eb04f2f5f10a4418aef24250daf26fbf46030119fb7668008fcde98d1f4fb4070cc684ae475062d5e43b34deb281dea0c4c3f0c566768fdf69b809953d23986a1e731d77e806edf1774fbbe6cde1ac3171c1ebd1fa01b91d1243398cd5b63b031f0c8c9ac15f11618588021068392fd5e76cba94f92fc3e235b7d41ea84a9ffb5005deec67170146088383641b16d96a3c49505aa0be1ffc37ff3754aed53e40c37a5694a12fba12f5ba7b86e3f991e65456a8e88832678140e756a4a82eb82cb72478b0a297151bfcb5e1c0a1577848a8d8f25b22e74a320089ae0fdc060b57d6bb04a15c22d1112fb7db619c645d966b826a290bdf2da71c4b2bb6be89965d696b25af6a1d2b96bc6a2ea4e73665b61d1126f6d5a99789224ee674bfd447b68130989ec2b1dc2b33c42a1d928b4773cb9a4a44c8dff3875bcf23a52791d6df85e2180a909b912c00f44d6bc2c314751650a1e3871d3c6a266c28495746772a84922954d50ad9f50ace4d42226abc9b44fef9e98c82cff782708997bb583e3c60b66cae48e0c18ff8b6a99a6fba21b6304681c2fb9cd7b468d639a349e27d24c77e0cf318f0401a53976b8767ca83620950038221d07561888a2f38275a413b352d375d171d16dd1691144ca06b2c0a20bf3a3d3400e507745674515678c88d224622b76ed9cbab2165ea8b43448328a29c6fce93f99ff30bcd27ec01f3c55de1356e60b83c96c331826a34c16d8892dd8079c80dbc6d408c52191fb3e992a33ee36d966e39de5299d3b35799264112118ec244998b9abf886ec02526afb2a9d01ad1e68feffad1e457862996de2c5359c9889f01e12313e69781c2f598ae2166331935ce1e21a386b616a934142290e8b78ea82a3d6b2990940294f1a04342ba2ccf7e981ad1d4dcc762673b476f0bc85819b1606b9ff45625be8f67de40c57c4899093bd8bf028bb528c98b05b17ecb47430d1d221f4b72c186a59b0a365c1aa65014eab02377e274bad0acc568e305a39a6d853f768fee31033c338a40e0615fe9b11feffbeffa679cd6b9a17fcbe960e0e7fab2bf38fe803100b0d26b431c5980fc8dc319e78e1460346786160fae0f9b1610461749113836583a36ab1aa34ed96a23afb6ce1d731752b478356ce95d68a8a8e0ef9eb8cbf8e8d002cb470b2b43e54df44e0bfa639598ae1322f61278ccfa423371c164b3737375d7cd45ab64b2222fb22126344628c481431c61b2422f27189655e2af312510cea04202346824e227168e7b04d8ce170996da81ea13099a3503d6e22f29ed76968869d9479492cf3521113523048286dc3fa16634142a918533a52a3b6af121b4effd33daf53a999e4caa21c4e83958d52ad02e3b5ea02af5547bc5631e0b5ea85d72a29af5547af55465eab82bc56f178adfa6b9a332a184d5ec7b062cdd0eb1a22af6b40785db3f39a268cd734615ed378296286e7d8c1a1f3e7ac70be71a7030c20eec2074c30668da76b2646a6e47054b714dd670ba62e491b01726d8a86c599ec0a8005a9274e5688827a0a80139326a6a5254a4a9290921c191511f160af37250cf1710921610411420802c21bfb81071d00e1e0c706addaf346031f19f4e0f1e60dce00ca5fa7890e1329359cf6e969d4cc9d337ca6a194c64e2dc10f3a4dac0a6ae8fd7598aed11123d7080d203a4b3a4bc4542f6b543535a87102b5c5a1f232a4867586163f92a94ddaa952e79430c41952ab1baa196b7ea631cc983d6dafd4b94cc5310d7f6ef605846e6dda15ae4d33fe631a571ad61f9221e62679d6c8c0f2d0d64a85103298c81822e3ff2bb44a203882f14f47505ea933baa9b02e5fe5f5d0d4dc46d6db7be359d1be56e6ed7b563142702f27b3e8ecfa34b994445c1ae1f2fcc2d0c27c9a5c4af665645fe2c53557683fb236bb48470168b2c759e203689e82287e20f46ab31b8658e693677aca7aa2b560866fda7c82838389075a1ec0a7b6f7bce619349fe51bd21905e033e49928b71fd2991ffb25d9677c9ce96106cdcd5c61a6cacb4c949bf97999139491e2bfdd202896a9e11bc5bb8cf832495ec6da0f25cbb07efbe16e93989339824c153225e029198a8c532563848c8eff560a1430cefc07c3f653a225f62c957dc59c8a84d034bac724d60b91785e68f1149516cb4ca54f2fe370a3b2548b4fae15824b0dcbc960349a1662f56966f4de72cca9884991c5377d7a1bd3b23df53dd3d94c4f8958877793182db29e888d2e9ad34de4e31a0aed2e75de292d9f281986a18fcb85e21d6e9ce22999cca8a92d26ef9994736ddff292182a8f173f29a135a9ed3b4295d784122fae1569254c259ee12774eba6532799b769d3f013c649bbd43977eaa45327ed14bd286e9aba463a696f24933c95f6a98fb6799bb679a9a0f68d99e4a9b4f7a8cfb276eaa4bdef7834eea7ad93760ec7c4512b6d26b4dcfb8a259e2a2a753e422aba27d2456f1213c8c9162f56c2b9ebb467d9d45712e60410cd32244336cb2c50ad58d200953f8c19e1bd73b22bb0b01f5a44e6a82b569a56e6130445b1e84c9d3290819a01a43a059b232684afd0f3d9403637baac784b0fcb6098cce845afe8e3f2b09943c1301c4dcf27876d2e747baf8d2b539a064110ac60b65c2c82c93fa148e2f66382c1be1cd52fdf170fbe5470fbf98c17d596a603995ca894d4e7eaa07568040000200100d3100020301c140b4522c1704c3421d5e70114800153864abe6644958ac334c8519431c610021400801845440446ca6a1300e949d0c7f77b0285423b5d641414b68f5ea8d4f758a26adc4255248c974d56623d2edf765c57b81ac6c9f29a3ee9efdb70bb3ab5e634e30e2466d4a39cf7ef187397e73c5a29c083d0620795edfbd8f9c4da6efc88432f2ed86b0648723ef821b0f3acc3027e9f190f71c6dff0589a0641cdf573375e03bc2020194f868aa001e641f91a9a419ce0c2e393783591a281123f5f7d0c7b3d0e71e5a0081cb561582b8a45b08e4739cc7c86ad65a62652470f3577c9f44b8bf6315fac92a8c9be017c2507feb0e63cac2848848a581867dc0752f97ff81a9e24afeebea8c82835a30ace391f0ddb078849e588e1881d04a9cc360e1ca50b8fa51a4ec37935a9d5c8e2a262646763c7031feec023042bb30abb5f9709e593205cea0c96b7dfa61583413f831e5b2ad263c28b2819461a7c6da624f1829016467c937f61c2c9a33270292a7ea86b13655bb075409e6f196711cd1e006b04dbf6af2b0097edc0a5865c912ee5b7387289dfab87819def3be7269b95956bc8f82f6da5b65190fdd49ea07d37654544f87ef5316bd62c456f13350df7a6f68e6ff29967177a047f3a9900b74311534721d146e9234255544ba30df08b7d9ad742dfd4285d382f427c153a55c7a1a511a3c3f07b72297ae4ad14875c4ce9ab698a6020434cef85efe01fee2161244854023b227015826694b4a3aa8ca8617b9808d6d46f43348badb73f4264a1407aaff501efcbeba7cc59e2b137b104ae637d270de860c3d32a9608436b56083ced69c69b57a79a7995f93a7b005ba601d5dc18c7ec901bcd51c746731f3b1759939fbba2e22e6216f741dd1dd3bc7ffe960f09f8dd55476f4e46b28636bfcae79f6e361b602ae0deacf1a4e08516bcc590ca2790653b61180faefc24d148b4dd6c7d18d57a0a750c1a3e074c5aa080d5dfdacb3944e4839806f4bbcdeeb461633d4a45a4c34264fc6df9d235a747f59c5c14a33aa63a5e0eb6c9df1a0360ba756a326d158b25e045ed003d5a86cd474b39b338f7e4a6a934337dfe4eab8d3365ab50a32cadf43c9a229c93151e1eabbba6d03b89d04aa454132dd402d2b9bb82e5257e0e53f03cc6947435dba16dbccd5953c4d3110c0824a15e4b362ce53eb87725b02cc1fb3a00b71979b95505023122ad4707368bfc15095a2559d979a0d57677b79f9a210b43bf8e30d02603b1d67c864efcfb5309f3d2de4c537c85b3088838884df1f1f955304cac16ab61bd8698787aa9ed7c892b20fe569cbf61c37bfabf3a1b36630f98d82f8b15d140acaf50f1ea0f834246b43d182143b3c762dc62e38c2df83222f9393022a8bf0d9e4b454a6bf7df096c053c34b7e3d3fbb496ec0c280d3ece14611fff5fafbdcd513298871db9f87a0f7d7735e64edfb22023fd96dd1b7ed9d4de8779af0fb0c3554fe5b00d470f339140ada7debdc2c8080f46fe5c31e2f32f66aed8598d0a9caef96581082486cc6413145a644b040960560edf9183d930aaa8b90683e33839a1a45f1884cb050e779115d14b9bc3f39ad3e79c55289306a6e82e5a04c94b91270dd79de03adb432dbeb04a6aa20cfc21c091d4e3f91004acea8af78c15462362f08711adb953207fff93c476ae43136142dd85094b0a1dff43d606f00a5c0cbcb78473e78fb52ac78768026dee6d083a538177220d486c0abdbf0eae7f0a01b7ef783ae87101ab43862566c2535e6f91beda6e87ccb1995c06561e22955c370069dcfff0ff4ac964daa0fb5574a1f5fbaf73c042c78b8a7b805dc07fdeccb178c6fcd30a601f3eb8b0695c062eb2eecf3bdd24c4014d69450dafbdadec542742f3c0721f855ca45fbdf4e146507087137aa5639da841f06c63f93de07a71f778d374cd1ccca2fcb19e2bdf63af1c767ff0fa75623743a101ed387be84738b9f144fa0e08ed2888bd11c2562f73c6cc3977f2e94ab1e958b90ce8d00784263957d4fe8753375d26575fb4db69de8afa98c6a0e3c061e25e296bd578e23a405c6022974f979f20b282946c87524184ee3ffe7af43f877df5fadf98c7f21d7b6dc8eacc923e098913fd718173e242a575fbf577e99bfdae53dff0e6a607e5860e58fd3c15938afb24874ce3cb29e4eb376e6ead646f8b7bc4d398f978ee03c1c369083fa2178c7b9eff3f4cfc3962639b413aa71a70fd87e4774b0110dd519f12bb99ddc50e43a287d8557b25e86aac8a5f0bad11cdb97fdfc0e953e9feb7b1d73893bb4e1f932518bd9370ddef22e673f4167c2a80b38217de7d957d7f09ba1f938751089e09052fb700ce937b234272f254cf9f91b0da9093fdd2ffe736376d759f417bbccc45ff318c54e25db98d20c31f7cea2481e689d3c239da0f833eaa04e83a105cbf6eba519c066f23bbb430570f6e9305e92b81d9d479da2575662854667ff84f4c7eb869529bf9e0d03ffcb2eda32f2fcceebf476504575acbfe47c354452f17375fde08f1afff2593f349ef5e969e8c85ce177a8bf8f751e378c31002f77202658a13b977bca1dc477f52264d70fd377d03ca52a4405e4d6f5236c56ffa078cad29883ed6bda15df4df64d251a72acb275b33ac30ffc00e389f478ea9c0c8886033ed523d1ccf6e424e636d4a39e6a77119b5aff803f61292eff4ea9bb3d0a4b614f61beb42a04717fbe94fbba704a20b2fc91ed27f7df68fd8b3d6fd9975ebabe796739ee132bc22101ed3550a95dd51eee69ded5dd60c003f2ed58457b5402eb71de4e0269686be94696240bd771d530121ce4f2a8233bece7abfd3debf053687524977d6f29638789e47f429750b553ba6c2f4bac53f95ad146f0a0370d813dd630fae6d8c9b2bc52de11f92e97daaf61d5c9bf73c78bad8802438dfcc23640d10f71921b86e36c52fe1073d48a032e10f2a31411e4a638d7f063bc894bd41686cf2cbe48ff2fa0fdd61e237c7768672048bfb6e2f6b5ea42a29f11f5880f3a9fbe5b8fdf5972ae5544482a2026a1663395bc63b147e533c4ea7f9513babc63c4ed198f00b776cabb9d2361122882f2942de2413a9d3b3566a2d4692e1ba784b6cd779cf22608e39a07ad5793f706c481e851d020e5b7ce1ebd127c82354db8848644487be231d4090f1dbd2d8120de2f832391a09db4709f3e02248822cfebae211d7117a0c2411848d6bf5e4e88bd675c2154ef4e7bfac548a5bd3925972c13575ec2bc897a26b3ecb97bd48e3307b868c0db35cbcd59e8b2ade4747fc2d06ea0d4123d3a493832391487ae5e84f02bdbc1fac41451fcfb128b61c771a648125b82a5489c6ac827a4a7992acfeae0f505c0d70e01debe2f20734ab9b20e2009a46d9592fc15e24240bfc937a84253e9bc7f9e44017bc1b195e08c348029bfb960e29ca4f4a82d3c05d4405ac74a8593ffe434d4c27cfe0848e2a13656d066538c0a1b8c587392da4ca41fc69a505541e0c6c26515a2252b57ba0c26db42aa8cbfe88619a62cdc903b5079fe356219b754e2afc2edbb9c5175e446cee433ee9bd0564ccc2fca38d31635a968cd9901a6f714a287fc4d3feffec8d22436b3c63f829e999de60e6e06c5b5a771392afd6880e155fa122b1b16f5d824a2cdd1a525bdfa2a2e55ddf8ab981ee1f805293a089684c4341e35b46c08c27c31adc6c0a632be5bfe1b39c4c9a419a414a8c0a80fbf2fc00f9af2f31c773570d5afcbd49a20942fd8aa163487687763332598c22b106a60f288c2e23208379b912f4f74686864dcdae9d32799a4a82e0fe70771fdf4f10b31070311e24ee48d533ba65c358d8e80c53e0d460de9cb2f3d8d0a5ee4baab14b052dda3338fd5b41f72287675e6d3daedc0caa6c5e92f6465f1147e430acfb0033fcaed2a173e3b0afe5a283f02be423dd4c2d0474e635332d66d7ed2524634cabe706a148e6b45c1dc1e0817a435971bf10f0a250f095103e12815d27ef0681e7befc23b39b30f77ca28231d39b8774bb51cec2ffe624d797e8f3922690d45f93cfb4f06b798f2fadc4471bda02cd02a424480becbf82bed58aae69a02e9162c9422199fd8788e6d03ce8dfcadc3aef5bd3174f7b589d0f1019b09bf0b838749620780b5fee506023ac7064a4b73064cdf30339f27cdeed25461ef12fbe3138e54f4aa6ee4175853c30f1ae909189ef83e2cd2cb11e6bb7d5d616cfc077601eec62d4f780c525a88fcccb959ecf5f3827007958190b1e8aa5f790e15e98bc4d119c10373d425e810dfbc17d81d448a6de8cf3914f133cc4859cb5af4f8d2703b9319fba5cb0b85bdeed68ba1e669c0299c567be156f3fc13d78ce2182036fbf7a60045c8487d1548d739be45b92c2073209fdb6d67295c944e1cc9f96afb50fc57e27e8b74abc159c431186da8a431cbbb5846e9146933e67abbf15e0ffb2420b3589d24bf760ccf02d51e510b450fb933b8bf34eed86c733245c115012131625d5433b56eddf7795baa1f4c0f5aea19eea761f8f930bbb8952f6b93f43d1717ca936231dbbf22f38caa92627e1a4c6cedb83cea4870bbb22abdacab27e96ae74181dceb8476cb82c64a55af60c8fbd4d3440349260e445c4eb60bf42b544bb350613a35e67014d36a07c5a08ea6135abec1e4604ddcf5a34eb195351401c59a94a98b48b41d8c5ba098821c3de938efef548cb46d58d2f0b69113e0041ed039e3295920fb38878ceff8c9960fa6f043137838e244813618d669648c0d1b1a15b40baa0bd75cedd74138efb73fd885f7e65a61b1db6472786d254e637948c04c7f26b79926a1b863ff497fbfdadf9c018dc98ecdc0a10d02aaa4f41165c8fd53c7c1049e43b25245e61029b9f2280d581ff7aabb7e24f94d2a203335f4dc6ed6a66be9840512b69589c085749f212174151edb73eb90a29f15d46d13f6b4a7bb6c9d4464cbe0ce03631d8d68a28c8d0c3a95e3e13c59baf2618030202a9b61c78c763fcc7e932f0ffa46bee12248792995df2f46c0dbf8ab900d63ee0e4715264b1ae32045509913052d32c4ca5834cef33d691ce6a262faa9d398d95e65159f369b7318fd9623f6e9651776696737e75fda793af89945c9ff838cd25092a8b2657b52740fc203844aea2793551abceef54f133479002d57e8f14e7074de0c1d9f9a6dd54b05384434df6769aa6a4cea726b1023099c4f79b22e23dc8ecd6cf6c821e4109295c5e400cd37b1999657623bcea119494d690a62c3612db344743582f1266d151f560fe5a1e732bdab7d128b82c96b1148d67d4ab9f1673352029b9c55448bea98838cff35441f3e516e359c807eab18847415301dc1fb76300684fc55c789fb01e6c0f959bd6458cd4f826bcdca5d35e03135c29091e053038cdc7617b4024805f7672278bd2c4a92b19a0f881052a09e9228ab287be2ec6c8f3934d649c594f803ffe2b7dc32301fcedc80fcf93ae9b29c2a5153044e46a947f25811e1042c4a8af149a5861fc26bc9015a8143eff2d40618cab2ce2b2c6ecd8aede25052d80a545bbc4c5ee76355ea7642da5123c42228c4a979904d8fa73ab04f0cfe627ce1a629e8cb36f73eb04e7a1d83e312c896446cb43e3a14cb8a7b308f8cf43c43f1aba66bf979d8d3160797668142eea20caa49a8e40e3c9c6c488ec3bc3bb110522492ed643ab8ade4c7a05c4b67b8fe138747143ee90a4dc852768ade2888f820153b6759212f38e4f78201e65692352e4406b12f6e1a2d89b58fcf768f7c3a6792469111ed1047e1810c4a037ecfb3392b0d1f57e72e0d110385506e7e9ed869fe3459284679e24346de91da883c0c999f37a2b70268eb57b3a2376ab222e96307788ec0f0861129606aa8894dd062a2c9345e01b2d02d44ce14ae8180e295e38a38438245e02c7669f654ab63cdf7671d72888bc6e5f164d06a1addbb135611f22cbf6fa93b2e66a865db90b39b25b9334917b051174d73d220d7c70f5f2e9bde1620e006de7dd97104e6eb095f685706d6f222644306c79cf7b95c03eaaca8c9fa88c94f15b213a4399c709dd81b15f616fdca0468bb35d35adcb12a53d81848cce28d39d8d60c0972e21892a19440ef1ba8035d21e89a7ccfccf2f24e5c97b786e7faf6838fbecde972f276487be34d3a7d14a75519404d26a51924274457c13afe9597f04a1dc485117ead4563d1745ecbe464a3da58e8124db4e8870ee2c3b07ac74caeb7b45bb223b062c4ff62ddd2a252f9ae499c2c2b12085e4d642ee5103252fbc80cc13f747649369a4369b60a72a9cc7cc8060ddb1e5e75fc9506196124b0323258180c7e5ef5302a0b4940d79a208f480a4b512ed3d2d0d07e7bfb421711d23ea5f2f3f95c45d0d1820039d224232a2d44a814b7f940412111fa0a9714144a355a1420a522b88284e8b8b5e0fc1f19787f29a43d1384688cca8f8ba8f0a4e33a129a08d34132102cf119e2b2296f78b4874eaf0e3e0bfa598c8a7bb23ebe26b315e6195191f9da84924145543e50480df35416e1e3f28cd2c5ab06e16e31e2ed6ee0f553b34de0adbfd098044396259ea1b1e237589cb0d87e8de4a45f264ce805817ff292840c8e0f250faea9b82ceec9cc38e0f7e77e034ab6239acfbc802c8e7e414260fc90a42c79a6f2534ae31f3d2bf0af881fb289f669bf5bf6a975d68a329314c336697e52d6d21ff56408984338ada01d81e7d577a01cddf9bc53fa7db8f4640d45c60f9b92bc11c791cf1c2a34020116faf80212117f736321201816ee5d68a6346b61302842c2860619f01ad18391110431e5f5ed36c3e0624f44cc4d8946676119de084c25503395a30abc6355587e4a94469391fe7cf5445f82504ea71442154d75cd16450f5e5ffe182a8ff156a3cd1033cc615541ebc750382e9dd60ce194f1a22f5c08cc400d0812a3a8da632513d7977f9bbd59039174f839f90de40557f3e696a4af9f47ac2f477d2555bfb22682746b0c5b645e0591c43e66cc9545c269321d21946c3fea4b9e5bc89b3adde33156c646ea1876d22d71ccc51766815a782822445ff819372c54d9a2887f44f7dde3ac572356f7bc66631598b687df5451a2fa0ce79bf2d35e80570cea58236b343af04506f3ef305eada80adbd7b958fed22d168f8f1a16d6f69668266dd4417e4fe61da42e1d813bba3596371df896349d3f5fd0a8c4e91fd6ece4a3fbb90ed647213e6d370f146a80187121dc93ff39e805ff89e53e4c34007e351c25d984f5e429e7bd20631224aa7a1edb9e3a32896f417abec426b93621bc13e995e6da827e1e42eb0809dbb7c3d0c142dbb86ef95001b8edf0ce8eb4959ec0261e5833a9b646fd902216ec80134e88eb067039a53b32b966123ddec09d9e7484a5c26c4f481652c1b33d8694d13fe2d2d692944baa8ebfc1be90cdb4d6fbb14735fcc3f88d5f8f3cb23b7198d5d0908de35642b9ce229228b33cc66e4d656c88b0a08728e000872e6b3dcbdf1306362c6844203eb36e9d260513f8fbbe3c880b84b48ea4b184e850fd7753b46a7223feb66f4b166aab321cee6add8d035c6d3fd86d8a2157b7e68cacf147c362fe2819a6c0d9bd52dce891ba4a0f555ca52751a618b36210f20cc5fd0be64cbd1ec6c16adbf1c2389460b565f599ba8c5aa821a114657f82d62ecd70e1d25d88a086dcf68d15623392856706404f4e7d51558dfbadda02cbda846bf486f8d191086aa488318f0e0242bd11a075805d9aae1315059cebad2bf20fdbc91f91c05c1d24e32a975935b00ae52262114d016ca206a58cc5b7d496cd9f2b5233356f3fc14d517440e4c25150ef519ba1599bec3b2430b96d3eee7bd6b427772add7396177ff8c2415f2998b9cfd87fc3207fa149962ac9067b0a3a7622c8763888840a14085fd1663ad68e6d1db642e48d9f67bda6a0973ab368b0fd4b64a7f18bc3fb77a31fe026c700cf2ff2de1bd3bf2a076064530df52281a2ccbf38c832b92190d9ae1ec8fc7ed1cbcf9f65f27b7068b475bb0c1c6c3c4adf6fef9e620394927cfad79e8432c33daea9a81e3882ccf77e5d29b01e82e397da3b04a7260f8f7b128efdbc2139c6ab12800c9069757ce0ba369fe07ed374a32ed06ad43334a802de6356144af260b1e74693d41b0e399d1a2b37226e094fa636718c4dcafa3cd5be54610563fae14a0c7ae5d14edde22012cffd66ed10f71afc49c5b982d77e57964e66f4109c76abcca8dd43e450c58f32b7141911d9cef79795ff286ca0f0f9737335ebb20efb17dd4127cc1d1733f52d3bfc9e740877f7d67d37bd6f3e9fd5f8e5fdbf8d97d07accf72f3527291968fc41b6b61fc5066575dbe3e21dd265f2333c209fb9684d015de308061a638a7b6cb60733333fc77943417e0a5001acbeb3f0e1cc2067a5017c33f05ff46fc8dc4205f8b9de38d620fc17251cd32ebd57527fe7939ceaa5eb1e60cd06102c6544456f02476219fba4a6dc66ed9fbcd356eb1797ca59534e1676cdfd4972ca12d04db8e31aa4b5b9cf18a5d1537e7993e9cf3ae777dcfe504f67f35955f8ce88d489e6fc03ec1889ceac0dbb439c307c1259906587065a95dc5fda3e0d2b6531925d19b5cc5742d26d2f33ca6bf81dae0db1d1dad62b5b8f9f330b0c785d0c6cdd917f3fa69be79c8babfef7784f0dc0c3e8a2437dfb08f0569b642d28d67d7d21a5d49d511a2d2558cbbb3a55bc661469deb19d704af1942616dbacc90b3f45cb1bf93d3835d7f7c05e29da100fe77bb3c5dd7c9bc8f749a0fd6475d84cf051f199f875e5a24ee7876e936635cae7e66927882ce6c0f8271f8330636537c27a65f03a9fce15a9ccb6ac1a1396e07121b86937214ab1f36dd4b3ce176eebda052fe08947e603a80dd4517e62c2712bf438d58ff25ff8c1ba1cfd83696597f515bfec9aa8f6746259ca920ad7922f13a94081356daccc37f02a11b5bf6f1991feecd1173bcb36975caf18734ada9b09a15c0aeac3bb04da4d68edb853e413f3ab0e2979996177d618e9a0f3b2121fea050a2f6dbe82e6b409461c11723f55c0317063893a761bbffb3e8a90782aa0290a4ce96526f6117c21364857babd9cab74a1db98eda89c8d542c83920b27cff31f0dbb529e02688d2580be17f453d7123ae819e29efc91027cae224e64a13c7e0983ace1a1d0fd01029d78e19167ce5573393aaa17defac7749ee751404c2da545b419fa95b503dd7639d5bf1ae7b2c39883e5f86f11ff50870bbd04999f6fc46fe3ec5d547aa7132ab9992fa67d9b187efe6caa43d0a708e2d1327ea51db3f4e4e60a9c1db92515ee85eb48b41c51e156b09f307e199ff99f925fdf49474b6d2790f8b48aaa449ff291a78a8cb16d3a82f74930aab07cb4d94f8a9861c01b9f108fea036405ee96803f07425e8b4c41b4e945ad9a1bb800fc5c636d04608d93a3f979a9912cb920dce5af00487107d1bcc5ec5f4f75346d609be6b33e887a2f06f51cf50943e7bf22d99f44a17c19da4071fcbd12853b05785ffa16e02c47f3c9c5c8c46d84b844bdd437581f23b2cb5976c61cce27972d33cb957f8e45924c5b00f55f8e6a17e0b71b76af4e7f6b05acd8451235f2b3de342d968d8525f7f7722781945bf5335554d68a92d6c607e5614b2bda324136356ad4b8f7364ae5df888a52cd97a8fd456b831c0a920f6af7dabdc3b597ea4955f15d9a950814771f89b4ca613ce6b79a51a5e83232a1e19c33521bef03628361c4f34debb8f5b6310d545e4e32ee5a25f81f176f84ab5465dfd931603770f62ddc0e1fb1cfcd4c6f6cea73c28e9b2ff335504caf1761cf13579b71bbe084eb5b532739744edac502dd9733acb18cde35636d208fc19912d795c9b1055e50c05f4b1b18c9a93b8256ac4ea09636f4762a10c88b85f6ae63b817f12df4f4908686d9806eb2d1ac5d1102643fa6dc07f565c8bfaaa055d6df8b8744682b683f3ce5bec1729591326ccb9bb10a1c73e918b038a64aef5e15709b12ae24dc79f7c566a7fc17b35891d2448982831c02d62742488a103a721f55d55b176f210e251c8b8bded7ebd3152d1c0544050200265c53526a5328ca1b52fe9180f4768409257e0c7ae098db3109253e411faf400e1882e50e449bcfa0d7954b598c92c90c66fe580ead4c0a6ddd95c78d08e507bb60adfbda94e92a16b6e77aec30fbdbd5410c709cdd9a9bd77628739ddd3d268384e8d323a00253491d1e8f3721a3be578a4ef37b4260d1c90be36c7a622b45ce49d6733afd619f71c83029bccf9216bd8d2691e96c6f1e4099970ba2f0adae8a633253891089198e75136dacf72e97c4c108955f7f2914869fe29d100ec8ebcb5bd990a458ab9ebcc77e563df09693ab04f8b76d642dcec0cc43cff7b0ef66bc3a636ba95435b820ffed212b00bd922594d48156d1f3872ebd0a6ab7c0c5e84e6ac6860010211e0eb4297dd750c1546bbc9e49cfbea7f277c4376392d8187e19463f86e6db7b3174fd2fd0b23b669760b22bee80244698a2aea082ca4438bbd1c1a08536c0ce8825e68e99b672a1de1e36485112f8f23754affca2377348eb40ee60635784441ad8c24ab80255c1a893220bd9b1e0ac28cb2b06e643c31d076fab2b8f37cc0aba7d7457d8d97f3e9f60da0f30c4bf31176b2d3d8c78bc38e1a6cb1d1c4d3a9f9542e227e269438baf512e3621b9f252c0e01b22d2bf0c3091ff819083114bd040f1d2c6b11503eff9faa6ea4a557328c5c8c867663f290fdabaab97902cec49b6f03c9f5535b38744884518ea5222d645ae31eb2446776798d0bc98480b9ef4fe8594444f9bc42655628b7eac2be9a1dabb097b1c47c10ed8f15199c3cb1510d3f7e6867ae4fd5a53ee13004c2b238d2f480a304fffea607491826681abd07149002b57022fc67ca7f076b29e8ab5cefe88c6f35bc6c8373df942877f08e0939e9c596478353af84f7989ded118b7de89e1f2ddba9e3eb171f04434cb5d65dde33da8564aed0c419ce9cab078e31d51b1cb0f7a6ec0b05f57ea2e9c9af2dfb17705d4675dad58d24a382988b9896b5f49a98fad5bf2bfa0db69b525618b767cb9b3ba7ab597fab2ef1bd6df55965adf13b832db2c6aca973c56872dbc88bc5aa28eb8c0021ffbd9f0571aae3b7e1f7b8248e28b2b3386f179f8d2908988af3af302e6cb05ab8de270ada2eccf3c21710ab61bf818c35261644b6c7f445a388e5193de75ea69777350d64413cfc8bb0ced9f383b7ff048880c26f4141a6bc8a2bce7fddc6a854b0025c74187f60c541afbf17f7e80fd09318fb546cbaf260b00b4574572238a26535c1db86de7dda02c98e4dd21b4c4d47d420ea97f39180574c16ec68b8c4cbb202b372cf2b549e6243e8150834696dc3bb91d7cb7ed8f346203836d0eda57143451bb045828c3269f4ae4208beb10800d87903647204ededd5a139ece8c1edba38e24a9fecccd41de36ead97419cfca78c7a6601a2bb5e751cc8fc25c894649303da169f80a6fbbeb87b086b981ad4666aa3b650b3da865a35476c9c0ea2adf4100ecbb67cf88c193b6c4805ff7c430b1cad0178bdbe71055c2a472e80576eed5361ff13dfda148e60b369c6bfb792bcdc4605fb1ecb2d5c0c46396ec5c067d6f3891de34264dddf6ed4210bec5dc77e36c39e93a72dc3ead1b280d952492f5c408efa5eb58aeb776b09840b53a7406eb9c697ba0747d2ce398bc024d35ec3f3e60dad644c52d279c710f4505ff634133197c93d1b25ea549b88a041626ef1d74b4f26657caae1d70ce1473234868d0b5b02db3c8166350fa4c320d382c6c34198d7836480111f3accd248eb167e5f011b78a94bf5cceed4997f1759bd34393fa296d80de8552f272fa17f3cbbf7f51f4e9b46887f1aebd7e50e85d813b58a594744ff316e34e9ee7cda0fc6e516007e9d175ef872739f179f2bc07977d540d945b9981e37c6513a8a1a281cd3d50d9aea2e0e7ddb40beefe6d1aa71e67f72c3e3f6a6e1dd9b533e0c581b4cf8ab267d98ccb2069a5e39c73c92edf0bf0187770f74a97ca02fea1c7836109f818aa3f1506ed6bfc859a7dfb10fdd98a8e260e5393f6d1d535006763845dab8d108e10842a755293aa6a54e695f49473c9b3a52cf60255def08d5f0c02c61f301ec8dda43036e66b5961ef87ef313977dedb431b491ed8ec49695921f321b5a6c867f4cb11d199759e865d7f746cedf0a529b8ff17788c36ba4b0474dec6718f9dfe27c5c8c5e475b43e2c09996d1a16c597bd88263b33d4a56602b17034e2a5f8cec6945dd5216c32b7d2a40dafd06f2630787890b1f67dc1e4004a00e30360277cd1a317bf79eaacb7657812f741b2380ec9a70ccc7f33fdffef250be8011454f9c3fe6d5d508328ea161668b94a121b2d384bbeff5b16140ced174201a0e40dc193de31e4b214ee8a1ffe4ce712d2fe86f486b32e4e67e3ac0fca782e67314dc7b7f6229c763fe781b902e3c3459ea8cd776dfd1a2ebdec0e956b23d286f3b921766f3b7515f446f9b348f97768f3d1c38c43e7f31b23efaf07fe48fab498e2bfba62aac6d3d8f169437df0405873534c3fd14efb8531b90b726dd32c29b03a42a06340afa4df55fdfc3181579d3ee696366553014d1b89a4de5380a4937f3ded7ab884aa5258b5ed0b3cbf6a52cfdaea9d8ce814a94d49202f56a508056c606f59842b208a346bfb2117ffd3006e51944436dc7dac620935d9562dce550079f86b9847d5b3666b7ff12092d4acf9999cc415e57f418c98049297b1c5f2c6d17a65c3b4f9f586c446d3ce6b04cc1ab099081f8c7c0f6f68590ca3d51dfc0d2024a94cd6c3879d548cc836799089ed931537adc1bfc4ddb69414fd2872a16bf3a1b5b836b7dba81fb0078ee409367b86384ba3c33b3c0a633c4bbdcbdc925a9e50ef1bbb03e2ec8a32aa3d754f1b637889b7c44baeb379b8b0ca63bcbac932c4f33adab962d2c3aaa16905e70833df717f9e20a44f2436f78673e748fe7a424375abc0e422674c9e71f437f817b8667e801bb260fede9631316feaf1cd7e70cb209b6358eb2ffc57b798b186bf7ea24944873b34975db0157ff3f7d1ca634a53bc06915fd4a7470d8776081010e1eacf75b83913b361f15c6b797191e2c494c9f8707c8b1a9b9ab95abd3524da517ff3be0e7e1f59ce297fd2f89594f17685740498167868d8bba17216dafbca450bb7bd24397c2afba3db3ab96d873a0e2e8d9174071d6cae5a71d40a4ad8bc7d861012ed8f797d9b0d0c9893fef2ce4afc8b4af843f4cd2904d480e67b28e4e88f0e0aba72aecbc9799bb5e50b5c03b7882565429c4e655cd0f5379390dbcacffe6379e2f63a7dfbf95c679fbfb746c8a9e23b4ea081332a369d3f3078396063bc3a0d7837566233084b8bc08560dc77f321fc834266b1c060f01c45502e2b53f3b211b8ca099c4c901052d0e039d25b085cc723868444ada6b322138c845d4f844504802db1bfb3cfad76c768c25bfd0c21929d2ef914fd8d536e84f5659ae81c497cc0b6acdfcaf65d08e585e94b5bff2f1ecc26f172bd804ab7598571d47401f6510b9e35f6f5d5224037d4b6b163c25bd914bbf79b805431cc178707fa9a2d90d69edf4c2e5a16d2952a3cb11277e1e43d049e780e3628b09f4802729f09ed39735fe44dd9bf79b204c9d7a9faccbc9de981fc3f3e501fb89073c0106f902bde31746bb6adfd311f55d65f698a45fd29b31f2d72ce45dd9d97a351d60b86461bb202270f7e5df5c4d6524a09d097009d8facc9656c19f18c60b9a68445fcdc1791d6962e3c5a02b007c1863b04a43a733252713707f0a45687a21d1db0832853b8f985363651ce37a7ab3d08563a6dfe9ef677ed63c8461dac00e39d518a1eb83ebed70ffb4297f90f94eb3505b728f0266bd9a850fd4a60b450d154b6944c71b138b1580d169f72729f48a38820ff0b1888f22ff39db37707a3806907a834356ac6d9ef5ef3636d81064cc4475d82a10a9c9e64a89b5520147fb21f5dd3d1a6d2c26f87d0414e9e1f81e4110a8c9780127e07298192bcf17105ae9f7e6268c0f64eb4c3182f7889c06984dc524457837d0be16b42ad791a7dd0eabcd955d0801568b7c886448bdc8bdbc37046dff6b414e032af3880c6729c18204eaabd8516e3b01a00e3247abb45daa8c5b1922f60cbdade3fe5e44e046cf6510132164caa0f5b97114ace7884f15bf312f63dc0476fb3eae31242c6600bc05ccdb44c34d28cc8fff44381704fe6c9d969043be8450cef6aad5a00c617d205e8c89e46409ac4dbd8e0a17886d39bf205a83060f80876aa0b900c671ab869d48cf4efbcb9c8d3997646cec1823b52ee878c68370c66c3ff0206e10e8ca6841e4e7048e1cd42dabbc5926ee56a43add2b090695af4c7cdff572ef3f3b5116c950036fa5b3912158d054325187e3b8b6c58911bc5a12ce0106210f40a0ef4a70031af39cae290f5dce1e70cdcef037db9387d0a946d0c30f49f970dc9b0127c3c8263a5babb2e49850401ef948427cbe19ed5fb68f2826d15c592865795eb4f06aaf002bbe688030f2604806581d5d39eee2f9206fc7629be50f4c445acae06ce27f0375ce429f59ba2a38b6cc48140e25eb378db2351fca0707c6aec5e5579b7e737612c7c005e35e612ac3076f390e9fe4f2811f71f028186af5566db75339f13a1ef1a63902c64754fcffc0a79112195cb299ceb9bf1379fffc264e421f5e2a559d802a1df0a167a25dbe38d9ef8b60a700e31792f056a36633a411791ecc25d532d955ef05f17b035b8b7741c42ff046c67b80cfafdb3bcb7493b96b66c2fb6f1cdc5334e986095e42083868b24e6ab5b4409d607f00ed5e529a147de24ce2b05a53990380e230d23a68eb81c47f783e8ed8045737492230e7bab40e6745a4a0cd527c83e67387403d543336cdbef8ff2aa2d68d5f12d59248b3b2e8ef5887f17fdf869f02c702d9d08cf41fff0c6ac456a95b90c63ef411bd63a850da55d9ef0c9e1a2de8406c9865166145017ecf6218f713330d7a5a849139f217a47491a3a8c3811311627d759bfb751ffc00e79f172d6d11b20a1412003349c47157e2fbc0d20140117344d0b6b80b3e63e7b12d64264d8ba8b7704ea533ef8d691582ac245e982428e720e910cb1ed69a10d960848cfdf4e9f24483a3dbdfecea0431b2702002c820834198e39b766b1dd0a7ab6e6dc60f88e15419d5c182a43a075148c31661025098ea30c241032048ab6734cb807dbd97ba9d11bad3e446ff28434b7b98bc4497f5d545e0b8bf0e8136d50be1695ab95a2de099725f71358ad77d449d4cd62a259bbe28425be4b4030119875db8a18aa18583f5f2b66a463fa5b3f1de72a514a62fd36a30fa8ec13cd431520c17fa9bb610e97a69b6595065c9d9b52d6823da6e6f2d801a6f1f9cdcf07b23829561954a3e5fa36429185bc14caa4f10015db137c6af1c90ae8cedd8c8d265b214c84b44184991535703eefef614c1430399c39d306cd5a5e12d398c9a8a6855017597b3a2e9f64244d965ce5dc6d0318d7c585b68c6ec915156edb82ec6e544384aa533c7eac3f0bb610bc1048d77f5f6668d99fb6f4bcc46fd7e95ff89e90b7ca01e9febf1e5456250e946abad31760353bed54c1d4523d082214e971138b4eeff979296947426782752cd8acf9276d6629733f45916c9779b5828b931b91e350752e015460d7a31e0eb94ef4bb9d1e0f99dc11654523ac458905cc87f2ec4c4be6ce34bfefd42ca5f15c6086dd8d4531f469dfdb16f3a891f5fd4580b5ffe598f38ab6f1294f9b0e95daa453c14781eb6a13702b06d7d11b82ff527c149839c2fbcb10bcd7df66244711016700d46d8aa48499a8bd0566714103ed7342a6c5c519b34e7ca460e7e611dcb572f09fc5719f5c00dd0451354ddb07f818f24e2c34e02b1891f8c6cb29c2991b1ad500309bd59fb672e41cf2c1726e0df4ac375e0b18200bfd02979e60fb68c450ea659b9a0d8730eb06df1fd56ab594a2eb6820083e330e2bbe7757aa046be7d599e5043e1f777668b34f4b5416320fd5522d3431b36a96ff3a682d4d28756432dcbc1f0e675641ae40dc2660c1a90bba64f0381202750340cf16f7af1b24abd136501609fd3d948d946f6c624f3e3537b96e9465016ccf0b653864904da016b71d3a8afa1e6905d974ddcaffff6cf335c78ba4175464cb84730145f5ea63fd4a053826d1ebab4912c8f9dd343cfeac5225af40b180324925dab164aa9a84e91445b62297cec3aa0341e305c651bec556101b1f9cab59eefc0f9a0bd95d90af9d8bc7d39f785982bfaf453ea1daa90631bcd8793254d6275da0495fe91c9dc3f3bb73e11dad6d2ddc7b04d1e73b3333a2b6ef5e5c3ab138874664264cf2ae814a5571265aedc53a234af78305685db4c3c0a47c1ce93e6a84849de86b85ca9a148351f1684d0b595a5886c655e778248ad28fb47f217315a22ceeaf8ade058cf5c5f82e8f41af9f30622ab0c048fcb5820a02d2c54ee3a57b29cb093b3385c7703e9e1eb82f8c3e5888ad4d90408df5599285f09af56b33f32ac0ceb6ed4da64cb7b37218347d204d70adeb0d8dbaa4a1762f2207bca875e7c8c953f8bbe61e9e078e7befcddf874f863e56b59ee3106b625c58f2c694fd6db101fa4e222f36d1f8c56b6c82aef86b2c3c2750cc00857c941f2e6861c078eb7a323a4a1f0a275f1e07c915688cd19e3b650dacfa023fe9f1456747bb34e2c9bf95b398d0592166c90bb3ea93ee547fb0557fe401d5e164e72fa912f459d2f8a8397161b6745f2e2494b08d934ed7c938d7a89e0dad2f5c8b8df53bab8f160200f4f82059f9cebc9b600abf7ab92a41930d1014604c028b97fde3af7b74ec764282ae3862163b08bee2b1b2a1618f11bc640159d742b9af63f791b45e92f0d2c7041140bd96aeff1a3dc5be4abe1313fb5b416b2e79d9fe081c0e1d1c49a07a17d8f02e639cb483c840c5c10c77ae359becea0effdbe165abfdd610f57b9a930801c65293748fc54dc3d1231259af4aafb15795b7f9c8dd92a80b4daea4fd26a22ee5937ef01046d9a21dfbb439b9a463401109aa0a8b60c4fd42a375e7d9789dfed887d711925f64cb4302a3322b91468051be6699cd30798886003e9cb69a2afe7592d0f52318cee663579ce0f0d311b8fe1033b5ca04e49d386636dd0dca8f098691f8e2b3896c662cf72eed8b70829d1896e4e41f5ec56be42dc72d619517840327fdf1c18c8aece0472a7877c84efdd31e9254669a904d775b74913840d4461680db7ee7e2ebd5e315130275ea0901e4b4f6941e76ceccbb1c74f1118162f6ba3aa756438042393a5cf1a2f5315671d65611706dba3c52b60bf8cc9f12db31369795448d9a74b8dbf927ac3a01b09a3e0a944d62c562522d46663e06650d75372ea455bd203b663077d00721affefe2f3c284c18f53cfe30805e41e5c33bc59a4f363e8c3ab0c9a0fe882fa638a9661deee3b22d95a7e694921785e5b906e8057acbfab449c6754a92dd1a96a870bfd0ed2eb1f7d1f5f998a486d2a5585f3e35e27917908d19810dfefb3c44963feace1bc6a3aba4d51987982e3516488669d2ad60ecf1e37c2269068f3516405efc125d936c31c15bba1190c583f4587a37fe5b6246c5b643f5984b8c846d3251f38a69686891b6827a11cbcfc932c7427b88ddb8681e5b44fdabb6b67a643b7a8eb1f53097a89171670f5b7c6c87082397ae23b7653a635538fd6ffe1121da6d5356f7819d48a5b19665c2d43bae70b8ca337d614a474c3e31d17a28ffd2c3d5deac2a45db43a18585cf38c21b2bee6249734a3bca9f3fcf281009ef5723c8d4a89ca87c0b9f8195a395d2624fb97040d3aeca899759d9a719ac53d8f2c5437813493ba4ed97772d4179959600c379db9854c8bf397ab941e27a38454f68d5cf09293cc2f3ab3c217728e3eee3ad485e1d2a2fb7801771e7221543d289e3707568494bb859f1e1eba718b84f767107d42b3145223443ac250ea98618c67f2fbbf6e6ce7c82fb1362cbe71d6a6bc130c52536266e5f7b813e831504c6ab3f20d0c80c74b0e7222969448fe858b404caded7147fa57bbd6bf7e70328318f9aadfad38d8bd2a0fad7c6c994662d2be931d7f5309dc33d73f35fc2be4b262abbe31e299c6e82fe0794296b0749c2bbf717ac303949007e5a873be85746e49c4dedb24ce85b240185d26844c06930edfaf7a376038c889ea71f3e97ca282af2fddfb2d5dc4f09c7b88ff941c278203817abd5daffd9627ded634a28e7dda26fccd4f71a3d3b0106607823ccea8eeed0771ba0b018965846aa0e41a3311d90e00543bb7c5a3f9839baf4d54d297b92f1833c9536164cd02c6ed7b4cb1456b27343824a11a98005d45ce0645f45cac50eeef40dbc3956327dd5931e20285945250567a01682605400794a23e1c82fc7b60e458398789582f7cbf346cdb774d1e6f840234ca35f326e58ca9cabbc9ea55dc248688a2d85e67e837a3d77da9b1363c80dd19b59f6cff9984c3f8cdc42f406623daa49fd12c96d1fbfbc915a68d0ec812b692a796d501d0a56513b3cb87f99a9f5bbd03ac25ede6048bb007a78dd14736864e042daf751bbdc8be79d495c06295f87c13f5936ccf8b2df721e083c17e87db90d8824ce74a3b2f339d2335abd732e4b4aa092d054b2eaa200a48d3146c589c685a05a72d1f449d3ed97bf7e0415b8e7e4ebd93a62566c0d52c3fccbdcdae18c1160ef833bc045aec0aa9343d96315454f65634cd00fa72035956e09ccb230618ef96f746e44ec74bf7fb0e6236bd1147e198132baaa15abe053289d4e362545d76a57bc7bc3369d0452d0b935c47db3cf168334041ed54ae32d0a6d8aa64ffd27d6a7388aae61ef015df1ef802f6fd611ff42a622b3be22fa71c6768a1fe5d94594c51e8bdd51f20fdc57b30091fce007a5001eca664b94fc96e57791ba44f4a328206856044459e45bf84d2562a408b340c74b2d7788b6abff10add82bfe1e61564f2c2cfa5c21b4ff8bbd7e4ab18206b31322b4f3e3d3d8615fd69e0a0d4ae187f1db700821dbe9b8eed4400eb4a4a9ab471a6959295345cc88b9fda2768bff654664949c8bb29d9f09fb8210f146929282cf4747ac3b09ff986598d95a27d3d9c385abb0bdcb613d85482c4976d909cf17fa61eed8df2821d69414ade8f5f256fa62ba8e2efdd4c0dc90091cc670c7131d160bd970dcdc0cacc157c6f0a32eeb6120d4679195b24ac98c25133560ccdc83327fb3fee8e979cbaa3ee59e30ce0e7f5468fd905fdf7c3e50c9aa168c955bb54dd9ea3047f43834ac912554d0cf24c30f797c39e01ad1a2048332d791c65c760f15a99d864a2b6457ee2ed88e87c4c137424d7564c779a171e72c7745db6b43a26be3eeb7343061fe77dc20541464ccbf8bfa5bf795564014442da11138d2aac050746c20f2fa6aad34eb0e16b0c39566c5be8366f51e37a382567a1d2763471e1adda8f859e6aee99de88d299f6f6d2cc7e6fcfd97ad7fbdc8e5afde2d0b7bceb2555f17afdde4ad49cd4f4b3a8df7b5da5e10ea1f9dbf12995b0ed7354ea0280b7ac5695b409102eebf9f711233787f3e38b6e9041b7fc47f1a67d27a5c3d97c47515dac01690d496ada98d5eb56706aec8f1a3bbab154be0177520f7bdb50a3ce65f09688dc3f8c3fa1ac71991fe0f8703ef737f452482fc03389769e11ac3c4fae5f12f31ece74be3252e63db94299f24bf6ccb716d129d48a11df79f6775bfb562532313a821bf784648ac8d2a1e216cfe22081b11a883d9940e424506cead16d90aceac31b34d34c9fed1b461f029c178da6ec01f354261b6daddbd78072fca7d69420bb79fef1ae565a20394d691c3d5c372e4731ec773fe6c6bad38ece3bab90eefaf6e740b0261138dcac1cae7133af4975d3128d1cbbcfc0baa9ab5bdccc04eef10fc63f7ca27a79a60b004f8e967c3ebee030720811de0c46a712ff388aee4b62f0877600e5f54fd8364992fe747c8027ad0dead512f171cee43b00f9c76a9baffb29811cfd8d2b0d8dbb012bf189fb4e80e989cc749b7b96d118450ed6cc6fa67b7179d146faa020c039dc5ad6c30a6d1d078f0948749919d9bc2ba4e5e1330a290e22e23e715bdd6095b0d318120214b96737784a0e21409da44ba585171a265e25ff19e935e2f79bc21a0e522cc1377edbb0c924f2b90e8a6ae909dc8d19cecd15f4cfb9fd49084b1494e65de29f1b843f92c5d6f6f83d0ef060c8599d9ceddde2c501821ab2b2584f3d2be7ce05400fe4ca5121802b6de738ae75c3eb306e0e5382d0396291f60614712f752ffe890e6e1c636bc4684b8854e3928d8ff601794bb21f42c3d6779937b3816fe8b05bd0191ac6c0d57fcd5a528b84777646e84e662f05e56478cbfd6ccdb923da0ada695d48cdd70d6061330e74d5b8d927b4975d1296df02d2cce49d4047ef277b43fe2c08d790805088b43e71d3772a4eef69a41dd41f165f36142b49234876bf7a9de0a7deb01b8c4a4879841c9bd2e199a327beb1665eca46b9983e71b2d5e71bba1a380035cd2f19aca06e09c9b518f8631afb2ce41c873226b78111aa5d356b715673c170b61cc79875fd11c70d661b4a69918e1be61d8a57ea522b81ff934829ce2d12da927dbbc17b232254b33683e7f39b4d944b71344291ea2dcfa848b0604f5db1007b201b29559d289ddf7f9d174dd645bee251e6f21aae232f436f64c2173c247222c4d83222f2030da59a4d79c01f649dc05b748155df470488b093fcbe62ee1bb12d34d8f8dde1572dcb23dfcda92f49bc96ae1ad19e6edff3030c1a17c4aa64461c527e5f7b3236a0d639d8edde5ad6bf169668c2ab66ec78225ade531ba5d4c3ab75b0095a3bdb9d2144021826616460852a458eb01b6de6215b831db0c79f97192f27c3eba959ed7bd1cd8e5f8a57379f771c2f9014bcb564ee5f74be6a91449fd8177fdccf7186cac2e01922d76073212fca07172ca71b43c75e98174d6bc40dfd059e50e49a601a2d91436d2092a4fb54de8f10d94d8682a3126467bf8c10aba58041cafcf1dc6649fae037cb9bcc1dda4f9da256fe50faa9de3242129e58e0c7278717e95c03609c0e8c2f52f2361fefb56121a1ad2d08646ddac8a193919281ab04e683096dc91254b026cb6f1d47ce259012e23174b6e21bcb86ed1338c2676bef6730f71f509f1f35b37b54103f5e65af42c4621a96e0f251ad3462e43775c4878b4ec547be76c6cfc94f7f7afedd46f7ccab3f2618bef65b704768033405fa6c971aa6f4156b388db53a9ddc3683b919ddca7828643123f258cb730410a92c1bbab56b8fae4b9abd84e0d8819aa7c7cab1b15f95d232354beac7046fe30b7ab9bcd80fc07b297c45aae2406a794730bda224a97818ca80c832c0a43e0823b3c521af7a638054581795da2a0083a273df85de0471e7b0598c99a0d1cbc01910f0c2172c7308a98e6bfc0e40b24f05a9aba30be8ad23eeba7ffe54f2fc27d1ae1a9a413cb7329a9dfa0d6988b01fef0231f36a24bcc9b7aae206f72cee410f99bbe519e8365201beed29281a3edb00672ec9834e9ac60581ff2f9fd1a7ac8d100e34642eaaeec264667145dd77ee4c8fce96c1b2b75ae5c84223ee237d265f201b8dbd5409d2320460bb6824f731b6ff0249a9299e850a086f616a39669d2725866cc81b472bbd9e280d8e84ebd630b72e2bc3498a84317e92516feb950bf053d47bf23404766a3d381f5e0fc057804e70459d4c23110b39ec0e574395c1729f5345e74fce65085dec7e6fa249f9f3af309abb87d1ece88f7be0d8bea1f68909ae7c1cc26af41b4a608544e3cba0563d43356d67ab8f400d02efcec52fdff0fdcf7928777b431b37fdd3cab5e5077ef8c7fe8f7f2b1e5ac2f637d4f39570f0f5c9a4a43f8e61d51f63a75f7a354af4daf4b32c74df14c2a96b7b11490f75884dffd7cbcfc8ec0f1d6deb95cb4adfafd195fba8c16ee358f5a77ac31b4c39471a7f38b62ed494f1f36d0ed13f6a6778fbd50a0200598654db02bc0e151a5e818588c1a0e9e71fa6e1f996697127013d00852df01cbd5cb361daa58d1f76d80a83d9417aca6f4386acd47bd0ab842863e15afff88c1052b9370fc75535d8346880d4c43d0a70952361e66c4fa061f847d3f02a8f51bc1a223a7da46b0c0fa694c31643b9604a3579b2ef789beef22024580082bb7be0ab89ade493918a343f958b1a3cf34068de5abfa904d1f2dfcdb36d59136314f1991d1d902c27bb5d4771255852f1e58416d65b7eb69fde84de0f1050289cfcb91dc72f987edefefc802ca202c5e2c67513a9b75b885d5c9c33a14c2a54cd341bf5900cd296307a94ec3a74f9cfc0a1c0fd3b2fdc650392c2afd8cf14e3c34470c3ca1fb2fe4343128b5f0c8586f7c78ec4e986ffc127a4d9fea4fde7a71507904f2a4bf3b5439cee7efbb770cd4732423df638ff17ce4b981a08868f1092e1f1c8a0f6309bdaa065a079f8990588838296d001346c0a08d9b0c4911c93665cf8ce7d6acde83275332e442a3c3ec75d2f6b1ecdb7ef60f38a6ce0411c693b6374abb3425fe5be3b5382e8eefd3354c62738e9b2e2fde1f84859ddb5d6dd89b91f5618880c205e027166f14dd4210e5e5058e309ff9a6784eacadfe6b84ed72710f1b592cbeeda71d7456555bdaac7f83560d9626db1da76d1b1f2c9bbcc8df0ef6e85bf104657e4ae02ad39d2046f70527ea8de2b073e025f126ad8ea57e19ce41d613075cbecd8256870b96218b0c7e4eea7d646ef9cdb8e17144230d2ff7b27b8d246130245899f03d3b92cac66a0914f7d6ddf64f57e9fce7721c2588bc18fffa245c689ebfc0046d7c14930eedaababa093858b3830a8fae311cb0ac67258fd964b8cd2152462a2bb0ab8e4d296625881b9dbcd908eb429f3cb5e4d851af1b4319a66ea0acc5740b3133bab1f434e9b0cca13da515f7f5817b844668800eb8b11fac9c42e6e4887f84c39700ac70443467ebdf9d39b015095d738669e667bfa6d0b7f5da53b09cb8e2cda373cebef89399674dc90d1b9908da208dd7da222e0943b0140ef51cf014fec56f25cb531206123c03ec0080d50a5d9d539a707fa3a050bd0d215d6bbc045b749ad083799d820fe306b2f82510a9418976d878a3415911935a750cefea6b730cafc0bd1582503c5c64bfebf1d2f4efaaf323c6c7d601c2797cfe5c5d59ada970bec07cc2fe3722c4eb964d5651399ff9744b3c5d343ec5b55c6a79d7fa1a0187190bd223945fe0bc03e61c2b960637e5c8cbb77794b2fce883af5c5d12ba23151fcfbf4d26eff0641bc966d4a2c2a96b3406b4c07f78f7762ed9da47507bf4ee1ee8c7e32bc3a7c54268dcce8d66abdfd08cb6bc12ef33208d263a60c333423e97a72ad59f6836cf6cc7abe8dd1f09b2decbafba0e3464bb823dcca3cfe1c8498fccdbbebebe1470570222c4b6aef2a9135e4b77ec711d15d315e0142cee10299c89a063269ea7431c1b747b6571b8941b08f1cdd3dadd5d62677a1cb7b90f0e6a25f23ec71122f08e98cd11900d430aa5f2367a666afc5b50b147e50033fb95cc0ea9455337498cf95ba03173d167b895efe2e3c73f3f87c10b9548ef675c3e1f1946c5cb690e3f932486f1c1d7d73c941ab21075c4b94b0111804c0a36325b1bc6fb944851517b4c1ba1921a0e3c06216748e99c4795cb662df8097b2d1d985b12d75463add2a86cd0892342a8ea48f5d6c9e8d36d435cbd5e6806819dd47059247eabe1a0af4a19f15ebbe004fe32b26325b5737a701fe16c2b778c98e2a9de91b5dbf61f1f54466a52d58627c33c616aa88ec61a32546d286db0683967f9d47b84e40e3daefa0dc331e54416acbf55a73ba6fa3c04175148e52fd1173018fb137671bcbc43b96bdbaf17041085b07e79a6fdb47bbd4160e580f7c94997330b12f13443f9678efdd1cf4a3e6b4bdccf7d5d8acf591326aa008d23910ffe6de607a844fd645c119d4a98adf7f4cf4ee0212c00f6bdba6d9bdd933e43e7894023b36c69c853d7a2d590ba5b6954f0d2686c22e42e07ad5846314d6ba70357d084290496a643e07c71d43cf6753bd9755cfda8cbac1529799eed191f2cd9a2b72cce5d483434ff433eaa2d586e7a9c84acc9959c12a1a632c1cd6eb0b9d56032ada8a6d560b845b2712fb6144c9de652c824071a684b14cc913e903a7605f17b07e7c8e0784aa9cc861fdf29becf59fa1e2cc45f4bd102d6511fb9574b19bfb1a2302ec32809431f1f13cbf8d1b51292a86a09d338cadd80a827e5c2873cf80bee28ed75a7fd247b999996b3e72657f44a2872953f165cf03342f2961442d86de7fe99acc27dde5fe779dd43fb53c5a07be7905440949945ff98061901937bd1150262249a12b7f57b64bebd17fd06b318b3da59fb010717f5340d1f6acfc4210c0c0840b86535eb3999f9e5a03cd24034a50f7d1546fe7268111f5c6e4624861543eefc1824b0413c6558f266b1781fd599c4c509292b806d973bdaa153301f0fa1e4099a4c6f3caafe4cba12aa49d2c9802db23429ed8b9de96926b00c1e7f728b25da64e764033b2385669017bcdcc19ef3498fe967ac6eaf870fec532cdddd7fd095d015b628605eac51155e5e1f1956cc9736d662e6a01cbd8e5cf4b0d1c4af31d2b193e04984535b1a7c98d284c92252c785b787036e8ebe4be17078f600e1b5277434cde1f603ef2e700c8fb12d25869a3848916d4aaa3fd7532056805a8b7904d01e2ba5cc39e74f678541873ccd5e413adb21c9130856f150573a9f60c067c8816e43d7476af3ef31e1c3554f1a2964397550674534b0d72302eadaf0d923daad5dad8264aec79b2025f825cfa7360998a48599d6dc73a6f08c545f36ab51aa1bebce8ad1838735a115aa6cdee03680995a9933ce7891de3c6152afd8ab28bb7fd57eff339f1fa30bcd865635a9317fe7baa2d8ebdaeed58abbe0876b4684e14830fc1d43e87c85764c6c0eb3879332e50f91dda297546d7cc1dc9e8a591d31d361a2f38b86cef575c77eb2feae389932a29630aff4d632e5d418434c7d7284e4ec7fdedf7a67a095b0c957d539839de5573883cdd2140877ce41d1a969937169dbce16b2392228a591d69163319a50c5916f70f77857cc5a31ef0c5c4c9abd5ba0932767e7b3db5e9530b3de9b47c40dd293dad852c0d5194c5be7683839f18fcf6da8bf57712f9376c09953c37d9dc25081f88866cba423593e0112cbf55729723d0833dd857354a7d2cad2e3d3e6fccaf14c7a71b7a123e8b4fe0e454744f2e3ab4c920eeb99445701ab054a15e49ebef3aef18fa7a4781b5100fc391eec883b2d2fba77a1acaa62de2942d012f3f0ea0035486567e344f20911db432e8e588dbf03942176c46025c730341002013186e61006013186f6e73000000981318003c60e0131835141848617368746865007214180044000000b61418dc547970652c16184e65774865616464727454627959178817188b1718000000a41718b717186d700000fc171867726f776e6178000054181866662d41556d70444d515f5f697320303d646d7100006f19188d19203eb81918e519e81920286973041a186e6f6e206e6e656c202d3e00541a186e1a18911a652800ac1a182028041b261b18781b1868726d7050555365744170706c79417242756c6bcf1d4d1d001ef8056d6f2d2d302e313264000000391f1830785f000000d81e182600000000e280a6483235360000981f2120617069735065727175696e74696c6c6d696e7428732c20292027270000002421372118000e6c72757374632d6865782d3200006c2118fe9a991915ae47e17a14de24068195438b6ce7fba9f1d24d621096d40968226c787aa52c431cebe2361aab436e861bf0f96184f068e388b5f8142236583849f3c7b4368dedb5a0f7c6106a238dc00e52a6875748afbc9af2d71a884fd766a541b89fdf398c30e28e791507a6121f51012de6b294d626e80b2e11a40951cb8168aed6b7babdd7d9df7c1bea3aa7a234edf1de5f956479e17ffd15bbc885e8f6f0277f1911ea2d81999711f80dd640beb40c65c281764968c2251c9371de33989070ea019b2ba1869b841643c17e29e0a6f3219b1556e79eaf03123735310fcdd785692bbc89d897b2d21cf9905a3fd7df37218996d44646f50e17fa7348cc45e65fe7a0ab43d2d15d72125d860d7a3c3d66a534acd2b64fc9831db19ed79463971e515d2342920ca19c17c14b79dd82df7eda7d4f9b0e0ab4e31268ac5b62d198642a96e55e171020391e53f0e281a7e0b6ee4451b21240b32d18a9264fce524d92586aa78ea899c2571341a47eb0b77b5027aad87ddaf5d0f21e345065c05fc9a652bb13cbaec440c21890a6ea994cd4eb0ec90f3cf2369ace13800a11c3ad5379b141196050bef6b01f670874028bdc2dc16747b3a6fe5e5a1952a029356fb02434869fc2ebfe4b4814db19ee90f2591d909e7f688965d639105f29b0b41dc3fb4c9732a7a8d523f619b2ba595db135963dac5b1fba77e9c4142862e17d275eab9756494cfb92879d100d9d68c9d8c9abf2f00e7af8b7a5951a3e17ba3a7aa1bc5b5a722e2d93844415cb45fb2ec81acaafae8e8b8a429d0311450992b1a6f7dcb24ae478aa9dfb381b04a141c1eb927df56e832d55b12fc71503b46767897564c4589c577727266c11d2eca5d8db886d6df4c625f20b3de01bdb23eb461607be8ac3381e28a3fd4c1649b655d2116cfe6e9c604b534f31d7110e8aefb64f1397b16067458518828b1ca5a1bff8720fac271ab96a37ad01d6161e4e9960c27256b9e160552c24ce44129516c2cd031e57f535cebb136de33a1dabab010b0318ac2a2bd82f768a4f62175689346f02e0bcbb5513f3c46e0cb51289a8edb1d0ccc792ef1eb8d44a7aee1d07ba578e400ad3dbf24b93106ffbf11706c8df7100d5a87cf56f0fda58fc2713d60c66e933bba7fabb4cb2298e60a61e11d7848729fc5295c9a38e540b1a85180eacd0d2bac9a8aa0783d8766fae9d13e3ac1a1e5edcdadda5d1c057b2b0621f4f8a484b4bb0487e51419aac8ec01b19d9a1d3d5d5596dcbdacde156a53316147b81dc77117b573ce2d7e7abeac211102acf6059825ef2c63626a6acaa04b619bba580476818f56bc551eb56559d911496840006ed792a23d1a722dfdd7d7410560734a3e18fddd1810cd13196fc531a456cf6e81a73e4a7343da7f444fd0f159e56f853e2281d535d97525d6a97d91062578db903db61eb2ef2509510bff51ae845a4c7cf484ebc585bdadda6659115206b836cd9d37163ade2e1171f1e4111cd119fad28861c9f480403f364639b1b0bdb18be536bb0e5069d358f1de91516a21547cb0f89f3ea6b4a9172e420ab1137bc71784cdbb84446aa1b846d01451c5f63c1c6d615c70305554903be9a9d1619e9cd6b45de383637770769feae1712c1411646a263c1565858720e97b1f21cce67abd1811c01df7913f571128e2817a5ec5541ce16347f61dc90c10ed886126e4756357d24206502c7e768e48ca41d253978f7301d80ea016cb9201dd7b61784fa2cf9f3b099bb3423614d17acf81239f74728534e5c5f54386815f2ac5a1e2e2cd3b9750b7d7f436053445b8a48185823dcc7f7d53099cf19a9367c3b6d1326d2f9728c89b48eb28f0ef1f92b151fb8412e8fa3072a7228a60bf4c7bcdd18fa9abea54f39bbc1861ed65c0697e413f6f7300919c25e9cd730f0fad624d41ff85f5a071468e549798d262fdf83761960e6e1051020516ec70a52bfe5cf5e141a8581d10c80daf1056f0e9984d94b10f5d468821400c44fd6e4e3f4a0f5121a2b77ed01aa9969d911b71cf7b3f7db14bcc58a018814eead7492b0c55cf9af102c09de68a6ed7c4954ea806f9428b31a24d4e453b857ca3a10559abf76205c1583761d4360793b6273aaaeff5e8016119ebdc8d166f52b9db810b132cb33571b7f646d4152c4bc7d600df48ea25cdf15ccb68a67db69fdcae63dc3d84e7d7f11df8a7772c50f2fabd72f058ee42eff1b80d5925b0473f288ac8c6a3e1dbf651666444249d028f5d3563d55984affea11a3a003424d4188b95795bbf31032ab1ce9e60268d7cd39617977fcc2405bef1654520220797161e72df9c968cd15591286509d998eb568a57c5b767415565b1dd2a64ae13e912051fd15c5f6dd447c170e1fa21aff404da7ca443792b1d0c9124acb69f764ceae0b116e58504fb40f1e3b3ceec550d88b3ca7f179733f900c18c9c9f137da7909ca85f4c7c232403d13db42e9bff6c2a8a96fba0c9eb766c81ee39bbacc2bcf53212695707e2c52a018824995708972a91ab8dd2665f074b3139d75881a0f8475f78c2f3e08e787851f175ea07b7236915f0a269806ec9f3719dfe419965bf84019d5844605f07f2c144cea47abafc600e1103705d18c99231047dd3f454ca467cee724d5b4478fd21906b1cc9dd6e952d81fb7ddc39f72a81438270a4b45eedb79192c7e6919c2861059d8a911a2e35f298f46300f8f36711a7a13bba7811cb3baa56bf3d8d85e27152fa995ec9ae3286251898fade04bec101775efe0f7380e9de80e4caf9aac131b792a591a932dd8b05372d625e256a9152e5547480fbe798ddcc1deb7814554117cbb0bda7e968f15949c978ccf08ba1b972fd614ff11a67776b0dfd6726d2e16798cde43ffa751f991f3b278f5bdbe118eadfdd2fe3f1cc21cecb75a2263641cd88a64423233b00117f05f15b5b5b61646a2839b8ec25901ac59e6dd90c42b12a303395f1704f6ceacc2a3fc1ad4121d839c2d4cac695e72bd9b1cca484342179ce38ad6895418f5fde2160807699b12c605abbd0f548dee2f6bf10cd874c51d056b22fe7276d7be8c22c170462ad11704bc4ecb28c512ffd64e678d6bbb0d13a0f97d78743b51cb247ed87b125f7c1e4d61fef929c90d09b731adfc417f63180a81cb9421d4d7a0c52724ca34cc821377ce7854cfb9bf676f0c6d4321ad371ff9712ddda594cc1f59708acf4d57f918c7f4bd7d51ddd67f7af3a13f3eacfa130bee2fc9e82ebeffc3b89c32fd79f71fd624f3a020bf316636fa16c2fdc79219781d5c1a1acc27b85efbab01cb6c751460e47c7bae09539318c9bc67a2f05d1099a094c5b042eb1ef474943f6ae72f1ae1e67604270289e55c2add32881ff314e7eb2b9d85cea0b7b0eeb028a07fc210d8dfdf616f4a0159b44a4e7433ccd01aad4ce6e725d5cde029a23e908fd67315f1d651865177714deeb4cbd972782911e857e9d6e8bee87bb054ac8f848d751b201321df5332bafc59dd890c6aa4f7158042e7184328c863ae4a6e70eee99211666ad827380d0d0617114a1a17431e1ceb21adec2ca43d6b12746e7b129c7e16564e57bdf01cfe88db5c58fc41e3fe11234a2562b49496415f618d603605cb1ce9d41de829aaab677fe73d4df8d0081787dd1720bb2156b932b964d7f9736d12a5958c662b6923c2eac13af2c2ec7b1d1dded61e89ba82cebb34625b025796171818df4b076235a5fcf6b4e201acde1259f36479d89c883b94f187373613311ee1f583c7464a6dfcdc5a06c6914227181a2b03069f6e573017af9ed1a79b521390ded13ccb7d251a2518311ca692ea1e40e5a7303cfe1d48b7795ae384a8bb18005186c0c9314bd3c5c7ae829d53c913cdb4a3cd42e9115209a617d1c885a81fa4901c3e0221db7407b8df403a9e5319500d4acb01b415f705601967fbe44214a70a08099b29def837b37a52fc833510d7dd0ca89142308e59b82ab79339ef19134b0a200e028d3ee1f9eef84261bf140f3c08803e9b3d65e7c758fa9b1a9910e42c0d0064f8c86ea50c8e90f9908e1aea23a499e9f9d38bb7a3714061da3e15bb1c50e1ba94a93cf982f4991a15ff102b61b39bc4ba75c78ed120c35dbb311b891a29166a95c4d20b0ee768b162c115a17bba118877d0db6f3e1f87278267119b925d1c40bf802ce663983e3fd0d81b4975e44933cc33bd51b64665ff0c4716d45d506e8fd68fcaa75e0551cc70d21153c9b3e34b571944d9fd6e4eade7831ca93af68209794703e19725a58aeccf16bafbc468d4606ccf807984ea6ef03f122af9070e87347ae59af5d3104b1a331d2294390b6c902e51e22a43da08155c17b5a9c7d5bca68bda8155cfe1d310b012870fd9222e71df909c55e5025381e61d6c0c144f8b5a4cda16de1dcfa89aeb178aa3a9a5a27ba3ae787eb1a520e22213a905a9a26a5fd27d2797b5a29a369e1e54d12082887fdb971facf74e15927e1877a780ce06667c794c23c6d8dd749813f10b01e40a702d8fad6ba32796545a1f5ad60050a259240cbeefb51f7810151915459ad981141d70fef2f7b2f9d91014776a7b149b4317c0fe5bc6282e7b0d10f24392edc405f2ccca2c0a0e7d2baf19c29c0ebed0375b0a6fbda171ca228c14cee33ecb73f948088c97b427d51b7010b09f6478ec5b0edaac25540c55f94c1ac07f5060f0af3e7bbdb7a9d610610a1533664080f3bfcb95972ceede731ad5105270cd665266acef5847b064b990ee1adb59a4b80e852326476cf3b6faa68b1549aeb693d8d0821e6c23295f95853c1175b08a1ff41a9efdac38a8feee08941bf759d5b229afb197bd938698250710162c7b77f5ba258eac97dc9e131e6ca61113c558222b097d7abf2dfeb8c9793d1c766aad4eefa0fd61cc57cb60a1949716c5eebd0b591afee7091309e74ddd12123ab1fc455b5d63a6dc840ed8affbea1cc88d306baf4a1c85b0d03e13f3622217d4d726bcf26ee3d026dacb75c2e88112868ca4c6ea179fb4d72946899da79c1d6b705005efdf182a46ee04a11786b01789f3d99d25b3e0546b8b9d4d799ef3127452f6626febcd8778452f7c2897521e5da85e82bf220bd3c66abfc986124218e4b94b68cc1b3c0f9f88ff3ad20e68136d2979407a2c601898da989183e40c1f24219433c856b34613e2130e361dd718b64d4329a0788f38dcb4dca4914adf138aaf6ba866277f5a602161a182aacb1fa2bfefb9eb8532154db44db49bbb6f194e998c6189d18eaa3d90a4f6e26259140ce1d61aa1a7d8eecad9b62b4f824710459b245e9b72277e11f68adfb1030c1a04491d1849f585fe0df83b195b69d614d0a04a13d45d9ecba4f92f147c87ab104d01115253c963df3a5ce6b9f90bac1a7167da740fa11c192fb01efbfa6f5615c152482ad980b0ad25c04b2f2ff3111134510daa8e34e71509cd12b27eeb4f1bc40d71ee3e5d1fab6d0a0f283289d9159da48d8b651719bc57080c2028d47a11943a7c123cf2f42c590de0ccd9b9f71b439596dbfcf4c3f0e03db370e1c75f1603111216975d365a1acbf5268139e61104e81cf024fc569090de220b358fa31cd0ece38c1d30dfd9a64b82a25d3fe916da23833db1597fe1eba2ce4eb13254125c39382fb5c2cb6879d17de44e84531de32d60bf5d35d65394a76450720376171c8be665b12a78a976ecb6a68ecfc412fa44d76fb5aa260ff1138bd77db2071e626adfbf2a22523f27436fac642806184e887f99884edb651f9cf289502038134a0dcc28744ac56f6593ea0fb433c01e3ba40987f6a16a59840f2273f6c2991896b6076cf8e7eead36d9b4f59135ae1356570ce0f33f7e4924f5ba2283227d1f45acd64cf6ff64d4e99095e868e83019d189783df8ff8343ee7344ed5320271474a19397c6cc9ccff18f03f10f4d1f105202b925a447617f1cb305e87faecb190f35c7b7e9d24dcc165cd1ecfff1a214d990d25f210f0b3d12b0da23335b8210c1e75099684bab6150b32a06852b6a1a67b94014baa2224e405c556b6abc2115539400dd94e84e0bcd4944bceec9e71051ed00c887da171248a9d3c64a760c1bdabd00a06c4846db6c87dc6bd591a315af64cd4cbd0605498a9fe3efdda74f11b13ae27ac80a08a843ff38e62fa6b21bf42ee8fb39a2395369ff931ef38428165df2ec2ffbb4c77587ff0fb2f503ba112eea47e69121d9223fff7fb622d35c1cf254068541817ab565ffff91e8a8b016f5433837010162c4b73233db86ed2612ee9ff3f10168363a5984eb91a4150b1d8b19f6279bb95efbe069bc7450113c17d67a5e86e2fa7e2fe787635d407496125691fdd6d0f797e571d93862cd86bd1dabdaca780d937984c17a2de83dd2ca1756156f2d714261d09ac88a8631a80813222218af4e6a684d91daaa3d4f40741ee8b479f23e8853a4daae88643f005d18875d6128ff6cdce9ae586d50cc997d13a495680d65ae60a9e48d481a7a5c2f1f8344ed3db7beb3ba8371a0ae61b0f218369d8a312c32f62e36c1e6bee759f513f0617782131dbde4899bd7973ff6ee1f5a4e2c35a97dca83a1afdfdf32f88b1915a556f720fea19ce7f2b24cc2f96f14aa1d12f9b3311b4ab9288f709b945910dd95b6c1ecb55e43f50de580c5ed281a4ade5e01575ee535c4a41d67048bed14d5b11801ac7eb7c4691d7e52d008be1022b65a9b799725a10f2f30b7b3a7c91a815e154961acb74dd958f3f8c21f6e159b4b44078123c6d7ade0f59335e624112bacd33e9b053d5949345686223d6e1bbc89dccb159efde06dc3110582caf11563a1e36f1118feb3246941379b3b8e11d19bd27fb559638607753525c5c5161c0ee30e339114e9d1d290f750379e78160b1c3f8fda76ba74750dc6402c18fa1178c631e59024f7edbb48a367e059c31c2d055bb7401d2c8bc9d3b51f4dae021724047c5fcd7d566fd40f2be6708b6812066dc69848c9f07eedb2113d4e12741d9fbd9ee006a1c09857c2a7fda40e9017e6ca4b4dd2800047799becca50a5d912a24479481dce00d88ec5ad448108291e82d02d6d17d833133fd1579d9ad32018cea624247946f6a865a7ac4a15764d137da43aa08e3dbd746fa57a778856e21e645095e63e31645d8cb7fbc50612b518b7a6aaebcb8db64a702c96d16b0ec41357a4aa12131624111a47f0e81217a01fdfe9ee0edc4483da146cf35342df4c198021bfd87c9d02e243232943687f3d143381327afd7d684e361c54cfb9323110b8ce509095c9404abdc6b94b2951e819c60ba7a677d4330831d2c76f87dab9146b09ec1ec67629a08d0ed3bfd2ae9410dfdbac64a35742004917b8ff1d7e871a19e323eab5df01cda0126099b1313915aeb51c88914cce704d75e6ad278efa10e25594a6b5ade31aafbb70490c7d2a1be8774385c457e97bf2628d073d97bb1587f935046a7987c98eb50a0664df621171c2bc06108fa575e48877d66c65d11b2735ca6ba6a5b7f7e9d392abf01d41161fc4a1bc1e1ec65fee0f0f568db1cd1165d302616463a3ff16b3b189484f7c1c51dc9b4d501ce932df288ed406d9c9160e7d497173e3208fb220d87605143b127c2e0f8285059b7eeacd59f13b532b1dcabea5019e37afcbeed747f42fdc5517a19884344bf95809bfac6cc38c16ab1200000000000000000000000000001400190040000000886a1880d01284d717205fa000a2941a40e59c30901ec4bc163426f56b1c80e03779c311a0d8855734c84e676dc11b3d9160e458408cb5781daf1550efe2d6e41a92d54d06cff01080f64ae1c7022d20b49dd97943781a949002282c2a8bb9340332b7f4ad1440e70184fee471d919883081121f2fe727aa7c21d7e6fae03180d4dbe98ca039593ea0c95224b00888ef8d1f04beb3166e05b5b5b81385ad609cc94622e3a61840e6d878037cd8ea9bd01ee88f872b824dc7726142e27369b6e22079cff91280dad003641b695743b817908862821eb1a1162ad3ce12b42afb22661d4a9cf487821761f5b9abbfa45cc3f129631d000000a05c3954cbf7e6191a37fa5dc8b34729beb560a0e0c478f516000000baa099b32de378c818f6d6b21c00004074044090fc8d4b7dcf59c6ef11000050910550b47b719e5c43f0b76b160000a4f50664a1da0dc63354eca5061c0080865984dea4a8c85ba0b4b32784110020e86f2516ced2ba72c8a1a031e5150028e2cbae9b8187698f3aca087e5e1b00596d3f4d01b1f4a199647ec50e1b1140af488fa041dd710ac0fddd76d2611510db1ab30892540e0d307d951447ba1aeac8f06f45dbf428083e6edd6c6cb41024fbeccb161232338acdc9148887e114ed39e87e9c96febfec40fc196ae9191a342451cf211efff793a83d50e2315010416d2543aae5fef5b8124de45a3e641492c8eed3149f7e336757609df14d7d19b67aea08da465e00416db8046ea1dc1fb28c924548ec3aa04844f3c2e4e4e913de2ff7565aa749c85a15b0f31d5ee418d6fbb4ec30115c7ab11a9c70a5751d1f651df193be8a79ecae90616687697213efbd28c7c9e87d511172f88fe3c4621eb576791c7eb1eed24a47fb390ebbfd1262d497a3dd5daa871d197ac8d129bd177bc97d0c55f594e9649f983a4674ac1ded9dce275519fd119f639fe4abc88b126845c271aa5f7cd6863cc7ddd6ba2e17c2d6320e95771b8ca80b39958c69fa1c39c6df28bd2a915749a743ddf7811c12c8b717736c7575ad1b9194d475a2a316baa5dd8fc7d2d29862b5b949138b4c1c9487eab9bcc3839f5d11140eecd6af11792965e8abb46407b5159911a7cc1b16d7737ee2d6e13d49225bffd5d0bfa21b66088f4d26adc66df598bf85e2b7451180caf2e06f5838c9327f2f27db259715207d2fd98b6e867bff5efbf051effc1a34aebd67170534ad5f1b9d369315de10c119ad415d06819837624404f89a151532601892f447a17ec57a5505b6015b1a1f3c4fdbf8cc246fbb6c55c311e17810270b23123700ee4aeac72a3456199714f0cdabd64480a9dde47935c1abdfbc19b6602b062bf0890a2f6cc158cb0b1610e438b6c7356c2ccd3ac7f12ebe8e1b141dc7a339438777800939aeba6d722219e4b80c08146995e04bc75929090f6b1f8ef30785ac615d6c8f1cd8b965e9a21372f049a617ba7447b3234e28bfa38b188f6cdc8f9de85119a0ac61f2ae8cae1ed9c3e9796231d30fe40b7d57ed172d13cf346418bbfdc713dd4e5cade85df81703427dde29fdb9589462b3d86275f61d42490e2b3a3e74b79c1d70c75d09ba1292dbd1b5c84d51e503254c39b58b6817775246e33aa1a5de442e9f87a2ae421d8af30bcec484270beb7cc39425ad49126df08e01f665f1cd255cf4f96e18dc1688acf28173bf6d412f7371b88a1e931cd5ab3731a897e488fde746b316f3db11ca96853d92bd1debfca11860dcef52167dfce6ccf62ce5257cca1e78d3abe71bce5d10401a3caf978d3e132b64cb7011427514d0200b9bfd300ed8353dfecc1592921904e9cd013dbd114e83cc3d401b9bfb8fa2b120214616cb10d29f26081182fa330bde68a9d7dbfd94c647304a1523f9008e15c393cd523d3ab859bc9c1ab69bc078ed597cc053662413b8f5a110a3c2f0d668709bb0e87fed172673ca144cf3ac0c834cc2dce2dfe89def0ffd190f18ece7d16ff9c9ed8bb1c2f5293e10131ee761c6cb773ce9ee5d3373b44d1498e560fab7be958ba36a350090216119fe1ef9f8652e7b6e4cc54200f469b91f5fb39bbbfffc0cc54fbb298038e2d31337a082aa3f3c50b6232a34a0c6dac818444823954f4be4a3ac3441487811fb1e2b0d36bd11af6ee6ebc0282debea5c137590832cd65a0ae026f172f8a52534189374a4b78bf10c9870ad8f760f2f411edcc8c652f716085f66cc19aa69bde812137b7827b51ccaf67f3fa014c4eca217d7995671e2a37cf45f4fc819f5a78b1d2620d6866de6cdf89b311d30f948771230a88be8086001f7027e247c371b15173c92ae220bb8c1b4839d2d5b0562da1c651badf50613f9507282fc58437d08123f6218b3c85737e50ea33b2f949c8a16cf7adedfba2d859ed28b0a3bb9432d1cc10cebcb943c13a36397e6c4534a9c11f1cfe5feb90bd88b3c3d20b6e85c0316ee439f7ea80eceae8b4ca8e32234841b758a234f29c9404dd72f49ce95a03211126deca273fb9020cd7bdb41bb487f155688a78b503ab568c05a5212ea1adf1a36b5485772447141b878734bd270cb1083e21aed8e95cd51e65650de064dfe14249b61a8f2fa40e69f6ce49548e03d1af7003da9d79ce8efe3c3ae5d2dac661034418c930dc4e2ebdc741ab53857801481516ff81075db26141261e2066da019f192459b2a2949984cab7c4d24440410adf7164275735bbe1fd6db602d55051498b59c925250f2ada7cb12b978aa0619ffe2433767e46e99917e57e71655481fdf6d8a82c04ee5ff1aaf96502e358d1357092da370a2debfe15abce479827018ad4bf8cb0c4bd62f9a71eb5d18a38c1e4c2f7bffe7eee55d0027b33aefe517131ffb59ffa16a5f75c0f05f096bdfdd17e779307f4a45b792f0ecb7cb4557d51d304c7e8f4e8bb25b16f4529f8b56a5123cdf5d33222e9ff21bb127872eac4e170b5735c0aaf946ef629df1283a57221d675621b80a5c8cd55d0297598476351201ac29660d73ef4af5c2fc6f25d4c2160117b4bfd04fab9db2f3fbcb2e89731c608ed077e2118ba24f787d3fbd35c811f9b1c4155bd62d8b63d65c8f2c433a1677de35dbf14bf96dfc0b34b3f7d3c81b0aab012977cfbbc47d8700d07a845d11cd1542f354c3ea355da9008499e5b415409b12302a746583b4d300e5ff1e221b08a10b5e9a681fd2508420ef5f53f5104a898ef5c042a70665a5e8ea37a832159d2bf23271135148becea2e545527f1a425bd7bf26ac32ed36c185af6b938f101232cd6f30577fa88431679b4678b314977ec08bfc2c9fd2e5fd40425856e0191e4f58d71d7ca3a3af9e6829f7352c10e6622e4d255b8c8c5bc6c2f3744337149ffb79a0ee71af6ff277b33052144519877a98486a4e9b0bef55e0bc6659961f944c5f6d02114167b5350c36e0f7bd13ba1fb708435511c122438f43d875ad18a8e7e4ca93aa5571eb1373544ed3d81ec910cf5e9c8ad52673ecc7f410844713fbd4827643ed8af08fe7f931156519183a8a235494a8adec7361787e5abe1f1e643696b45c89ec73e83c0b8ff8d6d312fdc3bbe1b3abe790220cceb2b6cc8817fdb42adaa09621352b8f815fe4ff6a1d1eb15a8824fe34017bf9b0bbeedf6212655d71aaad3d82c1d9379d6aea97fb16bfb40d1519cde231d0854405e57dba1cf79028ad2fc02d1fa2d34a23af8ef41135b572983b30f9a68a881dec5ab2711682628f7e4a7cb750adea24a7f11e0e1c919d198faead7252ac12770857d38811f604e0321a590f6757d794ca2c08eb15330698bf602fd3402d0d3afd37ca651be003bf779cfd83483c4844fe629e1f11d8c4ae9503fda45a4b5ad5bdfb8567150e761a7b443c4e31deb04aad7a67c11ac989f0ccaae5d0de8aae4eacace0b8103bac2c80151f85962d5a62d7d718e7144ad737e0da6626fcb8f03acd0ddf201a8ee622cc4800989d73d644a0688b541032a02bff5a00fe84100c56c842ae69143e88f6be71803da6148f6b7ad31984194e2ab42e8ee0cccfd97206594820e51f709a30dd580ce021c807a4372d34ef130dc17c146f0f582aba098d853801eb1850f19bd94a13eeb4284cf0a686c1251fd27601c80ecc1471992f5628f498771386d4017a12ff59cd7fbb6b32317f5518a8498218d77eb0c05faa067ffdde6a1e096e516f464f6ed87b2a646f5ecb02138bc9250b18e389ce1a353d0b367ec317ee3bef0dde5b2c8261820c8ec35db41d7585b5c86ab95bf17cd1c7389aba9012d2e6e27ac5a7b22ddcc5f9c640e9341786a09bd9b6511f395337b8f89023021d544401481293b3039422739b3a562112699501dad677a00439eb4f42c9aba916c3fa8190cc95c84507e6e392bb16541cba3c51da9f5d9d8bc46fce3b358eb411e88be5d007b584aeb50bc28ac2b12116e3ee1ec549e2251aa38e722d331eaa1b4d55331b6ead57f0259967fcdf524a11a12a00a2c9986d6c6f7f81fb97e79c154935800afcfe88474bdf61fa7d21041b4e2190865d9fb50c8f2b7dbcee94e210a12934e83407e3cf72769c6b2a3a1b150a34412202c9db830f948306b508621a86c06855a15d69b2893c122471457d10a7f0c2aa09b5031faccb166dcd969c14d1ac73154ca2c426977e5cc880bcc319034c688d6fe53a781ecf397dd0551a10035fc270cb9e4916e642889c44eb2014c4f6f24c7e06dc9b9f53aac31526291976b42fe01d08d38287e894349b6f731fc9d01dac12e5c3b15411dd00c125a813fc44255757de34dea9551441312f92183b96ee2ced15c255146b5991fdbab61ee51d153cb44d99b5ece2d77ade3432135e651a4b21a1ffe2a7db8d1916c2fe17b6fee09d6989bfdb9152f19f9b72fe1d319fac02e2b557299bd3f643a107bf12fec657835aa3adf38188f49489c96e17bdb82d24310c9970a2aa31faeb7b4a1d76939cb69ea75f86a50a5f7c738d4e1254b843648691f7e74ecd765bd030e21669a654fde775f5a1a280547204bd9a1c01e854feb06939a565d074c722b6e0110222ea3d1dc4870e7f045279abe3581682aa648d24b529d29e85a657961cef1b91ea5ed836115a438313c8f6dd71751136a5768e8495301464187a7455ced215834e14b2e5ba3c197d9e98d1ea81471b12b14c8fcff4c52f0e63ffc232b10c1156dd1f730372b7bbd13bbf737fdd4f15acd4e74f844ea52ac60aaf50dfd4a31aebe4f0b11251a7dabb666d920b65a610261e6d5e572551d16ac008774efecf14b0650836ad6ea58585f0ca14e2fd031a8e3fc5412c65877353d6fe4cad7e4210718f3652773e6950e88b3ea0581e53144e33c426158e8364e22e4ec8eee56719224075709a71a4fd9aba617a6adfc11f1548498600c786dea0147d8ca22bd9131a9adba7c0782816c9599c2f8b76cf18a180d2d1f096b25b3b7083fb2d54031f64902383569e4f19252632bd9c1462137e74ec23ec85a35faeaf7eecc3993a189d91e72c67678cf7995b9ee73440491e02bb107ca0c0b73a40f9c21021c8ed12c3e9149bc8b0654990b7f354293aa9173324dac1fa1cbf5b74a530aab388931da05628b91c7257b968675e4a70357c12486c72e7a34eade74201f65ccc421b175a074fe14ca298a1938133747f13e21c9864d10c7065ff44fc30a0a82f4c0d12bebd0510cc3e3f563b3dc8923b9f90162e2d07147f0ecf2b8a4c7a770ac7341c3d7c846c0f69615bd66fac8a66fca0114c9ba54753c339f2cb8b572d803b09161f028f192834c8eebe6ead38608a8b1b5361f90f99203d5537656c237c363711a8b9f753bf688c2a857e472c1b04851512a8f528ef822f75265e59f72145e61a0b899979d5b13d09d8da973a35ebcf104eebffd74a1e8d0b8ed13d8902e6031522e6ff8ddd65708ef1458d2b83df441ad5efbf78aa3f06f9b64b38fbb10b6b10caebef1695cf47b7a45e067a9ece8514bde6ab5c7ac319e54df687184642a7193670eb792c1a30aff0f954cf6b890810434c6698b720fcda6c382ac3c6ab0a1454df7f7ee528bb1188c6f473b8560d192ad71fde1ef329162af8f19066ac501f7ae6d34af337da4d1a3b971ac06b921319e0881df0c550e1e0093d21b00677181f18eb246cf7a419594c8c295cc8941e13ef1297a31a07b0b7aff79939fd1c13d8aad77c4ce1089ca59b7500883ce4178e950d9c9f190b038f029300aa4bdd1d797d88c103f0e66199e15b404a4faa12d79ceab104ac60baffd972d01ce354170d4465de05d7f8a87f908f04e41b2a1d884affaa63869bc94fbad9826e513a122a1dbf95fc6702bce3289023cae5c81674e42ebbfb0103ab1c3374ac3c1f7b1cc94efd543de1e1eaf19fc8eb85f3cc117ba23caa8c599a65eec7ba66673040161acbcbd4efef00ffe9796940813cd01bf05effe4f595603f32ec41c8d0256211ac363f5e73bb38cf3e6752fa44afba155704cf3550ea06830e01e738165b291bb662a1217252e411a96090e3edd8f91064bb09aa0e675d56d378745c294f38153d2a8c54d2c0f42b089791b3f362861a669ad77483f8781b65fe3a50d8fd931000810d52a4365762febd49644efdb81440e190664d04edfa7d2d5cfda13ce719c88c1a60b022d4bc6e9c593ee5853010fa2f21785c2b096c8a03f08d5ea73c14f87b299633760b076d046c3136d14b19f6dab37bc053ce488805c7bd83c59e1fda68504d58f4802d75639c56723bc3131083a4606e31e178527c43ec4e0ab418302e734c18084d684efc4e18c321b74772230000c34f4c736230950600003a9606207061746852757374792f706174689e5018006000000e007220519000875114b73c52184553656372656b6e6f9706000001737562746c652d322e36495318bd9e0600009f060000a0060000756e697461616172726179206060000000e753f053600000000454666c6f61206020546000405420005c54756e696d6170656e756d65657264652d312e302e32313964e35418eb0855182c202e307538753332753634009e5534569457a6a7060000a8060000a9aa4f59d0591a060e656c662e69735f636861725f286e29829b454f46706172616e206f626a6563603a20602c5d7d2260657363617065285c75303030302d5c7530303146296b65626e6573202028676f74204e614e206f72202b2f2d696e66296c6f6e647572726f6720686578696e6761736f6e696e652020105d195d18282c2c3a3c5d424a5d18545d747970000000785d865d00a45d1860000000c45dd45d6e756c6c2e727300ec5df701fb0102020b0f727300009c5ea60100004500abb3010002000509020f02005c6e0003000400050006000700080009000a000b000c00001000200030004000500060007000800090a000b000c000d000e000f07562746e756672755cf00024400059408f88c36af880842e41d0126384d79765cdcd205fa00242000000e8764837a2941a6d42a242d64200003426f56b0c4341437643ab43e143444b448044b544ea449102282c2a8b2045355445028945c045f445ea29465f46179346c846fe463347e368479e47d2470748a53d48e7724861a64879dc484c4946497c495cb14973e5494a9a647ec50e1b514a854aba4af04ace244b415a4ba9904b13c44bf94b2f4c634c984c1b9c70a5751dcf4c916166876972034df5f93fe9034f384d6e4da24dd74d0d4e64424e3d774e0cac4ee24e4f4c4f814f16b64feb4f99215055505f8a50c050f5507b5505b6015b2a516d6051c894517ac9510052345269529f521dd352240853ad61f2ae8cae3e530c73534fa75363b3d86275f6dd531e70c75d09ba1254254c39b58b6847547d547dc39425ad49b2545cf4f96e18dce65455e846b316f3db5155a21860dcef528655bb553f132b64cb70f1550ed8353dfecc2556125b569156fe94c647304ac5563d3ab859bc9cfa563057806457e099578cd057ef04586b39586f58a358d858350e59c143597859ae59e2593fa014c4eca2175a4d5a32825a7e247c371b15b75a9e2d5b0562daec5a225b565b8c0a3bb9432d8c5b97e6c4534a9cc15b3d20b6e85c03f65b4d2b5c3049ce95a032615c7cdb41bb487f955c5b5212ea1adfca5c79734bd270cb005d57345d6de49548e03d6a5dc4ae5d2dac66a05d751ab5385780d45d1261e2066da0095e405ed6db602d5505745ecc12b978aa06a95e7f57e7165548df5e5f5bbce4798270485f72eb5d18a38c7e5f27b33aefe517b35ff15f096bdfdde75fedb7cb4557d51d60f4529f8b56a55260b127872eac4e8760bd60029759847635f260c3fc6f25d4c22661f45c61787d3fbd35c89161d65c8f2c433ac6610c34b3f7d3c8fb613162a9008499e5b46562d400e5ff1e229b62d062a5e8ea37a8320563cfa2e545527f3a63c185af6b938f706332679b4678b3a463fe40425856e0d9639f6829f7352c1064446478b330521445796456e0bc665996af64360c36e0f7bde364438f43d875ad18651473544ed3d84e65ecc7f41084478365e8f931156519b86561787e5abe1fee653d0b8ff8d6d322660cceb2b6cc8857668f815fe4ff6a8d66f9b0bbeedf62c266389d6aea97fbf666864405e57dba2c67d44a23af8ef46167891dec5ab2719667eb24a7f11e0ecc6713770857d3880168d794ca2c08eb35686b684844fe629e1fa1685ad5bdfb8567d568b14aad7a67c10a69af4eacace0b840695a62d7d718e77469f13acd0ddf20aa69d644a0688b54e0690c56c842ae69146a496a7306594820e57f6a08a4372d34efb36a0a8d853801ebe86a6b305628f49877536bbb6b32317f55886bbe6b2a646f5ecb02f36b353d0b367ec3276c820c8ec35db45d6cd1c7389aba90926cc6c76c37b8f8902302fd6c23739b3a5621326deb4f42c9aba9666de6e392bb16549c6d70d16d0cc28ac2b121066e8f722d331eaa3b6e9967fcdf524a716e7f81fb97e79ca56edf61fa7d2104db6e2c7dbcee94e2106f769c6b2a3a1b456f948306b508627a6f3d122471457db06fcc166dcd969ce46f7f5cc880bcc31970507043889c44eb20847054aac3152629b970e994349b6f73ef7011dd00c125a82371561441312f9258716b5991fdbab68e71e3d77ade3432c371dc8d1916c2fef77153f19f9b72fe2d72d4f643a107bf627289f49489c96e9772ab31faeb7b4acd720b5f7c738d4e0273cd765bd030e2367381547204bd9a6c73d074c722b6e0a173045279abe358d67386a657961cef0b7414c8f6dd71754174187a7455ced275749e98d1ea8147ab7463ffc232b10ce1743cbf737fdd4f15750baf50dfd4a34a75676d920b65a68075c008774efecfb475f1ca14e2fd03ea75d6fe4cad7e4220768c3ea0581e5354762f4ec8eee5678976bb617a6adfc1bf76157d8ca22bd9f3765a9c2f8b76cf28777083fb2d54035f772632bd9c14629377b07eecc3993ac8775c9ee7344049fe77f9c21021c8ed3278b8f354293aa96778a530aab388939d78675e4a70357cd27801f65ccc421b07798233747f13e23c7931a0a82f4c0d72793dc8923b9f90a6794d7a770ac734dc7970ac8a66fca0117a8c572d803b09467a6fad38608a8b7b7a656c237c3637b17a7f472c1b0485e57a5e59f72145e61a7bdb973a35ebcf507bd23d8902e603857b468d2b83df44ba7b4c38fbb10b6bf07b5f067a9ece85247cf687184642a7597cfa54cf6b8908907c382ac3c6ab0ac47cc7f473b8560df97cf8f19066ac502f7d3b971ac06b92637d0a3d21b00677987d4c8c295cc894ce7db0f79939fd1c037e9c7500883ce4377e039300aa4bdd6d7ee25b404a4faaa27eda72d01ce354d77e908f04e41b2a0d7fbad9826e513a427f299023cae5c8767f3374ac3c1f7bac7fa0c8eb85f3cce17f6500506e18ae02e06e696e662d696e664e614e0000abac060000ad696f00c06f1200b67018347018e8701873705f20696e616c0000e072180014730038733a3a0000007972bb087065725f255065725531362e6c6c00d1731860076a62696775a3747788e0013875186936347536347531323875387531367533735f3132386269742e7273ca75184fafb0060000b1060000b2b3a3762977d877b4b5b6b7060000b8b9ba7879bbbc317aa07a73705f3a3a617070c27b407bbebf060000c0060000c1c2537c42414245302e347700057d7e0142616265616265c77e00507f008064565246696d6172795652465631000098811681cacbcccdce060000cfd0ec82d1d20094833a3a6c6f74536c6f747672665f5672666375363429736c6f747536346928642c293e720000d7d8060000d9060000dadbcb855186870288808765636473615f0000008388000000f488496475383e293ee1e2060000e3e4060000e5e6e8c08a18e9ea0000ebec060000ed060000eeefeb8b718c208df0f1060000f2b88d358ea48e3a64ee8f6c8f31907536340000ce9052450053020020282e2e2e29109212921820646f626579206c616b7461696e20736d6f6b6b65742072616365206c6f6e656c7920666c6b333201000000fa06335d2e009a925800fcfdfe06ff0007c793182e2e2e4d940102070307040705070607070708070907fe06347072655672665072654f00be96180c070d07a49718040e070f0410070000009817f802c556a0009f958d0238b76c03fc9b0203c1c2a1035c29060256b1ee02dcf97e02996f1e00b8d41003fe23f401c4994101159a2201b417fd002a428403c0bf4f0276951103a3267702b60e12536563703235366b3148444b4476726673686172644548444b449e99615f757269089a8d2f2f2faf00111207000054727946726f6d72727970746f696e6700e99a186d9b44617461737073646174613c3e736f6b5f549c18010000003f070000486f207761736d73646973637269666163652d32706173735f62209da840074107000042074363746c002829456e4c6561756d657269634f705075736874655665726966794c656166666573744b6e6f77b59e00004c9f00001fa043456e67696e654975383e6c6f674974656d3e7538546f6b6974795665633c5461673e6c6f6e6765764c4d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d616c426c616b6554776f323536000059075a0700005b0700005c5d0700005e0700005f0743616c6c75747572654261644269727468457868617573434261644265724e6f54495365524e6f73616c454d6f64654f6e6c7950725365616c4500c7a5185900496d4d3132333435363738393130313131313131313131323232323232323232323333333333333333333334343434343434343434353535353535353535353636363636363636363637373737373737373737383838383838383838383939393939393939393931303030303030303030303131313131313131323232323232323232323333333333333333333334343434343434343434353535353535353535353636363636363636363637373737373737373737383838383838383838383939393939393939393932303230323032303230323032303230323032303131313131313131313132323232323232323232333333333333333333333434343434343434343435353535353535457261657261050600081eaf4d7370747269655f636f755f746f2e7273ebaf18006900090000008db03f480021b1436f77547353696d706c6170697341706973566563753835b2283a2029a4b2b5b2c3b273705f3a5f763275363444625765696768748712a81397f32474cac8cc888888822405495a03b3144020481c12080462b14034cf454d1f13c0c089c8f37a9a24319443c61042082184106288482022222253a26e5aeae080f679c9955d3c114528368e6715f63b956df328fd585f3f1c60e298c9c6331b7a2c58bb2014d28737cc7c33986f07bed39f096c0b7e86549c55cb97509aebfd70d16a7602b1148579aae8c0c1c7ac49e800b7630614ef6ff119b1f2d066f4f3d8bc3dbd0294f27f2cb0dd4e80ecc6c79be600df74d29c101a227da0c40d358ecf441b3cc3833f680e31beb2cf68c12429ad1a3d31e84ef53500b1ac8dc4b9289cf4dd89990d42d25ad9f930e95a46adedcec5e673078cdc845e912adaaf65e239aec5f4710edbd43b1c8be9739c96c9733997c9e338b689f77016b3d7392c133e229a5120513f46b605cb6239ae8975710eb3d53a1c136b739c26cb723927cbe238668bf57026b6d5394c16eb724c2dcb71992ecbe1986c8bf3302db6d3995816e732592dc731b32ec761b26c877362c53ae05c42d0f2036eb66ce3569b60d9e061fbe435bbd6385a4d1c6a10d32e56474342a32e102117cbd520a5500ba8d0cbe2689068942544e86273362414ca021572b5380d322ab58008b96c8e2609455941862e16474346a12e202137abd320a1502b41530ca578a368a1e89ed89c48369132912e71190aaa4a2646ab5431aee299920806944486571d39fdaf662ffc6a7aa70aecf76a31a7870644424aec7d38f41afdfb47e7dad7313b5932d5a400b39ec3a2f121311e744903938c4bf2c93447cf41c8b7ee94c4f888a3fe09fdcc1f6b6a72fb718bc1234b72e3d677981b8c450cffecf8abf8c2860857454cf08865edb4ef85c2687a154ea4faa157310bfb3642dd6d2a58202b54e306095f166ab3df21a956a68247ba3e99680f94c654d87813eae906adc07fb7f600007e1be527449252159c76892dd86f789d22be245465e375741e063a58c178aac6afd78f2eeec35652be7017e3d36239ce32475603bbbdeb5ad752ca9d59d12d6da624a5e8f25c985e5b7f9ec51dff01ef342527b4bf808e5c11539b840c21e3cdacc63ab8b6414a38514ae19fc8bf9fc182c44a25d3788151c108e9676373a1ac8f07c927443f5f5c820adc2ca2694a0c353aa9e43f844c7047a5118bad5839d6555fbbcd1b15e5a97788ee5eeea895557f52b92d2bad746503473a7eae6f458460ad41a7c2d9602cd6838f6cfa6e70e60ec8d5fd28244ffc2a54324b70b048b5abc1458b0b464b300930a8ee59a8c61adbcfd3c7be33ae55be53ac6901524b2f27e84421ae0530c0ad12a625cad265b2bf0d770dd6d26408d62f689583b05b37cb8c69d465d970a967f0d91828a7ff5f56eca546d43a0aee56523243e5d52861adfe2bb89976e1176e9d0db0665629b317e8acdbf6d72c9aa183f4404d4f42c0ed52186ae18b41592dc046ae99d8ccfb984c144f0d1ab792fe572e7fca5f0d3115c82a1f49c6b9cbc9c12bcf5edd7e6a0bb92cd7db213bcb3a80a68a82a00a2708114945b56207bef462d7ef103d82a48dec9a8d84fafb8ff9e76e781a7a71799323807a90e52ec97d805119f05309dd077312464d3ec7b19e78624f7361954bb22d4f87c6f2879353d03f6b0b2ea94dba3bb792a1afc77d576dc977550c3a9e71195ced3f8b47239c3d8c91558f062c3e8c930d8118f945a4e370057cf59b6051e6552a0d533db1a78e70677675d24debf3a689e76d02116292e2d1f36bd334aceae90c7f8e7310d230c76058fdead337fdc051f18ea842b0230c78507515cc6a5ae9ff2f0cd0260fbadabbcbd3d22c4e179fe8e0b49487b347601b542301dbbebe3cda9b0c97fcd250dbb70f2ed2aab7472c791f99e324b05f98ce3d2744e0301d52fec62d9d6017d153b739c80c886f045eb9ef96106f2720b376a885f0a419e0609c23a85d3256fd704698a7ec95b9a3fb5e9d4c89a64b66fbbb6bfb1cb57c70ce69e00d303a919856cc42d775c3ebee1aeb9e1cc74b0ec7ff6e6eccae437fb7cfb3ae61c20206eb77f3712fd7a960e0870dc909a9296b65202785078e10a81928f10b50d5932490b7fdbb4fa67f79a2f7f7af7b4be8102bd75e6e4d46bd2c3d862a09bd47c89f57e37a54b1acd994d66a83f60473dfc81ae48529ca09b308a0020c0c932bf35f3494d1354ba5a6af35f0164d0169f23d98c757ff9fb93cad0588b94c34f53972d904fc45ff128bc2bbe9bdf0997cef82947529a2d82c7442c2d4ae60364c32ae0fbc5ae2e8d186f858d785b9a08fc7b27346af16463251da4d699c0d96c7b12870b231f0280751d949b133b67c89832056498cb19fcec11c9c1a3d2658d3d17a9bc89589cb82ab0caad521c2980c3f307803c1515960cfdd2b50ee0ec3d84b6af3adb2e8b64bcb24ba6216143afae8708ddd163ab5215c790a4286bf45f444ff102a426a1a577388bb29b6d2daf8ebeb07d1dc365c8c99348508d68c4c0263e3f2aea82adc5e9d933487342c3cb84382405f3319f624aec8f6c222f465c0401c1d4fc71f32e55dd8a33aff79d40009af9c281f3f9669c2c1bd4b427f4e23ba66fd2b9d6bd3de7bffd2fb8f0f21ad77b92a0d5f31e91c26ad67b79c930365cff6d4decc545e2213238485a119b3d2eca377b22e0b65d8274b05623bd7e2c92fba9cd007048a4c111061388d7105cc0c153c45197244b888a83b611493cd4ed885171c8354e8d82d960d0998e924e5bbb90ed5c4baa10e852e7cc49e53f2ab8f822f251639fba84700fadd5b8f1e1be11068cf908e2a37e83609a05c1bc8858c261099aa7c27d5f3fd6dd05cc7cbf04c3923f62049b99448837ca721e45b7010905e8174609e49a7aa5ce722e0ec5c897a05187a36827c3a96269afe30ec8e586860f315385dda037c429845dae73c7621dac60dfa54bb726ceb68afc529f3f3cfcd725a24702769d087d8598d88b542ad031d1a92e8aed157a4cbd9f148517a278305928280609ccc988a8139a8e2570c9114fa82fe317654b9dcab3ed0c78232612ab56955d1e0bf8e54adf6f50c90cb7100b9107ec35598989d64287606b6f9433d8e8b8095ef08b278f7ee48567db99e9813d906d505a1c92e4007905756472a5dc865b0daf9911a5bb313028446c0025a58db3a811d7260d4c0f31099ff6dd32c2a9c7772cdbb41928049a88a444243fa17ba79c7a537ca333d211cf6a57ce228b8016030b3f966d1599984d545827fd7a4445e0a9c4997d13a52b1d4a22434e625aed705bc188a8287a252b7e69a8c0bdc733edbceb454dfb09b96613cbf35e862fd8b2da58dfb0bb8b4b5632a3c3368325fed7fdf7f28fe42df556272f2a58e34d7e833cb46956268d2401760baaad9292b1d2aca8866532305d7d0757d985ef2ad80c78850a7a1650c1a4ffed05f9e16bafd435793307ff4e44cb9384d235f2c6c4a2eb58d5c24e89b6bb446e8b874227e54171ac8ff5706f545a590f03fd550e3a22a128ba48c4e8b9347d6e21a49ab4eb2dd08a5feb592902c969a934b5af4d2d182c96dc5a4a564b2a1991a8b2611555337b249b76e3a9670f25f39e94f3a7938daa97ef9243fa99fcaff124ae1a2a28eff0a29abc4942aa8a65ceba97a0495588aaab3a452aba9ae1455965595ae6495fbd1558d949554d2aaaab6d2485c1d425df992573ad7578604565561c94b6215d4586244d6ad55965b324b739de5526855555af213a5565fb9a55b6f1d28b82c2a2e954a2e8b34576bd1252ed5555f7669d45d57bdf0725d7aa94f7bb9115fb5d49744f955a9fed25280dda8c04c94607ad4603e4458691526a50caba3c3b40ab1832a31eb524c055acc8a186baec6a49163bdf5984082ecfe51649634992a51e6ab2aeb976572e9b2aac24ca032bb8c34b322da4c4575e6397916b31f00c4f0eb3d6056f23c61cdf56117ccdd915aaecd44a7f1f3ce397640d5c340e0a47bc27cfba2ef600e16db5a0e70f856eb74885c10b99667d80fe6906178e827d760ae98c2f6c52dc25c311803ae876acc9335e2f8ca5a16af5bc733edbad5d874d3f416cf4cb2edf5435c22469aa5b9adce241663b1fc806fbc9c92cfb466b8bacea196f598e5f6bd346eed5a2253c9063e0801baab4986d30c1f0cec389d02b7e9bd3f159371c4cd6c3dd93f47becb7ca6e8fdf7ebf5cb781be0afd5ccdf25b5eba76174d21f91f7cd77486feb353a5396e35e9abe9dfbd2dfb408f8a786f17e43e4be12891cb4c560207d8cc63e296e423921c9910f84871d8a08507aaf9847ae3a819581aecb9e48cfd6a6e2157cd45bb78a97eecdf316422efacf1ac60fef4f3160d8f799f45aa77b48bb51e55b29263f63083f13ac9e91d16f8f3e09c3502bc5c4466008eb76259f2aa610fc61c20f0363e1679c672fe99efe748c377a73be9d7b2d0db953e049f201c7cbc6ae574f3cbff9b3b7059e945a27c18f81cc6c7757eb8de4b1d1032886c97be7e8b5360db960c11a42591b9574f5b075b317ca108b8b6eefec25862ee5bb258ce9a06ffeeeb77af712795dc2f6954df3b854fa677c11bc02e98452b8f48d15bd3473dde55a5b60ff109bf23b3f49a58447de1f3cbd8a3b3bd47ee9d23140ae0c18e39a05e0c1f1c198f08d99470b352969c1bef6ee296574f00b88152210787df6a5243c44babffc8d04f3620ef321ec9c76a1394dea3b1c26bce176a83b9b3fc2af2098cd9f5128c195077139a14dfb83ab50f71e8a8e6bc8b7393e7474c30441966b0716ebe0e812c50eb3ee444f193996dedba94ee83a3eab61e63a33c4a53cca88cb9847874cfeb1ace88823074dc78d6d8312eef3b623c118640cde7720695f7b2e0ecfa2c4b4c383ceef320b50751f77f9f3321ccf4fd412e2501b6f282d52448db2773528f3e549b7151bedcfdde23864f43be5996f4ff7a3ab414fdfeab5d277f336cdd5a7153216af8cd2d5a989145465b21185b387e2b789b2e5605d8d6d9e6fdb02fb16e89e997ca1995badcfad29504576cec747dea2a04b840205c59a2074e9baba285b50f6e2014501d003c50a7db63328e0999fe1dcfcc196dfc250b4e515c5d6557045b1189507d5241b48d2d3f3b5407116e2908d786c086e768365ee2a53f3e4ab73b53054edc66aa347ae99c5b1e1a80d52a54422f99444477fdd45f02b3e823d8834cb06f7f473ff4bafd1663f90124f0f95105bbda8bcdec2b4661ef02dde6a1e5e3200c7babe75d2743c279ea7bb651dde34f892a88f1bed26b2beb5dda874f8f3600bb52065a821a59dd5af55c2d612bb30efc628724e5ccbc51f7393cb4787cee1514efe46232775b18c161db4e2b23271bc080fb37857011e507194bcc69bf924cdf6a816088cb40d9b2f435bae80e9e3b7ad18320566078ab786782787d9b584fad0a698192f06e09276742a6670511f9087b8e5d8e4e108a9658f82cf50a73f16f1a5f509c5ba9909b4c0c74e1991b7cb44961c4b59e4084204cf819597ee21f8f1ee54035c372bd5e01f5cafc3bd10d8260070bd50441dc3a237ffc47d74033488e6382612d53a51926531159c7ae83b420915f5bb2970af53ca77c12cb0df20087e714b0cc15a72ddae2a2f5091bc05af814d7ea4b07a72affaa1b8dd3ccd26fd75bb3a593d3d6aeabbb0cf19f3a9fbc8df16356af7d1a36c02f46e2e35281e4caa3a43a0fe1fe00e4ff0cb74175c4b6076ee5990a9806836f4319153975bebe77b43716a7820008beffaa6818cc7cb071357fdeecd4cf0a61caadc898d1b4cef20f068ef1e3900aa03dacf70a048f90db2aec33fc199f0816e2e1fd47d479171a3fb83b978260eccd804c3e42c55b1b17c4e31c77ae9f3551c6da7bbde5c06d4d268639afe923bd6d262be888fe3589eed8ceddbf618ed5caf94239f0178e7109726d50e9dfa8cdf7f61ea43252d310529dc71c607d62d181677356c61d21a3700f4dfbf4e1941e20b4d5b3e8e6cfb939305d9f40bd3325edfc0ec95f78bc572dd0caa755b8643d04fd7d81755f841485e7d2a7a28e8693a02ee4f3b122e6e8901239ba2dc0b94e6597d437831a9e97b4678f296d00ed8aa51e7ef32de0d5e5f47b0ed016e98797e7167c1a0d890111d40a0876bb35c539ce3868e4923d108b5e070e5b95269c068810ad53ab3cf58f61f53f71e1f8259048d3dd472204de2c62115093455286c40ff9b7fdd22bdf15e1f657adcd30d5e68a327a9e0798c8c5beadb6fdd1b85c46efda6b9b9156eb43d49088a1059dd72f9365c9dc078dc6e478345e674ae25b1c976a5380b756ff6ee99a528f4cfce7745d7d9312e1679be092817481dda617b8b81b45bf0c7c810e231959befc89b0d46374a018c8a003a601c164440e455078d25714f4382e5d26d90581067d7f3960d7400a88aec4d047f10eef14422fff87f3bbeeebd134ce0272ee839c6eeefffefed85b1e0c09767a3d1bc91368c2d05560159015a0155dcfaffbd0ed72ae22505d43fffe367ecff9ff3d9f3454c4fccf3e009bbd3b6b9723b75e6c88903e79f7b79f3fffd9f27793eab27f817d772465558459da04d162fd53c3b4bac99b086015152d2eda60d1b1e65c995378a1e91a64f1a30ee15f5cfd7c051b1acc698a68886782636039779bbc8d0b8d1684113858f5172319c8b87e1607811fe856f797176d1b2eb1acea8d404cfbab9f02d5c0bcff28fe5ca5be648192032a4cfa77f6ea5cafff7a84c91f2348f02252643820c07aaf4c4d3b9c2aea94f6788e7d3c949558a76f2269c09cd97702561d48409c3937024fc083752e4be61aa797e63986a9edf980aa6a2ebbb8a84211b8bc4187e913086400d2e9a9ab6d38d6cd65148a914325a2791d13a594399554c13cc2872ea664edd37b2a9594755a5e811cde2508ea9365369454b9fa836734a8fb0a2a54f48e40bcbefb02a57adea1a71917656915e82ff54a77d8366d6766a59b52db50f62d402a985a9b9a93ea7f6308e81a4ada561a5c959dab4b136ad0dd419ad9fcbfa663697d4db96deb86b6835ca6cca6fac034d0c8d0b4d046f071a1d342fb434336ea851a69e9d3da7cec69cc2223c75e6330b33a3a3fe9f675667166756f664dacb3786abbc30332088c9ff5d6be623129571d9d63fb6151414b424c365be964cee0399584bd6d59225ffff79645fb571f8ce0cae584c39aafcaaf4e4d6ae61ce2f4049bb0b50d335eb9dad75abb502f9d64a7d0554b2ac2facc43ff11050902824bec3b97f2ef7ff41ac2aac28ac22fe9f8e3a6bcc33b459051fe7db0e66f8b3e467eae7ad1d03db32162cc41bd2c7c76d07ef683d15fde784781c9f27ed9eba36cf568be7498b87c05bd1d2a76fc3cabe0d43237c5f9886ef28ef807868b30aeecdad2dae6354c707160c0663625bfb7f9e5adaa39d7133ae2588977d0aa8664d1508d0fff3ae2fd53cc7311007c0439b0147dda8f77a5127eabcfe7787eceafe391d184f769fcbc888cba3700be178e8e5fed4999110f75bc06f3ce4ba7b7267e3ff6d7c7bf7bc3b2077759e6de9f0281c6639947528e673684a517e62b76637b5bbcac62311bbb60eab78fc51c7824eaca85a27422a15752ee9289328e3a0fb41e7a3c351344e0d6d19625ab6869c18420217e939b1b9a9a898285fb198fbc911292a31d783633929f7a110d8b195ebf07c329bc4b74321e0508e09114a164d300ae52ba6b8baff6fbf8d238ba3762d8542e31583acd7ff3f4f36feb274f6035c18d18eacd2ae6da96dc3f1550f8e071c15aef7fc7f9ef02dcabd6db56f556f9da8f8e6841a65deb0a5c52271cd8dcbad8908a975cb527cafd936a8b6cd2b7abfc3b036df201e7359a290f835a809bbd5d60e5ab2624e9752eab278ecc226b117d8baae580fd8239658d352e8f2ae6b29a9daae6ba9bbaea58472161b950dcffff38ec5296b5070884802ae928e28e5ff2f987a574987abf43b727309fc6802f2b06ccfe353e6795dee6fcc45f2faef1efebf97ec4f14fef998fe027a1cf170939a6e3bd88c5add6e52836fda4e9d03875e510417294662fa7f60dff0df9bfebb86ff3efff7a3fcdf8dffbdf8df89ff3dfeeff07f7ffffbf0bf0bbbdc01cabfed200c078741a14da57bd797fc600cbb9ecef3f3c96c3a98519501643e6baa732a953e810eee1835d51903d833b4045cdfef7f03f0bf07ff3b86ff7ee1bf5bf8ef15fe3b85ffcef4df27fc7709ffdfeb11febfb704e1c1cf01b037e80bba82eef63641ff8ea01fa0eb067a81aed4893a81feeb492d960febb34e67474aa32f13ae91d2355a7ab7d7be82abb1acdbd3727b3cf76884d19876757b79dcde1bb7e7e5f67eff7fcf1de9bf0ff8ff20f5d40aca2d52eabe2ea007e8007aefbc0784a5a8b3c7b23d443492a4466139131440304020100e0724026914a5b9ae0f13404186c9c404693849c2204351c410440c31841042082102420841e666e801bf0bac1207b192dc60f9375de572827df40f345ba9fb485ff3cc4bac1bc0de30b2f51d1ad8b8fd4f1d241eaab573c03a96c8be7afdb13ea35dbfe416175d556da1e5b3530fa3d7dcd000cb7ee7dc0d93fb2c7e6e17f6d833f2a3402deddef4670bb39e734e17d9464d4b3dc7a3e48b782a8f727c47f169fe64637ac4174d45e6827d913fe690bedae4ecbbb61127a74bfc52bd376c733b3bdd88a0bde4132018e646877b9da97cd9d30b0cf8c7397e7a0eafb8ffbbafa1ccf5fca6cb800e81d28eb0e74ecf3d6ddec05a0335d304d4ca5acb676b786c105abd10313798114c2f9b171dacf4c27ef639437f2c2047b83225804b02d80d1284949095b4925773d87ba5fa8352cd7d3e43812028cfc1aa2c93a9d1e536f8492661291481c349a5e9c464bded77a93cfaaa4836cf73acb875c7deb80bf0fcd30c8f5edc2cc7d2083399be7625cece85e6f48d8bebff8719e9afc15bdebdb5ba30331ddeafe337e3b126a144ce73fb2c2ebdfecfcbe3c0f03a20e4087e64307e38269ee6c7738fbee6157e06e83574f8846b8fa7d54edbdb1c9f3f539a9a817ef875289d734b5b918c9fb0fa2502fb598eddea6ad89d56091f07b585ff5d0ec3dbdd8623c2c100e7f508335ae490817c4a35c3bfa7c50ee1ff7fc9312cdf3be2d6e32b571bcfca29c58ec4858fc04b9752c367103800ceeeafcb092441be29453a303fe6043707c9eed1b32637ba0ebf59d6e9e9a16f6e0e09a97341a8d0438eefafaf22f6a02b02370d6f85ab9c7fc916026d1a2af73f79e5cf8b0ffa434e2de871df00b58675fd83ce0df21b470c003d684d5402fae9ab1d9fe7cf929ce0fa98f6aef6da6537ee3c06621fe3a6c605997856d445a3b5b5269615a43d8a74e9ff4a2ae1916cf92ef9ff37d98ab6531bd0dc2ca81050df51657b8541327bd4d44b9d7fa49f71a825dffde7ad7152816d13341d2c03a7dc468348c64b136c57899893880db7f982f63d59edd93a16975c093f716ff29a79cbf1f494d1f3959db8faa230c54af1e4f4c0b3d52b112f5d6071061c4cc7aef3faec79211f90da4905dc29179f0c2f5b7a7e2e3106c7f7d49c642c444b34f8d577b7d59ff6da5f8601e0514ef89e3fa3b7f97d804bb9e92b82818e36f8a73afbbb5c49ce3749594e0a9caea98637562cea81cbdb5dfa215c3f716a895c71a08fa56ed3db637c3db2096f01d330c314ec4ecdcce317504bc834b005336ce5d156df214070856ffb73cb02af2d956b1a24393e68b5dd3ce051d5c7849dd2e7638f7651fed288c6e87293449691509f436dd5846b76431dd60df3fc4fb2d926144686f86df69dc39881022fa83d28350fc7afdd5a389182e1295dafa35edc67b94b39f19a66d77526381488ffc7c9db74dcfbd5acdfff4af25a71ca6b303e833faca72ac451e8fe549a43e6c207bdf3a3eb16dfdeaf17bbcf5cab06cae1afcfafcddae4c838a2f04a5f4420bb15eeaf288d20fa7245acd560ab8bdd5434b9ee1c71d32305ea07954ccb822f3fba97d33893a99f39db4fd2024dc60c733b6d36125a8cc71f7f5b3c9f00c2130dfd2df451c67035df12af417b0c3bd4b8084fdf9ce0bf28d12efc98bd80f2bbfe0b0c953e085a5090e29f1faa18d6cc81c6fa22079f6f757bba66efa20b7861c214d3dcceedd3200ae3030cb53b174d62e901675ed339e9382bfc17aafb6c717e27448e1c2b099920ee0ea7f7aac2ecf3b401f12fb4e0355ef709edcf7720c20928fa2b9ffdadb388ca90d23e189eefe1a9d83e0b9c5b0313e9835641e32e8bfe6ac30b4420b4a5fc9c425ec3f947c1721f121347b9025da7459f81bdf1fc8493eb72ce849d7ef9dc08a38f4fdce8b0b94c2ff9e177974fbde8e112a74cc37a6107a6b8863b6d3cfe38abfb1cc1c07e057d7c20a72a03a4b7a67a275e9a4dcad2b559275684e7aa5466d418f4c07c06f94444bd55a7b7d8b00dcee3acb6d7cbea2f92a67f57d42dfa2a163275ded518f8b93ccc75151b0dd2c3d3a762d22421789b1d3a90bd2ab9c97cef1fca5d803e0e65bdc0c51f7564c5749817e8406c7043d96f02e7dec3e1f44baecb1282d64394e48fa3f6dce562f17be2ce8bfcf2f4133c57fff9380c186a7664658893e0e9f088c16fdbf1a7eac85153f6834030dc579803986d7d8b06922cfdf20f983f04acaf73ea165b64324bf1d3dcc6b474082e1311f584f2151537bc8bd4c49f362a70a4cf8e567a5d5066175a32fcd57ecf52937ffb3e23e35719d039fd3df7522cff27fb45caf0e7ea5afd012879c99020f7af4af54bbc0a626a233361c522c2e6ba6c44c9b7f1cabbf9c6049a05afbe1683d298f5e96f56250fafcb67410138f1cd82f0f01c8f87029089a9ff22891d2d54e0e7656d5b8afc1125f4c824dde70b7a9807e6d2d97d353f7ae34e3edecbf656dec6e6557886381a28eec171bf97f3eb1f169e843320682f3003a2b8f3723ac68058190c86540a31e76b0ced477e0bccea17ba339d3f0cbe6d91537a2a62ad462cb3093601aa1524fbe7b1adf10d52a0d0b6e5c5ff593f431c4abf0e499b34be96b1a2b78577581ce7fc149fbe9e189b64e1fd3c341c58abfb301760c764966aa4e9b23bc34b94e8ce422ae6db19edcfb67d78b486b78eb79aa454211c5506dc320a7030360d16f0f83081f7782402dd76f2fe22e79594670c95d9fcea7c76a8bdf815859976e451661bfd8e10d864091af64b4151b3924dd5a2c572b206f52a2e1d56dccf228ffb2497d093bbcd48792ce98e85531c7b7fbe977a5e382aaaaf9203bcae1db8ab7690d354864c67add5e7392561f4dc55481434ecf384223b9d70b9b621adbe67731705b9c2183af0eed2797936717bf18d2f911661d7ce9a764f1ba4df878bc5f7a018db4a0f563327522080b3a25cbf4b342faf63767c62150ff3d6645f4597203aae73e14d95e8292e6182149eb13e567ac7ba058f556e8a5affb9c52ee3f7e4e985b6b26f2650cca9b438404d9ca8b1d913e7ef7e201f51fb08dcbd2b15cfe150167c9a0b36b71b56c84f17f8921a1e21a9be83e26b148c0ec3efb39cbb5fc4b85f9af29393d16d947f46a8dbaf92aba161d5ff869d290a7785062e86d98231040f3475c6d7acd4b9f393a341c38658d12eb9360e9c356d1156f8e8f5e1149e2370df56bd086bfa53c2cc4054e335bf7280625fea46332129bc023b2e32d8ef2a0a74ad7aad1d52f9d021f3f4a927867e55abfcec2bfba007fbde0dd486c60ec160eae5767f43b40a59eb6b3a06839f87eeaa099ab05f181f9d5140831eff1f31aa3907672e4c6c7b276b26c9a08d589270c58038a9b8c24404c8837f83fcd11ffb90f50ee999beec61674b121415ac14042f9a9ed1217fe81df90b0cfb8784ac9f4210092a2c21a78e55213ab1d752abe7203101d5fce7d79f318783a7157dd6f47b5a8f103d3b5c1f13ecfdf97af9c5fe6f950579299d7bcf51c7b7bea781042e9cac8b6926036804b53d06060e99bffe84113657c6e323bf9397256a9671836e731d74289c322fa0b98586f3bef17940f0f87f03ef6aad096003ad04969f9a504089a5b80fbcd3173571c998c70f669f337e0763c39a7a9708b8ee4360a5c917bf4292e4226d715c5dbf5c46d228ee59ba44b8481b5d410f932d0109f43fb53beab1118dea52f0b272153c33263f53a66cc6adf429e7b298b48195b154e6c692ecfd32b147d874a36a7e2a38dbde166b925dda52b0707fe072de071769df3f3fc61d20f5d9db1826a3eb9b32a18315189c322b0635b9b7350e580f1a583d7b9fa8a3ce0c87cd6626af633f79104d7c7bc83fc7a0f9f30bc6be35ace8865494294598be151eb6fc79f2bc4f6cb61e0fea999aae3cf9f26b5ff9ea0be9ed559cbbfc555746eaf1c55b5c70a45d9ae8ae5f452eaa9fa35f401a4d4a30d2310d2df41112fa3da5732fa9feb97daef9150cac0402f0c0fdc587914d5ea767780beacff5ff575ee376e66aad45292d46134e1837c333614fbd6b065e3c435da9eed11b8640e8b84523cda9213b1fc8a318b48d8d51b81d28ec58171cdbd3de990339b8c20096a923389f20bb64b7d291c6d1de6c9ab3d921ef0def5691c285d045c04027b95c84296f61f64cea6758a606b58848274e80ef119b577ed74aecd7885be50d644c018c7e067e97ceec2842107849937408536c73bf88263b540a5046e2b0f8069ecbe218d944d6c1fbbad495baaa54fe9939feacaaf600cc66c0cbb60d02d04acdf8ffff4734fbffffbf912d53b728dc283d2768dcd9170fbce3da1e388148ce70cc27e9b9b6154ea005270c8b570274a6041f165d9b9413f8bab25a67413cd08bb3657cda6e4d8f134b8a4bf3f35942dc991d0fe4bab4229f75e5cef2814cb7067562f58c69bd1222a74ccc2b51e2cc317e86e69471f04f67aeadcf09dc7246287f9be1ce9e1e18e6da944eac416e0d8a136bd0a581f9ac0ece9819af34c7b55570020bb8b6352710ea162d9d4042ce52f08d3a654f5e89976b0be4046671a6140f13e0f8aaf24953b708ca09e4bab3011eb8e59c86ce867820187776c1033b38beb67825a363e77ce5b833231e38c62d323a81755c5a039f45e718267dd205c7171caf74e49449fd9321b7a880139875c6a878a54367bff89c9d61119fa4c3210c8d571a7469613ecb835356c23fbd396b555bedc49ae3da929c58815c5aeeb31238c7d259010ff472c63c9f64746d5827b08c5b64e5cc9a1dc280afe4c295e1f1c05e5a0f9f85c6298be095a0700c0d7d9211c7da917ba8cd39d697823b8be38158d7a6c309a4736ecb26f9d6398c11f04a3a9cb227fee98a9346c76b653986be4f7a73ca52f8a7396f9ca3f0bddd1a9d130b813b6be0816a6eadcb8905c095f9f140d995e5f1c0bc34073eabcfb5e54eac3b8e35a47bc8cdb57d71026538f3820fc99ccbf02d726b1b9c5857ceb8c327319da1219f94c59dddf0402aceb7f842b936314e600d672af121f0a4cdf15a576e6d90138b8b7344be139caf229f54c6b51d3a81405c5b162790855b0b74627d3946439fe4746b4a9c581e9c19c487894e9901afa4cb9dd11e48c011a6c22bbd39230b9f74e48cbf4fd272674e3c908d330cf449249cb2dd33e970a6071fce7146393e6981b350be7dcef8c3272db9351d4e2c3a6778e693f89c31ea9310385be51be8d27cf8ac342e8dcc6709bab43b9fa5c31951f82423c75803af04c4f942e193129dd791342f5e0bea580c4a73e1b3b0b845009c403eaead8f53d0037d383686af207716fc2c25676c88572ae34c3d9e56c1b5ed4eac3c8e35e4b3805bc3e1c49273089be3954c38d69aee212dae2d4f2c37ce12f2d9e4ce8e3cd0caad1d3ab18038b3ea67761c5f459f24c6a50df159876e4dcb89c5bbb4f859506e4dcd89e574be6cf824e01186e69522b8b53c4eac286e6d8d13ab873b8b7a6021e7557e3cce50824fdae0cca99fa571d20079ad07ce1a7ddbdc590a0f2c74841d79a52867e63e6ab9b6184ee09a3356c32b7971694f3e8b823334e19354b8b6314ea00dc7c2f9c67169bacf52e030f6e69592b836104e20984babe0b34e38a393bf8970188bbd920c27ec825792e0ceda3c70d09d51f140a93384e1935eb8b3a60766b936374e6010d7667462d5717cc53e098c3b933d90c919c3f8a42867eaf9d08d4ba37d96944bf3e0b38eb8b32b1e18c719fbf8a42dd7b674621172673d3c508b53c6e4955c39d3810f7b69427c561b6769b5559d4025ce46f9fe3923129fd4e43c747c39f92437ae8dcd09ec9db213fe29ce49dbe3b51c38c296bc12954318a25762e1cee203955cd9d5038beeac820702ba33400fc4e1d60e38b1687726e781275c9ba11398c22d72e0cc32726d449cc03ed706c809c4e29479f14f6ddcda94130b766d719cc0232e4de9b3be5cd91f0f9c5d5bd28975753e2843163ea9853be3e081369c34a9d74ae05c89ef925b2be2c4f2736b7f9c58575c5b9113eb7767811e48e818df7cd2ecd28c3ecbca2993bd52f0fcea2be6dae89c40046e0d91136b8c336cfaa434b7d6c189f5c09d4d3df0905386c53f897169497c161cb7088133ab766b6e4eac286722f2b533ae4d8f1328c5592cdf1f8e2f3f9f14c8193c138e9f55dd99090f24e2d64038b1c05cdb1227f0836bcb73021b388cdd5e8986634ce393aa5cdbecc48ae3cef6f8acf0da243855f8eace10ca27b539bed078a5dd5907be4e3c18b766c68945e818fe3e898a6b939d58709c21974faa73675e1e28e7da0638b1103963bead8c6b6b726261dd5ad589a5c42d3a7202ffb8b3311eb8c7f1b5e79300b9b23b1ef8d922df396758e8937e38655e5e090997d6e6b360b833031ef8e518e627497065c107223923219fe4e5da0a38b1b22e8d84cf7ae2ceae3eabe8cc341f4e7069327c161777b6c60305b9353b27960277c6c503ebb8364427d08b230c86578a73863b7c520dc717ed93c23877f2cb716d764ea00297c6e4b3c6dc5a1b27d60f47589d573a7396f79573368d4fa3732bbe065c5b182790866398c7274d716b659c58385c5a069fd5c20903f34a5ecebffc811c6352af84c79da9792008a78c8c7f8a3a6586fee98b3b7be381898eddfa7c726b639c5836dc59f8c025c71a00f7109bf3df37825b7b736249b9b6de09cc6b3be004d26ecd87130bcf192be295ccb835164eac0bce4cfaa8c219ebe395fe386522fc530677967be0d319f2f924116e51efccca6b13e0c43ae4d61238b16c7776c2038bb8b4269f45e6dab638812edc5a95134b7696852f20c738c327215d19220f3cbab4083e2bd0adcd716225715e40cad0f827aa23ccca2b3170ca1878257d6e0dcb89a5bb35204eac0dce38c0dffadcda98134bc92993f24aee5c9a9ecff2e18c387c92d2d9265f3d6762f9f8c6196af0491edc199807da39934b694a7c561c679cfaa404ee8c80073a7046308fe4ca9d41f1c04367aef1330c2e8dcd67bd7069347c9617475801af74c0a571f059431cc6367825262e0dd067157184e5f14a285c99ed977a6b0c9c58b723ac85578273ca9c5e4906d726e604329d320c5e091e5796c8038b9cb217fe69cf191b7824b4f332be53ee8ccc03f55c1b132710843b13f3c03c77e6c503ad6e8d8a13cb846bc37302193865e12b659ddde233766ec3d7c831eebe888e6318c5271171d2c078adde79d457815b843b8156b7e881330bc9090be195d69ce7f03d72c60b3ee9756d5f4ee09133dd7c98e694bdf14f74dcda0c27569b4bdbf3593f5c59d703930e63765e6989238c84576a73b6ccd78d33d4f34982aecd861308e7da90388181eeac8fcf8add1a1d27d612c7f08b4f42e2da7427161eb7c8e904769d99c5c3de3863199f34e516d14ea01ce78b854f32e4d206f82c3177c6c767c1ce50f74967ee2cf6c001ee6c8907a6718c75f14a54b716c58935c2b5a971027938138a87351d43d9278db9b62e4e200c7796c767e5f115c2270d728c9df04a559c13d2a2a733eb633bf8de718b7427108f3b4bf45945ce3cfa58c2adc9716221710cfdf8a42aced6f109c09d7df0c01deeacea815ab756c789c5c499501f993865685e89d579d31f75861e7c5209c7585f09866b8be2048e708b8e4ee01eb7e6c58915c32dd27266f14e190ffff4c1f902ff1e274c8b570a74ca903c131b278c8b57eae09c85cc215ab4e5cc3aba4554ceacd89d61f140396ee23e6639650fbc9212ce58f5490c9cb4442e2e895b24e5cc7a1d5fb84f1ae3daa89c5a9fb574260d1f0272672c3c30896b8b7202c34bc37d16029776c367857167143cd53f25720cb3f8a442c7908a4f2ae2da583881179c31884f6a3a9b5f0ceeac8a074edda2dd09cce3d226f82c12aecd831308c1ad717162bd707c5df04978dcd9ed81508e4de4d3803bd3e28155671e106340bc121967b3f884dd190e0face2d2a03eeb825b4b736241b9b4429f257569473e6bcb9967fccc824b63fa2c080e615baff4c27910dfa46384e193929cd5e3f3c8ad11726275716b514eacf0fc4cb68d4fdc298be39fb0ce2bf80fb934389f35c34913e3b57c67fcf349ba3b2b7aa093b3097c3d38eb449ee71b8f2fa74f7ae38c653ea9d7b67502d5b869f4b1813b83f2c008ee4ccb03db1c5f89bc12933391f810eb8cbdbf0571ca66f8273fe763e45f7c9fceece26750b7a8cb9905c0ad5571629d706d814ee0974b1bf359219cb1405e29905336c12b69e24cdba7efd6ca9c584d97a6c167dd70ba71d6f66573c66078252c8e2f3b9fe4c7097be295f81cc3a84f72e2ceb03e2bc9f90abe12016798e79342b8b5304e2c1a6e0dd089e5e57cd1f04958c770ca27c1b935194e2c36d796c009b49dd1ea93ae5c9b1c2710896b33e1049eb9b33f0fbce18c7c3e09771843f24a371cc20e79a516ee8ce9810ddc59160f9ce3ce4078200fb7c6c78955c5ad597162a17067867c96914bcbf259796e51046716d209d3f34a682eadcb67f1398cd55e69864b53f259119c49c8d72eb8364127508233af78d81747189f57b2e0d65038b1283833ea67685cdaebb39e6ecd83130b8233b1be86c61953e195acb8b53b4eac276e6dcf8995e5ec159fafe3abcb27cd717cf593bc38e3109f24c0ad91706295b933261ea8c6ad0d3ab1c6dcda1027169f4bbbe0b352385f327c52227766f4c0276708c22799708c15f24a892ead88cf7ae3ce1c78609c6b53e00416dda2d709943a53850ff5b8b4db671d708ba29c59e1adbd716209716b119c5848b766c18965c09dcdf1c0ac3314f449279cb210fe29cd298be29fb2385f53af14c0b5dd4e2c3beecce98160ce34e06312c7e2f9565dd91e0f0c8fa11c9f04c59d457920995bebe2c482e10c09f9a42bae2ceb81019cb1cadf0c5d5b9613b8bbb33a0f5ce1166539b376b7a6c28955c1b5fd7002f35cdb19273087b3057cf7dc19d40325385f473ee98c5b2be4c402e3d2a87c169b33ab7c3ce3d2a47c560667a6f1b30b8eb1ad574ae4daa04e602f8dce67e1706d534e20ec1c825f905bd3e2c46ae1cef83c70866bbbe104c6398c757925212eedcf671171260b1fee71846579a52ca72cce2b11e48c757c5203d7163bb1a86ecd85132bcdf982f349bf3bdb3db0776d5627d0899346f55a0b5c59200fac1d6956bcd693b353be802e8d81cfd2e018077d5291230cce2b95b9b6274ea008d786746209726d774ee002c7979a4fcae310c6c62b8d707c41f14ab46ba3e2049a7067827c96edaccdee1116672e7d64e1088bbdd2936b33e40486716d754e6002671c1311f924088eb01f5ec9cead6170623db9360e4e6097f395e493d038636fbcd21d7796c10343b845bc13a8c719cf7c521eabe75bc79dd1f1c0e0a511f05965ce30c9275970ca7cf8271a6eedce89b5c01935f8a4dab56570029f8e302eafa4e51c8f94edf9a731c7d7994fb23abe067d12217796e5816cae6d831378e5ac15dd43698e312b5ec98d33faf9a4dcb5f5c43a74c63a78a527ce98c127c56ecdca89353b53cbc7a82bd3e381f18c5b7c12d49d89f0c01feeec880796716b5127d61097f6e6b36438fbc7a7d23174e29386b8b144af34c819bb7a2541aecd7702e3f155c22721bab3413e0b7726081f569df1ce2715ddbc7dbc72d20ab9b81cce657f1847d8935742e0a409f25a105c1a069fa5c2a5f13e8b815b1be1c422736d499cc00e2ecd88cf8abab63227b0e94ca78f4b1c5f117c121dd776c2099ce08435f14a7b2eedcf32e0ce1e78a0067776e6817d6e51036716eecc421f1e72aee71b5e9a0e9f55c619d6f9a40f6ecdcf89c5e5d258f82c437796e6811f9cb4255e0be9d66e38b1e29ca10d9f24c31903e395e0b834319f05c2b5e14e2cab3306f2495d4e1918ff74e81c86efd1adc571621d71d68d161d7066d12e0dc9677139430a3ea9cf791f5f3097b6c167f5706b259c58664e9a1aaf55e594ddf04f802e2dcd67ad70e671f6d80ae2cb834fba3af34f2887b130af44c49d01f259b43bb3e181539c34335e4bca191ef9a40a8e211d9f14c5b91b31a6c02bfd70c69478a534ee8cca03cf9cb1c9dffc9c32a55732bbb42f9fc5c1b5d971029b38be10bd92008731a857e2e1ecd4e7eeda0a3981609c5ba519a70cf64a5ab786e6c422e0da6a38816fce971eafb474c20678a52ac750eb93b838f7f3851d6122bc129b5b44c009045e5a019f65e6dab24ee019b7b6e5c43a3a5f4ebcd2ecd2609f0575d2b0782d28b7b6c589e5c2a5e5673db936274ea0a03b0be4b36ac758c227017067857c160097f6c367a9717c5dbd52d399007c34e108f3bd9202d766c10934e02c2e6325bc1215c71816aff4c619def92410ce1cf3a1d1595bba87b0b8b52f4e2c194e1a1fafe5e5cab41e78e4acc5cbcbe28c4b7fbbe09469f14f649c21129f04c4b5553981b25346e595e0b9330f1ea8c39ded79a00cb7e8ca99953b43153e89855be4e5cc0ae0fc8c2f9593e6c76b7db934289f85e630b67ba51a6e2dcc89a574ca00782635aeedcd099472cec4b7e918727d5217b706c38995c1191d7824085c5b0027961f6796a98dcc095c72cc013ec270a6a00fe938b3ce875f9ce1009fa4e64c133ec4e3ce901e98c0ad9d39b106b8b3001e58e5ce567820126708c127e139e3179fe43bb3eeeccb03e75c5b7862459d7fdcd9a1071272c62e3ea97784cd792533b736e7c4b272697d3e2b88331af2490f5c1b1927f0864b6bfaac30c7087b1b1a87b1075e6988b36b7cde0e63645ea9884b0be0b3b41c6370bc521eb7e63bb1e25924be5b6758c027adb9450b9c5946e75d7c9d6ead8613ebcdadd97062c1b9354327560a278d8cd78a7265833cd0e8ce3478600a5786f54000ce98c3272d1d1b446d469c400e4e1911ffc4c4b5399d585d7716c3039d38651dfc5305278d8dd7b272c6d9177d39beb078a5a25386e79fc05c5b192710876348f5494f5c5ad26779b93625ce7802dfb8353227d6925bbb3ab1b6b845019c403fcedbf8227084e5f04a744e599b5702c8b549710249b836ae13b8c6b5897002c59c1df4fd9d6b50ebe561716b664e2c01ce98f4b709cec2f1c93b432c9fa4c119eb7c92edec01df0ecec164ad7603a872e6990faddc5991074ab9b4143e8b8a5396e59500bab6124ea099f395f54a4d4e99ef95d839e3d3df7838738710f6c62b91706d674ee000671af2351ace18a05772e23ccd0f3c6523fc139b4b9be1b3ba38d7b834359fc5c2b5e17002e55cdad16735706d219cc0307706c70313b9b6294e60099776c2674971c2aa78250ece8ef1593b07e14bbb35ac13ab8c5bcbe0c47aba35244eac409726e8b396b8454b4e602177b6f44006ae6dea0416716b724eac2ac7571fafa4e4d2967c16985b6be1c4c2e00c9d7c129b632ccd2b1d71676e3c10d1f1b5c62bf1ce98c5273ddd199b078a7026011f91b8b3260fec72677d1e48c3f90f5fa46b937302ab9c51cf27dd2e2d86cfdae2da6838816eceb0c8275170c69c78a5352ecde9b32a3863a04fda9d25e1cbc71953e395eab836004e2c3e2ecd84cf8ae2942d79254d670b7d83d746c1096c726d409cc00d4e19a07fa2e0d220f82c40a76c8e7f029ef9c7d71cb8353827d694f334be566e514fe0a1336a79244667fc6d649cbbf0e59d55f2c573673b3c108b4bcbe1b3c8b8b4329f25c2991a7ce8c5ad85706285b94558ce2cddb9c659293ef3cef4f8ac78be70686d8113cbe8161939817d9c31814702bbb4299fb5e61066c72b9d70c270aff4746b894eac2fced0cf270dbab4163eeb8ae36b8a57aa5d19ed95b66e2d8b138b853bfb7dd6eb16e50974e33026e5957a3836ebd3c9ad897062893986657c921267254859985792c2298be19ff81c6162bc92a033debe488ef3a5e493d6b8454a4e60a25b3be2c402746d889cc031ce88e591d86e6d8913eb83538c9386e8b5c0dc19030f4c73ac0bdf408e6df385e3ce8a78a0186706fa508e5346c73f651d239b4f92dd599e07be706d2e9cc034e7467e35ce74e3676aaeedca09ccddda0e27569d630ceb950c3963bf57f2e3dae09cc02997c6e7b380b833dd03a1ced816af3475bed87c921e7746c867e96e91efcc8aa74c805732c0997c3e7ce3d29e3ecb824b03e1b39238637abc521fd776c50954e1cc2f7e16e5ccfc743abec87c921dc7d8a05792e2ce083dd08a3bf3e1815b5c1bd38985e8dae63881491c611cbc1206c7d71caf84e4daae4ee016a78cd03f05ba36a91348c4b5113a8173ceafe86c86074271caecfc1304674cf2b731a74ccd2bc9e3dc83d282f82c36aecdcf09e472674a3c108d335e7d9203e7abe993d8386350bc121b67b2f910835b037362259df18f4fe2726d504e2cae3374e1935c3837246376bcd2efcee63c10856b2be204fab9363d2710cba5d5f92c4287312bafe4c389c6b5fd39810e9ced9566c3678171c6e678253d6e51ed04ce718c7df04a501c5f855e097667701e58c29d61f0400f6e51ee04de7186287cd20ae7727cb55c9a91cfca72692b7c96156738e89350b8b53d4eac296e11046756925bf3e3c43274168acf9eaf315e297765853c50772c11616cce2b2971677e7c96ecce7c0f1c737680ef067756c303a5b83544279617d7b6c7099ce2da6827961c6717c79805af54e8a469dd9cd319f1f8242cb736756215716d714e20953b4be381805c1b9813987469307c961677a6c2038f38db406546cf54c01156c62b89706b399c581adc5af0c44ae3ce16782006e7487c955c1b142770d029fbe09f2eb8b52b4e2c15eeacca0327386968bcd6943bebf24038b7f6e7c472e04c397e46c7a5b9f9ac186e0d8113ab76f271661d4ff35dd9d603935c1bf0049a716b824e2c098eaf3c9ff4c7197bf824259776e5b3ea5cda039ff5e7ce6a0f2ce0181efaa426eeac8b07da716d464eac3eae8d8d13e8c3f972f3497b9cb13f5e09901306c12b3970c6429fc4e4fc82d2e67c960d57c6f540a45b8be1c45a736d5d4e2000a78ccc2b59e2cc0a3e147366111f1a72676a3c3010a0d2ad3171628170674e1ef8c0adb97162057167723c10786daf134bea0caf3ec9d0ad9d70624d70657d3c3076676b1e28e8d2b07c969d6b0b9ec0344e99955792e76cd337cf2d12e0041e72676d3c70909b017c3ce1489be2b59c9c3bf115e07cb9f049879c31295ea98d337f88e19a4f02f45f9c89c38782dcd9130f6ce3dada38813f9c610f9f64c395cdf925049c2f239f64c6b52170026bb7e8c909dc3abebe7c52d5a5f1f059671c5f0b7c121c7716c503ddb8b4de67617067323cf0895bd373626139a31e9f94e56cf84d7369e167391d6148af24e518aef1494cdcda0f27569e6364e393acdc59d20315b8b6312750c99961fc8c82b346be1a9cf9e5c37869713e8b86638d770fadb945e1098c3afbfb447236e96be798e1e7d39d8d79e0069776c067bdb945b01338756b624e2ca66bc3e304427186387cd20c8730aa572ae1cefac0a57329be049c55e1fbc7192af149419c32a457129e71814722bbb4289fa5e6da069dc0317796c0032d38c3329fb4e7dafc3881864e5912ff24c5a5bdf05959dc5a22271619c7d80daff4c5b5997102091dc6b2bc521067baf0e1efce9278e019c7d7009fd4c63186f04947676cfadb9e6b2b3ab1e8b833dc039d2e0dcd6799706d329c4036272d8fd7ea72c6313e49ca59588b989cc044ee2cebb3922ecdf759692e6df7590b9cd9f4f1856b737262056fadcd89e53b61695e49cc31e4e2938eb833330fe4736d569c40146ecd8113cbc8a52d7dd603e7507c9bdc1ad789b5c6a575f059858e301e5ea9ce3174f349814e589357b27269087c169cb35cbe4d9c4df449c05910be789c49c287761c63e12bc570694e3e6b823b8bf34013ceebb4a6c18975c01922f2495adc199707be39a31b9f74c09d99f1c03eaeecf7c0d77911dfa5238cf64a504ed911ff04c5ad113ab1e69c99c38757199f65f882852f588f8dcb570c5f2f58be62c4bd8ac2d7c366b3c3976cf60ab3f67a658475a3182cc260b0b6212ca4d548063bc4cd643d5ea3ce52463b63198695dd9e358445599266fc1e6bac9dcff2d9b6eccb60f15c088bc56cb0994cf68a3701b87d2caae1bed1ce2665b3e9c3186ba496f1db33397cdb61d1b0a29845e76cdb0ef330e2220ce916315a675464a6bb74d879f786bfae65795bec1792e302c864d786e1321a6d3bfce96ec4c9b365dbce5dfb25b90048cb9c7ed5be5c5ee09e4f3937cf3602e6a20ace29e9e1655a37efd745987cc07fc2911226bf0078ba0637c971a43512f82effe72f3bceb0bfff7f51a7f8bece91f89f693f0ea7bde512ceff8d4670515778833fbe342c5b08867d0aba49fbf86420ace07f231b13f5e34b6c5899df4702fdbe0dfa3d5363b66cebd7431f54bdc4c7ef2354541d8b52552b027edd6df0fbc5841ec5e3eaf7522055cbf6f81d97545d440fbf6f52aa8e31f01be98caa5a15f91dc9548d8415bf5ac17ec704f9f5100abf2354d54f4feae86dd0ef9896aa0bedf11b09287e2345fd7a93a0aa74a6fc2ee4c76f9991df4812cd8e15f2fbd5c3ef17a15fad9a7ec7befc8e6d7e6b251df909f0f71123551fb1a26a24387e1b3940e727285627a112ab0684f458fb5d888fdfb0a9df487ffc7e19517521ab5fad68bfe30055470d7ebfc2f88d6ba16a18d56fa332021d23a83ac9afbf8ef88d84c6af8754a83a96a8ea28a5bf68f81dd9f8d1c8c16f24437e171ae4d74382aa7a84d06cd91dbf6572fc3e1242d5b00a7e1f11456c981dbf63b9a68dbcd0a915d3af6e64f9cdd5f47be9d75a1dfd363a23d048ea547d048ddf001ccd46a2657674aa5ae6e437121b558d807e7341f90de3fd7ed2c7ef9717469aeb6f990e55232964362c8faa63ee778c4ad549f668f510a48f6172fc9601f0dbc88c40c71ca83acef93d13f33bbef9fd444836d21ebf5f4dfc961daaeaa1127e23b571c64878f1fb36c2efd710558d7f7ecb987e47dcaf45aa882d53f23b1aa97ae9d0af0128303b491fad1500bf910ef91d0fa83abe7ec3c628d99640ecd896df372a5527d1a3c3c024fd22a26a9a1ab35a19f9d50d2dbf1a392056ab177e1f59e377111efc8e553ad2a1df323a7ec585306b0cf42b1d29bf2398aa6551bf5aed7e35e2aa3a89205523e1f19b6be9f7530eb20338e0d75d04b36569fc4662e777c4f35b06acba501fbf6539548df4c66f2e25bf6116fc8e50aa8e6d556df4009deafe981d0be477aca06a24307ebd3d50755472c64567cc3e324555fb3854d5434afc4e32c7ef78811fbd9550d5240ccc96e551d5a32e622355fd9a450ffd85c3efd8c0ef9715badee1fb2d4bf23b24e1375219bf1e7131abd5eb776c81aa91f2f81d2df85503443d96a9aa1b587ec563905ff508a48f9704a93ad27edf8c54954e94dfb2387e1ff1a46a581fbf91e4f98d4414bf934c55fd2af43b86bf5ae17e473455d563905f7709c44602e4f72c82d9466804aa95d1ef2787fc9671fd4e12d593c05155dc15b1c3127ec7b0541db5fc469afa1de5fc6ab5e457abf077bcf3ab4eca6c1c95d847c0a85a86f53baef9e32362fc7a080e1cc3c8fc4ab3d25f5c00f013447ec38afc46a28adff1a88f6392aae211c8af564c7ebf6ef81d23e4776c90dfd1e8d73ea4aa9acbdf48887ebf96a86324abdf303d7e3db4c4ef42b0d9af2a72cbaa7ecb0841b28ceaf793017a1c8b7e2fc9d19f0a90e34282fc8e055495c6c0ec22fefc3e62a8ea235a540dbba0eaa53b7ec3cc548da4c61fc376bf653dfc8e627ecbf4f88df4fb7d448ddf30007ec710fd06808edf312fbf8b40f4ab6e4aecd8a56ad993df4b80f4c8c06f24ae5fefe8fd36b2c2cf4f12f9fde4a48f8f78f1fb081755c70cfef8481abf914064d64379e0a81f5c7e17cae3775caa1a298cdfb2397e4707aa2ec2875f0fa5f01b498cdfb20aaa46b2c16f190fbf8daac41989ea573c04f92dc3e1b72c90df30099696057f2fedd15ad97ecb7cf895b6c7ef1712552361e9f111287e23c1f37b97e657daedb70c8ddf4b84fc7a83e0370c8fdf4863fc3ee2e777b4fd2e82cfef28fb2d93fafdaae1f7eb87dfb1c919cfc8fc3e7246550f8950f52b8aa297a67e3fc1fa5d849fdfaf1ceaf895c5d149e4f8fd2484d936336586cdf1fb0832b35a21fd6a25fb2d43f26b51d36f2e2655731950756caa1a69905fad66bf6580fc7e01f13bfaaa2ea283df4774313bc6f9fd64ebb76c87dfb5086623f1f1fb1640558d5899955654553fbcfc3e92c1ac87e2b48742a81aa9abeab8fbf53642d5b2a4df49e2a8ea0e81d8b2017ec77abf1ef2a06a5a02b176ab6a5991dfb236aa7e69516424337ed7d4988d841455cfb87e2d12e07784f31b9667c91181aae303bf8f38f1ab0686f498e68f931cfa9d848f7e648c5f77707ecbfca81a095835521cbfd2e9fd96f1f1fb8807bf8be0e0b70c91aae3985f0fdd81e32355548db4c654ad8a7ec7a4aa6307fcaa8465f69344bf6357bfe3bfa31a3fbe9df0eb8d84df4500fafde48fdf48a2c486c1f1ebedcb6f24377e3d74c2ef27bfdf4b83547db3024703586076ac81df4ff0f88d2489d9f1f6eb213c70fca4ebd7e8e737d792dfd14bd55180aa8dbed0a995d26f1820bf1a25f1eb2eceef2300fc8e587ec38e7e237d517554e0d7dcbf655dbf8bc0f31b6624e968a6aa0164890db3faf59009bffaa1e577ecef247874d891a56584aa8e71a93a96e57712a9aa6548bfd2aafc8e4df92d435375accbef5902b16589908e04542d53e3573abedf4fb87ecbeaf8d58af71ba6a6ead8d3ef38fbd54889dfd180aa6113fc7e72c76fd919bf9f0cf2fb25c3eff8a46a9b1ab31631f96d6425ce4738f8bdc3e0d79c6ff6933d7eddd5f96de4083d8ebc5f777a7e3f31e47744aa1a89905fade2ef25377a4402c7314a9731f9d5aabf5f3a54bd14f5fb2668d0714a9beb62d6dc9ed8471850f513407e1f29e3f74b895f777c7ec712a86a1f5155cb0cf91dedfc4e5247d5b70e06fd248f5fad74bf6d672c1849905fef90f2ab55d2ef253f7e3df4068e91e8f81d03e4b72cab6a1901bfa3ee770caa6a24bfd8b237aac659991d95aabe7d30e828c1efa5aa5f8b06f895c725d65c94d947fefc7aeb52f54b8caa5f4ed06af56f247a7ecb2ca86a1f6e547d448adf47aea82a1296d8af1d7ec374bf5f64e8aa41a22ebbaafa4920bf5f57ec2e44c8ef57115547a63386f1f11b898cdfb62c627339fd8e18fc714c815f79697e3fb9fa958765360cf7fb1668d03b35bf656e549d848eaa93d851f5d255d5b2027ec583083692d6afb45fd52f1e7ed71288b58f37aa3e82c56f0078b3658254d5eaf6bb0881d9d149d585fef8f5e6e5b793417e3da4078e0b3999f516a6aa564d7ebf6ca85a3648d52f21aa4e92475b84815977727eb542f2fbc9c9ea2208f91de3afbc2f66f563cbefa2046603e0c66c5804483f11e437d2d5ef78a66a98205535eaaa1a0912b30b85312b9296d9af18aa46f2e27768c2af4837cc7e12fc8d94881e23f5f1ab55eef78b0a5cfd70e0f7521c3d66f9d56a80df32387e23b9f35b66f55b36f53b09f0372ccdef48e7b791213f3dd26536acea37521abfdeb8545dc407bf910af92d5bf2fb082755c5e5999da4aaea2756bf6356aa7e52c8af001830eba115aa7e19da8d0417bf8f845175ccdf3236aa7ec2c76fd81dbf6114fc86419064991dbfde31e5f76d8caa5ae5ef2364fc7e4d712b1e4cfc8605f2eba1247e170ae43712227d1caffc7a4794dfb25fd548e8fc8ae332ebcd81df485dfc8e4ccef866c2af873aa8fac817bf6f7a067537e7375701552fbdd16355aa8e47faf889d66f2ea6df2f286ccbb47e17d2e3d79d06bf6f1e0c9a96456c27887e23d9f3fb95c46f189adf012050f51344bfe316429e8da91a498fdfb03355c700aa8e4f55c3c4301d63bf93b8f1fbf544ed58e77738c2ef0840d5d1cdef1b09b39360fde622a0ea98ef573c84c01a80d5ec38c1ef00acd4f1cb875fef78fa558fabaa1e42e27711817e1fc9e2579ca1d947ccf85d14c16cd921bf6161945ea2faf5d0a0aa6391aa91eef89d8420b397faa81ac98e5fad92fc9629fd7a24caac8740a8aad156d53129bfd281fabd34c76fd91fbf9358fde67252d53edaa86a1f5355472ebf1e92d36f1b88705ce0f7d21ffd481755d5f911eb6ecfef48a53f21e47784e0d74373da4376f0f82585d14873fc0620ca6c9901bfeee8fc4692e337921fbf6759c4aa41212d9da7dfb2007e2f49fd8e09545de8ea7792367edde5f97de489dfe109bf23057d1c43a06adc01b3de01f52bed80aa935055ed84905f7367c4aa7465f6133d7e47d86f591fbf654bbf91d8e2372cf75b26c0afb708aa46c289df4b7074ae2655b5aafd2e84c76f5922bf6585fc3e12c5ef277efc9e95f96d74c06ca4407e2d42c56c581cbf610f20a95501bf8dae987da4cfaf7e74f9cd25c06fa4adaa0b21fad56ae9b70c51926118fc3e02e8571e18b16101285de8f7fbc687848f74f05bb6c66f24a9df2f2c7817bae337521dbf9112fde67a52d5431bc071ecca6f5b04b363afea4280fc7a035375117d7ec3fea8faf5450045da329b6b80dfaf20aa4e62c8af6955f56b86df4b6dfca645301b29e8c7d14ad5485972fc24eb77fcf2cb58cc1b9b85e17159788699af5f11d6972c8c195f2dba3dcc23edd80b16c6d7af67375f32d8b1edac365826ac99b62bbb3dc2868d83c986c1c298b7dafdf667af38ece3b573e7af3efb0aec78ec7567c76f691bb9e8f008839dd38c64365e08bb163ebb36addf6e34237107db8d44c95bf967b1d7ec7c9687bf5e52e2fdf502945b96d99e377e78ecd87d170ec0b9bb2459727ec045e2b2a7e1cf2907f296751f15ddb94c1b8530ec0dd9743fa10b08218cc2d1958ccb1699ec88ca5afef6f00e27385082037cf4ccc182406f4980a53b6fea3c2d29c0b474e74d1d2901ec0a298088212fd104214230bc103757c18dc2e1e29a7c97a0bb3b73a796b838176e8c049f9f1b2ebd1319e781de288ad306c207814b0e68e17194f5791f0d3767c08d9a73f0ccbd39792e17ce970cdf237377485caa9eb5431f24e2e6f4dc282b2e2f804b95e7669267fae01e75b957291c8bf42202735bc12fad70da907cf08c7bebe0b9e8386b773ee8e7462ddfc4c7bdd0238539c6badef7e67c21f13d3557f7e74aa9718f76f74aca21ec8ff719b9b038dfc3e33853f3be42ced2f9a5423784bdd312f7e6c07321716f6d7c57931ba97c931c676378a6a5e3accbfb00b93a3aee54cf57c1c539f05d3f1c8f7eb8888cdc23432ea22d87e1d4f76e5757e74a797171beef5ae168a4c16f1172c33d0f25e74c1cbe6985238c86f7c5cb3b73a996b8b035dfabba4514b889acdcd0f64e51dc5d14978a76ac2df04136673279254e1707c277e17173b61be5e5ace5f041164e9909efdbe16894e4b798b8baa93b65c0e5a970a9f2b817f148109c36167eebfb82e27b70ae8ecf9532e3eafeb8530c9cb725cf9502d39a5316c6fb9e386d137c908f9316c80711b8bb1dee5421276d8d0f3ab9bc32ae9598bb63e3520d706f749e4b8db346c20745b83b11ee141c7767c39d12e49c51799f1e7787c7a5b25231ee713c5213a711d773f999dae11a6df15c51ee8ed09d22e47ec323297077bd5367cef97477c29daae316b1721349b9b8366e54d10dcb3c94172d3dcebd7cc6718ce9f0be2dc7d9d1fba6ee8b8aef6970bcf9f05cc063119ddfdae0e61cb85126dc23dabd32e0ea16b852335c5d0a57aa8e7bdbfa2e3397b774a938b83815beebeac6a76f7ae31e39dd2b3b37dce0a1e05cdc08dff5bbb1806f52e3c28abea7c40de33cd4053737c8955ae04ea7bba53bd5e7ee64b8537edc5cf04a49708dcc782e068ee113df8ba74de98369dc30cd4391b946643c9702f788c9bd5a73e319efb4c1f10b4223147e0bebee5e77aa82fbeafa5e0fe746ba0c8f44e578e4c245a43bbe30f8de94e3acf63e376e7178a6a69bc3ba52109cb2aaf76971dfe391b0b83729cf75c30d337828339767e452e1d1aa737573dca9a73b93e19398737587eed40037eebe898aab2b73a58eb885f34b3868c9703432e0b7a238e603dfc4e7e66e370a022d0dae111ecf35c1c5e57755707745ee149dd336c46fd9ae0e842bf5c63d8a72aff4dc9b0ccf65c88dbe6f9aba476fee55131746e77bbfd3d6c56f1db9319177eae1c226f89e1b37cce1a164b8ba15ae94d57d617def86d3d60f6a712c02e0b7cc5c9e14d74a81ab7be14ae9718f92ee55989bfb72a350b8bb04ee540c1767c78d4a728d04792e36678d8b0fee706f777c9795b3d6f5c12c7a1ddc32f14c5b4e5b19bf9574d2bef8e00017c7c28d0dbab936ae54d2dd9171a9926ebc7aa71a8e312fef7bba3b3d77ca8c9b5372a332b8b728cf65c349dbe2834df748908b6881bb03e04ed5b9edf24b7f2ea29b8b37aa818b73e346dd8e45b2dc4457ee2debbbc61c3bc6339d391a51f9ad2aeeedeabbb86811ba3805beab861be9bc93eee236f8ae35ae0ee94ae9396b453e28c159a3e083742ecf8b6bf5e5eeba2ed59953a6c1fb60b8b8386e54916346f14d365cdcecbbd6dc1d1597aae8088be07b6a9c360b3ee8c7cd8537eaca2d82741305707146be2bcf31bff8261d6ed8772a74085be17dbdbc2dae5597bba3e14e0172754eae9408475b9e0f167275b92b05e7c60bde291e5f7fbec7c030d8d5fb02b847dfab24d7c88fe74a738dda782e076ed8c2430dbab91a6e541da72df85b552e8f804b25e848b3e0b510396fe17301ba3a29eed4ecf2baee159273e6c36bbdeeed8aefd2dd1c0f37ea7779552ed50b77e7e64e6171942dbd2fcfb1e885dffae0eee8dca92feecbd0f7ec9c466f3cd797e30b84ef5db93a22ae54d6e5d92e559b9b93dda82db701fc12ecee22b85341dc23402ea2042e4fcfa532c377c05dcb27159797bb5472ce5a9a0fded11274da04f8201b3787c48d2ae42ec7233971432d0f65e5b45dfd16d4cdb9b95147dcf0cd4355704325ef6486969a7b13f35c511c69715e2bebe68edc280aee91947bc5e77874c44584e426d2338170181be17d0bdc6d78a404ee2ebc53688e35e3992638be12f89e0137fcf350766e44e39df41c8dccfc9617773b311ce37bb41bb1782736274d890f22396d087c508eb396c70799b83833dfb5c4ddad70a7f0b8b03adfe3e3384b7a5f1c5737e74a6d71731adc28272e2f864bf5c75d498df878ae0bae0ecf950ae3beb2be47e8e222f82e222eae84eff2e3e652b8516e9c35263e68c3e51572af6e3767c18d2274715cdc58155747c09502e11a2df15cb88b4b74a39c6e6e841b95c63963e07d7d1c6f849e2b916351efb7d25c5d0557aa89bb3be04ebd70afd3dcd4956aba38426ed493bb43e04ec170342afaad23eecdeabbaa5cdd06576a8cbb8b73a7b6b811ce3b15dd17a2efc1e0fbe058a3e28384ee0dce739571a39977f2c1718bfbcae37b832e2eeb4651b9bc042ed50c6711da4554e7e2acb8b126b46ab838216e2c876391a1df5ae1b471fd9695cb8be25a25706758aff5c2d561dda908ee8eea5241391625faad1f7a4fdc58e49b0c5d1c00df85e786093c14d4b176e5836d4e1b1cbf35c0bd45f15d35ad0d2ece82ef8ae21e6db95727f4c6b8e1ee9daeb8789c3237de67c58d3dbcd396d30891e7ca73d6641ff472dad67c30900babe07b525777c59dbadd224d37d1d285c5ef0571757cdca9046e2ecd8ddae1c624dfc48511865cdc173776c58d6ade0976daa03e28757bc233e96eb3fc129fab0baf149abb2be24e6ddd9c971b75c26943e1835c37d7c48dc2ba65f34b34dc68e49bb0386b667c10881be9782712ced70fdfabe0bce573fdb9bb262e15ec1a61f15c50f795e87b315c1d17778a773472f35b631c5f0f7cefe9c61fdea9cb4973e183b6a32c89f72171430a1e2a82cb8373a9b4b8bc032e550cc79a131fbce1ea70b852825c1e19d74a82db087e09849b6b72a3e09cb5331fd4e0c2f67cefea1ae5f15c14dca8c53bb939697a7c90cad5c52b45c1e5b571add01c6301bc6fc96182f04d235c9c00dff5c1c525f92e3e97f7e552017177595caadd59a37df0cb8d72bc93085787e54add70e7e191b25c5c1a376a76611a7c6f8f1b3f78a7a67b34e65ed570794597ca8d6fd0690be3b792dcec33e53969437c10807366e47d54a7cd86df7add5d9b3b75c5995dbe49cfcd3ddda83b276d870fee2eac83ef21726f273c971f7797776a82cb2be252751d5f53be47c0f1c5e47b4d9707c7b55a735fe39186b83c0c2e951417c7fbae3ab73c3cd3d3dd05ba5387aeee8d3bd5e41e41b957756e4e821be5c2bd51f05c57dcdd78a44277b7c7a54ae0e67eb8517edc3ef14c0edc96f9a5126ececc8d9ae1d08884df4a2429878b2bf35d4a5c5e1ad7cacc39737a9fd5d5f970a50cd10ae1842d7dcf8a7bf3f35c70dca307ee950ba74dd007b30ef3f64c1c5cdc1b370a77a429f05a81dc5087879ae1e68ab85183dc90f64e4f5c1eef52d1b9b726be2b762cd2e1b744b8bc2c972a87c3d894f7393953816fb273776d5c2a265a4cfc8af5791f02501c8beefc969e6b64f55c662e4f77a9e69c35323ef8c3c51572a39eae0e862bb5c74b16b3c9da188b6561679eb078f8ea329ad1f795b2d8eb8cb298cd6131460b0f5f8d0d6f7dddc357c31869d9cae22c2ceaab19ce64d1e825db9d1961b0c6d216c2c20022ec5a91b0b85aed705ecc30d6fa9ad586e192467b5ccc18ad28073b6326a9cd96b69676188b49c6c5ced92c69b45f31bcd53e7e75ff82ddd7090b7933a4f0f59ddd58931506400c694bb9988c568b790bab1dbb77b667cc569e11a3a69134d96256c9b8cfc35994dd0a8b23d9c568cf5a580c73b0a35fbc6751f6adb6613c19ef1097cf767de9153e0f67e47c37cb7d18ca684602d886db6825cbdee8d8394372ed0136f2ed568b95c5ce5036e5da06d87667198b1c1defab36c091a5d83128bfae8d74ec26e7e760498e5a0a68a2c4c9e104cce6a399005594ae5200dbb4c866c39a301eec23aee8e25e177182c9ba2c9ee418ef300798cab399ed73050eb79d342403f030940047055e72d2b7a5979c072cda1ece9db6003c27c7b6e157a0766ccda0a61f2e3adce95e98dd391b0f689f99e9db2dd410e836c410706d18c2d7312313ba854e61084e7a186ebf76b2071bfdfa7bbce7a8965fcbcae81677581ebb8b91f4276cc31c18360043d0de650e6058d1712ae4330cadf5ce05cbf878165bfdb54ec71f4334a425fc0dc79be1201bb5ce8df29400a090d5f10181f7a1c8fb707b1f5edf03d7f700fc08ce7c0f589c41c47006617402f17a08b0ce1fd6781ee23c04823c046bfc0e5bbf4303a9c3d33fb0c613e27a425f3c21239e1001ff80ef71c0e3ac818ac78180c7a19634d8f05fa03869a0fd0d56ffc5cf7fb973ca70e48c61cbdfb0e43180e26d00e3bdfcce1638f81aaa782f357c0d2b9c2b643d0d473f03f065f0e06580e365a07a19aa7c0c48ce13a07c0cb98701d1c340c359822067096eb81075caeaf81608f916b2f816d03865e11982d3b7c0c1b780e459f0e25948e2f4a0d0b360e65750e187e742c673d9e20404e7fcc3c447c1e251c87a2e521e853a1e05aad34f9c47a1cda390c16f013e0afd13eef82d547f82097f029d3fa1890978fc09466f020a6fc2116fc29c37218e04bf85ce99c78d13cf13bf65cd6fc1e0c4e3e44b7073ee39e34b28f22414f22420fa2d069c75a44e3b74ce3a537e84aa1f218d1fe18c1f81cc087cfc085afc084b7e84257e84363f0252d249e007fd7e90163f288a1ff4c48f89e207f1f08356f84131bc163aff420f3f28f4ed70fa6638e34c71c631e22b98e24558e0b5d45e84f882a0f82c52a74fcd0bca73be29f4823238df2c39ddc891f521d470b659e0430874b289e3b3a039d97439d934f92c511e842d0f42fe07647c96fe076d4e3526fc07bf0779bc077d3c961fde0337ce0b043d1626df8119dfc118a705493c96fc4057151871a2f1e00385f9405fae383d2040f28c18e7991c1ed099f3cc00df401eff278d3f60ce3248df800ddf0097e760050ebe283d0749a718df292680538244a7048534207b0682a7045ace30569c6180783fb893c987844086efb3c009c194efd3f40c20793e673c9f12f85cf07cba2c60c5ef21e21750e2f7acf07b029d0ef0ce2e525e4f0daf47d0c945f67a24d0d3e4cc92c46fb0c389a5cd6fb0e57c09f07996f83c1c7c9e0f3ecf9757c086cf83248f95c733c6c9800b2703691ecf9db7033c1738f477c850c0f777eefc1da7b713e55420e9ed94f076febc9d396fe78a9d05de4e91af13e7eba8f175b83813c8e2eb80390fc83a916ae7012d3c1d2c7c783a7a3e01304fa7cc59c588a7c3f40918790de638a708f11a14fa397ffc1c217e0e96e7f05e8ed2cb71e18c6247ce988f53c2c7c97a04bc9c3e303e0e998f93e6e3306589e3052df17076584c0d2f46863f408f47408640000fc7cbc3c1fa37799c4fb47f53e7803aef868377c3c3bb01e1ddccf903a07c9b23be8d18ef46c96900a26fa3c7b719e1dbc87936c16fa3c06980eddb48f06ca29ecd13cf06836783e4d9e07e0d2275fc9a267ecd10bf068a40bf06823510fc1a073e0332ce01a2ac24792b077c0622bc1ae0aba17a356abc9a1cbe4a1eaf86ceab6173ae91e3ec59f155c850a3e4073597407d1aae530819d250f169a2f8344e7c150f4ea611be0a9b4f33e7d328f0699a3c065b5fc5e931c0e331b8e331f0e031a0f318dc39917e8f419613498fbfa085bfa08b0c9e8a087f81925743e62f80bd055d2712236f412116c0f11680710650c6026f81eca7047fcad55700e7d1c0f11530f90a903c9a40ce227f9c450a3d1a368f46c9a339f268604f41224f41a293a7c753a0c45300f514f47e82159e82a29fc0909f608da7e0ea0c9f3f23e627006082226fe68b3713c59b49e2cd1022e1cdb4793364de0ceecb20f26582f83272be8c035fa6ca97e9e1cbc09e0ca22703c8596bf364ec7832677c9e3c27cd49084fe68327b3e7c95440c60b19d89379fd982c29473f86831fa3e7c770f931087c143b7e4c7c31879c31d82146890793c68b19e2c5dc70be1e78312dbc98381fc590180e5e8c9b1753e6c54470c20ef8283dbc046c4840e82508f412e487c1224c0660ae3c982a0f46817b080f9e3b770c5d61e81ed2b3411e3c7728b887dedc4313dc009e6e00520cdda326ee911597a78513bc2b2ecfd0dd4db05be0eebaf46e8ec9cd4111a1c3c55d717184fec505175c18fa97d41f7ef4c1c74f8f3ceeb0aaa36a0e39e280634a2aea5f59bcb27865f1cac28a7fb5d14616597ce1c5bffcf85715ff4af42f297c70e17dc87282f0c679411be7182fdf80956fc0c823c0c3e9933a9b68399b7cd1418743ed8639fe86333678f032f8f918083d0c7afe852a2ba8a08220af02970a68a8c085099fc2953f01d08f30c88f3066810f2c780f3a78e2ffa4f11c34f01c7c793f86bc9f39fc28bd1fa4ef83c0f7813d9f0df434f17aa43c0746e44942e3efccf176aed001f471ce7c1c241f07803767decd987793e4db84f16ca26420fb35603e03385ecd12af66cea789e3d3b8f11634f90ad83c9a328f46cb5310051e6f86d09b313326ebc790f16204bd982d1f46d08b91f362a6783003fc20232796abcfa0cfe380c0dfd0f536e4f10215df82ec5978e357b0f22bf453b0e153c03d09130c02f42208f2825e1f829e07e1ca8330eba08b0f24c2076ae001b9f0805a7840183ca0330f488207e4c003f2f28016f83f313c1f25afc780dfe0cee351f2778ebc1d0e5e4e090f27867f83c7bf09f36b12fd1a177e8d9ccf8086bfe0ce5fe0e62928f41434f067e4fc19d89be1e1c988f9317afc18335e4c042f011f1f8689b7a18a87a18ee7418a27d4e471083e0e833c0c5b0f43955701eb4dd07d085abc075bfc0d671ed00b0fe8cd034af38012783f67fc9e025e4c1d0f87cf5350c19be9e2c534f069def81456781b22781420f81710783852bc9da4b7a084f760ead9bcf1698af831b11f73c08f30e5c174f12b50f07908bd9e2ede0319be83a50f84c68bd0c7db41e3e3dcf03df8f03b4cf03608f125643d1f1c7e8336be0cd2dfb9e2c930f036e0f131a4f128dcf128b0f12100fa3e783c1fd8d7d9e3e514fa38601eceee2f78f3656e3f8680b7c1043900fc1a2daf66857fa180b7f3c76310c04b60c0dbf0e7d9407931761e8734ff01eeffd0f93e689ecfecefecf076ae7c9c423e4e073f2685b701cac341e17d68e161f0e04908be1f2cbfc11a6f08fd050cbc05572f811c0fc684cfe08eb7c18a8f418a07c4c48759e17130f23738f03620f2324479415c3e841c9ecf9cdf03c56790e431b8e20cf0c1e8f17bfabc070b3c1d26be4d07afe6904f63060a5f7c9e32be8c163f46881f03c0cff0e56158f2245cfd0b03bc203cff81210fe88ce793c26fe0e5f12c793739bc06864fc3e75f60f37438783863fc181dbe8735be871b3e070dbe86251e50018f87ebdf88f1690279347bbe0c961f73c8c7c0c6abe0c60fc2f31ef0f17244783166bc98390f8689eff3e6dbfcf083f678365c5f07857fc189a773c5ab80c493e0e539e85390e6c980f11f28f9377fbe4e1a0fa6e8d51cf161b8f83f5a4f0680ef93e7f79cf019e8de023e1e8c9557818b0d1bbf82a0b7a1cf8f80e83fd8e20325793169bc98aa17b4c28f71e36d78e041a0f21f383d9edbdb91e335d8fd056c9e0238de86449e852ffecf19af87cd0b02e13dc8e0d5844f811dafc2d4f710c2cf10fe0866fc073f3ca010fe0f0bcf43d6eb80e76fe87d0b83bc0917bc09b017d4f7c3c7ebc1bd066fbc9b307e4c1d2fa68a0f63c2c3b0c6eb09be1d0d3e0e009fe68c4741e94580e3d998f129b8f912d4783c803c06127c0f496fc293d783e4e9844fa6cf8319f484107d0c1a3c090afc9e3a3e4f1c6f07c96b900fc30b8f02d69f70c59bc0c08750c2fb99f36b1079340ebc99133e86438f468c0f3b3c993d1e4cefef1c7a16ca7817ce7838863c0b0e6c254244c82045cc0187d43fe5e0c63fe5c046196384e105175a6061a88a29a278a2892592e0814b077ffafc530e7afe29073c72e0b859a306030bd04c60868c983011fc13a17f7aa0003afe69f64fb229a488020a1962f8c083248e2814c409268c30a883401cf8d9a3e78d12370b9c40044ad6ac80035bb22420c0929a4c497423aa0d1a64f858e59960588abf94bf14471c71840f3e98b165cb19142a0404114410414414c30b2f0e614a5c4a5c4a5c84081122248b860c1952e242890b252e6eb8e1861a6aa8a28a68a887302c4f3c71c411479861861937dc7043155554b185c7e36d31c30c31c4e0828bff89238e38c20c33ccf888a5f3b06011430c31c410430c1f7cf0c1071f7ce0820b2eb8204488102143860c19bae1861bb060a9a28a2aaaa8a28a1a6aa8a1861a6a98628a29a698628a18628821861862c082a57dc77b02101a406800a17949ecd3a7cf6cb664c9921867b34782270c9e3078c2e00933c313668e97397b8971367bf326ce664b96c06030180c0683c16071c9959831af64ced65c69081f69342828a8254b32633159ec183b2e591293b51f97f83913c318fb98e963a68f193e65f894e153864f993d64f690895db2241683820a433d63f48cc923411e09c2e0098327b64fa0ee80b903c64e047622b0139f3c81820ac33a10d07980ce03741e787a820245265bb224160b43385c2293a7a7375b621843375adc6871a3c58d16375a98b0c11297fc58d8605973050b030b247040aea8368b3d12298fe4f538288f130086248a006207193688e26f82fe06c5dff8e8f9db067f9be26f0d5870460c047fabe26f58bec80e36cef8a238be68822e5fb4c01771799bd4175363bc4dea6d5cbcedccdbb87c8d8a8caf6df1b531be46f53519947c2d81af317d6d82056a67bed6c580240014a9f2b4049ed66b22889f65f133207e46b5c5cfc8703240095312008a1cf99e7e96c0cf9ab8e185d4978799791813071e56661899873179c0802e4cb2844bb22cc9b22482277ef4b1405215236195d0081500a61489038ea327dc136e4a913e219f2c550e38e3fb2893522534122e31720416eec2a38fdc30430c2ec4302486a12aa678820842868e20c2074237d4f05711c3c722f06928eee280d0c462b1580c2363128bd96c030c30c0003f993e66fa98d13346cf183c61f08499e3658e97375bde6cc9ddfe2b5870fcc688b4e374598394a155340983270c9d07e274f98db1e6ca956d66cc44591f3378c2ccf1b2e64a1f3378c204aa205005812a4003080d0713d46a341a0c168631da6c4c8e4c8e361b132699b1c7469b8d0993c663ad068385a1cdc684496bb33161d2239d0734f8e2658e97395ee67889721c88d3254e97385de27479b3e5cd96375bde6c79b3c5cdd1668bc532db264d60b0306c94653fca62f6188fb2ec5196fdc824d264317b6c94658fb2983dc628cb7e94658f4c8e3459ccfe57aedc99150fa4ba323e1e083bc24e782537a72cf74c391c5fe1277d716d7f9cc02b6e2d8913ab835316c033ad716d879c4031ee4ce9810b9c51894f22e08c46fe96e518327d1206d7a6c5096ce1dc84afd199367c18c8b5117202bbb8b4da674db9362c275077c698782535ee0ccd03ff9c577db79c0bfad6aeace899063833cf8787cee5fc5da78c8057a2e59435f14f569c99c187175cda079f85c4ad897162d570b68b4fd99dd979200bb7e87602edb836214ee09e3b9be2815177e6e681231ca3079fc43bc2dabc129963c63ea1eeacf74031e75a7e3f6ecd8413ebcc1982f9a43c67ab3e8b9cf9e743aa3356f049e1a5217d9603678c8d57b2e39431bd12db996dfc2ccdb5d171029738e39747a2c0ad659d58671c5f087c12d59d01f1c02e4ed99557f2e77cc9f9243e8e2f299f247569673e6b846bd372027927ec8857ca738b622790ea7cfd5e89e9ce1478e00547d894575ae0d60e39b1c438cfe2fbe4d62a38b10a3886693ee9cf19e57c12ed087b7aa504ce58f445109c61059fe4e77c872f925b933ab18838bbf4bd7367531e68e616259dc0ab5b5b7362419d0de47380938ee3cb90571ae018bb3e29cc399ba43df15a05dca24f601b67cf7cdf38bed07cd21d7726c403bfb8b63627d07767651eb8e7d2e47c560de77fbeb13b2be3817c5c1a059f55c2a505fa2c23ce6ce0e31ad736e7045a3963a24ffa72d6c997cf29b3e095dc7167b6071a706d6b9cc01ece4ce0631a6732f13025272d8ed76ae0ce4a78e010670efab08e63f8fa2431d7b6c309ac7356892fd75914be7e9cb25f09ebd68c38b138384bc5673c23149fe4e4ced878e0d59d25f259482e4df659be3386c42ba17169477cd6d419e6f049345c5a089fa5c41196c12b8db9454d4e20d6add539b112b8b3331ee8c7295be19ff25cdb0527d0c9a509f059129c3525f75016b7c8c9090cde5a1027969e630c7e129853d6e595887086b84f32736d3d9cc03b77c67ba0efdad29c4028a7cc8c7f9a3a6540fc530fd7a6e4c44a74261e4f4373c2c078a50f8e2f2d9f24c7b9033f20675af1b02e2e6dd06735716b4f27d6e777be79a69c0f39385f51af64e4da183881b7339ef14954cee6105f65bc92ee4c3f1f4e5d5a029f15e7daf69cc02c6798e893b038be9278a5d8994f3e2a7169553eabcdad4d706231b935304eac19cee1f866b945b31318c7a571f9ac3d6726f998c2192bf44a675c9b172715df02cea7be0b5c1b18277086733d5aeb3ab1d8b8b6144e209a5b4be1c442738bb89c59458eafdd279171c21678a52bd7c6e4c44ae4da463881642eade8b3aa1c5f75bc529243981fafa4c231a6e49508dd22db09acba362c4ee00a6718c427e1706d474eac3f6e11d499d55bebe3c4b2e2acc5eed115c7d80eaf14c69d3d792004a74c8157c2e73cf8ade0d280f8ac35eeec90cf0ae0ca0e7920efceee3cb0856bfb9d402acea7fc771c61e12b39b9360c4ee09333aaf049015c1befc4d2e3d60039b1b038d698dc435b5c9a019f75e6c66878a52d4edad6dd3d7067073c10cdad153ab1fedc22a51338c8a5d9f9ac1ccecbfc89ce0b7d99aeedc989b575660f1f12726d689c401dce8bfc699c21ef932638c6ee78253e8e21039f34e76c0f5fac3b4bf240046eed85134bcdad5139b162678c8e57dae30cb57c129df3fcbd388cad7925242e0d85cf9ae2d6b29c58bb5be3736269b9b3301e98c79d91f1c0df9d8579e09d6be3e204be708449f04a5f6e8d8313abcb99595f4be3cea41e68c819a3fccd88f321be4ab726c889a5c519cbe195c0385f2a7c52216772bdad8b6b0b7302954e199d2fa0eae6ee239f33e6c22b5d71d20ebdd6019786e7b37638dbc767d229abe29fbab833aa07227267b0070a706d339cc0366765df0c0e637d5ea989e3ebd02b1ddd990e0fbce20c99f82421ae8dea041a716d3c9c403b276c8a57f27369b1cfea1d5f3bbc529e49c187125c5a099f05c52d52e0cc2aba320d7e4901d7b6c009343a43073ec9ce9dbd792009471899577ae0d6ce38b17238b38fa7a5b933001e38e5ccdfd32cb8364027d0cb9d59f0c040e77f7cc39cb4432e6e873b43e3817fdc22a41328c8add97162357169563ecbcd2d2a3a8174dcda9713ebc849ebba3b086eed89134b846b7be3040a71be60f82444ce84e0c3d8b511706201af8dcf09d472f6c897ceb5a1700229385f499f94c611f67ba514ceb47ada945bc47402119db4375e0b814b53e1b3aa38c28478a53b6768f44965ee6cd00381386384bcd2d52913e29f94b8b5382716956b9be00432b935054eaca22b33e481bb334ef99b127716c103eb9cb5d7e56d7186463e09cdad35716285708b9a4ea021d7d6c009c49d65e2db75677f7cd6ecce2078209d6be3e3045671c66478a52c4ed80caf24e7ce3678200ca7cc887f72e2da203881498e2f2b5ec9767c01fa2441eeac8907ae71c6225f54c7f105c82b2db93330decf036b3893f6d93b87f2cf71187bf24a3b5c5b042710e916c94e201c5786e881b8634ce99570b833311ea8c719d2f049319c8dfad49d118247d2c0ad7139b18a5c9a97cff27367741ea8c29d21f0c00a4e1917ff64c62913e39fde386bc2b78f53b6c13f497067233c30883ba3e181519c32a857c2e61026c82bad70675b3c908eb3787c0670675b1ee8e6da129dc02fee0cf859487726c003b55c9a049ff5c159302d4ae0ccb29db23eff54e6ce983c90cb390edf00ee0c89079a71cef5b5e0daa24ee010e77cbeaf6388c6272d71673f3c908bb35fbe6a9c09e7433f7756e881649cb43b5e8bcb9d85f0c01ece6af902716d709cc042d7a6c209ace0d6e038b10add1af0c432e3da0639815c9c8ff9119d6c9c89c287799c15943141af14c59de5f040436748c227a5706bbf138b8a3386c62bd1716b0f9c5848ae6dcb093c3a63875ec9eaa445f15a061cc3a74f72738b909c4040eeac8e076e9d91cb23d19d61934fcae0da0c38b1b4ee0c8607367165c0071a398c01f04a369c37f9a78e11f849115c5b3cb1de384bc3f7eada5a3881181c610dbc129633866f3be3f8d2e093fa3836832fd59d5d796006b7e8cb9975e4da8238817a8e61ed93c89c302f5ec98323cccb2b6db9b50b4e2c27678c8c5792e3d62438b196ae4dcd09743a61ba5782ba351a4e2c37b7a8c809fc1d43313e2989b34f5f3fd726c809d4e2ac1c9f476726fa1a06270d787350cef0cb27dd39d389872d39611fbc5206b728c9090ce40cff7cd208b766756239716b689c583a9cb9c5cf08b833121e28c4b5b9398151ee4cc903af1c61675e0982337d1f9bb8b6a3136b8f3b7be1814c9cd1864f4aba36124e60996b3be204023ac2fa4a069cbdfa64726b699c583b9cb235afe48f4b1be1b39cb8b3a30746b934db675139c30b3e89833b73e1814b9cb01a5e69ce295be29fa8386576fc13d7b53d9dc0ef4cca03cb9ce10f9f74c3ad1972628571bec27825dcf91adf03ce7b489a1dafa5e5d83e5f3b0e6313bc9211c75710af145e1b9a1348c0b571398145ce8ec970884f22741e486b3d9c5877ee6c8207fab9353c27160367cc7d51d5098be295fa9ca10c9f04c3990bb496e7c46ae0d214f82c39d766e6040a70569db5e2333c656f5e492077d6c1037338656afc531cc7d0ca27c539c202bd929a230c8057f25d9b0f2710cfa599f9ac41d706c309cce0d6d438b178b834429f35c695257a60ee26ef2308b726c489b5e7ceb03c70cd399c7febda969c58851c614baf34e5d61a38b1706706dfe6c0b57d70022338f64f84ddf04a1adcd9920762b935224eac3e6718c827597146273ec9803386c82b15727c11f04987ce98e6936047189e579ae0ccabaf4170f687ca007920ed18627dd2167766e581149c93f02dba341c3e4b8c338f7c44e1da6027d6d4adf54eac3c4fa036074ea09153b6e59508bab42d9fa5e784197aa53f6777f81e72ca74f8270feeacebb30ab8331e1e98c5b5dd71029fb8352c4eac15ae0dc98905c81913e395e2b8350a4eac2677d6c2039538d672f7500677a6e781319c87f18d72caf2958077c6f559039c31165ec9d0ad417062253963ed8b1eb8b4249fd5e58425f14a1b9c32045ec906c79717af743ba3149ff4e494ba4553ce2cd829bb3d93017786e8b38e2e4d84cf62e2160d700211b9b33b3eeb1396c02b35704ec16fc879d617cdad4939b15e673cf2b708ee0ccf035db833141e68c49d11f1c030ce9ef159746b539c58259cd1854f4272ca6af8270ece86f1493b633ebcd218e789be66ce28c123c972d686ef20d7d6c4090ce1da0a9dc03fe7517eab332af9db9ce38beb950ab8b4d96745b933230fa4728415f14a78ae2d8d13b8c3b5bd7002d55c5a3fcbc919e1f82405ce2ef0fde0165539b3644718ef957aa76c8a7fdae2cc3b1fb671a6928f2edc5a9f136bcbad497162917069487c16d5f1e5c32bc5f3c5c42bc9ce58c4270d7067560fecba33240f3ce04c301fdaae4d831378c0b57d62b571be7278a59eafa54f52e34c193efce3d67838b1ecdcd9d66709700cad3e498a6bb39d5855274d8bd7723abeae7c521c4758d12b395d9a96cfdae0cea478e01bd7e6e50406706d799cc0282e2dcf67f17026150f1be0d200f82c2cb786c78905c5f1d5fba4a813b6c42be9b9b62a4ee009c797049f54c79d49f0403c77f67a60d359bbdd436a2ead86cffae2d6b44e2c348e619c4feae0daba4e201be7813232f149055cda9acf72e1ce0c3d108e5366e69530716d564ee0ec8c05fcedcf293bf44f556796f1b30a6eedca8995bbb60e4ee00327ad89d752bab5ad134b8d5b64c009d4bab61c4ea006b716c88995c5b9516d759c40266e110367d6edd6c838b16eb8b41d3ecb8c4b23e2b3dc38ab8baf3b5e09e9cc40bef6c0b50d7102f9dcd9ec814dce48c127c53b43e4b38e9cf180c70d70690b7cd69c53d6c23f6d70ac15700f717169167c160a8731015e29875b63e3c4f2e1ca0879e0ed98523e3a716d4d279621276d90d78ae0ca0479a0ed1826f04972ae2d911348c6591c5a5be1c4b2e04c183ee4e3d83adf396e8dcd89d5bb35274e2c41a78c8d7f92e318a9f82428a7ece8999838d7fd67dc9a97132b8063edc93dd4c539c89de1f1593d695cbcd6d3f145c42bbd6e8deac432e2d63e38b122b836ad131886dcf0e99fa65cdcd177d9b9bc162ed5ef76c73b74ad2a38d6e997a8dc2207dc44532ece84effae3462cdfb4c73dbaddaba7abab5da90c6e053d53ed18c3e17d5aee5103f76ad0af98ed7d4bc794e39b8438ca8cdea7c14913f4c1d7d5d570a5feb891cf3b2139f6ea99e0dc9d1a97aae9461bde49811b927928078e9de19998ee8debbbce5cdd922bf5e776ce2fe970da0cf9ad28f72876af98dc7378a4062e6f8d6b35c1f9eae27b1b5c1d03578a86bbfb72a77cd0ca737347376acccd27dfb4e6e650b851876ece8d2bb5a455c2d53d70a57eb8b1f74d523766f04eb1cb33e152d9310c16c4fb621787e7bbd2b83b3f774a8dcbb372a960b8ba40578a8d1396f4bd2aceda1d1f5ce21661e02642e0582a9e49cccd6170a374b83a03ae9420238097172f5505a78dcc07f7b83a17ae541e37ce7927dc0d637828132eef864b45c84ddf37c5396b4e3e68c15156e77d311c8d68bf55e8f2e45c2a2eee4ed09da2ba3ca64bf5472b8edb34bf04c3bd8f47dae2deaa3c570e1706fb1e117747c49d0ade991baf35e78449f0bd356e8ed08dc2e39479f0be1b8ea114df0baf1114cf7574d68c7c504c0b396578bcaf8b1bb279a8098eaf39df3be058c4f55b43dc38f54e1f5c9e21f70a7779665cab311757c48df170cc36dfe4c1dd1972a91eb8b041dfdbbab733cf65c5698bf3c1417ec540789f0227adea83bedb31bf34c2593ecf142f0fcfa51ae3ee66772acdcd1d71a3129d3724cf55c2e5b170a9f630a2909b03e246fd717313dca81ace9a9c0feeb9ba2deed4ee6864e7b710dd5bd47739b961ec9d98b8b1cc3bf1e0c635dea9cf85bdbe37c4b188cc6fcd396b7b7cb089435905ef4be1be9ef8de9bcbdb73a9ceb8b814be4b10a3aa236ccbf7ceb83c192e1520e70df75c21dcc8c23bf92eced08d397173456e14991befbcd3d17de9f1bd116e917826050e635bdee774a471f0c13c6551ef3374713ddc580df725c5f7e45cdc0f3776c37d89472a7379105c2a218e46637eab8b5b219e89cab1799ea957d7c79d52e0d8349e8982bb63e04ed1a055751e012fa22ff73b1ea98ac31a7aa6317717c29d9a3ad234782dad7bb3f35c6cdc1bd473cd707705dca910ee0dcd7361718f7aaf906ecce39d54b8b725beeb756c1dcf94e6864cef54c6bda1f05c7fdcd0e89da6684ae110a6c5fb8cee8b89efb1b9b739becb772314ef84e6f812f3bdde85e9f99e20370af24e341c63d137497171067cd708b7803c939bd3e6fbe0d4ad08cf64bb61f84e495cde14d76a810bcb7dcf89d386c36fc14e1b1ebf65c02963f33e162e4ccdf7e438eff209c78509fa9ed6e5f171aff21afd9ecb82b3c6e78380ae38e620df84c4c541f05d435c9cd68daa727cb5f95e959b49cf14c2cdbd71a5986e68c443f9702c1ae4b77cb8b941370a8db3e6e78381aece8f3bb5c0d5dd70a502d152e21be11aa5f15c58ced710dfbbe0ea78b85289aeeecc954ae2decaf8aea5b376c107ed68459dcdbd129756117797e64e4d717772ee1417d7a88fe7c2e0ce62f824d45c9c1f376a00ad31bf6253bc0f8261b1a7f719a065e7eec6dca923ee0d91ef027394c9de27e7f2a6ae959a5b149e69a795c70dc73c54172d38ee0dcc733971ac69f9a09babcbe04a4d7171c11b65e5ea66572acd7d4df1bd39f776e7b9dab83936378a88cb8b5daa34f7093ef5388b18dd441f6163bec7c679631def54c2597be383459c3219de07c4dd35b9531fdc5b9ae7eae22c82bb897abbc33339ddb8e59bfab8c7f9387594e5f0be216e4cf44e84ee0e8d4ba5e4ea0a5da9ad53f6e77d355cdc01df25c3cdb171a5929cb4313ed8e4f005fb1e92f395c6f738b8bb1eeed421d72890e75a73a41df05a809cb5423e48451337e4f35073ee919a7b55e89ec62305715844cf14e7f284b854c1bb8b72a752386708bcef77773fdca944aed1d573b539610d7caf8cf3245f06ee8d8bef02e0e6c4dca81786c59478df979396c30775a72dd16ff96eb8c043f92e6dc96b515d9d0557ca897b64c0bd92736f707cd7d331c5f8a61d2e6eea46ed86c5c2bcaf77a3936f62e3deccf82ea6de9e8b03f45d72587179485c2bdfd58db952461c8b9c7e0b839bdbe24ac96e6e881b25c8d53571a7c21b1e79272fee8ee94ef939655def4be318ebe17d5c6ea4e29d30b847b27b45c0dd8571a9901c37a448d24d74e41e4170af5eb8afadefed706315ef94e6ea46b85270dc9d13972a76717f17056758e59f7cb8e1030fd5c069b3f2c1386ece8f2b45e51856f1bdd7bde5792e37aece903be5e5e63ab851605cdc07df75c7dd25dda93d3737e546f1b9f3f1485a9c32e0fbccb82fadefe5706f6b9e0b0c2d34676ef9a60d6e11273751939b0b73a35ad002e23c9ae3227aa275a709861b5b78a72867add00767b8b8296e4c89bbe372a774b83038dfbbe3f2005d2a372ecfcda5c2e2b455fd56930b63f33d3a6e9ce0a1f8704c2abee986abfb72a57cb845a8dc44be1bebbcd3eecc2bdf84e7e61ab85120dcdd77cacc318af902fcdca8c23b4169313969853e18c00d93de498ccbebe35ec57b93faae2737cef04e079c471e5c44af9bfbe34a55b9372fbe2b806358286d88fc9694cb9be0523171432e0f85c0dd21dd293df708c9bd7ae04ec4233d707167be8b897b84bb57503754f350658e4529fc560737fcf2500cdc9c941bb5e716a97213453969787c70ca7d814f272e4e8b1b9be2f2ea5c2a300e631abcafca3d5a72afd01c5f60be07752ca06782dd6378a42977a774a7f85c9c97ef02e2de4878ae9fd6928b63e346d9eeed81e75ac2b7c5cd1172a51a38d2b2bcd6d5b99fde82df55e61ed9b957559cb642bf657475005ca93a37e4e1a16ab847882e222c479b9d0f26bab93937aa891b427927a9abc35da937772ee57570a9a2b4583834e2f35b855c5e16d76acbd5c9b9525adc1b9fe79aba473d1212c782f14c668e47315c44bbbb83dd290b4e9891ef4971a6946f9a73cefa3e352e2cd0f70eb93b442e5504f796c577f12ecee8bbe05ca3329e6b819b51be49ce6923e083876e2ce19d9c9c47832e22d9dd41dd29132e8e81efbae17cadf1bd3fc7a2357e8b8623ad81d712e4b405f25b4ff715c5f7e2dca3dcbdea5ddc9fefa2baba02ae54083e343747e646c570717ebe4beaee1ab85335dc5b99e7a2626a867b53e3bb04b838a5efe2e046aa7702410b89bbcbdd29381746c1f7deb839a31bf5c0bd59f05c5a5ca3339eab813386f902fadcc6f92542377775a514b845fa25dad525b9521bdcdc0d37caeae20edd28a3db41cf54743c7ae32222e0e628b851369c35381fd4f32b06c4fbbadcb8c13b19b93828df65c2e535b954211c86757c2f777755ee540b7777c8a5828089ce616af04d20dc5d1a976ac93d8ae05ec170e7e291e0dc9b96e72ae2462bde49cdc51971633ddcc778a41d7c205cddd69d1a7394bdde17e7176c8ff701708fe2dcab27ee4d89ef0a4f9a1b1f847279245c2a3a2eeef65d712e4e8c1b95a72d8ddf5a3a5f657cafcf0d8378a81cceda9f0f7670a4e3bc01f05c231c1ae5f9ad444723a8df9ae2e6fadc282d2eeec97795e0bbe0f25cb8547c1c33d13725715f807c4f855b2483ab55c8b16888df22e14883e0b5101d671cbc4febe6cab8523ca4286e910b6e22319787c3a5427457f3b18da30ce97d788e4532fc16083727c48d0ae41a7df15c55ee0d8befdadd1083871a73617ebe87e8e662374acb5943e183235c9ed3a532e1947df13e27ee5100f7aacb0d4f78280faeee882bc575be8af81e0637a7c5958afd8aa5f0be066e27f825146e2e841b55c6e5a5b95453dcdd943bb5c2bd9df15d4aee4e3cd20457d7e74a9d712306ef141e696b5e0beb168a67f2724c3abe6988cb03deaba3ab1be04a75700cd3f89eede65eb851709c33dcfba28e99c737157134e2f25b59dc9d0e772ad1ed965ff27379175caa285e271c8b70b989b05c5c173766c531c17c539f9b83e34a0d70cc32dfc4c1d51d5d290d6e44f44e38dcab1e098a9b63e14649dd233b2ea2a7b348919b687779732e55175707c79d7a727156be2b86bb3be352311d86727c0f77a7e191ac5c9e1ed7caced585b95243dcdb13df353b1645f05b716e4e851bf5c65943e28334dc2206dc444c6e21f8a50f6e6ce29dcec466b833325e2bcde58db95447dcc8c73bb9a065c36d08cf44d392bab93637aa885336e87d39dc1b9ee73a746f549e8bd0dd6171a9743784f35016dc5dd39d0274d2e0f820d4490b7e30cb7d01bf87c3c5016fd4948b43f35d4fdc7f78242e17b7e4bb3ab84504b889986e6e851b157573516e949e0ba37def88e3cbcaf70ad0cae14634efb4afcfb1e890df02e21ec1b9574e9cb5203e08c3398bbdaf8dbbb3ba5454ce58a2f7657063d3379171d66c1f7ce0f8daf23d285a172471c1e51172af6cf7a8cebda2e21621e02612e01e2d70af041d8b04fdd69f7b84e65e0171774e778a8413b6c0f7c8386d3bfc96ec38a3f3be442e4dc96b4d9d35e0070d9d49e59b34b84ff14817dc5720df5be1e29eb8b14237b7c48d4244eb776318ef44e7dea6be0bcae54db9542d9c4652cff5c03572e2b976674dea83469cb50c3e88e79c09f15abb8b03e3467d8b1cb9898adc5ded4e6570734a370a83bbebe04eb971797fdc2bd8bd0d7a2e3db476b846773cd7991bb778a737e711081711eca4c9f04123ad13ce9a071ffce086571e6acad545b952295c5c133756c40d97bcd31937127aa7067ec572ef63ba452cb88924380c11f91e00a7ed8bdf4272630eef74e5ea4cb85273dc224e37910137f679a72447a334bf15c6bd3d79ae17ce5a111f94a127e6b459f15b456e9cf24d715c9e15d7eaca593be483551cc692bcafe9e29c7c17094d2ff4c4b871806f32e3c63edee9857b94e822ca7223f09d7eb83c3b972a8cab8b5da90bce9a0a1f24e1968763e2c688b861040f85e59c1df15a456e4cf34eaf61afa3ef25dda8e79d02b837119e2b8f9b5bba51690ef3ce3785709bc33339b93c37ae9505373a7d931b67adce07fb9c33dffbf0b8b3395e4bcfad9c5fcae1e25eb8b112ee8d85e7ba3a6606dfd4c1c50972a30ab8210c0f55c28d6fdec976755ddca9a3db35bf34c3dd2571a9f2ee7a77ea84ab0374a5d6b81de1998ccec37c56dda3a57b35e698597c13a1c390eb7b01dcb6f9a51a8e46517e8b8a654640fc96d6dd51b9532c5cdd9e2b55c67d59f1bd3ae76b8befe5398b60bfa5c03d2ae422d2729bf44bb9cb63e052d97077ba3b15e7b479f041acbb23e4527539e604dff4e71e35dd2b0b8e333eefcb3a69531f7cba5bf1486aaeae872b55c8d54db9522b1c8bdefc161e9f09d7088ce7b2726f093c570ff7e6c477c9ee91d54504756781bcd60847190beff3e1f20eb957b9d316c007cdb83a08ae141047db960fda718b1cdd44ba1bdd78274017b7c58d517127e39178b8bc38976a0b23b0eecd84e7eae3de2e78ae2d6eb5fc529f7bb3e3bba8dc1ba2eff2727165dca8d72dd2e4266ababc3bae9506a78c84f7e97071b6ef7273dbc333419d46c1e7e2732ce2e2b75ab8bdf24b796ec8c143d5b93832df95c4bdc9f15dbd1b36bd131a7716f55a746ece8b2b55747756ee940b3726f14e636e64faa630ae6e903ba5e5dea6f8aea2abb372a55cb8391f6e541f97e7e4528d70757eae141a9787e6523971754cae940737227d53173e128e466b7e4b8c1b8b78a708ce1ff894230acfd5a1b9524cdc232bf70ad0bd757dd7041707e6bb8a38a6ed99fc5c5cd37779708f2cb857421891e8f27a972a059f053797e4465570756dae941597f7c5b57ae0eab8ee1499d388eab920b8b7a7e792e1eeb4dc29423787c895fa72da8af8ada2cbcbe15215726fbae712748be69754386d41fc56edce507823f2dca330f74a86a34ccffb66b83bda9d527387e291d0dc9c11378a901b0ef04e6adc5cde28066e58c343a9702c5ae2b74e38768e67c2e0e610b851808e451ffc1607779775a9c49cb97ba63fc722207e6b84ab9372a5543867b3f71dba2bf14864ee51927b15c1ddf571a918384ec0778c1b4ef05010dcd08487eae09cddf05a79a48579ad44375cf350670e6365bc4fccd5395d29122e2ecb77e9705f4d7cafcd35b2e3b9ca9c477e2ea23cd2b8bcd620771c1e6981fbbae37b82ee1a7c4c747713dc29266e34e29dc05c5e984b55c4d57970a50edddc0637aa8a5ba4771341b9b1816fcae39c09f0beaabb2373a790b8ba23570acf5dd0df6cf708817bd5c1b126e5836a4e1b21bfd5bb393caed4d37d717d8f879be372a348b8b7039e6b871b42f05057ee568f44c5cd3db95174ee8dcc734d717729dc29abcbab5d2a36e74df65c1ddcdc05372a87639196df727375b42ba5e6a4fdf0c1a31b03bd13d3f155e67bbe6b74c873d1b9ba2657ea836ba4c573f9ee0ec99dca73d69e3e88c1e5ad70a9f4b8cbf948c83df2ddab0d8eb40d3ef88d57bcd39ab3287f0b816b54c7738db945946e2224e751a08b28bc8bf1483a1cc6d6781f995b44c94d9474737a5ca9def1c88b8b68c9b1a8ca6f6570630aeff474a301dfb4c67146e8b5e22d12e5267aba3a0eae541a37e6792700ee8b8fef9970c7f229c52dc2e66a1d7261e1f784b851d03b31b9b186774ae01803beafcd59d3f3c13ff7b5c4f7d6dc9178243177351e49888b6be1c646b83b25778a83bbdbe04e95718c89f13e09b462b8b7069e2b8893d6c30779c75a970fbeb9b7109eeb8e7b03e3bb90dcd17824206e38c443ed70ce80782dd8ed05bfd4c2dde1b953631c13896f9ae1b4157d108c8be3e0bba66eee811b95c2b188eab76eb8b033df3b747386ae541e6537bc4f88b336e883826eae8aea42b85251372cf24e5a1c1bc32e0f95c0e51570a944b8a100ef94c63d42ba5760eeeeea526d397bc833c9b9bcd7a5bae0cebc782d0a4e1a091f8c69b9708d06792e3797e7c1a5923a6145be17c5d5e970a508398bd82e22182e4feb5e0110dbe1e640b851646849706f7d7c5703a72ccdfb54b84705dcab3837b7c6954272daa4f82ddeb196c50775386fb4e7f2e0d0c883df3ae486363cd40ac722a4df9ae0eadc5c29435757c495d252d2e2ec935f9a728f9cdcab39178775a3a49c35441f9ce2eaf6b853071c6f3b3c17d63142f005f0296287d3d6e68382dc191dafc5e796d03335b93b312e5592bb7b73a7b23869757c30cacd0d70a3dc5c5cfc2e0b6e8e861b45c7d549dda902ae4eeb4e49707560ae9410d7888be792726f103c17133726f04d765cdeed52c1b9533dd212f7c6c67731b947f1481530e9b93831df75c485c9be67c4bd4d792e1c4e9bd307a3ceece19b5c3816c97e4b82e38cccfb06b93c1f2e15d629d37adf1947a3f0b78ab83c3bae959ce32c82f709727704dc2910ae4e77a5e2dc9ca01b65c6f1e8868be8e81e0970af30b838d9776570da8e3e48c6dda970a7eeb8b92bae54bc3731be0be9e2da7c1716f7f6c77761b9459e6e2227976775ade6dc1d9a3be5c4d55db952365c5c03df85c331b5be89891ba2f0501fdc571fdf3be17cedd012f14c568eb32beff3e31e81b9573168f5b93cdfa552e1be50f8de967b83e1b912dd8f7824092e0f884b9575de88782ead7ba3e3bba4dc1def4ecdb938a7ef3ae14600bee98a93847b84c845d4e5ded43c9717f72b09eb7dcf8b1bcadea9891bb37cd3efe6eab8524e6eeecc8da2e1ea86b852c03396c6fbc6dca8c43b91398ffe5c44514bcec5d571a390dcd90b9f0406371e7d9315772a1e09839316c4078bdc1bf0bbc41c6547de77679dd10bbf957577f14e51706f183c1717371ef14e12dc9dd6a51a73677abc5607b7489bab85c87d29f1bd0c0e6559de17c2dd9970a7e8b8a1100fa5c3c5c171a38e2e0e8f1ba5743cc2e222623aabf44b009c47265c44b41be2f0502ddc1da03bd5c6ddb1b953864e5ad16b0d716f639e4b8abb73e35211706f877c5704c7222a7e4b85cb13e45ecd6e78c14389b9b4be160e7737e74e75712823e47d639c34433ec8c08d15bc538f46bbdf4ae2f270972acee549b9542cdc18c53b557066ec99f6dc9cd6950a7373645ca9dd59ebe1832edc1c1857ea762ccae3b774b8475aee95091757e8c67cb8476bee5512a70d86dfca631102bfb5e6c642de2987cb3be35a91b9bc112e55d5f1288c8ba8e9984e7c530df706e8b9e6388fb62e22084e5a1f1fb472e320ef6443113c5c5e944bb5c2ddd171a9a2dc1c1537aaebf2aaaed59bc3f0f7bdddbd86473ae0f8f27dafc90d67efe4c4594bfa60999bcb73a3a8b83c2d974a87bb9bba544f8e2f3ddf53e086791eeacdbdf1f15d0cdc23a57b2546cbea86213c149fcbabe35ac539d22878ad43ee919c7b05c58dc17712e2de40782eab1bf7bcd3917bd4e65e2d717582ae94d43d7273af98b83033df6be328cbbd8fce1dce47a95b2fbf14a837c1c59d71a362c7a2a8dfb2e16804e5b7a4388c0e7c01b6fb4ae17b5caed118cf95c0cda76f72732c5afa2d0a4edbeb835c5c9d0d570a9063cdd00773b0c27271187cd714c79993f7d971cca86f02e2bec32361396a71776aee14159707c5b542e0b6eb99ee1ca69e6f12747353dc282ead01ee1100f70a811b12f1503cdc70ce43a5b96bf1486ecea27feb80cb6372a940b851ca37c171716adc28da8d3ebc1397b306e583171c6150bcaf763c52e32262724c2ebe29878b93ba51baab4374a7b85c1807df4b74d69a3e38c1f9cae27b78ee2ecc9d1ae216805f0a8f69e4993a38ce2e785fa27b0be3bb925c1c92efda73735b6ed4089737c6b50a738faedcab11ee8e833bb5c6c5f571a304b83c1b2ed520c7d704df8b728b24b9898c5cdc91efd2737584aed4d5c59df05d809c13525e9b4b75c5cd2572a51eb839126e941a37def14e28dc28e79d6ef7e6c273117279605c2b084ea3ace7d273611e7c2f91cb53e35a9db93c30978a88db1f9e29ca3d82ddaba69b03e04695b9ba12ae941c5787c09582e194057a9f0d5717e74a657163956f9ae34628df74e886781ecacdc551f05d4e1c66a06f1a74caa6de77c5cdedb951862e2fbc54169cb79f8b837b43e3bb962c75b92100efb4c5e5c571add8dca339f72a8a1bbd78273997a7c3a532e4e670b851775c9ded4aad396d3dfcd6ec1e3db9571a5cdd19774ae9de3878ae38ee2ecb9dc2e16ee89132b8a1080fe5e7eac6b853486ef73c535e5dd19562734c3fbea9d08d84bcd30df708837b55c4cde570a3f2b811887772e0ee60b8537cdc9b07cf55c7cde1b951531c8bac7e2b87bb4b74a9bcdcb8e49bc688e2d2ecbc56f0164973b5101d93eb9b9ab8303bdfebe3e2067dd71e37dce1a168b8bb3577ca0aad41a72dd00713b9b73acfb5c6cd8d71a574c757d2f7986ece902ba5e5c2d27c2f8ecbcbe35ad5b961927702e3ea24b852449c350d3ec8e7c617de69ca2913f43e421747c58d2d7173766e5414c7b4fa26228e2f24df5bbab3315e0b83cb1373a90add9d0777ea8d7bf3f25c49b481ab6be34e0970d2e4f8604feb8e6b24c57301707176beeb8c8babe1c658b839266e5422f716c8776939ceeebc0febe6f6b852be1b997cd319272ccaf7be380cfff81eef949df13e29b494b8c3f1484c9ce9e59bf61c613ebc0f766f5adf45e6ac0df1c1186eaed08d42741ed1711141b9118f774a410bce6d12cfb4c0b148989b68cbf5f5b2b8afabefb570becef89e9f1b5af050125c1c9def1ae3f24eb854563754e1a142d0f2e0ac25f2412bee538fa4c469ab7df08bab03e34e19396b6c7c7088bb03e3521db931eb9d80b8e1ed9da8f81563f3be293797e84a61b9b91d6ed41e670df7c1086ece851b457537e29122f8057be17d79e310eff4c02d02e5262ae0f28cb8564f7777c7a5aa72d668f8600abf6455bc8f89ab0be24a25729c7d795f205a6bee0d89efca9b4edfd4e6f282b8545ac7d817ef0b73790d5caa1b6e8e8b2b35bba19c87c2e0984b7c130dc7a2017eab82bb1e8f748591efeaecb853518e451cfc569f1bb9782738371af24e3a2c25706f1b3cd71b17e7c58d19babb3a2e95949b50dff4e630bcfaded1f195c1f7a8dcdc1c578a80b3d6e483686e44e29dc45c1c163716c5bdedf15d0adc66f04b32dc723d939d8b5be2c686388f045d44312d3facacdc9d943ba5c2e5ed2e950627ed8c0f1670daaef82d00ae4ecd9592e2ee2eb853519c3329efcbe33cd12b7571fbe6976eb83cdaa55a73ce92782d002e4f844b25c7d51d72a7be9c0792475d1751043734f3505f4e5906ef5be1c22cf8ded4cd9970a3d8b82f43be37c3dde571a90eb8bff14847f84ab861ee9dac381ead7011e56ee8e7a1e81cc2a6789fedac0df241298e464a7ecb89fb098f0bde32fd52d30d91de298c9b93e34a35b9b9dc8d02737148dc18101727e5bb5a586b8fcbf372a97eb8e10c0f85c26993f241aacbdbe1521d727747ee149ecb13e052797075405c2944eed11d1751ef1aadf15c5a2e6fc9a50a7471886e14948b0be0bb36b87bf14872ce971bdf0b747579ae94189717c6b58ae0ea12b852315cdd14778a76432f0fb5c051f6c2fb7eb8b8a2ef7a73797d2ed51a97c7c5b572e0285bf2be0d2e2fe952f5b93c072e950fc722a3df1a73757adc292b3787c6953272e318ef64e7eabaee54999b4be34a057063976ffa438b8f9bf3e04689312c16c7fbce44e5b93c39ae559b8b93e2c692d0dababa1caed4205a339cb76de299b8dcddee4ec9396b793ec8c12d32e526ea9d46869eebe9eebab854005c1dd395f273735a6ed4a0ab2be44e3970770adc2919ee1101f7cacd593f9ea9cdcd39b9511a9c45e16f25a065c4cd4971a3b68e85e3992e386fb0e70a74b4edf9a021f716c3731572dad47c1090bb1be45271b9bc41ee55edc6a877eae0eae85ca92e6eae851b35757561dca900ee653c520fb74a3c130337acf3506b8e4572fc160ef708cbbd22e1dee23c97191727c277e9717569dc29a6e3b7f2be5413dcdc951b15c22dc2741321dd9c9c1bc50493928b23e0bb44b83a3d578a8cbbabba54beab23e34e25b9bc2297cacebd19faaedc4963e283494edbed83619c3214dec7c371f6e67d871c69665ecb90bb5be352097077725c2aa81bf1bc53918b8be2c690386563bc0f8a1b7ef0507a2e0f844b45757301dca809ee733cd2135a3f5cddd59dca728bacb95a865cd89fef1572d658f860096732f04d77eeeb84ef69b9b1cd3bd16eae8f2b35e5e270b8b117ee2e3c92efbcca17d1b168c96fa1b9b18c77c2738d0c792e0d2e2f854b85c78d087c531d1747fb2e36485c9d992b85c4cd715d293257a7c59dd21d8b34701335707163be0b89634ccdfba4dc9c18572a7779685cab32c7d89df759391e6d71112939c67e93137707bc5412dcaaf9a518aeae77a54eb851c93789716f757cd79463adf7c1345777c295aabaa1d23b8d71734adca8438eb1e0fbdc9c35dd07c15c5e2f1505f7b6c6770d707550dca9d8c5ad71a36af766c073b5706c17cf54e6befcf81e0a7747c19d6ae2ea02b953574e990aefebe1eef6dca933ee6dcf73495d5cd58d0a608a3b33e4b556b8a1060fa5e6eaeeb853536e0eca8daa73716bbecbd05993e18328dc970adfeb72abc12fed70717dbe2bea86403c14a1ababba5350d7288ce73ae008dbe17daf8b93e1c652b83c032ed5a0e38be97b4a6e1e3d13a05b647713e14e5922ef2be398687c530f270ccaf7b8b83935aed49153f6c7fbc0b8bc40ee95ec1e79b9572c5cdc9befd2e2f250b854779cb6a9df12e0280be27d46dc10ea9faadca3402e2205ee8e843b35c7695be3b7982eeccdf7acae0e8b3b85bb392bae541b83e1eebcb854464e99d5fbb838bed55d9e3b45c6b197d1f790eeedca730971737f6e54179727e852c571617dbe47c8096bfade15f796e5b988b83c3feed5ebbced9e4b841bbf78a73937b4f3506c6ef8c24391707305dc28391766f4bd252eaeeb4625708f26b857399cb32a5e2bcce53571adaadc36f04b6a6e3d78a6d8c545dda8dccda9b9513ddc8578242f7737c49dd2babc1e2e5522c71804ef83baba06ae540d37f7e6462161a5e5eeecdca9302ece861b6be1e2d87cd7157707e64e0971de8c78aee0397bbd8f8d0b9b7daf904fcdd5d571a77c174775a3784759be0fce8d60bc93063757c895ca7273636e140c5a305c9c133766c4e54570a986b8ba34572a8a1b0f79a71d2e6e851b13e1b499f0c1adabdb72a572b83c2aae15033717c58d0a1e2bf54c16dc9d19976ae9ee98b854affba14732e2a4fd3e58e51e6970afa4b805f34b215c9d06578a8b7b54e65edd70d0ccdd3970a778b89183774ababb1aee5420f716e8b9aa8e69e89b70b8bb27776ad0e5455d2b0c2ecfcfa562e3deb83c57a1d3f6e6835727accaf7c2b8ba24eed4d7a88be79a727701dca93b475a9ad74ae4a45d7d3081bb33e24e71dd5778a4a79366c50799ced800ef63c254e45874c16fd5b9b1eb9d8ab8b731be2be9a4a5f141032e8f824bd5c4590476116970c33e0fa5c1e5f1b954685c23269e2b77775c5caa22c723322e22012e2e871b8be1f20a5d2ba8ab93e14af171c60c79df9a7b1be4bbbadc9d01774ad05913f4c110ee4d8fef4a404b80a31115cf15c059e3e3834edc23a87b85e7e6ceb852001c634bde37c0ad05bfc4c2b128f75b64eeee77a914b83c2897aa84ab83ba5226dc44f24c1e5c1e1dd70ace3de2e322aa7277b23b85c1b14882df9273794d97aa83f3f5c5f7f4dc9cef466d704cac6f5ae2b459fd5601d7488ce742e0841df9de14678cea7d666e8378a6293714f4507db402dd5d1c97eae9f095df3b727be497627737e84ec57161f93d20ce590dafd563112f3751966be4c57351b90df34b82eeec8ed7fa73beaef8de9d63adca0733b8b737becb807bc3fa2e09a2de9cb4db6b117173745c2903ce1aef83618e47455c44476ed4e39d5650e2e486581e8acaf1d5f4bd25b718fc920b1726e77b79dc1d06774a8a3b43f45a28dca30aee5510c7a22fbf05e7861e3cd40627ed8a0f2ab94747f78acae55db954389cc57a260d2e8f8d6b45c1d53970a578d092e3f2ee5c2a31aed114cf65e4e614b8511d5865391639f9ad0beeed83e7b2e3e26adfd5e6e26eb831178e4616fc1618be401737c38da97097e2912c381695f15b325cddd3952ae13893f33e44ae4e852b65c73542e3b9aedcdb08cfb5c78565f0bd392e2c84ef65dd90d043b9703c2b7c2d1d2e2ecd775171ecef99d8dc48c037a5312cc6c0fba05c9aecb57cb84510b889a8dc5b9be712e3e660372acb8d2bbc53efe644b85167dce8e79d902eefe9529df0eb35f53d0fae2ee94aed39695c1fd472dab07e6bca2973f3be162e0fd1bd2abab8306e54b5986ed47aa7204e1bd307d5381a29f05b864e1b13bf95ebf1396d593e58c7e5cd70a902b9610f0f65c3c5e5be6bce69cbe1b7624723167e0b7818667dcfc8094bf23d2a2e2fcfa522e3ee5ab8537a1cca88785fa1d3b6e4836b5c9cd58d42ba37505e12d72aca8d52bc93053797e5468970774b5caaf0a421792d27ee413c920347a338bf4586d69e9bb3e146d971631cef24e8b465fd1695638c7d13143717e746297175b22b85c1bd6d792e236e9ce39d069d332befdbe3ea76574ace8561f03d38ee2d8fef42e0fe7ba42c6ec47a271fae4e8e3be57475b02b65c1d53d71a760c7d906ef03de88c83bf170d640f82008670d900f4271796f5cab0bee303c92945b1d9ee9c93d4a73af8c3869617c90c98d3abc13961be178a710ce9a1a1f14e2a421bdd613676f3a12ae541cf735c52df05d36dc5b09cfc5c73933e2b58eaece8b3b55e4ee84b8535927ec81efa571a39b77aa5d9c9eef62e3ee92dca90d2e0ecb77e5706f697c57d3cd05ba515f5cdd0e570a91111d471896ef997177565caadb0d4b78a8401787fb2e39772775a99cdc9d00772ad0c52d7dd79f8b1be44639b93c222e15d78d7bbc130b5707e74a6171dac27c308fabd372a5089d35a30f42d084c2e52d70a96a3817f349c7dd4971a96aa70c8ef76171c3dfc908ad0a0e6186de57746f509e0b866311333751972501aece8a3b55748b1470130d70791f5caaa99be3e04671717725dca9aadb129e0977346ae0b7aeb83b28776a041f11f788908be84a54a25481a2e2a3f254c52725ca1438076c692305ce9b2a53a6b489f2864d152a6b7c55e450817a73078f1a0ef0e88953258b15296be0509942c5ca94de9b375054ac58799243058a033c7ae2a881aab2c56705ce142b6ea09ea0a4c08172f344e5490e15a89e8fca96356edabc5933a5cd1a2954d648e9ad6943450e1528356eeeac81eae9a1c2c19a3156d04c8182aa32854a952a51a4f4a658a9d2ab22052a4a0f0a8a1d3f75ea40d9e2c64a953756dac0e93db581e3a6ca1a3752e45081524305aacd1b3f6a3858a387ca182976f0e05153c78d1e356a6651b6487963a50d9c284f6edc507923250a149b2870e0e0b102816f4b953752aa404d790335c54a1b38549eaaf47a5b7a56da4c91f2a6d793e2836af324c5ca9a295ea0b640b9e9b561e37ba252c527c50745c54a4f0e1528353e28a82b4d599aca349581a0a9cd9b3353a0dabcf1e39302a60235619eb6f4a0dcb86143258a1b3755de58a1f2864d4f0e15283d6be4b4798252e3b4658acf8d9429709eac5889e2e6898a0fca8d1c2a507af8ec692ad3a5090a143e76e040d9b3a6e9a9d7474d1529602a508301942d53de3cc1819af2d473b3868a149f952a56e450816a2ad3a5090a1428509aca40d0f4a6cd9a3a79d4dc99a3260f1e3d6e7a51f4f0c903c1932d55a4b06103474acf4acf0a1c282a506ba4c8a102c5c70e1c356ff8ccd1c38195377ce6e899400a1f3b707c6ff4e06913054c056a9e9ca8d9d3478f1a35470c805a2a8000029a347173678d9a377ad6e4b183270a93356df0d42960809e007a0468eabdd9b3e78d9e3c76f0b4a1b2a4b7c78992254c022ca9c1c3270f203d6d96282d2531417292840912028e449982144092913f7838e09304009d356ddabca153648a94ded2510f2ace9d397cfebc59e24129d95581c3a70f920eea8d1c356adaec996327494ecd14293d356c0ac031b9ed09c0a8c7070f9e223a6dd6b0a953078f9e026c6bdee839524ba241f179136706a586cf9e397fde249141cdb163074f9358efcf1c386ff4e4510243f27273e74d9e3c6b92846afeacb1a314e3e0a913074f9d00d24e52a1d4bcd103478d1e3c7cd6b4c153a7ce1a357cfebc49b29823c01c9aa176f6ace1008a6ef71b3b6bee84600ed551fb8f36a4b8f2011485710046af32507020262b0386421df8d35588ab0b43b69e8272b470c84aa30f6013ac3289c0608588ed9028869050080d89c24054469010de205a8c5cf111c48340c208840748e807961fb23e9cf0d1f4bb600f3e597ad8d26001823c6c69b000c1df65040fdbdf65e48e340c19c40c07ba70d9a26501051240e0002b55a84c9112c5d7837a7282f2c489010510d084c9004d4b94302d29252125417224808dfc0560fd5095481322141ce284214a1442412225e040448893410439f177e1aec2bf0b27c8132e8d2a7ff7422b54fb8f3158b8f255e3481043548102f5e44da03978f4bc0944c195080e38e04da0397be6ec79f306ce9b3d77ccec9993678d9a234054c14266905773c39b09c6d0e1878a0d993c862c488185275e1c273144f066a8e8e3fb38b23b82be8cec03057a40223c1b326d62609ec0f0e5c1ccda987936353c1ede97b1f21410f22c1cf101961f83f46f9c50c3c28f89e0df10fa0d981eced2831922853cc0b040268db7608267f340144f1dfc5fc668c942868c03138c793a7ae25dc168a6e009367399c93c66314b7098c11cc110fcc05ff6b2037799cb5bd67296b134b15285ca1429517c3da8a7272827405c2145cb942e781e06c49d2a4f0644c172c5d773625284980f93f850cd876662f8722564e3c326420a3e3c53440a1f82091ff8d0810fbb7cc8e5c32d1f6a09b17c1832f0e1022102619570ca87523e8c12f63e84fa3056c52ec6b0424996214604838ba845c4e2e3155650218592582cf4d1888f450cf15108207c883c7cdce1a30e1f73c0c1868f357ca44186a4f285ca12660b16380f74b9523b92ae1db4ef175f2fbe5d7ce2f019c427109f2fbc930dd2884f22ce671129e81384cf0fae1db2cf40c9c1a79fda01fb74e1daf1fabcf346b870edc8243e91f824e133cee70ea9c367069f6c3edd7c1ef199062986cf0972884f223e09389f4224a13c24001a2fc00fcf3403530c02e42f1df113f117a1c42fc41fc4530e853c05f9c8e39f8e200208ad7f2a01263c0125fc20fc7790411a0b1a582001284e0658c2a4e58b1707ba70d9a2250b962b0758a942658a9428be1ed4931394274e0c288080264c1c8031c11a588235f0d24b0f3c20c0050918f092a503a060f0d3ed9f8cfea9e89f6c4fb57fa2fd53ee9f70ff74f44fbc3b68b29a5fdafd12ef87f204c03f1541e029ffa9bf9334babce4e4a597a4f8ba5871c0e9615b9a30d1c2048b962f5cae38c1b2e5cb972f5ebe78f1e2658b172e5bb67c71a2450b962b5fb678f942e509152f5b9e6c71b2058a932d053cf0302654ba4041414145891225ca942952a44081e2c4c9932751a2f87c071c60c50a152ab006600dc01a7858972d5aa244f1f90cd8b2a54c973c5da038e9d2a5cb16284f9c7cf9c2850b172e5cb86cf1b2458b172e5b7a505cb6f4a0b86ce94171e9418991200c9808606296bc40c19e1ef6e50b942f5fba74e9d2850b172e5cb870f1f2c5cb16284f9c7cf1b245cbc3b264c992250b162c58b03cec8b972d50ae5c39e0002b56aa5099f2b02d521eb6058aef615b9e38d9b2e5c9172f5b0c28e0615fb640795893264d1ef6c5cb96274ed2f0d246196390e18014132f6d9821061a658c41c6126e6c2185c5154f44d1c41131e080820b2cb4708209239050c4108042082408840e36f85795017dfc8b8e39de78e1f12f3b20fc8bcebff8bcf8bcf8f09933275bf824c67cd2f924a8bc114cbe64be03703102cf87107cf8250e94952a54a648b15285ca1429517c6ff6b05285ca1429517cbda1941c9d7902328f91208f0478e6b0f913a74e1d3e11dc9160cd80c602254b960da04039221e31c104134c30410467ce9c39b32766d1d3d325023a3d25473e9fcf4eaf67a7cd76ecd4a913b328d325023a0ed08913b9d4e912c10374b613b3b89327cc915773ab83c5c33142c304ce93347b7e33be9e9d337ad87cc58d9c283e2b55a84c9112c597c7501e43790ce53194c7501e43790ce53194c7d0ff548855101040080172c71d7f1462071f8500c2461d43085247b09039ca08c211061c68680147137e1801861084fc88a28c20022114061b6b9c5106a12a0c955145708a26a6880210434f049b1802904100b963093f040902b2c41effb4041a4b245108a13f9200238921ac9028241824d444a123bc18a29021824114f204c43f4905117c62a30c0b0f460f4483fc9320ff14c83f01f24f7ffc931fffd4c73ffdfe498f7fc2e39feef827ab7fb2e39feaf8a739fe098e7f925ae39fd4f8a734fe098d7f3ae39fca08838b7fd2c2d0144ffc5313ffb40412ff54e89f8af8a721fe29885fcb99386f1c88238b238b238b238b238b238b238b238b237bb25285ca1429517c519eac54a132054d1216c8f0938705373c19049e4c218fc18f4e9b17430887d7d7e9e3c9e47931053c0c73fa50794070fc18295800a24c519cd99b3d623854274a1c19180cc0443034dca9e5e654317ba594283e9fcfd7ebf57abd5eafd7c10b693c7833610a11e18f30394076c89461818c30f593870570ca7800268f315200c2800520f4002a5304688138333905bcd96302a5180ec56952274a1e3a716464ae80c1400c1d30518c1d30349c9963c602987549d86a365d0e7733b2d56631d82be6395d2e97c3e56e39a39c2d57cbcd72b11c2cf7bac9044f8f868007d30713409fde83a93d98270f86f667e67830b307c3420e88cff5f0391a3e27c3e762f81c0a9f2be173247c0ecde728f8dc049f4bf439449f83e0735d3ed7c0e7a67caef739a7cf41f9dc93cf39f99c019f23e0734c3eb7e4734a3eb7f4b9a4cf217dce8ecfd1f1b9249f8be373549f7be3736b7c2e8dcf95f139323e77742e83cff5f91c9fcfedf99c9ecf6df0b93c9fc3f3b93b9fb3f3b93a9fa3f3390d3e37e773723e17e773703ef7e6736e3ed7e6736c3eb7e673bacfe53e87fbdced73469f2bfa9ced73b5cfd13e373b27fb5cec73b0cf1df9dc149f93e273517c0e8acf3df139273ef7fa5cf8b9f8b9253ea7c4e7f273487cae3f95a1c23fa1f04f393c1122b3e5c96879d2f9f0c3fbb0830f63de872f4befc3ee7d30fa1eb67a38f43da8f13d80710f44f4d0e777d8e375a8e07548e075e8bd0e4eaf83009f831d9f031c9f43a127a4c41322f4846c781cec781ce6781c0a3d0efd1b0af91b04f91bd0f81be6fc0d6cfe86347f8398b7a18fb7c1d0db40c5db90e46b10f43570f0311c8a618c8fc1cbc310c3bf30c50b3ab890c4b710c5b790e75b70f32cf0f02cfc6181cbb340e555f853702305101e85362834f026d0791322f8417f7e909e1f74e70729fd20243fc8f622045f84425e843f5e843c5e500a2f288417e47b41ba17647b410d41850f41cc8730e53dc07a0ff67c20e00742e303f179405b3c202b1ed001cf4121cf011ecfc11cefe7eafd70f17e98783f1fbc1f3fdf4786efb3c2f779fa3e4dbe8fd2f731f27c7ecfa7eaf7a4f07b48783d4abc1e0b5e0f9ad7d3e5f530f07a10783d535e4f019f87ced789f275785fe7f674e6783a514f078da713051d364f67e9e334f938b28743c8bfd9e3df58fd1b43ff66887f73c3bf39e1df44f9374ecfe6816733e5d9c85e0d18af66cfab59f36a247835bb57533b8d219f26844f13e8d3e8790cb81e03448fc11e8fc11c7fc1067fc19dbfa0ca05b7b700eb2d10f416488086c9a3397a34b447934f01203f81d29fa17a32793c99329e0c154f66d09399f3642e7832579e4c952773e4c91cfd18e0981763f56292783136bc98412f86ce8b79f362187830573c981f1e0c0b0fa6840783e6c130f060a63c98263ef8f074d4f8276b343820d07ff6b36783f1c879c3a6020ace90d1722510a03f1cf8e9c3678f9e0df2e0b963a70e1d0de6c88903e78d9b366c9a58a942658a9428be1e142850a0408102050a941e1414141454cf4a152a53a444f111d004eac94a152a53a40c0535141425063cb9a9f3e78f9f397ee66881c08b170abc78390345454a15a82950517c50bd252d5056a828c97dfce1e30c1fa39882b9bcde38341e2e6fb05450663260ea78a9037160f8fbe0c9f29a9df6f0c9b31d3a8906cf9aa1ee28f04a74557e2a519618608aaf7f49ca52ef5ff22de178321e96fe526ef1af49193e63f8842159f85ce19192640adf24067dfef9ecf3c9e773cfa79ecf3c9f1b2095f069e7938747eae05383cf399f723edf7caef954f3c399904f3339e64305bcb80f19527c8c024980c4f34848f34102e0918a7c96e90374fe389f177c5af089663748f929e653827f8d99c7a492081e70a02eace531705551d4de0808426f94c41b41f1466abc51ef8d2220e3617cf8bc06fdebcd472170f8f8c5472f3e5e11c7f82823c28ad8b8256b784fb6f9588b4b4b805284cf0e3e01ad811c2d77c0d4810002375abef399c55fc555acc15f8eb2a4e5871a6a69e9ded24b57f7c3953ae4e2a0be2b859b4373a36eb8318d77da736906bc561de78b86ef95396b7e7cf089ab7b5da90a4e591befabe2ee8cee549b5326e77d2fdc1c1137eaeacef0782d40274cc9f70cdd9720df63e13843f33e4427ad880f1ab946843cd79bab4b74a7badc9b78a433670df64107eeecf75a1fdced78a429ee2e873b85e846ae7722e2acb9f041136e38c243fdb93b3d2e1502b7403c93948b0bbfeb821bcaf05027dc08c33b51396d4afc16ee9495f1be284e199cf7b970f89ae37b1f1c4f2497c08d0a748de678ae307707c7a572bacde39932381619731371b9bbad4b55e6e6eedc2829ae0e8d3bb57466966fca736f669eab8a181447d994f701ba3c2a97ca85fbfa7daf84abe372a574b83c31ae159863110ebf25e8b6c82fc51baf7c931ec36459bcaf890bab7d0f890b03e17bc0cba3e15209728bf86e22a77bb4c74534e5e664b85173dcdd0077aa8363111abf35c33dfa72af5ab84655cf25c1c5a171a364479812ef9b5d9dd59d9272751d5ca9368e47345c44bcc334e19b4ab8619687aa7267e191a0ae5116cfd5bbb9d78dc272ca14789f075797c59dcadda3debdca737584dca92d47190def0be2ee00b954582eefc9a522e146de375571774eee9408e74ebe64dc9bd373c5708fe2bd52baba19ae541fa76d8bdf0ae0acd1f1c124eeeeca9db2e198467c930c9787c8bdd25d5c103746e8941df1be23ee8d81e702e2de12f9ae303747c08d8a73730bdc280f6e58c14385b93737beab807b5be0b97eb847bf8b88cab10804379196abf372a57ab84754ee959fab53ba527c2eaccdf7eab8382edfd5c38d0c7c131ef788827ba5c3cd555da902ee4d8aefb29db325ef9be3e2e47c171847a3037ecb8a5386c0fb3a38697f7cf0805b44cdd54a748b2cdd4449ee4e904ba5e5deb4f8aea3cb5373a9a8b83a25578a83bb7be04efd7023a0775aba39de8d1273c3221eaa875b139e2977d250f8e0ec26946f6273714cdf05e8defe3c971c1787f45d7dce5a011face0a40dfa202c16c48d59bc531b2d1aae6e822ba5c4ddb970a7f6385f307c6fcc2d82c1d52244ab85e36c84f7755d9e05970a8a9366c20765f755c5f7e81c73886f8ae146a86f8a3ad6c87c70cef1688a8b48e9460bde29b584b830dbf792b8718a77bae0e69eb85159379af14e79ae8e8a3b553b1e5971112ddd8b7e4397c7c1a56ae3e620b8512adca322f7cacad50570a5ee9cb6dd07c7381ae17e0b899b83e146c5712c72e2b750b845a06ea2271786e67b5167ec84f731707958f78a77795d2e550f5717c395fa9daf20be67c1f128878ba888d6d2c569f9ae1d6ebce19d16380c137dafc8317fdf64c431e6c2fbae1c8dfa5b449cb5401ff4e0e2027dd71c47a3d86f197108cb7a1f928b1be2c674b87ff14873ae51a2e79273c7e391acb8137a24064edb9f0f22725f857c4f867b4be2bbe27913e0b954b8219a870273a307efb4e4b4b5f15b4ace5a1c1f3ce2e67aa316b8d7f148525cde9b4b95c5ddf971a91ab8b723beabc722de6f95b9a101efe4c6616c8bf781b94598dc444b4e5a171f14e01e3170af44d04ae11e25721139707571dc29283774e1a1463816a1e02672e0e63eb851639c36287e6b776770bc169e7b34c845d4c08d32bc9395631ef24d4a5c1d2077aa818b1be346c5f38da3cd810f5add1dee4ebd394c15bec9847bf4c74584c0296bf2be3d5777e74a817163d53b8d708471bd2fc92d0ccf8474639c77323a1a15f92d25ae8e852b75c7d57d71a700386c02bf34c13d9a72affadc68f54e27dc58e89dc2dc5befb968b83011be173c865d7c4f768f24b85733dcd91aaff5e6ce04792d124e5c08df95c70ddb640d870fae70c3da3b41717720dc29a96367af2448930a27ad8d0f3eb9b737cf45c6356ae2b9746791f0220a73c3a377cae24624dfb4454c86f388cf45d49b2be146ad717980dcabd871a67b9fd4d59571a7902ece8c1b05bb518c77aa736f7a9e2bea863f3c140ebf6037bc2fbc3a41ee14961ba37c13d52d0bcf14c03d3a72afbc1c697c3ed8abeb72a576b8f1cc3fc173ac7df9209c632d8a0fe270d6ecf8a01277b7c5a53aba4de1998e8e4581fc560f17e7e6bbb2b8b92fae94d18d4adff4c59956be89cec501716338dcf8c73bc57061177c8fea5814c56fa5700833e37db97b44e75e4d717170be6b8b7b44e65ed9707c61f9de93db259ea981ab43e14ad1718f6af7ca09d39bfb0b8f14e5e6f8b85252ee0e883b8575da54f860d7dd1dba544d6e0e8a1ba5756f2d3cd720c759a0f7056f8ecf8dc2e216cb2f6d708f8aee15943b33e3b532b83a0cae1414b72e3c1392b386c60783b8b72fbeebc8b16883dfda7375425c29accbabe0523d71c29c7c6f8b1bd978273fa70d830ffe716f619eeb897be4c0bd5ae16814c06f2d717177be0b8d9b3be146b5718cb46f8ae2e6c0dc28166e48e7a132f071709be49766679bfc92efac6d7d108bab4be44e41706f6e9e6b8cbbbbe14e5ddddd0c77ea8f7b1e8f64e8f296b856536e18e6a1b41c8fceb88806181643f3be28f796c2730172756edc29265757e54ab5702c1bcf84e6b4f5f15b502eeeca7711ba393a37ea89e3ecccfb08b93c24974acf3d7add2b25e72d80e722e1ceb6782d339717c2a582e3462bdf54759bc833cdb9b92caed4ebac851fec726f847c970367ed0f6eb9bc44f7cae8086be27db4cbabe25a357018baf13da35b129ee9766f083c170fe7110917d1ecd8289e49827bdbe2bb8a1c8b7af8ad41c73089eff5e6ccb852456ed8e49dd8b8a10f0f758316995376f53e316e58c03b1dba4759ee5509372ef14e65eead8bef327277be3b85c2cd6570a37c386d0a7c708e1b9d78a7096e8f1ade79a8363712f14e101c23ee9ba6b833f148667ec14c78dfc7a2117e0bd07dfdf1bd142e4e82ef2a74756bae1415370ce09dbab8b8186e0c8593a6c20769270d910f36707731dca93ece1bd27399707179be4b8d733d0ff373caccbcef848beb7d970a278d860fde0e6366dee7bb2f44be57c33dc2ba88bc1c654fbc4f891b8a79282ef7a8c9bd62736761bc9605a70dcd07fbb83b2377cacecd31dd283597c67bad230e6345bccf81cbe3ba57478e45527e4bcde50d71a9b68e35043eb8e616917213415d5dd3950274b3f74d702e4ef75d1a9cb6df6f3db9474ff7eace8d20bc9300f7211ee9cb85e1bed7c49d3df15a4d379ef04e50ce970ddf3373e3a177fa73a48d79ad426e11dd4d94377cbd931267ad820fd6396b6c3e98e71eddb95756dca8c03759dd98f44d5e5c1e974bc5c3c53d7d170a97f7c2a5eae3f688674ae03863f33e436e88e49dbe3816fd7e6b87cba373a9beb8a1020fd5bbbb32772a89d3e8d07379b9b940ae1402d7288ee78ae0e69a6e149b5be4cdd5c2ba383e6e54d331d7f8261f8e456a7ecbcead995f32e1c640de69866bf4c773a9b991828752c86973e3b7965cdcd68d3ae0accdf141246e99fc92d38d64bcd39dd3c6e4836d9c3210de87c30d1d7828052eefea5ed12ece83efb23a6d247c307867307c12696e7cf24d6ddc7b78242dc722addf12e2dea0f82edacd1d70a3fe5c1d13772a9eb5013e48c17d39f13d375787c79da2728dd878ae2e9787c7b5a2738f0eb857814e1809dfeb3a1e29711125b93c33974a89635197df7a732ca2e3b7089db9c337b5708cc5791f953be3e3b540b8372abecbe81ee5b95757dcd8e49bd0b8e5f24b1c1c8bfcf82d1e4e1a141f4cba6ff1486feeced0a5c29db63f7ecbe9deac3c970e5787c495eabaf18977a2e0f685674a72ce14781f1fe74b5f2fc736fdd200372e7d131897a7c5b5e2728b3cb98908b8b72fcfa5c4c5c1706327dc1ca22b75e51056e87db21b32f05051ee8eeb52993969487cf0c849b3e183b88b93e346017077555c2aa3bb2bba536cee6e8a4b653b8cc9dea7746fbee7aae1ea2eb8524fdc30858702e1ee2ab8534fdc5b05cf95c55dea9192b8baaf94990bc3f3bd3f6e6ec98d5a73bc05f15c597766f55a1c9c456417119d5b847713e5ee5b3eab38caa478df129777e4526d702cbaf25b6d2eacdffbe11ee17111f92e8ec97785707173dc2823f7161ea97734a2e0b7be3897fd52dc2270ae16f0eaa05ca9116e08c243edb9382adff5c2ad03bf04e88451bd8f7771087cd70cc7d793ef0d70755477cac9c5a1f05d81dcdd08774a8ea391d26f3571230def84c02d92c04d54e57804c54594746be4975ec7179cef59b9458cdc44bcab6be14ae171c690789f979babdd28078eb5bdd2d5e18bf6bd2467edc807c7dc1cee4645706177bee7c73de272af50b8bb3b774a8cf376f45c836ec4e19d183869591fc47207e291ba5c1eec5261707be6974eb8bba73b55c2f155e77b081c696e5e0b784302dea98df3a6f45c279cb62c7ecbc84923e4830a5c5c1e376ae9de00f9ae2c97b7c1a52ae3bc313d170a97a7c0a5a2e16824c06f3d71cca657f2e4e674b8517adc9916af55e6eee6b854bdd3f6c007ef38c60a781f01c79a041f94732ff379c78d23bc5301670c8ff75170717bbecb8dcb6373a90c9db234de37c5ddf970a710b9bb3f778a8d8beb77a1b9474cf7aaccd545dd29022e4ec977053a5f387cefcce565ddab2277331ec987cb53ba547eeeedf75d0b1c269c6ffae0a449f141a5d336c66f21ddb8c33b65b939276e14f0e600b95256ce0ff826ba3cd9a5527371b0ef4a73cabcbc4f84cb7be25a1d70e39a77925ddc1f378ac90d57782841773f1e898b6b44c77389b9392a37aacfc55ddd2803ee2e883b05bcf18d770a74caf4789f173757e546f9b9b92e37aa841b05f8a6328e59c137013a6503bc4fcf8d28bc93d39d15f25a2a5c5e0697aa8ae322fc8d837316dfb7c6dd1ddd290d0e6162bc0f7773b31bc5e5b43df9e01ba78dca07e1b871eb9d863886667caf762cfae2b75cb83ff148145c23409e2b83ab5be24ee5196bf2be26c7a240bfe5e7f260b8547e9c89c037d539befa7c6f81d346c36f85f716c77741dd2305ee1508b7889bab95c88dbf776ae1e294b831210e8dfefc9621e7cce87d6fdcd9782422cecce19b58b8b45feb86bb0a8f04e5ac697df08acbcb4b85e69854df14c4a54979ad3e6e14e19d9adc5d19974ae9e682b85180dcd721dfa3e17cb5f13d40270deb83578e3128def7c059cb0f72b93c25970ad0b1453c13023787e446a1b938436e14d4dd1d71a9beb82adf05c3c515f9ae3b97167bad1e6ea8e7a1e2dc5d2197eacbcde96e5498f366f45c209c3239de97c5f1e5c0f79c4e9b980fea717579a526b83938372a89bb6372a73c381a65f92d2caecece95fae25894c56fb17073466ed499ab3be04abd70da18f860d5c5fd6ed4928b9bf35d61dc5cd69502738f36b857585c1c1d37eac8bd7579ae236e2ee9465d70d660f8e00987b140ef4be01ef971111d706769bc569b333ce09fba4e9a131f44ba392c374ad0f148888b2880cbdbba57015c5c97eff2e128f3bdefcfe50170a9eedcdb04cf65e8ac25f920990b73f33d3b4e5bd46f359d2f3bbe07c249a3e2834b7767e64e29713bc433553987f22de3eeb0dca91b6e48c24301babc2d976a870b1be17b5cb7c8003791921b8378272f37e774a3ecdcb0f74f56ce5820efc3e0eaa85c29162eaf8b6be5e5be08f9de0b17c7c38dd170e302df74c7d5d170a5fcb83b252e55bc37099e0b0aad094ed91aefa3e2de0e7d1701974775ad3238cdb8b96f9402f716c17335712be697061d0b7b253b6eaeeb4a95396d663ef83b6d7e3e78c83963f23e3a8e342faf45c8cdcd70a3aa2e0dcf6b715d1c2237ca7771137c5713f70cca9be35ab93969893eb8c059f3e2833c1c8bcefc960687302fde77bbbb2f2e55007736c86b9970735d5c29dad51971a582e791d645f4c031cbf8261e6e8e76a3ba1c5f4fdf63722c12e3b75eb845f24bb2abfbe04ab971da5cf8adde9ded4ead3994fddef7c5dd4970a788388c5df1be08ee119b7ba5c43daa72af3838ceb4bcef8fab3372a5ecdc1d14976a76715c370a818b9bf25d2e5c5c02df45c3b108ebb782b839aa2b25c0cd59b9511cdc5ba2effa72f68e67527379642e151257a7c49dead53db952836e64e29dccdc9d973bd5c30de33b2171fbc02f79707352576ac9bdb179ae306ece9e89cfc5c5be4bcdb1e8d06fd57079492ed59e9b3b74a5942e6ecb77f17077575caadcd54571a764c72239bf95e7ee58b85379dc5bd5774539d622f8609c1bb2f05022dc1cf04a4570340af35b5cdc508287da72611b7c2f90cb5b73a9acb8a3f0484e8e47285c44b8bb83e04e0171e3a07722e0acedf0c1162e2f917bb5bbb8406e1401a7cd89dfd21d13836f0a747ce1f95e025797e54ae1b0b4c0cdadb951419cb6d907bd3816b1f05b1e9c37db737d707559772acc61baf04d27dc5c04376a85639111bf55c2f166c37321727134dcd80ad708d173c139cc41df44c251c67b5f9d1bd578273ee7abd0f7d20c831d7adfeef2025daa376efcf34e4af7c8ccbdc2e1ac99f0c141e76e3e46ddd8c53bc5b94717dc2b222e4e8f1bc574ac16cf44e6ac81f1c11e6e0e8b2b155e9d08576aeaf2a4ae559a3b188fa4c1b188cf6ff1b94719dcab23ce30ca3fe970a39d77e2ddd8c13b293986577c0f76c37ca7232e0f814b25c3cdd971a59e5c5e0d97eaea18c36f7ae2b4217d108df3083ee7b8b9dd8d92e086601e2acb857df03dac9b8bba524a4e5a161f5c7273775c29a77bd3e0b9d2386d32fc56bcb8d7776170d7e191aedc5dd4a532e078c4c34504c03116c3fbb0dcb0818792724fe1919e5c189fef0d726f827cd7966b24c77381394c3fdf24c2d55571a76cd7688fe7aae057ec80f73d396db90f8a7173715c29265a419cb002bea7c5bd8d472ae20ca7fcd30ef735c8f75cb847875c445c4e1b12bf75bbbadf9d4240eb8d1b7978272d270d870fe6ee511c179101c36076bcafc8c53df05d42dc90f74e58dc18c03765717c55f03d29d7a890e79a7361b7ef3171711a7c9718f726e8b9f0b83b3e770a8d7b33e4bb20f0093a16d5f05b2130f539d68d67aae0864cde698d9346c06bd171c30e1e2acfd5ddae949b7b96f822e17b592e8dc96bcd716f857cd703378774a32c386b6e3eb8c10d6978a814ae8e77a5e6688970a30bef24e5463bdec984d3163fb8c5e50dba5473dc5d22970acce5f170a910b9bb272e95ecee3eb85351d7488fe742738ff2b888a2dc5d0677aa8ad346c56f1d1d432dbe17bba5e09752b8b82c6e4c8a1bdb78270e2e2eca77b1706f7d9e8beaeeb4b854bc5b37bf64c3b10889df32e1ac09f2c128aece8c3b9574da00f860195727c69d3a7273756e1414f785c7f744b8d18f7782e1ea22b852411c6513bc0f859b4be2461972c3b8b82fdf15c4b1c884df0a746824e8b710d16273cfe291da5c1e13d78aca31c57c939fd3f6c36fd1ae4ecc952ae286671eea818babf35d64dca3ab8b88817b188ff4e7eeb02e55987b34c0bd5273de983cd70ab72d3cd3915f3137de57e6f294b85652ee0dcb730d713ff399c7bd8a474a7377765caa295a4d9c4658cfb5c1cd0970a3da5c5e994b95c4ad0fcfe4bb3a0aaed412f7e6c7775db927f148634e5ad4079dee4d85e70ae438097f03742bc12f89707164dca8f04612dec980fbc33d5272af2638ce3e78df969698cb93e05219718c3d795f01c72234bf45a768c0fa1cce8ebc0f8e43a3237e2b788f8cdc2b2c7737c6a5423ad2a8bcd61f5a5dc7fa79a6d7b1e8c86f9db9d184777a72717cbeeb8d8babe2c69838a6d233a570da0cf8a01b377cf24e5187311ade97a587c58501fa9e21c36086bcefc8b18880dfb2e01ed9eed5937b94c0bdf2e0c262df2be2e67e572acac50df05d201c6500bccfce0d013dd49d5b64819be880ab6373a5aab8af44be67c3e50d70a93eb83835df5585961d371ef9262db4ce1cf3d037fd70a3a177cae0dec523c539674cef93e3e6fcdca82d4edb950fd27177b73be5e6e2c27c97119756e4b592b83c42972ad1fd8a475a73a405fa603c8ff45c449ffde09966a74d8fdf72727948978acf51e6c3fb8ab833f0f9c4d52172a71e38866c7cafe8f2a02e150a77f7c7a5ba726f787cd701370af14e5f6e8ce19daa5c1d922b95e7d28cbcd6125767e84e19dd9b15df853b6744bc16efee96dca93f1796e77b80dc23debd9a727180dca826376775a5a09c36397e8bc93d32ba574e57e7c49d7add78c037d1712c62f35b774e1b9d0f22babaa52bd5e7164172130170dacef82da5e3d1d44554c0ed975feae0ea14b852325c5c05df05c50d7dff74805693ab53e34e29b93c2c978ad0f155c0f704b8b80ebeab4aabd0f1d5c1f71ae8193717c38d92e31ee1b95786ae8e8d3bd57473875c292e37b775a5c65cd89cefe9b1e4e586373c140b772c1e89cdcd15dda82fb7647e8984bb4374a91cb83ca34bf5e69ccdf05a1f6586bc8f8cabeb953a73d6c4f8a00ff7488f8b48caddf5b95369dc23ddbd8a727770ee941647232fbfa5c5cd01ba515e5c5c22372aca51c6c4fb92b8f933e1b911907792e1a4597d50ca3166c7fb26b8af3dbe4782969b61b038de77747187dca8ded501ef1498ab2b72a5e8306d706f0a3c970ff7331ee987e3511b175193d356c76f11708439f03d346e4e902b95c0e5fd70a98067cd860faa70ca02795f189737bb5419dc10f74e551c8d20f8ad2deed1997b45e876eb99ea9cb51f3ef8c209e37d0f8a1336e57b60dcdd963b9583160ff715fc9e0ef7f6c27321bab8dd77d1b93a3257aad0c5dd71a3928e323cef93e110a6c6fb74f7b6c27309e24b73c3410fc5c13d0aef15d3310978254f77f7c6a52ae01832f1bd3c86607c6f76cc40bee988e34c82f75d5d9def4aa1708fe4b8889c9c35253e58c3f1a8898b0849cbcfddc5eed40587b1f07d49f7191ea9cac5f97063365cd8dff3e1ee70b853839c37029e8b85e38b81ef39b9b838dff5c50d8bde498aa35193df82e21ee5bd4ababc122e551dc7a2057e8bcd0d9dbcd31b37d7c38de2e3b4cdf920213772f9263f6ea87b2743f76876af0ab8b93cae14d4c591f05d7df890ae6e8d3bb5e4f27ef7aa5a045cde11d7aa779415f03e3e3717c695c2dd74f24d19dc5c991b25c3c51d71633f9cb2adf7a1717579dca92a37dcf250071c673bbc5678717bdc28253774f350688e45b5df1273da067d50ebf234b8545edc1d0a77ca8ee36b85ef497071057cd7a01ba5dec9839306c3078b6e91253791d2d5195da93697f7e7521dba466a3c57967b93f35c67dc5d20972acb357ae2b97877a7c19df2e2f812e17b58b4e2dc1b13df05bb3b3e2ed5023734f24e5cdc5df0529139c696de27c02d12c04d747475c13b25e648fbe083e14963e183b58bcbe0bbac38614fdfebe230c4e37bba7b23e3bb946ed4e09d72370cf450782eefe852d5b94762ee150dc7db0ccf75c8dd8747da72be7af81e9a7babe2bb6e5737e84a51dd5da13bd57575025ca940b74e3c5397bbab73a7c0b856678dea83858eb122ef537294d5de37e7583b358ae2b98adcc8e69d66f736e7b9d0b838286eec88bbb3e04e417143a7f21eb85441dc1bd57739dda33e2e222b77f7c29dfa9db4323e48c099459e29d0698be083785c5cd277f9b939066ed40757f7e64a5d719c11f0be3a4e5bec835d9c33a8f7dd713ee59bc6b105fc5294e34cd0fbb86e0ce19d06b8b70c9eeb8b630c91f7b1b93b3177aad0c55df05d525cde1ef7eacb0bde2b2377c7c39d0a94d6a8248b1bc919126380510010038021c6186348e904231580903820148dc8246a1a236db71e14000e44a0f4a6289bd332461a2086000800004400100000000004b009005891cf9edb7c2dc2741c46f6f86c803910fe56c5b29688e75d40152f6ad6d4770cf2716b90e719dc30e13ab06fe1a01c029e0ae9376a4d0c55a56fbdfbca2c6789be1db9fe0eccbae1421f0dca1f895728f416657880559307be4c437bfe101a676114b569303cc1e25a1aaf2358dfab3a3856a9f5cfaceb8e6802698b63aaf24267ba3d03042f0e23e5b07ceb77a46ab5fe547fc350a866ab0590c53c20db8b24cec4a1d437a72051cf38ea37256825e1d0840555f7f0d12608bf8356bc61648498b45f671dde00b749ffd09fd940018d559e560902970c7743b11359f03f4a3464bb076ff5fb6dc222019b15614945aac9d5780fddbf2729ca81e23d84e41f24366c974112671dd8d581903c736ed5edf3119e77eb64b01d91eaff10c8581331e1386f389345239df0b2a2259a2513388931e6d767ba555ed64f3e8b8d646757108510a240f174a4cf4fa658f33c6fbb9090bcc238bc6c6dfd4a3700c75051f9bd438c457b2a7d9dcb6d8110ed9986d63fb4c66aabea30d0987bd08ea04df8aa8266ce51d4d92691c1ac86ff385f654823e3173f9c768d8034f4b2250a522de0f8e9360d2e2238e325ca4c9a4d5ade29c0aa991fffa8c9982661901b9382f64d855502f2c50173bf2bd0898224ade994cf7fa87136c29392cb0980539b0739ea0022835ba3cbadd3d3301023cda094706c62b1961a802aba29d7e7d68c95c0665fce4c75a6465e152676bd39b369da979fbf0b6facc552f7b9161b60b34c8949ac42d7931d105853cc2e4c3a3aae0c0d1c1a06866b05a9ea2ac96b8da64bd3103417c6e65c617dd87ea21f39b16fb05bc93e0991f68d8d2746f1a0af2748cc7ec245fbfa6913fe4cdbdf2726641b75048bdea910967e80a1b575f382f215bd2155b1685e5bc4400940ef9ff90ddd5f601c351d9a09453887eebe1578e08ae6998b77e800a478b6f764f671b28dde08a15dbabf0c70ef03f56ad8e4dc0c65068fbea3c61cfb6d92dfb77adab26fd47d04f93a90e4e02990c94781cc29946104ad260da211fb3a6c17e27dd391c26f6f0c3efb40df4d40fe563b565988dbcd8f33b40255861dc59f94585906fbc545a4331fdd672862ed5244b0dfc610f831711ac1a35f21921e2d0b0691fc4b63d3d23220071d816bb35682c7deb781dd81fb7dc36f54f318ca8421c7b118b08833d8f34cf8d9da066775c53fd2eb8d3f526b46ef0abdb1b52e61e6e7d6397affef3e1fab2fe6ffb0732279f26bd5ccbeec25059a6b70e35791c94342dc899f2f9fe72d585d634308f5f7ac3b09749ef5f39d36c59dfd1158a7430057247898f5fe24581fcf970567ff3f54758f1cd886c50f0beab909aef678221f9ca5093b38abc9fd58d241679dd6e12ede2778d3ab893c45e713561ccfc2f4be179ae68a9253399fd71f0619b83f06fb83ff358e5ff06351f2f1c60b9698b327e6b01ac3e5729a53347eda2f7b60b8b855981fe907f12654187960b27f2fb9d34646da1858d13b9e063002c079d4c8ddd5fc71a1e7a8815e8d735f5fd77dc24faee00f07dbbb58f45687c4e909431bb548ec40b783459b634703656bbb1bda7355ff61a2679880d51fe841f0802ad13b9dde06f2866f15dddf430eee440ee367c8fb2532e0b00745e6170ef6079e6efa7dbc58fdecc14081c91ba4cf876d460cfd13d86ed6ab92edb4a09b80c90c8ed7873750376a603beece924bc31a0f047a744c537d27df1fcddeb7cf8ec11c675b66d5b2f0c7c642f91ed86b246f2016397bd917fa0baaaf8983c57b08c63e4ab0d722d8ba08065f4cfc9f42f0b588bf16d63119cd4b97a76c1f2ab53864c4810c6dcb4086746c6a7d8923f5d3bcb34defd589c13490e31feb375630f3939cac8e73ed1b0b0ab9eb590700b513805f3db00a08d5264c9b3831e5e4844953534d9d983a7db059066664cccca2b5fddc33db283df7366df1093d93b3ec7a889f8ae31c34db318a970b7da5bf0fee4e9d52e62ce9f527f1dafb8ae2e34f46cef5227807777c1f04fd3eb23b743b6cadb4afa2afce98dfdf976bd4c52223c77cd53be9cf9dcaac7c1bd29f25933bebd5e1ae0502ff17b28cd3f4d3f3c3aa77d686f264bd385e31211e5ba837b24cd95e6167ce43af199b88f4e1ccbdc6c3c6cef3c8b91d970ef4831f9eb8bc9e3db59f2258c2feeb2dcdf0bc3577a0592ffc13308f64f20fda239da71664245e65bd2dc5dad6bfafe11368e8da10b747cfe514b96bc4f45d30ab6f2390ec87fc21caaf35cf34718f73a60f5d3384dadc13c616b459efc89fdbe868e8327ed963a681df7d15f9bcbbc50e332b864bf1f09732ad757731223d17238f458db638e1e593f0c9efd83dbc05cfa6aedbd7f7617aba8fe6533f07298c3138498c95d14bad49aaf35aeddbf4ee747b663be2db2b7e4bb0d49ef956e04a728dc327bd2c8249efe35a33bfce7cd66443e1b20af32bd9e3fe3fcc9e61a75ab92a2447e45715df14e199a17cca7dd9c4e2a55f6e5df916fb911de9377784fba4d7eba855deab7149754002df81872a46656e00c280dc676aa3f723f6a243c797e043f64b78efe9358975f6cce707dde3094e4e3b35fe6f24f82e3c7aa5593da2f681c727fd3dfffaa7c2fe7501897028d3d882fcac9baea1cf34cdd72eb149e11a80bf202608ec519ae0391fbd9f9aaf37e0a23684c5cc707c4fb19bbd21f2dd91bdfa87d2ff88c211b4a197287d9ea2f27e71e515ece39a764fcff47bd7b459a6e3612edb3d2dbf7f12029b6536ab4ae4490c83bb57e4af6e39e1845647c4d3821b811df731346f7d2d1903028fe13d6c20bda8f5ae45037eea305444923547bc159dba76c15395136566cefa47fed7a0994d56d982f70bceef5bb13ef26eb58e4306e6fcc5a648a768824dc0237c7e1c7da7a43fad03387ecfe3fea672b4a10e5826a6ddc94ead5ef59e54ccc2d11f1db345d77b06efec3237409bb256a317bf52cd1a8dfc0038dff2662f509bdf435be11dcdf5c95dd6cc3ab80470c6de361863f6f332d9c0c8905f0cbb07907cc65de7d517cbfc405fbde8b55ed8abe91df617ad9f453fa691cc7d22d7866e98af1e67069deb2683e317d06e3a39df3ffa3a09b8590239b8e5e4c28d0b278e1c5c09d796e451cd922d8092efe261c4584d19b7466f4050f51de271e2b39f3a51320ebcaf14f02cc4199be7e1fccd27c047f3a22fbb4318459c9177d7726bc395a0ba86153d929ae925f6bd03f3810a319d3e78e2ffdd1b2fa3c231bc0cd9aff692f776cf57fb43a0d698cb47cf96af9f4f729a39ab1ed58b79dfd1c7eb7f2dab362ffaf82782337c51efdcdcc610ddc77c04be06e73b7aa4b6158d1705fb00b37bcb6e693c71f38f8269feff69fe14f339db80e3349bec51353cd61f05516b7da57543a65ad487fcc59fddfb42b9fbb3cb2c9045ecab7810846b6cf675c307f94d0ec0e2537c45bed5e2f28da576caf464b7c12307f5b3c0fedee93018638d91d4f262d9c6ef3ddf665399a1db0b18ddc47c2efb544920e1c73e541dc352bed951783a0f089feb162e789253d7f0082d3eef37d37a1ef68b0a3ea35faa2eee353e861b0b50676916494e046fb2543dc8c203f436f7c17263f49bcfbfe02ed7e3ea84f27915da8b43cbf4b9656c7f5e717cebde51f7237d8beb597ddfb30e5cd9205758e7767863f59bc94c440df86d0e1b1d9ca45bd230c79afde1901c332a6ffc6d86dea2b9431fa4f0060af66e4535bf4c5532a3d4f6ddb3f9e9f8f7f0f1d4e0fb08b9c9a2e341cf09982e86eebe586f44ee7f9543c459fe60b3a1ff91c647755faa9e5fbc1355b8cebe89a67ee217921b9689022efb3b97b9f729ce2351db595f9730fc8adeeae9a746977a0fa779bddaaa7d25d921aa7444f23bd7ab81ba03ea43cd328861e9b5e419d1de50e1c2d6748fbeef9623ab2b38b17687a1d68ecad019dcfef48ec86785f7f501e734f637746fa2f30723c3a06d4c4d8363de2fc3f2d1d4c9d0bbf77a7e80efd25dc2fb72bc1fe3a227fd541943c1ce370b29a31ce936777bc274bbc5857fd4b7c17eea93fa118b3b1d05703cbe47c15a0c9e822ca8fa5870bf0adeff57d0b9161ce782ffc149e0df17833bef85f57840439c7dc6690f0ebf3e9beeb97ca52862b55b0243e721d465e3fcdfcf59122fb4f72e76812c9a6375e7fb23cf1709df10cd7ff83cfa996bd6039f663f867ce1c41b37f773ca3ee2733c3cfd12c0f6e181739b312161fe7672eea308fd71871afa1da84f2e16869bf69fbf47b59eea5dedf8ea7af6f156e55dfdbf0d87ad8fff2f6bfcacdd0cd6eab0d693f5cfd67ca06db5250aed01247cc385f955ff0f62a8ad3ecfcf73cf237bedcea60cd9ab2c754055dd6299be6a747a1a0662a419ac95b64dfb408b6624332d1b0501d764b7a4ef9a0fef764340b96f7eeac3d9b4c42e17bc34958c2c196565cb98916d66864ccd8cce97ccba783cca5935a0b5ad99f09196cd8a3065277c7c49b7d8ec8d764a2fda98a383365bfe9a0de9ca3fccf351254ae3b659c755fd90ceebcdc1a9bcc6f5b44c9b3aba63c4c4960d1312eba3b6cbea6fa6d352ed9bf26ff3c6cf4c0be55576356555e6416517b2ddb54e5fd7c1d6539efd13d5a68c8fd9ff5799a7793f56031fc5a69f25b1d8f403b83a36b0d02e31bf78f48a55d0fd6530a4df8278fd4650e569f3de583423c4e879fb27989f29f7ad9037c237a35a6d4970ff22c4c5f5fcf5b601a8361754d9fa00dd62012a4b0ba1dbdc8fe08cf51efbac9fb1a7d2be926307946c98c73bbb3b1b1f93c21afc4556b448a3cc7e6e76b3990b66273cfb71ae8d457cf809235b073bb773ceb232a35f543b0f9e3bcc4f4fcfff7afc31a873c8bd5b3c2635ccfdd2faeeeb5cf44df46e0b7feaeb7c1fb16e84dfac75b3b6d36fadce1387a847bae6996a09c323e149a9b1ecd1998d87f061938776444f92fbddd3016a7f2af3edccf3d3a843a3bf8c764354386280168ace1f211fbd5e4c3cde985006e3911b85ae637d5aba4df37c04331f83f23abb1d97a164bf6f1aa6efddd6bb207499fc7876aff17dfe35b4f65fdbff5b9074dcc0e7faf693a100aa53f3382672e9628a86366af8a8994b3a2ff4e6f5c13428f47b9e37ce844b28ea79cbc9270fd358b0bfc3e99d266594b4abefaa3c21296f7bce72e6fe6d635ae7464312fb561eb4fc29ee9929d0f5f5b261e0843e983b33ee575bf27fefefed9ec1dc77e9e16f7b47eb84a4388ab298c5263c6debe7bf774da872c03d2ef50cb08e756a6d317f7fd884adff93b55fa7e97737def40d1d377a77b9030f762ddb7b0f72d372f8f7355ec6df73e4e8c7bce3d44abd7300fea5b47169fe8cd1ffc4d1720c87d1e3dc5ddf1e007932017cefcf61737ae348be06dbb2d1d886b3c884487525031d870ab9bccdde253abe88bcce89f6098d0526eabba8537faec0d9dcdd1d96bcf0f1c53b3957bdec464767897d7c1cb0d75c109bdbde45dc34d583968c5b5f929ff371f7f7a78b82ed78b76a86f7f80d4fc1ed66f00bfd81ca0bc66be340efa3c7e9b8a29649677a8bbbaac37f38797732510a2bd739515ee8d2a63afedeea7a5cd67bf6d7cadbd67fe8eea84ba9c43ffa5cf20aed8116276c836e4ff46459f231ec02752e2d4397bf0e2fe86a8fcb56773ece23b7e70d79ae7ccedca5b77505c395fef85ee1efa5e190b9f5f4c57506f2b5b29b9cc456013fde6ec6bd65bdbeaf3fb56d943efbe6a6e68a762bd97f68f543666bdcf7d3b8e52bef06a17368c595dfde36e947d96be31e5d97154f91cb8dee50c7fa9fb916e535b513ba63ed514c6fe22e4bfebc7b2cfc552f9378262d8dec6eb7acf8451eafea076071a9bfdf7dfa066f89631d16b0edbe257fa245fbe1ed86ae435c97f5afdfd6a8b7b0d317df453d237b7b2daee0137ba5753fd6220a1e7b3b5af815bcb9e1ee64ff51a974cac96cf73d688f45ba94b5fbce7e4b4337b80bee48da21e5077363ba3d97a18b459314bbfbda542dda57653d5c1fb355ea41eb62ba9735f5e95917cd0dec2a8dd754cd77a4f4d0967a75fd6a78034fe074bf00ad8953904ebbfc4cb3b8e97179a973e1b498bab763590a37c9f1d9cfc9fdcc706b7ab870d2dc9c505ad7822ebda25cd09dbe94e9efcf1034ffb47bec265522ca4f699d43cc85288e388da81f31376e9dd58e5af1486ce8f28a5ce3107979f14bcfeee3fad86aaefe5b1cd0028fae8b9e3fbfca343de086ef68b417917e873af69e7f61ed4a38097e19c7b88392bc19ea7ca7d65688f79679d0fbcf8dd0dc805a31839bdfb6de3ba732483d3328261e6be7bb63b6843f903f8a9db7e0cbd394f22166fbdaf3e39ac9ebc7be4c36348ceb718fbbd3bfa79b1d2dbe2755dcf9f24842747792c53c52ce4b7b46398a70b418e176aa67d4873830964fdbf57547159f52facef93e7487b3b57ef1da7fb9faebdc65e49bf82f86e1d58305402f80f57cc4c6ae7d1af1faccb8203e1a75eabbb6e996e9b8a1d2bf0fbcace874e058152f83393663936bf542961a8edee320019d6f4d07b7ee802a44b9b0670292cf7b75471f9c85d6bca42e51f9c2e851f9b0b14d49fb3c84ebdf7b32e101e3569a2638c2bd4bd23d754e3a55ac3e2093ecfe836e6edca3512760bf540ceeffcd5d71be6ff6235f65aa997abd67707d74b75478d04c6e9d21eefbbe16ea7cd76fd49e31dbebfce50c5df987e646aba7873a2b4b8554c39fd49bccebd7fedb7568d8e64e9f2938f874f0cd5cf1080f2d6f66e0e3fde0d2147ffbf6923f12ed3f39e39889a5df19b5375ef4db082f951dc8beeb729571d29908b73938acc463abd99f9b139d833513fede85fb54cd2ab7a524f64441d1f89d1eebc33f215f49f723b1d31378d673f474d865c98af33bc56e0c376244967278a46962dea4384576d08d524069146faa064696732687d6439e676b3d7443157a0a53685321d385423faab32778018e3cc93ced734a7a56420110bf434d4610c1085e846c99b55ab06755f62a636edb16530d24c58e4f43500e6da2de3dcbd2b63ead58fbd826a7e89f658feb4ac65de0dad11fa96559fdb8519f65585135539b944d31a3cd71a119c9d5da6289d0dc7576e9b8ad8cc78f7bb5283f0fca4e73d6a089c6edc731c3d12b6c6c76a6e09bedecc9a9e909d281852790a1f80eaab31683c3ffad25dade424b4b0ba7e75264232949816aa88ecbcc7372dc76d110ebedcbb2cf2f8dd2907961f911f342650387ad9353110ad3645eda44d02b3aba5a1b59fa41dc2e799e37f316351d2ff0abadcdac938e24bb8f8588ddf357b250b5c546ca22b2756edee692a0bdc7d56358fc2ee0a189aa794ae3d3a2f6bc3f88a2330c3e6e4a6f8a18daf3ba11f4f2028cfb1fc21de5e0162b4159a472565a58d52f26d3502a609df2d33041ba6d1d5f11ee70a46ad92fc46985c990d7f8dbe72eb36cf8e988a1cbe7b7fdc5eb56e7a7c9b60c23d5fd507179920f2da53f80f9968f7938b53ea36432ae62f45ab5b3ed83d1797d6a0406abd166e2d438ba45871fa3f10de65a5c2d7d2885cde40bce135e24da16f2c9a224f48dbc039c5e5714ba851b240b4788f220d8b8e053ea180869b824d6b845f66012380d2ee58062f475aa69eea26de23c27a9c314b715ce0bdd919ede3cea47cd9a05f04d1c2f650d665658f43d98afd38e7a18d9dd03e165594269977dce9fe827bcd5db8eba7b5f98df0490ffaaed35b3ff92f50a51f951e80b431c4cd460e706a5dd15e04679c62fe90657dc3b81c18ccdf1b0cdcbd0e37ea25daa6511241d322e2a737f87d40884efad301191158a9f96f278f1e2b058ae3c76b2cac0c36eedc2430d91433aa11e8492383162a82f0ee7ba13ac10b3d7f29a657874bbb4d34cb1426dee72d98edd0ae9d0b947592f59d207a615dd8f2896690930d5e70a9a22ffe20e08eaae33ebd51e2eb442e6b54727619b9729550b8358dec4435167440a47985a5d971db203a82b98878c17114e57039beae9c220fdb59cadd2f20dcff1c4b98c2b4e94a9f18efa490427348e42acdfc302cafa144cb8e0e04e533bc3c38a061711d3a7e70f2bf665138af7dc9c5364ae82e2f0d5a815561adb11b3d19c4c26d11bd79532f6b2101650b9e54a83a705ff29c50f0164d70241320fc0157d5dbc848fcdee1ec03bbb073d05b1aa47932db4ef428a48a8708c305afc42b61e9a4695a2d0fe064111b39b14919a94688fa34eb09c9e28420f5b95dce94dc231f60f1cfec4038579d960506ed29571300d7e7b0f81a84841240a53814aff04ad23125af05e9178b8a2623c937d5c2629a375dc306837ab0eb2cfc3849d62d6098b8a502bc92ee39cd66b83b6c474b9e66497e6e435f4f1024b3b367c9c0e535ebfaee5ddccfa1ab6360b410843c2199bfb78ff4855448e57118a84d23f32e13b1735b7c8f8a49420eb588918559bc6afbf51557a8a7278b77ae1f38d69eac203a5ea3d57c2d2411e3538f8f6ba6b907e64e83624ed5d404d6330d367e7879b0651c22f0922e2f0f508405522ca145a4c4e0c0ab6d63a41e55ba5ce1aab02e261bf309e07b9ab4d55ac3f6018d69bcf6d7f3ec4b20e7017428aca099cf7ba19bb4a327645704c0cdbc5b043bb2d54e035ca78a8aa737389276b2407d7f4bb34ec91a8b7a0709efa4f7213ad6d39d8a1a968674c916516cccf635a1090f161bb808a3626108b3ed980a8da7788c1a6d18e8e757d257469b73284336e4f1b252fe365a4d8776c8d9240c9471b7c562803700ee1b4760f67410127d3bf04e614a5ea11917716c4131addfbe282c7271adae922da5634a586980748bd892a6587dd84980ffc8bdbf719b8dea81634bca7b8af773ffc650176456256e76a71ce8c7cbc338c8e7479c2f9af38297f8d6c62df51f0e78994c6ce9ac2e7378d2a9ba10637d5ac581788dbff4b1e4c0f7a4c69e002f848c809cdc8893297019b9b00b60a64e521d07106cf00f3646222a3977f0be6133374073001a283a705212e07cb997c30f148102f61a3c5c22a6ad0271c8bba88cfe1177f43c1b2ae9fd5461e5623fb9a5ff540ae18dae380f2373a72aa680710abdac4e179596ff30eb1f71eb7d2fd48cd067cfe99de14c700332f431784346b430e36dffa98163a6b32ea5ef1b9a6e25fb5695957b7869aff8f6744241bf6bcf94b1b261b151d9a3a1c95581fbef8f0cc3ac99b6175d3ce01148ffaa35f332c64ea5203dbb60efa3e6999495e13a254a27342a7f88ae865406289f1c5007f7c83e66703268d654fdd1d56f67dc822df60790288c240e41ca8932a4ee88fce1af4834aff0ce825408972601430be0b1f5a18dbba6e95f4691e315e0567493f87777abeae12aba0def35f0e70dfea1976ba780e663dc998791f3f1121d7e77bcec6dee0989235b0dfabf59c99d803a18c861e7966dd4cbb5a20e438391f2ab33dfed676230c31757eb6c70f836ba4afff73c0e5bdd0e995ece6599b96bffa413d5f8c02ab2e43bc50a100e570055c792c585798395eb9acdfb405d88bb0d5fdd9e7fde61fa5c1134a4e909950f494c2d313bed7e4241627fa7ae91c6907a84b0d0fd4ca3f540a48200d91e649ed3b913154e71f2685afee3feaf69d734d4013d3226a51240202cbbb035f37fe83c8acfe7f4e6058b274b84dc095d1e2719bcd6f92d70b6115fbee018b3b80bce11d3c473f7bf8f978c62df5a90cd155d4b4e99db7372b189eda337dd72fbef30fa812e2f5348ca782935f0831a2902381b00ad0fb105b36f998aec3edd460b2cc75ed855b3d0105b97699ef7d3895127f0b474f515b832246fe7ded6a55676d09809ace9c65d7af37947601c26fdde7d785b42964156e3fbdf6ba6ddbe42e1666a7d5d13f8b9e0dcb8dd4699416aabaeca73ac627c7f1637fb1706618a831999fb21c0c0eeb70bea5dba8732d238c83ca3343f7092f4e5731dea86d6daabde3d42c582e26b41727a4d15f86af5c2602e955cf5b2a0cfa77048d83ebad57e0579fcbced9034c13c70bb6b919156de551ae6e93d18ede984734193c5ba0383473aebf820dd9c2e0ca29b82ea3f6c518f454ed5477a803cb1d5d79a867d2b00f2d1ed6439a4e43b195032044d8e5b419ccdaedb15d473f40cfee193ee99e1ebc9e7c40d41cf360c0151fe121bea3dfb5a85c252c8e7a3b83695802642d80db84026ae9e97f3d61a69326f88f4f4ec0c82dc8ba2bac7f3b38576840f36ad05b931fbf87243e61ebf97cf31b0eb4c780607373e784378980feb90f5c1feffaf41256a0cf45078399fda3d2718f85ead266c83e7479fd96c997849bb39b85d323ae07dfe0baf5f25d3f6f65f4051837e635f958eecaeff9c7ef47cf11938635bfcfd1a0b6383a7141ccf90fa9d80f43918351a051759bbe742d56a92f77df538040ca47933f770286dbaba8a3f4b99fdaab7d0164270ba366b8d5f9c191d5934c6332cd8d86394e4d8cea2d0d8b5d0e7f2f1120cb4377f91e30bdfda4cb2de8b4e77631c4b239b79399b1cf55d1059201bee1423bdb1634b7e3c7d67a38d2968f257fc0e6fb1df4a52ae2c5d8d7e60d0fc7bdfb200dff47b5b8130d21d7ae8eddf948165e7da58cbed4d3af345d3678cd818f2c75c1470dbe31004ad39e93de66471adcc1e6d706ba7cfce762f530ae7b4d7fd5f50ce43c264abe64de7fc9d157b22147a9d208c61b1797ed1cc2b6d76cae98447b07cb9856192c3a8704d739355a066fac7b4bdb5c954bb7c7964c2aced8d6ca804818659c8c16870ae8c76c357ff848628367ac18908e67aa2de801da53352da933ac51d2aa0ca0a846cffb7caf9dcd6b526f93cbc810e8d549fd1c7a9f77ed9779c9eb45ae77fe356987c51d4e79afe3b7fffbcdac27a393c500d507e5035afefaf3d159c1020826303660cdf676ff47d027b773c103cf5ef36c1864dd7ed2535906ddb50173581938eccfeb3b0a73efeee9d990a0053b149d2aecf4a4a3178f8369ad52d700db0716d60319eb60ccf687154f2878314f2023c5c0140b589ae16358a9c813b80984adce70321654f218ab367fe75bd818aa5ed9bd67b4fca746871d79befe926bd838ee9e25b7a8183940bf1cfc8b5d6cdf12725e3f3fff4e482d2c485a0f486bae8e19d24edcd45d244a8a6c79113ff8926b21a86a92d599f160c8c6f35ae123c6b6354ac557ff201b6a099259028d2071c75cd86698bc2d16f0460657b9a685f96912437b166e13ac18c69858a7a5d56f70837bb7bd1b9f62ecf90119e8e924df0c4c3095321df767429cea77f33e38665fb64acdb39682037e9c1dfc13cf6c398af42dc667fdf0c5b2196eabfef63e3a4cf0c23cfa4a2590f4427da5c72f92b4afc40f043c65e706d6bcba6e9eb10b80b066c1ca8e05c88cdb5d002c52441f1bdbc856bfaa6fff18ffbc1df3e2721f4aa20997f617363b8e7d71ad8f17b04d2b35bf2d46598ee8806a2ebb3a8cccfb48061844332772351ebd8f7d6e8d080fd23f623b66877f627e11e8461b9124c645ece962c371c9c8ddd1f8fba2b9728f82e4b9909043fc3388167da717cc3e2b39b01b8c73b751fe74de870c9853925159f135f105fa049e77f797e799b630f66f4150f15c3f75086e3771fd4aabbbb63ab389c3b966733ceec4e66efc116244d9281dd930adbb01737dd61c0eee7dd306dc42477024db3f3a6ee9a445387f3a929e019992bd87425ff76684066cf256b04c1116e8de693a41c588f760a6b86809311df95a99123f40d89a7d83da212117eb04fdba7d518f871798fd78e53f50dd6e2fcb81e84e7f1cfba74d2f77c57722965774bc2687d01ecd4e743e2ce72b33c0cee1bf9d98adfeecdd9544daa8e70e0acfbb77c5dc06f7dee5a1317467947ae8dbd6b173834ca3c9b1836455d2731c27acc5ad58642d5160b2a3bfecd96fafe4345075c976a19d2615226faa1343c1eeada50fe0b73fb5028a0c30cdbb81bdefe613692b6da8655979170eedfbb6e20df7e93911ee5036d2cde063d50decf8879eb64cd219d986d65acbcedea8192c274e6cb89ed0c9f2351ba7d5426691703463179ab8cb975ef463da087f52e33a536bd8a96027e3f1f016f4070d275a5166c9036d5fa68e258c3a0a3695ccec7258f7e0eedfaf39afb3be531b3378f85ca5d19a14149c69452b741fd663db71a78540e3daca94ecc1701bc661debb10bbb803ac2be4acf4dd5e7dbb565c99ddf54fff56df58d6a9e74cce09106704c27b5933fa1d40751d4f1e8098c6933684623e8736ee1317d57452ef3dc607f71bff663e0535ce2655c980c9d8180d5037ba6daad15aee94e9e053126d4d6482f32e46f96bc632fc9fa10ca6318e692d79cabd87904e5d42a63164b8d074d7356d2326eb24e85ed3995f30fc7bba6a6c75f6bcb2097e0ddeabcdcf4a368839574edad1955b1c6fdc1d7bee1765219ae8d2b0b505039e5ab77821b2e76562f13bf9c4ed4d11181da771911f578dee38c9aa408dd1adf6dbe607f5ed27ed66836973c32f68d46ccfe3ca95084abbf12d9e0f590fd36169b3e68d30e877311615fde39ba03c4a6c3bbb527777e2bfad93007843fb8b032e6ea4b006d890cc05350af2e3ca010fe854e474b5a5eab89b16090530bdae98305d667cb3b0fafeff10bd8f4618cd4449272dd0f4f9d9d4e7c61e6abae97d66aa0e263d93197bb3c2bf061eb38afacfc07e864fe36affcdda1dc6554efb3dc71f06781e99ec522837378d0e97e6fa7d3d48b48f4d2570791fcddca257cc86ef4cae1d7ccdb5d6d8922dbd98cef487d85fbedca7eb8834c5fdb1c3cd7e674ac5bab1fa9cc7ffc5674b9704f36da4b7c1661bb3f622ce2993536b39d7e7eddfd6d8e81b6575a86d60f7f37e9df9c318c310d22fa7cd33d662fb3f65b3cfc8a5342bd7e5f3a54241fb0ed52265585522e4363c4db3b25fb1d9034d2c07f07a09082f2437038e643bf4c9ef8c25df32c0a91be639e2b005daf2b767582e689f104dad3a64cc2bf74b84e85dc3b77a2237beafe25aebde5bf2c4e56f7662ca564dd250c61e8e6059145527f2bad1a28f018125ddeb0afff26e82919c4f47d749be5597a39b1da85bd4db100dc72166b68cd888e49eb399b6f2cae082bcff463d3613b81f3addc6406495fed37496064c0831b66e7f756a394f6452d76f672989add7aa9cff1d41b558a76090e0138b78a6ceff5387bd47fcd737e4d56a5c22cc02df32c2cad7b20fea10f6824a9f07f208f7c0de0de7ff1f7c5d3433d22e5376d46da6addd20ec8bd4b7a2350634c75b74c9015d7f599e8d68a9234a2720fed8db77fa3bfd12c03efc89ff80a61872d96b462c9f632ddd0db6abe3e601d646dffefea8a5b9845987914d692d67690c907f907074c3cdf70a693eab2030563fa58afb3e1d5c984de9cc558bef315ffa74880d3d5b68d40bfbb8635f7fef68d12addbd80787f0627cb9d246c6b2352baf783a382b618f26b0b761abb29baf84cc9679d32a581f13db2b50a23ad633824f6e8bd48aa9ddf9d8b001b45ca537b788a6b68a9bc043e356431d7036d0317ae2c3b1d74d3ffd925dd3d7819992ec58703d18e79f74867b27bfeb62deb2eaf6de4951715e2fc9a2b8fcdfbcc550c6901b244d73ad1514bb9e27fd3f03a85aa274b1bb02470e5c77f69489d2ff654f739d76e274bfe7e36877947cdab279676e3558be73b177349df08de4e7f4e38af59db8d99bce144aece5d08885f316fba467a75f99a71b012e6520d581a9b9ad7b477b9c7beadd4503e585ed8a287337f5d9f4cbf77651bd854672bdff95a5a0e70b0e0deed0342ebf135a58295a9f91753b277748dfb984c8ce269266f5cfba4e6d74f7fda54f6f24b3fed7cf18121057f4473711b7dd3f8b1d3f94db0b97ad85d328943900465d461db35859c9b906c500f38623b8da2c9b7a2c6325716b591182c0f6d6a6483fe0500feb3e3a92682f281a5850854f7b64e15bf5ab8a3f22baec74dfc743e42e16d167b76cc96313db300d6df7f4e08d0cca5d3fde7460708ee52750e0735660fd525bdcdcf67ae8e893a4be3313e3f1ef68ba707d8f54f005fedd565c62b52e65f74caf4dea4069fa9092b2a55b5d18833698638d6a8b125f9c72c5f35e86204ee389b34b7b4cbff896f3bc6fe4856adf38f63a9e428e73c803b92acc9850ddf7d2c8cfb732c021e634da32dff83e28feaf11fd283e32fefe0bf64b70781f6e6b0e73fa55c2bd5124d17988617a35598776f9d45b5553ae3ee34f5989a07dda9bb96a47aaac18164109f34532329b661a7191393a6450deb1e116ab1fb88647e6f978c174ae4138b15c98dd89d61149e1c665cd90816f102a5d77b8e3b1de5daeaaf7637273d894c727dc0cb26bf355a8155950515f02bd95ac19022718e7bd0b8323c7d593e5318d73d6c5f4f39b09c0e1a90c9befc4bf80ed4f1f2a13f43c3b07f5ef1566025af52d74cd34974f365e89e5cca43dce9c810eb5bf918240323c1fabc0a4e55a65544ff65f9854b79bbacecbc2d305c34ac1b673f0a2ccf14f5d18dcec3eb1e6c20f37ef935cf83cea541ce621fde229690cf60da3321d825670ef4b8225fc4c0b60962e1efea5d09401b57a9694aff3a51ef8aa856ef4a15db34ed80b7f1e523c7430f24d547588c6c45fe176778cec1410473cc14d178046972e3b2853a66523354da279d7f1232a3e7c91b0d2fabf140abdab571937bfc6eabe7fce16469f08a3975e47ffe95da06f7f1d554d01375751f5f4c67c0bf33066795b22700be489c0c8620e97b3b0a4e81c2920127bea66032ba80cd79d553980ff18a2ec6b8f81fb43f1947f90134b250ba861875f326d5bdf1d4dd36f7779fbd898ccac327f267ab5ad78b5cd730b19c3ffa05e0a45e6c0178c0b3c6066ec23a6bb619af9b7153cd39ef03cda6486ef91a7b0cf660b1ef1642088594edce6ef7615688e9e3ae990c4dc92bfff9bf060614b638b7cf5bbd0db445f28b73927fa7f377758f3748e92008814f685d4fb8a0e9c2ba63e6c6498b64ef6ea92023f1a853d391d8c3560bd40e9115b2ffd52aae79c7b786abda91abe745758b5732d3e85bd177b6f76e6049e74615ac2586e7e43ac2a5eea89d2ff6b0ef36ed2369d856f91a69654b5a1a6adfd39cea37a76427126348c8ef0cba6b1da05a686aae128f34729bb97ffe2b2458af90f045b32c7064f3dbfb0cff543d3d544d6966008f174257c5d670b5687c57443be26041fdb037abd848790c57357c7b227f11b23934a04dd9c4a8d21d4f77fcd8e6d2b18ea804e3cdc0e547378d0d3b13e2762f096613d6005993ff974c4ba08af1cfb35f8a2daefa8f2fea693993f8c71098fee1ecec83b6a1e33edf42eba917b451ae92a2b7ab000e5e05674aeb623c12defa7a7ff907715bf906177ade73e6c2e193d15a724c54ebcbb5ec8b744e053bfa9fbecfb1468e895fa502570aa4da3615ed2254213fa03d3f6efef09216b9201048b94038df4024bf3f2fa57eb46ce35f26d217f467c1df30e228ee0ff66e77373ee72e923370c37060152ec4766d151974189c5487fcc2bb77e4c6b1d3a31fec1a7accd1fccefffadec3a3d379b1fc4218b8b6c3aba4c608107ae6266bf8f4ed2b97b0e4d48a0c9cf9616e710767a8e3878960b074932c5bc72b67209f5e3fe3ff890f17ebcae687769eb72f6aff76a54bf731bfd4a2323de062d6ff843956ae8b52713f75017ecb671e04d7e5f5ff687ca4d9c0a35acf3d7d2fc479784c6e0d9f969f111609d860ce5295c65b203b1dfd3ce81ea66b85a0b29bc47ee3401f18ede79615c0afa6d9295952f48d7b8cf39104677bab61e3d457de395afe79bc2a03ae398648103d50b024e9f3ffffffffffffffffffa83ffcb66da2b5d67ed19a95494a9297e10c7d2be2db227b29a524534a490510101cbb05000000000048ba5a6bdd5c081147104e104a75ca3ccb4a03144a9b282c8697b749ddd3838f248c930c50285d39471b372a1d4a880185c5f524e24935894f2b14e309cba334a689f4340fadc7184e584cdb59f9da665d9886460b319ab0ac5a8bb7a97fcb9a91313198b024b3ea134a454f6c2e97b03c62631a9942fca5e73c605188a18485555ab48bf02c453b6a62246151a7901d3fa377f0d332e781c6220612963473568fc9dc2c42cbc00749044c1b30c438c2a2aa4dcdd8213c7c96af8d1b1515c3088bf1a66ab31051758a7c9c90ca49c988899e0362146159ee4eb5c3eb0f3a7ce3400d2c6ad8066a6ca1450d062109f95827c420c2b2f424da3dc84829c3060b0ae5241d92101ec418c2a24b53f2a3e4a30e72212ccf7f8a1627739fc9cb83afa2272523267814881184850f3a696835b56b9fac8f1265620061319628a54b56ae5427f3e0ca9b8c8c78248cf18364dc3e55bdde5ed3dc7aee89cd6a3ecbf1f7945452e4ee64e48b0f122382183e588ef1ddd54ba55d54a61e7c9d458c1e2cc650fd3819f4bee7262b85183c58d2ddcd28c5a5dd7ae7950b428c1d2c7f1c53f1ccbb1d11fa109230baa050c238b1abdc1262e860f184d2f3a9a76e2a55f59785183958562dfd2944de7eecd66b1003070be742abd6bf9a5c877e8365a99494a55f7a9661c53658f62463686ac7baae6ab05ca6a3aed37ebab1333458cea7851442ff67cc596981f4245c502895bdf45f241762cc6041ec89fb55d759e83179f095708042715372424282183258109331aa8dbbe1ca744c1762c4606163dad2dc39d46a215f1cc480c192686916b9ed237eb35eb1245eba1629675c37c89564a46402140ac948897277c5a2e89072f3a4c6aa0f72a1ad586c35ae4bd336ff64f6bcd0c18ac528950bb169ab6ae56a5739bd2f7215cb71633cf5973299f29107df89c88747e555f061e235bac882e295532274a862419cf01499367e7cbd7af0ed3ea023158bd1dd4f5bb9929a39f7e02bf9938f1a5d6451630b0e6ca1458d1a5d68915ce840c5722a9995eb6ebef2b88aec0da1e314cb595779d69a5b1ea0502894304e28146357390ee304add0618a05996eb35e7759a1b5b75028144a175ad4a050484e08ffa0a314cbe9675727dbd983b364640b0aa542a1e87d41a1b80c3a48b1fc624c3c75eaac8d261d748c62497d66d1b94d44b9678962e9665c7acc42948e25158ae5704237872a9de38a0e2896c36646b5233fbdd2e927963574756367202316a0504afec40223272216a0504afee4a3327222f241a1a4ff22cd061d9e583acf3ce53ade69ef619283a4e205480ee435bac8a24403ebbc1658d4f0400d2c6a60a0061635d48ba44003144ac97b517242d673e0d5880d0ae5d588088542a134dffe979c2073d7618a8e4e2cc856b9496be93945359c58925d42bdd239fb77731e7c220f521911a9f8a55723c9542a7d9b583a791d42aa9ed13d758726342f1d0d4d3ab772ba61b5d4d015b53f3a220c74646239ed47db5b9d2757c848c9c24499a346e7a8814c8e9091120a5028613c06282614ca2941af02eb41072696734ce9cdd847a93acb46c9a3901c221d975894fe6eaafdcc748f661d96588c69a6b31fdbffff9d2e28141ce78442297965e34665031d9558968df242de668c1d364a2c476dfb28d764149bf78e492c2b792f5a5f4851b2430fbe359258dc1332c7d5a42d347e0fbed457a38b2cb80803846f0a1d915878535255aebc9c0c1e0fbe355c482c6cecf99cf2b27f47c6830f055f394928583ee4a38b13917362223282058542a16cdbb851c9d1f18805fda65fc6e7ca98732c19591f2239fa3ed0e1084d735f3eccb6be3eb3bd6ccfee1b4253a864e48b03b22a383e40407e318c8e462c46f149933e2d4cc76c2923164b84786e0c571945f4ca3880855f8977d1b188e533d3d2c4fde5f56c04742862418eab4fcdee9bcfc9442c76976835bfbeea197af0e178111c6f63071d8858942e938bcd22466c14a21c5c1c6249b8587d6ee2937abcc0148c90981b1d86c05fea58a53dc6a87bf09d19c4148c9034153a0ab1304ad4f59b092db4de203932d086e820441a64ddbcd4f5e4dccb19514ad6f52527070a4cf056d03188e5710ff7112e9f464f1e7c1f95ca49090a4c904269412c077d9fb65a844c32074d4e1b5c5c36100ba2652e56debbca98f4e07b93836a7491058502824e176f72246040e800c482146bc2ffb4e7794f12e9f8c3e2baee581dbad64563988a0e3f2c07f7d792af6538f7d4a15040fec3c67ff17192fe0423255b50284a458042f138f92839cb6702f26a24a482d78a8e3e2cc9d3416e6bf59d4c3d27221f235b2c78cc87a5f33cab5eef9b88164dcedd1e9655cfcb56eb526b548f1a09410e74e8c11459f9fcaeefdcdb282695d4b52a36dab5c6836f370f0b1bf6a579cbafc6d27af0bdfa4841c590a0030f0bd2748df8d7f0da55f2e00341c71d1647d6ec69138f55d179f081e408a98451f22123384e444642f4ecb0a46527fa77c31e7c28874936668e5caec362accdbb1d3ad3b36d1e7c5ea443a235bac8a2862317140a858299834201391f256f42a12891f7221d44a128971c90934cd68b07396acfc68d4a470c3ae860e66ac6d88d4975c763f3df4db39c8d608ca08a17e98020df392cdbfb0ba985f0d1d55c0ecba2b6314bb3ac69a5bb9213938cc3b2b48ffeb1a4dc0b5179f0f53ac9e1265d726292d901878551bb49c65c5a67b0cddfb0a0f927555f3f4ed4663adcb0e44253eb08a5db6def8a8912c93182dab02cd6356b8d7ea53aac4ae42305223946445a011d6c584c1bf6563708b3b9dd3ad6b098c1dd3bf8c6512bb427e949c078352c99ff0891623e3e8ed283cf24a0230dcb675a66f3b37dbd4d242368584e9a73961a745434ae3cf82a261f786768d3ada7a6e89bc6388d1ff435c8ec62bec4ecc1673c031d6658f430f3bf1fd7789df1e03319517a272239469229393129c3626ee76dd19e9b951e19163c664e3f2163169f743cf80c4372888c6179c6338450fe1d43ee950a181fea94544a4e124372888861d9d7bd4d89ebf0d4329aa0230c8b62439c4e1559f7e2591d6058d664f7d293eba4fd7e912c798f54729e8b92132eee444afee4e49070c989c9178e2f7513fbd8559559cdb5c1b4d41fd355acd6053abcb02c836f9e69eaa8642b3fc0f8edc292521913dbf2b1a6be071f66053ab8b0783b4a93167e3a4f8c2027e4c3f1e48c802cd3b185852fcfa2f94e48997a06395f189293012d2c7c542ba49413f29d30de8b243919d88e2c2c892f3d5762b3cea0b53cf8ccc977776061614d6a08651b47a84c3d08498e2eec0acb9b650ebf2f8326b51d0f3e739272949c7071d72721cb0a8b9ac37b9590e93cbef8a3a30a4b6a7410f534f97052adce16945e1b372a383aa8b0ac321aaa5fc747db8f075f05244788dd141685ceaf3599542a346a3df8b04dc1c0c4f121810ec92182e3036d480e9194c2924e7ea23e5b9b6ba91c592216481f22670b0a6564897c5456471416b7b4679465ca849a1118ca0238440e072894c721724a2814139291631b372aaa030ae611f32237f6bc9d6a749105853252f22a101911a150427288b08d1b950e18743cc14d9bc34637bcd78ee7e60d21af23e36dd6117dd1e184c55242695eaf13513a9da309cb37665b3a4bfd529948f783094b3727a2b48912a255e7cce958c2b166afbbed19f7a56955553f6f7ed3c918f4e0d365252c886bd88dfa394bf9694c92908f441d4958f4d4597b885b253c79bc0309cbbe622aeadd9db51e4b5e958c20043a8eb0a0594d8df8605ae76727d06184e5fb4f7bf2cbc5bad60241e72447886547111675658cc7ffd2b83ae7c1a71e5540403e29119635d395e6c827f1d6dab8511941c7109674f4be64aeddd924522820209f28942fe910c272aaf3183e8bbbdf3c893c48e52b8a26088bd96526571f5a36a7128686a00308cba5df3f54c7f2b03a6b7fb064efc276372bb122443252f1cb61f25182c3f860f947e82a6d9bb6ec470f3e91918f930332f2f14545958c544446104f4a464c40404e88899f948c98680f16539d4a25ffcf63773ae44b78b064daff49b5ec4f1306aa7cf1a12a89953b1c221f5ea40f9143e21d3b581433726c9449299eb5bcc50e1d2cbd77a750fa273fb65e3d181fab3272d20ce8c8c1d268d031fba959fe89de800e1c2c6a97b284b68791cd474e8c77dc60b995eaa04abce848939280f136586ed94f719326a4129df4aa3272523139f9c0f1a1f816d05183c5cca462aa4bf8ad66404c2a774ae44fc0f8ca87bc07c929c1610e8fb7e8a0c192ceed3c2dcc64d0d99374c0f88e192ca679945a6a6a3599ae07df89c99f948c789854cc59a043060b9ef9b450ef71eac6f6e0b34bc10849052447888b8ce038256ac3c0f19d5ee109c8e2901c2229818e182caf94ae4c790c1a37451e7c1ee9e484987c8454441e84af1206c948323594c951a38b1ac8e4a8e1f8e903c4c47c070c16746cd9baea34d3745ae0058b2b55d34f8f8cf28fb96031ead215e24363ceb461162d58d027deab3667d16b635680050b7a34c6246a724cc796022b58b06f8dfd59eddae64e4c16152cc8cea1a3fa0899fa52202323a802612c279dfd849f68c9984a03c682d4f6e8732f77b5d2d1142c7910f23756d67dd89c5f2c48253a33acac2e3b213e08498e13b3e458fc0eaab552af742821f7e0ab64652970b2bca3a4d472e5327c541e46c064d1849449f9c8690e9b9c941c928afa938a3a247e0f2859d0a136e8bcaedc3b5e0f3e7548928282658f7313dacc3eed831e7c480192a553757d6fc263d2e4f2e00339157548f04afe8402de230bdef9e4b47d94bd1a191b372a201059504ddbea61565ec3f7e04bc101429684cee9de776a53e3316163e346c503200b52e957f5aec396e7b38223077a55d992e381266ac4e3e443b8e47824e5c28bc55aa5f184c72c214205c657a0e45330a245094eb09ca5bda8cf501797c99223f221011bc1c79e355698ced16fbc1c959390d559782cb7a9ce51aaf9573ae38d57c1d17adaa6da8619cd3475f5acecb3f77e1215757354dea4e490e8d9584bb265ecd3a65dcbf7b4b571a312825f16f52243a84cf3e17c0fbe304a4eda249544404d52c951b771a3a26af93cfd75ab11a39fa53440a1a88f91ca8989c848dab571a35249bd9c76aac630b362a221c43bb77e12bac344611c1012930f4568414aad7394fae5c667e82c96f897224579e7ec68173528c0811a6ae346250b132c49d92d579c6d886f4b46d03140257d5267f2ecccf5fa2e500255f37734ad359310e29e0648b06ba55a624de65b5a8c808fabe57d4a8c8e212d4460d7073d2e65902a2bbcb12c5e7bf4a8e277959b2158d22c7bd4ea28d5fdc9bc41b0bc41866eeed672aefe0796c5eb97fbe7effa393dd488023cb02835639bdfac6cab5ca9910e2c89adaff70faefca490a177b11884888cd5ad4b37681e7c2024211f95931c219591934a33174b264ea5d0aa5bb36a5a00071657b3bb16b31ba7a983b8800d2ca64fa75d5ddee6a05b26bc5b2cb60c329eb8d9d6f9e748c84809c9a10234b0d4516d7c9de59a8e96a8bb800d55d683491df7843479f07d0e147c88e4a8987cac0632b0ecb573227ec3e6793b448b655795a5312611427cef31729287817bd5ffa84f32adab405225e161e002cb597eb49fded859e3f3e06b09181b372a6801548174d536ec74de4b5ea37b8cb284f8a49ad44fab820f931cab86610e1092900f34213944f224648191c5629062e4ca3b935165f2e01b3911f9a8dc6d1b13448145ddfae97efcd3f7db1e7cfb27e7840b83cb924b31d317b7b67f230f3e929111908a5eab900f930ac2b371a3e280092c482d4d6a9676594a3f0fbefe92112c4a8e079004f4d6c68d0a63b198bb3e5a66ced9c97d0fbe931c24221fa64617592cd7366e544824b098a93f67b3d0322d550fbeaf848c94acbb1a5d64e161722a40a1acc1e36142a1983cf22202614020050f5874addf1be4c675d78d075f05efe484948cac3d0959b90e588cf2b3cf2895ca43b33cf8fab80197770cfddda5436d4aa15028be366e5458c0006f8597898c8e7527278e1ce82790200be85cf36a58d0a0a5a25b681d7a85d00733d2b0b827d34d5c0a25320bd1b034b2d57d0edeaa53650a8542c1cae5e11996cc6e46fb0a9342bedc0c8b3a5c7776bf6f461916a4c71caaaf25a36bd70c32a0316dc8becea7bea6f95d295ed9c96e720fcf18c37272e5c95ecb5c1d262386e51253eaf9d795cef13333c2b0184b4eb7e8b0f149c780613994ad161e45ec447433beb0a845076d5ac569cc7b3e608617166ced7c3bdba34be110f930c99197c58c2ef4da9e1e33ba9f51ddd63da60a4f39b393252d289435cce0c2925232e890417954b7b0e8dda9330b9522765e552d2cab8daab48da1312625621696b39bcbfea032c9b0622c2ca6939ee55dacb609f115165bcaa02d95da279daa15966fb65694c69ccddaacc2e2eaa92afdd471e71a2a2c0aa536bf98898d4ff949c9d9c2a330630acb5a6c437854ffa9b3ea4f982185e56c69e34a7e8e9d5f5716f0a2642405276f8342a150f20b0aa5f30bbc1951585c25b7b36b2157545c282ccb9cded4a88ecdabfd8c272cab7659ffa4b5a9ff9a1ecc70c2b29b79a610529ddf8b9ab02cd5fdc7c9a87be73398b0245d84da1852e83f3b550e87c8c789c97f0183194b5896b2b5dfa45a2961c15d69a5df59e94e8d49c2b2d8cd1e116527f77b1ecc40c262927a7526cf5a36a4344f722461c61116b4c71c9317d7e2b4d2720292c3e43940a1e46086119649de5d86945ef342338ab0d8ae528abe6af87129222c07b5df39f7dfa8d478080b661b5d2ae559afd446084bfac7b3ad2b153f5383b09ca3ec95fe7b962e5d40588e3a33093f3319ffc2193fe84b5f366baeb96a1222c4e69cf9ee15c10c1f2cc67ad2915ad6d465d69b9c07790e50288b337ab0a87deeb49f323dfb9b07cbd95e758cd8a0ebefddc1c2cb931af4667bf2d7d2220c3374b098a5fc3e963299bfaa1866e46049c47b6ff79f3ef3206f61060e96f595f8e786d04d8fb9c1828c4135bf76f9e88b3658162f93749bed247b269c5183c53a69b39a3f68a1ed4483c5fce255e93ccd5ba6993183e59529e49ccc56fa279d2103e3ce46d1170f8d237a7a1fb4694cf3f9cc553423060b339e6d63ccfba3b45f831930585a71fef1e7e95356fe8a851525f23cdd8b6ad572c58276bb6d15da5afac517c868c5e26efa888eadf3914a4628208315cb7a1eda63f4b86dd2d6976ce181b3818c552cf6781c995cfb06ed514b046a2043154b2b5ca838ff8d42a150bc820419a958d21a73d29ad9c2a3cc220315cb5fdefea159678c2a916f139143c2459e495740c62996ff764ee6115bdf1c24c3144bfab7e147442799b22dc582d23937adc3775377522ca6521567324297d4da512ccbef92b99e1d95525d148bddef498ce9fc513d0dc5a2bb88ce361e02c5d2dcbb529bb3fa89a50daec55e7e7addff3cb12c5ac873217d7f439bdb896575fdae5ae8fad5b17af09905c8e0c4725ed70f39d1a53bfe5f94e4c0c29c07c8d8c4629a275bdf959f3bcc9a581cf7171e4d93de6731130bb3fb1b4e6dbe7ba330b1a83b445e6ad1ef251634a79bd7e72ea7bab2c472c7ced82c64d21f34538905f3d5ab418bd1ad6c4589e52477bff5865e29a478128b1a37b49ddc0ffb6b4a62f936c75e17a5b5b50e456239dde38ec81e12cb9a3f43ddee2aa1522ee3118b39f6ebda9ce7b954a66ddca8a0408623965f4697fca0bfba64baaf20a3114bf32f845c0da73f4ec4882569429feaa09bad3f051919d962083216b13ce32f6395866a8a0c85e2953301191921a9a00c459ceeccf5baf6d1fb3211bdd9b9886becf29a2ff9dcb74f4a9e8cdd2490818845f71c5e5a6bdfb65f32722292a384c48bf3248a25212159126201198758d69afd6cb454ff3b4225906188c51c4e33cbd79be477bc108b9d3cc6cea894dba7c1f8931c217d86843847b4356bb96a8767d6ca14b25dbfb4d1d4165ad4d01dc462eeac6de44e8f8c260b62e9458fbb94caf46b6fbf5878202310cbc173464dbc92fad4c43090018825dde139d2d383bcdb7f588c7199b369f527b39c7ed87446f444eeccdbb674337363d67117ef28197d58d4f1d859954c5932e9ace1c3b227915ac6a0d5c69c7a5711c8d8c38277c713ff6156c5ebf5b024af3de80c1db4ee56cac3c2a829ed2664cc3caec1c3d26ccc5bf5490a9dc37758d66f42a979d53ebaa21d1664880695e6fa5b84ae0e8b39eb88ca986374586c8f9d21355f46ebbf0832e6b0249f365b64730ad5fb6e0d32e4b0a8658e96a21fb7e35e2c2a4706197158d6ed8fc1a3aef9b4af9217f9c8008542a174dab851e940830c382c9827d5da33cb9c4e9adeb0a823338847f559ea90dde0b76ad21b5dbc766dc85ced3e6b57573523362cde2859eebe3a6d1af51a4cb66aa6af69de4e34b496e91f55dbac8665f53b2e5e4a4d53e2a440462a40a15028952ac848c3d2ca30afbafe7a850c0d4b32ca7584147ae377cc1996738ff21732c76abc8d42f1cad9a917649861b1c427a1f349968ce23a19f10085f227235f5028cc366e544864946139e99c3ba77c5529e54b86256fad5674a78d51a68d61339bb12d979dd7cd3dd9ff1cd34dee672e20430ccb496a5d97c2f3302ce8bd75d9dd51061816e344cd08a57f64d453c6173cf1566fcde23aa79fa3ab837e53d5ee6c917961b9e65f68d4aa45bf96eac272d8d79df2d3464b4dc9e0c26297909a446c67e54ae944e44328140ac5ae729fce2ae92b792f464a646c61496bd9159f54aff45028144a17c744a5258cf52f010a65e920430b4be741d99b895bf1ab15017525c8c8c262bf3ca1e9578467ce3141908185a51dadabf4b5d5e487140a85d2953326e6aeb024d7cd64b6b32ca53d5658d6f95cb7e82eed4228abc0c79969ed88977bc6e8672f3d77ff75367bcba0c2a2d694b63a7516a2be9f987c6841a19c987c80502827261f20ba0704195358d0ae636a9226b4a757654861e14edea8fb2026a5d4ca88c2a24bd53491d1bde54a262f72f25109e3bdf812451c221cc01b32a0b0382ff7a7647756e29dc721f22020c723997bc292d2aba4ec5b8f02329cb0a0e93f865d758ffd75617742f25192ec1420a3099bedc68c3b1adbf6e526e2bd2e4c9ceaa4cc8ac8078e47dd785cf8a39192139315f90029f990b571a3b201194c5874d720ec9418b1f7b0075f1a194b5854295c5e7652fdcd18259ccb358afaeb10c8324940bb6893b6b73252e4c1470612da6d0d174d5197199bd32c4ebb7b3eca9ce51e7c3ca2050e1c235a908cd8a050708c80c838c25e6aa2de2a7232bfaddd2733881699f6e023a9f41a61b94c6fd641985e5959ca28c2514220830847f9808c21ecf6791a5e76bd33b6264308cbee7532754ea45e5710164c0bd557551d72ca07c2c2bfee24b3e30ad359f583c55dd39e4da7679959e483c52caf4e66b1397f96bd074bfee29be9934cd31fe5c1d28fc7d81d71aee9590f3e143292443e405865ec6031bcee4ea1e1849cd8950f93913d303ed4e18023488e90d4c1729892c2b56a75a5467b1090918365d5be213ea590e9faa3c044232003070b27859bba97d4753f960288858c1b2cdf8990fdead456f5e8326c608c5adbdd221b323beea234bbd8eaa4c6474e326ab098c25f67ac79b51d6f0fbecac88993d86940060d96d3b674075debeacc9e818c192c8cf0d41cb4ee46374f860c8e6202193158360fa77375564ab6fe65c060b99449a95b96d460dfbe62d94d6aeddfdb3a6d95ae584ea3fce4cbf356d5250f3e1c2fd28ae5d6a953f8a655ca5be4c157e9400e0a458d8454943a7c22f291434f443e707c2014c460c57208319d65be7e374f7bf0ed2a9683485f5ddbcc2974e7400c552c7ccbcfca0d2ecb4fab2f154baee2723eb912325eedc1e72088818a65953b4235bd30195beac1e7c5f914545eef148ba3a9376b516aab678f9cb42996eddde6b4adf68f27e5c1877c8b60d855d69562397c8326f5b7cd6aa323273bd20529164b29ed9d9135a62be5c157512a64a484025588318ae524955a95a9d3b6b433010a8542f126c410c572ab3ffdb59933c6ca5ee463ad43a1781183972d84a68b98950262806249de6de6974254a6781988f18925cfaae4b568787033e4e3a4e47c5139591f1e2615901c217caf3e3e606ab706bd88e18945cd52dd4b113222465c408c4e2c87ad0d3aa977ba9778e4c4eefd55c99b544048423eec3861cba7766852db3029f4bc3797e68eaa28900601f95876252358e010e14045899c120e50289b58cecfdcb36dbfbfef8aa18905d14c9359986fe818cfc4a29473a35b060f134b5abff8dc15294d68ea12cb59df740ee12b328a6e89db366e2c319137ef8cd7de7a4d9a4655fe5a89253da23fb73b2ff232259647948bdf24ca4e6c93581cf9a022b58b974cabf9410c492ce70fb6daec36ed471967428c482cae861737b299c1f32884189058d622b5c4ec96a010e3118b5a3d475d237df376252325258bc8c887611b372a1e311cb11c478955a2fc4f94e9144a573a7c10a311cba5b333f86a57f9eaf29080336241ed8e9d5c8dbb533a0fbe36c13339f908f900d9452c0bd94aa3507d527b9a15b1d8b263fbe93ea566348958385f2d5649fdba5fe75f9d121c241d3831395a70eb20062296e49a7619d4cd5ff668723cb6a05042fec4240cae1cc638c4c2e8552dceb48caed01b626195e974a3836add6d96fc1614ca14621462490925e21e4d7745754e8825a143ae3ad1d616df06b1eca632b35ed97fb54db6201676467edeca2c52b49ee3e49c7041a150ec2a974c3e42d444e4bd1839d90dc4d2ca5f9965cdeced07880531e7e651885152c8f687c59279fa751097665a77e94db0a8d1851635fac2782f2ae90304e520b1aba48f13920f1090d7187e58562b656b5dad1a9ef321f251a9ac1611908006b4c8625365af0f4b6ae3c8ce874ff120444f420c3e2cabf870e2e34a3d4f67648958a08b10630f0b3aaf95b979e72473921b21861e965f9ed09f313b667ba94918670b0a8542a99cea187958da955ef25976be5a8e8187e524fe54a7ad73139b57221f18f8408c3b2c899e0ea54a556a8e710a658d8d1b950ec4b0430962d461516306991a4cb3d039a2c3924c27e4c9559b3da63c8745bd4a939c18cf71bb94c3c2fc289715aff174351e7cea7c89d6e8220b0a8582715066cb55c3668d9af4dd456894f94dee8f42fee4a382e303a5051ec7b9bb92187058ce2b32dd84167f933a1e7c2938259593c7c11e2239fa0131deb04c2143f685c74f1e1c8720278fddb024b2e5376d6f2e75698c362cc69cfb34efd9a79f33061b8c994b7347d64cb365b37c783c6d3a346616baf426c6d8b8510989b18645d1a6f493297dbedeab61d9fd941221845225a3320d8b5e524e8b57425579d406a361d1b39c73cf7aa314f291400d2c6a44e0e3786041a1502826677310e30ccb196f836ef37ea56eddb518665878a1b36c317d4ad3b81e7c60bc07fa9d8d1b154a8c322c86ce3a4b152b5c64ff64580cf7305db17b9fce1dc36214fa2995941a4787520c8bc2e3d97c07cd7175856159cab7cd69e7e3a4c8c1b0a441a87dd9ee2ae2fac262e61aad47aea84c27c6f042ae59c663dfe5b4349cb7f0684a4aedff11ddc5e8c2e227d10f52bbd49cba726149fd6bcddeaec329d53cb8461759d4a0408d2eb4a861c2672610630b8ba17445496fcfd535290b542ecfc68d8a0b626861c9dd43aad6a3f579fcb2b05ceba94b282976eac6185858ec3731ea9daa3134bfc2a254f22b52cad5b1bac6b0c2c28b9b123ac7e0ff23c63102d279384640d2c68d4ac6a8c2f2997de9c8feac4d9954580ecd9a857069db3109a7b0985d42eab14d7a93da520acba774b9019d4c751a3efaaa47b124936b91e985f2da5b140ba2afa2462a13a1ed502c088fd184521572db06c5e2dca85d7d1993d0f5279647aad5af17391dc59e58d0b2328835d919b3dc89c5505aa991e261d7654e2c76b8ccf9537afe8f37b1b051ca91df29b5d6454d2c2ad31ec499f886d6602696843619f3d43547358889c51cf33ea79b289119bcc482ce1c73696bdcd50c5a62f15635eb55fcdfad5889a5f7d223355b49a551a4c4f26df8adbf88aa54e22496d3b8da6c3ca15d264a62c14c2971119f841a1323b1bc3faef55f66294388905870edb421c33d7e477cc4928fe99b969e9594233a62713b9910a11bc568111bb1a4b75e98963aadd020326259a9ed67da0d7a52c4452cea8f2a46c99865930e15b19c5b6cd6e91cda3987895872515ab555996b7e8888653dfff499e225c4c3432cd9c9bc490871ea4b43432c7fec1e2db3a9ed5a8558ce320997fb3d5fff22c49207edbd761edf496b108be96f33abffa87b4b100b5a2aef64cc4f19f5815838d5a0fc9350a9731e108b399a5076b27a7bfe3f2c26ad4c4f2b7dd391f2c3b268d2d0f0adef8ceac3b20a0d9e3ee6a041557c58563abea59239af51ed61c1949afb9c3ea137a58765ef10b9731122652a0fcbda45bd5a1deaa1293c2c99ce3c2a74afe99feeb0a84f3f0911273b2ceb1c4ab596f173d2a43a2c9fded531d84a3166a2c38289ab481799b5b1348725f12c84d699eff623392c26a9f5bcae97e629148745594295a729cd26427058be4f1974d2d9a3a6deb0b06ad473ca589349c70d0b1e9ffa7e9309f5396d58d4701e3aa6d596e1c386259d4c7e4fe6513a7ad6b0a035e5e85542ff4ba961397b1cefd2a33d09a561e977735ea8170f21342ca779cd4a86bb8db99f61c9665ebf06ada4bcdd0c8b426be65fa5960c7b199665d627ee456a91a5936151a9bb3c9526f4b5c6b0a873ea2c37cec4755a0ccba5a1527bb8c3b02cbea244ea8d2ba30d8605e12ff5aa8990baf51796c3455fb6d6775b622f2cb62a114ac7bc2e2c7ce7582dcb85c99d8f0bcb399a39f3cbd430f36d6159e636af1ead5aae7c5a5898139affdb3abed65e169655bde87dd578efdac3c2f209efe442673bc87b5758fc7c2b5a789ed0e19e151685d4edad35a64dda5e1516b5d22a6db4a5c2b229d9bb6dcf2d84660a4b3a9b7b3e4a3474460acba6b3901b55996c9989c2820ed32c8d3acbd052282ce70da7fdc3f9fe499fb024e32d4f79084da574c2a2d47cd2d3f60a17ca262c69dddeb99699932799b0f051967ca70a21c5b98425d959aa738e188da312168386da2dd53d9bc3242c0715a1f39cdc7ca543c282921aa496a957c67a7784e59c752273e794c963678405f1519e8deb9875b62bc262f43d1df547659eda1161e9449be72fdfdbf81096630ea3723766f59a2584e514f279dd741851ae202cdaedea8b687d3e2e202c074fed9b47b84ee2fac1924c11b2dd9f52adde07cb1dd445dce8981b7d0f968514f251467fd6ddf360c95cf483788c29b6dfc192caccfe57fa59f64a074ba7f267858d3839523958ee37a93ae850959a848365f9f426e72a6ac2748345a932f4ad98cefe920d16358b37259378715baac182d4ef52665242be100d16b63feb5ea1192ce69d537f97723447060b23aa5dbcc734da8dc19254732deef99b370080c182ad9c4f2f44af589031b429132e435fc715cb5e3a4597bc78b59f562cc77ca61e46fe333eac58cea4b3a53beb26d959c5e247d31bebe3aa581e1b393fdeb984eca9587e4f5a66e731b1aea362494bab9ecc7132977e8a451762658996d0f2db14cbed42a977ce7cd37529965deeab8b6ca9dd6b522c89d5ccb9f70cf2c4a3587e1dfea793afeb8845b198ce569bfa6b6126876249542935ae375b960c8a050dbfa6c5eccbd4da4f2cbdf8ca199d59787e3db1e09ef3b2cb3cc7d47662b9460adde44a98d4594e2c78ad075f7171a2de4d2c98d2af8fba4c262da38945d9743366e3aba34c269666c77dc4aec93d194c2c9a8eeefe7c5269329758945248d94feeba196389653997c9bd4d94296925965c4b19de392516d674456d8e398a3c89c55a213eedfceb92aa241683941517dfaae6158945a1366cd632ddc924482c6dde7bff38b5e623167b74a7b3d3520d396259693dbaa46ccca037626173b2174f275b6a462c6b12ed371bcc565ec472d422b38b12cd4a4b452c9fa6ab8e6617c24ec4c297869dec767816118b9af4ac9dd6a665888758d839654a8f2a11f233c462de7d58ed931a55884551753a54cba8ed22c492d42efbdfeb5ae907b1a0e263ea44ebd0b62096946e21bb6d209694d06e9f5e666e674603106bd5532ad73d773ca0f18745cd38f55a7e3f7c6f7e588e3168b12162c23c7af7031a7d58509f56a9091d292a633e2ce838b222d69459a0b187e5e45a4b934d2964d63e1034f4b070af7e3cc7d14143caf2b074ebb3499a3e19b3a84c0e68e061592bad1e757497c2e5da77588c1ba72ed58bd3d1bf0618b3a0618785955299b88da97c93de838fb90ecb9ec32a1929b3e866e9c1f725245fd0a0c3728c73d559c495d42ae4c1779283a4f2204ae478249aec81b1502841a03187458f2f43b754f7eae2d7e8220b0ac5c48b91118f2c7040430e0b4ac34e0bd7226ce68dc38212bac4d6f8c6664a130e4bba320b3dfa5fe3c6f58605dd904f6dd91a9aaf071faa208a74804271c3f2b7ebed4e1f3d3747590d68b46159335e06d33a9e9a79134627d060c3e28e8b6a7522ec466e2623140a0ee5028d352cdbbf6d94a9a52bd9f92182861aee9693a33e0a53fa516da0918685932383b818ada1318a061a96775e466d4aae0eafd1834fdd1234ceb0986e65545ab3c93d19f2e0db16d030c3f26b25644c9edf1e37232325ba021a6558ee3cfa738429a5a464584c9adec4babfa670bd075fc9c91816a56ead95cca9d4a47b73031a62e0b4cbaed11ecd2b3a69a01186050d9a5f33a85f7da2836159a4f4361d3b983cbfb0301b1a3c44e6d092c190040685b24a804ed0f0c282369d113b1abe95cccd80461716a39c9ecc42988fd2d927687061395faa5323a3ca571d25051df4e820a37fa0b18525f391596ea5d6a4073e482240a17c9010001534b4b0e4e151a8949d3a621616cbd5e5b610a3efc1abd1451635b0400f7c9044a02424032521219aa08185c5af7b95b9cd4f4dda1e7c68a840e30a4b3ef2fbd3aa57ff3e3df8940934acb070a7a58bcecccbe8ae07dfaa490e139137111949c6031f241128801368546141eb13ae3fa6c9f798f3e04324050d2a2c7e6bb559a5d6e2c4799ba0318525d14c8df7ad95d8691e7c2621260a1a5258f0972bd73465a77cd183eff03c706232520193118fca07c9e151d088c2b2964cf3d4e2fdd65b0f54484cd428820614f6342d550b2d733ea9f3e02bf9a8dc7117349eb0a4eec306adabc3e60d3df8ba640b0a255128222321212329059f4446443240a150b05029026188e0f8e0c2031988c0d2014a058b1a9815a0504a5e9df7f0228d80200a257d9c0728949291550149af28140a85009ca0e184e51062c5ca7ec7d77fb98d1b1516d068c2b212ef619a32a3f628f7e02b3909239d921c2945008b1a251100e3958805668081061396d58b6d562beff46790075f45914063094beabac25c55c87a6da2a18485ff64637fae49bb4e4ac29210a5a3ecdebf95c9a6818445ef7d4d9f22f36f48c580c611965fe996d93c3757066d07348cb0389fa5afebd6333a65681461418c9051e9e06ffaf3e9c3e4e30bafd14516271f261f1ea8542894a7507e0295c5030d222c6f0c52747476dabc7e080babb43e1fa5853075321e7c3484b0a46350194f2f8598aa1e7c2695149c12430bd008c292cfc71d5f29d47e9b3cf8da248cc700036800613175d2c983a63fe9b27111068d1f2c9e3e253f9cd0392b933df84e1e475aa092056584860f9666c3534bcf4b612a3d11f99243d2366e54c0a0d18325d9494b6ded3352cecb838fa4724a1e87c887173946c2385b9c92a56ddca8a480060f96c40adde24aca7791ad07df293901e36d0d56804231511f5f8c70c0a491c60e96f74bca98436664af9084a42409c1628b3c1a3a58f690f17983c65a99651e8c021a3958d852af4bc7a978e99f07dfddc71219c18242195914ca0b68e06059c54b6d57dbde61ab1b2c6ef6f76af5f8d9626483a5332d357c7b90fad5a7064bfa7b739bec3b1b994383c5132b76db2673dab669cc6051860c32da75587735d390c18232edfb5cfbffa45a1a31587239a1a9a694e8a4333460b0a071b326a1a5b99039f38a25155d6a4dcb24c554ea8aa597328b8c6f912f626dc5f2e9a83c692967f46893154bea26f46810f54d5dae6239dbaa7fd9bc2a9676e5fcfe3c9a6639a66251de27b9cf0d6e3b1e2a96d38976e8925a7bff532ce62c45f4898fb990b28ae1028b1a1fa8d185163594488e1191119313544cd1685132a3ceda950741cec749c9d98242210949263d8319a5584c523db4e6a0a7e3ba05289493373139148a7e71669062513647f71c2f9b4e6d1e7c2020a7c258a38b2c6a9c7c847c80543c4e485e813163140babefb396625df987ee44b1f86aa363eaf2cfa985a158d8d39da5cea15a2931d5d8428b0402ee3066806231c8935ee69d79f0992883ccf8c4b2509b1d9b41674a4e48667862f14b4a792bc23fd3895ee955b51e5de9da78f0ad293921e1c4b26bfb766dadf66030462440a1a8076304216fc2be0d52efaf18bd79f0b19e6086268ce1633a32c855dfa150ee11333291dc1452de06e1fa620fbe1a5d645163445128144a18608c94905028e658724212c311333071d462c47ae9cd89fc127f761d4f9b8f6c97d7128bfbc647b1599a54bf2487c90848aa34ae8a52c7eee394749169985109bc735d94d4e279641e7c3514e7a811f2e16142f9a206e21c353e898c5440404e32fd24a201110aacc90c4ae4e51af4ce6f68acf1244706442860569b908c6c60c62496bb4667f1f68d29aa95c4629abcce4aa3d031a43a128b717b641429bbdbdb42a1bca2505e95bc0924163fd999d42bceb456b107df3d6249cc86ee4dd127b5507bf0199311121b7897366e54b898e188e52053c43629d552fdca2530a311cb9dafb50e52bd7a2a9911cb59967b7c7a06ede52f6249eac7cf35e2f5345ba68825ed792f29d4665e0a45053312b15cf335aa5ee45567eec1f72af830c119885854f246674c1e9f64ed43186d3735ee65cd7efed4e93f759e597a559861888593a756b7b6f356db16623986d6b271a7d5845e79f04f60073308b124b3ac91d179b2e7422020078bbc412c7fbbbcdc0feae3895d3919cc10c4921a97234bf978ee3302b13ca27f64eb9acd32e50c88e5ef11a185cad6f08fffb074bf4189d625dcd3485f55184d4a726031c30fcb9eba64cc9c5ce71ef5490e0db08d1b1591197d5895cc2d4d9c9262ed92197ce83de5544d83a6dd9cb91e642cd7c246c6f6802698a1872517274776734c4298521e9693bb6e1bbd4278587a3932f82bcd513fdf1d9646a336a951f7af8e6a861d964c47968e193e8b2acf83af1206c948c9090466d46141bcb5da546a65d22de5c15732920253c00c3a2c6c676b5b7545e4c32f7d888c84bc4806da93e403e1cd6141ce638e53c2d3cac6bbe44f3e540e8b1ef2b446bdaf34eba0382c2b91669b2f4c0b55b7c8078e8f120d301c16f2ea35c634e138275c84243066bc6149cdbb840c5f5aff5f8d2eb23831f993a3450c66b861c1bb57e7d5673d5a4aa15028366e545c30a30d4bb33a1aedb5fc6ddd4a22b09744c2305107cc60c3a24eafaaa9b955e894392cba2b38630dcbb236edb4b326e925833f9811a858d4f64adefc6f4bdd9f6259bd1acf63e7592e532c9adb8995a647bb5229163e868baf9bbf961429967326f5e672358a655d0d1d6d62b7374a140ba64d35679946c3150a7ba47aa93d0e8ac5580d9d56965252fb8945213fff860c514a9b3cb1b49bb677430bd54deac4f28f749d2feaecccc48925d5f298456919f39836b19c1d5fbcf854138b1f556a71ba56d708656259f4ee079d423478102616c32b1f199358551abac482dbaacd154293e88f251643d7a858f9a9c472728fbd616b4fd787128b2da6abf7665c89cf2496b5922f63c92cc467496241758c26a43e12cb5148d159b434315290588e4dfa464cbbeef6472cc9fed51cf4dd0370c472f8f8a46337c857770fa0114b9f639fc78d429c8b7b008c5858d92a9fd3a795957b008b58b80f25cfe3ccec6a7b008a68b363c892f1442c69a8af5067fba746c4d2bdcc7535f34e750fb1a054a6346dae21163f56b7e78614fa6d1762c9dc56cb8846d3b469422c86cea6e6d70c6249d38edacc0d27b44610cbf943f9685837ada581585ea9c5ef64d6d17e05c4622cdda5f59fab11e91f16d7949c15f5e24aab7e587c179ec3c8d9ee55fbb01876d45346091985ca87058fdabcf44bd7a8947b5850f17ab4549be6a3d4c3622cd3ac84f998d2330f4b324d75e6a884ce328987e5cf49c778bb2c4db3efb0acaa1d52bbe52b296c3b2cbb8a115de1ad5f855d87e59f0df7d271bbe4d87458fa939e6f679494ff7a0e8b3996d24167d953feb51c96ffb378ccabb2a3731d8765255f9e0e72344f7c0d872531a73bbd12eae75dbf61e95f4aaff7b40f5a6b372cfa4ba96ce5eccc66dd8605255df545869d082d362c9be9ecf551e4b4f36b5812caccb3464a0d0b237ca314ab3f29b94ac3b20e0daade57a3ca0a0d8b1df75adf0bf190aa332c7bd4eb5a76f8cca932c3828e5136d609a9bc4f6558b49771b4f4f2fd4f22c3a2f4acd1793c0b8da5312cca6f963dad3c691f89616153ed0813a35187511816ec43633ad3532223302cfcaad1553a5f585042a6d54ca6ff57e485c5a49f59da5d8414eac2b2fa8c3ebd3f99395c589652ca979a3cd3ee5b58f66cd98f95e2f73e5a58ce2f4da57254c8ecc9c292c86cda854e26a3ec606179b3b89811a2837cf91516db4d960abb13f5dd0a0baff346e6f78cd45761416f94598ff9b3ae9a0a4b66fae59e748456f51496cf836bd1492d850599552572a6c56a711416b4e6c9fd12da5d66282c69ad46a675f11316b5b90e0f313a9f749db0dcfaf94d958c7de23661318409a164562b4c5b262cf7ebc8bf962e61d947f49599ecad5d95b0a85967e7f452acd235090be76bbe593e940b1509cb42839cdb4bf7f7f4088b63ae79468bb1154a232c7ef0a883c84dd53d8bb0a0a410f7ea1bc5ca24119637ec07a1fead4e2687b020658ed35aea929e4c212c8fae72e9f15d84994158ec2c6ce333da691202615166e8369d3edf4bfcc182b96eed49e7b5d01ffb60499377dc57eac1628e8f662d4d28edf260c9fdb587cc267eef60394357c9f479aab9d3c1a256d3e422c7cf9583e5cffae5b3f4ead3c2c1f2fb0a193cfca6ce0d96e3e5df6465c34b36580e1a84edeacf32750d16a5d03128f95a091dd260b9ec74dc6bf49833e3192cfacccba4a13e73960c16a3668f8a670d2006cbaf73a627132956bc060083e55e29f39bcd36d7f58a459152642bbdb1435dae58704dda3ffb9bde5cad58f8df3ad3d167c5a2f7eb9c3bc4f4acbf8a652985fbe9325d31be2a96de3b28573129b77d2a163f55b81cdd213749a16259daabe9306e5299d22916fef4c7fa86969027532cabcdfd525f4697752ac5f26ae9e23bfe48d3102916536b9e39adf7e5c947b1bca141ab6d17a96f8b62319eb0cf343f2b6f8762b1652e8fd73428967f94e6375d0f9ae94f2c7e7cb62e357255d79e58ce15265ac7fe76ae3bb1a4a719fd83cc31b7e6c4623cad254db97ad479134b52cf4dac7752328635b1582255e6bf1b9f9333b128b4f4d69137d2858c8925ede9b55c9551ddbf97585a31cffeea548f7a2db1683295f492216e9aadc472690ad531746c7a4b89e5b42de4da4b993a9ac4828cd0d1328d8c531b492ced7e58bdae89c4625c8da51acc7c650c2496635acff145e6521af38805197394c7777c8dc6110bbb31546e0a2db9b5118b791b63865319b1242e2b42959e279d2e62c9438cd7dc979b3815b19c34c69846a75a1d848958fc3dbdfdfca6830811b1e859eba87552af850c0fb19c596999d3d36a83ce108b32eede5ddf1662e94c45272942cbc8b78458163aebbf8f7baeb4db412c6cc8dfa084cc5209d90a62f964f4da676c03b198c4fdfdfd7ecaa42d209643ebe89dc34b5eb4fdc3a22b4d3e428a6c5c2d3f2cbff2d79bc6a56b7cf561393b899812ebb2c2c58705d3cc3dae5126e5ad3d2c46d75afa9e3e21654b0fcb327f4cfd5113daf57958ded4befdf25ab67f3c2c07ed9af3c68dd2577f8765a5cf3475896947bd1d1633d4aa0e9bd36df57558d4bfa55f57c628534f8745cfdac1e3771279fe1c16a5c6d72a3bd9e8eee5b0bced629a3d9f45a4e2b06c4a3d87f610ab210587c5d55a7dcc5e9a4f566f582ca92da7ad72c382b836b7319d85d24a6d5852ba4d6955cd429c121b1643087b9351694d795ac3622c293f3466f80e27352ca7baf55e2d5a6b36a561e965286da72627b4101a9685b8fb7dda6fed4267585869c2c52b25af51c80c0bbeab2265fee73042655896a593c6f0a24234880c8be7c9d3471fd93f9f312ce695e3be39af6f7ac4b0f4d236fa777c8df184614944eeb5ab95d9dd01c3c29d4911ae2b7e74fc0b0b62b5f6a686fc97bb17165679aefb4e3a53ee5d58d6baf444b593add6b9b0243dd4f38c275da16f011d8d6a2d2c9c6ae7bcb26fbbee2c2caf8e1b558bd24ae61a0bcbae1f7f44c69227c55758ce1a3bafe59490416c85457fa16dd3abfe3473151663932e9dd5ed8a0c536139db6d4366f3eb8ea7b074f63a0619635dc6570a8b9f44a853abd5ae78a3b0f0eaebfe83d625bd85c29292adb7bdcc3d6acc1316bdb5c836f9bf538d13967735a492415c4b5f9bb0e4fd27ebb5e3594a99b0a85d967e29b5cd0ae91216e7a486885d098b39623d874cc25b9d84451131d97f1d6d5f45c2e2c8711f1742488f3ac272ebe818fef563fa18617157e3072d42ebb88bb0e4a5991a428a941e1116d594c8ce516c545b0e61c96b6bb516352f7c212caf08939fa4bf29056131ee472717f5120010168569564a736447131a01fc6071b50ca533e72063a211800f16952979b77acdd48846003d581015192f45c893ad1901f060318e673fa563b2553302d8c1b2144f8f328915a6b554003a586e21a46cfad032fc4b059083e5aef5dcbbb122a5960a0007cb1efe2bbc4dbf3f4b05708305254d478ddc060b5b5fba455f481dd7607164ce3ac914994d34586ca5cf3dd7e50999192c6b70973ae3e7642a830537f5939932fc7a2b068bbaaa49537416f37901c06031c618d52dd25fa95eb1ac59896cfe51e239ae58ce269e55b7ea76dd8ae5db2d9d6235c6f8b26279747b14e5fabed7552c26e5f24acbb3cfa854b1a0a3ad57772acd42a958ded813a2ef9937a362b1e479d028566af9d229967465b58dd9ccfca658942f64eb3ee956a2522c6b69a2f3bde3fd8748b1b4318b57ed8e0660148ba6f4c9965f79fabb0640148b671b6c95a8d352e51a80502cbc9eaf5777d3bf5d03008a256d2f6eda6fcd64d7007c6259e65842e6207310a96b003cb12c5d79c8dd28e53cd70074c294df3a976b3127169376b9116a3dc87d138bb3c1474b34e99535b1707e7ec2c3d67b4c269683bcccd17235009848dfe6fa8f39e6124b1eceff5df9bab88d2596c356676fe6a4c36c2ab1a4b409d72e73e8d75362d943be45fb6c3e259dc4a2102946ca7fc9ae55128bf73eb37b22d52835128b51ceabaeb455652a241643ba8c426bf13cab7cc4a2fa870d5a69a5ff948e58fc103a772e2d42ed6cc4a268b1397b52b7343162514c533ce855e2a2452c78fc19ffd8d1c3838a58d651070d75eb2a734c84f127b54b4d5111b1206f84c9ccac736aa88758ce969d498f0c1ff753432c6857abdc3767e77b5a084e6797f91c3c422cca19dff3f720e5c974100be7496bdeaccb66642a88c58cad5abcaecace5a81588ef1384ae7567bd702c4e2c86aabd4a54de80f4bbaaa1e830c2d5ae387858d326bd3259b1af37d58d2516e4b0ddd317ccf870599f13e19fc4426ed61e1d4e5465fcfda83f4b0206eaa9e3645bd48e56159861095d24be9982b3c2c2add1934eb6a873cdd6131f75bac7ed2f4ba648785db542544e7f8b8a13a2c4825bf6bb378fd361d16d3c6cd5236670e4b3aad767cebf0631e392ceb27bd5f9e382ccd7a782164885326382cbf6e2dd4092152b46f58facc394bd9d614d70d8b9ad52ab5fa63348db761e174bad52474362cce9dacf055f7e6f91a163e85d6d8fb9e3ba58665a51d636ebed3b0e83ab34cbed69fe246c3628b4a75dbf60c0b5a640999958b97316d86c5e8a67f5374ce7776199657676c96ba73bc66322cea57ba9b75d67a99c7b098e7f36a4f2df12c8b617153e6d28ea53b430ec3728c49bc75fe567dc0b024a3894af12f33db5f58ce984fedea4b4cbc5e5874d316b339a1e7dd2e2c7dd62d85de2c7ebee5c2920a351e3b6a9531b75b58d64146aff8560b8b2b6bdec3efceff595894392ad5ce122d4c838505d539429e1423dcbfc282fcdc23f63d0655596131c7149599d62a2cadab1d335ba9b0ac635cbc6bddb184720acb7a374ebfca3a77530a0b9a520b57217532694661598428cd1caaa6560885a517e9c9b3ecac5b079f901899bb5d48d1098b1ac75c8b394fb762139636e7baddbc5f9d221316852a19b6993a3f894b58d672e56616b9d24e54c2f2adbe8f0f9fd40831094ba75a6c67194eb60e91b018d765e3550965f23bc2a2269d4c88ed94fa9e111694d6a6530a6d4ac75c1661396a92af357a4984c52c3546d193d2d4783984c5badf2ca5f61cb5782984e51ceb3fc67af38d5b066131ffcd73b466503a4b202cab1e13f95fb1e259fe6051bc7635cae6475ecb07cbcab41a7fcdeac1a2fc7d06a53d8334170f16e567a19b1bd45db776b0984aa39272365db774b0a494f09cb4fafb98fa1c2c6eb6929a2a7274f471b0f89a49776c0cabbabfc18269d9ced5a232faca068b9df1bd1b635cddaa1a2ca8d2ec1b3da2e4aa68b0b83a4b13f63aafae3483457fdd63e391c1c228d58f1a4eaaee520c16c3abd5d2da54b62a003058101d36296572dc4caf58f2df38f662fe4bc8158b274453660dfabf45ad58f4dfec7a9923d5ac58d01eeb74c70dfe9e552c09dddeafa37e83ac8ae511abdbd6fed6dc542ca8aa136672838bf1200050b12434abb997d4496f0701708a853f135a877f31b31d048029965f4bebc3682dc5e9088052a4e75d3adee6a458dc038ddca8d4acc5e3b148240e0643a140180c0cc29b762700731448002850240c47649222aa95f6140004474c3e4e30241828161018160ec4a16038100883826130100c060402614020140aeb3adad59dedb028516a58c32de8f20b999dd8fa0fd59c78457b2a677f92c3bd67b63cdc3efad8d7bde1956dfbc86b74a5538fea061b6262872dcbc41adf126653362ede899cc6b49e722e5300eb12c0309bf535ec38e1eb30b71581e392b7c9fb21801cfadefbbff251effec237dcfb020e62732aa32f9da841b86846352a6837150b747b18c46bc9e47aebddcf72f597dcfd3a0774838b5c249ce7f886f2b9c0c8e840909c5fe4f6fbb9ba7172eb1a68d8cc209aa6a35f87611f992858ce39fe19e72bcf86abab23dde47ed73ae3e16ef68297ddf53a8f6c3b5b57cf7ba94da0ab925ec34c4029e34fabd8c4374609e1546e0c5ca7e94288db5db8bdabafa6da3a7dc3335fed85f7bedee3dff9b297bfc11a0b1f599159c389aef268b7bde4f56e7bc503beeb356fb6dd2cffcc12cf4527bbecc5dff802f5d12fedd61cca415f71e30b1cf7edb00fee0078121152521e6122a4049cbb024368497a55b9fc7eae7584db5cd40537b9d2f1dde55ad7bbe9aa798f816fb8a69fd5292f76d36d5eefa037bce64bef79d5c7bdf9956f7bf36b1f1e3787b040838d0588a0bee4c50e7b9c07dff48ac77dd7eb5ffb06573ec4ad7d4b76852a481877e9b54edcf08a9509b6ebb19b56c940834676a4a73aac1998a8c9e6361d43fdecf2a01f306164a8064d097657f570c24dec212887d686693ead1ab9b9105330f169bb7882a630afb94dde306661a3b913cb21160d0695610f5caa625001f3e5b12fc3e27c5cf5316e72f5dbdcdc3ac89f9febb40f4b75f04c01ba220975285de8198c1fd2fe49b342f76577da4de09dad16f37c5feff1ef7c090b7d4636138cdfe3d6c2cc2cecae8a7d5ba126d6321486dd4e34431c676b258b1197e4173b278dccf3f89942210e76eb7e1774c09b59099f79bbee61de629e19173924b49825c38d82fb4b0533ec38e5a2b52ea8001bb84775dd6d2e75d82d9999bd353fbcf309377d8563dfc6456eb76948f490652b7136e9082303e926662dda205e343ffaef742f6fef0c1cf731ceb9fdcb1c7218d62cb02fce3b935e117909da83758015c41f95d3b00d77665312cefb126fbe80331fe3ce9771cfcd2f620c344e4d5ad183c2884a5714a017fd518f08b44d9194d0005589930ed4afde4daf78e8dbbde2c5f77bfd23dfe2a22fb8f155b05907ffecc2d5dde23c17bfcfbdae6138b9bac035f7653184e029fb6eddefb20c98dbb00fcedfd010ebd95fe610ed0459ea635e04462d22272c216940f184715209dd12585f1efa1837b9fe7bee7f3987bfc9a5ee71138b109d7e518d9edcbac0516e7579b7dce8fa8ebbdba52e79b30b198ec48fe5b4ba418f58fc71304c993764c9db135de1361716d66190f01c2cbad579aeefa63b5edd41ef78bd8bdef0c247bdcf2bdf7bfb173ec2adaf8d1c52941ecb61b84c9f75e148bc6a3d82f1809d8cdb04e349b9ffaea427ee61d1a642f1d86801159aa4ed54c8cfb3931c338b8559c00906f93cb982ffa108bb0a0a8061c39f82a5de4e391bd42bdb2b44df9a9bfc4189819df7fe603bd85056fb7f52530e0be723cd7d0ac5044d262dcf897b57de8de809bfb16ae34ea347e15d477f0e24e468c4607af5a446904e72d01d5acf9e2230a23bdeb0ed40028b501a4749e54f9663c513f06a45cee88694f6fd4f352d0ee2258a5fa1ccaf599f0f63c2d2c24201106ab0387b8d04409f52db890e8c31e7962d52c3a19ae22c465eaa655ef24da1fc5e6a559a1d3d07d47bedce60d42e6fdfd56a2373ea6f79e017aceb370b0d99cffca7ecead9a48fa615117c3aecde24cda2f430d6f3866538f0d728213987c62f93d69068d44ea4bce0a6c570524838d777387493a6abb03a661080412d44b427e14083b17cbf9eb4b79040ed69fe12b516f499de7629a74b64740a2cc9b872c37e8b1b882cbda6057b4d9ed0eaa562654dadfc13a7cc4189f7beeab792b41a5dedbcb7fe8f890c67a02226757abec0c3b14e5421fbc4c96f38b7ba2d383894a680cc36b5f6bc9f00bfae5927a8b2416c7cd7a3856eaf1d598252c9216ec0947b600550e7dc11f261fde8eaeff0ce896c62b569501e3c6f32ea8a8afa158fc18fe03343683b4b613855a663bbe79f8a9a671c222cd3fd40622e52419bf3a3cc55ec183961c0a84d560971286475cd0e98732162a5b9f78351ab5041bb7b6fc2b6ac98c88145c907bdea21a2235258e588bcf62e1564d7a8512ad85b7254b31fff3b259a23a8e2ee782f4eafbdb4708890224be92e0f5394e7fac20b213e23c857dcfdec0626f70014470832b809b8dfa2bceafbc9b35b4e35ebf616ef421ca63a1004c662ea4fe7e1d30fc45337312db5afc09fe15c55ff9bec5708cb5b1eff234e23f75c5c1c42724ff4bbf54bcbe85e7b42f89b7d1e3c7c04bcc6ce590117800090c7458c21a0cc002f8beff4e194cf0ee425205aa507549dbc70107ae3efd7d728bc9fd0a4faa9098dd884086344c79f4a1936fa8f1a968b5c5f35aab321762342bd62cc0068de72ccaec4636f792a6916ad51403f33b5b5d8157d759636cbe35b474fbea786951f3ecb10b64b097aeb84299f4376e01f32897429b8141927df0a2fedbad23e02eab9332ebfeab8a17f30bb855e789c7e508798015a1978cc33ba28200ef6f3b5c3553a5619dd820d1dde8587a4102ba41bc4f5ec80ce14ebb3f07288774b78e078e844c00a62a52755bf2ef0958537c99d1ea2da1b358324974f96555f7ee303985392f766898c5ec819144abf67c867b69a781b07db55c78e914e0553cd54d281f03ca17a8c4b7d0ef35114cec79dead2f2c7f58ef5c7626fcf62a2daa389534875a259f2ac2f841c49d1af5811493148c042fd781cdda986ced34d45495c421467d43f685444a726fc5d7b42b881c36f5020d06b388245610ff6866b52d85cdaa5c49c25cfee7d13d41c28140a82b9ac0157c62de60cc257c2a23a0a3213ed3cad728140cc16c404db752b9e19274c488a7b5f45f61e7074376eea16140dd06482b6da8b8408e020a8f0663452f0345e5838c55bfd9e2b97e9125bfbd134ca23aa444b88ebfdafe09faf33488ae8fe31ecf72db996b499aac2e99a8cca2b5e8d51b59ec40cede80f138d22c18e2d55c17265baf3e2e999800b9693a2800e7b8dc8c5bce6177bc4a7a92a05bec95d01dc566468b9658e89e712655ae6a3ddff3598b77f2c7af93d2e642c3c13095b022a6ec837a66dffc0145d6dcc003d02b73efc5fd7d773acac60c240cdb3f8cda51045839b0f1b1d19772824de56cc4bba265087cf806f68f07d9757250a84a1802b1de4ff31fce854cf996988948fb84fa4dd0e016a54e04318968fe1c9015bd85f0895668bf64e6671888e4ae6fd3f1f801bf8c2fd7c638335c9bbe4e06a3594db5eb7e388542c8c9d5d623ba45b6391ebc3f0e2eab1836da7a28aa3fc14416e8f098f42984e804b50df39da99b058e8e04bf799cc00c2af8af8c4648e82a75056e2d9cd4969cfac11db5ce6efe81d6f221fb9730b4fca3ec6c6c28f2f2b1ea7959b7c15e574ec388338145308d45c6885cdc81f80c2df8c78dbe2a3bf11819ef500b8ac85b5f6cd14728f27fc8a862e218f5713e667cd39b49eea7e1b76873323347678a1b7733d94379619f66432c13d8ebe09e9d9e07388ed428cf208a54f3a2815fa37d2456dfdea0fb238bdce8047e8b09e783b54e5a62281e74504ef4061070284d4882112fe86e8afb013dde4e7097633844fbe93a90b80aee1e29a2100ce0e20f41eebb26ec27610559e0d799fe7e2093566865533c2e6d1bc8a451a5be0f8ff26b097f8fe6325fb1cd2e5f472e155ba77a5774c5d1f3a5ceb2edbb5ca1b83f7575eee3c2c976f82adbd90bf808bef8de6e74fe0613bb38403b5ce52b3971851f8a3357b8070b75a88a63f3fa4143829f99dba04872b6cd5b17e7bb04b22adc22e6979a116b0aea216650732478a88ed5dc2d6a8a8b48223f697c3fa1fd10c3522a3a93a1dbc8f71c75f647101aa2b3dba4454887ddc52e85b24f4a8e3627a1dfd75f0752f2810914436632d9d63b2fe4b69fa6102b14efe3c12e8f29d8c18030e043d0d1cc49dbe92b3f954674889b38109c253de802bfb2a4a793eb1dcef1d70e32f9c33af4f7246a8f8362e442ee62b96c27611e17779176a86c13a5bfd0d16985c416d8250f1433f5c4531f83cbce9c2d4a910382476218a85b14772592b329734b3a006bb1bca6a152bcbe367eaf039613781764b99c03a4c0858debd67a4ea580058fe262927e64dc1220260a4c9a6f5274f11a2ddb3e014cab25881345efe9a4fe4d1fa8f1afc641e344e2e6853a394a803e60144e9ce6a5a9ec1d6a4cb705e6b535ee18bd616dec52bb6c30d678a14384b7f9ff85c48eca486da840440262a8286442e7fbadb6abc344e1eb19c69e806145cf7c5cd472d998b64e0085c351b60bc7f1b63831563e2918dc8cd6f13642798d5f9978a77f988680c4741449033b1e8114be00cffab3dfb46605f6205557dc35f57aefaac9e01c0f55a2a3f975df8176e6dac38c32dec4059122b414e75b6c87634f85a89ce2f2ba339f0c3313ad1a94154103e5e7106199f535a4799c175441b081aaad01c39c5dcb9e31906cdd25fe577a48d98ab434b9dd93f497483da206056aff8271d26023ad2d5ddd320ec855311e5124fd392f7d74d8470255023c795bab421801d89f795c033004b62db95a8991930f288967de403c9fb5683a4628b139b8aa02816305c36d6319641a640bee4fa851476f6635c33037aeaaeb11c058bd7772f6319949248ef3494361a97958f144c8eb4b23782f3dec20f8ef720c363c63aaab007a256cd1aa3d5b33b783f19a574065eb05af6f001a4261d78232601ab32c0e5aefa4643ac41bfb69cb9befe48654392209db99b78439cab18301f92e0a96fc5bb0b2a9f1430a2703fc8452eab35a62061efe5d38803dbdce20d09d3e68cc6162367fd4670c6aa399e95cc272ad88dbeb8045c89bebc937e971c1b6660073d5cc29e0418f99e173fd8245f2b32d2b566a24cd0235d7884c6d262a34a255e6362400914e5836fb0ba7e50b2e28c8ee8295fcbe582759f83503e32f9ac8ee8d4878bc2da65de1b0ff5c48ed4c26fa3842750ef3b4ca0c28748ad51313b111d4f85cede1e356592c99c352cb6d8427a373951a943e916f608e3759361e316609bca4a82aafeb1b98394f879a212775580299d156d9e3c25f1b069b9391fadbb9cc38ae0e676b352ae4f848d60f2d3674110cecb4c22644cd56e47ea90bb0007765233a8dcc0d5184b3cc028e2435c2f0e982fe9f2ce58f31c044ddccdd32439297a56eec853d84a1d42b8e63501f6ea2ee5929cf430ac4daa542903af0ae8af6d4e91339d018df86221d0d58cadec5acc429a58ed4b9a9595f3e06fc691b28e0f951e0533a2d4006a8b3d09cc2b5b9105583070e266173b4986a5f949581982d3530413fdf21c9ed2c67594a226209a8938d594848517cc2c3504ad3e57a8fac6146ea8e7e69d3836ee1e1e59cd76a6302a5713ca7e1a7ee5801484724507ce8c390a43712ddc671205cc84de16263f916b778ada1f88bc6dd1d96bf7a805ee748ee72ada825f9d85ca034a0da62cdd26aa5fc69323590af4d88520473649e4708768a260c11c20be276b15892f2482dcb45bcb2ad9d90590731ac1a92f41cc3ffae55738c19adf881d5a9adfa7302090c9907952460a1a41e4c807066f8eb5ec05705893829c4d2b74b7b544030d99c6476f367401a861d7596d4db149026ea9057c012fc4db8430ee487d987f2e2259387c2039b7a3d92c49d2be62ffeae4c459f24578bb7d9bdd957d56f96a41851db05c824fd5efbe8955c6b0da29a08706d64b72277e7a8fc00290b124bcb01cc812a3eb552cc1c65000a4bf2ce68d05f8052f66350934bd863fbac98500c260fa81e65e14ca2b65915734375de2807ab7c26c25dfb3704a26cd663828c0045816e081531f8c2a2df7659c2401932cc187befb631ff9bbf5e7ea21b6452336d518983d7ff322c162a6f5b3b9c624c72538bdc71adc2221ecd04f3e52955d23d9195fb0f53875c796aa9070844791123d01d5d8d921c09661b691fe2a79207264d9e7812594423fa8598aa4bc4bd609ce97b44f3d849c2b239fd9046b567cea5b9f779dcd15d75804f7a5f10d50468097fb0fc055f5d66088b550c6d7a062255f44ab98954bbe4ce33e886e071e77bdaa4a643521a4be1ca245e1494a140f0804889e4d0f586ec69d03f2a7c98d4cdfcab6d63db8d133d442dc54afec5b773d0e17bda078d569554adc14421e14d002b0a59d9a02775288bc785d0ea06f043d655576d6b7b1aabc426883055d76861213dea162db34fa3596e3367fd1c93520a24ea066a44da487a5dd505586a3f32ab68de524306588f5960c8379464792a8d02b02fe7631c1cdfc8b3942caefa26e9dea150152063be02d68e3dc6eddd96632fbe4d81b6c72ec696a4ffad501445fec1aa2c805573aaab31af2c44c24387356b580e23485f5a1514e5f7dc9821cd37a2c4a1204f5ce6ced03b361914252d1adee62aeaeff2b7d655ef3c2677401178dd912ecfeba205c210e159344f5c1912416af9d9bc2e71077ac9d9ffa0286c507782a6dd4ce7d9f2e17d4f5732a94d4df469843f7a70d5eae4910ae56888769328b35d2b4c0bf42ac8046bec7c873993b52841d6e82ffed8b1fc0d9e9d444ac31ef23fec0dab8cbf777cf2962235f5024c3120a34cd50506c444bf55b098b0178834dd09352bdf4754a028d81af7b3f2ca1527b82acf5208a1446d0159c4abe268dd5eb903bf9ef1eec5484138915000e11fdfb2a55e40345034d037968fc2d7754af52d66810ab0ca3375da2796295085eb815cd1acb1138116b081f9dae084af68dacfc6667c5ee8e705f8954a53267a7718dd32d948a0a640a499e89e5cdae201e32e32ac11e9fbd674938a9a2c222e0adb92b57540213f561ca2088837dc2c9d49c063ea4aa4b9eaf812c66496fac004eb4a7a82bc5e3a7284d6dcfabf43bf883bf10b2fdc820dd0e8bd91a49a1d749e211bc65a55fb44ef52f677587e1bf911cdd90ec06988825611c4b1a4171ceb0f960e3654e2841dde0d4074783c9ade4c4682d26c1187f53116926161500de9a4c4db2a860e87bf142367aa405c07f446c7aa01ead9c05319b6288486d2389e165a5abc8401d2b5c9649804c49afa563009a3ed2b5ab8079988cf5eea8e556ced9b98ee65b141351647d48451d6d345414d6f6a604b45d1df6f51ecae100518b9233e4817c6d1c6701c7e67a858617d793e9182f0f6839c48a54701e7c49ca25c1035e0cb43b47974bc39bbcc82a83cbddbd54a97a759a57b97018a895776b2b8701958354f65485dff612bfed7fa486cdfbf32dd8b5624185399dffb9d45cc91a73461daea016600890d03b3980b4726100c995e41d8559d39c2a14ddda9c64aa009c6dd5c1925f4ffc9fb014c08082ae41c31ef2528b442f0e39e5af504ea670355da8d204d18d1e726b747392c6d1bf15dadebe7a638af7dc8f1409c28c26d96af683ec16c0f361f794d5a0d547f49f457ca468b1233e306cd2bd706d1b67e83a9f9c4f0f4d07455b8e51cb1cc9b3c1a9a14b53365a2b809bf766010db188bae2ad1cc71736545912224d415001d3044c1e1a377b9c69c0bd67490db5030e68915cedf2977feecc60c453d5c79123dec94bcd204c691d58e05b6ef19320556a5b5e654969258a4d1c88c11eb8a0652236b08c4499eb3457a95f8f6abcae32c8fa4637b12f3a205b136324f2495ff14672395449ff4dde3d5ac777404a42634e9435687ae42529b1571df883e9125c4d2ade0883a9d211694a946209d32d3670a00c2e3d521050c0094590a0d9061ab755fea7fb78c672be4cb036e770c814d6907e6aa80fb4b87a7134b77fb30618c344f9e1787f8839b6cb887f74ce6a910dcab74035a0476bfdbdb2661ef9003f7f661162e9e4f03d9aed0d45cec0750cea2b3597e44e47ef86d56d05bd86193a0e27c3473daaadf210df9f96c64c3a92300285ca8426f14625e90da10ae2a5e5b47310d9058f378c2b48534aa3467eced9d46fc12c62e3db5b0e573e4e267852566790b1084dcc5706f554c5724b67cf53430a6cb19f701f6b3da606e1b37340c2e7baca2010a820c1c891e4a8ad1fa0968e10c393f1e64c673a9854dd8f558ca6795626db7d1f9c1b93ea4c3c074c25c54bfad1c10e24b7d698cb7c15f68aff3b95457f04a47c463e8350e1f02625dce4cc9b0a16b3da0ca15b8c944180ea3836719bf329367fab336d999018de48faa68aec5032979cb1311ff23eb4663254902c89043fc98b2d186ec3102adcd093735b9c51c0cf380715c83ef1b33ef1b9973a471ea3f5abb1c46e775989fa41904a93ce4fdce1029eb7835ef151d8be70a46d5601a2fa7a7d787eb23e2dcdc58cb42d8f6456c587876944edd5aa1908b74b4b7a9442e4890f37652e66c6d7a79a6bf128626b50471a8e786672f4b114a0f34e9e4b75571343062f67597be884a38ea9254ef9ea1c49deea81425953b32bb09a9a31363cfdfd61ab8c00e7801704674364490dbdf20207676e92e90c80863564361e8151f86d19c7c4ca8d57a1098ca096eac398d80132c1fff2f32196ba4b539d469bf3747519e95703aa20a373a3ffd38a287a4b07300d995ccb561412ff71c869d0bc2b824345aa91759af561977b39942f908a0ed0caa6f6175ffd0c0eaed5390ad2503147151bc5c2d575c92942f85808ba277a29626c2671d9d2114d0b5dffe986be55855b5c96941108f89d8fc1dfc83d7971f0ef61b417a875caf8846b73954a58a214f0cad0281c9acd178dd0792b46feb3a27b9370b1460350faf2643e2696e2fcf5ba8f49e615fb1a680d594e051d1a571211351f11b9e403d5349426843ecd9049af12e24f9276e2fc88381a3f2b157e1fd5a259bd178adb27e5d9d1b750a6b090e86955ca83af9427b6c1289c03f5de205fa4c97627d7b42e35d4360af746573503b936a8695cf4f3afe8301d8fd74a2617c76f8043bb1b245b02ed2a0738e7cbc3b8a651154fbf4a4907d21827a874138d62049fa8c1dbf127d1ce81e293e6c87af6a5dd6cace4ef2d11a5f3098b67e734dbd79ede289d46c565821e850cb27f108b6d6a43eef04cdceb6da68d88af667a884135db09abc638d3dd3ad80931f49ef01f4065eec8d8a62e292501a57776d0d10dc2448f54404155c90183d92582106e583a069fe061754ef5ecd9be15ca3af13094c31e43b113f38392752408d4541818e70f3395eaf38d8202e8c14e0f4e1d5e210d33d56fcfb42083ce10763ab67476cf61ebf50d74bea98ba5f43591e02904ff074fff1df987d3acc929d0dce8ed0d5d511e284f29c7ca433256211143759b7cca456d6aebaae697f915c8d2c08b0f73132517552cef976178b8290b472ba11ec53206610a1c6af5a57523adaf02d496b98446152566f5a3a0c69252efcc756b7c61f7d9f4e0e9b85570a62a96cce7a1df93d1bf20b11af3634cfa650c79a512bccee61329dd0aa323267f7642f4b63255c6ab5baf20da08397e3b540ff97f89f91f6a89404131d97bd9c8139fa65e7d627ed1b8c1bf74c83f50b3909f74f0f50e71101ad2c69bdf74639cdcb4cd6c6f81fc068de0aa684cb9ba6b2110b938d19c7c767021c9fe7f93f38271f825c0064b923235eda2b5d327979dc23650cfffd53e0ae2a9ca3de1e4e95149eff19cebc5b1a383243868480357899cc552b2e36f3897bd183a1c5be0f788d082e811d1e8507a068a6c747eec0b2c1233fc94314dcccea6a4745d698df9fb4ae02e5d54514363557bc6b25841b1bd16b6c6f1849de56c0df168f5f6cb0e112eb0ffcd0f4f393b9a325d2e7f0ae58aca83e4e2e1a69470d7e536871ef7807468c8b1e3176de58302634f8d69200ea245d5a2755cf3d6a14703170132d598687b21a0bebb77d340c9eea1710b341368fce6d95278c87fd89abb41309740896e7329c34b3246cc2d7ef9940f0b234472683f65b175da1ea416cd0528b57a262a3a43c32c6479cd239206f77561c5e4d480ee84ef67cc98779f6236d41a9f5596580cf7b5a66b974177a440a2c879bf3398d9d66c0c4ea499b7c5094e346973c93e486267595eb54e3526d53e7f6db8abc7f128ace03becd564e5d106770662a9026b041a70173dde18f5a88d945de5fcb926f37e752d6eab20f735ce7a69ee395f61c4924d3d8de948384b14ad3bd47c882f41ce8819546eb2828c61aa02922dee2435a8e219a088c18d10d53654ddfd965b395b9bea350d28c3580fa8181cb16092953a3ba4d6c5788c910f46eeacf4366fb569a3f468a7a4473638ab54bd1bc86d011feb54ca04fa307fe7142fcccb9ea40d8060f568be888f6cd8d9c5f1f9e80f60626cb12b0a41b3af229f6d811d67520875b97aced59afd87b68c2207d07c217e6d8455913cee5c8dade649077af4d5c146a96d8e25c94642427c288b5e5be003ab9ec6f9c3a9c830a013c053884f85d4e3575453eda77081ad43266f59f3b9d9f6bae8ab36ffd17dbc800b169abcbb45607fb686f48b1e8803525ca34ef45f3cc389598a07087ca152f2fe83e3c7bd2992444873701647c29c9cd90bf824000fb0e268dcbca06bd95d62e8ff22ccbbc604c766d060e2b2472217eebda4e4177c529d84c235898b2ad48ebddb3f9d6e1ca51a469a70228f0cc1c1579a774f44e409574c05db3c419c62ed95074c60eb9dd9d5e5a2d654dac371fac9ed99323826209e76dd4b64a3c7c9167f777409215ef072d2f4fddb871b56da7e51b9af696be0eefe086d6fc15f1087ac0008754205b6636d2b8b48605c9ee8577f59bd1b4ae671a4b2f801da999349eb094c114cdb3079c420c1d80bd2d35d257762b57a354995c1515a4b2295aec504f516d5182035629cb60c9e7816fd7b37f59dce03e496126079aa544d292c3fdaca9eeff81615cae91feb995a0cf7b0a5ca8d8be751792c8e7606b661aecbaa9bbe08f1727b185824aaa928905b0496a5ff1fce6dd0d75cb72f5013a917d21faf0f36733805fb9f3c3b82ac5118a1453e45a9a5a09dfa3a5d6e457f2b4611c0b61ceaae339d699d6538607747ce4d20fc76dd5040a9bb55a448c2527ddcf1f7b2e0a7c722816defa92520121be14b092abdb01f0a2c016181598b507788d70a29ca29472a2b71c4e7d2b5e55f76eca69a3f4e596b1a3ad6841c99d2404ce2803cac3555efaa769d6efe827bfc1e215ae513878481f4d0e021275e940bfd02d5f17259238f5dfe4e459cec7bf2872b89f994fb2b36f01af3b6f6232249b2e79c6f3f41afba1d6c0294fce99f9875807f5f9f88a96604afc92e7b922e5103e2fe62ab8fbe93675450ccd9cd542edd042611538f91374ad73e68e98e5e95d612a70da106695b8ab0bb8b1b88cbf92206f94341e40e1cff7025360672601672dc544595a09f5bc33e1d1dff6040f7c27f46d6de04b1118fe4441b05dbae0cae555d2e78f2394e85fd67b4e1af936c13449f4f5669a0cd9277b9ade5e1126f92216877048260ab30e19b64f8d44308ca7e0e3564b06637001b67301891eb0744f30104c42db745f2dca7b7bcc76306048df8a639c160d2cf21c669858679bcdfc5fad4f327d08089ec8ce25ce3b03318c0ad120d1da2ac37f779eea5bfc1d3c1314cfdb8bf01f2736251cc4a9a3a065121a8e5a4d3b806bc06c903be7fecb9c58f6b063ae158ac922e7058c8061fde1eb9c58f01b7aa36be9f84cfd42836647dac4a3b77e8649c0c3e1bcf1bd7647ea9f98a34411a42f47fccbed608b768c0270a8dd19345e96fc9d24aeacbbcb0342ce151c71b730d26f2ce9610fe4dc04874bd888e2e302e417187746f6811e6d6178a02c3175b867ca5e57a684b3e9e046a4463e94080f1d23b3f04a6dd606a65f2a70afed05fdb637e53bb1626df3e41787b96410c83e12c9bc2199a1a64417c7070ab0e4bc7621399bb2facfc91108596a7c3706f305e03709149ffbe6873d1ebb594e9509c4ecb1aa0757344e01bb77c4b48d78303bb472cc69c07b9d5765d69c8e544884ee727a02485cdda836a9bc764593de754613d0b9d4258f686c3afefc2a13f81c7ff0aaa92fc657c218e3e228eb65babdd16c9efa62851801ad238bf0b8e25a0a17eaab0e14f0be5b4e75a72a54d15f7581b73a0efbed70a5c29950bf41c6edecbdd81686f090f2b6b21e2e16a00f6cd07a86df7bd567006bacf4b1289ab35128c5fa657bae7ec8c760c0bd7e882dca988a3aadd53d6c2831d495bef57351e5c2ef3e12471e4eff0d6001c0d96a9d1099e7fc829620d598d46179b6642b4f63f7cef426283354ab77ad1bd7a5cecefd84369964508503d8f512115cea8a2336341ebae932173065479c52b051cf4a9c6a349f14a8f3d3ee041a7fa0f157e092a96232814c92cdad8950249378b47dd23bc64594c0bd320d8d36156b8a8fd2cea7c1f715eb1e23a3c9276f8f6502587e36f72203ceaf41b14b69011b222a13cee7f2061feebacdc69bf09101ccbea987360c256290451ef358e8af4b75bdb51a8a97317b1bcda9ecba8151d66322a20e40283c2f52c16dc15ea23d443251d13bcb54c059ce5dd9baea501ea72840047ab8ff8ed367feb15c43528cf2ef6642656b2711c22e1a0fdbaa67e9ec63c2013fc3728b2c11840d3353f4b1126eeadc7ceee24fce0fc26f90fe83b2ba4ca988758c68e0de3f70e3d99fb468c2064d2334ba42b9ed32797b49350cc0fbb80a045078b737b54687978d8e574e23694b44ed8e0f798f9d8f7957f56c002dc0e70006af70f3f0908467030a30a68a8ae271d07dfdb5e52d1a10f051ff38751d312021bdce74edfa37234076788a3638ba94048aa5f06dd2d0ac6a406e798f860e509ccc0b462021ec3041a0c3860b02485033033333333333333333313bb52b68ddf5fc4162252ca4ce651d20c7164a56c5929d269c35f3233f1e9ccc435b67d7b5224761e820b330c3c0cc4f15c8b2d681fbf13792ec717cfb5d08296da7362f3f83554ceb5c8829e33f4c7959d6b8105a573869054133fd3b9165750620c91c793425e87ceb5b082162f6664b738e9cee25a54417ffbb8b431fa22535c0b2a34fac3b8be4b9982167ed8631dcb977ea049410f977363ce77e6b228689d2544e441c83829838216fed669eb2ca7ca9ea0a5fc4c5e39f80f6ae204bdcddad2d487c939a409ca47bca9eb41d2d2102628a9fc52bcb669f7204bd0a3b247df977e7e742941f78b88b9b47c2c5a25418fece3fc71f2bd6b4282d6c32ef13c8e906c263f82de1d218fe641b6cf911b418d98795cbbedfef7c38ba08f7b10fa79f0c389a0597e908c256163f5f021a827fa3edcfd74273d5c086aaaa8d4f9838ff31d043d5ec74a72fa39f10341c911fd2122c4899cffc1295f7467a7bc0ff4f1f8c7ef8312f793bd079a76948b55c4eb99077ab5e6cde3ec40a9203d29d8ad850e74692dcf14117d5bb71639d0bef3791e8f07390f3edc5ae0408ddb1f7f3c297b68b8b5b8813ecca37dc1c7a3b6885b0b1b1c3179fcb4570325541efc782c95c6f2385ad040edf164c77a69f778167abd79b7f665efcbca42df64e13266daf2f05868194f2acecb7cd8c242b3288b4bee92fe7b85dea3d07f717a5421e20afdeb23f840227247d90aa583c966f10d2b7479cfa1bf5f853ac14752c5fe59daa842efc15bfb3044aefe53a1a6ba74fe19920f7354e895c7298b84ea182ea7d07d37e4d8cf1e854da14f3c993ceacdc9a152e875ef622934e9e581a450cb3c4ee663e871ce8d42fd51f24b21eee35545145a48e61a0d3ebafa43a10fa67fecf529aa7d182814b3da78df249ef34fe8b9faa2674fe8b17b903bbca4137a6e0b2f13cf4243c209ed47e3744464135af8c5581a43fc8649138a45c790937379349409254ee6df9758f619c28496bdc7b2bdbf211d5d421f87a0b179fbc46f4b28e5a59727c9e57c1f5d093df76ec772caf7b9475342f91f851391aa8fb1474f421f4b8f2d5e4c129afe3885b78b8acb1e1d09b5a2b2ed75a698c9a321a1e7feac192347eeff116a900beea30be15977843221f1b76683e5742374c9ee58533d23f49c265faa543ddbf945e8a3cc7d97b3af082555b08ef55eb9dd2742bde99314f224ffa847849a4dc3b884658cb01f423bbfabf0b91deee386d0ca6356fcee3c88d60ba154c6fd28b49ea5bd09a14fd85f164d0f4219ff3c8c93539e7659106a99598a9d18dc230e849a26a4609b836c790e20f4dcc3980731ef5eccee1f74cd23f3cc632de970fda09fb5d666b83ca86ffba05d5927fbc10ff62fcb073d4fc2c7943932f9dc833e793c8c9426c6c89ed183e6d3c3c83962f2a07bfc9308ed132b65f0a0c9bc5fc78fdbe351e60e4a69d9a57ce7c137ff5c1ea56419c33ae8d5a33d0a413a283132dcf8c547e68173d0e3f336739e8c173c392877d6f3229738283dde1074cfe35d4a81833221acf2cc73d61fe50dcab5f7e661f53032ed06f56626bdbcf5388bd6062d270dfd0dd75e166383be6934660b765b295b83eee17d3cf81ed6489ea841f3f130671eb45e4785a441dfcb7c92e2336622685044234eec182344e60c6abea54af9f9aea119b49cb26749f6d6f09541d1cea36031c84e5dc840e671e50e5fa931e8313efebd5ef00929312899d71e36680a235518141ffde4b1efc460505a2fb24711ce473bf11774cf18b2d5c411ff41ec0535c4cfa3fca71bf77f7017f431cf5e9f7bddc90773418fb3f749bee42da8953d46d68d99c2d4829e0749ac2e2225b13e0b5ab8b015e1c3eefcc18266613b4363cce67905352fff3cb4dbe36605fda4920f52e8c176aa0a7a4e1d7d2dd6f926a7823e331debce3e497e0aead8e6cca33049822e054d3e64f89cca5d3e51d05b9325f71e691e6c1a0a6ac54859b6182bd54fd024859c7162c60e39768222a12ff6695baeae094a9c6956884eaed161821e938ffe8de749bd04452cf9f6879c978729419dcce3f263f1c99224a81bd3f53e8ca0b1c722418d91b2cc4b95c43f822263a29957413246d05b43edb45e0a9a174149b92db33e8c760c11b42c1ffda261728772085ae5baca2f3d482e0b41b370279eb3e5086710b44d1ef772b0ac5301823e9b8226eb88a9fa81167ab36932e3036dfe3c48964c0f94ff0a513de8f1b0c5e3819ab325d8e4daf9dced401fdc5d98905bc4f2381d6831fc828774c98152ad99b31fc6368b033d05391f8f4ee9343750d3fcd4c9d4574e990db4d48390f962f78fad813a163abf5fba1eb504a081b2ed310f2e9b8532531f2bed99f72044166a5959d21f4b1e753016fa45594ae5e3710a135828e5f1234fc8c3c9a95ea1fbe7f18cb021b32b94b9fb51f627cd29dc0ac52ba74b7e145e638576ffc38e970b99145a856e23d6b119d20459154ac863898d7f124a4c853e36fd51a6e021f142851e9eb349e82cf139851673e30f63470f37f438a650bcef7b346c4c315f0a2dc23b6ef098979b144a06d70afd23fbf16714ba54bece0813bd57148a85e4e7be98c584422faf8c39fc4398dc8342dd3c0ea1524cbb3dce2794201b664c6f335fee09f53b2ffb67e2bddb0935840c6e3945f868d29c5053ba9422266cfcbf092dfbd9fd60ff2c664da86569528aaf4d92c299505b621e478ebf9505134a56b93d804be8d19dd27b8caf499d1d802594efed61ae88659bb33b804a68a113319c98568fb33b004ae83d398f4cf2e0e2bbbb03988432196934e7e0e293dc014842c929273d8ff97491dc014442b7320d0babdebb72070009dd2ddbc64b5f39d36607f088879d193e843c3a42f331abb1191ba1c8746cf9d411240519a19ec95b747f9ecc0317a1c5af8ce924cffb7f8ad0e2c7973eed54d9e712a1e49bb7eef1a0e3de0511fab82485a45941c62c87d076caf43da738cb9b21b4f8c3b44937770ff256087de2c741e4e226758c10faa8235b3e859e6907a1ff3073e5987df74d2208bde3658e593a76564820b49fbab62f9708290208e5e32759278da9ff3fe859bceef2282447dc0f4af864c4ef10da711fb478e5e3e84ef141d39ecfeed0c30a5eed41d31eeb51b0ef71cea3f4a0482e891fee3ce83592e13655b6d8e241eb0eedd1f9c7aae01d94ed24c13ea742e7eca05e48cc3d08b9e2e6eaa0e74fe39553dc24294407f5930f7ab815cd414d9e3d8e29e5303e5e0e6a1ecb048d5c1cf42cbdf3187f2a5ee0a0c4ec2194c99d8f2e8f7d835e1f3367268be1d563dda048be9d3cf16f83d6dbc3f1e1e567699f0dba77fcec13ff3568d7916361827fde5e0dca66d997e4585dd1a741338d319e3ca79edfd1a0b58b6e5b68483efb199454153faab9d8b9b71974afce362957cc4d771994a8241efeda339b26833ef21efc256b0c7ae71f04c9581dd7a3c5a0fef0227bf2fcb3590e83e25942eb06d11872c0a08c6796f194b13b7e41bf6dabd8503e1e74c70b9ae5cce3f160de2ea81d9faa7ab35cd03c3f6f057dbbe8e416f437cb9762b03cfc33b5a0c4e497e7d5f96b320b6a979fc45029bca72416b48ace83dddc5c41491a531ea730333dda5841b9d910e3e317cb8da9829ef4bdcd4b53bd68a8a0c69a8b7d157b1cb33805cd3523e6ee8d0e2d4a414fa9ef53cc6014b488bf4a49b2fd7b080525b7e7888d9e96fd9ea087b3ac9d42654ef939418db1735f48ca3bbd09cae6870fc4c23d6c2668f9871324e4b204f5072ec187e1c7ca2d4a5024e2a61c92836748498276a9dcefc7a32041cd15d3975dfe5ffc085a6d57cefe0fa3b119419d9cdafc3c9249ad1541b797cf9f1c1194cd70f33926e33d6c086a875c71613bdfe242507b3c4c9ba3ff37b541d06fac7f903c02043dfbc2070beb074a76bf174bb339c4ca07ca565c8ed7899cacea817af73e2ac9edb250f1408f7d4dba3fa8ce0eed40976e0f8d94f76e920eb4d0b33823a3af3194032dbefd403e8593d9078003c5836ddd6728b3f89103b8816659222e5bfe61d21e39001be87978d73173f858278f1c400df4fe4c521afb49428f1c000db40d3f8e7970c942f478e42c94df1aeb71083f2fbf2cb4df9f6c19120b7d942264e70f9e4cf3b0d0366adae3a58b27fe2bd4303d4ed1596bc2f4aed0438a9c443e8c0f726f85b6c12b598e7f1115061964d03ac2db432adce62b20630cbc6e88af61673b4219c81043f9f266c991fe3fc41cec628c114604880b32c2a025cf172f3ea1c17c3b11c80083166763fb5cf28db08fdb0803c70a0e210adc172e8b279931da739e64175d3418376c74d14505800c32bca0fec882861e6cde5ea40bfa58fc2b5ce8ac99e1dac01a61dca8e1566170e0410dc60d1b6643061734cf2136c51ec68895b9818c2d281d733dfaf1dca6df73e4f0318e0232b4f03804cbf8579d2f560c93808c2ce879dc624fb787a71f1101410616b4b7e8518e1ea74d1ede1a47c67c40c6151437d396b788f1876d7b8e2fc6b821861816a0e1050d316ee068401816a0e1050d0674d1c51bd2051956d024cb838ff2fe7e08ab0a4a0a9eed42784a0c4b830c2ae8695fcb7ab34f760fc70a84a006cb98823e267797212bccee2285228f15c888823691d3c698e8b86b690432a0a0a449d7f1637a2bf860194fd06b5f6e5be3423f558a9e20c3097a464cacbd9c2ce4414a13d41ec406bdf758712e85095ae61e88e41c2386187732838c25f897dda22249b894a00fc23cff54ac89d91f639091043d66061f6b1e4632cf8c18642001f11c261d79399c0f1947d0b453cafad183a4e1149c2c30c05880e3b8f11e06194650aa32c2c5e9983c44cc1763dcb84011b4e9e039add345c0045e81147cd145175d747144d0e37f1a4d663d9699a40d2414f00d306ae4f0310c8d0d3cc00b07e32c0aa85ec0840290041943d0cc65b24ce59faf39650841f381e72b8beee03f8c28084a281bb71c7a54774137c18a41856c400610d48c29adf4dab9637f2241c60f94f2ad24797e3cdb259923c8f081aef13cb6656bcb4cda0612911941460ff4c998f3a8439edd88370f34cdd61d3e275fc5f8610349083276a0e5db481d52c43c1e5c4ec9820c1d28b152f8649907dd16b42ac8c881f2a13e44d6187918f26382bd80182ed062820c1c68ba9f4df3bedc535e36906ea0fdb82bf36e3b2f65dd06528d178001c60abece0b193650ab471e23f7e02b26ce34bce8a28bb238c8a88196f65d62e614443ac31b98000d14f08d093cac2083065a70f1916464abf998a7b18109d020356c310b522e1f678e0eeb8c281f74f8fb707994fc65771a5ed0d8c0046874d1851863ac610b59e869f3f0f244f7f082861737061862a4e08b176cb1dfccb4fc7818c1256c010b6d3e24cf5539937597d7832d5ea1e59c9c520ccd9115325fe4086305375ca18f3c87dc90aa120130c0582f90b0452b34bfa03df054da9a47691b489e631d0797226cc10aed7a1079167672802d56a1ebb5c4aa0d0d7df1b481645d10610b556839c93334444d9e38a742895f295e6b853690dc71e4a841e462bc600346630020115ba0829d94723b8592e12384d1f69842f39c3c6609df1b53d89442cf034b51367e2de1475228ef79a3ac5f43b08d8c428fb3888de38a429d7c99479d35e7b1ab50a81f1e6291efbd4643a0d0277b1e89e4f74893fd847e9a573f0cb72156c613da74ce39169a1f72ae13fa38c69114438d6550c08b23470d16a0c0dc23b6e0847677362f39ee663fde84f2b33d489331efddc69a50425ff0901fe6bca79d4ce89f2325e67a49c45f4c281aa273d617f136ce4be81a6734e51f242da10f44a22acc565c7fa6125ac8e3caf31b31e84885125ab66f8f47be1b9ee39350cee2734baeff1f5c24a1a74dd935f2201609358f4eec1ece0214d4f8752b1580406c01097d609d67ff5c46b2eb8fc0521ef6b022f4684768f9157fca762e82df084d7e783f5f2523b470979c31858ff268dc45a81392fd3845c61e0fb45544bf3d90eff71713a1794e3fd97511c72d88883c48f0b2f4a3cb21d488f36237e9c7525531841ef7fe49f356be182e8416929276e89310cac4f52083c6f9d41332087d20e20b42cba9720b61290f43aeb60884924d3f69a74b6d6d3b20f48b17a7ddff2ef6ff412bc9199907a51f6f6c3fe896357b48965348e9c73ee8ad51179e6248beeff141b7c8a3615287b90c933de8bbe9524cff6531c9a5075d7cbb72781f644c1dca839e4b627a94f3306b4a3f6c20d5b8d166045be041d7f6c1e5d094526d4cdf41970c5749d3c70e7acca952d81ecc9d74a50e4adaf09f7ca431a4701a1d4ed397738eff4173d036a7c2a35be3d2440efab0662bacc3c4d5f58883a6ede3614ea6311c94493e929290b937a8ad25297606ed6188881bb43ccaf73379a0397fb60d5a1e8886dbfce165bb6283de8334b5d3567ab6a135e89aa73e43f368abec871a940a9fbfc73e97065d3aae3d68cc13b24583e2653796417b9474ca3328d196fdbc77b747619b41ad1e74c417898ff93165d0cf3e83fe288748aec9a0581eb7e60d097b53e318949fef78c92a34a6580c7afce5b17e8d44cc328541970a3144b0e47dfe0183fad3123fd0da98f2635fd08717f2bf780c9b3386bda09c65bdfddf781714abf4dde563cd1cb2c305fd360fac7a3879efe62d284973220fdc07694137d1aaebd1d8772bb3a07de50933f3c18292c73e1ee4819dcbd86faea04d841f04b7928b717f58410979587a2e115641e91e5be851aae89036850a7afcd0194ff39b82924d463a363f27b32305fd07b7b9b4caf3fac74541db1ef838cc3a647a204341ff3c7f923b5d75933d41cd8fd2d39eea9bf83941a9f8f120ddbb6be89b34411f9b86501fd38fdc2e8409ea8f07123174c4c6a8c91294f910727edab2cb185282d2c9ae07731f248f67920465caae32273bc94c3f12d41e5fa77afdc146ef75043d5e8ff36b88317eecc318410ff90377dd14414da66ddf2983e60e2f11748958b37fe3c147f110940d91d3fa1c23b9712168613729b37c8cf97282a0c7ffe837cda38ec9152068efc3101df4f3870bd50fb49ecc3b96420a9bb4870f74ab0cefe483b03349ea8112395dfedb7c1e6f08e18166f79a42de0b1b44dc8192b62472cc1f26d7d8d18192934729f2531e4b4f72a075b8e84b9dc7e2830eb181d401099411b6c081e61e31b3454c10c61763e058013b8e30be386a85c083a0b0c50d94b013acc73a61ebdadec2066acaf22ebb9ff6deb52d6aa05fe46c394e84d49b375bd040b7507fef6122860adb30c11738eeb598851ad6a394f2c43c3039dfc1a801c67a8e310a79c1802cef1b61986b210b75aec7655b1af59ec57123478d1a1dc6d670c1174f24c70a28e0822f9e0480075ac442f7af1f04fdcb483b2cd4fcf1307cd23859f62b144d673e71197b92aed0f2e8ea33ffa0ffc26f85a61359a7472cfcc067859af330e7b0715f85f26123e5ea90244e578566995fe44e853e1ecfa7f83e1172ca51a1887f9a1ccfbabbf2532821bf64cc3965fab42994a912bdb2080fe152289dabb77d581bfb430a3d481e58be4e7fe119852e6ddb5bd92c64dba2d06c763af6e73876e95068553defc3ecdad38342df0893ca18b378f813ca8bc414df2bc755ec09ad72f9a065a4f24ddc093d7b26e7c41c29ef70428bf33139cb90f5c7d984f6a92f98bbe69bbc9ad07275aaceef9135b599d0623ce5f9ea249e9298502c84cb77bb944b3797d0c7269ee3bb22c2b784ae3ff84c7ab143379550ac6faa6d37048d21257433dd9bedcb7b119c849eea36c73c3dfe1e2f097d90c9b35c1cf3612612da7d98e492c2bc850709357e0a3e793431bbdd23f498272b2c4cce977784329d3eb3e6d05e7523b48c8d152efe285a2c8cd0ba32998f07c922f4288b50e2fd70f228e39f8fa308e5b3dec7bbefea7112a10f8299a691b20d2522940893f1c3e252797608a5e23f87648650aa92eeb9ed46674821d43cfa1842f6082194984ff46a7f2c2c64106a745b88e6d4838f1041e8c39cf22067f1adde2b10dae5b3ac4976b7471620741fd7942f3b2a07ebffa027cfe310fb6e1fb1de0f8ac4d403cb9dbe0f9a8f3f4204bd0fe7a1e783225121fadf833a977e0f7aec8dd41ab4268ef47ad02e2c8e8fe7255efcf179d0377d66d7f661cffd7850f2208590e0f65be1bf837e756ee383df0eda86975b9ef7083fbe0e7a6cdd87f1ef90294e07cdaf3df4ffbbb7ed3928923ec25d75b0aab41c94be3ddfd8b9528a751cd44c91bec2b423580d07e5aab3bff88fab73fc0625678c66ebe4c51cbb418fd883ac7d71c9a3701b140bc1c7e31f79d8a0598f4362e66c2af1ac414d9b3649e6851cf955831a3feb4bc588bf76d3a0560ff220460f2359b868d03af838ff603f839ee36538bff2109b41b3cf964751ddf12d832e9badc7fa9967c26450e7c7e9dd3a7bdcde18f41f88541eb449b09818f4ee308d1549d7220ceaf8c479affcc3ca31ae0518d4cbce9f49577197712dbea08b77cab0dcc3b190712dbca0f8487cdc8797ef3b742dbaa0a51f7cae0517140fd7c9f163370f270f7cd87f9d0791eba28b2c74b041d16f1fd54ef0714784dc68931d6b507e73c831bc4bd88e4f0d4a1e68d86e8d9b633682858e34a8219bd459654b083976850e346813f2f72358a51c97306e80e145175d781837c06029749c410d957b703ecaf2d8947a9841ab0ed19ef20f3c876ec7d05106fd63be985765ca8b9d0c4a1e79969eefd018b41c43996e7efd131f8f32748841a9df782fb9c91df60d8316bde924b4249d8945c80c1d60d07b984b248e87d66efa0b4a8cb69017dc7c1827c40bda57a614c6b72a250fe9825be5bf31f42b5cd02bed64b0db7c3b6d6f41db1e7778f191ecf4a905252be5f3a99825eb87b2a006893d8ad93e080b6adc1f65e5911ee541e657d0ec93be7ff2815d7cdd0a7a8ab794834ea68921a9826e5325d783f0830a7a1e74069f1ee6b2b1d41434f94de2e371c9a3b9a4a00f3ec5a7ad9add98c7230aca54a8cbfe1e4241fb2daf9cb4c3c43cba01d1f1042d480e2942ac181b48e984e5e5f57e2e721ed9d6845efc531e46de1e99859950ec941599c672e51f4b28c3b527cec73f324f133a94a0c6bdc9a12ad97ebe9813434712b40d8bcaf9f3bb154782621521c6b34e3e318b47d07346c478ee91e75499111ccd1aaeede412c3021d4550a27efcb3956246a794317284b1b51d4450ceb232a5d89db77eb00da41ae5031d43d0afacb3d986fbd8686ef4a382d02104bd3578885fd9accbc7750441afdc13c47acfeb7d142068967d29364c225decdce81fe83ffc96edbef60a55e718e30b433fe8f0813e31227eca3e92bfe0d42865848e1e685fdd9d52de8fb252f846a30f3a78a08610dda314b260075a05bb907f6cd9bf59d3a103bd51a37b6bdce8eb41470ed41f8cd78bf8c8f3789c1a371a074acc65d39eee9107fbd4c8e163908e1b289a2e6b544d12879bc0045fe0c851e305387264870df40e1fe33b75b2581eaa2274d4e061c83cbafc3fdc1c059b820e1ae873314a33350b3d8bb56d90dae418e38b092004b89085da39a3f9def57a1030c0f802058f1b70118b07ba2f72ba311ec68a314696d5175cc0421f648e13dd4921aa2e369012470e3166c0c52b34dbdde0833cec81697c3436f0800fd4e0c2157ae5c468979c2b6d7e6d208571e341c5821a5d7431068d0b6480061860acc0011608c3025d74f1062e5aa1e6e5ec0bed398569062e58a16c87ec4aa3133efc9112c0c52ad4947b7bf4493a8f2d721b48440060e04215faeb5cf2f15dbb8708001c70910aa5f2f40f3f6264cf47b5c0c34085e253dd3d8e1e85b0931826d8309602360a118017b8388516f2a043dca51edd0eb181f4376a248d0d3c408cab0117a6d04a733bdf674e6396bf68b7420417a5d07b9443d8b7b9a46d230220105c90424d29d6e5f1fef1dc85c373dc60410d1384f1c528b41ec6c7b81736922eb7815488fc810b51e463cb1e5c426f4589022e42a179764b392e0e2f05072e40a1860aad4817dea43c57038c5d410e1c5fb0a0680c5c7c429f2cf9c9c38b9d6b624c054250430c2e3ca1444ad59193fd289c5c6c20e517b8e884fe3a26f549325ee082138a544e3e8c8a9511496203698c1570818b4d68bb9d63442adf2f38862614fb9efcebec13efc0f8c206972d7091093de5d84d3e8fad3fca63429f09b94372cbcba3151b488bc36b84f1458df631c6f802d1c0c525f4b075ef6953598a2164e0c2125a5be87dc7709ead3070518927c7caf89e23377b3690c6e8305670e3d4c8b10231c2f8a206a9306e200e2e28a179880a09f1f18f65e393d0e7b54b27b68f3eba96845af37b9a79b4b1a15322a185aeceb5712c04700109cdc552cea053fb03f31fa1fd289be558e13984cc3b42b350b97c52ccc8b37d23b40d1f684c0f6f4668f17f142a6b92d0ac7e11ca49b8b4f9e2856cd52b42fb893c3dccc9f320fd9e08bdf20f7e42ea2c77dc11a1f9a0c385100f2339f743e832799647d39a9f5c37841273a8cb215f92e5915e08cd63ca197bf89973c43821f471754bc8b63fe898f34168756367f129e4e9ce05a1560f7e94dd7ad8ed9b0742eba01d7e1c1f413fc401a19d7b959f94669c88ff4133ddcba952eebff8e17e507f530e4dd1f93fb5dd07f5376304b94c66c96b2ef8a086e6b14de2ed416bbdb94d51eb41bbf03a0f7a99f7a0f3e0c4833ee92f0f3a79074d4223a4335a3be8dbf1fcfe24ae83e6e53eacce21aaef07d3411ff7c8ff2543e8cae3cf1cd4f8d95bb2e44afa838f1cd454ed553e1cd11f274f1c94bddcabb431963ee5c041f734c12c467a89fcbf4189cbfb9e2ae4bceedda0a4affc9179fc3d8cbb0d6a54654ae3efdd73b241b9ce0d9d35660d4a25fbfd17b31424450dfaf82d98d7e47fc9591a74f73cd01c9d53e50d4183fae3f0185fa77349c819344f5f62a93783e6713958689c1cd35506f5cbcd47b579149f26326892f338ef8ef487fed83168bec94653e6c560490eaea9077d8641897191cb3d1d6aeb04833eea2f79adbd1e4b3abfa07cf6d65091471f2a9b5ed0c3867bed9b14662fd90525860a213eb8c979b42517f4cd52bb793c486e41cdede8970a4173afd4823e4c13977c3a7adfcf826ee13c4c59cc838b1b0b7a661ed4f5eeff0fe42be899b936bbeca7afd30a4a3e89399e593952a98262973333e28f872932430535ee6f590ab199829a2be4d74d1bb157a31494ddd1e8c1c951d0f225ebff49694b73a0a0bb6b5dba38cd14934f504b62e62ca4aecf3a41e98edc10392f6c639aa0dbe5f3b00ac9de1726681df263cc9aeb7fb204dd63ac3ffb7c3c924c094aa80941422571db2809cac5db4bf2c18f3af6402428297a983fa2f23e79043564cb7cdc9492e6e1465027bef948c545502ae24dceed3922283f9a93dca11d82922bde7788551a2b85a08faa6359b094b54c1304dd07d155e7164a630482f6e17dee19270fb2fb811a3f1ec6a433e59bf94031bbd61063fab147ac076ad618b252ce6ea7e181666295e7cbc5a222b7032d661a1f54acec79b0eb409f1e4c36f7c87918ea1c68b1d25dbcc9838f3c1807dacb8fcc46ca0d34cf23cb9107311be815ac27d924b1dfab06ca78ccefa3d9d3a450e18206fa5d8f650eb6cd428d93bb6348f9c7526db2507b103c869821a7f4618b85769f3ea49367ca3fd660a1f728ab8257c65ea1e70b9322c4ab98c162aed0d364a99c989c2a58ac15da647f4db1477964253156686ffda93f46d7c90f5b855e3a92fc5dde3bebaad0af2f0fb323b5f5384f85a21d15b2897fd46551a1e6f79177def4d583f614fa7b4596cb79ac6d27318576313adcce88778fa4147a8bf4e6caa32f8d8e9042b9cf83aaec96ab7a181985e6a3180d69c425631e44144a1eff789479719a820f120a2d73a833f11f6d9b0d0aed2d3687d0124f79747d429d10c385dd7ca97c2e4fe8d23ea88a6c9b72ee5427f4e03f1e0f62cc92edb3c509e57af895119dcbadad4d681f830f3397a634a1a6083d96883feee1d799d03f528c6c19db4c312694d71c91077942fe9d7409c5f663f09445b3c78f2ca184ce1e423afb20c71c5542adcf7937234a68d6154932f9c07d144293d0935bcc4a194b344448126a5c9c11fb7145cc124542a9a808333df24108794868b9b28ff3efa387d53f42892561246dd686ce38429354bd5f9669846223c1a5b53ea499115ae77bf76779b617a1bb4ea4b3d4c3baac22d4b7ef88fa9cc4af4b84723eae94c54584e62149ee902287504218dd3cdeefdeaa1e86c021a31031904108b572f688f37dd6e3b36c20750d1c376ae47013180d42fdea4dd33dda8e0bbf0d244168b5517ee2fab9cafa40a8216be85d88d0b7c801841aff6effe1473621b57fd072b34ade72f483269b6e63901e456cfffaa0488c31e6ceb57f96223ee8a697a5d1839c99f9c306d21ed4f1afabe0c3b0aee4da4072146c0e5b010d2f68bc20871829d00ee30b09bc0087af000334bca0e12b00633b40c30b1a2f7009d0f082060eb731c64280861734bc30468c4d418d76a24205197a50ea7da04144b2cedb79d07e2ca1e3e1ed21328e07adcd4737ed9ac7e5dfb983aed94374f4e893dd6c07a567bafabef3e63c70eba06bf8103b2f67d31f8774d02af6cc42ecf2527873d0c731773ec736b1601239683d90cff7e11b2c261507ddaa2426058dca8a1e366a101582837ebad71639ab8721e63c20e30d7a7f859d0d93d9404237283fcaa23552359fb90718e70b6c833a19a12253ce6a84b15c0120820c366856163394e78fef190ec858836e322e3df25bb61ba206edccd2a50abbe099f2c811c61729c80ec84883fe9a7e1cb3db5e59e23690080432d0a065093f3c9fd483bfd86c20d91863c118a3b4398392c7f3ffe61e13222e1bd4800c33e829a488eb94271b4838100332ca70b644b84b1ad7929771d0075191f66b34f7d970d0ce471e21d76784a8dfa08e598fe3b3a716cdba411f976c9e2a67daa08fc7a3b8fa618798f1876183d229e6ce3013d7a0c685bc49ba59c2f24035e8992a5b6532d3a0440aa7314348fe713a34683d69521ee51e6796fa0c5a8e5942e8418946e698410f325641b32b83e65616636124831a2c44bea6d818b492107b24fe9b18f4e10fe73ea790c326918441cdf483bbd49eac222c306821e95d62595fd0eaaddbbdab7398182f68e14e3a56accd3cd6a80bda4f85b8e741d2a0792ee883f68a29fdd7b7d55b503a5446083924e3bf870dc4c1444050002d68417e53b774544bcc6641ef0c492b8f435b226bb0a085dc169b94bbede3608effc2c618a53450802ba86943463cd9e093c7b182f6e3a9ecb0915305bdd367e93869fd185752a00054d02385f1a46121c623330535a710a975d3c406120a70dc68410e0fa3460e1c37c6a80106189b8231cc040a20052d434e5119e7c7c7938f82ee9d3d0ff322796be8a1a0560f6358fa710f34b2fe043d870eb1f5da9231e74ed0877994926e8e7113f4c15cf2b157cee7236f99a058e69489e7b9c82f97a08f4ec6f898f1d3a1344ad0e487f97f2cc187f9956292a04c7baa9422570609ca8fcd26c6f8c3e8c14ee6089a4f0a172fb4627c4bc6086ab2749a479ece5398781194d43ff6ac91c93f3448047d943f9b278fdc10f410ab1ec61ef5c8ad262168c1479a3b664132dc202811f51a26b2e51fe4f1704001809078fd28c48f7310090af003dd3425fdd45afb40398d4ae9471fc1e4de1ee8c3ece9ac23cce5f7381e68b3df39c7de5e5fba76a0866793b8d1617e3662400174e06677081fa54971d35f801cfcc3dbf8f8cc1772fb05c0011e12c67c14bf17d92fc00d8a393f4474f21fef05b0c1030997079552dc05a8412e5f519de102d080ad9ca12b7f1cfcfd330b7d70f12c72aecf0c599c35f6c7f6927b3127164fc867b25d937b9439b0d836b9c7e78c08ed2b087353e1e24b7c3e5dd1a4caefb8371dca561c635554454bc4cf31ac78cfa326e656f241ceac82101bec0721aa22cd210feac254b439b85f68f2911454b079bc97dbcf7f90e2a7288f63d0dcfe9dc75f9b29aedc03afaec8e3f4a395e294eb0772d33d6329468af330f45e97cd566b368a43c6fffbdc914b2511451b636ead5085e21e4cce31d9b76cc7415188f9ceb12769d89f28a7943dff30375b5b3c41d20aa19f6793841fd409538fc7239939e1cae5443d9e62969b20a7ce61dd83978deea1097d7bd83e2e1f072b8bd306d28c4ce89f4192a7d8ef95073226b499ddc8e963fa246973092d7c18257abee729532ca1c6d47a3fcc1f68c7e9e18014d0704006687c0f6654024f61df59e63b85675042cb08162e6cdb6cd073125a26d372b3f3128b184928a2179af75dfe7347429d08fbe2e7963df92090d0c7a92c657b914b39ab47e879d28548a4d81f6b34c311fa7e1e4b7dd0faac106c843e3a1fe4fcd1cee6b8650623b44b62239d4b7c2476d940224a3ecc588452e93e8f6ea67ee0f19ba1087d9cce365b4df0f24163030fe80884618182c38c44e8296798b3091b82472cd8310c11ea664bfd9affcea3e643a839c4dc8b6933cd7b1e3690da57502a05330c9167e95108a982846fe4a8813ea3107a1e7525d1e998a21c2bb0402184fa9295638a9532083d43eefd2cfd0b9bf906660842cb8314d25d0f2f864e16e951259811085d3aeb7949dd66750b0825b3ede78fa41d3e8ffc83da152b55464538b3d806528660861f943ead6467f5e3c18bb45d745154830a1141cce8839e9f6f7cdc739a627e3e2879ae627af4c3d798f13de8319efe3866322fe671f4a0ed650c139b1c9ff3202686197950238884bf9f8b91edc5831ef38f2385c9963be8c3efdbabce1f8ff26f0725a58a9d9c3ac67bafeaa07f9098793cfa8f641b3a68927934f2f538fb870fa32ebaa858cc9883967b543f4c16d15f773d2a1533e4a0fef9a754e26fb95f1307ad2a8444f01c9d3b446c0a33e0a08f2a4664feeea530e30dba841fe7ec3e1e24c330c30dca5b867c795c26da16432fcc6883e64963638c793c1ccb221866b0418df0dc7d11e226f3be067d3413537c1ed7d01f4c35281b83e68fe5bfc7ee038cb56111989106bdba62cc70192966f55963061a94fc299f9f46b0f82cc933e82797c7298ff3e8f3f8c7f90a54e019e0c023b730c30cca4dcd64920a1a2f3a05cc28837e1e95630a997f2c1321839e2f7e88ceb8668c81a451e57b331293ffc00c3168e51df4738508f6793c2e10063d64cf94c2a71e0c8a26ad8b0c39868980195fd05204cb3e4c9525e4d00133bca0640c3b318cf6b8b5641b5843053e469159c08c2ee8217dc46cc50b1352980b7a0ca62f1ac34643ce6f410f9e9b7eec3f1e0677affd460e240882195a50cc83d64588c1ae63c60033b2a07ef8e03121c6f6dfce06d2230133b0f0e7ca9b3939fc34c5063ad18c2b28e21e839ba4ce41ee24e4c50c2b683eaecb191f72db43b20aba858fbc71cb5ae7c7b924cca0827abadf9edd233176d740175d00400933a6a085f29479f4b1937ba30df453a30629c771833540a4a0fe284c7c26fb460e22a40a84a006ce88821af23a5ab3270fbd4928e8b1f733621e6f8514fa2768f1c92579e4bbdc98bd2bcc7082b2e9a553ffe0c7ba136a82b22db2fdb5d5e350be06663041fd4a519f23bc25682f2943ee88caaf219335963043097afda07c983fbac85a9fce4882726d3e49fc3684fd901948502363f77263f34c0abf6017b8f78d0acc3882263fef1db3764ed9e5d7c80ecc308292350f7336fc306dbad015411df3f7e18c86d13c8cd840a232c132e03c308308ea24cb11396ed61e6d65086aa86cf16727dffe20cb841942503ec998ee6bef5bb2333023087a6e9cbdbf1c7ff86d0341f32b13cff9e1477fe7074a5cf53022cc7c6c307da0a7c895d523d79beeaa0537c240418d31be3837cce88112c9734c2979d294f2e68136fd1733b20ff6327c3bd03623c668cb151d689b4346e69186468ff3c06116a0e1050d07438c156c2003a502c086193940cf7e1cbe13c31938d0b28e5555ceff726133e3065ae52ef968c960271f27ccb081dad7eeddf92634dc37a306ca5eceb1ae07d3e3c1c70c1a6819c4e33fa7cc42e9bd4f169ae541e4e63c6de2c32b168a94e491f5c8760ea7c34233b1184452475ea1ef997965f857de0871859eb6ee2df70f7e36f7add0463b73b66031c52f9dd0b5a083159a668f8723b53bf16734b5868e55e89e3de632a9fefddce2850e55686d173fd2ef7fe5bc49857ef2533ba2b32173870aada32ff58eef76dab89527749c423d1f4f089b7aa9203f8a133a4ca16c0e163f79d7a147f952a8b1b44572ecb1ffc8b10b1da4d0f4727a2c6d9dc56f5846a18fae4d2c45489d3e33a2d063570a49d7e3eadf3e14baa4c823df94bd21c62da0d0730c7916e1db2794b90ce1c374f5e3815ce7097df021f230fcc8b581a5136a38918dfa7c5a3d8898d3c109e53f744adee3f128434e353a36a18f433f3a7338797398a2096d66530799ab9024ef1de8c88436134436dddd78fc3c30a199e6f1d0da63191f7d542ea198d7fb7b4d1d9650a4454253c8e36103a94618cb5409ed23e79c4fbe5df2b591c372d04189c7df95eb7442ce1ccb14744c42c9daf9f1f39fbca8d8407a74d185c3c01dc7538724f44156cce565e15a7b22133a22a16cfe1f8418fb5ba1311b48e9840e48a8d907f9337f5bf7208623b3d0f108c5c7ffa3ccc173cadc88c6061e9001a342872374d1ca726d31db08dd4a2a687c8f47129bd3444de860845adfe1c7836a9d4f39dbb108f532ecf466e5d478742842f19a90eeb33a52dd6603294b22f4d184764932e932c6b281e4e5071d88d0bfbcaa46524f6ebc6d20911e741c4289e4f29d83c5f4c97336908a071d8650c2e481c8e48af12e5236901ea4838e42a83f4e3db68b9836e57209918f2a8cef7e8f1b843ecad97c6c31f2b0b6cd2474084269f1c18777fd6b66df20a123104a4836f5d96345e7900684521123a68f3d0ac92a8b0a1d7fd03b6dbfc7c8dfccf9f78332913adf072559eef083911039315ba1830f5aaacd98aef22ccbba3d1453a963b7838f2974e841f9eecb1b4332851c71083af2a048e7798e9962c5d0e982810e3ce8159d34260d4fd071073da4fdfce3f1e6696e58a3fd461b1674d841dd1e78daa81052011842471df4fa89a7fba348f5e53ec2e8a083dec3fecb06ce411b7bad3ceef0cff26b6bb0bbc0a9dce89083e6a55bb3fbf6f91da306103ae2a0840e8de7e9c7216615ba400560071d70d0c3f96892c7fbfb511ec6881f3adea0444c9dfb91b14e3c5e1c26281ce870839adff631fe47b4d0d106e58a73a814ac05e3a1c14028108682c130181892625c01c31508000030201086b22489c3385f0f148002452a2848241a141e160e14120e0c120c080806060304624020080805c281302088125fc331877e4f2dde8b2bb0b8534f0552e9386bc0db6546b0c014e701ba3963083a15baf0c6671e1bd6c10fba4015ae02bff083d2b0418b1f935b0859eb5d9cf2661c0407935b5577cf3b0d98a2a30ad0b9774bec99f023d49f64918cc38582effe49d5492068f302618a8c4a1813f953b920673e8d54dec7855326b674962f6dd2ecf4916a11364e37916d8992f23cee8340f551a28237d86509373cef4908bc30852b41928486bee0107a6fc64d7ef56223367fcb83769cdee3212e58a095c651e63b9dd02523cd0224550d9e4abdaab04ec889ff6ab644f5babece8bdce3483f210638f00e100603402bbbea6a36baa40a66c23095dda5d1b60899e29a9438d25b06cb3ae0d0c03266048699f3bfdcd769d303f32e282c3ff45862ac04fdd868b55fb4792195d5a29a46a8d881bb6a92387ec9c13beb2fa2de62eadecc6691171c9f51753b92f5ae36c915cc5d23aac7b1e6d42f41174911b98176c6bb549d3541f8e928fc1f15def5038d11431b7dd408cf1e41e2d180cab6bfe8b221803a3eff837173f0f28300015019a8a6466cca4af993e1a9a1fc921751cb540ea19107491c8a3012240818df097e1286209c1461c81045080fbf017f1bd3e3a15d4725a576903c1082adeb484cb12ac3da04f262a47e31fa8355cd7c03ac75d6bf6d7cdde8544ff6975cbec546acb34d7157f1d5a6d3ec314b8b0cad987441d13aebce903dc30acc9a11cf182f8bf618a0eaa0f8697bf6aa521b21c7082420d75aa5e2ef19ed31ce91f6f4ca36359ae5b5fdd1bec363b36be72d9276757ae1d84a590fd165fb52d0a1a9ece5ed4e1f1271ff04f4e35726cc8c4890d8d834e0a885b06c0c5c5b6f4886c06ea43598ad2424c099940d691f8fe8319f2ffc8f198cac1f4d2830b2bdf684e23bed686c656478f9eb3689f676ad420acd8f1ce4a8349c6437e1451f06ac70fca69d42e960b52a599c16102d47ef0923631356a79e35c82cfef10f34cbdba2e09ac15cea2d6e456e8cf8d83cf14bbb039a4d685953ed3855a53b7ff0d199536e67b59969b45ae069821aa6626fe32f859ac810a6742facd75699987637cdbc5f024ddf48ced1e4efe1971435cf4c5d34d7de0631467ffb99d88e62871636c13761db02431f74a76fed68089530f480ee9af6855ac1c523ee53f1e50511f83efb80461aa4adc8b6a1ad2ebbddb4093601a49da78a1b299f63c1676a8f9c1a3e3d277ca0feeb53cd02be2f01bbf76048bb345df3b9b356c79d0084c6261e68bcf051df6d197474abac457e67e0f9880c70de6964be07d1590f88a0c95fc38ddf3ec0b629f0a7c4fed565c324b263b3572a02347b01ee62574c27ebbc50b10d89c5b1304dd80b8e0d7f0b981d1f7089c0a25a635736ab02058b0a3271bf4e2899c76e100c8cb3ed36526c44851741b41582948cbe4a78d5ec2a5b2c4d960fc792ec767266397e0d1b328783619201d04638ab4543f83a6f36e28bdc942de8901193625ded6ca7d97497534201bcb7ddb77cbce8bcdb6862dde822b19d1dd1b89a1cc087e6eef8ed5c8392ec0ad2ecb89c32f14522167a421d9781fde70625a860d24f4e9de18d26c0131abfa520145998d003e4c9503edcfee438f6cf1fcae8e1eb41da8bc463e6dd7918a790026e7ef840218283fb36c34e7a90fbd8c0e009990a0cd16d01ccf85b3801000bf71d6d82c6091d9ef79903136d7b125446cf35063148133ae285c5642602eb6026c40e001a3ff82d1d93bc0ac2b2f7e73e26bed3712b12f6a45f8a02c422147075c67e2336caa158dbcc9bf647873055964d13d7f6801ed5108361f7e4058be35401a3431066bb23756a43941855953f6478d8578760963ee8a1388692561aaa3b742cee13b34dbf33e89ab1ded94ec5cda968e4b78595cf87f66eadd91040268143c5242ee4e322973c52766ef939764f875cde1cef7f5e149a0e13534294cb4954334d0a84536ddddd14bb3e69d22de69904db1411c5fe801c8e02cc8014aad76b679561c054841b0442319da7478ad71b28985386cf8aa1e03395da5b7a425938ccf22e4b3f525941a6af06ab28c4239c185d0e6647495b3a2e8de65e8149d3c853a83a08b325c476f2c8a133d33cbad4d3b8472ce39fe3c866918b6d872422fb4b9f6e6cf65c1952c1b0149a9209fd0e016e471882172889926673d4789e883fa987448d1161003d2e5202b8ed5341b912ea676f44b56b5105231b22b90ed8affc87baaea084fad6782d74b90f0307d6510d3df4192f254e294729250827e147bedac41c2718ad939f02114a55159cfc283ae357fb6feb33bdd80d8168a157623e7e8ca1fae97cfff7770eae9451b5cb69cfed8935380069be4edaa83000a22bd7dad2dd90d916b1e7357d178a2c90c029a6ad0b25d2227b273adcd4e9080ca8c16f833a994a818f8708991d587c9b6eea7034af6032f250cbabcee39adad49e175b5160b75a5d12d6ca3dbcece20bac72e44b6126389d288505ffcf47676e47e2120a924c108038c8542d4e1fb6b70bacd1eba95baf79d052214754a7eae951aa6485a401761c350cc2ee3898be404a78bdec58a4e3bec042d3453bdad60e15e46f529862bb0564b0c549ec212cae159ec97075dfa90670a66be9d8cb6ad736dcb1f8d2f63eec2ad1e039200dbd1d20081c11210d92a5aaddb62c3c341fe3d8a7d669c7f564a7ea79d263464f0b9d44d2cd30bc5f6da5527b8d6d672e04040ca795852e12e119cc46d5aed713f6b240597cd20abb58abc972e1526825035b6cb0ac23c4af0e805c6f094190eae7708b8374795999967e4a2f826349abd6868ce6cffc1fee101ef31ac2004661d99e3577f722ad70ce8813c51d50b3d41d97db675f968f5b422be4c3c8f2c19986b0d75ec58c881387bf5e287679591f268da1bc6542621c0c4a7080a1f59b3923e1b519595e4da2d7babd3ca2d4096442c8ec2065ae1a7cdd92518ea8357d7f680d38ec1000d5db4444241546b59f9a178e346d1ea9b038015b1df3bcb264ac22afa4aa2a65dec5d87b5988480134b1044231fab69f5b9abf9ede8e88946eb4e5b9b547b25ade07f5c462c96606c28c2a14f7a87b43b0a427ea414dcc723f42a1d0e6fa5e7ccf40fe4d42d5efdf40abbeda45358c3688025bf0f5289f6647fa01ca74f64d448a57721a8b44fb312fa857f2820b685c76bd8db1a018ebb4d206fb93841d2909283d665b09692f3da6f6fa9a4c65148cd56b5b5026faad7f80b7f3e3ab6332cf7219446cbc1958c501609a203dc8ad20dca44109897029e066044a8525867bfc6df665e0287f52ab06bce97c08113e6a420d1266a256646f6df804e95cc6338971a8bcc01631aa03643af73e3fbc85d6935ca2598688d8db75bae15b7eb840cd451e2562b90148290756e80df20f6dd04341fdedfc71874115c91a0d03351744dd58b1787364404b1c0eca7002f13007f3469625bbb26713d77f8ed6c9944dc5a8134fa6213a7cd1a482d56462574ef1c4a981f3fff5cbd474b1333241213418d601ea8985949b7e3edb9a1eaa88482ae559fd84f79b09d2d8cd3b4ce637cd17c7d83a6cabc09fa949cc1dde48651f8690e5426e92a0b96cee02579d4a8328a90ae049bf7b073fe7c87b5abba4f00ec95b9e9d47a50e6efc69123ed45bf75558db90866919bb9c59f71be9352742b7c44f1ad57c6b34679ff29b7785fc348faab58da68ec6edc2fa11b88116f039b0850989a3974351b197501090b82cb635924544659e5f7c54e7402ed801760a6fb61f5abc6baf5e4b6a2246985be7c934ec1c7a0ae53405870eb80eb5143edf8205eff1905369915819efa872530405d0467d5c1140a420a1cffe64638c00c77f71686ef403f782b08550aadfd06d30508d5190c957a81454b2bd1c9b2583382e6771f567cdd0825c3771068379eea550f9a4da45517d9c9c0f903a20ed3a8d779acdd98e947537d9174e752591768ad9286c70749ee2c16d1c9472a873caaaf79126e9d4eb413407cd6152dc92ffcfbc4ec989bd2a256739c844ae775ef496850e626b1bb6c1a35a0b61fd2ad162f5903ede030588403ed66bce0bd0db5e1cd34a106952703b968cbc5602e1c27ec0249c80c4213880e94bc668a6500e647d011d4c89de4ae51bf2da61b21ba0dd6868767f759bddd6df8dbee3c1b4ec4ad2b87818acecc2a353f33876a9d36ea87b06873590ddcb9dc97833d46e0aeb84a6feb49b0234b0fe3f5d4c8d888778aa75d0577ca2dcc1abc9da7bf7a277772c6c7f7d4a2274ceeb14f3df487d367aa04dadcc9077986ae4a4493ca3250f33e16bd7f5d1eddbd75929bc77327cdc5b8de5cd0a53a84befbebc5e2f6cac7928c8924c5c1a92ae8a1cec0f806aae9dd6e64cb18a766f2a65881b7aab6d99936e07345fe945c179efd1113fa9bd40f17f787f2ba367f1c36412daf26de8a07edc05266c382b7b4c8698522f30d3103de0109738570ea135596b8ed29bcc258fc253c28aea507e99547564ed8dd50fe8e933908158da27150ded00986ffef219350221d80f550fbf1a9cde2a444e6142121088727afaee5e765b3cb0e4b16d210685d64648c148dcb44ba6297693352c887aef0791361366c96495adcfae28bd81f77da679c524573b351e9758e90b233575a50283c8421cdaf1f4d11b36d2d8cc73311462ba1c3b9594999530f9850eaf2766802992fe2dd46302e7473183ed28e56b60c0a764b12831707954abaa61fad8542290b86c0cae6b7babb78f3a6c4489d119bda95d911b5daf495468f88a9f194c9a9ed1fc983cec99923b488dce59855352836ec2fc30a9935648e4128887120e952dff22bb1aa0494b39f2ba394718a14e3daa89745241a4617ab8e8d149c8d82f3fe6fa4ae9abde6f9eadb782ded45cf1b32192e4e7d7a18f9502862a6d62c224521824e336a1e3676c48820232922763b7ccf15d01c040cd80dc6a5c1b88e793a022054e7f55e6f569901b50e6b5b4e73e54bf45e9b709a635f4c280381ff7ee40db4cc4cc9f6327f3425a06aff33d856ecfce8b4dc6beb07520afe2961e6cdb62ec684545a73f5006ef9254a6cc2a3f8470e564903c905abfef666594f725f690084944ad53984a2c2e29f10571bf9ca620f127d7a2b24b321f9cd7ef641b4c8be23685a698129b89ea0a356e4724f598221a9a1fe141083d52d5f5f5197be97d6ef5b7c9bea0cb6bd60a8c546c42a2dacf58a22c8b85181d849a7d82cd2aeabc1a26294985a3a40428a7aa22c79242034a511ee5a87c5681a4175e788a414136799538f709ad8627ee9b75f9ed46ea3884264879a230b8a5839a767bd3c108397425ede08abf5510f3999b1198c28836b36973822d33534b4950184b432c72ff90a39fafc321753834c2ef9e19f97f16176f8553daec8b98bf28bb6a9cd74ac65753090e5b68ad396a061abe390faf015a870bf39e4aaa2d8b9ded831b45eb4f3e1930c4e43f76e29f61713f316e79a2f3641e1829d78241c3a489cfcf6913974e48184f57fdca510da739376b049600a51287ce47e27741a488d3a39ad1651fb639fb9d3d7def4efcfe322ae7a9bd6579bfdc2307cdf10af773740ab18108037ae2503b7e21c007944c560955c8420c742119c2100d7568833ad4430e7aa883228e4c1c1b89d806af0a8c3ba22930b46b96f0a6a684d320fade390a5906fa9f454575fd80a5aa0bc8ef8d5787d554154b612aa636b573ade6a95feb2ee67cab3354dbd94a344d7b81fbb3ef1caaf6485da16852908c0a528079379696cd22d35f0f1a210949a2e6a986c2d615b5186ee776bf396563717b7f7e049d2264e8d6e5b7093c902add14b4f8b1ed987919d5214eb5fcf832b8cb341c86dce07949017c5ceb285f8e0ba4d6f7d267b5a5ec639386fbb6ddaeb61f0de0f704bbb6ec71bc7431483d41d645c0c1b2fa6816aee20abb2ba36feb5508549bf0c9276f8374ae655b4d5732122b656996b6969b4cea522f3d49aedb1d7d0bbbe4952e3ddfe94cbd53b5c7930b282b71eaa71ce7ab4b0177737a56042c14d7e116a2f971834187e3e153751c0033263a6864906a31d4f78d77e75159925cc24c08fee7f3107f722c88db8992202ac069cba442df14d84aab523a8a6243d010f920220a1fa97fdeb95117224c2209c4486a6b131dd4c893111c96521095be85d46d2ca0dfc7a382c6c5868450c31e58a0cde25b19c3951c7825251322c812f4ac323c5f148be4a4807154416e0b8305db026231ca221bc73e090456f96eed7f504891396570b809e8cc03ed0a5ba9ce05f378a9f5e056c0b45703c271f6ad9c5d12e9948f8b8d5722ee80858a06806b652571f3c0276b325cc664cca7c302afa89a6ffa929c7d18e57e06a9faf26c68002ed23ac5578ff6a3039135a73a2505be6d715d173d3b1be8b5923adacfc75369fa1e2a61062b6b55ff649cb2465248b5c2510c2086796a5c058bf7e81fe8db4b3f81d229fc97dc0bd2baffcf197d03a20b54661c464b382e18fbbbc8770d7a79817455865e612c8d80354bb69e140600a4fdf3b7775050f387a42cc2df5c2502f2888a227966782942da6368d36cc20354fa9ef1e05412aca7e0f9138e0e695f328084abf8e03d110df9d3ee52c0507177b484d568c438089e5adbb025c2b2671a829e52ffc253fb9deebcfcc4892f9adbe62d6849c6f90cf7b5be970d8cbda6f72d2735711597f7289d599e805ab58b23b69b0227a2932a2cabd7fb8f96444644f74686b120884cab0015562e303d9c2a645a0a1f98976c3adedb904b70c3682309e0e4de8d0b34ef954be792d7ee3d3ac00f9583739585bf45e7f3ae22eee829eac0ba83408552b291fe0f13d4b70b47c8483b8cc9887c5ed4f79fd4feb1f2322442cecc90ca8eb0ad06c53f2f4af4b55dec885ba57e7c734a0c7598abab282077de1f989ce11f383903f36bd330746435434530a8fec999d407005a0492967dd098012da2c7830395ab06444a49639226f01a50bf0f1ccec21649448e2db471d2fdfe71c81ec4cd15319488a53f646857d7d83e926221aadd44450ac2a08604c1ec09194f72c9d8ae98877003a8a1914de363a41f2ad4a0895820ad0abeecf3b43fdaa036ff9388c6e773c7c4308566766ce4229aee572c537c10b61447d33c80966d28981f0b28da60f46f8439e08c37c2144531af7429d7dc84ee2c1ef8c2ca2d364bf5f0aee0dbf31d589f41cf99fb5a443638a7730fe28957b79f1713664d5b3acbb823dee523a04a36270fa8cc779975f6febfd7a0ac459883bb59304355f58852e6e13f74495be239ca63a4af6498b41e659a3df3c9c7334247f2689b16cbfde731a7c7c093c62a743536f58c12ac8970c5319ad42df74738d10f4a9aeac08813fbfe3f021c69001acd11fc8ded27828b1f8c247657485c31ebc0123517457343eaef6cc34022df2b15dfe5f3b1504590fe597b3f7aa2aa025e464410e0535de614563c8c02bd6fd870296a429288d28415c45150cc7055cb51454097d194ed928f3767594a6d41c8408c41eeda5dbf49d8b4f846ebae44332e055074915b2899bd02380a79c36f7a90fd8a53e79cb6ac95cdc32f2de8223bfd3e7ac17ab5446e356dc3f229ce8b4d1e4c4d960a52b37e29d9e9ad9675404edb2a0a2ffebec20bb908b83c7b75f195340e4061ea0e704977c615043ed694c17796647a58c22150f99fe2b6f17851423ee821c847dea0dc81c21b103aeaff2b75f8d66bf4559402a6f90f7fe9b83a27fa90f470645181afa6d73d1f91f9223edcb263fab08fff6e96cc5e0c00f980a7179ac8b550e3ea083d6a88a98d625c13453b27965e4a1972f9da5e3d05d1e4198036bc4aeb8a0c96a3513229c6bf69835eb8aba4986a0bd52533ad1e2b811b8c02a21f1ec28676dece1e54a5fb87582c8412e4163ef401c6c42dbd2c4e3c727ed809b20ab87aa6504d49378ac3a312c8191a9ec8dd9cab1a5ee1f8762f8096addd18ed23f415b57abf2433612ea05ebee7ffc2f89abc985ca5bfbe64d43f174a08509241294458a907036ccfb5b2a5d152f2abc4d525d697c69d97c4be2031a0a58a67df15267c063c566af558c6d01acf7778d8e1d10d8f299307d32248c8e81d0f6e3c52e739bba797d74375d53634c4751eaa0ae15502bd5e41a807e3d5be59907f33cfe28f57102ac7398e33a87cdf23c25cd6165bbe8fce606c832dff59cdf16a2c19ac668e41591ccaf781d4bb844019b695e39d7a97546fe5a19651aae6fbc15eca0f66bba3dcb73c04c4ab49ed0b99fb684fa6b793c13d8b63b1d7583bd610cb8e0524dff19125727160d4633cf9c84fa95fc1871442f613aa6e2540c56a521555ecf845a4ba95ee3011ad6ab3e0b513d0116bcaf1e083fed1b48066a53c3d3a99aef2df88068cc0206a01be2d781dc01203ae039661987f405a0ccd08c0152fe48838cf48c04940f1227261e466c890838251f8a04b40c8d1c2d880f06aa17a09ccb4c0221f9083a05b3f2a5bf0a837a0ef6b675696c7421f025e58602100070b0b04c861018500262c5c10b0808519028ab080281ad0f7f8346ee6d6c0f7809718580cc001c33201f259402780390bd7062c8261e6801633430e424b36238092f099134b136de43d897e24ea2d002b2fce3d005888740637c90df1dc7497bb068b35098d1bbfe1a620dfa15b2cc4d54012e7c962190e97d80f4d91c53144edfca180003b782fc4063ba1f7fa57272e9a1f23e31d04173e7156a09c3fe8046aa00e66d9be4a854bffe106f0e4cfbba057416b871b23886e8c10a98a013c7a05f2a0de1825b7a767c54844f3f6dab308fa855d1e9d1139dcc4fcf9ae17fe0a539186254a24733cd67137e7eb3ee0c6b5dd7ada271b00e6bcbacef248cefda2b6a1670a47630feeb8cdd62ed2aa87630b5e278ede585be6f01a370fec42b32013103d7ae5ad9510820cf4a04229ae1c5932f6e364c5ce75e2edde7c0107dc7ab96b8999a1d85a01e749e77dfb75e35aef5ee475438d36a978fce0115039cfa3aab4634e70942334c8cf2a2c8fbd500c68ac795afa9063679edf690777d63907bc46e98b9d79af775fc619b75eeeca5338c52069a43ba9b5a4b19428d21d699449cc951bb6b77b39911f68cd860adce21eebb255fea53b886b86839ce134a7e1d35d9a72bb84e430881b32e290d29129cf6bc0c1ed3cd7df18a5ebb4ecc345f493126513fbe6fbb09035c315547a14ea23d9c30882c5b72fce644d50780f870eb779c2f11c621b32d34c62a7561a34da7f441f6d34220e052223d33675bf5edb466f7c4e13d6f70e76ca931fe6cab164fc4335e8baf5158770f3e66ebc8e53ae9aece38f0aeedff2f2a6d94f8e5427db613de96f0bfbda37b72b1f80bd5fe14b276760ea1f72b47b6eee7aab47050b362ab1aa5ff5273ec113cc338b4aa6992f4d094c7c2ad4e480ee0c2c5f904aa74571460714126b1b0e629035c664b7d49c4d1a05e4e466b7c053f3a8c96255f8a1fcd344aa6813e5575a651fba3a6fb05ff7cc17a76bed2eaf2186d111cf182ed16333e5d076c7313966a127653f5999c065b76dc760c4c58d66a9437594115e5cf6dbf6ac363fabd5619916664754445b301c729653831b6ed6669bb8d1e63735d23a411a7f75ba74b7b043bbd37547bbe0cd6f73d93157b37ae6cf728e917087f79fd8eded6e88efedb876ade363289085385ab0c36ca23c8b8448127a9978e1878339be39f6604812a1488de0bc643a306c3bf847dbddb7b8e650b7dcdcedd7bfd77a29929121f7673106e5697653f445394965cd4c7960ee4a471fe10ad794d68ad2871c71f86beee6f4899db55236712aee80f35f6477d87e62d14f528c0f3bd5b48ffd58e7853527a9bb8e7d148942e848ee9a800d391580dd6b86c8dbc1e86533718b771ccc35b7bfd5ba0f9f611a66188db29e3343e07542bffa3b873b6661666b5df093d06df1a51c547002de7604580b3660b26639ff0000000000000000002c0a8308da449b9029499921f27b19f445a794924c2945e8e9cc4c4f6766d07b71ea7466e2337220090be30a700b5eecf260ced34fd5baec91638f07537299119732bb83e926a55df9589cebd30e861052ac106a5e1d4ca9df69a2429297d2c556607430a41b95dadafb43ea70c60c5b01961cb298832125f30e322bce51830a59c8a137991f74af56f43838f253c4512170e85f3b68899db362ff37b0e2275677fcb2c80d9beaac5cbd6d70478d7986a8f258523654ed65f9498ae5b0ac415775b398aaa1b9ba587f23bee434fc71437bca88091d0d6a7cce40f678d5298d0a1bf234c3355be1218411272b8361e2eccfbf8b758a7339210b32184772d0219e9c8d58dacf3ba02818b21883496e55d212728e5b711183492d8c4caaa8df38566723c8220ce6b07d276488ec29f6dcc50e1b46872cc060fc13b74849695b74b1c306313664f10553bc588a1e49958db077d840010a70202264e10593ea84dd509f2e98ea82a8d312621490a1850c07ecc0915970c128da5ea6a45e5b48e8d72b6d2a675ab0735e95f25fc971e331649105e3c869e574722c984dd2fa7b96a4b3a7f70a89a0a3cd59cea54fa8862cac60ec70513741e68af25c150c9747a4a0aed29e4c8d0a46eff18adbafa090c514acaee06ea7df926307175948c1142ac9b2ab377e19904514cc122c7e8ba4faea20aba14563878e1b3668140a5007646c21011913983123c7d7403b0e0a9e9005140c1e21a509ebb0f826ebe8e223f00483ec7c3edaa36e0fb27082799229936ac92d752535c1f86bdde36b2afe572698b32dac3f75fe98e22fc19054bbe859c687995a0966997c2a758804218b2498c2780a19b522b6134582f97290d365baf6c43e47307878b68f6433ef1819c114c28d6a3dd59f25ad4530a51e1df4324c9b4869229875ece744d4defef8108cde91b25aa8550886b867a9576eab4c732da91ff2744a39489c04376c74e1a48a717150702ac82208c62e49ca5e2b0804735415cd96177f60926cb9d394ae3893cd2c7c6010f13d691dcdb2e881792e5a5ec7b57872990fb2e0814165fd3d2b2147c5913308b2d88159527efc2c7a7423db3a30a57c8bbffa317223cb2207464ff9b4363dc9ccf2b2c081d92da89cc246e906465f09174e7e7a5ced36305e9291d4e9d872bfb506e615d3ef5da6d1c05c41bf3bcd4d8549df0ccc396fcb769027420e5916323068f985285349bb76c5c214fd54a9cec2c21c549488efe952d69e346000af78432ea752a97f5718c64e8cef96f07ce95698e444086d2a9b5d788815267da1dc52bc906e23bd0af35a0e924375fa103f471586d8c92769a59c906b4e85b922e7d1489db6df2ca830fe07bbdc313b2aec780a738597cc76909982893f498c967c298cad6b1b516427393b291c3d6afbe1eb340a83bc900f26d2448f3689c2104e69d97e9e90cf4da1309fbc59aff705140621db91f2c642d2247dc278415d525a7692a7bc274c73eb9feb3e5f29a813e64a9e46ed82a9b9cd0963a5b41384bc8c4a9e4d983bbc59e6fbe9d78e268c7bd226afe855d272268c1ef39d7bdb46758c09f37f4a4298451312ce4b183c9f6edfca859b6909530a5a846eb7524a8e5f09938a72d593ddb253f79430ce7e874b295ac85ffd24cceb92277da79f34a997844955accf2e298f8cc947c214ef736d071df22ce42161fe0f3afd921e6170bf0b166a728af58e30a9d376235a3cbcc41b61921574bb5e9acf183923cc293a8fd4cbc1465e7c112669927309bfd3779d2bc2ec5a398698cc136188569f9a6522c5ae1c1166cffe2497e111d6478730c90d4d112a453cb5234318549fe7ee5d7a89242a8479feee5527490873ccf97b92a6639fa1411874adc91efd4176ce9020ccd73a669792e70a12140893eaac16bd6d4fa6040883bd976cc9f9f313ff83c184aeb4f2a7924ce48747042b1bd375f7c1945d4d041b531d43dc7c30e934c284f7c866487b0f06cf2df996add683d9b4af99187bf138e93c18cbbe63f4fcc80ae7c183e1f672a8535936bc3c7730042d591dcd47852b8f1d0c96b38ae8381b4b975307e3dda71c3e2eb85976e86010a1aae3e8f3dc9c9c3918fc3deaab6e9a475f0e86a095f23a4b501a7e1ccc7dc13d760e077305fd69a76b9383d01b0cf1546b6d8db896203718448954e26d35457eda600eb94f877ae7e789b2c15475a1eaf1b4a7d31a8c2f49db479a445bd560f810a7914ef20435d360fa39f3f6dfd1cb120da64975a565f2eee4673088eee8a56d3318752bc44a89bcb85519cc92dfc5444d980cc679f71c322a1e834129af97345b9b26240693ba95f6ad70a96f87c1a052a424f2569410643018cb74b489af5fd84f45503a28bd6048ee4144747c9827b70b267d913ca7a8a53e97cb05b3a994c32ef969afe06ec1b8e7fd2a2ea6c5bfd58249c298b5e898e71fdb2c98e3fb84f2314ba1d762c1f039a7e914547b0593d9e809932beba4242b98834af9b4bb99fdbd0ae68e924b46c9d49b3815cc95c53f56b8bd6a790a06cff7a453b2f52d570a868b91a563d27cdb120593b7b8688d110aa68ae3b1a27f87a4df130ca9f247d38be2f962ea04535222f2963a65134cade141e5a431c160299c57dba549cf5982a9e3e99d6bff13bd12cc7a7ea342ced650128c5e17b547cfe3c24382e9cf2edf283942433b82212525642b050f426404a399bea05646672e92453079a9ce13edd9e3c489604e9179319d7377100dc178115fdfeaee47d94230a45076a513d2e4d3098271647dae2e0901c1203cddd58e5a7e6012d94e5caaa5d8acf8c0782988e55cc92b84577a60bea4c2a3a891151e98d2a4ac97b81e47897907e64a16c27b7b8e4955d181e9b4a2075b2ba1542907868f3cba4775cfb68e0363c877738fa6f2397403f3c4baf990b23630e9d9b955f3f8f1d21a18848ba5f4395946873430a8902f4b96570a3936801918237f5d38953be9b3062003a3a4f10e112d598408c6c230a65cc7459ed89a202c0cefb31694eab8d87e5e61fcaf156b89952d4aae30c6e92ab16caf1586a03fa98e8a4eb7f8b1c21cbe2d22f9be55982e2469b97a96e7ea5385f935effc26852ccb5e2a0c7ac5da279b5536cba1c2fc3e39ed5fbada0fde294c1ff6de23c8f6f0e199c22cbbeae2974d9d6a570ac305a1bbaa6e5c829e1426cfd1b8204fb3723e0a830e95825419112cc445614edde9b677ada2d3a130cbe9ff37ef9115b4a030bad66649ea4a1df71386ac365a2b57e644d53c6136bf9dcba2db7385d60953c50a69215fc74ccf386198b8212a275a625fb609c3f804ab7ecfb927659a307c774a691f62993005f99c6b42a8c88e1826ccf1d34b1411ba35a6ba84f1b2bb9eb6f358ba549630862ee56ea1f2d9f2aa8429a734212198183f9da284e1c224c7cab1baead4248c16c93b696d2561aaec4e76e92b6bc52261f814528575c4de9f1424cc5ea63dbc9ba7c91f618cd47b39f9a9cba81d61124a62c8bad7a8d1698429b43eccc851211366844978e9a8792224e5e7220c313b74d033d26a2c8a30699fbb258b6d4a8b89307b3cef2bdf10153c441875ddcec53e5ed8ed10463d2df9fbdef45f43983d3b5d249e987c56214ce2434af69aa41d1200210c965d29e88688e810827e05ef833098896a96fa0aeac5a6d145d3b87a00eb38010e1c3b72fc0e1b4c810fd0288000046148f35651ce74b8f4272008201005fd552a283d4a58a02000409c2f5548726154b09720803f983b898594a53db20c04e0077444cea3629eb8c68e1ba70401f4015de9a2693cba7156e087d4161290b182c7c08c192bf81c5210001f0c59ce3e2e8519033366a01c2d803dac632a7288fc1b91bc21003d98454e7ab5b13a21afe5c1ecfe5e29e4cba1c25b02c083c1d74c928e10434b106d21430b191ab0800464dcc1641a72a54a9dec6048712686c89fae83c12af7275f0ccfb14d74304ec85d6b674add777c0ec6bf9c6348177d29b9480ea61439e5578e163a47501c0cffdae1f3b80d0793e43433c946bc920285a4bd78105c552ccb663dfb610bc220ac8250a24af7eabf8130cca594535d6b1d7f0161c81a23c73ddf3f18b3229c242d665143eb07f3cd5a1e3f97b914b70fe62ea5a2c67bb072111f8c711eab2ea50a26ed3d98ef42e46dac3f8a52f56032790b3ada3b2632cd83c9c6f2fc6f44f1608a96f38a8c7c0f4abf8351fd45a98a3e22e7a4b5834984a4264b7fea60ce9fbdace271844d07c38ecacaa62ac84f780e96cc911d440aa61c0c3a92aa18facb38985f5275fc0fbafb417030253d9d22c44fff9c7e8321c5784652ba4705a51b4ceac46baa05dd9ec6d20693ce8b2f8f5b618349871fa5f24daafd90b2066378aef8616b63b54735986444e28cdad3600e1eb93bc85f0b9a221a0c4294b264772abe9f6730f77f85d4d073a1e23783417252d2c4ceb3d988653049dbea1b61d9c6442483c14794988aae51311e83c9f4c477d1b194a614832184f52ea5a4d77eeec2600ee16f17524e82c168fabdd24aba5366db174c76173e7978cd0be634f651b46d7ecb625d306495bb0a9773a8d11917cca96333b7b4e5c5675b3025153eb7e92dd5eeb56052df7535b14ef2e7950593ea1d6fd9f418fd292c18275ebef4d9b982314697a41ca77eaf154c323494b81c4d42d2aa0a26dd49a92d37b3b113150c5a2e560e3a5d9e25a760d0213eea6f486a6849c1a025bc7d3a49dba34a51b0727aec24164b28a43b4799a748112e12e0098634122f7cc9fd970d9d603abd90e493b8fe9e480d2310a009c60839bbe9d0980804608279468efcb992b9e1a725983e2486d24a1e3ba45f09e6d14ede5ea7ad6927c17c9d2fe8a86a21d98304838ea7bef53d7a089d1fc134424e854dae8dd09ab42017c1dca3eeeaab2782f92c5c3cad7b0491ea100c3164584af5500846133a2f7b4df53a82600e1b65e6330282c9aa7484085a59f2fe81392d7d9f2753fe29997c60bebc5fd3ec9f003d30c838d14ad6b126529e003c20667fd8d15fef36d5d04a0f106007c68a75da63cfae039390693e1776aa2d7b0ecc498cf6c85f2ad436c78151462cc25d5091eca31b187c92121f6b640363e5d5cdb293d3caa981498597ebe956513637016860ae0a29663b71b6df26c00c4c1575545fc84b0fb126800ccc913f79cfb7bfe9782c0c4287a7bbee6b7d0816662d1372e64ae5a8f4798529fdf9689b5c4cdd8e2bbe7c7a2d7b5615d99940c7d9c222f1a215869fb4e712c63da9c96185296448d1ae7bf6dee1559853b4cf4172f47cafb22accab59d71e4a9b0a73f45cc966fb82d7bba830785ccae6f1ff94ae7b0a93b091695511649f6a4d61b2b620e143d9e93c69298c559d6fda4969cf972485e952dfa58e22e99497a330eff56d87317572921485f9e692b8bcdddcfd251426ad604a4ce9771951018539a774cb29f6a4ca593e6134cf936b95dabfcae209a38ecc512f2a4ad6583a615cb55179e2b923279113069567e2a2ae633d859b307b44afce564aef57a80993cbcac88f795df22f13464b22f612cbcc477d983044b7bc9f2d33f287ef1206cdd18bf6234b1845bae5876ba4fa7425ccf1c5435688f33551c2144a44eb0df1bc1d9e84f94344ef8bb89990629230e7fdaaa996b0c9e98a847974c4bc6431248c264e2375f61e3d15f20893ac906becbb942c9de408430e9626dc2ef69fbc11a65cfa2cb79eb4d39d674461b3daff51f74598cf3e74451894b68d9a741fafd113613aadd79fad4a2ccd0811269f6ca2a583d708d321cca6cbc49b0a6a44dd6d08839e0867f31d82aa5817c2304a6767313b7deac484304950f964821a9555f2204cf9c3c70fc95d4198b4f527617a4aaf5c1b08f39e4ab89f5d01613871fa24edc6c7caf907e398bc1553f25baf153f982b3dd384927665a53e984ffff4685b910f2621a284ae17d9105eecc1547b6a3a21c9f154bd1ecc799d952ba57067419e07738eacd3a52efdcec7f0604e7941970e5ad5d06a400e1c3b0ebfb88351444b0e7f4988bc09912047026aecb0c101ae1776308731a53a84ceb0dbd88b3a1825e907cb25befdc20b3aa8095eccc11c6a26c3e74ff48fb48656e9e2045c709180a3850c5f2ebc9043ea7e820a39defb72300e86944427896142e719e1607c0ab93fa1dae4476f307d5d2c95d45cecd7be543561237778f9da60926e9e548710c5b2c8d99070091fe3b36f9bbad6609210c249fe1b95be446a48ecdf54a29a92123f6930970cf53bb194d99746431a498d4e7224fae40c886e4941fd891bad19f8aedaf7b3ca60bee41243a720249bbb64e06cb4251d3406f3528bbad093a364480c6ecacc77aa962959180c926256675792c67e6040958a936abaa11fca2f60e331d6a2071dedaf170c5f3db12e34324a04553e725b662e98a2b524516aeee22f5bd884585039b5a0241d78a1054ca760f6713ae28517593088aca36972fe33ddbe175830c6cfeaa667961e7773e0a061067871856437a4965fff0485e185150c1ae2dcde6cacd34c3e78510553c81d2ee64cc419edb490714d78410573a46f11536329b25b23630b09c83026bc9882e1543d65458f481282a460b84e2a7ba59958777f84175130c88eedea31ffbadf397c010593dcd2f679b4f6524e7a8249445f92c8cb6e42a7dca8b2174e3095a48bed96fee5e9bf1558e145130c49374fa4136742ecc45e30a1072f9660bad4b0204bcec53371c78d474117870b1abb86174a30cba88fb56c3afa5927c1a42942468249e71c2eda7c8d8f728f60ac3ce1a12ff34290e7065e18c120d4475d286f1fdfae0866917c215a493b563706c8d0223d600752c20b22184778add956c42aeb8760f28aa324eac5c513ab108c661d2f5bbf9fda854130f857a5fa3c7146e9403089a06d468d454b42745378f10383272574b8102c7fb6db0766f5bfa0939d3c5d09f7c0dcc15b84c20b1e18d5fb7a5fddb457e23b30a4ff3b918b5eba63f84207a6743bdfd3a98228851739309bd2959c966d2f2147113ae2050e8c7e7f26bb47db74556a68fde7e0820b05a8036f4861055edcc06416d4b5c463f8ce6a03f32815bdc38a48cf165ee1450d0c77e229bb7effec746860b20fab1e3b34037314bdf2e6726a24c925e0a3c20b19984b844a6319f92bc8170b63aba9b1e477a173c760618a776a3bb676cfa77c16af30eaa80e13299f7e12a92b4c392f95a7451def8bb4c2e041fdec7ae8b0c25c254dc48d905761b8d2ea394e7c57c9715598cc6bdf939e0a79214e8521ecf57876db6eeb8a0a5379d2abadbd3366229fc2949e2284b49f9485290c9bfe3e97747b85c996c278171e438770319ddd4116a4306fa894cfcee6545c691406294184cf8c9ce988a230ad9b5baeee6e8cbe84c224df692ce83897d56916a038ec2efb4cc7c815b2f88449f2c948e93e65c299630717e75978c224561d2baefd9e5577c220b4f6434beb56b7e384f14362670b39fa469a37614aeea1ec458db66c4513664ff63dbaf9e949e79930a7931777d979cf4f9830ad295f11ff41f828d5254cefaefd2129e80f512d6190a4b74c7d56fa9f5225cc25b2c7b286cae7f051c29094563eb9a69a84d9d2cdc4f5183f4a592461ccd8381f2f5524cca34a4c273f3129b741c2a4ed4f0991c73fa73b1fc1dc969bbe281247182dc4e5f8f82992798d305d5ca998f631c224be421661d2588f2a29a9ceed614598d63f7e509b6ca6529a08832a3bedf3efc1a268883065758f2182dcb0d4e3214c2524c85d859ca4a81ac2a477db83c9b13515ad10a61c7a49c36ce2a89d0961882a6fa77772b0ec9241182be645e9346a7bc41584c15e24ac6a75e99c75204ca95e54b6ec15204c3dd1fad26be8e785fcc194c3fe64bd1c4f3908fd60d88a1c2d6a887d30ec28a9796aaf448d7c30b855f09195ef46696d0f46cbaf6b2359d583a922bca9995266791251bf1f0c26167feae1e131e33e18ec7476b5da3d5668f9605c8bfc95d34793d6297b30c83ef1d94189e88e8b1e4ce721d5d6b7250f860f2ba6422dc70a11e2c16863f1e3ffdd2ac9ef60b8fc997e95b304916307a3e471b5c82244cfab83299afabfef8a5c488c0ec68ea77444d339f9d53507a3e7143fa8359df44b7230c986e7ff4a96124604461c8c65264789f82629540e0c3898c3e6fd24879c3798b2ed85d9d3211980e106839634cb196a83218d10199bbaa6b3c40673b49cd521c2690da70df39b9c2daf06930eb5569eb47412924f83e96fcfb5f38a50363b1a0cb954080f418c9ace416730fe69ea5732ebc931640683508bf5944c65309d36a5da94c9fdd8c960fa683a5bdde99868e9319864673b0f4292fe1d5b0cc676af0996c6c73a7dc26098144227d34b9374ca0183396f58f85c963e4552bf600adf6a0fb154bc60ce75a13a468d6e3b4b174c3af5a794b456b8603acbb1740525223f09b7600a1af2a3c90d59a5d78239a4cd548b4b15c1920553a454e9743a9df5420e0b069d53ba8aef1d4e98ea0ac697704276c7ef13512b98f39ee50030aa608a134472fcf7f52d13150c5bbadc84fe3d05b377cba52046e87af548c12042347d5984a260346fb9103e7d4e5d2e2880010573489d3fa413cffd5bd5f00758d9008c27d48c7542cdd01b309a50336030e1e895296f399769c60cac30c05882b16a3b3c8b96997d500d2d524080a184be844a9611c4bdaa17c04842cd28309050334200e308869deff68f9792f4523282f9d4d5566ca9eff552114ca5c2ed998e1ee4ba4d04f38bc8d973dfc4abf20cc118d7d97f424e23a735184230c85e94e8a1db91421b0473c71991f3fe60972e10ccb392debff2fd81417d9ef00baa948b8afac0104477483a9f756c457b601a99263b7ba23c307b10b17747e4907d07069fdb34a92942784aeac0ecf163757c9ea59c1c9882ecade0413464e47160beb4a091d4c49e8a25a5c007683c8c1b18265a125ff2b266f1836103d3e4fe7421b37f913c183530b9ba4abe91a221f230686094682a9e663fde85c60d1c570fc841c09881a9ba623cb4a515d19401e0071832308b5e999c53ce67fa0d1be46261b6b5eada481716ddaba14543cd0a1eb0305c88143e4574aaac93725ef07885f1f5429e609e45443a72e079b8c23c5fa6b325f1164185d4d0a27103078d1cef021b27c856e4415d56d0a92c1eac30fccf5a59ee709060870a70d0c8f13bd2b971fe04a818153c5661ce5e1fa2ea5d2e19b12778a8c23caaf33fe5048f1bca57c1ab2005a9307852bf9c424866b1bc1a5a3b5480838609d0d74085f1343d2f455c09ed14a6ac3912ad948ed8091ea6285dc75342bf3d834729ccfd5b6a0d2d2585b1b4e9bde8eed4f8047fe375e038013a24788cc29cc367d395a4462dcd878b1bafc38ee0210a43cad194dfce050a72d4a0418ae0110a53dc531e940ed76d22490f1ea03097c504a9662aae7ca5eee0f109a377f2386a23cffb09f3e0e109d38f8d664f7a2b957d274c7ab6fe414f2a9170314e184e9f506e1df4645eb0ece0b109b35df6e65dd01efd7a4d18472779414b2c927d783361f6703f2108b978993d26ccf17942a8cf923c8227470dd44b983c47e5a0b3896ce16109f3ee7dc9d7b7ab949cad84a9e2c7711f9d2789d150e0410943f4103a5bd2398ef6366aa06b8f49183d89cdea28cfdba29384d12dc90459e2a2ca2c12a6d70f22dabc27a5d2f2060f48982aa5fa947458d0a3ffc2068f47987563f64398b41223c81166d3f11a155736c210564fc5fb133a45cab9c18311063df1e895fdb2dce645982467ffac8fb6291d3c14611069a326abe50a915c22ccf9463e8953f066060f44982e4b4cd2fca094126a12e0c86181d34398dac33b77d79a4eeb3184a95f637394450c1e8530579ca8793909b1c855183c086190e4e74127a8d78434063c06e12108adef458cab879cdf207804c2202f8bf4909316e1ad03c2d416764747a7f9ec92c0e30fb8666aebd9d7ea07c3f6b78991a59eb58ac0a30fc63ba563e2e7481743d9060f3e9882fffee730f146c50ad5e0b107539cdaae94f6a3367b3d18f2a72aa53544b5444981c1230fe61aa556845b4bd250e3c1107bc4eb8c888a91b33b98f3bbef96eab2b88ad7d02e72bc0a524070e061076fd573e7c3ff4403953a98664eb584505997c2e76f54a08b1b097806ec3828b0b14387b900f4c0830e46fbaf2494e724f488907accc114e694af87dc5f22c7ff4a478e4f28401dd0c2e4210763c5975439e85871b98d83d1ddc3662e82e77a0a87071c0cf1f2a5c578f06c69aca1b517f0788329f456bcdf5115e2e46b68ddb9c17c397ffaf252d8491739767c0e1dc5da60b2dc31ae2ba48e0919901e6c58334fdde5f2ee1e6b30e994987556aa42e7bf86167ba8c1543948d5bc7c5316715fc08c199c63071735f0488361d443fb7fea6830f5c4ae3c27d3322f3b83e96259d859fdfb7e93194c227610daa2d8564cab0c66cbd095df9e6b5e1e3298e35ba50bca4d7eaea431983c89759f9cf6922015834107152541a48f36e50983b9524c3bb1a60483b1f4482bf571a51ba717787cc118dbf3153757e39fe205b3bd4aee139fafcb630c3cba60030f2e9882f070bdb5b29f716fc17c4afac7a93725c9cca15a308a98091d9250eb3143355429f0011a26f0c882e92489123965ac758c3a70021e58b0fa24acdd7cd6e80a85f4a7b1af750d2d15e8a0716c05433c371dcd932a39041e553097852f0defa4f2f9aec0830ac693eae996ee1a5a3605c3b566ddc9c85e968e144c16f77497dce6dc34bac8b1c336e01105737de8d3989114265535b470ec8042255b529f8e7e6a687d0eb285c7134cf2f38e0e51973aa9eb047304e9379f435e33a97a34c1e8495ba4d6719960903421a552734264ff3c9660d059545dfac81e2eee0b301e4a30898d4af249c457edcb2309463fed1e45895c430bab58073c906010762ace7a798636530d2d4cb480c71148e24473357dd7be1aea801b0fd0a1c3c3088618f252301594a5497ea281aa26e151044372c92917a2e50835114c314f47d5fb886fed100c7b1b312e3f0991545a08265da17bc6628fff848360b40da5b33c2d5ba8142098e572ae6a4f9e2648ed34111e9c5ddf7f891a3729f0011a23f0f081397f1cb5f01a7af4c0d1331f64b6259b3ed1a84166cc48cf00195ac8d0e1bf021b870332b690800c14e0c8c1807f06a000756086a9273c78604a4a25dd93e4e82045db8129abe34d97d6b1fb10f6d081d943d69326b375ee5a2d78e4c0e8a5a2d764a478868d03d3be8ebc4dae64c0abaee0710373ca27ad97746bb74435b4908e1b36ce0e1d39be51f028e8c271282055e0910d1c1bd0f180b2060f1ba4ab96d7bfec4e98012c78d4c09c2a8bbad87de6f7b2070d0c9554eece8ab36012195ac8a0400d2d3290068f19986287560f22134747f64a220f19182ea7b71b9b14aa1f02c4c25466594d434d30593a6620002c0c6e29422e2d2ba7f357985227db3531267eab2b8cf2b3b3937b3f9f995a61f61ccafcf3925861bc0b417b445e7e515a8539d77d5d145f15e6aca5e2652fa930ed8e052912f4ad8ba83047f7fcd7f74e6158514a449f3ef96953984332a1563e644b618a922c09d713294c22f4d365a2af07f9280c3aa82c1d82687ee8a230fbfcacb647b6b4b287c2a4a1b53637db928a1d14c648e329af1eeaade29f306df76c8514744f18e344d64bd2b56039ef84c972984dab6badd073c2646a4afcea474acf3761924f953abfcb5cca35611237616d6f67c21cd7b6828acf95ed83306114c9d1ea3e055dc2b419b12dd5764a95224b989308614fff558ecaa14a1823a42474ca132bf58912a611713f97330983da9de8746bb9ce4ac2a4766c94f84f13721b09539548661d1262870909739cef9df4623fc26c394a2b7bd83611db11c6d78eab2edd497a4837c2f8b1c40843101533bcfd93777a11863f914b62429fea1c4518629f1ead169f44185276aad513415e65071146cf41f9d6bdb9f57f08935041748a485977ae214ca3d3bd97f887008530ad88ca27a64549fe981026dd31fb2f0d3787186730b7a41429a4dc9ff51bcf050e1adfb7450c3318bfc692c8eab0e5e9e328010d1c3b6898000729be408c32184659ac4b4129d5d0ef2e0e0ab44e800387055a0519d00dc4208349a6ce899c2249c29e35b4628cc11c29af88e9fda0c4cc35b4c4608c8ba8a554a9ac0c6284c1703909939416520684186030ea5d0adff6e739e8942f186f3f744b4fd7f88b477910c30be630ca3be45756c4eb3888d10523e4092258d212af66c103c00d6270c110e4cba920549e9c7e6b31b670ddaf25532a978a185a30c917537e39dd956493126b438c2c18d44a94766a9b8d3cad9506fc5b6083013366ecb8610307171d90a1858c0964e09f01fe5b101b450c2c98923e9d6067952d9bbd86185730bde8d459756e2b98dfaef245464f7865ab60eab48f2f91fd63245430d99a7efe94e453307f29abf21249712f291847c6093979d45912eb8d1b0f9831430c31a2607a8f1331b4c750308ae779da9f5457513ec1346ebaca6482bc20172718ac2f87ecb4bc53398a80184d305afcbfa89d29233bc60453e8cf9d6ec38ab104938a7cb7a46f5282d9ce437f696d4ed2330966c913e28e48899dba8e430c2418fc25241ba57392bc638c2318c475caebf2b87d5a37218611cc9e9289dbcfccbe10e486184530af87a4aa4d37fdd26a218354408616320805646821834c4086163288046468218344408616320804646821833c4086052420c30e318860c825373347ce3c8b5d438b4bc7096cec5041d118433096dcc909f182b290436cc7c9414385705ae520affee58b11842d074fff90f272d63d8756a0868e53430538ba381290800466ccc8f1ae880104738c4c0859f4c9ceaefc0e1b3558f0034312954b4c52a3f2f6e9729421860f0c59647bb2f46fe926de0383b45d0fa532cac72ecd34c4e081c14466a58a9ca0a4be0393528bbafd2ed201a956fdb4f64f6c0c3172605051348428095a6d4e3830a71094c85e2974dedbf20c316e60da0afbb851fbd9f415c30686943a164f768d953e63d4c0b01f32d4de470c87183430a951ed979093bf29211462ccc0a81e74b583cc91104306862c66ea7276084a24fd2316269b7511da99a12b823e606174dbd0dad0975290918f579872cc67d315b583edef0aa3ad7fa9ae9134ea541fad3099758af7d4096ac3ff6085f9bb925ac9d2c0b10a73c512fb9963e15f4235b45af0de47870dbf0f5598b248b6eb64e711ed920a9312bbf52178a89420c4e185e30315e6d4553147afa34f12d6d03a857154073f9d71c9d9ae00470e2e4a053e4c61faabd07e33932c235443b538c347294c2a251933425635740b09688e1d5c9c8d0f5298efce3e2b855db178b2b291630b12dc20861fa3e0b49e1cf5241c38725820e1c091830bb5c18728fe8cf4a93c274bcf150d85b1fbd7b2ca83ca298f40615077da6eb29cf0baf9e3138610cd748b5688e25d91e0868d1a5be4780bac270c4a8424deafb7ed27459d30a88ebdef07b7c81e72c27c257bc1d2a96cf48c19a46e13a6bf1a5bd1a526aa963e3461f88b1cfb520515e12b1f99305acd24fb1c562629dd07264c42c58811899225ccf67109938849b3b4efc9397c58c2e49ba3a644ccef93e5f0510953ce4a1fce54c72af11d1c3e28618ab74ad9649d6ff89884d1bb92f8687bd65db99d153e2461503ac9125613fb9414b500470e2e226188a7434e4841e7b245ba48ff0d0963ab850b9bd191d64e7e84c1d5d465cfd8b51c36347c38c21c499cdc279d516679277c34c2d4252dff5b589f159711461f9dbfb0371959c94598fbbb4b5a90729e4d84c3f0a108a3a790dfb672341106a197abff42f6489203c307228cf55946ef49ea5ca63c84412fc51395dd0f4398dd4ed44da79c3242a5a374e1a310865c93f5d2edfe5dc8c1e12ad081c355a08310c64dddcf6af2265956fb5d1f83304f0eda56ecd61b07c7099c053872a00f4118bcd4dee42a7fa8f0110853df55c5bfda3a151d38b838058421fb4f4ae2166286868cffc10f6695effaab14c2488fbff0d1078396885d4b2396c2071f4c3ae99c84c8c9794c0b0e1c18f81d382850470afd630f782a33712ac9f1376ed8c00f3d185743843b511e23be250fa64f6d6ae9523baae876e038818e0f3c98e24b4c64e8d053595243cb73e0409f23656cd1001b39b69831a3dd01ef382890e375bce3b881d09931e36de4d841830b1d44f8b88341e9e73f9d745680037d0e1a35767c958c2d1a3063467ed8c154aad4e5975a8c75bf86161787053a68dcc0a1870519b85101bb3a98e2b4690f2bf53339f9a083498b9e3cef68e3d8227cccc170f272ced03b7eaa933470a302a5850c22c302129091840f3998be6a67cfbbe45729ef230e86eb332949c4a8b0d526043ee060c87a92c7d27d2bc53b870a769c37187b2bf608f175b175561d7cb8c1ecefa152ccb2b0ca8f071f6d30e50b42257f381bed2b071f6c30eae5f8907c3b3a7058a0c60e1b1c40c2c71a0c2a4dd20bd25aab24858a0d1f6a304f14d56fd79105320d44ad90664d58ac68541941c4071a4c5be242de139ff378070232b490f1002d64344086163218a0858c056871848f339853ae98509322d68cda0c86958bf1927438f54996c1641d540a1539e11a17321867e2ceb90813725ada2e3ec6609ccba536a2d655ecbc184c4a85352157f4309852942892e4b562e40d06934dee78da2105adfa7e078e1520096ed8d881630534c8f0f1057310721e6f316b4fed05f3b7fa8f48f774c11072d22e2167c781c3021a602e184376d6ba9433f29cb9059328dd96f34f563cd95a30b57b0815a3e67f944a164c1f51a26f7dd68a5c58309b5022cf289320f7fe150c3a92ceb76e6a54cf6405c3a8387e13b4d3aeeb2a9853b94a4a62465d520815cce971d7b2474e9fbaa760501deb5a5266545e0e0c3ea4c0ec96f29cd53fca0e848f2898bfd42475b2ebb6958282b92c49983421cfc8799f60cebb7232d6a9e673a2e3c309067551ae2785e5a309b6c6bba58756ca2da66e847a5cd3b6e2e08309c60a3e29e4ec9f89362ec1144ce46bac250cc0808c82820f2598f66eb4edaa3a4491dd133e926014519e2549fdcf2ea62c7c20c170fbe9b14dfcbeb3a54af838824199bcefe7b2a054521ac15c39a478f7bf95fcda0c1a5de438376c90eac147118c67fa61296987510b11c15452d4a7869e8711d5100c29681113d33bc4ab4240b95c9dea9af01104a32925e6c742bad46102825964edad95e97f607cd1694f9eca9eae7d1f98b2bce436df5d3369f7c0d8166ee7ff6484af300f8c951e53cbea4ae48b77604a63f14c970afab5ebc0a4e37aea0b3707a6ac61db9dd7ff6be2c0281344f2eacbdec0a42aef4b4a920d8c1f361efbfb9fb1670d4c417a5eb6df4e96840a0dcc73ff6696ec2e64d30c0cc2ec6b35c4f8968a1f3230ae4f18d196eee5fa8a8539fb8475f2a417a3040b935cdccee541878afa2bcc1f5384768fd0a764c415e7f4d1b364133adb0aff4b6f7b5661b0c2d44999920b21dcba446ae81619c0018c559884521e82eab2fff01317d8c8802a4c1f5ee2c81353e003345e0023154653b1a3a78b924c78122accd1f35fc88c1c8d2e72ec2009e822c7162e80710a6386ac9dad9c758916da80610a538e5b90a263ac01a314c6dcbd91f7ba7a3afaa430e7df4eab1ea2ecc33e0a73690f42a94a415a92ba28cc6f16dac6bd6c270785c2f041fb46d60fc94b6c5018c463e5b873a1e749e7138a0ae3fd6b494f983a976ae87d8b4a21db0983d24954cc4fa1830e524e18f28e5e0a15b64e897013e614aa4350a5fc548fa70993d896c84a72920346260c499e8a563ef37f2ac58429f2e996dcbf13362e9730a6ac85d913261896a8190846254c239e747e579012a694ed90513aa7c9330d189330e8fcfe3d11f7452c2d09737ef4fbab4f69ed71240c6bf1c262d4889365c28084c927875cda5dbc533b6ee0c891d2790974e1822301bedf7148606305e7c6964798534f89cbcd75e4b091687081830b86e10893a9d2d1e38da70e218803301a61fc1c662d729073e1c40883cd8d9eac5bb6967f118611221ab97e578441fd3a84249b27c2a4eb727efdbf4f6d1f4498ceb54e6ab6760863ffc78aa39a6f97268630e80c5961ea4c5b2c15c23c6a52ae9c766268512284219fa7e7732b0dc2a07621a6fadd3d670bc2607a4e5888560261c8b99457859a08913b8030aae5e591db113326fe8379fe138b69a8348ea522b26024108703e26028140620722600831408001028248e0542a1609ac9caf601148003562a20302632161c1c16161816120d83a13018140c090261301818068401618070b00aa9c87e80201e5998ce7095de9d8a5f014ac8d2f405a0bb5dcb847981e87ad3b1c7b58e0d34c5bcaf62213d09ca3996c94ed951bd8fed8c35b6b43d44bb1a7c05249045266d6ef281c489f19c03fd300650b8e2f50458893a6d123c40248c5938c22cddc2b52947a40c80312281a1546b266e48cf058b2531c346f0252f921bdf4763fa118f5d3e7d7fafd89c7708d133dcf13e99be86ba7affeada9c876ccc8544a7660efc4565aa54c7460a8e06bafed892ff6861eb441a4a32f78d6e456918d66171cb227a3b0a6e11221175aed1aa6264464f2e6f6a3bae4ad0e57a83b7b370f291506ad53264ba14acbb680a0f94313b8b58f6e74f5b88dacdbb88ea29810f0850eb597a2f658d246b9af1dac866a77ce40781c45420c23c31568e92c215de658635e0ae689ff870a9375fcfb6daf09a04af1f197e1e3e1c900ddd6c49612deb0e2ff8ea5da774645017011a37f3e6cdc489fded2c5c87abcdc6fa281e44835fb98a6813922b1748025656cb49ddbeaa46892d0d3492234693cc7d2ec80d01fe460cfce466387346a9c8cf3433db655e388b8ebff18045df1039dcd8c5929020063a48d8c25bc01e794d8417c1c0d921b5aed64731757fb3be42601563d6280cd5a08f7bdf3747220b952a2de4affb30b7a6b81a5c8b5bd33c26388e63777bd716fe281616edd30b4fd5a7405be16ac046bd84a48c8142d19832572fff0d57c26eee3fd4226d6ffda511d84345ac01ea446adb7f1065e5c0569e258e937718bb651e17b0ea2546e5cc3aeeded1758e10462980d92312a010ebfb45b6521574101b01230bd141d833e2462edc2565e733abdb66f3427c92047fe8c97b828551de3797c0bf23d00338bf82983b3587120168257c7e0685818940380b88702d091aab98ec09b7c48d4a4123b61ff7a10e2b773cb8ca3439c3809fc991f842f9c431c5260b38140adead8b98073ca812b8ab860d0410d2e6c5586246a3e5928ec628d4ae8bd2c316ecb2e8b6c8dadd4086ccf11c4a30e3154451684240f995ff20b74844066061e839d51e49470808474e86cbce114b44da23918b885fe60541502326c0d086e5559fc95277b4165fb8ff0744d26c339275d35954c091833b16009221c5c3261d7b1ba4e64f697fb52de2399329e7c3253fbe96cbb0384ceab55f7045cb123364af2ea6818e9d9eba9797e6e78a6a467360f5c5321a070bdcdd7fdd7c087871045281d98b054d52a42bdb00a62d088bcb4d9b9df0c959322c5657dacb826ca58abf5f0330091a6b469c88b4cc3710a41805a771e71ab784fa9c358577d2e94a740b36b40ecd681b43e986cd20bb799c7af23d911e1bd76a6ae650062fc7a5445088175fffaa8848490212442f6403e2a1c58a909d25ba118333a71607a63596204988cc792919302980a97cdad6e8cc63c5cf33901d50764ebe55da29c4c20d48a30a2746a825367ae65432bf7efbc24c11f99479bbdb6e6ac6bbc7a492954d94886d0227747a627a174d2684e38bc053cbc62408ef9475b8fb45a461d372f4c1345a5ae71f7c074ff7b8fb9fd2e387af630e279805ac6d508c37c5c1f3069694b7f53020a04b94b2bfc15308113e9bdcd88c2e110d278591cb8aef3b9c452249b2ce112463dc4486a22b8035616c1cc15ca18aec0ecb77e775a82bfb77a4116d65f38af85154e9551ffecb72d14768ec4c1b1542430bfe8e25a2598083af3023e3cc8a4cc332fe3db0d8b8001df07757fbc2c589f58c360c9bb9690ae3461a3e7256a317ae696b3a1c7b1244cf4fa29bf0d9047e3c11e4b139761a34890cc812442681a01bd47a80e6c046a716af507eb46ca2686194cb6e9fe6e1740a66ce86418b20ccf63fc5a463aa39ef88d6469f050a16ae7591f30706e3260f41f8e675e3164c282101e846feb48f401e3d34130136671fdb93e8c77d84b844e95622825bd494c021ceb89d8f0bb4d669af0faee66b53ce074809b0519908b0844efb9be3828834ca56caef116609f18afe82604de184b218bb587f4d631dac3c94a52277516786a096ce249aa86298ea8a05f2f1049bdd42340a3de7039b55168d3c1f3188d5b766eab367b8692b0db2b789c1d1760ac92c2931fb6645626a14d70d494ef88ab0fff081b0d1f7cef0f1155c00016546a38b08875a4c33141563fe905428dc4287a6b9814096af1551f9bcc0f2d2e6cb54b0c5e199a3126889335901423b004ac281f0e03c60ebbb05c165b9ba7643511e88d5ea1f6cabe6323edc810613be7e68c8a9ee1d292e601debc97f95cea95b940e037708e412dfc2d1238a797f9d03c75d47d6748fa5a069a8472d79b18959393da9706a579fb52e32568826861b2cab1ea7f6f83ee90b3294668a23e28f1b57c7141bbb463d0464fbc62c6fab2663fcb040fceaf225b2a81a82d6eab889b3dab529b41e8f58144b7eb2068bb2288c02eb8ed81533ead11b4ed43d7acd29f5a8137d07571742cf25f40bcd08e177125df95c918c85ae5820cdfe9ee9c06707e480215e218ec95412dde5f543ae4a75245c77e1ba961571702aa8bb8510cc7d7b517490552796958789c4b72ead49271d9fa60cf3d6292ccfca1cce48679e8b81f988c58848917810a8ec67997f6778b917868628f3c731c0dd12ba6e112a129384a2f4834a93375bfac5de34b138768413a530eb18a5962c436d86955f7d0c4a3e394571f14de239fb648ae0d98826183acb2140fe94dec291e9c4d165048e6fbfe1bdb95a1e17406427740beae856f8e059e163f6e875c3309e641191021500991c3d8851f83a8c858c1174081b07f6075306cec0d60e99b18f5f5a79df1b7ba01b318a5789013e0928ab99898e484f9977e108d147b44e49619af50e1d7f401cddef866b738bec341f43b8a01f947127a80d312fa663dbbf2a211aee0b187236336160dc9db12b44e30a8d610a21ae976133816dc335f6a50c478a537d48256ab69a13e1921fa0977bae8c455a03bd8ddd57238eb75b5a6ba84ae9e78f0b786b4b203c6a6f1eaff0aa827bd524f8d7db3b0127328e9260963f5a3bb3fcb48302097b959672608cac9c9998466ba7e5187d522886bd46b18ad3bb74047add27435816c1e499ddc9711409299b266a13b9f08a5529511e4f429b6e9806b81de94bd2069980a52f3399f482292566fda740baf41f903c05335ae228ce9150dab2e0407853551b0f3a42803e6e8468c5f4e45840c465822d4538703cf1eaa480c644be436d671cc4ab6c41130143d6ca7e282ba01df82538039a30cc22c506977585961a439d8880932149d466c809fe0755bba21e6093e1f862da7770788fd11622a25cc2b29c09e36b67085dfa6b1e51d1f7ae8158d0634e3f662d1053a85b475cf2959815e7272c98b2999fd12a4d409abff8fa161c5ff1d8fc4c7967b66316b0ecd8163995e7c7304b05922accd70b218884f0e203f8ca856cb0470032e3c3edbd7dc274d970c739bad89df6c10ef7b38a5ac630493993b3282d1bb11d4ae12ff5125484003084dc6ff7e91f702e7e1d31940a4bad2cb49cb1e6e186c7b64903cb0308004001c400fac0db024cf0a4d7b12ec11b201e701a50450338ca4cc38b9986f58e67d2a82eb826a31be483a40c3f2484a1b9c647402ea6ea8c24849bf3c7c1f39f92c256d9b993eb953cdcee5f82f175fb6e0ea0fa85bb5602e93175538267fa2bf994ee2d32ae3703127a6d18bf04699790c8a8bd091a99bd647ce05e604ac9084c58595d2afb8385c75e2a90739fb5179fb775f26fdc558c015de77f4a5278984cc5094f70f6b2605ab56bc56983c3a206430ad3445c6ba53cfa32d51e4d36be19624d411cb919ebdbdc99650e1838ab80f9e8557806d50ab28d7f39943b410e2794f89f115908d28c80d93f2acf232cd12714340219d2b20cced75713a465dad6fad0124e958f4899405d712877cccd3cece5e120525c1b0dc0c8e2b7f8844485d2ad3f6acb57f7ed215b55432262ca150a6d8254954b975a045eb8094d03728932236a114b027756c2a2076ec1d36079a4503c67762288cd03e51327e09a00e68a90869f6ec04932b38f50ec814cc3be12543a6a71c8883660ec63c7da9746c9d3c2f2d8f95aef4b01379e4934f39a62c75d2497326c2f53d6d61c6198573a257bc579b198b1470b4c485724f300dd589810845a96b19bfa59b72259e223455812f9a350925430703cd7281e1e344cca7d164b62078a7d547b3c8a60b81fb2c6dda1bfa44da7933662f0668ba42520b015783f95b851b2de49fff1c837777f7d187efa9fb334af9cb50e900d453d34ded662624f781aeec58d5e5dde96188fa870ad7670a07d8c76b9059e52f538957e1d23ef34714406c5f0d95619f5c25b435100ec81c9a64349f1abf9e89eb26eb5a644d5cadc700d892f52fda5496257c2a53d1f6985e25c2924be4107d744aec6c26bbc574ffd8db51ac7fb4c3ef5e34af24cf12a56db78a835f15e31fa651e157b616b764d86da02c18afd998fd65b519c3ca8d22cb4bd0be69a92706e251e12605123e19ea8981385bb49dc2a09ab6f8b225346548341a9ed706019f5d28c6dd662b5613721468631cbdae80c700b2a42cf22263334cf5bb59701226619d8525b099b3e695abe227a8d1aa9f3717a36b156afa25c18f1228c258c1e0c4355711780db8ee081a0dd65cc8aac9036d0cc3691ea711890a32298569206daf6288565ee09e14bdd442f4f617bc8b02215f263eb48a36f290e4a8a1d51fd0681931bb6ba6875743d49e928a27b457558f2e840d22af61e3fe2d7e32b2797f406edb513ea6528523a78ceee294776044bebb2eba013785b5265ced48312c81ce538e8aea45f2344dab6a91fd6e4d466fecaf494759f7c7feb7ff7575a1a701bf811ade7787a390896a2b28029026626d9a58e4fb6a91ea7badbd24c2f3b40d96d983e1f4210689e96f268c126c8e6287044e08b66cb0f72af80bd662d19c30ccf02f0e3a59d4483fa02d2dcbf5d6682b6a8f8ea4ae88ecc00481618e30a1d40db8bf3c20535a0a94a090c3cb6cb9ba7f8bfe95d9964b43ffe2226558322d6729726066ede341d6748cd59ef917345090280bffc61a82a71de2bc7d9bf360a4c8f045b70a8bfb531341a5358e982867fcfebca41010afe1a9092277a93749752ade728b2741e345946ad0fcf9e384d1062b774278f854f0bb950c8250c9706e7820c94e0ffb62c023310046d40f4851aa80b7de71292e5bb9e66829ad6f42b297385da933ec352bc8a6db1d5b02693ab1c1db966882341e41e6588fe65033e395df4fcfbc058660692422079801b39bb9b0c38729a0094a221405e5cf749a409128f388999a416410a5e16e1ed83312d44e5235ae96084bb6447d01c1cbf407bf187b7f5623d2aac83b24aaf225a4711f889491948940f4d54043adcc950ee23fe68b3c06decc737e8925434cdb79630c279eb515c04234e48f848c35df9a11ede32320a01633a36a8c87b72229ffff2d1715e6b2d3d32c45e97c96cf2c94fbc40090af4c52b0138630e183945d78b424afc14262a47a75c10655e4df414ab10daa11b4626a44fe3a62ff726b86f4b1e13cb5025f477c45c9b2f19ddedbe80077751f11d25faef5481c18ac841dfbe22521176ced5de511ff8ba1a19a7d471b94ebbbab5f86ceb95adf457727bd71a678b9518550683b2a49db3e5019e5d226514e9be1272796991acccee1b9f781de194a4b9e8f58853607818878aa77388d97844636aadc1e2b40b6b251ca47a7fa62e2a48891e9a2e1967274ae57694618c8e7b5c5a5dd9377fb37291f910031c53e60372f47c9bc38c8b3e7a8208e0f356d3ccff389a1c7d3e253274b8860f07f3de6d926fa9ab795381c85086ac36c75b1436ec9fa149299c939a30dbc7cb4a2165a1201e72258c0bed7ccd3a00c4a6811510ce4224c3496e86414cc348adebaf24a7f32797006a7712cd60c50bd58f45bbe9254c0b0de3024777d7ddac2056329dac74edbf96d72da1ba0ef0e8619c9f2606c379ed9b5bd35d0939f27af58976ce63b4bab1cf4a1defd263e2c0087f393377869760a105cd0bf00999c9e9de354cbb3d81c9ae255e43fa81364d55300e887f421309fd36ba47b9a596c6c87c0eba27ade90a7ec382c76bf6474d0bc2b87330be80c575b47c2f81e794a18acabf822c9eea6192ae52ab34bab421ad91f6946cda1428989a0f924a01848d27ddea4b6c0b1271d10a4f6bfcac2f8048b33bb078f091f330ed601992a11873d14f30cab1270824ab1e8bed0fd5447079f54fb81b0b319cf922d6d95bdb1bc112b7f1a537bd39000018c3c33f0bb2c5ecca2b08d07f81c18d94e9e938d735ffa2b0e88545e4513bbe3a460bc7538320e288f9fe236d313ad7b42e4746bc7396d01cb6c2622a290ef181ec83a0bdb5cb8b1bab2c08cbd48438c339b61e53a336964696ae05deee56b33f986cf91a9fe41c86caa038155d37f8df982b1c31e5dad09cb2efffd7d349d524f427f28fd68b6383cc29da7877ff253dfef5809ce7182df257b4cf98f479271cad86dc7e0634e6dab7658e572f598fe067d2234f7624d866d9173f375d295c1dd8e00a3b72e09cfc971e178e2f8cdf8cbd337a19f7f355b22fac06f8bb1568c10dda02fc6f0b9586acc713046267587f158a560a7344b26c601ede1996224097805bf668c66ee57ba36b8ade78ffaade1c21837377d8a918083a3b2cf815e0a8bd0b40c0c609c3e2322f961db514053b28f38d710154e9500d97f8afb8e7b22e75817e4a777d448e3fdab30b96a61dbdec1d899db93a45172b5e7d7c2183254212a7ccac86797f7c1ea6a08974029fe0492a74d2420b8e4f6119bc24f8fe04166b7332eb1572663134d2c10a1f3f5f3585f282fd797f816b224d6afec0ef7268c2992d6120b8c377b80dd6911979c9decc47b1b2f34450d19ea024876f8d08e9385410385c0a9dd922c2ab58f75fce5267ae87b445e00159903de0da700ed05c8814866c95fa22307f97471502a407ea0734946573a36fbe9a1387507147f305877e3a2cd1ce7ef81c253fd1f0f6d39e1bf8a742431a0102fea1714063ea402d0a0013844721ac9ac15686616f4f181761e61ec6c8460e2bdf92a72336812f1c3b9d4b6063a82e976c12f04d51073b45422c02063e982155ef1c551e582fc2a6dab249146c0833b1987f0912947a8499289f1b684510ff0b9b6e106376eec164a1505643253848108f0065203400fe0df6fd1c167e8141b9035f09af132c0b8419e2ef81b40859e0604c091e49790d840cb61c8c21843168e30e62b884df043713362ec272b09e8e2137a01b70d6c1f29766cb849f8c844a303e217812663842afd58a01933f98a99d10e21022310d0e009e120249363aa5250a32316c807683c757aa374499000670dec10a61e7b0d030d06e10f300fc047b049606706db08cf3b0328f0fec0812d9605974ab55248f7061c112844dc5d553ff58837d6339bdf9f681fd04f712de0873cb6059783e7ad21af033e01c075b695e65ba8c40e2c0166181819f41e303321218082069831949f1241f036472b0c2b1abe52635300c3e1b4c39088c8061303a0cf68d0b55d29a10f215560e864898b299c9d03342f090e92eb784948e8bc106922b5d251e28480e711f9d6f73620c60282bf53eb0a48abf00e77600bd3bd8bc293105b976055b583a932f5e5572dc0b809801440d480a70bc0018889cf0bc06806923daab7721069f2b40cb6a71a66728a0d1000cb2adf20139009892adb251a5f54b0b478ac0ddfdc00381310dc0a066bc35c27f695f1ae10f3ac6504f73b586c824a7085233401e401560c002085f55a8a56a02a60542f8a1fd227cae0f08bf097400000aa054831b22ee47c3f121e96384120be46d85808e5e6dbc99bbff1d3d4231d5c562f56a2045c1001e01466a0089817c582a25c01d4005e01b601ea0170015c031c016e035c00f80234018003480000016c013003680a103020f60041f5d064212d859f02ef00f60d3004c4101a85e85c9f9f4952f08b97c47470e4805e60d8091a099d11827609520122dc0ad160024401700db80f3023d8013806d00e3076821a420f7d800740670a5c1fbefa400d0001c18d0bd04301c68cef42b0093c2d11d5ea56b7dcc7d82d08158a51020b2ed1ac68ecc82a064eeee6a198150bfcec4841e82b89beddf120758e692a09b97b662c4ceb51f619b0b38ac11396d821b7ed62a5f096cacf8840d6c0ad9c5ad723f92a88c9c989e9047e13de31239c07d7dbb06c5aec7c639a53d74da3e2c02c0aedb55ebd8edb2d253369d77d93c69ecfb7a34285528fef92bea850ed9b9d4d8e1f9732a88da736dff35d92eb8c0436062d511df832a369ef8ac07ab5b1a4752dd68e416df0f9928f50c0ec7df00887103fb18c5673f64d9080a0060c08dc3fb631436b3299c3b866ec6bc47c12bfff5f9d1c1eb925603f69db3ea38c516406e5803f19709a1dd3e794f41019026cebd91d8b7a11328200078e08c8c90618cf0dc5d147d1075f3f71acbb3731c021c8139c737f484a2279a97e3f6baa295e54346b1363921a3ec780119392c81a17b2c80a3173946a4be123f4e145a2e44f9bdd8c82242513bf1fdadc3d6b5f07405513ce5ac84744143e72b2870e1b12e8999687b324afa43f04b465f478af029528a4ee90615b0627b4daa2075ba3e1bdedb156a981010532ddd7dea511f6b8481d771112319058214489af8906ba285434486f724e817ad2752e644e309c82db2151346fbd242140f3eb2f7e325602424915d853b30a125b4333bfde0cea3423f27829ba68132b19b4458a6a19c407924f4eb35624e0f05744bcdeb0b7b3bb6549c7cc1f20407162af58403d30de23dcd808604137516b25ea5a4dbc74e839caf6bd1e76d27010886a4ddb733f9a387cf4421b55bb25418cfe1532a07bcadd5e1a6a1b12a6b9bf7c61d3ed9f6e3a563fac7e7584b08dba609130a0496f07ee46aaba70ff21a89d028593652a6eccf1dc209397a1608ae9291ac1641f5694b97f35797cee70235d468a364845b540eb33f43e446111c59478e9e08a629382ce8ef26708c44350d22bacc59cf1fa3df1d4d4dba8a78f814d7a01722abd6bac498c2e2af163c61305848ddc303d0c43bcb12a32f9999c176386c97b7a5c477f87f197c8615949fa879a6e459599b65a413b25b05e31af6f789ae7b490c92d438cb7213062cea2aa84c40613964826b0a03468527bf7091d4b91a00a09424359abcbfa2f3d6ec9743e9733933774195ad00bbf6fc92b71c26ab76023f553c57d172ace5fed262fabde7f795ec09c95bc974f8ced1c75a90e18a720df9f37f3c588542f64a96e2d06606fe1064889df1c73baf29f29a26122dd1fd55e5d36e8cd0703e59f04cfbbdbb6ca6cbe9bc7e3a4ff5d3eee80143ca7e33dca8d10d119c6998e87177184e142151580243f1d133dfde4be91e18b70be7a6a738ae003c3c1d512b5a1d13f064538791709b9d7d5f632ef982056cf4482f925ed5446224f6eaf0a54692d69ef2ea7991f57a57afc5e5b38f117ad58daf2779217f06efe5d92b19af45c7e65fe2f972e5c18ed4ee4c8bf75714c8efa232f4d7640c2f8d5e122fd05e575eb51369ad9717d32bbcd7845745f6f5a42d5469dd8bd26b4bf17a82f39aa49fbede606ee2f5c47267e1e0d80bd88b5b5e8b973904c0c78ba37c1d29563050970bfcb5efd47aac2decf612089ef5bba41d1019597e94c6b82c1e682908d216c98b2ce24cdb75014e21592f7dbab8a4f1e562b46f34ac2b276d59c7d303b2a6094743144bed19964370f0f0c97417a5c60302855bf1dffcaa0c60ab437ca7679a89c13f4f21e7bd1870ac8735fbe657a021c7c045e1de6db2cbe3194d61995b9f3ff19c70194e76c9b24b4e31e3475df4df96067e010b4d70379d4a2bfc1299f22c73e3d4f6ca2fcd3304212bd0747aa95bee4faab26c39654b880a1638d2bc0c351a6efc844e11b1266b0a3695d34a2edba3361aa5ca191c3c8cff73a063435554bd841555bed9a389939b7503c1dfb598383378eecea6d0c10b2bb91b865c014659007715c865442f99c908afb1e9a08bc765ea82efb4f1a80422e31533f7abe5e00c9204ce3da085da3664a2e77703d4fb827fc2f3fc95fc88c142a69d71845ef4d62b7319d183cd76de5e528c8724fc62d90243fa7daba0e5ec257511c6ddfefe55d573a866e28fb4e87ce8a6686e91821a952bafca5edd0977346a5de7175a6782860187373fca193591c17cb7b165ea50d4bfbf13ae8d687c40822912a9c01b60f262cd813442bcce2bba718dff0d3295c2ef2c5f3cd7a2afe1438d120161e9d32b9d73ad4b17a0a14c4d775be3b51eddec4d3a24938c6bbc5f919016f26a7d877b960e45c4191c72baad273ea0220bf905d3b3bba600af75e0a152800efe0ea7c93e3c22fc9ee0c05d19eaf637c6701d25dbacc60cf042563020b7ac9d3814ff6a4c9a73d7ec0366fe1844768947194d4e1d3d60771e941c01c26719b02ab862e27eb9af199fc3788bc1e3d4f9e4e45faa2b5b903320328f5c76c5b6dd1350b0dfbd0de7da25f00c76c60d4eca1be175b31d7a74b359f1b36a682589a568b0c756db9fc50b8c5db9276d9063f9f81f3636f2325541ee2f32c9353fef7d68445793d1ff6b1a4969aad2e53ff771f6697b75c6d476580171dcd3cc4a7598c7717c59569936d3bea361d589fd1c3dd44bbe73b5893eea0a46f1e680b2f6f2e0b20cc5a5592d8a4970e2ea085cc39c88c00b58d790c1428952e1b3fa43b02ad3807386d1b255bd938e521b1b4270121db9996badba634e5960e15f788b6c775f647bf97eed52dd816698130988810035e64a3617c29c2d8865a01e44c6f72fe1560053811ef4c244880f210e05b4ad4d908fc2c271983af1dc15db827a75a6487b21fec29562b762110b39c689f88163dc8567280b434b240b1edaadf57bc69dffc2dc15bbc326540af87f97dbdd74e271650c70091c5ab95006705ac16e054fb605f1f8f89c655ff789281346d9c5e1b902d811f5c62aa8153fe30a56441e8ed82960fa3a770d139f9ddd79eeb8ab64d3d57aad071edd79bb9aa423e30ed569633fdf82a5493cafbc1ace1be9d77791a892b9e5b28bcf3dbbe5923218d83ddf4c4a80ae20e93cd7d5c89cc177210d3c9c17f7bb1d31f424ceaabbc3cebea36d32e2481a52e0f70499b7629be9c00732ffb1a4ee009d7043085cc27d988a54f821cbecbe7be6eabb451656a1111df720224eb51430dbb69b13631f16703e8ea0334c3f5289d31155215ea2ce8d9d1ba1dde7ceee2e7b7465d9301681726c04fa0a334036aabd6f3cadb8e9edfcd23a49bb2ecedbfd34a1e24abef5211c921c24f82ee52e1f8836fd951ac64c37d6bfa58eb5f4fcd82edad077014d9a2d3fdf74310eb79711127f5a1104c88ba7a1afcc9025dc15cf7e93f96d2cc90a7aa30f338deba89c72f5bc393c10e8066c9dccb22b4f5e2f79fa3c3ac712a94cdd764b851fc6661688f922b3eaf50c2d1481cf89ec5f7a92503c6b9f129f8e6d22b78e144263258457a4c516c046a4e2381e4ed525d873c14d1d5565d066d4cd6b01e420643b5649a657c5044d32d7eeb9d65c858f03d29d71253b50f23db31bc69c2d9d5f76ea017483027e6e44620b3960ee24850300c3300cc3300cc3300cc330101bc8fc7bffa1ecc9bdc48e20cc242934b8cc4cb929117e076f1cfde6dff7f87466e273673ae301850b110b500b07cd3c3c9da8112e61682c238710533cfd3c0b185a97a0d1fca4f2852665e589dbe16fa17aa1f31e7416891f265b7117da0e91d0617b2ef4ee59ccad07d92d7411f1aab9a1d5429b346a44e6eb8cd36b16daaefcea838aa8ac12c54213fae3a89818c38f9279853ec422778649ccb14c2bf4173ffc90c7bd17f32059857e940739624c89eac9910afd8558e7e14b322d11a7d00f2f5ecd7208f133865268ba3d061fef60b91146a11f6a45c81edb222a49a0d0e618131923f76a10c9131ac9c3ca189f39a18b1ac324cd8da86aaf09adcea95985102a0f7f26f4a3f8b10f7f5cd5ad995a42e783902d73ce5142132b82f5a02498980ad82209cd6784d109e3c324d147429f53ae908f95476dfe39429763f88dd06575cdbfbc21af6517718b22f459a63cb36262230f1b39c82863f002b62042e7c3ebecf15c95f7b35b0c81d03e1b2f8e98f8a8a1b585103af7e1589949cc330905b60842bfa97355f83c1ee5f45a43cb052702357014077ca180054cc00564dc48c14981a61fb6008272aa519aaeda39260e546df103f36247b0850f9a90ea413bba8fe3cdd383567c28ee1db97b64d58307fdf878e09ef4f330c52d3b6892f55e1eae48f2f10fd5412f97738c919045260473d0e69c8731e59fdcb1421c34d5924d2ce4064dcce656318524392462832e7e5292e8c7ce83ceb6a8c183cb8fa12f7479162d29000230726c4183b68285ceaa368b2e6ba71821a2632db20e59f41bdd9ab1fd3e324f75c4a28b973a73cccf073eb83a60d1ea787493ea98bb4774bca2f9f1f07de0831f1fb885c7880e57b46fbde1dff320f2300f7214000118015844472b5ad36bb598cc87395ad80b2fa8b88315ad2649f2795722a95acc88e85885083a54d154cec9deb3df531d5a3c74103da45e7fce3f14155dd2b494d7486e92f388a38c301e62d8e053b4effe56395ee29a024f16f5c71b17e728630c1c364c29fa8e9b7f9853cad3132104121da468a3c779641edeae261da2a3e8f26bf6306cc988e81045e7f1229acccb75883e4e47d1118a7e35928f23a450299d115074d53fb8708d9b735e1e9be8f84463d23361c307ddcd18e289ce43ea08f1b35b6a8e4c279a7689eb2f251ebddd71a2b1dc5974f52355f898131d9b68630e3ecc62f9bfc101497468a24b21fac9841e88ce854e8e1b1c684199401861dcb08001bec051be2087e8c8447349427e76b83cca39c7046290fb430726ba5275c91e9b7789c6726208513af77e7f1d96689354d8f8ffb520b3a944239f2ce9f4280fe2073f28d1f5c83a456aa6a8446de89844ef83f81b82a4181b923864dc9f201f2e35b44e8e32dc061937cc31a123124daa27c971b24fc70ff74307248c91b83ca2dd6421b785d31cd144ca9f4c4f2ce691f5684413296b6e56c93e7430a2f5483de8281fff346a16d1778f525f567a6e3e550f1d8a68fb473e8c31f47814e28713d16a9e48cee5b8996396e3d081887e94c50779628ed9b3ffc2a1e3109d0f7623770c8f219a1e87b1e483d87365a5a0a3109dacbe67d2ff8a1f9be920441faaffca3c75c58ae81844ffd2223ef8ea3b04d14a4aeeb987ad7969962f3a02d154164b3d1ea45c7b98fc081d80e823c5fce81eec84983c7ce8f8439fb53aefc7eb5179e8f04317dc33efc667fad044853c8e795ae1436f1a43ce8f14f7d0b187a6c3fc377b66ed9c9febd043a723ffc9a3f9bbe52c0fad25d9b8f0830e1eda10af2df8e0bd7d43c71dda102f2275628c7e44dcd06187fe3afe87da9b0fa3a30e7d49f849fae1eaa3ec3f3ae8b0578e163144630f23a1e8984397071fa31d7910aa03438c028618375800068e52637bd02187fe42f6eeec24e3d94a30c8b915400e3ae2a065be107cf3532374c0a1cde31ff9e064272447673c74bca1ff13f5cc83943b5a8cd90d6db8283ff63cba9b11dfa1a30dfd578e08b3281b7ad5d821c455f2602db86b68633b2585fc633d1e7974e85043dbe39f28f181c43c4e591a7a1fb4b75646d34aa2e61a3ad0d05e788c3fae98a3868e33f4c332899b5df2384187195aef415c85c87963464ee928437f2ab1fa45360b00427490a1d3cff21cf73cf69c2e8e30c2288a848e31b47935efca665c788fae1d3ac4d057c6bc3c8c793c0477e7d01186debf57425e4cf7e6bc0e1d606872479eed398d7e99f285e6cd73477f470e1d5ee8073ecabbd1a763deb4bab07e6ea93ca31572a12f31abfef6720bfd78934cd89c1ea96ed2468716fa893e0ad3aac957bf52828e2c74197aa01eaf3e6c73fd3ab0d094e5bed8aa79fa22bc1106a7a2e30a5d744b4134a66cef16ad0ca08106e02847028701684587151ad32ced517be429f6d04e7454a1bddc33d9f75dba475972890e2a743949b6f8ef574e9a62aa0c744c019314c12ce4a152e8ac731ee4fdc1a6681676444149511526de92ac850e28f41932c737d3b2ec1f5a858e27f49b722246d393860e27f4abe53a2deb1ae4c77534a1d94cb92bc9fe4c683499cf860fdf629625b4e9e36ed998e3c3c486860e25f4713bfbe65fcd9cab4f42633ec8a7de9623a193ae907f3c79a143b81ca1174d71238ff23853a8ce087db78bcc67f0ca8d6311dae0abe15394d03c1724c2d9335fa89b5b43683ffbf2388f33f475fe84d0759cd82c0d39879c6d101a49fd1e6665be1e6e18088dc59e75cdc9e371671e3fe8c7799cddcd53af524af9a0bf9c3ac2787ab7a5b8076dbb0f67b24b3c68f37828f1c3926d074d3859dd14add1411741a2c3f750b36765e8c8413f8a3c1e4fdd59ce87c1411ff2e3ef8bb187995cba41bbd922841e074da11d62832649886eaab06941c31ab43e3999c71e443a68d0746af6b2907fcca2c9f41f6c8cd9e3cf10caa21f540aebd4791066f9138b7e1c7f98fc2bc5e6c14760d15cf21ec44ae6bfa295a8153a9ac7c3154decf03d3bb933d6d956b4396664f8a98ae67158d1498e21466affa047d15a4513a2b42f4a4cb090aba25f0962c97f3b66cae520b44845bf66c9fcf4457ee46154b4394bb20e6dd52968a08529dad02ded24f9296d96a2ef71bbfc0f727e6cc1274513f22f473d6440a0c5287a8d797c3164bf878c1968218a3ee70921f6b885f3c16e638c82a745283a6d8b95c113c68d1b774bd002144d840d79502a9a8739a5600c418b4ffc39216c566cb6861618378c01410b4fb41973338b8f8484eddcc801868d314a27fa9c4c41bdad42e9bf2ad08213ad8f7c945e125343ebb1897ebcdf538c13217cc81860d818a3700fb4d044dbee1be26834917679a045265ab1503d1962d02012de305839d002137cc7bfceea8324935da28dc13d3ee4cc01e3862138d0c2124de460d9b19fa55522658c51893e2527453a4b524b3475a005257a6f8b3cfc8acaa927ada18523c73141d90fb498443fbb177f3c742d559725d14c2caff861c674c357432b6fa04524ba4ef19fce9c77f37883441b76362524651fd127f1f75c312b87184d47749d3ac8461e5a7b7ede88bebc47b21ad15d320f6544bfa2d266e93d0c92cd45741ef58721cc768ae8258e4e0aa69b1b6e6e22facaee22d9cc5266d002114dd4e88dbd61930f77b3831687e88795ffe3898830594e43b4d34935cdf248724e58883e64093d8a994e59cdc2a005217acddfef8dca881fbbfb052d06d1644d71a35fd8346d8d201a19d90b79701da67cc682168168ac3f66bc102da26f06c709e30606c2b871c3025a00a2d93cb4f2338b45418b3ff4236fe5e1a196b2bfe38736a7d01f57fc92ec51e70a5af4a14d21597fd00399754b71d8304b012df8d0485c7fe58fccc364958103870d8c80167b305514cf61cc32825843cb6c055ae8a1cdc93b977be7921fc4e4a1df9c22972b253ba0051eba881d8268f660d2a3e41d1acdfef9558f592976e8ad622ef1cc74025ad4a18f11c37aafe5716636022de8d0f94c7b08df093e3cc77e408b39b461bd7298454e0dad169414b8808c1c72e825474ac9f2086d9dd61e5ac4a1cf9fefe179217068dbe33be78725c93c59867a408b3774fd11df7d94cb2d7f4a0dad871836dcd08fdf73dc3a871e0c179091a30dbd7cbc9417fdc55722320a0b0e196ce8f37898c4244b36a0c51afad3143bc7bcb9c3aa24035aa8a1910e3dae7c9912513dc80862e0220dfd3045e647c2050d8d6e6f85f9d050e69fa13dcd14cfa8e13fe56f86768386e61e7c8cd85a199a0866a6633929ba845c90a1c92952f6f894131d3d1763c8c3aa63c81c70721463c38851dac08518eef1b9c6e65e99dec04518949c357e1c43ccfad0334370018646a28f75c4757fe0793cbed0b8e7510c96d1ea11662f103477e4f16fecd0a30b8de6518f69e780810b2e142da54e2533e99c4252085c6c81ec94bd65e37273074719e58b5f4123b8d0c27e1a3b43743e59cd21e3c6175e78b12bf0c28b5d81151759687aa3f57072cb4c24e7020b4dece1fe95e888888751095c5c011f7b5c8b12b37c540cb8b04293e353f4387ace91ad54a14f91a27f7b7b50f1950ae49cc518fe44fd4b800bb898c2fb9db2b2f1e3c040c10d2c237021857efc25313162be556b6a3cca1716c80117514026799877ba9684af4edfdce3e17c1ee78c48910748810b28f4831c7954ee1dd3aafc27f4f97dd23fd47c395c9cd08c4b0c8fe82bb3d1d3843ecb7b444b12a2df354ce8d7471de3479567f5b184f67fd896f2c77c14c787127aef145d4e2324d12f09ed4fe61c3c42848f638e842e26fc835ce6b90e9523f41b6e9db3326c380b1ba1491e6288bfcc16a11f76c6fc16f425426f39ca7c73e820ae0fa1d1ae9087f14355d2a810fab21e1df150cf24d120b492fb7482e9ebb7a640683c459366e7f1e7d8e00f3ab910bbb442d0078d854aaa1e7f98c763b91eb41a47d52b3ee34157fd93f972913a5deda0efb29210c93543cae8a0d3cfa38a947d3c1e0f221680411670c6708106c838638c51c8e8000eb8c8419f7930e7e3517abee4260e1a8d3e623a317983464a7dc2760a3ed898d92033f797aa18535cd4a0930d56dea5ea72712e68d06fe56c8f07316f25cbcfa2ef57f938bf1d53aa97451b23529abac587297d2c3a9575d5bd96e4398645dbbaf942baf68a5e3374051f9f7998d1155de6a1ac86a4d7b924a715894c38af3c960e2b7aa9d86832116288b05945139f197d6079a42abad45739212ba6dc3415cdbb85f8bd9bcb4254f483ca6979d83e4ed1ecbcf6304593935b949c9b47e2bd97a299bf1c631ee7610f3fc549d15f7e06fff1af7fcf3e8ae632e5514acf11459f1f1ed6a237f75e1e8abeacf2f0c7839108151750f4162f15d19a7d772c9fe852679faa5079681eb3279a10464abe5437afe44e749649fd2a42d2ff0e275a11579309cd269a897f195622f9c55513fdb6c5e0ba59ada2db4c1c1d5d63e66c1413cd86979c19297a89d62449e53c108bf943d512cdbb7794d07d79e3d24a346ed1629f7e674ca494682c66f18147ef48fe2327d16a4896dc92aac3c429897e339b846ea8b8d76624fa9e94f1dc3549481f21d166b348a263c147b49324851f8f8296be041dd1580ed7e30ac99f6b6123da094b950f8dd9eb614467da5e3188248fe56311fd6042eea9eaa18846c378a6749930494944a39fdf47e122873c4e11d1c86648d143d991ca21fa2419c97f2eac0f4d4334b9072985686386c5731f4708d1e87f9b8fc6968a1b1944af2d51522cd3b8ba1141b4d61bb52ff4646726108d7a6886a448d1a107203a8bcba3dc3952a6fafda18bae1036af8b0f233f3ff483e8c3d4e3945e1f5af3710f270fa43a87f1f8d05a6e1ec874c8e6cdd9436b91b2874b3df1bed143ff79a4e7a1fd4144f66967e8bb7868263a637e508b1c42ec0ecc6cd8f918113bf49f5256d22816a4bb3a3431a698bd7ce497c7191dda928bddecd1228f229b43d7973a548cbc99f32f87de6427a6e6f1a838b41baf398f3b0c87c62cab06bf887c9dad3774269963ec0d39ec86e6bfdbda879b36f43ea26143f341d635874d651ab38626c43c4fee5571b9aba1eb8fd1a547f2b16a4943ef253fec893986fc6134b49ec7c79b35b285d09ea11f49e4e7d0e314e3a266e893e7815f65dd6c1a96a1f3d73cc821a43cd793a1dfcf9d34f418432f9b3962b21343133c32b847445f10200c4d1e89c4fd51ff6068bd2d23633de3b5f35fe8b3254acc6f8f17fa92d289e12ffbbf7a74a11f59856f8912539c8c73a129cb789582b78576bf07afd15192869c167a97f8dfac259d527916fa9c49fa9e22554ec9b1d0c4483e8ccad590ca2d57e82dcab545a669ae906285f6b72a7f3853e1620c57a18b513b0f7a143bd1f352a1cdeeffe3082ea1a4da29b4f931468fe3a753624aa1cf3fd34ef929c5df28742979854931655068e2a61459197ff230844fe8e2c7e66a3977429f7270cfa164d225274d683f4357981f8ff88f4298d0c60f11215572ac104296d044591e9cbeb9944588129aec716c8eb290525c4b42afe11eb93e8c12aa3424b4616245ece49f07b21ea1b71c262d5fd2bf781aa1f1fc81e69dcfa51f16a10da171726f88d00fdac5cf63a4a4f80da1f128db797b5f7e6809a19394720f5383ce0fa60a42bb6b266af10142572923b89f8f1f74a1b2661e040b92293ee842ce1c4929af4ec87bd084e95188112b7b0495077debebc48b1152c3b88326df728ebe646a15d14163291ffa6355f8b139e837886956979c34890880834799f43fc30810e006fdc5b8933af94047834e001bf49247e91e3fc5f7734e801ab4a972e7b168fccde41702d0a04fd7a9144cbbf2502bb368dde3e7618f071afbc19545d771427894d08a1eb7b1e83ce628f7fd71cc1e4761d14afca76839a2af6822a5f44f632e7577451b3acf7ed0a0f97d702bfa1ff82879ecd893a2cb8a5e7da0fb923c87991157d155bc25094b96f33544156d4b90ae98c74905e3397aceffcea1a24fda23cd39ab44b7943b45ef3e364dd18976fceb5c0a691a2b456f315716f5ccf2a493a2ddeaccf5a4d5283a9389915762a2688226d1f91c345b8ca150f4438bece8127c30da0145f3a35ea9f2f83fd1766995cc5a3cd1c41c3e1befe944531a278c9b0f5314ed70a2d55f7f13fdc883e47c9e72cb4513edbe8690c7272a52e69189e647e36aca9bc4935730d158d4cd1a42b38fcde24b743e0e1aa5a30f7368c85aa211b53ccbe71722265a89e6e262cc173d0e318fa744ef33318fc7dc925a7612cdcb467e8d39340f269444ffd17973a50e89441319a34175b38e6606093e53a28489616a6a5ef2ab9babf9276cf1883ea61c27871e7b8a556b1dd1a79e5f0c19257e21490118648b46b4315ee9e3ebdddc8fd4d07203068ee2801a388a03702480011130c017067000239a32ff710f2d0f2d647ee0d862116dfc484a33f15176fe615b28a2cfcf17c2674f7cf3d88718659091030c2f03877e21832d12d1b764c4d7ef3c10d155650a3e50b92c61cf43343ef8480bd6a772721aa2955cebcf0b4d0103071824032ed8a2109d0f5f3feecaf6041f5b10a28d18ead9d5cad7a3b7c5201a8d33ffe1645cae54b710447b495258c678522d3910fd307a88b33db4543145c020e306f12d00d1a6f851f4a78a98ee973f349ae313f38aa7e54852b9808c1c62b4990bc8c821c6c1314a0a8e045bf8a11f448e383be3167de862ccaf94f23f6c78cc187756a5812df8d046d59e8aeead9a31c70212d8620fc96af8a8dc2c05490d2dbb32c84a8d2f4a8d2fbcf0a2d478941a0f308c18850c00d8600b3db4214926d388cba3a05b1e1a1f8be77e79d1cbc1c743974387b11891233f0b6e183072bc0d1cbcc51dfad851d53afa4b8ec835b4d60e4a142ba90e8dfbe48cfc8ddff31e7468a26886cc1ec64a33877e3cf49f4a397ebef95031c6b0a1270cdfdd420ecdcc878f65312d7b3ce2d0a48f7f3cf89167d1d83e1c9a9eec61decf90ffdbbfa11fa9e86a65eb14e67743f32924cd20f169439327f49c4b6f0e2178d8d0471ea5481f8f5943934759e24f96ca9355a386b68796f2bb555ee6e4230d4d4a9ff1f8e6030dad8f87e65d923c94668f3374ad972a4ce47384c6cdd056de8815635d25e45e86b65d2a7cf30fe259d4c9d0591e067d0cfdd83baa72770a9663c4d0ac0176c030a3d186a68729a5ecaed8d07ecfe4bce6d4e3ccaca1cdfddbe2299e66cd992368a8a18f8af624173febf96968a47a42c40efe13ada3a1ffe9e99d989b33b491d6831e7558a9a06186b677d3f3e7f4402aa8386894a1cb33d1f01ba3fbc49dc9d0a590873e714726fba78ba031867623728a16347eba325513040d3134d9ad3ec8d889f1438e46181a7fd72e0b715340030c6d94a9ee716c769958f942271fd6d99113c5b38ff242e73edccd216589156874a1f7182b7690d6e8c8392e34972f54f8d21e4c0a490d6ca15fcf48d91f8fcc7eae853e7d7593677abb0f3559e85f249b8f7de725a94a061a58e073a7e4afd04e6a4f799007412574a7acd06bc41e1ff1f5b8b4aad09a0fc2457ce01ba3e44585c674e2cbe698093d182e20d3018d29749a5a26bfe7a386960bb80ca08106e48086143a1ffbe7ec81798f22e735b470dc18038c1c050c736e8851566844a18f214b0ce6da9b7a3caa86d692800614da6061afdd07a6aa2edb139afcd23ef01c95ef3935860d14e07042d3f9e77a3daac6011a4d6836eb25f7a1c85ca78e097d6eb7943dfe7e758da3e0c60d05dc15682ca18bbb5de13da479f441c628c70106f8c200e7053632a0843ee5477938ba3121e7011a49e8c77f1e5accac67b203c38ea0800612da10997fa857ae9f3980c6113aaf641adaa111d517156818a11f44dde82142e490724a40111acbb3e3e25a922452a04184cecaf2e6a5c8a35cbdb581c610fa71f695a566f830bb2684b64b2fe5d043cbd4402308cda4c5a5b86421b153160d3480d045889907e5a3ca03778f9e81c60fba14d2963d0ccb2dfd813e6825a447d3873f088d1eb05a29cb2c5c3d1bd0e041973dfc8932cbec817c3b68be356534aeab832e2fc6f33cec60b9a265cb4023075d08d3177de347712d3a30d0c041a71f71647d58bee1c36ed0794a6856fb30a4d4e3d8a013f70d659d528e1bcf1b038d1a3439732ed719b25c1e4583068debaa8f7c6566d1bea7f81e8fc42acd63185880034c16b198018bce34e6c51ee6e9b5b899f18a3e7e3fbbece471b0f4e18a07218484ff9c7a9c80e698d18a2e2c438ec93ed2b8dc6a68b1a2ef411e0f43f4e1b5a488e3484121a35860157d746e0f91f728122f30cc50451f25b29585769e9cf38c543439d71247432b45e7890aab92e53c28705280334ed1c43cbccc143b362ccc3045b3fb51f258636846299aecbff81cd512d11ba28519a4e89367b636ef6136f3284d61c6289aa03d4c612d55f4f6a2683786b8c6fea168a2e4d81bf47340d15af6fc3d08933c7a8ff389f6e4f3e6d8ef78a21f67a5a861aa7b15d54e6c71e373560c1a4ef43921ba83c4a431856613ad56f2950e9190236534d1f9a037a71015cec84417be43feb0b0a6d563a2c9e8e1eb6c0fca3ae6126dfa0f55a262cc2a2996685f228fbf2a5a89aea2335fcb7b50a28d33510bba4fa21ffba0b437cf4512fd78de8e9d53959c4b24bcd89c93b6ac40a2eb5fff109a21365f1ed16574c46dcb6147343dd4e91e1f841bd16bfca0c7436a45d119d1f7e04225cf9ee2c3cb22bad4a79ff4df5544171e62e654ed739adc4474ed9bb36bb96b58b988684be6521ec4eca3be8c1ea2f3489ebd479e71bc7386e84f37c5b4d85d96215a08365b148ff9e3ce378310eda898fe40627aa89b1c449f4729bcfa6014449f113e7eb923770cc140749152aab0b323eb1920da8f117cecb13acf7afca11fe594f8a1cf1c34659c09e9431f3e1c0b9314e62b3f3e74c953a618a53a1aa3b687b60759b6e2c2c57f0f9fa1873e2e4e0ac922c7a3b43cb4bb397a1841c643fbe147f2793c1ea668f70e4d08511159f91d7cb34317232339a30efd70dcdf473ee8bc39557468f2787e982755f6a550cda14d1e12c35b9243e31a25c4f81b53b41a87f63ce746cd9ec77b201cfa3cfa31850ddb93c7bda18daaa9553c3ce6dfc80d8d78c7bbf96adad08fa5b3b25f1e4c1e4f6cf893f9f827fb308789e38c35b42312a22b1d35b4ea99e16d995fc18c34b4293fc4527b1c1a344d3d39c75f160133ced02789c8199d5a3eec666852ba6fbe3c146b93ad0c7d65fcee410fd735663234f9294c27c317881963f09254cef3aa51036688a18931349386371ff4d89d118636e7fcf9e2cf034397b1d5830b11f349dba5c28c2fb4165335a60e1f68859178a11fcb22e719639952e6c65900196674a1774f9ecf25f6e0429b42ce3f4cc903310a33b6d00fd243471fb76572f3b5d07986c9a1d17f3c3eb359e82bb54eae6c9324ea2f176660a14d31d464fcc25f4ccc0b33ae50f26fbfca1e7f58a1099ecae2fb7053f851b5851955e87ad09fdfd24378e5aa0433a8d0c7109a3a5b9d390ffd0ecc9842db59a3f8bb65e86c82e26b000d342071cc90421f27ce6777760dc9471c3624604e0e326e64a05831230abdc69853ca37c5205bcd80421b3f86bb8fc7a3ce7842af3faafcb1e7e16572ff0b339cd06fdcf741e59c44f56634c1073398d086df9093a658fe618aed0c3396d08f47561ae634e7f338b3169c1a4a68cef24984aed843cd1e4968f275ab5b6cfeec5841423f8ce983b824f2615732e308c594dd269e210f36426b9a7dac96473fc28c223421de5c83bba6f69697308308fdffc0423d6cf4e1fe4028cc18426b962b7884187394d8d33043087d9cfc3dd44d6b4df9812308bdcc660f5333ad5c8ca33d0308bd667d8fb1f2a1441f8b5fccf8c183e02339123e210ae3c6c36f9c60860fdc2cd3351f6b68b5c0c65b21f6809cabc2535871d1d4d03a63b820071862d8501b3378d088e857a51033c781193b684d7e26ec464f6ae1230566e8a07dd7ceeaefde5a29326e8861021b39e8c7c3389b2fb1123df84c20c68d30f6023370606e88854fed0e937367c60ddae459e24fc49109d935dbc00c1bf4fba97a9c6527b6f95783e6e73c87ae783d8a51927c32811934e8b3c2facc84cafa9845af315295e7f878d0ddd7d0b20870218b264fdc0db9735bf7380970110b58746da93dcbfc5a3cc110a33c701404b878453f7fd1df722dffc442c1396350953d800b57103d74ac2a4f06b86845fbbfa3ff9a99871b536a682119070719c50276002e5861e60ff1c77162a8f26a6871b18aa6f3cc4739ff28e4f1606c1940030d20c3075ca8a2f3df54538fa829ba5b438bea18232e52d146af28a3a2d138da43c9cfcd1fe714ed49c86997fafb848f29da8b2a4f29dae42265393fe4cbe349d198fc38feba0f338a2ed47c422b96c6c48d281a4b29ceff564c289acc1227f47ed40ba70145b32512428a1b3b64d17ca2999f4b912b72434e8c27fa907d63247f7c18258f4ef459663d523fa5a0b973a28f335a41fff44df49195e74a62c5c7b2269acf1c24428ece1ccc9289f6b3a588639e7abc5fc1449ffda282f94b0aa75fa209a13d65086292c1b5441b2d9f554b8a8b6eb9129d574e5987bc215ae082129d5aec55d78e27d1e78ddc117342dfc7c5a2589e94c9da4874124f7de3e69e6081441b2fa80fe287ee13f923bad03148e728093d4871443b79f36035f8d8bc828d6846762d7a5c0e3e1ea48ce8ca7d90f3388fc739a77c11ad566fb22ec98ce1554413367ac7f961881ed54c441f4c354f28b7aca14144bf799d216a85f4f5718836346aabfef828ba050dd1ce0f5385f2b61055b4d8c35c79248468fbc7f167621944f33d4c7e31b50fe7870ba26d5fdd8a3efe18271c887ea2235e6ba6f0153d40341d63f447fd914feffed08f8fc762ced79324747ee85ad3e35b1089a539eb43d343df38318fe5431f7adcedd9e3e83125f7d0a954f87baa0fc3af877e333f37f38f3cf4f1bacadda4d23a5778e807217fd8e21617412ab373ae9c7029f320a38c1b5ec304360e05b0c0851d9aecbb3e8aa953873682fff02d9565d51e74e8c39fa4e9c5cca195f0d2bf18a27c1ccaa119118df3f63c6e4f1cfa81c5ec1e76444c7570e8d3ac3ba488e9dfd0e6b54afeb0240f5b223768398f453dc63c4a1b9a0d3223a319e90cb8604317a23abcc2f778be8759435b791e7af6ba37ef79052ed4d077ce3d8c5639a140e48676f63226b85ea8006d68539088a53e8a2f529e02b0a1e9e910d33db13534bf2142f0c158c88fd3c1a0006ae8ddad871b4fb337c67c1adaccc81444db64f28f4743bb1f63c8e78f2145ed9ca1314bd509fe3de142c70c4d8c47c81aab2943eff1f2434a0c33ee3ec8d0781c151f66feeffcf018fa51cc5b96720f436c0f1643ebf13fcc21875a269dc3d0e747997b32190c8d7af6f494fb1626fc8526c4ccd3a3d8a932a8eb85e6f3a54cb14fd2b2df8526cba51cddc4c729b85c686263c586e8740badeb0fdd2c58a8853e9b4598853ef8c07327347c9cd9c342a397c7b2232974857e14f9b271926285de2dee45a87fe681e414a00afd38671ff920e254687bac19ae3c7cafaf5368f2f24023238f8255c84ba1d1ca923d4145fe3d51682fc709f3fce3b03e43a1538df883d3ee3ca189c933c4298b71421b433646d33f46cf4713fa41e57cfcd67eb3b630a1137ff35165f7844acb129a1817bffc59b1a5072ba11f8b67cde3cd903d464e429b63bf842cf922a10d556a9117122204f7085d58b888d962e37f3cd4085d741dd10b2947e7142d423f19b40749824a847eca42928eb95adccc21f47adaad5e9557f5452134a9c7f1731ea5fc3c8a6210fa56f1618c938240e842f320f286a4ceb8e4075d481fb8a63cafba49e28376b5276264c92156caf5a00fd53215ad2d7aaac78336680cef1816db417b1ea38773d13323663a68736ccbb997aa1cf483f4b19ea4e40f5370d07f1e84209e232386ce0d9a5031cfe4618a0d3ac999a90035e862fe20599acf42e54d0168c0f860a28c476416edac8f338f53e41cea932c3acfb1238f428e1c1e82b1687f2017f36b8f2f8f2504167d756a7f4ef49c1fc45e916c58f95c39eb04cf15a7d4c93ff24b63482bfc8829413b229c7f8515445757af70155d5a87ccb8b8dca33c7202650c31ca1838bcf0828c1c6350000460a4a00b55f4de65e95161731ef89f8a7e1023e518dbc7a3a2c93d0e9373d52b54fc718aae2add67f3789825584cd1fa24e9518f2bc897e4a56062fc9fc81a27275214219ff68f3763ca10a18b51742af323ed7c29bf822a8a2e73c76879542991c7a342d1c9cc678bbe513efc41d1c52ab72815c24fb49643d20dedf14ff09862c386186570e05ed085279a0b0b2be3a924e4e477a2d3fef1787c6c19273a8d397a1e5f99595436d1e75073330d71324a0f4db496f28f37c7870ed1cc91893eab956c78b630d168cac8eac17c5be95443f512edb64fbb541ea7b4cc050705e78517c7746189365a220ffb2c24571e61780a0e0e1ce52146190ca88001be3080180f30c01784208eeca212ac0f32b6495c060926251a8f413b73cc2999a7a88b49f4a59ae3556748d085249ad19d985f434e24ba80442f16e13375fb7b3c8ebcf06211876bc0bb78441be3fb935c9ac688c6115d90fcd3f82566a1fc4634b1995bcabf3f490719d1f720fe57308f952cf68be825460d09d9528ae8e47384c4987212d1c766b4ea889d3dca2f22dabdbe909d71bddb3b8768a34aec487f75691e6c882e67f2f1b8a3a7109d588e71a193e5943c4488e6af4f362594458a19446b794c5753674b3df25186207a0d799c621e4cfa38fc3081e86227aec54258cba600d14e6b5a4a1f64fed08989f7382345b47dac1ffac9d8a3eeb548f3d8a30f7d0c51dc2ba7ca873698861cd2477111921d41177b6827e74829f544725fa987fe53c89524639e8726e3a4f6e5d22f4d413cb4d77de631ff50b7738726fb38a5d8a189c8de9d4c52f7494a1d9a1ee7e0efb151dc4117746877b5f256c58fcbad32875e326feec7dcc318e39243ff21c694574a53bf701cfa603ef6098d9a7b9034387452a5794936698595dfd0ac7fa610cfc7c9fff36ee83b7aec64ff9f4bf2b6a16977091b3b2de22cc9862e7682780afbd927af6b684f25f978d083560d7d67ec1e86a8858444d3d056f8c8aaf94725552934b4713ac6cdffed199a90f2c712f3e95d98a1491a256ef00bd69347a424431b3b87abf29410b407194393626ac7e02987d4a689a1eb3cc8136d31546f6a616832c3754c1e1e6d9507439b4a7b35235d7ffc2ff4dbf9737ed5cda1337732a081b28014dcc82146a961011674e1854626527ca5cefa13ad2ef4f352493c522b8f2bd905174a1f75b58ca557430b0c1ca546560e314e0a30e08517c758a18b2d34ebc39d160da5e084714c052703db8516fa79b39cb6f6493ea8123046990067a18b2dda9a9dc1421f192c98c74dfd1d1dd42eaed0e4a4e5c1934c4e51ad1a5a24bbb042972242920913fa5f4231caa882139f53e4ac70cb8d1c38ca78642515da7e1f4aaed81d4156630231aef018c32ea6b0822ea4d0822ea2d0878f412cf8d08742e7fde3f361f4204ea7cc13fa818f4ce3848e0c212e5d38a113790b7bfe1bb28fcc2e9a80822e98d078decd4fe96372174b78143d7ccf728e7f1646174a50f3c854924bcc318ad64512da8c6bf2a5691d7edc978381f3b0114606bc20c721012fbcf8c2005b8601342001159c0c78e1058e3d0150a10b24d4a5397b9c49b39fa419f0c20b1c64dc2803071965dcc0f1c531419d878d2f0c60ae0c03a4e0e4788001dcca10c305860160907172846123470983015e7821c6c991a384f1445564e41863003de8e2087d6b4af12f79a40b23109d5b4dc30fe8a2085d7cd937d7fce9f53c88d0ecf6e620f1523aff103ab78e9762c8d751dc15423f65d271b327327c30086da5d8121629860f620784b62ddac7c30929b93d7ed0bfe7cb9543de8d7e990fdaf0933ff0c8292bfee84127e739b6dbd25386f0a01133d3b590da415baa93963f332b246b40173a68728c173e2e5dd58e7a0e1a9f3cfee41efd5241c74157952afeb3c3376863eaa71e78ce3cc8ebdaa0cd8ce79f62ad1ab463f9ee957c501734e8ac3ff43059a58cb8540dbd4163167d0a31f92c2a7e2efa1a5a2928838c1b65a8208dc8a28bfdc38f54d10f936a0868c4a20b314bb4f40b29e3071283459b3f7d7069597a337868bca2e914227af64afd40c3155dfc78544f0eb123f380038d56b411e3f99d2a7126874b8e3381636e7c910347b1000d56749dd48248f89809c8484021a3d058459bb77dac9de2669878d5d0ca61230536c25053c5831cdb6b253a8d54b4b1f228fe4388ce10aa11e3013450d1c76c39c7a26492e93c689ca20fdfd6e37851aba19525a0618a7e9c7a1862a5e85f4d2a5f3e69349706291ec9f9cfe6a12f46c961c3538c04e4b0a1002fbcc861c3cf0b6ce02883c628ca0b1aa268df528ccee4fe1bf33033a0118a7e70e1f29fa53440c18e460b5d39631c3292ab03343ed1478faf530849eb8ab786168e1c361c8cf3021b396c88517078a2f71472e17f37c7b0981a5a5b9da0a424aeeb5e1e9ce8dddbf23042ae761f7f134da7d8a431acc7b3b826fa510f7a357230959e9c4cb4390fe36866cbd4983a9868264791b6a43d5ef35ca21f4e484bf7560a215aa29fd110b2e6203df8cd54a2d720e5e39e8efdd60c25ba6c61a6e5772d3c67125d89f5a6ded891cb7948a20b1d2947fb288355f81189b64327ab8798899f3b24fad85e5145377ea4d01fd1a899678b97d442568a23bac88f29e70cd7a85869443fabdf9ab2c685f83042d3a94edd1ec98b68a6fa07314496fc0fb2224e659d079e625bd6f0e5b0a1001b63947b9c155c52000460bc804622daff1e99844a31221a8be8f1e0a43cc4fc87e8b2b4a6e4de61437b0cd148e851fcae944274151572344bcee94309d1a4e0937ad89661b71c44a7d13a55ca8d0ba2ef99f69423a681e887e17be24c7f18c252407452e991a26e5ba427ffd0b44774c6dd1fc69fd30fada6ac2d1d92647c987de8f34072ce7d7b10c306f9d0b959c5ece3978a88e31e5a998a59e5d4472305f5d0e46178e9c18b69be38c94333bdd6f139fcfd2b040f5d665e730d933a7646eed005cd1fc6eaedd08f7b94963b4b249598ab439fde9be5e3fe3cd83ce8d0e5f43c88ad68c93dcce6d05e5f0cf17a3c4ed99d9243971691515aae69397168577d9c9dbb52ff7fc0a12dd514df0eeb5dcb1bfa8daa16a5f21373d80d9d4ed889b20c558c2ea8240fa5f2602c1409c4c1604814080387ac07002314080018302a0e87a2a1304d3451fb140004572c1a362e2616181a0e1018181416100404c160381c0a0483a1402814080305e23132a443f500d621020ced8fac6d9183d4286efa122cd3c3283846aedc1b0459cf39e0296357510e95bfa73a87da6a23b5574cbca5c06175242912b32f37a62312134354207308c0858091d85cda489193083ce4168164026678f154a44a562ad626e02c7ba3c257ced701f8273cf20a4b3cc1a4de6232d9daa8235811a91c08cfae9757133dc2a793949a4846f85b622cff0bc2ab8fb9b8223c1e9a2c448fc88f6c743e21a0706c21f0de1b04580144582bdc0b8156d89669d5d8e604534294c0ae0edbab0cfc7f553826b815aa5c885289a0cfc64276618d00251cb5f0567576cc47422415ca98d3d6e5f985140e625be481bfb2531e11f92b465b057328903d820a56a1c45496459d052346f3ec29632bb750facb2840515e980ea8a281db7674f4497eb3623114305ad7dffed06a01c9a42d5dc1b58c81d9fb490d04a9cf0ab207c950118ad3aeed99aebec4a500e6b84d81ba002cd3b35e29f5c51809f0cb5c96ac229cf6742930821a4e527caa2c6caad978ebd3f4a14795be60c55d214ef75f71c59e224c621fa0c9ca87ff75f925ebad492d85eda53c951e339a181ca2e56e4b46f0d42c7469443b03b1239933dd5b9ef7567a52acf04dbe32b119b0b3f3a99a6b21c9d6b966170a9099a8cffdcc802f6bbd92460ac0e59a7abd8873046652d12a611b0475e078f569b16aeea79e25b4e2adff1c73108d47e061146298108367b854759102e1a166397be8fa8c8275651f3d89baba6521ac9122d122ed4be62ce89b80c0f3b385b53d7fe979b745426a3f8f058d586fafcf94858e4245fd8bd6f3ea189c2ee7979e0ace93eca6e2971d0f2244ece6dc6c588630fba32ea4746824a8c44b30a4db5c897c000410d28e19ba32931b4a551d4c8c9c018f8a592a032b4c4e23875c55923d16ba754b55a6ecf5d1b77624b132d2be55d2bcedc9eca16a384818529569ecdd06d72cd2983854598ca0f4cbeaaa3d2ce21cb2967f76da0aa17d78e5de832c4781119940dc924f27a8cc9a0adf49ce100f3f3327d13e2849c54453fe979e093613f41990094a9ad0679c4aad699a2a4abe46a832538a0cec1c9820e2b6612fcd2e8f43d7a0951d343a05f8af184056014fa14652b84a4a72f38edcdf308dc7de58f65abf13c4e14d7d2f47765228c507e736478a99081c7be55896c41a5362b44c98199e2ebd17e9f0c13c546c509e2b74a90ab1709b22bf3dc679d8e81ef0a3a7769eb0300dbce26d6a6233767d48da2dd909de19abb34b38945b6dc63ada762c530876d5eba231605758d3f45f40b187c68b34d2a319581d324ea66e067379d5d6c1f7109a7fa6c7f6a47656cbc3a280b442f12af04f6017e88ec6047d0a4aebf699ef0becd7dc448bc6be635ca696293d145dde92cb06d6b33d0746808aaf78dcd92f1d825d921372e7368306c1ead5e928399fa747b64af4b0d20ea0938f02d78d7759c5bff147a771d07cd42ec8eca5fad492724ddd0849810b8ece0a70c9a03c3ef0b63201b7209d5f06e1b867c1711524d2da7a3ad31cdb23d897a85e14e1cd9d80a2c252d508be0afafe708b3fd2acb00655ad86b48029878a6dbe45123a0ef16183c38ab88d0849bbfe546493d6f67ec3aa43e23f20ceab56f3269950cb2068ef5b30ffc1110057f796614a756112c3a41f69175b84bea9715fa591bb7db7e76286bd0c1de8c376da5152014032f56c58e21fa18e6924402029ffc9b5ef99b0385d0a2088008b950d17bf3167ca3d2c6c419182212b1dad71008c8854a71f9c05e0045103f4abc46f290d112a0d8f80e8318a78c7715701c90958464fda28c77e7fa0e5427d449ba0c32b74738ac9258581df1222c4e822321ae42243cf20e1c57a5e129b2d3334b1eec02912d1308e73a5fdb01866db1e0ca7c9749d45cf6ff66d1d7b71e336b2d8325237d58aa2f977e404804b1656aaf8faa21f94f4c984e95793b23732b711fa630039840f5377ff2fd8537c50fe8c692e90dbca8b36deb148bae6452d3d41463dfb0f554ecee9e9e8d0561a6ee15d6d4840bd7fc4eec716d97bf1986f22b9233ea898b4a526679e393d9a3e623cb5a62d1a88bd51de44580da5d1451f80cc6d7a55c8020cb58fe9cea9e0e8a4527621175d83685301b6a7c4a4187a1edcddac55175c28610f7aa913c0f737f1522858ef5ce844ea100081ecf30246ac7e44432a0879c9a76be4cb2193fae03b54d7b0f5061e3c6db71360d21c0e751ead13840c00c51a2f81a35271f93ae2f03940aa608bba1fc26fd6b185026e48791a10458eb78dc05668c972e9b1750c4d045b3824eaa1aa5b40c48b1b78cd9d1f2a6bbbfc84b4559b739f0722197925394d27622457b53e480b5acb3f916a590b1ac7d9da4181c723f330622d0ef6900535b2b6bff1f431efc1bef06d2f82e10129fcd30ceb50a63fbbcd9eb0643a4743212b0387d5b66eaac48c08456aae12eb7417e6e1b5fe173db9538f972efc9a238b621391703ba2b8ed2162129d9deda83053833eda03d581876374086e224e426b19a2f7227e44a90a2934d4876835214a857e0aad2c54a9104f43aa227aa35a4d2894128a792151ce05ffb22275bf6285be36e8053d9af2ba9708f87f6b09866033864658e7f55133fdaf6067c8a745a484a8c427d1545ba622a716d591a2dc0081dfb2d6a1eab561c01386421608f1105a41e832a17e42a8095926d44f4825a1554828cdf9e9ba04938806431d895c16bae110378b5e5a44c3229c13e5664c72caec84efc5c95f3f96d9b463addbd5d97fc04f36d0cf65f2ada17b237c57b0876acd0e79ef14995e43764f27cab05a5d0919da34a4e8623065613934712ff062a388b109075869bdfce82b40294845969c1b038b5d6ccfd525759a584797ac6e2b945f08537a401679c1af8d11267baa931d949218d23a45e8ab6a64ccac971ed057d42bbf513e3a47f2547a346dd6a15b50a47d255c25af1995ef289c4e7e9b906ed2f000aa06bba5b3895f3b159de1237ad7a9a35450754d5c37a6a9ad879b31998ee5e7d75f51f7df539b041a034779812ae7aa271cbe17bf90354ac7d2d4d37bb488b3f6442461c1eb6de5c1316cff871f262526e2edd56ab03d99865db68706c069e25d3eb7fa6a25c82c136bd7372d0e41feb752b1eaa80a8786c48ffa4c4a4c0bf045ac259722909b85c2eed1138be16eef08bf97d1dfaa36a593820001264809b263ee6d371b24cb461923bb7296bcfc707231fc69fed5654a190446b1d455e7fc9c94731a5a8b3d5b9fe78c8080b0ab6b98386c23ae29068ec483db3c02dddaf2183dd18ee356c0b288a41486673b9839b7b02b61550327ffe212091f641bb4a265ac9cd2bd4554561dabe4b2497254970d2a6f0291047f43754905be4eb854be8663b6e4b56663e087cc978f1810d3eb2ffeb979e1ee2ba975a1aef245944c90008602a75c31eb5775730593d7937992022a9040f93ba33ef2cee6cd4b3bf1744b2a906588be127296b4c03480fd66b18dbb668b53dc63f1cf80781a3db114beedbe95275962d21e1a7c3584bbb7c152ec8d5cbd0c276a213f262ab3c49e2403067ad0f06aa6b5b95cee8a5bea6197f20e0209b71083ab58a1e8d434a86e801028804981fb40298f0e43b0f1e134bb4ba3d5f21e9a13d56f5b1cf21dc165eff8a7200b599fb24f84123a4a0c6a27b4fb5e5de0a6544b7ed5fd9c4c7e606c56b903e6039ca899aff337c4c7406827a58c3fdaa0e1c745ddd88982653e24de3b2bb2701c1b26a3cec89deb690e9e36eba07d8cd6f0243e042c614b06b53fc8126434ec694e1593fc38d8223d8d6cf277e5853a2a3d0da6f31b2e09f77569c70892685bfea97f87f33ef327d5b1ed546f5a226745fb3cf035f881aaced09fe028ce4f85ce59d6c58c4eff57f805fa665af542858e19b4fb86c5e62df024f14e0db1614aefdc11e8e450463acb84e6b09c10677df7198a32ed80850b6c31f46600b855004bbb9c7ff6b5e49db16ba8177ad11bf3213224ce909f4e568f21d2e8df2399cb0df6e92cb6420e7d5cbdcc067d70db13802b155fc2bbd7b399ff6709ef78096543bc906467fcca84eb2bd20495ba13ad4125ff5f55765b45971f14150fb184c1098aa2c4620e34a43778b412f57b2c870fb8a29789ff64236bd63a1d0f0fb7a85126ee7f3016008b8d31a2c5db76a0d5bd8fe6ace94c8437a17d3647a0803cac4995aa512fe20460c8107dce4b8c3e9dd01298f5b23d40d5714bbd66afb0a949b42885b7aeaac5630ad3c2172c6a76fa03f2558185806ed446352f17679622dd62bcadfae7391d73a53ebef18b96a12d850ee0d80e72ba05b0598425754f4d943c5c8a007bcfd8db60b4107bb014aaaf42810a73c5581c204380d9d4416033f54a05bdd360975224c30a53a707d473e3f6c91475152fb5f12605c7c214e61bca1698afd616a6ed19168e2597a0d97883a09f9a9544bc00911a78490ed9b9a57a8dd84287751dd59aa975b875c1f5fe331dba2363d56245ddb4c0b4bcf79598512785a2c9edb209fa06c9ded7d457518b8abd8fde758e2b1b30d730500bd866efffeaba35462b008b9b650f25c6c00fb725cbd6746dc33c9aac8581eff3cfa943b5b14334876d2bcf9064dec84e78a8847741db3d0780bcc1b794b559a1feb79c1c2d4ddc7f20a6d536614f7ba83f9c340bb9e1aaf7344acf5f94cda4bbf6bd043425acc0695bf6f64691c6e2bbce5b03e9c7d442443c250c3c6e04f981ab620c22e471b2b754444499d79ec177f7ffa674ab8ff76fd1111428e56a9a3920ba91be3cbaf3428c9b52f31923dc9aef9816c24a235b06410fcd10c9ae9d220a16f64a05588516784ed32bd261699a4a36a934780600081093cb68a63de8c00d4af52d546a289ab778aeaa63757b05f1ca69bb9cdac6c60e53630d816c311d5ea7e81e186b02b415067eac8a8541175d82264c0341b0b82c3b6a4bdcf1f7823060b941157950473823291fe8c924918e333d49c61b30c3a164399b9d03a09288b4d0dc19c809aa09ebaf071b41fb65263b738c80e12f70b204b157314d95f13ebc47f94b403e0510a82406e2cb94ab32a6b74222508b762cf281f08de0eecb8a14dc0036172decd8452eedc801d4ca14e4befe3214e6495444e6b8cac958ba5d6b8084fdb66f2f3779a1299d35e9e13f3869df1b96db35991f6c6dcb6e348299ef3cd5e983ca339dac84ebc689e71ebb4599c767bd0f442692a4514e8e9971145a7e4a6ef1b82ef5146ceaada1b605b8d988c9b46e36df79b700b28245d703cd7ae0636a3eae666da99b70eca52215dd188861955fc26c521b708bfa106b677cee5b2b6a215af6991d78a44c9b630ab410a04b39dbc9c0e153d06a5ebbd69fbdafa2c814d269ad2a657d24557a594e6151461f0ec6f6f269f77345cb6b79c7784d6eb00eb62f8d87c78ba35cf2508d0aef95530a58fab644ad5b68998fa28f17cfbda086200faed6280586839b8c137bc02314778ae42336b415d1a0eddb4f50fc15246fcf161e1f48b930b75f92a620e0b80c00da4f111e2083e419b11698f1430e3b1aa834a19f19aa21ebea352f932facfccbc007a04da20e82d3e7d389c320a4d8bcaa54dda13ff84160cc72b1e4f117f4fd7382f9e57bd70a40d67a032c1247ffb743342cd823563cc52d0c38e29c77ca7880ea3af83ee9ebcdc88b1fd6fa2c6b28836558dabe08fe225dccc90890fbe4c5123c8cd14d018fe12b9979f0ba3721b2c7daa1bf0b496aa819af30035dc7e32accea1b8f7a74e5d8bd11b10c49d0408982175e73f1713d946347889759cfc4cf843d8a5c5543c33405032d2571e960b506a01568b297e3064591142ead15bc3315cb7534b1d39c364766bb11b414a546bfa2cc51ac4f6105fa708a0c4a2955693482f4baae154ad428a7bff884f336b2939a1d4b4b9feaeaacb7a126a75ef4f452565d970cd4848952689dad0d5daf5490d237d76bb59414eeab9d5a595186691d121d51658c1815cb2a31156e79a2c3c49ae18a5a9d4741a028d0ea987a2220d582a02b551589588682c37a10d50a54282fda1b58468c47480b25909ccfb44008afe303c2e59f9985b7ab596aeb5fad35209616f369b0d7eaa5e614356621d610d5d45bca5e45c1b5a40cebe19a1ca6a9fec4c861e7d2e481caccf8cb367f20783760f368fc5c2ec3f468d6834738ec6dbb44ab094e775d644b9183a1ad4fdb5c3ff4c8bfb84081a2bb7b9ee9f8d9609c3a78112c1dda107193c53303ae2aa9922c7cc42d2d11cabc72f993b43b2090b8c8fa1687072f6cf689a450610fc91e177624b7be148e7eedc45a0e10b95ac73899d7bd4c0427979b29263ba083f4635c594420ca306c56726f77f347183f13785085af375752a4503df21e6fbc72d2c98e742da8bcf35e44f3de2ad4333ddfc6db5167d2c5b277db1c70ab008c6371e64c0402a54c2000320665994c427fc1672de63053cd32e9488201fc206d5fab79c5abfde3db2cf9b52318c7e5e81c27ed440ff152f664f22662487d61d48fc2022a5c3f2573e1bea0e61323c7fae30ae11c6bbbc30bb90693b5ffc9f424459d0d93f9fc33df3dbc82cc60f2d6d498277fa1c17d9d88ebed8a6acaa805b07c44d21a0f247b345194ce89ea68c39fbb8858509b22ee02997a072a98c233bac88ae9c162daf054559eb568f948627d19e7467552443b8d6c659c10ad7da6340f4e04174de4fc937b3e4cbcd43425399760b90ec700dae7cd8e808738c316c5fc18bdeebf76cff0e67b84663579521a30ea31d6dd959fc1a94b75d67870daeaad6230e83df1917ba40660493794674b77bb659f67ec6914a537bf3c17a2d59d9c508766d514b4e70273d571816ce64c45d6cecfe9045bba8ed29ba3cdb3e09c4874f2f779a627766ec61f3c7fac89fd848874c1d37a828505b38493d6ecf16355d8fc32b0bddb952039505614aec179f2ee2ea6427eecb95987879147ad821a258362f03ed64e4daded4bcaf7fa048b0039fc802caab24b05b0a330107ef218f0776332f26c4af51c89d5a6530001692f61fda5a0ea281b6fccb46ffbce868f25a3f40a9e9df6870ee7be9257a92daa925f063f004b554e9800c999a249589e440c28b3c3f632a3fc3786afe22981455492cb6a41217b79c2b262671fb14246481ed5ab94a430daf2002faa1e0b745ad8415525d623b9912124058049da630ba5915dc1227c8ce8159214cb2a281baedd06c592f03960afe25055d59485626b0571e332422d4bd85b155cda55182f5e34f230e64a4484f5aa1a30551808fea38408bf30919af804e2cc45e5c9f39a92e964506ed7a71560115e0aab544bc57a4eb4ec25512c9a297db9c4212e72720b94d4f8a59b130b2cd4d9eceed495d321edc8f1bbc0ab5c03f871503b20d0dd875a53588c145180e65c3c7799c3c9fde98673e53a143d9d29dc193032a92351bbcd93d265c65588a3e3cf09ebca74aab9673f38e2e5223b12cefdcd1ef0ef8c628c0c597bef73571848918387e64f70c535c38ece6044f3c515894c85cf915f96f1b7b7d149071a8944daee1ae84dbe18a22770f70dd37cc630b383a664f92493e995421bf42ede5f958d55c1af25af51d2aab851c57a9b37c8d6c91fbe70d51441b69476353cdfde8d4a329bc49be2b478971b4181105c49d706474fc82c72f3c7db9981776f73f5f35b8db46bd11b65a205efa986b998d070ab3b43ba7ca0253f97488a2f77fc29a9d5dbe97e82169a9437fb89ecc43a514e8c65bc57922597474c14f784c84831b1b6441ef46ea0507e21533283f1449dd383fc1a39c854dee93dad089a63aa431810ea09eee68a370267412448b1bf78da601e5dd576a299d959e43e5a9060769944c3fcdd4117ca68b4dac609f5378f84f0fcf6a581e200508c4f848db703afa603614c95f9d2174202907eb3884bad1bcc0398d048d87d71802cd3d2d668f9d689b32b5655fa7299477dd29e6b2d08ead695b73270d50aaf859ee8513bb083d2ffcc0b7b2fb775f61588f5f36f4b6cc51f0e7c40d1bede29a5a8687db4e3951fa85d12e8c1329aa401043d8108bf54b3f5a38da88747b8be45afd8995608a0d4f8bfe81994deb09cdc10ed5af891740045ed1892b4a5b862f208373169923d231b6cb3e22308faaba6698da4931cfc8a194ec342b32626f7f0003b132984cee774c1420bfe8fd8880ec9b6b7ec00e577353f79f5cf9b1b3ddaf83d87a2501b6316b92cbd17e32b1c45716070547862ed6bd5df58118880a8eb64cb5fd996ead4306bc73678fc50610c60d4961228a20055bf133aeebf862645de11786148054472940dcc53079e864c012c629f4fa36e711c510a5a1c5218c6ed8306f380d20fae0829b76f0236e00523e1e0c44514753233b853d23c0a483210dd2085bbcb4baa83bf5c5c026170d496410f922cffb0660b7e72ce43c8e770172c422e0886a1401c16030a40032d009be0020d68037f312f50ca5623906eb1a23b4582d0b536da42fb9a8b91d3a05ca34205e03b8feb34645b94df02ce6dd0938b4de6d3bf48ff02d86d3604fa517b25ab111ab40191b89e0da40c5446ef79316cdc8dd18ef5a16d1af857262fe301ba892916fa023dff49a81eba33d9e988b08711caa7d5025dab82d5d01e1116c5e91e8fe086ff1655d67f0ea252e675cbd9c8ade737869bb3ffb25b1dfd6592ff5755fd9d5b3605703a9d99eb53275da6eec5f387d699404410e14238c27d0a8821f5200d2cfa72221d3abcb5a9326aab6abb5d9a2fe30d8405230e126d3e99ff206df1870478ce6b7ad63313a5a061d53eb6f1dba39391984bd576e06e89dce4cb61093058340954edfb9896eab1b052242edac5583dce4c1c22b5e98401edebdb8d1952114d05615e47444374f73f367d7ee1e9707aa747fa271519c87e25b9559d733ac48e4f948854c7e286c3d8bf14f0c9fd4b08298cb6f58f8ba2f575fd6acef55e0f46882e02d34055f639c74f1f7d4d162264370472255f3964d83e9448913d90cc00d143c182a1d3a9740280f0dfd8b48252004a4098f3ece9e6d101c0cb0426994c161f122e54802d03c122d84740ba0c2190f90b826d95c72621ad457f1c2e4cfd6397d57128240f84111a5d5665ffb3ba2ee7c102ba83f8ca07777ce4aa90df0dae5d7abe9c00975bfb8e65514b5c43a514cc4d60555c0c4b7b6c7ec58ae86e084acf71579f92e99624246cdf7a2d7c90953cae105e7b6f8227fdd87375ff088e302c722d1cb85def110b93bbde515d6abe5234b9b190062627b76e381385e11180bb7c247d87e2df9ac7d6d49e91b73488c4d9a9b8d0296a8c3c9c31bfe350918149f2c8c1f4b70910e79751299d1392fe59673a5525852fafa51310c123b1aa970cddc44ec374d1766c56222404b14b2ac3de040241db4e985a7e61032467c8b792845cd4c1762c4c948dabf4889c8505aafc8751f1d483fef2c1d97ae7b352b28091980d5dc8801936d4133d7b6ba9357c2526c6170bc3276b242f2c9abeda76e1f83c020540b902177177796b1f4e8c764903abe119abfa13105b0844213ceaa22d215107b9154c781fe8c035ca1858003e1614055cb6b16d39c3136fab320b75bd5411e973630fb0ac25b8bf75e7189ec80270a116f759d06a9331d8405b7edc8f260b0219e2040de8f9dd8990e9ac6afe83401c34611e362f04266b4270d2f9654b3a20c1fad3c9ff0993d7f3a85961ba530efa02270e985210211fb511ac69e5ae1096848c836a090e95a981de4e8a806b658dab35ddf97dc45250ac8cfef7b3553b8d9abeb84c24a64b90791cb6269ab8f37d1d7ab497f573641ccbae838a65bd00c64c78c46530de3e4c33cf83a772c4f8b8f884afe252819936bab977c9937e98bb5ba8b5bbd6564363c8270aa6b2ffe0434d5ce6c6f519df4917ec25eb4094a938a3a4fe70112cf6874bece41e19e11dbf2c6c608d2d5321192c9667a7d060d67728e67ddf0cb1807e241fead92a0da28960362a15213630221db64b84f35c4bc35591d93db4cd4233c55637b629c1bda1052026e9048f5fe8ed010b1da372fef0c32e08cee6d49629f90c0685483a2d48ee873f52967f47c133ee7bf58d494a60db848f05321ec80305e258784214e5184378e9d4284951589d49627034081a1159e538d8410ad171c0da24c09f7975b90bff0a67c24002ab74f27df82252384d5956bd2e121ba29ad83958fc0962635081dc47e159f5661f4ac6608483cae167429933b6571e34d3e503b613a94bb71ec018e96feac7044b356e8b8cd62781229bb11688b2c3d32254f0d000705e09c4a6a7e20a1f3e19d85fc7021e7ddf1c93a2daabafbe44f6e277f05377a70616b5901e411a298ffbc4ba507a8aed2da1a52405a35ecaa2252d3aa968ba42831b37b5238fe63763babc8e48fbda2d82ea99e69c7c7d421bf378abfdd324a3211ea664f37b3a2280c5490ce2a485207e08dfc78110116e2051034e7a7dd47ab8731fe849cbbe2c1c3227d44dd080e8cf831372322b8cc90e20dd5a4a901b9f37675be4771e6675f7c82b49cc5e9583ae9f2bddc449141bb5f1b14b78461b443be710ec3ee80bb558292063aec62589c5f6aa446eb949eaf2fb9e87c90ed37e4abe79762425ace42ea725655d22a434a05671de7ac9cbe7d0c5d6f1576d2281d0a5d74d8108e4e1a73bf4cec08332e98d40e475174d98251e76a567bc52dad251fd00f47136c782326a0df6186e2f199f2d4848f33d187021f1f80e158577f3cd1653021d892a3a52e319b898a90b810b0ac30b3b70f9bad97e39b14713d628356996655580f5bf32aa7b4730a8d0514eadec6bfca9750071def6e99ee562576ed83414b2df914de09d6704d5774df30640cff8829f9032163eb81d7646cbb29ad1fe5a91623a38c35a719b30d320f9441812c641e1a02ced14fb81383ed05aa1348e40be6ac6cdbb29d0886d49add40e2fe33dfd348efcd87a009368895571b839c843805f7fb14d3568ab1276c134aeaf6361bb041a5cbbb9f183e366d462e07227390408631e87ea77aa61b544fd81d5a48e006bad44418ad331a1fae2167448304c718de14eb87fca79568fc3c698ce9329c6f52d59799e526480abf234901d7c4cd004bcf7875ef247da4165f7a2263265bb04f5dd994f04e0d1ab38b67cabf055c2c787af54f890eb867aff4bf03dc5a7932f383e69f936f2311a9f1558e28bb64bfc594fd01c00c1f9acc0cfc7340cf01160ac5d6d7163975f2f3eaa7c5d489f7536f99629397bd6177d0364e78b820f0bdf46e9b31621d30ec55a3e11a6ae793c613e10f53de1876fdf42fb598b7ed5ec8be280421dbae487140dd5995557c87dae87c9ee8ddbcd0db0b4fcafbbec3b14a259988440d35399ba3b642e0380d364d4c977b91410817ef264764b8b4addc3fbd3ea26789b426681449690e3df050376de1de4bf1577675a36292768a55df3afed3e37d97b7af4c78140d848ac5d0fcd4ec46bf7559f16ad980193ce82b7c9e97c68c1eacbf75bc3b688cb9a6684121f6f9db39f10b2c8ca28d466fdb76e332f797d8ccbbe610fb94b820cf072088e69a37a12da18aca0161cfab8b678c12934c43b408d35d24bcd5b4000dae391d6b5c5782c28ad7fb828353ae1c032551ce55e8aa967d4e89b4c8027ec1bfd66aefac170584d35099a059bb790d0bf84e8085ab86ffdd522ce0809a279763df98756598203cbdd31ca86329e11ece67bf319895e536ff7f7f118a30e9f314b873dd5a16863bc7806f7c91459286205461f1c590275fd4638550e25a567597b864808967f4ec8c81d4028f4aadf79c283e4a0a5296ca5d8230a11967a5085d80f3b14d547a5f65a075f3b8482299f9c7282020e34f7652e18ad6c5145db4c4d32fbcda8f492760267286a09cd9140580ed440b431c27df636bdffe0226da5a5625ae846d62c6812bf2cc4baa2f386431be40271770a3f12008dcde067b8023dedd4769799ea8d22c0877cdd64a58bfeceff4dad6ce794bc0b0f1f6bb8f92bc3a6f5caa4eb9599c2f0c52190d0125558aa947896102d3f4335cb55c7615c2bf0b85521c3c935607ddbba1937682a2f52cce4b71a34baeb22c3232a297944f7c966e84f0d1a3d605c205001d240f878791af57e032d0b3c5f58ed4063eb27b919c747e8f6e2ccb9de5b061556ebb8c9c526d8a9b1ea1a41ffd38b2ef671e4d15aa378dd8fdc2e7ca954bb043f5f3872e6d37bded8d181b86abbde36a67e46c61702fe3cd6044d46675a2eaf3b6168c305aaf8bd84ece325cd9eb4cfa9783b6fc8f25e139fadac7ce08a597300458b44b740ac765929744aeec2ae173ce9f23d845aa10b22cb18d4c1479e4536ee1615583ea8f25fc973c7e833427dee57c176c3b2632a413bcafe4c685dd6a7c795fd24f31cf968b3f3fba5c5ff465fbc79ce745267e53e28461e5551fa733187634e23307b44a65d5d230d172c60025aae1b983960b46439330f0f0f0f0f0f0f0f6f4c6b2d098d9043205526999462cbdc18928f0f1cc894a44c2925c1e92cd99b6c4a7c3a33f1e9cc447146374709590983095a52970e23b0b55a216dcc2aa922ec280223540af9e3f7276d1bed200293ceac25757aa77c4dc71038a195a2825e509ded02a143086ce52092363529524c19047e6fcf530ac143e97c01818fb9bcf592c524b32a3f60449d7b28ef554d22f301172da6aa4491df3fe901bf79af36e490bfc5451eb057d91b7c6fefd8015bc22f68c8a3449bf73a60b4a534fe154239e03a9d089543d24cab1b0eb80b3a2693ad49c5a02374dc808fa79e457f2c754b1b7069fb1be37d6af0570451d3e81d0dd84a2a7dfa1c93c899d70c1809394fa94f5406aca8ac9f16d416036eff33bdae5f8d2617044ae880015b29a965d9c5481b7901571ab4dcb632542cd105bca84a62c153e5f5ece96841315575b283059cb87f799223b7aa46abe0c263b8d7e64c15dc27d31b21853c41772415dc77ec0ef9c94305e39eef463b750abe946a8b11bf82c44f9b8233fbd7a429ac76ed520a3ec6de587f5afc32c448c144cdcf14328828658d82d5949e2bf687a4cdc512e4782f2a000418a260cbef3d99c5d4679e0b0523b22f53a5c7581f53a0e064a850ae269e4ff0219674c991649ee0ed7594aea4eef13fd8092e5b2ccb4bbb4308ad0c3038c1e8bd60623a45cadcce26eade907ba94f7304189ae036dd8ab650dd9ecfc74c70ff936c73d27637498598e02567881fb26ef2d69c4bb096e249faef24f5ae253821e9d367ad9da86954094e48ddfd3cd91ac33c444a10838ce2d9ff32093eabd355be9c636e8624c1c6cea5e9a2ac36b71909363f889cd97408217184041f74e2f55dd564711b0b1fc1468d66ed1182858ee04b66079d62fca024681bc188f49cacf35bb60083118c9021e94e762a85e8ca22b873535631a8baee8a192cc050043b6e3da99426119c07152daf3f4e9e6c238271c9abe65ba1b74272081886e0d34a9dc674d137bbc342f02a9e35c9efecf9db2b29c020040a600ca22a9982e45c9a536d1882e0520693eae6a11b4f032310acaf76888d1a21c9546ed469e11bb0ab000c40f031453ca69d480f60fcc1fa8d0a30fcc099059df452357de0aa3e675bfa920730f890e8ecef71420e197eb15180b107b6c3bd7334a5a33696f4c09930b30f399deae8397960cb5392eed9430ae9971cc0c003a3395bde1e1fcd4df90e60dc813fa516fa34470a718276e053470ff1320495a3c80138805107e369909e748dce36e9c07ed0a0dc57f4a910bc05a41560cc81ff514a649730116b8d1c78b798bdc4ce74363d217e7130e2c09a4831d9c6549af69f31e3be28bb2f0e0eec79db65d6dca02d0761bc81bf3aa5638e94422b08c30d8c9668555a74be0d7cd00dda5dba22a934b181cb6631a8be866be0ab72be0ea536b896490d7ce8bf1b15abce7e4169e0b4aeb586cc291ab8a052e56beb7a0c11c12f4e0930cec0c9157d93fb39fa87141866e093fd7fb414f448d161191adbbdb30a9af43d30c8c09bca2d595a3f59b6fc185296bd59372f2a064ec4a4a4e4f56422a74b18b852defd9f24999bc883819bfc26f388067de109e93c254e5229ea05fedca37ee7f477cf4817d810ebb6f6f20cd7920b5cffe45091926f9bb46ca1ec272945a7b49f22a9053e8d0cb3bc4bcb59b35960e2c577cb18392cb0d14c04ad3721ba064966d18e03026a268b7e8471053773d2a6ce7cd5c400c30a8cf2f83ab2c4b254d2211c21e82eceee3800a30a9c5cd1e9b42ac0a00263ae21ba94e8481e6353e03ec5e376fed31c604881b5ef94bf542cb900230a5cd0bcfcfa398de9d49e00030aaca6ceb92632543bc727b0314f062dff931318dd2584c934a6a3869c26f091d4889443538914d995030c26e8129814d4d69289f45fe9d2020c25301adc929c247349ecac869a1c5d6c91021849e0c74578e968eec896d3041848e03c77e89b2c32df567e841bc03002a742c870b7dfd89154b200a3088c9d4ef274ae790e6fe1008308a9fe4b6d31b49b018c215cff9dea4476d2d5ee0b6008e16004a1a01dd9d4050c20709f44b48366d39200e307a791ae6aa36e0db53a16c0f001af27549654976029c5640ff838b2f24ba5d3963149083078c0784a2a43d2b8ed808bb93efa06183ae062458de93e8872c027cdbea0f2e63bbd7eba01060e38edb1b6a09a4c5fd00dd8a06aba12e368033ea7b71cb327a54eb8a4068cdeff1f153f793af569030c1ab01e9a2365bc98ed4d380346f7922acba9fe7c3319c08801e32e3a6e7acfae01060c108c1770da479fc8b2526a92e482b4b47f06b7565bc05adc1253f5ada754399ec616ad85191260b080d3a25da3b55ea9ea5a05e3d5c92d632aed1e236ab04215fc78ae6cab65ba5470138448934e08159c0a7751653a4f62fc14bca67cf122c49167ba640a366248108bf5499dfda5607fd5943a7d222921220567b137a4c5983a578646c18b4a792bb5ad66862d0a46a225ed59ed3dfa0f056f797c335af0352105052353aadf46b48c23339f60826dda1075ddece4095e54c88b5153cab94cd209563ca88f06d956e7394e302a8f768daa1fb92ddb846e97219ae0a30799e3fbe78f605526d8923c1e4c7055a7b35cb36210bfd0b0405871895408592be9b4045dd8c8c20602f012565862cdd748fd932fb96b2ac16656ae512559b2a914eb81159440e9fb16593a943a317760c5244c2f6595b48626a124d8497135de4a0efaa98d043a6a2abec758295bb4821590e0a49fe897f01f035fb0e211aca5ea6a52fae365d7ac70049b5f5b54680e99e7a5a980158d60f47f96189642903a8d2e6e7c2123f89c9e4a6fd26dc4ff6aa82d82939f2bdb6d0e7a8310298251496de628ff6ba8e1e882065e22ca772ac8902679c30a4470f6b18496d4fc4ac9d750cb022d87162487165a6861c521783d533d7b4f1aac30041774ae14cf53c855225e082fac2004b7173c75420e6b60c520d81f1db47e4ec9437c51ad10848dc08a4098c00a40e81fd82c497867a8d11a1163851f8c993972b9594a4c15a268960e419f90c9426b87d08dbf00aac08a3e70c2467ed26dd30a3e701dabc652491b51395d43cdc0c08a3d7029c5eb20cf2d6a851e38ab9ad459332fa8e564f13472e050205891075e3d2533a597f1f27c3cb01ff95d45c8ce1dd877d3e2d12e4c43dcd88193a26e3d4aaf24045d1d38c9aaa2bfea47df8ae8c04a8ada317f36072e4faa1c41bbc732afe4c0e529fd1e3327c581db1cb30b0d32f562090e6cd20ddd6edfc09ac8efcec917d349de0d8c0e5a2a7d356d60f39b765b450c1bd873f13ed14859037fc282c8dc9842ac911a581febad15532a644b1a9858795d63ca0f3944d0c0c4b1cdcc53e119d87cb7e12a32064d95693449a16d5343ad141c3132c17d8a8c12446527fdf602778881093ebea5fd35d3a05b43575000021d14c061a38bb600ba818037818d0b688c4bb037aa2fe98f1c35e7640d2dd68105033aaed8228b6f000e2c9098ad208625f8103367cbbed13162e78a8e2bb4f00dcc98516254828d397208d6c13affc528c1a675debeea493b951c428c497042cfa4a8a7be84244a82516ac42b8855c6511646822f9d74b396caf09239906027098f1f4f6775911600a010e311bca7189329b91d47f0e5127ff554b009311ac19e90fa214e7e8df12b3118d1d78924b93deec86b280a622c8217db5b8f9ba91a6a792a88a1083635bfa55c1d22da2635d49690204622b8d19277c9fa834e0e2a410c44f071c52f4eb6bb4a8b64811d583060c60c2ea210e3107c287d5962e518d58e61084e7fd3450fc9aca146828e40c7151d1d5714c266740c4230da6c24c52f0139fec68d1933b8c8f13672e4e81363106c52ef6eea34258b104310e79b29552abe2b84188160e47e5d694ba24c548d0108ce84d26a555e8c3f705dbb662572921ff87425b9449099e4c5bb0f5ce43d9d5e498bb2519d10830fece414f516ef939ec9ec814972c52babf98ed2730931f4c088ed6e14a155255e3e461ef820cc464bf3f5d44913907848c58a942dad6ea9858d2c6874c1c50d1b18818e2b108b897107b633c3ed1c738861076e6ff4ed58aa9e063b461dd2dca04574e0548695163d110d31e6c0c64b266ae3882062f972e054c72ddb4b57861871703466ea54c916f4e886175b8801072e9948e1512c8a26cd946d11e30d9cde50e9b64924587dc30b1c877c0e1c5d5c000231dcc0a8e8a9bb3fcb73284f0d35440307528bd106268d88c12fe7a07787e07f8ba4001a1726061b18fbacc16f4f43d2dff082060e64d78105034e10630d4c8e9e1574525f0d9cf0d4745b6769f3f434b0e66d7a6ce37a2e79a381b5f08e163be98dc9f60c4cdefc9f2b419ee7986206ced47859065e6ba376481cc9c067c97c21a23b06d6b283e4331d5bb7323170195fd7e2780e897718389339938c1fd73bd50203eb591b92e8bd20f279627c815b3775a3af3676f24e0c2ff0ebb7e17b26dbbdef185d6025c7f454b953c8f1480c2eb04124afc6fee8160be8b8a243011d577458a0e38a8e05201b5cdcc071050d8bb10536d6e50866318410772db0295a26d19ece029ba16963dd21b3a56081d1992268fa9ba422e40a9c0939aafe458bde60b2027bc1bae34bd017d1fa53448c2a702149e54fb23d0bffa9c0068f2593e5cadf149860974ecb47bbb5af280536e7cb575f3aa96beea3c0e9c81643be4bdb6c4250604f449b7d6d08891ff40446681b93553a764ee03ed66a76886d5bf969029fa5f1d28d5577ca1c26b07d3254698f46abdfe412b81c93d2f952ea87983a4a60bd5c2dd4e732253149e093a8a85cbaae41be48603f47ce5e41dd6d248fc06efc58dd35f145566d04468369ceb0242f965b043eebe89fd48cb4316a88c0575b08ba3bcd73e443602d99c5ff8dd8f1628b42604f65df5c6fcf2e5626224610981073e9987d1320f0c13b246f1f996c5bf203b673c584cc3c31cbfa809d942748ca0bf680f14a41a5ccd8ed23c2033605536e22ad1df0762299bd447feb6d75c0281d2aa584a41cb02992f22bad4b0c1cf0e59ea4e690a4deee1b709fd582ba5b6dc0e5eb9c7c92c76cabd4809da0e2659afa4fb094066c8ea5e24b5261ce804f5afb734a166a477519f056f293da15bd565f8901a34c28cba453080c18097a9b825ecb11f3ba17f079972a69d12241c4cb1889ec20c5d37862b4804fcd746a647f5acf660c16b0593554f99e169d975c05dfa33d8aff9a483145a80a3e4de3970af62678e94d8c1f4983a86054a749d22c859529f1146c4e5132e81c4a65aaa43405a3bfd3d5c5e0a125a8146ccc19d36e905471728e14bc77fbc517cd8d82cd9d77729dac4c17b415057f27b4dd6ad43599a1e0d46657f7b7a0a162070a26e6cd96f376d079f44ff0eb69ed2e946d258f27b8dbfc3d31989de04d64ac28414b87125d6f747082311b1df573d0267853ae19b308ad623ad304771f31bca37fcce9b24c704a44be2d2d7af3b645a303136c6af3f2ca94a0f397e03374caad9a29c4d12dc196ca152769b712dca450530725b8faf40b6994462d61754c824f32fdf283b2f1a492e0d02109f6afaab44c63e6101d91e0f3c22409f7b2f392754082bd5439ab4f0709d1f1083f071b9f542643a76fd020438723d8bb8fd9b621e927e88de04d627538880e4670e1e61df754141d27be082e3ba69c74c6944074288251cf3cb293104ae30bcc98918517386a7091878e44701754698d947e44302644a4c9b61295afec3884cde83084cd2816e828047bf9e551528b92105c48329885758848a91e04235d73b4d22e7e36190a820b328b6de9d3f9211efaa1231019820e4070febe6a211d7fe03f2d58cca2924caa69871f1835d5cce0c147a5f0fad0d1073e9da764a33f5a8ffa750f1d7ce022d746ab96984ca6b0e8a1630ffc46f04b9a36b34a29abd0a107469dfc0d59b12ea8edb4030b067460123af2c07b0c4253664a7bf5dc4da1030f8cc4982e64b4530fd9a1e30eec067de62deae47b76a5d06107d6f684c8eec9b356747675e8a8032bc1aad22deb26211e1d3ae8c0e74e79f3367bde9b740ebc8f48f420d26df9e6e4c08690424c114c8b954c8a0339c6986256ef1e0e6c059f68a9bf6d26e36f6064778cbce55ea53ee80676b32e7ac5d826bcb34be8680327a256e5bf105f53d06103a7c64350f9b579fd1e123ad6c07596f010715cf74d85091d6a60e45eb29862e9240d8cb20e11d2e9d5f75b040d6c27cb6131dcae2e6d6760438add1a5df762cc2733301a43afc452d95a3ba80c8cf02f1f379bd839e9c9c0251583fd8bc6b07f2f071d63e044854cfa1d824cd9843ce81003af9619748398ce3b0a03a749bdd9c7d010dc5b1a748081f1b12441b9785fe0730a61a32f8fdc10a35e60479a491e912a1d74748135d1d3982dd7fd9f854fe8e0025bdf97b67c35b72d47ecd802e79a1b5c6425cb24af1b746881ffd0313bb7ac41664816584996fabce29b0cb1c2029bab3e499405cbf6afc0768bb648cf8a15384fa32565565eb2b60aec84b417ac4a7896945081ef4b3b9addf792cc902970292f7224f1d316ea92029ba33a58a848b66414b88c215dc84eea3e6b8302af777de696b2f797f6096cec93a2d7b73981ff10bfba3d35e5a8d904465f66a4124b7f971226b02237ebc6741f5252d512f82c29b39e8f05a52baf045e47ab7d8a99951aab24706117d44f50bb59bd2181adfaacde24cf2bffe6089c044f03260fe27ab9ef4364e0266f49fc9c3406d6d448f2f8a1a7c3e462402f73251ff7787f8481bdcd4e1137d496ca3a18d814db3ac7a0af748efa17d88fd539642a0f92d2c70b8cd01969348dba0bdcbdc92eddb7f1921017b87dd1a8a246556ed76c811d538927b26909e66b81b35791ae174d24536f16326d964a75e25860f52dea8e78f40a7c521b4c94109e3a89fc8715b8cf7ffdfc15f4b4a255209edee5ee202a15f83721427fe2fe097d0a6cc9cb61b29396488f14f8782a5aae1c53a2c028914be2dae6dca11628b09eb3db671ba56d92f2044ec4921527f09ef4792e71534ae44913d8fbb4f6cfa2c9dd264ce053b5b6e4c91d73b29025b029e76daa90524c2d214ae0ac2d0809ba1a420c9224305a34e6dcb6081218d1138d6c22a9533f02abf1cd744fc7cdd1310257f2ad54d0dd14c452042e8dececbdcafaf12402976429fba4c473422c87c05e5abfacd14721f0559fd572920902a7b79fb4f38d08293d203059d4e52cef078c8c6541243dc923fa3e604b9e698f1a47ad9740f0d1034e2b448e192da890e1019362acfc2924dda5be03f6e35e4a6e3afbd0011bd3074b29e8bfb5507de480ebe0299f92a55e945e1f38e04210e6aeb949c998d7c70d18ab98925b36a941673f6cc0bb883cad97b6f6241f35602fdf64d03958906a7ed0801ba1d9c2dd348a8c1d033e66c09d08ea165ce37ee62b03b623fae73035069c2ac99e25e3dac834f980015b29c990da62ae86da08fe06765cd191e3bbc091012322f878019775a1324567fec91444c4870bb88f67416c84cce339b373f868013f6a27a9d0ef4bb6e3070b785f11f9b3be68d7b88d943a471734bac0b10517abe02ee71ce2476a5d0d0e94ab0a469f4f56f120a24637153f78a482ef6e0d1b4d5944506e4105a34ae9b060ad396e50f5c1e3146c45d2a05559640aae2e3dfd521499bfba1e3c4ac14ec823d5ba744afb1e527092522bcfbac24434611c3c46c1988c498878935e5f550f51f09e32a40b49fb4d2722f008053756a2412499fa1f72a686072878c9fea1741aed4a2af909f6947ad4a04527952315060f4f30a64a44d26adacb3bde0926484d22243b499ba2053d38c1879a18bcc4b39b60e267f5342258de3179203c34c1678cb1272895ccd2cc4c302233f7ba2be2c88c0726b81022e91bf9da2198b6048f4bb049f247517949a82721e183872518ef497d95627fb7f9e751093ec86e3713cdb9436d7bf0a0047bdd7e65417a9360ec2a667a75d54e99e1c143127cc67573cbf0cdb23c12fcbaa89bf4aef541e94f21c1de648db954d6a81b3c1ec1c7aa4d2582aa10374d5b783882bfff504ae79c3b68efa48de0257063023366cc98810220824723b8ff8bbad71ddb747623c7774182a75158050f46702542e810d3995cbf81c3c68df645302a2386751e4bffd15004a7457484be244d043ff9f4ae52aabc51518e6b820722f8ec381621a8c9a29d5443ed10f7dec5cde952c9680db59470d00881db08c11a82f36c974755c5f883e0731482f7108297d68b0ce9628b77ef2ebc6ffc9a0721b84edf497d3ffd5ad2e7a0a148f01804eb92d2cde2750e22a6d0e8e2b92847f010049f5b93b489ccae92971a6a23f81b48048f40f0696175994ea486da103c00c1bd4e70f3bfa42404c91ff8ac3c4a676eacb4fffcc057aab85173ee4f92e37d60532b7f68d4b74e42e4033f52f7ee54d45bf173550e1e7be02d5e58e5cccb49798a1ef814b35f337a0c2265540d1e79e0d4e952ab0fa9f9ffa369f0c0035b17d5269eb6fda43f8f3b30fa1a31788966722d91871d7c53256f933ceac0680cd70ca1846aa895c0d50aa2c0830e5cd45122f5fb7fda0f99031b74e4939c52f45cf922072e8f4829fbd91f079b010776d3ba58463cbd9ee01b6c861bce64a5a7239e471b6c860b3cd8c0a9931cf427212fd69ad6c0c7dcaba566ca43babd869af15003972ec794c1239be8b519802378a4817d895a75f9733fe3280350040f34b0ae252a5ab94e5a3c55c2e30c4cae10c97fcfcffc92c40c8c59240dcdf423a406f3e051062e53a986942f46fedc20e041064678ce39fb45e60b12cbf136d028e03106763ff5445be61862fb37468083460e1c343a476fe12106ceedcbc6520c8d12787fe0b3a07103475d07160cd030b0b72a497efd6e0ee9448d03e5798081117284a7d590a45ff26ba8e5c08157f0f802afbf49623eabb473bdb8d19f851b133cbcc04afa916942a51fd1c081d0a30b6c5cdf969463fa78219ba75ce0ea73269592aa148290a9a1661e5b604fab5f69657ffdd0d4502b73828716d8d1efc1cc927a07e191056e2704599fb65c40786081b33b559fc43abff3e80a6c7fa4b5af2b05e161053e040fd193089df5caaf021b4fa6909e44768c24522ab056f153a5a4fcfdc1630a9c984ae23dc9950263a74c6ab0fe881d3ca29036ef4aca235f75f080027fb9b253f9f66a68b40b8f277041ba2625328acc97a5107838815d0d19ddb2cd1a6a3b058f26b0122f63ff984a5f092ec28309fc59c89c2cb328a5d9424f0a1e4b6043e9f2cc57085a8b5402937e2cde9512ea4d43651630844712782b959c913f09bf46e18104365b0a7d2663657ee945e17104c533a41a8711f8a4ffcc3d5be54ee151042ea90ffeed224178aa11151e4460b524c734329747ccd99cf1811b363aaee8e8a2030b087420e0b3a0e131046e42ded29f31663e79aaa1393e6181961e4230f8053d2a5925790cf008023bb2d2e9f3ec73c103089cc5d1c14d530cba9bf5f801977316efa0943e37199270e0c84181ba2778f8c0a07248c2b7537b81470ff82069ddd244dfaa985484070fd810492bdc2699ca15d583c70e783d15db1884dee09f52dae0a103d676531c8d7ceac286163620b08516391a70c30137078f1c302a4b7bc3d3644a9eb6d139bae0e2060e4383070ebcf0b801ff6a49f498aaa876311b70992722e9ba36cdab3378d480bf48fa63e4282e224407070f1a3066d14555d0bf16336678d99ac70cd81029e6041d6a431c53497e6ceb63c0be07d931d74d4cc7100c989811a28a7884b8bf80cffaa727a7ce710113c7c72c55ed73588e093c5ab04837cf61216e3c58c0e6a4832ee1c95d0597a48eec9139a20ad662f2ee4b513d648da682c92221c86a0f2af8d2272a9f522a3d77e5145cfb6869ee4cba274b53f01f4b3f539afacfe8958253de5fc52005e79d46e665d0a2847546c1fe5d92a3dd2174c38b05cc98518c862126628882111dd26f92ed12f4990c88110a2e5be3e9a86b4bd50105a7d7a7275f5bb68a648c4fdc917eb2e75c6b97a122862718299ef5a75b645fcc32637482ef5171ef2a0889189ce047e57e8e9439a596740d352f4e8e1bbf001c587ce0860d2e30a03136c16b67e43c0f5da2c9c7228626f8959833014930400df80ccab4467a0b0dd80f41e7afc9a3110c3003b6644ec926bd97e6d732e05ad31e1820069c1a91f99a925db6793c30000cf8cd539953c8de7c392fe03444915525d6120ce002564b046122c5d136a21f120cd002b6e3ea6a460ed23dfa066001ff19f256b3a54bbad155f0495afea444be4ceae24f90a10af6b4a50e9d7e35e6d8ca4805178357d0e79f35f65e1390818a7392cca6447567659c82ad3cba96f287c504324cc1be68ef7e6d64b1c5167df7858c52ac0c52f09e7a92a749da1a6a5c3c179f63147c7becb3789192850c51709d2f9bab9b474628724f6aa62f92d38b0a0afe44c4bc6b22f70946a7903f460a7e3a83c9138cca939458ba24fdf3de094e57129ec74bb2a9e69c60e4a67fd2bc29e49bce2638f1b4d2543947135cc83fd358622744b433c15da70eea774a5d528d09765cdc4b702e7233795039a9cc194bf0a662eeacfaaa49aa5b09eec3cc454f4328c124cba3cb2e68129c7675bf986f68c8a524d833293adf7ba48f938b04695d4292f93a35c4c5c98004d749f4f485c51c9e931ec168bab89242095d408623d82053bea529dd5a22724062414623facb1dff89a2f3f6470623b2b19710f5262e63115cc8771d2ce6dbabbc91a108366e6fd0fd4924112b0311dc7d280b6ec24b2ce4d4e0c28b2dcab8300c9071085e4d07ed5c2a5d6d7932651882535a659f954b53da3053462118993cc5b3149a5a7a922983107c90315384a0b4bf8b3053c62018c9398a6a2bdb546265ca10041f834c2b5a4505093202c1e4fff0cf41464d116400822bcbded575f93ff0e975555d4a89904dc80fec9af79bf6fc5e52c33e30664a25f1010432f6c0a4314f1934b6fee84a0f4ccce466c9626a1751c9036739d4a50c09d26f2578604fe29959d29af4c8e41d18af984ca6904b76e02e6d685cb16ca59bab031f3de4a83c9673e3bf78f342061db8f714f2751e07f2c20132e6c0667e778f1244884852393039654dd031ed38f07b962eb2e7770419706045b7cbc63dbdc4eec878032349b24ad2deff54ad1b925d1e457507745c4107196d602567abcf0fba65035b5bae4904351d476d4304196b6074b37b4f7d5de8a9cb0e64a88157cf583ad2e6bc483a0d1dc84803bbb93b6eb0d0298954d1800c34f06efaa37d664cddacca38036b39a8a02b6fb4f49bcc98316346916106ce6316d53a39ec3eb61290510636452617f527feb5398e2d1e4320830cfc8d5e07497253c6e0d550ab21630cace7ed7fdfdc2162396890e06f14e2b040172478099461005221430c8d504a4bd54f3c4f5b0b6484813b359edb33c745372e007f9001064edaa78b08ea726302ea09195fe072e731bb151d8e8223027f012c3221c30b5c50a32683d64d7d174f818c2ea0aa7fdf624a0db5f71b8f6c7cf15b6cd1575cd141818e2b3a2c70811933fe0cc00c32b8c0a9d137ab8bdcb1d44302195b6093f976f48f3e0d74c346324300ba61630133666c418616be9443850c0fe6b117c8c8029f3bbae915ff682ad688857392256266c846e19f3e41907105be562ce67423311956604c79ded7e4659a526e238b1b7f01b7b1050e2c6a746143035d788123470f64548151b7ea5f62d9396b121578155315fee27aa7ff14f84bfb53192b62e6eaa5c055d251374fe86041290a7c8420ef35e49a4a2b14b8f724520851d113f848a27edf7c62f20c3901af5f3f11256f026f1a31f97a48dbf39d095c57dc98c6fbcb2ee94b60d2c832a1bb732570f7a699962c92857f92c0e8ce4e9a3a287bdd0f1218119397a620b27b52ce11380f8d11aff4d47b9231027be5ee494f8a49956d8ac0a56be807651922b0413b248921697bf943606387dc92d6274fa7ac101821d224354aa4760cd920b0ad592fef86e78f3d10b8de935945629a8ee91fb09e3dd89794a80fd894b2eb3b820ca69df6800f7a52c34e531eb0db234dc6ffb6b44b77c0a565a67cf254eaea45075c8fa910315a4b5062c9012bba398f0ed2763786e080d1519a46b8b6b55de4065cd6f49775ee63f14d1bf09593de499e6cb7dcac019b938ceca9271e42120db828a21f93c5d359139c012fca94503ad2e37e8932e062cc1243ae650cddc78051a269cd7acf748260c045b3d00b18d31fbdf4d95245e30256545bf090c516701a96544e21226257278305dc483ffd5619d227bf0a26e88c142df44723c554c1e534fe39224a059754b68a5df2e2c1072ab02472e20751b7f7c3145cd44dcf49068b7e6af2518a5a846779680528c20729d8dc53692177d0195a4d376c900e2c188023dd7000179cf81805a32e31480efa44860f51b0212c43825d6989d709c34728d8d58b61f7bd297983638bb7401636ba8b57805ee10314bca46ca35b917e2d98b6b051230233667081838f4f7031b2570c5ab426d1ab06175d436b70d10d48fdf0442199a6d6527154f426b07104081f9d60927bf4d3651ee24439c128318b14a2d5ae89470bb20946a44a22e9be9322ea849a60634db29d14f285601a397c6482911b479e7a1f13fc6dfd08e5a755a4ea6ff8b804635a39a70ebd94a0cb620b2d6ca0b52f6ce4780594fd1736723c2a0ff8b0047f4907e55a4aa36bd2f1eea28b56ebc28b097c0e0a2cc00219301f95e0bd82888f95ca36e5f802b3f810e4c881e3468d037c508289274a3d47fde0adfd24b8e4a3c7449eceb72924094e492aeff8aeae3198b0f0ffc2cc80e12312dc69ffe651492549f20109b62a2f5dfa96ae0c1f8f386549329e0832b48e2bd22ba00424c091830274f8704457dd12bf22291336624b2637d955527d3a1736b4c8407c30420d178b316256c8112c96051dc48490d5e0a21bd071c58c129000071b3e16c1c78d974987dcd5f8ef0d1c6b4cf1a10836d4bf7a6565ab8a592d24f1ac88592d24f1acd2ac1692785668560b493cab33ab8598999921c0253e12c16ded87926341b342ac030b06d0d822cff081085664fe6cea56f28b6576f071084678c798d499ac9291fd3004ef6532a49d16755a4c856023ad4f8c59bc2547cb7d1082cf69c73cbee764ea823e06c1b7774f8a7ca320b8523a3aeed953cb2e1dc147203811e275f4df88e972cc0720f8fb1a8de9e205656143037f602d99c94f5a457ee02da41873f32fae305f7cf4812d154bc3cbd6945a1bf9c09895a551a2a31f7bb019ffa1079bf19107c6ad746eb5a4f573e77860a38ba4185356efc0a43c1d5ffb782974881d0a52bd938f8beca30eac98ce9199649eccbb3fe8c09f4dda4d51251f73e0b53cd7df5c83d259698d0f39f01f479dca7b6b0d35edc0471cee030ef7f186fb7003a753a3e7b75a897a49350c6ae1a30d9c2499b3b307d3692b5443edc643e0b568095c61e6830f36dc8c8f35a017a9851737d0031f6ae04c4fd29a93b72abf290d7ce6a7da29e59e3ee7d1c0851c53f618f242a8e49fa1bc94d266e05572bf6be95f3f092a03ab678d15a83491660269281208a3300c831806a6c6077313080000202a0f0643d1783492b4590714000352261c40242c1e22241a162a208986c260300c0a06448160200c0a0504a160408e0dc224185f00219ff8398e664f847ad6286ec992f33f775dd8f725a0884f495481e1a60cbe4e2aed80bc272c8ad22eca80756206c878acd0ce3fd54a20b9ef5f41cc4d8149d05326575723fe565e1ad1e38f8e445b4694b532cc8e6af32d6a24e0cb40674a728c1bb99d232752ee9ea31508bbbf870f26315321d6469e568cffc5e860b5791b5bdcf4c332715b060460b7f1e2c484d585879dc4030f9b87b3cda5ab0c13b330e4b092f6bfe1361b91cec8170b448badcb1b1735482efa9521fcb803e415e807ea2809336b30e3d5b2d2b5270fdc83d565b69545fc21ffb8dc48f406292841c416ead449dadc5b990ea78cdd883255399c9490cce65326c213f4aa2047e8ddd83d491c2eca9bde0ae368928675b251bde653930f7ad107bdf5516f7cf05ed7c767f44e3e3ca53ede0b3ea2b77d7c6e2d36bd0e455a6c01821ef8783de6e3c6a297393cb0faf119a59593984240eead8fd9bb8f1b147cda9af4ac8798b8491181b59af8c7544314b4d66b628ed21a6804d9e280cc479b314c1725a98cd9f4a1fc7f1dd17982f603116cfd2c1b6384387d49fdadb73f342a6b3c6e55c3617287a85a02d9fd50c906a30503d12dc222defa107ba1e81b8be14a3cc103e78c21d49a13ad9ab193ecc3f3a294e3910a7448086b2e004cd56a2788cbd99c28131a716e444a9636512e9302c6693a32993133910f453eb1fd80b8f5c046baae59d7ac7921957eabf2637cd6c2beaa9903a21b1905dcf015da5dd31a6aa586fa4ad6ce74b60755042d1a0ceb007458437dc1300a2cbf0f47ff64eadb64578c5531d0a8037233a0f22235c07aee82bae2436f38040556450b1c03991aa7a27b54b531d50aed6d870b9de9d692f63e7edb60e37ca42ac5c46dd3ac1fb1f7659f62060131155414b94c3bb5efc72b2c60e071d4cbc15906e6ecd81ffefe2d9202b0b84b8d0dfffde0a0c306f9bea557e37ba96ecc80fbeeda9c262595ce06bae20da4d0af56dab4096e154b68fc642dc6d0a772a42b277a0a4a139997b4fa73032cfee6892588ca8358029fdfce388407c46d65f01dab1844e0caa9f3688fd446f906675d804cc254ba643cad5e059951519ea727a2deebdc982809d1442f6b8f9cc70312cef70620e80de34594f46e807fa41031bd2de097c7afb2cbf07fdf1272d67c5145b9eeb0462df94114bc95252a4006fa6d93f5f5421dcdccd6d2dce485b56c04b7843fd296102443c9b03e0e6eaa363a6af5759f59552936a18f566130b6a9758429d37219c5d323c6aa50de04661869a348785ca555fc6638cb308ddba9791b893edeebdfee4c14d33b7192b1dfbe38d23713581a120f2e4adba7317cf7234cf1508376814f068e64f0aba2deae5d024c6fa81419708599b54b11b341443aeb705b287159730b4f6fe6c977086ae325ca7d83f0963894af932782777f9c16ef4c040b52aabd34d6d045646a40d55a6d594ca761479c76c07faaf91efc7a1bfb44ec3e267dcf0417b22be136bdcea1042702696984055d9a36b660734e6dc804a089c8710f9097f33526fff3f33ab4d4a7fd268bc2e1a7ba204d14bf7b5e8ed54c0f283eb8935194a58233ae0e9c4292c69f6e11fdc3a2e19aed145292b3bc51084bca0fc0b2fbe00fc3d5eb7743b62119d6d26d043153f61e5ddf580f1b780fde6d31781670c329e225c36fcda289b30b9ef083d221dc52720870c12938e155c41389d8ae153209df22981e30e935592eca6bde93bf5cbfa153b6c06bb7a3eaef2ca0f2ddd6d3ee6e2f3ba5d8293a93aa21d974358328b6b76f7690e9f884dc2d53a4afa9a69b9d5dd71eb206ec8d102e5450c8b28663a1df156dfb60ce29118225c0b278c4a48e05d9d616cf53c81aa81746e8fc9f5ff74fa1f8e87e09c6d1a73116b351d1c6f73eca0c3d605a81cde3fa42df9f5d74b3ce01200e6c069a31cf7b40a0a84775d0a555a8c0008e064e67b786ae3f85efbb7c5c2de4535642d0d0310f380485a4d35ea0a2ad123e49daaf634b1630c6a9de52a33a6a99c8c62871d3b59dc8504efbefa1dda0169e0461c674f550b0e3d887c25300485a25961c3bd4f831a623b823500d8fcfcac52adff78fae335a582f56810c846d97fb97fc75f4633380d20158417065e3c6f867f37fd7bc23d54373bf78fed7faf7b2c8b5e446fd53f974fdb37cb5fbaad6bfb7f24ad6fde95f0760029fdb7e3214108203acf8a2f4ba7bf8d9eb3fdcf2f8321cd807bd4fae5f8a7fbb7fa64fcfa7027f5c00b47ca0fddf41805a0258f940f82fae342d347401320460a59ee4a04603e0079e79000af5bf8887fb654b1470610016b1221a4c7c794172d1d728c04704be0c515a2e3cb57bfd17ca7d7e84de2704fbe9333a79dc76ae13027466c4bd8c2297816dcf1257b32e7d5855dc16d50d4f6c1f79f6727f21c6602c8038e2e4d6facf4d1a85fc2618af15db48f535434a16d34411b6ec291e6b319f63e4ffdd920bd85ce4233f64c74080cfe65c3242099b3947d922e1f5a1d10e007fb4f110f2072c9312f3bc930d2b6db3681ebb22567120a9e1472cd91221a5271e696cd06148fd04ce3fd923b450228c7eff5b26d0f7f5c5e7d827a02c2425d18b913673d779fbbaeb94324f977fa93ec5b786486b1af5a44ab5bb8403c377d8fb131b548299d252124ca02b589e93894a7391c6b797b868ddf85e5f20b2e037bc2b4ba47e453612351a31b72482bdc88be48ec25ab9a9ec4c326928a1bd39b056bbf71a2303fb1dbfeec9eff13395347aa272f54ea69c1373f3aa0084925be22800e46afeefb3e4c98c7d1e77f53539dfabee10724229fa85424edeaa65fd05f26a51b241b10b01e24031d5487ff79861d4ac25796e046ac64c2e8a72e55ce010a1763bea6b7141a0618875db45fa47d1cf8595006ed8d36afd6335cf9980ca59f5c3c0896e8c80effaae2d6ee2798456b9ca230de46b2dd75d50de99c42651ecdc0ddfc1e7ebac2205aab1193cb1b5cd2f09068c99236422851f79b00bcb279c2f1e44ade6455d0763120ad79dd10241d909c128b5680dc9d82ecde44d7b21dbc28f1df394799a5513240f55db73a301705497b6992994c9be14edd1effd0147ee713315a5e91375a23ce24d1fdf7ea1fcc65496d2c858fe7544521e390de388076fc3ff991c83dbb15b6c45ed587c87ad191887ba4aedc457ab728ac25b63dbf87a7270028bd48c82566e8ec0a35a8de33d4723f118a4193c9f1555711fd2447c4d6f193f53d89e4be4c31e4e32640f870cb207e3da5bc0403d94bc3d5671306115e380a9adf458b0922fe43cf518145bcb9978277e8b3cf91a8151787b65b806700a0c4b59a9dc24decca6e1caa673419b4af6e3f7585d483b8d2b0394e16732301e45808e02dbb5e55d39b2244d7402044a1798ac28500be8ef48f1bd354a170e7a176718017602bd9eafff19dcbb5bbfba3abc80a8601e4a5f5b8603c7ca38e7984f2606eb260bff132a261c9f168df05d6c543c7eeca33250f9891e91f23ebd2c49b65e59c8f8268066cb94ab43df3ccb15515a6424e7b619d1439ddb17819806687f66c8e5d3c083d7111bcddc7d8fe6100a46e6170e942f828fa876d4481bac17482daa0bf0cee61517df9703e37a1b72ef30344d93a79980604c992f647c8954e956454b9447efe2e1669245053880cca0fc34e4853c509988f6e36fa81d030e418db3105c386c5a54bf360ecdf748eb13fcd835e18a34fadb78970b96ac464049e38ff7b18ba023011240d11b74e0ae1eac59a3b933fdfae08c627ab805ab311cdde3068e2828d90c75d2af24ef1546af6aa6c3ae75ab148e88a9774b9fd1cde76866384b784bd6dbe3d3cd87a782cbfd10013d985b61a0aea07f6df8ddddc6093fc24a0906a4646d2fbaa0c686c8f9175b3483d746530a22291b13ab2ad2037bebb867969c8ed6eebc6d6b808fb936727912304f8d30a84179aaa2987db295489a46c2c4182621c81c66b29ffcd530dcccc0b70aee487a7be6f08eae6c09e94bbd18fda58b8daa3d736549d64a9cf254e8740555c0f4f7e68f42aa74f7416f48935973c880863691c7bdb5a6ef65d53b7d98b269df4bdfc3dfffbcb736bc0918bc22c6317d49f76e4341229e7aadfe3d849b800920683d639f4b1318b281a6d681fa9632d322671fdbb864fc0e0c9d2443069d9c0ead19ff125c41a13d89bb34b818ac0fa24a0d081116ac98b80dd246b876503ab1f474c7f61b3cef5fd6d7da9319a94ef5ebd1c7255bcaea8e32f4519d7e4726a5bee5b57d3fc74f64c634271605b0c621aafa319e7669f1063ae502c8b8b449c0c05e738836b9740ad9f91aab2eacea87d5e3c610a6589f7aec29ac54a2f960067cfb2e4740d71963a1bbfa00d24045835eb5cf76d5001a526e6c6b003e0c1c612ccc6ba04da5dc5ecb1940587d19a601e0600b0883250d493494f6712ddab8b50afa1fd1001c1becae7089a56365cb08e9653f13bbd9eb336898c066f2382c68a7458a95be48237f18ba2452fb3e457b7a2e83801ca739c52b65335c5aea66a348c62046bdb7abe9031675625e87131c4f4107dc1b51715c541dcf4221a2995a420cd42d1022a84e13c4d6cd6c50b8edd2b5f7da2fb38b820c5f000bd6db0eb3c9f8284a762d38fd5bc86160d2fe92446229f543a733d2add725db9e9fcb98301d438d1455583f8d08104587dfd9c717d56cb5d3a4df10d295490e025a67b1003879ba10608b98a717ac7047ed7653fcff7f77c8001af27f4768160361724ecd802c8a723e83d1661621c9600a9f0a5ece18ef452b8a6c040abc3a51ae4f17b4124378f88d68097065c8fe7555e92c44b760601012ee780efb0bf93242dbf7cd3e081abe8e486d561f9031aad2e1508c36dad3c25b9d030c60d9142228a45bd22228aad95242e0330356809af1cf5341b2c1a30bca846aed4f6ec48334759534a902788358a0d2095f91e5dd3edf24783795a4ef20848d694a08d0bbf4f388908be969f7f7daa53cc07e2b371e933e2f0687734273765dde20d9101edea1af1b64921a8ebeb21a20bde3867d858188dd4892a49517b47b3f5563c4c8da5cd1ffce50a39bc63e1125e9475eeb796f415c1acbedd17bc99af6ad0ca3a1ef43ffb6f9c13c8dc40bfde0a02f7769452e68122e55856d00fb6acdb172495f7c2f59efb2fbf401150b3d68daf95031bde2fd18020eee8a067ebc4fe446bf6c7185308ab9bfc50f238114f530d4db33dd956ee38a6ebaed5297c583d6d68eb1873103ff5df275b9c3ef861de20bfc00a0ad6da50e35c64decf20ae54e4a98a52ab4cd7d770f22923f4f05e37c07a1ca232e70540945c06218aab5896646289d854f17d890163ab5b6045b72018470e8fd737a515ddf528db9f3a502e7cd79cdb8776866a14961e735ecf72751236f26bc86fa8db1cfe835ccf4371e9fcb29656f24c6a63fe36c82621a5b5d1abbba1db12f761fe9e91b4b8103f58f87148315e01c8ff1efa12b274e118cef0beba5aa83ab399ba1f1ba07985fc0c5cc0fb10c63f64e003559810f2b27e366a188b6b920991e8a6e6fbc67a6cf000bbcfd4efa1795196a6cc13653c95e8559342c6bb2fd0221df9be510e24a3f5d78fdae3c8c1e3168976847326092daaea4d9b6035c7a1ec941b60f5ce0e6dccd1aee5cfe25174cc2d547692e06a5b41f6622a6fb329b285195de7814c980ef25a5ff02e901261690f0c817350e0ab1b38a9bb9bf0578d57a4f6f7747b9c8ffa2462c53f3b53651ff37ebcd325bbf9b170182c05b28b2965396c1a790ad49ef74aa49bb64537967d41414713d0768a97261df29e8d4dac66eb4659b9ad84465ef5f1ea1e2b2da46b7aebcb7d7c2740e66588db9c843a27cba6d20a8d23d505958fb9dd490fb19da4ecdab59e018bcab91a477af485864c265f80e2488cd857bd927b93d9542aaf416c6e28872adf0b78da61a35c66329bb8118838f47b18b68413c6a01fbbcf5e1a87f18207f126acd1ea4520495a966a3f41da935e5a3b0a702da5eb87ec53c6815509c248f9ee73675b60a03400baad15eea940bd5c442a76da2905055661cad4acaba7ba003f019b73e084af2711a297637cd892a43c9ed59df98e6dc69b0c5ce3916e6607dfe9338fae61eafd6854420cf75625946a9525b8a012710856cfa4f14e49e558ff429da805858a8b75b746ad206cb245ac3e4729d0b947f898b9f4d9eacc8166eb9128fb7536b589c30dfcc73d50cd6f517e7749d40a0cce1da35deb980d26d6abac11bd50b2ef30fc6b1b5f94a922e8338a06e966277a048f302a88c62a1518942baf64a5cc7fdb5c4f91a5d0e30d403292559ac44184328f6a47e3cd1001258816d0540b1ebb3a71ee3ec5544b279004b7bc0227165c50c7b97403d200d155009f70a584d5407207efca4b57fd2e9c035d8ce317ae2f1f691248c7f8d29330f811ecc5f107255da8bd5ff5d0c7fdef6787618c976ca902f8be8d4a0ed2fcef99141d9d2d89e5a35bd3a1b8c53c7c8ab2cc1f3f9bbac375f4023673d96dac00857ba220c813a589ecc9beb513dd3c145092be971482d107d60d5aaae5e8cb36184f3127aecad00cb39cbfbb7d64bc58bfbbd13d42ea6dc8674dcda4470c2e11f639e71e97904720dfcd458fec85672854d95369dcf566a9b370278f5b680e9a39a0b798869b518293580855ac0a06cd9a95d7c263af138daf6da3a93742e1bc4083d1561542af7f3b72360b2d382adbf93b7551ca2f096b2f1c5d04ecb3c6b5914e8dc7f6ad69616abd09382b0da5180feb1aa682295f036ddc1a05ac40ed964dada50f248ed826c278b6993f00506d573589e1e55ca2e8ac6472a5ccd8342b502cb9712720390059446e2432a57d36dcfe527ca1c25b2d1d6da873a4b5ec625b2745212ec9997ad652a4111054148e02ee4d890fb6597f03f003fe152a20c05645f85e42e84024f82297fb071e4a01719dd2d0fdae1ff5f2e4fba05d7c242aae6755e8e50f0a621800a7f5a56787d1223d014e35897d21e8a8009faf01c8590be8fde2b4f0ba26b998e6e81c154c2d7f4e08074c7a91dfdce2ca1b3478a2f29dd6c127f3dc46bc51cc5852a25373daeffc4515a7887d8eb240e6dbb242f636e3892630b87313f56df054b34643217dd5a42565d539057319673e150637c81de3c23c055e745e0feeb424a20ba44b76905f7a2c05d734a83f31d0c5bcd6b09efbc8b167e8d7fa042572945309ea01d5f6aa3c8c7f8d3d88bf3baa20a4c283b15b24ab7a4d3eabf7dd2a95909b79567ac37e8dace5f86b53dbd9f9cf4e8d1198922bb12e89ce14d35f64b87c3da7a2427a2ca89db55285b3a5523245fe5d608595b78f0c9b8a2f8789a3855bbe12096ecd204dc0a4382aa0141303feef70b7096094063d12db94a08ed03393276de9443e845e731eb103ab94d085aadd103159b11dccfa38d4c1fb6d51f65757dd227507d0cd9b71dd64fadc3d06d1d0b55e6b512d2bd96ea5e68817663a49685f2f4a1e7317723bc436244fb1736c49a9243ca9537a3e667d7927f29941befd135a27f1c7d2ddb114f0031ca208bbc78c61a10ed6822181fe4c1bfe1f67d5d1c3f35df8100096c6d96aa3b51e1c6eca35bf2a297a799b0a36279fa5293e072e62262fe4b789e16121cc964a528dbbba8bdadfb4b40787079d8903321280c96352cd26048f2409079cc6a6ea96c7ea8866d3c2321e2d5e3726d367b32778a404f223b8a1603c2e1dc016c73b82c37db803018b53f6ed9ae7786e03b9f222153a046bef5438f68bf82b777914efdf27d590c43304ebe0d6bb6453a0de364454c08f0aa49c5bf1d508a8f90509cbce02d0071f62df2b983f2e63cd0a0809dec19875df481a579374ab36371b9ff543292e9bd75e3767571e1dc61f933a9742720bb0ed5b3a51c0b637e6d31acaa982ab31800ecd6b2486be6407d138623c865444fdd6bb2549c010eaf18b083bdbc7e175d962fa71aeafa054ec2a42b3ac5caf7f6b64543ef6e823c3a5da8b739dfae8b25bfa74d87661b306a4d5046110a912e29510a3cb106b431b1ec1b63e56c2cf72d8305bace83706efaaf6268a5a22f184c1db248f66f0d650a5dbe291b6eb08bc99a47abada860459154af55d201e2669a0156730e93cae5fc752ec70e82b26771e6be5da0a5140a101d79ae14d2b82ed85b1606dcb64f890bc9e96055f69f37c8c5b6faeccf50200de2068cebfe3093cdc89cf235555b484c83ef8355811ea07619ee0a742ed0e13f5274c1854ce6404db1c4a17312317ed2515dff6797b3ccba7de16b07bdd5778a171a510348d930dc917ac856a62198a2a72f86551dd34b67959fba549dacd42afde94447b86b2bc241d78ccebd952fd5a10a1b2abaadb1b2fc2d16542bed9809fafa41793f9634e5bff385ac868084f31cfa2dcebb5ae77e44bd1b310a38a28b42d1be7e78cbcd47124e9b60ece5d017a5289e5b7f9e3fb381ddfbe86e77d1bf5a086f7c30445ea3718d96baf30c97d25c6724d4cb2e11638e466ecc48a7969697855e6a385beec56ef652b6fbc4c934cf8d8748bce94e7513121811f3f8d85b970ac09ba6f5c2931a6323bfb70bf4b8ae483b0ab45b00508bfe00b64c09c1554dcfd76706960f058adc2f1c151b1238f69105baf0ab71d7d809e8234302b81da4cf51f01b76e6ca438e85b15292ac40885908d865ee14a41e061630122843d8dcdb4fbd879d598e99cc83ab4a5f149dc2500427bc255f6175d4e28dc3a9662c4a160bb0734ff3739dc000a9b08a051850e0c92d34d6f4d457addf27775c13c3bc525077f64e21d9573d876e7eb19f9bbd29fcdba2bc8a63946d6c1db4273e80dc14c749bdb8c135e35acdf93662be63c2189b03bc9b3727edf97f9bbf9e03ae291b776a9fae57c86be44457c7e625a08d726ce1f5fe49862149eec3d67643b28c7d200028ebb0037d7a37eabc2395fdcf681cff50c87fea76c49ead49f80e638ed5a7d05fe3dda99bcf9c9864b287f847e08e83abfddef9b6d4f89f38b2c92b83186dab9db6d18843d0ec87b7d35d6df69c013f37f23dc422afd4c97608d3ec304bf145c1bb0a1ae6f4a5d9152f92353ed7d17c787b1fe9e3e873aa8f6e969d129eeb45fabfb4e0c8a9984602cf140a2cad0b197b543b9ce9a6e8779a77968257608dd19966fe0a55fb5e3553091cecc1db983a787906bdac1def533046fe471c04540633296d378c28eef8d5d0c975f6ce7e1ad5f9d085325b64ab6a1b6c54dd5cdca7418f9f321944ece1e47b5317a791e521d838be271d5558b835a205ceede9b42e484765d2e408c9f8cd62a0ea07c030b9a733aa2b60cf60aff88bd8b77d19350ecaf41b1be0f2468c320bf4b3c1a920e911ff34151c47d10078da8be4d97fe86e77c3e135e03874f13f105277099da2b87d0c9e15c194476c359383f8ff7dcdc0aad3520677a5502326d7d2b0f54caf2824d0991581d355e231f50c507a6782e894fb2c4c87064f3db2588b62fc50d92968ff76ad5d1c9561794fab576c2bf782e89d39479534d1450a2f8c2f140b81ed88666fdb5215de91bb4105d944e6b0aa3c0154cfc78be1212c289b28e28d2970d690aea819c9791f1c0e73e0bf4a8bade405653b720c90b66f5380c614f4f1d169b3c31f02c752f483bb240cc15539c22c75219d6248b40104c02ccd5e680789d4588177edf5d0d1ba6f726770d7d51ea25cf7e0f8cc1055b1d64642f3778ec2a5218801f74ce1d29264c2af2a60ec61a0405a13b4d971d2aebfc8c862b1ad15ce4cf3a89597b01973cc8b101833825190563b339c7de5b2691c08c760a7e64f1b9cfb8de2bf6bc091022dfe0f3c98bf74eb7a34c881041f3905b3624ec29bf762c498e304c9aafde8790a4d23727cc406baf67449526afee593e08497534f65841c00fa50bf49023264cf944afd636f1d94097571ffee2d110afcfb2695f032f01e488c31b982a09cf8b3087b5d09aebdf1aacdf7c82d6091a898869d354a7240cd3d305117645651b48bf423eabe6b0f8b94518636072a4ce0485c40ecda01e2e4fd80f78053f1d4b1b778b047d68961e051c815d63c0ccc184d6f117d21a61434f97650eca61b318249bc37ae55b45b37236ce680f67a85d33112ea27cff458c26e169e6b53af1c7c9cd2f3540336c8e308fd65744272d8b9b22f841e96e76d7f594e39a3a74fd4ead18ad1460c85d9bfe1472d3776600abd735d10520c5d057094b30cc527bd9da42627b98343c2b5faae5f03c5042dc00e65075058bedb0ea50d65cf9057ce1a12202679e40076e224881adb1f0a987a44bd99d2b25025fcfd05ad459447297a504b40e95e283b54274163d8de35d470a9d81296cfa1b20160d89284ea06b5062825a1be4161835040cbc3f269429f8a7cdaf4f4fe1384d7b0c11abe42d1865a124a9747a929050c528402c7432648545ec336fd557060a2a46a1708053cbea0be9c600c6a2d1cce53c0b6f7b6b45aa7fa6e91f0b29b41c50c050cc3b2259d17eac38cd956d81ca8b37d004faa75ee3f99500a372cff90d867903d925aa414d00ea1aa8c9b0b4594b012cdb07f456b5dea1a45b9b28eda433dd74edcc23c552ea2fad6ecd3e7ab50ef060a583cb81f2f204a0773bfa85a22e51514c187ead37b549893aa904f31270129aed5fef59427f8fb9845a6cdacf57aca8f3ea1ae0b14d0e237d623d3a8bed745abce42b90428e01c0a6820cfc8271812588df5ceab7b104cf4566141f2748babc3d2214f7a81a48bb1a7e3fe82aa49009f5c63ba1ef70e9ba701d916b0ab21c095561476d5756301c482d84cc301a134a56bb307baec7652b4c796cb83e9b7027ea3c570dacc9e71a844a800462692fc3cc00a40a44cb858af52a2aeb4fce668b347953f21ecb68271e05f95cc4109c2b290e8f30e326d0e08b22f012637a8eb480292f1a162ab830f59f4da3db653e22664b64e88a2c5ea807c6d256d668dd85cd299a4fec3046c1dfe8ded46d8589b9461e64d555afc5671e1f50f24b4fa3edd9912c0f19ea4b3b64afc648aa6aec2c9e16d84a79990695bb632ed7498a7c81b3886cf8f8b9c367a1018cddc518f1f7d6f5ad5c69be85c26669b03f1372592853baaab056f4087df747ac896e0c25fbd791f1a111027195450b260e862a9b94197eaf0f24a1932b83034eafd9f4b234d8a544d91d013602e41f19e1798479439799bc4cd197909c85ceeb9dd3449493a426c6569817603bae856fa8fab875342ee165350e694e4c849100230f92556601c46d410551d4e8c157f7ba2912b1db57dffd91d258b4ba7d672d30e414c57cbfa68943e765d861484886ef7e0b15b29cbb855a233b724baeaef3b81498bb03dac171b01c4bfc7048e6668eb133fa586d2dc699b19099115090d902d5cbbf33ce21dd23f992801b551430fb5dc7467dd7e2156e2aed1915a130e39e92a913d1da65c262232ab51c97534fa0c95770da5611c071ab081b4137e82a53890642bd14d7cfdafb914a4149e20f2c0b712bd12646f2588bfc4582cbc835eb4a7db6460dc307ab6a31a1c094bd0f11e76ef4d4e9123841a253cf4d8b8f32328acf7450400e4dea8b053d0edae1654ab69ddfbdf9e63069165f19517618dfbd1c03b0bcfb50e3bde3cdd6ec2b283be2de69744dc67936193c51ed074d19c41c96b21b72062642a8c3e2ef84d63401136c593679f46501dddd0d4d11ac197b9376cbe25887ca5251498f08215b0322ab9b5e93a84a61443c2a193041382a3b2ea453844cd13a0a9e365bf1684b89c9d4217d300c2213731d1b771bbcab0b96ff0aa1d91ea026e0a30f139bdd4d41a389fb014bfa5df3da9dc3423587366533df74c53e08858308be02797ccc5a9b4e77ae915f9ad19d5573449b1f6701c1da1058a68ba147e15636e13cb3fa09427910a150b8016b73f718e890261fa3fc07903846e960859d4b3d25e4e8f58ba8867572d981e2061120ce147c75cbb796b7d5fc468306cfb5be62c0714c12f100a19951e794e25dcb512b9de918f963e4808993b74e1df456a470e92972c7cc88d05735a515d3a0a4189d64e1d94ac384d2b1fb5141a9a21347302291c325a8b49c7168b32560f38be838702a56f2e9d130b212a2b10fd5bc1191dcaa59bd3df7a181c5c599ee0ff13d04700fa2c8285ca63f1224128796308652e117f2a218db9c11cf253520d40b88615bb837355ab3cf3fcad63fcea1c54a5e7d0d5aeff75a960dcb1b8dbc123c2fd84e616e057a4b9f4c3ff6dc08f69901418f15ba4b4e9b0cd7a4d460812fa4e49c08b394cb41c64ae41b8d5071e6d1b57cea8dede6974988ff4976449a52e560c460a8bc92711612bd135404fd3b8ffbb504ae960acdd035bcfd971040492c2410013be40a6221968f82578aa1877c15e5493e1e18d97f5f7cf2b9cfd34c1599a0aa1b2af64e190975016ed171de6046f706e14806e7d3a6c2600a7e2a705b897da15ea4b853f9b3dd9efc280bd38b86abe0eb4a22176b8c3e40ed18882f36ff89be2cc48ecf562745e6f69e07d5c8c6068791ae97d8315577f5b91f798c5f64ba2754bdcfc7a147c2b8ad9c18a802bf048993a31a7a3c33cb1e6b488ca449870c6ed23a54c613a59a4721c2229be949b1dc2c50c43d33098a872084e58fe2c9762dace0823eebd36f34cf924f88e62f264b660d419e36a664dfe16587cb4c0f04418516288b345a9221eb7232a43b621acb359feea4e891b197d88c4e1aded90e085703cb7638162aba759ee733358d1a6959f797ab33a8c66e7d9b4ef1ae2cfa72dd335bd5a19a31e12d45078f4b6e427f1e7767bbba1e1108c64faed4724cf4d79bb667c19aeaa0a9327bd5b8632846ddf916c5c490a68222b945b8368f6bbb511c8806892eda5d064244b624d0d6f874c6218e35559e9d280632f3fe57507f81952d205c6e7a076cdf510e92675da3e702be7205047bc47a7c309f5460ac1c3c5e24a4e48e31ea775985b6311bb698fbe6b4c686f5a50b2f862d56e5ac8015fec76a2059069bd6a6bc4707ebb70ba680a9b980a5c20d0208c34313384aeaa47b2d770c30aaeb27a0bc816a0387d3371e86873ac49b419c5f6a8c872c8edef9e7afa2b65347cda18defe8262ce91511c7fa3258ac62962ef06fe083e1eb01c7a874cd9e24cd5a4a93945356e6186d54e771d615fb13684f64e6d1db2c6a52ef0e67bec1d2c08bf252cefce9afc64c76bae91e755c89d7fa9ffc1cdd337e37d5d60040e1611dd66a0f67c6c7285faa0166690a097ddbcf9b772e070c0a96f4ef7a834d94cfa49496ecb919e280251aba26bcd3f70e782b234e9bd88bea2944834d231b50caad20b00c21b4d1dffe53cd4c10225478027bac4a6b180c9b4fc5bdd6e632839436c436750d3d2c6cf8317e1caeca6358ec19493360f1788dbc5d3818d662ef1b0ed398afd4ff181bf7161937a5af0be1d4e5163b7f98b508e450fad4ce33ae3855ed7e85b2ae935326513f0a19177f056a6bd25e415e5f9642e2847f2cac464f6ad1cb9667272a83cd80fc0eca0df6614907504c8c33f77ebf843fd3f505fc74ab6ffaeff625f7049de22cfa7bdc9bb9cbd6c721d299f56573d6c1d1a819b071c61021ab4279a3d70b2a4d001033333333333333363545549e682ad25a391d658db4829ed729171ec87e43d713dc994524a3249421a21b00192ac0d94ac0d94ac0d041e04cd0998092f097e7840662eb7dceaf8ea9a72021044c71dcc76d5bdd13e1d7640271dbb5bd3cad6012597475f8bb9db365e071dd06551444ffc0f96183ae6c06626f985a1430e08f7984d59e6bbca97aa2f74c40155e269531ee453738a051d704089de49e86ebc249ca07a20bd10b1f16244240d1b3ade80d249b39826694a1b74b8019d52ecb4268949ce88c80c918e36a0e305d75432caeb9788810e36a0a209f6616526469d2f4dc71a50ca620a9b37a78626b91ad067324e189133f9b14f03aaff2a852b2563ccd0810654349df61e2ba637d9db10b1a20515575c91ac380372eefbfea4afabcba9212282176640b6efaee768a2ed784b888e32a094493fb96adbb47c940cc89dd1744adc35934d05a2630ce8774b29c5d25bb5ee9c0e31a062f2184c4673878e3098f2e6b7616899b9d10106e467bbdcf1c4888cc98bd8783123461a696360d4b841e35a5881801604c062460c2bb2121701163362d8500760e045053abe80dea484ec6635a9c42af1d630e3354468c828e30594585bbd98ff2dfb9b3014cbc688080d127856d1d185d24e12365509afd3c0c28a11ffd2c105e4fea666972a79bc651b3e920aa3630ba892d4afd5f2dddb5c63323ab4808a6bfbdc183ba7a071169069e64e58da248d430716de2f6f53bead5f01714a49fa2b07d13b93c40ac8eb519b4f933baa80def6704af270f124d9e4068d0c74500121aa262615563143df1857d4c00b744c01f9651722264ec31d049e8c88bc1910744801211a7f4a78d59224dba4a1230ae8b233a572f30f05740a2f93a77bb694cc3f0125632cb54bab98d273026ab3c65bcdf32620933ec993e95d7ac538139097c42b5acd4b40af6ceb57a692bdb5a4047492dfcee6243d413c270968cd3b26a5382663c70e12d0315ff094a3597b4a7a0474b818fbb13d76be26b340095315b62aab498da311901d7fe3f694e8a22b1601a9b69a923a91b5a01e11901ad4ecc7c21d02aab6e6ff3273e5b41b21a0f753e645bf9394711304f4ee670e04f4a7b44ff237cdd43f404731c98425bf93e2c407e89c6cad8e1ea0d2664999325f557c498dd4c28a2a44460e40450b2baa7800163662cca040273a7880fee4f6164ea9f6ea60133a76805e51d9a4b4ee92231d3a40f9d85566752707a824c9dd6d5252c9b3545a5001802d74e00065d6e17282ed57f00d11036c163a6e80169392fc164cee54620e56a1c306e8706f995392ba4dc42974d400dd25f979ec4671f9bfa4d0410394304968cc137348e898015a652f7b69abdfe47919203ef3b54e8a931d932906e8d294fd533d070628cb6f0d9754a7ac49f802d4a60b7f62c9cf255117a0e34caea4775dae3e6b01fa44d59dcb9c9353be74b0006d619bd954fa2b40a655926fb3ce04375d05a8a4339ef7eb9724fe49470a50e2fbb927e9ae02709c0219734a97f6a4f8b5329b02996bba2aded14f99a714283d7ad29998925e659114e8bd983dc4d61b05ca733c6d3ad1448132c1627eccd539b8a140a6e6654e6649eec7a0407fb8a424694d060dcf7c0299bab38633b952ede309d45585d53cd7b1525527102fee31b372023d73e24e95593681eea4f7aa62836799b02650623e2d8963322c5d942313090d15af7431736002a52dcab955dee9bae425d0f6c9bcabd58b0011382c818aade7b94a97549d13735402e53155524aae92ae630a03072550315e87a694b65cdf0503c72450a56df59354e09004ba73fe92b39ba4644ec2165654d102446f8cbcc062a4150053e088c4a9d246eb0509928cb582031248abcbf8acf3258cc795e311c8ecec227bf24eb9ee81be31e30516c093182218f10958c14866a4114e087038029584e592920e6d33c16c04e27d2b77357b9ffc8afde4558080242390a69da4cbfcd3a8493849628cd87019228e0010905c04722802691fde6cc47ecb54d5c20a04b4a8d1ee0e0001493652838040a08a1689405ffadee5eebd3fc145047af652cd6a30390e81cafba695d3c2068f8d21909e3fd4f45408847a6f49b299339ca98d10c8dd19cfafa44345d441205329799aa6947849664120e4e3e63b2967380281f4d8275aec49e11607205095e2749d6cb3ce3039fe8012355ce94ca6ce00871fd0d96f63091fc7d36d0c471f5019b673f9e6794e9583a1b53338f8803ecb3c9dd714ab9ccd7080630f28934ef2f870528a9fe617588ca4193138ab510f08dbb4d47fca3ec98f380d11bd82230f08cbcb5dd964562371e001adfe96a7740ec281e30ea80c9bf4596cad0d1c7640e59c24f138ff394ff2ea80ec8cf9bdf2e3da6b92cb88610508c80f38e880923dbc97acfaa9973e547820468d3170cce142c02107544e0ff9b89cc2ed494581230ea9e678bc3f15e781a175050d1931caac81030ec8b9ce73f59f32092f61688d3808464446f02ff20654e9e0b365a5746e583b7d3ffd52d735f40c1c6d40c598522a11f74f6fe23512007fe06003ca54cea89e9892ee20ae0125538e95dd2b9cfc9bc0a1066425effbf24bb26d69f8cee4cb6749038188088c17868a2bae20400b2a5ab4a0a2850d12b80d11c4b852581c68400535c94ea8da9a70278567407afe9fed4c1e74f444850804d20882612386056a8c8814871950794d56df8d1dabb34c7c644424319328f0801654b498034719d06b9224689c2f59f4af2c38c880ce7a531359b39463720ce893cc4d57aeb8498ecb2106f4be9f94f52fc61106549faea4a39da459020718d0b2b93ecc5e9245c3c62081e30ba8551fd3fcf827c99f780179527f67d4304b4a0a727401999db961a53f07179096f733e6134b0ea7738e2da02f6c87a57413b6efc12c706801259eb6bc1df66281230bc8fecf7e72f8d3e15daa02071690f3e726f5cba574f2875740d6c6e90f57f30892040c1338ac80b04ddaa6794938936a340047155052a3d6679f4c3ac696830a8893bebff2276c761b39a6801c5b93935039910232e7c71493675214505a732a31ee3330d4d48d18fb010e28a02ed7da64b2cbe2c0f104646ef68c079364ad2fef0b1c4e40e7eef0e66b3296a36e59004713503125cdf1b79991818309e8f74b929d949e592db804545f5b2ce9e3276167a20464babd185f32bcb6834940e796546acf7426ef0d098a9878922eda99f808a836cf1783a8e6afdb64815a9373e970e254759318e1d2b6b9bad9165654d1c20e1c45402529d6a99fbb2493570e2220935756f78f49aacbf30e017d327d5cb1f5f97b931402aa3bab6998b970b23d41409bbcf1cb6e4b80808c2e73979397f6d1f2021c3f40e7dd3aa973db85e59c0b1c3e4085df70f1f4269dbb630f50526b9e77d397f4e9ff011c3c40cfa59fbe3d4992e3e6563238768076ed5f799acea10354e9b0ac9e26c3a24cc09103e4ca7d7c6bd99317a31c3840890d9fd9d35dc77082e30648b593953987cb66f2422cdedda080c306e553db51e394b0f8d18a03202b20c151034f95e55b0d9bc47ff142c4c63136c2410374293dd96afed284ed3340e68c1ba6b35a5f984946c7344d265cf60ae8dafc13d6a9d9f45a5640f998674ae2240d3b2555409fbea7609faec4b0242aa0abfd477545c34fa680f2145e4fb2989302aa2b85cf5229bcca86a38010f5984f37a1312f504069b6201a97dc2720d4b28429a9d24d9feb0474b6878db6f7153ec63401154faaacbc9a564d795df86002e23dac7252e9ef3174972192d8b8f1805b023a899944d72499c2c307081f4a409998f74ca91daf7cda24a0c40e6a62c5b48d976e4410840f24a02de9fe53b51111ef1c0161da5e3a29b194496709e1230b54cc585bd339c64d478d601f45402649887b6f124b365888701f43409f68499c3a755121a0d58468ca4a259bf67e7ff01104845e2a1df3a64bb2970804641ef1cb646b2767b362838f1fa0f64fb87c25faa695b8061f3e405fee7c6f37c2e0a307c84eaa7d95d4c939abce03c49fde94e12cabae6a78f8d8013adc4dfadcf598d1581d3e748078fb9c3c5f9c39409ae5a07aa6f3526f36850f1c589268725232f6710354ffc9de7937d9e392ee3e6c80529b7325a952287cd40025e70c53efa6df4dce28e183062861719bbbe774f731036492e159f434e2326ed49821b2860f19a0839f94f962dcb4567cb0f888013a7e8ed6da99497c65597cc000b9e9193ca5f31bf0f1026452ff9e8fadc3d0aae1fe6727f87001e29394a6d26dc8c949117cb40061424f3d2e730ef9ec0c0b5059b349cdd9412020230ec3460cbf0d7cac009562f46cfdb73149d20f15a0e3c9af9d2f7b92ef531b1f2940a68a3ea7becc4fd898118f5364c0c314c8e4493c89737273be4b294a4981ce1b2a6e5abcbfc3638f5120fdfdd388490beab75b91a208053abe566bf8de498d1586d61628d075729e1c7c4d63f0ee13a8bf94da44d392b5bd909190a0d0f0f004328dcc98cc8aa5994e204ba5fc17752c55e7e4c109a4e6ec4999b477d2c9a4c726aea026d096d4e3c70a9e4345368f4ca0644eadc952b695219b3a1e9840a797aca8659dece37109647eade0edd999391118e46109e4c78e9865136d3b495502e59662e976beb018f11b21c82b3c2881ac72b3aa9333eeffa23b21083c268152c2a7182cdb2b52626078480295d6964cc66847c20312c8b9fff2b029e95e9f1e8f4049279badc7527204ba3ce62495183c45a3e8018f46a0ce92e065da8359e69f11a82b55b963d80e1d652424508f4520a39918d3721f778227d9a88156f05084153de76d9e08a4656dc6aff098a3c96dd4b8912a782002d56af2b7993262a42b1243058f43a0fa4cfc50d75caa95bc83872190df163c98b08d240b1e8548aec5d7ad307b1e4b0f42780c0295fa4ac71235d6d3320f41a0364bc7a570a70c048a7800a2404e86c71fdcf2a4ebfc36878583e0c531345203b2682419a5fc901e7dc872b01c2c8b06cfe8b1e3c1870f78ec0175f69d7bfec4706f0b86d68c078080788d192234f48076ff64eb16d35f921a3444460c20232181471ed0e7b1fe6c7375ac59ca0cc0030fc82e4d4b6e1fdb3a1e77a8b503b2529e9aa65abbea182c9c01754099c9179bef5b5372950e485d8fa1fedd9aa94c0f8c78034040dc03232e0304e486888c177e0508465cc60b0641520508c8880c9c03326617136ebe268bb98e001978c801791f6cac324d75e9dcd4d052561e7140cb67b11417554c923f185a704075facfb469c5528cf5050d2c3cde802c7d2acdaf26f5d4f7163cdc80da2d295a1ef9dc74b31555b4b0a20b1e6d40d96f585b9b6c1753ba38f060032a369c18b39bd2bef1646fe0b10674fa6cbfbef88aa72c08080848aa0199db63ba30b5dda693d280f4ec7025eb4be6f7ac061e68a82a4d9c6d49baf538036a2da5ed3ccc80526b52acb6c7e06372ca806e0b26a716a63ce3c5830c884de9259e256340d6e7272556c5cf612e10100f3120fc7383bd97d2b2a3152e018f3020534e5e662599f2d61e30a0a497fc72aaf52fa0244929c132ac88d92681a125c375041e5e404617fbf5ee9c9e568f2ea052fe1577efb0953e22f0e0c2f2264593cb1019f9041c4002f522222334ac3cc6888d17346a58c2630b5b020f2d203637d55dfcca4c59dfdde3da5840da8b67f9d4ae80b2a4d35286953cac808e7f6d924ecf794a363daa604e9ddd4c0c93cda4f5a0023287095327af9b02da6f4b963449dece9449012565e395b427dc5c593ca280d2fccf2aed66b9614201613de6ad71c7fec24bf078022a6fa552e1aafd29ff4e40a7564d4d51ad5dbb6f02e272acc99a7626a0734e5f3acbe3164e9680ca29e74f92ca246b475d0988dbdc31d14d6bd0184f024a6bf0fe4e211210fa61c226b3cf794d1f01951557256838c902b1f56666c234023a3eeb5a9567cf3816015d36f75b25eb79d42444409918d3cd26d9caabf31090f1eff45d2e961c9384808aed98648959937cca20f0c1a4aaac2420203f7a58b113e30f50c209579f4d8a5932c907a82d8febfd5bca9298d303a4c66ef799b4f20059714a3cfb4977808cba9fe5559fee4bd501eac325b1622ce92c369a03c47f67ededdf4bf7270ef4eb360d7695bc01523bf3c9f4d5e6f9471ba05b4f85cb32b92b43ac017a2d83cba67429858634404973293f65ddcc00b19fa959a1ddfeaf0cd0f21a4badfe44f598c5c03f5956f29966304049f2b33c2537f935fd029464271bcf4a5c80926635e7574c0b50fadfa37eaca44dd80c0bd0a967d29c9cb402c45b6789e9365946530528e9dc7363581e29407bcd7d52723e05d22e733ced7996572ddb610a8465b3cbda6a02432150458b3d25e828054ae63507f37fb3246322288dd1418ad3310aeb10857584e2460728105ff297123b670fd6e0d2f10974ca752a513ddfeea93d814ef226dc5e8ce349db9d40e61dcbbbde124ea072c592df24b993a498641308db93bdcaf5d4f0614da0c64e7bd02f3913c8e09e39fe7e6fd258c204aa454ec54cba9740aa65122dbf45757d8f251096a4dc25078d75bdb41228e1279c49d2e86f5b4809a407b9ecaa9ea4986e93407bce8cb9ea4c8724d0a29d4bb755923eecd21109948961f64ba6789bd6f5400724d01a2ce7ded1fb068d47a054dab4a4a6e41c81fcce9abe56277e53b8dd868d3223e868045a933865d293a42e49fb0b1b37445ed04823a8b195861156e858044adb3d252927dd499984131d8a407f8c7ff2dfbffc58da828a7a516992e8484407225076612563e1c1a811e30abe710884799c9c4f9979e83004da92e67dca26dd53ee60689922838e42a03c9995b0304f73c2ac01d8420721505a6e44345cf038f9ef180472f39f97d60f6ea04310c81cc3899d0d3b0281da0d7a31db93d801088495d433ff4dbdbbd8740e3afe800abfef2dfdb70eeefb0125468dff492e297b76370a1d7d40a6baa9aa27251f507d6d25d72b264d69d903d23479b8706f36366b77e801e1a29ea489d36c32b3794045cd9f13afc4793055b4a802880e4ab254de9f83334dece51c4fea1d07c97a2a9aacbaee0d5e334bc1726cb0573ec1e412f52f5783cc92cad1a4539984068fd9879ab5a91cce40d3be5993989301ea75ac3b95577cbf2e06c8d8d26432ee06028393f056e12c7cd92f404b582fe5ed735b9a0bf0d298b6cbc4ce9b169cbbabe4ef06202cf0734cf9dbc38431a915202b409fc5dd1e51373d315101324e92aa6574bfaf84415280ca176f76b3562af16417a740e9f2ccd1537a72afd885295039e3dbb4dad5b2340117a5408a255163ca7526346a2e4881f2a8e9afa62d97a08dc268c0852850e94f749d8dffc164123b27b80805f2c4515193534ee5ae010572e36567df7565d1ccc5279059294977a2e8c213c8f0aeb1937082ce85d3452750f94e185b4b62eef272c1096445cf9bc6735abaf826d0a72f8d8ffdd57752d9c08526cee1268b8e454f0e5c64021d3e53b788989d184d5c6002ad7d524e94bf4bd2972e814a27e51856cc73610954584b695eb7ac04422b5cb4339b5cd1ea062e2881b6209af27dda9766370964d0fde41d9aba9044492eeb52f6afc9c2452450c2c5f9cf95a2295e4d0317904089e971c5d3c9e9f3598f40478da517e46a47949b94aaa42493d308a4f766658fe9b75d3446a07d34c9f11d534ab67611a824c7d8971b3588c65111e88d2bc15496c5f4934fc45a63e61f2fc649724faaa4644cdf2150628ab9df2cd9a6d36a08f488b5a510c8789fc264fe2204ea848956297b4949d2cd2090717daa942a4956a65b10488ff6c993b495726c4a20d0df39d96959a9b552010225ace5708d99b17f93fc016192d4797af3c971f9e407944ef2354e4afe6ef6f501255bf25bd25c3a6570f9804e32ea9ea4a4b0ca57da03524bc9a7e4539fa65ed403aa433525f3f2f3803af12b5d650adf24c5784056b49039f9e93b20be2dad5be69f92c36d0794f26cf9cd044f1dd06d15bc4e925317fc4307c4654a6b93b5df26c6e680ca413d56454439207cdd379afe4f3e9b8b03baf472e5286229f75be0805cebf24c77c26a26ef0d88f54a9277a9ddd09e4e573ae35e1b50726d69d3bc192d4166032a4f2e37e577b593cf352065e326696db921765203fa5466cfb4b81ab6936940ee5cfadb54c14fca29684067b47062656ec70ef10c08cfa5f7a7a3891910b3f69563737793a694016596e44fb2511fcb8c0c48f7d49456b392fc6ac6804a67ba379ddec480ae4e278556554e7d330ce852b1723a51ebe5e3090ce85c3a6df967f50594b449969a3d494e07d10b08d3173fffc65317d0bd1dac54df6e57d2e102da64cb625ea9631256df0232744e92f7b26693d2460ba80aa2b9357329e9ff670169f91f3cfd4333698905a4755a92ad9ba3afaf5740e74972dc9c4965efa4b1023aeee6a5652a7193c4aa80b21d4dda764e564de25440b9f5ca753c2565fd9329203dbab97d9229cd6b4a0aa870d94a4a525ac65e5140bd9ce8e9a484fb991c28a072d23985dc98ce25c69e80dc94ac34dafdc8cbee0474784b27c90b8d714fba09081335c9ef174ff824a99880f0b031fe2ecd25a056ac5c4df42801259df09b3e939c2420c4e492b4dc3129bb341250d7b97563da68c8c911505e61b4cc3d5dc76f59a06f93186a162795fa8c80b658eae5ba7a16634e11101a7c53e859d8bb9422022abfdf6613cde498e26708e8a47277a9bc395dc9b910506262a76832a90fed3108e88c76736295c7ee94010129d629f7a84962ce9ffc014ad63de1b22e099ed1f4017a4fdb5838dd4958d07b800a2ba63b5eea7880fc0c6ba2ac5ede8fed0e90a9be276df0ac9396d401b2aa84edf998c90152ce3e555ed30a1f2b1cf4d954309d964f37406537612ac35e36405d973c765a651735407dac6ff3f3541bd95dd000615f827bcaa67490375dcc002547cb79b7dd2c96c61eb89001f2c6f5b24733b5aa18a0a3bc87692e61182073fc2475ced17d01cae4d54e85255db8009dadd3e53f6549292db96801ca7e53d509d536396f172c40a557bece764a3049325dac001d4fdde94bbbaa0065afb1643a49caf994ef2205a8d44a39c88927cc5bfc14e81497bf29f59f98f26c0a54aa24a60d175b5325f152204c6c995fee57c5539302253596e79cd2fc9d6d1468535207ffca1251a0ac3ec3c6b09f50a0a38e5ad62a515020dd7d3b9d87fb13282bf527b6a5f404c2b384ebb22c25c5dd3a8154cb2e614dfd53799c13e8bad8f9eaf27af7b10964ca6a26b57cd385da771f9a40bce9af6b96aebda7ef3e32813eed4d9971a92e6eee3e30811ab9fc4956b4f876d21e7c5c029d72b33bc3e58eb21e4b208367961839cd2777ae044aceeb49f2dbcbf24ca1446ac20927814c49c3ad78ea771f924027b94de79c740e97e7bdfb88043ac514fed4df89eb79b9fb80045a345bd039ed794fbe3f1e81dcca98f2b249d827ffc311c86cdd249798fe46a02c75e6e2cfa7f2db1981b290f13529dceeb9bd08c48c253195bf4911a8b055bdcffebb77498940cfc9b5ccfe9b349f2c22d0ada6632c31091e021dfdd3c9e5eb19de640894cee626a7ced7265e5608845c6b7e92cbaf2f230211192e81190f68414511026149cc8f2b494cd87959858f41a03c3d5f6a2fe9e4a9daee431045ddb0d99c97c40c432b1008536bf1b493da4969f2e003102869ff64ddc9b9c718b1a2af8801838a1d7cfce11d91f9d8b5f183f1e4d39b54d9b2edc3af725feac48ff1f0c12d3db5d3efa1eeb59c2c3df4494cbac48a519513e621b7b8d712dbb1735f54f8c0034a44dd375ae9eb0e1f7640a75f26cf9ea58ac2471d909f2ff6f2c7e65fe5d001b5ae71def55389599f034a29cd3d32afe97369e5805c113fcbe0a5695e537cf01107e4cff895c6b6248949e7030ee81c2d9a247be21f6fa8eb94da7c0c27ae1b502263155b3585dd9ee4f0d1064cf6ba55d27deafd6543b23a6830690302e2888f3530ab29274d1334a71383830f35249ea4e25a5659acef230d28e9d5536cf8e7a4ce1986466a8003aa682419332ef940034a0a3f669d627ba1d519d05ea64b4ab74eba6614d90f33a0bd3d55962ca64e9a2fd9489a6ca4be177c940171974ae7922cafc7d04823233034d28805c880d2244fba589e939c2e3386b29ef9c6706f255cf81003da4f3aa5ef57bffb0803724563c95afade7d80011dd42d56da9c67296645f8f8024affdee6f7e89533491ac28717366527dabd5d5ea9949d7d7401b9f161664cfc5c40c91bc662c73e4f99945b408e7f7d86cb30f9c45a0bc893ea93e678d2ebdf270bc83b9d16bb4b57a518c702da814026b79c7634efddd8e5c51557c478f7912f532d8400026df24f50936a7f73c5b811021fc1903f202d583615634972e398c4681fa1f1c2c60d91542c0b217e40e5d977fbf4afb91daf42481fbceebab68b456cbc681385103ea0545c9724f36430b48a09d9034a895f49f43c799da517346ee801b9319a5e637cdb9ecb86e4019d43bfe4a5a798311f11a1714364c403198207c4c57fcd75666084dc017139e95bd3aca85a4a2f445a2110620794542e67e3a6a763fb17209091f580903aa0644b2ec594ebe44c2d0cadcc0684d0017972699f7492f6566b734076ae7a93ead91039a0c4500dfe75723484c40125574e72fa5f6ebad8b4a0220e21704049593929c17a4393e716869037a024614f124f93549bf31fe2060312d206943adff40bd76b72769c07216c4047f74d259ef535205f3bdd49517535a0ec83e9492ac99c3de534a036acbfbe25cb777242033a9c7c395179cf804ee11f1b7749cc80d2b649cac1ac367b3ecb805c4f722525c69832d14eba71f9e1c4a419034a4cd24d1263eeb58e8b0125d6312cbab82929566140c7cf3fc9b72b7f9a8a3185859f1030202e79659f12168986857c017d9298a63e2f39ea9e30b44c24c6bb04fc0a4e2256f48c180c6841450b1b37445c460c2b5a50d1e28688045a50d1624424c6888be00158240880806091681818847801a54d188f13de6a4348178cd9fd3d89beb13e847001d971f9497ef62f846c0169a29bbaa2c59ce78c1690315cacf292a2e9cce62621240b282d8deda12599525a2121040b88d36e3a9ea49fd696bf02fa7368f4cc2e5f72c37385102ba03b774e622afd1a7feea142481550675d92658aa5325a4b05944972bacdd1185f3e67859029203bf6748aee25295b1229a0fbecd35ff0dc573e4f21240a68d9f2344f6defb9580742a080bedb98f27b690b843c0169e2c857d6248ab41a1a8438e1bc1ec3b9c7da6bac11429a80dcae9c7f615230b45ebc10e9b3821026a063f28cfd12bea59bbea021e3066ba9206409e83825c9581527d80927912bb048340c0c4294801a0d26ef9ee41a56a330b4cc0421494059f468255fb6aebb33628cd0b02122f21b803d8420617f2b93de5d7b0e22e408777af33829e964e90c10ccb8f1c20333628cbcc0a2938f688664814e27c3a74c96413576184ac37d0435aafc86df08c10c6402e0871023207c3547dc7657e6fe22a04f5a3741559358166422a0e44eb5f8b9a42120c70479ff5c7bca4a2a0484e5ba66b724a8755215906e080902fa353bf58553fba6534280808e6fb9dd94fb3f40cd4999f91463561be20354ae26fd33259bd46bf500157e7e269b94fc925742788092c4ca98ca49aef432778052eee2f323273bc39845880e107e97b7c1e39c187372c6a9901c206bf7738ae93910101f84e00075920a1aaf61daea2a0db9014a4eb3d18c1e3609a9a0820a0854d102025598111b34029045880d50e9d13ba75a1ecd1287d4009d3645f9fd5d9dbbf48a2b44466ccc104950cb0e2134405cefc74c62b68af14f340f213340595ad31c2ae3b973920cd0399c302734da29849018a0829b2a49f2ee92b26f104260802a71a26eca493c087901327f3a8b1a4eebf35b5c8012ab496a32a56d49927942480bd0de97e36342080b5026a84995c5b302c4460f91cd5705a8a461c2b32d7642480ad049ea189a24d9924ca63b05eafcd325e16d4f656a720920a640956a8a65f16e6b9e6a00a414e8d6f49dc9c65450cb8090021d73a52a132e4997431c01c82890a9395a4c26c99fddef13018828d0b6b9e29524e1f2d41ac9c68b523902120a74f2cf4b2b9f3476be65a4192f140b105020bc4bcec9836932133b0c2d91aefa0432639264fff6e237a52f447a698078021d935cab9d499cfdd49841801b114023403a8176b1b7f69c4f9c40ada524dd79100d776f02f9e1ca24cba257edae26d035d69529473113682b1db3336e8a09e489c12e2d677509a449514de59c82e7f59640a9ce9a4a9792cf532e8957a0c6153464c49803482590315cbc8ca50ed3d93c7900a104da93c9e1317cd23f9954079049a0dde26a8c1fe4adbe03220994f479f574950927e516861601520e2091405985dbd7b8350824d0f94d67f27dcda7e424208f405b0eada4f524e936441047a082a88533953956fe0ad208e49c25f52c61bef13e23d06133c435a58f8fdf340a208b40cc87b9afc5074411288fe1e4d33185760c9e4420ed736d3e93eb82ee8a08549a4cc2679f968acd801c02b5de791fb625492ae71802953e45f36ac7548d6a21d0969d4d7ffeb071f97f014208d49a18fee5ee4dbe38d90a800c0255ea4c55af26b1aba5224004814a52a764f2040b4820507e4abed0135e83a9ecd96003082050d9c39f2469559b182c1b00f903e234e9ed7a35b974ae1f10a635ab524b4d80f401657df14cea3e6995151f107b29b349e5310b903d204b07b9fed19c7df24708207a40269913d74163903ca02b4d1c3fe941103c204de34e66337db27f057207d465cae59a95ed808e8f8f73320995005207d4e5d627f1233f9ac32074405eb8fb8c5c58f71941e680143b39f9a2c6e57d1a440ea8bf6c16e53c7d11008903fa44dd332585abc9610d1038a0e2896e9e12d631b5531680bc01a931e7af1397946fae4a2840dc80b034e97c36b37a029036a03789b98dec9698a2dd061036a09577fb269e560c206b70bcc4ba94e5e4cbf2d5804a4977add6aea51eff80a4015579b52faefd3f004103c26d7fcf92fc9e5ce601c81950314949ebd2c7cdc576c0310288195459b9946e6277a60c9592c2feffc23dcb870ca86c316ed2ee9d39fe330090312035e5bd7d4e8b25e6500cc5accab03f9ad50c03eae4cf1eaffb3fe9721b31caafe0f5020818505a5bd24f52f7175057a72f8996369cdad30bc88b997ac6b492dc92d205545cfbf4e639ca859f700199f6a45829298d6e019d3978d44ac29c18e66b01f9264b7da9dbb380ceb35562dbdcfc3ac4027264bb7e33b4e33a0305902ba0b67389c94a92c40a082ff16d529ba42aa03fdb94ac7c4ff5735201954b4c39bb797f369902ea52d66fad7c6da9a314503d9ea53ff64573b809205140a7ecfa68b2e498ebf45040c97daa3925c93bf3fb1390499630f5cddc0928712773d61d0f27f76c023acba594773913d0a6b46de665ae82884b4005af3125888ae7bbe48b82038812d096a5c46b53e2f2668f0b204940bbfd5fb729e9e3b68e04a4c524dd9f24ba4740fc67dbfa5b2d25969c2c50ea36fc4fc9b2bfbf11907aa379e4c45d9c5281a1458218ef065204d4e7a9245b4b9808e8bcd726e70b7bda447708489f2f29977d4e493921a03c9ae44996be5ba56410d03ef2da39270d08e80e9fc2e912fe01ca473565b7a46deb0a8696b902880f509e3659d0707eb249e11e20e65df794fc9ac7649407a8bc99a4cd4ae50ed07fa936a7493c6dcb0c035a50d1a218d0c28a8cc8a854b1450259241608c4511c8651008a8d0b931308001828260d0642c1703810465d071400044f28264a2e2a24222618141e180906c340281008070361702814088342a190580c07790ea60734774463bb0f1692008d974411c3d20cec82640f219e5e0585e0e4eac3da74b0c87b90b4b81a93801740658bd110b8166b38f23ea70c926e5e27367dee5bfb21e7305fc3dba22e65f8b7ee80b201bf143195a410ee8a2416bc50938cc0bb6a1dac579ec0c2c5898ea063d99d6dd40ac83848bf45f85057aae31824e0725598501ae39ce8e2492561d72265b859a038155ea9c77e2fb802b4d530ebab8e39f84a3b4453e798ac10277b55597bab1e513c3678bf073994aadfa4769a92c39d01fe33aca786808fcca52da201ccc76abe0a9b38a2c22871d5dcfb510d1977013875d4189e8d4bc342306f4d03ec8c21f14ca286d29bb78cce567465983495f995f29ee12c4a24e05cc5aae89c50c859b35f8cb805922f1255804ad696f4f13f6e7d77fe07bcf347fd18b2779afb23e8166885814060e674940e33784f63c240dad9b030c08201f56c2942fb7a316f92c437f040a838b75a51e1454a6ca2ecc692be644714fcd49732e32b4a98fa457963fd9c28878969b27e94bee2ef5714d5a4af51967ece92b888b1bed0f4abfe204e37ec9bfb18fc2ba85f51cc23283b522e5c8f8cfc643644d1c88f13990d97453b232247c53464459bcec03497e7016724769697b3996b571daa7a4f0a66103f36efb2eb400ca7386ab9fd881d889908a59ddb0763ce648ea1138d2cf1799f8034cc0887f929d8df53a4ab9ce7fe6c431acf67aaff505bd1c9f5f13941a424547f8409d05e14779e81d1e6591fa5b2798ff398ef84ece16d3735ce902f0f19133efdc58e1df8bcdc1fc7e731bb337e172535042999b9ea47b964feb3e40dcd6d26b233e623ad0cf387eb21b78cb64689ca076e5e4312b5c9619319a76c973525a38ba92a26c782a87935de860ad27c19c5803c50578d1b254262cb1886f7cd4ac10b8b0858420d63f5fbcb21b0189a48786840a786739b0fd560e0432bf8491a196d3732e243097f25c542d2fc3aecb88b2d28b07fa4e9c85652b716de312055af6fb51b0d2d3232dc9357daee91afa9ec5dcf68281a80c8cdf28cba5d1bb4ed911448e1f2f3f4d5f372c29235ceda9a4023c7740057134cc90f6ec8fd78c47c3f1e1d1b0952dacd13f805d3d24ad35f8c021547478ee12bf454d83542f38b766522f6aade621e952e5e355627df65e633b6f2df9e77169a1b4a1822149654a0730a86863ffe5ffe9ed570e36d637647f00994b63e068c091ab2a6da11d16b6b1633cd26ae8af90f8eed912af5ccaa2a635b2b880cf2313c8d716dcb3adb7889f0ba38746a009b091b5682d4af2c6c82adae92b2a82d74ccaee144d971de7966b02295356c056941c5c7a451a191ea21ea5937e06467e8f4305952a2fd33a5760a0844b678016c60b6f9974db78f0d398adaf8afca600260826b5b19c00204aa7266040862a4d55e7ec11f890ad8f2688c0ebf0ec049b4f539c5532ab0028b68b3e968d3c4d38e2451a364b5737c6017205c3426664967bb19d517f74122a79bb4f4aa4e17ad3afe82ba5d54abc39c02f64bd7b42eec3821de21bdcda7a2dceee3b5058a919b4b0d51e8070252e547730ff30539bf26cdb3e08919e72c630415c43c92ab9bfb03b4050a04d9c58af2928a3234bd55b717f1b1396f880f909ce5f67656f4c2fa3c705df81595f800d8f18a9584dc6124d16344dea02d1c43a30a37fce0149bb1a95f16aa9743ac316aa2ba416aced50b919d4566df39c36362fd0408c554fd1b8d0858b57b29c2b324800c282c528c333e2965343239083c59a0774a88bc1bea56bc3872830d59d43f366a2220fdd1beeb928c8d1d4d217c029ab680bdd0446a879092f2129e5181c8911ec4295cc9969c04688224b255622d9527db4cb47b10df1acc56766edd790d501c59f6a854b25535a508654d54c4cc454faee2c1b015dd993b844290798017285cb5a95a0676a6f2f5e3aaeff4fcd994bf8011aa61728bfc4570f3eb329cb5943349a2cec42e3a1c89d6c2ab3eaaff5a5a4fa322faa4edf0f9f4a099f7e06b242ac37cb3b5b2605b9b0d69e9db6ff7108b2318c65e86a0a835eb44594833b14db0cc00f530f3644265ee4a123ef0b732b6e12cd9540e0032e1de4077c68dce3986e34845685d05a98b9b8d9864fd66d5ba1f7250bd267ced9e189053b17f35a78df6c6dbb7615d71ba8c3dbcc12e82f0015babf91483698c0044683f14da8a80d9088c5007bf2a60763373310ae893448a7de7d8bd3c9d6546a7e93a3f7d5b7796c24bc91e1deb0339e48181d2aa6bb2abd7e8a4a5f580e08c75d2518b31995b172a40a30df9555d7a76d29649f68acb09ab1b6add47cda5f11a199bff216586f82a89c89353b4dcef345434e224d4f6e0d0414ad12ed950178436f9e59f2e26ac77411dd2c5079c8f6189671d3b9094e230184d50cd183120b4ad7efbeb472b4f857cb00585672f51a11e0703bbe5aea24a49c4b07a457f12ddf6328765dcb8dccc1963ac9e696e7f30e78fad3aa6b9fdad9c3386aa4acfb95b1a0d22e0c3014e30605c95955002e057d88650e0432c1055a5a0b84ea735b207b03fff7b0198b18fa55ac0becb6bbf5a54ea2a57f56c5f12c0340aeb8d2c07e7bb7ee366c745aacf5ab7c8448ae05c6bad90854cfa0265631dbb7f98a34335ebb6c040f575fa07f2e5d7413ec848d20b9cfae62dc3b5d2544d72d10d2e590d389c6a76c3d619d9180b0e81a9c241c2f64f4179d51c6b3ff0fc24bddeb664217af5bf5758f2874edb062230fcf8063875bf879cac0bae289b1a5e3330ee1d229cef9e1b9e58969bd32179145967e4d04a900c893de250a1031743078a96ac28171dc53e31445e38c2f83d22473ac8687c521d9239131076055208b2120779cad3965f72f00c517823a826a5e8235d82e8fa59f2e75a98d0fe374fcd8922a9a30f51eff7d88cd98f09f84dd84b8fb0b5ae261884dfefb3065c2e0b8721f012b7fa9d946a0de7e41c8849c6b493d95ce0c8307c7c9641504e93988c25538d7b39c5344128c047ad5d00587bb60facf09205764f997e97188303d98afae60ecbe254dda1599aee658e4adab6d9e1b4b4eb0bc5ce041b520afc55e6b9a1eb422c23b879fd1a05ba63804f603bcf079f32da7d81d1e350ba59bdb4909f27d5004eec57c464bdad51b6e878a6546a52af7161d835a54b454bf10aa5b47308c3fce7c8f5812312ebe8791e9364f70510f2b67b7287bc533c98632b92497f3df990c69f4b77e103feb20eb3113b8864e2e20c73a5a56a2740c557cb64b5ad5004aec50355040686a304c0ee8506e40ec0106521317a892214ec9cddd782c8e91ebb48121acde6b0a2c8e5061326f42da4ac226e915cc4bd78cdb1b595ff9d0147fa0bcbc9b105aad2adc0b56ee480d45cb6003084deab4b4e9717ee5d6d84b96045e6edc94f493935af20114344c12f4ad7596a9ec2c2359ced342dba8d0acbd1dcaf6032876c44b58f76193eb901a248bbbe1a1d6ecf784b0c8b1777ea02e672882eb02a6fc0305982389467ff12b3e5c064f10c3b0437be0f2a790c6cfff32117911716eca3643f6d45816e94dcefcfd9baaccf07b9fbf9c5d300be47fe2cd6a62e0862ca8114714f954f85c663cbd6842a10e6b135cbcb416cfec74632b20b972d068d385d924343318416f6716841db2c2b303d3b5aeb8939905023a1cc3af07bd5113be0dc7c4aaef01fb83b95595575c5e3ed63dd4f15ec35d8ba0cc6f9036b487ba21ade746c0e54de2fe740cd19a888513729cf411ae2ac5ff97b1bfa1a156e07a31a93ea57c4af68998d530f3642ef9eb4b545c420de1af34186bc58ad114842e94655652031aa1583a3521b575ab691951168326f87b55adf8f00eff6bef880506efd5c6455095b502703abc8fc0a971ea4051a3cf01924670ae72048381e2e23c6c280f3b7ba7aa5a44014925fdd1718af3211004014695d9bd3633aa83d3f39263cda9906ee8e2dad90eb60b0a9b41cd2ef0a2f27002ab8dd877bf83f2ebc2de407920502521fb28469b9eba06fa85a53199d3287a6fd1232c6f308c0c51675e0b42b808d8281922bbd3de19f36fbb2076c17f1c4e6205165de7f34596c41446462d3378ac11e1fc968dce0d2b717c096e08e5ce079317d10f67ee308d0e80f6a0d46d35d275b716e77af759fdfed9d40908e18b7e5b516e1110275bdf437a1bba8384c2da22dc1a88cb3c8f787d2114a2e94179470a080be678e0e82a2358673351d2a78a1800e2536142b28e6472a94081cc77521ffa1f2432586ca84aa082a1fd442284d282550b9a048080ac8a6790a2c010af808a0be2efadc28be14f23237a27430c5312de750c5a05a51a87b91519e2987e202551faacf4401b5e90e6f085271d884372e81055504ea029448284ba8c24001bb4694b485f4d3d31fa84ca82231482a6d234a874b9aaf2c025510aa3184ea437675ba1ea1f83bd44b91860b74724ea12506a0ee411185aa816a005425d441281b28c3a02aa18825aa95942128fb5046a1aca02a2214b0333bffb24442018970af94616ad48e442b7f818e506017152955aca322a5164b212f3350e34395860a073501251e942c54c50ca5234407ce34864a0e4a4ba3faaaa8389d182a982820ac557e7b3a0a98cbed83bee128a0257a3c7de027de27574ff55ff24288fe7129e0490a05452143012ba40b456f42013bf87b0fea93e5939127a99190170b72f37902c5e5a91a5447a87650dd43ad0e0a088fb975087914b0aea249834e2860e2359a4e5e46017f69264462204a47cabe208b80fa0f25eca080fcc4f9208554064b59ada25b8e2703a5776c7f641bc1b3e51693d1268182302b64612b27980615e3bc810f4a41287151408b2e93c20b2584f143018d87d630502fe87251d5bc28c8a2572325936935c8214854b8c6473b58ce820232854064554fbf01210fa10c2238bfe41c2bf042a046e8b1119c3f079f435b028c422196c0612207e8c3ecfc6b04a990ae862fcaa1fdb17e1053f03d00ba4d7279c58b2c74aefb11eb0ff8e3a609ba1811e2dcce3238c6494bbdcd3e71cd500250761123014286773414bc4c115907c8e77da091e117cb8f5ba9f388c4b0b52d074d2e2368fb4ba79688454538363968940534f714a958d3110756a8a32069f21e22828604990120c967580578f96906b57b31b01beed82b4768858b0563c2685914e9aac2f12a47d80473758408cc92f0b5f1ad25b203708d8fe815c84411703f22a613c4ae16af0731eddfd0446653a7539a06f70f19caf65122a8c2b6bddae855a03e671c04d28c35d6d189386c09feffb9e953452071103032d6a3c8dc07ff955ae14e044eef5b58ac71c98db138a354f29d4579fe1688632102afa372017bf451e71c375c933384dfb6cf04f7f6d4a5ce4bf5010ab929ad618828f0efa2b0ededde6bf2754109476d8e72677db40ebe4640498ed1914c6bbe3a9e1d924128ba552a1c2b98356aa496ea62c401fcde00232d9b8f2dd155456ff68b2301031da5cebe3c1e00dfea51fb91ad4b98cca0e59aa4560f9100a7a83e74aae36229cc822636658aee7d6a712620005da347b1efefc2ecb04ea8bf49ae38a2a17cc677bd4feb3b0dca4c70d8d7643c8a74f720276c7a8f093ea2ea8f4ebe53fdf61c799935978f1a28c8e4750080de326c6a2e98df3631826acd30e0da51a9dc20e9062e324a6373862b289808cad4aed50e972cef7b3aae4544701c19d3af92fd8284c7f1a874fa4781208027d74c686fb1339e047e183f964cec5e9cd788bfcc00ee606aba153eac48ac217522b5436aff9240dbc07e4aa5485422d520ad0692d437b918117652888bd4bba462a2c4e3711a40939196be1bdd770622f152fd0f6917da714d0794321414fafaf9e418af08657b11e7ba3046a5dd280dcb8106a0135aa5437f40563ca5b3caed2e28a7000017f1d77940d0653c9df155c4cb6fdb0b7627abcaad9055371ffc43809ae3afeb4f41f3bc169d00b4c0e1ed859b28d427037b2ff9c530137b30089f5512e84ca05dd44e6b9d85bf8fa5696bf574b229c1981c91219737be5442fb61ea489d6b4de226afd4a33ce1f87e2446e1c26aa64a70cab23cc62f84b9f64f353058b23f824ea84f0437dcec50011eeb8f1e69160380696277cc3219896c0d3e6882602f47e99b73d6589f2b58f289bbd9f50efd556300b3f9420ad499d71e8e1d2eb78b1e52e7cf110a1302e7cccfb62c79a27d84e4954320878ce05a12ab67d01fb3561b39e251e282c56762d6b079a1ebce78b8ccd3abc29c77f9d38dd5c096f9b4c6c54eee4e5f1dd43088dd3528973940f2762b494a810481e41781e4471f37838a75c75b173c6af5f615616795e2baea627e6160c22e1d414b21b060eee51a115cc6e92e3e3657e573075daeb945c16b2cc29e90be6a651477c74f43cf998769987073f268edc39b1981962a95a0740647012916429e4623bb58dc206e8e90e0c374f80583b0b4ead6b5c0ffbfe609a43bdc0eb633104532227545fa71d015c332a15bde293d0f080537e41f65cfd287d2619c3e6b57471c043247acb65785298c448d673963612df60444685bad39f4f78e61f44e5c960418e27bb943a25656214c548fc4e69a9539f4a815562ebd91c1169aadf3e8b19274ff3ce2199baddac6bc7972841a6b3f9f882197b1e3759ea492314c46ddd9c452634c84a8800e6ca7f381bd68ab59d625a466d0d549bea41a9b9e60c34502745ddfb4f7797bc183e7b540c122121aa4239bb2931f3f1794db3fab9e1223e85baff92b61725a6d2eddeffc93a144630bead974cb47495e34d6975356296abaf7dde1e49c03f80337d1346da4a282ab132f3d3411d7229af559600fa8cc1b212a2c1fe1890a88a1828aa6b45a3a88736ac0c0b5d88390816d625615dcc0cf7cf7ce5a56830da7b3867b48566681df6a2e0c9452bf581c341483c30c435ed8c845d025c42db9faa3a342432d2bb2c70413b56fa75b0541d7c79b556e90c1649257560a528d447d9cd046504dd30444c32b57361605edd358693b905af0581f2f264ecae590ebc2bf38e4dae1042223800871a44c7a26834854838348a98641e6ea11a3bb127ec260c502e67bd23d38ea12305283f0faf515ab2f455b2d268611ef480e97027d909c0d4819359a2d2109f332222a8fa190a1a1a0bba51695dbde046a2d2b50162f288dcc90782ab2ecd197d2d3ed8a0d2e1b3e13e71456417e1d257e9305c96d044b843d73912849df803ef0592efd24ea92faeed6e36fc08793c8a0c69f7aa0cafbbd365458c541d0c2490b47a6c363d77043dcb8d3216a8a864fea7ce213e4b39c8ddaf5853dfcddd7ce4d58bb6ea68972122b08a685cee0b140bf30a01a026211c648e555fe7f3cf49e605504c50eabbd51423c898a4eeea91044a08c4c6538db540914aae0a1edb27628b2882f70287ab1dc68fff7d649ba5f2bc85b6554a41fc2f0b273a25613d2fae7258263fa00c92b75c66d600945b3d87236144428b7ff874e5b8ec5979cc3030198d30b06a9a571141d8ca5cb1f5984c7509561840024f753f8f69a96afa3e5e6ad33f6c2d16b3f970225c16979a753cbe37a4f9b6113e8b3e5da69d9cbd84436e9bc1348c6f1f8818fc96b7eef941a4dc97dcd0b827ef7347e96aa05b706ec9f7023d3948948ac4883cc75fd8021497f3258392a1e98576a10cd2d25419d588e816573fea48f14e37c10ff11757a9081101e8ae5521c8a8601d9287475583e5c5070d25dba41cb65d397faf02f5f0cc9e9d244393e9b5df0646866bd6c461f648e7a50b16b18dfdb756f8091890c2c95b022cd6b976266f87d963b359e4d35d0180c064434bb8ecbba162f23a455ce52180a0243cfcb2cd210e9428c675e3acf2131735be0e58fa1f07eb7a106cf9b2c7f290b0e028113d69b58adbb6408bcfc349c12d77fc532d44121a064b42406272d8951328da52b2552649b9e0d258303cdd73199677d9ce0fbc03c4c449b4b849073863732783b402291063a51f1e1df8c206e4e572200ff70aa6198980ced09f995250d7e27de8dd29057e96e2e3a0b20f672114d2bd4739e49dded83a0295d7012c3714291832c99d009b020a72a2405949a5813c43d2b0711a175bdc02513417ca62572c5cc1b6a136c60fbd4a20a0a9bf8e04303226e6bc09e92228358ea45a19afe37b60918989261972c0eca9cbf325bea035437a8e44112762e671bcc93852e55559df3b747d4e0cb56f6efa8c3f2286f23a78be1ce2b9fea7d5163b56772ed3b1cbbf6f385d647e03703549b8a69405753232687a86729523d4632ff0b7e8337a068dd7f76ec5700fe4a8a257c138123584489cbc874c173a67ed8dbacf54a8438b934a65b9d866b35a93ddaf2d152d5a5aa7b5d5685626cffadb0d7f803dfa6e911fcac66e7373e1f62d7c677faf89a60deaaea4be61dca25f3f189726912e61128c3193c31bd9a00dbee5d0f04bad42e73fc33c74041133d0015e1a7c9dfd8f12357f3d76cb2739c7294eef3a7dc68a6755bee313c36053883423efe1b4ad8e4d55cd32deb703955ca8d66dab6dc4d49c11e7f333806075bdadec887d1b0dc4712cabffe7b31cd10164cce2974a7a4b5b6c536b3379ecbb2758875c2bc338f9247796327e213aa0f76b485f731821bb3053c4c2afc7d60b7e818b2cf4436137555d6d67728aa5d9c260471f0979ba14b15f8b49bb516862214f8bbc4fb6883f0f5c8a280f576fa84b33ce0bd80afe6b5b3a00b2efd2f2c8ab1042ae18792e13bb57080945fd00a21314ca9c3d27fca1a756f6b2d6995ae78fee2a4ca2b68c28a1831bd10e62466c1c4df7dc4ba4311354bf6b09c168375cf7696be6cfee6eb6f55eeb1a6cfc9039509dcb04a77cb675493a6024c2f608c610ff1759849eb4e05e926459dbc525203d3f5ef6d1c2ab3426db65128e1fd939cb8ac633ca6aab4b7ec1cdd006c563916d33ab90e632256bf52adcb88d828dfb8e9a508f329b9b731010d08e481f07b823b983ac642565821206c36a5180f14859837124b0c9610f5eb7e4fe43bae1badf142f13ba24089dbedbeaba509892618b64bafba6512696da475898fa2c6ed95948db44c44d9b4fcfa4e4b59dfbf845c5aa80197ada1468c096655b5733773a6fddc05cb17e0210bb671e3efc7bf7236c4bbc0a94a331fbf16292011549d797bb493e7a9276694f671854461a52827aa8600b9d66999a68fc14a2388963682ac7447d667904519500e1395a5368a4ea004e06d1567e6acce97ffe04374a4d8d476b486683ff6bd047e5394c391acdf501b8fd028ce2e6037c1fd3d8ed50b7b41376a95484c66be9609366d7dc9ec04bd2b99d718a752f406cd0081a4dff5f52456010d6395faabca60fbade05376cc859ae023f54a7472993c8ebe9c7a4171673990dae276f2215094ccdf4b23ed04ca95fdc2214cda05aeba9832480f48a14996f9995badbac916d215606ff1f7d08345e717cc21e01a37d2a6a3058a272fa4caba31e00df4e570b5be9c4d702398b6f767ca864a4a5a2be5e31d39b741cd88df9e3d151369dfd02427e532cf1039786a970ca95cd7ccb55d6ecf9260d246af60d6c683a188c5302b660780ff3aed8824f028f64a4babe376dfe34d01204ddfd9c493a16c4f7d79680f170655ece766734f5f859ea8ccd99824a8a09377f70570ca17120aadef6d2d29aa897d291140aa50a9c3337b42a9ed2be8cae616103dcf2ad6385ce5c55c07c876af58a5d9184b054d4a15219d12b58991df4c31c5421aa0088170a7474da369ff88f53b07bb3bc67d6ee4eac07dbc77c2eb22d4700fda51aa470a8a143260f25b5eb3df2f3935b629771f828f92c80df9ab1f829f6f3361f546a7e0e839a3c69c09b32b5b7f8d2505bf52d276797358b20eb75e17470746cb56f1f8bc624d437eb0c8dc006235c3972f913fe274d7b339fa849007d566bc6ea4fb252f8a763ebe8baa369113c73bc3861548ac57da4b46526925c022e7b83ec613030a5166bb942fb1f8bc0fb7bb615f5ae7874410ba8c9b21c10ca128df0b9ad4bd5eec75780eea75606a33dafa0020f56786f1aeea6bacc31230992671a220b3d6849c4605a3ad9e26f4669e7ffc98f7c5d3d1c78bd011045566f9789bd6910be91553333ffc954da63de7ce2933386bfe017dfc642b31c5914fa8c020848619c0b3f6648fe03eb3dabd77f774a5715fa0c3692fd998e9c3d3a76a79b6a6b9a51835799837294a4152a1218f03d0bde636f535b1b826aec208483da58602065c5d13da6bcc83056f40422002264535471f3d5aa1f3134ba8843842186984b8a3b92906d9bfc35f13bb3cf844a3da2a802d6270c2883868463fd9ee19cc58f0baef1ab93df2266eb7896b23fdc5ae9fc37d7472788a802e26e3b1249e3b24843387a54c2e6691e93d8c37b834cf430c7fd80c2feebc97557c6c84f7435fe5dba0a2e539c271cc24584c0bd95e89ba4de84e41f3b9ca438e5660f5b0ce60c4b7a3c22669ee909ea0a66244951aed29e9a702261a01326ad1a8b3d19d9107237b465d8d48b3a31578b340a632ca33d255472b4a041f5e8b5ca07d1bedd652f79076f84dc6d32fc6c12e177d163c5ae968079a2ea32ac46e5ca185b9032f3e1484ede3554ba5fdcd87e85d9c7b019d7c4b3af12aa8a7d0a61c37c99cc694a5572277e0641b5c029147352588bf9df93ffd84264778943bf1c2932f18507e529e4f45b3c266f6b8844564614fbe4345afe09778a4dba44c44ba2bf675ac8a97d51697eee2db79efc796f3c6f552b6cf51e02eacba2a2b415cb79326863c3b536d872fc10f1726c8ae2b42be542c09117e2ac8b54b8bb19432d39b842207d392389c9655dd660146c145bcb2d049ea7b2ab73df5f0b6b47904d59f60639b6956449a90b7a5dfcd4afce200769f6613738d457a22530e8105d6dd3810dcc52d88482da8782a3fc3d72ef78c80aaa10a472da046f8689fcb890a3168639fa6041346677494e889de7eab3ea9647f6d3c779867d5687f7fc9611af45921d627cf05efe63b2fe16d5c82ecbc461abaa10c29b3f1b862e69630453a7023e60367e2a7d0f3772812bce21422460ac3cf994b0e5bb2c7754b5e6ff34cfac73490089ef9f906bc92a0a0ead14269805867aaa3c81248207c7afb9716eca0a3ed3ae7dc149e337ae79b5b0ceb1afee420bff2e2102373ed94737357cbcff8686bf26f1f7332a96d8ed4dab139d46e7d10e139935d7207c80f9579d36456d04578f9a0535362d0fe1a0d41c2f71003330d01fa5ce425951436b97254e2c48a65ee96041d14266a3ab4d6cba2c0e208e4fdddbe06f0277f91a476d2c86b2034e4ae845222e4c8904bca2531a82a4c53a2aed928f05da9a489ab6b097e12216d1057250fff9f1006eab11b729360e815a232e345ba5890be354cf5991074e8fd56d3e7a1b4c9760969ee7e09b780f5a339dbcf4a01e8d45542fafd507015d04e0a83708b8a09d77140c8c9400f662440ee993101c60d5d2c3f36f89330128e50572d39a84f4faa503ab76170b980d59935456a456a4fb8c99c4661586ad673f7048e3c3c1264148a3065f06c18d4ef0aa841a2b682f764c80a108f91dec2d6b268eaeb01e0ebc401544abc6b1304ba0457fdb1013d906aa7531ede17484a372382d003bba0d6e1ba26ab4afc0f3776851a5c0619bd767da25f33c5a5a2b7d5800ecd1ab574433e1e79c0b9ff4a98d80422d8fce75d3a27f3db0488e161e64d1e90b6ab134829ff8d1322752295232041517e51a65edb95c6c72ca635e85808a72852a159de2025135be5b8f30b930a5a089c1d4f716366ecbce5ad46a4121332b1b2500f5fc4fa75fadc5fc6ce0409fb6488804b9b38d6915d0426d19edb095f9e126442c841e96db391e1b18f2a581418d7e857f4ebe4284cff39847041a531b5860b1f4be7286f98cc16b61c4598e05ba777d19df9c1b337881aff5fbe3546ea01b91f4278309ae677445263f46db06635559570dcabf01b40b0a50ef7ac8b4857ac417417e1509d43b96faf6b433b212bc1f128c8c54aa8b695eaab25bdc39f1011801766b3d95bc133bd1b3bea1c0a086c67cb92d86dca773637a66c893ea7670def7d58825ce3d319c4ca3e95bc4a7d9b2511fecdf603ea0fb4d704816d291f9b21fe5e632762328dfddabf3ffdd646f7299b5b152e92f414e71c5401219f0a284aabcc1c2591f103d41a7191cc99eae231c09ad751c3ecdec5bb30bc768952a3f8644befbbcec59517dcd6b4164f75ecf3a0700ee9b8aadda1565fe427973b3b3cef232292922528625e44836b45f39a15431e9c6df53be46c15635a42f8cf2b52cf2b3780b4800332df57b0806279800bbb084455978750645dc2bb433ce1c94f90438cdbb18ca7e954456866e0c4011119cc6827fa42321fc50e0fb20e7aa8bf91afd7613d1d1e2a1e6880bb8a8aa8240749bd6a036ca9a0492b10924b48bed16e0a18ce6a4205b1e406e5e43b06787a2378b00ba37a8dad2a8f7cc7cca5a9d413d0437c0a2131cfbc61db0b234428d923fb7cb641943d51db4552f290aa91f472c5c44ceefec2bc73dc7bbec99d77f23560a7cd01b0eb16a34e8cce9ca69ac5cc2026556edcefcaa2b802a33213acdc6c68eb745cd102a207b488e352ab2be5ed8dc3dfa54a452df476724d455ddb1535868d996cae202551efca7d285ef11cacdce3082d6bae17aaeaf30fd8f0aa6de65192c11d8151850ad3b377b4e9132995d41a105614e142c5dc11766c7f400f261877990b16389b58ababcaa11cbf38aaf6b3df520a5511bb658c0db859c3de0dd2f2ddc1e0794708dc101d38a086860503a10b6bc0ba2fa42519606eff422f5d61b48fb077af49216f9e4879a307dbd7e51bd3d8cf68cd0c678c4c032751b331552ab74b1f31822353287c16dca32e5bbace49f97e8222f3d6896050e6fb1003382c06a95231c85d572e79ec1cac2d99975848de58cb2776f1b79a6255c1fac51cf4626870d0dcebf30e3c2442309dd8f5397c1751e10342a20d1ab33fd00577806291692bd3ad6df4e28f3f1d46275abe29bd9022c2a17d32197886503a5041d3b7228d27aac9cc6e4d724b6cbed8e86e13490f90dce11be289c0f7fd2f56ddcad482aeb227ffbf73338b43165e5c893c8b43ae608717b8794c1a4aa03e674996b2ca055d6888a7fb039e74e9a07c32f1aaec2b35ff62282a9d2f1df85855b840c40b19f1dab718adaf85d0df9e1f3d22bb868a26f88917de629d0d397c7b261555ec372405eeb5c9cfd1fcf6898eb6d57fc6a9f8e27a43424750ecf9eb285535d800d8862b9be1af961d0a6c72e91e5ea768fee59e4257198f7bbafdaf3f0fa99e010530b379caab2b40e0c8bf0e2648996f1ce97f9c289a3df90cb857694a87f8a1cbdb84f400cc00f78e44d800ef206a0c92dc83600ede8480c44cb91319948802ee6c84160b38606e530e00c3300cc3922049b82a607203933a2bb46359d7bbd899d2561446022a3a73362565523a7f07ef82d399894f67263e9d19ffe006050bc80a400b97584ee2aac7c97158628f97b7797e3a2ab1e4cd15a69bd1364c072596e4d1ea889d560ef393c82cc73fd7292f894537ef83f43dbbd523b156e4ec38ee40633a1c126b7ca8d8ad1c25edfa115bc6861c963e11be23d6dce1516e7df49769c49667f7ef3e18b1060da71ee5e82ba6b388c57e4ae3a2887d3447112b058be4497f0025624d17a77f72d2de9211b145bff138d48e72fc72882546b43f8a1a191e34c4269ad7c39efed3fc1562b378125393f962ea08b1d584083f963970106bd8249afc4bc2a305b18e6da695d1cdf11a883df2d6a50d3a698306883588df55e446c9983f6cd6e3493df0f0c366f3173977f461df945278146952793e6cf9e2c9c6be872d6c88e78daaf4b044f49072ea501eb6f0a185dcfae0e3382a3c2c39acd210a364c814a93bac6953a4e314e73fd80e7b5fc81453a49eefeab0977a08f39b3cbce9e9b0a7ba7cc1e26c5cc9cf61f5d0bb962f246d79e4b0e5142305b1f90dbe89c3d2d16a79d448b39ee1b0f7e7a5be4cdf9f95376c1521fafc5adcb05e075dfbf1e6ac4bb661cdcb8b501bdf587d3d88b11d379a896c6042e794352cbe394c39a5cba1756ad84396e6c97fa521090de7c477edc48a748635c5dc29adc41c15139961db1ccca768ff29c3fe1f84c817ff2e334264d8e3faceb9b1dc514a8f6191ec8bf1d716c3de1f75dce17fc8b1c361584386b03293cafb29605826fa3c0ce12fac95243a4e7fa471295e586c2d5c4df020c76b1716bb107371261796cd7919b1cf2de419a405cac216c26355630e2cd419b521e27c852583459c0ef981e158b46f815b901596b5104135478f32ab0aaaaaa734515361cff1d35e4ace4c8d48164948162037968dd08db5361ffc893485cd62d43009ade8f9144961f38ee183478c3bb7390745618b69e7bc6fad4c0341610d29990d21686594fa10033d61bd88b4bc793bce1c6ec8095bd845b8dc715c1bd4c6a61de73865476713b6d8b96f4533fe7a30b1b1457907d71b172b6fcc84fdc3ef9cb33bc9e1a44b58d337584a0c1f2576ad414a58ba72766bd3e5f4219984d53c4efca05392a7981724101256bbf0d42155acf9a8738425c7516f0e918e1e9e34c21e7fada7e78eb6fb3b4341adb1766fe478ad27068371052a0211610d1ba2c7cd1d1bbd43690844c508488d4d439420793cad93886c9010aeed9c73bfe3298ca30e14040202a571f483352f65f4850fcd2249a7b0e201565c81858bc16088a1810688a105175a4cc00b2bbed8001554f860fb8bcdf1ef42ffa7f008d4832de2750e66119a430751e0b6056bc185175dac600b2f2ee0ee00ad301c403c583ee8a4d1be3bc894f10e16cb1c24b1d1a41fbd828174b0c6d99ee7702a7f2d93833d47cda449d1633f9eaa0b84c65e1e7352bee98bc926c2c19a2e87a816e5bb29df37d832458dd2f315f265c7065b8ada4977f23f193335d8224a878f26dbacc9d1198b8fadc792d01fc39334584a3ae56a3ffde31899b184cf7b93c3f63296a9fcd92839d8879f67b0fe07bbef30f232d854ba34e642fe49f941646c4132e7f5f9c9113fac14ebe77a64314777391926c51e837ad29d50bdeac828f60e9956b7ae12c5ea9b1a75571fa158729abcd4f10541b15c0cd571e041fa892558cc99616a443adc0903e289352f87881562da89adc3a41742f22a8729c7893d8e1be293571ccf41926c628beb5147739c53848e269a58f27f908bfd9bc42b9ca20a131c06c38a29904ca0b59573341b13e7850ad3a94be8b17217c342c7e11b1803b1c4d5c104ebb212ee689a741717d4230725f6ae98a3902ed35450318983b9120f2ec5a52c896be306b19826eb2312586f883641429d1fed119fd6fa5cb8fcd17484569971296ccaaf9234a2b91ceb3086f84c6104121f373c92f1943c5b44123519235644390e31794cc60613d14ac833ffd1cd8f6d3c2088b8639c98c9a652f4106a055331499a1ec4f491c769e82897348821b6c9da4df6a971539c45180c0130d00d52883d9ec89c315588b82821c41e6df5789c524a06b16e881afb72e708a2eff48b1e868f0f0209c4d671c5468ab1ae63d4724000b17e389d2bc74385f5f03f2cdfd1cf07ddcc0f6bc84f3a79a34a8a1ea91a903eac1de3cf8268970761e6c3961d21693ad9f6b0594c33adc81cf956520f7bd8715ca8da260fab4fe8e4f9207ca707e381b0fd0eeff0c7d7eb979d03edb07a382299238f9f98b233481df60f9d539f9c04ddf410e20342875542f2a9b81131f13015549041e6b0670e4ff776c27860718680c8618dfd9b430c5dfe61ce64912486772146182e066d80c461cff31129760eec42541110382c53fadf2712a372d759847185d51b56f974559ab1571b420b10a30b07832f4005156070510671c3baf9e3fb8bc958b54e1bb6a4493dbafa0c8f4d292b206f2c3aa29ed1171d05fdd9b076d9f45a0a9b37c5fc1af6bdfe30623c2bd38c1af699e8a03b3487a799863d4711d243d878ca9ca3614dc93f870e899f61ebf05bf1b036c627db0cad59ce5596c34f1956b1ff94aea343867553dc9b1c5332fddd8c61cda83eff19e724e68861b98f4e2ad53c6158e57bc342ae8cfd1483615de9142daa84bfb0a7d1bd6093737c142c5e58673ce7e8833821b5d42e6c2987a3917b1fe4ee940b7b3c99e372dab4f953ba8525a68e2f878a57c8f15a5844253c9ed42d934a6661937891a2831061f34b2cec91438fb3aa5c0f5a5e61354d162af4ff93d556d83b08390a2215337e5385e57a3c79183d38ab19a9b058eae8364f886e2c31a552124f1e7690c2292c1d9a897ee8380dcd496199901defca89c2323152887e7099e386c27e67392fc7e4f1826a4fd893e43beb7842fe103a610f676aad2674b4b19a66479f64af26ec1b92e4287c201b4bee38bec81c92e4f4514c5852aef5ce59a2f3914b5872867d05f194b0793e8f63a64712961cf631a8cc48584379790e8246f484102cc6304e8e706ac45f0a098db07dfc28ff476bac390ef92ca4e4ebcb91226cea51c409922f5810222c29e4f34248b0195bc91016892fcf9543dfda98123516d5b8b629a6c282872142582645cff9d3d5c5caa90e90206c9b75b3a9529fd61710988e17eea269e03948eea695895ee20feceb301f7ca7d3c18cdc75740fd49ca378b41a223e070f989c1e3b3fe401b203cad3c7f84502a2833552cc1c4748a4865a4d490e4040d058d582ed2491b86a69400c07e3b8068ee0c0a8c82dc80d96d027a61ecf53488fb10573c006db75ee9c73d01fa173310b901a1015572067ec4168b4182e86dacb29fb01a1c1e631da6e0c29cf220f426088f1050e8819db7ecae1899d5f89e594d38505d020656c79c1e33883c7c771a66341a84a0264060791811132d6143a8af120d37d268f00a5d8277f731cd47c522c9dd393a2f2cd4cf4a3b8afc6a3383ab928b6c99c36d956bc49b209c5fef72148e538dad8cd80628f4ffcc72fc47c629fcf495ef791ebf1ec893d4e92b11c2b9343d24eecbd1e39a25c75e8cd8945b3cc7cafa63a86e026968f313d7ce7b0f011d4c4b6e1b32fca5aa7ee2c134b2e4de943de8f86ffc0c4b2979d72f09f36f3785c620f4be53ce56d89657b6dc3fa59de382bb1a979ee18397ff41d4694d8e3fc34f919ab4ef99fc4f2a953d3721082c5dd9258666c63071ec755c839128ba4c917757ea2e30943620fc5b3b424f688fd2b729d448991cba3386291fc23c942a38dd8726eac33f6ca88456cea83ce29abe4c145ec49f53e9294baa652a7882da75bddfb1c9508d25f072162c9f530568c097088356e0ed1372e75ce88730a2b1e30c50aba58001554aca00b5e021862af90367a26ae86ed1cfa06021462ef3ffd9c4207292493ef0d0210623dabcb39325432106010db472172f41c3cf24ea22056fbc897b6e368f1c518e778a1452040209a8f3d18575c7176060200624db5b0cf29fb2b026d696c12a36153c5c7f841fe07db695684e449ce737cb0ee4c88087d7e61f33dd8ec43fcf17877e3c11e3f8489d4cd9f9dbbed60138fe061be1e0795bbe960fdfe1cfac715913fed96832b63eaa9ad301ea7a1b14de84072c7e698e4c6c11e87f4f04a72844dfa065bdc1c262effc2238f0d96edbbbc52290b1f5c83c5727e46a5187ea3e58c4dcc22cd4b7662ae34d8366f8c1da79ab1e494bad6a2ec5425cb586c76373e8433583cc985d0393258d2250921cec227d1c8582cdf7858522996a855bd61ab7722468ae5b38399f5c7d29c515871991d66078b39d43844b14d4c8d74164be226146bac149e730c8acd2eddc5d50effc43a1f36faa4f391a81930b4e00bbc717862cfc92cefc41e5d4e9b3fc8a0b93e27d634a1c2a7d57b134b9aa60e3b3435b15d650ea25f4c2696f5741e2589c1c41a21e65b318d1275bec4de6184ee60d37518164b2c935daa9e53e86f2ab1844893d95429b1ce07413c4c27b179f5c58b595de649629b8ff66923ab834846624f92e33889e6086643628f2b735c07df23d6cc416d0c1773c4a2bab3c942aa11aba63fef183244ff19b189976887729ad3a616b165a8348f4f62ce7329620b9fb362d0f2b8b14ac46a7b17f2844cde4a88d842ccc1e630773487e810eba867cf6d8a93520cb144cbf33806491762cbf56493b776d2234d88c5c25ae54b9feb10e941ec39ce0f528a9016c43ee6399779d24f9d40acf7819de78f3464cc0362ff0e11eb91dde3e93f6c133e5fe754afbc1b3f6c31fb72943eec7329629454e1c3fe615ad8dff58fb6ee61eff2f3cdb9f2b1a71ef6703c0cc942639e74e66155cbfdd467c93c9878d8323e07a912bcc3e661f29cc3d8a5513b3b6c49ff6252f54a31e4eab045938f7134c48f6d74d8afa3c8394aba8e96cd61e9bd92abb0bd57991cf64a5119b5733a2c471c560fcb6ea6e2e3cef8f1428c2b8e3ae0b099781c66327bc37a17aa3b9c8b9bb58e1b168fec57343387feeab4615dd59ff4c1f86fac237161265e9acc86f5f2223e79f4fb30bf866d2ec74aa9b41af6cdb9e63a3efb8c7e1e69d8f3dd847f1ca272e438d0b0c6dece531e4cacf10c4b0ce3c14cd47e9c6a33ec51ee20ae8d8d86eb9461a9f80d3239860c4b8ea3341e7f1ec3ba1d069193590cdbe687381e5db137250c6bc974a41f7564132b60d8e39d50f92ff9857d4573549de36531355e58263dd57256c6546abab0cd75f028de66b8b005d98f1e279feee7305b58f359fc8ce774f8ca6861cbcad1ebe871be2393853d3d693cf1a0f539c86061c99f52a2caa57e10992b2c1b23740689215dee56d8c2a8c78eae729eed5558529eae87d5a9b07694c71cc690525f8e1b4bdebfd0d9582177670acb7db05b1334797d460afb9a875f76d2fd0c4761efe8ebf26b2cf8ca50d8831026bbd682e6407ec21233726dfad8094b74a4953ae6aeea4a1bcbe507e1132bd434da84e52b5aecabddfd4fd930d94dac682e99b087ee8839da1dd31397b047a97cd183df8e830e25b8116247d14ec23ada7132fb3cf1638a91b05c86e031e847cd69f111d6ec5bfdf0ff7425c546582ff6788aa95f6395f00eb73f471de5bd087b07397f08ddf9f0e1445822c7a7fd0e1ec2d27132bdf9f83c6a35d610f4e328dd3e918a103619af9029c74962eec20b2d140c17438b171c41202a0e20d49106514182e3076bff85d2cbab0fb60cab17c5ce1e6c79fee389963cd843a94ad27150b310ee60cd4ad641f8f2b0fde960a932eb4fb3f52b8f1cac1d33248fb2038d35c5cd49aa33799dc2c11a9ee4d352580ec275832dd56236d8e38f42b0598f318f6ab0c5468bcd6147953829676c253b1e39da4d1e85141a2c1fad6f457d1433d69c03cb414ac17b2c65ac1773bef334a49c7e06abdf49d2ffb80c4e9742ee8ade41c6d261a8f810d122a72ec5926b2af7c30f29f6fc1fc2747a14fb77d8d19a064b0f8d28f6241dd8e44b28b6a4b96a2495a0d843f34984247311839fd833d987db93a6a36d9e58bf764d2c66afc6d689fd67cff2a49cd86ae6620e72cc0be726562b89d1b1f3820435b1f4a74e71edfafb23138bfdc7ecdd909721c3c43e9ac4f43ccf68f8b8c4fe21379ed372fc6389fda3b1fbcd5525b653cfddd90ecb186198e0ac5194d8839aff99301796a449ec39726fa7efb8e9238965621c8fa8679b37915823bbc2a7c99d1943628fcaebe3b0b5be16c6472cf2938314731f4239628de126e410f54ce65569c4dac1d57766e761b07f523162d51c5fb2a02da24a1144452562cba1fdc40839ae3b88226249b1f894b20fb104e9181b39cb7143ec29755388721673cc85d8525a0e3ec8f2f8f28458c23fd683cb20d66839058db12288257566cea9d6402c932666b2dc51ce01c4fa7186ddd9091f57f20fdbdf765493fc6cfcf3c39af642d5c7fb6076381efb3f8c0f9b794cf6a9c225aff4914512176328c1a0f6b05490e839794a0f5bfe9b0ea26bb5a1ca3c6cf7418e133424f1b0854f32d79b73a477df618f234aa7e8ecb078a48a9bb13ec748d761adbaaf1027479f860e7b8ebe3facb9f16072e6b0674c7a591e27d7ce72d843b5f38a695ac9e3b05925991c786c9a70d8bfa354b217e244babc61398fc89bfab51dc67738f136acd59962761c7ee554df58f38d46ba9cb261f35cb92656ecda49d7b0e538ac8aec741066aa610f4cfec35c99867d532c94c6e55dfdd0b004cd5cf2d731feb133ac29c59c3a39577237c3d6711c233239851c2ec35efbc15c0e1e48863dce6cc2c21ac336e31f7379d431cc2486a5af6e2ae54a781d86f5a2e44d5ea1378a605827e58beb99637e07c12f6cb1663efe1c4d62cc0b5be4509ea3589ff6f15d58cd636e638e5f71a1e920c5b7b09574f815936b61895df971de91ce9fcec21ad233ea98744eb0b1b04f584af2915ddafd5c610feeffcbb2a4a33b5658b53a59de50a649af32aa0a5b8e1a15b68a94e354a9a69d316eacb1c39cc286b4eb689ec29e994c52dc10b3e6228535ad3b8449ff5ca946618d63591d54d44a0ca1b0c5881d484f88182f4fd8425cdb14d3244f74025111836a63b3fa28663e76dc183a07232d70b4d842036268c100aa2aaa095b88e633cddbdc8e6363930a9df39f594c406e62d474e9256c1f684c9ff42cc4839c12d6eb94731416eec64fc27e49fe53abb742c21e31aa5946e7b073b73ac276e93c5ce678643cb732c296163f871c25194af7c21817b5c67e9e342ea5ba085b0ac1723a8cb0fb1f222c39538cd0335f4b3943d832af63ee246123e5a8b14965e590ff7284f30861bdea0e1d3f7e1c475774a105166e8c051584255353aaefb4b93403844525eea7dbe4991f9cc6661d8476e8875e1ffdc1be22d99bc31c44e5481fac31a8a4ff90c314f3d8834d3da4f21c7e8e930779b0575605536f078b258bf3d224a7e6e960f99e08bb69772e7739d8c43b9e77a728bb1f686c27f9ba724eab1a3f70b07cbc9a5346f10ffbb01b64d9608f73f47c32cac4065583e543f97d87162e419db1985c4afa2157eaa7c172921292e33c357799b14e8ef3cf3cc7d71fc4cad8039354d908cb31e5335862de3eb32ddf30970cf6eec8936ea824b31d6d5901105cf145c6de9ba34ebaf1c3f87529d64ebf9852a8bfbd0f29d6d8480f273d84349a51ac93df61beb893671751ac3975a40fadf55cfdb2486a07430bfec24805148a358fc7a0a5297f2a15145bdee0932b5edc8cf4138b644c4a22c99245d25bc04f173c46186144a08a2a90c6e0628c6202d00179e2343fa92b62f0155c80c15bf0d114563c003b91e44836240593135bdaaf1c887886076f134445175a7016a70b2fc2204d6c398cca898977e89958c4642253940db11a26f6483a016c6fa7abcd7803c4d0a21d8c2abef0028c06746181ce400622400515545091017740166268d1812dd81ba01500c1150310040a618f7d371ec779ca22a90a0cc2f2fd21fbe377940b04c2769d5453e8b8832bff4d80692cbfe6bbba7fa93f94cd5e6c814401fcc15639ce1cac6c5ed576c260b5ca00fa60d5bae8f50c0fad0fecc1f691a4df90f2c3845678b08d5cc869cd3659e441de5e54c01477b08d4ca5cdb5b95364e65da4c08b2bbc10e3882c0075b0871cccf44e8e7318ced60273b044a49cf5fa6d578ee3110dd2c653ed78e53b63070f1007448507f0069a06dae0a8a81aec41d40dd5382bcfdf67916478c69261a2dacfe64b39ab2c90c8d106d2c00968c65273e261f43ecfc93cbad0e20acfe2f0b9e28b31ae3081175e6c9185810914421460196bc737f919ec3975c7fdc8dd315f1065b07a5cddb2bf0f2e7750164984ba488105bcbda88092b7175d98e90a80e08a0620197b87bee3c147489158170e28ba52dc088e14ab45cf93d28dce673f8a3d9e99f451ca9133c588628f725ee4acdf1c1ad2a1d86a35cada59faff38038ad5a30b39ce0bf227d61c64f9e5cf919ed873b6677582c72b1ed7893d786aae183ac789a5830e7288dedbe531c76d6249f93f766263d5cb3a4decab413ff2587cc6462e137bb49624e78ca90bbd394cec395f4f78e589cd3371800aee124b1ef3ddf88c81c15962bd9023b3cc9dba4aec41cae3d0523c93c351620fbd993b7cfd492c9e6226956d1ccdfd89c34962adb3b59314a3569e861c97d2a71c6938486c3127d1d0931c453e1c0df7882583771c153ab43862cff1c5e4e968e9376ec496b66b57a3837c718cd83fccc9ee939cb788c54c53ff373d0a718a58d37894ad8e3f405c22d64bd7119b3a3fd444bb8b31bc303c1c22d64dfa81ca98d701153005ec7087d874abccc25ec7d870865857c3ef4273ee8d2bc436e5b12ec8e434008623c4761dc598371ed67d94630b3788b5767b2773a47d13e42a04b14c74149beb14563c200f17882d7974237b493d402ce79fe23ba8a09a83a909f7872dc68ee8202adf6da5dabd0b2db848299c1fb688908d9e62e56811069b226de3fa60d45f9c2600c38b0e586010c787ad2bf5a3cd4a71f158b83dace54166b248ba249c1e5693bca935e9390a39c23cac33353a25bb161a929cc5175750b97178d83463baf8f018064c61c504527077d8642479a4f4f4ecb0cda4490c1d7d1c20ae0e6bfc1ca59353bef9398ae1e8b0a44bab98f3c2f8859bc3f6411e8f1e87f741c7c8615589516b3a47c661cf2957c5d5fe307a731c1cd6947341c26cee0deb5c8e1c58c7c1a5ab8fbc706e58bafa238fa6362426de863da8f4b16ee2e5ded8c6360739ae8e8b0ac78625c43a28dd7066c97250b8356c1721588eac60a9b4ec620cb4e2d4b0055f4b3fbf591697863da8eb903ff4091a96dafa4cb1a3c5698c19c39d61d1f010adaf36c74c5133649e133928bf103f3e7065d854faf726875616998023c396835d0e9ff028d3d818b60e37547e103ec4b0070f5167933cc2b05a6d071d9b2a860921302cb2b3c143c363848cdc17b69ca3ad4e5d74382fecb183876ccc1f3c2eecc21e33ec2b6c5d4a1553c785f5276af5c42b7998fd16560f22f1aba3ca1852af853da6185363529f8535840a9a57c3241fdfb1b0c4d87f1d86c8c4eefc0a5b079b9a234b7b9ace63853d9a10c95186fc61bf5285453658e83851a9b0e4779439d2a3ea3e6eac1f62dfc5ccc9296cd3931b3ccea4b0986cb43ccd2439071d51d8ac8349166315148ee771ed660e7fc29a0389b07d2136ce09fb46c71c2b779575c7b7b1a9854ad01836df884d58d3738e1d68f0d95826860b2135e44c5842cc3f122585f061de4b58562526c6a83968d8ad843da4b9cb2173218aa693b0857a866c0a4f21f60709dbe6e4d1d9dce408cbdad747f9b23abad8087bfe388a79a93762a635d6142575dc4929974fb808abc9a5546789e8860a1116c9db31317fe810d6582b79d12955638db8f9f5fbfd79252984bde30ff5e17e2cce0fc292651da875aaf55680b084cb7031bbc3349698ac32684ee10fd638b50fc2c77187e47d701cdf865888f56099cf1cefa7fc3c58c2c5b8aeee6d074b88b4eb39758e2ae33ad883f87bfb418472d0674f900d293496aeb3a4952be7b869e1609189283b27df801c7eb074d5f91567836d3af307f1247401255c0df6ad4b7da939b49c6e3c6319f9487a3ba78e065b0796f262480915546816ce8cbd638816e61fd2e4c951c616a621de1fcf63489fb2c6cd60d5a4e9a3e85f8493c16a1b3986cded5548e92363dbe8b18812d28b829562ebe83879e7189fd271526ce2618688b8db112997a358d383921c074951acf1219795291d6f7342b1f585ac9c3e0e277e89098a35868ad81f9a4fa89cda27164dcd8fbee3ec89cd2f6d900fd360b04eac16ce664cd7929677c6892546a9187a3f9da8e460f00592f6609bd8bb4310ed786e3ae9a8893dddff8765628d57c1e3f4df0c134becdfcdf3787c3ceab04b6cfe9bf9839c39da64d49a6096d83f7414fa42224f9c6895d8f7ce634e512dd54dd028b147e89e60bfb946d263c326b147563bb77f394a9ab23058499a2416f330dda789b1a9038f1580218667c022b144ca1d3bc7cda12b680e0689ad2ead3e332c7f18355354c105b71aec11abe96fe688d5f37497544e31ba766bc45a31c6e6bd3c1b23160bfb952247cb3145490d5bc4f2f1c57c104655c49ef64c729c0fc67ac38958aa438dbda96abd17838825a58e27e358454b9d43ac7d9e219627f538575c0a6688d557ed2f9367d48e6421f6fc1097bdde1f78e8138c108b7e472139c73c1d29b741ac1b59511f2306ed6082d86792d486cc9a04168865ba8246f8c409b77ee98001628d7ad71d5405c3af3850708517625c917400fb03311f953afcc605f3c3aaa77a122177f8207ff461cfe9bec74ae4c3f0410800338c0fcb7a14febce3cc8c1901800c6c0f5b0792e2e78ff2c946263f617ad87a563e48cdf914554c51c514dd09cbc3125fe791071d4f6e181ef68f29cc5d84ef4839d200bbc31233e64b2a31934552b5c1ecb047884c27d5a932ed1785d5618f1e262b89f9c36df4e9b0e7df990e75532fbeb882b6d882adb80079c2e6b0fa8f7fbc6927a4bdf8156f981c56d9b38f23576b61028bc3b221cb36a42e5311d1e08069c40c996792498cacc0deb04f5eb4fc15de99547281b981c8dab076201d8665a884bbc8ded8cb3ac56862f13349ccd8b0a5cda0da17d7c64baeb235ac6bd6519adcccad1c471982a9614b178247154d1ab6b8e8cafabf30119268d872d87d4e8554172cd4033bc3922a7d7d1fb50333c3f6313454fa283eb2cb54c0cab0c56aa6b1f55a8d0c98e49bccd56b996163d8a2e772d499e6a328395874a1c501c30b07906162d8638a1becb62e56b030ac9965a5d7fba3112b28181816f18b6134588a211dfe852d9e788c1ec56433dbf1c2662371a12e2c3169ce9b9d79e3c2e6618a9d392123d816f6989d0fd527c77a8544302decdba1781024ceece3ad011958c3b2b07fd48fcac942ccd9d8165bf097c31816f6881a9faa1af67118e35b18e6420bdee21c9501bbc212d732473cbbba9f4d187c4518655630fc5889057f4101abc2662bc1a3fecd39fac02db618e3af10c3b1c8091815b6541fe9772a78123037d6394b7d21d6608c1186175fa8a068911e6053583bdafc61cc904962e42c92ae68375780e18730296ce134cfa9a75b8d2c0aab69544e793c3a1a28ec5d66b739b2e41df9276cc922ea6cf4fded4ed8374739588b9ebaae8d2d7256ad9a79c4873761b1d49421fa075eb9c3c6e297c3e6b06426ac9372c3ecac4b583746c7f868a95255252c1791267e3893b08496854e2b29075e226189b1bb7286f208eb45c8891fd727aa46d82c5db4a41622776becc1a328a7e115619d3c31f73a23c2a6394acc89a46972d81096542934d8e759e60e35968f33463e8e43086bfe39cdf8cce7410ac27a16b63c84e481b0f75a554ef7015701105c010265634d17d3c2dd5a4c582375b4d1ef2010e812360f53aee207f26168ba03aa843de3ae7c2c73c8b14393b08da4947378f8a1fa958a84656e43570cf1e285183f025ba91f5523ec1deadf8447ae1c1dd135880a7c2d820b94084ba81cf447fd9427343c843de4956435a219434f085035f6881763ec50297f692804d520101509043ae35a4e0e72250d6b81fe609d20ea614e4e7125ea836525c7ca0fc9530cb3a3f66089ebe8733fe7ddc9171e2015a53b48d541519101cd81a2415494290ef61c6548299fc3b4972a30bda03758735f7ed96904ef8fab4aa80d8a8a2b680d0edae1c43e7e7455a167f461558a0fec83067be5b3dc4b123563cff9737e3ef56688656b1944c5e90cbef838dc9cf268ce59248221c6172b501928195b481a3e7d0ef254aa62686429b6141ee653860ad3912529b6992061a56288593d89e11a18c59ae9c38ffe3e0f37a26088d185678ae2383326ad8c162443b18ae6ef50438fe7759836a0aa01098a2d5f520d2127f9c43a52121a516b4f2c1f5e4e79663c28bb139bf7a659f40f27f614f3f4c3b59c4d2c317e1e863adbccb8d1c426219a2a773e27bb7026b68f2b8a9e7c8a1a218c89453ae6f8d1c4944bac7b291273fee438bb628935e7f2425d6995d842ec43be747d4f6294d8fa32580c93c954916312eba58d97ff5c92d8720ea34fce2952618fc47261c3cd8609127b8eb69a4b72ae8e417ac4dec13b8ad1543985891cb15efe8818534723d6b5d0cd5110cd0e1f46ec1f87ea5159e9fd5d16b15d5f6c4c0ad9f5718ad83b2a42ccf441c5a312b1c79bad742522b68e839017525ef2109b9d87d6879863887db783e535950bb17eae1c23c6e44fa5651262ebcdcdf16d476b1b39883d6acaacea09b348422bb058c07a1716e0c20b301c40051501d0410a62f3dc1c04b3943ed787221d3210ebe5beb4492e87991e919180d8d3b6633d96445a31e5907fd83f2c8e75281d17510f630de98735a5f8386ce97ede94f246f6614bb3959a1f6845e6c887c5f3527a064d92acb6426ac83d6c36973146d310170c065f000c2fc2e082c1e02faeb832a41e160bd11c62a57f050cc83cec79a23c6eb8201e6a180fcb6ae438c2d87ef2f2b8c3b25f639b96293bac1fcaeebc52e688304940d661d31839f0faf8bf8ebfa4c31a3f3d5dc568fa61d47358ff572a86d64c7c68b2917258d7366d5e55cbea8cc761ab7cb65f5a65a1d981c3163be812c9531deaff86352bfe7da5c79973f070c312f37fec0821d9866d732c8f2666fe8dadca830c1245fb52ead9b04faa9f0e2de86b58f4c38e770ead83341d352c4136d74dc4e7f0f2260d6b5a862ecbc8d48a150d7b909569627dca492d788625750eac2fd733c3aa315554bacfb1469661bfad30137a5537a7840018166031b8015450f1842483d2d79d632ec8316c9ac3f4d5613186f1be020b2fb6282786e53f8fc532f9cf70911a198665ed42f565f83d4830acc92c453d4ee8f2b37c61cd9124913ce36b91bc36d20b8b97d5c7951afd03ebe8c26a399aca98de87b14a99905c58e373c65c971fa7741fb9853dea34659653795c9fd6c2964273deae881574cdc29a24f32cf7ba2c924a5221ef987308df51483b8b24b2c20a798525464abe31785cf931a8249056d86af3c2d7bca354315e0118626892560004571c20abb09f6aacf9e4942c929c0a2a180c3016b0802e5c0c15ec165b30171ad8620be6228ca4c21a3b73ea4f07b9b1a6980ba9fc6917e6b18516fc61b0098e165df017e5720adb75cc4c9e62fe76e6a5b05e595cbccd53a9a1a32aa3b05898a64eea10e96743614d1fa85cca21c78da89eb09c79c5cff0ab1396c9dce8fc641a22ec5d641b6bc8e52056eda6ec1cc926acb2f3711cc68da103c15072c346938d652df26ee560336151ed284ed5448878e71296bc6a17346e58eccd51817631c2f02eae482395b0d66ccae8151d3048013209a957464848b4d414f38a9f924e7e181e24058687711c1212095ba5c8f2efc97b3e185ff009c3af1083b900c38b5702c3c3380c90475826a7ce41d37e5dd41861bd4f296fe4e07242bcc61272b87df7615f6856847de32747513d11b014e38f864f0f6149d739f27083c7e58f1aab4986e73867197f216c3a29aa39e7bbbbd883b0044be6b12387b07920eca185c54ce95192f234f6e0a33cdb711f7fe5fc605189a166442b426d7cb0ccc59c1d8da5079be64bdd8f8f07cb7598cc7c7a29faa377b055599aef0d13911ead83d523fde460ad18743dc473ca50d1583a99e7f51171b0d464a593fd6eb0750ec63e93a78ead6cb066ccc91c1da78e7e0dd6348bb9c343ce197b5861825ef8de98904383e574fa4f3b6dc6b6a271452de6da9453c6ba1da3a45865b99299c13efdf9793e30657030c9e39072928c45e6729836c95c8abd5345b110d2a6e90b9362cd98f548b58e62f3b8494a4acff73f58145b46cc91550e6e537e7028f6a8a29a5fe6e0f9733028f610112c4af346b1147f62998fa3edc48b3f31ee893dd5497a76aca40a974eec294132ede61827560fc27eccbc1d526365137b9eb80eefa3248750d1c412f12a79e49352649e89d5839e866a8d89fd6ed39d877f9a2e7c8935e49d8f442a461dd9124b3ccb93e3d1bc398e2bb1748aad6d944aaba85262cf69b5f385e8245629ab8e0fa3366750129b48481fb1f2297d88466289ce71f2ca61ae8e1285c42a1e53453cf09853fe88e573186b728e76c45e1351e173d8b91cd888357482e7d02f19b1769824d13eca452cb92e5206cff1f7f18ad877567e72b820aa7922f668cf3a424c0a216e44ec414e8bebe9cbfa3f3cc41ea7601e7e180db1faa724773907bb1d6121d689daf179460d16924788e53cd2e9a87e0d620bf6a9d27cfeebe03a41ecf5f1c489127173852e10ab8ce694620c2a1f24078835cce40b2339b410fd3f6c1db63f928c1fd60e4463122dcdd4af0f4bef05ff8eb366728c0f4b4decb41dadeee56b0f4b580f41f74265f420d3c3926e3727549f872574adace5381ef64f497fa932a29d6b492aff7fdadb0e6b49079aafd277ca4f1d36cb355731735162860e4bf424bf1fbdce5be7b04796b3d29be3e99f1cb674956612f3ed768e230eab745546b8b9d0213ae0b0de87d014393f97c56fd8429a74a93986f451ba61999a1c4214fd9a1aab0d9bdd6c0cadadde58f3efbfee830929d46c58ea4b730e62cc1af678714b35a71c473aab618b95af74c3d23abea4618b9457e36d4df24941c31632e97da0eb19f68b56217d7aa384d30cfb47ca7bb17f3efa5419b65bb9289be136e41091618f2be4141e670c7bc7afc8f2c4b0477f3c396d2d6e0886614f3fe29f6e03c37ad14e437d10f285255ef4f46197789423e7857d73fc7145f207919b7761f3eab495eee855f1e6c2e6db95d1395ea1abdec25ea6b96327c76861d1954cdef1f32c6c9252b71df3e65e0a0b5bf74d59aa9ad4c1e4aeb0cfa84c9fe6bd8be9b2c2e67793a3c4d498228490815558729ef9789f6f62f410a4c2aadbf1d586cb510e248f6e2ca751344c0edd39fc3385c53ef0eb92fe9b2adb5e805258e5c3f97819b4324c4814fee8c269e6149f31100a6b9ab30c731d165ac5145cf8167bc4600664800214d07230bc10238c2bc0e0828bf2842dd9d7cae7d87963543bf004e88455f683bcfb519345521859807105166c0ea24006284001526070c1c5d1c6f29d732a5a394ca983dcc0262c11a2a34f320f4dfd11812ab8a0801d8d6ceca1c590e3d879f21053c88435c765d48b6917f387c1252c9ee39a77d8e850533101fb1758b02165644705407005a312f68de7e147299f0198843d33072167e4383cf91d91b0e5d1ec14f3bb443d3dc0e0820b05e011b6b8b995be2aba011a610bb1235c630f8d8f26caec87c4af0c2cc2be1b77a2c9e6eb3b26c25ed9390e25a73835b11bc29ac2685a8a61430c5f852106aab11f8c7ea8b40e6522f2602c188bc422612888a1f57600c313000000001c93862281402820cf75510f148003592a1634342818201a18121418120b44a15020140c860181301800068403a18030547409c27e959d1f24040b91dc315e2b2032f9bde2411a27b3a32e4b2f430828d37f738f3296f03de6d47a1bdd6a6e39c3c401654099b26b53691efcd1ba6ac6fec8c6e5b4178ebc83359c4856977e41d3c8d3c46e9b2d3dd9f68885e101329ec4d2d18c9aa78aaacc74b6d83a557fc0ebc114133db99bf01f9d832299c3f100d075397db9d0b24a0eb64a4d3b31e7c9e5462e2ca09810aa8b111894e52df3bde1fcdb195e8bf09d2429876086260bc86082ec4a9f4dcc52a3cd51f8505ef273d41833f47d19894c3a5cb4e93004c815b0d288439b313519495b82e9b345761a0bd8270875c6b8abedaee8af8da77a890109b9fbd8db786cca8cd04750d817175419c25671a65e616b46495ae448045444a6f26a259897cf9ca686fd699dae52abd5e9e4af1b84de6538b0491e8378850d41d4a88d326cfb251bb37d928f0b37e44f3d1da9c5f1f2d3d49299b2a8fc62a5752b198ca7ff0f4f37a517f875417a9dbb5de60e4de639e798c0c81a1550863573d0cdb198e6dbd5f65075f0fa9336a89edd161a38b8291fff5ec698d68e5193e810f5a4215b9b89557e5b9fa46e783b754744c18582533a8e0f84f6d0e73fbfce65fd85c150f0a0be424144fdaf7bffe5bd3f03abf59792891662431e738b4d527ff8bb1fc2ec8d1b5e23042dc5d3a54625639d092ca2975e38e90cef42b0b39d3dc8f70d6f9e4c559253970750a6bd1b001851adb86e6d1f05304eb260a808dc5c03e738d70233eef99a5777631a8ac9b767af484c10cda06f095eeafb4276a799bc572a29f5d7bf0d4710d145367651d46b5fc9e4af7b2985506861480df91b1056451e04b92b33d9290106ada90aac96bb97e55828e1804e070d43dd8a4d80d12e5599d38b409ac0c2816d0338ccc05fccf6eabdda7fa87508128e7ed78175890d5fffbddc4c7249486dbee187cac399cf5b9c9d3c56d654323de2b662e6830c675ac24e9455de5ab18f959da2ec3dcc2ee3e23ca2811cc0e795118a7d363cc104ccf74a4a7a0dffcd70c3ef256557518ace28b99bca2b05958d01d43b8cecada88559952a457f75667b3467caecb0c70d886e08d8eb2fb8b2bf060cbca8bab567def875600ddbeb1c66bf283ecc045d59e3f1417201f37083273f49520260fa188b27c20b1ea52360e2902fbdcbc40052170c3283f6e2add966553a75d9d2360f6d520a3ac355e63e4b1800512fbec9a01d2a022f5b8435fe5b29881a4e5d2ecc1a32a5d78063ca875ed0d75ca7a4293312c96e291754a62220edb526d4e690325c0e538632c54dcf86909609d4d04fb29633f178cbc599730e83250a57eef8d01a8746e2ba3c0483f51933e24544baa1c934432af3910a2879bb7ebb5474509eb806d47fa2546626898ad06d73dc9a66255ee6aba5aac6cb362ce1b0bb1aa58ecc6b683c21c642ac2cd8e8682985a744e131eec3577885229a14b9527043f1e250888e32cf6eb20a1184b4e0564aa8a2dca78c611f0f19df47fb30fe84fac344ccb52807e7bbdbdf0a94b3969ba6ff3aad3dc46a0d464e4ec0625d7db1a21d1260badabf57b9259caae55191e3b612f9e57e070034a577f7143d2088c1dcc94e05a2846ae8aec5c9400551587b7a8d5e37a1db1872c857449a4feda71f08514db04df21a83921f02111657809a553e5870e4bb7dcf57bc415300a0e7b84dd11c38d3a1c911650813009391bf097f938f6158b333c48183ab65a5c2b9e7da96767040cd21fb287e091b3aef696c8948131581decf379d24d62e49fcec77610d95336fc8f893281562a484a3c10a893b782d9bd711c68cdb66a3125f843857865ce2abd4758ce82c265267402ed50b12e22984bf3bf2f6454ad01ba0864000c356917448654ab4bc5c96c31663653562aa95be9fe04a16364e4dac5aefe68e32ac39d4cabf82c5fc2a91ada41440501e8c62f458476d69538d5152b62077ed03354ac362ac2fda9b036e576467a8e246d94ffc22c3ff91043469b5fa66955b8dba0d75420a54a0bc0ffb0d5c775205fcc55164de91f60e7d77a46dd935414323d0d0faefaf3ca62a37dca8f95cee49a46beb08cb2b28ec75cdb50ee7f7068d859fdd2d880a9001fdb8f4362d68410b1d4820619aabeeb9693603beffd7001a01cd90694c57294bccce7f9e1e198a32353af251422d01c4421076fa93e2ea7684546cef9921b6f04f840706311cb59ef64600c21d136b16fa048d178d7a068eae42f742670d1e16c8bbf2dcc0470ab423045fd016cfb8bf05d0ccb68b9f211333cc5ef05053b0e3c30df8e883d47a520d3d071d745c1888022294f31aedf798c2eec49343c243df143cf07a2b9bfa1df2920694c938ef401a001d08f7d6c0fb2c423168c407ecd293c18be9d1f1ed038d61df8478d56d77efa557fe4f388297b680e966d3b0bc5051e838e868bc4b44d8daa8e4b073509867c66725820bb7b0a71c5848cbf000b198914d8277491098d380e4133f2c141207fe16efb157aa1a4de4ddf39e41ef921ec0b3af07d38bcfa3f93d2fe125b5d99bbf218261b29039f0c9bcc35912ad0c217021f7cffdc60d61d09bb08774129e172e0a1d0fa580327a323fbb42bb4031e32ddcb9af598e2ff6c2090b5a15425461b750b8d0e686134a9d481121c32c433dd04e7a870500d43b49c305a3e1a82093d15ec043872eb40e0478a02c6d3411f23448da8b932f21a10a26a762e0388af1d3d239986dd5f35d79dd1b07b3f7773c058b496bdc1955d3e7f6efbd140262c6fe33e3bf08dedf53084b3c00bb8aa4d2442e6879848c865ce0bd0124e58641d44c2c12ad84c93ab992f3830339357b64fc0f2b9a7f53a7f67884c05251fc2d5a99edbd992ed8cb048661327ac806dca036ff4e49e9250c1a8024671ef3ebd91dae6f5f9572d3fc199511cd28cf12a83f17c682935a021eb0437dcef291a70cb75699cd3d1a6a3cfc739abdfb00d502b673a2987e8b2060b8dc51627d267fcc4c21907230081582b6c833c6a4f66577e386cd7aa8fe2f2aeda8e28030b557ba08d2115e7fa6095c7658b0fbe46fcf17ed7c06716ad7b29fc632c729e956c3b54eb46a90da3bbd11c61ee459f377fe087c5c821a8f320172f6c4dc2df551f7598770121c26179cdccbbee119c7002871695271d8f16e405f46707e2c0913250d117126f4c2e4fc5b33ffecc311e6f62b16729205caf015bd09d4dd7ec8e60299c6877676522108f663cf0a9d004fe2399fe353d95307f25ec030bc8c81fa10140e9fd01d1d41604f393bc4c9be836786523063164c0bbce281f818990875b8f149a2c3b63e56972df511dd54663a66e5f85850c9b92df7b23eddcbc491f48e4b00b9c339fd32978f6396a7c3dc7fc458dab1f1b8e2d3ff832728ec7113c39b44b45a8ed4afc11ff08c9d3baac89325216358f847c844d0baa7d8982ce8478b853801333f0054060e00be36bb8a98daf72080a0c5c14136a4a3aa28a0b01d4c2b1386391824aa7dd1caf7f35c8f66e2f64bd1de92cfa88c394e3287728b87e4c37d3ddf518760c18b286d1f8353e12011ae83f29603002367d49978a12c76738a3c594c723530d69cfb12a2af401fd2c62ea5e46fcf5c1c66bc41240b6df140477bb5cae5e07a2847c3920805ca2e31a382e5690b3855c8b62fbbd104a3fb1dc05e36eb00c0a5dcca5bc1ec9218c46a0b6022630422b4576e0a1d2740fb118000affd126985005e371859b1db54e337f3137d5a85442538d6bf861eb7a67a4170ae045c926d5fec73435a78ff5a3dcf70675844fb968bc2e3512d7cb2aae8ece2d8e4b37effdce5ae9e31afed126b542d286d5af160db9ff452d8ed7b3258cdd46d026ce9baadac6bfa9fe6d2b91f1518dc024c0feb6360ba1246741ec2a05b225b7ab95d11f168596a862fd35ec5cc1eea968421d3533ce354d9232c00af1f48b63fdc9d3c87a5dbba85bbe8c804c3c6c1f12415f3f95e104c27fd7131e58c8bd78150900aab93d0777c52009324a1aa2e6443be78b992ccae6edf3cc9be17bb5521ae83470e256df333e6e3cc12fad72991d2cff0c9b3293d3644c3b5cc1486b742e4f9f70e3bf2eab9641a8e4a68ac3b22deca14d423a5222d50c36f399cb022c61f84c342d1612753c90438163b09e4339ed2769727a4c682d8afc60937b59752e8841b7854e2ab241e648dbc63ea316f0dea960ffce65addd0cb884d74c76665e9058dd2d40ee8e8e641acffda6104908305ba2543ae10d5981ccf7dc91b56c32f4ec76898c84e64f0018650fd3297aac4b35e1a0a6a161c9edbf8c10d154dfdb7d1949af3e6120ef41acb8a82609b5fffe551f7d48ea1bab7f12c70f8deb560a91348f7aae82ff38ece5528802e6020e9b60967a484bb81bbaec5bbbc2941545f27c0124c96ca07a88ecd11acd270ada4ddf81e1bc19daa8daa7c3d564397d50621ea4ef2f0a848052dc4dd656b6dbf927816097479e9f98eb0724a7e4275822add1b836ce8a53c84c5590b2f8f431043a133b00aff8a64c8b2d2ab307980763ffd4bfa89e61270d052adf706bb0222f32299f81613fee83326a19a64aaee2dc836b40247346b0d1359edf2e47b3ad91b07f354f32f73267c7fec910d62928b7b805698242cfdd5333c3b4071983912350360b2291758894f15de28c4c5e1b24f56554150f9d492ad665ede75469c01f563055a91609eec27855fe97ac65d5ad1ed54491f4a3db6e0b87169ef9e2e92ecc4903bde9ab09a93df64df15f94f54a94f36acd4cae7d8c277044c6e3bb445cb152e8a5d132ca57e046efa1200e28abe65f979ccfd15a10f8c6117988e36b11c94139a5d860072e12dc9327a0074823ff553e639a582b3c8a1f4900bc496220fc8dd949b71c2f4c96deca5464860f26d840acaa912019fa6a5e359802e30727189d6a6609a3f3780168b5d43fbfaadfd6af8813f6e049a263b2c7eb8909a6185cd362f1d4e4bec14c2cf69b0e9eb3ef18d11e0718ef7c2ca4ba443962e6fe1af26d81e220c5dd98c4a26335b5e217975e587b2cd80f91424c7b27629026b62ad66ef277f2e67e181780152fbab2d4617b67d7c0ced6759e9818758eacdd2d8f530c991edbd5b009bc525ca4a468aa18187e9d19ee28629af3d48c2b35e3fc8bc18f095ea258d6537b6d4c2571bbb8e52c98e4e57ca0e877269cc085d81eaf5fd3734bfb960a20bebb301eebc9091e4b6d8cd3a308e92401c254677363dd474488a25712a89ad24ee4349940b0830c22425f69189ca4a4e4b2fb592a87b53e6b2a09058a71295af79e7cc9c25aa6c065a23759aa868f2f850b918d5562357ac2c368cfbf1900a397d06477fbb3f6e16e60d381c3cb6f518d943250fdbdf8f9b3831037c3f2810e211c4a81e36cfe3a491f7c29fe2c7245dcf38aaf030e6c77321d63ec8c92f1e7963163d962c6b6f2a943e6c2ae4e43657defba6434ea312e828f63d9666bff493301fed3a90134f1ba481fb4860b776eafb601f35efd6dae83c4e7d97ab5ac143128cabd90166d23304b4be7fa7a1293107c216dda28e92623440aa2109a375eb589644d628992ae633341c1833aa9355421124548e8a94828c5eeee977735eef3be58b4fd8408efb71778d932c3e477fe77fc4d0a44e8430d1e1000cb54aa82854a612ee47ac40bfa47610ccbb9e16710bdbf229dfd85dc50943c06e88f99f17b0be9a0ea2f86fa556cdf177db9b05a21cdba82fe04131bc412f61a0eea6ebc0ceaeaf402257c8f1d62994cebd01398b8973793dbd8629aaad3569f17a00264ea268fb38d26244dd9d01192c4a1a19306757a56112e38d02ba93935a6b4362f0e59d88f5598a38f8b5589f4e5ac71d7870ab1b133173a315fb1f8232591b62fd5e38ffb11cc2ee4f4f749890fe2f589c8f1ce397ab1ad07be0bef32e5008b5cc3f4928fbb97fe73eb28d01a4e434090532d2073b9f926d93a6419db68afef496d22ad3285e14bdc9fd83658d7b4b910008cca98961806ff5a80fdca3f163d3b598f7f6cbbdad8df0c266aeb794d94cbbc398e6304aaef2115dfedd5cf20125dfc5c7e3ed0e9f925078f044dcea18ba2a35a596d08e036f89452f52ac2cc8b331fd66ca2f34802afce9592905667991c61c683e003da718586448923081e1b57314d434af7351ef6a93590bb311e13278b77ff93d9d447f85b2b92aa153d8999b1988225dc4dcf3d6dc3bfa829db06bf0cb9c5c44f024c5397f96128c731f6aa50dedf468440ade671adf67645ef89fedce1269c0459436b5f15b11edcf761ad1d45414d9a32b3932a52a5a1de35e5366caae274f325d42f10ac7e60ac7007f0599987292a5a0338cc51b842d89d049935dfebd6947cc6cae5e1dee7b23ef69623eaeab69718341211826b5c5e563d2144fb4e20e0e339dec52f621bd891cc6d274492a4e30167cb46cfe7a6de6990020208dd1d5b5e2bfa7f6eab8850c08280182fd3cbae249bfb9949b06b59598585573cd0757eec95cbfd458750ba27a500373462aef82e4baf19225f432593a3dc9679ecb2b6696b22d9413ea043fb91ea09ed2e1f82e223039777ff690593a448b84a087513918515c12083c7fc0cbbbf1b70c85c2725e0027b77801920551f20e048d01168b151431f8c1e9961580a0725a6b41d9c31ca2421380267ee9ebe3a0a17f03cc6886dcef925fd7a7976702a86b2bd80f350c1b2c3b01517b75e2f6a0d4ada5ab4bda2bc042e52586e16856466b0a2f7f6b731239b60d90821082c70b66aedf589f5abef1732cfc785b0395b9a806e0ffa39b0510040a31b3852729c7b0b1032150030f7d66358f927fb84a8761cac47f8c3a4f3456e972fe4362fcfac0920f692b9bed09358820975ab39f3daaf6585849a499aba9f5ab0a96f773cecfa1cd34cb3b18e58120bbfb5a3f5312446c4c4288fa5635f4fe0a24941aa236231d8eee6968684c3b23c5c0267573fed8cb3d3501de83a0a93bf1eb329c63c0c84131ea0cb0bc387ea2d8a323119d21f5b638c60c0c15e90316a01de051e13a3bf27d854f1f29fb65c9b8e065d9e9a5aba4b9d44e84a3ecd7cbd6653d134e49d82ba340840aa057bc10046d5180a8fa17910bc88e6389297562130722315c1ed31af9458ed5bd881bd36155f8034ec8f43a1985620c1a4e13825d240bc94e720adbb7894825dd1f7834ef370d1abfdaf497b1c1b4021dbf1d2a911b8c5c0982d4641a3ff2bffc2875e9bb26531900828305cd85a56353e9fc9ba3fa56126c418a432940a10a75e528d7faef904b1e5aa145ebf7d5aea7de736bfcd2f43099df96e5b4eb313a515e7af9287f8ac23a0d4fdf81788d1a7ef442aa51f2fc74433f1c458604cba7d9ce11f1a091ec7299e81b08c02d62cda911f1bc3882dd9d58529135f0dfaed953598675b703fdc0122897c4ca37ac2cb350ed28a5fbe206a680b742e6e447a65a323e80e2ae623875128548ba1467f1b09de0fb392cf1135203feb67318b2a5e2c3d12c524c701c4da48a4c5af50fbcf880001889754333dd7879462a40c66e6dc5e6f115edc5b39cb9cc2e8724530a124809d582b093d11b9c42f02641c97a52149e0e5f5dfdf13a0c312267757c73d0b427573694ed1e8ec158b85a14eba92f952447e32227ee9a17eaf52f3f76d993406c5c3c9253b4e5be81a2434a7d208d56f0799fead470a04140feabd3c086659ff9bd67b48622364e913e1021574e928d30a87cdee12c73a17af4abe043f7f1766d74b982dba24eebf7e9de2d58cc3507f4896f2d553de805380f31463684d7cb4be4a12a6b5bfcccd8f9fc6e2bd0a5ebb5d3f789bdd2e5a86cf3ef0a0e880094df8285c50c18777efebb4a059c44139c7e36a94193767e3576554460c46666cccdb4244d8185038030de604bcd35116d6031c9cf0e0af76215b0e344d17d73dd65f2baf6d3b95042b69ea7d4399144fbb4aed66aabdb05fab45babc4e6bab877050e456b3ce6d3f7fd57411f5c5cd5083cd5fdc2b8a2e3e16833cfe97485ae344bf1b8a7b977764ee03d7f4f60d9dbc1f6549b6700b481a8afa484a263a057b765173255352ebeff1b872803b9873d149f00e5baa6bc07897585d82fc1f4ad89c5b8a828f9ad7837d68dcce8e6a54f52c53236375a31e881b4ab8b0238203ff212f49da7626f733605beda5f45b3d10eb55eca55c21f88bdd8fb6269f1aaac0746ac6357b607c161b2f4a4538b77f4b1db1b6cb316d77aad011bf5f32aed5fb65ef7d05fddce093e7ac2532b7e95edad05b8ab1e4e635928dd09561d2c5c6dae86a917b68f786920876c2cb4c45e6bd7759eac31f473b15f5651f405bd87906ed9b41561393f83c4a08262cd59a6be1ecd7f608bf47ee13978d3ae4c84edd635b9145ac77bafba5c599cae1fd995cb55572e60f95357ff3243ded3ce5bcbba914da36f9be0fcf204a99778aa7e9d4e8add9ed7637da94dd5a8862a8dbdd4468783c43c5f243b1a5623eba716d53eed5c7b29aecb82e1e8aeb6bd65e9bcb0421d20d4f9dbf8bc046bfcbdc3b84d9da02ed23cd993e0a3a99ddae3faf426836c8bcca5af6cce039674aa24e5e440055477b70d86692b7c9103d3bb075a6ba724573bd799b852f39b918a03e00689301346a2f9e166d054fc3f7250bc533c09ba0a988d65ab4a2f4d87d30b8b3aae15b44b3bcf29cc784eeaa77e382fcd91ad29c3b71cffcec535157c340ff534be8c4afd37d155f47f8ed1e26a16fef181800d982ba0f7bb8c5cf46901103e15fa26cb1508301d90a197e6a23eb9d48ed70adb6f74102789775bf3257fed02deb32db0d77e75d6a231b3d998730a170d71feaae2dc28067f444699c8b42f45252dc91df78a92bb36b7f90fb944058ea38f77f53b80bac015086a211beeb8b57bc2ab0bfaa5f2ebf0a9a6bb2090468e1aba0986005f0a07640b5ebbbc53cc770232cfc3066dd2f80415ede8bb0c3b4ecc34bfcc5639bca0c7415a4630b170b1cf3a9f98d7b13c41495f2db9f97a274988bea0bcf6fde7c773e7101fc6abea65c205fbe0d8bfba949426f4f0575b73c8c4c8fe153509df07975744ae079876f052fbe312e7b07885c3521b7a57a086a1f597570509250c12a04631794890fd6ca5c638a79695b7e71262f1d5936bf298faef3af024ea775793fb03b1c6d76c2b588ddc6b82cc72d557ff4cea292b54dc6e5f459d5febb4cb6efa433f6f778edd2634cdeed9f258a1fb8daf0ca11ff4b21b44b8a64ec0db561cb9b3f841357a4777253d0ec2a8c20956c581fba118b4eef4616e5d5b97efb0c6d7cfc6c80453b87061a23bb07902b3c211a667821bfdcaac3e290d3ef7a6e9a9da659bb107bdba18efb8ea36b5a021d9518a658f8f571a11cd8d105619489d1fee2cc6ae66e742d39a3bdf33edfa9e56f55735c543e92d69d3b16f7ece6f577e4bc890ab769e8645ca16bdda776ef97aa99db587984d1e906c73cc9a3f6027c117976cf99ed16aadaecdda0df844cea783273baf5e0a753fe842c6687949b0f7a73f6b75d032e21a9762ff4cc6b14a61249746651a534cc789a3b7ff1d14810a41a7ba77f8191f17e277f9da04c80898316b2a94e22a5501f72c0c70efe22adced2b4b43d6f010b23c1eaa3713fab4d85fb045105c4177e60d237c573bb71d5510948b4391e1e2f99bc2104128567f2e06c476a25fd8a95aff4e8f9af71af467cd91a896bc886a99163f88b30fea14706c7895355eac47b900c78d1ac6b188cc646abff9f0f80470ae8907977ef89cd272dee861c3c7286f60b3ec3623d882e2b919cc74272116583c439567e97a538de36f06baed9a5ed6c7f094017206510ca21f40166a3609c93ac91e0af339c25a9b41669cf976bbd533d98c30e8e182ee4e733b77809f5e25b7555f96fd4768f59e20ee7bceb0f15b6a98250fd2179baed403ce1230bb5d43af7a9795ecaf353f469e903df5e01ee6772e2dce314d8fe8cfb6c1d6dc74fdb4d38663f72f6bae4280cb5051fe798d8c1022aaac6b14d5bb970c34506f6b63d2bd409206b143c5e8e360f37db983eaf5a5f9d003fc1d1b01afe20bf19456f2e9be8040649dd9f15754ab45a756f26a705e55c2f73771a4a66bfef9ae96ad0abdedc1f55f5b684badac7db24f440ec228ea31f0097c79e883dd4df369b71a4ba1fdf1204176d1af24d25901f11c14e7981753c16d98e4f579ec828f3cc332ce968b09d80c49ea2f15a62c6e1a30c9d4bc0b63a65c89ae59735e9d16613e7588f612e7a9568997a6ffe2aff96a5a9483c3b65dcd9f5d992347f5157cc0dd1ae3469d6a49dded8062386c68a667bbc42ec749c7f25f6bd9710933ba44f575fdd68fa73a5ced6a805f9ce17f629660e1367f706902bef9758012007b5a283890bfc5e281f340d4cd7465678d420df1ab6be475d15b35dcff0fd8181c2a7c6c3b5463bef0fc0b4089e971e7d6af0f5d978267b9da23ce1523f67efd14eef3a2dc8c7ac42e2cdbd22777070e0d27146a272c84ff46e321731f89a002fd98cc292aacd69b0d13fd0a677e7405fa2ed59588b13a12c6998315fb1912775c74f040a39418a9121205ad4801f8142261d5e45c019491a2074d17e7d0af9848941a2588b5f7fbe54bcea29db94fe6d018722d82bf2170489f4d4501ba273f8f64f580a650005036831b620472475a20e7c4d24df8736b141c116cba7d4608cd2f4e95c69559afe48f09bd32686b3b099be9bb1b8775f6c3d3cbdd7c646b667ca54295fe8c77c8e3739d6ccf7d79cfd4ef66ef3713c7622ec0fd9796d38d2b818202363c5ff42a467055f9177779bf9bd3afce0372d3e20d9bf275786ff563f08952e90e02bd8d35c1eb07443441465db26cfc5f46118a66dee34c785004277570b6ff4638ce32bfcf10db0bc3a7a1c966d45cdfbf61ea445347a75457e809662e5c5ed2fa6299ed98e10013c9720286aee5b2220f5ff2a180c8f5e0e699250617795437957a90438edba75d9c42b7f57d8f092012850341db96489aaf675c518211cb98d546982d30e302cf10fe47284d048ee27fa07a564c7aca0a4e4ff8821063cbb2820c543f8488757a198c098b351d23886c8eae04e88cb0a249558830024fb0cd483a4648c3078ed20b23d0b2eca578203d14ef6ab150d07cd89175fdf64e11628fc011e83a8277acb0d19e18bad645f178df4a5c05078e8b8488529c5d7d8a4e1a40b50891b87e975f2bd2cbdcef3ccd49da6d1bd114002addf803dd6803d905a671ef314f1a60219652d4380debba6afa3e700d3483583e36d1554927c69f9e9a08f245361a895663f55d4fd197aa24c497073a8fe197894d4e7d02f7a3418aa41e02c8a1e84f1ec58b6ee27a4fe6161a065b076df0df7d91123e64b82239e5ed19c901db7a65f1a5532ae2236f0ac7b716a23294dad3b593533ea8bf1b7b1cd0361f39a035944986a8f1bea21c87de5f8e2252c81ea6cb799aa18a101a89703b8c5e0a3ea0c8311c1244cc6b9609821e6dcdfa1c8a1c34f1d7a516ae2ceb3af70be3cf61d451666c68172990c3119e484322323ab0b1fe89426103e255bce1437673045fb66f4c5551d240bffb86a1092c92f9f748b184c80ca0c9c6e37745e83301722a90d8679d904ab31dad19f88606dc5d60605d5390920fbcb3f4560aca878f8e61c633baed32ceac290b8fc9d4836997faa4a1e0f2a7ad83650f6a22ca3ab80f2a3e219ec787c19effb7f062ad178df2cf936e848f30cacf1a6692e74520eb0d22a8145a1b9b305c17c89b968bda706ea7643d426d4c0b0e248a8b6756540146807326c1463e9b98c5da5949f05624998a46c25674672024127a70e931eb27a773b3c464d233240687b432139d86461d3a7438fccdb2381bcd31510917420c7b96c1091459594715de6ba3fd5cb559f61c9db0bfbe7f33b2f8f265a239674b7956d1465b02e31d14ed88fc53e85b18749908dd16600790f8ab30bf2c288352f9351431fff0199912750b5e6656b74802b24470e88afc2950ccb2ce4fe11f474bf6709c8e21cc2ba12e049b03185bb3dc7da2d853a6e851e903e4df61c5aac435176095a99cb0b4a4cc9db566d6a19565adec0657a8533a282d95181498ca1d8b3e46434553f16411d608cfd8644adc094a9624a0a2bde2a694f579334275357133f216df8de9edd049f41a587aab579491d04a5cc2970de3655a58dc2aa627617aaaa5627a9f9dc05c44c8f4650cc3ce62fa4f746604f505f44197fdcf3774c2a3789f4f2aba63e12b554ecfbe84ba989d2dc5e59d39b9393e54537453a8eeaa7f5e14e3586a061d2595e9edcc8b29addce9bf6245579a7199be73823d69cc13a4477c9606130418c9b2d5d5c8fdd19751ac4e9f68e8749a521747ff166e833036f470e3764331c01e3c24f05fa068c3824b09eb237320270af7f5c4560e3fa26121e49ae480f93f96378832e1a748134f0ed9220a9ac4abfaa121d0dc6fce9282d985ee5d1205222230dc1b041be7b23e4b963ba32a779c99ad6a95c4520a0135323e90496de066026b154df5c24962090f20b6d878191c2e4da8481ede2d72fa57cf398d9164098c42a9cd5a03e747edaa7e7cdf254b4498cb79b77641075d178675052b33afbd68c2277bcdbdf0e78bf541cb6c2b828552bf3a169f4ac247788b49902ec1aa3e59bac5a0f750794d5bc90306d8118004d28524184759722632540cf8f3e8d75d81890edd32a04f31a86c7850b2c6e94ae5044d239878eef42bf8f075311746dd8b366bac75bb8acacedd0a6b65ed643e715dd9b6cd1d979e6bcf6d983c1f98ef6a9cfa2ede4e972b33246ad4af6a7ee5c15eab21f57cd54d8b7f2f2297e2bf6e03889b1aa889c1ad18483c8bce155668bf5044b9baa590e145bbd19c1de97d9d3b3b4db033505c255330038d345132e33b09a7f6ea43111a64eeca5854caad3ae09537d7cfce410c8a5dfb65876108e4e658e7a597e59793ec5fed256ca68c4a524e51043499c66baf1311f9e9eab7018ac9543ae0281280c610fd8cb4235b51cdb0379a743baaf82c03ee6b97ea2528b9866cf7b35771a16d362698e3d06c052c56cba87f894e3d2a1adbe38ac5562d11a60a89eb8398c08c93e61881866da869acafe536a2e82472595b8f3e172aeb1380d3b581b17559e727b81feb5e317d3019acd530036c81020e2e04eb0a3130b2a4d001fcf33ccff33ccf2f16615b83ad35a5b79e929412ad363206210d2699529229656aedf917302c000080c20501390adc0a210c5e4c3248ebf590783ac5fd344f0d3a9d87048b164255d2e021694f557ced68255def909c7aede42a99ec90a483b42bcb514b7430d521b974584ca5de5d6e4c744856f5b03dcd21e1466a707753daf325392497087b93a23c27b1c721a9ade379be7753a70387e43433b9e12f2521e237248c3ae5baa17143d2674f3aea68db90b4162cd7e28b0caf2036248c0ca64754fa5339a23524077116b43a446a48b43fb569dcfa45e9d390f8b1f677cd3c8679d09098193667482c71152e358ea7649b2131469fe811ee2943a2f677c89018fe72ac6d770ada1983aa9d1a312468af98fd9919652d61483453a5ea6f04437218774f3a3d4c75aebf50aa9b3995b1f64282ce20dafa65c4459fbb901e39171274d65757294d3f7b0bc9b9fb1f4ee9a9ea142d24db9d8a0d9f399ace71169233c5b8fea931a964311692a39bd452ad29db83ae901897796ce368ac9034632933c7bfac1a4d150cf2ba4385c48b1f6338a59764a7cc14122d3cc9ab202de5242924a66c9be28e08a1e71385e43995a22d2c87cc19282468b8606ad3ecbcb54f488a19e9551535af522724e5efa5cdd38fdf4b1312cded4254b8b112e2322129e3a9a062f72524759f90079470a7f12423c9e746d75c06198941caa91457a94badc74894d3b11642fccb9d6a8ca4fcb68af35f3192345494e9a74b9d95122341ae7e8eb22e21af0f23257af24fc928859178efc15b351d8ca4946fc3cbe8f841268191dcb939427550e2cef28b84b57c57a1820c73cf17492dee396a9ebe1cb7ec45e2a6b30e5e6923542a7991f0a3f9321663be58e52e12737757ca395fd525e92241d495ce9d43b94892a3437b8ad1fa840c2e922cf65cb070f173cb2db00d510b2a7fc51649496ea51649ed9745e582d687abd022316c6b9aceafa94b3f0b55cc937ed15a168999afe551f7429e38168957676254c7b4c1874582064b15f4ccaf48b4a0f623d4c51588e6386169c356248f50a7d272e9589124bf2af4699c923edf2a9283bd990ea53955242993dd0fdf94affb54245ad4241e379b6ad451919c624e4ae57cd9cf644e917852747812162b7f6b8ae41071caaae39fd5a514499573f1dac753cf68a44852b12feafc3af63c1b45c27ea88e1bb789224166cde1348cfe4acb4291fced39a78a234f8908148929a5afa0677f4fc9b4de49e4ef8c8c27122d57b7875c3b91346a534baba98d969c48f2b6a862327ca3a88a3791b82ac263149ddfac829a488a51d1729aab4c29574be04c2485ddaafa34262cfb3423089e325041086c3026923bfbe28f96e9fe9e665c0ebe44b2c814566b29be6c4cb244f22875a21f54502592e4872bf3d710259284ca6d3af3d879e7ce24123c55d2a8d64b2241687ae55e1de129c69148ae1c1e4fbb4e7966141289673f9742a5d39e921e919849d9a99151ab5a4347247f6879be509139ddd78824251aec5309bd6122634624ad881f91d61b7e3be345247665f15171392c94149114da1f2daf94e74d1391a85ea9eba3898864cf2969980971f7d61f224963483d97eb1822b1c4ff8410a65488e49ca308f51da2a5448810c96641c6c5eb3388e40d75c9367ed5e79220924b292d99f3982a8d75201264ee9463c6191089e59a794e5afc87a4f156911f9252e686e9184fb3cca60f49ca33a46f3615bea9e543626e6ba7f9300d5fed1e126b7c6c84be3d319dea21b16486bdcc973c24f769ece6351db49a050fc941868896fe0ec99676eee9f59f3a06ed90f85b2742ed728db80e496fa5e5d26fe8fa9e0ec9dae23216b5d4679f43c2e8faa8a53d392486efd0f1d2b13d1c87e41f6d553d7ad55c337048d6cee19afdb4641cbd21d9933effb4d9c26e48eef83b99a9643c12a403078e10e4d07163046d48ae24d3c5b65508d13f1b1294ee0a6f7395f99c5f43e2e864c1947cefbbec6a4836f5cacb9a3495d83c0d491a7407b3ec7ce93b070d49499c4cf5cccdaeeb9c21f94356fc929939c7cb66480ce52a575163ca90942f59765f961f953264485242c95a5952c790982f7fca1562e7622ec5909c3f6f12e179b6a21b8624df10a23b6f70b3b58081196da747a7b4f1178c060fd80b462307dc85243799e5848c15dff45c48cc699663d854d1847c0bc9223b588a53bb3cbb16923f8c09a9eda1b2415948bef027b659948ee9f25848d0e3b93a84ad8cbafe0ac9b1a9e348d5ac90b895abe673129bf12a247e12774a6d940a497fee9f3b5d7c0a09df273f76cc9d592b2e85a49039a5685fe19df7e22824a81ba53b8dcc1ecb2428249afca95f114fb5557a42d2ae7c262b0dd6953b2129379358b1bc23ca849a9014b3416e8bdf868d88999018d34bc9939ae3de43bc84e4aecb143abefe63899590a084f49c3f956ed29f938c440baf23ec640e3212cc42fbb47e0cb2ef39469267bcf59443e8943e6d8c440bb98bfe751723f93ec519d7ab4d616262242865a73b2ec766757918c949b5fafa2a63df6f8491d8edc183a7c90423614fecadcf66edfc8191987aca637892559aff4592a618f56134595cdd17c96a5b9527da7bc9d48b04d5ac982fa7cb8ba4dacb3fb90cda646c779118e7eb3cbdaa8ba454ca2adbcfbe6fce45f2b8c548316139eb06174959cba2a5fc07e1ee2d924ac39886cc6c9168bad7b3e9f57e52652d92ead24a6f8ad322b994dda7139d5924f56c677491914582894f3953beb148ecd8f0d94a5660d1e9524166c6d22b12b4ea8f7d52eab13cae48d2a1e47a364b29e50db62241c76c2a1a35ac48d0d97c73507d9b93b98ae4f4bf1c74ae85cd39552488c9de2c9ed3e6ad3015c91eccdd62f665bf2454249c6b74b3110b4a7d0ab7b37d2b638a0471db1df2724a91b04164870c560ec1739c2145628d25afbca4d1b46f41f01824c18c22d934e8af4f13753ae54491183e5bdeed240b4592507fb72384c5f5da40917c1be3fc34678cf94492a713af5dd35d17f74492d272c992ac18cfb813c93958fa8a975daeb49c48f4e8d9fb6bfebbce4d24d5a8e60c1e3d72f88e5ec181c06822d96396780cd30ae2ef4c24a893db4199a66efa8989440bcbd6d93d97dafe2e9160d9e467f9cc2c91203743c81c72a34658a612096797573c775e0fdb5222299d6ef9ea5fb2f5279130e3fba783102ee2794924a6f91e95eef14860da4e7ddb26132492c4e33a2dede91149b93d7c0e9652ae741f472406eda194e624f2ca3e8d48ea73cdd129a48c48ce93397aa9ecf3f58b488ab55edea5458a48d0dc59ef55aa64764c2292fad39aa58e0611896ae322ed2b8c695f0f91b47a755abcf3e7271922d9af47740cd5163a9d8548d0aeaf2fab6496722144c2f8678ed8d0f2798383484e9adea4c72ee51e1744f299aaee0dedf95020923f9b58494bbbdb2e2012ec6437976b6a5ff50fc9751a26b5ea454e757e48d837a14fec5afa96fa90a093527a3e359dcc1be343b2c50c1e42a825abd1ec21d9d44a86b35b0f09a322ca2fe8768719c993f9307948f2d394472de852d996c0e02151cff48d94ab4b32d777484c41abee57b543a2cce650fb19fdf6af435265f368ab72d221497d8dc68a5cc57c2a6588947dc0cc2139a58cad70bac32ff4724816d1db49973a33173d0e49fa3ba56c1b639caa183824c85229e95731dd94b26f48da907bb1cd2ec64e8b1b9284eed99af69c0d02eee9f41f2ada878f39dc871c122f4ca6b049bc6774d1c69a8f3824f9859cc69c9f733321183824677da5ad98574739fcbf051f6f484cf1ea63638d87880f72dc40207cb82131a49aa520be596cc4e91f6d58d5527d4e76e519dc21e240e8320a71dce8614619f96043625b78bac5a0c9a1e34672bc8f352456a633b1497323470bc171388f3b1f6aa82a9dda189367636d87c8198dc379d415e1230dc9669fb7725a5dbfa979e840e6030d49b19b7a5de12bc5eb36d6467698a183870f4454071f6748ca661ed4c6199921d9d5b255b8a0d7f1ce8f3224e54d3e722f87f8d3225a991050ed061f6448f4b9a4b26d274b7a1488e00c1e32402e04bbc4c71812e7939f4c799dd3a6b387c780471965a019c487183a3917949b4cb7310d4382ecd6e5f99e3059e211548f1b67ddf00186c44c3ab6848d9b85b8d858d3d1438445f0f185c49d53fd14358306f9f14272ea78323d6b123277fec04717923cb9a5df86a9f18a732129e8bad30b19da42828aa52dcf4dd3c6c35a482a2f9dc4c54c16126492e6a1e7632151fc343edd26952bbb5748d454ff97b1a298d9bda30c1e36ca8715923af37b92394a8ea51f5548b0f17f1f197a2a2458859bd89c722f40c3c714928327effff9f8efa0487c4821295476a818644e14926378cdd7ab6e53b213f122dcc0e1e8810f2824bb8a8c22dcfa7aae35c701041e5e86f97842f2e58b416eaf273910ba470cf0c6871392376cda26ddc92624e88fbba44a291d738736d6cee0d1036d048623663ef86042b6a2af826a63cd07396eecd8d13c86209272b4488e1b3a7eb017021e6d860972dc681e24a0414393f1b184c4f92017e56d64ddc88a1e3e949064796fdd43cc439e9f871ac948d40fc2e2e5724a79540319c939d6af84a305358e916029c97b1819a4c83855600430a041830d358c9168f9328d5a2d2533532281a8518ca4cefd49c674171b6b96821ac4c0418d6124478dd1225d4b0733991ac248def8daace53a0f1e490880c0a3cbe0e13dba063bcae071021a347694c1c346176a0423d9d345fb5251ae6195e00c118c388ed68174dcf0420d60d8555b4afc58ca778d5f24873cd9219643abe18b04ad23fe2e66ea1d064605357a91a4f36e129ee369ce643051831749614de7284a4d44e8a192a8b18bc49bffb11cf73a2fb6871aba48f83d95753237d35f3a1749e92ca6a06f615c24471d957b949fafe7ee168915ac2dce46bb4fbf82e024404e031a34dc8c207812412e04ae618b04514f3ae6f99c5a2478064f1e9bc91ab43007937933596316c99ab7ad664faf218be4a03efd7ab63e1649427a6a71adb18c5158245cca75163ee5c6b9fc15c9a2a3ea9a0cd91545a8d10a5624b8c6dc594ec713ca2e3d6aac2231830a27ddf46e342dd2c37dc043c71fda31722160aaa18aa42053cc975545a928a868428d5324e9b6902d21326a47bb420d5324a91dfd561747c7f3682912b4b2a38511a2922241e75c62a75475ce2c1fe4b8b1a305a91d063058c10a68d0e01aa348d8bff29cc25677a60f0566d8888109541449b253acdf8f51633c4da944a146281257533bdb2a95ed278122796c4c6755d737efd12712e37336f4a83d9128aab2abe9e0ef16d48933911a9c48345573f9fc2952939b284b9b7e9a48f6fcbb7021672612cc839a51a54f337857031349e13fa658577f8984bb4ae1957ca4b5c912099e6412f1d9633a75a64aec39983899a3e3d10314352891aca6e2dc7aa38e956612893d7b3977452889241137fa3d4f74fc1f09a3510312a7ac340d6b3c2239d7e55a104a8e482ed3311fdf43a7203a8d48f6cc14742fcd8804b5dc5b7b9f5b44c72c222945d992f217a664d22a22f1cbd4da5353447a8cf0b8f1223b46aece088e7203f98e916246a89188846d2ff12a911a3c9688480e3342ea78c5f8a1964324a89f13254e2ebbc86e0a350cc1752639eb4e1a6a142239e90e13da7e42249889b61cddfc43dd1f44525e8b1736774124978a7792db1e67641e88e4bab42940248950f294ca99f11e618f1b07ad0435fe906c1f6478acada6c9ed87a4a47438256aee439276f231cd1a635227f321a94e5fe548d7e83fee2139cc32a9d7a8d14352ace8b01e22cd43b25e18cd20324ac99f7840428d3b24e6b7b45457a61d92f46ab465b6a50e89331f9ea7294807336acc21f9677365d14948954d0e09fa3f96f298467c5d1887a4f253d15cbed7ee1d1c8c0bea6d65255fb933e5d0b894d6c9abf186e498cb2cc9a895c4c6cc0d8935576d15ee6a43e28e67c7d014e3727a3624576853fa6cff2e5ebf86e4a4335e4691ef4e5d0d092ad87b67c94d2ade3424470f192f65121f9b3a1a126d5b35e858fa19926452495e4d772d8c6e86e4f00a9d1d34b58be66548f214f5af591b83ec1319924ec99d5d26a53124c8ec0e2a7ea85133213124657b78b4cd26840ea330249bdfe6cb97a22ae8c190a0f1175f4ab6453d9d2f24e58ade20bcea3dabc70b09be9af22bc624f382a70b4972d385536f7321e1d48b59ce1e4f7cdc42f27ec5e939958316adb590346afee73deb2c245cccc8d2705fa62a169282ea14bb92ecaf9098b95b6ee3a6564892e9db74ecb0d2b9b80a896e6a94cad01f84ef860a0932890c42bc3e85a47c933f5ac1745c9442b2bfe518c53a7a7bca4421513fced576e8e8fd50485031abee68ce13926308a1b459bb4e483a99f370676e22b56d42a26e87be97b54c480e32068bbf365ee12f21312e6547e80655b1d750c2ff9a4fbd454d469214bb98d556764f64245c59a9b6cdf05a29c7481257324c25a152122a3546828e494e7f4a6723a26224cf5b59c5d9498c2479bf0e23794783509a556ac398c2489c13e6a156ca4287198ce41c5d4aeb29ffee1f1849f139fa839fb68afc1789a7f32c954c41f506f922e93be33feb29f5bb7b91f829e668694768bdcd8be4d8a73f4f5f66bbec2e127ed3b734ace7cf96a28b24559fb394329a8ba4aa329fdfd3d8a3838b24613ac65879df2239ffc7aecca27747465b24a8160932652a992da24d65488be4beb8dad15963a5ff6691a019de47bd268ba4daf05b5b97f92f8b45b26dbecd29be2617d5c122f15777fd2d845c55f78a0469da57e1c17c63e38ae4eca759e3970c1dd75a91285e5e99a2e9a49d1a2b926358ac70721dedfb5524e70eeda9aad7d632aa480aaabb4568998ae41ce91e2fb79d0e111509dbfa5ffdb953240651e69d5ecd43b7f28029124f68f1942249caec8b0a4a55f7e28d820748919466f7fe3f3c7f96d02812d448ef8cb1517239a248b0f1f01c4f93a148d09cf46f43abaaaf3468a01c678c54133c008a04b1987cd64e4e9dfe3f915817ffd564700db5df13099763ad8bdcd41af2772241bec7e449c6989779e244b2eb5ff4304def39086d2249a84e3acbef07b91a692229ecfa55d2a6938904a174c8ca51f92abe8c89c45129e6f6d7bc413fe612d6e74fda628e2592329c4e69d749b7a5682592632c25b38b2625923d6c90714f299348d60fd2741e0f49222926d35e9ee98c4472b0d84964899048cc689946353b8a92de2392feed2ef452ce70cd76f40a90e001472409ffcf711129aa416e1e090d1acdc351081e684462a85395c9c2742e9565448226cbbba12d76c161010d1a3d3cb088c49af76b9341a8582643044f39504083860e0f2822e1fe643ca9ebaf754a44a26e85caa5d346fb204424567c59ae99caed9a43245ebad4cc17691eb48648b24a2b3115c39f780b9170e5a1754668678c84484c8fe3e115f7ea733f88242daf95d3992f88e41fd17bcb16641e210f446228114aee0d88848ffbe7295f5de5f80fc91b226b9696de99f143f265cbcca773ccf9dd3e24a7d291eb9a6d5ca3ce87a4d41c47f4a6189754df436258ec1a889faafb0b95551cc18143af0821a930d597ca6caca5363c425091d8f36aa1cae52e56e53cccd87138424ed15f2ea13e9c571cd9ede815d88e2e034d919c7a63e3a8332535656dac151174fc20a41421a44872bb79978b1f0f771c8dd410328ac434cf76412c233d7c442471648b05214414c91facdbdbfb52448321a148f0b31c4d9d4a1e730801c5a71f53cf89b624649f705bed942975761b423c9170ffc94b835248274eb57b931a938913c91fad4b8db2a8f22ada44d2e78a0aa3f1843e55400626384d24e81463ac6dda9c27c499483e8ff1af173e139ce129a041e30c07c2d91d1a4230618b4e7adbe143c825125332cb9d3ed69232932512535cce7ad0547116aa44525e8f4faac194c64a5322c9d5ed9d44a2a68f1bd63edf76462591a4f2ca8478cbe9a4c62291a475f357e54e2fe70589c4f24e2534f6a98e4b471e11e288c4e0a75a56bbd6dcc43a843422498bc86b5a87aa65dac69a56400626f0c1c80a50b0851046d0a0a1218b48d01774eabe5d29131520201d2aa83bbb418822126d536c08d1336229a8859044246d8fb0b1ce112292f2853d792d1f1f73e710c7552b3fe56ff56b1a22c9563fb3c7a4152231e458a92ea527845b225b548a97baa741ac398925d55e108922eefdb4d21d8824f7d2bc51775a2ab38048aed46aea7719436bfd43927978ff09d917d34d3f2486f5fb900d973e24bdc8aeb4a5eb41cac78764916396d474ec7bac7b98d1023a84ec21392de6dc4a9da287f53e832e296a3e4e3986a0830426240f8919f776717f85e021b9ca2af472a528efeb0e78e90c5629b283592fef7a497ba84fe942481db0ce98f679e325e1686f1d38cee819a422840e47d3eb29e55a84cca1cfdcbbd5a9ffecb344881c92dc54101926f33a43280e5858763f1b65d9f70487c4decab8a3159ec4de903764d1927c5868f6cae6aa31766595c7bc613a216e488eedbaa96332a99774216d48b896adcd39ac0879930c216c4896bdbcbf50963f29b10a216b48ae9c2a3a3294b8bbdd0c216a480a25653374fa6ef93b0634684821240d4925e5636dbe99ae664490e3068ed44e022fe3860c528e10883821040d230c0839830242ccb080903288f4e0e142b0400819ca40443840c81870e06824828010318cb8bfc819120809c30342c0e0fe223d7c64a43110f2850e8478a142baa0e373dcc081a347c0051b3d7c90c3716cc1fd4574f410e961c307377c081a08d1c2088e1bddc39388fb6320240b674420040b28870e163820e40a1008b1c2c8190e0409845461c46f9cc1c385a0038ddc20810442a8902153a84088146c201d3bbc00215180820803429e2072634708fcb4080e10e2040c8434c1843021dd10e9e1230a0859c288df784088122a00920c0880206364c4713800e41806003146310e00428c32ca28630503001946044084c1c38c1e66808004234180219216e4171600f1450f1f11e9850802407831d201905d280044171500c90503407031c243c72d46cab045f3e81db5a0458f111d384466718603410220b21871332000120b0480c0c2c648db9800c82b465e083b2800e28a0c80b462c47be810420e1d0d0061c519476415aa18e991c37be4d081448250464a052a74fc02404e31620a0e8094c2930ee40010528ce20220a2b00048283000028a08807ce201209e18e1a16344c7091200d209911b3b42c0c381c043470d2400c289e43ef041cb6003209b18590088267c022099e81e3acc0882c8480e1d376eec08410340300101904b58e2402a512094c000c82470e8d0b1c302209288440540201182111c3a74b86002208f18714404401ac100104634006411230b0051448b34002411040041c401400e0104a403c711f1028018c279e8188100400a2152208448d06a6a396ecc2a0164108941ccba65a387129e64636dc4076766b8192f80028820122e65e48148ac5279bd74e9082a1002e43b620088c4709fb47e6ece3c3a6efe902c965f33c991a26dc5130801c40f4999b1fd2c69f37461ef43d2cf77d6b624b3d2e6f021e1c253c8fc1bee214159c80c954a63127a03d143529c05ada55410216bf51b3c64009287c46e1175b1436e06081e1276c3cd6472371d9edf21419aa9dbd3cedb58d321e2a871ec701e6b2e00b1031b73be9ead45b80e8949456e7f36adc6f489b400840ee79849065bcb9883cc21c1a29e524a53b3012207d793bc0e1e2fccc8e290342a57a594f9c22149c68ffff3aed901c81b9252b2f9b8967ced1ce586e47e8b3636af1683df86640dfa4655678b1b2dc504206c4850a562ccc1c48f27dbd4b100640dc965dcb4f51305206a48926d95d3bcd36948f44dfac33f8995e78e8604f571ab34f33cea3c7488788e1b3872dc2867483cbd3b3a734353fa0c4b00628624374f1af1a42387c8103c47e1e900a40c89ab5a2ac28d1111331eee49470e63103224c5d31ff5a36b101d4b07c81812ccc392e6338f9bb49d03440c893fb323af233b7ed6d8580b825f056460021f8084214193d07e1bfff246ff54200212241832a12c4fc86c6d19205f480e779d640acfd1c3277921b9f4b4467cde2e2496e9b80e9fb4fdf3850b89293cc8dc4bead3a818c81612f458bdc7ac4953cf4400a285c44b9ac35d8e0d2b91e7b8a12b00c94252be90c96f7eb4b1a6a3c78d23b2632441b0909852ebd2ccf7775dd33844768c581140aea078eaa44543a5fb7ed05678bdb36e3a197a3b396e9451859249f16c8f15e336a870ea3aa56fb4b186a3cf1e640adb66f5f724ecd3c5952347ef1831205230675e90e98245f58c1e3bcaf024015e8e1b5d868ea43c008942f28a5b50725f8542f2df48b1ec41fa061773380f3d01c81312b38c38eb76afb4722997a3778c24204ee0238034211d4c25d728ef59e9e970010813d84f5a2a77c70d89a047192528c219432002c812924c54b8b8d9b249f516440989ff16362a69b7dd513f9291a43ce3e724f48f8cc4b3e98d918db53376e840ace3e318e752296dd48d91d4a145cd7e865cf0518c46a499e637559918081da5219fe7dc1b869f6e2133e86cfb770903ddfda5d1333beeb8c1486a4d3acb850e9d46e80023b12e63d6688a26c4f8f845822565215f24f5766c4fda4a9597eca317c9193e650ea2aab4e979913856622f4a9d221fbb480c9bdefe82a7d049973e74913ca6a3938bc4fed00a96b372a51e1789f5aad91a16be63c75b248dc65c5f6e4a6b8ccf168f8b8c2fd1caf8a845d2980819367ca745a206a11bde33658325cd22613ef8a6091d954572fd08c52249e870fdac32b623465824a5df683a5bbb242daf480cad97c142a6926d9d2b1255cf83e6f00f696a4582b05ca1bd466a678815c9d9a4c858259da36a6c1509ca9328b3ac948d35b31faa48cc43d4bc73dab5a4e2031595ecb28f5d63a22ca7c80f53680f3e4a917f7cd02236ea73311899c1080f1d2548dea34568d0d8c1c37be43043c7082ae002189c06e00e1fa4c88f516411c57e84e20314f8f109a3f1820f4f2476d6caaf71644eda84c6a3c78e3b7c742239856a8eef1ad3fd06590b1f9c48ca734a8b594c69c4ffb18964bd1c7ea4e6fd060f194ce14313a82f69712c9ee72313891f63680e5dcd0c367f60a2fb743158cf55da0cea25ea3f19fe4e09c70d1b48049da9400424f01b3c64608c9bf06189e498749e51a7b94e9f693e2a91aca17aa45fc72866311f94f89844a28fae2f89245d9fb13672fe8844f2a64d9e2af7758f084122f9b29d9bf0ec7acae68f4724278db121eabfa249fbe188e4aea0ff4fe850ba3f7e342241e454c4c692f1c243c78bd818b991c38c1dc66220831e66e828c1880160121f8c48ecd21d8f5e1b54ac1a02d2218203c70d20ec2292c7c3a4e54f994c7eef3c54118941437cf8acf14b4452bad789cd62de584141847d1c22396a5227dd677485cf6cac8d88b8107a046d061f86481eab8bbf0b23e46e75c44721ca072192949f3a0bd7a372a2971068d0a041c344ac8470c1f818446288cdd9470833db548d0d3e04912cdff174f65bf8d48d40247967986690a51d1b233772dc78fd00443984e8c8e5dd1c74848f3f247a52955b3428f570ea1c66143f24e7a4652fb9e78a3f04cf8165a080b10f49be29a7623dc7fcb4f78e327420111fe4b891cad5e0830fe717516fd2b65c6472e810a9fed8437289b3edf0ab8df1a8e7f8d0437ae176fd37a9582f0ebf51821e374410858f3c24e5cf58dd9f4b32883be283c65182353ce41e345cac5c16f9fba0d8f1480e1d377ef0718744db123ad4679749f8b04362e69443a6ae2f4f9516b1e43cdac6887ed421413eb64dc9bffe7530c70d1f39668c88f4301c7cd0217966341ec648bc103dedff9f4e7c5b8cc4182a22fbbfd2a8b5c448ce2d719b4e1e46625faa90a6554a5c4585911c4abffa341f8c84d3cad6cc39309233e9cda2d49e40f08ba420ac744b5f84f8d917c915a284661f7b915c3a5bcd8ba4b13451da955d24dc6698107355714ca88b44ad1071b2f45c24e517edb0a1cad344b848d0e9f6ddabd92d92e747b9fdefb6285fe7a6edae6b9158a17b7f16a545f2eec630b5f9f69f45a25992d9929f2f8ba4ecea693bd4bf85d96391e4f91f545b1af7b61c16499abe776a43fb0ae62e83e6ce5e27e3d163072b40d09ca7bea915c9d6fe29e5d0531f7bc48a04a53e36d33dab48ca9dce4a6e65efbb902a9247251d7c83792e394a4592101a1716db410542c4f277b2fd140936ba41777e17696f9b22f973cf8bbb6753532ac5951b4eebe81c5224a95d31535983babbf02812f3c5839c135914497f4a4ee92c264d544c28924bd3fa940cf2479c161489e3197f2ed6e4e5773f91b8b1d33b98e9ce3da92792afcab6c2c22c4d483b91f04905ab3cda4b3e483901824d2459468f2f939189582940a089049d4d8f9cb67ec9573391ec9d9752d79998482cf53e334a9f2e911c7a2cc5944ac8b2132d9134fabf9d5f73eaf5af12c91db2b368ca2bf323a3449258feab5cf138d6b149804012496ec2767f5389fcd42291d41d636ee88a4a1912891d3cd7b9c6607a3b8f480c2296e1229f32ade588c4fb98f7d45ef172d48d48d81c2dacf7e7bc00024624fcce5eea4bb219e25e44c2bff957e6deea2cad221274fe5cc2fa0484ee51b800824424cf667f91c9f3d64644245de6f39653e9ccab3f44f267c64b9644a80d623744e2c758de8ed942aaa81049dab7828ea1f1d4bb8448fede72abf1d220126464274b419604911cbcc7db5470f5f30391e8c12c6c52160488e468e6b93daa7f48d438d7e51ac3575fc70fc91e2ca972db9adf6cf72179d3f8ec8bbe7c48f47862b73eb57b484c8b137522b3274ed543a245ff70ea2744f6d23c2464bd54fc070fc9c14f799ccc14832cdd212906e19921ad7df4c60e493a7556943f7d1d924fc5f757db48870479419fad89e680c5ffb588cc4c0e89395d56f9b2e390545a942619a3725b0a8744d3594e839dbaf0e31b922c7d1839f1289abe2d80c00d89956b313e8f506253521b9292d2eb1dbfb1212f880d09724509df8bd5b45faf2131dd55c6dc162bbc64352455ae97688a854a8dd390742d7b7a35f58dc90d1a927212df9773f4d5df983324a8ce98b2ba2cafc56a6d0efbc93224e6541b4beba55b8f214362a9f4e965bd82eab68c21d12ea50e6a673124eb9a07d53105c390a8ddad97d5211892c7727be63559a257fb42922629327234ba658a17122b5d585814bb909cae3fea7ca506107021297e6e73f3a4846600c116122c974ef2aff45a489c8bd9a269d9b71cfe2c245aa6cdc8d023cf531e0bc99f4283a96ab86cee5748d296f25a21b194e7b0971daf1f4c5548de601b63ab8e899c4c85e4ac1ba3a8a888887fa790f829dc8767f155f7570a09723667a3905829448be91ecd3128a190605a6e3b0665d27d549e90dcffa3a1773c377b2724e8a93056793721592f3fc5118d41079709493b96222e5e5cd84b488ad9e5d542fb3b450481129264bf7fe85bd88d3d1989d96e5254dfc8486aab6c656d1e2351dd826c0da141fe334692da69cb699223c3b26224a7f78b3ebd56193e408cc4981ab652aaca6ada338cc4f04ea2977d0b23797e3c7ed37e74fc986024e5b42a5be2014682c5d3d1bd9962de797f91a01f357f16d919cf5a5f245fbb26a565cf5e249c5e109e3aba6d101d2fee79d394d377db45b2e8acadd1af76741938860fe8a2649b4c9e8cf7399fcfc5a74da68c1c99f3e3e21c764665a6fdf86fc18866b012253fb66083899df459d9d4c2f368daa745eab982fee8a9ce9f45392621844a693df6b22845d1558df9f75814169e9276c525392c8a73196a2b5f2d09f92b38999b444e68dcb82becf6bba49d59f2792bb8949f3f27566c7edbb92eadb296d22a1a1116572155e4b1fefac93ddfa928053142839b6e3aa1e2f59821a6548791e1748a4c7b140b1b4ea6e8377e5029fa0a4a57bd66196d92a2bede5c2aa33896bc35b1ab6149a2c84dab45fc7c1253289c4f79d674091456c83c5da1b373a34f1cbdee7f469e30a88f080dca3a5450275065aaf2e5dd6e8813bb9fb8f0515bb4f86713f52631961f4d7872f4ee4553222f7c3281b95ebe9e071375fc94595ac784ac9c4b704a5fce49fdea752cd196da771091b3a93a9548be50e749c70bb6a2d39438c5cf18973a49bb27916b260d8dadb82571e768f2371d8964d4671b12478b233ae760f9e4477016179455544b3db223123ad508fc56c637da7d568b1961f60bdf7c7532f76611a50715d3a7a0a51b4514eec3e85435da846e1281490f7b5183882f8648d3613b73882d77a3bd5687d31ae2cdf3172fa70e99a32d84d154c4535c9dcd59423472d2a25998888d7710e837b17c9719ea0a82576f4b5a6e656e20b0eb1867a4a5f21610d827d13c9dff03aafdb7721a91fb618d672993f6dd07e3c98f785993361f520dfaa2a5797bdfecc1ccb1f35a46f5d0485b9d3dab56f3e07d1a17cde1a1e427c2dd663ca977e8bcdb462e6a87f4df5ac43e34cf3a9c526e0e253a6c324777133a0651cea1a876eacc4aec27e5e04835b3f4f09c93717883525ed26bb6937040c8d84175de50927935dd4e993adde086d3a7d4be673adb606c651d131be56443fef974d878c9c35c431b2d7358a8a8c1ba8a1e3c76944aa72199396dca3b776934a03e3e736a3ef13e70867f45acf6fa69ad98e18f1bb49879dabc0c055f2bbb3e4b2532a0234777988c316bc660ec20d7fad2ef2a0675b3a8ca95bac107c2e05cd4bb68e107c050f8b1ec9e825f586e4c6469cb14bd70f820f75bf5a16117cc2de2369666ebe78299b26f95fc6bce160af1f29ffbb4708e51357a9fd77a5948a5a6cf22c3c219456390252ec8caae609f09917629a5d8bb151062a2b4ee5568dd62345f581015ea6b3ff1923157b353386f7dac27a1bc2d293c1fe3398f87572b0a89613a3397c512f90014cacc5994baccab20fb13d2985408139e97a2130c91afac7a2193d4541392724a4fab5c323bba0cccc207989014f76fcc623c27cf3188763eb0842ef609b5fc1dfba47d4009c93175c878f63ef244938c4b9e9e9235fd1d4246922c25e74c999f90fe1e4391ae311263dd850f6deb9ce4588cc4b4559dbd416d6d8618892f6ed9295355b6a35750250819466290e5e1ad3d124652662e51f1f2ede664094672898de9d3a8ea3379193764202288106024d65a8d100ba9b1d65f24751461ca2c697c912065af0ce9457290f12ded53de645909e14562d898e4fe357feebc4276915857262b72597644882e924f5be473ac56bea46744482e1263ced9e37a89f21299848908c145522511919ad7a479129ae3380e033d84dc22314c65595dba38a3b72d924cc70e76af1ebdd35c8bc417a51a4fcecece3e5a245a0acae4f48fb348fc1cba17344816094a958aa197148b04953a94f8ae0b8ba492291ffd32f98aa4687dee795b3689f669087145829cc72a61db9eda2a91562475deb4906f296dbad82084154979ee75d35ad29fc90b5945a2fb7ee81afd8d0f425491048c36a8a46ca74204c26030128b0402712884373700c31308303034240dc4019158344c55717d140003672c1e363230222014120e12098363412010080302c260180c0605c2603020141c0982c3893e00b81b14d3c18c4d2784d41f613e0f36e69c9c947b40d840b9a1d40223f415a7c2b8e3f1402aa701c266d68a90e7146153ab814805f797e4ef60e6897b0fcf8ac1161dcc3485db723a13f60dc2e6e6632a1833d868e1cb2fcf091beb19f010ad4d89a767d6db1ef7088838da7ad168d8e4838da8bcc1cc9c06a9b483589ab812f9c1c4646ec19dd66732757cf0aa3ecbaae8e8d2eeb9cdb4b919facdd8564e63ab4be63d9eed2f34fd255d2593843475740109860c1a3d83e53c391e5b46847a1da8356103c0432c33d7c1b2af59ef258130e3c18b13361da18e7b2d40d87cc60614feb675341e06bf0cf633b06be08481e1061e07becd978453a6bde349589a0292dd4bb8b691654d158997b607c201b0906710c773009b5b36482abcd3ce69e58cdbad97821ef917f87c66ff7e89c5855cd6e8c106291a5fc918cc544317f0cb207406cb3e34c06df09a8324846fc0c1650f4b8fb022b71e06fe2d9cb729163db323985920b4541b6c3c4d8e16ae98b3e9b9f705aaa44046883b6f6f7dc31efcda12b81e40ea0057073c07010cafbb9a2e09400ba23dd8b80bd8e30298342945aa6e00e14acdd559ba005d006a1b8081934039ee1e20bcc39b78ed14a02580cd0308e36420d74e2a80db000817c0586661290f0033c8ade7cc7d002691419aef1cc030e5db313710208c3313ee873900cd006e0c609025472923dd763dacf488eac1cee39c1e1e3db47918f378975b9897b4f82ecc948f1820ddf7e304256a1d8b023979a0f8054d1eef8f2c624c638f5a3f9c2de424619dfafb2890935a5127ce43673cbc5b78b4f48da28abbdcc9b926f6d388ffc4aacc722444c199021bc5615478bcaf09c0d28b242091222e853b0a25295cc48a3fb2e7f6a62ef464e7141f29b6ad300c2cfedcbf761efc5ef861a103c37e091b5e88282cd3ef475c80571e35b0512f8a68617f14226a1d1878d4c6305898a588e8f9ecacbb4a2096218476ff40f7c047e227c47b84e8997e63e00c21f8050182631439150a0152325d960e962883fa2803d61491baac21a1589b777b1acc1cc77420721dea70a35b4b24ab0aa07aca609b1bd54a003b10f1bfa8a43102417267d94f8a7a1797dbfb8448eba0864b119524baa5daca2ca291eb61b9901035a5a5678deb8431ad4d3b393a4feb7ff5dd252d4a68e03ffb1388f856fad1b5d1e245ba532dd7e734fd4fb5d932582afe06671400b1d87a5f235fb591168761cbc5ad6d6eaa387d8728d6818bfcccff4315a9bf451aeb9d7dbf96301cb5d4921dde4051cf0f6778e32887be68a75b8d2cbee1f528ccc35d965d421f7c3db51df8e7df1d25a724804db52bd7a5c359bbd422c2cb1c41a896b72ed23657d2da69676ee29a2e9b2d4d6d70eb13c9a24454278329da35eb5cb0177d95db46ecfbbf9dd252fdac1a985b5dcc6cc9e36cd1defb54c08a2a2263c2cde2d1078fe9e433a1adcd3c9b4627149d16ac12b74853bdddb2fc7988f5a35e1639558a1676cfdb528c6f46da3724aafe4b45d0e6d96ef620e4bdeec81019c8b5c33715db056e91767cf51bbff807ebe8f46fa70bd192a44255954df772478a430a034fb5bd38573ac879e94aa2237cf40bfffabc0eb97dc1b03497d69d414b38f1fdc3c7affbbc55ecbc74baba77dfccc65945c8087a86aa0ec48be42fe847fd0676426d956e83c444bb15fc351fd159700d4cd8dcf1a90fea727d209bd4539dbee0d6d40efd8566388614d7d016c21e044577168d6fa4821ef41d3cb8ed53037e0a8de32a4cca5ce5b6ce9ae47794708f7c0cdc66435c1be4c9a04513e4e1d666eb416af0bdc5b7a2dceb4bdf625262d1300b47f157c952cfae4e6dfda8a9ffe553e1c24d17699f06d9c0d6ce77148529a0217fe7c8e2c9fcd25565e4e2e74a589f901511c07c2d7a8be5c64ec27005fd5cf2afbd10c471bb68b342e38b623cf10888f88d7b876345ea433972cd5fb5c5ddacbad5ffd9787e27d8d05260e9c426b355b2cb9ac8f350825fd3c4ede97660bf2117bed496adc7c5a9b82dbf176902611c38a90751a9e8bbfe9cf86fbe3f425a26702ad04448e14ecd164e77a1d99556968d5a3cb591255b10ec09f46fd470aeef9a199ca2ebd21cba3339524d4f55907b257622dcd0c1f19f52c2d21ec8bdcc4a2237e31e6d8ea1d65b56142221a6f93088d7c8293f2352b271c55c32d0e5e2892a32dd0e8c2687c495b9b9279a34e1a0c86dabedfe59823e206751a2b31ae5108a25399c8b3b91397dd1c8205c979fdeae839d2db6558a9f0ebafefcfec08f0f7c30191b76e6a98e9107810f04f4995caa228b9c1da0086703d8750bda85df1e294996447c1da0ac913dfc6a94d1003e613c940cfe1d420068565006cf00cbc9bfee420ebd876cb2e1639733f8f3ceef0d444d5aa1b221472593814ee39d164ea319e13b51a356c7529d25bf70812e261d97ca7bd46014bc865178c693c3c6bc24cdf30de002ec188374039e710f487c6ed01f90e2c319052759be0549919048513ebc9e4428b4cc22325820c89d873206aaac3e33e65a52bbe303189b86f8abc208d03b02730e3908359ab277d0161e7d41235713b1b04d3f73ae31a2db442dd227da1d41adc41814acb79e830e9a1b8d26af16fb5124ffdc1415ffda73f26f7d92198c73996c39660fd9a53016fe17a0ddd5a6267e4cc5eaf661c885b199611f0f7c85360ef8999424239079e70ed07e5d1f2df31fe8d58b49971cf478618acd05850e2753aeb313b5fca52d09cd127adf8d4548025ba40827d2c2413b1ebbf96098fc06d32a20df0cbe3d8065a3d73551410de9f834eb2f57f3b611a0914479de0b54a9ed10114a76e38972883a57ae7ca5ff02979d5336481b5125b173cee1bac2f406ad3a1a626448d3ff286b0183ca086d6acc01374d3f862ac1f2641b331b0067aa98290e9ac4285fea699155022f53ca0dc69d975c2c78964c125c1887784af2d562c24f741bf67756132668bf0387aa214974b04a611520b9a3868e07ecbb0935ab9b4fe85228e3d728a861cbad673bd6bb0b6550526dd78d789331f16b9312c4655da3f4086b5055732e79ba279db359a561711ed2d5b09a14f710a6b4f5e81dc40b47da9381e2ab51b21daa90248f1b9c45d14fa34e7fde2195e3fb7b58f23e7fdd34e606ddbc4ade0e9b297ebce2fb497c0f3357c258feeef2a0bda21b128da915b6b0d0168f2c3cd8c5f80ca3b46dae9c58295b18c3c2ff1623eeb420abec59fe5fe255a41a5c4c0fbd94532741495a0e9729abac6c568a2f78cc08764a4b78e7ed5d24107789379c71c27404867674843e3c87f43cb3be53ff4f02bc8e9bc77e192bd1c954460970fbd7375c6ecd359d956da160eb1bb98991c7ad679dcca3b2074503964273bec7dbcc989e837fa91a2310d12b342aecb70ace6ed5e499e94acecb672689cdc772ad01e5351fe4fcb59a27df44088853842d0b6992b522922dc5f965e85814be1c1f9283f0b629ed2b38e76612d84ef023a1d2d2fc110b6a18f95d7eb4a18c13810b09a75e3903cd184662239981828f9db4e612279fb1273c23de8ce4289dd921c3a2503063527298303b3d9baba7d92d8b88c760c1728fa6588c381b10b0c519c9a71e8288d0d5bf63b22ba79ef5464ad9d310fe3181c3aa076bea0228dfd360f61c41a4a1051bc4d0041c14761afe2d7834f47d90498fa9d57df441d1a021da3752367cc8af74f5a33c46ccbfb6321777d0514d6dc84c6e720b8e183e7e094dfc451d6affc2d30ab3ed711a1aae3884ba0b0c0f96e6c8a023534df8a169b17284fe72e8a8ba0abf314670b12601e2d9b1e83c85592b19e226bdefa518949128a2e026c5390ed8877cf024c481d1a2514e760cd3e10a6ca118671779f9ddb65bd944b36d50655160c1f65e2ee9c65f10b66fc8c1f274ee0abc6296da097e3392efa3e18a0e0a79a675761de0a12140926829dab677498d0e4083a1d0216f8cf1aa8eb5951bd06e1e3b8caf16227aaaa8463a8424864e87bbca4dfd9844aedcd8b2145152cdb38619ec84c0f3f56dd929f7313c833ae10008d84efeee1991c79ec88e919a1730b10d19f9014714fdcc85698e3a48bc63dd3d2cfd0918882dd9d20b882da63679b19365762085fd48cbac78f4fade2dea78f6ebe6dc684451585096e49e9695743d9db25ab7db80c0b7e1907cd0e159f79e623431edf7e3c8d4da3ad83739eba8c26c19880ba6039e6ef7f9a7a2fc6041325d41971d1bb40ad2f789d0a1617b1b891695c91b3d6114cdcd2f82082d1917c8e306626fe25efa8e632d367a5ecd6be9ff5178123bc1fe93be2165bd92c1f9a23f57a43864f82f7b82663983d374604b87c011923a005f40129a23af0b009d6f27b5250a7c09b774b83595b37f5ff29127c7d314e93edfd48de1f6643e5dac7677811dbbf4b50e2e29f624d6066182427ab7903f19e5580e6687234a78b8a082dfbcfa1a6f75d51d3f0fc1e6a81322d2c2c44a354cab28f431701bbef0c7b04f3f6b3d1255f19168659c3c0a185d6e78d1230c002dc4048a4ecf1a7859bd30bc06bca01755f362c5dfa32e10dad69cc50e809b3037cc62a71df615408c150e99a7172b1ce28c441bc2f06a471955232c9d08ef1089a339ba6ffba263de08bc253d1f9dc276477e3309e3ee09c37cd50b040c75f62025730177280c0f0192720b8f90e8ccf5d46a2e82f333598481387e9bd2b0a459309646ca869dd3f3bef2d055bb9baf613100c3b5708dd645bbeedc69f83bc1aa1bb6a450eaadba90247a126b0c1d2d9f314d870a52ec2a8c4af430768744993dc65e9d3c324e498314a840f135110e65d2cd407486f4b293c79068118afdef3a97ae9b566e385200f9d151878a3d843d259f0143434c248ef788b16b0e49b8c9831dc1adac80d6e11a954c10d6077ceb5a95235491ca2ad5d86657ab11c2ce6a02cbc7c5dd2357b0312eb2a20b0d39e75469065f82aa86d42a5a182920da7608e3fe8967e058ccdc90b82b87e0f0847188a7b56e588a80889c4344394349db0de575a34939f8684862cd706ad89aba28d774d6b8e5eda8361a2785e304d95ca3c26b120959f61c3652d6493aa6e48dad7baa19f4a2e397f64df1a9a1c6df074065215ab8dd95eb78a748c895855d8935199ff671b93a5439eb4ffea4ff15b9c2b8f3797c1217c994c3e4d3588eb62ec04a4c80c40377861fca92a847197031fc4cd01b9578f102fd6dd86c77032d8ee3cf32d1a73a40c789a10d9994294869b883ffb172cd796a881ff6d56208ae344ed64743e521da74484e3562471f26ab2fcc59a6797184e944cb59e895d7e7e9b2099dec039cf8e6cf9fd6d99632f7b1055b1d7bb67725ed1566e64e7430c256b7a3dde085c6e26d17cd0746c3d9353b3693bcb3745ea4b42dd59d1a30ecda072373afda88c7373e82e33855d6c6b6512b29b881ab10cfb649dbd6351becac68ac862fce03d96295078d367ba8a286f5ca0fef1fdf4e4a11b1d81507aa5e3ef5bec58ccc927075e8eb854f202e7c4e587545742bcb41935ad595dad4b3759304df1ebd20fe58eaa6d9ca2c1f8b5c65b5ea65ac33fd72dd5c9d4e2a71c6fb2d11a6d48844b1f0f0d2916d7edc3d641919cfde35b7ed2824d19ad27832dd3c7bb22e25108e5c4d3e185fb54976ca7789d600fcfc4ce80786d8b0028dd8623c4055eea0b6b143ce1022ea4bf434c8ba4cf48e9130a0fa7cd72a81685431618b3241b714734c8a2e7fefaa73c6e178363cf88860a241bb95bfe0e2c807d5435c66676f44b5c7b124de5a9ed80e626ddc1b6025fcd20af0d746c52281019a9d5273ac3261d6a3f123c476eb87dab19e5e5e8059eefd486d08f9d626bb1bf17d671986539cd811f1fa90b5017c6ae6cb7bdfca0b9ecbd724844c09ed376884118971c9867840608e1a9825e19cd25357cc977a5bd3ef9b9c63db5a12f3b87fd9f11ae05a9822e596585a033757767768f642ac0749096c936d374b1f0a566495aaaa7a4f14abada6548eb74ee4b406e4dd2bbecb19f7e7c2c63f9f074907ed6b65e8823399e6ce13d19d4dc33682d361503319aaf1cd8dcc09818b5eccb141fa40480c7f25d641bdaf5a2fb0db784410de226f0e06760988cac90387714159489e4a7c57f05935cf1509fb493bc5d7483c07831d8a58fbcd6668b9bd552a88ab25917afd9d2f4d439ab65840590cfcb63cdc230ebce12f0402cd16c171eb181f3836a661b89fb8fda987f017e1bac26febb9c29ba04e9d1306c97b595bb97a183c36ff0e15c311b50f37c8f81987520bad9e972e3d59b84a3710327b876efc7ee5e3261010035ac001133ea98b4b0afc86f5947fe982f77058cd78f452e8e985b2998d4c7557852331196d1f1645a66148099cc49386e76e7aec0ef92b81ee8247fcff851efbc6fd14f0674781ac217a12ece53b5a8cd926e712e987a5322926efd6867f6b589fdfe2c0511ccefdd61d1ac2175d9dca0e1952d46bd6cc3bee0678ed3b3433d183e00b1d8443c1e9a55532c7697ee91290763c58f5d688093608eed9ec21b45b8c435134f1aec3655a67bd73f9f025534b2c6b26477c5f8d4daeb2c0e570f6ae7d5406b99899af81ecd6406942f79326f39419a0d80fba93c08382ee5db62fae3b2bd3d8466a9e9547d1217a3b16e50e30648c714393972cb6caaff5208bdf2ca2961e8a09cc5fb97b08769cba2a61c9431429e357dd8301a75395f35cb36710bb7ed089bf3c3faf5cb979cc5fdc2b8525586ac83f39f69e74be43096c30ac609a402fdcf0dbd405e385551903698b1d809c08f1766387b4026ad41d923691592fe0531b784e61b597dfe29d177e58cbf41c7f8e29712ac460a93c45d0748351bc8ddc60864f85fff1b7a78ac7e1c59ba3b6a97205202b4b27c6db0d0e4e9ab27aed8082f3e84ce4f501300e44666b83a7b7f062a691af35888cce33dc099af6ae7d033ee811f0b1426462d4d355d7f83c73e9d2cb7c75b1a68215e1c2948a524146e084f2cdd29a15e33012bbaa999327d2d6c2e9c4113d548dffc038bfd642e4b2dd41d9515ea39b710baf75662e2602cd09d37910049ab485be34ebc5eef896a0d7901a84600343625ffe86278017c8bdded82e5609185d29047d1eb67760a8cc3d40246cdbbb2d6ff0306d3a981275a6837789ad66b6a05a698af84fd28d02dcfc0d49d585595fc7c11b4ea11db2eb9df4944ff8e34a5e6210212aef064700e908d53f218420ae706002d3add0c8ef19af09251c3622acb013023dad03be46e423ca8c3c862c98b162ecf2b00c641f31951c1e5950b7b701df7d68f99f268861f5a843f4b5de81ed36756d2fe7a27c7470269001e383e1957963a7e0ac05c1ee1ed4bf907d533806ffa8ecc7a04d1e86e34fa43b20b124745329494530f96f0bf469e49f9383011edfe10bcc95cc6e36bbf231e4f48271d58e1281975f59f364d32100009a01c06e32cb0f8e934ff2b4edd5a5a88f1a104fdd781ac8272af3dddc597cdb46d4ccf77713b8e7ec1d3defee2d95e4ca6b8b09b06763099b5a44a73f9b31cb1ecfe578a28d0fd32dcb15b61e5e2e164d18d3c32327235b15560732e7367dac87abc54830d1644a6f0251fa62eaceb6dc462a40558afbb90911e85c1c2030e996d18f031b816cd2a781af323b0febe70ecdc511235e618e52e530d2f45481cc9c939f21bb34fc6e57ef5b9b185df80565a99c91b6f1dfc180f326a2ee158d6eb369a90bc97818202d7778a39dd71cfcfd79761a2ff43e6a757a6cc3417de2f343897a369500caa0caa0ed684c18a0857d2162a37081101f7ce90ae9ec5087f1a18ebd01403bde6db39477f115c0a87910350320a839b56ebf915740897c70b780c1fcac287e888265dcf33790a07456f49b3182780f31a06a9b59f34e989848ca5b2529f229e71f80ef1288382f18999f604a9b67da0d003cf13c05609e70e3f0efb1381c9889a5d7c33fcdf48bccabed0d83bce6a948b745dcca7343141ce4b7d637023c318475069a0ce0ed2d59c8118172ff050f981004f361c987f6c6b8aa70110f0c1502d2b71d363f950f077d52a65e713b6f1f587cfc2f5a1da1b83dc80c58a4379940bb064d8d58aa07eac2c1a485ec668e2179403cdf600918ba810bc825cade74bb531df7c783516ac97d6f447e7d6d154c14e6f73b07223723e3aaa66e1dedfeebb30bd80fa7c25958f7197f54c8b2c214be4b632ed033ccdd830dcb30a1f99cd1cab8d95fb1b7767702b4ed28e4867d331f5d1a5c2a40ee51bea70ddb7b4783d6c3744c4f0f3a1cdb205ab0b7db412f19e6733b075c2dc3d80b3cf78b8d335a32b80bdd8f03f8c8b365634fa8b43286c56e34a48f8d07095ee3d5182ebac8efe3fc6b5836879b4ab0778c9a3960158b5a50f19163634027dc7787b6972b2dd04008412a66a42bb2183a14f287533f19cbfc043b94f7e58f264692a4420813bab7ed4641c88f6acb5954c19c948c10da66821185594f2ea040e610fb79ab22c9d5c10aa29b5a5e67b332da9469f1fa433ed0859953223d9e2a8e2e431e4b3a3edd0b61f20336a452196db016a711168dda303e6218fb819b7ba6077ed0f3c30446f466125e53e52b9683bbea5b6ddc89ebdaf5bae0bb4f1f76258d920e5b418844891abd28262b864d00cd29007cfc1ed31f0ce71895490c1ec2000c7ad8431eff125c0038b23702090f9bd18161f7a48516acc483fd59e38cff432a6e00a5f4d1bf539361c9fb91404c0b143ad66cd26a5724a65befa9da5a80576b11e73886b6abd059b1c4873605bd66a6e8d830c864c0334706789b7bd270105ff4deeecd326517511f084a3b7f84d1742ca1af047f66dfc48c3f400af530735a2512b6563089293875be2a27c45bcda474e8aed2063243298d6dde3a5b96e99203f0a30c51bdc907c00ece12ff4d0a66d6093d1b5ca10a554e6b536c7c93d85fb458f864b0e6723a2559ab032cac1490766d8eb7d42c9077e5550f1362a090eb663f1fa4eb45712c24d42ab73301051a84e4207eb00892b2a6121036970acc54d6617d7b21887ad2682ee3ef4eae5ffdc0d7ffd5820df236dff7770b3f3d95b22515e06f7797b6f65bd1b70d449cb901e277b9070da694a585e16b572c456ef820cdb84ac558f562005165148029b7027a2c97ef65a56292f8d17443dbfc966668ea37c24e09e112e2005991289556105b67c258dabf6b0749f16a125b0bd741b3d8335753103fb28c7f4c6a1bb9213bde5bc00f65997ae8ae657e6f2b8517a965227e7ece7aa5baea9b03c2c8706b0fce2d6bc6c112aa0891224e9a6c77a56a8e20c117f13979bc093513755da89f6907c6107bffd47b35f9877e382474d7d5aee9dea7ca91beced567db8e0b86e3d4ba20f6227fa4863085d8dd65c49cf8150ab88ad62e317d02dd6b9a968625a31019e020fd0e7a0211d4291a14730c8358b0deb3a64a87efb003d6c991fd0eac74f8005f9a36f69c0b91ee587bc22288e0c234edad9bc79f82d026c68c644c31f777ae8c80398d1d33926d25f204249135523c249c413608d5fbafe37f97f1ed2cc1e72a5200b3c83a76deca8f864f90ac88cc67e58feb1d8b536055bd954b1ccda4017a1c68b6bef235a46d9f5976ade7531db2d7eff92b9a3653a66e3ea7d692d79757d9ac94115b3bd24f84b2c46063019b01fb53e1b76b2482df9ba19d0d95a5049b97f2af06f97eac1ec53a9af543ca75c956f7a019e2444629c8652807534f84e2f1248824ddc3b55c6ad9e11f302bef8b250e0983b8290e4358a5dec838d21e320824abe7e817fad940f5940ac1e58424d026c3fa70bc75d6f08bfcc09a0250b7590bbb84de829b104a8bb49442288513ba2e5ad2021a20d4c3c09c40798f14eb0a04d01b10b8a090e6122f60bc4788d4d76d8099acfe0e9035115193fbbbb369d7cfdbbcd92a26303ed8f278547c4f643e0bf1dea907f478efe3ff2da945e9466a37b96b8c00b3cace9e235c3fef1822cd91cfa6e748cb61fc189bc6c24c7601b2838e6c8b4b08a4338235e6c86e9b92759d1cd1bef038a0c3e28abc88af3e601b3c50cfe4790a0bd5b06e8efc7a9b27671c04ef1c80576cbcef61d37466c65a43b960ace1b37c23e540b68d016008adcaf30ed574a093e363648bda28d5499fd1f9da387a5b372a9fe07d9711987e4f07142f5d7d16a211c49fd6b37274eec1f906e5712b9f8ab34af3f0af084933a76a37b62ad73f8610024d3a3d7bb8438bf09089374dcc97b07f2e957ffcb492ed2f62c41bc033594242773890b44d628abb9845bceb0dc55f187c180213fddcd36c6fa706ec2e54e8a747efee054638ce061d5e155e711488b250d79a568c2a0149ac923765d0fb799ffb8f93bd04adbef4684b8360a12d873dbcc003931f3076607dd413fd11b526a4629ea2c9950103ee7aae4d3f0c75ca194aa812ea053e1c8693b95f508351b467dd55b8df7d521065fc1bfee25a1b7ae1622a212545fdfcc216669c9020121e9639defd4c4251a4f201cad0b3289a2e9d37e6f4dc5833615cc3443765a4698e45c59e1f2a4e62c61d1deeb6a7222ae76583e51eea0a163ad4c5a94bab3bd5dda12774cde64246c7438b45058654788086695e8bd6816a966a5335a19aa1ce9a7a5e42378324d766aa1f8156608cf19fa234f9ad0c8809c63845eae952021601fa0cfdf3d2133709d5d682f59c7a6aeaf95546e72df7d9b96a852d34525280b2c1a8e76f77c7b882d4d4d533504643b6365fa29a65aba1aa5deab62b236b5e995516edaabe998bb0009c565c9d15d536cd60c57edddcaad1aaedaa497516a215d1acf922e99c572bf05c939205b565a69ec960cb9bd0a395d613f43cb4145a1228351fc8740069eb86ea7654a3548baa1daa59aae9ea2cd48a3bc49694f45a735406bd09a39a8acaa8242674c023cefaad4a574e23ebf879234e2b5e40539316e7f03e75544ae9a980f396df9c2b15024d7a731f72318be427f548ae6dffe73406bdb7d871ac20e608cc3056413043cb6a3e16619a61676405cc9ed58cf49a6ac008774beaca9b831180fccf30eb32822a19a5e3c3086a97ec441cb182a0fa96c6f7d82e31c2512e2dd9bb329f476bb0a0914f0544dbf997f6a8c96565e323d08f606e7960a18793ce103b4aaabc1e2240d8f172dd6f38fb3f7bbba2f68b5088c6b45771c209631a103e6722c2e4e763cce33308786942e1746e40cabc7389805892841e5a7091d27376f25b745b43dbddad483b865c4e134123204c92e2c5f32f283888b6115b0f5b7aed1a9b947dd8d6bf2ecbb69ed3dccd6ed35681b447f4343e117f5b18c7b18a4c5ad25c1759baadb46d906bfa9c690282d7566806767b451d17bb09d92a7da8dd4dceec6d97a6cb993f8c1ba3a8fb77f3d04ddf690c3b000a974502cbe2517bef5b8a9c4897c15705cd44941b83dd7c6f97b9586ca7a2da635cae2745c06d161728a71a17c5f352ab1e0713ec92b7765a16f6dcace45d06bb611b09c646cdfc0f82dbb3f2c84cb43a18acfb2edd56da36f2d6cc6ea55114a609ef64fdbc9ae6b9866a9a9aa9a594cb49de31be024d2f308cb6c277effc6a674edf7ab6620d8c3809da2ef9e64d7f14913edd2a5e4c50f56cccdfa46cad6e19da03d82cce4646bedbaa131e39bcdc3465cbb26916fe175d13b095f7797a43440b90178e4e2e615b19398edac8b89dd416a8d37ffc6d24429abea9706adc366d23e09a2f825cfe97324af031d1c08b238c73ebf4fcfeaedc16dbcef066a71761c32b1fb3354b11082e35fbbfedb68fe96f3e097719f706e8d837d5d2b4676ff1bf1610e11e1e9e965e70aa708eee4e11d4f3fdc0cd3bcb0a355620a6b703c0661701be6ae96dd57d3e2c9661fb4e5a8a59503ea5db3f7b805663c484d24decbba07793a4c71334822ec3e3b0f389ea66534218a744b3237d5974a4532a6dc615d74b32f4248e17c78c37520589ca74404404283f3f507834e13a5822e545bd04a006eef19d203437cbf69d02b21bc8acf9635e9187fa841d05d429e71c4416055af6f2d23a0ff83f1bf785c686d313b02cf009ea00703c3411d87c1d2f83d504fc2c497caae84255307cb1b8e18604ea50cb9b08d601d4b20902bb667593937e642a4884b81b14fcf86425f2be6401bfa597cdfac92c7355ecdec9d1b12a524e19106b86dbc708f128d862ecb3b9d8c9a6fc65e3a50a1fb65b934955b0066697dac99834366b23c0b71d41e2fec4db66c70a2a6cad1bcb41c2b91748383b1b5ac943d42829617ab90f0cd5c92bff7ad27fa37b8e66201f4426de01c7a7c4ec0e6014268b9ac676627b5e0e0064ada4b5e07782f2d04b8d56f12d38ed9c7a48e05a273245a44db11fa4208d6e7c00e6db3167996e0644ec57a55aa2dcfdb317797a1c00ff6e9db80cbfef3fb84aedc36b0079c174d5612f905bd74f94324680df9ec2342406f919f3938d0a6a97e3eabe4142ceadec3137ae7c8924fcd686172c5f5a4fe6e0f674fcecabd3074629e9588b9b54be3b372d1bb5e5cc060f0ce7dd72fff0b03cad394cc94baad986fa9b5339d53d497d31acc81e176edf9a5384964c74c3f863feb5ab0a62ac2e3994c36db127d9aa34ba1816afddb4c1ac26a81d9ae5fb7e64108134c1963566623fc14e880d500d5bfc3634fd994805f19cfa23175bcaaa0bb0c8dfb296b44976036327cec9e81ef4e7004991007c8a70db03a249b23ef0afbba3ce0de253defd599ab8de8b65ff4cf317a5c928cc244ca6057859242e182a00ff6cda6a4d30821912277bdecc6a7faf7a7d9bd90707aa36776e26e8a2077d269b9d36df93cdd840aeae5c6ec83d670c8c8067bb6d867a330f82894377aacddc376d702c6f23aa4dae37f4e3ccb7a3b41c2371fcb9d181630d6f6674b84d3cc0093698e6d5460abcda9a270942f92f25752dbb752f39c79a7190d1d2a48277f5228ded4e1606ae03b8ca3c9b3aaf3ab7f02060a821302a1aa11bd05a81407bbd102013d6f4ef83b050390c0929017f0cf61e57a0d3f844dbc04c6f839f928398e6fa6c02207cc3020e65c4500b3970b2663903333333333333333333b3b2ac304a43886597102b939444ec9ef293b6a9b7293ea524534a696a7203cac584c6c5246342e3a2f01b260b4a0b510b69044d39b3696b4616378a155660418105b83885137b436834b99465bce64ab830859394281d3c28fd227329857f922ea3e2468b06e02831eeccaabe0a1b5854e0c6e3225c90c28fa5221254e748e2d275310ab7d3654c1317b3b4346c94ca31b81085ef29ea2b660f0a857329c7a597f4d9445c80c2ff6d8f71e1bc196b5370f10937cb4d089d16bee4ba27b8f08467966b741a1bcf29645d74c2cb27524bf2d373c28fe9530e172cc9f220d98417a357f6ca17b6c18526fc93d5255a53a90f2564838b4c7837b2278c6c1b29fa3d830b4c38325dd20999673c2cc4c5253c0f17ea1772c685257cd14eb964754ae0a2129eb49c59d749c9fc6733d69212aef8a5beb44f0d8222d0d1018021b89884374962bde7e0f2bd960bd5228714b38430c941b88884a794ccb8cd233c784b72142afe061554b4700109374d679031a6fb66ce1ee129212a54b28bdb894ccf119e688b315cbeb2119e992ef571e1b7a982c708bf7f5bc3e9cc349d84d4e062118e780a5e3952b6acf6a870a1083fc6d491532791196b6d8b04178970a4d5c85cebb6195c20c209d2d208c9964546cc2e0ee1d985123bcdce1e6b24e38a72880b433842b67b360f226dbc13400560d8b00261115c14c24dfa5f544e3cf8f907a10b4278d762a73a99c45063f1838b41f87232b6620ee2d27a12042e04e18dce68a9ef730851b7468e2bde0a1b78687011086f73ceea152b088b989ab1c63806178070ec4d44cc1a847d70f1073fa5e461b95334c918351f5cf8c17b13be594e6f470d8f8b3ee0a5269b2da7f9e0dbc5fc3db29242f6ce1c5cecc1fb58612697f8ac74d7851edc18e3c4e48c1eb1223c63cd78afe0220f5eb4ae28d22d85be202b68e4508f4db8c083b36aa22607931a49b8c55ca1085cdcc1f1083ad3a52867ace5c0f1394a15765070610754c76cc154cc3f04c78dc0451dd0051d7c0d17f6496f0e3b1df3375cccc1d316692183a48a1a2ee4e07b4c752184e61023260da3118803025cc0c10973bec1d329bfe698c133fca8d8f1165cb8c1ad2897cd2f99c7d82266162edae0e4f6ec73c9abfd45c3063786b40eede95f9465858170b1066f7409b334c17ad39d8c07176af074de3a89a64e0669412ed2e09534b52624584950bac2051afc6aafe01abb73ced457e1e20c27dd9d296398a03b2bb83083ef25ca73ba1b5d94c14df539bc8b8ad6f8c9e0751036f952c8ffb5fd1e5c8cc1fb18e6634ad1b810839b472d24fbd706c916176168ce74d097c39f70d7e0020c7e0c31a8d19b3d8959d50e005470f1053fc9943e8546c9e313252ebce0f5a9da1cb24e6aea9019daa28b2ef8f655f22554c805176acd2bc973d295f47570b1054f265d994dd63c630d4726162eb4e0f965f96c23a2c2a3290b6e3a113d081f3b1d82090b8e0896477fcca52bf81a73497b8b314e59c90a9e9039f9f9bb7b6cbf0a9e8c16a29250c2f3a99f0a5e50f118be7430fbc84fc1ad4b1d93fa129282e3f26d72b227c9b05014dc0e56fe1f43c1cdb9e72c88513276c813bcbf8db172469de0d5a6cb7a889b14d1261c31c8326d2d99e07b8fa99ce524950997e0cbe611e2c37494e085148f6c3f669db69304378c073b11d5418217239daa0a9ad9c3e8084e4e9e4e52c6d8576123f856d135a99258eaa345f04ea64e1b23e7f8d90c11dc10267c30ad7992a9cc10fcceaf2df96c21f81f64e876ab20351204bf7212b6aa32109cfcb9833421971ff86e5a61b54d484ec1e203cf2b66509d453df03486688995964c6678e0e56ce1f3c77bb56477e0e85fb9d831d481a729a3fdff317f6b9d8335e74f16cc528d032fc9d66915252716c43730484d499ae8900dfc5195cb576288ef490d7c53de29dd051d36511a783fc1afd542b62de10c3ca1c26f89ecf37e8b65e0975c97656712698ac1f121921606492bf1d43742fb024f88b25151d44466b42e70c4e74272550891ef6d8117f27f88e964f8f87859e05f04915459a426ebb85881a7ec82856f48e1a3262e54e0a9f31cf7ffb9ebb4c4450adc522a358fa86441a4c4050a9cbb8941097131ad1d3985d799bba3e54ce1d4c7144e0c39f989f6ab58965278992165881d420aaf7e74ce1ab3abdf380a3799daac315d149931517812b24a8ae65aea0e453a2c4408fb4a916f0bcf9dd3fe849b2abc5ca528d322929ef08456891c392949399a9df092790aa72f4624914c4e383933899130e626bc08eaaa326ac5f5af09cf44d60e2a49c8573299f04754657dee54950513deade612691774095f92d8064bb7aa19d1125ee75b3f1b1556c2114922681155316c8594f08224a1aee2d5a58426e15d92e9445cd03176e824b1a9a83191703ee78c11412c4cae21e185a0a289a5f5b5a8dd233c6d0b5755915ed2ed083f5fd2c94eaa8d708310233a24c8882c6cf0dece2dc23b1934b53aa4e5243345f84906552ad14c84675b21bd784ae92656d602116e5dc848415d4e8ea7c26c37468b4364ffa35343f8fe61645f0e25115a14c2891ece54b6ec4cfd2642b8314be83c218f9f3eada34386ad0dc22892ceb4840b0942f1abf4a0427b02e1668a481f84854cee02c2cda36794244f2a7aacfcc1d518445b0cf1a2fdaa1f9c6bdf946051b53a075bf4c1958bf2961e2a89645a025af0c14d31b5734e7193fe467b7035647aaa8a9e624b8e1efc0f93c9fd219807b7830e354243c75ae0c189f9bb52b705694a57eee0e50fff654ab3a7b9c40eb9097d49628c923a38d79d4245d3bdd5414907af2e87a452dab0cca29b83559bd4e914b31672f0c444290d955a2ef93838e1eda457cfafe5c881831f6222c76fd291b2a62ddee0e8cd2b6123e8acf15f0b3738da9ed35a4aa92cb46883e73e928338af985d21334e0d1b9e63040f01c3420b36389b638c204287863499135aacc1fb28e37eca8350e1554747ba11828e8e742304d8a67a3770ecdf08420b35f87ee2aa316d6258353b3a70e4c0f154d040bb84166970e4839409b1e3563cc5868d8268f04f2389b8e958f93c33881667f02d68e7f6d37eedfc03a28519dca4ae3ad3ff64566b735cf156e0a04519de8c0d32e7979c4d906841867ac59348b78a82a3868d1a372400861663f06e724a0826b489f416d7a185183c3f8d73d34877f525d20d83df5ed25286d162776a01064787cf5193b2581724000f0150e0970c2dbee0a5ca9a65cada7bf3a87268e10547f4ad77b0a851b2e76aa42b687474c0a14517fc9824595fbf2db8e0e7cfb639bcb3d553a6c5169c1399ddfdb6a2460e1c581c19386874747474b00c561c384cd0420b08911e44a4a84c5f16be984d6a564d9b196b7d841658a86c4d358c349db72bb8996242b3ff45502956b04a68778d59ac82d71e2f51649aa870e5f0143e861bd9a640baa422853b8bda1cef8982273ee7e4f1579f84b4a15010f795ef097ebc591ef368bafb62277c9f9a69bbae326c82e31dd3a52d0f9652a54c38e53e194625c92216d462096ec81e1b54b252082d94e0c82064b00feadbb692042f9d9871cd5e0f5a20c13bcd214374bffe13ff088e5d658c70accff9baa38d8ae06f9c85209fea1b36220231545f4caadc33043f8f85b496d40833ef08c1897e4af5bc2908fe67fad0bfe6f2b95280e04b4e417f98168d1bfdc03725fabaffb38d72890fbc8d76a662cb6f585e7be0e94ea2435c8af4ccf3c0cd77e952b2ead824843bf03d869924d43a3cc7a703efeaf35a8f6839f093ce1faedcc48531e1c07109d1928827d79073035f444db8291dcb7b4e36f07d425afbf89c3d88530dfc2f3b5942c5ad841634f052985e8d5163c7dca519784a59a7df4a94942403bfab52b20f62e199186ce2336d2de460d04ad2b98486ea5fe084743175e734713af52e70653e471097fa16f8a1dbdf3c299573c82cf0426208498fee9422392bf037bd842afb8c0abc6455770a3c8f10ddb4c5b8050adcb0de17296db890cf29bc7ff34d17635338c14b93ca596392764be1aa755f36193bf6a95404bca4f0d3a59c21872c1a852335a69053894a15b3280ad77fa37a9dc7186d2f14be664b96f3654bdabf018533fa4ffeff447695ca277c31ab111d97c3b78215c851c306055e78c2ed8b0fe9847fb13e792c99b91101f482139e0aaabe739b7c767d86179b70825afe1031d158d14636bcd0846ba9df7fc4473dc89a70789109c74524e814354a36a7aac86a8a008e1c6f058d1c2f30e15a14b394a992375669051638aea871d0de461615d017977053387d1344fb5c8a5f58c28fd9dd6445e4d279f44525dc4c49a2ad3f94f0e5f369e94a7f128e8c2c7739a94512cedbdb443b6b311f9148b836de1fe96d48f819f3c685e815d15d7d841353aa1c3c87d29593e9085744760c36b19448bb11fe984e996c222f18e14dac1039a8c932aa7bb10857d2874c5f29c55c2a7ca108c7ff23865b980b1ef322115e9af9cd215c2a29322f5e2022693a84cf5e31877064998a9073b218c2d121a99564f5b94aad10b885c49824a62e76736329e4d1777e3323632f08e104f550b23fec2d24f86210fef5ac87942f738c49cea3514302c44c105e682ded116505c20b4a8c680a72c1810e3fe105207cafe43e3716f407ff53e5d2b4ed3a3a7038e1851fbc6c9934742cd19cd477450d1a57d4a0c188177d483e781a536588f61f2dc58b3db8255d24e8f692151dc1cf904183c6c15164d4c871fe420f7e7f0929963c538b8df2e0ac56fa7b6b289dcec483a3ee5bd9e7d5da2fe5c51d1c9f10ad466cf410cbb483af1db165559414a5ac831f940ad13545b36234bda0836b91833661296583c60c1ccd851773f0df3b47cb7de637d97c3978495fbcb605739f607911072f87c468167fd6a882026f058d0a1c1cdcfea496db52fe18ab7df1865fb34b08676de914bc7083ff1d438ac9f78518fc367832790e2a7a38b56c2e1bdcca1fefb69ee42aac176bf0bdd5f2868b08623b33c20b35387e97993b98aa0af7d3e06c4bb6d2c9a3fd8b32b2705123878d2c6e787474e0f81c591819fc020d8e4c21f65d7845904f7a7106d73fc8989e5e1722ad1766b85642b08e1c2369457526cfe4bd28839f4367a7982e3d9ff66470536308a363e8aa20d131f8319bc4b23a825d4c8ac149337f6b965f53e8ea4518fc770b415997923108d50b303877d97cb374bee0e6ec3f4b2afda58e102f38ba575ecee6bdddc7175df0838858ea2d445cf023d9f99787a02df899c2c785bf9847c7460b7ee4b6cf344fc98217226b6229912385a4c6825b5182d6f47e7966e32bf861526c8a6b689f6c05b72ca6111aa29bac12abe064eb64b2afbc1754f0b763bda990ea4ec111b94e5748c971c30b2920274218f36d5f0c2fa2e0e94b9732ffc838f2bc80829b2c063f9db2ad4a8b0b78f10457749bfaab259927a59de0755a6a0aef3d49721886174d704509919e438aa03fbf5978c10457cd628be4a8b1c97f1b2f96e07a48bf24c29514e8174af0dd3bffca5dd01cbd7d9104b73d73dde7ecd621a48a2a6a9c9bc20b2478b66541d5b4c799beb4e0c5113c214d7dbe82080e5e18c1cf3edbf2d1645d46db2abc28822f3244060f418c26e5b28cbcc20b22782a2d4d889a4afa3c2c831743f044485023d3e41aad5f08de273dca746893d6f6bf08821f64c82167d838db4ebd00822b215b78cf8acde9aba2467af183fa3fc60a226d4e62df0b1f1849853a7d9fcb62e881d28336bb36c598f988f0204929ae4c85a4bae4c08b1df46dbab6c4a57c74b0dba6782491ac2ed2d55350fdb172f2450e9c1423d6988a57f60ee2c00d3a6455e75edce0850dac23032f6ae0e6ac294b7a6c2df5b15fd0a05375fb2c2dcb92b012bdc2cd7cad375ecce064e06b129932255bf6a43331f04dd74d0ae9722f60702f5e702f5ce0b6260b192a8cf05e7bc65a8e1b35707ce0d0c00204ede2450bac03022f58e02797d3ec4af1e2d78b1578f5156b22dfe4850adca423a4cd18c29345500adc1836f22692c83c26f302057ed8502663874ee1255dd1fd72768670af29bc906c57e93222dd2ba5f0f3a53c4a6a2cc91e2b29fca45c9344d1281c0949deff830a1acdb4138535a325215d44adac08dee2a2466443611d2dc30314563c3e81eb09cfba474c880ae97c4b8f4ea42fe7d170c2b35267c13af8a64fcfe9c06313fe091964baf4a68726bc5479d67f7299f03b97b450aaab25898709677c54ce2ea1b559d328048f4b78d97749898d1141c687071e96703dbb8a2ae15c480b4a72ec90948ad18fe09147a121b982d898252d26e1c73e110de9361468227848c24fe15a62c7104b21420bc0267844c2ab962bed256296e00109cf5205d5d415537e468b1a301ee1f7865142998e99b6a287c68d1c387e028fca0d2a6c582087e0e1082f99bdbb0453d7146123dc74623751feb2760e69d147f060841b5162f892d96e332c376a78200ec1990f3c16e18a262d2109b15117ad221ca53f63db881e55dd7924c299bce9d3251563be60fa1b353c58071e88f0652edfa918934c172a29070d172d8ae071082fc63772909f8bcf8c5a8e536c5851c38318c2c9d539f4e730be7d3ac72138067814c23f8d326b79b3a88ceb41084774980b3a6c5067e9be41905cb53cccba228badab89fb943ebf1e82f0824e429794145281f074e7f7a094ca298b0ef20084337f41c4e30f8eaa121635751e7ef07a436fb491a54e48521fbc205946f2a9bae869c4073f8d27e1a1fd3986660f6ef4582749a9dc7395a307c7eb4e64ad8dc9835b1632fd66cce2c14d72314931a54eb323777045ffa97537ade9e7b4839f4e4c747a7b990f671d1cd3a6847411d3c1d7d8dbb3e9972d299c8323f367578c99dda4470e4ed2e36a3a256849a979c4c14f9b657e31b999125f78c0c12b1b217e96743809173278bcc10da7938c2c15e9e8c082871b5cd11ffe26f96a45ea78b4c10d2dea3f5a642d0d1e6cf0e66292523739655d068f35789becb4a51cfa4446bc2f78a8c19fa427ec71011578a4c1758949fc4f550cc23b1e68f0c36a88d3aa396768c46d3d4256575b1159ea33a71ae06106cf6be4dc7410ff199e207894013193bc5ed55e0f3278419895ce156b1d62740cbef8d5b88afa88c16dcdae1a44e653c246399e8a0e83b7318d523a85b4feb25e51d0157f703c928183c6da8db751c5cf201e6030ee2babcb2b6d24ba7628730fa2d5b2018f2f78492b748876df9c6963e7e10557bc62f389a4829092ede8e8e850448247175c13b39deb62c9cc75f2f0e042366a5b776919c16b52ca29d1ec94561b9fc716dcccca6442c45cae88f1d0429b62a9d1230bcedca8b1e0c9a0412ca2a6a6b390c7157c391d4b8505252ba4bf66ab37e453052f4df418a357ce384d1a43e30a190d030f2a78272e988b7c2edb144dc1134d0dc9c6ea5c8187141c1da4e7eaa8796312425170646d6b67768cbfa0c0030a9ead6c99ba4fcac8e2468eb20ad8280ff078829b3b251db3274b161e4ef06327a5347d78652df5510d087499013c9a70e997283313ce267c2bec5c8267da37a434a74e8d2929c111965c93044f861445dd0889e22382044fdc665f98511e41c929bca64ca519c117d9276a63a50f4aa566ace130bb41a34820d9a308cea74bdac4a41863580a115c0f9331fde98a31cdf6c06308e85bc9312428fd91196ba6010f21f8912397bef670b173ba864710ac237900c15329f888102c6f659139f4f801496a90b90a290e1c326ae4d03b8f6a78b0e2a04093f7f081a3a5298cdaf45fa5438f1e1c6344f472cbe1ed2a0c161e3cf0934aac4bf3a71d782a6698686a1b43585907fe5958917db3e967d51c38db95d73b6597f476220f1c381a59fb738aa750d609018d1b1df0b881177f4244f24e71211a6776391e076a063c6ce088ee0b7a235a08328c3c6af0030f1a301abaf38bc66306d661433d64601d1e3170938653a2f617744e2a1e30f04e72a690da54666b970bf07881ef1ddb5fb537e990f42ef0b7fcc306cf94ce644e0b9ca44e6b8879c3022f46d5589d5cae546656e085f0a5a142690b63ae0a5c2fcb166aa17aa4c0fb4b7d5a4ae9f838e18182a8ab1f8db00e46b891427598b5f9a98a16e18ba5c55b259d238b58117e8af3d59298fb4884e751e573d234cabead0f44f8d9ffea3574f8710837d9886c174b62aafd8721bc0cf5a594daa5ff58154209a18338417892a4d78f5ad5273d7f04c28d593605597f39937c3e00e1a4bff1ac6f0f5f349ff51fbc53632a2b675ad443fce04689196fd7d7471f12de9fe7ea6ed355ca07b4c6226566649b3b550bf9d76206dd1e1c4d5b0f3a932c4b1132818e0e3d383a7be8584246abbce58cb52c8c8c2caab0919879f084d68594efb5e2e08d0874747ce0c1c94955980b3939aea061012a68b8d81c57d0c0820a1a660bf071074f2507edc972856d6c3fec60c9fca22ca958a983a731d9d8caaaa7182574f02b9dce29cfa61733f1630e6e7a1e2573ce1abc635a0ece04cd72497d528e2b686001823838a3b2825ad7ba86b30d1cfc8c29764832863fdee0764ee122087523445059e106af345b92109573cf852c903cf868832b4a0459159fe62e4bd5830f36386e3ae64f41652af7cc1a7c559530e247ad0647923a716a2308694a280d7eb00f1d2a7f0abfd4a0c1cbf71fd4e4ff4a9aec33546d5be97637179ee9913a7c481b731f66f0dc8408964582a9643607e1a30cae7a080d25630a5851e3c6c78d1c3842f04106afb53a7c54f56d50e0630cbeada4b5931cbbd162384e9f98f3dfca023a3a80f0110647c3a44eab9db272424003c9c0a2c68dba240be0097c80c16ffb94dd54301993d064b4e0e30b8ec4eeaca0d342164b7bc1f11c9394e6351153a50b7eee3121d242ee8a8f3fb8e0fca5502a4635558bee630b8ec89e2f924c1533c45c7f68c1fbd039fe64632b5652163cf5de13f368ee030b7e4ea536a9068e3cd3320307b93203c7c7151cb1aa3944695e11e1ffb082d7eeb67eb1fda8c221f35d1166ae66ab6c62c698f3f585b41efca0826b1a6310514d6dec2a6d5841a3a3a3068d8e8e8f29b8314da52c56ca0f296414120aba675daddbcba59c96d5d29e73cd30f97882757c38c1bf4ea3d459c8d54713dc90d362ba86d29a2c8909fe899c8f5d1ecff4ed63094dd68ab756af599129a36fc453f0d1103e94e085242daf614e27d59c8f24f856659f348b5b085de6a061859be003095e69d6682bee1ee0e3089e4aa9676398fc2a6342107c18c1ad3f53b3cb2e113d8543061a161f45d0cc3e3ba2a6565d8910c26b892cf82082db6539454b426910e2c7107c537f92c2dcf321042fc388b63c31e823085d5d5c869a687c8831952cc4e83185595c51c88c0f20782754505bb149eec2e7b3b8a2e05de0e3076e4827c29fa7ec9c26fbf0817f51e64cde4a2568d2c5470ffc911f6da952bdbdc5ec070fccf6e6133e23f819f6b103bf349c5f9f34957de04307be7d9a0cd673d621e023076e0a1da3ab7cb490d46602343e70e07ca618cc3c46ca6911d4a802878c86f17183d3c98809f71f0fe98cb51a3964d8a0f1011c6903e332828a558c9cdc9b67c5bd6a52aa64f8530d196b8dcadfc81a38314e6a3ebf34a9cd844603efc7624e4925d5f57973450d1c0cf88f1938b252e817b5919c377a863e64e0a87a985c2dcf58fd88411e23dbea6d561a2ee133c63ea5b10a415e839289e003066eb8cc503988a80822691af878819f44a868325472ba106de0c3057e5d7bfc6812a79acd47353c3af0d102ef4b5d506d5bae3145e33e58801f2bc00f15dc470aaca3021f28f045c5d65d0add1763d84fe188a073051b313192794ce1694b39c7ece831a58ad12885a35e2cad04d3d7974752b89de4c4dc940775748cc21951418d69d00a2dbf28bc1c76eb116327146e0e296ad09f718283c22bffd218b482e850da1b353e3e50a3860398e09ff0b37dfcd28438028f3a3a3cc17fb5c8ee2f9d6f76c2114aad59068d793123070d0cc8704e38f61b2d2821eb73f4f4269ca44fbd7930fff74e714d38398a4ea92ce533e18420d406a182b493e662c2cfb1c4758a90c5e3b39770d25abbd7865f453934aea87145396709e744448a96da8a8cd94a6c39de743451e51841053a3a72d8a071e33825bc13497d675b26314fcd58ab7164646164c8784423043490218e1bc5013e094747eb1ce19316fd6fba24dc90c99b3f3ea8178f3d129e0c6b1aa2db55cea0030937e4cdaacfa539847f8f3fc2cf5a9f7a948cbb085a47786a25dc8a6c8f8d2cbe011d1d38b2f80f7474146f849fe641dc240f4988ba67aca12b8a8d113cc9e21b40e30a1a0f40c391c57f2019e1e864a6546db268fcc217e1555b45495bdf98c00e5c1124c93693d4ccb2aacc63c6fb7d2eba7aa3c647478715376aa4de1b396c24c2b5d7a4548bf4d8e99e23a20f6d9b1cc20f3a664712d6b921fc3c97495c08674c268fd164cee09973a3868c2b6e3c13c20b426d64c8b2b1afeae42856c8b082c68d1c6c3772e0c041a8153213332b3b234812d5eecf94367bd2db8c1c45021d1d3372141b247041389b3fb7a9cc8945157fc3c6b20782cf9b339b8f9a8901c2f1a094b907d38c1c4502392347b19159e4b8f43f78fd1165b366bafde0064dfdd9922b86ed118d3e78279486f848f1c1c9359a24d5e8190bd13d78ba32de83e7306bc2433d78599277d28c6a7d3713cb0f781e9c53d79626f678c6b0a2071c0f9e763b0f41e81aa14654458d1aa60abf8397293487a4a672070fcd58b381e95f649123046e074745af18b9357de6f7cf8740460e1a66055e07a47a0e5d2a07cd8c351a3868b0d1c153933684b090cfc1cf6994ac9a3e95e8af1cbc4c4ac9aced39078bc9c0e3e0a76cc8387d4248be0d1c9ccdd249c40c39bb83e50d8e6bd4f41ab1cf2c4477839fb3299593b72c2a986df04ac4b4f324c385741936e0c1dc422e6cbb064fe51aa56e56624346d550867649ea8e1c62d9b62643488b124e839fb3470d217ff96d7b3438c1449798e8ba1b0f9dc177ef8f95efab94c61033f81b35252d299b97c1cb1a4bc916adc1bca24e06c7f39c4afa8c9ab64a1f839b7ca4cdccaf2e06b784feaed690ec2d76187cb37c5ed2c5d4e7a03a18f0f01b37e93c5f70d46ad4b8ac766aaaf78257412dc26f902dd79c77c1939e63f29c21c4472cce05d7520a17e92403f02d18eb237caba7461532ace0c04123c715c50ace22478ebf61836091c50d8480066428c0b5e049cae2a737d31a9e057fb5c4e6202b37828f31829f21e3e4c081c50d2c38da792366e799ec1bd650c3617623070ef42b78223cda844f63f51ea361a37474e0a061a3e4d1c0ade04548a552e868a1a25faf825f9d9e952fcd7a4d850a75dc57c98745f4b24aea3a3e6fd214bc57b92446e4cef06762804bc153a352fd055dea24097914cca484f2cba53e2450d863b3e14f7072deb0e1eb3a6ff5e74ed0cc22999b9997b6f7284dda537c5403de04efd423a78ace4c1683568631c18d217ee34bf0da4d430aedd32cfb5c09be6f2acb74393a63ad0a2cacb00378123c91ee44680a62a9846a5821230434d0123d0ba43a123495d461f7a55794dae0fa11bcbc3188985773dc086ef87c4ac588aeb0a0f622f8d5dba252e8ab0a2c70fc04700b4e0467b39c89a4d1e3d3cf5df021f875228be92a9d996685800bc1f908216c1af38cf93a0ab079101c8f9518f395a7ca9c3910dc74b591acccf41f7842c760caebf49d06f7c151dd45d4033726e54968fa136292e79c07c688ff243b64b30abe032fb3747d849c92bca55d075e3095349a9767d099bfe26d44800b9e037f43b8c82963ba725ecb8de238f0e7b77d36b476ce30f11bb891345aaa8a75172aea36f0d2fa86bac86c6c4abd06280bd2623aab8ed3c08fa532e81c942c29aa7574f80cbc54254452a8ba49253583cbc04da22a5a2c531674d2dbb0c20227f01878221bb145e7d961e0650f3ac95fe079b8986ae46c17782fb9837549480bdc701363551ae1d921f4701638136b45a4be20bb3f67055e6c71714d1fc436a5a8c0f7b6134f12b49e02c62d72b78b8aabc5da865969e6ff56cf380a5cefd01b44b2a05392a42fbc38851fe4c4a6d71499c20927c5b3665fc8a7af5228135b72c6f604f541556e13033138719bd0c4b592433132e1a708abcaa2454cde0a26fcd14e5ba6364923251b562c200b17387014097474646164e0c0714aba84a3a9721e9947531821b39670b45a7a96a0d14a78edbff9cae7331923a821821c4c09279d3a1da236664c4fc2b5cee0a9d2444f12dee894cc364b0a93cb3263adec013122e1fdb767a6e0128584dba326099132354e39b09091e38a47f81f692d7988735c41e3868d768423eae739e898b46c8466ace1d1b891231be1d58688d5909438d35a056230c2b95f0d494ba63816e1c690acc27475f2ef5211a9a41c642e91ba44f819aadaf4a75322c20ffdde192dc3b6c88770a4baa5b2d4396534437839864da12a259d41dc8570b386ca4ee7e71bb69fb176d8023108e12861d17d33c57fb834023106e10509624425bfdaca2133d66e94afe2a820bc601662a22a0b846799e25d9b9305f74f1555d06840470720d015344470051632aea041c51b1939706071230031fee0483e093ac6b4f10351f2d6cb7d208cb90479f7ba117b798d14a2270fa3474cc88c6d11830fdf58e4cc681614630f9eead3f29754a7b8f0cf58abe243f055e8c111b27e266f526575ed8c352a6a5481545c41830a2a6a54b11e230f6e87485a93fe4c55a767ac5941f0e0b5fbe9142cf9644bff8d943864e4c05163868c2b6edc8d1a394ad7a021c3060e85800664c4887107b772c6a59062e90a166207d7a3a8301783ce05e021800ac4a8839fb97c93c55cc233e5e9e0a49c435afde59c5aed187358bc26b76c4a4a39bd15e63539b8d63ddaec424cd29d8c11073706a122fa445db09884410c38b81d3c9fd5241126dbf7067f928c345bd50d8e0ae19a559514a30d9e968fd519d9c62f25d9b0764658bbf55a6fd397ded78bb1063fe83aaf8b7419c4836af0c6ffa2b558a9ac2912230d9e90743acb727d8951c540831e543ea5a41867f082ca9ee33e5868cd6d86266493f9d08c74276a93f48514975f3eb42567657035a72721e29b154474c69ad2b861811665346e606186801864f06536793a91e218637082298faef93c627052b2136fbbca49c21c06bf45532e06185c2d2166fda68cf1052f7df3e6f7131e6ea17f1c1e88e1056f653dbce80999b132d08d324306aa3b408c2e1ca6730c69db185c7074ca21bcc5b0636cc19b4fcb9515ae163ced9827c8c7c4c882274a056125a7bf410c2cb8d13a6208234576ba5da3c65dc111117452bbf84c2a327f4302356258816815769779cf0cd9d26250013b10630ade88a853c967f9ac5231a4e0e59c9d521ea3e0664fbdd1436b31a0e0890ba682d0149b356a319e70319c70319ae0a85748fa7437b9bb67027a354b425e2b97e05bde6ca5ab452570524c085d317749385656adea2e24b564f9906c36428f1b0309de07154543a43ec611dcd21297f4c9a5b5f4941846f04df475fe38913a67d2083e4647071ac1cf8851841844f04a49f8f9f4db9ecf353186a0c5842d2fb55693a8ae1a2b22295ad02c21f2a86308e168c293d08c352c241023088ea70ddaf944104f618901045f3c8bbc7610ca05c4f8819774ca642a64082aa5910fbc0d6adbeed3033f626c27b5bf4c99610c1ef89f61cc25c4d8819fb1ead76cde2c59a6023af0be83ca985afbee54988a52012a4a052460238b6f001557d0c822d1a0e20a1a1d1da73172d0db8489926cbcc61303076e4c6f299fcf94821837f064882e9be2bbe66795612b886103e7c428b749b7315b5568dcb0c00762d4c057cfe429f597666b530c1a78c2d3556f4e116d7c65c5818309106306cef9a8b87fab2f62c8c03125ebd3727291a26244102306fec904936171676e190cbcd81e956c67bdc0bf0c22ca4ed87fe8bc0b1cd3a23ccb4cad8dceb5c04f7a4cbd5dc462b0a02ec9b66d5a259b6dd5954ae82016492c3156e08632f5a382c8fce44e47070b62a8c0d3d9d7d51e393152e078f99a4a4152170305aebb4ab8eb11d7a482a7f0944aad12540e9bc235b75129570cb93db2a5f053ec1c56aa93253d1b291c6f8f9c5138a3745658eda828f2f6ecf88e51cb8c60d91f1b120a3fb39daa6b51957397a0f07d46b3a99c629338f313bec95c5dca637ac291f54d257338d707303ae1888fcc305ab48d999a3b80c1092fa9921663d275523137e188d897329c109ed32b9ac8dadcb23b5c6b625986b97456c9374c1899703d9b9d0ebf9ce3bac7c4999a66bc842753f44bca7b44c27a96b84a1c25ac63129ec59c55344825e1e493e4bed9639a2a9948f8a7ca5e634f1012be87d9b21139fd087384354219e1668838ebff90ecbd59845fc95edc930815e186c82464d4853b3a6c7022bc4d317b284b41e7185210e12835e935e4ac0ee1a74b6dcfbea1b3548628847399f2967ce8f8c91b214c0fb92e91dce63157a31d545ab494c2879683a80ec0104499811108058475fcc1cf5c3265957a149d43fc904a31f9e64593fae07db408c935a6f0c1511bbccfec84f6e06dae54314d427a7084d48a25424aedf92a79f02fd6cb081d23760e9a2901061edc7017daf38568b59d749645fae73b28e69a5613c6ab5543c4dd4488c2b0835bd944757042cc2454f8e46a11f27470c34a3c7b92740e6ecfcde9ea7a0d1949727036f428534a635ed219072f74893bcddb9692eae1e027f9bc766ee31bdc94fa66349c9dd01bbbc19f64a74e8631691bed36b821639645903e215a121b9cb3be985afe3c26b5aec10d13ee34b24f16d9bf1a9c185ee37d4494eb77d3e0e7ca29c530798481067f7c530815b622a7c6c03883978452daac83ee981503c30c5ed8545b318809d9418451862be55c53cee4ead455f6a7f0e01d8641861e438b21c3e007092a7727a52d63fe80c1b79b94eaebbf8238eb0b9ecc64c94310172c7b2f782a55d894c12c65ef982eb8569bf4f6a6b00a30b8e06d854fba8b7bb1f06c21a5ba4d0511d3c1d082e7259675d6265b535016dc8c21ab3f860b030bcebc7aca1622d3b8b730aee098a677381db43ff407c30abeab07bb1296f4989ec0a8020c2a308c29300c29248c28f85b93ea3baa8698ba04030a9e383dfa63e413e1da6b01e3097d79c8b9cc7dd647faccd6ac0a0c2758078c2638ba3c6d88da1531d52d184c70a247f634953142929c25b8c1b346fee8b2127ccd626e162354da24c148827f6dfe4977a48e5934184870436a17f5311374966c09308ee06bea6c41d388d01d3f106018c19b1cf3c9f0ac8ecf52c12882abe1e1fea2e45c41a35421011844f06dc27ace16c24780310427e4cc5497d553baa83084e076921e2599e85a7474201841f06a925b90e46e6b933a183080e066939d549acc162206e3075e321921a5b91c2ed986e10327af2595609ac1e881f7c92bc524e69201183cf0f444112f99848c2196f803c60ebc24627449ca76494a10860ebc641adb6308378c1c384ab5c7a5eda463740a060ef8d71426a2b66635807183d63e6256dbade418b44b852049e99c4a1bc0b0819f6964b4749ff9d3e4ac00460d1c9d7312ded9991ec0a0819fe2c2a7e6ee78006306ae882421e87cd13b792c478d2a2820c35606ae58ff9cb4a035d3cd1e37801103dfd6b53273fe61c06061bc603b0a0c17208c163893d335c6a759493a048305bea84d3aa6511b182bf0b2a8294d5243ea6d59058ecae87942d256559f859102c753e4eb24326dc831838102af4b93b69855a77092be9c47b949f2b0b529bc33d5b814aec46426eeb458df9da4f03ee49c2ee69849320547c1ca884c4c8911bcd443547f47d7ac2923b4fc1085974f8d1275950e85a7e99210da239d0a4205145eea539baed4f909df527e94da34a97f3c4f38ea719582f21c9438954e78fad3d2a4bc750af372c2343b49934472d67c1a4f1db1d3227fb609afe4744aaf12a209df72d69ee41dfec8846f7615922ae94983ce7e60c2b92acba236e4dfacd6068ebb8f4b386a217492d4ab25dc7c733ab3554852cbaf44dd9d56f21939c44394a5ac938ff10725fc142a497b573e26e1668c51b5593972ea43121f912090208f404734d93dd64a5d656284b3fc31018deea8642f05638134180944028124852130343d00931208001830220d8662e1603c9c2bb3f20114800367322234302c262a1810100f47827128100c0402e160381406020302310c07926c87939e1f1521e1ce8fbacf6740e6fab837820686f4e3e57f1364fc0b8782550d880f0c8f1f5d4d7ed42f5d375eef67b8aaaff85d8f7ed03bb12a6ef223fe67a0df5f3711b9ed6981c78afce0b0f96d9eae8e7cedf48b16b5fe17f261bc2cab3672e7276af9ca3471c5b5df2a31ad76625ce3e1130ca65820fcfb41acda7f39411bb970ebcc4021388f2f913c049b8153750472c8e5045dd3231efcdc78c54e5c2f8340bab4c8a1ed65380855312823cdcc3333a12c15d72fc883bc021ddf16a1b4292001ce09b102c2bef06cf989d0b89791008e0d1c645a91a1a8c506a47318443ca1a2c6e6d9d28e66401cf272b9339c346efa5384bd5138ba119ae2a17880a82cad6cac02e25e20968db16ef9c425bc7e627030e335a6f03fe159f682aaffc3f12b4a3985b1955dfc27a5d7d08a8bd182821d1c10e38482b1414cab73c45c8fab2dc6c12c84826c026287bc68c9b2ac18f191e2c63254d8286fbd80bc5b3bafd751b8d9961db43c4b2e1de2c318d77a36192c1215b05f2b894dfe6fe8c4ec84dc6e6e968239245146207becaff7c44dd95ffd4abb7e7203f895258ac5993e7711411f3ee7f9f6f4f35696059306fe8ec03b445c08e33247fac9e53f336a4c88ea3a5f738838c0810131191f5a43bd7da3784bec25f6eca642a2f9a53f4102a962920d9a405d1ed0b787732cd81cbf13982a52d6c00dec464579b45beb7589686855c64decb93c40a357ede44d2a408a34cbc70f88b8d6793d99fb036dac920f7348f0ea5712c6c665643b8717f54453343f8672b508092066c597992ca4d76688606f76c388e1d0b2cd1cd0f419618b0d949d9fea9ede3f09ba58f6e006200ea1575e2cfe0886e857e138c0b6f69d80f4a7c69c25ffd68661098cf94e615676f4dc7e4c80320b624df2409c6ccee4d8dfebc4f6314f45017e43a7b9f9092df452eceb808d531df508d6af2887c11054366549293115dfc02f777168be5b1b2ca8bff1abde5cc916e24705dfb91eca69c3fa3a0a032b622f92a551a31149fd8c307aa5b0de53bf505f27bed90cacad6df671864fd56906b4e8fda0c7019a392ae0e2a78b68471ed694d5beb11c36192d9c001d7603c7e46b2de45c8d683d98ef7b08f78c0119d834d321bd8bd34578ad4285d515e23cbdf00e99fae1c93f067b5292319acbdd88ead63b13a042afbbb179da696cc393e9ecbd18e9057c361f1269f11f53622cfb467eb0f07f7a9cf639f7b559770602ecdfb111e46ef47a2977df57ce645839f25ab14ab045bd4d8c242d159a08bcc233da9cea6b6547a14df2f972dfbb8dfe1ce0217cddf07d6d66662ddd1cdfd654b63303d08f86ac7857b800f5fc19ac8b181e8b98f28253e5ae0f1facfd33ce128d80cb6f4771fa02536706bc98425433e68d25055941619dde4a69b8b64534a7b8a8fc699d99f83bf5b81067a9139f4e7575be5b2259848747b45669f1e6d9338889cdb628771e35a6b93df1bfd707df810f02f351498d48f25f3ee9d01edac58cf3f15eefcc5b6d32f0d35ef5c98da5cda2945565ddfd270d90b4ce25181c9175f10859a2ba53cb9894117e2ae84cd09d992d60ba81d30bc9583c9599b6a40f90e56d8d98ccb9b10a713784c7f65b7b22aed83d648f6c0fa411dbdc55841b2c95091d1612f0de04a2eff458432a87ab966c1e4bf7b57f782006ce705c5c47bb9c58aefa4ae5057b7ee76765b87ea21d9a5c2051c9e2205944575d8f265d916c354c0875206e8003b5dfd5e146abac4e3b90629f0577681cca3f311c90f6b102bac2a3f0ba6e1c542e9be984a501edcb60108fff68e3aecab4d508c2ca343853ec668f28524776364a10c052464fe4d2a8912fefd827e2cc5144a9128eb562653cc8340fa9d4e95f7150dcff5e70a4c485622a04fc24facca9641c65c6569d28f13e7fa0ec4dcd96b138377da1a154199b3068021d20124c7be678a7efee34f917316e8cfc11097e954014c86eead6081304a4830c9d36b2b13c5e29be4baeaead0239fd726be8a4dd175b8a9b5f061774106c466a428125566827a15a88fc0bacaa52e3f5bd20457695a7f03079f6813fb89bf756c735dcd0e81b54c4a8e1cb0625bb5274e72d3d181c0cf14fe71f58d40eaff006e46bfdcb95d19465e64d07a80236ac2b55b365c93fb88806de447aa65b15a9ae25a5975f43da67d45d59ff193b80d839b36ee1aa6e5b0d0eaedc8cbff5802dc9242407e8f10848d7084d47b761ddb9c8cdd8f7754407da4a2091ad6f7c222313ebb421fb4d7c3955c03805d838a11ba6b749e6638c7ad3b32262a5f46665950b867b60f608cd91d3dcbe9e0d60d2540a1a9cc7884d510f1e2f58960f616527e91b785ea4f7109ad306d6990590706a3776dbd21e66350d6e7fff275054292fd631d2a5df29578796589c472593f114d4b19c6ea1975dc05f9618c172047570c950d5befab56e433bbdee0464b7915ef1b8416070a20cd956d170680d7b983889f30755e61deaa2c78a6a0443d888dc5376ba3c8669643b05aaf9656d4446261be4457915921cf01c8f3dd1c976890d60ceb015e265db0e1c4b6c21b96301df2ef3178c942325a6f05b4ba7b35b7268771128a25852d7d16490d75d1ace62d484fe8eb78d59dd4cfeab10ef0d3503039edea1e4e5d6b5ebfc484337525852cc383f494ddcfd6dd0968f0f52ed319dca8bd23a8da941c6f8dde3d73611ecef673ad3b9df49c3ad6c6f5e0a2ef0304699e33dc3b473aa1837e4e70744f232803fdb589de01b96859e65fcaf2f333b8b42d253a5b9c9d6c0a73f05d286527b078f50f306a916fabac1a39081a3dfadfbaa41d984bbfc71400ae204ba060d03f8ed01955871588380e72678e6c3f610e76970d7db394cb148919b49c27d44d9d1e2be7bb7bee63da4f00642b2b04ef8df6ba71c284f2297fe41c55745c7b65797bec34ce88d37b079ffff3ebca59064e0c64485462741100a66f5a888a8f741f403023c507b30875834c77f92676dd773e1c1d6cf94b3689e3d26a998d98e0f895b20051e34b46a55748925771f9bfea93827cdaed2fa556e40c4be69f17fb24025551c345678bf641590505cc766364203c1aebe7a9e6e987e10e045e04808107b486d83c47422b25262539014efcf583004a52316c80e110fb60077ae6a9837302bcfbf0db854ace58d45683701540bd2f120051d5a5183e4ace1849d96d96d855f07cab3aae33d3b8ee8c11d763932ba8ed830c1efcd48c236b3d2a00d33cbc3e162bdc179a4420b554c90550a910828daaa932482f8b7e3dab685579f8b2cc911bc4f3fc84d9b468b95886e07780e6bde87ec8b3181318746dd65af03e0fa42325105abeb8bfcca4bb99e0b0c74cdf4a9300942c790444aed737082792137e5301b0b94b29b97afe1c22aa231a2131d9e21b6cb235bad1af7ec20e43fffff4522ac59f7c3459df49d360f2ebe6dcab1050095c9d1787c25fba326b4fc0722b4a2a6d34154e6e83f4d0db6b6b736c8c6b43c5a9be50e24869a618f312abdfdc3f3bfddacd1db78ba02a1c7dbdaac4a7ad6ecd47506cf00dfea7522ad07a0661298da50ce69731fa1580b4cd08ac21380198d71f70a5f2266316a0206700425de8d7f7a1ab27f89a1f8b79183576da78678fa7552d6f53b7fdfae8fe562048802d6933887705b8e61ce9d5d8e656e3619a139c0957f5e25f6aee84f26a7d5b876daa4ebd87beccbbd48f49d1d24a1628f3624f49d633ca234afeb38d23e82213ff3f8b1ae6dd1a745e31e73c410358cfe30eb7f66a3720e51ab07e146c6248fb4fe0bd8ee8b8d65923711943aaebbe5532d5b9463bae271843a0ead6e3670c5e6874bccd6691d129cf6ec1d2e82ec7d7ea73cb87c213e1fdd4502db14225c72aac8f50df0f72aec5015608e4e496a55cc28b993a04298da2a6ae19b6bdc057c1e8d9b8867d753f1761cca0ecb4ab46ca7c8c385d263832f74fb13de124ce1c85c25f11a7b995f2f3347df9159f74d2cba3db30e0a193b9ef76cb13a5127e1784ca0b45bb5797fce84a6acde2b2862d3752191c5e0193e96ae2115b3857e47f8ca3f75b45a01f7777401bafa1d7b0fa0f996b9fb43b72ea5f414b99598b414e3a6f19642725b445e3cb42524ad427f1a3fca879cda1eed8185d9238cae011079b198ebf18b0503e496f05f0e1b44061213e16e0863071251d1c62d3b4e0369d3a3700061510c3034c9de981415b735ac3da20c011acb97d9292111bb7a0a0fff29f56553ed32294128935304836ee71ef58689b4e1ee0304e0bf5d9809bb91665b36d8a01a8d595a85525125c8d24141c11300e4363ba7a3f27a788fc9a99babee2daf0fa9755acb533294599f9aa02e1fea5f3d310394bf37f8e5cf6fde64eb7a10021b10e6221072aa758fb916093e2681590494ab635b7b6eaa932a28c6e64b1561800f79a4d51c98830f00efe8df1f08d66f82ff049801363890a6dd5a9c591c14b4e809219b6f280eb8f9753583d11e18d836aa026c7cd5f6c2c66d75ec68c1c00c5df8363ebc3d09c1be3d0d6de30e5b302219c0aa61c9ea13b1fcafbc80f3188a1d6f12b67b90ac2137bfe55064b1e508a28f117df01fc100f174d1d6ed724d34f8120c63b04f53902cfccfc63f5d84a57d2bb531632750e63fba52900ac1d00522c24a784e33290ecb9e1b9826adf47228b18c121d06b8cf95059b533387583f0d0d4528ed0302b012ad74088eaf4557959cabebe6c57bdb1fd1ff15ef928ec71acf44361d1fe3a95e09ee3f24448545692ec69001fea32ebcd8483290daa8736575b81025380384013a4f562d5208b07756c89bf7a030b630027ca435501d2e8580a5f052c1e1ae7d537ccc2a6e6bc2ad20b7bb0149c4528457435e47b393ed335f72bec2495fd49f588e8d82a69775115d8b7b63185afbd544630d63e21452c1231f6ee85aed7d10ec1a38fe03fbaca266b22695cd7c2e68ec504af1d005fd8b97f1912cef9ecad006ea16deb70d5e4266f34cd4d52f3e1a5e1a9c5f8da4fc160e20cebfe97fdc20cdfd578685cd54c17a9347c2f58cfb8d26782b29caaf8c923acd5a9473dacc23239fc5a14fb523b3738f28e9cdf75ff42f6b29a1b2684e29c4e0bc36238b596d64e132c99b2eaa688ad1d29ef5009fbf074a20c77a10c68226159cb5c03ae0f13c799c19b2095d9297b4b24155bbe95d6a7367cc8e029a1eba67c138575db8e8e96cccfd0e446c2c435805c7a2f6bc5eddc6a489f8078525184146d13b185189c71e59508771fb3b14790a5a4815e96c3cdd89cc0f24457ea41ce196cff22afc175ff0eeb95e743fa97028038345167cc048dcbeb6d766a8ed9561a0b861435cb80aabaa48647dca887563a001f726738ed621f9731c5db1e98e36112ddae87a7093cfeb10747bddc49915d82d8296dfe0c63c34039cc9d6af4554d87a68e0d1a0d4bab5ccba442311a32d90059915d6e1cf195b41946dbfe18cdd9e75b76aa9d739742802ba5003a9e3cbf912dcc784ac851d3e873b5aa568df4db7a31fbc1e1b861ca3c020e6ac62573f63a10d2d56feedf2f690948ad064294548e875091eb3ea054f9ce7978ae1535f723e5d5062651f051d859dded032c9fc1054af845f8f5ec1c0bc8a8934928440610970f88a87ff0d2be96b1d619b175c7869583a35ce5f1621bab57bc0ea1f20460daff8137c9f9ba4645c615dd715de15681ac06f4e27ee9d1b40fe4b031bc7fb17024520f51051129e95a13f5acabf9e040710b890b789adfb505f9e0ef586faead026641e85fb3f87591f395ad54b71c1850263e87a4b62b2b3f4dfd460c2465402b3631987cdb2b8d9fdf43ad23cdb9ec293764b25e28e8fea79c32aef48a40740553ab1efbd4d5a2ca15d051271d545425dbb1eb754ee51bff23204ea1086bdf770d2bf8c24e0eca8d91afbd65031b7ab250f75e1f0a5746a6bc533e7d1d4dc539bf6565636ee04906ecf2a78fa14ef537053ed3858861a0895e2adfb4334f1b651a2ae317d508c9a925181fd0cba367d375a3f122c6480d5c5cea6a4c843bb4b96ff66fe02aa4acd47483282da376f3d45682220290cab67b618d4032b40eab9b0536263aa6f75acb5393de9a439d8cd2248aa973b50366227827a538f17f50aa9b08cf2158ab6383245d3e7f84aadabde4316181239514856aa822f6727d909f7b5db0a553546d546a3d2c04cf886ec55276f57cf1aace3b88b566efa7fb8881e62c49f9289714671a11c442f06cad84b318e4be11c0462f00bab9efc22ba1715c0d09ac89e2112c74a6a3cdf8b1168059da92b49eb10207bbd851ceec500d18b2938694b19654cd3bb166b102e4dfc0633bd4740fc84c049a1c67b30f5b1583f0c92c772fb5b4274a09e6fa293bde6dc5f10627957164b72b28012c3aa0b7de95a86af90daeb83200ccf70d964992ce1b11b7a846868239001758f5316806bbe4ef226e3bf686ac42828639c157ce6ba9715b9be8cacb53d44e9bec0f2380f67b4e479b95372a3d6509ceb739db506754e1f49398b0dc98994f2eb0e6b550b4d5b8e81e317b1c11ba188b8f1a205017c70d81d94e0ab5ae875acfb315c2c684cd14267d30c8871a09ca8744ea8101daeabf3abafd9a9f0655059a351cb3b4a0b37aaa7ae92d2b4c2414bdf101529dc3215e862b29141cdc70bae9df6a4e15c4f201d963db8c26686b1339fd9359eb1f4f3c1258ce136f112abf890061012ecf2646d454bfae6ef7a8eca6cbab10c5052f9f392bc112b347e0a9f342824cd80216e24b14a6093312bf54489d2d9a3aaf7a5294c0119ffc29335427884ef30f7c1158c13bd15c600857cdea67f71ea21b490726464b386a774723448739115a244e5c8433bcddc67ac6514bd6a103e24ca7e57cefe04b3934fd1f8ea234dc2eef8798b5a5fde46fd4c89a731232aa48c66334667a2582c61374cc87af59c44104ceb3749ca9670b622123a97e374ecf59bb13489a8b320b1cd8905769a3bcde9eb9cb9c918b3ea2a8faa8c6718df0afee50ccae0afd213f1effcf628dfd43e5b14a52e03f915d44e6e82102180a8134a02996123bb7ee009d287fbd7f97409cd6ed59ffef225c2fe753f7f687d4300e784926664cb9f0cd346e11e2a776433010c706b9e4e9c6a08d55a2f3bf5e71c8c717de1ddd45685970610178edcd789f81849ebb012c3e889609339730d713456aa2fb0187f052e2a2ac94547e5763fe98cff24306e81628e91a4ddf021b1ee4ebafa94fb1871ec310c38ebf3823eaab47a6c39d7bd65c70050949474e69a0d971e0077ddc80e2018364f5cbd6497be0ca330b1748100de1955973aaaf11c086d4b0cd8b98ef7231f601a10baa0f5cabe998fd62389635c9c3b382f706f0b0c27a6640ff21b2c63c66ce2de3b636234e7fd8ceb3c3d12a2ba00c12e5eb0bfb7991e582dd62b2451421e101db5c852037b5bcff6ff49ce651e0dfd44a396e120e0234d36c4ab58b316e42ad58b7db5511fd3397c00c5fe93148cca7158f20ec2bd249061287e493199493fc1a8510b8c6078c193da6313646e91264aec9f4b007d0ad96738e7e5a4f109a4e6260de13748f14c891d7e1dcf71ad0b874e3a513e0e1d9d33a9b04eb394db4a9d942a1cf7d22f274cc5094b7e0c5fe511a6780e8a2eedf4e4fe889d952ada7c169b25fed1090419ac34412bdba6d07ddc60e3a308959e6ceb7445d3075cee0d0d84e546d9af984e53f837d2ca318aa602975752ecc31c2a7e05b8a6beac3963f44f626e5ae42028898dcc0fd3bf4898810ef470419459ffa1f6ecdefaa49254e781aa96fe2fdb4e1d6a6bc59468de4dda956178f9fa0828268054092b0093625caad5f47b026d8d4bb02bc6acd4c0ad05f61acb94bf28a701a54723d18b3748a175a13eda010511877f2b47421455edd7862660e9b54a896350761ab5a498cc01d0c9352cd42d04f491836d782594fd32a29089791e06eac217854755c221440c4331dec8ebf5b740d1ed802acfd3773ea7850c47a2213868054d5cf13d925b2dec645bf5fd335dea1a721c2db56188a0812bdfd324baa59e1cd17b5dd46f815f5179d8793d80888c2118a2c5706a1720ee906939c88a828c21535ec25ab48119ab629f282871ebc49ccaeb31096fdaab9e8f33424ad4c8ea47ad6e9c35e0ca9d21d576d49ae5b96202fc8aa3e5f47b58a683266b800f9ae92ae1105e34bd29c302c7a519e9e540e359f97dc7f7082abf9d557beed07cdad775e57106bc5a9e6ed53b969b970b8237e2b686f66096bb7be73017563802113c3a1114a783f569fe6472d2aedc124fe2313c5993957ab42edcb3097d27f7376586c1ff0fb0898d4495e0612ceb8df3584fc9751ca4d33fc4ff8571693dd63f3a59cd64088e675d684ba4885070251703ddf6284978cd9a7f7e23f42313e5e5f6c60bd34fe50d778e8a60d129d0aca24870824f062b90c1c2278778324693899885911266f0e8a550b33640cc719c207d61105c6d904893655c8fde583265d916b6a45e54656af78a8e2a7cc7a83775d8c460430ef9fd690b1c8dc1a1b9af1b97a348fb556f337c0b15caa7ad4e6f27e95db2d315646edf1b93677d7e2781ffcaefa0e5899f652732cd3b6b11c9fc6c541351dc10174993837f6cecd13e04a0ca948a5467e0116fc27dd1588392e5928857830ee327b70301e2b7e51fa535670540340aaf29c132b448a5559ff3f23c74568518b5231428901ade9785a791f424e82cd341bc28887ec95708ce9539b0700dbdb2dd2f872a1ee810a2c5f2c058f1618e4cd6bb8f62ab9f33e12a9b122f0931681f4e794bb4e42ea3283ef81e288899f695a2b2146bca6a13fc69bb4291100c6849dba8955e05dd3e4eda2cb919ecda2ef0ab6e80a8538120e6180a046662aef733bac22e920cfa392fc655c7937bec4527082df6d290c1494512a729bc2d579a4a52732cdd6f5e170a9df97437d0abec4efccbec873427d17ac2d484ab7b505f008c9f261519d9cf885a1672004d9c963d58871e0f1ec2fe4e7b6cf205ec91c10497611eb1418e2b494b0372ee0aa966c7b385e41097d9183988bfb4b3488aa6ddf644108dd3f839c30213a06850b410dfa48fe5efcd468c3fc905a6200acff06a0d6f2ec388e192520648d8adeecd04f3f21973f8b109acd3d2f06c6a5bf37b48451bcde0487f93c6811a2faacef6efc70ef7af1cc831116dbfe9645c41c3d1982095a4eb83add3ef21c6d7d62fa15a4e41152f0d384f604181289e7fc7b4c98d17ae11854239777122a8fc1eedaff7ffbfd9442c28d63c0bd22addfbc1798d3c0db40dc9369d32fd630c65d6b8784ea1394982dc501a7c4202707c94d0a61c3ba29d3cf3be6c722cfe95e1a76002f8a01b1ebd98ea1d2acd7f012f84e67e5734e2aa7eb66061e3085d805403029b10110e0ac0a1a7f9e061ab3c6f98c3459e0e04a893ddb57eff1c69bedc08fd500faa842e7a558ecd4425a87866823713f503bcf4c4562cfff99fa8d7727955e1e25e7194436f0a5cb1d79b86553cfc236a415f7d028773e4a336458980ab022993252422e719952b748e3f509baa5e92e59cc3e1e46c2d101e612a5b770b6aac2b9a571ef4a11068305eb858f6c1e60402302f45affbeeb8c7a91748f3dc9c92bf5cbe881c851f46b4850931e4d1ea8a021e25a663a41b6754549a4ffeffd493e5ac46235d50ec3f568864c4e2b59a7c2c2920c3a884acf5fe51e1fc9106105cab4f80438523108efabb9c78a4dcdfb284e61d93ff4c1cb4611075397b52a013d75460a42a4f5cc10561a896c96619a86ea54d32e516300d2b66a27f41a50e21bf68eea381035cafc9346c5ce169916fda082b8d966746a60b7528d91feaffbf4bf9cac5540291e723f7ccef02f3a022d745ecf3ef35ce44d627157b8287e8d63c5642fc88edd6e53efd63652b8341517cbbc43cc627c8b8c2301c0f0db449aea0abab99cc40ba40ea6d6470df17b66579a5347ac7528df0dfbdd28c3416d358a537526fe8444ae0d0e9b26d0d94cd43cdce1bc126433708d571ee9442b250bfc37f86b0d5cf177c0f57b391039f9551fecc8538b234be6b64fd9e7c222a2f980be592c1875e278bfe39d1052951c6ad9432d4aefce4953efa4bfc266b821e0124aea3b079f0527d51e3baf558a6a0223da4f620bc9692c6750c83a92d5fc071e3815f60f7c1defe05c89b3284de99e9ce68765772707802b54e3712d469174cd0ab8f4639048c1de8816dde79c6486d22a6a2444b2592248c62fc47120701e0ad51be426e3a199f45c01320c80987d938a3fa4d4067132925109c8681b62c5de01f7af2be26619c48695d508ba632dbf661012878792c76421612e2a4a3dbf8a1bc72ba48cff9aa84530c405db6c62447a82ea78096ae1cc545fbbbc4b3fbb0010144c264c1f67fb72bef8c6de7b1def8a04d65a111f61a344bd8164c227f3459b75427068ddde9a44b957d0b4bb4e213e2ccaa6a63bbcd51aa28a0d8a577d5221d7b296ec526395af9ef6b228446a38025d4119100b786b821c1435f1d9a6bbfb82551bbf916233b7b485a5494e53ca99d8174e3c14ee3be64ded760a7dad881aa1af4800575da9b216c69ca78197a4401d156f321a00fcd4c0dff461a3cc86cd74d9e6ff76d7e28dfc16115f3aa7a75102def13e79f48b36869aa8b022d206c4d6c50a379950deaa6222abc5308c8d3d8b33abfad94fba0a71788d5ee3e7eaacdc2b4966135714468a99856f43a5d3b541fbf5fc0e3c7bd7718d04d45e3badc4d76a98c20685b8ceb40fa1c6dd3a185e098840e497b90b98d34680f24f8848c9eb051ef94b83aab82a5babf6dcde0333a3e1ceb8a6b36090e3ea313d3fe0a7caa8fe9f1765ece5e57fc2d686b94962e9389f4715d9ebe1b87ce0e1d45fa7692966712ed44174199b808a53090b14424bd0ca65c339e09f603a9202299631ef9d9f0ff611890c7994e3b56c2cd0fdab7c5ca1b9cbe9868d489c0c17dd35d6fe9d582d037ed8ceb5400983a7df89061f82ada026d37f4005779060c0e641bf49552c2d85b3c9a1dc8c19b997404088f88e2fdbd02c8558a8e72bfdbae7f6676147f4ae42c76e91afe00dddce9b41c0ac00eae78183614706aba990750374e4399cea5bc5c388b85597fcc670b1a351e3b2fd5965cfa2fd2fafdb165a59dadb35470fce578ab35d09639b6a40592ca93a8e4c114522e827073d3f40432f3e88875de5912fcbb20b8c140fc659d70a4e6ab57c4bc46845c450d7638f776f2c1f5daaec40dec16f617a6f02257d6ba022cee5829b80eb6acb7d472fa9dc1f0e95f95dee66e28bd001cd7044a12ac17b56cee74fb361dd3888ffa7440bcae547e3e29aef3564629ad61d31018c4712183a81cb84f5376e6cfcd84023eee3cb1e2c04fd7b814222bce5ba545bcc14eff4aa201309c7f354236ccd7bb1cd930548a60b4813a1aae61f638479cdd2b9ca864a689ad3481ad180521ba869c4e610b42b888eaa76b0b68f09606089345ce32597e737a54d52495cd1e9e50e135a5c66ea883eb8f93e22b1dce0b43dcd86b48c5c260151bf1ee6e230ba0ca3e29b5b527f84ec30391c68fe0c4a89e01224c5ed7db3f26bc981f8c08401ae4f89e4ac52f89bb92e0f4e91056bc48a1f67bbfc9dcd28633d35577ed4abf6ec312c843470bbd41bf47127c32f615eb9cb9c5c25f6fce2f11e37c8f80ae58e86ce88c5ada882142943a0bfb175d19ed62228d139200ce22f3c6416a54a8ea8b190fca4973931075f071ee98998ee2fa2985f73d222d3350be3c11ced4928b94871586c5723d55ffbe10395cce6e5ca96f10ffa6eaab016813f0ef53fe238feb8a2f49cc8e4145afcfbc02cb59d794b66b24eaac971334d240811a8d19557688b4932e09a74bc7c2147aa36d22776ea258fcf692a94939091bcba6c8913db83511664ea1aa8c1cc9d86dab2170d364303a57693c89d4631798355b61266afcf202c196f0a24528c8885bb49e52b9994d1c6e1cfe9855e9a9b1a3aff3dd9cf647977f285a65bf17bd98833294577f046ff93c73bc3b14c421f35483dd131582c87e8d9d64d2ab4e4e0ff9abc0a9820b4d3a8e1b6cf31171d71d9097263090d827e1db79690d580dd685199da29f1c128d3e7d7c76b418c97db85841517b699cc6633fbc2df94fe5e2d5739382271898d15af82abf2c36288c51365c87324482a257a157133fe6596551a29687fcc3d4f5ed3e123faa488ccd531d3a24f164cc81b9d46c0d1e79c6510352890faad4470a6dde80ec83a2ec4c7349e435bbe45427deddf3b57f552472670b1835c3fbba375c5a75ba176598b1c3143c2fb4236fe6666698e95883ccecd8011c7ba138b6ad0796f285e21c5bb2fc0c382a62614729473a746c840663c6aec8718b8a46eaee6a41c5f5a490f05a628b776343edb6677cb322c5dfe66d2aa404902ad8f1ce00dc22fb6905c313dd8d212ab300596e3ff41b31d79ee1ac994699333ddfa6ac0b7be0082c044b68e8b1d98c4e501a031e29ec088ef1106d1daf8f20aab4ef37528a070e98521228d62e32af341ed0c3a8ca33692f08518e7be1251598653ed8ab2c0530779fa806ba266b5e2f34fc59ee7f046bf02d31919e528050c90c990d9253abfe1d850d3978ec68acbc8e4d3a0aae7fa155ea6959bff9229dc36da9d0d63890f7265335ed4770267ce7f79ea550925ddaf952d1259599231a9d7cb44fd17aa356655ac1744cd7801e39289b305dd0e6906a7b23d8767fa79a5a53bb569d1e09d8afe94248bdee89673816bb60c6e26da0d0c43dad8a3cd0447a3361dbbeb4b44f8e0bd64aea4f460f5f350d6181f016b9f2a468d4b4786cdb7c565000438c9987908ca9f81133dc67bb51785c8eacfea2784bdd3d3460f9aab4a3af7c578d460ba6a3b8d279d7be6532edda533f6f80609c195c986afa2005bf12752eb5e4c6400bf895b8d770d5ed70c4fa789396600242f0b25c0f51b3d2cc85f4431f6395a9b9413c62d829f337cb9ccac459796ff9e4cba656ab55f8447e8478704d0fe3d8435154268fb23c18df83847427e3cff6e0d61ab1c354c77e88bd275168e014ba23a9ba40167ec1b61470c1c0002bb0c7ec452cfee618f5e049aa1839c5953308534c2840bc9d01095e716bf0e356226c4edf5563215679bdd1a993eb04c00525c50380b60a3c08308dfef8707b19c601f049ac66d7ed07891d85a62faad7e2c246f63171d16f7b44d090e47e44b1c9f0f291480d074a21c1689c90c69f90822b07c56f9c63bd2581443a4dffa290722e26a7a1d675938aa477bbf655bcdaef6406117e1c3b34589cb46fd5a41c53840172b5c1dacdf9baa8a427d94505caedf18b11e37aa76f8870d028322469667e749f9469007c3e983d0e381937332fec52bb57e64e8bb9dc639addf0a37879f405aa2fd5f0b09ab96a7a1e5a74d2f2d59aed0989bbe81756cf8aa83010160c5e0665f1cc91e765b5acca593d9b39b529741da0aa18d8f469d898ba2b19bd25577778efd12789da538f8ae2e1731b005bee9d8a8d54e51cbb48aad1a9af1502bffadbb2ef8a2f4b5be19f5faff7f31042a41ff79631dd33a74223ed15d67eb078657849598183886880efcbfbf40951de87d50827c531dd6bbfdbcb094e8f4334baa364d7e7bc73751fd2bbe727c2c4d8a90bb675cf55f531dd57a517b6ef3de71bd9fc60f45e6eef39084c46fae37be515ef391101d66fea96deddd71a1986fb66daf554bdbdd51b2a5e9ee806bbeeb9e27451a0f6f2aa6edfba1db75d48f0f49e7faf5b0560ddc9b19b8d35d0c579a9d77ff41e9ddef398fafe88a0bc91bf7bae6279a278d7a5efddd788a833f2cdf7b6556fc1ea8d8b9742d60ddbb74ebafafb55febd702fb2db0b450d5a4f195d54eadeaddbdcbb79db256d6e97dcf0e712d1dd08ea4d707b97b7861fee2eeebd43bdcecdcb0fdf7a3277df405b577179e18cc5cb4537f375d9d3eef2d384bbe75deea6776f01ea7dbef39e5f870c884837b6ec2e975d026d05d13d0bbbf7f18690ee7231d007c107cc9412bdeef112d4dd77c25b57656657564c6fbd5b4b2aa05fef79bb7860b630bce742b73e63b02b7b79eb513b700d79fa188a06bbc95e4fb05e651476b6c73089c18091ce914cf9655c22607e6f66ea27a7b9f095d1fa05251a5233c080f9ee12806479066e31a2da80d2019b9d718ffc7707688f0a04d9a501adc97e373772f95b651832f2b94282de794a3453d4478ea961ae94211411bf2d905e76a748d8e0b205c08a45a537094a560b66e22049ecc8aa916a14d752c59a939af9893cda46e5d36d333d83b4eaaa3ddd445ad171e9e29f380b9166a430a285684e9786e067ecde4feac5aa20357b63aea10a100d4b37c75648e932eaf7db34273d45338df34cf936391f896af347f03c523ac5300910b6dddf525ea7f612370b3f5cda200d83d76c687ff215b3ecd564448416b484fdc5209e4938f32a98ed48bf805fac3780092a7e1b259286af5e28a623ae742ca8432ad026808b124fcb2e969ce0012e9419b937bdf99975e62dd49f1e83fb6ce042c3ab365604ff6e68514a293adab30b42556a0201f40a254d0a73fc924117ec3578e564c8b56fec36e84871a917ab161b9867c51c1b2d8688b960fc613012453b9bf09788e99f33a051486d7da900e21ded9e8c875fdef22d42a4acf1a82beb6012c8ed6d6ff66dbd6ac5f476fb7f1b9f0d5f7bff66e8b7c140c6b434e70d406c875db1f8544470a8d90e6f68a1a449c110c9ee7ff100525521a98de212ceaa2a86aad4a9770fba16691d9c14327fef5c6823eb89da522667b7b4ebd9955878f6cf18c3fe306d919ac15253986677b244aa486993f5e7c8ec821d92e1a9810a88d6de06c853d4e4cd46f3c60dd7400b0e7234a9db06c105243f072123285a07d98d52ff2be9d283c4feba7332335d210558db4bc838ff797b56a8e028b0c355d0ad108a66f40568badc880e9c3045519a2204fe3fafd8177792c4c91e8e47fee859a800e6c3b073d7c4ff0170873620c406178af898ca2923e6ffe03bcdf015dc13cd88828fba1be1b97e51d00d4d81a4f9bb49e089483afc5a4233998900f8097c41b191041d344d334851d4093c28915dd026c12c26f080a350f40ad5e4901fc94f81f78ccbca4a574b005123931fff3148b84b762bcb173878a9bb66c9cab171800ae5dde11a6c20e0c072daa2306e2f0933b8ad1720a00c347330b31a4e3ffeca803e1d0c43fc9e88691f81fe0e1e8690cb20e23ca009212506e936b7173dd3fc63401cfde7a1966a9050c2326f084c19f0470ce2984c92e43b0389aa0af20b913ac54160d47561de2b7e51e5f369832fa21087850ddf54672ffd09336d1bd9bb2b03f06cb0fc07bde148cf072f2040fc834d8303894e3c061b7df41a9baf5875163cd8a4e271379e09e827c23ea742dab31b24acad04075a1c0c14087572027e6204360b3750b0a6d001f3ffffffffffffbf55ff7ee7fa3756bfd90158b55392296c502384484a78b3aa24539229a588e34a43401e1ef236f2f0fe7ec00af30a150b88f67af9e7681a0125c9d949b6cfde73628a80cae1c2f737cf97dc888036a196624e4ab739f643405ba6f6894f176ada0b01396b253e9c78a26aec838038dd0a9e7b7920a0b3259db552c32bfd03648a6771f494724d711fa0d2638ad9bc7d7b4a3d409f5dbf85b33f7880ec8c33eb49d63e3d1f3b407d77a50c9f31263bb940f8e66c4ab9e202a93eeaff692f9f8af92dd04938614bf6932d10277627a52aa916c893bf76f672f85b9b1608935268df95ea499a05c23eb66eab74759265814aaf24491d36a8a61b0b94b41517a37a999c8705626c2ba77f7c2dd32b101e2cf899765c814e7f9ac53dda0af46f7eb594926e689215286da561b2c755a0641eed2ce9ed641855813cdd5d3ad7a796f4a50265723ec1fab46dfe1c2a50c25fe7f9d28eb3b9740ab4db29259a5cd9a05d32052a9ba427e5a45329102656ac9314f35ca9440a84051b53512d4da69351204e99e9d317f7414d448192a7e6baa49250a04bc932b2492e95d707056ae404d5facf64c1f409a4f569cde9bed97d7b02f97d9b3abe762edc4ea0c4f070027d32b9c972b209c4e76b9a8baa09e449d9f1a96726505f627f9a8fc94dc204bacb53bd25af2f814a6349f02cab2d813a1993d664b9d6b5d295407f8ca2d9b3afb2794a20ed64c6d7989f043a9d78e985a74b25491208efcdb89fa48ddd1c09e4769a863fc9f3dc0c0954ac98e117eca492398f4025f5d6f1317504ea4fded7fdcda54b360259b3b974f4da1267c308b47a9e25315ebb8bb70884e5ce3e1d17b3aeb12290a6d69be3cd799ac68940e90c3755a9749fb01811c86025f7c3af43a0c4bdd8704a6efa746143a0848d4d4b53d7244f0a81dab3a4c445d5d99c27042a6b9d9e3473cab71f043ac9e1fb71bd20d0a72766c5d37cc289070261ad2b5bef1fff754020e7ee3568f6de99a43f20ee44f6fc4b7e407ab4af70572a09f701fd49958e5629a3897c40c99e243de7be31e97a0f28311af7b3b79b8aea016149ae7bacd51243ce033256d8bc292c4ef98b076407ebb86feb1d107e7173a3e77640da29f93f6f275dfdd501552efa9fff62d692d101a55ecc2bec87da6573409a946eb569d3bca9560e08cdada7e4937f5b531b075407375dda74deec6ae18012ef65a39efcbc307903b2947c82667bb84ef26e40a91c1ece94e4499cdf06a40757b324bfe2ff890de8f6687625af9d704a6b405a92a46a40a9b62ceaaea56dec3420ab2bae995c4ad2d768406e9630bdcbcf80cee1748ebf9e047fd70cc878f9e53fc6778ed932a04f85eb9549aaac840ce86d4ba772ceb077e118907f1a2e972f555b2806b4d68bdac98929b5170694bc57c9c4f88101a5b37b92a4b74992d4be8012f64ab6142e2f20a3b99dd8e9d974ed02aa33f77a49a724cf94c30584e949829f54f24db09c2da004edf061d1440b2831e1c2c42b9a453f0b48cd5582f6c5b18092ded4fd29d1d326495740cca77dd424c69d9bac8056939469cd55b361aa02aac499f79c1bdb608f81cc64eda52cd9fdc6544025317d8a9fed1450256dca79bfaedc8f14d0a15e72dc9b5c72fc440139abc994685228a09412ac735da953997c02eaa498d7f9afc971e304e4753831cfbcbc9769022a497ae91fe3c5b79009e88dcbfe694e89dbde12504143b33489a91250d2aa8ea6f079b6549a0454989f4eb27f8ea929450272e7d365ca1c0165329a9ca4e06e2bbe11d0f1b6e41cbece75f722a0d7925b064d15b34a4440e7e64d3397efa3e121a0d4427fe64e345c5608683fe9a9b32d49f2e6040121ef6ae27234d9a84040599ddcb195cc1fa052895f71e2e703d4c6958a5f3b55622a7b80b84ecfa6b497a8cb03c4452d7d272609c10e5062e6f3792f5f897e2e502689c899ea7181125d4daa4ec9eb95df027151664fc5363185c916a858fac94f264d29656b81d67c9252d286a74c72689158fd142c067516e8dfba942d250bb45dc99c4badd484170b94c9ec1bccb46c8d070b94dc307db5be027dca7326f1b2a7b814e30a94c793196229a615e8f825f54e8e9b7a67053a259946f45d0532eb994c925c9fba54052ae63f51bef354a03da96d8d97a30271f9a255992c972c7e0a7476e5976bca4a7b9b0225e462124f6bcf6f970255f1e414976952a07cf74413762b96e551a04e9a286f9be6ef17052a4da5a99cad29490a0532fe4aac5f17144893bd6e9eee275062fe5815390fbb8e27d0db7f9f2ee6ca14ce4ea0e4124b764a39817c8f258713e34a53cc266acbe625ff889a40e94b96b2e414cc04dac2563d6a0a620225736352b949c2c87e09e47f52cba6937bbcdb1268b59473e3d79540c737497ee89dbcfd52a2d8ced949a0c5d24793677292cd4a02a5f27ccc46f33a46238192f5e9e9e4e614b3799040c7fffbe9f4f41fcd3d0295622969b99ea694dc39c2fc92f3a6e38d4009fb371b4ffc676504322635ea35daf3318b409b527aed2c776bca2902a5938e13ab24bbf41381aa309f95739630b31d221096e5d7e4cab5b3f94320dbe75d6f2e8639b921d0a2a7bedd275eb86c21106b7d71274509812a316b527be52050df2753766d04815a9bd7ccc14a4a1e5a2050c2c559897dd34c9a01029554cc2e53d71f10369ec4afd8ec5c17f3034af03fb1d825b77bc5fa800c9ebd63fcdc705b313ea004cb249752ca62f27c0f48f394323f999d1893f480ac4d5a25f89d07b49d559226e4932489f180386bddd4fcbd96e53ba0d3a4ee5fd2da01b11e1f65c38615fdd4019deb737e3bed4ea37440a9bdebc9d58e5193350754cbd89bb42f5a722c3920d652be78b2a8a779150794bc594e9c130ee838712ff32b950e56bd0119753e89aea741c42a37a032935c12efc43c57d206949483aae958bbc192b00115c7c4499a73cc325903da2d7cd7ce57032a5a7d256fd7efcca701992ef3684076d5e594b4c52f2d9d01357e49f2eaf0f3de0c88f1134ece8dc9f4a6cb804eaaf7f449926cf535199041474f49d6a6548ec780cad629be7a674da92306e46e26395d7c4f930f03522fe9d4a7a460409524293975522659a85f405669bffd9a5e40d68f9cfc26857e985d4047bbb393d5e302c26d5ba3e534f59c6d01b572c2c9d999161016269fed2eb5a69505d46af4f097444c772ca077754b92d6c5357305548a5df2e98aceb002327e25eb6caae1d2ea340223cca8023289295d8cc9643f51d31828e9ed2fc54b990a882d152c93fce48c29689e3b3c739a9ba5b556caadd8bd16fbb1cd1833a480eebba8fbd1aee2c995195140de698567d5ccf035cbb2294d2de1a7f15e343361c613507d49367136c38375d09d6df4e01b693cbcc0d1a3043cde75841414cc70022ac60a5be13c53256d9b80b89cb32c473d6730e1945d6e5539b3bab63e9bde2c7dcc5802f294d85f2d31fbaa93194a402715fd47b5f2a67ce18c24a0c3534932985c31716d33030928ad493c29c7b53c0f179609b0bc61c61150b2f265303725a211107af26df39935c39418b703870d307860cd28024aca59fe6445ebbd8bce2002c2e424493e6dde8c21a0b54bc8577e7a43abc7d2982104f4d8bc69fee74a31dac704338280125e6249daa899422ead1940405ea7dce1b2c6337e80142db1a49cade486d6cef0811f2deea99c623aa30788fd5c7531e3c96e4972060f90229a3a93b8f8244e1b783e6307a80c5ee1c49ce9573e7943eb2c17c88aa97ce6e4f03e25c705aa2b899a584ac5249d2200c12d168ffab9fac5b205cad5d39364a9f17cf3191ef0c0173c98063264480104b5407c3aa5afa29c60d102b97e626d0eef517c651eb340e7cd193587ffaa8dc9029949e7d1fe3549899cc4023dbf395554d5ceb24d990940000b10bce204c9a408409e80b2f2abe035ea390169b7ffdafdff813401edae792d67ba77ffd28be61d3a6ea41cfc22c0010813409680d2a5b2c2c699b1f21c88124acfc163d6989e2226265953cc2049e833be6392ea4b4c00820494345b8268b2fc08a8ae92f18e5d3202c284963461927411509a257ef212a3e6e06122a02be61c2e7e96e4af1b9021a0d26db0d3657d239ea406164084806c3d3bd173fe9872df3a248004019d4a36312669e4c4983b08105031d94959d29c8ed9648d00f20354c6a7d98c2bab26e3b106101f20c53ad7637c7f29e1cd2d80f400b99b966f3b682e191ecc02080fd09dc1cca4fc983e4912c80e50f1acc6ab7399a46999028d5c940c1ab840cc65e5fc9c2f8e9dca6881c62d504abb6c4c92e85be7d41628254e6c100f9f9410fbb040a31608bb3af549b48b16a854fd9d3955bc164d9a05d263fcb9a4dca4341643431628c1a4340f9a73bba94b23168853d7343e7e6278a0010b7499245d5b97f4d2a6e4159798f2abca97a6061aae40d95af42b8b1e1e345a8192a6a22b767bb7317b43cbdf8ff1a8a2c10a54f7bd6ae7b0d154ce991568ac02bdbf1d4f5efe2fdd5b07061aaa4079c9e0a6e4cf6ddf57860c1c83462a50264b9a7b4fdbb0c18e1e6769a0021927bca4244b1cf9cc699c026d4ae99c6825857e97c08086295032d6e492512e05ba724d12db9554f0ec9202155631ab9914bb264f1aa340bcb5495f11cbb9648d862850ee294cccd7dab85ed10805ead37bda79fb9c792c3c7868a00a344081ba4e66a5dfb644b73f81b8b49fb794eb09c4d5decff98ae5d4269d407b4aa207af754f629a700271317b49e21a6f694b3681f4b4d4a029966802a5d93f635ccd94924a3281cafca5e29fa4ebf4764c204e92f3ae643f4f1ef64ba0c6b7364db612da61b704e2eef35e09a4bf9ec5945ff9b28412a8d658275a9bf98c6712e8744adda514b7b4e52481f0f2543a6f2c450299db9ed9bb922081feed6c9f75314b4d1e8112ff31daf177046263da33af7c514e6f04eab425297fc61981caf41266344e1cab17813e9df27739e78713b722905dc2adea6e3a116899375d396e66cf612302ddd9b99653a76ab9fa1088cd9226dbd7c14b9c0d818c319a76cc67215026979474dabd3ddd614220cd93699cac154e5a7910c8306159ba73f8ac1d0b02d5da1bcdbaf64af80381decacd1e631a106813a64cdeca1d93dcfd01599f4dd81cfe664af3c37afa2a47f594ed034acf3fcb07e4c9d79dc663c6e4be075438a94c58ae5c6ead07e4efbbaaa994731c370f9ef4e0977b1e3ca06f46cbb54b7e32e51d4afda239ebc9d801a5920972a9c3aa55ac0342b34cb63c25d6458d0ee8243eda4967e7803e2549b99270397240e9649aa3bef6c5bc6b1c109fb7c4c68f2b1cd071712f5d7acbb052df803439c92bdb493ae751dd8032dd54d22f9a293145db804a3298c9f3eef5ecd9800ca66d4a867d0d28692e9db42498fae96a4009b7e25b1fa3893da7012566e8d729ed6ffba201a573bbda886740e9f6fcd9e2c7a4b734034a97f851bf3526f19265406ef7ba865dc880ce1bd578923849946d0c28f51f374ce65a164b0c2875e9cadf2f190654e77429c5121850314ff052e249c3fe2fa0f4c58ac6723b1fd90b888ff7cc734acab6770175a6c4044b9be102bac4ce41a35b4085c9553c49b9ded65a4095a52076aa7a4979b280ee8a61dca4875840a9c9a2a91fc32ba04fe56553eb9be27f6805748f69c5293959b505ab808aaeba7bc97268d63706e2a48caeedf965ce3b2aa0ee649335cf942027765340a5539bc265ef3a492f05a45da931f16135f3290a483ff94aa2f134731214906dd9e2edd4a9f1f80928e95e4dc94932e952eb04f49c8963b7a331beda04e46512ad93c7655e950928e1d4c599ebddd5d396804e4a4a3177a529017596e1e4f82949e7ce9280ba4bbbf9b9aec3090948fbf408c83075928feabc556f04d4cb27f953f7222067b784173311016966a117a71e02ead36eeecf8f492f2b045475d2d9a5637aae3508e812538926d6315d9640409a387d5d75d50f50b944535ff23e407b8ee85edab36bbf0728f941d5c4e8f30061ba2f776de1df3b8d1da0d405534f3a785c2be502216b277f9234dde67181d8ec953ae9f816557cbeb64096f4549bac053aea75924e2cb13e8ab4405e12737b92be59203c85e5f807fda4240bf407b1c422f5e1615536060bd4e7fb90158fabb0ea2b10367f529a798ce7d5750778b802255e895ef53134e6568df0d10aa49ff4f49a339ecc254de18315a8ce51764383754a5d7dac022536356dc9ad7659e685c2872a50523ab93a899a4a56bb5281cee123db49274b6a4a1ae8e0800c1934d0b163878efe40857a9aef31892b9de2b098d6d1dc2cbb7546f34dc29992f5443f4c81f6704a26d9492cc9ae2a05f254ab335f47f18df10f52a0f7738969bdadd54afd18052a4d683273b11df3af4cf0218a5fd552c69c36164d767c84e218b375ce8ed6b1a3c57653a76249df41515b4ec9fb04aafe24e1e497d4872790293f5eee261793dbfde80452d3b77f63efbc741227d03a9ae56209da261026c9785b1dde2e83250a1f9a2873ec4d5518334032487f83031f99407f4cb2396a7fb897cd072690a9fde424ec4c868bab08722f810eda77eeee263cb3b204fa4f4e1b5c839d9b98ffa8043227d1be6d35093165f9a004b2e4f897a9c72cf2168f8f49a072f03f9d6d2bd9ce97044a57bde9b79d5c07c80c13848f4820c6fc642e31ac85d72477830f48a0ccee6ccec4a77be634071f8f40e7ae94c4d492eff3b217dc830f47a0f4c979efc65b59dc1b8174d3a665ba83c7b41d2390c143c4e492a226255f1681d012bb3fa8bf8995d12a8a40c99e27f90ee3bf6e191a3e1281f26062144d626adff08108c4e58fef5529e61088dda06f25c54e5dfa4ac3872110bf4993660dfa0dadcf81a3bfd091acf2a310c84ff1652fc6246d52071f84409f8c56d052ef3985c98e1e23f81884561f4e2fa754926c185e244610a852e94ece24f64720f050cd513d46f5185ae2493a795252262e37a97cc7c300063abc0004cac326357372fe7471fa43264ee6d477d2ec0754d44c16f7a9a3c93f1f7d4067aeb9944e5cea52d6071f50526c075dbd14efc1e376f400e3630fe82499999a18e6f2a107b4ced66f49729ee435ed230fe82d49678d497dbe64271f7840e5d3499892ad8f3ba0c7627f797505b3723fec80d69c3ba5b2bdda92f0a30ec86ceb54d9ea642aeb0c1f7440e65ef913a7632cfb7f0e08bdfd3d25c75cf3579203b2944eb15d5bf674c97cc401259c98aa5bde6e644e1f70402935e1716d721f6f40655acd8da533e6768f1b50d2bed3adbf8406cd7db40119f3c6bc6e9a79ff543ed880cc24c955179fb40674f65559da5b3a29d56a409fc5ea67d1641a1056ed25e2eef549851f68307652cda93b899bfa897e4acaf2de1f6740f79f689bdae0317333a04a6f07cf95938f32a06449d2dcc99937534ef24106a49bc77669cca6734d3ec6803a25c54dbf647d39997c88015939e7a8ab77aa2b937c84015d61ed32b99be437261f60408a7cbc1d15f74e63f2f10584fbcbd9794972b431f9f042ca3dc35a26b10b283156ef9532a3a6b9802e5d399f12b30564925eacc4f0b480bed4ce72bd6ed1ba2ca07eef2b65aab180b4b80ff7b1b22e6d574027d994ca9e64658c971550c2265d2a36c96e724a520594529aa572ded41d96640c947072a60a2b1510231ed37599ab69922920b6936aea2b91025aebffde4acaf0938f02c282c825317d28204cbde947cbeb5dfe1350a3c9d4e6b063eaba1390bfda56735e9633dd0494fc39aec5b8b0e9d24c40a752664a8a6dabc54b405d9e4c95fa55023a5d3f7a0ad772e993047470dfb9948f39be8a04b4fb7c67b0bacf393d02c2c229a9b45e097ef91f5e19101b2d674de771b524edc8800cbea6935ceaa993cd99c818d031ad9658492e7f4f7244c460c7eceeee6c419365a62da527c9b893311509033269d3f7cab1040c28d9a79ab3379fe09bff42f1f24336e3a5bc80f26015bef73c4952b00ba8a03189954fcc2c6329225c28192ab285923122a205749226df67ae0a63e3670125c4c3c56092893969fa0e0b088d1ab7ffc477d5684510b902c2d5726595bb88225640a7f4fd6b5392be6b0c8a540165579ddc946c31f3862263a0364cb87ed924d3ad574a84d35ee3df0dad0d884c016971d22755fd93b5bc14d079dd4c921fe4b2aa8b02d264ad5c62efe336430161c242746345e409e85c39663a0bcdb5368a61224e309126980c2620dddac28689be15c3655a1059024acf499a29aa9b25f1c44c4409a853627a30291a438348124a86892001a51bb4c39718e53f064fe40868b5b72f2975aa14548188119031bde8f6796bca9b72434b6b8814011d4bed6852e28b21224428e5029121a03cd8e5f82d39b52753440828cd9a375a6f922aab46240828250693da9b1733c78a124480808a2976f0b89293495ae407c8f198f237a7e08af800a574b39b546ba2e98c3120d2035487a678b7dfabef8e080fd0d5eeb9d3882db20365bc3d57990e7381fe24ee3ce954d194b44270811acd1acfa4d3df02a1e949e6dbccebfc6c0b647e93e43d1de65aa02bffe434154b6f675aa0e2c7cdad8f1517371b320b64497a92702929c9355e54162616c816f3e415931cc202f1317fe72067b2854f85bca264b802692a96aa131f7c4e054d2b107e1adf64d1f63ec9841588ad2d5949ffdc8925be0a745c92827ad21e552053474da7f74fd5fb4b054a4a6a275d4e87a002a1494dab2549e75463c82930c414598a250532862fdbffce3f2126aa8153236414088f693f1beb729e8e28dad2745932a53a1488b73f8f974d4081b8a483a77cd7b793e34fa03f9a9823ee29a74bad27906e7f3927f1939b3275026957319fd9ea96d29413680f963597c6d0dfdf6c02fd57aae2c6caa53469021d3c8d452fb9973d8799406865ad1c5a7b6293860984784e72a99c7209c4250b8f5562c76799cb87104b203fe94e423eb6c912ff4a2083b7559219bfdf749212c80ef57dcdb9422681743bf9c2839a38a22490f29ff6aea478a547370b8904424c4c72fcc918bfe0874042431e81d00c2759c554a6b27a472076bc626ccac16427d190469cb369708bb162b018734e758430a242168130bdbc59e3ee969c29218a406b2eaff5d74e2250326a386934f3e9d412112503430e81864066b98d27576cc66c7b0b814ae3994f7fc607ddce0d2dac1921844056ce248b6fec788917607c8183c7d940c820504ab76e12be37675c7c30ce0911045293bcabf126095a790c0944c990410820502787534ab6faedb4fe0fa8f86ef5f194e907543a31ec6f8c217d4025f14c6a92acd256cc84f001ed5b9a4f45d5f84bc27b409ba7dcc1cff265c5a507946c7727c6ada3959ce40199d5b37dd0b037cb43f0107287cb357b06b7985aa516ac1223c40ea70e2893335ab67e62ae37a103b255a3c5c637e7807ed98bb1595a19e7c901ad29a5b26ca1c50171b258e9f70a0ee8bebdb8144efd3ef96f409ebed7146bf2993cb51b90ea295f126fd63384b401651d9b4a8adb355a2636a04b6d4e2976bcd780cc9c366ef9ba6a4098bc2693bed4ea5b671ad03917eedd26a20115f4e27a8a494b2ef90b39034aaebd70df7cb1176d2f849801693998e5529f211ac7322063ad99aa7f3f840cc82a31d5b56f3c556a33640c08eb6829c85d169b1022860b0903aa62123bd86b922a9e9d0b0103e2cc3b4976973ccd24f707215f404952d2702579ef059424f589b3c9c3e7dd6b42ba80b692b47674ce523ae11d3c925c4068fe9837b79f24846c01e162f1b34c3ba883102da0e3be7d4c6971732eab855f194b0d5e26666218169017a62ce952726008b9024a4b34e17395bc7b4d8256409a7f97d60a5a48155015376ecd36c7c40819a364845061ef4edda9d51dc40c9982914286444143a0809272796d37789e803a9d335c9a8d214e40a549377a616a4bac6048135049a3063149ac83494b081390252eb6e325d9bc4af32064092871baa43a9daabfdd0c5102d24ea9f05431876b35c1084902267be2e6d0fc9080709bed3895364cbe7a04f449ed4e69927c0a31022a46b78c99a2652ecd0929024a6bfa39538f256b3521444096b76530a93553896508988c27c9597535424049b29e8ead31079f352408282d31e2a74b36de4c3b428080ac989572e36a7a10f20394a4e2646731f13c7a92101fa02ea65f4bc2563308e901f240cfec66a6fd2d8ee783901d20456387e97b5ceb58b95c20ff4e83e92c3917e7738a0b34dd4b4c63bdd13a20b738a5f8a4269b5b923a20b628192f00a945c9305aa0ca7c6d93776693f6e10099052637cd4f79406481a668413ba7e6981e9e5d2c509e6499ac2597b040666ad3de1bb593f80ac4959a93a49253c9ed181057a04ad8943dcbdb0ab4bb5ed6b6d66b31132bd01ed6c2ddb259abdbab4066508d6e7571f5cd05514522ea319688a5d04c9a4c5fbe598920a9402525779b7827c5a4640c80a00299644d8bc164bc49257f0a9460a6c2f52725279fb829505263dbb3dc5a0a749cb45993ebd3e449420a548c67dfd4a76414a8bc192c6f2953faf2a2406c58d7a8b14a336e1d0ae4d5bf9f4a5ef6258741814cf7b0d20f3969defb043276ace8f1bce4e7599e40eb49b75c49eee061964e203f7efdc22d6f65df3981ccb4ab97c24d9b40e553dd7f3b4b13e89c2f66b2949914e4cc042ae6d8ba99dded29c70452c5362eaa9c8a9d994b206d37cc78e5a42461629640bcd7b6ef257d99b2252b818c259e9482985c3a9fd85102add994f8ceec6f5e9d33099425797b62d2de62325512e8f14b55b514b6c43f23811813c572a66b7a859381043a3d8925cce89a5ccdc147a035099a3a3d63af3c3e340388235071e794f24d194d7382d8889281208c28191703904520ec3bc5f6bf8f2290d155ebe69397521e2f108024427900820874e5d3ff3d4958cb656a1d5ec0c0460e1c377ae0a0c12112cfcab27827b14eb6478ebfc1230c30d410a6b2cf7b92125e1eec858d1e38bc008307482190e7e6ff59dd94ccf46e68f5c881e36a310420843827cf5953a6b64ad99ad93dc97659400681ec53b2cc5bb80d9a738240e8d877dea9142de6240b04b2640f9a7bc5374c6380409764c2e98aaf9102c81f1026fe25f586ac05ebc4b02f80f8a16480f4c140f880cc134d4eaf49fb64ba41f6907a40e89a94a470bde6012547e4a44e4aa74dd7181e50318727d14237bb034af653d144ce37b303324553498a7b6a33903aa0355c6d327d2a3aa0464f552bf36a3607649aa6e9cc29c60c440e25c340e2808a3b95d3b4e9bb9ad90c040ec89897848cf56a6cdda400e40da874313edc8a67b494a51bd0499c57ecbdfc0ca40da8ae91d124df4915f70c840dc8dedeae54f798ea6e035903eac4ff64cad7a306a4af8b897e263c034903427bc7ef6452da727b068206d4ab0993d5d31a353974e4b0c10387a93202720664b00e3b49ffc9163663206640c7d4359e694c7772d340ca80ca4c8df65e2d19105eaa9420267337b41c640c2871e38a26490a2206e46bace6bdf961407f5a184f3f3b1850d28751adbd4f3264fc024a4feb349318881750fb9f53c5d8994cf2d30ca40be8fd97abebcfc300c20554c57636136b4bb2b46d01b9dde1628cd1510ba8b1b41b27f64dec4beb08205940eeba6a5b6993b2c7060b9740ae806cfd3a5326df55e383028815d09a3e4de5a89b686d254815109793dc68d65a523b1d27808c813e794f6d696d8ab6390608155097f292ed9b05320574a9134ecce44a09205240c6d77887c70bfbd9ca014814506552aa7cac4da2e7062050409c9b524992bacfed13c042812d14402b0681624f65fb5f02102832eac8a80710000036680a80910000f0d8f1290cd7b1030c045c80070e30380101d8421700e8a28b2e1cd085026a74a28b2ebae8a2c7e7e8c1e37b5000753c0f0683010ac82e78f068190308000100c03dd875ec9061802e04d00004ec781924eec1c3860d057401800518a0c7f310034acaecf725fee42d2f6f688501956d635dd794b4e9bc1b5a2b060e0f037be4c071811a6040408d2f1ca0861750a6fc92609762a9b3bd0ba8b896d2c91f17901bf5cfce241353ca9f1b5afac57f9135b680b81ceab9c4f4a59c5ffc17a686160e470fd7f1451650ea2449878d258f8ff91b7aacc2b0fae277d8100387dbf0dfaa51030ba84a4a3c712fccc6f2d20dadb371bc08e38bb3408d2bd8000c2b80f145fae2bf28408d2a20a0c6182f868e2fbef82f0c50830ac84eb5b3fedc9c33c91d3778783105f45abab39894d294337643eb70f4f0e2060fb661634d8f1c388e470e1c3dbcc01146dbd8f15ee0a82185c3d1430c1c1e860d1b08a81105546c97aa8e4fef78f2091ea1061450c2ec99e9ede69cf7a409359e808c7261eb2aff976bc9a3aa861390fb1e64773b45dfbc1a4d40a99a6be9def8e031b41a4c4025555a43adfe634c57630928494b654adb25734cb21e098e1b3c9607183a6c94aaa1843bac3a68ca58e1d93a9b552309c65e5003090833f5e5eadfba99419c51e308a8dbba36b9928a95ba1b0199964c345ee41a45405cd8ff5b4eaa512c62a84104754c9fec0d2dcfc136bc60bb1dd418024abcd75a87ddb03973d41002b2676f2b2dfec538b7461050d1e4b5979395bd288c410d20204e38b95e3e27a16de21b5a337823438d1fa024396cc7d315d3b4c9dfd04a2fc60eeec1c30728db4ed297141d357a80364d26afabbc1d3578801e4fe11735ef51630728997f375331890eacca05f2dc375653bf821c18a11181f426089121c3032288407a31f6bde8c69123477081b8d36abb12166ff2dfc8c15e8cbcebc88137728b1db185a9c515a3d6293bfda6340224f84004342003fe13680e4668e178ded88c5fda2c52ea4c5262dd9d25f13bef80410e1ae890c1882cd05b6f3963f06052eccb482c72f798a29a6a8e616b325e6aa70423b040aead5eb6182d497ffb465e8192937e665aa91b6a4c05465c81d4fc369e393f9b9e77a415c8b4f2abd144b76426538307012bcad71b3a5bd183357894c2c82aca9ed27ace5a758c115568b2a41b79d04087175ee8d854a025963a45bba830820af4cb79bc4cf3f170511a7c8ec38391539c6371d43da5a42f7f434b860c1932d6148b975c9d45cd3f7e438b06bcc34629deca9adef2c2c993028d29a94ea68227497478318aff4c523515b6f4240afbd6d77a75cfc160f0b05142c15eecca266dfeaeeb91e3c5f84b4640816a5dfb69376c60c160e4138baa754c396b789b9658e6b35393d2ca892737b46c8ca0d48e6f1c3b128f0e8347294fa05f7fdf66beb74f863d72fc1761c0608706b4132839ddcb9b5d8f700239aa96727da39d17f5c1c82650392639cbe4b5ba77cd0dad634a13a870eeeffbe1a2c915cc044a8c265eb4fdad8c6002b394d42c79d6acd85a9a2adf6d8e790933f599d259c26fc3c659a24ae676e21c6f83070e1b36ac74ec48fc850d1ba6b41237420994a5147375b62ec164572d1899c49104e247c737bb9fa474ba7014168c4402a5274b2e39dd8f334620811cefcef36182b8c9a74720937eae64f3626b928c2350c2c8c64b1bf3e3cf521e186904e22ccd3ee9e699ddcd3230c20864986a1b13a3d699a784b1089449a1a7ae848a4311e891cb1e5369bba1e5850e1d5d8940e9a8275ae3d92e9d6120027d271793cc7fe23804327754f3bd332643060c462043865a18460c819d18f7d4a7d5131bbe4347fa1da57ae0e081c304c6bd781c89b9c04821501793ba1cd3ef2f9e87d6f7e01d3d7874183c4c110265ff2617eb36af5a7410788c39a5cc9e293434f3999a30f78820d015b3722a589225c3be23f11737304405362630120894b862b95298a41140e4c81f506b6515ceac84771e6d8cf8017d194f4f6da952e6ff481f50db16349cba8a5e253ea0f232cc98588e1e6fb207c465f7e4d65ada673d7a40052d3957ff9a0774904b970bcd39275778d0913ba81daa5c305207d468504dbb6d559b965363840ee813ef2be994c7ca49923920cde2376e0c66d23a891c501b3429753ad777edc741f3ecb0d46495639976da25f1b9cf5253ae5f300207a4dedc5c123ff577c9be01e1175ffc3bbd7b678f1b9057b2b47bb04e1b90deabeb573ab3ef840de62bf1d735a0839885ad097a2ae9ce17236a40c6b02997581efb66b934a0a3d85cda9e8b5f123420feb4e78a1db633a0fdcaa4b5fbc50ca86fd39ceb4e9f5609f53052062343c908c1c81850eda1a3494a9318d021e6312571d261408fc7914d1f4f7e2a47c0a0a7b76a69c78c31ae89299aa4ff24ef05d45878b88a97c281912ea0c2d52feda5edfacf8c70011d6ad2553f6c2569ac912d184c735a264b66293b67703799573a97172b97235a40972549e7963d79ec61240b388205c469cb7be2a760666d5e01351b735e539f520c67e498b1e37bcc7818ec7890b387c18effa2d48815aa60bc9c4c8565bcd80c0e46c640dca7efae25b13ee7840ac8521bd77dd29f02d2e3a6ef2c5f31e3c4a580ea933bf7c7fb44017569413eaf098311867f07c4300285912794ccba2d77ca1cb4e4fffd9cfa1cb6607c919c80cc94265a4ea2234d406eefe5cca6a505469850324696801227765ebcba8c280195f2732a7d769204c4fcef5aa73d9180b498d66de13179ba4740a75013e524993102e2d54b49c2d8454045532a4dfe249db45922b41b444e7b3d373204b478f4184dc9e7f8b98c080161fa3257caeb9e2c9c46828090b9dcbbd30e9641d24143063418018249c9253597247c9b9cffc1880f9235a698adcd3f569a5630d283111eac5629aa462b17ad4a19f3d7a7b418233bc805c2fb63890b64aa142fbfc99b5b6ca99d999d19c33a73266d5132446a811e1d93ad6493ff4ad2c68b755f26a39f59940c1159a0d7d5ecc5e4e6f5d658a082dc9ea43b9cdc714e115868929c4bf31598246d4a1a157105da94c5ca31a6e5cd27a715e89462304f6e61eda3c70a94184d6e3b2929ad0225c6704a27d15e15e824dfc9cf299da40255fae3a9bf92e2563e375081becd2d9fa4d94f51d4cae8625ab93c53a074faf294372ee64be267069152a064a7ec92fc364b7e9914a8eff554cac49c175b8a8c0215c7eb6e2b4cc63689026195e47871f40a05284c3945cd2d538ea9d9c112f984882750e2959ccdc944dd39499d407e987512bd949c40e920bae1af44dd741e914d9472ac706a4d202eceefa7db9c674aa24324139db4bc61e94a38beb81922984086bd53dbfaf7ef51bfa1d561f02811885cc21c5f623c2d2606adcc12083525ffb3e32695537243ab12e88b315d12fea498c49c12e8da1d3551ed4af28f159b04d2d3daaa2c865658ee861696291e25109104d24decd0b7f8649d6d836a108904d2f2541e338d59abf3541081042a877bd76c9db5c4b9c2107984893802d9334969bf705f064c0219327894dcd1030c914620c32795d712c38c48cbb562aa1418228b4049cd494a72b8a888229066424f5c4f52c6ad29118ac7dc3965554c5de26261b3d7f96c6c208208948a96f5e4203b96f37b84c821906983e9ccc1c264297111432047d7cb9214a73c65372b215208c4679b5c7b2a83b8c7450881fab7133b23ef2f371f426410c875f3cb5fcd05813861ce92e6730381d02f49f60f76a2c69a8040f5aefccba696760bc242e40f28a52e261d53766d9a44c40f2893435dbfcf5399a65b20d20774ae5b6b4b99cbbd84f980ea57d326788ab9a1d5e3060c70ecc844640fc8289e6f36976ca9d2490fe8cd1de72fcf92245ebd817d913c204c2961ca74c9ea17130f488baf79e389a3fba6de0155f1acda6d5db4722a6207b48959e7bce4d175e4285610a9034affa4393fcd44e880b8d3be9ae393cc015df79adedbc4b45a29032272405ae7a07d29e675f1129138a0f737099a434cf6072270409ef467af4986ab9cbc7b03fa4ef6e027c9296bace6ce0da854e2ec92ab7b9af627049136a04c92db99bffab101bddeff6e39f7ade1d47069409bd4aa4a666ebd976226820654122d8f5e89bf543f9b899c0129e727a9ab307d5285edcc80ba028b90a8548da662f268241a8a042291281003eab607d3130000000c2091c642d16034cc0345531f14800253281c303026201c141610141e121c1208c3a14028140c82c1402020100a04820171869e721edd53661efe63d4302f612bcad18ef9f509ff4ef1416292508f05071f9768a17b742c054b8ad0f5ecafb46188e94d14552a382ccc62c610eddbb7d3c54da936d3c6a845df3da735443984b04da8ba1f0848710aeadb964086452bb12e079d9e09c2ffc9846d8259ec58d19f1ada3e9f395c8cb0b87c5dd805a19cc924b6c4ff36c6cd82aaafec2e0a12e38c1dda9d0c2c9c5f31f50e623cc0474a084b6c223b34764e3b7326330a7ca513ba45e6fb4cab4c3c79850cfa7a091ebfcbe62c09904c66e26b09847d14cc018d30db1bb9e5ed4840c818050fed4b2b0274b2d3f9f01e63cab8777320acdd5eba654693b3daf90a8e311e1ffa9430b64d3087f530a4a34bb880d560a9134204488afd5df0992838f327d4a88024e7b215e4b0529a4cca7bc84254020731df86ce4a4402949d5a6354e9f2beefcc866c73b13b350c0d07b1ac2ded5b63d8001c4a9b546b64497145f7fcf9a6239f33de413942da0a2b27f572273a8922f18d2c7677271ebd8698008403a69eacaef89448f12c5f97040a5b7ad4f9a7b1dca183b01e973f5865fd9cac16846c37539db4719a75939602b9094e033a45c94e6c9df44724d2896ce0e10cc92147ca44b4b40675619e490f3de6057f92a84ac130a7addd4c0a6bbf26ce8e215e478ba9a663bd9589e610af55db6e09a3ccd514a2621fe317a0236c9352fc464d127971b4b393645e88d158136c867960e993cb61aa30fddb1dc86799199869769b1d57e466880d2126781661dedf53bf533c4e5f0e3262a96dbe65f0853feb13f182be7ac81fa94f4da7d03923ce723592f8296dc1e9640e2fbe282c43e924b2456610f4fd0bed918390dee4cb30c1b32fcf967175fafa55103424947bf8e2e8e02d0921850b4d540cf499271464b82e6e4d498da5a66f11f87ecdd80c75e8d83c4bd3c8162d62c8fc4b44fe50482cc1e320b668e95d27007216cbdf6dde1ca3e219074b4ddfad2edfbe9742aec6450f21227c68b964b3c0ab3c113ba886587286b3f70bad0dfcbc9dfecee7ffd557b071782b87fd524f4d89408873e37c50c1e2625215665b64495f302b899fe655b45ef13750436fb073c7a95f5f1b7d029791c4788b8200ba29a3a44cb8285019e71a58ea3f4f30144ffd879414c7a961a702271fa34209ee5119b13667544df47d9a3ea84c3ecdbb4615a48ad4090027e149fbc9e749e5eabf02d8b3669aede64f3c479b04e37e88d1d6bcb56e1b7482daae838a0ed3d308c9306672545ad290de999828a1b48aa8455d2a12c87b2dca0e209213c4d0a6b0be80225e5f402deadbe6006056426f9be1b29f49d5b608b51cfe7f539c44f312e48b08e0e6d2a57e3f680077ea83cd38935de9b76802746c7087fa2a1a6d6ac057b2fdb7fb6666fd36f969ad69d5d016e4ecd43c46b303d8eadbd79c3ec17d4b4852974684cc35eb49b48849ea910b300efae2b8087f15cb4d1cc321e92171ccad9141800162e05f8c1eebc38b15f4b14e66e73744c4092873f38d52f3eca4ac83ad5c3adceca9484e0c336d7cd7ad0054c9f2170075a7840836192d88ca06c9fa658189e9c97104397d40336d24243261d8c821abf6f985d884863af09686b63f3220ddd648bcafe4e1d65624eb8f27db54acfb29b3a06ec08120dd00ca0c8f00a65ca77920929b5866fa3f3200cefeede51ef8864c2142498ac38a37250244ebb7780f875a7cb26ddc7b8c190123a8bb6c2588eb0e7191f8d25d9da629c8699f976ebd33ea767a46b69ffaab4314f1a16d2501b6c61532585b45caa0ecd8e8c6c5400bc7795a7bc59d27b762c40188e7c186eda47a2dfa3840e035aa628009a5c9b72b9dcf163446773987ff1871bdb4b441aa87bab4840dd9f6a7bcb1177c2a3d287e27b8e1139c17d691b0c0be1e0c31206f55a4a4951cda40bb6977a0d90f6ac30135e29faa410fa25a679e0e1142e2b48ad93d625bedd551b93483d191ac3ae4d4ff2f4b3e5869b50b6e2970012803dea1d2b4462903cfa1a5df4a651079e117c615a528c5f024490a559aa48a64032cd1df664f2dda28635538e4f2c6616fb9bd1a0e2db18488498f85f041d8501dc9a2cc45311a5a8b997352d29b54d41908ca67625586461982e108f8213014f87813ec9f300b9f93d32cf20ffa3aa5d0dfca885cf1795eafcf4e0d5d8ba235fbeee1cee15b4c54b6ba360a304fc80795b517a6a8e9e3a662d246cfc435973b6d56fab63b8e0b72c261571c40e970d4e245a6497c1a50a04dc2a0cdfad0591a15171a216842d195b8c90ce149adb46b66b64c8fcd821bfa260f2c06d351f87b78d705ce15f8e161ff0a1f51d809fdf62c801a4805a34c42eef72b655e1bd819729dd2256949b31ee7f395566a71b0e411631ce8f0371e566a712f8871f4fe6255df8dbb77917eac178bd3164a65af7133a592507e32b34906bce6866c8aeae45708e24827f02839829482b69732c1cc857f8964b718c7bd80323770a44339e098d339e5df5fd9f75d34fe8689ac19a2c31874bdf6af05a3c75845ab3acb75c0d112a0a50a9272355f68f420da78003f2b31f9c5b80ec0160fc45e44829b5b981a0504c9018affe160f22b020f9d5060d37ddee90b28b55b57370908769c574fc04897348f72da4e9a68e41f44c09af409b134260c22ddbfe4e01d40525908dbe2f49713955434e0f58acb6cbb232f42aefc210e0a733b8e208e33f7fc656a0b22ae02e87cf56b8320921847f58673284adcbe15b1798d5d39839262a87d2f557c6e6808558d161dae6214486c9ccce818076c74716c398988e262ae16fa825268c1714f47b3157fb0ddaca81f041a75e556bf9a71670f1cc9d2be94ccbf28e2a731f074965f1b71f7ef29143381f920f80463d0f12335d8d7e8905cd49449e23e2ce84fac0ba4708e0033a6f5ef491be322e599eb59cebf531c9e59c0c72f1ace0bd754852dfeaa9d8ddb5d04a860db186f26b55704ae071d281812fc864dc5d65b38aaf860082e3309c3ab98ff1b3963129e6baaa175d14347423ad85508715aa71edc7cee8667c5a74bcf1ed2acd5187eab41805458553bf713eb31019e0fd9d842e0652545b7aa956b75645468eb9589de3a5a6c87c5008c0dcd68bf2f051766428326f35e3b68c62772f38f2cac91c1842723558ceaaa3c51b89777899bd918a5400a6430b549b612a9d62b5a87c46051fc084fdad2a6643c5ff17e66066f269fa18b858272478eef5186020cb9d05463a071f7aeca35942679437dcba53f65c3a9780075cfc51b0eb3369e9d2dd3ab5005c3fd8f492b25efe05d7a22c48688252e0f1fe707f5da28eb9af5853b99c62a2120d5278226b2e8389266d440bba92ea92493f01ea6dfc1f58ec73ee4ee9dd76bc74421c45ee92054fdeacfcb6395ef79c7b491f329b32be5fe143b216c304ddfe3c116d7dfa9875a58f537c99b4d144071a1a09c50ec90d634152709844f9b5f8995eca334a2de449dbbcdacd2ab6634b4eb2f3999cea984c9210d8f9fc603c69cd2aa0240af58c811bd4e000de7ec7e0133110095a12510dcdb0c5c44dcad27d772bd5cf43c49efd771e989a1b5f4242b4a998d28b6a880f47f71e72894593599f5ac572d46c41b0825d45aee94e26fe086d9dc63d696ac1c01b9b0a5d46ed7fa96cb0c5b96ea9b7808439e289f58c4efc8ec2ac7d56cf9abccd9d8c756a55efd1c5d4f2d7f91bd6faf73c6b1196d81f4076eec460b0ca03661fc658f5ca4581182ee8cadd1c1bc167f4090c964974f3760fecfa41362368e98b14a74c790b87513c57717179e5ddefa619844156f84673a028a65899aae29a61a2110f560a34c2599da81a0cfcaf1163e1541e351acc303260dd1fd6591cc53a06cfb752422926de13658366bab569943d80b30bc4ec58fc300dd1ea04f4ce63c37d51574189c4824eaf43c2799b68da18896fa8195e12dd64a6559cdd8f32c65dc9de5f22355efdc9aff9ae9f64cfcf1e7650620c8c3b0c3250ae1f9937adce50a0aac6f14e2046235e97e57ac384343347a67d1d20601b196b735e01d81315bbaee27782476273ebe168c3f979844ee99dbcf499160577b6ab261605a2a87a91eb9a55296bc9e38ed5cb5818e0ad45636a101ec45731fd0a1e530a89e43187f97b31384e793f2200036a3ba08370ded6e5596264b64a6d13cb27a836bc9b94d26541a65afb4d55b9b00b65d53809c8f60eea1195f65c1438ade4a22ca21717f8f3a83fc562c1ae150516078b739c2e5a239d3b67f78e618ed8a1e47b8132524c3cfaf1707b6abec6524c369d1146cad31a924ace07ef0d2a3d9a1d0086ae1fac9096e6c02d585409bb4e2124aac5e34f3834f82856ac5109e45572d1d05c9a63a63f3684165959153f6461b278a38603da488cf49a67f3f49afdf2396f66791153be6e2b51c6bb411949d53784dc2fe244d813c8c4a5c94b37f7583cc900dcb1b22608bc818029080ff41a9d5006aea07b565118278acf86e71374bba38861e682775d10853669962ee0f8fd471e7595e6bb3cd92b3a4fe8beb30109bc5d62844abafc21fcc09c1ee97c069c11a7e6fce0ff62a766f291b0cc5d5c326aa56c5f76ca7a685904a276b178238fc46cb47854260d592e83234594f8f49461e4fafbb662947ec8fb8280d9a13151915e5ba17213d0d65a96775909bee6cf7a26837195cb1909bf0647a1e7bab210f12bf7e51f5112661884d2cb03d0076267386973e2973b76719a1eaf589684561b317894109dadb6e9cdcf5a7e63ba075087686e5bd406978057d78bbc4734ededee99dd17ec1a46c2dbecb4a42b19a26684b9e678103d9311012be0f6da01fcd7ef626e8e20bdbdbd377ad4f9ab22148460d84c3e1600c12fa001a28ab0bc20eb604142a80a6c8235ae58f015dcf04c9fdc36f7ee2581605240de8c2db62bac908f33fda70aa8fd475337bfadb44c1e21df09d65209356abdeb01ac7286ea07a43c20c3b1b31fbaf17cb28a5067ad23680e53e9f67b58d990e33c3569a1e101fe75d9f43db04df70c4bc02daf9e367eb1d764b5da11ee22d001a6d404f3c81cc3b98e559168cf00efdd9316c48a3de503aa133538e3734ac0b1a624ac1008e99452abd9be2c229fa5b14d06da1da1a3e949cc2c2c3e712b4392bbd4646e8f2b923d97797dc8bccb01df1d85ee59606d6b5ffe4350d01fec258e11797cdd1f4367fc063503ad5ec3011b1fb673d52feb2ba7c36fa94f7f8895035735b0a62e254f18c033a556fa31cba32ecfff2fdfb7000060233842f36d5f5fcec99817e64de4c71f20608ed5c6ca16223c147409e5c259b7ec0a7db23d0442e170b55ff087aeb55328a93a798d09c7b427f30d12d07d74b0d7b0f47aeed8f758f928273f7977a114b8cab07385168aa08e8ba9bb6ca0f8488d1756dd90d6f841ca6e1ee6389a11db3b3a1af743c1e78d3bf979c5918ab08441b43a6e342e19967c1823dbfb95d7c744f0bc15e4bc64029bf64d36c1d4ae0771c79ad638c1e00768d730e0729a79a34ae3eaa71787eee6549331f162daa340208f144c0fc3ea73a569c9dfdba296ee38a981a1a7443c1b83a8de61d783d0ea57ab2f9fc71d3e76d0dfbb66eeea5d4a214315b143c6cc75d86dee7eddf41889d1ce529d03f91b007c74c91237242cb1309f76658af2aa8974d24cd0c26a797fcc8259fdf8eaa4667f9e4c3ef4e1d59b26f718d98a4cd1b97f72cb076037329c2fa64afef257b130f1a250eb1fe0a0a7dc70bf45f55945cbe19b9ff060c8241a8a2bb4f24ab92f0328fe7fe0c03b0bb45f4ac9510c6f2b9de86eed5bcc56a7da58efe2d49273947a997a3871f2ef5580b87d38f7568069c66af3fe63b4cbcdcb8ea91cd5614d8877d88d748f02b159e3a55fe6d703cd72c4b0d3ec3d97153312b3e3a388c448f9bab29f1e91f075afadbb6793e342f4b354038c37346c0191250c2e2f62155d41c9d3c34dfa201da87066e27ecff2a0458208e766df082b69c0b72919210c6ff955dcc5957ac9367ee3f7816a107ceb145fb45474659f24ee037326b68e884818f761be9be000e062100b7c237eaa01779349241a8011167f1d87461da9822fd0c7547622824d7dce0434cf75707de08c4b31bdee86ada5462daf441cf0bb98288e9343414793ee414aaf4691ce8ffd076f1f5a0a306116e916e9fb261019c195e0301a6e41babf2ba0eebf5280d054b6e26f90d0f1b5981db1ec5c2f7c44b6157ca47a1bb3dbac26cde8b80f7a000871a32a79160e21901fbd1a74f0b8adc4a7ee6eb19e05a1899297f448cb54847a6ac0cd472c55358ce6eedbe92b9484162fb4206ea95b98de332fc78f58e5e193ac66db514857706fe00e4df17bca12a4095ca26e2492dda4428bd17d53dcb5cd9dca739027c23c4027b7c7208e7353a20995d2a1c2e84fb6e1240609a5398f8f0c12fcf76aecc6b342209f58a7cd5be15c519d78afb008776c283d9794678d78623f6e3d2e38f03ab6e15f12568c9707e03ab3937dbd738c4707ade48466145bf3833758ab41a7433953ef7ea80d3314e5b52782ec5999667e5002651e2c0a22607b904393cf3ab2b53a75f39ac6d4ba586ca829e6bd78dd3cccf374f3f1a677f0112a82c0e51b0162e030905fed9c11562495730406d5d5bf2067bda0ab9f01b628ab03f256096645f5b8afe50162fa8b700ef3d9065908f9ee94b66c29ddacdbf93e7b19af3831eb38a7a588c3eb524e90925cc4acdb8700c2ded552fdc6fad385186bad3b86abb3e028ba603cad7fbaa91d97b0733db579716f0770d6cef716642374500dfc8e7130521aed225e71b0d0d9de03879d1e81be1d11e9d095e146452ea31dbca0956947c4983caab0e8b75e21a9e75f0de8ac87ee4f23911127c838642cc0082021c4fc35b66c349f599900ed652835ed06dfd90a27ea0906afd1d7febf76f505cccfdb0ca22a5f35451c8c5ba53724dae838082a0073a8d54ff492fddfc61267617acf2dc7fa1710401e0d8301f11f4bf4a0bc8bc0879d835b39246c5dfa3ae479ec2808f915a36b8f964a221885288987f0d7cc45327a84da9e41e26691df9fec2ae82eff509451ef8bbfc842a8984e581ac22596d79c4dde5121954a3bd4cd252975f616a5364d6536825f9325cb44603c40715f774fdee491f31700efc050d44a910dcde252cbbf3fa4aae71b27437a572e9c402d0b9a778d22c2779c7ecb5a9944c3d0a24a68e946cf6f9d8776605d088b6cdb812d057e59b8e685d5a12de9b24b32f22bcb299871216f9d55108fe61bfe3c5ee87b12397cf7c5fc90a9a841aea47a80793883c033b25198025de5ce8da1e4878ddf2239fc4a23f60340874b3cca207f79bd4dafa0821dd98864dca8bcdabe97794bd7316b6505265fafc8214f0e5c7c3e87961ffbe0713ff90144440fe94e7cff264fc351d1e155015cbd4237088ad0ecb896680cd8d2738a406a078148a04ea595079b376c48275fdfb51f4ae27c5a0530ee2e9fa54a4260758161fd1e72283f1883853e0e0672e59c7ac559553f824dbe1d8154e2789b0a730b3a42d427463ac3a9a997a54b39e8b0e361bf3ff2baec61d515fd6bbcad4ff8d54be2212e893215cde2b1a3f7d9b85c7a480d94018d19ce2b60f72329849bf7223eda4b99a883f226023a93b015bb22dcd00d506f5d966721aa6a5f1bd8cfc1d364e81d3a6df7c00ccf008fd5bda7ce363bceb96d49c252546afeec3e7fa3dbbde5e890b476b867d1cfe14a4d1be0b33df89ec4d6b0593d60a4d8e7f9ffe320928d721446ea0a8ed8bd93a59066975d4d3f498da89782eaafb2e15857f82922887f4bbe2d687e8fc4542e5c5ce4ea62e9fdaeb1111d90ded3e52774e1455e1db5bb44fb8005c70a744b6172de9af2dd3be415602fa4c734d64b79941c327b4a6ada4e39c34cac86cc34d670832c5c72c29413c14934936a2e283f164abd0858a27a550668d032454b10a17d0e2624f7d63500e429b6ffe032788f2ae752eac9267c1f213b5e6aecc5e1fd69f5d50736731887eec64bf2be30ffa09a462cdf000ab6680f196263f938cf0d00e728ca47f2d7499d1f94d6561bb95fc0755d6d800a2288575b83be4eeadf02f7345601861bf809fcab1912af0a11f11f48f39068f2f6f0506b0b59e9f0eb2c98b8fcd17ba8e3aacf7be486594f43373650379e9fbe7202d23056282dddf3add034bbd27084a8b2b8dba0106fe5692fa3b414094d035842af45c88f7e6ed15d8c395fa198f7c727d543a22a317456f67c1723b0d65e3dfc7e7ecf468f5aae24f4c9ff1c9cf0d8fee648f41ad0f90bc26365bcbb87ab76d71f8d6dcf8c32e5f418816969483882578ac36907c98b5130a3889e2b8329b7c6cc600496535ec5ddeb2617ffdd94871eb57b378fb98526617a2f690c634a332bb15f3f765688b187446d3d247e1b521f835c4eff6f5f286b73ca6d80de5d20350042bb70a5b94b65b04c2ce06e1e056705814296056ba98f9177d4cc632262f7de946b3b9cc8ee70dfdcc9544545f3d38ec4026817e38ea6b3125ca197c92d0fa4862f325f10fcbd294ce79bb258bf47ded4f54276ad8facd8c8aeb981eb54c8190307c3f14918ba7e9666988c80cbefa1622e49ed4b4547e6e1fe3d08ae33b85c3ddb719f647105e1a2774f6356c734cf5dcb53f534d5927e0bacf4c1f1908e0f4592a8f9efd2995c29d352debc2b6c091aaf165c075a72912d64fa94c953f7b156b8a6224227c4425e2e27979877975d77e81d767152bece9b771be928f9893111cbb31b80df07468aa78caf496fb8de2a6482e45d935fb78460963c9fcb61fe4bde394fa59bf07b822bd280e3a3aa5c52285c56fa3935bd0a64d232affc1b5b4c9291642f8936f9c358c2ff28f4ebf43d30df9221634ec1767bb50f1d17e93cfe10e9b05d107bc1b873f88944781ded94a3812e20b25252b4294af64d3ee2e792fa69500e92576d2c90edeedd389dbc01d0af2d487afbb8847d0b61003adbc1b447cafcd8fedc0f637a2bf88cfc781955b73d73a9afe6b995a210cbe15eeb4322117b13789f5a880b400e8944001ab6f7ccf3c87142f0a43863d7979d60a84b42c5985eee8e7c79dca8c5e6930489e778287674f554117dba16a2cd85253391b590b590b78138efe11eb50df820f67b8e91d05e2e6fd98c230ce95e304a3cfebaf6f40513edda8adfcca1e40bb25a6a41b8b4d42af8397dca0d2cddeb0805d3536799832e8ef520acf0faded0d15b0533224b6ba0ff5d883261ffe1daaf8b33d15dd7b23d262b100e7e59dcf6d3aab64500318c5c2c308fd5a1e5ab90b6245eb4d5298ed72bddb06e18219ddb2bfa20661a9fc19d303dbb655a38283d77803fa8336f01f06993c7fdf4fb086d661b188e821bb3a148d2b01a488baf769cc59e6766759e1a05cc899478c6d0fc4412751528b0ed134f087c503e8756457da8e029e1d06ec33d42cecaebc7b5a92079c87b519b2c34e20051df1576f07e36bf57b85a47244db144188c1d37adfb791017ad3374e578bb175f755f9e8f67800913d3e422220afc9e2b8236c51285ab00c9f55956a39d5ba960bd02fb00c1e9fb358f016897e509ac23573ef40ed780145b6fe7339b2610e8ecb7b27fbd6bc213490875358c71e17be5fc52cf58e6adac0b186863c63909847ba6fdb169fcdf5bd7ba52c057cd7be888a5143ef1062019ae0458dd03dd0663c1addb0e75ccac29479618d1023b29896a344c499f141145eed6250da2da85d5c6924d376861133e9fdd38deaab65231e86ee583ca557f79fcd438805dd47318a3d1d2c88a9f74570e8220b7486b547b5830c01d6698287f63788eb14734cacea6f40bbe78b6b112b050a0d5e60782305801abd9d48d4a2148c964875cc545adf79e033b6999fad2f4212779c5095340d7162e2b17e1626cf97608bb369af5c78811db4e60581cbdf94e1fafdc58437bbb3a1d8963b952cbdf49cd73bb8b82eb7066729c47ce2dacdce832532f4cd1a076acdf9427838deb888bd7bfa494225236de2966bc303ac97043b2e2cbaa3d775143ea2534adde7bb3e2d3dd47d457bcb2ff41cc40b260e18425008b441d8708adf07dfb9466e92066eb29338b1c997a2d0b61ddc6d3aa9fcfabf8ee5662416db8dea438599896500c67527b7d37244aa8a5c19d07b093417a1ccde874d87ced70a01daaef79e0ffe28bdde51ce92f5febc859cd3729b5777342f76e9964a412ab73e5e910c8981a825c7957c4abf19250262a4525b44bd25bdb867132ee57d872584cae8cd9d966ce8849945262fb76120bf5309c228c0c65e44d41e9e484e876bb5ae3d8ce947e7d00e624cc4c6f581993df622f229b7ab9a99c9c3639150b8b5e371c39bdb14a6f8ee3dccd7c39dff94fd1780f6745444453f84015c84c171fcd82d6c54f211ba48f322ecba05af17ea54a3da6a66896443db0e79f90ef3e863f4c772377781bb7e8297b3265111ff9219144ffa84a63f65bbec6b86f6919aaab3dc8b9df6d570f4b271552bad7bf71497d3f6203d6f2353460b0aff6353ba7647509fe493bf97c9501c350bda011cefc8be001af6ce1be8f1fd2bef44e750a31f768f2c5fe5f3b7d0e43bf223d345d2dfe3cfeb00e93efedb8f46b64aec112728b2439c37cb97bc6bc54d3eae25b9fb735da3ab3b3a1f56e76542253e4c47b86b05ed3f16c2ddeca8dfe5cdceea87ed84a83332e551b1d28ef3506d8dc77c3bea3bb89fa7bcbdf3a629f47af39f5ed80c58bf97db26699454dea583a238a96c665640f9d4f1933bf1abbceea60871eb0265dfb0aaaf09553dd1db964560016c8202c797227f7c535399b4ca087c7efc928eaa4ac51fe27ae4df47af55abce591edc15e93ede0de90d3457697d48242a70e1ee77ea87055b41059837fa767011187ee1fc32b6290ccd50684c3c851c1084de266c8572e98e6c7dde8e2cb2b1d6c6651efb6b4d1142e36a8a5b98fc344e697fe4a23a48505459320c0cbf102bf7ed0a5d6a74beaefaa7ac7c809736768a0c5b86846758ce3c3e98dbfc64f46a1555906269769f6629a498aeae87bdf43824c5dcc7d978addcebf7a7dc633c9c711288d8975a91e3501ec276a42cb4e360f4c4481e708b07bd1dbb1d77c430a00652691a6ec53673de751edcb55b8530727d0dfdd1c1ea22d4183d7677587011d5efc4e1788c791f1917d97af23c8d09bf9a4afd05895372dc3750ceee9244fcb394eab02f92294d1d3dfbbc67d838d854c70c0e91b92903c08455718165e0d9d33bdca74a61a9dde9d9a9438fbd8a4e6c5a1d5417be40e23b9a08b07ecd043e34cc75a0dd2cb74dca3abf6958106bcc683126af9da133f8ab312c70b61b676bd5453e47a238e0402f32c2cf3a85098e217a96eccb05e0674e0ab18186ed80a049ed0c47920a5e84833a8cdd102a156489c778f13e1989b428294e38a2508154120f6afb11f788786bee225d20fb6271472025260a6fc5207f0bdb4082a622521d11af9c7b6cce1efb3a9fe156d8d6ebd70dd93780aff8c6ff9799fb7c68a3eb10cdd46fe6b8c44f68902488222930a23f571a4e70f754eca499e17424c4e3ebf84dbb8bd31a07d696dea5c1415b2475eb6d2b7804b58cb9c3212cd98bb77070e96f367737da8da4e1cd1fa5ec28594dc3f93e9bb0c0996fcc3de12a940769dd281a5132eb9863b01e8496c10f5705a1edad093961cc304e3d1b4902fe0bd0b112e7d44025fc0481dbc9a9df0488bd8092630ab32f05357282f414bf838993a65cb066c6fc235c81a07d3db63513840e466b4fcb3cdd86fa46207163f57a63b7b36c86e0d26a68eee6ca344c4ee6058efae1f28cadf60481f8a02a616e525edb2de7bc12c07098c6c149e5252b9c42e0c8a681fad27637033afc1b41a0ab7a10246d355f071a687e8159f6503403035c637094d399a29d96ade4f381e8a5c455816741f442c0391e074f67983c3259", + "patch": { + "babe": { + "epochConfig": { + "allowed_slots": "PrimaryAndSecondaryVRFSlots", + "c": [ + 1, + 4 + ] + } + }, + "balances": { + "balances": [ + [ + "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY", + 10000000000000000 + ], + [ + "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty", + 10000000000000000 + ], + [ + "5FLSigC9HGRKVhB9FiEo4Y3koPsNmBmLJbpXg2mp1hXcS59Y", + 10000000000000000 + ], + [ + "5DAAnrj7VHTznn2AWBemMuyBwZWs6FNFjdyVXUeYum3PTXFy", + 10000000000000000 + ], + [ + "5HGjWAeFDfFCWPsjFQdVV2Msvz2XtMktvgocEZcCj68kUMaw", + 10000000000000000 + ], + [ + "5CiPPseXPECbkjWCa6MnjNokrgYjMqmKndv2rSnekmSK2DjL", + 10000000000000000 + ], + [ + "5GNJqTPyNqANBkUVMN1LPPrxXnFouWXoe2wNSmmEoLctxiZY", + 10000000000000000 + ], + [ + "5HpG9w8EBLe5XCrbczpwq5TSXvedjrBGCwqxK1iQ7qUsSWFc", + 10000000000000000 + ], + [ + "5Ck5SLSHYac6WFt5UZRSsdJjwmpSZq85fd5TRNAdZQVzEAPT", + 10000000000000000 + ], + [ + "5HKPmK9GYtE1PSLsS1qiYU9xQ9Si1NcEhdeCq9sw5bqu4ns8", + 10000000000000000 + ], + [ + "5FCfAonRZgTFrTd9HREEyeJjDpT397KMzizE6T3DvebLFE7n", + 10000000000000000 + ], + [ + "5CRmqmsiNFExV6VbdmPJViVxrWmkaXXvBrSX8oqBT8R9vmWk", + 10000000000000000 + ] + ] + }, + "configuration": { + "config": { + "approval_voting_params": { + "max_approval_coalesce_count": 1 + }, + "async_backing_params": { + "allowed_ancestry_len": 2, + "max_candidate_depth": 3 + }, + "code_retention_period": 1200, + "dispute_period": 6, + "dispute_post_conclusion_acceptance_period": 100, + "executor_params": [ + { + "MaxMemoryPages": 8192 + }, + { + "PvfExecTimeout": [ + "Backing", + 2500 + ] + }, + { + "PvfExecTimeout": [ + "Approval", + 15000 + ] + } + ], + "hrmp_channel_max_capacity": 1000, + "hrmp_channel_max_message_size": 1048576, + "hrmp_channel_max_total_size": 102400, + "hrmp_max_message_num_per_candidate": 10, + "hrmp_max_parachain_inbound_channels": 10, + "hrmp_max_parachain_outbound_channels": 10, + "hrmp_recipient_deposit": 0, + "hrmp_sender_deposit": 0, + "max_code_size": 3145728, + "max_downward_message_size": 1048576, + "max_head_data_size": 32768, + "max_pov_size": 5242880, + "max_upward_message_num_per_candidate": 16, + "max_upward_message_size": 51200, + "max_upward_queue_count": 174172, + "max_upward_queue_size": 1048576, + "max_validators": null, + "minimum_backing_votes": 1, + "minimum_validation_upgrade_delay": 5, + "n_delay_tranches": 25, + "needed_approvals": 2, + "no_show_slots": 2, + "node_features": { + "bits": 0, + "data": [], + "head": { + "index": 0, + "width": 8 + }, + "order": "bitvec::order::Lsb0" + }, + "pvf_voting_ttl": 2, + "relay_vrf_modulo_samples": 2, + "scheduler_params": { + "group_rotation_frequency": 20, + "lookahead": 3, + "max_availability_timeouts": 0, + "max_validators_per_core": null, + "num_cores": 0, + "on_demand_base_fee": 10000000, + "on_demand_fee_variability": 30000000, + "on_demand_queue_max_size": 10000, + "on_demand_target_queue_utilization": 250000000, + "paras_availability_period": 4, + "ttl": 5 + }, + "validation_upgrade_cooldown": 2, + "validation_upgrade_delay": 2, + "zeroth_delay_tranche_width": 0 + } + }, + "session": { + "keys": [ + [ + "5GNJqTPyNqANBkUVMN1LPPrxXnFouWXoe2wNSmmEoLctxiZY", + "5GNJqTPyNqANBkUVMN1LPPrxXnFouWXoe2wNSmmEoLctxiZY", + { + "authority_discovery": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY", + "babe": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY", + "beefy": "KW39r9CJjAVzmkf9zQ4YDb2hqfAVGdRqn53eRqyruqpxAP5YL", + "grandpa": "5FA9nQDVg267DEd8m1ZypXLBnvN7SFxYwV7ndqSYGiN9TTpu", + "para_assignment": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY", + "para_validator": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY" + } + ], + [ + "5HpG9w8EBLe5XCrbczpwq5TSXvedjrBGCwqxK1iQ7qUsSWFc", + "5HpG9w8EBLe5XCrbczpwq5TSXvedjrBGCwqxK1iQ7qUsSWFc", + { + "authority_discovery": "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty", + "babe": "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty", + "beefy": "KWByAN7WfZABWS5AoWqxriRmF5f2jnDqy3rB5pfHLGkY93ibN", + "grandpa": "5GoNkf6WdbxCFnPdAnYYQyCjAKPJgLNxXwPjwTh6DGg6gN3E", + "para_assignment": "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty", + "para_validator": "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty" + } + ] + ] + }, + "staking": { + "forceEra": "NotForcing", + "invulnerables": [ + "5GNJqTPyNqANBkUVMN1LPPrxXnFouWXoe2wNSmmEoLctxiZY", + "5HpG9w8EBLe5XCrbczpwq5TSXvedjrBGCwqxK1iQ7qUsSWFc" + ], + "minimumValidatorCount": 1, + "slashRewardFraction": 100000000, + "stakers": [ + [ + "5GNJqTPyNqANBkUVMN1LPPrxXnFouWXoe2wNSmmEoLctxiZY", + "5GNJqTPyNqANBkUVMN1LPPrxXnFouWXoe2wNSmmEoLctxiZY", + 1000000000000, + "Validator" + ], + [ + "5HpG9w8EBLe5XCrbczpwq5TSXvedjrBGCwqxK1iQ7qUsSWFc", + "5HpG9w8EBLe5XCrbczpwq5TSXvedjrBGCwqxK1iQ7qUsSWFc", + 1000000000000, + "Validator" + ] + ], + "validatorCount": 2 + }, + "sudo": { + "key": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY" + } + } + } + } +} \ No newline at end of file